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 1vyWCc-000BBt-2p for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 14:30:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyWCb-005N0p-12 for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 14:30:53 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyWCa-005N0e-1t for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 14:30:53 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vyWCW-00000001CGD-0oTU for pgsql-hackers@postgresql.org; Fri, 06 Mar 2026 14:30:52 +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 4fS82n4MXHz49Q69; Fri, 06 Mar 2026 16:30:41 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772807442; 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=LLFvBkSri0wBmuxPbXz63ZusQYXdZ8TtxpAQOrJdgkc=; b=B8P0plL4kcKGkaQA3ESDXvx+AUZDV/PGUp1dWan0Ll/gOe0TgzziBq7/JXPCDPdLsIwMVM ShAj0w23exiwLjxQVEA6XsGFPV023wl7KDHqHTzUutB8w2qW/Pjedj+PdTFWsbpF6Fbkgt vSTg9XpQALov8+keaH0P45ucBbzJHmAaqDFPrkzUE+RfL+STLMkR6yRotc7yh//r0P2/Mo wG4kVVle41G0K6HunDOXiXJZ6mcMRGPO5e7EElnNqmVifoYrgAEz/RmxmVPaSe/5bwZ/YX Ts3FjQlQf6Xb4tdBzjSHOq19owRjscbjI0NYa9DfkNbrprmhY6xJG8SmdT0Dfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772807442; 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=LLFvBkSri0wBmuxPbXz63ZusQYXdZ8TtxpAQOrJdgkc=; b=Dms+vOqzDppWcxYbYZSU9IBaaY3M7CfnhfMfpu4Y46WbNzMN09EGtLoXZ6i8TJYo++4lQ8 443WDKXRSjpVwzuFtRU/vJzfb4FbGNZXtEb9ulhkBMv2Yx5gCkjHoyNcw8WuEe3gACqDZJ 7uVC0bpNXpoJQw3aM/fmqK6jWKU60o4Q1j5j+IPkzhjoXV3rnO6aNyORAOID0iQ5qfK6eH lm481jMNGrjgs70PbmRnTRPHZUUp+1PcmVIGFvwu4GYZeX3ctvZgMsx47UxrG8oWH3gx82 2MKGZylYXF9uY8N8A81bwPjvcWD7yVdRkxaexJx5KIA6tf7leVh2omlDmhp43g== 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=1772807442; b=T2uAURjUoJwDIn/gZ0BqkJrSbNLkO4lPKZufbvsd1A2t/bg8At59sGGNBr9SX4GS5XRmjY wjM2BoSbSXc9wDjaJIUuqsJ+223qOeV9LpAFp9y/JMjjk/n0XLLsq8FiTDWx7XXRKRlzAT ws2RewHHuTvL0S+GiUZHyZ5/JYTEGr9GJd+P+KyNNMe9dKOEajAc6dweKn48sZRH0z9fLb mrmfdKSF46/piuMKX9c09np90PROu6ZsroGX2CViYYvoFJPMjK0cuC66ePVjbLwMH0c25P kE9Pq2KdsrblB6O0njpTnX9KNJHIA867+pIL5C98VLkFthIfnJLgGvoEZCAZFg== Content-Type: multipart/mixed; boundary="------------q01luzhinYR3hIjKSuMMW8ZM" Message-ID: Date: Fri, 6 Mar 2026 16:30:37 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Interrupts vs signals From: Heikki Linnakangas To: Andres Freund Cc: Thomas Munro , Michael Paquier , Robert Haas , Fujii Masao , pgsql-hackers References: <8a0ff52f-de8e-49d2-a3af-ea5bc12f5b97@iki.fi> <4ddab51d-e932-40c5-b6fa-18c52db0e082@iki.fi> <08382e5c-a820-4aca-90ac-fab50cd4599c@iki.fi> <818bafaf-1e77-4c78-8037-d7120878d87c@iki.fi> <78c102b3-f1a6-4c70-a46f-2f04221b6193@iki.fi> Content-Language: en-US In-Reply-To: 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. --------------q01luzhinYR3hIjKSuMMW8ZM Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 20/02/2026 16:22, Heikki Linnakangas wrote: > On 18/02/2026 02:11, Heikki Linnakangas wrote: >> On 14/02/2026 23:56, Andres Freund wrote: >>> Could we have the mask of interrupts that WaitInterrupt() is waiting >>> for in a >>> second variable? That way we could avoid interrupting WaitInterrupt() >>> when >>> raising or sending a signal that WaitInterrupt() is not waiting for. >>> I think >>> that can be one race-freely with a bit of care? >> >> Yeah, I thought of that, but I'm not sure what the right tradeoff here >> is. I doubt the spurious wakeups matter much in practice. Then again, >> maybe it's not much more complicated, so maybe I should try that. >> >> Now with this new version, the same consideration applies to the >> CFI_ATTENTION flag I added. We could expose a process's >> CheckForInterruptsMask alongside the pending interrupts, so it would >> be SendInterrupt()'s responsibility to check if the receiving >> backend's CheckForInterruptsMask includes the interrupt that's being >> sent. That would similarly eliminate the "false positive" >> ProcessInterrupts() calls from CHECK_FOR_INTERRUPTS(), by moving the >> logic to the senders. The SLEEPING_ON_INTERRUPTS and CFI_ATTENTION >> flags are quite symmetrical. > > I tried that approach, exposing an "attention bitmask" where a backend > advertises which interrupts it's currently interested in. I think I like > it. > > Patch attached. The relevant changes for this "attention mechanism" are > in the last patch, but there are some other small changes too so this > split into patches is a little messy. I moved the list of standard > interrupts to a separate header file, for example. So for reviewing, I > recommend reading the resulting interrupt.h and interrupt.c files after > applying all the patches, instead of trying to read the diff for those. Here's another rebase, no other changes. - Heikki --------------q01luzhinYR3hIjKSuMMW8ZM Content-Type: text/x-patch; charset=UTF-8; name="v12-0001-Refactor-how-some-aux-processes-advertise-their-.patch" Content-Disposition: attachment; filename*0="v12-0001-Refactor-how-some-aux-processes-advertise-their-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NmUwNWU0OTczNzQ0NjM0MDYxNWE3OTY4YzdkNDA3NDk1MTIyN2Q1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgRmViIDIwMjYgMTQ6MjM6MzUgKzAyMDAK U3ViamVjdDogW1BBVENIIHYxMiAxLzRdIFJlZmFjdG9yIGhvdyBzb21lIGF1eCBwcm9jZXNz ZXMgYWR2ZXJ0aXNlIHRoZWlyCiBQcm9jTnVtYmVyCgpUaGlzIG1vdmVzIHRoZSByZXNwb25z aWJpbGl0eSBvZiBzZXR0aW5nIHRoZQpQcm9jR2xvYmFsLT53YWxyZXdyaXRlclByb2MgYW5k IGNoZWNrcG9pbnRlclByb2MgZmllbGRzIHRvCkluaXRBdXhpbGlhcnlQcm9jZXNzLiBBbHNv IHN3aXRjaCB0byB0aGUgc2FtZSBwYXR0ZXJuIHRvIGFkdmVydGlzZSB0aGUKYXV0b3ZhY3V1 bSBsYXVuY2hlcidzIFByb2NOdW1iZXIsIHJlcGxhY2luZyB0aGUgYWQgaG9jIGF2X2xhdW5j aGVycGlkCmZpZWxkIGluIHNoYXJlZCBtZW1vcnkuIFRoaXMgY2FuIGVhc2lseSBiZSBleHRl bmRlZCB0byBvdGhlciBhdXgKcHJvY2Vzc2VzIGluIHRoZSBmdXR1cmUsIGlmIG90aGVyIHBy b2Nlc3NlcyBuZWVkIHRvIGZpbmQgdGhlbS4KClN3aXRjaCB0byBwZ19hdG9taWNfdWludDMy IGZvciB0aGUgZmllbGRzLiBTZWVtcyBlYXNpZXIgdG8gcmVhc29uCmFib3V0IHRoYW4gdm9s YXRpbGUgcG9pbnRlcnMuIFRoZXJlIHdhcyBzb21lIHByZWNlZGVuY2UgZm9yIHRoYXQsIGFz CndlcmUgYWxyZWFkeSB1c2luZyBwZ19hdG9taWNfdWludDMyIGZvciB0aGUgcHJvY0FycmF5 R3JvdXBGaXJzdCBhbmQKY2xvZ0dyb3VwRmlyc3QgZmllbGRzLCB3aGljaCBhbHNvIHN0b3Jl IFByb2NOdW1iZXJzLgoKVE9ETzogY291bGQgYWxzbyByZXBsYWNlIFdhbFJlY3YtPnByb2Nu byB3aXRoIHRoaXMKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgICAg IHwgIDMgKy0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyAgIHwgMTkg KysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVy LmMgfCAxNCArKysrLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRl ci5jICAgIHwgIDYgLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAg ICAgIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2MuaCAgICAgICAgICAgIHwgIDcgKysrKy0tLQogNiBmaWxlcyBjaGFuZ2VkLCA0 NyBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMKaW5kZXggMzU0YWM2NDViZGMuLjEyOWJiMjI0ZDdkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jCkBAIC0yNjM2LDggKzI2MzYsNyBAQCBYTG9nU2V0QXN5bmNY YWN0TFNOKFhMb2dSZWNQdHIgYXN5bmNYYWN0TFNOKQogCiAJaWYgKHdha2V1cCkKIAl7Ci0J CXZvbGF0aWxlIFBST0NfSERSICpwcm9jZ2xvYmFsID0gUHJvY0dsb2JhbDsKLQkJUHJvY051 bWJlcgl3YWx3cml0ZXJQcm9jID0gcHJvY2dsb2JhbC0+d2Fsd3JpdGVyUHJvYzsKKwkJUHJv Y051bWJlcgl3YWx3cml0ZXJQcm9jID0gcGdfYXRvbWljX3JlYWRfdTMyKCZQcm9jR2xvYmFs LT53YWx3cml0ZXJQcm9jKTsKIAogCQlpZiAod2Fsd3JpdGVyUHJvYyAhPSBJTlZBTElEX1BS T0NfTlVNQkVSKQogCQkJU2V0TGF0Y2goJkdldFBHUHJvY0J5TnVtYmVyKHdhbHdyaXRlclBy b2MpLT5wcm9jTGF0Y2gpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwppbmRl eCA2ZmRlNzQwNDY1Zi4uNWQ0ZWVhNGExZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5jCkBAIC0yNzcsNyArMjc3LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQXV0b1ZhY3V1 bVdvcmtJdGVtCiAgKiBzdHJ1Y3QgYW5kIHRoZSBhcnJheSBvZiBXb3JrZXJJbmZvIHN0cnVj dHMuICBUaGlzIHN0cnVjdCBrZWVwczoKICAqCiAgKiBhdl9zaWduYWwJCXNldCBieSBvdGhl ciBwcm9jZXNzZXMgdG8gaW5kaWNhdGUgdmFyaW91cyBjb25kaXRpb25zCi0gKiBhdl9sYXVu Y2hlcnBpZAl0aGUgUElEIG9mIHRoZSBhdXRvdmFjdXVtIGxhdW5jaGVyCiAgKiBhdl9mcmVl V29ya2Vycwl0aGUgV29ya2VySW5mbyBmcmVlbGlzdAogICogYXZfcnVubmluZ1dvcmtlcnMg dGhlIFdvcmtlckluZm8gbm9uLWZyZWUgcXVldWUKICAqIGF2X3N0YXJ0aW5nV29ya2VyIHBv aW50ZXIgdG8gV29ya2VySW5mbyBjdXJyZW50bHkgYmVpbmcgc3RhcnRlZCAoY2xlYXJlZCBi eQpAQCAtMjkzLDcgKzI5Miw2IEBAIHR5cGVkZWYgc3RydWN0IEF1dG9WYWN1dW1Xb3JrSXRl bQogdHlwZWRlZiBzdHJ1Y3QKIHsKIAlzaWdfYXRvbWljX3QgYXZfc2lnbmFsW0F1dG9WYWNO dW1TaWduYWxzXTsKLQlwaWRfdAkJYXZfbGF1bmNoZXJwaWQ7CiAJZGNsaXN0X2hlYWQgYXZf ZnJlZVdvcmtlcnM7CiAJZGxpc3RfaGVhZAlhdl9ydW5uaW5nV29ya2VyczsKIAlXb3JrZXJJ bmZvCWF2X3N0YXJ0aW5nV29ya2VyOwpAQCAtNTY0LDggKzU2Miw2IEBAIEF1dG9WYWNMYXVu Y2hlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRh X2xlbikKIAkJcHJvY19leGl0KDApOwkJCS8qIGRvbmUgKi8KIAl9CiAKLQlBdXRvVmFjdXVt U2htZW0tPmF2X2xhdW5jaGVycGlkID0gTXlQcm9jUGlkOwotCiAJLyoKIAkgKiBDcmVhdGUg dGhlIGluaXRpYWwgZGF0YWJhc2UgbGlzdC4gIFRoZSBpbnZhcmlhbnQgd2Ugd2FudCB0aGlz IGxpc3QgdG8KIAkgKiBrZWVwIGlzIHRoYXQgaXQncyBvcmRlcmVkIGJ5IGRlY3JlYXNpbmcg bmV4dF93b3JrZXIuICBBcyBzb29uIGFzIGFuCkBAIC03OTksOCArNzk1LDYgQEAgQXV0b1Zh Y0xhdW5jaGVyU2h1dGRvd24odm9pZCkKIHsKIAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJt c2dfaW50ZXJuYWwoImF1dG92YWN1dW0gbGF1bmNoZXIgc2h1dHRpbmcgZG93biIpKSk7Ci0J QXV0b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hlcnBpZCA9IDA7Ci0KIAlwcm9jX2V4aXQoMCk7 CQkJCS8qIGRvbmUgKi8KIH0KIApAQCAtMTUzMSw2ICsxNTI1LDggQEAgQXV0b1ZhY1dvcmtl ck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xl bikKIAkgKi8KIAlpZiAoQXV0b1ZhY3V1bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlciAhPSBO VUxMKQogCXsKKwkJUHJvY051bWJlcglsYXVuY2hlclByb2M7CisKIAkJTXlXb3JrZXJJbmZv ID0gQXV0b1ZhY3V1bVNobWVtLT5hdl9zdGFydGluZ1dvcmtlcjsKIAkJZGJpZCA9IE15V29y a2VySW5mby0+d2lfZGJvaWQ7CiAJCU15V29ya2VySW5mby0+d2lfcHJvYyA9IE15UHJvYzsK QEAgLTE1NDksOCArMTU0NSwxNCBAQCBBdXRvVmFjV29ya2VyTWFpbihjb25zdCB2b2lkICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQlvbl9zaG1lbV9leGl0 KEZyZWVXb3JrZXJJbmZvLCAwKTsKIAogCQkvKiB3YWtlIHVwIHRoZSBsYXVuY2hlciAqLwot CQlpZiAoQXV0b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hlcnBpZCAhPSAwKQotCQkJa2lsbChB dXRvVmFjdXVtU2htZW0tPmF2X2xhdW5jaGVycGlkLCBTSUdVU1IyKTsKKwkJbGF1bmNoZXJQ cm9jID0gcGdfYXRvbWljX3JlYWRfdTMyKCZQcm9jR2xvYmFsLT5hdkxhdW5jaGVyUHJvYyk7 CisJCWlmIChsYXVuY2hlclByb2MgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKKwkJeworCQkJ aW50CQkJcGlkID0gR2V0UEdQcm9jQnlOdW1iZXIobGF1bmNoZXJQcm9jKS0+cGlkOworCisJ CQlpZiAocGlkICE9IDApCisJCQkJa2lsbChwaWQsIFNJR1VTUjIpOworCQl9CiAJfQogCWVs c2UKIAl7CkBAIC0zMzkzLDcgKzMzOTUsNiBAQCBBdXRvVmFjdXVtU2htZW1Jbml0KHZvaWQp CiAKIAkJQXNzZXJ0KCFmb3VuZCk7CiAKLQkJQXV0b1ZhY3V1bVNobWVtLT5hdl9sYXVuY2hl cnBpZCA9IDA7CiAJCWRjbGlzdF9pbml0KCZBdXRvVmFjdXVtU2htZW0tPmF2X2ZyZWVXb3Jr ZXJzKTsKIAkJZGxpc3RfaW5pdCgmQXV0b1ZhY3V1bVNobWVtLT5hdl9ydW5uaW5nV29ya2Vy cyk7CiAJCUF1dG9WYWN1dW1TaG1lbS0+YXZfc3RhcnRpbmdXb3JrZXIgPSBOVUxMOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKaW5kZXggZTAzYzE5MTIzYmMuLmYx NDM5ZDlhMzYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9p bnRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKQEAg LTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvcnQvYXRv bWljcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUg InBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVw dC5oIgpAQCAtMzQ4LDEyICszNDksNiBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0IHZvaWQg KnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJICovCiAJVXBkYXRl U2hhcmVkTWVtb3J5Q29uZmlnKCk7CiAKLQkvKgotCSAqIEFkdmVydGlzZSBvdXIgcHJvYyBu dW1iZXIgdGhhdCBiYWNrZW5kcyBjYW4gdXNlIHRvIHdha2UgdXMgdXAgd2hpbGUKLQkgKiB3 ZSdyZSBzbGVlcGluZy4KLQkgKi8KLQlQcm9jR2xvYmFsLT5jaGVja3BvaW50ZXJQcm9jID0g TXlQcm9jTnVtYmVyOwotCiAJLyoKIAkgKiBMb29wIHVudGlsIHdlJ3ZlIGJlZW4gYXNrZWQg dG8gd3JpdGUgdGhlIHNodXRkb3duIGNoZWNrcG9pbnQgb3IKIAkgKiB0ZXJtaW5hdGUuCkBA IC0xMTI1LDcgKzExMjAsNyBAQCBSZXF1ZXN0Q2hlY2twb2ludChpbnQgZmxhZ3MpCiAJZm9y IChudHJpZXMgPSAwOzsgbnRyaWVzKyspCiAJewogCQl2b2xhdGlsZSBQUk9DX0hEUiAqcHJv Y2dsb2JhbCA9IFByb2NHbG9iYWw7Ci0JCVByb2NOdW1iZXIJY2hlY2twb2ludGVyUHJvYyA9 IHByb2NnbG9iYWwtPmNoZWNrcG9pbnRlclByb2M7CisJCVByb2NOdW1iZXIJY2hlY2twb2lu dGVyUHJvYyA9IHBnX2F0b21pY19yZWFkX3UzMigmcHJvY2dsb2JhbC0+Y2hlY2twb2ludGVy UHJvYyk7CiAKIAkJaWYgKGNoZWNrcG9pbnRlclByb2MgPT0gSU5WQUxJRF9QUk9DX05VTUJF UikKIAkJewpAQCAtMTI2Niw4ICsxMjYxLDcgQEAgRm9yd2FyZFN5bmNSZXF1ZXN0KGNvbnN0 IEZpbGVUYWcgKmZ0YWcsIFN5bmNSZXF1ZXN0VHlwZSB0eXBlKQogCS8qIC4uLiBidXQgbm90 IHRpbGwgYWZ0ZXIgd2UgcmVsZWFzZSB0aGUgbG9jayAqLwogCWlmICh0b29fZnVsbCkKIAl7 Ci0JCXZvbGF0aWxlIFBST0NfSERSICpwcm9jZ2xvYmFsID0gUHJvY0dsb2JhbDsKLQkJUHJv Y051bWJlcgljaGVja3BvaW50ZXJQcm9jID0gcHJvY2dsb2JhbC0+Y2hlY2twb2ludGVyUHJv YzsKKwkJUHJvY051bWJlcgljaGVja3BvaW50ZXJQcm9jID0gcGdfYXRvbWljX3JlYWRfdTMy KCZQcm9jR2xvYmFsLT5jaGVja3BvaW50ZXJQcm9jKTsKIAogCQlpZiAoY2hlY2twb2ludGVy UHJvYyAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQogCQkJU2V0TGF0Y2goJkdldFBHUHJvY0J5 TnVtYmVyKGNoZWNrcG9pbnRlclByb2MpLT5wcm9jTGF0Y2gpOwpAQCAtMTU0OCw3ICsxNTQy LDcgQEAgdm9pZAogV2FrZXVwQ2hlY2twb2ludGVyKHZvaWQpCiB7CiAJdm9sYXRpbGUgUFJP Q19IRFIgKnByb2NnbG9iYWwgPSBQcm9jR2xvYmFsOwotCVByb2NOdW1iZXIJY2hlY2twb2lu dGVyUHJvYyA9IHByb2NnbG9iYWwtPmNoZWNrcG9pbnRlclByb2M7CisJUHJvY051bWJlcglj aGVja3BvaW50ZXJQcm9jID0gcGdfYXRvbWljX3JlYWRfdTMyKCZwcm9jZ2xvYmFsLT5jaGVj a3BvaW50ZXJQcm9jKTsKIAogCWlmIChjaGVja3BvaW50ZXJQcm9jICE9IElOVkFMSURfUFJP Q19OVU1CRVIpCiAJCVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJlcihjaGVja3BvaW50ZXJQ cm9jKS0+cHJvY0xhdGNoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv d2Fsd3JpdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jCmluZGV4 IDdjMGUyODA5YzE3Li5hMGVkMWU2MTQyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci93YWx3cml0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdy aXRlci5jCkBAIC0yMDUsMTIgKzIwNSw2IEBAIFdhbFdyaXRlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAloaWJlcm5hdGluZyA9 IGZhbHNlOwogCVNldFdhbFdyaXRlclNsZWVwaW5nKGZhbHNlKTsKIAotCS8qCi0JICogQWR2 ZXJ0aXNlIG91ciBwcm9jIG51bWJlciB0aGF0IGJhY2tlbmRzIGNhbiB1c2UgdG8gd2FrZSB1 cyB1cCB3aGlsZQotCSAqIHdlJ3JlIHNsZWVwaW5nLgotCSAqLwotCVByb2NHbG9iYWwtPndh bHdyaXRlclByb2MgPSBNeVByb2NOdW1iZXI7Ci0KIAkvKgogCSAqIExvb3AgZm9yZXZlcgog CSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggY2NmOWRlMGU2N2MuLmUwMDFj YjExODAzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTIxMSw4ICsyMTEsOSBA QCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCWRsaXN0X2luaXQoJlByb2NHbG9iYWwtPmJnd29y a2VyRnJlZVByb2NzKTsKIAlkbGlzdF9pbml0KCZQcm9jR2xvYmFsLT53YWxzZW5kZXJGcmVl UHJvY3MpOwogCVByb2NHbG9iYWwtPnN0YXJ0dXBCdWZmZXJQaW5XYWl0QnVmSWQgPSAtMTsK LQlQcm9jR2xvYmFsLT53YWx3cml0ZXJQcm9jID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKLQlQ cm9jR2xvYmFsLT5jaGVja3BvaW50ZXJQcm9jID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwlw Z19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPmF2TGF1bmNoZXJQcm9jLCBJTlZBTElE X1BST0NfTlVNQkVSKTsKKwlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPndhbHdy aXRlclByb2MsIElOVkFMSURfUFJPQ19OVU1CRVIpOworCXBnX2F0b21pY19pbml0X3UzMigm UHJvY0dsb2JhbC0+Y2hlY2twb2ludGVyUHJvYywgSU5WQUxJRF9QUk9DX05VTUJFUik7CiAJ cGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5wcm9jQXJyYXlHcm91cEZpcnN0LCBJ TlZBTElEX1BST0NfTlVNQkVSKTsKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwt PmNsb2dHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIApAQCAtNzExLDYgKzcx MiwxNCBAQCBJbml0QXV4aWxpYXJ5UHJvY2Vzcyh2b2lkKQogCSAqLwogCVBHU2VtYXBob3Jl UmVzZXQoTXlQcm9jLT5zZW0pOwogCisJLyogU29tZSBhdXggcHJvY2Vzc2VzIGFyZSBhbHNv IGFkdmVydGlzZWQgaW4gUHJvY0dsb2JhbCAqLworCWlmIChNeUJhY2tlbmRUeXBlID09IEJf QVVUT1ZBQ19MQVVOQ0hFUikKKwkJcGdfYXRvbWljX3dyaXRlX3UzMigmUHJvY0dsb2JhbC0+ YXZMYXVuY2hlclByb2MsIE15UHJvY051bWJlcik7CisJaWYgKE15QmFja2VuZFR5cGUgPT0g Ql9XQUxfV1JJVEVSKQorCQlwZ19hdG9taWNfd3JpdGVfdTMyKCZQcm9jR2xvYmFsLT53YWx3 cml0ZXJQcm9jLCBNeVByb2NOdW1iZXIpOworCWlmIChNeUJhY2tlbmRUeXBlID09IEJfQ0hF Q0tQT0lOVEVSKQorCQlwZ19hdG9taWNfd3JpdGVfdTMyKCZQcm9jR2xvYmFsLT5jaGVja3Bv aW50ZXJQcm9jLCBNeVByb2NOdW1iZXIpOworCiAJLyoKIAkgKiBBcnJhbmdlIHRvIGNsZWFu IHVwIGF0IHByb2Nlc3MgZXhpdC4KIAkgKi8KQEAgLTEwNTUsNiArMTA2NCwyMyBAQCBBdXhp bGlhcnlQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKQogCVN3aXRjaEJhY2tUb0xvY2Fs TGF0Y2goKTsKIAlwZ3N0YXRfcmVzZXRfd2FpdF9ldmVudF9zdG9yYWdlKCk7CiAKKwkvKiBJ ZiB0aGlzIHdhcyBvbmUgb2YgYXV4IHByb2Nlc3NlcyBhZHZlcnRpc2VkIGluIFByb2NHbG9i YWwsIGNsZWFyIGl0ICovCisJaWYgKE15QmFja2VuZFR5cGUgPT0gQl9BVVRPVkFDX0xBVU5D SEVSKQorCXsKKwkJQXNzZXJ0KHBnX2F0b21pY19yZWFkX3UzMigmUHJvY0dsb2JhbC0+YXZM YXVuY2hlclByb2MpID09IE15UHJvY051bWJlcik7CisJCXBnX2F0b21pY193cml0ZV91MzIo JlByb2NHbG9iYWwtPmF2TGF1bmNoZXJQcm9jLCBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwl9 CisJaWYgKE15QmFja2VuZFR5cGUgPT0gQl9XQUxfV1JJVEVSKQorCXsKKwkJQXNzZXJ0KHBn X2F0b21pY19yZWFkX3UzMigmUHJvY0dsb2JhbC0+d2Fsd3JpdGVyUHJvYykgPT0gTXlQcm9j TnVtYmVyKTsKKwkJcGdfYXRvbWljX3dyaXRlX3UzMigmUHJvY0dsb2JhbC0+d2Fsd3JpdGVy UHJvYywgSU5WQUxJRF9QUk9DX05VTUJFUik7CisJfQorCWlmIChNeUJhY2tlbmRUeXBlID09 IEJfQ0hFQ0tQT0lOVEVSKQorCXsKKwkJQXNzZXJ0KHBnX2F0b21pY19yZWFkX3UzMigmUHJv Y0dsb2JhbC0+Y2hlY2twb2ludGVyUHJvYykgPT0gTXlQcm9jTnVtYmVyKTsKKwkJcGdfYXRv bWljX3dyaXRlX3UzMigmUHJvY0dsb2JhbC0+Y2hlY2twb2ludGVyUHJvYywgSU5WQUxJRF9Q Uk9DX05VTUJFUik7CisJfQorCiAJcHJvYyA9IE15UHJvYzsKIAlNeVByb2MgPSBOVUxMOwog CU15UHJvY051bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCmlu ZGV4IDNmODk0NTBjMjE2Li40YTFmYWZiOTAzOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAgLTQ4 OCwxMSArNDg4LDEyIEBAIHR5cGVkZWYgc3RydWN0IFBST0NfSERSCiAJcGdfYXRvbWljX3Vp bnQzMiBjbG9nR3JvdXBGaXJzdDsKIAogCS8qCi0JICogQ3VycmVudCBzbG90IG51bWJlcnMg b2Ygc29tZSBhdXhpbGlhcnkgcHJvY2Vzc2VzLiBUaGVyZSBjYW4gYmUgb25seSBvbmUKKwkg KiBDdXJyZW50IHByb2MgbnVtYmVycyBvZiBzb21lIGF1eGlsaWFyeSBwcm9jZXNzZXMuIFRo ZXJlIGNhbiBiZSBvbmx5IG9uZQogCSAqIG9mIGVhY2ggb2YgdGhlc2UgcnVubmluZyBhdCBh IHRpbWUuCiAJICovCi0JUHJvY051bWJlcgl3YWx3cml0ZXJQcm9jOwotCVByb2NOdW1iZXIJ Y2hlY2twb2ludGVyUHJvYzsKKwlwZ19hdG9taWNfdWludDMyIGF2TGF1bmNoZXJQcm9jOwor CXBnX2F0b21pY191aW50MzIgd2Fsd3JpdGVyUHJvYzsKKwlwZ19hdG9taWNfdWludDMyIGNo ZWNrcG9pbnRlclByb2M7CiAKIAkvKiBDdXJyZW50IHNoYXJlZCBlc3RpbWF0ZSBvZiBhcHBy b3ByaWF0ZSBzcGluc19wZXJfZGVsYXkgdmFsdWUgKi8KIAlpbnQJCQlzcGluc19wZXJfZGVs YXk7Ci0tIAoyLjQ3LjMKCg== --------------q01luzhinYR3hIjKSuMMW8ZM Content-Type: text/x-patch; charset=UTF-8; name="v12-0002-Centralize-resetting-SIGCHLD-handler.patch" Content-Disposition: attachment; filename="v12-0002-Centralize-resetting-SIGCHLD-handler.patch" Content-Transfer-Encoding: base64 RnJvbSAyNjE2ODk0ZDU0NmQ5NGU3OTBkYzI5NGM5NTBmNDI1MTA1ZjczODJhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgOCBKYW4gMjAyNiAyMDoyMjo0MyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjEyIDIvNF0gQ2VudHJhbGl6ZSByZXNldHRpbmcgU0lHQ0hMRCBo YW5kbGVyCgotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAg ICB8ICAyIC0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAg fCAgMSAtCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMgICAgICAgICAgfCAg NSAtLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyAgICAgIHwg IDUgLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgICAgICAgICAgICB8 ICAzIC0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMgICAgICAgICAgIHwg IDUgLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmMgICAgICAgICB8 ICA1IC0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyAgICAg fCAgNSAtLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYyAgICAgICAg IHwgIDUgLS0tLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMu YyB8ICAxIC0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMgICAgICB8 ICAzIC0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgICAgICAgIHwg IDMgLS0tCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgfCAg NyAtLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgICAgICAgICAg fCAxNCArKysrKysrKysrKysrKwogMTQgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygr KSwgNTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwpp bmRleCA1ZDRlZWE0YTFlMy4uMGE3MzBmYjViNDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv YXV0b3ZhY3V1bS5jCkBAIC00MDksNyArNDA5LDYgQEAgQXV0b1ZhY0xhdW5jaGVyTWFpbihj b25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXBx c2lnbmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKIAlwcXNpZ25h bChTSUdVU1IyLCBhdmxfc2lndXNyMl9oYW5kbGVyKTsKIAlwcXNpZ25hbChTSUdGUEUsIEZs b2F0RXhjZXB0aW9uSGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CiAK IAkvKgogCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVk IG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcwpAQCAtMTQxNiw3ICsxNDE1LDYgQEAgQXV0b1Zh Y1dvcmtlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9k YXRhX2xlbikKIAlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxl cik7CiAJcHFzaWduYWwoU0lHVVNSMiwgU0lHX0lHTik7CiAJcHFzaWduYWwoU0lHRlBFLCBG bG9hdEV4Y2VwdGlvbkhhbmRsZXIpOwotCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwog CiAJLyoKIAkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJl ZCBtZW1vcnkuICBXZSBtdXN0IGRvIHRoaXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIu YwppbmRleCA4Njc4ZWE0ZTEzOS4uMTMzYWY1YWVlOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2Jnd29ya2VyLmMKQEAgLTc4MSw3ICs3ODEsNiBAQCBCYWNrZ3JvdW5kV29ya2VyTWFpbihj b25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCiAJ cHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CiAJcHFzaWduYWwoU0lHVVNSMiwgU0lHX0lH Tik7Ci0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CiAKIAkvKgogCSAqIElmIGFuIGV4 Y2VwdGlvbiBpcyBlbmNvdW50ZXJlZCwgcHJvY2Vzc2luZyByZXN1bWVzIGhlcmUuCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKaW5kZXggMDk1NmJkMzlhODUuLmRiZDY3MGMxNmNj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKKysrIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCkBAIC0xMDgsMTEgKzEwOCw2IEBA IEJhY2tncm91bmRXcml0ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1 c3IxX2hhbmRsZXIpOwogCXBxc2lnbmFsKFNJR1VTUjIsIFNJR19JR04pOwogCi0JLyoKLQkg KiBSZXNldCBzb21lIHNpZ25hbHMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgcG9zdG1hc3RlciBi dXQgbm90IGhlcmUKLQkgKi8KLQlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKLQogCS8q CiAJICogV2UganVzdCBzdGFydGVkLCBhc3N1bWUgdGhlcmUgaGFzIGJlZW4gZWl0aGVyIGEg c2h1dGRvd24gb3IKIAkgKiBlbmQtb2YtcmVjb3Zlcnkgc25hcHNob3QuCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwppbmRleCBmMTQzOWQ5YTM2My4uOTc4YTdkMGU2 NDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMK KysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwpAQCAtMjIxLDEx ICsyMjEsNiBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwg c2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25h bF9zaWd1c3IxX2hhbmRsZXIpOwogCXBxc2lnbmFsKFNJR1VTUjIsIFNpZ25hbEhhbmRsZXJG b3JTaHV0ZG93blJlcXVlc3QpOwogCi0JLyoKLQkgKiBSZXNldCBzb21lIHNpZ25hbHMgdGhh dCBhcmUgYWNjZXB0ZWQgYnkgcG9zdG1hc3RlciBidXQgbm90IGhlcmUKLQkgKi8KLQlwcXNp Z25hbChTSUdDSExELCBTSUdfREZMKTsKLQogCS8qCiAJICogSW5pdGlhbGl6ZSBzbyB0aGF0 IGZpcnN0IHRpbWUtZHJpdmVuIGV2ZW50IGhhcHBlbnMgYXQgdGhlIGNvcnJlY3QgdGltZS4K IAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IDgyNzMxZTQ1MmZjLi4xMGE1 ZWY5ZTE1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC0yMzcsOSArMjM3LDYg QEAgUGdBcmNoaXZlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKIAlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFf aGFuZGxlcik7CiAJcHFzaWduYWwoU0lHVVNSMiwgcGdhcmNoX3dha2VuX3N0b3ApOwogCi0J LyogUmVzZXQgc29tZSBzaWduYWxzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHBvc3RtYXN0ZXIg YnV0IG5vdCBoZXJlICovCi0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7Ci0KIAkvKiBV bmJsb2NrIHNpZ25hbHMgKHRoZXkgd2VyZSBibG9ja2VkIHdoZW4gdGhlIHBvc3RtYXN0ZXIg Zm9ya2VkIHVzKSAqLwogCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmVW5CbG9ja1NpZywg TlVMTCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMKaW5kZXggY2RiZTUzZGQyNjIu LjMzMGMxMGRkYjBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0 dXAuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYwpAQCAtMjM0LDEx ICsyMzQsNiBAQCBTdGFydHVwUHJvY2Vzc01haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRh LCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2ln bmFsX3NpZ3VzcjFfaGFuZGxlcik7CiAJcHFzaWduYWwoU0lHVVNSMiwgU3RhcnR1cFByb2NU cmlnZ2VySGFuZGxlcik7CiAKLQkvKgotCSAqIFJlc2V0IHNvbWUgc2lnbmFscyB0aGF0IGFy ZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1dCBub3QgaGVyZQotCSAqLwotCXBxc2lnbmFs KFNJR0NITEQsIFNJR19ERkwpOwotCiAJLyoKIAkgKiBSZWdpc3RlciB0aW1lb3V0cyBuZWVk ZWQgZm9yIHN0YW5kYnkgbW9kZQogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9zeXNsb2dnZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3lzbG9nZ2Vy LmMKaW5kZXggODZjNWUzNzZiNDAuLjg1MTViZmI5NjUzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvc3lzbG9nZ2VyLmMKQEAgLTI4MywxMSArMjgzLDYgQEAgU3lzTG9nZ2VyTWFpbihjb25z dCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXBxc2ln bmFsKFNJR1VTUjEsIHNpZ1VzcjFIYW5kbGVyKTsJLyogcmVxdWVzdCBsb2cgcm90YXRpb24g Ki8KIAlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKIAotCS8qCi0JICogUmVzZXQgc29t ZSBzaWduYWxzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IHBvc3RtYXN0ZXIgYnV0IG5vdCBoZXJl Ci0JICovCi0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7Ci0KIAlzaWdwcm9jbWFzayhT SUdfU0VUTUFTSywgJlVuQmxvY2tTaWcsIE5VTEwpOwogCiAjaWZkZWYgV0lOMzIKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKaW5kZXggNzQyMTM3ZWRhZDYuLjRl NGVlZDRkMDc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1h cml6ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpA QCAtMjYzLDExICsyNjMsNiBAQCBXYWxTdW1tYXJpemVyTWFpbihjb25zdCB2b2lkICpzdGFy dHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJCQkJCQkJQUxMT0NTRVRf REVGQVVMVF9TSVpFUyk7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHQpOwogCi0J LyoKLQkgKiBSZXNldCBzb21lIHNpZ25hbHMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgcG9zdG1h c3RlciBidXQgbm90IGhlcmUKLQkgKi8KLQlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsK LQogCS8qCiAJICogSWYgYW4gZXhjZXB0aW9uIGlzIGVuY291bnRlcmVkLCBwcm9jZXNzaW5n IHJlc3VtZXMgaGVyZS4KIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvd2Fsd3JpdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jCmlu ZGV4IGEwZWQxZTYxNDIwLi4xODUxNDE3YWQxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci93YWx3cml0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHdyaXRlci5jCkBAIC0xMDgsMTEgKzEwOCw2IEBAIFdhbFdyaXRlck1haW4oY29uc3Qgdm9p ZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlwcXNpZ25hbChT SUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CiAJcHFzaWduYWwoU0lHVVNS MiwgU0lHX0lHTik7IC8qIG5vdCB1c2VkICovCiAKLQkvKgotCSAqIFJlc2V0IHNvbWUgc2ln bmFscyB0aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1dCBub3QgaGVyZQotCSAq LwotCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwotCiAJLyoKIAkgKiBDcmVhdGUgYSBt ZW1vcnkgY29udGV4dCB0aGF0IHdlIHdpbGwgZG8gYWxsIG91ciB3b3JrIGluLiAgV2UgZG8g dGhpcyBzbwogCSAqIHRoYXQgd2UgY2FuIHJlc2V0IHRoZSBjb250ZXh0IGR1cmluZyBlcnJv ciByZWNvdmVyeSBhbmQgdGhlcmVieSBhdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9zbG90c3luYy5jCmluZGV4IDA2MmEwOGNjYjg4Li41ZTFlZTdlNDcyOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwpAQCAt MTUzNiw3ICsxNTM2LDYgQEAgUmVwbFNsb3RTeW5jV29ya2VyTWFpbihjb25zdCB2b2lkICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXBxc2lnbmFsKFNJR1VT UjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKIAlwcXNpZ25hbChTSUdVU1IyLCBT SUdfSUdOKTsKIAlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdD SExELCBTSUdfREZMKTsKIAogCWNoZWNrX2FuZF9zZXRfc3luY19pbmZvKE15UHJvY1BpZCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCmluZGV4IDdjMWI4NzU3 ZDdkLi5lYzZjNTE2NTMwZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v d2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZl ci5jCkBAIC0yNTcsOSArMjU3LDYgQEAgV2FsUmVjZWl2ZXJNYWluKGNvbnN0IHZvaWQgKnN0 YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJcHFzaWduYWwoU0lHVVNS MSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwogCXBxc2lnbmFsKFNJR1VTUjIsIFNJ R19JR04pOwogCi0JLyogUmVzZXQgc29tZSBzaWduYWxzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5 IHBvc3RtYXN0ZXIgYnV0IG5vdCBoZXJlICovCi0JcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RG TCk7Ci0KIAkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KIAlsb2Fk X2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7CiAJaWYgKFdhbFJlY2VpdmVyRnVu Y3Rpb25zID09IE5VTEwpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCmluZGV4 IDJjZGU4ZWJjNzI5Li41YWNjOGVlM2FjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs c2VuZGVyLmMKQEAgLTM3NDMsOSArMzc0Myw2IEBAIFdhbFNuZFNpZ25hbHModm9pZCkKIAlw cXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CiAJcHFzaWdu YWwoU0lHVVNSMiwgV2FsU25kTGFzdEN5Y2xlSGFuZGxlcik7CS8qIHJlcXVlc3QgYSBsYXN0 IGN5Y2xlIGFuZAogCQkJCQkJCQkJCQkJICogc2h1dGRvd24gKi8KLQotCS8qIFJlc2V0IHNv bWUgc2lnbmFscyB0aGF0IGFyZSBhY2NlcHRlZCBieSBwb3N0bWFzdGVyIGJ1dCBub3QgaGVy ZSAqLwotCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwogfQogCiAvKiBSZXBvcnQgc2hh cmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgV2FsU25kU2htZW1Jbml0ICovCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMKaW5kZXggZDAxYTA5ZGQwYzQuLjVkNjZjODA1NjdjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCkBAIC00Mjg1LDEzICs0Mjg1LDYgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCXBxc2lnbmFsKFNJR1VTUjEsIHBy b2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKTsKIAkJcHFzaWduYWwoU0lHVVNSMiwgU0lHX0lH Tik7CiAJCXBxc2lnbmFsKFNJR0ZQRSwgRmxvYXRFeGNlcHRpb25IYW5kbGVyKTsKLQotCQkv KgotCQkgKiBSZXNldCBzb21lIHNpZ25hbHMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgcG9zdG1h c3RlciBidXQgbm90IGJ5Ci0JCSAqIGJhY2tlbmQKLQkJICovCi0JCXBxc2lnbmFsKFNJR0NI TEQsIFNJR19ERkwpOyAvKiBzeXN0ZW0oKSByZXF1aXJlcyB0aGlzIG9uIHNvbWUKLQkJCQkJ CQkJCSAqIHBsYXRmb3JtcyAqLwogCX0KIAogCS8qIEVhcmx5IGluaXRpYWxpemF0aW9uICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgYi9zcmMv YmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKaW5kZXggMDNmNmM4NDc5ZjIuLmZhZGY4 NTZkOWJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCkBAIC0xNDIsNiArMTQy LDE1IEBAIEluaXRQb3N0bWFzdGVyQ2hpbGQodm9pZCkKIAkJZWxvZyhGQVRBTCwgInNldHNp ZCgpIGZhaWxlZDogJW0iKTsKICNlbmRpZgogCisJLyoKKwkgKiBSZXNldCBzaWduYWxzIHRo YXQgYXJlIHVzZWQgYnkgcG9zdG1hc3RlciBidXQgbm90IGJ5IGNoaWxkIHByb2Nlc3Nlcy4K KwkgKgorCSAqIEN1cnJlbnRseSBqdXN0IFNJR0NITEQuICBUaGUgaGFuZGxlcnMgZm9yIG90 aGVyIHNpZ25hbHMgYXJlIG92ZXJyaWRkZW4KKwkgKiBsYXRlciwgZGVwZW5kaW5nIG9uIHRo ZSBjaGlsZCBwcm9jZXNzIHR5cGUuCisJICovCisJcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RG TCk7IC8qIHN5c3RlbSgpIHJlcXVpcmVzIHRoaXMgdG8gYmUgU0lHX0RGTCByYXRoZXIKKwkJ CQkJCQkJICogdGhhbiBTSUdfSUdOIG9uIHNvbWUgcGxhdGZvcm1zICovCisKIAkvKgogCSAq IEV2ZXJ5IHBvc3RtYXN0ZXIgY2hpbGQgcHJvY2VzcyBpcyBleHBlY3RlZCB0byByZXNwb25k IHByb21wdGx5IHRvCiAJICogU0lHUVVJVCBhdCBhbGwgdGltZXMuICBUaGVyZWZvcmUgd2Ug Y2VudHJhbGx5IHJlbW92ZSBTSUdRVUlUIGZyb20KQEAgLTE1NCw2ICsxNjMsMTEgQEAgSW5p dFBvc3RtYXN0ZXJDaGlsZCh2b2lkKQogCXNpZ2RlbHNldCgmQmxvY2tTaWcsIFNJR1FVSVQp OwogCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxvY2tTaWcsIE5VTEwpOwogCisJLyoK KwkgKiBJdCBpcyB1cCB0byB0aGUgKk1haW4oKSBmdW5jdGlvbiB0byBzZXQgc2lnbmFsIGhh bmRsZXJzIGFwcHJvcHJpYXRlIGZvcgorCSAqIHRoZSBjaGlsZCBwcm9jZXNzIGFuZCB1bmJs b2NrIHRoZSByZXN0IG9mIHRoZSBzaWduYWxzLgorCSAqLworCiAJLyogUmVxdWVzdCBhIHNp Z25hbCBpZiB0aGUgcG9zdG1hc3RlciBkaWVzLCBpZiBwb3NzaWJsZS4gKi8KIAlQb3N0bWFz dGVyRGVhdGhTaWduYWxJbml0KCk7CiAKLS0gCjIuNDcuMwoK --------------q01luzhinYR3hIjKSuMMW8ZM Content-Type: text/x-patch; charset=UTF-8; name="v12-0003-Replace-Latches-with-Interrupts.patch" Content-Disposition: attachment; filename="v12-0003-Replace-Latches-with-Interrupts.patch" Content-Transfer-Encoding: base64 RnJvbSA0YjQzZmQwOTlhNzQ0ZmY1ZTFjNGEwZTM2NTMwYzE3Y2JmZTQ5MjlkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMTIgRmViIDIwMjYgMTc6MDc6MjggKzAyMDAK U3ViamVjdDogW1BBVENIIHYxMiAzLzRdIFJlcGxhY2UgTGF0Y2hlcyB3aXRoIEludGVycnVw dHMKClRoZSBMYXRjaCB3YXMgYSBmbGFnLCB3aXRoIGFuIGludGVyLXByb2Nlc3Mgc2lnbmFs bGluZyBtZWNoYW5pc20gdGhhdAphbGxvd2VkIGEgcHJvY2VzcyB0byB3YWl0IGZvciB0aGUg TGF0Y2ggdG8gYmUgc2V0LiBNeSBvcmlnaW5hbCB2aXNpb24KZm9yIExhdGNoZXMgd2FzIHRo YXQgeW91IGNvdWxkIGhhdmUgZGlmZmVyZW50IGxhdGNoZXMgZm9yIGRpZmZlcmVudAp0aGlu Z3MgdGhhdCB5b3UgbmVlZCB0byB3YWl0IGZvciwgYnV0IGluIHByYWN0aWNlLCBhbG1vc3Qg YWxsIGNvZGUKdXNlZCBvbmUgInByb2Nlc3MgbGF0Y2giIHRoYXQgd2FzIHNoYXJlZCBmb3Ig YWxsIHdha2V1cHMuIFRoZSBvbmx5CmV4Y2VwdGlvbiB3YXMgdGhlICJyZWNvdmVyeVdha2V1 cExhdGNoIi4gSSB0aGluayB0aGUgcmVhc29uIHRoYXQgd2UKZW5kZWQgdXAganVzdCBzaGFy aW5nIHRoZSBzYW1lIGxhdGNoIGZvciBhbGwgd2FrZXVwcyBpcyB0aGF0IGl0IHdhcwpjdW1i ZXJzb21lIGluIHByYWN0aWNlIHRvIGRlYWwgd2l0aCBtdWx0aXBsZSBsYXRjaGVzLiBGb3Ig c3RhcnRlcnMsCnRoZXJlIHdhcyBubyBtYWNoaW5lcnkgZm9yIHdhaXRpbmcgZm9yIG11bHRp cGxlIGxhdGNoZXMgYXQgdGhlIHNhbWUKdGltZS4gU2Vjb25kbHksIGNoYW5naW5nIHRoZSAi b3duZXJzaGlwIiBvZiBhIGxhdGNoIG5lZWRlZCBleHRyYQpsb2NraW5nIG9yIG90aGVyIGNv b3JkaW5hdGlvbi4gVGhpcmRseSwgZWFjaCBpbnRlci1wcm9jZXNzIGxhdGNoCm5lZWRlZCB0 byBiZSBpbml0aWFsaXplZCBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAgdGltZS4KClRoaXMgcGF0 Y2ggZW1icmFjZXMgdGhlIHJlYWxpdHkgb2YgaG93IExhdGNoZXMgd2VyZSB1c2VkLCBhbmQg cmVwbGFjZXMKdGhlIExhdGNoZXMgd2l0aCBhIHBlci1wcm9jZXNzIGludGVycnVwdCBtYXNr LiBZb3UgY2FuIG5vIGxvbmdlcgphbGxvY2F0ZSBMYXRjaGVzIGluIGFyYml0cmFyeSBzaGFy ZWQgbWVtb3J5IHN0cnVjdHMgYW5kIGFuIGludGVycnVwdAppcyBhbHdheXMgZGlyZWN0ZWQg YXQgYSBwYXJ0aWN1bGFyIHByb2Nlc3MsIGFkZHJlc3NlZCBieSBpdHMKUHJvY051bWJlci4g RWFjaCBwcm9jZXNzIGhhcyBhIGJpdG1hc2sgb2YgcGVuZGluZyBpbnRlcnJ1cHRzIGluClBH UFJPQy4KClRoaXMgcmVwbGFjZXMgUHJvY1NpZ25hbHMgYW5kIG1hbnkgZGlyZWN0IHVzZXMg b2YgVW5peCBzaWduYWxzIHdpdGgKaW50ZXJydXB0cy4gRm9yIGV4YW1wbGUsIHRoZSBiYWNr ZW5kLXByaXZhdGUgUHJvY0RpZVBlbmRpbmcgZmxhZyBpcwpyZXBsYWNlZCB3aXRoIHRoZSBJ TlRFUlJVUFRfVEVSTUlOQVRFIGludGVycnVwdC4gU0lHVEVSTSBjYW4gc3RpbGwgYmUKdXNl ZCB0byByYWlzZSBpdCwgYnV0IHRoZSBkZWZhdWx0IFNJR1RFUk0gc2lnbmFsIGhhbmRsZXIg bm93IGp1c3QKcmFpc2VzIElOVEVSUlVQVF9URVJNSU5BVEUuCgpIYW5kbGluZyBpbnRlcnJ1 cHRzCi0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIGNvbnRyb2wgd2hpY2ggaW50ZXJydXB0cyBj YW4gYmUgcHJvY2Vzc2VkIGF0IHdoYXQgdGltZSwgdGhlcmUgYXJlIGEKZmV3IG1lY2hhbmlz bXMuIEZpcnN0bHksIHlvdSBjYW4gcmVnaXN0ZXIgYSBoYW5kbGVyIGZ1bmN0aW9uIGZvciBl YWNoCmludGVycnVwdCwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbSBDSEVDS19GT1JfSU5U RVJSVVBUUygpIGlmIHRoZQppbnRlcnJ1cHQgaXMgcGVuZGluZy4gQWZ0ZXIgdGhpcyBjb21t aXQsIFByb2Nlc3NJbnRlcnJ1cHRzKCkgaGFzIG5vCmtub3dsZWRnZSBhYm91dCB0aGUgbWVh bmluZyBvZiB0aGUgZGlmZmVyZW50IGludGVycnVwdHMsIGl0IGp1c3QgY2FsbHMKdGhlIHJl Z2lzdGVyZWQgY2FsbGJhY2sgZnVuY3Rpb25zLiBEaWZmZXJlbnQgcHJvY2VzZXNzIGNhbiBz ZXQgdXAKZGlmZmVyZW50IGhhbmRsZXJzLCBhY2NvcmRpbmcgdG8gdGhlaXIgbmVlZHMsIGJ1 dCBzb21lIGNvbW1vbmx5IHVzZWQKaGFuZGxlcnMgYXJlIHByb3ZpZGVkIGFuZCBpbnN0YWxs ZWQgZHVyaW5nIGJhY2tlbmQgc3RhcnR1cC4KCkluIGFkZGl0aW9uIHRvIENIRUNLX0ZPUl9J TlRFUlJVUFRTKCksIHlvdSBjYW4gYWxzbyBjaGVjayB3aGV0aGVyIGEKcGFydGljdWxhciBp bnRlcnJ1cHQgaXMgcGVuZGluZyBhbmQgaGFuZGxlIGl0IHlvdXJzZWxmLgoKTW9zdCBjYWxs ZXJzIG9mIFdhaXRJbnRlcnJ1cHQgKHdoaWNoIHJlcGxhY2VzIFdhaXRMYXRjaCkgdXNlCkNo ZWNrRm9ySW50ZXJydXB0TWFzaywgd2hpY2ggaXMgYSBiaXRtYXNrIHRoYXQgaW5jbHVkZXMg YWxsIHRoZQppbnRlcnJ1cHRzIHRoYXQgYXJlIGhhbmRsZWQgYnkgQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKSBpbiB0aGUgY3VycmVudApzdGF0ZS4gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBj bGVhcnMgdGhlIGludGVycnVwdHMgYml0cyB0aGF0IGl0CnByb2Nlc3NlcywgdGhlIGNhbGxl ciBpcyBubyBsb25nZXIgcmVxdWlyZWQgdG8gZG8gQ2xlYXJJbnRlcnJ1cHQgKG9yClJlc2V0 TGF0Y2gpIGZvciB0aG9zZSBiaXRzLiBJZiB5b3Ugd2FrZSB1cCBmb3Igb3RoZXIgaW50ZXJy dXB0cyB0aGF0CmFyZSBub3QgaGFuZGxlZCBieSBDSEVDS19GT1JfSU5URVJSVVBUUygpLCB5 b3Ugc3RpbGwgbmVlZCB0byBjbGVhcgp0aG9zZS4KCk5vdyB0aGF0IHRoZXJlIGFyZSBzZXBh cmF0ZSBiaXRzIGZvciBkaWZmZXJlbnQgdGhpbmdzLCBpdCdzIHBvc3NpYmxlCnRvIGRvIGUu Zy4gV2FpdEludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCB8CklOVEVSUlVQVF9R VUVSWV9DQU5DRUwpIHRvIHdhaXQganVzdCBmb3IgYSBjb25maWcgcmVsb2FkIHJlcXVlc3Qg b3IKcXVlcnkgY2FuY2VsbGF0aW9uLCBhbmQgbm90IHdha2UgdXAgb24gb3RoZXIgZXZlbnRz IGxpa2UgYSBzaHV0ZG93bgpyZXF1ZXN0LiBUaGF0J3Mgbm90IHZlcnkgdXNlZnVsIGluIHBy YWN0aWNlLCBhcyBDSEVDS19GT1JfSU5URVJSVVBUUygpCnN0aWxsIHByb2Nlc3NlcyB0aG9z ZSBpbnRlcnJ1cHRzIGlmIHlvdSBjYWxsIGl0LCBhbmQgeW91IHdvdWxkIHdhbnQgdG8KcHJv Y2VzcyBhbGwgdGhlIHN0YW5kYXJkIGludGVycnVwdHMgcHJvbXB0bHkgYW55d2F5LiBJdCBt aWdodCBiZQp1c2VmdWwgdG8gY2hlY2sgZm9yIHNwZWNpZmljIGludGVycnVwdHMgd2l0aCBJ bnRlcnJ1cHRQZW5kaW5nKCksCndpdGhvdXQgaW1tZWRpYXRlbHkgcHJvY2Vzc2luZyB0aGVt LCBob3dldmVyLiBzcGdkb2luc2VydCgpIGRvZXMKc29tZXRoaW5nIGxpa2UgdGhhdC4gSW4g dGhpcyBjb21taXQgSSBkaWRuJ3QgY2hhbmdlIGl0cyBvdmVyYWxsIGxvZ2ljLApidXQgaXQg cHJvYmFibHkgY291bGQgYmUgbWFkZSBtb3JlIGZpbmUtZ3JhaW5lZCBub3cuCgpNb3JlIGlt cG9ydGFudGx5LCB5b3UgY2FuIG5vdyBoYXZlIGFkZGl0aW9uYWwgaW50ZXJydXB0cyB0aGF0 IGFyZQpwcm9jZXNzZWQgbGVzcyBmcmVxdWVudGx5IGFuZCBkbyBub3Qgd2FrZSB1cCB0aGUg YmFja2VuZCB3aGVuIGl0J3Mgbm90CnByZXBhcmVkIHRvIHByb2Nlc3MgdGhlbS4gRm9yIGV4 YW1wbGUsIHRoZSBTSU5WQUxfQ0FUQ0hVUCBpbnRlcnJ1cHQgaXMKb25seSBwcm9jZXNzZWQg d2hlbiB0aGUgYmFja2VuZCBpcyBpZGxlLiBQcmV2aW91c2x5LCBhIGNhdGNodXAgcmVxdWVz dAp3b3VsZCB3YWtlIHVwIHRoZSBwcm9jZXNzIHdoZXRoZXIgaXQgd2FzIHJlYWR5IHRvIGhh bmRsZSBpdCBvciBub3Q7Cm5vdyBpdCBvbmx5IHdha2VzIHVwIHdoZW4gdGhlIGJhY2tlbmQg aXMgaWRsZS4gVGhhdCdzIG5vdCB0b28Kc2lnbmlmaWNhbnQgZm9yIGNhdGNodXAgaW50ZXJy dXB0cyBiZWNhdXNlIHRoZXkgZG9uJ3Qgb2NjdXIgdGhhdCBvZnRlbgphbnl3YXksIGJ1dCBp dCdzIHN0aWxsIG5pY2UgYW5kIGNvdWxkIGJlIG1vcmUgc2lnbmlmaWNhbnQgd2l0aCBvdGhl cgppbnRlcnJ1cHRzLgoKVGhlcmUncyBzdGlsbCBhIGdlbmVyYWwtcHVycG9zZSBJTlRFUlJV UFRfV0FJVF9XQUtFVVAgaW50ZXJydXB0IHRoYXQKaXMgbXVsdGlwbGV4ZWQgZm9yIG1hbnkg ZGlmZmVyZW50IHB1cnBvc2VzIGluIGRpZmZlcmVudCBwcm9jZXNzZXMsIGZvcgpleGFtcGxl IHRvIHdha2UgdXAgdGhlIHdhbHdyaXRlciB3aGVuIGl0IGhhcyB3b3JrIHRvIGRvLCBhbmQg dG8gd2FrZQp1cCBwcm9jZXNzZXMgd2FpdGluZyBvbiBhIGNvbmRpdGlvbiB2YXJpYWJsZS4g VGhlIGNvbW1vbiBwcm9wZXJ0eSBvZgp0aG9zZSB1c2VzIGlzIHRoYXQgdGhlcmUncyBzb21l IG90aGVyIGZsYWcgb3IgY29uZGl0aW9uIHRoYXQgaXMKY2hlY2tlZCBvbiBlYWNoIHdha2V1 cCwgdGhlIHdha2V1cCBpbnRlcnJ1cHQgaXRzZWxmIG1lYW5zIG1lcmVseSB0aGF0CnNvbWV0 aGluZyBpbnRlcmVzdGluZyBtaWdodCd2ZSBoYXBwZW5lZC4KClJlcGxhY2luZyByZWNvdmVy eVdha2V1cExhdGNoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgSU5URVJS VVBUX1JFQ09WRVJZX0NPTlRJTlVFIHJlcGxhY2VzIHJlY292ZXJ5V2FrZXVwTGF0Y2guIFdp dGgKdGhpcyBuZXcgaW50ZXJmYWNlLCB0aGUgc3RhcnR1cCBwcm9jZXNzIGNhbiBlYXNpbHkg d2FpdCBmb3IgdGhlIGNvbW1vbgppbnRlcnJ1cHRzIGF0IHRoZSBzYW1lIHRpbWUgYXMgSU5U RVJSVVBUX1JFQ09WRVJZX0NPTlRJTlVFLgpQcmV2aW91c2x5LCB0aGUgY29kZSB0aGF0IHdh aXRlZCBvbiByZWNvdmVyeVdha2V1cExhdGNoIGhhZCB0byByZXNvcnQKdG8gdGltZW91dHMg dG8gcmVhY3QgdG8gb3RoZXIgc2lnbmFscywgYmVjYXVzZSBpdCB3YXMgbm90IHBvc3NpYmxl IHRvCndhaXQgZm9yIHR3byBsYXRjaGVzIGF0IHRoZSBzYW1lIHRpbWUuIFByZXZpb3VzIGF0 dGVtcHQgYXQgdW5pZnlpbmcKdGhvc2Ugd2FrZXVwcyB3YXMgaW4gY29tbWl0IGFjMjI5Mjlh MjYsIGJ1dCBpdCB3YXMgcmV2ZXJ0ZWQgaW4gY29tbWl0CjAwZjY5MGEyMzkgYmVjYXVzZSBp dCBjYXVzZWQgYSBsb3Qgb2Ygc3B1cmlvdXMgd2FrZXVwcyB3aGVuIHRoZQpzdGFydHVwIHBy b2Nlc3Mgd2FzIHdhaXRpbmcgZm9yIHJlY292ZXJ5IGNvbmZsaWN0cy4gVGhlIG5ldyBtYWNo aW5lcnkKYXZvaWRzIHRoYXQgcHJvYmxlbSBieSBtYWtpbmcgaXQgZWFzeSB0byB3YWl0IGZv ciB0d28gaW50ZXJydXB0cyBhdAp0aGUgc2FtZSB0aW1lLgoKRml4IGxvc3Qgd2FrZXVwIGlz c3VlIGluIGxvZ2ljYWwgcmVwbGljYXRpb24gbGF1bmNoZXIKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClNpbWlsYXJseSB0aGVyZSdz IG5vdyBhIGRlZGljYXRlZCBpbnRlcnJ1cHQgYml0IHRvIG5vdGlmeSB0aGUgbG9naWNhbApy ZXBsaWNhdGlvbiBsYXVuY2hlciBhYm91dCBzdWJzY3JpcHRpb24gY2hhbmdlcy4gVGhhdCBm aXhlcyB0aGUgbG9zdCB3YWtldXAgaXNzdWUgZGlzY3Vzc2VkIGF0OgogIERpc2N1c3Npb246 IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvNDc2NjcyZTctNjJmMS00 Y2FiLWE4MjItZjNhOGU5NDlkZDNmQGlraS5maQogIERpc2N1c3Npb246IGh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmYwNjYzZDktODAxMS00MjBmLWExNjktZWZi ZjU3MzI3Y2I1QGlraS5maQoKQmFja2dyb3VuZCB3b3JrZXIgc3RhdGUgY2hhbmdlIG5vdGlm aWNhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJ TlRFUlJVUFRfV0FJVF9XQUtFVVAgaXMgdXNlZCBmb3IgYmd3b3JrZXIgc3RhdGUgY2hhbmdl IG5vdGlmaWNhdGlvbi4KQXMgcGFydCBvZiBhIHByb2plY3QgdG8gcmVtb3ZlIHRoZSByZWxp YW5jZSBvbiBQSURzIHRvIGlkZW50aWZ5CmJhY2tlbmRzLCBiYWNrZW5kcyB0aGF0IHJlZ2lz dGVyIGR5bmFtaWMgYmFja2dyb3VuZCB3b3JrZXJzIHdpbGwgbm93CnJlY2VpdmUgSU5URVJS VVBUX1dBSVRfV0FLRVVQIHNlbnQgZGlyZWN0bHkgYnkgdGhlIHBvc3RtYXN0ZXIgd2hlbiB0 aGUKd29ya2VyIHN0YXRlIGNoYW5nZXMuICBQcmV2aW91c2x5LCB0aGUgcG9zdG1hc3RlciB3 b3VsZCBzZW5kIGEgU0lHVVNSMQpzaWduYWwsIHdoaWNoIHJlbGllZCBvbiB0aGUgUHJvY1Np Z25hbCBzeXN0ZW0ncyBoYW5kbGVyIHNldHRpbmcgdGhlCmludGVycnVwdCBmbGFnLCB3aXRo IHRoZSBzYW1lIGVuZCBlZmZlY3QuICBOb3cgdGhhdCBpbnRlcm1lZGlhdGUgc3RlcAppcyBz a2lwcGVkLgoKVGhlIGZpZWxkIGJnd19ub3RpZnlfcGlkIHN0aWxsIGV4aXN0cyBmb3IgYmFj a3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dApoYXMgbm8gZWZmZWN0IGFuZCBtYXkgYmUgcmVt b3ZlZCBpbiBhIGxhdGVyIHJlbGVhc2UuClJlZ2lzdGVyQmFja2dyb3VuZFdvcmtlcigpIG5v dyBhdXRvbWF0aWNhbGx5IGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyCndvdWxkIGxpa2Ugc3Rh dGUgY2hhbmdlIG5vdGlmaWNhdGlvbnMgZGVsaXZlcmVkIHRvIGl0cyBwcm9jIG51bWJlciwK dW5sZXNzIEJHV19OT19OT1RJRlkgaXMgc2V0IGluIGJnd19mbGFncy4KClJlbW92aW5nIG90 aGVyIGNhc2VzIG9mIFBJRHMgZnJvbSB0aGUgYmd3b3JrZXIgQVBJIGlzIGxlZnQgZm9yIGxh dGVyCndvcms7IHRoaXMgcGF0Y2ggaXMgY29uY2VybmVkIG9ubHkgd2l0aCByZW1vdmluZyBh IGRlcGVuZGVuY3kgb24KUHJvY1NpZ25hbCBpbmZyYXN0cnVjdHVyZSB0aGF0IGlzIGR1ZSB0 byBiZSByZW1vdmVkIGJ5IGEgbGF0ZXIgY29tbWl0LgoKWFhYOiBvcmlnaW5hbCB0ZXh0IGZy b20gVGhvbWFzJ3MgcGF0Y2gKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KCiJQcm9jU2lnbmFscyIgd2VyZSBhIHR3by1zdGVwIHdheSBmb3Igb25lIGJhY2tlbmQg dG8gYXNrIGFub3RoZXIgYmFja2VuZAp0byBkbyBzb21ldGhpbmcsIGJ5IG11bHRpcGxleGlu ZyBTSUdVU1IxLiAgSGlzdG9yaWNhbGx5LCByZWFsIHdvcmsgd2FzCmRvbmUgaW4gdGhlIFNJ R1VTUjEgaGFuZGxlciwgYnV0IGNvbW1pdCAwZGEwOTZkNyByZW1vdmVkIHRoZSBsYXN0IGNh c2UKb2YgdGhhdC4gIE5vdyB0aGUgaGFuZGxlciBqdXN0IHNldCAiaW50ZXJydXB0IHBlbmRp bmciIGZsYWdzLCBjYWxsZWQKU2V0TGF0Y2goTXlMYXRjaCkgdG8gY2xvc2UgcmFjZXMsIGFu ZCB0aGVuIGRpZCBhbGwgdGhlIGludGVyZXN0aW5nIHdvcmsKYXQgdGhlIG5leHQgQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKSBjYWxsLgoKVGhpcyBjb21taXQgcmVtb3ZlcyB0aGUgUHJvY1Np Z25hbCBzdGVwLCByZXBsYWNpbmcgUHJvY1NpZ25hbHMgd2l0aApJbnRlcnJ1cHRzLgoKQmVu ZWZpdHMgb2YgdGhpcyByZWZhY3RvcmluZyBpbmNsdWRlIHJlbW92aW5nIHVubmVjZXNzYXJ5 IGNvbmNlcHRzIGFuZAp0ZXJtaW5vbG9neSwgYXZvaWRpbmcgdGhlIHJpc2sgb2YgcGVvcGxl IHB1dHRpbmcgYnVnZ3kgY29kZSBiYWNrIGludG8Kc2lnbmFsIGhhbmRsZXJzLCByZW1vdmlu ZyBhIHdob2xlIGxvdCBvZiBnbG9iYWwgdmFyaWFibGVzLCByZW1vdmluZwpkZXBlbmRlbmNp ZXMgb24gUElEcyBhbmQgdGhlIHByb2Nlc3MgbW9kZWwsIHJlbW92aW5nIHJpc2tzIG9mIHNl bmRpbmcKYSBzaWduYWwgdGhhdCBoYXMgZGVmYXVsdCBhY3Rpb24gb2YgdGVybWluYXRpb24g dG8gdGhlIHdyb25nIHByb2Nlc3MsCmFuZCB0YWtpbmcgYSBzdGVwIHRvd2FyZHMgYmVpbmcg YWJsZSByZW1vdmUgdGhlIGZha2Ugc2lnbmFsIHN5c3RlbQpmcm9tIHRoZSBXaW5kb3dzIHBv cnQuCgpOb3RhYmxlIGNoYW5nZXM6CgogKiBhbGwgY2FsbHMgdG8gU2VuZFByb2NTaWduYWwo cGlkLCBQUk9DU0lHX1hYWCkgYmVjb21lCiAgIFNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1hY WCwgcHJvY25vKQogKiBhbGwgWHh4UGVuZGluZyBnbG9iYWwgdmFyaWFibGVzIGFyZSBnb25l OyB0aGV5IGFyZSByZXByZXNlbnRlZAogICBhcyBiaXRzIGluIE15UHJvYy0+cGVuZGluZ19p bnRlcnJ1cHRzCiAqIHRoZSBTSUdVU1IxIGhhbmRsZXIgaXMgZ29uZQogKiBwbGFjZXMgdGhh dCBrbm93IHRoZSBQSURzIG9mIG90aGVyIGJhY2tlbmRzIG11c3Qgbm93IHVzZSBwcm9jbm9z CiAgIGluc3RlYWQKClRoZSBvbmx5IGNvZGUgbGVmdCBpbiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9wcm9jc2lnbmFsLmMgcmVsYXRlcyB0bwpQcm9jU2lnbmFsQmFycmllcnMuICBYWFgg VGhvc2Ugc2hvdWxkIHBlcmhhcHMgYmUgcmVuYW1lZC4KClNJR1VTUjEgY2FuIG5vdyBiZSBz ZXQgdG8gU0lHX0lHTiBpbiBtb3N0IGJhY2tlbmRzLiAgU29tZSBzcGVjaWFsIGNhc2VzCnJl bWFpbiwgdGhhdCB3ZXJlIG5vdCB1c2luZyB0aGUgZ2VuZXJhbCBzaWd1c3IxX2hhbmRsZXIg KG5vdyByZW1vdmVkKS4KLS0tCiBjb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYyAg ICAgICAgICAgICAgfCAgNjMgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24u YyAgICAgICAgICAgICB8ICAyMSArLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNf ZmR3LmMgICAgICAgICAgIHwgICA0ICstCiBkb2Mvc3JjL3NnbWwvYmd3b3JrZXIuc2dtbCAg ICAgICAgICAgICAgICAgICAgfCAgMzIgKy0KIGRvYy9zcmMvc2dtbC9vYXV0aC12YWxpZGF0 b3JzLnNnbWwgICAgICAgICAgICB8ICAgMiArLQogZG9jL3NyYy9zZ21sL3NvdXJjZXMuc2dt bCAgICAgICAgICAgICAgICAgICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2Jy aW4vYnJpbl9wYWdlb3BzLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv YnJpbi9icmluX3Jldm1hcC5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vdG9hc3RfaW50ZXJuYWxzLmMgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW5idHJlZS5jICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbmRhdGFwYWdlLmMgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2luZmFzdC5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvZ2luL2dpbnZhY3V1bS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RnZXQuYyAgICAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1bS5jICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgICAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jICAgICAgICAgICAgfCAg IDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyAgICAgICAgICB8 ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNvcnQuYyAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9wcnVuZWhlYXAuYyAgICAgICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyAgICAg ICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5j ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5j ICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2Vy dC5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFn ZS5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl YXJjaC5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn ZG9pbnNlcnQuYyAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGdpbnNlcnQuYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0 L3NwZ3NjYW4uYyAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndmFjdXVtLmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vUkVBRE1FICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9SRUFETUUucGFyYWxsZWwgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL2dlbmVyaWNfeGxvZy5jICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vcGFyYWxsZWwuYyAgICAgICAgIHwgIDc3ICstLQogc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vc2xydS5jICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgICAgICAgIHwgIDE0ICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYyAgICAgICAgfCAgMTIgKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jICAgICB8IDEwMyArKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMgICAgICAgICB8ICAzOSArLQog c3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXBfdGhyb3R0bGUuYyAgICAgIHwgIDE4ICst CiBzcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHBhcnNlLnkgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAgICAgICAgICAgICAgICB8IDE1 MiArKy0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jICAgICAgICAg IHwgIDExICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICAg ICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgICAg ICAgICB8ICAyMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUdhdGhlci5jICAgICAg ICAgICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9pcGMvTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgICAgfCAgMTkgKwogc3JjL2JhY2tlbmQvaXBjL1JFQURNRS5tZCAgICAgICAgICAg ICAgICAgICAgIHwgMjYwICsrKysrKysrCiBzcmMvYmFja2VuZC9pcGMvaW50ZXJydXB0LmMg ICAgICAgICAgICAgICAgICAgfCA0MzEgKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9pcGMv bWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogc3JjL2JhY2tlbmQvaXBj L3NpZ25hbF9oYW5kbGVycy5jICAgICAgICAgICAgIHwgMTYwICsrKysrCiBzcmMvYmFja2Vu ZC9saWJwcS9hdXRoLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKy0KIHNyYy9iYWNr ZW5kL2xpYnBxL2JlLXNlY3VyZS1nc3NhcGkuYyAgICAgICAgICB8ICAxNiArLQogc3JjL2Jh Y2tlbmQvbGlicHEvYmUtc2VjdXJlLW9wZW5zc2wuYyAgICAgICAgIHwgICA3ICstCiBzcmMv YmFja2VuZC9saWJwcS9iZS1zZWN1cmUuYyAgICAgICAgICAgICAgICAgfCAgNjIgKy0KIHNy Yy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jICAgICAgICAgICAgICAgICAgICB8ICAzNyArLQog c3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICst CiBzcmMvYmFja2VuZC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAx IC0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgICB8IDE1 MSArKy0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAg ICAgfCAxNzMgKystLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYyAgICAg ICAgICAgICB8ICA1MSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIu YyAgICAgICAgIHwgMTkxICsrKy0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1 cHQuYyAgICAgICAgICAgIHwgMTA4IC0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNv bi5idWlsZCAgICAgICAgICAgIHwgICAxIC0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdh cmNoLmMgICAgICAgICAgICAgICB8IDEwMCArKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jICAgICAgICAgICB8ICA1NyArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9zdGFydHVwLmMgICAgICAgICAgICAgIHwgMTA0ICsrLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9zeXNsb2dnZXIuYyAgICAgICAgICAgIHwgIDM3ICstCiBzcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyAgICAgICAgfCAgODMgKystCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL3dhbHdyaXRlci5jICAgICAgICAgICAgfCAgNDYgKy0KIC4uLi9saWJwcXdh bHJlY2VpdmVyL2xpYnBxd2FscmVjZWl2ZXIuYyAgICAgICB8ICAgMSAtCiAuLi4vcmVwbGlj YXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMgfCAxNTAgKystLS0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyAgICB8IDEyNSArKy0tCiAu Li4vcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYyAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYyAgICB8ICA5MCAr LS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICB8ICAz OCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwg IDQ5ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMgICAgICAgICAgICAgICAg fCAgMzcgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXAuYyAgICAgICAgICAg ICB8ICA0MiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyAgICAg ICAgIHwgIDU2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlcmZ1bmNz LmMgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jICAg ICAgICAgICB8IDIyNyArKysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAg ICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19p by5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0 aG9kX3dvcmtlci5jICAgICAgIHwgIDcxICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZtZ3IuYyAgICAgICAgICAgfCAgMjEgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2ZyZWVsaXN0LmMgICAgICAgICB8ICAyNyArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2RzbV9pbXBsLmMgICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjLmMgICAgICAgICAgICAgICAgIHwgIDEyICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9sYXRjaC5jICAgICAgICAgICAgICAgfCAzODkgLS0tLS0tLS0tLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgMSAtCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAgMjIgKy0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgICB8IDIyNSArLS0t LS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1fbXEuYyAgICAgICAgICAgICAgfCAx MjcgKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lnbmFsZnVuY3MuYyAgICAgICAg IHwgIDE0ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWwuYyAgICAgICAgICAg ICAgfCAgNjggKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jICAgICAg ICAgICB8ICAyMiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAgICAg ICAgICAgIHwgIDQzICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy93YWl0ZXZlbnRzZXQu YyAgICAgICAgfCAzOTYgKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9j b25kaXRpb25fdmFyaWFibGUuYyB8ICAzNSArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3ByZWRpY2F0ZS5jICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jICAgICAgICAgICAgICAgfCAxNDggKystLS0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2Uvc21nci9zbWdyLmMgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9zeW5jL3N5bmMuYyAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC90 Y29wL2JhY2tlbmRfc3RhcnR1cC5jICAgICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgNjE1ICsrKysrKysrKy0tLS0t LS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2dyYW0ueSAgICAgICAgIHwg ICAyICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMgICAgICAgICAgICAg fCAgMTEgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9taXNjLmMgICAgICAgICAgICAgICAg ICB8ICAyNSArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3RpbWVzdGFtcC5jICAgICAgICAg ICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9nLmMgICAgICAgICAg ICAgICAgfCAgIDEgLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAg ICAgICAgIHwgIDIzIC0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyAgICAg ICAgICAgICB8ICA3OCArLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyAg ICAgICAgICAgICB8ICA0MiArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy90aW1lb3V0LmMg ICAgICAgICAgICAgIHwgICA3IC0KIHNyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jICAg ICAgICAgICAgICAgICB8ICAyNCArLQogc3JjL2NvbW1vbi9zY3JhbS1jb21tb24uYyAgICAg ICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3BhcmFsbGVs LmggICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVj b3ZlcnkuaCAgICAgICAgICAgICB8ICAxOCAtCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9hc3lu Yy5oICAgICAgICAgICAgICAgICAgfCAgIDYgLQogc3JjL2luY2x1ZGUvaXBjL2ludGVycnVw dC5oICAgICAgICAgICAgICAgICAgIHwgMzcwICsrKysrKysrKysrCiAuLi4vaW50ZXJydXB0 LmggPT4gaXBjL3NpZ25hbF9oYW5kbGVycy5ofSAgICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRl L2xpYnBxL2xpYnBxLWJlLWZlLWhlbHBlcnMuaCAgICAgICB8ICA0OCArLQogc3JjL2luY2x1 ZGUvbGlicHEvbGlicHEuaCAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5j bHVkZS9saWJwcS9wcW1xLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9p bmNsdWRlL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv aW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICAgICAgICAgICAgfCAxMzUgKy0tLQog c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlci5oICAgICAgICAgICAgIHwgIDEwICst CiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oICAgfCAgIDQg Ky0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oICAgICAgICAgICAgICB8ICAg NCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oICAgICAgIHwg ICA1IC0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5oICAgICAgICAgICB8 ICAgMSAtCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXJfcHJpdmF0ZS5oICAg fCAgIDIgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICAg IHwgICA1ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xhdGNoLmggICAgICAgICAgICAgICAg ICAgfCAxNDAgLS0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggICAgICAgICAgICAg ICAgICAgIHwgIDE2ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oICAgICAg ICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAg ICAgICAgICAgICB8ICAzMyAtCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbC5oICAgICAg ICAgICAgICAgICAgfCAgIDUgLQogc3JjL2luY2x1ZGUvc3RvcmFnZS93YWl0ZXZlbnRzZXQu aCAgICAgICAgICAgIHwgIDM5ICstCiBzcmMvaW5jbHVkZS90Y29wL3Rjb3Bwcm90LmggICAg ICAgICAgICAgICAgICAgfCAgIDcgLQogc3JjL2luY2x1ZGUvdXRpbHMvbWVtdXRpbHMuaCAg ICAgICAgICAgICAgICAgIHwgICAxIC0KIHNyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRl cm5hbC5oICAgICAgICAgICB8ICAgMSArCiBzcmMvcG9ydC9wZ19udW1hLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9wb3J0L3Bnc2xlZXAuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xh dGlvbnRlc3Rlci5jICAgICAgICAgIHwgICAyICstCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf c2htX21xL3NldHVwLmMgICAgICAgICAgfCAgMTUgKy0KIHNyYy90ZXN0L21vZHVsZXMvdGVz dF9zaG1fbXEvdGVzdC5jICAgICAgICAgICB8ICAxNiArLQogc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3NobV9tcS90ZXN0X3NobV9tcS5oICAgIHwgICAyICsKIHNyYy90ZXN0L21vZHVsZXMv dGVzdF9zaG1fbXEvd29ya2VyLmMgICAgICAgICB8ICAxMiArLQogc3JjL3Rlc3QvbW9kdWxl cy93b3JrZXJfc3BpL3dvcmtlcl9zcGkuYyAgICAgIHwgIDQ1ICstCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDMgKy0KIDE2NCBmaWxlcyBj aGFuZ2VkLCAzNTM3IGluc2VydGlvbnMoKyksIDM1ODMgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvaXBjL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2JhY2tlbmQvaXBjL1JFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL2lwYy9pbnRlcnJ1cHQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L2lwYy9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2lwYy9z aWduYWxfaGFuZGxlcnMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvaW50ZXJydXB0LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9sYXRjaC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvaXBjL2lu dGVycnVwdC5oCiByZW5hbWUgc3JjL2luY2x1ZGUve3Bvc3RtYXN0ZXIvaW50ZXJydXB0Lmgg PT4gaXBjL3NpZ25hbF9oYW5kbGVycy5ofSAoODIlKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNy Yy9pbmNsdWRlL3N0b3JhZ2UvbGF0Y2guaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJl d2FybS9hdXRvcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMK aW5kZXggODllMTg3NDI1Y2MuLjZiZTVjYTljMTgzIDEwMDY0NAotLS0gYS9jb250cmliL3Bn X3ByZXdhcm0vYXV0b3ByZXdhcm0uYworKysgYi9jb250cmliL3BnX3ByZXdhcm0vYXV0b3By ZXdhcm0uYwpAQCAtMzAsMTcgKzMwLDE1IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvcmVsYXRp b24uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1 cHQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29y a2VyLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJz dG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2RzbS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5o IgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9j c2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUg InN0b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKQEAgLTE3MCwx MCArMTY4LDEzIEBAIGF1dG9wcmV3YXJtX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJYm9vbAkJ ZmluYWxfZHVtcF9hbGxvd2VkID0gdHJ1ZTsKIAlUaW1lc3RhbXBUeiBsYXN0X2R1bXBfdGlt ZSA9IDA7CiAKLQkvKiBFc3RhYmxpc2ggc2lnbmFsIGhhbmRsZXJzOyBvbmNlIHRoYXQncyBk b25lLCB1bmJsb2NrIHNpZ25hbHMuICovCi0JcHFzaWduYWwoU0lHVEVSTSwgU2lnbmFsSGFu ZGxlckZvclNodXRkb3duUmVxdWVzdCk7Ci0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5k bGVyRm9yQ29uZmlnUmVsb2FkKTsKLQlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3Np Z3VzcjFfaGFuZGxlcik7CisJLyoKKwkgKiBXZSB3aWxsIGNoZWNrIGZvciBJTlRFUlJVUFRf VEVSTUlOQVRFIGV4cGxpY2l0bHkgaW4gdGhlIG1haW4gbG9vcCwgc28KKwkgKiBkaXNhYmxl IHRoZSBub3JtYWwgaW50ZXJydXB0IGhhbmRsZXIuCisJICovCisJRGlzYWJsZUludGVycnVw dChJTlRFUlJVUFRfVEVSTUlOQVRFKTsKKworCS8qIERlZmF1bHQgc2lnbmFsIGhhbmRsZXJz IGFyZSBPSyBmb3IgdXM7IHVuYmxvY2sgc2lnbmFscy4gKi8KIAlCYWNrZ3JvdW5kV29ya2Vy VW5ibG9ja1NpZ25hbHMoKTsKIAogCS8qIENyZWF0ZSAoaWYgbmVjZXNzYXJ5KSBhbmQgYXR0 YWNoIHRvIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEuICovCkBAIC0yMjIsMjcgKzIyMywyNyBA QCBhdXRvcHJld2FybV9tYWluKERhdHVtIG1haW5fYXJnKQogCWlmIChmaXJzdF90aW1lKQog CXsKIAkJYXB3X2xvYWRfYnVmZmVycygpOwotCQlmaW5hbF9kdW1wX2FsbG93ZWQgPSAhU2h1 dGRvd25SZXF1ZXN0UGVuZGluZzsKKwkJZmluYWxfZHVtcF9hbGxvd2VkID0gIUludGVycnVw dFBlbmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSk7CiAJCWxhc3RfZHVtcF90aW1lID0gR2V0 Q3VycmVudFRpbWVzdGFtcCgpOwogCX0KIAogCS8qIFBlcmlvZGljYWxseSBkdW1wIGJ1ZmZl cnMgdW50aWwgdGVybWluYXRlZC4gKi8KLQl3aGlsZSAoIVNodXRkb3duUmVxdWVzdFBlbmRp bmcpCisJd2hpbGUgKCFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJNSU5BVEUpKQog CXsKLQkJLyogSW4gY2FzZSBvZiBhIFNJR0hVUCwganVzdCByZWxvYWQgdGhlIGNvbmZpZ3Vy YXRpb24uICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0JCQlDb25maWdS ZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCS8qIENoZWNrIGZvciBzdGFuZGFyZCBpbnRlcnJ1 cHRzIGFuZCBjb25maWcgcmVsb2FkICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJ CWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJCVBy b2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwotCQl9CiAKIAkJaWYgKGF1dG9wcmV3YXJt X2ludGVydmFsIDw9IDApCiAJCXsKIAkJCS8qIFdlJ3JlIG9ubHkgZHVtcGluZyBhdCBzaHV0 ZG93biwgc28ganVzdCB3YWl0IGZvcmV2ZXIuICovCi0JCQkodm9pZCkgV2FpdExhdGNoKE15 TGF0Y2gsCi0JCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0J CQkJCQkJIC0xTCwKLQkJCQkJCQkgUEdfV0FJVF9FWFRFTlNJT04pOworCQkJKHZvaWQpIFdh aXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkJCSBJTlRFUlJV UFRfQ09ORklHX1JFTE9BRCB8CisJCQkJCQkJCSBJTlRFUlJVUFRfVEVSTUlOQVRFLAorCQkJ CQkJCQkgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJIC0x TCwKKwkJCQkJCQkJIFBHX1dBSVRfRVhURU5TSU9OKTsKIAkJfQogCQllbHNlCiAJCXsKQEAg LTI2NiwxNCArMjY3LDEzIEBAIGF1dG9wcmV3YXJtX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJ CQl9CiAKIAkJCS8qIFNsZWVwIHVudGlsIHRoZSBuZXh0IGR1bXAgdGltZS4gKi8KLQkJCSh2 b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElN RU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCQkJIGRlbGF5X2luX21zLAotCQkJ CQkJCSBQR19XQUlUX0VYVEVOU0lPTik7CisJCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVj a0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkJIElOVEVSUlVQVF9DT05GSUdfUkVMT0FE IHwKKwkJCQkJCQkJIElOVEVSUlVQVF9URVJNSU5BVEUsCisJCQkJCQkJCSBXTF9JTlRFUlJV UFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJIGRlbGF5 X2luX21zLAorCQkJCQkJCQkgUEdfV0FJVF9FWFRFTlNJT04pOwogCQl9Ci0KLQkJLyogUmVz ZXQgdGhlIGxhdGNoLCBsb29wLiAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOwogCX0KIAog CS8qCkBAIC00MjMsNyArNDIzLDcgQEAgYXB3X2xvYWRfYnVmZmVycyh2b2lkKQogCQkgKiBM aWtld2lzZSwgZG9uJ3QgbGF1bmNoIGlmIHdlJ3ZlIGFscmVhZHkgYmVlbiB0b2xkIHRvIHNo dXQgZG93bi4KIAkJICogKFRoZSBsYXVuY2ggd291bGQgZmFpbCBhbnl3YXksIGJ1dCB3ZSBt aWdodCBhcyB3ZWxsIHNraXAgaXQuKQogCQkgKi8KLQkJaWYgKFNodXRkb3duUmVxdWVzdFBl bmRpbmcpCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJNSU5BVEUpKQog CQkJYnJlYWs7CiAKIAkJLyoKQEAgLTQ0NCw3ICs0NDQsNyBAQCBhcHdfbG9hZF9idWZmZXJz KHZvaWQpCiAJTFdMb2NrUmVsZWFzZSgmYXB3X3N0YXRlLT5sb2NrKTsKIAogCS8qIFJlcG9y dCBvdXIgc3VjY2VzcywgaWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmlzaC4gKi8KLQlpZiAoIVNo dXRkb3duUmVxdWVzdFBlbmRpbmcpCisJaWYgKCFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQ VF9URVJNSU5BVEUpKQogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJhdXRvcHJld2Fy bSBzdWNjZXNzZnVsbHkgcHJld2FybWVkICVkIG9mICVkIHByZXZpb3VzbHktbG9hZGVkIGJs b2NrcyIsCiAJCQkJCQlhcHdfc3RhdGUtPnByZXdhcm1lZF9ibG9ja3MsIG51bV9lbGVtZW50 cykpKTsKQEAgLTUwNCw4ICs1MDQsNyBAQCBhdXRvcHJld2FybV9kYXRhYmFzZV9tYWluKERh dHVtIG1haW5fYXJnKQogCUJsb2NrSW5mb1JlY29yZCBibGs7CiAJZHNtX3NlZ21lbnQgKnNl ZzsKIAotCS8qIEVzdGFibGlzaCBzaWduYWwgaGFuZGxlcnM7IG9uY2UgdGhhdCdzIGRvbmUs IHVuYmxvY2sgc2lnbmFscy4gKi8KLQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOworCS8qIERl ZmF1bHQgc2lnbmFsIGhhbmRsZXJzIGFyZSBPSyBmb3IgdXM7IHVuYmxvY2sgc2lnbmFscy4g Ki8KIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHMoKTsKIAogCS8qIENvbm5lY3Qg dG8gY29ycmVjdCBkYXRhYmFzZSBhbmQgZ2V0IGJsb2NrIGluZm9ybWF0aW9uLiAqLwpAQCAt OTIzLDkgKzkyMiw2IEBAIGFwd19zdGFydF9sZWFkZXJfd29ya2VyKHZvaWQpCiAJCXJldHVy bjsKIAl9CiAKLQkvKiBtdXN0IHNldCBub3RpZnkgUElEIHRvIHdhaXQgZm9yIHN0YXJ0dXAg Ki8KLQl3b3JrZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7Ci0KIAlpZiAoIVJlZ2lz dGVyRHluYW1pY0JhY2tncm91bmRXb3JrZXIoJndvcmtlciwgJmhhbmRsZSkpCiAJCWVyZXBv cnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VT KSwKQEAgLTk1OCw5ICs5NTQsNiBAQCBhcHdfc3RhcnRfZGF0YWJhc2Vfd29ya2VyKHZvaWQp CiAJc3RyY3B5KHdvcmtlci5iZ3dfbmFtZSwgImF1dG9wcmV3YXJtIHdvcmtlciIpOwogCXN0 cmNweSh3b3JrZXIuYmd3X3R5cGUsICJhdXRvcHJld2FybSB3b3JrZXIiKTsKIAotCS8qIG11 c3Qgc2V0IG5vdGlmeSBQSUQgdG8gd2FpdCBmb3Igc2h1dGRvd24gKi8KLQl3b3JrZXIuYmd3 X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7Ci0KIAlpZiAoIVJlZ2lzdGVyRHluYW1pY0JhY2tn cm91bmRXb3JrZXIoJndvcmtlciwgJmhhbmRsZSkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTKSwKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L2Nvbm5lY3Rpb24uYwppbmRleCAzMTE5MzY0MDZmMi4uMGFjY2FhNzYwZDUgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYworKysgYi9jb250cmli L3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKQEAgLTIyLDEzICsyMiwxMyBAQAogI2luY2x1 ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1vbi9iYXNlNjQuaCIKICNp bmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1 ZGUgImxpYnBxL2xpYnBxLWJlLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEtYmUtZmUtaGVs cGVycy5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdGdyZXNfZmR3LmgiCi0j aW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgi CkBAIC04MzEsOCArODMxLDggQEAgZG9fc3FsX2NvbW1hbmRfZW5kKFBHY29ubiAqY29ubiwg Y29uc3QgY2hhciAqc3FsLCBib29sIGNvbnN1bWVfaW5wdXQpCiAJLyoKIAkgKiBJZiByZXF1 ZXN0ZWQsIGNvbnN1bWUgd2hhdGV2ZXIgZGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgc29j a2V0LiAoTm90ZQogCSAqIHRoYXQgaWYgYWxsIGRhdGEgaXMgYXZhaWxhYmxlLCB0aGlzIGFs bG93cyBwZ2Zkd19nZXRfcmVzdWx0IHRvIGNhbGwKLQkgKiBQUWdldFJlc3VsdCB3aXRob3V0 IGZvcmNpbmcgdGhlIG92ZXJoZWFkIG9mIFdhaXRMYXRjaE9yU29ja2V0LCB3aGljaAotCSAq IHdvdWxkIGJlIGxhcmdlIGNvbXBhcmVkIHRvIHRoZSBvdmVyaGVhZCBvZiBQUWNvbnN1bWVJ bnB1dC4pCisJICogUFFnZXRSZXN1bHQgd2l0aG91dCBmb3JjaW5nIHRoZSBvdmVyaGVhZCBv ZiBXYWl0SW50ZXJydXB0T3JTb2NrZXQsCisJICogd2hpY2ggd291bGQgYmUgbGFyZ2UgY29t cGFyZWQgdG8gdGhlIG92ZXJoZWFkIG9mIFBRY29uc3VtZUlucHV0LikKIAkgKi8KIAlpZiAo Y29uc3VtZV9pbnB1dCAmJiAhUFFjb25zdW1lSW5wdXQoY29ubikpCiAJCXBnZmR3X3JlcG9y dF9lcnJvcihOVUxMLCBjb25uLCBzcWwpOwpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAgcGdmZHdf Y2FuY2VsX3F1ZXJ5X2VuZChQR2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVuZHRpbWUsCiAJ LyoKIAkgKiBJZiByZXF1ZXN0ZWQsIGNvbnN1bWUgd2hhdGV2ZXIgZGF0YSBpcyBhdmFpbGFi bGUgZnJvbSB0aGUgc29ja2V0LiAoTm90ZQogCSAqIHRoYXQgaWYgYWxsIGRhdGEgaXMgYXZh aWxhYmxlLCB0aGlzIGFsbG93cyBwZ2Zkd19nZXRfY2xlYW51cF9yZXN1bHQgdG8KLQkgKiBj YWxsIFBRZ2V0UmVzdWx0IHdpdGhvdXQgZm9yY2luZyB0aGUgb3ZlcmhlYWQgb2YgV2FpdExh dGNoT3JTb2NrZXQsCisJICogY2FsbCBQUWdldFJlc3VsdCB3aXRob3V0IGZvcmNpbmcgdGhl IG92ZXJoZWFkIG9mIFdhaXRJbnRlcnJ1cHRPclNvY2tldCwKIAkgKiB3aGljaCB3b3VsZCBi ZSBsYXJnZSBjb21wYXJlZCB0byB0aGUgb3ZlcmhlYWQgb2YgUFFjb25zdW1lSW5wdXQuKQog CSAqLwogCWlmIChjb25zdW1lX2lucHV0ICYmICFQUWNvbnN1bWVJbnB1dChjb25uKSkKQEAg LTE1ODAsNyArMTU4MCw3IEBAIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9lbmQoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwKIAkvKgogCSAqIElmIHJlcXVlc3RlZCwgY29u c3VtZSB3aGF0ZXZlciBkYXRhIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzb2NrZXQuIChOb3Rl CiAJICogdGhhdCBpZiBhbGwgZGF0YSBpcyBhdmFpbGFibGUsIHRoaXMgYWxsb3dzIHBnZmR3 X2dldF9jbGVhbnVwX3Jlc3VsdCB0bwotCSAqIGNhbGwgUFFnZXRSZXN1bHQgd2l0aG91dCBm b3JjaW5nIHRoZSBvdmVyaGVhZCBvZiBXYWl0TGF0Y2hPclNvY2tldCwKKwkgKiBjYWxsIFBR Z2V0UmVzdWx0IHdpdGhvdXQgZm9yY2luZyB0aGUgb3ZlcmhlYWQgb2YgV2FpdEludGVycnVw dE9yU29ja2V0LAogCSAqIHdoaWNoIHdvdWxkIGJlIGxhcmdlIGNvbXBhcmVkIHRvIHRoZSBv dmVyaGVhZCBvZiBQUWNvbnN1bWVJbnB1dC4pCiAJICovCiAJaWYgKGNvbnN1bWVfaW5wdXQg JiYgIVBRY29uc3VtZUlucHV0KGNvbm4pKQpAQCAtMTY4OCwxMiArMTY4OCwxMSBAQCBwZ2Zk d19nZXRfY2xlYW51cF9yZXN1bHQoUEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBlbmR0aW1l LAogCQkJCXBnZmR3X3dlX2NsZWFudXBfcmVzdWx0ID0gV2FpdEV2ZW50RXh0ZW5zaW9uTmV3 KCJQb3N0Z3Jlc0Zkd0NsZWFudXBSZXN1bHQiKTsKIAogCQkJLyogU2xlZXAgdW50aWwgdGhl cmUncyBzb21ldGhpbmcgdG8gZG8gKi8KLQkJCXdjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlM YXRjaCwKLQkJCQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfU09DS0VUX1JFQURBQkxFIHwK LQkJCQkJCQkJICAgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCQkJ CSAgIFBRc29ja2V0KGNvbm4pLAotCQkJCQkJCQkgICBjdXJfdGltZW91dCwgcGdmZHdfd2Vf Y2xlYW51cF9yZXN1bHQpOwotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCXdjID0gV2Fp dEludGVycnVwdE9yU29ja2V0KENoZWNrRm9ySW50ZXJydXB0c01hc2ssCisJCQkJCQkJCQkg ICBXTF9JTlRFUlJVUFQgfCBXTF9TT0NLRVRfUkVBREFCTEUgfAorCQkJCQkJCQkJICAgV0xf VElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJCQkgICBQUXNvY2tldChj b25uKSwKKwkJCQkJCQkJCSAgIGN1cl90aW1lb3V0LCBwZ2Zkd193ZV9jbGVhbnVwX3Jlc3Vs dCk7CiAKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv cG9zdGdyZXNfZmR3LmMKaW5kZXggNjBkOTAzMjlhNjUuLmViOTI1ZmRhMzllIDEwMDY0NAot LS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtMzksNyArMzksNyBAQAogI2luY2x1 ZGUgIm9wdGltaXplci90bGlzdC5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIK ICNpbmNsdWRlICJwb3N0Z3Jlc19mZHcuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgi CisjaW5jbHVkZSAic3RvcmFnZS93YWl0ZXZlbnRzZXQuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCiAjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCkBAIC03Mjc2LDcgKzcyNzYsNyBAQCBwb3N0Z3Jlc0ZvcmVpZ25Bc3luY0NvbmZp Z3VyZVdhaXQoQXN5bmNSZXF1ZXN0ICphcmVxKQogCQlBc3NlcnQocGVuZGluZ0FyZXEgPT0g YXJlcSk7CiAKIAlBZGRXYWl0RXZlbnRUb1NldChzZXQsIFdMX1NPQ0tFVF9SRUFEQUJMRSwg UFFzb2NrZXQoZnNzdGF0ZS0+Y29ubiksCi0JCQkJCSAgTlVMTCwgYXJlcSk7CisJCQkJCSAg MCwgYXJlcSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvYmd3b3JrZXIu c2dtbCBiL2RvYy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21sCmluZGV4IDJhZmZiYTc0MzgyLi4w NmJjNTdmMTBiZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Jnd29ya2VyLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2Jnd29ya2VyLnNnbWwKQEAgLTYzLDcgKzYzLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgQmFja2dyb3VuZFdvcmtlcgogICAgIGNoYXIgICAgICAgIGJnd19mdW5jdGlv bl9uYW1lW0JHV19NQVhMRU5dOwogICAgIERhdHVtICAgICAgIGJnd19tYWluX2FyZzsKICAg ICBjaGFyICAgICAgICBiZ3dfZXh0cmFbQkdXX0VYVFJBTEVOXTsKLSAgICBwaWRfdCAgICAg ICBiZ3dfbm90aWZ5X3BpZDsKKyAgICBwaWRfdCAgICAgICBiZ3dfbm90aWZ5X3BpZDsJCQkv KiBub3QgdXNlZCAqLwogfSBCYWNrZ3JvdW5kV29ya2VyOwogPC9wcm9ncmFtbGlzdGluZz4K ICAgPC9wYXJhPgpAQCAtMTMxLDYgKzEzMSwyMSBAQCB0eXBlZGVmIHN0cnVjdCBCYWNrZ3Jv dW5kV29ya2VyCiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAg ICA8dmFybGlzdGVudHJ5PgorICAgICA8dGVybT48bGl0ZXJhbD5CR1dPUktFUl9OT19OT1RJ Rlk8L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAg ICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5PkJHV09SS0VSX05PX05PVElGWTwvcHJpbWFyeT48 L2luZGV4dGVybT4gTm9ybWFsbHksCisgICAgICAgdGhlIGJhY2tlbmQgdGhhdCByZWdpc3Rl cnMgYSBkeW5hbWljIHdvcmtlciB3aWxsIGJlIG5vdGlmaWVkCisgICAgICAgd2l0aCA8bGl0 ZXJhbD5JTlRFUlJVUFRfV0FJVF9XQUtFVVA8L2xpdGVyYWw+IHdoZW4gdGhlIHdvcmtlcidz IHN0YXRlCisgICAgICAgY2hhbmdlcywgd2hpY2ggYWxsb3dzIHRoZSBjYWxsZXIgdG8gd2Fp dCBmb3IgdGhlIHdvcmtlciB0byBzdGFydCBhbmQKKyAgICAgICBzaHV0IGRvd24uICBUaGF0 IGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHNldHRpbmcgdGhpcyBmbGFnLgorICAgICAgIDwhLS0g RklYTUU6IFNob3VsZCB3ZSByZXNlcnZlIGEgZGVkaWNhdGVkIElOVEVSUlVQVCBiaXQgZm9y IGl0PyBBbmQgaWYKKyAgICAgICAgICAgIHdlIGRvLCBkbyB3ZSBldmVuIG5lZWQgdGhlIEJH V09SS0VSX05PX05PVElGWSBmbGFnLCB0aGVyZSdzIHZlcnkgbGl0dGxlCisgICAgICAgICAg ICBvdmVyaGVhZCBpbiBzZW5kaW5nIGEgdXNlbGVzcyBpbnRlcnJ1cHQgLS0+CisgICAgICA8 L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CiAgICA8L3Zh cmlhYmxlbGlzdD4KIAogICA8L3BhcmE+CkBAIC0yMDQsMTIgKzIxOSw4IEBAIHR5cGVkZWYg c3RydWN0IEJhY2tncm91bmRXb3JrZXIKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgPHN0 cnVjdGZpZWxkPmJnd19ub3RpZnlfcGlkPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIFBJRCBvZiBh IFBvc3RncmVTUUwKLSAgIGJhY2tlbmQgcHJvY2VzcyB0byB3aGljaCB0aGUgcG9zdG1hc3Rl ciBzaG91bGQgc2VuZCA8bGl0ZXJhbD5TSUdVU1IxPC9saXRlcmFsPgotICAgd2hlbiB0aGUg cHJvY2VzcyBpcyBzdGFydGVkIG9yIGV4aXRzLiAgSXQgc2hvdWxkIGJlIDAgZm9yIHdvcmtl cnMgcmVnaXN0ZXJlZAotICAgYXQgcG9zdG1hc3RlciBzdGFydHVwIHRpbWUsIG9yIHdoZW4g dGhlIGJhY2tlbmQgcmVnaXN0ZXJpbmcgdGhlIHdvcmtlciBkb2VzCi0gICBub3Qgd2lzaCB0 byB3YWl0IGZvciB0aGUgd29ya2VyIHRvIHN0YXJ0IHVwLiAgT3RoZXJ3aXNlLCBpdCBzaG91 bGQgYmUKLSAgIGluaXRpYWxpemVkIHRvIDxsaXRlcmFsPk15UHJvY1BpZDwvbGl0ZXJhbD4u CisgICA8c3RydWN0ZmllbGQ+Ymd3X25vdGlmeV9waWQ8L3N0cnVjdGZpZWxkPiBpcyBub3Qg dXNlZCBhbmQgbWF5IGJlIHJlbW92ZWQKKyAgIGluIGEgZnV0dXJlIHJlbGVhc2UuCiAgIDwv cGFyYT4KIAogICA8cGFyYT5PbmNlIHJ1bm5pbmcsIHRoZSBwcm9jZXNzIGNhbiBjb25uZWN0 IHRvIGEgZGF0YWJhc2UgYnkgY2FsbGluZwpAQCAtMjYwLDcgKzI3MSw3IEBAIHR5cGVkZWYg c3RydWN0IEJhY2tncm91bmRXb3JrZXIKICAgIHJlaW5pdGlhbGl6ZXMgdGhlIGNsdXN0ZXIg ZHVlIHRvIGEgYmFja2VuZCBmYWlsdXJlLiAgQmFja2VuZHMgd2hpY2ggbmVlZAogICAgdG8g c3VzcGVuZCBleGVjdXRpb24gb25seSB0ZW1wb3JhcmlseSBzaG91bGQgdXNlIGFuIGludGVy cnVwdGlibGUgc2xlZXAKICAgIHJhdGhlciB0aGFuIGV4aXRpbmc7IHRoaXMgY2FuIGJlIGFj aGlldmVkIGJ5IGNhbGxpbmcKLSAgIDxmdW5jdGlvbj5XYWl0TGF0Y2goKTwvZnVuY3Rpb24+ LiBNYWtlIHN1cmUgdGhlCisgICA8ZnVuY3Rpb24+V2FpdEludGVycnVwdCgpPC9mdW5jdGlv bj4uIE1ha2Ugc3VyZSB0aGUKICAgIDxsaXRlcmFsPldMX1BPU1RNQVNURVJfREVBVEg8L2xp dGVyYWw+IGZsYWcgaXMgc2V0IHdoZW4gY2FsbGluZyB0aGF0IGZ1bmN0aW9uLCBhbmQKICAg IHZlcmlmeSB0aGUgcmV0dXJuIGNvZGUgZm9yIGEgcHJvbXB0IGV4aXQgaW4gdGhlIGVtZXJn ZW5jeSBjYXNlIHRoYXQKICAgIDxjb21tYW5kPnBvc3RncmVzPC9jb21tYW5kPiBpdHNlbGYg aGFzIHRlcm1pbmF0ZWQuCkBAIC0yOTEsMTAgKzMwMiw3IEBAIHR5cGVkZWYgc3RydWN0IEJh Y2tncm91bmRXb3JrZXIKIAogICA8cGFyYT4KICAgIEluIHNvbWUgY2FzZXMsIGEgcHJvY2Vz cyB3aGljaCByZWdpc3RlcnMgYSBiYWNrZ3JvdW5kIHdvcmtlciBtYXkgd2lzaCB0bwotICAg d2FpdCBmb3IgdGhlIHdvcmtlciB0byBzdGFydCB1cC4gIFRoaXMgY2FuIGJlIGFjY29tcGxp c2hlZCBieSBpbml0aWFsaXppbmcKLSAgIDxzdHJ1Y3RmaWVsZD5iZ3dfbm90aWZ5X3BpZDwv c3RydWN0ZmllbGQ+IHRvIDxsaXRlcmFsPk15UHJvY1BpZDwvbGl0ZXJhbD4gYW5kCi0gICB0 aGVuIHBhc3NpbmcgdGhlIDx0eXBlPkJhY2tncm91bmRXb3JrZXJIYW5kbGUgKjwvdHlwZT4g b2J0YWluZWQgYXQKLSAgIHJlZ2lzdHJhdGlvbiB0aW1lIHRvCisgICB3YWl0IGZvciB0aGUg d29ya2VyIHRvIHN0YXJ0IHVwLiAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIHdpdGggdGhl CiAgICA8ZnVuY3Rpb24+V2FpdEZvckJhY2tncm91bmRXb3JrZXJTdGFydHVwKDxwYXJhbWV0 ZXI+QmFja2dyb3VuZFdvcmtlckhhbmRsZQogICAgKmhhbmRsZTwvcGFyYW1ldGVyPiwgPHBh cmFtZXRlcj5waWRfdCAqPC9wYXJhbWV0ZXI+KTwvZnVuY3Rpb24+IGZ1bmN0aW9uLgogICAg VGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBwb3N0bWFzdGVyIGhhcyBhdHRl bXB0ZWQgdG8gc3RhcnQgdGhlCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvb2F1dGgtdmFs aWRhdG9ycy5zZ21sIGIvZG9jL3NyYy9zZ21sL29hdXRoLXZhbGlkYXRvcnMuc2dtbAppbmRl eCA3MDQwODlkZDdiMy4uM2M0MjY4Zjc0MWYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9v YXV0aC12YWxpZGF0b3JzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL29hdXRoLXZhbGlkYXRv cnMuc2dtbApAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgICAgY29ycmVjdGx5IGhhbmRsZSBh dXRoZW50aWNhdGlvbiB0aW1lb3V0cyBhbmQgc2h1dGRvd24gc2lnbmFscyBmcm9tCiAgICAg ICAgPGFwcGxpY2F0aW9uPnBnX2N0bDwvYXBwbGljYXRpb24+LiBGb3IgZXhhbXBsZSwgYmxv Y2tpbmcgY2FsbHMgb24gc29ja2V0cwogICAgICAgIHNob3VsZCBnZW5lcmFsbHkgYmUgcmVw bGFjZWQgd2l0aCBjb2RlIHRoYXQgaGFuZGxlcyBib3RoIHNvY2tldCBldmVudHMKLSAgICAg ICBhbmQgaW50ZXJydXB0cyB3aXRob3V0IHJhY2VzIChzZWUgPGZ1bmN0aW9uPldhaXRMYXRj aE9yU29ja2V0KCk8L2Z1bmN0aW9uPiwKKyAgICAgICBhbmQgaW50ZXJydXB0cyB3aXRob3V0 IHJhY2VzIChzZWUgPGZ1bmN0aW9uPldhaXRJbnRlcnJ1cHRPclNvY2tldCgpPC9mdW5jdGlv bj4sCiAgICAgICAgPGZ1bmN0aW9uPldhaXRFdmVudFNldFdhaXQoKTwvZnVuY3Rpb24+LCBl dCBhbCksIGFuZCBsb25nLXJ1bm5pbmcgbG9vcHMKICAgICAgICBzaG91bGQgcGVyaW9kaWNh bGx5IGNhbGwgPGZ1bmN0aW9uPkNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk8L2Z1bmN0aW9uPi4K ICAgICAgICBGYWlsdXJlIHRvIGZvbGxvdyB0aGlzIGd1aWRhbmNlIG1heSByZXN1bHQgaW4g dW5yZXNwb25zaXZlIGJhY2tlbmQKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zb3VyY2Vz LnNnbWwgYi9kb2Mvc3JjL3NnbWwvc291cmNlcy5zZ21sCmluZGV4IDc2MGY5YjY5ZDQ3Li42 MmZmOWUzZTM5NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3NvdXJjZXMuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvc291cmNlcy5zZ21sCkBAIC05ODgsMjIgKzk4OCwyNSBAQCBNZW1v cnlDb250ZXh0U3dpdGNoVG8oTWVtb3J5Q29udGV4dCBjb250ZXh0KQogICAgICBjYWxsIGFz eW5jLXNpZ25hbCBzYWZlIGZ1bmN0aW9ucyAoYXMgZGVmaW5lZCBpbiBQT1NJWCkgYW5kIGFj Y2VzcwogICAgICB2YXJpYWJsZXMgb2YgdHlwZSA8bGl0ZXJhbD52b2xhdGlsZSBzaWdfYXRv bWljX3Q8L2xpdGVyYWw+LiBBIGZldwogICAgICBmdW5jdGlvbnMgaW4gPGNvbW1hbmQ+cG9z dGdyZXM8L2NvbW1hbmQ+IGFyZSBhbHNvIGRlZW1lZCBzaWduYWwgc2FmZSwgaW1wb3J0YW50 bHkKLSAgICAgPGZ1bmN0aW9uPlNldExhdGNoKCk8L2Z1bmN0aW9uPi4KKyAgICAgPGZ1bmN0 aW9uPlJhaXNlSW50ZXJydXB0KCk8L2Z1bmN0aW9uPi4KICAgICA8L3BhcmE+CiAgICAgPHBh cmE+CiAgICAgIEluIG1vc3QgY2FzZXMgc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBkbyBub3Ro aW5nIG1vcmUgdGhhbiBub3RlCiAgICAgIHRoYXQgYSBzaWduYWwgaGFzIGFycml2ZWQsIGFu ZCB3YWtlIHVwIGNvZGUgcnVubmluZyBvdXRzaWRlIG9mCi0gICAgIHRoZSBoYW5kbGVyIHVz aW5nIGEgbGF0Y2guIEFuIGV4YW1wbGUgb2Ygc3VjaCBhIGhhbmRsZXIgaXMgdGhlCisgICAg IHRoZSBoYW5kbGVyIHVzaW5nIFJhaXNlSW50ZXJydXB0KCkuIEFuIGV4YW1wbGUgb2Ygc3Vj aCBhIGhhbmRsZXIgaXMgdGhlCiAgICAgIGZvbGxvd2luZzoKIDxwcm9ncmFtbGlzdGluZz4K IHN0YXRpYyB2b2lkCiBoYW5kbGVfc2lnaHVwKFNJR05BTF9BUkdTKQogewotICAgIGdvdF9T SUdIVVAgPSB0cnVlOwotICAgIFNldExhdGNoKE15TGF0Y2gpOworICAgIFJhaXNlSW50ZXJy dXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKTsKIH0KIDwvcHJvZ3JhbWxpc3Rpbmc+CiAg ICAgPC9wYXJhPgorICAgIDwhLS0gVE9ETzogVGhpcyBzZWN0aW9uIGlzIG5vdCB3cm9uZywg YnV0IHNob3VsZCBiZSB1cGRhdGVkLiBTaG91bGQKKyAgICAgICAgIGRvY3VtZW50IGFuZCBl bXBoYXNpemUgdGhlIGludGVycnVwdCBtZWNoYW5pc20gbW9yZSwgYW5kIHRoZQorICAgICAg ICAgaGFuZGxlX3NpZ2h1cCBleGFtcGxlIGlzIGJhZCBiZWNhdXNlIHRoZSBzdGFuZGFyZCBz aWduYWwgaGFuZGxlciBmb3IKKyAgICAgICAgIFNJR0hVUCBhbHJlYWR5IGRvZXMgdGhhdCAt LT4KICAgIDwvc2ltcGxlc2VjdD4KIAogICAgPHNpbXBsZXNlY3QgaWQ9InNvdXJjZS1jb252 ZW50aW9ucy1mdW5jdGlvbi1wb2ludGVycyI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9N YWtlZmlsZSBiL3NyYy9iYWNrZW5kL01ha2VmaWxlCmluZGV4IGJhNTNjZDlkOTk4Li42ZTFi YWM4Y2E3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAgU1VCRElSUyA9IFwKIAljb21tYW5k cyBcCiAJZXhlY3V0b3IgXAogCWZvcmVpZ24gXAorCWlwYyBcCiAJbGliIFwKIAlsaWJwcSBc CiAJbWFpbiBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3Bh Z2VvcHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fcGFnZW9wcy5jCmluZGV4 IDdkYTk3YmVjNDNiLi4zMDhmZmQ3ZTU2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbl9wYWdlb3BzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbl9wYWdlb3BzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvYnJp bl9yZXZtYXAuaCIKICNpbmNsdWRlICJhY2Nlc3MvYnJpbl94bG9nLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3hsb2dpbnNlcnQuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRl ICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNs dWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9yZXZtYXAuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fcmV2bWFwLmMKaW5kZXggMjMzMzU1Y2IyZDUu LjUyNmJhNzQ3YzYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu X3Jldm1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fcmV2bWFwLmMK QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvYnJpbl94bG9nLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3JtZ3IuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgot I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFscy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYwppbmRleCA0 ZDBkYTA3MTM1ZS4uZThlODRlMjQ4Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vdG9hc3RfaW50ZXJuYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2Nv bW1vbi90b2FzdF9pbnRlcm5hbHMuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgImFj Y2Vzcy90b2FzdF9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2lu Y2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luYnRyZWUuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luYnRyZWUuYwppbmRleCAzZDNhOWRhNTZiMS4uYzRmMjhiZmIx MWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luYnRyZWUuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmJ0cmVlLmMKQEAgLTE3LDcgKzE3LDcgQEAK ICNpbmNsdWRlICJhY2Nlc3MvZ2luX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2lu eGxvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCi0jaW5jbHVkZSAibWlz Y2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2luZGF0YXBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZGF0 YXBhZ2UuYwppbmRleCBjNWQ3ZGIyODA3Ny4uMDZjOTk2ZjZmYzAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZGF0YXBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbmRhdGFwYWdlLmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlICJh Y2Nlc3MvZ2luX3ByaXZhdGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2lueGxvZy5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5o IgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZmFzdC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW5mYXN0LmMKaW5kZXggZjUwODQ4ZWI2NWEuLmRkZjQxNDY2 MGUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmZhc3QuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmZhc3QuYwpAQCAtMjQsNiArMjQsNyBAQAog I2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19h bS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUgImlwYy9pbnRl cnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2Jp dHV0aWxzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWE4ZS4uMGVmNTVkMzA0YjggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImFj Y2Vzcy9naW5fcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5j bHVkZSAiY29tbW9uL3BnX3BybmcuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIK ICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpp bmRleCBmZjkyNzI3OWNjMy4uNDYwY2Q5ZjlkOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2lu dXRpbC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy92 YWN1dW0uaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJy dXB0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pbmRleGZzbS5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvaW5kZXhfc2VsZnVuY3MuaCIKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludmFjdXVtLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbnZhY3V1bS5jCmluZGV4IGM5ZjE0M2Y2YzMxLi5iMmFjNmUyNDdl NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW52YWN1dW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnZhY3V1bS5jCkBAIC0xOCw2ICsxOCw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL2dpbnhsb2cuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2lu c2VydC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgorI2luY2x1ZGUgImlwYy9p bnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdl L2luZGV4ZnNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0LmMKaW5kZXggZGZmZmNlM2UzOTYuLjlmYzAzMTM0ODA0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b2xsYXRpb24uaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibm9k ZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNs dWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0Z2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMK aW5kZXggYjY0Y2NmNWU5MTIuLmZiN2E5ZWEyYTFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0Z2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdGdldC5jCkBAIC0xOCw4ICsxOCw4IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpc3RfcHJp dmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvaW5zdHJ1bWVudF9ub2RlLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2lu Y2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5j bHVkZSAidXRpbHMvZmxvYXQuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3R2YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0u YwppbmRleCA5ZTcxNDk4MGQyNi4uZTEzYWE0OTczMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0dmFjdXVtLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlICJhY2Nlc3Mv Z2lzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRl ICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5j bHVkZSAibGliL2ludGVnZXJzZXQuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJzdG9yYWdlL2luZGV4ZnNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVhbS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5j CmluZGV4IGU4OGRkYjMyYTA1Li4xMjkyNDA2ZWJiZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0Lmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJjb21tYW5kcy92 YWN1dW0uaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJy dXB0LmgiCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL3BsYW5jYXQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hpbnNlcnQuYwppbmRleCAwY2VmYmFjYzk2ZS4uNzdlOTM5MGIxZjkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKQEAgLTE4LDcgKzE4LDcgQEAKICNp bmNsdWRlICJhY2Nlc3MvaGFzaC5oIgogI2luY2x1ZGUgImFjY2Vzcy9oYXNoX3hsb2cuaCIK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRp Y2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzVkNi4uNWFlOTExNGNkNjUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hvdmZsLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaG92ZmwuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgImFj Y2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hhc2hfeGxvZy5oIgogI2luY2x1ZGUg ImFjY2Vzcy94bG9naW5zZXJ0LmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZTE2Li45NjE3MmMzMjIz NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0zMSw3ICszMSw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaGFzaF94bG9n LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKLSNpbmNsdWRlICJtaXNjYWRt aW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19i aXR1dGlscy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9zbWdyLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoc2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKaW5k ZXggODlkMWM1YmM2ZDcuLjRjNmE4OTgwZTUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaHNlYXJjaC5jCkBAIC0xNiw4ICsxNiw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaGFz aC5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCi0jaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgiCisjaW5jbHVkZSAi aXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc29ydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNvcnQuYwppbmRleCA3N2JiZmFhNDYxYi4uMWJiZjBkMzM5NjYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzb3J0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNvcnQuYwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5j bHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgot I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5j bHVkZSAidXRpbHMvdHVwbGVzb3J0LmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9wcnVuZWhlYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3BydW5laGVh cC5jCmluZGV4IDY1YzlmMzkzZjQxLi5hOGVjNGJlNGI0ZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvcHJ1bmVoZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvcHJ1bmVoZWFwLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNs dWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRleCBkNDQxMTIyYzQyNi4uMDY5NmQzYjEwOTkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKQEAgLTE0MywxMyArMTQz LDEzIEBACiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19w cm5nLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgorI2luY2x1ZGUgImlw Yy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0 YXQuaCIKICNpbmNsdWRlICJwb3J0YWJpbGl0eS9pbnN0cl90aW1lLmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2ZyZWVzcGFjZS5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0 Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Jl YWRfc3RyZWFtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCkBAIC0zMzA1LDEx ICszMzA1LDEwIEBAIGxhenlfdHJ1bmNhdGVfaGVhcChMVlJlbFN0YXRlICp2YWNyZWwpCiAJ CQkJcmV0dXJuOwogCQkJfQogCi0JCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCi0JCQkJ CQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAot CQkJCQkJCSBWQUNVVU1fVFJVTkNBVEVfTE9DS19XQUlUX0lOVEVSVkFMLAotCQkJCQkJCSBX QUlUX0VWRU5UX1ZBQ1VVTV9UUlVOQ0FURSk7Ci0JCQlSZXNldExhdGNoKE15TGF0Y2gpOwor CQkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaywKKwkJCQkJ CQkJIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAor CQkJCQkJCQkgVkFDVVVNX1RSVU5DQVRFX0xPQ0tfV0FJVF9JTlRFUlZBTCwKKwkJCQkJCQkJ IFdBSVRfRVZFTlRfVkFDVVVNX1RSVU5DQVRFKTsKIAkJfQogCiAJCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKaW5kZXggMzA0N2JkNDZkZWYuLmRhMTk1 MmU5NDEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5 bWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCkBA IC05MSw3ICs5MSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNp bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRp bHMuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv YnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9nZW5hbS5jCmluZGV4IDVlODliODZhNjJjLi43MGE0ZTRlZTAwYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2dlbmFtLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mv dGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9pbmRleC5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJs aWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idGRlZHVwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKaW5k ZXggOTViZTBiMTc5MzkuLjRkOTk4YWRjMmFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRkZWR1cC5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL25idHhs b2cuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94 bG9naW5zZXJ0LmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2lu dGVycnVwdC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgdm9pZCBfYnRf Ym90dG9tdXBkZWxfZmluaXNoX3BlbmRpbmcoUGFnZSBwYWdlLCBCVERlZHVwU3RhdGUgc3Rh dGUsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGluc2VydC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwppbmRleCBkMTdhYWE1 YWEwZi4uZTAwN2IyZWE1MTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNl cnQuYwpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0Lmgi CiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgogI2luY2x1ZGUgImNvbW1vbi9wZ19wcm5nLmgi CisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYi9xdW5pcXVlLmgi Ci0jaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9pbmplY3Rp b25fcG9pbnQuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggNDEy NWMxODVlOGIuLjkzOGY5MDQ3YzM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBh Z2UuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjb21tb24vaW50LmgiCisj aW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvaW5kZXhmc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0 ZS5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2gu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggMzJhZTBi ZGE4OTIuLjZmMWY5ZGMwZDgyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgog I2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVu dF9ub2RlLmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGlj YXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2RvaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ2RvaW5zZXJ0LmMKaW5kZXggN2M3MzcxYzY5ZTguLmI4YjVlYWFjNTdh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2RvaW5zZXJ0LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdkb2luc2VydC5jCkBAIC0yMDM1 LDggKzIwMzUsMTEgQEAgc3BnZG9pbnNlcnQoUmVsYXRpb24gaW5kZXgsIFNwR2lzdFN0YXRl ICpzdGF0ZSwKIAkJICogcGVuZGluZywgYnJlYWsgb3V0IG9mIHRoZSBsb29wIGFuZCBkZWFs IHdpdGggdGhlIHNpdHVhdGlvbiBiZWxvdy4KIAkJICogU2V0IHJlc3VsdCA9IGZhbHNlIGJl Y2F1c2Ugd2UgbXVzdCByZXN0YXJ0IHRoZSBpbnNlcnRpb24gaWYgdGhlCiAJCSAqIGludGVy cnVwdCBpc24ndCBhIHF1ZXJ5LWNhbmNlbC1vci1kaWUgY2FzZS4KKwkJICoKKwkJICogRklY TUU6IENoZWNrRm9ySW50ZXJydXB0c01hc2sgY292ZXJzIG1vcmUgdGhhbiBqdXN0IHF1ZXJ5 IGNhbmNlbAorCQkgKiBhbmQgZGllLiAgQ291bGQgd2UgYmUgbW9yZSBwcmVjaXNlIGhlcmU/ CiAJCSAqLwotCQlpZiAoSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTigpKQorCQlpZiAo SU5URVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTihDaGVja0ZvckludGVycnVwdHNNYXNrKSkK IAkJewogCQkJcmVzdWx0ID0gZmFsc2U7CiAJCQlicmVhazsKQEAgLTIxNjIsNyArMjE2NSw3 IEBAIHNwZ2RvaW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBTcEdpc3RTdGF0ZSAqc3RhdGUsCiAJ CQkgKiByZXBlYXRlZGx5LCBjaGVjayBmb3IgcXVlcnkgY2FuY2VsIChzZWUgY29tbWVudHMg YWJvdmUpLgogCQkJICovCiAJcHJvY2Vzc19pbm5lcl90dXBsZToKLQkJCWlmIChJTlRFUlJV UFRTX1BFTkRJTkdfQ09ORElUSU9OKCkpCisJCQlpZiAoSU5URVJSVVBUU19QRU5ESU5HX0NP TkRJVElPTihDaGVja0ZvckludGVycnVwdHNNYXNrKSkKIAkJCXsKIAkJCQlyZXN1bHQgPSBm YWxzZTsKIAkJCQlicmVhazsKQEAgLTIzMzgsNyArMjM0MSw3IEBAIHNwZ2RvaW5zZXJ0KFJl bGF0aW9uIGluZGV4LCBTcEdpc3RTdGF0ZSAqc3RhdGUsCiAJICogd2VyZSB0aGUgY2FzZSwg dGVsbGluZyB0aGUgY2FsbGVyIHRvIHJldHJ5IHdvdWxkIGNyZWF0ZSBhbiBpbmZpbml0ZQog CSAqIGxvb3AuCiAJICovCi0JQXNzZXJ0KElOVEVSUlVQVFNfQ0FOX0JFX1BST0NFU1NFRCgp KTsKKwlBc3NlcnQoSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKENoZWNrRm9ySW50ZXJy dXB0c01hc2spKTsKIAogCS8qCiAJICogRmluYWxseSwgY2hlY2sgZm9yIGludGVycnVwdHMg YWdhaW4uICBJZiB0aGVyZSB3YXMgYSBxdWVyeSBjYW5jZWwsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGdpbnNlcnQuYwppbmRleCA3ODBlZjY0NmE1NC4uYzJkN2NhZjZmNjggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYwpAQCAtMjAsNyArMjAsNyBA QAogI2luY2x1ZGUgImFjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vz cy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKLSNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNs dWRlICJzdG9yYWdlL2J1bGtfd3JpdGUuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3Bnc2Nhbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdz Y2FuLmMKaW5kZXggMmNjNWYwNmY1ZDcuLjQ3NWE1MGNkZGNmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3NjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ3NjYW4uYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgImFjY2Vz cy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmgiCiAjaW5j bHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgiCi0jaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCmluZGV4IDZiNzExN2I1NmIy Li44ODRhY2I2OGMzNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGd2YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5j CkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNs dWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5o IgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaW5kZXhm c20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L1JFQURNRQppbmRleCAyMzExMDYyNzBmZC4uNzNhNzI3ZDUzZDYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9SRUFETUUKQEAgLTc5NCw3ICs3OTQsNyBAQCBjb21taXQgdG8gbWluaW1p emUgdGhlIHdpbmRvdyBpbiB3aGljaCB0aGUgZmlsZXN5c3RlbSBjaGFuZ2UgaGFzIGJlZW4g bWFkZQogYnV0IHRoZSB0cmFuc2FjdGlvbiBpc24ndCBndWFyYW50ZWVkIGNvbW1pdHRlZC4K IAogVGhlIHdhbHdyaXRlciByZWd1bGFybHkgd2FrZXMgdXAgKHZpYSB3YWxfd3JpdGVyX2Rl bGF5KSBvciBpcyB3b2tlbiB1cAotKHZpYSBpdHMgbGF0Y2gsIHdoaWNoIGlzIHNldCBieSBi YWNrZW5kcyBjb21taXR0aW5nIGFzeW5jaHJvbm91c2x5KSBhbmQKKyh2aWEgYW4gaW50ZXJy dXB0LCB3aGljaCBpcyBzZW50IGJ5IGJhY2tlbmRzIGNvbW1pdHRpbmcgYXN5bmNocm9ub3Vz bHkpIGFuZAogcGVyZm9ybXMgYW4gWExvZ0JhY2tncm91bmRGbHVzaCgpLiAgVGhpcyBjaGVj a3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0CiBjb21wbGV0ZWx5IGZpbGxlZCBXQUwgcGFn ZS4gIElmIHRoYXQgaGFzIG1vdmVkIGZvcndhcmRzLCB0aGVuIHdlIHdyaXRlIGFsbAogdGhl IGNoYW5nZWQgYnVmZmVycyB1cCB0byB0aGF0IHBvaW50LCBzbyB0aGF0IHVuZGVyIGZ1bGwg bG9hZCB3ZSB3cml0ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v UkVBRE1FLnBhcmFsbGVsIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vUkVBRE1FLnBh cmFsbGVsCmluZGV4IDlkZjNkYTkxYjBjLi5hMzU5M2RkNGY1NCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vUkVBRE1FLnBhcmFsbGVsCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL1JFQURNRS5wYXJhbGxlbApAQCAtMzcsNyArMzcsNyBAQCB3 aXRoIGZld2VyIHBhcmFsbGVsIHdvcmtlcnMgdGhhbiBpdCBvcmlnaW5hbGx5IHJlcXVlc3Rl ZCwgc28gY2F0ZXJpbmcgdG8KIHRoaXMgY2FzZSBpbXBvc2VzIG5vIGFkZGl0aW9uYWwgYnVy ZGVuLgogCiBXaGVuZXZlciBhIG5ldyBtZXNzYWdlIChvciBwYXJ0aWFsIG1lc3NhZ2U7IHZl cnkgbGFyZ2UgbWVzc2FnZXMgbWF5IHdyYXApIGlzCi1zZW50IHRvIHRoZSBlcnJvci1yZXBv cnRpbmcgcXVldWUsIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSBpcyBzZW50IHRvIHRoZQor c2VudCB0byB0aGUgZXJyb3ItcmVwb3J0aW5nIHF1ZXVlLCBJTlRFUlJVUFRfUEFSQUxMRUxf TUVTU0FHRSBpcyBzZW50IHRvIHRoZQogaW5pdGlhdGluZyBiYWNrZW5kLiAgVGhpcyBjYXVz ZXMgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBpbiB0aGUKIGluaXRpYXRpbmcg YmFja2VuZCB0byByZWFkIGFuZCByZXRocm93IHRoZSBtZXNzYWdlLiAgRm9yIHRoZSBtb3N0 IHBhcnQsIHRoaXMKIG1ha2VzIGVycm9yIHJlcG9ydGluZyBpbiBwYXJhbGxlbCBtb2RlICJq dXN0IHdvcmsiLiAgT2YgY291cnNlLCB0byB3b3JrCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9nZW5lcmljX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL2dlbmVyaWNfeGxvZy5jCmluZGV4IDdmODIxODZkMGQ2Li42ZWNhMjQ1MWE3MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vZ2VuZXJpY194bG9nLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vZ2VuZXJpY194bG9nLmMKQEAgLTE2 LDcgKzE2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvYnVmbWFzay5oIgogI2luY2x1ZGUgImFj Y2Vzcy9nZW5lcmljX3hsb2cuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCi0j aW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogCiAv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEludGVybmFsbHksIGEgZGVsdGEgYmV0d2VlbiBw YWdlcyBjb25zaXN0cyBvZiBhIHNldCBvZiBmcmFnbWVudHMuICBFYWNoCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwppbmRleCBlNjljNGI3NDI0OC4uYzY2OGEyNmQ1 YTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwpAQCAtMjgsNiAr MjgsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmgiCisjaW5j bHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5j bHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCkBAIC0x MTUsOSArMTE2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgRml4ZWRQYXJhbGxlbFN0YXRlCiAgKi8K IGludAkJCVBhcmFsbGVsV29ya2VyTnVtYmVyID0gLTE7CiAKLS8qIElzIHRoZXJlIGEgcGFy YWxsZWwgbWVzc2FnZSBwZW5kaW5nIHdoaWNoIHdlIG5lZWQgdG8gcmVjZWl2ZT8gKi8KLXZv bGF0aWxlIHNpZ19hdG9taWNfdCBQYXJhbGxlbE1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7Ci0K IC8qIEFyZSB3ZSBpbml0aWFsaXppbmcgYSBwYXJhbGxlbCB3b3JrZXI/ICovCiBib29sCQlJ bml0aWFsaXppbmdQYXJhbGxlbFdvcmtlciA9IGZhbHNlOwogCkBAIC0xMjcsOSArMTI1LDYg QEAgc3RhdGljIEZpeGVkUGFyYWxsZWxTdGF0ZSAqTXlGaXhlZFBhcmFsbGVsU3RhdGU7CiAv KiBMaXN0IG9mIGFjdGl2ZSBwYXJhbGxlbCBjb250ZXh0cy4gKi8KIHN0YXRpYyBkbGlzdF9o ZWFkIHBjeHRfbGlzdCA9IERMSVNUX1NUQVRJQ19JTklUKHBjeHRfbGlzdCk7CiAKLS8qIEJh Y2tlbmQtbG9jYWwgY29weSBvZiBkYXRhIGZyb20gRml4ZWRQYXJhbGxlbFN0YXRlLiAqLwot c3RhdGljIHBpZF90IFBhcmFsbGVsTGVhZGVyUGlkOwotCiAvKgogICogTGlzdCBvZiBpbnRl cm5hbCBwYXJhbGxlbCB3b3JrZXIgZW50cnkgcG9pbnRzLiAgV2UgbmVlZCB0aGlzIGZvcgog ICogcmVhc29ucyBleHBsYWluZWQgaW4gTG9va3VwUGFyYWxsZWxXb3JrZXJGdW5jdGlvbigp LCBiZWxvdy4KQEAgLTI0Myw3ICsyMzgsNyBAQCBJbml0aWFsaXplUGFyYWxsZWxEU00oUGFy YWxsZWxDb250ZXh0ICpwY3h0KQogCSAqIFdlIGNhbiBkZWFsIHdpdGggdGhhdCBlZGdlIGNh c2UgYnkgcHJldGVuZGluZyBubyB3b3JrZXJzIHdlcmUKIAkgKiByZXF1ZXN0ZWQuCiAJICov Ci0JaWYgKCFJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSkKKwlpZiAoIUlOVEVSUlVQ VFNfQ0FOX0JFX1BST0NFU1NFRChDaGVja0ZvckludGVycnVwdHNNYXNrKSkKIAkJcGN4dC0+ bndvcmtlcnMgPSAwOwogCiAJLyoKQEAgLTYxMiw3ICs2MDcsNiBAQCBMYXVuY2hQYXJhbGxl bFdvcmtlcnMoUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogCXNwcmludGYod29ya2VyLmJnd19s aWJyYXJ5X25hbWUsICJwb3N0Z3JlcyIpOwogCXNwcmludGYod29ya2VyLmJnd19mdW5jdGlv bl9uYW1lLCAiUGFyYWxsZWxXb3JrZXJNYWluIik7CiAJd29ya2VyLmJnd19tYWluX2FyZyA9 IFVJbnQzMkdldERhdHVtKGRzbV9zZWdtZW50X2hhbmRsZShwY3h0LT5zZWcpKTsKLQl3b3Jr ZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CiAKIAkvKgogCSAqIFN0YXJ0IHdvcmtl cnMuCkBAIC03NjcsMTYgKzc2MSwyMSBAQCBXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9BdHRh Y2goUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogCQkJewogCQkJCS8qCiAJCQkJICogV29ya2Vy IG5vdCB5ZXQgc3RhcnRlZCwgc28gd2UgbXVzdCB3YWl0LiAgVGhlIHBvc3RtYXN0ZXIKLQkJ CQkgKiB3aWxsIG5vdGlmeSB1cyBpZiB0aGUgd29ya2VyJ3Mgc3RhdGUgY2hhbmdlcy4gIE91 ciBsYXRjaAotCQkJCSAqIG1pZ2h0IGFsc28gZ2V0IHNldCBmb3Igc29tZSBvdGhlciByZWFz b24sIGJ1dCBpZiBzbyB3ZSdsbAotCQkJCSAqIGp1c3QgZW5kIHVwIHdhaXRpbmcgZm9yIHRo ZSBzYW1lIHdvcmtlciBhZ2Fpbi4KKwkJCQkgKiB3aWxsIG5vdGlmeSB1cyBpZiB0aGUgd29y a2VyJ3Mgc3RhdGUgY2hhbmdlcyB3aXRoCisJCQkJICogSU5URVJSVVBUX1dBSVRfV0FLRVVQ LiAgVGhlIGludGVycnVwdCBtaWdodCBhbHNvIGdldCBzZXQKKwkJCQkgKiBmb3Igc29tZSBv dGhlciByZWFzb24sIGJ1dCBpZiBzbyB3ZSdsbCBqdXN0IGVuZCB1cCB3YWl0aW5nCisJCQkJ ICogZm9yIHRoZSBzYW1lIHdvcmtlciBhZ2Fpbi4KIAkJCQkgKi8KLQkJCQlyYyA9IFdhaXRM YXRjaChNeUxhdGNoLAotCQkJCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1f REVBVEgsCi0JCQkJCQkJICAgLTEsIFdBSVRfRVZFTlRfQkdXT1JLRVJfU1RBUlRVUCk7CisJ CQkJcmMgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkJ CQkgICBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJCSAgIFdMX0lOVEVSUlVQVCB8 IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJCSAgIC0xLCBXQUlUX0VWRU5UX0JHV09S S0VSX1NUQVJUVVApOwogCi0JCQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQotCQkJCQlSZXNl dExhdGNoKE15TGF0Y2gpOworCQkJCWlmIChyYyAmIFdMX0lOVEVSUlVQVCkKKwkJCQl7CisJ CQkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CisJCQkJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTg4NSwxNSArODg0 LDE2IEBAIFdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0ZpbmlzaChQYXJhbGxlbENvbnRleHQg KnBjeHQpCiAJCQkJICogdGhlIHdvcmtlciB3cml0ZXMgbWVzc2FnZXMgYW5kIHRlcm1pbmF0 ZXMgYWZ0ZXIgdGhlCiAJCQkJICogQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBuZWFyIHRoZSB0 b3Agb2YgdGhpcyBmdW5jdGlvbiBhbmQKIAkJCQkgKiBiZWZvcmUgdGhlIGNhbGwgdG8gR2V0 QmFja2dyb3VuZFdvcmtlclBpZCgpLiAgSW4gdGhhdCBjYXNlLAotCQkJCSAqIG91ciBsYXRj aCBzaG91bGQgaGF2ZSBiZWVuIHNldCBhcyB3ZWxsIGFuZCB0aGUgcmlnaHQgdGhpbmdzCi0J CQkJICogd2lsbCBoYXBwZW4gb24gdGhlIG5leHQgcGFzcyB0aHJvdWdoIHRoZSBsb29wLgor CQkJCSAqIElOVEVSUlVQVF9XQUlUX1dBS0VVUCBzaG91bGQgaGF2ZSBiZWVuIHNldCBhcyB3 ZWxsIGFuZCB0aGUKKwkJCQkgKiByaWdodCB0aGluZ3Mgd2lsbCBoYXBwZW4gb24gdGhlIG5l eHQgcGFzcyB0aHJvdWdoIHRoZSBsb29wLgogCQkJCSAqLwogCQkJfQogCQl9CiAKLQkJKHZv aWQpIFdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RF QVRILCAtMSwKLQkJCQkJCSBXQUlUX0VWRU5UX1BBUkFMTEVMX0ZJTklTSCk7Ci0JCVJlc2V0 TGF0Y2goTXlMYXRjaCk7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJy dXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJIFdMX0lOVEVSUlVQ VCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIC0xLAorCQkJCQkJCSBXQUlUX0VWRU5UX1BBUkFM TEVMX0ZJTklTSCk7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7 CiAJfQogCiAJaWYgKHBjeHQtPnRvYyAhPSBOVUxMKQpAQCAtMTAzNCwyMSArMTAzNCw2IEBA IFBhcmFsbGVsQ29udGV4dEFjdGl2ZSh2b2lkKQogCXJldHVybiAhZGxpc3RfaXNfZW1wdHko JnBjeHRfbGlzdCk7CiB9CiAKLS8qCi0gKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1 cHQgaW5kaWNhdGluZyBhIHBhcmFsbGVsIHdvcmtlciBtZXNzYWdlLgotICoKLSAqIE5vdGU6 IHRoaXMgaXMgY2FsbGVkIHdpdGhpbiBhIHNpZ25hbCBoYW5kbGVyISAgQWxsIHdlIGNhbiBk byBpcyBzZXQKLSAqIGEgZmxhZyB0aGF0IHdpbGwgY2F1c2UgdGhlIG5leHQgQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKSB0byBpbnZva2UKLSAqIFByb2Nlc3NQYXJhbGxlbE1lc3NhZ2VzKCku Ci0gKi8KLXZvaWQKLUhhbmRsZVBhcmFsbGVsTWVzc2FnZUludGVycnVwdCh2b2lkKQotewot CUludGVycnVwdFBlbmRpbmcgPSB0cnVlOwotCVBhcmFsbGVsTWVzc2FnZVBlbmRpbmcgPSB0 cnVlOwotCVNldExhdGNoKE15TGF0Y2gpOwotfQotCiAvKgogICogUHJvY2VzcyBhbnkgcXVl dWVkIHByb3RvY29sIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gcGFyYWxsZWwgd29ya2Vycy4K ICAqLwpAQCAtMTA4Myw5ICsxMDY4LDcgQEAgUHJvY2Vzc1BhcmFsbGVsTWVzc2FnZXModm9p ZCkKIAogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaHBtX2NvbnRleHQp OwogCi0JLyogT0sgdG8gcHJvY2VzcyBtZXNzYWdlcy4gIFJlc2V0IHRoZSBmbGFnIHNheWlu ZyB0aGVyZSBhcmUgbW9yZSB0byBkby4gKi8KLQlQYXJhbGxlbE1lc3NhZ2VQZW5kaW5nID0g ZmFsc2U7Ci0KKwkvKiBPSyB0byBwcm9jZXNzIG1lc3NhZ2VzICovCiAJZGxpc3RfZm9yZWFj aChpdGVyLCAmcGN4dF9saXN0KQogCXsKIAkJUGFyYWxsZWxDb250ZXh0ICpwY3h0OwpAQCAt MTMyNyw3ICsxMzEwLDEwIEBAIFBhcmFsbGVsV29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykK IAkvKiBTZXQgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHdlJ3JlIGluaXRpYWxpemluZyBhIHBh cmFsbGVsIHdvcmtlci4gKi8KIAlJbml0aWFsaXppbmdQYXJhbGxlbFdvcmtlciA9IHRydWU7 CiAKLQkvKiBFc3RhYmxpc2ggc2lnbmFsIGhhbmRsZXJzLiAqLworCS8qCisJICogU3RhbmRh cmQgaW50ZXJydXB0IGhhbmRsZXJzIGhhdmUgYWxyZWFkeSBiZWVuIGluc3RhbGxlZDsgdW5i bG9jaworCSAqIHNpZ25hbHMuCisJICovCiAJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWdu YWxzKCk7CiAKIAkvKiBEZXRlcm1pbmUgYW5kIHNldCBvdXIgcGFyYWxsZWwgd29ya2VyIG51 bWJlci4gKi8KQEAgLTEzNjMsOCArMTM0OSw3IEBAIFBhcmFsbGVsV29ya2VyTWFpbihEYXR1 bSBtYWluX2FyZykKIAlmcHMgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9G SVhFRCwgZmFsc2UpOwogCU15Rml4ZWRQYXJhbGxlbFN0YXRlID0gZnBzOwogCi0JLyogQXJy YW5nZSB0byBzaWduYWwgdGhlIGxlYWRlciBpZiB3ZSBleGl0LiAqLwotCVBhcmFsbGVsTGVh ZGVyUGlkID0gZnBzLT5wYXJhbGxlbF9sZWFkZXJfcGlkOworCS8qIEFycmFuZ2UgdG8gc2Vu ZCBhbiBpbnRlcnJ1cHQgdG8gdGhlIGxlYWRlciBpZiB3ZSBleGl0LiAqLwogCVBhcmFsbGVs TGVhZGVyUHJvY051bWJlciA9IGZwcy0+cGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyOwog CWJlZm9yZV9zaG1lbV9leGl0KFBhcmFsbGVsV29ya2VyU2h1dGRvd24sIFBvaW50ZXJHZXRE YXR1bShzZWcpKTsKIApAQCAtMTM4MCw4ICsxMzY1LDcgQEAgUGFyYWxsZWxXb3JrZXJNYWlu KERhdHVtIG1haW5fYXJnKQogCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVByb2MpOwogCW1x aCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CiAJcHFfcmVkaXJlY3RfdG9fc2ht X21xKHNlZywgbXFoKTsKLQlwcV9zZXRfcGFyYWxsZWxfbGVhZGVyKGZwcy0+cGFyYWxsZWxf bGVhZGVyX3BpZCwKLQkJCQkJCSAgIGZwcy0+cGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVy KTsKKwlwcV9zZXRfcGFyYWxsZWxfbGVhZGVyKGZwcy0+cGFyYWxsZWxfbGVhZGVyX3Byb2Nf bnVtYmVyKTsKIAogCS8qCiAJICogSG9vcmF5ISBQcmltYXJ5IGluaXRpYWxpemF0aW9uIGlz IGNvbXBsZXRlLiAgTm93LCB3ZSBuZWVkIHRvIHNldCB1cCBvdXIKQEAgLTE2MjAsOSArMTYw NCw4IEBAIFBhcmFsbGVsV29ya2VyUmVwb3J0TGFzdFJlY0VuZChYTG9nUmVjUHRyIGxhc3Rf eGxvZ19lbmQpCiBzdGF0aWMgdm9pZAogUGFyYWxsZWxXb3JrZXJTaHV0ZG93bihpbnQgY29k ZSwgRGF0dW0gYXJnKQogewotCVNlbmRQcm9jU2lnbmFsKFBhcmFsbGVsTGVhZGVyUGlkLAot CQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwKLQkJCQkgICBQYXJhbGxlbExlYWRl clByb2NOdW1iZXIpOworCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1BBUkFMTEVMX01FU1NB R0UsCisJCQkJICBQYXJhbGxlbExlYWRlclByb2NOdW1iZXIpOwogCiAJZHNtX2RldGFjaCgo ZHNtX3NlZ21lbnQgKikgRGF0dW1HZXRQb2ludGVyKGFyZykpOwogfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vc2xydS5jCmluZGV4IDU0OWM3ZTNlNjRiLi41NTkyZGYzMGY4ZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwpAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUg ImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNpbmNsdWRl ICJhY2Nlc3MveGxvZ3V0aWxzLmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwppbmRleCA1ZjY1ZmE3YjgwZi4uZmJmZmE5MGIxZjAg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtOTEsNiArOTEs NyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNhdGFsb2cv c3RvcmFnZS5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJy dXB0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIK ICNpbmNsdWRlICJwZ3N0YXQuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRl eCAxMjliYjIyNGQ3ZC4uMjlkODA4ZDc1NmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMKQEAgLTcwLDYgKzcwLDcgQEAKICNpbmNsdWRlICJjb21tb24vY29udHJvbGRhdGFf dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL2luc3RydW1lbnQuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKQEAgLTg4LDcgKzg5LDYgQEAKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhcmdlX29iamVj dC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvY2FycmF5LmgiCkBAIC0yNjM5LDcgKzI2MzksNyBAQCBYTG9nU2V0QXN5bmNYYWN0 TFNOKFhMb2dSZWNQdHIgYXN5bmNYYWN0TFNOKQogCQlQcm9jTnVtYmVyCXdhbHdyaXRlclBy b2MgPSBwZ19hdG9taWNfcmVhZF91MzIoJlByb2NHbG9iYWwtPndhbHdyaXRlclByb2MpOwog CiAJCWlmICh3YWx3cml0ZXJQcm9jICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCQlTZXRM YXRjaCgmR2V0UEdQcm9jQnlOdW1iZXIod2Fsd3JpdGVyUHJvYyktPnByb2NMYXRjaCk7CisJ CQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgd2Fsd3JpdGVyUHJvYyk7 CiAJfQogfQogCkBAIC05NDk2LDExICs5NDk2LDExIEBAIGRvX3BnX2JhY2t1cF9zdG9wKEJh Y2t1cFN0YXRlICpzdGF0ZSwgYm9vbCB3YWl0Zm9yYXJjaGl2ZSkKIAkJCQlyZXBvcnRlZF93 YWl0aW5nID0gdHJ1ZTsKIAkJCX0KIAotCQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAot CQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SCwKLQkJCQkJCQkgMTAwMEwsCi0JCQkJCQkJIFdBSVRfRVZFTlRfQkFDS1VQX1dBSVRfV0FM X0FSQ0hJVkUpOwotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCSh2b2lkKSBXYWl0SW50 ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAs CisJCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwKKwkJCQkJCQkJIDEwMDBMLAorCQkJCQkJCQkgV0FJVF9FVkVOVF9CQUNLVVBfV0FJ VF9XQUxfQVJDSElWRSk7CisJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtF VVApOwogCiAJCQlpZiAoKyt3YWl0cyA+PSBzZWNvbmRzX2JlZm9yZV93YXJuaW5nKQogCQkJ ewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2Z1bmNzLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nZnVuY3MuYwppbmRleCAyZWZlNDEw NWVmYi4uOGM3NGVjZWVjMTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dm dW5jcy5jCkBAIC0yNCwxMSArMjQsMTEgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292 ZXJ5LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZnVuY2Fw aS5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNl aXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xh dGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5LmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgpAQCAtNzE4LDE3ICs3 MTgsMTUgQEAgcGdfcHJvbW90ZShQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJaW50CQkJcmM7 CiAKLQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKLQogCQlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVz cygpKQogCQkJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKIAotCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkgICBXTF9MQVRDSF9T RVQgfCBXTF9USU1FT1VUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSCwKLQkJCQkJICAgMTAwMEwg LyBXQUlUU19QRVJfU0VDT05ELAotCQkJCQkgICBXQUlUX0VWRU5UX1BST01PVEUpOworCQly YyA9IFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaywKKwkJCQkJCSAgIFdM X0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRILAorCQkJCQkJ ICAgMTAwMEwgLyBXQUlUU19QRVJfU0VDT05ELAorCQkJCQkJICAgV0FJVF9FVkVOVF9QUk9N T1RFKTsKIAogCQkvKgogCQkgKiBFbWVyZ2VuY3kgYmFpbG91dCBpZiBwb3N0bWFzdGVyIGhh cyBkaWVkLiAgVGhpcyBpcyB0byBhdm9pZCB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggZmJkZGQ3ZTUyMmMuLjNjZDI1ODhiM2YxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtNDQs NiArNDQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5o IgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK ICNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKQEAg LTU0LDggKzU1LDggQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgotI2lu Y2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgi CisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJy YXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9kYXRl dGltZS5oIgpAQCAtNDA5LDcgKzQxMCw2IEBAIFhMb2dSZWNvdmVyeVNobWVtSW5pdCh2b2lk KQogCW1lbXNldChYTG9nUmVjb3ZlcnlDdGwsIDAsIHNpemVvZihYTG9nUmVjb3ZlcnlDdGxE YXRhKSk7CiAKIAlTcGluTG9ja0luaXQoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOwot CUluaXRTaGFyZWRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNo KTsKIAlDb25kaXRpb25WYXJpYWJsZUluaXQoJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlO b3RQYXVzZWRDVik7CiB9CiAKQEAgLTQ4MywxMyArNDgzLDYgQEAgSW5pdFdhbFJlY292ZXJ5 KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndhc1NodXRkb3duX3B0ciwK IAlyZWFkUmVjb3ZlcnlTaWduYWxGaWxlKCk7CiAJdmFsaWRhdGVSZWNvdmVyeVBhcmFtZXRl cnMoKTsKIAotCS8qCi0JICogVGFrZSBvd25lcnNoaXAgb2YgdGhlIHdha2V1cCBsYXRjaCBp ZiB3ZSdyZSBnb2luZyB0byBzbGVlcCBkdXJpbmcKLQkgKiByZWNvdmVyeSwgaWYgcmVxdWly ZWQuCi0JICovCi0JaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKLQkJT3duTGF0Y2go JlhMb2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCk7Ci0KIAkvKgogCSAqIFNl dCB0aGUgV0FMIHJlYWRpbmcgcHJvY2Vzc29yIG5vdywgYXMgaXQgd2lsbCBiZSBuZWVkZWQg d2hlbiByZWFkaW5nCiAJICogdGhlIGNoZWNrcG9pbnQgcmVjb3JkIHJlcXVpcmVkIChiYWNr dXBfbGFiZWwgb3Igbm90KS4KQEAgLTE1OTIsMTMgKzE1ODUsNiBAQCBTaHV0ZG93bldhbFJl Y292ZXJ5KHZvaWQpCiAJCXNucHJpbnRmKHJlY292ZXJ5UGF0aCwgTUFYUEdQQVRILCBYTE9H RElSICIvUkVDT1ZFUllISVNUT1JZIik7CiAJCXVubGluayhyZWNvdmVyeVBhdGgpOwkvKiBp Z25vcmUgYW55IGVycm9yICovCiAJfQotCi0JLyoKLQkgKiBXZSBkb24ndCBuZWVkIHRoZSBs YXRjaCBhbnltb3JlLiBJdCdzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gZGlzb3duCi0J ICogaXQsIGJ1dCBsZXQncyBkbyBpdCBmb3IgdGhlIHNha2Ugb2YgdGlkaW5lc3MuCi0JICov Ci0JaWYgKEFyY2hpdmVSZWNvdmVyeVJlcXVlc3RlZCkKLQkJRGlzb3duTGF0Y2goJlhMb2dS ZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCk7CiB9CiAKIC8qCkBAIC0xNzI4LDgg KzE3MTQsOCBAQCBQZXJmb3JtV2FsUmVjb3Zlcnkodm9pZCkKIAkJCX0KICNlbmRpZgogCi0J CQkvKiBIYW5kbGUgaW50ZXJydXB0IHNpZ25hbHMgb2Ygc3RhcnR1cCBwcm9jZXNzICovCi0J CQlQcm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKCk7CisJCQlDSEVDS19GT1JfSU5URVJS VVBUUygpOworCQkJU3RhcnR1cFByb2NDaGVja1Bvc3RtYXN0ZXJEZWF0aCgpOwogCiAJCQkv KgogCQkJICogUGF1c2UgV0FMIHJlcGxheSwgaWYgcmVxdWVzdGVkIGJ5IGEgaG90LXN0YW5k Ynkgc2Vzc2lvbiB2aWEKQEAgLTE3NTgsOCArMTc0NCw4IEBAIFBlcmZvcm1XYWxSZWNvdmVy eSh2b2lkKQogCQkJfQogCiAJCQkvKgotCQkJICogSWYgd2UndmUgYmVlbiBhc2tlZCB0byBs YWcgdGhlIHByaW1hcnksIHdhaXQgb24gbGF0Y2ggdW50aWwKLQkJCSAqIGVub3VnaCB0aW1l IGhhcyBwYXNzZWQuCisJCQkgKiBJZiB3ZSd2ZSBiZWVuIGFza2VkIHRvIGxhZyB0aGUgcHJp bWFyeSwgd2FpdCB1bnRpbCBlbm91Z2ggdGltZQorCQkJICogaGFzIHBhc3NlZC4KIAkJCSAq LwogCQkJaWYgKHJlY292ZXJ5QXBwbHlEZWxheSh4bG9ncmVhZGVyKSkKIAkJCXsKQEAgLTE3 ODAsOSArMTc2Niw4IEBAIFBlcmZvcm1XYWxSZWNvdmVyeSh2b2lkKQogCQkJQXBwbHlXYWxS ZWNvcmQoeGxvZ3JlYWRlciwgcmVjb3JkLCAmcmVwbGF5VExJKTsKIAogCQkJLyoKLQkJCSAq IElmIHdlIHJlcGxheWVkIGFuIExTTiB0aGF0IHNvbWVvbmUgd2FzIHdhaXRpbmcgZm9yIHRo ZW4gd2FsawotCQkJICogb3ZlciB0aGUgc2hhcmVkIG1lbW9yeSBhcnJheSBhbmQgc2V0IGxh dGNoZXMgdG8gbm90aWZ5IHRoZQotCQkJICogd2FpdGVycy4KKwkJCSAqIElmIHdlIHJlcGxh eWVkIGFuIExTTiB0aGF0IHNvbWVvbmUgd2FzIHdhaXRpbmcgZm9yLCB3YWtlIHRoZW0KKwkJ CSAqIHVwLgogCQkJICovCiAJCQlpZiAod2FpdExTTlN0YXRlICYmCiAJCQkJKFhMb2dSZWNv dmVyeUN0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyID49CkBAIC0yOTE2LDcgKzI5MDEsNyBA QCByZWNvdmVyeVBhdXNlc0hlcmUoYm9vbCBlbmRPZlJlY292ZXJ5KQogCS8qIGxvb3AgdW50 aWwgcmVjb3ZlcnlQYXVzZVN0YXRlIGlzIHNldCB0byBSRUNPVkVSWV9OT1RfUEFVU0VEICov CiAJd2hpbGUgKEdldFJlY292ZXJ5UGF1c2VTdGF0ZSgpICE9IFJFQ09WRVJZX05PVF9QQVVT RUQpCiAJewotCQlQcm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKCk7CisJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CiAJCWlmIChDaGVja0ZvclN0YW5kYnlUcmlnZ2VyKCkpCiAJCQly ZXR1cm47CiAKQEAgLTI5OTMsOCArMjk3OCw4IEBAIHJlY292ZXJ5QXBwbHlEZWxheShYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCkKIAlkZWxheVVudGlsID0gVGltZXN0YW1wVHpQbHVzTWls bGlzZWNvbmRzKHh0aW1lLCByZWNvdmVyeV9taW5fYXBwbHlfZGVsYXkpOwogCiAJLyoKLQkg KiBFeGl0IHdpdGhvdXQgYXJtaW5nIHRoZSBsYXRjaCBpZiBpdCdzIGFscmVhZHkgcGFzdCB0 aW1lIHRvIGFwcGx5IHRoaXMKLQkgKiByZWNvcmQKKwkgKiBFeGl0IHdpdGhvdXQgY2xlYXJp bmcgdGhlIGludGVycnVwdCBpZiBpdCdzIGFscmVhZHkgcGFzdCB0aW1lIHRvIGFwcGx5CisJ ICogdGhpcyByZWNvcmQKIAkgKi8KIAltc2VjcyA9IFRpbWVzdGFtcERpZmZlcmVuY2VNaWxs aXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLCBkZWxheVVudGlsKTsKIAlpZiAobXNl Y3MgPD0gMCkKQEAgLTMwMDIsMTEgKzI5ODcsMTYgQEAgcmVjb3ZlcnlBcHBseURlbGF5KFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJd2hpbGUgKHRydWUpCiAJewotCQlSZXNldExh dGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOwotCiAJCS8qIFRo aXMgbWlnaHQgY2hhbmdlIHJlY292ZXJ5X21pbl9hcHBseV9kZWxheS4gKi8KLQkJUHJvY2Vz c1N0YXJ0dXBQcm9jSW50ZXJydXB0cygpOworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwog CisJCS8qCisJCSAqIFdhaXQgdW50aWwgbW9yZSBXQUwgYXJyaXZlcy4gIChXZSB1c2UgYSBk ZWRpY2F0ZWQgaW50ZXJydXB0IHJhdGhlcgorCQkgKiB0aGFuIElOVEVSUlVQVF9XQUlUX1dB S0VVUCBmb3IgdGhpcywgc28gdGhhdCBtb3JlIFdBTCBhcnJpdmluZworCQkgKiBkb2Vzbid0 IHdha2UgdXAgdGhlIHN0YXJ0dXAgcHJvY2VzcyBleGNlc3NpdmVseSB3aGVuIHdlJ3JlIHdh aXRpbmcKKwkJICogaW4gb3RoZXIgcGxhY2VzLCBsaWtlIGZvciByZWNvdmVyeSBjb25mbGlj dHMpLgorCQkgKi8KKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBTF9BUlJJVkVEKTsK IAkJaWYgKENoZWNrRm9yU3RhbmRieVRyaWdnZXIoKSkKIAkJCWJyZWFrOwogCkBAIC0zMDI3 LDEwICszMDE3LDEyIEBAIHJlY292ZXJ5QXBwbHlEZWxheShYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAogCQllbG9nKERFQlVHMiwgInJlY292ZXJ5IGFwcGx5IGRlbGF5ICVsZCBtaWxs aXNlY29uZHMiLCBtc2Vjcyk7CiAKLQkJKHZvaWQpIFdhaXRMYXRjaCgmWExvZ1JlY292ZXJ5 Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNoLAotCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJ TUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkJIG1zZWNzLAotCQkJCQkJIFdB SVRfRVZFTlRfUkVDT1ZFUllfQVBQTFlfREVMQVkpOworCQkodm9pZCkgV2FpdEludGVycnVw dChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkgSU5URVJSVVBUX1dBTF9BUlJJ VkVEIHwKKwkJCQkJCQkgSU5URVJSVVBUX0NIRUNLX1BST01PVEUsCisJCQkJCQkJIFdMX0lO VEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCSBt c2VjcywKKwkJCQkJCQkgV0FJVF9FVkVOVF9SRUNPVkVSWV9BUFBMWV9ERUxBWSk7CiAJfQog CXJldHVybiB0cnVlOwogfQpAQCAtMzcwOCwxNiArMzcwMCwxNiBAQCBXYWl0Rm9yV0FMVG9C ZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJ CQkJCS8qIERvIGJhY2tncm91bmQgdGFza3MgdGhhdCBtaWdodCBiZW5lZml0IHVzIGxhdGVy LiAqLwogCQkJCQkJS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzSWRsZU1haW50ZW5hbmNl KCk7CiAKLQkJCQkJCSh2b2lkKSBXYWl0TGF0Y2goJlhMb2dSZWNvdmVyeUN0bC0+cmVjb3Zl cnlXYWtldXBMYXRjaCwKLQkJCQkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8 Ci0JCQkJCQkJCQkJIFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCQkJCQkJIHdhaXRfdGlt ZSwKLQkJCQkJCQkJCQkgV0FJVF9FVkVOVF9SRUNPVkVSWV9SRVRSSUVWRV9SRVRSWV9JTlRF UlZBTCk7Ci0JCQkJCQlSZXNldExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2Fr ZXVwTGF0Y2gpOworCQkJCQkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1 cHRzTWFzayB8CisJCQkJCQkJCQkJCSBJTlRFUlJVUFRfV0FMX0FSUklWRUQsCisJCQkJCQkJ CQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwKKwkJCQkJCQkJCQkJIFdMX0VYSVRf T05fUE1fREVBVEgsCisJCQkJCQkJCQkJCSB3YWl0X3RpbWUsCisJCQkJCQkJCQkJCSBXQUlU X0VWRU5UX1JFQ09WRVJZX1JFVFJJRVZFX1JFVFJZX0lOVEVSVkFMKTsKKwkJCQkJCUNsZWFy SW50ZXJydXB0KElOVEVSUlVQVF9XQUxfQVJSSVZFRCk7CiAJCQkJCQlub3cgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7CiAKLQkJCQkJCS8qIEhhbmRsZSBpbnRlcnJ1cHQgc2lnbmFscyBv ZiBzdGFydHVwIHByb2Nlc3MgKi8KLQkJCQkJCVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVw dHMoKTsKKwkJCQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJCQkJCX0KIAkJCQkJbGFz dF9mYWlsX3RpbWUgPSBub3c7CiAJCQkJCWN1cnJlbnRTb3VyY2UgPSBYTE9HX0ZST01fQVJD SElWRTsKQEAgLTM5ODMsMTEgKzM5NzUsMTIgQEAgV2FpdEZvcldBTFRvQmVjb21lQXZhaWxh YmxlKFhMb2dSZWNQdHIgUmVjUHRyLCBib29sIHJhbmRBY2Nlc3MsCiAJCQkJCSAqIFdhaXQg Zm9yIG1vcmUgV0FMIHRvIGFycml2ZSwgd2hlbiB3ZSB3aWxsIGJlIHdva2VuCiAJCQkJCSAq IGltbWVkaWF0ZWx5IGJ5IHRoZSBXQUwgcmVjZWl2ZXIuCiAJCQkJCSAqLwotCQkJCQkodm9p ZCkgV2FpdExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gsCi0J CQkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCQkJ CSAtMUwsCi0JCQkJCQkJCQkgV0FJVF9FVkVOVF9SRUNPVkVSWV9XQUxfU1RSRUFNKTsKLQkJ CQkJUmVzZXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3RsLT5yZWNvdmVyeVdha2V1cExhdGNoKTsK KwkJCQkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJ CQkJCQkJCQkJIElOVEVSUlVQVF9XQUxfQVJSSVZFRCwKKwkJCQkJCQkJCQkgV0xfSU5URVJS VVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJCQkgLTFMLAorCQkJCQkJCQkJ CSBXQUlUX0VWRU5UX1JFQ09WRVJZX1dBTF9TVFJFQU0pOworCQkJCQlDbGVhckludGVycnVw dChJTlRFUlJVUFRfV0FMX0FSUklWRUQpOwogCQkJCQlicmVhazsKIAkJCQl9CiAKQEAgLTQw MDMsMTEgKzM5OTYsOCBAQCBXYWl0Rm9yV0FMVG9CZWNvbWVBdmFpbGFibGUoWExvZ1JlY1B0 ciBSZWNQdHIsIGJvb2wgcmFuZEFjY2VzcywKIAkJCVJFQ09WRVJZX05PVF9QQVVTRUQpCiAJ CQlyZWNvdmVyeVBhdXNlc0hlcmUoZmFsc2UpOwogCi0JCS8qCi0JCSAqIFRoaXMgcG9zc2li bHktbG9uZyBsb29wIG5lZWRzIHRvIGhhbmRsZSBpbnRlcnJ1cHRzIG9mIHN0YXJ0dXAKLQkJ ICogcHJvY2Vzcy4KLQkJICovCi0JCVByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHMoKTsK KwkJLyogVGhpcyBwb3NzaWJseS1sb25nIGxvb3AgbmVlZHMgdG8gaGFuZGxlIGludGVycnVw dHMuICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJfQogCiAJcmV0dXJuIFhMUkVB RF9GQUlMOwkJCS8qIG5vdCByZWFjaGVkICovCkBAIC00NDM5LDExICs0NDI5LDExIEBAIENo ZWNrRm9yU3RhbmRieVRyaWdnZXIodm9pZCkKIAlpZiAoTG9jYWxQcm9tb3RlSXNUcmlnZ2Vy ZWQpCiAJCXJldHVybiB0cnVlOwogCi0JaWYgKElzUHJvbW90ZVNpZ25hbGVkKCkgJiYgQ2hl Y2tQcm9tb3RlU2lnbmFsKCkpCisJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX0NI RUNLX1BST01PVEUpICYmIENoZWNrUHJvbW90ZVNpZ25hbCgpKQogCXsKIAkJZXJlcG9ydChM T0csIChlcnJtc2coInJlY2VpdmVkIHByb21vdGUgcmVxdWVzdCIpKSk7CiAJCVJlbW92ZVBy b21vdGVTaWduYWxGaWxlcygpOwotCQlSZXNldFByb21vdGVTaWduYWxlZCgpOworCQlDbGVh ckludGVycnVwdChJTlRFUlJVUFRfQ0hFQ0tfUFJPTU9URSk7CiAJCVNldFByb21vdGVJc1Ry aWdnZXJlZCgpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC00NDgxLDcgKzQ0NzEsMTAgQEAg Q2hlY2tQcm9tb3RlU2lnbmFsKHZvaWQpCiB2b2lkCiBXYWtldXBSZWNvdmVyeSh2b2lkKQog ewotCVNldExhdGNoKCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5V2FrZXVwTGF0Y2gpOwor CVByb2NOdW1iZXIJc3RhcnR1cFByb2MgPSBwZ19hdG9taWNfcmVhZF91MzIoJlByb2NHbG9i YWwtPnN0YXJ0dXBQcm9jKTsKKworCWlmIChzdGFydHVwUHJvYyAhPSBJTlZBTElEX1BST0Nf TlVNQkVSKQorCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUxfQVJSSVZFRCwgc3RhcnR1 cFByb2MpOwogfQogCiAvKgpAQCAtNDY4NSw3ICs0Njc4LDcgQEAgUmVjb3ZlcnlSZXF1aXJl c0ludFBhcmFtZXRlcihjb25zdCBjaGFyICpwYXJhbV9uYW1lLCBpbnQgY3VyclZhbHVlLCBp bnQgbWluVmFsdWUKIAogCQkJd2hpbGUgKEdldFJlY292ZXJ5UGF1c2VTdGF0ZSgpICE9IFJF Q09WRVJZX05PVF9QQVVTRUQpCiAJCQl7Ci0JCQkJUHJvY2Vzc1N0YXJ0dXBQcm9jSW50ZXJy dXB0cygpOworCQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJCQlpZiAoQ2hlY2tG b3JTdGFuZGJ5VHJpZ2dlcigpKQogCQkJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2d3YWl0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nd2FpdC5jCmluZGV4IGQyODZmZjYzMTIzLi5lZmUwOGM0ZWJmZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3dhaXQuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jCkBAIC0yNCw5ICsyNCwxMCBAQAogICoKICAq CQlJbiBhZGRpdGlvbiwgdGhlIGxlYXN0LWF3YWl0ZWQgTFNOIGZvciBlYWNoIHR5cGUgaXMg Y2FjaGVkIGluIHRoZQogICoJCW1pbldhaXRlZExTTiBhcnJheS4gIFRoZSB3YWl0ZXIgcHJv Y2VzcyBwdWJsaXNoZXMgaW5mb3JtYXRpb24gYWJvdXQKLSAqCQlpdHNlbGYgdG8gdGhlIHNo YXJlZCBtZW1vcnkgYW5kIHdhaXRzIG9uIHRoZSBsYXRjaCB1bnRpbCBpdCBpcyB3b2tlbgot ICoJCXVwIGJ5IHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzLCBzdGFuZGJ5IGlzIHByb21vdGVk LCBvciB0aGUgcG9zdG1hc3RlcgotICoJCWRpZXMuICBUaGVuLCBpdCBjbGVhbnMgaW5mb3Jt YXRpb24gYWJvdXQgaXRzZWxmIGluIHRoZSBzaGFyZWQgbWVtb3J5LgorICoJCWl0c2VsZiB0 byB0aGUgc2hhcmVkIG1lbW9yeSBhbmQgd2FpdHMgb24gSU5URVJSVVBUX1dBSVRfV0FLRVVQ IHVudGlsCisgKgkJaXQgaXMgd29rZW4gdXAgYnkgdGhlIGFwcHJvcHJpYXRlIHByb2Nlc3Ms IHN0YW5kYnkgaXMgcHJvbW90ZWQsIG9yIHRoZQorICoJCXBvc3RtYXN0ZXIgZGllcy4gIFRo ZW4sIGl0IGNsZWFucyBpbmZvcm1hdGlvbiBhYm91dCBpdHNlbGYgaW4gdGhlCisgKgkJc2hh cmVkIG1lbW9yeS4KICAqCiAgKgkJT24gc3RhbmRieSBzZXJ2ZXJzOgogICoJCS0gQWZ0ZXIg cmVwbGF5aW5nIGEgV0FMIHJlY29yZCwgdGhlIHN0YXJ0dXAgcHJvY2VzcyBwZXJmb3JtcyBh IGZhc3QKQEAgLTU0LDcgKzU1LDYgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgot I2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rv cy5oIgpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgaW50CXdhaXRsc25fY21wKGNvbnN0IHBh aXJpbmdoZWFwX25vZGUgKmEsIGNvbnN0IHBhaXJpbmdoZWFwX25vZGUgKmIsCiBzdHJ1Y3Qg V2FpdExTTlN0YXRlICp3YWl0TFNOU3RhdGUgPSBOVUxMOwogCiAvKgotICogV2FpdCBldmVu dCBmb3IgZWFjaCBXYWl0TFNOVHlwZSwgdXNlZCB3aXRoIFdhaXRMYXRjaCgpIHRvIHJlcG9y dAorICogV2FpdCBldmVudCBmb3IgZWFjaCBXYWl0TFNOVHlwZSwgdXNlZCB3aXRoIFdhaXRJ bnRlcnJ1cHQoKSB0byByZXBvcnQKICAqIHRoZSB3YWl0IGluIHBnX3N0YXRfYWN0aXZpdHku CiAgKi8KIHN0YXRpYyBjb25zdCB1aW50MzIgV2FpdExTTldhaXRFdmVudHNbXSA9IHsKQEAg LTI0MSw5ICsyNDEsOSBAQCBkZWxldGVMU05XYWl0ZXIoV2FpdExTTlR5cGUgbHNuVHlwZSkK ICNkZWZpbmUJV0FLRVVQX1BST0NfU1RBVElDX0FSUkFZX1NJWkUgKDE2KQogCiAvKgotICog UmVtb3ZlIHdhaXRlcnMgd2hvc2UgTFNOIGhhcyBiZWVuIHJlYWNoZWQgZnJvbSB0aGUgaGVh cCBhbmQgc2V0IHRoZWlyCi0gKiBsYXRjaGVzLiAgSWYgSW52YWxpZFhMb2dSZWNQdHIgaXMg Z2l2ZW4sIHJlbW92ZSBhbGwgd2FpdGVycyBmcm9tIHRoZSBoZWFwCi0gKiBhbmQgc2V0IGxh dGNoZXMgZm9yIGFsbCB3YWl0ZXJzLgorICogUmVtb3ZlIHdhaXRlcnMgd2hvc2UgTFNOIGhh cyBiZWVuIHJlYWNoZWQgZnJvbSB0aGUgaGVhcCBhbmQgd2FrZSB0aGVtIHVwLgorICogSWYg SW52YWxpZFhMb2dSZWNQdHIgaXMgZ2l2ZW4sIHJlbW92ZSBhbGwgd2FpdGVycyBmcm9tIHRo ZSBoZWFwIGFuZCB3YWtlCisgKiB0aGVtIGFsbCB1cC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9u IGZpcnN0IGFjY3VtdWxhdGVzIHdhaXRlcnMgdG8gd2FrZSB1cCBpbnRvIGFuIGFycmF5LCB0 aGVuCiAgKiB3YWtlcyB0aGVtIHVwIHdpdGhvdXQgaG9sZGluZyBhIFdhaXRMU05Mb2NrLiAg VGhlIGFycmF5IHNpemUgaXMgc3RhdGljIGFuZApAQCAtMjk4LDE0ICsyOTgsMTMgQEAgd2Fr ZXVwV2FpdGVycyhXYWl0TFNOVHlwZSBsc25UeXBlLCBYTG9nUmVjUHRyIGN1cnJlbnRMU04p CiAJCUxXTG9ja1JlbGVhc2UoV2FpdExTTkxvY2spOwogCiAJCS8qCi0JCSAqIFNldCBsYXRj aGVzIGZvciBwcm9jZXNzZXMgd2hvc2Ugd2FpdGVkIExTTnMgaGF2ZSBiZWVuIHJlYWNoZWQu Ci0JCSAqIFNpbmNlIFNldExhdGNoKCkgaXMgYSB0aW1lLWNvbnN1bWluZyBvcGVyYXRpb24s IHdlIGRvIHRoaXMgb3V0c2lkZQotCQkgKiBvZiBXYWl0TFNOTG9jay4gVGhpcyBpcyBzYWZl IGJlY2F1c2UgcHJvY0xhdGNoIGlzIG5ldmVyIGZyZWVkLCBzbwotCQkgKiBhdCB3b3JzdCB3 ZSBtYXkgc2V0IGEgbGF0Y2ggZm9yIHRoZSB3cm9uZyBwcm9jZXNzIG9yIGZvciBubyBwcm9j ZXNzCi0JCSAqIGF0IGFsbCwgd2hpY2ggaXMgaGFybWxlc3MuCisJCSAqIFdha2UgdXAgcHJv Y2Vzc2VzIHdob3NlIHdhaXRlZCBMU05zIGhhdmUgYmVlbiByZWFjaGVkLiAgU2luY2UKKwkJ ICogU2VuZEludGVycnVwdCBpcyBhIHRpbWUtY29uc3VtaW5nIG9wZXJhdGlvbiwgd2UgZG8g dGhpcyBvdXRzaWRlIG9mCisJCSAqIFdhaXRMU05Mb2NrLiAoSWYgdGhlIGJhY2tlbmQgZXhp dHMgb3IgaXMgbm8gbG9uZ2VyIHdhaXRpbmcsIHdlJ2xsCisJCSAqIHNlbmQgc3B1cmlvdXMg d2FrZXVwLCBidXQgdGhhdCdzIGhhcm1sZXNzKQogCQkgKi8KIAkJZm9yIChqID0gMDsgaiA8 IG51bVdha2VVcFByb2NzOyBqKyspCi0JCQlTZXRMYXRjaCgmR2V0UEdQcm9jQnlOdW1iZXIo d2FrZVVwUHJvY3Nbal0pLT5wcm9jTGF0Y2gpOworCQkJU2VuZEludGVycnVwdChJTlRFUlJV UFRfV0FJVF9XQUtFVVAsIHdha2VVcFByb2NzW2pdKTsKIAogCX0gd2hpbGUgKG51bVdha2VV cFByb2NzID09IFdBS0VVUF9QUk9DX1NUQVRJQ19BUlJBWV9TSVpFKTsKIH0KQEAgLTM2NCw3 ICszNjMsNyBAQCBXYWl0TFNOVHlwZVJlcXVpcmVzUmVjb3ZlcnkoV2FpdExTTlR5cGUgdCkK IH0KIAogLyoKLSAqIFdhaXQgdXNpbmcgTXlMYXRjaCB0aWxsIHRoZSBnaXZlbiBMU04gaXMg cmVhY2hlZCwgdGhlIHJlcGxpY2EgZ2V0cworICogV2FpdCB1c2luZyBXYWl0SW50ZXJydXB0 IHRpbGwgdGhlIGdpdmVuIExTTiBpcyByZWFjaGVkLCB0aGUgcmVwbGljYSBnZXRzCiAgKiBw cm9tb3RlZCwgb3IgdGhlIHBvc3RtYXN0ZXIgZGllcy4KICAqCiAgKiBSZXR1cm5zIFdBSVRf TFNOX1JFU1VMVF9TVUNDRVNTIGlmIHRhcmdldCBMU04gd2FzIHJlYWNoZWQuCkBAIC0zNzYs NyArMzc1LDcgQEAgV2FpdEZvckxTTihXYWl0TFNOVHlwZSBsc25UeXBlLCBYTG9nUmVjUHRy IHRhcmdldExTTiwgaW50NjQgdGltZW91dCkKIHsKIAlYTG9nUmVjUHRyCWN1cnJlbnRMU047 CiAJVGltZXN0YW1wVHogZW5kdGltZSA9IDA7Ci0JaW50CQkJd2FrZV9ldmVudHMgPSBXTF9M QVRDSF9TRVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRIOworCWludAkJCXdha2VfZXZlbnRzID0g V0xfSU5URVJSVVBUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSDsKIAogCS8qIFNob3VsZG4ndCBi ZSBjYWxsZWQgd2hlbiBzaG1lbSBpc24ndCBpbml0aWFsaXplZCAqLwogCUFzc2VydCh3YWl0 TFNOU3RhdGUpOwpAQCAtNDM0LDggKzQzMyw5IEBAIFdhaXRGb3JMU04oV2FpdExTTlR5cGUg bHNuVHlwZSwgWExvZ1JlY1B0ciB0YXJnZXRMU04sIGludDY0IHRpbWVvdXQpCiAKIAkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLCB3YWtl X2V2ZW50cywgZGVsYXlfbXMsCi0JCQkJCSAgIFdhaXRMU05XYWl0RXZlbnRzW2xzblR5cGVd KTsKKwkJcmMgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRF UlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkgICB3YWtlX2V2ZW50cywgZGVsYXlfbXMsCisJ CQkJCQkgICBXYWl0TFNOV2FpdEV2ZW50c1tsc25UeXBlXSk7CiAKIAkJLyoKIAkJICogRW1l cmdlbmN5IGJhaWxvdXQgaWYgcG9zdG1hc3RlciBoYXMgZGllZC4gIFRoaXMgaXMgdG8gYXZv aWQgdGhlCkBAIC00NDcsOCArNDQ3LDcgQEAgV2FpdEZvckxTTihXYWl0TFNOVHlwZSBsc25U eXBlLCBYTG9nUmVjUHRyIHRhcmdldExTTiwgaW50NjQgdGltZW91dCkKIAkJCQkJZXJybXNn KCJ0ZXJtaW5hdGluZyBjb25uZWN0aW9uIGR1ZSB0byB1bmV4cGVjdGVkIHBvc3RtYXN0ZXIg ZXhpdCIpLAogCQkJCQllcnJjb250ZXh0KCJ3aGlsZSB3YWl0aW5nIGZvciBMU04iKSk7CiAK LQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJ Q2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAl9CiAKIAkvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXBfdGhyb3R0bGUuYyBiL3Ny Yy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX3Rocm90dGxlLmMKaW5kZXggZTExMmVlZDc0 ODUuLmU0OWZkYzFlZmEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJh Y2t1cF90aHJvdHRsZS5jCisrKyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwX3Ro cm90dGxlLmMKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAj aW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXBfc2luay5oIgorI2luY2x1ZGUgImlwYy9pbnRl cnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCiAKIHR5cGVkZWYgc3RydWN0IGJic2lua190aHJvdHRsZQpAQCAtMTQ2LDcgKzE0Niw3 IEBAIHRocm90dGxlKGJic2lua190aHJvdHRsZSAqc2luaywgc2l6ZV90IGluY3JlbWVudCkK IAkJKHNpbmstPnRocm90dGxpbmdfY291bnRlciAvIHNpbmstPnRocm90dGxpbmdfc2FtcGxl KTsKIAogCS8qCi0JICogU2luY2UgdGhlIGxhdGNoIGNvdWxkIGJlIHNldCByZXBlYXRlZGx5 IGJlY2F1c2Ugb2YgY29uY3VycmVudGx5IFdBTAorCSAqIFNpbmNlIHRoZSBpbnRlcnJ1cHQg Y291bGQgYmUgc2V0IHJlcGVhdGVkbHkgYmVjYXVzZSBvZiBjb25jdXJyZW50bHkgV0FMCiAJ ICogYWN0aXZpdHksIHNsZWVwIGluIGEgbG9vcCB0byBlbnN1cmUgZW5vdWdoIHRpbWUgaGFz IHBhc3NlZC4KIAkgKi8KIAlmb3IgKDs7KQpAQCAtMTYzLDIyICsxNjMsMTYgQEAgdGhyb3R0 bGUoYmJzaW5rX3Rocm90dGxlICpzaW5rLCBzaXplX3QgaW5jcmVtZW50KQogCQlpZiAoc2xl ZXAgPD0gMCkKIAkJCWJyZWFrOwogCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0KLQkJLyog V2UncmUgZWF0aW5nIGEgcG90ZW50aWFsbHkgc2V0IGxhdGNoLCBzbyBjaGVjayBmb3IgaW50 ZXJydXB0cyAqLwogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCS8qCiAJCSAqIChU QVJfU0VORF9TSVpFIC8gdGhyb3R0bGluZ19zYW1wbGUgKiBlbGFwc2VkX21pbl91bml0KSBz aG91bGQgYmUKIAkJICogdGhlIG1heGltdW0gdGltZSB0byBzbGVlcC4gVGh1cyB0aGUgY2Fz dCB0byBsb25nIGlzIHNhZmUuCiAJCSAqLwotCQl3YWl0X3Jlc3VsdCA9IFdhaXRMYXRjaChN eUxhdGNoLAotCQkJCQkJCQlXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9P Tl9QTV9ERUFUSCwKLQkJCQkJCQkJKGxvbmcpIChzbGVlcCAvIDEwMDApLAotCQkJCQkJCQlX QUlUX0VWRU5UX0JBU0VfQkFDS1VQX1RIUk9UVExFKTsKLQotCQlpZiAod2FpdF9yZXN1bHQg JiBXTF9MQVRDSF9TRVQpCi0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl3YWl0X3Jl c3VsdCA9IFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaywKKwkJCQkJCQkJ CVdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJ CQkJCQkJKGxvbmcpIChzbGVlcCAvIDEwMDApLAorCQkJCQkJCQkJV0FJVF9FVkVOVF9CQVNF X0JBQ0tVUF9USFJPVFRMRSk7CiAKIAkJLyogRG9uZSB3YWl0aW5nPyAqLwogCQlpZiAod2Fp dF9yZXN1bHQgJiBXTF9USU1FT1VUKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYm9vdHN0 cmFwL2Jvb3RwYXJzZS55IGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RwYXJzZS55Cmlu ZGV4IDk0M2ZmNDczM2QzLi5jNGFkMTFiZTBiOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Ym9vdHN0cmFwL2Jvb3RwYXJzZS55CisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290 cGFyc2UueQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVz cGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21t YW5kcy9kZWZyZW0uaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMv aW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAi dXRpbHMvbWVtdXRpbHMuaCIKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv YXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggMGI2ZDExOWRh ZDAuLjAzNWExMGFlZWU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3lu Yy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTM2LDcgKzM2LDcg QEAKICAqCSAgaXMgbm8gbmVlZCBmb3IgV0FMIHN1cHBvcnQgb3IgZnN5bmMnaW5nLgogICoK ICAqIDMuIEV2ZXJ5IGJhY2tlbmQgdGhhdCBpcyBsaXN0ZW5pbmcgb24gYXQgbGVhc3Qgb25l IGNoYW5uZWwgcmVnaXN0ZXJzIGJ5Ci0gKgkgIGVudGVyaW5nIGl0cyBQSUQgaW50byB0aGUg YXJyYXkgaW4gQXN5bmNRdWV1ZUNvbnRyb2wuIEl0IHRoZW4gc2NhbnMgYWxsCisgKgkgIGVu dGVyaW5nIGl0c2VsZiBpbnRvIHRoZSBhcnJheSBpbiBBc3luY1F1ZXVlQ29udHJvbC4gSXQg dGhlbiBzY2FucyBhbGwKICAqCSAgaW5jb21pbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUgY2Vu dHJhbCBxdWV1ZSBhbmQgZmlyc3QgY29tcGFyZXMgdGhlCiAgKgkgIGRhdGFiYXNlIE9JRCBv ZiB0aGUgbm90aWZpY2F0aW9uIHdpdGggaXRzIG93biBkYXRhYmFzZSBPSUQgYW5kIHRoZW4K ICAqCSAgY29tcGFyZXMgdGhlIG5vdGlmaWVkIGNoYW5uZWwgd2l0aCB0aGUgbGlzdCBvZiBj aGFubmVscyB0aGF0IGl0IGxpc3RlbnMKQEAgLTY4LDggKzY4LDggQEAKICAqCSAgbWFrZSBh bnkgcmVxdWlyZWQgdXBkYXRlcyB0byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAoc2Vl IGJlbG93KS4KICAqCSAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzIHRoYXQgbWF5IGJl IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzCiAgKgkgIChpbmNsdWRpbmcgb3VyIG93biBi YWNrZW5kLCBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5Ci0gKgkgIFNpZ25hbEJh Y2tlbmRzKCksIHdoaWNoIHNlbmRzIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25h bCB0bwotICoJICBlYWNoIHJlbGV2YW50IGJhY2tlbmQsIGFzIGRlc2NyaWJlZCBiZWxvdy4K KyAqCSAgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2ggc2VuZHMgSU5URVJSVVBUX0FTWU5DX05P VElGWSB0byBlYWNoIHJlbGV2YW50CisgKgkgIGJhY2tlbmQsIGFzIGRlc2NyaWJlZCBiZWxv dy4KICAqCiAgKgkgIEZpbmFsbHksIGFmdGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0 aW9uIGFsdG9nZXRoZXIgYW5kIGFib3V0IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhl IHF1ZXVlIGZvciBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTgy LDEzICs4MiwxMSBAQAogICoJICBmcm9udGVuZCB1bnRpbCB0aGUgY29tbWFuZCBpcyBkb25l OyBidXQgbm90aWZpZXMgdG8gb3RoZXIgYmFja2VuZHMKICAqCSAgc2hvdWxkIGdvIG91dCBp bW1lZGlhdGVseSBhZnRlciBlYWNoIGNvbW1pdC4KICAqCi0gKiA1LiBVcG9uIHJlY2VpcHQg b2YgYSBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2lnbmFsLCB0aGUgc2lnbmFsIGhhbmRs ZXIKLSAqCSAgc2V0cyB0aGUgcHJvY2VzcydzIGxhdGNoLCB3aGljaCB0cmlnZ2VycyB0aGUg ZXZlbnQgdG8gYmUgcHJvY2Vzc2VkCi0gKgkgIGltbWVkaWF0ZWx5IGlmIHRoaXMgYmFja2Vu ZCBpcyBpZGxlIChpLmUuLCBpdCBpcyB3YWl0aW5nIGZvciBhIGZyb250ZW5kCisgKiA1LiBU aGUgSU5URVJSVVBUX0FTWU5DX05PVElGWSBpbnRlcnJ1cHQgaXMgcHJvY2Vzc2VkIGltbWVk aWF0ZWx5IGluIHRoZQorICoJICBsaXN0ZW5pbmcgYmFja2VuZCBpZiBpdCBpcyBpZGxlIChp LmUuLCBpdCBpcyB3YWl0aW5nIGZvciBhIGZyb250ZW5kCiAgKgkgIGNvbW1hbmQgYW5kIGlz IG5vdCB3aXRoaW4gYSB0cmFuc2FjdGlvbiBibG9jay4gQy5mLgotICoJICBQcm9jZXNzQ2xp ZW50UmVhZEludGVycnVwdCgpKS4gIE90aGVyd2lzZSB0aGUgaGFuZGxlciBtYXkgb25seSBz ZXQgYQotICoJICBmbGFnLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBwcm9jZXNzaW5nIHRvIG9j Y3VyIGp1c3QgYmVmb3JlIHdlIG5leHQgZ28KLSAqCSAgaWRsZS4KKyAqCSAgbWFpbiBsb29w IGluIFBvc3RncmVzQmFja2VuZCgpKS4gIE90aGVyd2lzZSB0aGUgaW50ZXJydXB0IGlzIHBy b2Nlc3NlZAorICoJICBsYXRlciwganVzdCBiZWZvcmUgd2UgbmV4dCBnbyBpZGxlLgogICoK ICAqCSAgSW5ib3VuZC1ub3RpZnkgcHJvY2Vzc2luZyBjb25zaXN0cyBvZiByZWFkaW5nIGFs bCBvZiB0aGUgbm90aWZpY2F0aW9ucwogICoJICB0aGF0IGhhdmUgYXJyaXZlZCBzaW5jZSBz Y2FubmluZyBsYXN0IHRpbWUuIFdlIHJlYWQgZXZlcnkgbm90aWZpY2F0aW9uCkBAIC0xMjYs OSArMTI0LDggQEAKICAqCiAgKgkgIFNpZ25hbEJhY2tlbmRzKCkgY29uc3VsdHMgdGhlIHNo YXJlZCBnbG9iYWwgY2hhbm5lbCB0YWJsZSB0byBpZGVudGlmeQogICoJICBsaXN0ZW5lcnMg Zm9yIHRoZSBjaGFubmVscyB0aGF0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHNlbnQKLSAq CSAgbm90aWZpY2F0aW9uKHMpIHRvLiAgRWFjaCBzZWxlY3RlZCBiYWNrZW5kIGlzIG1hcmtl ZCBhcyBoYXZpbmcgYSB3YWtldXAKLSAqCSAgcGVuZGluZyB0byBhdm9pZCBkdXBsaWNhdGUg c2lnbmFscywgYW5kIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUCi0gKgkgIHNpZ25hbCBp cyBzZW50IHRvIGl0LgorICoJICBub3RpZmljYXRpb24ocykgdG8uICBJTlRFUlJVUFRfQVNZ TkNfTk9USUZZIGlzIHNlbnQgdG8gZWFjaCBzZWxlY3RlZAorICoJICBiYWNrZW5kLgogICoK ICAqIDguIFdoaWxlIHdyaXRpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSgp IHJlY29yZHMgdGhlIHF1ZXVlIGhlYWQKICAqCSAgcG9zaXRpb24gYm90aCBiZWZvcmUgYW5k IGFmdGVyIHRoZSB3cml0ZS4gIEJlY2F1c2UgYWxsIHdyaXRlcnMgc2VyaWFsaXplCkBAIC0x NjAsNyArMTU3LDYgQEAKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHVuaXN0 ZC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVs LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKQEAgLTE3MCwxNSArMTY2LDE0IEBACiAj aW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgi CiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJsaWIvZHNoYXNoLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNs dWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgi Ci0jaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAidGNvcC90Y29w cHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMv ZHNhLmgiCkBAIC0yODksNyArMjg0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5k U3RhdHVzCiAJT2lkCQkJZGJvaWQ7CQkJLyogYmFja2VuZCdzIGRhdGFiYXNlIE9JRCwgb3Ig SW52YWxpZE9pZCAqLwogCVByb2NOdW1iZXIJbmV4dExpc3RlbmVyOwkvKiBpZCBvZiBuZXh0 IGxpc3RlbmVyLCBvciBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJUXVldWVQb3NpdGlvbiBw b3M7CQkJLyogYmFja2VuZCBoYXMgcmVhZCBxdWV1ZSB1cCB0byBoZXJlICovCi0JYm9vbAkJ d2FrZXVwUGVuZGluZzsJLyogc2lnbmFsIHNlbnQgdG8gYmFja2VuZCwgbm90IHlldCBwcm9j ZXNzZWQgKi8KKwlib29sCQl3YWtldXBQZW5kaW5nOwkvKiBpbnRlcnJ1cHQgc2VudCB0byBi YWNrZW5kLCBub3QgeWV0CisJCQkJCQkJCSAqIHByb2Nlc3NlZCAqLwogCWJvb2wJCWlzQWR2 YW5jaW5nOwkvKiBiYWNrZW5kIGlzIGFkdmFuY2luZyBpdHMgcG9zaXRpb24gKi8KIH0gUXVl dWVCYWNrZW5kU3RhdHVzOwogCkBAIC0zMTksNyArMzE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg UXVldWVCYWNrZW5kU3RhdHVzCiAgKiBnbG9iYWxDaGFubmVsVGFibGUgcGFydGl0aW9uIGxv Y2tzLgogICoKICAqIEVhY2ggYmFja2VuZCB1c2VzIHRoZSBiYWNrZW5kW10gYXJyYXkgZW50 cnkgd2l0aCBpbmRleCBlcXVhbCB0byBpdHMKLSAqIFByb2NOdW1iZXIuICBXZSByZWx5IG9u IHRoaXMgdG8gbWFrZSBTZW5kUHJvY1NpZ25hbCBmYXN0LgorICogUHJvY051bWJlci4gIFdl IHJlbHkgb24gdGhpcyBmb3Igc2VuZGluZyBpbnRlcnJ1cHRzLgogICoKICAqIFRoZSBiYWNr ZW5kW10gYXJyYXkgZW50cmllcyBmb3IgYWN0aXZlbHktbGlzdGVuaW5nIGJhY2tlbmRzIGFy ZSB0aHJlYWRlZAogICogdG9nZXRoZXIgdXNpbmcgZmlyc3RMaXN0ZW5lciBhbmQgdGhlIG5l eHRMaXN0ZW5lciBsaW5rcywgc28gdGhhdCB3ZSBjYW4KQEAgLTUyOCwxNSArNTI0LDYgQEAg dHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbE5hbWUKIAljaGFyCQljaGFubmVsW05BTUVEQVRBTEVO XTsJLyogaGFzaCBrZXkgKi8KIH0gQ2hhbm5lbE5hbWU7CiAKLS8qCi0gKiBJbmJvdW5kIG5v dGlmaWNhdGlvbnMgYXJlIGluaXRpYWxseSBwcm9jZXNzZWQgYnkgSGFuZGxlTm90aWZ5SW50 ZXJydXB0KCksCi0gKiBjYWxsZWQgZnJvbSBpbnNpZGUgYSBzaWduYWwgaGFuZGxlci4gVGhh dCBqdXN0IHNldHMgdGhlCi0gKiBub3RpZnlJbnRlcnJ1cHRQZW5kaW5nIGZsYWcgYW5kIHNl dHMgdGhlIHByb2Nlc3MKLSAqIGxhdGNoLiBQcm9jZXNzTm90aWZ5SW50ZXJydXB0KCkgd2ls bCB0aGVuIGJlIGNhbGxlZCB3aGVuZXZlciBpdCdzIHNhZmUgdG8KLSAqIGFjdHVhbGx5IGRl YWwgd2l0aCB0aGUgaW50ZXJydXB0LgotICovCi12b2xhdGlsZSBzaWdfYXRvbWljX3Qgbm90 aWZ5SW50ZXJydXB0UGVuZGluZyA9IGZhbHNlOwotCiAvKiBUcnVlIGlmIHdlJ3ZlIHJlZ2lz dGVyZWQgYW4gb25fc2htZW1fZXhpdCBjbGVhbnVwICovCiBzdGF0aWMgYm9vbCB1bmxpc3Rl bkV4aXRSZWdpc3RlcmVkID0gZmFsc2U7CiAKQEAgLTU1MywxMSArNTQwLDEwIEBAIHN0YXRp YyBRdWV1ZVBvc2l0aW9uIHF1ZXVlSGVhZEJlZm9yZVdyaXRlOwogc3RhdGljIFF1ZXVlUG9z aXRpb24gcXVldWVIZWFkQWZ0ZXJXcml0ZTsKIAogLyoKLSAqIFdvcmtzcGFjZSBhcnJheXMg Zm9yIFNpZ25hbEJhY2tlbmRzLiAgVGhlc2UgYXJlIHByZWFsbG9jYXRlZCBpbgorICogV29y a3NwYWNlIGFycmF5IGZvciBTaWduYWxCYWNrZW5kcy4gIFRoaXMgaXMgcHJlYWxsb2NhdGVk IGluCiAgKiBQcmVDb21taXRfTm90aWZ5IHRvIGF2b2lkIG5lZWRpbmcgbWVtb3J5IGFsbG9j YXRpb24gYWZ0ZXIgY29tbWl0dGluZyB0bwogICogY2xvZy4KICAqLwotc3RhdGljIGludDMy ICpzaWduYWxQaWRzID0gTlVMTDsKIHN0YXRpYyBQcm9jTnVtYmVyICpzaWduYWxQcm9jbm9z ID0gTlVMTDsKIAogLyogaGF2ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVs dGlwbGUgb2YgUVVFVUVfQ0xFQU5VUF9ERUxBWT8gKi8KQEAgLTEyNjYsMTAgKzEyNTIsNiBA QCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCX0KIAogCQkvKiBQcmVhbGxvY2F0ZSB3b3Jr c3BhY2UgdGhhdCB3aWxsIGJlIG5lZWRlZCBieSBTaWduYWxCYWNrZW5kcygpICovCi0JCWlm IChzaWduYWxQaWRzID09IE5VTEwpCi0JCQlzaWduYWxQaWRzID0gTWVtb3J5Q29udGV4dEFs bG9jKFRvcE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCQkJCU1heEJhY2tlbmRzICogc2l6ZW9m KGludDMyKSk7Ci0KIAkJaWYgKHNpZ25hbFByb2Nub3MgPT0gTlVMTCkKIAkJCXNpZ25hbFBy b2Nub3MgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwKIAkJCQkJCQkJ CQkJICAgTWF4QmFja2VuZHMgKiBzaXplb2YoUHJvY051bWJlcikpOwpAQCAtMTM2MSw3ICsx MzQzLDcgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogICoKICAqCQlBcHBseSBwZW5kaW5n IGxpc3Rlbi91bmxpc3RlbiBjaGFuZ2VzIGFuZCBjbGVhciB0cmFuc2FjdGlvbi1sb2NhbCBz dGF0ZS4KICAqCi0gKgkJSWYgd2UgaXNzdWVkIGFueSBub3RpZmljYXRpb25zIGluIHRoZSB0 cmFuc2FjdGlvbiwgc2VuZCBzaWduYWxzIHRvCisgKgkJSWYgd2UgaXNzdWVkIGFueSBub3Rp ZmljYXRpb25zIGluIHRoZSB0cmFuc2FjdGlvbiwgc2VuZCBpbnRlcnJ1cHRzIHRvCiAgKgkJ bGlzdGVuaW5nIGJhY2tlbmRzIChwb3NzaWJseSBpbmNsdWRpbmcgb3Vyc2VsdmVzKSB0byBw cm9jZXNzIHRoZW0uCiAgKgkJQWxzbywgaWYgd2UgZmlsbGVkIGVub3VnaCBxdWV1ZSBwYWdl cyB3aXRoIG5ldyBub3RpZmllcywgdHJ5IHRvCiAgKgkJYWR2YW5jZSB0aGUgcXVldWUgdGFp bCBwb2ludGVyLgpAQCAtMTM4Nyw5ICsxMzY5LDkgQEAgQXRDb21taXRfTm90aWZ5KHZvaWQp CiAJCWFzeW5jUXVldWVVbnJlZ2lzdGVyKCk7CiAKIAkvKgotCSAqIFNlbmQgc2lnbmFscyB0 byBsaXN0ZW5pbmcgYmFja2VuZHMuICBXZSBuZWVkIGRvIHRoaXMgb25seSBpZiB0aGVyZSBh cmUKLQkgKiBwZW5kaW5nIG5vdGlmaWVzLCB3aGljaCB3ZXJlIHByZXZpb3VzbHkgYWRkZWQg dG8gdGhlIHNoYXJlZCBxdWV1ZSBieQotCSAqIFByZUNvbW1pdF9Ob3RpZnkoKS4KKwkgKiBT ZW5kIGludGVycnVwdHMgdG8gbGlzdGVuaW5nIGJhY2tlbmRzLiAgV2UgbmVlZCBkbyB0aGlz IG9ubHkgaWYgdGhlcmUKKwkgKiBhcmUgcGVuZGluZyBub3RpZmllcywgd2hpY2ggd2VyZSBw cmV2aW91c2x5IGFkZGVkIHRvIHRoZSBzaGFyZWQgcXVldWUKKwkgKiBieSBQcmVDb21taXRf Tm90aWZ5KCkuCiAJICovCiAJaWYgKHBlbmRpbmdOb3RpZmllcyAhPSBOVUxMKQogCQlTaWdu YWxCYWNrZW5kcygpOwpAQCAtMTYxOSw3ICsxNjAxLDcgQEAgUHJlcGFyZVRhYmxlRW50cmll c0Zvckxpc3Rlbihjb25zdCBjaGFyICpjaGFubmVsKQogICoKICAqIFByZXBhcmUgYW4gVU5M SVNURU4gYnkgcmVjb3JkaW5nIGl0IGluIHBlbmRpbmdMaXN0ZW5BY3Rpb25zLCBidXQgb25s eSBpZgogICogd2UncmUgY3VycmVudGx5IGxpc3RlbmluZyAoY29tbWl0dGVkIG9yIHN0YWdl ZCkuICBXZSBkb24ndCB0b3VjaAotICogZ2xvYmFsQ2hhbm5lbFRhYmxlIHlldCAtIHRoZSBs aXN0ZW5lciBrZWVwcyByZWNlaXZpbmcgc2lnbmFscyB1bnRpbAorICogZ2xvYmFsQ2hhbm5l bFRhYmxlIHlldCAtIHRoZSBsaXN0ZW5lciBrZWVwcyByZWNlaXZpbmcgbm90aWZpY2F0aW9u cyB1bnRpbAogICogY29tbWl0LCB3aGVuIHRoZSBlbnRyeSBpcyByZW1vdmVkLgogICovCiBz dGF0aWMgdm9pZApAQCAtMTYzOSw3ICsxNjIxLDcgQEAgUHJlcGFyZVRhYmxlRW50cmllc0Zv clVubGlzdGVuKGNvbnN0IGNoYXIgKmNoYW5uZWwpCiAJLyoKIAkgKiBSZWNvcmQgaW4gbG9j YWwgcGVuZGluZyBoYXNoIHRoYXQgd2Ugd2FudCB0byBVTkxJU1RFTiwgb3ZlcndyaXRpbmcg YW55CiAJICogZWFybGllciBhdHRlbXB0IHRvIExJU1RFTi4gIERvbid0IHRvdWNoIGxvY2Fs Q2hhbm5lbFRhYmxlIG9yCi0JICogZ2xvYmFsQ2hhbm5lbFRhYmxlIHlldCAtIHdlIGtlZXAg cmVjZWl2aW5nIHNpZ25hbHMgdW50aWwgY29tbWl0LgorCSAqIGdsb2JhbENoYW5uZWxUYWJs ZSB5ZXQgLSB3ZSBrZWVwIHJlY2VpdmluZyBub3RpZmljYXRpb25zIHVudGlsIGNvbW1pdC4K IAkgKi8KIAlwZW5kaW5nID0gKFBlbmRpbmdMaXN0ZW5FbnRyeSAqKQogCQloYXNoX3NlYXJj aChwZW5kaW5nTGlzdGVuQWN0aW9ucywgY2hhbm5lbCwgSEFTSF9FTlRFUiwgTlVMTCk7CkBA IC0yMjQzLDE0ICsyMjI1LDE0IEBAIGFzeW5jUXVldWVGaWxsV2FybmluZyh2b2lkKQogfQog CiAvKgotICogU2VuZCBzaWduYWxzIHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KKyAqIFNlbmQg aW50ZXJydXB0cyB0byBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgogICogTm9ybWFsbHkgd2Ug c2lnbmFsIG9ubHkgYmFja2VuZHMgdGhhdCBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgbm90aWZp ZXMgdGhhdAogICogd2UganVzdCBzZW50LiAgSG93ZXZlciwgdGhhdCB3aWxsIGxlYXZlIGlk bGUgbGlzdGVuZXJzIGZhbGxpbmcgZnVydGhlciBhbmQKICAqIGZ1cnRoZXIgYmVoaW5kLiAg V2FrZW4gdGhlbSBhbnl3YXkgaWYgdGhleSdyZSBmYXIgZW5vdWdoIGJlaGluZCwgc28gdGhl eSdsbAogICogYWR2YW5jZSB0aGVpciBxdWV1ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dp bmcgdGhlIGdsb2JhbCB0YWlsIHRvIGFkdmFuY2UuCiAgKgotICogU2luY2Ugd2Uga25vdyB0 aGUgUHJvY051bWJlciBhbmQgdGhlIFBpZCB0aGUgc2lnbmFsaW5nIGlzIHF1aXRlIGNoZWFw LgorICogU2luY2Ugd2Uga25vdyB0aGUgUHJvY051bWJlciB0aGUgc2lnbmFsaW5nIGlzIHF1 aXRlIGNoZWFwLgogICoKICAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBDb21taXRUcmFuc2Fj dGlvbigpLCBzbyBpdCdzIGltcG9ydGFudCBmb3IgaXQKICAqIHRvIGhhdmUgdmVyeSBsb3cg cHJvYmFiaWxpdHkgb2YgZmFpbHVyZS4KQEAgLTIyNjMsMTMgKzIyNDUsMTMgQEAgU2lnbmFs QmFja2VuZHModm9pZCkKIAkvKiBDYW4ndCBnZXQgaGVyZSB3aXRob3V0IFByZUNvbW1pdF9O b3RpZnkgaGF2aW5nIG1hZGUgdGhlIGdsb2JhbCB0YWJsZSAqLwogCUFzc2VydChnbG9iYWxD aGFubmVsVGFibGUgIT0gTlVMTCk7CiAKLQkvKiBJdCBzaG91bGQgaGF2ZSBzZXQgdXAgdGhl c2UgYXJyYXlzLCB0b28gKi8KLQlBc3NlcnQoc2lnbmFsUGlkcyAhPSBOVUxMICYmIHNpZ25h bFByb2Nub3MgIT0gTlVMTCk7CisJLyogSXQgc2hvdWxkIGhhdmUgc2V0IHVwIHRoaXMgYXJy YXksIHRvbyAqLworCUFzc2VydChzaWduYWxQcm9jbm9zICE9IE5VTEwpOwogCiAJLyoKIAkg KiBJZGVudGlmeSBiYWNrZW5kcyB0aGF0IHdlIG5lZWQgdG8gc2lnbmFsLiAgV2UgZG9uJ3Qg d2FudCB0byBzZW5kCiAJICogc2lnbmFscyB3aGlsZSBob2xkaW5nIHRoZSBOb3RpZnlRdWV1 ZUxvY2ssIHNvIHRoaXMgcGFydCBqdXN0IGJ1aWxkcyBhCi0JICogbGlzdCBvZiB0YXJnZXQg UElEcyBpbiBzaWduYWxQaWRzW10gYW5kIHNpZ25hbFByb2Nub3NbXS4KKwkgKiBsaXN0IG9m IHRhcmdldCBiYWNrZW5kcyBpbiBzaWduYWxQcm9jbm9zW10uCiAJICovCiAJY291bnQgPSAw OwogCkBAIC0yMjk0LDcgKzIyNzYsNiBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCQlmb3Ig KGludCBqID0gMDsgaiA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGorKykKIAkJewogCQkJUHJv Y051bWJlcglpOwotCQkJaW50MzIJCXBpZDsKIAkJCVF1ZXVlUG9zaXRpb24gcG9zOwogCiAJ CQlpZiAoIWxpc3RlbmVyc1tqXS5saXN0ZW5pbmcpCkBAIC0yMzA1LDE2ICsyMjg2LDE0IEBA IFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVO RElORyhpKSkKIAkJCQljb250aW51ZTsJCS8qIGFscmVhZHkgc2lnbmFsZWQsIG5vIG5lZWQg dG8gcmVwZWF0ICovCiAKLQkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwogCQkJcG9z ID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CiAKIAkJCWlmIChRVUVVRV9QT1NfRVFVQUwocG9z LCBRVUVVRV9IRUFEKSkKIAkJCQljb250aW51ZTsJCS8qIGl0J3MgZnVsbHkgY2F1Z2h0IHVw IGFscmVhZHkgKi8KIAotCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKwkJCUFzc2Vy dChpICE9IElOVkFMSURfUFJPQ19OVU1CRVIpOwogCiAJCQlRVUVVRV9CQUNLRU5EX1dBS0VV UF9QRU5ESU5HKGkpID0gdHJ1ZTsKLQkJCXNpZ25hbFBpZHNbY291bnRdID0gcGlkOwogCQkJ c2lnbmFsUHJvY25vc1tjb3VudF0gPSBpOwogCQkJY291bnQrKzsKIAkJfQpAQCAtMjMzMSw3 ICsyMzEwLDYgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAkgKi8KIAlmb3IgKFByb2NOdW1i ZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7 IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCXsKLQkJaW50MzIJCXBpZDsKIAkJUXVl dWVQb3NpdGlvbiBwb3M7CiAKIAkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkco aSkpCkBAIC0yMzQxLDcgKzIzMTksNiBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCQlpZiAo UVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkpCiAJCQljb250aW51ZTsKIAotCQlwaWQg PSBRVUVVRV9CQUNLRU5EX1BJRChpKTsKIAkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7 CiAKIAkJLyoKQEAgLTIzNjEsMTAgKzIzMzgsNyBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQog CQkJCQkJCQkJUVVFVUVfUE9TX1BBR0UocG9zKSkgPj0gUVVFVUVfQ0xFQU5VUF9ERUxBWSkK IAkJewogCQkJLyogSXQncyBpZGxlIGFuZCBmYXIgYmVoaW5kLCBzbyB3YWtlIGl0IHVwICov Ci0JCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQpOwotCiAJCQlRVUVVRV9CQUNLRU5EX1dB S0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsKLQkJCXNpZ25hbFBpZHNbY291bnRdID0gcGlkOwog CQkJc2lnbmFsUHJvY25vc1tjb3VudF0gPSBpOwogCQkJY291bnQrKzsKIAkJfQpAQCAtMjM3 MiwyOSArMjM0NiwyMCBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCiAJTFdMb2NrUmVsZWFz ZShOb3RpZnlRdWV1ZUxvY2spOwogCi0JLyogTm93IHNlbmQgc2lnbmFscyAqLworCS8qIE5v dyBzZW5kIHRoZSBpbnRlcnJ1cHRzICovCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg aSsrKQogCXsKLQkJaW50MzIJCXBpZCA9IHNpZ25hbFBpZHNbaV07CisJCVByb2NOdW1iZXIJ cHJvY25vID0gc2lnbmFsUHJvY25vc1tpXTsKIAogCQkvKgotCQkgKiBJZiB3ZSBhcmUgc2ln bmFsaW5nIG91ciBvd24gcHJvY2Vzcywgbm8gbmVlZCB0byBpbnZvbHZlIHRoZSBrZXJuZWw7 Ci0JCSAqIGp1c3Qgc2V0IHRoZSBmbGFnIGRpcmVjdGx5LgorCQkgKiBOb3RlOiBpdCdzIHVu bGlrZWx5IGJ1dCBjZXJ0YWlubHkgcG9zc2libGUgdGhhdCB0aGUgYmFja2VuZCBleGl0ZWQK KwkJICogc2luY2Ugd2UgcmVsZWFzZWQgTm90aWZ5UXVldWVMb2NrLiBXZSdsbCBzZW5kIHRo ZSBpbnRlcnJ1cHQgdG8KKwkJICogd3JvbmcgYmFja2VuZCBpbiB0aGF0IGNhc2UsIGJ1dCB0 aGF0J3MgaGFybWxlc3MuCiAJCSAqLwotCQlpZiAocGlkID09IE15UHJvY1BpZCkKLQkJewot CQkJbm90aWZ5SW50ZXJydXB0UGVuZGluZyA9IHRydWU7Ci0JCQljb250aW51ZTsKLQkJfQot Ci0JCS8qCi0JCSAqIE5vdGU6IGFzc3VtaW5nIHRoaW5ncyBhcmVuJ3QgYnJva2VuLCBhIHNp Z25hbCBmYWlsdXJlIGhlcmUgY291bGQKLQkJICogb25seSBvY2N1ciBpZiB0aGUgdGFyZ2V0 IGJhY2tlbmQgZXhpdGVkIHNpbmNlIHdlIHJlbGVhc2VkCi0JCSAqIE5vdGlmeVF1ZXVlTG9j azsgd2hpY2ggaXMgdW5saWtlbHkgYnV0IGNlcnRhaW5seSBwb3NzaWJsZS4gU28gd2UKLQkJ ICoganVzdCBsb2cgYSBsb3ctbGV2ZWwgZGVidWcgbWVzc2FnZSBpZiBpdCBoYXBwZW5zLgot CQkgKi8KLQkJaWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19OT1RJRllfSU5URVJS VVBULCBzaWduYWxQcm9jbm9zW2ldKSA8IDApCi0JCQllbG9nKERFQlVHMywgImNvdWxkIG5v dCBzaWduYWwgYmFja2VuZCB3aXRoIFBJRCAlZDogJW0iLCBwaWQpOworCQlpZiAocHJvY25v ID09IE15UHJvY051bWJlcikKKwkJCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9BU1lOQ19O T1RJRlkpOworCQllbHNlCisJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9BU1lOQ19OT1RJ RlksIHByb2Nubyk7CiAJfQogfQogCkBAIC0yNTMxLDM5ICsyNDk2LDEyIEBAIEF0U3ViQWJv cnRfTm90aWZ5KHZvaWQpCiAJfQogfQogCi0vKgotICogSGFuZGxlTm90aWZ5SW50ZXJydXB0 Ci0gKgotICoJCVNpZ25hbCBoYW5kbGVyIHBvcnRpb24gb2YgaW50ZXJydXB0IGhhbmRsaW5n LiBMZXQgdGhlIGJhY2tlbmQga25vdwotICoJCXRoYXQgdGhlcmUncyBhIHBlbmRpbmcgbm90 aWZ5IGludGVycnVwdC4gSWYgd2UncmUgY3VycmVudGx5IHJlYWRpbmcKLSAqCQlmcm9tIHRo ZSBjbGllbnQsIHRoaXMgd2lsbCBpbnRlcnJ1cHQgdGhlIHJlYWQgYW5kCi0gKgkJUHJvY2Vz c0NsaWVudFJlYWRJbnRlcnJ1cHQoKSB3aWxsIGNhbGwgUHJvY2Vzc05vdGlmeUludGVycnVw dCgpLgotICovCi12b2lkCi1IYW5kbGVOb3RpZnlJbnRlcnJ1cHQodm9pZCkKLXsKLQkvKgot CSAqIE5vdGU6IHRoaXMgaXMgY2FsbGVkIGJ5IGEgU0lHTkFMIEhBTkRMRVIuIFlvdSBtdXN0 IGJlIHZlcnkgd2FyeSB3aGF0Ci0JICogeW91IGRvIGhlcmUuCi0JICovCi0KLQkvKiBzaWdu YWwgdGhhdCB3b3JrIG5lZWRzIHRvIGJlIGRvbmUgKi8KLQlub3RpZnlJbnRlcnJ1cHRQZW5k aW5nID0gdHJ1ZTsKLQotCS8qIG1ha2Ugc3VyZSB0aGUgZXZlbnQgaXMgcHJvY2Vzc2VkIGlu IGR1ZSBjb3Vyc2UgKi8KLQlTZXRMYXRjaChNeUxhdGNoKTsKLX0KLQogLyoKICAqIFByb2Nl c3NOb3RpZnlJbnRlcnJ1cHQKICAqCi0gKgkJVGhpcyBpcyBjYWxsZWQgaWYgd2Ugc2VlIG5v dGlmeUludGVycnVwdFBlbmRpbmcgc2V0LCBqdXN0IGJlZm9yZQotICoJCXRyYW5zbWl0dGlu ZyBSZWFkeUZvclF1ZXJ5IGF0IHRoZSBlbmQgb2YgYSBmcm9udGVuZCBjb21tYW5kLCBhbmQK LSAqCQlhbHNvIGlmIGEgbm90aWZ5IHNpZ25hbCBvY2N1cnMgd2hpbGUgcmVhZGluZyBmcm9t IHRoZSBmcm9udGVuZC4KLSAqCQlIYW5kbGVOb3RpZnlJbnRlcnJ1cHQoKSB3aWxsIGNhdXNl IHRoZSByZWFkIHRvIGJlIGludGVycnVwdGVkCi0gKgkJdmlhIHRoZSBwcm9jZXNzJ3MgbGF0 Y2gsIGFuZCB0aGlzIHJvdXRpbmUgd2lsbCBnZXQgY2FsbGVkLgotICoJCUlmIHdlIGFyZSB0 cnVseSBpZGxlIChpZSwgKm5vdCogaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2spLAotICoJ CXByb2Nlc3MgdGhlIGluY29taW5nIG5vdGlmaWVzLgorICoJCVRoaXMgaXMgY2FsbGVkIGlm IHdlIHNlZSBJTlRFUlJVUFRfQVNZTkNfTk9USUZZIHNldCwganVzdCBiZWZvcmUKKyAqCQl0 cmFuc21pdHRpbmcgUmVhZHlGb3JRdWVyeSBhdCB0aGUgZW5kIG9mIGEgZnJvbnRlbmQgY29t bWFuZCwgYW5kIGFsc28KKyAqCQlpZiB0aGUgaW50ZXJydXB0IG9jY3VycyB3aGlsZSByZWFk aW5nIGZyb20gdGhlIGZyb250ZW5kLgogICoKICAqCQlJZiAiZmx1c2giIGlzIHRydWUsIGZv cmNlIGFueSBmcm9udGVuZCBtZXNzYWdlcyBvdXQgaW1tZWRpYXRlbHkuCiAgKgkJVGhpcyBj YW4gYmUgZmFsc2Ugd2hlbiBiZWluZyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBhIGZyb250ZW5k IGNvbW1hbmQsCkBAIC0yNTcyLDEyICsyNTEwLDEzIEBAIEhhbmRsZU5vdGlmeUludGVycnVw dCh2b2lkKQogdm9pZAogUHJvY2Vzc05vdGlmeUludGVycnVwdChib29sIGZsdXNoKQogewot CWlmIChJc1RyYW5zYWN0aW9uT3JUcmFuc2FjdGlvbkJsb2NrKCkpCi0JCXJldHVybjsJCQkJ CS8qIG5vdCByZWFsbHkgaWRsZSAqLworCUFzc2VydCghSXNUcmFuc2FjdGlvbk9yVHJhbnNh Y3Rpb25CbG9jaygpKTsKIAotCS8qIExvb3AgaW4gY2FzZSBhbm90aGVyIHNpZ25hbCBhcnJp dmVzIHdoaWxlIHNlbmRpbmcgbWVzc2FnZXMgKi8KLQl3aGlsZSAobm90aWZ5SW50ZXJydXB0 UGVuZGluZykKKwkvKiBMb29wIGluIGNhc2UgYW5vdGhlciBpbnRlcnJ1cHQgYXJyaXZlcyB3 aGlsZSBzZW5kaW5nIG1lc3NhZ2VzICovCisJZG8KKwl7CiAJCVByb2Nlc3NJbmNvbWluZ05v dGlmeShmbHVzaCk7CisJfSB3aGlsZSAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQVNZ TkNfTk9USUZZKSk7CiB9CiAKIApAQCAtMjY4Nyw3ICsyNjI2LDcgQEAgYXN5bmNRdWV1ZVJl YWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJCQkgKiBPdXIgc3RvcCBwb3NpdGlvbiBpcyB3 aGF0IHdlIGZvdW5kIHRvIGJlIHRoZSBoZWFkJ3MgcG9zaXRpb24KIAkJCSAqIHdoZW4gd2Ug ZW50ZXJlZCB0aGlzIGZ1bmN0aW9uLiBJdCBtaWdodCBoYXZlIGNoYW5nZWQgYWxyZWFkeS4K IAkJCSAqIEJ1dCBpZiBpdCBoYXMsIHdlIHdpbGwgcmVjZWl2ZSAob3IgaGF2ZSBhbHJlYWR5 IHJlY2VpdmVkIGFuZAotCQkJICogcXVldWVkKSBhbm90aGVyIHNpZ25hbCBhbmQgY29tZSBo ZXJlIGFnYWluLgorCQkJICogcXVldWVkKSBhbm90aGVyIGludGVycnVwdCBhbmQgY29tZSBo ZXJlIGFnYWluLgogCQkJICoKIAkJCSAqIFdlIGFyZSBub3QgaG9sZGluZyBOb3RpZnlRdWV1 ZUxvY2sgaGVyZSEgVGhlIHF1ZXVlIGNhbiBvbmx5CiAJCQkgKiBleHRlbmQgYmV5b25kIHRo ZSBoZWFkIHBvaW50ZXIgKHNlZSBhYm92ZSkgYW5kIHdlIGxlYXZlIG91cgpAQCAtMzA1MSw5 ICsyOTkwLDYgQEAgQXN5bmNOb3RpZnlGcmVlemVYaWRzKFRyYW5zYWN0aW9uSWQgbmV3RnJv emVuWGlkKQogc3RhdGljIHZvaWQKIFByb2Nlc3NJbmNvbWluZ05vdGlmeShib29sIGZsdXNo KQogewotCS8qIFdlICptdXN0KiByZXNldCB0aGUgZmxhZyAqLwotCW5vdGlmeUludGVycnVw dFBlbmRpbmcgPSBmYWxzZTsKLQogCS8qIERvIG5vdGhpbmcgZWxzZSBpZiB3ZSBhcmVuJ3Qg YWN0aXZlbHkgbGlzdGVuaW5nICovCiAJaWYgKExvY2FsQ2hhbm5lbFRhYmxlSXNFbXB0eSgp KQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJv bXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXgg ZmJkMTMzNTNlZmMuLmVhMjY1OTgyMWE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZy b21wYXJzZS5jCkBAIC0yNzAsOSArMjcwLDEzIEBAIENvcHlHZXREYXRhKENvcHlGcm9tU3Rh dGUgY3N0YXRlLCB2b2lkICpkYXRhYnVmLCBpbnQgbWlucmVhZCwgaW50IG1heHJlYWQpCiAJ CQkJCS8qIFRyeSB0byByZWNlaXZlIGFub3RoZXIgbWVzc2FnZSAqLwogCQkJCQlpbnQJCQlt dHlwZTsKIAkJCQkJaW50CQkJbWF4bXNnbGVuOworCQkJCQlib29sCQlzYXZlX3F1ZXJ5X2Nh bmNlbF9lbmFibGVkOwogCiAJCQlyZWFkbWVzc2FnZToKLQkJCQkJSE9MRF9DQU5DRUxfSU5U RVJSVVBUUygpOworCQkJCQlzYXZlX3F1ZXJ5X2NhbmNlbF9lbmFibGVkID0gKEVuYWJsZWRJ bnRlcnJ1cHRzTWFzayAmIElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpICE9IDA7CisJCQkJCWlm IChzYXZlX3F1ZXJ5X2NhbmNlbF9lbmFibGVkKQorCQkJCQkJRGlzYWJsZUludGVycnVwdChJ TlRFUlJVUFRfUVVFUllfQ0FOQ0VMKTsKKwogCQkJCQlwcV9zdGFydG1zZ3JlYWQoKTsKIAkJ CQkJbXR5cGUgPSBwcV9nZXRieXRlKCk7CiAJCQkJCWlmIChtdHlwZSA9PSBFT0YpCkBAIC0z MDQsNyArMzA4LDEwIEBAIENvcHlHZXREYXRhKENvcHlGcm9tU3RhdGUgY3N0YXRlLCB2b2lk ICpkYXRhYnVmLCBpbnQgbWlucmVhZCwgaW50IG1heHJlYWQpCiAJCQkJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCiAJ CQkJCQkJCSBlcnJtc2coInVuZXhwZWN0ZWQgRU9GIG9uIGNsaWVudCBjb25uZWN0aW9uIHdp dGggYW4gb3BlbiB0cmFuc2FjdGlvbiIpKSk7Ci0JCQkJCVJFU1VNRV9DQU5DRUxfSU5URVJS VVBUUygpOworCisJCQkJCWlmIChzYXZlX3F1ZXJ5X2NhbmNlbF9lbmFibGVkKQorCQkJCQkJ RW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOworCiAJCQkJCS8qIC4u LiBhbmQgcHJvY2VzcyBpdCAqLwogCQkJCQlzd2l0Y2ggKG10eXBlKQogCQkJCQl7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3ZhY3V1bS5jCmluZGV4IGI5ODQwNjM3NzgzLi40ZTg3OWVmN2FkMSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdmFjdXVtLmMKQEAgLTQyLDEyICs0MiwxMiBAQAogI2luY2x1ZGUgImNvbW1h bmRzL2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVk ZSAiY29tbWFuZHMvdmFjdXVtLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2lu Y2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgiCi0jaW5jbHVkZSAi cG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwu aCIKQEAgLTI0MzQsOCArMjQzNCw3IEBAIHZhY3V1bV9kZWxheV9wb2ludChib29sIGlzX2Fu YWx5emUpCiAJLyogQWx3YXlzIGNoZWNrIGZvciBpbnRlcnJ1cHRzICovCiAJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKIAotCWlmIChJbnRlcnJ1cHRQZW5kaW5nIHx8Ci0JCSghVmFjdXVt Q29zdEFjdGl2ZSAmJiAhQ29uZmlnUmVsb2FkUGVuZGluZykpCisJaWYgKCFWYWN1dW1Db3N0 QWN0aXZlICYmICFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkK IAkJcmV0dXJuOwogCiAJLyoKQEAgLTI0NDQsOSArMjQ0Myw5IEBAIHZhY3V1bV9kZWxheV9w b2ludChib29sIGlzX2FuYWx5emUpCiAJICogW2F1dG92YWN1dW1fXXZhY3V1bV9jb3N0X2Rl bGF5IHRvIHRha2UgZWZmZWN0IHdoaWxlIGEgdGFibGUgaXMgYmVpbmcKIAkgKiB2YWN1dW1l ZCBvciBhbmFseXplZC4KIAkgKi8KLQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZyAmJiBBbUF1 dG9WYWN1dW1Xb3JrZXJQcm9jZXNzKCkpCisJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJS VVBUX0NPTkZJR19SRUxPQUQpICYmIEFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSkKIAl7 Ci0JCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5U RVJSVVBUX0NPTkZJR19SRUxPQUQpOwogCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQ KTsKIAkJVmFjdXVtVXBkYXRlQ29zdHMoKTsKIAl9CkBAIC0yNTMzLDggKzI1MzIsOCBAQCB2 YWN1dW1fZGVsYXlfcG9pbnQoYm9vbCBpc19hbmFseXplKQogCQkvKgogCQkgKiBXZSBkb24n dCB3YW50IHRvIGlnbm9yZSBwb3N0bWFzdGVyIGRlYXRoIGR1cmluZyB2ZXJ5IGxvbmcgdmFj dXVtcwogCQkgKiB3aXRoIHZhY3V1bV9jb3N0X2RlbGF5IGNvbmZpZ3VyZWQuICBXZSBjYW4n dCB1c2UgdGhlIHVzdWFsCi0JCSAqIFdhaXRMYXRjaCgpIGFwcHJvYWNoIGhlcmUgYmVjYXVz ZSB3ZSB3YW50IG1pY3Jvc2Vjb25kLWJhc2VkIHNsZWVwCi0JCSAqIGR1cmF0aW9ucyBhYm92 ZS4KKwkJICogV2FpdEludGVycnVwdCgpIGFwcHJvYWNoIGhlcmUgYmVjYXVzZSB3ZSB3YW50 IG1pY3Jvc2Vjb25kLWJhc2VkCisJCSAqIHNsZWVwIGR1cmF0aW9ucyBhYm92ZS4KIAkJICov CiAJCWlmIChJc1VuZGVyUG9zdG1hc3RlciAmJiAhUG9zdG1hc3RlcklzQWxpdmUoKSkKIAkJ CWV4aXQoMSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5k LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKaW5kZXggMzlkOTQ0MmMx MjEuLjFkNTA2NGViMjllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl QXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC02 MSwxMCArNjEsOSBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNp bmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVB cHBlbmQuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sd2xvY2su aCIKKyNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgogCiAvKiBTaGFyZWQgc3RhdGUgZm9y IHBhcmFsbGVsLWF3YXJlIEFwcGVuZC4gKi8KIHN0cnVjdCBQYXJhbGxlbEFwcGVuZFN0YXRl CkBAIC0xMDQ0LDcgKzEwNDMsNyBAQCBFeGVjQXBwZW5kQXN5bmNFdmVudFdhaXQoQXBwZW5k U3RhdGUgKm5vZGUpCiAJQXNzZXJ0KG5vZGUtPmFzX2V2ZW50c2V0ID09IE5VTEwpOwogCW5v ZGUtPmFzX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJjZU93 bmVyLCBuZXZlbnRzKTsKIAlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5hc19ldmVudHNldCwg V0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJICBOVUxMLCBO VUxMKTsKKwkJCQkJICAwLCBOVUxMKTsKIAogCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBs YW4gYSBjaGFuY2UgdG8gYWRkIGFuIGV2ZW50LiAqLwogCWkgPSAtMTsKQEAgLTEwNjgsOCAr MTA2Nyw4IEBAIEV4ZWNBcHBlbmRBc3luY0V2ZW50V2FpdChBcHBlbmRTdGF0ZSAqbm9kZSkK IAl9CiAKIAkvKgotCSAqIEFkZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0 aGF0IHdlIHdha2UgdXAgdG8gcHJvY2VzcyB0aGUKLQkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRz IHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KKwkgKiBBZGQgdGhlIGN1cnJlbnRseSBl bmFibGVkIGludGVycnVwdHMgdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3YWtlIHVwIHRvCisJ ICogcHJvY2VzcyB0aGVtIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4KIAkgKgogCSAq IE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhp cyBpcyBhZGRlZCB0byB0aGUKIAkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhlIEV4ZWNBc3lu Y0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKQEAgLTEwNzksOCArMTA3OCw4IEBA IEV4ZWNBcHBlbmRBc3luY0V2ZW50V2FpdChBcHBlbmRTdGF0ZSAqbm9kZSkKIAkgKiB3ZSBj YW5ub3QgY2hhbmdlIGl0IG5vdy4gIFRoZSBwYXR0ZXJuIGhhcyBwb3NzaWJseSBiZWVuIGNv cGllZCB0byBvdGhlcgogCSAqIGV4dGVuc2lvbnMgdG9vLgogCSAqLwotCUFkZFdhaXRFdmVu dFRvU2V0KG5vZGUtPmFzX2V2ZW50c2V0LCBXTF9MQVRDSF9TRVQsIFBHSU5WQUxJRF9TT0NL RVQsCi0JCQkJCSAgTXlMYXRjaCwgTlVMTCk7CisJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+ YXNfZXZlbnRzZXQsIFdMX0lOVEVSUlVQVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBD aGVja0ZvckludGVycnVwdHNNYXNrLCBOVUxMKTsKIAogCS8qIFJldHVybiBhdCBtb3N0IEVW RU5UX0JVRkZFUl9TSVpFIGV2ZW50cyBpbiBvbmUgY2FsbC4gKi8KIAlpZiAobmV2ZW50cyA+ IEVWRU5UX0JVRkZFUl9TSVpFKQpAQCAtMTEyMywxNCArMTEyMiwxMCBAQCBFeGVjQXBwZW5k QXN5bmNFdmVudFdhaXQoQXBwZW5kU3RhdGUgKm5vZGUpCiAJCQkJRXhlY0FzeW5jTm90aWZ5 KGFyZXEpOwogCQkJfQogCQl9Ci0KLQkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMg Ki8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCi0JCXsKLQkJCVJl c2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9CiAJ fQorCisJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMgKi8KKwlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlR2F0aGVyLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlR2F0 aGVyLmMKaW5kZXggMTE0NjkzYWJiMzIuLmEzN2Q2ZTkwNmIzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlR2F0aGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUdhdGhlci5jCkBAIC0zNCw5ICszNCw4IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlR2F0aGVyLmgiCiAjaW5jbHVk ZSAiZXhlY3V0b3IvdHF1ZXVlLmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIK LSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVu dC5oIgogCiAKQEAgLTM4Myw5ICszODIsMTEgQEAgZ2F0aGVyX3JlYWRuZXh0KEdhdGhlclN0 YXRlICpnYXRoZXJzdGF0ZSkKIAkJCQlyZXR1cm4gTlVMTDsKIAogCQkJLyogTm90aGluZyB0 byBkbyBleGNlcHQgd2FpdCBmb3IgZGV2ZWxvcG1lbnRzLiAqLwotCQkJKHZvaWQpIFdhaXRM YXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAot CQkJCQkJCSBXQUlUX0VWRU5UX0VYRUNVVEVfR0FUSEVSKTsKLQkJCVJlc2V0TGF0Y2goTXlM YXRjaCk7CisJCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNr IHwKKwkJCQkJCQkJIElOVEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkJCQkJIFdMX0lOVEVS UlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCisJCQkJCQkJCSBXQUlUX0VWRU5UX0VY RUNVVEVfR0FUSEVSKTsKKwkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VV UCk7CiAJCQludmlzaXRlZCA9IDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9pcGMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9pcGMvTWFrZWZpbGUKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdkNDY1YmM5N2RiCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2JhY2tlbmQvaXBjL01ha2VmaWxlCkBAIC0wLDAgKzEsMTkgQEAKKyMtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlLS0KKyMgICAgTWFrZWZpbGUgZm9yIGJh Y2tlbmQvaXBjCisjCisjIElERU5USUZJQ0FUSU9OCisjICAgIHNyYy9iYWNrZW5kL2lwYy9N YWtlZmlsZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tl bmQvaXBjCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRp cikvc3JjL01ha2VmaWxlLmdsb2JhbAorCitPQkpTID0gXAorCWludGVycnVwdC5vIFwKKwlz aWduYWxfaGFuZGxlcnMubworCitpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQv Y29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9pcGMvUkVBRE1FLm1kIGIvc3Jj L2JhY2tlbmQvaXBjL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uNDU5ZjNkM2NhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9p cGMvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMjYwIEBACitJbnRlcnJ1cHRzCis9PT09PT09PT09 CisKKyJJbnRlcnJ1cHRzIiBhcmUgYSBzZXQgb2YgZmxhZ3MgdGhhdCByZXByZXNlbnQgY29u ZGl0aW9ucyB0aGF0IHNob3VsZAorYmUgaGFuZGxlZCBhdCBhIGxhdGVyIHRpbWUuICBUaGV5 IGFyZSByb3VnaGx5IGFuYWxvZ291cyB0byBVbml4CitzaWduYWxzLCBleGNlcHQgdGhhdCB0 aGV5IGFyZSBoYW5kbGVkIGNvb3BlcmF0aXZlbHkgYnkgY2hlY2tpbmcgZm9yCit0aGVtIGF0 IG1hbnkgcG9pbnRzIGluIHRoZSBjb2RlLiBUaGUgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBt YWNybyBpcworY2FsbGVkIGF0IHN0cmF0ZWdpY2FsbHkgbG9jYXRlZCBzcG90cyB3aGVyZSBp dCBpcyBub3JtYWxseSBzYWZlIHRvCitwcm9jZXNzIGludGVycnVwdHMuCisKK1dlbGwgYmVo YXZlZCBiYWNrZW5kIGNvZGUgY2FsbHMgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBwZXJpb2Rp Y2FsbHkgaW4KK2FueSBsb25nLXJ1bm5pbmcgbG9vcHMgb3Igb3RoZXIgbG9uZyBjb21wdXRh dGlvbnMsIGFuZCBuZXZlciBzbGVlcHMKK3VzaW5nIG1lY2hhbmlzbXMgb3RoZXIgdGhhbiB0 aGUgV2FpdEV2ZW50U2V0IG1lY2hhbmlzbSBvciB0aGUgbW9yZQorY29udmVuaWVudCBXYWl0 SW50ZXJydXB0IC8gV2FpdFNvY2tlck9ySW50ZXJydXB0IGZ1bmN0aW9ucyAoZXhjZXB0IGZv cgorYm91bmRlZCBzaG9ydCBwZXJpb2RzLCBlZyBMV0xvY2sgd2FpdHMpLiBGb2xsb3dpbmcg dGhlc2UgcnVsZXMgZW5zdXJlcwordGhhdCB0aGUgYmFja2VuZCBkb2Vzbid0IGJlY29tZSB1 bmNhbmNlbGxhYmxlIGZvciB0b28gbG9uZy4KKworRWFjaCBpbnRlcnJ1cHQgdHlwZSBjYW4g aGF2ZSBhIGhhbmRsZXIgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGl0LAord2hpY2ggd2ls bCBiZSBjYWxsZWQgYnkgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBpZiB0aGUgaW50ZXJydXB0 IGlzCitwZW5kaW5nLiAgQSBzdGFuZGFyZCBzZXQgb2YgaW50ZXJydXB0IGhhbmRsZXJzIGFy ZSBpbnN0YWxsZWQgYXQKK3Byb2Nlc3Mgc3RhcnR1cCwgYnV0IHRoZXkgY2FuIGJlIG92ZXJy aWRkZW4gYnkKK1NldEludGVycnVwdEhhbmRsZXIoKS4gQSBoYW5kbGVyIGNhbiBhbHNvIGJl IHRlbXBvcmFyaWx5IGRpc2FibGVkIGJ5CitjYWxsaW5nIERpc2FibGVJbnRlcnJ1cHQgYW5k IHJlLWVuYWJsZWQgYnkgRW5hYmxlSW50ZXJydXB0LgorCitJZiBhbiBpbnRlcnJ1cHQgaXMg cmFpc2VkIHRoYXQgZG9lc24ndCBoYXZlIGEgaGFuZGxlciBmdW5jdGlvbiBvciBpdAoraXMg bm90IGVuYWJsZWQsIHRoZSBpbnRlcnJ1cHQgd2lsbCByZW1haW4gcGVuZGluZyB1bnRpbCBp dCBpcyBjbGVhcmVkLAorb3IgdGhlIGhhbmRsZXIgaXMgcmUtZW5hYmxlZC4KKworSWYgYW4g aW50ZXJydXB0IGlzIHNlbnQgdGhhdCB3YXMgYWxyZWFkeSBwZW5kaW5nIGZvciB0aGUgdGFy Z2V0Citwcm9jZXNzLCBpdCBpcyBjb2FsZXNjZWQsIGllLiB0aGUgdGFyZ2V0IHByb2Nlc3Mg d2lsbCBwcm9jZXNzIGl0IG9ubHkKK29uY2UuIEF0dGVtcHRpbmcgdG8gc2V0IGFuIGludGVy cnVwdCBiaXQgdGhhdCBpcyBhbHJlYWR5IHNldCBpcyB2ZXJ5CitmYXN0LCBhbW91bnRpbmcg dG8gbWVyZWx5IGFuIGF0b21pYyBvcCBpbiBzaGFyZWQgbWVtb3J5LgorCitTZWUgc3JjL2lu Y2x1ZGUvaXBjL2ludGVycnVwdC5oIGZvciBhIGxpc3Qgb2YgYWxsIHRoZSBpbnRlcnJ1cHRz IHVzZWQKK2luIGNvcmUgY29kZS4gRXh0ZW5zaW9ucyBjYW4gZGVmaW5lIHRoZWlyIG93biBp bnRlcnJ1cHRzLgorCitIT0xEL1JFU1VNRV9JTlRFUlJVUFRTCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisKK1Byb2Nlc3NpbmcgYW4gaW50ZXJydXB0IG1heSB0aHJvdyBhbiBlcnJvciB3 aXRoIGVyZXBvcnQoKSAoZm9yCitleGFtcGxlLCBxdWVyeSBjYW5jZWxsYXRpb24pIG9yIHRl cm1pbmF0ZSB0aGUgcHJvY2VzcyBncmFjZWZ1bGx5LiBJbgorc29tZSBjYXNlcywgd2UgaW52 b2tlIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgaW5zaWRlIGxvdy1sZXZlbAorc3Vicm91dGlu ZXMgdGhhdCBtaWdodCBzb21ldGltZXMgYmUgY2FsbGVkIGluIGNvbnRleHRzIHRoYXQgZG8g Km5vdCoKK3dhbnQgdG8gYWxsb3cgaW50ZXJydXB0IHByb2Nlc3NpbmcuICBUaGUgSE9MRF9J TlRFUlJVUFRTKCkgYW5kCitSRVNVTUVfSU5URVJSVVBUUygpIG1hY3JvcyBhbGxvdyBjb2Rl IHRvIGVuc3VyZSB0aGF0IG5vIGludGVycnVwdAoraGFuZGxlcnMgYXJlIGNhbGxlZCwgZXZl biBpZiBDSEVDS19GT1JfSU5URVJSVVBUUygpIGdldHMgY2FsbGVkIGluIGEKK3N1YnJvdXRp bmUuICBUaGUgaW50ZXJydXB0IHdpbGwgYmUgaGVsZCBvZmYgdW50aWwKK0NIRUNLX0ZPUl9J TlRFUlJVUFRTKCkgaXMgZG9uZSBvdXRzaWRlIGFueSBIT0xEX0lOVEVSUlVQVFMoKSAuLi4K K1JFU1VNRV9JTlRFUlJVUFRTKCkgc2VjdGlvbi4KKworSE9MRF9JTlRFUlJVUFRTKCkgYmxv Y2tzIGNhbiBiZSBuZXN0ZWQuIElmIEhPTERfSU5URVJSVVBUUygpIGlzIGNhbGxlZAorbXVs dGlwbGUgdGltZXMsIGludGVycnVwdHMgYXJlIGhlbGQgdW50aWwgZXZlcnkgSE9MRF9JTlRF UlJVUFRTKCkgY2FsbAoraGFzIGJlZW4gYmFsYW5jZWQgd2l0aCBhIFJFU1VNRV9JTlRFUlJV UFRTKCkgY2FsbC4KKworQ3JpdGljYWwgc2VjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisK K0EgcmVsYXRlZCwgYnV0IGNvbmNlcHR1YWxseSBkaXN0aW5jdCwgbWVjaGFuaXNtIGlzIHRo ZSAiY3JpdGljYWwKK3NlY3Rpb24iIG1lY2hhbmlzbS4gIEEgY3JpdGljYWwgc2VjdGlvbiBu b3Qgb25seSBob2xkcyBvZmYgY2FuY2VsL2RpZQoraW50ZXJydXB0cywgYnV0IGNhdXNlcyBh bnkgZXJlcG9ydChFUlJPUikgb3IgZXJlcG9ydChGQVRBTCkgdG8gYmVjb21lCitlcmVwb3J0 KFBBTklDKSAtLS0gdGhhdCBpcywgYSBzeXN0ZW0td2lkZSByZXNldCBpcyBmb3JjZWQuICBO ZWVkbGVzcwordG8gc2F5LCBvbmx5IHJlYWxseSAqY3JpdGljYWwqIGNvZGUgc2hvdWxkIGJl IG1hcmtlZCBhcyBhIGNyaXRpY2FsCitzZWN0aW9uISBUaGlzIG1lY2hhbmlzbSBpcyBtb3N0 bHkgdXNlZCBmb3IgWExPRy1yZWxhdGVkIGNvZGUuCisKK1NlbmRpbmcgaW50ZXJydXB0cwor LS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludGVycnVwdCBmbGFncyBjYW4gYmUgInJhaXNlZCIg aW4gZGlmZmVyZW50IHdheXM6CistIHN5bmNocm9ub3VzbHkgYnkgY29kZSB0aGF0IHdhbnRz IHRvIGRlZmVyIGFuIGFjdGlvbiwgYnkgY2FsbGluZworICBSYWlzZUludGVycnVwdCwKKy0g YXN5bmNocm9ub3VzbHkgYnkgdGltZXJzIG9yIG90aGVyIHNpZ25hbCBoYW5kbGVycywgYWxz byBieSBjYWxsaW5nCisgIFJhaXNlSW50ZXJydXB0LCBvcgorLSAic2VudCIgYnkgb3RoZXIg YmFja2VuZHMgd2l0aCBTZW5kSW50ZXJydXB0CisKK1Byb2Nlc3NpbmcgaW50ZXJydXB0cwor LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludGVycnVwdHMgYXJlIHVzdWFsbHkgaGFuZGxl ZCBieSBoYW5kbGVyIGZ1bmN0aW9ucywgd2hpY2ggYXJlIGNhbGxlZAorZnJvbSBDSEVDS19G T1JfSU5URVJSVVBUUygpIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGlzCitw ZW5kaW5nLiBVc2UgU2V0SW50ZXJydXB0SGFuZGxlcigpIHRvIGluc3RhbGwgYSBoYW5kbGVy IGZ1bmN0aW9uLgorCitTb21ldGltZXMgeW91IGRvbid0IHdhbnQgYW4gaW50ZXJydXB0IHRv IGJlIHByb2Nlc3NlZCBhdCBhbnkgcmFuZG9tCitDSEVDS19GT1JfSU5URVJSVVBUUygpIGlu dm9jYXRpb24uIEluIHRoYXQgY2FzZSwgeW91IGNhbiBsZWF2ZSB0aGUKK2ludGVycnVwdCBo YW5kbGVyIGRpc2FibGVkLCBhbmQgY2hlY2sgZm9yIHRoZSBpbnRlcnJ1cHQgZXhwbGljaXRs eSBhdAorc3VpdGFibGUgc3BvdHMgd2l0aCBJbnRlcnJ1cHRQZW5kaW5nKCkuCisKK0lOVEVS UlVQVFNfUEVORElOR19DT05ESVRJT04oKSBjYW4gYmUgY2hlY2tlZCB0byBzZWUgd2hldGhl ciBhbgoraW50ZXJydXB0IG5lZWRzIHRvIGJlIHNlcnZpY2VkLCB3aXRob3V0IHRyeWluZyB0 byBkbyBzbyBpbW1lZGlhdGVseS4KK1NvbWUgY2FsbGVycyBhcmUgYWxzbyBpbnRlcmVzdGVk IGluIElOVEVSUlVQVFNfQ0FOX0JFX1BST0NFU1NFRCgpLAord2hpY2ggdGVsbHMgd2hldGhl ciBDSEVDS19GT1JfSU5URVJSVVBUUygpIGlzIHN1cmUgdG8gY2xlYXIgdGhlCitpbnRlcnJ1 cHQuCisKKworV2FpdGluZyBmb3IgYW4gaW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK1RoZSBjb3JyZWN0IHBhdHRlcm4gdG8gd2FpdCBmb3IgYW4gZXZlbnQocykgdGhh dCByYWlzZXMgYW4gaW50ZXJydXB0CitpczoKKworYGBgCitmb3IgKDs7KQoreworCS8qIEhh bmRsZSBhbnkgb3RoZXIgaW50ZXJydXB0cyByZWNlaXZlZCB3aGlsZSB3ZSdyZSB3YWl0aW5n ICovCisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCS8qIENoZWNrIGlmIG91ciBpbnRl cnJ1cHQgd2FzIHJhaXNlZCAoY2xlYXJpbmcgaXQgaWYgaXQgd2FzKSAqLworCWlmIChDb25z dW1lSW50ZXJydXB0KElOVEVSUlVQVF9QUklOVEVSX09OX0ZJUkUpKQorCQlicmVhazsKKwor CS8qCisJICogU2xlZXAgdW50aWwgb3VyIGludGVycnVwdCBvciBvbmUgb2YgdGhlIHN0YW5k YXJkIGludGVycnVwdHMgaXMKKwkgKiByZWNlaXZlZC4KKwkgKi8KKwlXYWl0SW50ZXJydXB0 KElOVEVSUlVQVF9DRklfTUFTSyB8CisJCQkJICBJTlRFUlJVUFRfUFJJTlRFUl9PTl9GSVJF LAorCQkJCSAgLi4uKTsKK30KK2BgYAorCitPZnRlbiBhbiBpbnRlcnJ1cHQgaXMgdXNlZCB0 byB3YWtlIHVwIGEgcHJvY2VzcyB0aGF0IGlzIGtub3duIHRvIGJlCit3YWl0aW5nIGFuZCBu b3QgZG9pbmcgYW55dGhpbmcgZWxzZS4gVGhlIElOVEVSUlVQVF9XQUlUX1dBS0VVUAoraW50 ZXJydXB0IGlzIHJlc2VydmVkIGZvciBzdWNoIHVzZSBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qg bmVlZCBhCitkZWRpY2F0ZWQgaW50ZXJydXB0IGZsYWcuIFdoZW4gdXNpbmcgSU5URVJSVVBU X1dBSVRfV0FLRVVQLCB5b3UgbmVlZAorc29tZSBvdGhlciBzaWduYWxpbmcsIGUuZy4gYSBm bGFnIGluIHNoYXJlZCBtZW1vcnksIHRvIGluZGljYXRlIHRoYXQKK3RoZSBkZXNpcmVkIGV2 ZW50IGhhcyBoYXBwZW4sIGFzIHlvdSBtYXkgc29tZXRpbWVzIHJlY2VpdmUgZmFsc2UKK3dh a2V1cHMuIFRoZSBwYXR0ZXJuIHVzaW5nIElOVEVSUlVQVF9XQUlUX1dBS0VVUCBsb29rcyBs aWtlIHRoaXM6CisKK2BgYAorZm9yICg7OykKK3sKKwkvKiBIYW5kbGUgYW55IG90aGVyIGlu dGVycnVwdHMgcmVjZWl2ZWQgd2hpbGUgd2UncmUgd2FpdGluZyAqLworCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CisKKwlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAp OworCWlmICh3b3JrIHRvIGRvKQorCXsKKwkJLyogaW4gcGFydGljdWxhciwgZXhpdCB0aGUg bG9vcCBpZiBzb21lIGNvbmRpdGlvbiBzYXRpc2ZpZWQgKi8KKwkJRG8gU3R1ZmYoKTsKKwl9 CisJV2FpdEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIC4uLik7Cit9CitgYGAK KworSXQncyBpbXBvcnRhbnQgdG8gY2xlYXIgdGhlIGludGVycnVwdCAqYmVmb3JlKiBjaGVj a2luZyBpZiB0aGVyZSdzCit3b3JrIHRvIGRvLiBPdGhlcndpc2UsIGlmIHNvbWVvbmUgc2V0 cyB0aGUgaW50ZXJydXB0IGJldHdlZW4gdGhlIGNoZWNrCithbmQgdGhlIENsZWFySW50ZXJy dXB0KCkgY2FsbCwgeW91IHdpbGwgbWlzcyBpdCBhbmQgV2FpdCB3aWxsCitpbmNvcnJlY3Rs eSBibG9jay4gQW5vdGhlciB2YWxpZCBjb2RpbmcgcGF0dGVybiBsb29rcyBsaWtlOgorCitg YGAKK2ZvciAoOzspCit7CisJaWYgKHdvcmsgdG8gZG8pCisJeworCQkvKiBpbiBwYXJ0aWN1 bGFyLCBleGl0IHRoZSBsb29wIGlmIHNvbWUgY29uZGl0aW9uIHNhdGlzZmllZCAqLworCQlE byBTdHVmZigpOworCX0KKwlXYWl0SW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwg Li4uKTsKKwlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOworfQorYGBg CisKK1RoaXMgaXMgdXNlZnVsIHRvIHJlZHVjZSBpbnRlcnJ1cHQgdHJhZmZpYyBpZiBpdCdz IGV4cGVjdGVkIHRoYXQgdGhlCitsb29wJ3MgdGVybWluYXRpb24gY29uZGl0aW9uIHdpbGwg b2Z0ZW4gYmUgc2F0aXNmaWVkIGluIHRoZSBmaXJzdAoraXRlcmF0aW9uOyB0aGUgY29zdCBp cyBhbiBleHRyYSBsb29wIGl0ZXJhdGlvbiBiZWZvcmUgYmxvY2tpbmcgd2hlbiBpdAoraXMg bm90LiAgV2hhdCBtdXN0IGJlIGF2b2lkZWQgaXMgcGxhY2luZyBhbnkgY2hlY2tzIGZvciBh c3luY2hyb25vdXMKK2V2ZW50cyBhZnRlciBXYWl0SW50ZXJydXB0IGFuZCBiZWZvcmUgQ2xl YXJJbnRlcnJ1cHQsIGFzIHRoYXQgY3JlYXRlcworYSByYWNlIGNvbmRpdGlvbi4KKworQ3Vz dG9tIGludGVycnVwdHMgaW4gZXh0ZW5zaW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCitBbiBleHRlbnNpb24gY2FuIGFsbG9jYXRlIGludGVycnVwdCBiaXRzIGZv ciBpdHMgb3duIHB1cnBvc2VzIGJ5CitjYWxsaW5nIFJlcXVlc3RBZGRpbkludGVycnVwdCgp LiBOb3RlIHRoYXQgaW50ZXJydXB0cyBhcmUgYSBzb21ld2hhdAorc2NhcmNlIHJlc291cmNl LCBzbyBjb25zaWRlciB1c2luZyBJTlRFUlJVUFRfV0FJVF9XQUtFVVAgaWYgYWxsIHlvdQor bmVlZCBpcyBhIHNpbXBsZSB3YWtldXAgaW4gc29tZSBsb29wLgorCisKK1VuaXggU2lnbmFs cworPT09PT09PT09PT09CisKK1Bvc3RtYXN0ZXIgYW5kIG1vc3QgY2hpbGQgcHJvY2Vzc2Vz IGFsc28gcmVzcG9uZCB0byBhIGZldyBzdGFuZGFyZAorVW5peCBzaWduYWxzOgorCitTSUdI VVAgLT4gUmFpc2VzIElOVEVSUlVQVF9DT05GSUdfUkVMT0FECitTSUdJTlQgLT4gUmFpc2Vz IElOVEVSUlVQVF9RVUVSWV9DQU5DRUwKK1NJR1RFUk0gLT4gUmFpc2VzIElOVEVSUlVQVF9U RVJNSU5BVEUKK1NJR1FVSVQgLT4gaW1tZWRpYXRlIHNodXRkb3duLCBhYm9ydCB0aGUgcHJv Y2VzcworCitwZ19jdGwgdXNlcyB0aGVzZSBVbml4IHNpZ25hbHMgdG8gdGVsbCBwb3N0bWFz dGVyIHRvIHJlbG9hZCBjb25maWcsCitzdG9wLCBldGMuIFRoZXNlIGFyZSBhbHNvIG1lbnRp b25lZCBpbiB0aGUgdXNlciBkb2N1bWVudGF0aW9uLgorCitQb3N0bWFzdGVyIGNhbm5vdCBz ZW5kIGludGVycnVwdHMgdG8gcHJvY2Vzc2VzIHdpdGhvdXQgUEdQUk9DIGVudHJpZXMKKyhq dXN0IHN5c2xvZ2dlciBub3dhZGF5cyksIGFuZCBpdCBkb2Vzbid0IGtub3cgdGhlIFBHUFJP QyBlbnRyaWVzIG9mCitvdGhlciBjaGlsZCBwcm9jZXNzZXMgYW55d2F5LiBIZW5jZSwgaXQg c3RpbGwgdXNlcyB0aGUgYWJvdmUgVW5peAorc2lnbmFscyBmb3IgcG9zdG1hc3RlciAtPiBj aGlsZCBzaWduYWxpbmcuIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB3aGVuCitwb3N0bWFzdGVy IG5vdGlmaWVzIGEgYmFja2VuZCB0aGF0IGEgYmd3b3JrZXIgaXQgbGF1bmNoZWQgaGFzCitl eGl0ZWQuIFBvc3RtYXN0ZXIgc2VuZHMgdGhhdCBpbnRlcnJ1cHQgZGlyZWN0bHkuIFRoZSBi YWNrZW5kCityZWdpc3RlcnMgZXhwbGljaXRseSBmb3IgdGhhdCBub3RpZmljYXRpb24sIGFu ZCBzdXBwbGllcyB0aGUKK1Byb2NOdW1iZXIgdG8gcG9zdG1hc3RlciB3aGVuIHJlZ2lzdGVy aW5nLgorCitUaGVyZSBhcmUgYSBmZXcgbW9yZSBleGNlcHRpb25zOgorCistIEEgZmV3IHBy b2Nlc3NlcyBsaWtlIHRoZSBjaGVja3BvaW50ZXIsIGFyY2hpdmVyLCBhbmQgSU8gd29ya2Vy cworICBkb24ndCByZWFjdCB0byBTSUdURVJNLCBiZWNhdXNlIFVuaXggc3lzdGVtIHNodXRk b3duIHNlbmRzIGEgU0lHVEVSTQorICB0byBhbGwgcHJvY2Vzc2VzLCBhbmQgd2Ugd2FudCB0 aGVtIHRvIGV4aXQgb25seSBvbmx5IGFmdGVyIGFsbCBvdGhlcgorICBwcm9jZXNzLiBJbnN0 ZWFkLCB0aGUgcG9zdG1hc3RlciBzZW5kcyB0aGVtIFNJR1VTUjIgYWZ0ZXIgYWxsIHRoZQor ICBvdGhlciBwcm9jZXNzZXMgaGF2ZSBleGl0ZWQuCisKKy0gQ2hpbGQgcHJvY2Vzc2VzIHVz ZSBTSUdVU1IxIHRvIHJlcXVlc3QgdGhlIHBvc3RtYXN0ZXIgdG8gZG8gdmFyaW91cworICBh Y3Rpb25zIG9yIG5vdGlmeSB0aGF0IHNvbWUgZXZlbnQgaGFzIG9jY3VycmVkLiBTZWUgcG1z aWduYWwuYyBmb3IKKyAgZGV0YWlscyBvbiB0aGF0IG1lY2hhbmlzbQorCisKK1RPRE86IE9w ZW4gcXVlc3Rpb25zCis9PT09PT09PT09PT09PT09PT09PQorCitUT0RPOiBQdXQgcGVuZGlu Z0ludGVycnVwdHMgaW4gUE1DaGlsZFNsb3Qgb3IgUEdQUk9DPworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQb3N0bWFzdGVyIGNh bm5vdCBzZW5kIGludGVycnVwdHMgdG8gcHJvY2Vzc2VzIHdpdGhvdXQgUEdQUk9DCitlbnRy aWVzLiBIZW5jZSwgaXQgc3RpbGwgdXNlcyBwbGFpbiBVbml4IHNpZ25hbHMuIFdvdWxkIGJl IG5pY2UgaWYKK3Bvc3RtYXN0ZXIgY291bGQgc2VuZCBpbnRlcnJ1cHRzIGRpcmVjdGx5LiBJ ZiB3ZSBtb3ZlZCB0aGUgaW50ZXJydXB0CittYXNrIHRvIFBNQ2hpbGRTbG90LCBpdCBjb3Vs ZC4gIEhvd2V2ZXIsIFBHUFJPQyBzZWVtcyBsaWtlIGEgbW9yZQorbmF0dXJhbCBsb2NhdGlv biBvdGhlcndpc2UuCisKK09wdGlvbnM6CisKK2EpIE1vdmUgcGVuZGluZ0ludGVycnVwdHMg dG8gUE1DaGlsZFNsb3QuIFRoYXQgd2F5LCB5b3UgY2FuIHNlbmQgc2lnbmFscworICAgdG8g cHJvY2Vzc2VzIGFsc28gdG8gcHJvY2Vzc2VzIHRoYXQgZG9uJ3QgaGF2ZSBhIFBHUFJPQyBl bnRyeS4KKworYikgQWRkIGEgcGVuZGluZ0ludGVycnVwdHMgbWFzayB0byBQTUNoaWxkU2xv dCwgYnV0IGFsc28gaGF2ZSBpdCBpbiBQR1BST0MuCisgICBXaGVuIHBvc3RtYXN0ZXIgc2Vu cyBhbiBpbnRlcnJ1cHQsIGl0IGNhbiBjaGVjayBpZiBpdCBoYXMgYSBQR1BST0MgZW50cnks CisgICBhbmQgaWYgbm90LCB1c2UgdGhlIHBlbmRpbmdJbnRlcnJ1cHRzIGZpZWxkIGluIFBN Q2hpbGRTbG90IGluc3RlYWQuCisKK2MpIEFzc2lnbiBhIFBHUFJPQyBlbnRyeSBmb3IgZXZl cnkgY2hpbGQgcHJvY2VzcyBpbiBwb3N0bWFzdGVyIGFscmVhZHkuCisgICAoRXhjZXB0IGRl YWQtZW5kIGJhY2tlbmRzKS4KKworZCkgS2VlcCBpdCBhcyBpdCBpcywgY29udGludWUgdG8g dXNlIHNpZ25hbHMgZm9yIHBvc3RtYXN0ZXIgLT4gY2hpbGQKKyAgIHNpZ25hbGluZworCisK K1RPRE86IFVuaXF1ZSBzZXNzaW9uIGlkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lu IHNvbWUgcGxhY2VzLCB3ZSByZWFkIHRoZSBwaWQgb2YgYSBwcm9jZXNzIChmcm9tIFBHUFJP QyBvcgorZWxzZXdoZXJlKSwgYW5kIHNlbmQgc2lnbmFsIHRvIGl0LCBhY2NlcHRpbmcgdGhh dCB0aGUgcHJvY2VzcyBtYXkgaGF2ZQorYWxyZWFkeSBleGl0ZWQuICBJZiB3ZSBkaXJlY3Rs eSByZXBsYWNlIHRob3NlIHVzZXMgb2YgJ3BpZCcgd2l0aCBhCitQcm9jTnVtYmVyLCB0aGUg UHJvY051bWJlciBtaWdodCBnZXQgcmV1c2VkIG11Y2ggZmFzdGVyIHRoYW4gdGhlIHBpZAor d291bGQuIFNvbHV0aW9uczoKKworYSkgSW50cm9kdWNlIHRoZSBjb25jZXB0IG9mIGEgdW5p cXVlIHNlc3Npb24gSUQgdGhhdCBpcyBuZXZlciByZWN5Y2xlZAorICAgKG9yIG5vdCBmb3Ig YSBsb25nIHRpbWUsIGFueXdheSkuIFdoZW4gcmVhZGluZyB0aGUgUHJvY051bWJlciB0bwor ICAgc2VuZCBhbiBpbnRlcnJ1cHQgdG8sIGFsc28gcmVhZCB0aGUgc2Vzc2lvbiBJRC4gV2hl biBzZW5kaW5nIHRoZQorICAgaW50ZXJydXB0LCBjaGVjayB0aGF0IHRoZSBzZXNzaW9uIElE IG1hdGNoZXMuCisKKworVE9ETzogT3RoZXIKKy0tLS0tLS0tLS0tCisKKy0gQ2hlY2sgcGVy Zm9ybWFuY2Ugb2YgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4gSXQncyB2ZXJ5IGNoZWFwLCBi dXQKKyAgaXQncyBuZXZlcnRoZWxlc3MgbW9yZSBpbnN0cnVjdGlvbnMgdGhhbiBpdCB1c2Vk IHRvIGJlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaXBjL2ludGVycnVwdC5jIGIvc3Jj L2JhY2tlbmQvaXBjL2ludGVycnVwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi42MWQxNDg0MDliYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5k L2lwYy9pbnRlcnJ1cHQuYwpAQCAtMCwwICsxLDQzMSBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogaW50ZXJydXB0LmMKKyAqCSAgSW50ZXItcHJvY2VzcyBpbnRlcnJ1cHRz LgorICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgor ICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2lwYy9pbnRlcnJ1cHQu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgorI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9j LmgiCisjaW5jbHVkZSAidXRpbHMvcmVzb3duZXIuaCIKKworLyoKKyAqIEN1cnJlbnRseSBp bnN0YWxsZWQgaW50ZXJydXB0IGhhbmRsZXJzCisgKi8KK3N0YXRpYyBwZ19pbnRlcnJ1cHRf aGFuZGxlcl90IGludGVycnVwdF9oYW5kbGVyc1s2NF07CisKKy8qCisgKiBYWFg6IGlzICd2 b2xhdGlsZScgc3RpbGwgbmVlZGVkIG9uIGFsbCB0aGUgdmFyaWFibGVzIGJlbG93PyBXaGlj aCBvbmVzIGFyZQorICogYWNjZXNzZWQgZnJvbSBzaWduYWwgaGFuZGxlcnM/CisgKi8KKwor LyogQml0bWFzayBvZiBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHRzICovCit2b2xhdGls ZSBJbnRlcnJ1cHRNYXNrIEVuYWJsZWRJbnRlcnJ1cHRzTWFzazsKKworLyoKKyAqIEludGVy cnVwdHMgdGhhdCB3b3VsZCBiZSBwcm9jZXNzZWQgYnkgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KS4gIFRoaXMgaXMKKyAqIGVxdWFsIHRvIEVuYWJsZWRJbnRlcnJ1cHRzTWFzaywgZXhjZXB0 IHdoZW4gaW50ZXJydXB0cyBhcmUgaGVsZCBvZmYgYnkKKyAqIEhPTEQvUkVTVU1FX0lOVEVS UlVQVFMoKSBvciBhIGNyaXRpY2FsIHNlY3Rpb24uCisgKi8KK3ZvbGF0aWxlIEludGVycnVw dE1hc2sgQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzazsKKworLyogVmFyaWFibGVzIGZvciBob2xk b2ZmIG1lY2hhbmlzbSAqLwordm9sYXRpbGUgdWludDMyIEludGVycnVwdEhvbGRvZmZDb3Vu dCA9IDA7Cit2b2xhdGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3VudCA9IDA7CisKKy8qIEEg Y29tbW9uIFdhaXRFdmVudFNldCB1c2VkIHRvIGltcGxlbWVudCBXYWl0SW50ZXJydXB0KCkg Ki8KK3N0YXRpYyBXYWl0RXZlbnRTZXQgKkludGVycnVwdFdhaXRTZXQ7CisKKy8qIFRoZSBw b3NpdGlvbiBvZiB0aGUgaW50ZXJydXB0IGluIEludGVycnVwdFdhaXRTZXQuICovCisjZGVm aW5lIEludGVycnVwdFdhaXRTZXRJbnRlcnJ1cHRQb3MgMAorI2RlZmluZSBJbnRlcnJ1cHRX YWl0U2V0UG9zdG1hc3RlckRlYXRoUG9zIDEKKworc3RhdGljIHBnX2F0b21pY191aW50NjQg TG9jYWxQZW5kaW5nSW50ZXJydXB0czsKKworcGdfYXRvbWljX3VpbnQ2NCAqTXlQZW5kaW5n SW50ZXJydXB0cyA9ICZMb2NhbFBlbmRpbmdJbnRlcnJ1cHRzOworCitzdGF0aWMgaW50CW5l eHRBZGRpbkludGVycnVwdEJpdCA9IEJFR0lOX0FERElOX0lOVEVSUlVQVFM7CisKKy8qCisg KiBJbnN0YWxsIGFuIGludGVycnVwdCBoYW5kbGVyIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0 aGUgZ2l2ZW4gaW50ZXJydXB0LgorICoKKyAqIFlvdSBuZWVkIHRvIGFsc28gZW5hYmxlIHRo ZSBpbnRlcnJ1cHQgd2l0aCBFbmFibGVJbnRlcnJ1cHQoKSwgdW5sZXNzIHlvdSdyZQorICog cmVwbGFjaW5nIGFuIGV4aXN0aW5nIGhhbmRsZXIgZnVuY3Rpb24uCisgKi8KK3ZvaWQKK1Nl dEludGVycnVwdEhhbmRsZXIoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrLCBwZ19pbnRl cnJ1cHRfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJLyoKKwkgKiBYWFg6IEl0J3Mgc29tZXdo YXQgaW5lZmZpY2llbnQgdG8gbG9vcCB0aHJvdWdoIGFsbCB0aGUgYml0cywgYnV0IHRoaXMK KwkgKiBpc24ndCBwZXJmb3JtYW5jZSBjcml0aWNhbC4KKwkgKi8KKwlmb3IgKGludCBpID0g MDsgaSA8IGxlbmd0aG9mKGludGVycnVwdF9oYW5kbGVycyk7IGkrKykKKwl7CisJCWlmICgo aW50ZXJydXB0TWFzayAmIFVJTlQ2NF9CSVQoaSkpICE9IDApCisJCXsKKwkJCS8qIFJlcGxh Y2Ugb2xkIGhhbmRsZXIgKi8KKwkJCWludGVycnVwdF9oYW5kbGVyc1tpXSA9IGhhbmRsZXI7 CisJCX0KKwl9Cit9CisKKy8qIEVuYWJsZSBhbiBpbnRlcnJ1cHQgdG8gYmUgcHJvY2Vzc2Vk IGJ5IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgKi8KK3ZvaWQKK0VuYWJsZUludGVycnVwdChJ bnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2spCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCS8qIENoZWNrIHRoYXQgdGhlIGludGVycnVwdCBoYXMgYSBoYW5kbGVyIGRlZmlu ZWQgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aG9mKGludGVycnVwdF9oYW5kbGVy cyk7IGkrKykKKwl7CisJCWlmICgoaW50ZXJydXB0TWFzayAmIFVJTlQ2NF9CSVQoaSkpICE9 IDApCisJCQlBc3NlcnQoaW50ZXJydXB0X2hhbmRsZXJzW2ldICE9IE5VTEwpOworCX0KKyNl bmRpZgorCisJRW5hYmxlZEludGVycnVwdHNNYXNrIHw9IGludGVycnVwdE1hc2s7CisJaWYg KEludGVycnVwdEhvbGRvZmZDb3VudCA9PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCkK KwkJQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayA9IEVuYWJsZWRJbnRlcnJ1cHRzTWFzazsKK30K KworLyoKKyAqIERpc2FibGUgdGhlIGhhbmRsZXIgZnVuY3Rpb24gZm9yIGFuIGludGVycnVw dC4KKyAqCisgKiBXaGVuIGRpc2FibGVkLCBDSEVDS19GT1JfSU5URVJSVVBUUygpIHdpbGwg bm90IGNhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb24KKyAqIGZvciB0aGUgZ2l2ZW4gaW50ZXJy dXB0LiAgSWYgdGhlIGludGVycnVwdCBpcyByZWNlaXZlZCwgaXQgd2lsbCByZW1haW4KKyAq IHBlbmRpbmcgdW50aWwgeW91IG1hbnVhbGx5IGNoZWNrIGFuZCBjbGVhciBpdCB3aXRoIENs ZWFySW50ZXJydXB0KCksIG9yCisgKiByZS1lbmFibGUgdGhlIGhhbmRsZXIgZnVuY3Rpb24u CisgKi8KK3ZvaWQKK0Rpc2FibGVJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRN YXNrKQoreworCUVuYWJsZWRJbnRlcnJ1cHRzTWFzayAmPSB+aW50ZXJydXB0TWFzazsKKwlp ZiAoSW50ZXJydXB0SG9sZG9mZkNvdW50ID09IDAgJiYgQ3JpdFNlY3Rpb25Db3VudCA9PSAw KQorCQlDaGVja0ZvckludGVycnVwdHNNYXNrID0gRW5hYmxlZEludGVycnVwdHNNYXNrOwor fQorCisvKgorICogUHJvY2Vzc0ludGVycnVwdHM6IG91dC1vZi1saW5lIHBvcnRpb24gb2Yg Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBtYWNybworICoKKyAqIElmIGFuIGludGVycnVwdCBj b25kaXRpb24gaXMgcGVuZGluZywgYW5kIGl0J3Mgc2FmZSB0byBzZXJ2aWNlIGl0LAorICog dGhlbiBjbGVhciB0aGUgZmxhZyBhbmQgY2FsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCisg KgorICogTm90ZTogaWYgSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKGludGVycnVwdCkg aXMgdHJ1ZSwgdGhlbgorICogUHJvY2Vzc0ludGVycnVwdHMgaXMgZ3VhcmFudGVlZCB0byBj bGVhciB0aGUgZ2l2ZW4gaW50ZXJydXB0IGJlZm9yZQorICogcmV0dXJuaW5nLCBpZiBpdCB3 YXMgc2V0IHdoZW4gZW50ZXJpbmcuICAoVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMKKyAqIGd1 YXJhbnRlZWluZyB0aGF0IGl0J3Mgc3RpbGwgY2xlYXIgd2hlbiB3ZSByZXR1cm47IGFub3Ro ZXIgaW50ZXJydXB0IGNvdWxkCisgKiBoYXZlIGFycml2ZWQuICBCdXQgd2UgcHJvbWlzZSB0 aGF0IGFueSBwcmUtZXhpc3Rpbmcgb25lIHdpbGwgaGF2ZSBiZWVuCisgKiBzZXJ2aWNlZC4p CisgKi8KK3ZvaWQKK1Byb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCit7CisJSW50ZXJydXB0TWFz ayBpbnRlcnJ1cHRzVG9Qcm9jZXNzOworCisJQXNzZXJ0KEludGVycnVwdEhvbGRvZmZDb3Vu dCA9PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCk7CisKKwkvKiBDaGVjayBvbmNlIHdo YXQgaW50ZXJydXB0cyBhcmUgcGVuZGluZyAqLworCWludGVycnVwdHNUb1Byb2Nlc3MgPQor CQlwZ19hdG9taWNfcmVhZF91NjQoTXlQZW5kaW5nSW50ZXJydXB0cykgJiBDaGVja0Zvcklu dGVycnVwdHNNYXNrOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhvZihpbnRlcnJ1 cHRfaGFuZGxlcnMpOyBpKyspCisJeworCQlpZiAoKGludGVycnVwdHNUb1Byb2Nlc3MgJiBV SU5UNjRfQklUKGkpKSAhPSAwKQorCQl7CisJCQkvKgorCQkJICogQ2xlYXIgdGhlIGludGVy cnVwdCAqYmVmb3JlKiBjYWxsaW5nIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLCBzbworCQkJICog dGhhdCBpZiB0aGUgaW50ZXJydXB0IGlzIHJlY2VpdmVkIGFnYWluIHdoaWxlIHRoZSBoYW5k bGVyCisJCQkgKiBmdW5jdGlvbiBpcyBiZWluZyBleGVjdXRlZCwgd2Ugd29uJ3QgbWlzcyBp dC4KKwkJCSAqCisJCQkgKiBGb3Igc2ltaWxhciByZWFzb25zLCB3ZSBhbHNvIGNsZWFyIHRo ZSBmbGFncyBvbmUgYnkgb25lIGV2ZW4gaWYKKwkJCSAqIG11bHRpcGxlIGludGVycnVwdHMg YXJlIHBlbmRpbmcuICBPdGhlcndpc2UgaWYgb25lIG9mIHRoZQorCQkJICogaW50ZXJydXB0 IGhhbmRsZXJzIGJhaWwgb3V0IHdpdGggYW4gRVJST1IsIHdlIHdvdWxkIGhhdmUKKwkJCSAq IGFscmVhZHkgY2xlYXJlZCB0aGUgb3RoZXIgYml0cywgYW5kIHdvdWxkIG1pc3MgcHJvY2Vz c2luZyB0aGVtLgorCQkJICovCisJCQlDbGVhckludGVycnVwdChVSU5UNjRfQklUKGkpKTsK KworCQkJLyogQ2FsbCB0aGUgaGFuZGxlciBmdW5jdGlvbiAqLworCQkJKCppbnRlcnJ1cHRf aGFuZGxlcnNbaV0pICgpOworCQl9CisJfQorfQorCisvKgorICogU3dpdGNoIHRvIGxvY2Fs IGludGVycnVwdHMuICBPdGhlciBiYWNrZW5kcyBjYW4ndCBzZW5kIGludGVycnVwdHMgdG8g dGhpcworICogb25lLiAgT25seSBSYWlzZUludGVycnVwdCgpIGNhbiBzZXQgdGhlbSwgZnJv bSBpbnNpZGUgdGhpcyBwcm9jZXNzLgorICovCit2b2lkCitTd2l0Y2hUb0xvY2FsSW50ZXJy dXB0cyh2b2lkKQoreworCWlmIChNeVBlbmRpbmdJbnRlcnJ1cHRzID09ICZMb2NhbFBlbmRp bmdJbnRlcnJ1cHRzKQorCQlyZXR1cm47CisKKwlNeVBlbmRpbmdJbnRlcnJ1cHRzID0gJkxv Y2FsUGVuZGluZ0ludGVycnVwdHM7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IFNJR0FM Uk0gaGFuZGxlcnMgdGhhdCBjYWxsIFJhaXNlSW50ZXJydXB0KCkgYXJlIG5vdworCSAqIHNl ZWluZyB0aGUgbmV3IE15UGVuZGluZ0ludGVycnVwdHMgZGVzdGluYXRpb24uCisJICovCisJ cGdfbWVtb3J5X2JhcnJpZXIoKTsKKworCS8qCisJICogTWl4IGluIHRoZSBpbnRlcnJ1cHRz IHRoYXQgd2UgaGF2ZSByZWNlaXZlZCBhbHJlYWR5IGluIG91ciBzaGFyZWQKKwkgKiBpbnRl cnJ1cHQgdmVjdG9yLCB3aGlsZSBhdG9taWNhbGx5IGNsZWFyaW5nIGl0LiAgT3RoZXIgYmFj a2VuZHMgbWF5CisJICogY29udGludWUgdG8gc2V0IGJpdHMgaW4gaXQgYWZ0ZXIgdGhpcyBw b2ludCwgYnV0IHdlJ3ZlIGF0b21pY2FsbHkKKwkgKiB0cmFuc2ZlcnJlZCB0aGUgZXhpc3Rp bmcgYml0cyB0byBvdXIgbG9jYWwgdmVjdG9yIHNvIHdlIHdvbid0IGdldAorCSAqIGR1cGxp Y2F0ZWQgaW50ZXJydXB0cyBsYXRlciBpZiB3ZSBzd2l0Y2ggYmFjay4KKwkgKi8KKwlwZ19h dG9taWNfZmV0Y2hfb3JfdTY0KE15UGVuZGluZ0ludGVycnVwdHMsCisJCQkJCQkgICBwZ19h dG9taWNfZXhjaGFuZ2VfdTY0KCZNeVByb2MtPnBlbmRpbmdJbnRlcnJ1cHRzLCAwKSk7Cit9 CisKKy8qCisgKiBTd2l0Y2ggdG8gc2hhcmVkIG1lbW9yeSBpbnRlcnJ1cHRzLiAgT3RoZXIg YmFja2VuZHMgY2FuIHNlbmQgaW50ZXJydXB0cyB0bworICogdGhpcyBvbmUgaWYgdGhleSBr bm93IGl0cyBQcm9jTnVtYmVyLCBhbmQgd2UnbGwgbm93IHNlZSBhbnkgdGhhdCB3ZSBtaXNz ZWQuCisgKi8KK3ZvaWQKK1N3aXRjaFRvU2hhcmVkSW50ZXJydXB0cyh2b2lkKQoreworCWlm IChNeVBlbmRpbmdJbnRlcnJ1cHRzID09ICZNeVByb2MtPnBlbmRpbmdJbnRlcnJ1cHRzKQor CQlyZXR1cm47CisKKwlNeVBlbmRpbmdJbnRlcnJ1cHRzID0gJk15UHJvYy0+cGVuZGluZ0lu dGVycnVwdHM7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IFNJR0FMUk0gaGFuZGxlcnMg dGhhdCBjYWxsIFJhaXNlSW50ZXJydXB0KCkgYXJlIG5vdworCSAqIHNlZWluZyB0aGUgbmV3 IE15UGVuZGluZ0ludGVycnVwdHMgZGVzdGluYXRpb24uCisJICovCisJcGdfbWVtb3J5X2Jh cnJpZXIoKTsKKworCS8qIE1peCBpbiBhbnkgdW5oYW5kbGVkIGJpdHMgZnJvbSBMb2NhbFBl bmRpbmdJbnRlcnJ1cHRzLiAqLworCXBnX2F0b21pY19mZXRjaF9vcl91NjQoTXlQZW5kaW5n SW50ZXJydXB0cywKKwkJCQkJCSAgIHBnX2F0b21pY19leGNoYW5nZV91NjQoJkxvY2FsUGVu ZGluZ0ludGVycnVwdHMsIDApKTsKK30KKworLyoKKyAqIFNldCBhbiBpbnRlcnJ1cHQgZmxh ZyBpbiB0aGlzIGJhY2tlbmQuCisgKgorICogTm90ZTogVGhpcyBpcyBjYWxsZWQgZnJvbSBz aWduYWwgaGFuZGxlcnMsIHNvIG5lZWRzIHRvIGJlIGFzeW5jLXNpZ25hbAorICogc2FmZSEK KyAqLwordm9pZAorUmFpc2VJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNr KQoreworCXVpbnQ2NAkJb2xkX3BlbmRpbmc7CisKKwlvbGRfcGVuZGluZyA9IHBnX2F0b21p Y19mZXRjaF9vcl91NjQoTXlQZW5kaW5nSW50ZXJydXB0cywgaW50ZXJydXB0TWFzayk7CisK KwkvKgorCSAqIElmIHRoZSBwcm9jZXNzIGlzIGN1cnJlbnRseSBibG9ja2VkIHdhaXRpbmcg Zm9yIGFuIGludGVycnVwdCB0byBhcnJpdmUsCisJICogYW5kIHRoZSBpbnRlcnJ1cHQgd2Fz bid0IGFscmVhZHkgcGVuZGluZywgd2FrZSBpdCB1cC4KKwkgKi8KKwlpZiAoKG9sZF9wZW5k aW5nICYgKGludGVycnVwdE1hc2sgfCBTTEVFUElOR19PTl9JTlRFUlJVUFRTKSkgPT0gU0xF RVBJTkdfT05fSU5URVJSVVBUUykKKwkJV2FrZXVwTXlQcm9jKCk7Cit9CisKKy8qCisgKiBT ZXQgYW4gaW50ZXJydXB0IGZsYWcgaW4gYW5vdGhlciBiYWNrZW5kLgorICoKKyAqIE5vdGU6 IFRoaXMgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gdGhlIHBvc3RtYXN0ZXIsIHNvIGJlIGNh cmVmdWwgdG8gbm90CisgKiB0cnVzdCB0aGUgY29udGVudHMgb2Ygc2hhcmVkIG1lbW9yeS4K KyAqCisgKiBGSVhNRTogaXQncyBlYXN5IHRvIGFjY2lkZW50YWxseSBzd2FwIHRoZSBvcmRl ciBvZiB0aGUgYXJncy4gIENvdWxkIHdlIGhhdmUKKyAqIHN0cmljdGVyIHR5cGUgY2hlY2tp bmc/CisgKi8KK3ZvaWQKK1NlbmRJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRN YXNrLCBQcm9jTnVtYmVyIHBncHJvY25vKQoreworCVBHUFJPQwkgICAqcHJvYzsKKwl1aW50 NjQJCW9sZF9wZW5kaW5nOworCisJQXNzZXJ0KHBncHJvY25vICE9IElOVkFMSURfUFJPQ19O VU1CRVIpOworCUFzc2VydChwZ3Byb2NubyA+PSAwKTsKKwlBc3NlcnQocGdwcm9jbm8gPCBQ cm9jR2xvYmFsLT5hbGxQcm9jQ291bnQpOworCisJcHJvYyA9ICZQcm9jR2xvYmFsLT5hbGxQ cm9jc1twZ3Byb2Nub107CisJb2xkX3BlbmRpbmcgPSBwZ19hdG9taWNfZmV0Y2hfb3JfdTY0 KCZwcm9jLT5wZW5kaW5nSW50ZXJydXB0cywgaW50ZXJydXB0TWFzayk7CisKKwllbG9nKERF QlVHMSwgInNlbmRpbmcgaW50ZXJydXB0IDB4MDE2JSIgUFJJeDY0ICIgdG8gcGlkICVkIiwg aW50ZXJydXB0TWFzaywgcHJvYy0+cGlkKTsKKworCS8qCisJICogSWYgdGhlIHByb2Nlc3Mg aXMgY3VycmVudGx5IGJsb2NrZWQgd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0IHRvIGFycml2 ZSwKKwkgKiBhbmQgdGhlIGludGVycnVwdCB3YXNuJ3QgYWxyZWFkeSBwZW5kaW5nLCB3YWtl IGl0IHVwLgorCSAqLworCWlmICgob2xkX3BlbmRpbmcgJiAoaW50ZXJydXB0TWFzayB8IFNM RUVQSU5HX09OX0lOVEVSUlVQVFMpKSA9PSBTTEVFUElOR19PTl9JTlRFUlJVUFRTKQorCQlX YWtldXBPdGhlclByb2MocHJvYyk7Cit9CisKK3ZvaWQKK0luaXRpYWxpemVJbnRlcnJ1cHRX YWl0U2V0KHZvaWQpCit7CisJaW50CQkJaW50ZXJydXB0X3BvcyBQR19VU0VEX0ZPUl9BU1NF UlRTX09OTFk7CisKKwlBc3NlcnQoSW50ZXJydXB0V2FpdFNldCA9PSBOVUxMKTsKKworCS8q IFNldCB1cCB0aGUgV2FpdEV2ZW50U2V0IHVzZWQgYnkgV2FpdEludGVycnVwdCgpLiAqLwor CUludGVycnVwdFdhaXRTZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoTlVMTCwgMik7CisJaW50 ZXJydXB0X3BvcyA9IEFkZFdhaXRFdmVudFRvU2V0KEludGVycnVwdFdhaXRTZXQsIFdMX0lO VEVSUlVQVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJCQkJCSAgMCwgTlVMTCk7CisJaWYg KElzVW5kZXJQb3N0bWFzdGVyKQorCQlBZGRXYWl0RXZlbnRUb1NldChJbnRlcnJ1cHRXYWl0 U2V0LCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJICBQR0lOVkFMSURfU09DS0VULCAw LCBOVUxMKTsKKworCUFzc2VydChpbnRlcnJ1cHRfcG9zID09IEludGVycnVwdFdhaXRTZXRJ bnRlcnJ1cHRQb3MpOworfQorCisvKgorICogV2FpdCBmb3IgYW55IG9mIHRoZSBpbnRlcnJ1 cHRzIGluIGludGVycnVwdE1hc2sgdG8gYmUgc2V0LCBvciBmb3IKKyAqIHBvc3RtYXN0ZXIg ZGVhdGgsIG9yIHVudGlsIHRpbWVvdXQgaXMgZXhjZWVkZWQuICd3YWtlRXZlbnRzJyBpcyBh IGJpdG1hc2sKKyAqIHRoYXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRob3NlIGV2ZW50cyB0byB3 YWl0IGZvci4gSWYgdGhlIGludGVycnVwdCBpcworICogYWxyZWFkeSBwZW5kaW5nIChhbmQg V0xfSU5URVJSVVBUIGlzIGdpdmVuKSwgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAqIGltbWVk aWF0ZWx5LgorICoKKyAqIFRoZSAidGltZW91dCIgaXMgZ2l2ZW4gaW4gbWlsbGlzZWNvbmRz LiBJdCBtdXN0IGJlID49IDAgaWYgV0xfVElNRU9VVCBmbGFnCisgKiBpcyBnaXZlbi4gIEFs dGhvdWdoIGl0IGlzIGRlY2xhcmVkIGFzICJsb25nIiwgd2UgZG9uJ3QgYWN0dWFsbHkgc3Vw cG9ydAorICogdGltZW91dHMgbG9uZ2VyIHRoYW4gSU5UX01BWCBtaWxsaXNlY29uZHMuICBO b3RlIHRoYXQgc29tZSBleHRyYSBvdmVyaGVhZAorICogaXMgaW5jdXJyZWQgd2hlbiBXTF9U SU1FT1VUIGlzIGdpdmVuLCBzbyBhdm9pZCB1c2luZyBhIHRpbWVvdXQgaWYgcG9zc2libGUu CisgKgorICogUmV0dXJucyBiaXQgbWFzayBpbmRpY2F0aW5nIHdoaWNoIGNvbmRpdGlvbihz KSBjYXVzZWQgdGhlIHdha2UtdXAuIE5vdGUKKyAqIHRoYXQgaWYgbXVsdGlwbGUgd2FrZS11 cCBjb25kaXRpb25zIGFyZSB0cnVlLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAorICog d2UgcmV0dXJuIGFsbCBvZiB0aGVtIGluIG9uZSBjYWxsLCBidXQgd2Ugd2lsbCByZXR1cm4g YXQgbGVhc3Qgb25lLgorICovCitpbnQKK1dhaXRJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBp bnRlcnJ1cHRNYXNrLCBpbnQgd2FrZUV2ZW50cywgbG9uZyB0aW1lb3V0LAorCQkJICB1aW50 MzIgd2FpdF9ldmVudF9pbmZvKQoreworCVdhaXRFdmVudAlldmVudDsKKworCS8qIFBvc3Rt YXN0ZXItbWFuYWdlZCBjYWxsZXJzIG11c3QgaGFuZGxlIHBvc3RtYXN0ZXIgZGVhdGggc29t ZWhvdy4gKi8KKwlBc3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyIHx8CisJCSAgICh3YWtlRXZl bnRzICYgV0xfRVhJVF9PTl9QTV9ERUFUSCkgfHwKKwkJICAgKHdha2VFdmVudHMgJiBXTF9Q T1NUTUFTVEVSX0RFQVRIKSk7CisKKwkvKgorCSAqIFNvbWUgY2FsbGVycyBtYXkgaGF2ZSBh biBpbnRlcnJ1cHQgbWFzayBkaWZmZXJlbnQgZnJvbSBsYXN0IHRpbWUsIG9yIG5vCisJICog aW50ZXJydXB0IG1hc2sgYXQgYWxsLCBvciB3YW50IHRvIGhhbmRsZSBwb3N0bWFzdGVyIGRl YXRoIGRpZmZlcmVudGx5LgorCSAqIEl0J3MgY2hlYXAgdG8gYXNzaWduIHRob3NlLCBzbyBq dXN0IGRvIGl0IGV2ZXJ5IHRpbWUuCisJICovCisJaWYgKCEod2FrZUV2ZW50cyAmIFdMX0lO VEVSUlVQVCkpCisJCWludGVycnVwdE1hc2sgPSAwOworCU1vZGlmeVdhaXRFdmVudChJbnRl cnJ1cHRXYWl0U2V0LCBJbnRlcnJ1cHRXYWl0U2V0SW50ZXJydXB0UG9zLAorCQkJCQlXTF9J TlRFUlJVUFQsIGludGVycnVwdE1hc2spOworCisJTW9kaWZ5V2FpdEV2ZW50KEludGVycnVw dFdhaXRTZXQsIEludGVycnVwdFdhaXRTZXRQb3N0bWFzdGVyRGVhdGhQb3MsCisJCQkJCSh3 YWtlRXZlbnRzICYgKFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9QT1NUTUFTVEVSX0RFQVRI KSksCisJCQkJCTApOworCisJaWYgKFdhaXRFdmVudFNldFdhaXQoSW50ZXJydXB0V2FpdFNl dCwKKwkJCQkJCSAod2FrZUV2ZW50cyAmIFdMX1RJTUVPVVQpID8gdGltZW91dCA6IC0xLAor CQkJCQkJICZldmVudCwgMSwKKwkJCQkJCSB3YWl0X2V2ZW50X2luZm8pID09IDApCisJCXJl dHVybiBXTF9USU1FT1VUOworCWVsc2UKKwkJcmV0dXJuIGV2ZW50LmV2ZW50czsKK30KKwor LyoKKyAqIExpa2UgV2FpdEludGVycnVwdCwgYnV0IHdpdGggYW4gZXh0cmEgc29ja2V0IGFy Z3VtZW50IGZvciBXTF9TT0NLRVRfKgorICogY29uZGl0aW9ucy4KKyAqCisgKiBXaGVuIHdh aXRpbmcgb24gYSBzb2NrZXQsIEVPRiBhbmQgZXJyb3IgY29uZGl0aW9ucyBhbHdheXMgY2F1 c2UgdGhlIHNvY2tldAorICogdG8gYmUgcmVwb3J0ZWQgYXMgcmVhZGFibGUvd3JpdGFibGUv Y29ubmVjdGVkLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRlYWwKKyAqIHdpdGggdGhlIGNv bmRpdGlvbi4KKyAqCisgKiB3YWtlRXZlbnRzIG11c3QgaW5jbHVkZSBlaXRoZXIgV0xfRVhJ VF9PTl9QTV9ERUFUSCBmb3IgYXV0b21hdGljIGV4aXQKKyAqIGlmIHRoZSBwb3N0bWFzdGVy IGRpZXMgb3IgV0xfUE9TVE1BU1RFUl9ERUFUSCBmb3IgYSBmbGFnIHNldCBpbiB0aGUKKyAq IHJldHVybiB2YWx1ZSBpZiB0aGUgcG9zdG1hc3RlciBkaWVzLiAgVGhlIGxhdHRlciBpcyB1 c2VmdWwgZm9yIHJhcmUgY2FzZXMKKyAqIHdoZXJlIHNvbWUgYmVoYXZpb3Igb3RoZXIgdGhh biBpbW1lZGlhdGUgZXhpdCBpcyBuZWVkZWQuCisgKgorICogTkI6IFRoZXNlIGRheXMgdGhp cyBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgdGhlIFdhaXRFdmVudFNldCBBUEkuIFdoZW4K KyAqIHVzaW5nIGFuIGludGVycnVwdCB2ZXJ5IGZyZXF1ZW50bHksIGNvbnNpZGVyIGNyZWF0 aW5nIGEgbG9uZ2VyIGxpdmluZworICogV2FpdEV2ZW50U2V0IGluc3RlYWQ7IHRoYXQncyBt b3JlIGVmZmljaWVudC4KKyAqLworaW50CitXYWl0SW50ZXJydXB0T3JTb2NrZXQoSW50ZXJy dXB0TWFzayBpbnRlcnJ1cHRNYXNrLCBpbnQgd2FrZUV2ZW50cywgcGdzb2NrZXQgc29jaywK KwkJCQkJICBsb25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCit7CisJaW50 CQkJcmV0OworCWludAkJCXJjOworCVdhaXRFdmVudAlldmVudDsKKwlXYWl0RXZlbnRTZXQg KnNldCA9IENyZWF0ZVdhaXRFdmVudFNldChDdXJyZW50UmVzb3VyY2VPd25lciwgMyk7CisK KwlpZiAod2FrZUV2ZW50cyAmIFdMX1RJTUVPVVQpCisJCUFzc2VydCh0aW1lb3V0ID49IDAp OworCWVsc2UKKwkJdGltZW91dCA9IC0xOworCisJaWYgKHdha2VFdmVudHMgJiBXTF9JTlRF UlJVUFQpCisJCUFkZFdhaXRFdmVudFRvU2V0KHNldCwgV0xfSU5URVJSVVBULCBQR0lOVkFM SURfU09DS0VULAorCQkJCQkJICBpbnRlcnJ1cHRNYXNrLCBOVUxMKTsKKworCS8qIFBvc3Rt YXN0ZXItbWFuYWdlZCBjYWxsZXJzIG11c3QgaGFuZGxlIHBvc3RtYXN0ZXIgZGVhdGggc29t ZWhvdy4gKi8KKwlBc3NlcnQoIUlzVW5kZXJQb3N0bWFzdGVyIHx8CisJCSAgICh3YWtlRXZl bnRzICYgV0xfRVhJVF9PTl9QTV9ERUFUSCkgfHwKKwkJICAgKHdha2VFdmVudHMgJiBXTF9Q T1NUTUFTVEVSX0RFQVRIKSk7CisKKwlpZiAoKHdha2VFdmVudHMgJiBXTF9QT1NUTUFTVEVS X0RFQVRIKSAmJiBJc1VuZGVyUG9zdG1hc3RlcikKKwkJQWRkV2FpdEV2ZW50VG9TZXQoc2V0 LCBXTF9QT1NUTUFTVEVSX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkJICAwLCBO VUxMKTsKKworCWlmICgod2FrZUV2ZW50cyAmIFdMX0VYSVRfT05fUE1fREVBVEgpICYmIElz VW5kZXJQb3N0bWFzdGVyKQorCQlBZGRXYWl0RXZlbnRUb1NldChzZXQsIFdMX0VYSVRfT05f UE1fREVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCisJCQkJCQkgIDAsIE5VTEwpOworCisJaWYg KHdha2VFdmVudHMgJiBXTF9TT0NLRVRfTUFTSykKKwl7CisJCWludAkJCWV2OworCisJCWV2 ID0gd2FrZUV2ZW50cyAmIFdMX1NPQ0tFVF9NQVNLOworCQlBZGRXYWl0RXZlbnRUb1NldChz ZXQsIGV2LCBzb2NrLCAwLCBOVUxMKTsKKwl9CisKKwlyYyA9IFdhaXRFdmVudFNldFdhaXQo c2V0LCB0aW1lb3V0LCAmZXZlbnQsIDEsIHdhaXRfZXZlbnRfaW5mbyk7CisJaWYgKHJjID09 IDApCisJCXJldCA9IFdMX1RJTUVPVVQ7CisJZWxzZQorCXsKKwkJcmV0ID0gZXZlbnQuZXZl bnRzICYgKFdMX0lOVEVSUlVQVCB8CisJCQkJCQkJICBXTF9QT1NUTUFTVEVSX0RFQVRIIHwK KwkJCQkJCQkgIFdMX1NPQ0tFVF9NQVNLKTsKKwl9CisKKwlGcmVlV2FpdEV2ZW50U2V0KHNl dCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyB1c2VkIGFzIHRoZSBJ TlRFUlJVUFRfVEVSTUlOQVRFIGhhbmRsZXIgaW4gc29tZSBhdXggcHJvY2Vzc2VzIHRoYXQK KyAqIHdhbnQgdG8ganVzdCBleGl0IGltbWVkaWF0ZWx5LgorICovCit2b2lkCitQcm9jZXNz QXV4UHJvY2Vzc1NodXRkb3duSW50ZXJydXB0KHZvaWQpCit7CisJcHJvY19leGl0KDApOwor fQorCisvKiBSZXNlcnZlIGFuIGludGVycnVwdCBiaXQgZm9yIHVzZSBpbiBhbiBleHRlbnNp b24gKi8KK0ludGVycnVwdE1hc2sKK1JlcXVlc3RBZGRpbkludGVycnVwdCh2b2lkKQorewor CUludGVycnVwdE1hc2sgcmVzdWx0OworCisJaWYgKG5leHRBZGRpbkludGVycnVwdEJpdCA9 PSBFTkRfQURESU5fSU5URVJSVVBUUykKKwkJZWxvZyhFUlJPUiwgIm91dCBvZiBhZGRpbiBp bnRlcnJ1cHQgYml0cyIpOworCisJcmVzdWx0ID0gVUlOVDY0X0JJVChuZXh0QWRkaW5JbnRl cnJ1cHRCaXQpOworCW5leHRBZGRpbkludGVycnVwdEJpdCsrOworCXJldHVybiByZXN1bHQ7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9pcGMvbWVzb24uYnVpbGQgYi9zcmMvYmFj a2VuZC9pcGMvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjFmNjk4YmQwYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvaXBj L21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsNiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2JhY2tlbmRfc291cmNlcyAr PSBmaWxlcygKKyAgJ2ludGVycnVwdC5jJywKKyAgJ3NpZ25hbF9oYW5kbGVycy5jJywKKykK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2lwYy9zaWduYWxfaGFuZGxlcnMuYyBiL3NyYy9i YWNrZW5kL2lwYy9zaWduYWxfaGFuZGxlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uNTg5Zjc1NTYyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC9pcGMvc2lnbmFsX2hhbmRsZXJzLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHNpZ25hbF9oYW5kbGVycy5jCisgKgkgIFN0YW5kYXJk IHNpZ25hbCBoYW5kbGVycy4KKyAqCisgKiBUaGVzZSBqdXN0IHJhaXNlIHRoZSBjb3JyZXNw b25kaW5nIElOVEVSUlVQVF8qIGZsYWdzOgorICoKKyAqIFNJR0hVUCAtPiAgcmVxdWVzdCBj b25maWcgcmVsb2FkCisgKiBTSUdJTlQgPT0gcXVlcnkgY2FuY2VsCisgKiBTSUdURVJNID09 IGdyYWNlZnVsIHRlcm1pbmF0ZSBvZiB0aGUgcHJvY2VzcworICogU0lHUVVJVCA9PSBleGl0 IGltbWVkaWF0ZWx5IChjYXVzZXMgY3Jhc2ggcmVzdGFydCkKKyAqCisgKiBYWFg6IFdlIHNo b3VsZCBub3Qgc2VuZCBzaWduYWxzIGRpcmVjdGx5IGJldHdlZW4gcHJvY2Vzc2VzIGFueW1v cmUuIFVzZQorICogU2VuZEludGVycnVwdCBpbnN0ZWFkLgorICoKKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAq CSAgc3JjL2JhY2tlbmQvaXBjL3NpZ25hbF9oYW5kbGVycy5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDx1 bmlzdGQuaD4KKworI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJpcGMv c2lnbmFsX2hhbmRsZXJzLmgiCisjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKKworLyoK KyAqIFNldCB0aGUgc3RhbmRhcmQgc2lnbmFsIGhhbmRsZXJzIHN1aXRhYmxlIGZvciBtb3N0 IHBvc3RtYXN0ZXIgY2hpbGQKKyAqIHByb2Nlc3Nlcy4KKyAqCisgKiBOb3RlOiB0aGlzIGRv ZXNuJ3QgdW5ibG9jayB0aGUgc2lnbmFscyB5ZXQuIFlvdSBjYW4gbWFrZSBhZGRpdGlvbmFs CisgKiBwcXNpZ25hbCgpIGNhbGxzIHRvIG1vZGlmeSB0aGUgZGVmYXVsdCBiZWhhdmlvciBi ZWZvcmUgdW5ibG9ja2luZy4KKyAqLwordm9pZAorU2V0UG9zdG1hc3RlckNoaWxkU2lnbmFs SGFuZGxlcnModm9pZCkKK3sKKwkvKi0tLS0tLS0tLS0KKwkgKiBUaGVzZSByYWlzZSB0aGUg Y29ycmVzcG9uZGluZyBpbnRlcnJ1cHRzIGluIHRoZSBwcm9jZXNzOgorCSAqCisJICogU0lH SFVQIC0+IElOVEVSUlVQVF9DT05GSUdfUkVMT0FECisJICogU0lHSU5UIC0+IElOVEVSUlVQ VF9RVUVSWV9DQU5DRUwKKwkgKiBTSUdURVJNIC0+IElOVEVSUlVQVF9URVJNSU5BVEUKKwkg KgorCSAqIFRoZSBwcm9jZXNzIG1heSBpZ25vcmUgdGhlIGludGVycnVwdHMgdGhhdCB0aGVz ZSByYWlzZSwgZS5nIGlmIHF1ZXJ5CisJICogY2FuY2VsbGF0aW9uIGlzIG5vdCBhcHBsaWNh YmxlLiAgQnV0IHRoZXJlJ3Mgbm8gaGFybSBpbiBoYXZpbmcgdGhlCisJICogc2lnbmFsIGhh bmRsZXJzIGluIHBsYWNlIGFueXdheS4KKwkgKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25h bEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR0lOVCwgU2lnbmFsSGFu ZGxlckZvclF1ZXJ5Q2FuY2VsKTsKKwlwcXNpZ25hbChTSUdURVJNLCBTaWduYWxIYW5kbGVy Rm9yU2h1dGRvd25SZXF1ZXN0KTsKKworCXBxc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwor CXBxc2lnbmFsKFNJR1VTUjEsIFNJR19JR04pOworCisJLyoKKwkgKiBTSUdVU1IyIGlzIHNl bnQgYnkgcG9zdG1hc3RlciB0byBzb21lIGF1eCBwcm9jZXNzZXMsIGZvciBkaWZmZXJlbnQK KwkgKiBwdXJwb3Nlcy4gIFN1Y2ggcHJvY2Vzc2VzIG92ZXJyaWRlIHRoaXMgYmVmb3JlIHVu YmxvY2tpbmcgc2lnbmFscywgYnV0CisJICogaWdub3JlIGl0IGJ5IGRlZmF1bHQuCisJICov CisJcHFzaWduYWwoU0lHVVNSMiwgU0lHX0lHTik7CisKKwkvKiBGSVhNRTogc2hvdWxkIHdl IGRvIHRoaXMgaW4gYWxsIHByb2Nlc3Nlcz8gKi8KKwkvKiBwcXNpZ25hbChTSUdGUEUsIEZs b2F0RXhjZXB0aW9uSGFuZGxlcik7ICovCisKKwkvKgorCSAqIFNJR0FMUk0gaXMgdXNlZCBm b3IgdGltZW91dHMsIGJ1dCB0aGUgaGFuZGxlciBpcyBlc3RhYmxpc2hlZCBsYXRlciBpbgor CSAqIEluaXRpYWxpemVUaW1lb3V0cygpCisJICovCisJcHFzaWduYWwoU0lHQUxSTSwgU0lH X0lHTik7CisKKwkvKiBTSUdVUkcgaXMgaGFuZGxlZCBpbiB3YWl0ZXZlbnRzZXQuYyAqLwor CisJLyoKKwkgKiBSZXNldCBzaWduYWxzIHRoYXQgYXJlIHVzZWQgYnkgcG9zdG1hc3RlciBi dXQgbm90IGJ5IGNoaWxkIHByb2Nlc3Nlcy4KKwkgKgorCSAqIEN1cnJlbnRseSBqdXN0IFNJ R0NITEQuICBUaGUgaGFuZGxlcnMgZm9yIG90aGVyIHNpZ25hbHMgYXJlIG92ZXJyaWRkZW4K KwkgKiBsYXRlciwgZGVwZW5kaW5nIG9uIHRoZSBjaGlsZCBwcm9jZXNzIHR5cGUuCisJICov CisJcHFzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7IC8qIHN5c3RlbSgpIHJlcXVpcmVzIHRo aXMgdG8gYmUgU0lHX0RGTCByYXRoZXIKKwkJCQkJCQkJICogdGhhbiBTSUdfSUdOIG9uIHNv bWUgcGxhdGZvcm1zICovCisKKwkvKgorCSAqIEV2ZXJ5IHBvc3RtYXN0ZXIgY2hpbGQgcHJv Y2VzcyBpcyBleHBlY3RlZCB0byByZXNwb25kIHByb21wdGx5IHRvCisJICogU0lHUVVJVCBh dCBhbGwgdGltZXMuICBUaGVyZWZvcmUgd2UgY2VudHJhbGx5IHJlbW92ZSBTSUdRVUlUIGZy b20KKwkgKiBCbG9ja1NpZyBhbmQgaW5zdGFsbCBhIHN1aXRhYmxlIHNpZ25hbCBoYW5kbGVy LiAgKENsaWVudC1mYWNpbmcKKwkgKiBwcm9jZXNzZXMgbWF5IGNob29zZSB0byByZXBsYWNl IHRoaXMgZGVmYXVsdCBjaG9pY2Ugb2YgaGFuZGxlciB3aXRoCisJICogcXVpY2tkaWUoKS4p ICBBbGwgb3RoZXIgYmxvY2thYmxlIHNpZ25hbHMgcmVtYWluIGJsb2NrZWQgZm9yIG5vdy4K KwkgKi8KKwlwcXNpZ25hbChTSUdRVUlULCBTaWduYWxIYW5kbGVyRm9yQ3Jhc2hFeGl0KTsK KworCXNpZ2RlbHNldCgmQmxvY2tTaWcsIFNJR1FVSVQpOworCXNpZ3Byb2NtYXNrKFNJR19T RVRNQVNLLCAmQmxvY2tTaWcsIE5VTEwpOworfQorCisvKgorICogU2ltcGxlIHNpZ25hbCBo YW5kbGVyIGZvciB0cmlnZ2VyaW5nIGEgY29uZmlndXJhdGlvbiByZWxvYWQuCisgKgorICog Tm9ybWFsbHksIHRoaXMgaGFuZGxlciB3b3VsZCBiZSB1c2VkIGZvciBTSUdIVVAuIFRoZSBp ZGVhIGlzIHRoYXQgY29kZQorICogd2hpY2ggdXNlcyBpdCB3b3VsZCBhcnJhbmdlIHRvIGNo ZWNrIHRoZSBJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCBpbnRlcnJ1cHQKKyAqIGF0IGNvbnZl bmllbnQgcGxhY2VzIGluc2lkZSBtYWluIGxvb3BzLgorICovCit2b2lkCitTaWduYWxIYW5k bGVyRm9yQ29uZmlnUmVsb2FkKFNJR05BTF9BUkdTKQoreworCVJhaXNlSW50ZXJydXB0KElO VEVSUlVQVF9DT05GSUdfUkVMT0FEKTsKK30KKworLyoKKyAqIFNpbXBsZSBzaWduYWwgaGFu ZGxlciBmb3IgZXhpdGluZyBxdWlja2x5IGFzIGlmIGR1ZSB0byBhIGNyYXNoLgorICoKKyAq IE5vcm1hbGx5LCB0aGlzIHdvdWxkIGJlIHVzZWQgZm9yIGhhbmRsaW5nIFNJR1FVSVQuCisg Ki8KK3ZvaWQKK1NpZ25hbEhhbmRsZXJGb3JDcmFzaEV4aXQoU0lHTkFMX0FSR1MpCit7CisJ LyoKKwkgKiBXZSBETyBOT1Qgd2FudCB0byBydW4gcHJvY19leGl0KCkgb3IgYXRleGl0KCkg Y2FsbGJhY2tzIC0tIHdlJ3JlIGhlcmUKKwkgKiBiZWNhdXNlIHNoYXJlZCBtZW1vcnkgbWF5 IGJlIGNvcnJ1cHRlZCwgc28gd2UgZG9uJ3Qgd2FudCB0byB0cnkgdG8KKwkgKiBjbGVhbiB1 cCBvdXIgdHJhbnNhY3Rpb24uICBKdXN0IG5haWwgdGhlIHdpbmRvd3Mgc2h1dCBhbmQgZ2V0 IG91dCBvZgorCSAqIHRvd24uICBUaGUgY2FsbGJhY2tzIHdvdWxkbid0IGJlIHNhZmUgdG8g cnVuIGZyb20gYSBzaWduYWwgaGFuZGxlciwKKwkgKiBhbnl3YXkuCisJICoKKwkgKiBOb3Rl IHdlIGRvIF9leGl0KDIpIG5vdCBfZXhpdCgwKS4gIFRoaXMgaXMgdG8gZm9yY2UgdGhlIHBv c3RtYXN0ZXIgaW50bworCSAqIGEgc3lzdGVtIHJlc2V0IGN5Y2xlIGlmIHNvbWVvbmUgc2Vu ZHMgYSBtYW51YWwgU0lHUVVJVCB0byBhIHJhbmRvbQorCSAqIGJhY2tlbmQuICBUaGlzIGlz IG5lY2Vzc2FyeSBwcmVjaXNlbHkgYmVjYXVzZSB3ZSBkb24ndCBjbGVhbiB1cCBvdXIKKwkg KiBzaGFyZWQgbWVtb3J5IHN0YXRlLiAgKFRoZSAiZGVhZCBtYW4gc3dpdGNoIiBtZWNoYW5p c20gaW4gcG1zaWduYWwuYworCSAqIHNob3VsZCBlbnN1cmUgdGhlIHBvc3RtYXN0ZXIgc2Vl cyB0aGlzIGFzIGEgY3Jhc2gsIHRvbywgYnV0IG5vIGhhcm0gaW4KKwkgKiBiZWluZyBkb3Vi bHkgc3VyZS4pCisJICovCisJX2V4aXQoMik7Cit9CisKKy8qCisgKiBTaW1wbGUgc2lnbmFs IGhhbmRsZXIgZm9yIHRyaWdnZXJpbmcgYSBsb25nLXJ1bm5pbmcgcHJvY2VzcyB0byBzaHV0 IGRvd24KKyAqIGFuZCBleGl0LgorICoKKyAqIEluIG1vc3QgcHJvY2Vzc2VzLCB0aGlzIGhh bmRsZXIgaXMgdXNlZCBmb3IgU0lHVEVSTSwgYnV0IHNvbWUgcHJvY2Vzc2VzIHVzZQorICog b3RoZXIgc2lnbmFscy4KKyAqLwordm9pZAorU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVx dWVzdChTSUdOQUxfQVJHUykKK3sKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfVEVSTUlO QVRFKTsKK30KKworLyoKKyAqIFF1ZXJ5LWNhbmNlbCBzaWduYWw6IGFib3J0IGN1cnJlbnQg dHJhbnNhY3Rpb24gYXQgc29vbmVzdCBjb252ZW5pZW50IHRpbWUKKyAqLwordm9pZAorU2ln bmFsSGFuZGxlckZvclF1ZXJ5Q2FuY2VsKFNJR05BTF9BUkdTKQoreworCVJhaXNlSW50ZXJy dXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbGlicHEvYXV0aC5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC5jCmluZGV4IGUwNGFh MmU2OGVkLi5mOGZiZGQwOTBkNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0 aC5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGguYwpAQCAtMTY3Myw4ICsxNjczLDkg QEAgaW50ZXJwcmV0X2lkZW50X3Jlc3BvbnNlKGNvbnN0IGNoYXIgKmlkZW50X3Jlc3BvbnNl LAogICoJb3ducyB0aGUgdGNwIGNvbm5lY3Rpb24gdG8gImxvY2FsX2FkZHIiCiAgKglJZiB0 aGUgdXNlcm5hbWUgaXMgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCwgY2hlY2sgdGhlIHVzZXJt YXAuCiAgKgotICoJWFhYOiBVc2luZyBXYWl0TGF0Y2hPclNvY2tldCgpIGFuZCBkb2luZyBh IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgaWYgdGhlCi0gKglsYXRjaCB3YXMgc2V0IHdvdWxk IGltcHJvdmUgdGhlIHJlc3BvbnNpdmVuZXNzIHRvIHRpbWVvdXRzL2NhbmNlbGxhdGlvbnMu CisgKglYWFg6IFVzaW5nIFdhaXRJbnRlcnJ1cHRPclNvY2tldCgpIGFuZCBkb2luZyBhIENI RUNLX0ZPUl9JTlRFUlJVUFRTKCkKKyAqCWlmIHRoZSBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcg d291bGQgaW1wcm92ZSB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8KKyAqCXRpbWVvdXRzL2NhbmNl bGxhdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKIGlkZW50X2luZXQoUG9ydCAqcG9ydCkKQEAg LTMxMDgsOCArMzEwOSw4IEBAIFBlcmZvcm1SYWRpdXNUcmFuc2FjdGlvbihjb25zdCBjaGFy ICpzZXJ2ZXIsIGNvbnN0IGNoYXIgKnNlY3JldCwgY29uc3QgY2hhciAqcG9yCiAJICogcGFj a2V0cyB0byBvdXIgcG9ydCB0aHVzIGNhdXNpbmcgdXMgdG8gcmV0cnkgaW4gYSBsb29wIGFu ZCBuZXZlciB0aW1lCiAJICogb3V0LgogCSAqCi0JICogWFhYOiBVc2luZyBXYWl0TGF0Y2hP clNvY2tldCgpIGFuZCBkb2luZyBhIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgaWYKLQkgKiB0 aGUgbGF0Y2ggd2FzIHNldCB3b3VsZCBpbXByb3ZlIHRoZSByZXNwb25zaXZlbmVzcyB0bwor CSAqIFhYWDogVXNpbmcgV2FpdEludGVycnVwdE9yU29ja2V0KCkgYW5kIGRvaW5nIGEgQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKQorCSAqIGlmIHRoZSBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcg d291bGQgaW1wcm92ZSB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8KIAkgKiB0aW1lb3V0cy9jYW5j ZWxsYXRpb25zLgogCSAqLwogCWdldHRpbWVvZmRheSgmZW5kdGltZSwgTlVMTCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtZ3NzYXBpLmMgYi9zcmMvYmFj a2VuZC9saWJwcS9iZS1zZWN1cmUtZ3NzYXBpLmMKaW5kZXggNWZiMDQzYjg2MDguLjFhNjBj YThmNzhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtZ3NzYXBp LmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLWdzc2FwaS5jCkBAIC0xNSwx MyArMTUsMTMgQEAKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVkZSAiaXBjL2lu dGVycnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2F1dGguaCIKICNpbmNsdWRlICJsaWJwcS9i ZS1nc3NhcGktY29tbW9uLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3Bn X2Jzd2FwLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInV0aWxz L2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKQEAg LTQyMiw3ICs0MjIsNyBAQCBiZV9nc3NhcGlfcmVhZChQb3J0ICpwb3J0LCB2b2lkICpwdHIs IHNpemVfdCBsZW4pCiAKIC8qCiAgKiBSZWFkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5 dGVzIG9mZiB0aGUgd2lyZSwgd2FpdGluZyB1c2luZwotICogV2FpdExhdGNoT3JTb2NrZXQg aWYgd2Ugd291bGQgYmxvY2suCisgKiBXYWl0SW50ZXJydXB0T3JTb2NrZXQgaWYgd2Ugd291 bGQgYmxvY2suCiAgKgogICogUmVzdWx0cyBhcmUgcmVhZCBpbnRvIFBxR1NTUmVjdkJ1ZmZl ci4KICAqCkBAIC00NTgsOSArNDU4LDggQEAgcmVhZF9vcl93YWl0KFBvcnQgKnBvcnQsIHNz aXplX3QgbGVuKQogCQkgKi8KIAkJaWYgKHJldCA8PSAwKQogCQl7Ci0JCQlXYWl0TGF0Y2hP clNvY2tldChOVUxMLAotCQkJCQkJCSAgV0xfU09DS0VUX1JFQURBQkxFIHwgV0xfRVhJVF9P Tl9QTV9ERUFUSCwKLQkJCQkJCQkgIHBvcnQtPnNvY2ssIDAsIFdBSVRfRVZFTlRfR1NTX09Q RU5fU0VSVkVSKTsKKwkJCVdhaXRJbnRlcnJ1cHRPclNvY2tldCgwLCBXTF9TT0NLRVRfUkVB REFCTEUgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCQkgIHBvcnQtPnNvY2ssIDAs IFdBSVRfRVZFTlRfR1NTX09QRU5fU0VSVkVSKTsKIAogCQkJLyoKIAkJCSAqIElmIHdlIGdv dCBiYWNrIHplcm8gYnl0ZXMsIGFuZCB0aGVuIHdhaXRlZCBvbiB0aGUgc29ja2V0IHRvIGJl CkBAIC00OTcsNyArNDk2LDcgQEAgcmVhZF9vcl93YWl0KFBvcnQgKnBvcnQsIHNzaXplX3Qg bGVuKQogICoKICAqIE5vdGUgdGhhdCB1bmxpa2UgdGhlIGJlX2dzc2FwaV9yZWFkL2JlX2dz c2FwaV93cml0ZSBmdW5jdGlvbnMsIHRoaXMKICAqIGZ1bmN0aW9uIFdJTEwgYmxvY2sgb24g dGhlIHNvY2tldCB0byBiZSByZWFkeSBmb3IgcmVhZC93cml0ZSAodXNpbmcKLSAqIFdhaXRM YXRjaE9yU29ja2V0KSBhcyBhcHByb3ByaWF0ZSB3aGlsZSBlc3RhYmxpc2hpbmcgdGhlIEdT U0FQSQorICogV2FpdEludGVycnVwdE9yU29ja2V0KSBhcyBhcHByb3ByaWF0ZSB3aGlsZSBl c3RhYmxpc2hpbmcgdGhlIEdTU0FQSQogICogc2Vzc2lvbi4KICAqLwogc3NpemVfdApAQCAt Njc5LDkgKzY3OCw4IEBAIHNlY3VyZV9vcGVuX2dzc2FwaShQb3J0ICpwb3J0KQogCQkJCS8q IFdhaXQgYW5kIHJldHJ5IGlmIHdlIGNvdWxkbid0IHdyaXRlIHlldCAqLwogCQkJCWlmIChy ZXQgPD0gMCkKIAkJCQl7Ci0JCQkJCVdhaXRMYXRjaE9yU29ja2V0KE5VTEwsCi0JCQkJCQkJ CQkgIFdMX1NPQ0tFVF9XUklURUFCTEUgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkJ CQkJICBwb3J0LT5zb2NrLCAwLCBXQUlUX0VWRU5UX0dTU19PUEVOX1NFUlZFUik7CisJCQkJ CVdhaXRJbnRlcnJ1cHRPclNvY2tldCgwLCBXTF9TT0NLRVRfV1JJVEVBQkxFIHwgV0xfRVhJ VF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkJCQkgIHBvcnQtPnNvY2ssIDAsIFdBSVRfRVZFTlRf R1NTX09QRU5fU0VSVkVSKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtb3BlbnNzbC5jIGIvc3JjL2JhY2tlbmQv bGlicHEvYmUtc2VjdXJlLW9wZW5zc2wuYwppbmRleCA0ZGE2YWMyMmZmOS4uM2EwZmY5NTY4 MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2JlLXNlY3VyZS1vcGVuc3NsLmMK KysrIGIvc3JjL2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLW9wZW5zc2wuYwpAQCAtMjgsMTEg KzI4LDEyIEBACiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAKICNpbmNsdWRlICJjb21tb24v c3RyaW5nLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYnBx L2xpYnBxLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIK KyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKQEAgLTUzMyw4ICs1MzQsOCBAQCBhbG9v cDoKIAkJCQllbHNlCiAJCQkJCXdhaXRmb3IgPSBXTF9TT0NLRVRfV1JJVEVBQkxFIHwgV0xf RVhJVF9PTl9QTV9ERUFUSDsKIAotCQkJCSh2b2lkKSBXYWl0TGF0Y2hPclNvY2tldChOVUxM LCB3YWl0Zm9yLCBwb3J0LT5zb2NrLCAwLAotCQkJCQkJCQkJCSBXQUlUX0VWRU5UX1NTTF9P UEVOX1NFUlZFUik7CisJCQkJKHZvaWQpIFdhaXRJbnRlcnJ1cHRPclNvY2tldCgwLCB3YWl0 Zm9yLCBwb3J0LT5zb2NrLCAwLAorCQkJCQkJCQkJCQkgV0FJVF9FVkVOVF9TU0xfT1BFTl9T RVJWRVIpOwogCQkJCWdvdG8gYWxvb3A7CiAJCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgog CQkJCWlmIChyIDwgMCAmJiBlcnJubyAhPSAwKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bGlicHEvYmUtc2VjdXJlLmMgYi9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUuYwppbmRl eCBlZGQ2OTgyM2I5Mi4uOGFiYWZhNjQ5YjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xp YnBxL2JlLXNlY3VyZS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2JlLXNlY3VyZS5jCkBA IC0yNyw5ICsyNyw4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KICNpbmNsdWRlIDxh cnBhL2luZXQuaD4KIAorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJs aWJwcS9saWJwcS5oIgotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgInN0b3Jh Z2UvbGF0Y2guaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRp bHMvaW5qZWN0aW9uX3BvaW50LmgiCiAjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgpA QCAtMTc1LDYgKzE3NCw5IEBAIHNlY3VyZV9jbG9zZShQb3J0ICpwb3J0KQogCiAvKgogICoJ UmVhZCBkYXRhIGZyb20gYSBzZWN1cmUgY29ubmVjdGlvbi4KKyAqCisgKiBJbiBibG9ja2lu ZyBtb2RlLCB3aWxsIHByb2Nlc3MgYW55IGludGVycnVwdHMgdGhhdCBhcnJpdmUgd2hpbGUg d2UncmUKKyAqIHdhaXRpbmcuCiAgKi8KIHNzaXplX3QKIHNlY3VyZV9yZWFkKFBvcnQgKnBv cnQsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKQEAgLTE4Miw5ICsxODQsNiBAQCBzZWN1cmVf cmVhZChQb3J0ICpwb3J0LCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCiAJc3NpemVfdAkJbjsK IAlpbnQJCQl3YWl0Zm9yOwogCi0JLyogRGVhbCB3aXRoIGFueSBhbHJlYWR5LXBlbmRpbmcg aW50ZXJydXB0IGNvbmRpdGlvbi4gKi8KLQlQcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdChm YWxzZSk7Ci0KIHJldHJ5OgogI2lmZGVmIFVTRV9TU0wKIAl3YWl0Zm9yID0gMDsKQEAgLTIx NCw3ICsyMTMsOCBAQCByZXRyeToKIAogCQlBc3NlcnQod2FpdGZvcik7CiAKLQkJTW9kaWZ5 V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJlV2FpdFNldFNvY2tldFBvcywgd2FpdGZvciwg TlVMTCk7CisJCU1vZGlmeVdhaXRFdmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRTb2Nr ZXRQb3MsIHdhaXRmb3IsIDApOworCQlNb2RpZnlXYWl0RXZlbnQoRmVCZVdhaXRTZXQsIEZl QmVXYWl0U2V0SW50ZXJydXB0UG9zLCBXTF9JTlRFUlJVUFQsIENoZWNrRm9ySW50ZXJydXB0 c01hc2spOwogCiAJCVdhaXRFdmVudFNldFdhaXQoRmVCZVdhaXRTZXQsIC0xIC8qIG5vIHRp bWVvdXQgKi8gLCAmZXZlbnQsIDEsCiAJCQkJCQkgV0FJVF9FVkVOVF9DTElFTlRfUkVBRCk7 CkBAIC0yMjksMjMgKzIyOSwyMiBAQCByZXRyeToKIAkJICogbmV3IGNvbm5lY3Rpb25zIGNh biBiZSBhY2NlcHRlZC4gIEV4aXRpbmcgY2xlYXJzIHRoZSBkZWNrIGZvciBhCiAJCSAqIHBv c3RtYXN0ZXIgcmVzdGFydC4KIAkJICoKLQkJICogKE5vdGUgdGhhdCB3ZSBvbmx5IG1ha2Ug dGhpcyBjaGVjayB3aGVuIHdlIHdvdWxkIG90aGVyd2lzZSBzbGVlcCBvbgotCQkgKiBvdXIg bGF0Y2guICBXZSBtaWdodCBzdGlsbCBjb250aW51ZSBydW5uaW5nIGZvciBhIHdoaWxlIGlm IHRoZQotCQkgKiBwb3N0bWFzdGVyIGlzIGtpbGxlZCBpbiBtaWQtcXVlcnksIG9yIGV2ZW4g dGhyb3VnaCBtdWx0aXBsZSBxdWVyaWVzCi0JCSAqIGlmIHdlIG5ldmVyIGhhdmUgdG8gd2Fp dCBmb3IgcmVhZC4gIFdlIGRvbid0IHdhbnQgdG8gYnVybiB0b28gbWFueQotCQkgKiBjeWNs ZXMgY2hlY2tpbmcgZm9yIHRoaXMgdmVyeSByYXJlIGNvbmRpdGlvbiwgYW5kIHRoaXMgc2hv dWxkIGNhdXNlCi0JCSAqIHVzIHRvIGV4aXQgcXVpY2tseSBpbiBtb3N0IGNhc2VzLikKKwkJ ICogKE5vdGUgdGhhdCB3ZSBvbmx5IG1ha2UgdGhpcyBjaGVjayB3aGVuIHdlIHdvdWxkIG90 aGVyd2lzZSBzbGVlcAorCQkgKiB3YWl0aW5nIGZvciBpbnRlcnJ1cHQuICBXZSBtaWdodCBz dGlsbCBjb250aW51ZSBydW5uaW5nIGZvciBhIHdoaWxlCisJCSAqIGlmIHRoZSBwb3N0bWFz dGVyIGlzIGtpbGxlZCBpbiBtaWQtcXVlcnksIG9yIGV2ZW4gdGhyb3VnaCBtdWx0aXBsZQor CQkgKiBxdWVyaWVzIGlmIHdlIG5ldmVyIGhhdmUgdG8gd2FpdCBmb3IgcmVhZC4gIFdlIGRv bid0IHdhbnQgdG8gYnVybgorCQkgKiB0b28gbWFueSBjeWNsZXMgY2hlY2tpbmcgZm9yIHRo aXMgdmVyeSByYXJlIGNvbmRpdGlvbiwgYW5kIHRoaXMKKwkJICogc2hvdWxkIGNhdXNlIHVz IHRvIGV4aXQgcXVpY2tseSBpbiBtb3N0IGNhc2VzLikKIAkJICovCiAJCWlmIChldmVudC5l dmVudHMgJiBXTF9QT1NUTUFTVEVSX0RFQVRIKQogCQkJZXJlcG9ydChGQVRBTCwKIAkJCQkJ KGVycmNvZGUoRVJSQ09ERV9BRE1JTl9TSFVURE9XTiksCiAJCQkJCSBlcnJtc2coInRlcm1p bmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIHVuZXhwZWN0ZWQgcG9zdG1hc3RlciBleGl0Iikp KTsKIAotCQkvKiBIYW5kbGUgaW50ZXJydXB0LiAqLwotCQlpZiAoZXZlbnQuZXZlbnRzICYg V0xfTEFUQ0hfU0VUKQorCQkvKiBIYW5kbGUgaW50ZXJydXB0cy4gKi8KKwkJaWYgKGV2ZW50 LmV2ZW50cyAmIFdMX0lOVEVSUlVQVCkKIAkJewotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsK LQkJCVByb2Nlc3NDbGllbnRSZWFkSW50ZXJydXB0KHRydWUpOworCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKIAogCQkJLyoKIAkJCSAqIFdlJ2xsIHJldHJ5IHRoZSByZWFkLiBNb3N0 IGxpa2VseSBpdCB3aWxsIHJldHVybiBpbW1lZGlhdGVseQpAQCAtMjU2LDEyICsyNTUsNiBA QCByZXRyeToKIAkJZ290byByZXRyeTsKIAl9CiAKLQkvKgotCSAqIFByb2Nlc3MgaW50ZXJy dXB0cyB0aGF0IGhhcHBlbmVkIGR1cmluZyBhIHN1Y2Nlc3NmdWwgKG9yIG5vbi1ibG9ja2lu ZywKLQkgKiBvciBoYXJkLWZhaWxlZCkgcmVhZC4KLQkgKi8KLQlQcm9jZXNzQ2xpZW50UmVh ZEludGVycnVwdChmYWxzZSk7Ci0KIAlyZXR1cm4gbjsKIH0KIApAQCAtMjg1LDcgKzI3OCw4 IEBAIHNlY3VyZV9yYXdfcmVhZChQb3J0ICpwb3J0LCB2b2lkICpwdHIsIHNpemVfdCBsZW4p CiAKIAkvKgogCSAqIFRyeSB0byByZWFkIGZyb20gdGhlIHNvY2tldCB3aXRob3V0IGJsb2Nr aW5nLiBJZiBpdCBzdWNjZWVkcyB3ZSdyZQotCSAqIGRvbmUsIG90aGVyd2lzZSB3ZSdsbCB3 YWl0IGZvciB0aGUgc29ja2V0IHVzaW5nIHRoZSBsYXRjaCBtZWNoYW5pc20uCisJICogZG9u ZSwgb3RoZXJ3aXNlIHdlJ2xsIHdhaXQgZm9yIHRoZSBzb2NrZXQgdXNpbmcgdGhlIGludGVy cnVwdAorCSAqIG1lY2hhbmlzbS4KIAkgKi8KICNpZmRlZiBXSU4zMgogCXBnd2luMzJfbm9i bG9jayA9IHRydWU7CkBAIC0zMDEsNiArMjk1LDkgQEAgc2VjdXJlX3Jhd19yZWFkKFBvcnQg KnBvcnQsIHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKIAogLyoKICAqCVdyaXRlIGRhdGEgdG8g YSBzZWN1cmUgY29ubmVjdGlvbi4KKyAqCisgKiBJbiBibG9ja2luZyBtb2RlLCB3aWxsIHBy b2Nlc3MgYW55IGludGVycnVwdHMgdGhhdCBhcnJpdmUgd2hpbGUgd2UncmUKKyAqIHdhaXRp bmcuCiAgKi8KIHNzaXplX3QKIHNlY3VyZV93cml0ZShQb3J0ICpwb3J0LCBjb25zdCB2b2lk ICpwdHIsIHNpemVfdCBsZW4pCkBAIC0zMDgsOSArMzA1LDYgQEAgc2VjdXJlX3dyaXRlKFBv cnQgKnBvcnQsIGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKIAlzc2l6ZV90CQluOwog CWludAkJCXdhaXRmb3I7CiAKLQkvKiBEZWFsIHdpdGggYW55IGFscmVhZHktcGVuZGluZyBp bnRlcnJ1cHQgY29uZGl0aW9uLiAqLwotCVByb2Nlc3NDbGllbnRXcml0ZUludGVycnVwdChm YWxzZSk7Ci0KIHJldHJ5OgogCXdhaXRmb3IgPSAwOwogI2lmZGVmIFVTRV9TU0wKQEAgLTMz OSw3ICszMzMsOCBAQCByZXRyeToKIAogCQlBc3NlcnQod2FpdGZvcik7CiAKLQkJTW9kaWZ5 V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJlV2FpdFNldFNvY2tldFBvcywgd2FpdGZvciwg TlVMTCk7CisJCU1vZGlmeVdhaXRFdmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRTb2Nr ZXRQb3MsIHdhaXRmb3IsIDApOworCQlNb2RpZnlXYWl0RXZlbnQoRmVCZVdhaXRTZXQsIEZl QmVXYWl0U2V0SW50ZXJydXB0UG9zLCBXTF9JTlRFUlJVUFQsIENoZWNrRm9ySW50ZXJydXB0 c01hc2spOwogCiAJCVdhaXRFdmVudFNldFdhaXQoRmVCZVdhaXRTZXQsIC0xIC8qIG5vIHRp bWVvdXQgKi8gLCAmZXZlbnQsIDEsCiAJCQkJCQkgV0FJVF9FVkVOVF9DTElFTlRfV1JJVEUp OwpAQCAtMzUwLDExICszNDUsMTAgQEAgcmV0cnk6CiAJCQkJCShlcnJjb2RlKEVSUkNPREVf QURNSU5fU0hVVERPV04pLAogCQkJCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBjb25uZWN0aW9u IGR1ZSB0byB1bmV4cGVjdGVkIHBvc3RtYXN0ZXIgZXhpdCIpKSk7CiAKLQkJLyogSGFuZGxl IGludGVycnVwdC4gKi8KLQkJaWYgKGV2ZW50LmV2ZW50cyAmIFdMX0xBVENIX1NFVCkKKwkJ LyogSGFuZGxlIGludGVycnVwdHMuICovCisJCWlmIChldmVudC5ldmVudHMgJiBXTF9JTlRF UlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlQcm9jZXNzQ2xpZW50 V3JpdGVJbnRlcnJ1cHQodHJ1ZSk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJ CQkvKgogCQkJICogV2UnbGwgcmV0cnkgdGhlIHdyaXRlLiBNb3N0IGxpa2VseSBpdCB3aWxs IHJldHVybiBpbW1lZGlhdGVseQpAQCAtMzY1LDEyICszNTksNiBAQCByZXRyeToKIAkJZ290 byByZXRyeTsKIAl9CiAKLQkvKgotCSAqIFByb2Nlc3MgaW50ZXJydXB0cyB0aGF0IGhhcHBl bmVkIGR1cmluZyBhIHN1Y2Nlc3NmdWwgKG9yIG5vbi1ibG9ja2luZywKLQkgKiBvciBoYXJk LWZhaWxlZCkgd3JpdGUuCi0JICovCi0JUHJvY2Vzc0NsaWVudFdyaXRlSW50ZXJydXB0KGZh bHNlKTsKLQogCXJldHVybiBuOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJw cS9wcWNvbW0uYyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCmluZGV4IDRhNDQyZjIy ZGY2Li5mZjRiMDRmOWUxMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21t LmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21tLmMKQEAgLTczLDEyICs3MywxMSBA QAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vaXAuaCIKKyNpbmNsdWRlICJpcGMvaW50 ZXJydXB0LmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKLSNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRlICJz dG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKIApAQCAtMTc2LDcgKzE3NSw3IEBAIHBxX2luaXQoQ2xp ZW50U29ja2V0ICpjbGllbnRfc29jaykKIHsKIAlQb3J0CSAgICpwb3J0OwogCWludAkJCXNv Y2tldF9wb3MgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZOwotCWludAkJCWxhdGNoX3BvcyBQ R19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisJaW50CQkJaW50ZXJydXB0X3BvcyBQR19VU0VE X0ZPUl9BU1NFUlRTX09OTFk7CiAKIAkvKiBhbGxvY2F0ZSB0aGUgUG9ydCBzdHJ1Y3QgYW5k IGNvcHkgdGhlIENsaWVudFNvY2tldCBjb250ZW50cyB0byBpdCAqLwogCXBvcnQgPSBwYWxs b2MwX29iamVjdChQb3J0KTsKQEAgLTI4OCw4ICsyODcsOCBAQCBwcV9pbml0KENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2spCiAKIAkvKgogCSAqIEluIGJhY2tlbmRzIChhcyBzb29uIGFz IGZvcmtlZCkgd2Ugb3BlcmF0ZSB0aGUgdW5kZXJseWluZyBzb2NrZXQgaW4KLQkgKiBub25i bG9ja2luZyBtb2RlIGFuZCB1c2UgbGF0Y2hlcyB0byBpbXBsZW1lbnQgYmxvY2tpbmcgc2Vt YW50aWNzIGlmCi0JICogbmVlZGVkLiBUaGF0IGFsbG93cyB1cyB0byBwcm92aWRlIHNhZmVs eSBpbnRlcnJ1cHRpYmxlIHJlYWRzIGFuZAorCSAqIG5vbmJsb2NraW5nIG1vZGUgYW5kIHVz ZSBXYWl0RXZlbnRTZXQgdG8gaW1wbGVtZW50IGJsb2NraW5nIHNlbWFudGljcworCSAqIGlm IG5lZWRlZC4gVGhhdCBhbGxvd3MgdXMgdG8gcHJvdmlkZSBzYWZlbHkgaW50ZXJydXB0aWJs ZSByZWFkcyBhbmQKIAkgKiB3cml0ZXMuCiAJICovCiAjaWZuZGVmIFdJTjMyCkBAIC0zMDcs MTggKzMwNiwxOCBAQCBwcV9pbml0KENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiAKIAlG ZUJlV2FpdFNldCA9IENyZWF0ZVdhaXRFdmVudFNldChOVUxMLCBGZUJlV2FpdFNldE5FdmVu dHMpOwogCXNvY2tldF9wb3MgPSBBZGRXYWl0RXZlbnRUb1NldChGZUJlV2FpdFNldCwgV0xf U09DS0VUX1dSSVRFQUJMRSwKLQkJCQkJCQkJICAgcG9ydC0+c29jaywgTlVMTCwgTlVMTCk7 Ci0JbGF0Y2hfcG9zID0gQWRkV2FpdEV2ZW50VG9TZXQoRmVCZVdhaXRTZXQsIFdMX0xBVENI X1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJCQkJICBNeUxhdGNoLCBOVUxMKTsKKwkJ CQkJCQkJICAgcG9ydC0+c29jaywgMCwgTlVMTCk7CisJaW50ZXJydXB0X3BvcyA9IEFkZFdh aXRFdmVudFRvU2V0KEZlQmVXYWl0U2V0LCBXTF9JTlRFUlJVUFQsIFBHSU5WQUxJRF9TT0NL RVQsCisJCQkJCQkJCQkgIENoZWNrRm9ySW50ZXJydXB0c01hc2ssIE5VTEwpOwogCUFkZFdh aXRFdmVudFRvU2V0KEZlQmVXYWl0U2V0LCBXTF9QT1NUTUFTVEVSX0RFQVRILCBQR0lOVkFM SURfU09DS0VULAotCQkJCQkgIE5VTEwsIE5VTEwpOworCQkJCQkgIDAsIE5VTEwpOwogCiAJ LyoKIAkgKiBUaGUgZXZlbnQgcG9zaXRpb25zIG1hdGNoIHRoZSBvcmRlciB3ZSBhZGRlZCB0 aGVtLCBidXQgbGV0J3Mgc2FuaXR5CiAJICogY2hlY2sgdGhlbSB0byBiZSBzdXJlLgogCSAq LwogCUFzc2VydChzb2NrZXRfcG9zID09IEZlQmVXYWl0U2V0U29ja2V0UG9zKTsKLQlBc3Nl cnQobGF0Y2hfcG9zID09IEZlQmVXYWl0U2V0TGF0Y2hQb3MpOworCUFzc2VydChpbnRlcnJ1 cHRfcG9zID09IEZlQmVXYWl0U2V0SW50ZXJydXB0UG9zKTsKIAogCXJldHVybiBwb3J0Owog fQpAQCAtMTQxMiw4ICsxNDExLDcgQEAgaW50ZXJuYWxfZmx1c2hfYnVmZmVyKGNvbnN0IGNo YXIgKmJ1Ziwgc2l6ZV90ICpzdGFydCwgc2l6ZV90ICplbmQpCiAJCQkgKiB0aGUgY29ubmVj dGlvbi4KIAkJCSAqLwogCQkJKnN0YXJ0ID0gKmVuZCA9IDA7Ci0JCQlDbGllbnRDb25uZWN0 aW9uTG9zdCA9IDE7Ci0JCQlJbnRlcnJ1cHRQZW5kaW5nID0gMTsKKwkJCVJhaXNlSW50ZXJy dXB0KElOVEVSUlVQVF9DTElFTlRfQ09OTkVDVElPTl9MT1NUKTsKIAkJCXJldHVybiBFT0Y7 CiAJCX0KIApAQCAtMjA2MywyNSArMjA2MSwxNCBAQCBwcV9jaGVja19jb25uZWN0aW9uKHZv aWQpCiAJICogSXQncyBPSyB0byBtb2RpZnkgdGhlIHNvY2tldCBldmVudCBmaWx0ZXIgd2l0 aG91dCByZXN0b3JpbmcsIGJlY2F1c2UKIAkgKiBhbGwgRmVCZVdhaXRTZXQgc29ja2V0IHdh aXQgc2l0ZXMgZG8gdGhlIHNhbWUuCiAJICovCi0JTW9kaWZ5V2FpdEV2ZW50KEZlQmVXYWl0 U2V0LCBGZUJlV2FpdFNldFNvY2tldFBvcywgV0xfU09DS0VUX0NMT1NFRCwgTlVMTCk7CisJ TW9kaWZ5V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJlV2FpdFNldFNvY2tldFBvcywgV0xf U09DS0VUX0NMT1NFRCwgMCk7CisJTW9kaWZ5V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJl V2FpdFNldEludGVycnVwdFBvcywgV0xfSU5URVJSVVBULCAwKTsKIAotcmV0cnk6CiAJcmMg PSBXYWl0RXZlbnRTZXRXYWl0KEZlQmVXYWl0U2V0LCAwLCBldmVudHMsIGxlbmd0aG9mKGV2 ZW50cyksIDApOwogCWZvciAoaW50IGkgPSAwOyBpIDwgcmM7ICsraSkKIAl7CiAJCWlmIChl dmVudHNbaV0uZXZlbnRzICYgV0xfU09DS0VUX0NMT1NFRCkKIAkJCXJldHVybiBmYWxzZTsK LQkJaWYgKGV2ZW50c1tpXS5ldmVudHMgJiBXTF9MQVRDSF9TRVQpCi0JCXsKLQkJCS8qCi0J CQkgKiBBIGxhdGNoIGV2ZW50IG1pZ2h0IGJlIHByZXZlbnRpbmcgb3RoZXIgZXZlbnRzIGZy b20gYmVpbmcKLQkJCSAqIHJlcG9ydGVkLiAgUmVzZXQgaXQgYW5kIHBvbGwgYWdhaW4uICBO byBuZWVkIHRvIHJlc3RvcmUgaXQKLQkJCSAqIGJlY2F1c2Ugbm8gY29kZSBzaG91bGQgZXhw ZWN0IGxhdGNoZXMgdG8gc3Vydml2ZSBhY3Jvc3MKLQkJCSAqIENIRUNLX0ZPUl9JTlRFUlJV UFRTKCkuCi0JCQkgKi8KLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlnb3RvIHJldHJ5 OwotCQl9CiAJfQogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9s aWJwcS9wcW1xLmMgYi9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKaW5kZXggN2U0YTcyNWI3 OTYuLjBhMDI5ZWIwMmE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMK KysrIGIvc3JjL2JhY2tlbmQvbGlicHEvcHFtcS5jCkBAIC0xNCwxOSArMTQsMTggQEAKICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCisj aW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAj aW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcW1xLmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2gu aCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKIAogc3RhdGljIHNobV9tcV9oYW5kbGUgKnBxX21xX2hhbmRsZSA9IE5VTEw7CiBz dGF0aWMgYm9vbCBwcV9tcV9idXN5ID0gZmFsc2U7Ci1zdGF0aWMgcGlkX3QgcHFfbXFfcGFy YWxsZWxfbGVhZGVyX3BpZCA9IDA7CiBzdGF0aWMgUHJvY051bWJlciBwcV9tcV9wYXJhbGxl bF9sZWFkZXJfcHJvY19udW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCiBzdGF0aWMg dm9pZCBwcV9jbGVhbnVwX3JlZGlyZWN0X3RvX3NobV9tcShkc21fc2VnbWVudCAqc2VnLCBE YXR1bSBhcmcpOwpAQCAtNzYsMTQgKzc1LDEzIEBAIHBxX2NsZWFudXBfcmVkaXJlY3RfdG9f c2htX21xKGRzbV9zZWdtZW50ICpzZWcsIERhdHVtIGFyZykKIH0KIAogLyoKLSAqIEFycmFu Z2UgdG8gU2VuZFByb2NTaWduYWwoKSB0byB0aGUgcGFyYWxsZWwgbGVhZGVyIGVhY2ggdGlt ZSB3ZSB0cmFuc21pdAorICogQXJyYW5nZSB0byBzZW5kIGFuIGludGVycnVwdCB0byB0aGUg cGFyYWxsZWwgbGVhZGVyIGVhY2ggdGltZSB3ZSB0cmFuc21pdAogICogbWVzc2FnZSBkYXRh IHZpYSB0aGUgc2htX21xLgogICovCiB2b2lkCi1wcV9zZXRfcGFyYWxsZWxfbGVhZGVyKHBp ZF90IHBpZCwgUHJvY051bWJlciBwcm9jTnVtYmVyKQorcHFfc2V0X3BhcmFsbGVsX2xlYWRl cihQcm9jTnVtYmVyIHByb2NOdW1iZXIpCiB7CiAJQXNzZXJ0KFBxQ29tbU1ldGhvZHMgPT0g JlBxQ29tbU1xTWV0aG9kcyk7Ci0JcHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCA9IHBpZDsK IAlwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcHJvY19udW1iZXIgPSBwcm9jTnVtYmVyOwogfQog CkBAIC0xNzAsMjcgKzE2OCwxOSBAQCBtcV9wdXRtZXNzYWdlKGNoYXIgbXNndHlwZSwgY29u c3QgY2hhciAqcywgc2l6ZV90IGxlbikKIAkJQXNzZXJ0KHBxX21xX2hhbmRsZSAhPSBOVUxM KTsKIAkJcmVzdWx0ID0gc2htX21xX3NlbmR2KHBxX21xX2hhbmRsZSwgaW92LCAyLCB0cnVl LCB0cnVlKTsKIAotCQlpZiAocHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCAhPSAwKQorCQlp ZiAocHFfbXFfcGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyICE9IElOVkFMSURfUFJPQ19O VU1CRVIpCiAJCXsKLQkJCWlmIChJc0xvZ2ljYWxQYXJhbGxlbEFwcGx5V29ya2VyKCkpCi0J CQkJU2VuZFByb2NTaWduYWwocHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCwKLQkJCQkJCQkg ICBQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsCi0JCQkJCQkJICAgcHFfbXFfcGFy YWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyKTsKLQkJCWVsc2UKLQkJCXsKLQkJCQlBc3NlcnQo SXNQYXJhbGxlbFdvcmtlcigpKTsKLQkJCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9wYXJhbGxl bF9sZWFkZXJfcGlkLAotCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwKLQkJ CQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfcHJvY19udW1iZXIpOwotCQkJfQorCQkJ U2VuZEludGVycnVwdChJTlRFUlJVUFRfUEFSQUxMRUxfTUVTU0FHRSwKKwkJCQkJCSAgcHFf bXFfcGFyYWxsZWxfbGVhZGVyX3Byb2NfbnVtYmVyKTsKIAkJfQogCiAJCWlmIChyZXN1bHQg IT0gU0hNX01RX1dPVUxEX0JMT0NLKQogCQkJYnJlYWs7CiAKLQkJKHZvaWQpIFdhaXRMYXRj aChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAotCQkJ CQkJIFdBSVRfRVZFTlRfTUVTU0FHRV9RVUVVRV9QVVRfTUVTU0FHRSk7Ci0JCVJlc2V0TGF0 Y2goTXlMYXRjaCk7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0 c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8 IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCisJCQkJCQkJIFdBSVRfRVZFTlRfTUVTU0FHRV9R VUVVRV9QVVRfTUVTU0FHRSk7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dB S0VVUCk7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJfQogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL21lc29uLmJ1aWxkCmluZGV4 IDRmNTI5MmQ4Zjg4Li5hNDM4YTJiNTc1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbWVz b24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQKQEAgLTE1LDYgKzE1LDcg QEAgc3ViZGlyKCdjYXRhbG9nJykKIHN1YmRpcignY29tbWFuZHMnKQogc3ViZGlyKCdleGVj dXRvcicpCiBzdWJkaXIoJ2ZvcmVpZ24nKQorc3ViZGlyKCdpcGMnKQogc3ViZGlyKCdqaXQn KQogc3ViZGlyKCdsaWInKQogc3ViZGlyKCdsaWJwcScpCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtl ZmlsZQppbmRleCAwZjQ0MzVkMmQ5Ny4uNzI5YTBiY2JiZTkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9NYWtlZmlsZQpAQCAtMTksNyArMTksNiBAQCBPQkpTID0gXAogCWJnd3JpdGVyLm8gXAog CWNoZWNrcG9pbnRlci5vIFwKIAlmb3JrX3Byb2Nlc3MubyBcCi0JaW50ZXJydXB0Lm8gXAog CWxhdW5jaF9iYWNrZW5kLm8gXAogCXBnYXJjaC5vIFwKIAlwbWNoaWxkLm8gXApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwppbmRleCAwYTczMGZiNWI0NS4uNTc2MzA1N2E4 N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCkBAIC0yNywxNSArMjcs MTcgQEAKICAqIGxhdW5jaGVyIGhhcyBzZXQgdXAuCiAgKgogICogSWYgdGhlIGZvcmsoKSBj YWxsIGZhaWxzIGluIHRoZSBwb3N0bWFzdGVyLCBpdCBzZXRzIGEgZmxhZyBpbiB0aGUgc2hh cmVkCi0gKiBtZW1vcnkgYXJlYSwgYW5kIHNlbmRzIGEgc2lnbmFsIHRvIHRoZSBsYXVuY2hl ci4gIFRoZSBsYXVuY2hlciwgdXBvbgotICogbm90aWNpbmcgdGhlIGZsYWcsIGNhbiB0cnkg c3RhcnRpbmcgdGhlIHdvcmtlciBhZ2FpbiBieSByZXNlbmRpbmcgdGhlCisgKiBtZW1vcnkg YXJlYSwgc2VuZHMgYSBzaWduYWwgdG8gdGhlIGxhdW5jaGVyLCByYWlzaW5nIHRoZQorICog SU5URVJSVVBUX0FVVE9WQUNVVU1fV09SS0VSX0ZJTklTSEVEIGludGVycnVwdC4gVGhlIGxh dW5jaGVyLCB1cG9uCisgKiBub3RpY2luZyB0aGUgaW50ZXJydXB0LCBjYW4gdHJ5IHN0YXJ0 aW5nIHRoZSB3b3JrZXIgYWdhaW4gYnkgcmVzZW5kaW5nIHRoZQogICogc2lnbmFsLiAgTm90 ZSB0aGF0IHRoZSBmYWlsdXJlIGNhbiBvbmx5IGJlIHRyYW5zaWVudCAoZm9yayBmYWlsdXJl IGR1ZSB0bwogICogaGlnaCBsb2FkLCBtZW1vcnkgcHJlc3N1cmUsIHRvbyBtYW55IHByb2Nl c3NlcywgZXRjKTsgbW9yZSBwZXJtYW5lbnQKICAqIHByb2JsZW1zLCBsaWtlIGZhaWx1cmUg dG8gY29ubmVjdCB0byBhIGRhdGFiYXNlLCBhcmUgZGV0ZWN0ZWQgbGF0ZXIgaW4gdGhlCiAg KiB3b3JrZXIgYW5kIGRlYWx0IHdpdGgganVzdCBieSBoYXZpbmcgdGhlIHdvcmtlciBleGl0 IG5vcm1hbGx5LiAgVGhlIGxhdW5jaGVyCiAgKiB3aWxsIGxhdW5jaCBhIG5ldyB3b3JrZXIg YWdhaW4gbGF0ZXIsIHBlciBzY2hlZHVsZS4KICAqCi0gKiBXaGVuIHRoZSB3b3JrZXIgaXMg ZG9uZSB2YWN1dW1pbmcgaXQgc2VuZHMgU0lHVVNSMiB0byB0aGUgbGF1bmNoZXIuICBUaGUK KyAqIFdoZW4gdGhlIHdvcmtlciBpcyBkb25lIHZhY3V1bWluZyBhbmQgZXhpdHMsIHRoZSBw b3N0bWFzdGVyIHNlbmRzIFNJR1VTUjIKKyAqIHRvIHRoZSBsYXVuY2hlciwgcmFpc2luZyBJ TlRFUlJVUFRfQVVUT1ZBQ1VVTV9XT1JLRVJfRklOSVNIRUQuICBUaGUKICAqIGxhdW5jaGVy IHRoZW4gd2FrZXMgdXAgYW5kIGlzIGFibGUgdG8gbGF1bmNoIGFub3RoZXIgd29ya2VyLCBp ZiB0aGUgc2NoZWR1bGUKICAqIGlzIHNvIHRpZ2h0IHRoYXQgYSBuZXcgd29ya2VyIGlzIG5l ZWRlZCBpbW1lZGlhdGVseS4gIEF0IHRoaXMgdGltZSB0aGUKICAqIGxhdW5jaGVyIGNhbiBh bHNvIGJhbGFuY2UgdGhlIHNldHRpbmdzIGZvciB0aGUgdmFyaW91cyByZW1haW5pbmcgd29y a2VycycKQEAgLTc5LDE4ICs4MSwxOCBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNw YWNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAiY29tbW9u L2ludC5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJpcGMvc2ln bmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5jbHVkZSAibGli cHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rl cy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFz dGVyL2F1dG92YWN1dW0uaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv YWlvX3N1YnN5cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgpAQCAtMTUxLDkgKzE1Myw2IEBAIGludAkJCUxvZ19hdXRv YW5hbHl6ZV9taW5fZHVyYXRpb24gPSA2MDAwMDA7CiBzdGF0aWMgZG91YmxlIGF2X3N0b3Jh Z2VfcGFyYW1fY29zdF9kZWxheSA9IC0xOwogc3RhdGljIGludAlhdl9zdG9yYWdlX3BhcmFt X2Nvc3RfbGltaXQgPSAtMTsKIAotLyogRmxhZ3Mgc2V0IGJ5IHNpZ25hbCBoYW5kbGVycyAq Lwotc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBnb3RfU0lHVVNSMiA9IGZhbHNlOwot CiAvKiBDb21wYXJpc29uIHBvaW50cyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBmcmVlemVf bWF4X2FnZSBpcyBleGNlZWRlZCAqLwogc3RhdGljIFRyYW5zYWN0aW9uSWQgcmVjZW50WGlk Owogc3RhdGljIE11bHRpWGFjdElkIHJlY2VudE11bHRpOwpAQCAtMjg3LDYgKzI4Niw5IEBA IHR5cGVkZWYgc3RydWN0IEF1dG9WYWN1dW1Xb3JrSXRlbQogICoKICAqIFRoaXMgc3RydWN0 IGlzIHByb3RlY3RlZCBieSBBdXRvdmFjdXVtTG9jaywgZXhjZXB0IGZvciBhdl9zaWduYWwg YW5kIHBhcnRzCiAgKiBvZiB0aGUgd29ya2VyIGxpc3QgKHNlZSBhYm92ZSkuCisgKgorICog WFhYOiBhdl9zaWduYWwgY291bGQgYmUgcmVwbGFjZWQgd2l0aCBpbmRpdmlkdWFsIGludGVy cnVwdHMuIFRoaXMgd29ya3MKKyAqIHRvbywgdGhvdWdoLgogICotLS0tLS0tLS0tLS0tCiAg Ki8KIHR5cGVkZWYgc3RydWN0CkBAIC0zMjIsNyArMzI0LDcgQEAgYXZsX2RiYXNlICAqYXZs X2RiYXNlX2FycmF5Owogc3RhdGljIFdvcmtlckluZm8gTXlXb3JrZXJJbmZvID0gTlVMTDsK IAogc3RhdGljIE9pZAlkb19zdGFydF93b3JrZXIodm9pZCk7Ci1zdGF0aWMgdm9pZCBQcm9j ZXNzQXV0b1ZhY0xhdW5jaGVySW50ZXJydXB0cyh2b2lkKTsKK3N0YXRpYyB2b2lkIFByb2Nl c3NBdXRvVmFjTGF1bmNoZXJDb25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCk7CiBwZ19ub3Jl dHVybiBzdGF0aWMgdm9pZCBBdXRvVmFjTGF1bmNoZXJTaHV0ZG93bih2b2lkKTsKIHN0YXRp YyB2b2lkIGxhdW5jaGVyX2RldGVybWluZV9zbGVlcChib29sIGNhbmxhdW5jaCwgYm9vbCBy ZWN1cnNpbmcsCiAJCQkJCQkJCQkgc3RydWN0IHRpbWV2YWwgKm5hcCk7CkBAIC0zOTQsMjEg KzM5NiwyMyBAQCBBdXRvVmFjTGF1bmNoZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJQXNzZXJ0KEdldFByb2Nlc3NpbmdNb2Rl KCkgPT0gSW5pdFByb2Nlc3NpbmcpOwogCiAJLyoKLQkgKiBTZXQgdXAgc2lnbmFsIGhhbmRs ZXJzLiAgV2Ugb3BlcmF0ZSBvbiBkYXRhYmFzZXMgbXVjaCBsaWtlIGEgcmVndWxhcgotCSAq IGJhY2tlbmQsIHNvIHdlIHVzZSB0aGUgc2FtZSBzaWduYWwgaGFuZGxpbmcuICBTZWUgZXF1 aXZhbGVudCBjb2RlIGluCi0JICogdGNvcC9wb3N0Z3Jlcy5jLgorCSAqIFNldCB1cCBzaWdu YWwgYW5kIGludGVycnVwdCBoYW5kbGVycy4gIFdlIG9wZXJhdGUgb24gZGF0YWJhc2VzIG11 Y2gKKwkgKiBsaWtlIGEgcmVndWxhciBiYWNrZW5kLCBzbyB3ZSB1c2UgbW9zdGx5IHRoZSBz YW1lIGhhbmRsaW5nLiAgU2VlCisJICogZXF1aXZhbGVudCBjb2RlIGluIHRjb3AvcG9zdGdy ZXMuYy4KIAkgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdS ZWxvYWQpOwotCXBxc2lnbmFsKFNJR0lOVCwgU3RhdGVtZW50Q2FuY2VsSGFuZGxlcik7Ci0J cHFzaWduYWwoU0lHVEVSTSwgU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7Ci0J LyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCB1cCBieSBJbml0UG9zdG1hc3Rl ckNoaWxkICovCi0KKwlTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CiAJSW5pdGlh bGl6ZVRpbWVvdXRzKCk7CQkvKiBlc3RhYmxpc2hlcyBTSUdBTFJNIGhhbmRsZXIgKi8KIAot CXBxc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwotCXBxc2lnbmFsKFNJR1VTUjEsIHByb2Nz aWduYWxfc2lndXNyMV9oYW5kbGVyKTsKKwkvKiBQb3N0bWFzdGVyIHVzZXMgU0lHVVNSMiB0 byByYWlzZSBJTlRFUlJVUFRfQVVUT1ZBQ1VVTV9XT1JLRVJfRklOSVNIRUQgKi8KIAlwcXNp Z25hbChTSUdVU1IyLCBhdmxfc2lndXNyMl9oYW5kbGVyKTsKLQlwcXNpZ25hbChTSUdGUEUs IEZsb2F0RXhjZXB0aW9uSGFuZGxlcik7CisKKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVS UlVQVF9RVUVSWV9DQU5DRUwsIFByb2Nlc3NRdWVyeUNhbmNlbEludGVycnVwdCk7CisJRW5h YmxlSW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOworCisJU2V0SW50ZXJydXB0 SGFuZGxlcihJTlRFUlJVUFRfVEVSTUlOQVRFLCBBdXRvVmFjTGF1bmNoZXJTaHV0ZG93bik7 CisKKwkvKiBXZSBjYW4gc2FmZWx5IHJlbG9hZCBjb25maWcgYXQgYW55IENIRUNLX0ZPUl9J TlRFUlJVUFRTKCkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9DT05GSUdf UkVMT0FELCBQcm9jZXNzQXV0b1ZhY0xhdW5jaGVyQ29uZmlnUmVsb2FkSW50ZXJydXB0KTsK IAogCS8qCiAJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFy ZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCkBAIC00NTUsNyArNDU5LDggQEAgQXV0b1Zh Y0xhdW5jaGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVw X2RhdGFfbGVuKQogCiAJCS8qIEZvcmdldCBhbnkgcGVuZGluZyBRdWVyeUNhbmNlbCBvciB0 aW1lb3V0IHJlcXVlc3QgKi8KIAkJZGlzYWJsZV9hbGxfdGltZW91dHMoZmFsc2UpOwotCQlR dWVyeUNhbmNlbFBlbmRpbmcgPSBmYWxzZTsgLyogc2Vjb25kIHRvIGF2b2lkIHJhY2UgY29u ZGl0aW9uICovCisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOyAv KiBzZWNvbmQgdG8gYXZvaWQgcmFjZQorCQkJCQkJCQkJCQkJICogY29uZGl0aW9uICovCiAK IAkJLyogUmVwb3J0IHRoZSBlcnJvciB0byB0aGUgc2VydmVyIGxvZyAqLwogCQlFbWl0RXJy b3JSZXBvcnQoKTsKQEAgLTQ5Nyw3ICs1MDIsNyBAQCBBdXRvVmFjTGF1bmNoZXJNYWluKGNv bnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCVJF U1VNRV9JTlRFUlJVUFRTKCk7CiAKIAkJLyogaWYgaW4gc2h1dGRvd24gbW9kZSwgbm8gbmVl ZCBmb3IgYW55dGhpbmcgZnVydGhlcjsganVzdCBnbyBhd2F5ICovCi0JCWlmIChTaHV0ZG93 blJlcXVlc3RQZW5kaW5nKQorCQlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfVEVS TUlOQVRFKSkKIAkJCUF1dG9WYWNMYXVuY2hlclNodXRkb3duKCk7CiAKIAkJLyoKQEAgLTU1 Niw3ICs1NjEsNyBAQCBBdXRvVmFjTGF1bmNoZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJICovCiAJaWYgKCFBdXRvVmFjdXVt aW5nQWN0aXZlKCkpCiAJewotCQlpZiAoIVNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJCWlm IChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9URVJNSU5BVEUpKQogCQkJZG9fc3RhcnRf d29ya2VyKCk7CiAJCXByb2NfZXhpdCgwKTsJCQkvKiBkb25lICovCiAJfQpAQCAtNTcxLDQx ICs1NzYsNDQgQEAgQXV0b1ZhY0xhdW5jaGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2Rh dGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCXJlYnVpbGRfZGF0YWJhc2VfbGlzdChJ bnZhbGlkT2lkKTsKIAogCS8qIGxvb3AgdW50aWwgc2h1dGRvd24gcmVxdWVzdCAqLwotCXdo aWxlICghU2h1dGRvd25SZXF1ZXN0UGVuZGluZykKKwl3aGlsZSAoIUludGVycnVwdFBlbmRp bmcoSU5URVJSVVBUX1RFUk1JTkFURSkpCiAJewogCQlzdHJ1Y3QgdGltZXZhbCBuYXA7CiAJ CVRpbWVzdGFtcFR6IGN1cnJlbnRfdGltZSA9IDA7CiAJCWJvb2wJCWNhbl9sYXVuY2g7CiAK IAkJLyoKLQkJICogVGhpcyBsb29wIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tIHRoZSBub3Jt YWwgdXNlIG9mIFdhaXRMYXRjaCwKKwkJICogVGhpcyBsb29wIGlzIGEgYml0IGRpZmZlcmVu dCBmcm9tIHRoZSBub3JtYWwgdXNlIG9mIFdhaXRJbnRlcnJ1cHQsCiAJCSAqIGJlY2F1c2Ug d2UnZCBsaWtlIHRvIHNsZWVwIGJlZm9yZSB0aGUgZmlyc3QgbGF1bmNoIG9mIGEgY2hpbGQK LQkJICogcHJvY2Vzcy4gIFNvIGl0J3MgV2FpdExhdGNoLCB0aGVuIFJlc2V0TGF0Y2gsIHRo ZW4gY2hlY2sgZm9yCi0JCSAqIHdha2VuaW5nIGNvbmRpdGlvbnMuCisJCSAqIHByb2Nlc3Mu ICBTbyBpdCdzIFdhaXRJbnRlcnJ1cHQsIHRoZW4gQ2xlYXJJbnRlcnJ1cHQsIHRoZW4gY2hl Y2sKKwkJICogZm9yIHdha2VuaW5nIGNvbmRpdGlvbnMuCiAJCSAqLwogCiAJCWxhdW5jaGVy X2RldGVybWluZV9zbGVlcChhdl93b3JrZXJfYXZhaWxhYmxlKCksIGZhbHNlLCAmbmFwKTsK IAogCQkvKgotCQkgKiBXYWl0IHVudGlsIG5hcHRpbWUgZXhwaXJlcyBvciB3ZSBnZXQgc29t ZSB0eXBlIG9mIHNpZ25hbCAoYWxsIHRoZQotCQkgKiBzaWduYWwgaGFuZGxlcnMgd2lsbCB3 YWtlIHVzIGJ5IGNhbGxpbmcgU2V0TGF0Y2gpLgorCQkgKiBXYWl0IHVudGlsIG5hcHRpbWUg ZXhwaXJlcyBvciB3ZSBnZXQgc29tZSB0eXBlIG9mIGludGVycnVwdC4KIAkJICovCi0JCSh2 b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1F T1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCSAobmFwLnR2X3NlYyAqIDEwMDBM KSArIChuYXAudHZfdXNlYyAvIDEwMDBMKSwKLQkJCQkJCSBXQUlUX0VWRU5UX0FVVE9WQUNV VU1fTUFJTik7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01h c2sgfAorCQkJCQkJCSBJTlRFUlJVUFRfV0FJVF9XQUtFVVAgfAorCQkJCQkJCSBJTlRFUlJV UFRfQVVUT1ZBQ1VVTV9XT1JLRVJfRklOSVNIRUQsCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8 IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCSAobmFwLnR2X3Nl YyAqIDEwMDBMKSArIChuYXAudHZfdXNlYyAvIDEwMDBMKSwKKwkJCQkJCQkgV0FJVF9FVkVO VF9BVVRPVkFDVVVNX01BSU4pOwogCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJUHJvY2Vzc0F1dG9WYWNMYXVuY2hlckludGVycnVw dHMoKTsKKwkJLyoKKwkJICogRklYTUU6IGlzIHRoaXMgc3RpbGwgbmVlZGVkPyBEb2VzIGFu eW9uZSBzZW5kIElOVEVSUlVQVF9XQUlUX1dBS0VVUAorCQkgKiB0byBhdiBsYXVuY2hlcj8K KwkJICovCisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAKIAkJ LyoKIAkJICogYSB3b3JrZXIgZmluaXNoZWQsIG9yIHBvc3RtYXN0ZXIgc2lnbmFsZWQgZmFp bHVyZSB0byBzdGFydCBhIHdvcmtlcgogCQkgKi8KLQkJaWYgKGdvdF9TSUdVU1IyKQorCQlp ZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQVVUT1ZBQ1VVTV9XT1JLRVJfRklOSVNI RUQpKQogCQl7Ci0JCQlnb3RfU0lHVVNSMiA9IGZhbHNlOwotCiAJCQkvKiByZWJhbGFuY2Ug Y29zdCBsaW1pdHMsIGlmIG5lZWRlZCAqLwogCQkJaWYgKEF1dG9WYWN1dW1TaG1lbS0+YXZf c2lnbmFsW0F1dG9WYWNSZWJhbGFuY2VdKQogCQkJewpAQCAtNzQxLDIxICs3NDksMTcgQEAg QXV0b1ZhY0xhdW5jaGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBz dGFydHVwX2RhdGFfbGVuKQogCUF1dG9WYWNMYXVuY2hlclNodXRkb3duKCk7CiB9CiAKLS8q Ci0gKiBQcm9jZXNzIGFueSBuZXcgaW50ZXJydXB0cy4KLSAqLwogc3RhdGljIHZvaWQKLVBy b2Nlc3NBdXRvVmFjTGF1bmNoZXJJbnRlcnJ1cHRzKHZvaWQpCitQcm9jZXNzQXV0b1ZhY0xh dW5jaGVyQ29uZmlnUmVsb2FkSW50ZXJydXB0KHZvaWQpCiB7CiAJLyogdGhlIG5vcm1hbCBz aHV0ZG93biBjYXNlICovCi0JaWYgKFNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJaWYgKElu dGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSkpCiAJCUF1dG9WYWNMYXVuY2hl clNodXRkb3duKCk7CiAKLQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZykKKwlpZiAoQ29uc3Vt ZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCiAJewogCQlpbnQJCQlhdXRv dmFjdXVtX21heF93b3JrZXJzX3ByZXYgPSBhdXRvdmFjdXVtX21heF93b3JrZXJzOwogCi0J CUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdD X1NJR0hVUCk7CiAKIAkJLyogc2h1dGRvd24gcmVxdWVzdGVkIGluIGNvbmZpZyBmaWxlPyAq LwpAQCAtNzczLDE3ICs3NzcsNiBAQCBQcm9jZXNzQXV0b1ZhY0xhdW5jaGVySW50ZXJydXB0 cyh2b2lkKQogCQkvKiByZWJ1aWxkIHRoZSBsaXN0IGluIGNhc2UgdGhlIG5hcHRpbWUgY2hh bmdlZCAqLwogCQlyZWJ1aWxkX2RhdGFiYXNlX2xpc3QoSW52YWxpZE9pZCk7CiAJfQotCi0J LyogUHJvY2VzcyBiYXJyaWVyIGV2ZW50cyAqLwotCWlmIChQcm9jU2lnbmFsQmFycmllclBl bmRpbmcpCi0JCVByb2Nlc3NQcm9jU2lnbmFsQmFycmllcigpOwotCi0JLyogUGVyZm9ybSBs b2dnaW5nIG9mIG1lbW9yeSBjb250ZXh0cyBvZiB0aGlzIHByb2Nlc3MgKi8KLQlpZiAoTG9n TWVtb3J5Q29udGV4dFBlbmRpbmcpCi0JCVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJy dXB0KCk7Ci0KLQkvKiBQcm9jZXNzIHNpbnZhbCBjYXRjaHVwIGludGVycnVwdHMgdGhhdCBo YXBwZW5lZCB3aGlsZSBzbGVlcGluZyAqLwotCVByb2Nlc3NDYXRjaHVwSW50ZXJydXB0KCk7 CiB9CiAKIC8qCkBAIC0xMzUwLDggKzEzNDMsOCBAQCBsYXVuY2hfd29ya2VyKFRpbWVzdGFt cFR6IG5vdykKIAogLyoKICAqIENhbGxlZCBmcm9tIHBvc3RtYXN0ZXIgdG8gc2lnbmFsIGEg ZmFpbHVyZSB0byBmb3JrIGEgcHJvY2VzcyB0byBiZWNvbWUKLSAqIHdvcmtlci4gIFRoZSBw b3N0bWFzdGVyIHNob3VsZCBraWxsKFNJR1VTUjIpIHRoZSBsYXVuY2hlciBzaG9ydGx5Ci0g KiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKiB3b3JrZXIuICBUaGUgcG9zdG1h c3RlciBzaG91bGQgc2VuZCBJTlRFUlJVUFRfQVVUT1ZBQ1VVTV9XT1JLRVJfRklOSVNIRUQg dG8KKyAqIHRoZSBsYXVuY2hlciBzaG9ydGx5IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlv bi4KICAqLwogdm9pZAogQXV0b1ZhY1dvcmtlckZhaWxlZCh2b2lkKQpAQCAtMTM2Myw4ICsx MzU2LDcgQEAgQXV0b1ZhY1dvcmtlckZhaWxlZCh2b2lkKQogc3RhdGljIHZvaWQKIGF2bF9z aWd1c3IyX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiB7Ci0JZ290X1NJR1VTUjIgPSB0cnVlOwot CVNldExhdGNoKE15TGF0Y2gpOworCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9BVVRPVkFD VVVNX1dPUktFUl9GSU5JU0hFRCk7CiB9CiAKIApAQCAtMTM5OSwyMiArMTM5MSwxOCBAQCBB dXRvVmFjV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFy dHVwX2RhdGFfbGVuKQogCSAqIGJhY2tlbmQsIHNvIHdlIHVzZSB0aGUgc2FtZSBzaWduYWwg aGFuZGxpbmcuICBTZWUgZXF1aXZhbGVudCBjb2RlIGluCiAJICogdGNvcC9wb3N0Z3Jlcy5j LgogCSAqLwotCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9h ZCk7Ci0KLQkvKgotCSAqIFNJR0lOVCBpcyB1c2VkIHRvIHNpZ25hbCBjYW5jZWxpbmcgdGhl IGN1cnJlbnQgdGFibGUncyB2YWN1dW07IFNJR1RFUk0KLQkgKiBtZWFucyBhYm9ydCBhbmQg ZXhpdCBjbGVhbmx5LCBhbmQgU0lHUVVJVCBtZWFucyBhYmFuZG9uIHNoaXAuCi0JICovCi0J cHFzaWduYWwoU0lHSU5ULCBTdGF0ZW1lbnRDYW5jZWxIYW5kbGVyKTsKLQlwcXNpZ25hbChT SUdURVJNLCBkaWUpOwotCS8qIFNJR1FVSVQgaGFuZGxlciB3YXMgYWxyZWFkeSBzZXQgdXAg YnkgSW5pdFBvc3RtYXN0ZXJDaGlsZCAqLwogCiAJSW5pdGlhbGl6ZVRpbWVvdXRzKCk7CQkv KiBlc3RhYmxpc2hlcyBTSUdBTFJNIGhhbmRsZXIgKi8KIAotCXBxc2lnbmFsKFNJR1BJUEUs IFNJR19JR04pOwotCXBxc2lnbmFsKFNJR1VTUjEsIHByb2NzaWduYWxfc2lndXNyMV9oYW5k bGVyKTsKLQlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdGUEUs IEZsb2F0RXhjZXB0aW9uSGFuZGxlcik7CisJU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVy cygpOworCisJLyoKKwkgKiBJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMIChTSUdJTlQpIGlzIHVz ZWQgdG8gY2FuY2VsIHRoZSBjdXJyZW50IHRhYmxlJ3MKKwkgKiB2YWN1dW07IElOVEVSUlVQ VF9URVJNSU5BVCAoU0lHVEVSTSkgbWVhbnMgYWJvcnQgYW5kIGV4aXQgY2xlYW5seSBhcwor CSAqIHVzdWFsLgorCSAqLworCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX1FVRVJZ X0NBTkNFTCwgUHJvY2Vzc1F1ZXJ5Q2FuY2VsSW50ZXJydXB0KTsKKwlFbmFibGVJbnRlcnJ1 cHQoSU5URVJSVVBUX1FVRVJZX0NBTkNFTCk7CiAKIAkvKgogCSAqIENyZWF0ZSBhIHBlci1i YWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gIFdlIG11c3QgZG8gdGhp cwpAQCAtMTU0NSwxMiArMTUzMyw3IEBAIEF1dG9WYWNXb3JrZXJNYWluKGNvbnN0IHZvaWQg KnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCS8qIHdha2UgdXAg dGhlIGxhdW5jaGVyICovCiAJCWxhdW5jaGVyUHJvYyA9IHBnX2F0b21pY19yZWFkX3UzMigm UHJvY0dsb2JhbC0+YXZMYXVuY2hlclByb2MpOwogCQlpZiAobGF1bmNoZXJQcm9jICE9IElO VkFMSURfUFJPQ19OVU1CRVIpCi0JCXsKLQkJCWludAkJCXBpZCA9IEdldFBHUHJvY0J5TnVt YmVyKGxhdW5jaGVyUHJvYyktPnBpZDsKLQotCQkJaWYgKHBpZCAhPSAwKQotCQkJCWtpbGwo cGlkLCBTSUdVU1IyKTsKLQkJfQorCQkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfQVVUT1ZB Q1VVTV9XT1JLRVJfRklOSVNIRUQsIGxhdW5jaGVyUHJvYyk7CiAJfQogCWVsc2UKIAl7CkBA IC0yMjkyLDkgKzIyNzUsOCBAQCBkb19hdXRvdmFjdXVtKHZvaWQpCiAJCS8qCiAJCSAqIENo ZWNrIGZvciBjb25maWcgY2hhbmdlcyBiZWZvcmUgcHJvY2Vzc2luZyBlYWNoIGNvbGxlY3Rl ZCB0YWJsZS4KIAkJICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQorCQlpZiAoQ29u c3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCiAJCXsKLQkJCUNvbmZp Z1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdI VVApOwogCiAJCQkvKgpAQCAtMjQ1Miw3ICsyNDM0LDcgQEAgZG9fYXV0b3ZhY3V1bSh2b2lk KQogCQkJICogY3VycmVudCB0YWJsZSAod2UncmUgZG9uZSB3aXRoIGl0LCBzbyBpdCB3b3Vs ZCBtYWtlIG5vIHNlbnNlIHRvCiAJCQkgKiBjYW5jZWwgYXQgdGhpcyBwb2ludC4pCiAJCQkg Ki8KLQkJCVF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOworCQkJQ2xlYXJJbnRlcnJ1cHQo SU5URVJSVVBUX1FVRVJZX0NBTkNFTCk7CiAJCX0KIAkJUEdfQ0FUQ0goKTsKIAkJewpAQCAt MjU0MSw5ICsyNTIzLDggQEAgZGVsZXRlZDoKIAkJICogQ2hlY2sgZm9yIGNvbmZpZyBjaGFu Z2VzIGJlZm9yZSBhY3F1aXJpbmcgbG9jayBmb3IgZnVydGhlciBqb2JzLgogCQkgKi8KIAkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJ CWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJewot CQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUo UEdDX1NJR0hVUCk7CiAJCQlWYWN1dW1VcGRhdGVDb3N0cygpOwogCQl9CkBAIC0yNjY1LDcg KzI2NDYsNyBAQCBwZXJmb3JtX3dvcmtfaXRlbShBdXRvVmFjdXVtV29ya0l0ZW0gKndvcmtp dGVtKQogCQkgKiAod2UncmUgZG9uZSB3aXRoIGl0LCBzbyBpdCB3b3VsZCBtYWtlIG5vIHNl bnNlIHRvIGNhbmNlbCBhdCB0aGlzCiAJCSAqIHBvaW50LikKIAkJICovCi0JCVF1ZXJ5Q2Fu Y2VsUGVuZGluZyA9IGZhbHNlOworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfUVVFUllf Q0FOQ0VMKTsKIAl9CiAJUEdfQ0FUQ0goKTsKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4 cHJvY2Vzcy5jCmluZGV4IDhlYTgwMGMwYmJkLi5lZTE2ZTljYjAyNSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDx1 bmlzdGQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KIAotI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJvY2Vz cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCkBAIC0yMyw2 ICsyMiw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRl ICJ1dGlscy9yZXNvd25lci5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogCiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCAxMzNhZjVhZWU5Ny4uMjBiN2Jh NzM3YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTEzLDYgKzEzLDgg QEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVs LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgorI2luY2x1ZGUgImlwYy9zaWduYWxf aGFuZGxlcnMuaCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpAQCAtMjIsMTIgKzI0LDEwIEBACiAj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCi0j aW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCi0jaW5jbHVkZSAic3RvcmFn ZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUg InRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9hc2NpaS5oIgpAQCAtNzksNiAr NzksOCBAQCB0eXBlZGVmIHN0cnVjdCBCYWNrZ3JvdW5kV29ya2VyU2xvdAogCXBpZF90CQlw aWQ7CQkJLyogSW52YWxpZFBpZCA9IG5vdCBzdGFydGVkIHlldDsgMCA9IGRlYWQgKi8KIAl1 aW50NjQJCWdlbmVyYXRpb247CQkvKiBpbmNyZW1lbnRlZCB3aGVuIHNsb3QgaXMgcmVjeWNs ZWQgKi8KIAlCYWNrZ3JvdW5kV29ya2VyIHdvcmtlcjsKKwlpbnQJCQlub3RpZnlfcG1jaGls ZDsKKwlQcm9jTnVtYmVyCW5vdGlmeV9wcm9jX251bWJlcjsKIH0gQmFja2dyb3VuZFdvcmtl clNsb3Q7CiAKIC8qCkBAIC0yMDIsOCArMjA0LDkgQEAgQmFja2dyb3VuZFdvcmtlclNobWVt SW5pdCh2b2lkKQogCQkJc2xvdC0+dGVybWluYXRlID0gZmFsc2U7CiAJCQlzbG90LT5waWQg PSBJbnZhbGlkUGlkOwogCQkJc2xvdC0+Z2VuZXJhdGlvbiA9IDA7CisJCQlzbG90LT5ub3Rp ZnlfcG1jaGlsZCA9IDA7CisJCQlzbG90LT5ub3RpZnlfcHJvY19udW1iZXIgPSBJTlZBTElE X1BST0NfTlVNQkVSOwogCQkJcnctPnJ3X3NobWVtX3Nsb3QgPSBzbG90bm87Ci0JCQlydy0+ cndfd29ya2VyLmJnd19ub3RpZnlfcGlkID0gMDsJLyogbWlnaHQgYmUgcmVpbml0IGFmdGVy IGNyYXNoICovCiAJCQltZW1jcHkoJnNsb3QtPndvcmtlciwgJnJ3LT5yd193b3JrZXIsIHNp emVvZihCYWNrZ3JvdW5kV29ya2VyKSk7CiAJCQkrK3Nsb3RubzsKIAkJfQpAQCAtMjQ0LDYg KzI0NywxOSBAQCBGaW5kUmVnaXN0ZXJlZFdvcmtlckJ5U2xvdE51bWJlcihpbnQgc2xvdG5v KQogCXJldHVybiBOVUxMOwogfQogCitQcm9jTnVtYmVyCitHZXROb3RpZnlQcm9jTnVtYmVy Rm9yUmVnaXN0ZXJlZFdvcmtlcihSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQoreworCUJhY2tn cm91bmRXb3JrZXJTbG90ICpzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90W3J3 LT5yd19zaG1lbV9zbG90XTsKKworCS8qCisJICogRklYTUU6IGJlIGV4dHJhIHBhcmFub2lk IGFuZCBzYW5pdHkgY2hlY2sgdGhlIHByb2MgbnVtYmVyLCBzaW5jZSB0aGlzCisJICogcnVu cyBpbiB0aGUgcG9zdG1hc3RlcgorCSAqLworCisJcmV0dXJuIHNsb3QtPm5vdGlmeV9wcm9j X251bWJlcjsKK30KKwogLyoKICAqIE5vdGljZSBjaGFuZ2VzIHRvIHNoYXJlZCBtZW1vcnkg bWFkZSBieSBvdGhlciBiYWNrZW5kcy4KICAqIEFjY2VwdCBuZXcgd29ya2VyIHJlcXVlc3Rz IG9ubHkgaWYgYWxsb3dfbmV3X3dvcmtlcnMgaXMgdHJ1ZS4KQEAgLTMyNSwyMCArMzQxLDIw IEBAIEJhY2tncm91bmRXb3JrZXJTdGF0ZUNoYW5nZShib29sIGFsbG93X25ld193b3JrZXJz KQogCQkvKgogCQkgKiBJZiB0aGUgd29ya2VyIGlzIG1hcmtlZCBmb3IgdGVybWluYXRpb24s IHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0IHRvCiAJCSAqIHRoZSByZWdpc3RlcmVkIHdvcmtl cnMgbGlzdDsgd2UgY2FuIGp1c3QgZnJlZSB0aGUgc2xvdC4gSG93ZXZlciwgaWYKLQkJICog Ymd3X25vdGlmeV9waWQgaXMgc2V0LCB0aGUgcHJvY2VzcyB0aGF0IHJlZ2lzdGVyZWQgdGhl IHdvcmtlciBtYXkKLQkJICogbmVlZCB0byBrbm93IHRoYXQgd2UndmUgcHJvY2Vzc2VkIHRo ZSB0ZXJtaW5hdGUgcmVxdWVzdCwgc28gYmUgc3VyZQotCQkgKiB0byBzaWduYWwgaXQuCisJ CSAqIGJnd19ub3RpZnlfcHJvY19udW1iZXIgaXMgc2V0LCB0aGUgcHJvY2VzcyB0aGF0IHJl Z2lzdGVyZWQgdGhlCisJCSAqIHdvcmtlciBtYXkgbmVlZCB0byBrbm93IHRoYXQgd2UndmUg cHJvY2Vzc2VkIHRoZSB0ZXJtaW5hdGUgcmVxdWVzdCwKKwkJICogc28gYmUgc3VyZSB0byBz aWduYWwgaXQuCiAJCSAqLwogCQlpZiAoc2xvdC0+dGVybWluYXRlKQogCQl7Ci0JCQlpbnQJ CQlub3RpZnlfcGlkOworCQkJUHJvY051bWJlcglub3RpZnlfcHJvY19udW1iZXI7CiAKIAkJ CS8qCiAJCQkgKiBXZSBuZWVkIGEgbWVtb3J5IGJhcnJpZXIgaGVyZSB0byBtYWtlIHN1cmUg dGhhdCB0aGUgbG9hZCBvZgotCQkJICogYmd3X25vdGlmeV9waWQgYW5kIHRoZSB1cGRhdGUg b2YgcGFyYWxsZWxfdGVybWluYXRlX2NvdW50Ci0JCQkgKiBjb21wbGV0ZSBiZWZvcmUgdGhl IHN0b3JlIHRvIGluX3VzZS4KKwkJCSAqIGJnd19ub3RpZnlfcHJvY19udW1iZXIgYW5kIHRo ZSB1cGRhdGUgb2YKKwkJCSAqIHBhcmFsbGVsX3Rlcm1pbmF0ZV9jb3VudCBjb21wbGV0ZSBi ZWZvcmUgdGhlIHN0b3JlIHRvIGluX3VzZS4KIAkJCSAqLwotCQkJbm90aWZ5X3BpZCA9IHNs b3QtPndvcmtlci5iZ3dfbm90aWZ5X3BpZDsKKwkJCW5vdGlmeV9wcm9jX251bWJlciA9IHNs b3QtPm5vdGlmeV9wcm9jX251bWJlcjsKIAkJCWlmICgoc2xvdC0+d29ya2VyLmJnd19mbGFn cyAmIEJHV09SS0VSX0NMQVNTX1BBUkFMTEVMKSAhPSAwKQogCQkJCUJhY2tncm91bmRXb3Jr ZXJEYXRhLT5wYXJhbGxlbF90ZXJtaW5hdGVfY291bnQrKzsKIAkJCXNsb3QtPnBpZCA9IDA7 CkBAIC0zNDYsOCArMzYyLDggQEAgQmFja2dyb3VuZFdvcmtlclN0YXRlQ2hhbmdlKGJvb2wg YWxsb3dfbmV3X3dvcmtlcnMpCiAJCQlwZ19tZW1vcnlfYmFycmllcigpOwogCQkJc2xvdC0+ aW5fdXNlID0gZmFsc2U7CiAKLQkJCWlmIChub3RpZnlfcGlkICE9IDApCi0JCQkJa2lsbChu b3RpZnlfcGlkLCBTSUdVU1IxKTsKKwkJCWlmIChub3RpZnlfcHJvY19udW1iZXIgIT0gSU5W QUxJRF9QUk9DX05VTUJFUikKKwkJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dB S0VVUCwgbm90aWZ5X3Byb2NfbnVtYmVyKTsKIAogCQkJY29udGludWU7CiAJCX0KQEAgLTM5 MywyMyArNDA5LDYgQEAgQmFja2dyb3VuZFdvcmtlclN0YXRlQ2hhbmdlKGJvb2wgYWxsb3df bmV3X3dvcmtlcnMpCiAJCXJ3LT5yd193b3JrZXIuYmd3X21haW5fYXJnID0gc2xvdC0+d29y a2VyLmJnd19tYWluX2FyZzsKIAkJbWVtY3B5KHJ3LT5yd193b3JrZXIuYmd3X2V4dHJhLCBz bG90LT53b3JrZXIuYmd3X2V4dHJhLCBCR1dfRVhUUkFMRU4pOwogCi0JCS8qCi0JCSAqIENv cHkgdGhlIFBJRCB0byBiZSBub3RpZmllZCBhYm91dCBzdGF0ZSBjaGFuZ2VzLCBidXQgb25s eSBpZiB0aGUKLQkJICogcG9zdG1hc3RlciBrbm93cyBhYm91dCBhIGJhY2tlbmQgd2l0aCB0 aGF0IFBJRC4gIEl0IGlzbid0IGFuIGVycm9yCi0JCSAqIGlmIHRoZSBwb3N0bWFzdGVyIGRv ZXNuJ3Qga25vdyBhYm91dCB0aGUgUElELCBiZWNhdXNlIHRoZSBiYWNrZW5kCi0JCSAqIHRo YXQgcmVxdWVzdGVkIHRoZSB3b3JrZXIgY291bGQgaGF2ZSBkaWVkIChvciBiZWVuIGtpbGxl ZCkganVzdAotCQkgKiBhZnRlciBkb2luZyBzby4gIE5vbmV0aGVsZXNzLCBhdCBsZWFzdCB1 bnRpbCB3ZSBnZXQgc29tZSBleHBlcmllbmNlCi0JCSAqIHdpdGggaG93IHRoaXMgcGxheXMg b3V0IGluIHRoZSB3aWxkLCBsb2cgYSBtZXNzYWdlIGF0IGEgcmVsYXRpdmUKLQkJICogaGln aCBkZWJ1ZyBsZXZlbC4KLQkJICovCi0JCXJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQg PSBzbG90LT53b3JrZXIuYmd3X25vdGlmeV9waWQ7Ci0JCWlmICghUG9zdG1hc3Rlck1hcmtQ SURGb3JXb3JrZXJOb3RpZnkocnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZCkpCi0JCXsK LQkJCWVsb2coREVCVUcxLCAid29ya2VyIG5vdGlmaWNhdGlvbiBQSUQgJWQgaXMgbm90IHZh bGlkIiwKLQkJCQkgKGludCkgcnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZCk7Ci0JCQly dy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlkID0gMDsKLQkJfQotCiAJCS8qIEluaXRpYWxp emUgcG9zdG1hc3RlciBib29ra2VlcGluZy4gKi8KIAkJcnctPnJ3X3BpZCA9IDA7CiAJCXJ3 LT5yd19jcmFzaGVkX2F0ID0gMDsKQEAgLTQzMSw3ICs0MzAsNyBAQCBCYWNrZ3JvdW5kV29y a2VyU3RhdGVDaGFuZ2UoYm9vbCBhbGxvd19uZXdfd29ya2VycykKICAqIE5PVEU6IFRoZSBl bnRyeSBpcyB1bmxpbmtlZCBmcm9tIEJhY2tncm91bmRXb3JrZXJMaXN0LiAgSWYgdGhlIGNh bGxlciBpcwogICogaXRlcmF0aW5nIHRocm91Z2ggaXQsIGJldHRlciB1c2UgYSBtdXRhYmxl IGl0ZXJhdG9yIQogICoKLSAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5n IGJnd19ub3RpZnlfcGlkLCBpZiBhcHByb3ByaWF0ZS4KKyAqIENhbGxlciBpcyByZXNwb25z aWJsZSBmb3Igbm90aWZ5aW5nIGJnd19ub3RpZnlfcHJvY19udW1iZXIsIGlmIGFwcHJvcHJp YXRlLgogICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBpbnZva2VkIG9ubHkgaW4gdGhl IHBvc3RtYXN0ZXIuCiAgKi8KQEAgLTQ3Niw4ICs0NzUsOCBAQCBSZXBvcnRCYWNrZ3JvdW5k V29ya2VyUElEKFJlZ2lzdGVyZWRCZ1dvcmtlciAqcncpCiAJc2xvdCA9ICZCYWNrZ3JvdW5k V29ya2VyRGF0YS0+c2xvdFtydy0+cndfc2htZW1fc2xvdF07CiAJc2xvdC0+cGlkID0gcnct PnJ3X3BpZDsKIAotCWlmIChydy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlkICE9IDApCi0J CWtpbGwocnctPnJ3X3dvcmtlci5iZ3dfbm90aWZ5X3BpZCwgU0lHVVNSMSk7CisJaWYgKHNs b3QtPm5vdGlmeV9wcm9jX251bWJlciAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQorCQlTZW5k SW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgc2xvdC0+bm90aWZ5X3Byb2NfbnVt YmVyKTsKIH0KIAogLyoKQEAgLTQ5MywxMiArNDkyLDEyIEBAIHZvaWQKIFJlcG9ydEJhY2tn cm91bmRXb3JrZXJFeGl0KFJlZ2lzdGVyZWRCZ1dvcmtlciAqcncpCiB7CiAJQmFja2dyb3Vu ZFdvcmtlclNsb3QgKnNsb3Q7Ci0JaW50CQkJbm90aWZ5X3BpZDsKKwlQcm9jTnVtYmVyCW5v dGlmeV9wcm9jX251bWJlcjsKIAogCUFzc2VydChydy0+cndfc2htZW1fc2xvdCA8IG1heF93 b3JrZXJfcHJvY2Vzc2VzKTsKIAlzbG90ID0gJkJhY2tncm91bmRXb3JrZXJEYXRhLT5zbG90 W3J3LT5yd19zaG1lbV9zbG90XTsKIAlzbG90LT5waWQgPSBydy0+cndfcGlkOwotCW5vdGlm eV9waWQgPSBydy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlkOworCW5vdGlmeV9wcm9jX251 bWJlciA9IHNsb3QtPm5vdGlmeV9wcm9jX251bWJlcjsKIAogCS8qCiAJICogSWYgdGhpcyB3 b3JrZXIgaXMgc2xhdGVkIGZvciBkZXJlZ2lzdHJhdGlvbiwgZG8gdGhhdCBiZWZvcmUgbm90 aWZ5aW5nCkBAIC01MTEsMjcgKzUxMCwzNCBAQCBSZXBvcnRCYWNrZ3JvdW5kV29ya2VyRXhp dChSZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KQogCQlydy0+cndfd29ya2VyLmJnd19yZXN0YXJ0 X3RpbWUgPT0gQkdXX05FVkVSX1JFU1RBUlQpCiAJCUZvcmdldEJhY2tncm91bmRXb3JrZXIo cncpOwogCi0JaWYgKG5vdGlmeV9waWQgIT0gMCkKLQkJa2lsbChub3RpZnlfcGlkLCBTSUdV U1IxKTsKKwlpZiAobm90aWZ5X3Byb2NfbnVtYmVyICE9IElOVkFMSURfUFJPQ19OVU1CRVIp CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBub3RpZnlfcHJvY19u dW1iZXIpOwogfQogCiAvKgotICogQ2FuY2VsIFNJR1VTUjEgbm90aWZpY2F0aW9ucyBmb3Ig YSBQSUQgYmVsb25naW5nIHRvIGFuIGV4aXRpbmcgYmFja2VuZC4KKyAqIENhbmNlbCBub3Rp ZmljYXRpb25zIGZvciBhIGJnd29ya2VyIGJlbG9uZ2luZyB0byBhbiBleGl0aW5nIGJhY2tl bmQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0 aGUgcG9zdG1hc3Rlci4KICAqLwogdm9pZAotQmFja2dyb3VuZFdvcmtlclN0b3BOb3RpZmlj YXRpb25zKHBpZF90IHBpZCkKK0JhY2tncm91bmRXb3JrZXJTdG9wTm90aWZpY2F0aW9ucyhp bnQgcG1jaGlsZCkKIHsKIAlkbGlzdF9pdGVyCWl0ZXI7CiAKIAlkbGlzdF9mb3JlYWNoKGl0 ZXIsICZCYWNrZ3JvdW5kV29ya2VyTGlzdCkKIAl7CiAJCVJlZ2lzdGVyZWRCZ1dvcmtlciAq cnc7CisJCUJhY2tncm91bmRXb3JrZXJTbG90ICpzbG90OwogCiAJCXJ3ID0gZGxpc3RfY29u dGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsKLQkJaWYg KHJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQgPT0gcGlkKQotCQkJcnctPnJ3X3dvcmtl ci5iZ3dfbm90aWZ5X3BpZCA9IDA7CisJCUFzc2VydChydy0+cndfc2htZW1fc2xvdCA8IG1h eF93b3JrZXJfcHJvY2Vzc2VzKTsKKwkJc2xvdCA9ICZCYWNrZ3JvdW5kV29ya2VyRGF0YS0+ c2xvdFtydy0+cndfc2htZW1fc2xvdF07CisKKwkJaWYgKHNsb3QtPm5vdGlmeV9wbWNoaWxk ID09IHBtY2hpbGQpCisJCXsKKwkJCXNsb3QtPm5vdGlmeV9wbWNoaWxkID0gMDsKKwkJCXNs b3QtPm5vdGlmeV9wcm9jX251bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7CisJCX0KIAl9 CiB9CiAKQEAgLTU2MywxNCArNTY5LDE0IEBAIEZvcmdldFVuc3RhcnRlZEJhY2tncm91bmRX b3JrZXJzKHZvaWQpCiAKIAkJLyogSWYgaXQncyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCB0aGVy ZSdzIHNvbWVvbmUgd2FpdGluZyAuLi4gKi8KIAkJaWYgKHNsb3QtPnBpZCA9PSBJbnZhbGlk UGlkICYmCi0JCQlydy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlkICE9IDApCisJCQlzbG90 LT5ub3RpZnlfcHJvY19udW1iZXIgIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKIAkJewogCQkJ LyogLi4uIHRoZW4gemFwIGl0LCBhbmQgbm90aWZ5IHRoZSB3YWl0ZXIgKi8KLQkJCWludAkJ CW5vdGlmeV9waWQgPSBydy0+cndfd29ya2VyLmJnd19ub3RpZnlfcGlkOworCQkJUHJvY051 bWJlcglub3RpZnlfcHJvY19udW1iZXIgPSBzbG90LT5ub3RpZnlfcHJvY19udW1iZXI7CiAK IAkJCUZvcmdldEJhY2tncm91bmRXb3JrZXIocncpOwotCQkJaWYgKG5vdGlmeV9waWQgIT0g MCkKLQkJCQlraWxsKG5vdGlmeV9waWQsIFNJR1VTUjEpOworCQkJaWYgKG5vdGlmeV9wcm9j X251bWJlciAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQorCQkJCVNlbmRJbnRlcnJ1cHQoSU5U RVJSVVBUX1dBSVRfV0FLRVVQLCBub3RpZnlfcHJvY19udW1iZXIpOwogCQl9CiAJfQogfQpA QCAtNjI0LDExICs2MzAsNiBAQCBSZXNldEJhY2tncm91bmRXb3JrZXJDcmFzaFRpbWVzKHZv aWQpCiAJCQkgKi8KIAkJCXJ3LT5yd19jcmFzaGVkX2F0ID0gMDsKIAkJCXJ3LT5yd19waWQg PSAwOwotCi0JCQkvKgotCQkJICogSWYgdGhlcmUgd2FzIGFueW9uZSB3YWl0aW5nIGZvciBp dCwgdGhleSdyZSBoaXN0b3J5LgotCQkJICovCi0JCQlydy0+cndfd29ya2VyLmJnd19ub3Rp ZnlfcGlkID0gMDsKIAkJfQogCX0KIH0KQEAgLTc1NiwzMiArNzU3LDI4IEBAIEJhY2tncm91 bmRXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBf ZGF0YV9sZW4pCiAJLyoKIAkgKiBTZXQgdXAgc2lnbmFsIGhhbmRsZXJzLgogCSAqLworCVNl dFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMoKTsKIAlpZiAod29ya2VyLT5iZ3dfZmxhZ3Mg JiBCR1dPUktFUl9CQUNLRU5EX0RBVEFCQVNFX0NPTk5FQ1RJT04pCiAJewogCQkvKgotCQkg KiBTSUdJTlQgaXMgdXNlZCB0byBzaWduYWwgY2FuY2VsaW5nIHRoZSBjdXJyZW50IGFjdGlv bgorCQkgKiBFbmFibGUgcXVlcnkgY2FuY2VsbGF0aW9uIGJ5IGRlZmF1bHQuIFRoZSBiYWNr Z3JvdW5kIHdvcmtlciBtYXkKKwkJICogZGlzYWJsZSBmb3IgbW9yZSBjb250cm9sIG9uIHdo ZW4gY2FuY2VsbGF0aW9ucyBhcmUgYWNjZXB0ZWQuCiAJCSAqLwotCQlwcXNpZ25hbChTSUdJ TlQsIFN0YXRlbWVudENhbmNlbEhhbmRsZXIpOwotCQlwcXNpZ25hbChTSUdVU1IxLCBwcm9j c2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7Ci0JCXBxc2lnbmFsKFNJR0ZQRSwgRmxvYXRFeGNl cHRpb25IYW5kbGVyKTsKKwkJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfUVVFUllf Q0FOQ0VMLCBQcm9jZXNzUXVlcnlDYW5jZWxJbnRlcnJ1cHQpOworCQlFbmFibGVJbnRlcnJ1 cHQoSU5URVJSVVBUX1FVRVJZX0NBTkNFTCk7CiAKLQkJLyogWFhYIEFueSBvdGhlciBoYW5k bGVycyBuZWVkZWQgaGVyZT8gKi8KKwkJLyogbGlrZSBpbiByZWd1bGFyIGJhY2tlbmRzICov CisJCXBxc2lnbmFsKFNJR0ZQRSwgRmxvYXRFeGNlcHRpb25IYW5kbGVyKTsKIAl9CiAJZWxz ZQogCXsKKwkJLyogbm8gY2FuY2VsbGF0aW9uIGluIGJhY2tlbmRzIHRoYXQgZG9uJ3QgcnVu IHF1ZXJpZXMgKi8KIAkJcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKLQkJcHFzaWduYWwo U0lHVVNSMSwgU0lHX0lHTik7CiAJCXBxc2lnbmFsKFNJR0ZQRSwgU0lHX0lHTik7CiAJfQot CXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7Ci0JLyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJl YWR5IHNldCB1cCBieSBJbml0UG9zdG1hc3RlckNoaWxkICovCi0JcHFzaWduYWwoU0lHSFVQ LCBTSUdfSUdOKTsKIAogCUluaXRpYWxpemVUaW1lb3V0cygpOwkJLyogZXN0YWJsaXNoZXMg U0lHQUxSTSBoYW5kbGVyICovCiAKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlw cXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKLQogCS8qCiAJICogSWYgYW4gZXhjZXB0aW9u IGlzIGVuY291bnRlcmVkLCBwcm9jZXNzaW5nIHJlc3VtZXMgaGVyZS4KIAkgKgpAQCAtOTg3 LDE1ICs5ODQsNiBAQCBSZWdpc3RlckJhY2tncm91bmRXb3JrZXIoQmFja2dyb3VuZFdvcmtl ciAqd29ya2VyKQogCWlmICghU2FuaXR5Q2hlY2tCYWNrZ3JvdW5kV29ya2VyKHdvcmtlciwg TE9HKSkKIAkJcmV0dXJuOwogCi0JaWYgKHdvcmtlci0+Ymd3X25vdGlmeV9waWQgIT0gMCkK LQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKLQkJCQkgZXJybXNnKCJiYWNrZ3JvdW5kIHdvcmtlciBcIiVzXCI6IG9u bHkgZHluYW1pYyBiYWNrZ3JvdW5kIHdvcmtlcnMgY2FuIHJlcXVlc3Qgbm90aWZpY2F0aW9u IiwKLQkJCQkJCXdvcmtlci0+Ymd3X25hbWUpKSk7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKgog CSAqIEVuZm9yY2UgbWF4aW11bSBudW1iZXIgb2Ygd29ya2Vycy4gIE5vdGUgdGhpcyBpcyBv dmVybHkgcmVzdHJpY3RpdmU6IHdlCiAJICogY291bGQgYWxsb3cgbW9yZSBub24tc2htZW0t Y29ubmVjdGVkIHdvcmtlcnMsIGJlY2F1c2UgdGhlc2UgZG9uJ3QgY291bnQKQEAgLTExMTEs NiArMTA5OSwyNSBAQCBSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKEJhY2tncm91 bmRXb3JrZXIgKndvcmtlciwKIAkJCWlmIChwYXJhbGxlbCkKIAkJCQlCYWNrZ3JvdW5kV29y a2VyRGF0YS0+cGFyYWxsZWxfcmVnaXN0ZXJfY291bnQrKzsKIAorCQkJaWYgKChzbG90LT53 b3JrZXIuYmd3X2ZsYWdzICYgQkdXT1JLRVJfU0hNRU1fQUNDRVNTKSAhPSAwICYmCisJCQkJ KHNsb3QtPndvcmtlci5iZ3dfZmxhZ3MgJiBCR1dPUktFUl9OT19OT1RJRlkpID09IDApCisJ CQl7CisJCQkJLyoKKwkJCQkgKiBTZXQgbm90aWZ5X3Byb2NfbnVtYmVyIHNvIHRoYXQgcG9z dG1hc3RlciB3aWxsIHNlbmQgdXMgYW4KKwkJCQkgKiBpbnRlcnJ1cHQuIEFsc28gcmVtZW1i ZXIgdGhlIHBtY2hpbGQgc2xvdCBudW1iZXI7CisJCQkJICogcG9zdG1hc3RlciBuZWVkcyBp dCB0byBkZXRlY3Qgd2hlbiB3ZSBleGl0LCB0byBkaXNhcm0gdGhlCisJCQkJICogbm90aWZp Y2F0aW9uLgorCQkJCSAqLworCQkJCXNsb3QtPm5vdGlmeV9wbWNoaWxkID0gTXlQTUNoaWxk U2xvdDsKKwkJCQlzbG90LT5ub3RpZnlfcHJvY19udW1iZXIgPSBNeVByb2NOdW1iZXI7CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogTm8gbm90aWZpY2F0aW9ucy4gKi8KKwkJCQlz bG90LT5ub3RpZnlfcG1jaGlsZCA9IDA7CisJCQkJc2xvdC0+bm90aWZ5X3Byb2NfbnVtYmVy ID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJCX0KKwogCQkJLyoKIAkJCSAqIE1ha2Ugc3Vy ZSBwb3N0bWFzdGVyIGRvZXNuJ3Qgc2VlIHRoZSBzbG90IGFzIGluIHVzZSBiZWZvcmUgaXQK IAkJCSAqIHNlZXMgdGhlIG5ldyBjb250ZW50cy4KQEAgLTEyMTEsOCArMTIxOCw5IEBAIEdl dEJhY2tncm91bmRXb3JrZXJQaWQoQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlLCBw aWRfdCAqcGlkcCkKICAqIEJHV0hfUE9TVE1BU1RFUl9ESUVELCBzaW5jZSBpdCB0aGF0IGNh c2Ugd2Uga25vdyB0aGF0IHN0YXJ0dXAgd2lsbCBub3QKICAqIHRha2UgcGxhY2UuCiAgKgot ICogVGhlIGNhbGxlciAqbXVzdCogaGF2ZSBzZXQgb3VyIFBJRCBhcyB0aGUgd29ya2VyJ3Mg Ymd3X25vdGlmeV9waWQsCi0gKiBlbHNlIHdlIHdpbGwgbm90IGJlIGF3b2tlbiBwcm9tcHRs eSB3aGVuIHRoZSB3b3JrZXIncyBzdGF0ZSBjaGFuZ2VzLgorICogVGhpcyB3b3JrcyBvbmx5 IGlmIHRoZSB3b3JrZXIgd2FzIHJlZ2lzdGVyZWQgd2l0aCBCR1dPUktFUl9TSE1FTV9BQ0NF U1MgYW5kCisgKiB3aXRob3V0IEJHV09SS0VSX05PX05PVElGWSwgZWxzZSB3ZSB3aWxsIG5v dCBiZSBhd29rZW4gcHJvbXB0bHkgd2hlbiB0aGUKKyAqIHdvcmtlcidzIHN0YXRlIGNoYW5n ZXMuCiAgKi8KIEJnd0hhbmRsZVN0YXR1cwogV2FpdEZvckJhY2tncm91bmRXb3JrZXJTdGFy dHVwKEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRsZSwgcGlkX3QgKnBpZHApCkBAIC0x MjMyLDkgKzEyNDAsOSBAQCBXYWl0Rm9yQmFja2dyb3VuZFdvcmtlclN0YXJ0dXAoQmFja2dy b3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlLCBwaWRfdCAqcGlkcCkKIAkJaWYgKHN0YXR1cyAh PSBCR1dIX05PVF9ZRVRfU1RBUlRFRCkKIAkJCWJyZWFrOwogCi0JCXJjID0gV2FpdExhdGNo KE15TGF0Y2gsCi0JCQkJCSAgIFdMX0xBVENIX1NFVCB8IFdMX1BPU1RNQVNURVJfREVBVEgs IDAsCi0JCQkJCSAgIFdBSVRfRVZFTlRfQkdXT1JLRVJfU1RBUlRVUCk7CisJCXJjID0gV2Fp dEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FL RVVQLAorCQkJCQkJICAgV0xfSU5URVJSVVBUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSCwgMCwK KwkJCQkJCSAgIFdBSVRfRVZFTlRfQkdXT1JLRVJfU1RBUlRVUCk7CiAKIAkJaWYgKHJjICYg V0xfUE9TVE1BU1RFUl9ERUFUSCkKIAkJewpAQCAtMTI0Miw3ICsxMjUwLDcgQEAgV2FpdEZv ckJhY2tncm91bmRXb3JrZXJTdGFydHVwKEJhY2tncm91bmRXb3JrZXJIYW5kbGUgKmhhbmRs ZSwgcGlkX3QgKnBpZHApCiAJCQlicmVhazsKIAkJfQogCi0JCVJlc2V0TGF0Y2goTXlMYXRj aCk7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJfQogCiAJ cmV0dXJuIHN0YXR1czsKQEAgLTEyNTYsOCArMTI2NCw5IEBAIFdhaXRGb3JCYWNrZ3JvdW5k V29ya2VyU3RhcnR1cChCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUsIHBpZF90ICpw aWRwKQogICogdXAgYW5kIHJldHVybiBCR1dIX1BPU1RNQVNURVJfRElFRCwgYmVjYXVzZSBp dCdzIHRoZSBwb3N0bWFzdGVyIHRoYXQKICAqIG5vdGlmaWVzIHVzIHdoZW4gYSB3b3JrZXIn cyBzdGF0ZSBjaGFuZ2VzLgogICoKLSAqIFRoZSBjYWxsZXIgKm11c3QqIGhhdmUgc2V0IG91 ciBQSUQgYXMgdGhlIHdvcmtlcidzIGJnd19ub3RpZnlfcGlkLAotICogZWxzZSB3ZSB3aWxs IG5vdCBiZSBhd29rZW4gcHJvbXB0bHkgd2hlbiB0aGUgd29ya2VyJ3Mgc3RhdGUgY2hhbmdl cy4KKyAqIFRoaXMgd29ya3Mgb25seSBpZiB0aGUgd29ya2VyIHdhcyByZWdpc3RlcmVkIHdp dGggQkdXT1JLRVJfU0hNRU1fQUNDRVNTIGFuZAorICogd2l0aG91dCBCR1dPUktFUl9OT19O T1RJRlksIGVsc2Ugd2Ugd2lsbCBub3QgYmUgYXdva2VuIHByb21wdGx5IHdoZW4gdGhlCisg KiB3b3JrZXIncyBzdGF0ZSBjaGFuZ2VzLgogICovCiBCZ3dIYW5kbGVTdGF0dXMKIFdhaXRG b3JCYWNrZ3JvdW5kV29ya2VyU2h1dGRvd24oQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFu ZGxlKQpAQCAtMTI3NSw5ICsxMjg0LDkgQEAgV2FpdEZvckJhY2tncm91bmRXb3JrZXJTaHV0 ZG93bihCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUpCiAJCWlmIChzdGF0dXMgPT0g QkdXSF9TVE9QUEVEKQogCQkJYnJlYWs7CiAKLQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwK LQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSCwgMCwKLQkJCQkJ ICAgV0FJVF9FVkVOVF9CR1dPUktFUl9TSFVURE9XTik7CisJCXJjID0gV2FpdEludGVycnVw dChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJ CQkJICAgV0xfSU5URVJSVVBUIHwgV0xfUE9TVE1BU1RFUl9ERUFUSCwgMCwKKwkJCQkJCSAg IFdBSVRfRVZFTlRfQkdXT1JLRVJfU0hVVERPV04pOwogCiAJCWlmIChyYyAmIFdMX1BPU1RN QVNURVJfREVBVEgpCiAJCXsKQEAgLTEyODUsNyArMTI5NCw3IEBAIFdhaXRGb3JCYWNrZ3Jv dW5kV29ya2VyU2h1dGRvd24oQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlKQogCQkJ YnJlYWs7CiAJCX0KIAotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlDbGVhckludGVycnVw dChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCX0KIAogCXJldHVybiBzdGF0dXM7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKaW5kZXggZGJkNjcwYzE2Y2MuLmE1MzU5NmQ0OWVm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKKysrIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCkBAIC0zMiwxMiArMzIsMTMgQEAK ICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNp bmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5kbGVy cy5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9j ZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgotI2luY2x1ZGUgInBv c3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW9fc3Vic3lzLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9idWZtZ3IuaCIKQEAgLTk3LDE2ICs5OCwxMSBAQCBCYWNrZ3JvdW5kV3JpdGVyTWFpbihj b25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCUF1 eGlsaWFyeVByb2Nlc3NNYWluQ29tbW9uKCk7CiAKIAkvKgotCSAqIFByb3Blcmx5IGFjY2Vw dCBvciBpZ25vcmUgc2lnbmFscyB0aGF0IG1pZ2h0IGJlIHNlbnQgdG8gdXMuCisJICogU2V0 IHVwIGludGVycnVwdCBoYW5kbGluZwogCSAqLwotCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFs SGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7Ci0JcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsK LQlwcXNpZ25hbChTSUdURVJNLCBTaWduYWxIYW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsK LQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFz dGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChT SUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3Vz cjFfaGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNSMiwgU0lHX0lHTik7CisJU2V0U3RhbmRh cmRJbnRlcnJ1cHRIYW5kbGVycygpOworCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBU X1RFUk1JTkFURSwgUHJvY2Vzc0F1eFByb2Nlc3NTaHV0ZG93bkludGVycnVwdCk7CisJRW5h YmxlSW50ZXJydXB0KElOVEVSUlVQVF9DT05GSUdfUkVMT0FEKTsKIAogCS8qCiAJICogV2Ug anVzdCBzdGFydGVkLCBhc3N1bWUgdGhlcmUgaGFzIGJlZW4gZWl0aGVyIGEgc2h1dGRvd24g b3IKQEAgLTIyMCw5ICsyMTYsOSBAQCBCYWNrZ3JvdW5kV3JpdGVyTWFpbihjb25zdCB2b2lk ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQlpbnQJCQlyYzsK IAogCQkvKiBDbGVhciBhbnkgYWxyZWFkeS1wZW5kaW5nIHdha2V1cHMgKi8KLQkJUmVzZXRM YXRjaChNeUxhdGNoKTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQ KTsKIAotCQlQcm9jZXNzTWFpbkxvb3BJbnRlcnJ1cHRzKCk7CisJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CiAKIAkJLyoKIAkJICogRG8gb25lIGN5Y2xlIG9mIGRpcnR5LWJ1ZmZlciB3 cml0aW5nLgpAQCAtMjk1LDIyICsyOTEsMjIgQEAgQmFja2dyb3VuZFdyaXRlck1haW4oY29u c3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJICog d2lsbCBjYWxsIGl0IGV2ZXJ5IEJnV3JpdGVyRGVsYXkgbXNlYy4gIFdoaWxlIGl0J3Mgbm90 IGNyaXRpY2FsIGZvcgogCQkgKiBjb3JyZWN0bmVzcyB0aGF0IHRoYXQgYmUgZXhhY3QsIHRo ZSBmZWVkYmFjayBsb29wIG1pZ2h0IG1pc2JlaGF2ZQogCQkgKiBpZiB3ZSBzdHJheSB0b28g ZmFyIGZyb20gdGhhdC4gIEhlbmNlLCBhdm9pZCBsb2FkaW5nIHRoaXMgcHJvY2VzcwotCQkg KiBkb3duIHdpdGggbGF0Y2ggZXZlbnRzIHRoYXQgYXJlIGxpa2VseSB0byBoYXBwZW4gZnJl cXVlbnRseSBkdXJpbmcKLQkJICogbm9ybWFsIG9wZXJhdGlvbi4KKwkJICogZG93biB3aXRo IGludGVycnVwdCBldmVudHMgdGhhdCBhcmUgbGlrZWx5IHRvIGhhcHBlbiBmcmVxdWVudGx5 CisJCSAqIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLgogCQkgKi8KLQkJcmMgPSBXYWl0TGF0 Y2goTXlMYXRjaCwKLQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsCi0JCQkJCSAgIEJnV3JpdGVyRGVsYXkgLyogbXMgKi8gLCBXQUlU X0VWRU5UX0JHV1JJVEVSX01BSU4pOworCQlyYyA9IFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJ bnRlcnJ1cHRzTWFzaywKKwkJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBX TF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJICAgQmdXcml0ZXJEZWxheSAvKiBtcyAqLyAs IFdBSVRfRVZFTlRfQkdXUklURVJfTUFJTik7CiAKIAkJLyoKLQkJICogSWYgbm8gbGF0Y2gg ZXZlbnQgYW5kIEJnQnVmZmVyU3luYyBzYXlzIG5vdGhpbmcncyBoYXBwZW5pbmcsIGV4dGVu ZAorCQkgKiBJZiBubyBpbnRlcnJ1cHQgYW5kIEJnQnVmZmVyU3luYyBzYXlzIG5vdGhpbmcn cyBoYXBwZW5pbmcsIGV4dGVuZAogCQkgKiB0aGUgc2xlZXAgaW4gImhpYmVybmF0aW9uIiBt b2RlLCB3aGVyZSB3ZSBzbGVlcCBmb3IgbXVjaCBsb25nZXIKIAkJICogdGhhbiBiZ3dyaXRl cl9kZWxheSBzYXlzLiAgRmV3ZXIgd2FrZXVwcyBzYXZlIGVsZWN0cmljaXR5LiAgV2hlbiBh Ci0JCSAqIGJhY2tlbmQgc3RhcnRzIHVzaW5nIGJ1ZmZlcnMgYWdhaW4sIGl0IHdpbGwgd2Fr ZSB1cyB1cCBieSBzZXR0aW5nCi0JCSAqIG91ciBsYXRjaC4gIEJlY2F1c2UgdGhlIGV4dHJh IHNsZWVwIHdpbGwgcGVyc2lzdCBvbmx5IGFzIGxvbmcgYXMgbm8KLQkJICogYnVmZmVyIGFs bG9jYXRpb25zIGhhcHBlbiwgdGhpcyBzaG91bGQgbm90IGRpc3RvcnQgdGhlIGJlaGF2aW9y IG9mCi0JCSAqIEJnQnVmZmVyU3luYydzIGNvbnRyb2wgbG9vcCB0b28gYmFkbHk7IGVzc2Vu dGlhbGx5LCBpdCB3aWxsIHRoaW5rCi0JCSAqIHRoYXQgdGhlIHN5c3RlbS13aWRlIGlkbGUg aW50ZXJ2YWwgZGlkbid0IGV4aXN0LgorCQkgKiBiYWNrZW5kIHN0YXJ0cyB1c2luZyBidWZm ZXJzIGFnYWluLCBpdCB3aWxsIHdha2UgdXMgdXAgYnkgc2VuZGluZworCQkgKiB1cyBhbiBp bnRlcnJ1cHQuICBCZWNhdXNlIHRoZSBleHRyYSBzbGVlcCB3aWxsIHBlcnNpc3Qgb25seSBh cyBsb25nCisJCSAqIGFzIG5vIGJ1ZmZlciBhbGxvY2F0aW9ucyBoYXBwZW4sIHRoaXMgc2hv dWxkIG5vdCBkaXN0b3J0IHRoZQorCQkgKiBiZWhhdmlvciBvZiBCZ0J1ZmZlclN5bmMncyBj b250cm9sIGxvb3AgdG9vIGJhZGx5OyBlc3NlbnRpYWxseSwgaXQKKwkJICogd2lsbCB0aGlu ayB0aGF0IHRoZSBzeXN0ZW0td2lkZSBpZGxlIGludGVydmFsIGRpZG4ndCBleGlzdC4KIAkJ ICoKIAkJICogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBoZXJlLCBpbiB0aGF0IGEgYmFj a2VuZCBtaWdodCBhbGxvY2F0ZSBhCiAJCSAqIGJ1ZmZlciBiZXR3ZWVuIHRoZSB0aW1lIEJn QnVmZmVyU3luYyBzYXcgdGhlIGFsbG9jIGNvdW50IGFzIHplcm8KQEAgLTMyNSwxMCArMzIx LDExIEBAIEJhY2tncm91bmRXcml0ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwg c2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQkvKiBBc2sgZm9yIG5vdGlmaWNhdGlvbiBh dCBuZXh0IGJ1ZmZlciBhbGxvY2F0aW9uICovCiAJCQlTdHJhdGVneU5vdGlmeUJnV3JpdGVy KE15UHJvY051bWJlcik7CiAJCQkvKiBTbGVlcCAuLi4gKi8KLQkJCSh2b2lkKSBXYWl0TGF0 Y2goTXlMYXRjaCwKLQkJCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsCi0JCQkJCQkJIEJnV3JpdGVyRGVsYXkgKiBISUJFUk5BVEVfRkFD VE9SLAotCQkJCQkJCSBXQUlUX0VWRU5UX0JHV1JJVEVSX0hJQkVSTkFURSk7CisJCQkodm9p ZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkJIElO VEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVP VVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCQkgQmdXcml0ZXJEZWxheSAqIEhJ QkVSTkFURV9GQUNUT1IsCisJCQkJCQkJCSBXQUlUX0VWRU5UX0JHV1JJVEVSX0hJQkVSTkFU RSk7CiAJCQkvKiBSZXNldCB0aGUgbm90aWZpY2F0aW9uIHJlcXVlc3QgaW4gY2FzZSB3ZSB0 aW1lZCBvdXQgKi8KIAkJCVN0cmF0ZWd5Tm90aWZ5QmdXcml0ZXIoLTEpOwogCQl9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwppbmRleCA5NzhhN2QwZTY0OS4uMDU0 ODcyYWFiY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2lu dGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwpAQCAt MTEsOCArMTEsMTAgQEAKICAqIGNvbmRpdGlvbi4pCiAgKgogICogVGhlIG5vcm1hbCB0ZXJt aW5hdGlvbiBzZXF1ZW5jZSBpcyB0aGF0IGNoZWNrcG9pbnRlciBpcyBpbnN0cnVjdGVkIHRv Ci0gKiBleGVjdXRlIHRoZSBzaHV0ZG93biBjaGVja3BvaW50IGJ5IFNJR0lOVC4gIEFmdGVy IHRoYXQgY2hlY2twb2ludGVyIHdhaXRzCi0gKiB0byBiZSB0ZXJtaW5hdGVkIHZpYSBTSUdV U1IyLCB3aGljaCBpbnN0cnVjdHMgdGhlIGNoZWNrcG9pbnRlciB0byBleGl0KDApLgorICog ZXhlY3V0ZSB0aGUgc2h1dGRvd24gY2hlY2twb2ludCBieSBTSUdJTlQsIHdoaWNoIHJhaXNl cyB0aGUKKyAqIElOVEVSUlVQVF9TSFVURE9XTl9YTE9HIGludGVycnVwdC4gIEFmdGVyIHRo YXQgY2hlY2twb2ludGVyIHdhaXRzCisgKiB0byBiZSB0ZXJtaW5hdGVkIHZpYSBTSUdVU1Iy LCByYWlzaW5nIElOVEVSUlVQX1RFUk1JTkFURSwgd2hpY2ggaW5zdHJ1Y3RzCisgKiB0aGUg Y2hlY2twb2ludGVyIHRvIGV4aXQoMCkuCiAgKiBBbGwgYmFja2VuZHMgbXVzdCBiZSBzdG9w cGVkIGJlZm9yZSBTSUdJTlQgb3IgU0lHVVNSMiBpcyBpc3N1ZWQhCiAgKgogICogRW1lcmdl bmN5IHRlcm1pbmF0aW9uIGlzIGJ5IFNJR1FVSVQ7IGxpa2UgYW55IGJhY2tlbmQsIHRoZSBj aGVja3BvaW50ZXIKQEAgLTQ0LDEzICs0NiwxNCBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9n cmVjb3ZlcnkuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKKyNpbmNs dWRlICJpcGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNs dWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3Mu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgiCi0jaW5jbHVkZSAicG9zdG1h c3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zeW5jcmVwLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9haW9fc3Vic3lzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZt Z3IuaCIKQEAgLTg1LDEwICs4OCwxMSBAQAogICogVGhlIGFsZ29yaXRobSBmb3IgYmFja2Vu ZHMgaXM6CiAgKgkxLiBSZWNvcmQgY3VycmVudCB2YWx1ZXMgb2YgY2twdF9mYWlsZWQgYW5k IGNrcHRfc3RhcnRlZCwgYW5kCiAgKgkgICBzZXQgcmVxdWVzdCBmbGFncywgd2hpbGUgaG9s ZGluZyBja3B0X2xjay4KLSAqCTIuIFNlbmQgc2lnbmFsIHRvIHJlcXVlc3QgY2hlY2twb2lu dC4KKyAqCTIuIFNlbmQgSU5URVJSVVBUX1dBSVRfV0FLRVVQIHRvIHdha2UgdXAgdGhlIGNo ZWNrcG9pbnRlci4KICAqCTMuIFNsZWVwIHVudGlsIGNrcHRfc3RhcnRlZCBjaGFuZ2VzLiAg Tm93IHlvdSBrbm93IGEgY2hlY2twb2ludCBoYXMKICAqCSAgIGJlZ3VuIHNpbmNlIHlvdSBz dGFydGVkIHRoaXMgYWxnb3JpdGhtIChhbHRob3VnaCAqbm90KiB0aGF0IGl0IHdhcwotICoJ ICAgc3BlY2lmaWNhbGx5IGluaXRpYXRlZCBieSB5b3VyIHNpZ25hbCksIGFuZCB0aGF0IGl0 IGlzIHVzaW5nIHlvdXIgZmxhZ3MuCisgKgkgICBzcGVjaWZpY2FsbHkgaW5pdGlhdGVkIGJ5 IHlvdXIgaW50ZXJydXB0KSwgYW5kIHRoYXQgaXQgaXMgdXNpbmcgeW91cgorICoJICAgZmxh Z3MuCiAgKgk0LiBSZWNvcmQgbmV3IHZhbHVlIG9mIGNrcHRfc3RhcnRlZC4KICAqCTUuIFNs ZWVwIHVudGlsIGNrcHRfZG9uZSA+PSBzYXZlZCB2YWx1ZSBvZiBja3B0X3N0YXJ0ZWQuICAo VXNlIG1vZHVsbwogICoJICAgYXJpdGhtZXRpYyBoZXJlIGluIGNhc2UgY291bnRlcnMgd3Jh cCBhcm91bmQuKSAgTm93IHlvdSBrbm93IGEKQEAgLTE2Myw3ICsxNjcsNiBAQCBkb3VibGUJ CUNoZWNrUG9pbnRDb21wbGV0aW9uVGFyZ2V0ID0gMC45OwogICogUHJpdmF0ZSBzdGF0ZQog ICovCiBzdGF0aWMgYm9vbCBja3B0X2FjdGl2ZSA9IGZhbHNlOwotc3RhdGljIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBTaHV0ZG93blhMT0dQZW5kaW5nID0gZmFsc2U7CiAKIC8qIHRoZXNl IHZhbHVlcyBhcmUgdmFsaWQgd2hlbiBja3B0X2FjdGl2ZSBpcyB0cnVlOiAqLwogc3RhdGlj IHBnX3RpbWVfdCBja3B0X3N0YXJ0X3RpbWU7CkBAIC0xNzUsNyArMTc4LDcgQEAgc3RhdGlj IHBnX3RpbWVfdCBsYXN0X3hsb2dfc3dpdGNoX3RpbWU7CiAKIC8qIFByb3RvdHlwZXMgZm9y IHByaXZhdGUgZnVuY3Rpb25zICovCiAKLXN0YXRpYyB2b2lkIFByb2Nlc3NDaGVja3BvaW50 ZXJJbnRlcnJ1cHRzKHZvaWQpOworc3RhdGljIHZvaWQgUHJvY2Vzc0NoZWNrcG9pbnRlckNv bmZpZ1JlbG9hZEludGVycnVwdCh2b2lkKTsKIHN0YXRpYyB2b2lkIENoZWNrQXJjaGl2ZVRp bWVvdXQodm9pZCk7CiBzdGF0aWMgYm9vbCBJc0NoZWNrcG9pbnRPblNjaGVkdWxlKGRvdWJs ZSBwcm9ncmVzcyk7CiBzdGF0aWMgYm9vbCBGYXN0Q2hlY2twb2ludFJlcXVlc3RlZCh2b2lk KTsKQEAgLTIwNSwyMiArMjA4LDI4IEBAIENoZWNrcG9pbnRlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlDaGVja3BvaW50ZXJT aG1lbS0+Y2hlY2twb2ludGVyX3BpZCA9IE15UHJvY1BpZDsKIAogCS8qCi0JICogUHJvcGVy bHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQg dXMKLQkgKgotCSAqIE5vdGU6IHdlIGRlbGliZXJhdGVseSBpZ25vcmUgU0lHVEVSTSwgYmVj YXVzZSBkdXJpbmcgYSBzdGFuZGFyZCBVbml4Ci0JICogc3lzdGVtIHNodXRkb3duIGN5Y2xl LCBpbml0IHdpbGwgU0lHVEVSTSBhbGwgcHJvY2Vzc2VzIGF0IG9uY2UuICBXZQotCSAqIHdh bnQgdG8gd2FpdCBmb3IgdGhlIGJhY2tlbmRzIHRvIGV4aXQsIHdoZXJldXBvbiB0aGUgcG9z dG1hc3RlciB3aWxsCi0JICogdGVsbCB1cyBpdCdzIG9rYXkgdG8gc2h1dCBkb3duICh2aWEg U0lHVVNSMikuCisJICogSWdub3JlIFNJR1RFUk0sIGJlY2F1c2UgZHVyaW5nIGEgc3RhbmRh cmQgVW5peCBzeXN0ZW0gc2h1dGRvd24gY3ljbGUsCisJICogaW5pdCB3aWxsIFNJR1RFUk0g YWxsIHByb2Nlc3NlcyBhdCBvbmNlLiAgV2Ugd2FudCB0byB3YWl0IGZvciB0aGUKKwkgKiBi YWNrZW5kcyB0byBleGl0LCB3aGVyZXVwb24gdGhlIHBvc3RtYXN0ZXIgd2lsbCB0ZWxsIHVz IGl0J3Mgb2theSB0bworCSAqIHNodXQgZG93biAodmlhIElOVEVSUlVQVF9TSFVURE9XTl9Y TE9HKS4KKwkgKi8KKwlwcXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKKworCS8qCisJICog UG9zdG1hc3RlciB1c2VzIFNJR0lOVCB0byBzZW5kIHVzIElOVEVSUlVQVF9TSFVURE9XTl9Y TE9HLCBhbmQgU0lHVVNSMgorCSAqIGZvciBJTlRFUlJVUF9URVJNSU5BVEUKIAkgKi8KLQlw cXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOwogCXBxc2ln bmFsKFNJR0lOVCwgUmVxU2h1dGRvd25YTE9HKTsKLQlwcXNpZ25hbChTSUdURVJNLCBTSUdf SUdOKTsgLyogaWdub3JlIFNJR1RFUk0gKi8KLQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFs cmVhZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdB TFJNLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25h bChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CiAJcHFzaWduYWwoU0lH VVNSMiwgU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7CiAKKwkvKiBTZXQgdXAg aW50ZXJydXB0IGhhbmRsaW5nICovCisJU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVycygp OworCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQsIFByb2Nl c3NDaGVja3BvaW50ZXJDb25maWdSZWxvYWRJbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVw dChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCk7CisKKwkvKiB3ZSB3aWxsIGNoZWNrIGZvciBJ TlRFUlJVUFRfVEVSTUlOQVRFIGV4cGxpY2l0bHkgaW4gdGhlIGxvb3AgKi8KKwlEaXNhYmxl SW50ZXJydXB0KElOVEVSUlVQVF9URVJNSU5BVEUpOworCiAJLyoKIAkgKiBJbml0aWFsaXpl IHNvIHRoYXQgZmlyc3QgdGltZS1kcml2ZW4gZXZlbnQgaGFwcGVucyBhdCB0aGUgY29ycmVj dCB0aW1lLgogCSAqLwpAQCAtMzU5LDE1ICszNjgsMTUgQEAgQ2hlY2twb2ludGVyTWFpbihj b25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQli b29sCQljaGtwdF9vcl9yc3RwdF90aW1lZCA9IGZhbHNlOwogCiAJCS8qIENsZWFyIGFueSBh bHJlYWR5LXBlbmRpbmcgd2FrZXVwcyAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlD bGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJCS8qCi0JCSAqIFBy b2Nlc3MgYW55IHJlcXVlc3RzIG9yIHNpZ25hbHMgcmVjZWl2ZWQgcmVjZW50bHkuCisJCSAq IFByb2Nlc3MgYW55IHJlcXVlc3RzIG9yIGludGVycnVwdHMgcmVjZWl2ZWQgcmVjZW50bHku CiAJCSAqLwogCQlBYnNvcmJTeW5jUmVxdWVzdHMoKTsKIAotCQlQcm9jZXNzQ2hlY2twb2lu dGVySW50ZXJydXB0cygpOwotCQlpZiAoU2h1dGRvd25YTE9HUGVuZGluZyB8fCBTaHV0ZG93 blJlcXVlc3RQZW5kaW5nKQorCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQlpZiAoSW50 ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfU0hVVERPV05fWExPRykgfHwgSW50ZXJydXB0UGVu ZGluZyhJTlRFUlJVUFRfVEVSTUlOQVRFKSkKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC01NDEs MTAgKzU1MCwxMCBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAKIAkJCS8qCiAJCQkgKiBXZSBtYXkgaGF2 ZSByZWNlaXZlZCBhbiBpbnRlcnJ1cHQgZHVyaW5nIHRoZSBjaGVja3BvaW50IGFuZCB0aGUK LQkJCSAqIGxhdGNoIG1pZ2h0IGhhdmUgYmVlbiByZXNldCAoZS5nLiBpbiBDaGVja3BvaW50 V3JpdGVEZWxheSkuCisJCQkgKiBpbnRlcnJ1cHQgbWlnaHQgaGF2ZSBiZWVuIHJlc2V0IChl LmcuIGluIENoZWNrcG9pbnRXcml0ZURlbGF5KS4KIAkJCSAqLwotCQkJUHJvY2Vzc0NoZWNr cG9pbnRlckludGVycnVwdHMoKTsKLQkJCWlmIChTaHV0ZG93blhMT0dQZW5kaW5nIHx8IFNo dXRkb3duUmVxdWVzdFBlbmRpbmcpCisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQkJ aWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1NIVVRET1dOX1hMT0cpIHx8IEludGVy cnVwdFBlbmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSkpCiAJCQkJYnJlYWs7CiAJCX0KIApA QCAtNTY5LDcgKzU3OCw3IEBAIENoZWNrcG9pbnRlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1 cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJCWNvbnRpbnVlOwogCiAJCS8q Ci0JCSAqIFNsZWVwIHVudGlsIHdlIGFyZSBzaWduYWxlZCBvciBpdCdzIHRpbWUgZm9yIGFu b3RoZXIgY2hlY2twb2ludCBvcgorCQkgKiBTbGVlcCB1bnRpbCB3ZSBhcmUgd29rZW4gdXAg b3IgaXQncyB0aW1lIGZvciBhbm90aGVyIGNoZWNrcG9pbnQgb3IKIAkJICogeGxvZyBmaWxl IHN3aXRjaC4KIAkJICovCiAJCW5vdyA9IChwZ190aW1lX3QpIHRpbWUoTlVMTCk7CkBAIC01 ODUsMTAgKzU5NCwxMyBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQljdXJfdGltZW91dCA9IE1pbihj dXJfdGltZW91dCwgWExvZ0FyY2hpdmVUaW1lb3V0IC0gZWxhcHNlZF9zZWNzKTsKIAkJfQog Ci0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBX TF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCSBjdXJfdGltZW91dCAq IDEwMDBMIC8qIGNvbnZlcnQgdG8gbXMgKi8gLAotCQkJCQkJIFdBSVRfRVZFTlRfQ0hFQ0tQ T0lOVEVSX01BSU4pOworCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVw dHNNYXNrIHwKKwkJCQkJCQkgSU5URVJSVVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJCQkgSU5U RVJSVVBUX1NIVVRET1dOX1hMT0cgfAorCQkJCQkJCSBJTlRFUlJVUFRfVEVSTUlOQVRFLAor CQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SCwKKwkJCQkJCQkgY3VyX3RpbWVvdXQgKiAxMDAwTCAvKiBjb252ZXJ0IHRvIG1zICovICwK KwkJCQkJCQkgV0FJVF9FVkVOVF9DSEVDS1BPSU5URVJfTUFJTik7CiAJfQogCiAJLyoKQEAg LTU5Nyw3ICs2MDksNyBAQCBDaGVja3BvaW50ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJICovCiAJRXhpdE9uQW55RXJyb3Ig PSB0cnVlOwogCi0JaWYgKFNodXRkb3duWExPR1BlbmRpbmcpCisJaWYgKEludGVycnVwdFBl bmRpbmcoSU5URVJSVVBUX1NIVVRET1dOX1hMT0cpKQogCXsKIAkJLyoKIAkJICogQ2xvc2Ug ZG93biB0aGUgZGF0YWJhc2UuCkBAIC02MTUsNyArNjI3LDcgQEAgQ2hlY2twb2ludGVyTWFp bihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQog CQkgKiBUZWxsIHBvc3RtYXN0ZXIgdGhhdCB3ZSdyZSBkb25lLgogCQkgKi8KIAkJU2VuZFBv c3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfWExPR19JU19TSFVURE9XTik7Ci0JCVNodXRkb3du WExPR1BlbmRpbmcgPSBmYWxzZTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1NIVVRE T1dOX1hMT0cpOwogCX0KIAogCS8qCkBAIC02MjUsNTUgKzYzNywzOCBAQCBDaGVja3BvaW50 ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9s ZW4pCiAJICovCiAJZm9yICg7OykKIAl7Ci0JCS8qIENsZWFyIGFueSBhbHJlYWR5LXBlbmRp bmcgd2FrZXVwcyAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOwotCi0JCVByb2Nlc3NDaGVj a3BvaW50ZXJJbnRlcnJ1cHRzKCk7CisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJ aWYgKFNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElO VEVSUlVQVF9URVJNSU5BVEUpKQogCQkJYnJlYWs7CiAKLQkJKHZvaWQpIFdhaXRMYXRjaChN eUxhdGNoLAotCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0J CQkJCQkgMCwKLQkJCQkJCSBXQUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9TSFVURE9XTik7CisJ CSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkJ CSBJTlRFUlJVUFRfVEVSTUlOQVRFLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9FWElU X09OX1BNX0RFQVRILAorCQkJCQkJCSAwLAorCQkJCQkJCSBXQUlUX0VWRU5UX0NIRUNLUE9J TlRFUl9TSFVURE9XTik7CiAJfQogCiAJLyogTm9ybWFsIGV4aXQgZnJvbSB0aGUgY2hlY2tw b2ludGVyIGlzIGhlcmUgKi8KIAlwcm9jX2V4aXQoMCk7CQkJCS8qIGRvbmUgKi8KIH0KIAot LyoKLSAqIFByb2Nlc3MgYW55IG5ldyBpbnRlcnJ1cHRzLgotICovCiBzdGF0aWMgdm9pZAot UHJvY2Vzc0NoZWNrcG9pbnRlckludGVycnVwdHModm9pZCkKK1Byb2Nlc3NDaGVja3BvaW50 ZXJDb25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCkKIHsKLQlpZiAoUHJvY1NpZ25hbEJhcnJp ZXJQZW5kaW5nKQotCQlQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIoKTsKLQotCWlmIChDb25m aWdSZWxvYWRQZW5kaW5nKQotCXsKLQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwot CQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwlQcm9jZXNzQ29uZmlnRmlsZShQ R0NfU0lHSFVQKTsKIAotCQkvKgotCQkgKiBDaGVja3BvaW50ZXIgaXMgdGhlIGxhc3QgcHJv Y2VzcyB0byBzaHV0IGRvd24sIHNvIHdlIGFzayBpdCB0byBob2xkCi0JCSAqIHRoZSBrZXlz IGZvciBhIHJhbmdlIG9mIG90aGVyIHRhc2tzIHJlcXVpcmVkIG1vc3Qgb2Ygd2hpY2ggaGF2 ZQotCQkgKiBub3RoaW5nIHRvIGRvIHdpdGggY2hlY2twb2ludGluZyBhdCBhbGwuCi0JCSAq Ci0JCSAqIEZvciB2YXJpb3VzIHJlYXNvbnMsIHNvbWUgY29uZmlnIHZhbHVlcyBjYW4gY2hh bmdlIGR5bmFtaWNhbGx5IHNvCi0JCSAqIHRoZSBwcmltYXJ5IGNvcHkgb2YgdGhlbSBpcyBo ZWxkIGluIHNoYXJlZCBtZW1vcnkgdG8gbWFrZSBzdXJlIGFsbAotCQkgKiBiYWNrZW5kcyBz ZWUgdGhlIHNhbWUgdmFsdWUuICBXZSBtYWtlIENoZWNrcG9pbnRlciByZXNwb25zaWJsZSBm b3IKLQkJICogdXBkYXRpbmcgdGhlIHNoYXJlZCBtZW1vcnkgY29weSBpZiB0aGUgcGFyYW1l dGVyIHNldHRpbmcgY2hhbmdlcwotCQkgKiBiZWNhdXNlIG9mIFNJR0hVUC4KLQkJICovCi0J CVVwZGF0ZVNoYXJlZE1lbW9yeUNvbmZpZygpOwotCX0KLQotCS8qIFBlcmZvcm0gbG9nZ2lu ZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExvZ01lbW9y eUNvbnRleHRQZW5kaW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgp OworCS8qCisJICogQ2hlY2twb2ludGVyIGlzIHRoZSBsYXN0IHByb2Nlc3MgdG8gc2h1dCBk b3duLCBzbyB3ZSBhc2sgaXQgdG8gaG9sZCB0aGUKKwkgKiBrZXlzIGZvciBhIHJhbmdlIG9m IG90aGVyIHRhc2tzIHJlcXVpcmVkIG1vc3Qgb2Ygd2hpY2ggaGF2ZSBub3RoaW5nIHRvCisJ ICogZG8gd2l0aCBjaGVja3BvaW50aW5nIGF0IGFsbC4KKwkgKgorCSAqIEZvciB2YXJpb3Vz IHJlYXNvbnMsIHNvbWUgY29uZmlnIHZhbHVlcyBjYW4gY2hhbmdlIGR5bmFtaWNhbGx5IHNv IHRoZQorCSAqIHByaW1hcnkgY29weSBvZiB0aGVtIGlzIGhlbGQgaW4gc2hhcmVkIG1lbW9y eSB0byBtYWtlIHN1cmUgYWxsIGJhY2tlbmRzCisJICogc2VlIHRoZSBzYW1lIHZhbHVlLiAg V2UgbWFrZSBDaGVja3BvaW50ZXIgcmVzcG9uc2libGUgZm9yIHVwZGF0aW5nIHRoZQorCSAq IHNoYXJlZCBtZW1vcnkgY29weSBpZiB0aGUgcGFyYW1ldGVyIHNldHRpbmcgY2hhbmdlcyBi ZWNhdXNlIG9mIFNJR0hVUC4KKwkgKi8KKwlVcGRhdGVTaGFyZWRNZW1vcnlDb25maWcoKTsK IH0KIAogLyoKQEAgLTc4NSwyNCArNzgwLDE4IEBAIENoZWNrcG9pbnRXcml0ZURlbGF5KGlu dCBmbGFncywgZG91YmxlIHByb2dyZXNzKQogCWlmICghQW1DaGVja3BvaW50ZXJQcm9jZXNz KCkpCiAJCXJldHVybjsKIAorCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKIAkvKgogCSAq IFBlcmZvcm0gdGhlIHVzdWFsIGR1dGllcyBhbmQgdGFrZSBhIG5hcCwgdW5sZXNzIHdlJ3Jl IGJlaGluZCBzY2hlZHVsZSwKIAkgKiBpbiB3aGljaCBjYXNlIHdlIGp1c3QgdHJ5IHRvIGNh dGNoIHVwIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCiAJICovCiAJaWYgKCEoZmxhZ3MgJiBD SEVDS1BPSU5UX0ZBU1QpICYmCi0JCSFTaHV0ZG93blhMT0dQZW5kaW5nICYmCi0JCSFTaHV0 ZG93blJlcXVlc3RQZW5kaW5nICYmCisJCSFJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9T SFVURE9XTl9YTE9HKSAmJgorCQkhSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfVEVSTUlO QVRFKSAmJgogCQkhRmFzdENoZWNrcG9pbnRSZXF1ZXN0ZWQoKSAmJgogCQlJc0NoZWNrcG9p bnRPblNjaGVkdWxlKHByb2dyZXNzKSkKIAl7Ci0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5n KQotCQl7Ci0JCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7Ci0JCQlQcm9jZXNzQ29u ZmlnRmlsZShQR0NfU0lHSFVQKTsKLQkJCS8qIHVwZGF0ZSBzaG1lbSBjb3BpZXMgb2YgY29u ZmlnIHZhcmlhYmxlcyAqLwotCQkJVXBkYXRlU2hhcmVkTWVtb3J5Q29uZmlnKCk7Ci0JCX0K LQogCQlBYnNvcmJTeW5jUmVxdWVzdHMoKTsKIAkJYWJzb3JiX2NvdW50ZXIgPSBXUklURVNf UEVSX0FCU09SQjsKIApAQCAtODE3LDEwICs4MDYsMTIgQEAgQ2hlY2twb2ludFdyaXRlRGVs YXkoaW50IGZsYWdzLCBkb3VibGUgcHJvZ3Jlc3MpCiAJCSAqIENoZWNrcG9pbnRlciBhbmQg Ymd3cml0ZXIgYXJlIG5vIGxvbmdlciByZWxhdGVkIHNvIHRha2UgdGhlIEJpZwogCQkgKiBT bGVlcC4KIAkJICovCi0JCVdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9F WElUX09OX1BNX0RFQVRIIHwgV0xfVElNRU9VVCwKLQkJCQkgIDEwMCwKLQkJCQkgIFdBSVRf RVZFTlRfQ0hFQ0tQT0lOVF9XUklURV9ERUxBWSk7Ci0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7 CisJCVdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCSAgSU5U RVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkgIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05f UE1fREVBVEggfCBXTF9USU1FT1VULAorCQkJCQkgIDEwMCwKKwkJCQkJICBXQUlUX0VWRU5U X0NIRUNLUE9JTlRfV1JJVEVfREVMQVkpOworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRf V0FJVF9XQUtFVVApOwogCX0KIAllbHNlIGlmICgtLWFic29yYl9jb3VudGVyIDw9IDApCiAJ ewpAQCAtODMyLDEwICs4MjMsNiBAQCBDaGVja3BvaW50V3JpdGVEZWxheShpbnQgZmxhZ3Ms IGRvdWJsZSBwcm9ncmVzcykKIAkJQWJzb3JiU3luY1JlcXVlc3RzKCk7CiAJCWFic29yYl9j b3VudGVyID0gV1JJVEVTX1BFUl9BQlNPUkI7CiAJfQotCi0JLyogQ2hlY2sgZm9yIGJhcnJp ZXIgZXZlbnRzLiAqLwotCWlmIChQcm9jU2lnbmFsQmFycmllclBlbmRpbmcpCi0JCVByb2Nl c3NQcm9jU2lnbmFsQmFycmllcigpOwogfQogCiAvKgpAQCAtOTI0LDEyICs5MTEsMTEgQEAg SXNDaGVja3BvaW50T25TY2hlZHVsZShkb3VibGUgcHJvZ3Jlc3MpCiAgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qIFNJR0lOVDogc2V0IGZsYWcgdG8g dHJpZ2dlciB3cml0aW5nIG9mIHNodXRkb3duIGNoZWNrcG9pbnQgKi8KKy8qIFNJR0lOVDog cmFpc2UgaW50ZXJydXB0IHRvIHRyaWdnZXIgd3JpdGluZyBvZiBzaHV0ZG93biBjaGVja3Bv aW50ICovCiBzdGF0aWMgdm9pZAogUmVxU2h1dGRvd25YTE9HKFNJR05BTF9BUkdTKQogewot CVNodXRkb3duWExPR1BlbmRpbmcgPSB0cnVlOwotCVNldExhdGNoKE15TGF0Y2gpOworCVJh aXNlSW50ZXJydXB0KElOVEVSUlVQVF9TSFVURE9XTl9YTE9HKTsKIH0KIAogCkBAIC0xMTAy LDE0ICsxMDg4LDE1IEBAIFJlcXVlc3RDaGVja3BvaW50KGludCBmbGFncykKIAlTcGluTG9j a1JlbGVhc2UoJkNoZWNrcG9pbnRlclNobWVtLT5ja3B0X2xjayk7CiAKIAkvKgotCSAqIFNl dCBjaGVja3BvaW50ZXIncyBsYXRjaCB0byByZXF1ZXN0IGNoZWNrcG9pbnQuICBJdCdzIHBv c3NpYmxlIHRoYXQgdGhlCi0JICogY2hlY2twb2ludGVyIGhhc24ndCBzdGFydGVkIHlldCwg c28gd2Ugd2lsbCByZXRyeSBhIGZldyB0aW1lcyBpZgotCSAqIG5lZWRlZC4gIChBY3R1YWxs eSwgbW9yZSB0aGFuIGEgZmV3IHRpbWVzLCBzaW5jZSBvbiBzbG93IG9yIG92ZXJsb2FkZWQK LQkgKiBidWlsZGZhcm0gbWFjaGluZXMsIGl0J3MgYmVlbiBvYnNlcnZlZCB0aGF0IHRoZSBj aGVja3BvaW50ZXIgY2FuIHRha2UKLQkgKiBzZXZlcmFsIHNlY29uZHMgdG8gc3RhcnQuKSAg SG93ZXZlciwgaWYgbm90IHRvbGQgdG8gd2FpdCBmb3IgdGhlCi0JICogY2hlY2twb2ludCB0 byBvY2N1ciwgd2UgY29uc2lkZXIgZmFpbHVyZSB0byBzZXQgdGhlIGxhdGNoIHRvIGJlCi0J ICogbm9uZmF0YWwgYW5kIG1lcmVseSBMT0cgaXQuICBUaGUgY2hlY2twb2ludGVyIHNob3Vs ZCBzZWUgdGhlIHJlcXVlc3QKLQkgKiB3aGVuIGl0IGRvZXMgc3RhcnQsIHdpdGggb3Igd2l0 aG91dCB0aGUgU2V0TGF0Y2goKS4KKwkgKiBTZW5kIElOVEVSUlVQVF9XQUlUX1dBS0VVUCB0 byB3YWtlIHVwIHRoZSBjaGVja3BvaW50ZXIuICBJdCdzIHBvc3NpYmxlCisJICogdGhhdCB0 aGUgY2hlY2twb2ludGVyIGhhc24ndCBzdGFydGVkIHlldCwgc28gd2Ugd2lsbCByZXRyeSBh IGZldyB0aW1lcworCSAqIGlmIG5lZWRlZC4gIChBY3R1YWxseSwgbW9yZSB0aGFuIGEgZmV3 IHRpbWVzLCBzaW5jZSBvbiBzbG93IG9yCisJICogb3ZlcmxvYWRlZCBidWlsZGZhcm0gbWFj aGluZXMsIGl0J3MgYmVlbiBvYnNlcnZlZCB0aGF0IHRoZSBjaGVja3BvaW50ZXIKKwkgKiBj YW4gdGFrZSBzZXZlcmFsIHNlY29uZHMgdG8gc3RhcnQuKSAgSG93ZXZlciwgaWYgbm90IHRv bGQgdG8gd2FpdCBmb3IKKwkgKiB0aGUgY2hlY2twb2ludCB0byBvY2N1ciwgd2UgY29uc2lk ZXIgZmFpbHVyZSB0byB3YWtlIHVwIHRoZQorCSAqIGNoZWNrcG9pbnRlciB0byBiZSBub25m YXRhbCBhbmQgbWVyZWx5IExPRyBpdC4gIFRoZSBjaGVja3BvaW50ZXIgc2hvdWxkCisJICog c2VlIHRoZSByZXF1ZXN0IHdoZW4gaXQgZG9lcyBzdGFydCwgd2l0aCBvciB3aXRob3V0IHRo ZQorCSAqIFNlbmRJbnRlcnJ1cHQoKS4KIAkgKi8KICNkZWZpbmUgTUFYX1NJR05BTF9UUklF UyA2MDAJLyogbWF4IHdhaXQgNjAuMCBzZWMgKi8KIAlmb3IgKG50cmllcyA9IDA7OyBudHJp ZXMrKykKQEAgLTExMjgsNyArMTExNSw3IEBAIFJlcXVlc3RDaGVja3BvaW50KGludCBmbGFn cykKIAkJfQogCQllbHNlCiAJCXsKLQkJCVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJlcihj aGVja3BvaW50ZXJQcm9jKS0+cHJvY0xhdGNoKTsKKwkJCVNlbmRJbnRlcnJ1cHQoSU5URVJS VVBUX1dBSVRfV0FLRVVQLCBjaGVja3BvaW50ZXJQcm9jKTsKIAkJCS8qIG5vdGlmaWVkIHN1 Y2Nlc3NmdWxseSAqLwogCQkJYnJlYWs7CiAJCX0KQEAgLTEyNTksNyArMTI0Niw3IEBAIEZv cndhcmRTeW5jUmVxdWVzdChjb25zdCBGaWxlVGFnICpmdGFnLCBTeW5jUmVxdWVzdFR5cGUg dHlwZSkKIAkJUHJvY051bWJlcgljaGVja3BvaW50ZXJQcm9jID0gcGdfYXRvbWljX3JlYWRf dTMyKCZQcm9jR2xvYmFsLT5jaGVja3BvaW50ZXJQcm9jKTsKIAogCQlpZiAoY2hlY2twb2lu dGVyUHJvYyAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQotCQkJU2V0TGF0Y2goJkdldFBHUHJv Y0J5TnVtYmVyKGNoZWNrcG9pbnRlclByb2MpLT5wcm9jTGF0Y2gpOworCQkJU2VuZEludGVy cnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIGNoZWNrcG9pbnRlclByb2MpOwogCX0KIAog CXJldHVybiB0cnVlOwpAQCAtMTU0MCw1ICsxNTI3LDUgQEAgV2FrZXVwQ2hlY2twb2ludGVy KHZvaWQpCiAJUHJvY051bWJlcgljaGVja3BvaW50ZXJQcm9jID0gcGdfYXRvbWljX3JlYWRf dTMyKCZwcm9jZ2xvYmFsLT5jaGVja3BvaW50ZXJQcm9jKTsKIAogCWlmIChjaGVja3BvaW50 ZXJQcm9jICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNldExhdGNoKCZHZXRQR1Byb2NC eU51bWJlcihjaGVja3BvaW50ZXJQcm9jKS0+cHJvY0xhdGNoKTsKKwkJU2VuZEludGVycnVw dChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIGNoZWNrcG9pbnRlclByb2MpOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGEyYzBmZjAxMmM1Li4wMDAwMDAwMDAwMAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2ludGVycnVwdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotICoKLSAqIGludGVycnVwdC5jCi0gKgkgIEludGVycnVwdCBoYW5k bGluZyByb3V0aW5lcy4KLSAqCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy NiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLSAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhCi0gKgotICogSURFTlRJRklDQVRJT04KLSAqCSAgc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9pbnRlcnJ1cHQuYwotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpbmNs dWRlICJwb3N0Z3Jlcy5oIgotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJt aXNjYWRtaW4uaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgotI2luY2x1 ZGUgInN0b3JhZ2UvaXBjLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgotI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgotI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgotI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCi0KLXZvbGF0aWxlIHNpZ19hdG9taWNfdCBDb25m aWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgU2h1dGRv d25SZXF1ZXN0UGVuZGluZyA9IGZhbHNlOwotCi0vKgotICogU2ltcGxlIGludGVycnVwdCBo YW5kbGVyIGZvciBtYWluIGxvb3BzIG9mIGJhY2tncm91bmQgcHJvY2Vzc2VzLgotICovCi12 b2lkCi1Qcm9jZXNzTWFpbkxvb3BJbnRlcnJ1cHRzKHZvaWQpCi17Ci0JaWYgKFByb2NTaWdu YWxCYXJyaWVyUGVuZGluZykKLQkJUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKCk7Ci0KLQlp ZiAoQ29uZmlnUmVsb2FkUGVuZGluZykKLQl7Ci0JCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBm YWxzZTsKLQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7Ci0JfQotCi0JaWYgKFNo dXRkb3duUmVxdWVzdFBlbmRpbmcpCi0JCXByb2NfZXhpdCgwKTsKLQotCS8qIFBlcmZvcm0g bG9nZ2luZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExv Z01lbW9yeUNvbnRleHRQZW5kaW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVy cnVwdCgpOwotfQotCi0vKgotICogU2ltcGxlIHNpZ25hbCBoYW5kbGVyIGZvciB0cmlnZ2Vy aW5nIGEgY29uZmlndXJhdGlvbiByZWxvYWQuCi0gKgotICogTm9ybWFsbHksIHRoaXMgaGFu ZGxlciB3b3VsZCBiZSB1c2VkIGZvciBTSUdIVVAuIFRoZSBpZGVhIGlzIHRoYXQgY29kZQot ICogd2hpY2ggdXNlcyBpdCB3b3VsZCBhcnJhbmdlIHRvIGNoZWNrIHRoZSBDb25maWdSZWxv YWRQZW5kaW5nIGZsYWcgYXQKLSAqIGNvbnZlbmllbnQgcGxhY2VzIGluc2lkZSBtYWluIGxv b3BzLCBvciBlbHNlIGNhbGwgUHJvY2Vzc01haW5Mb29wSW50ZXJydXB0cy4KLSAqLwotdm9p ZAotU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZChTSUdOQUxfQVJHUykKLXsKLQlDb25m aWdSZWxvYWRQZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKLX0KLQotLyoK LSAqIFNpbXBsZSBzaWduYWwgaGFuZGxlciBmb3IgZXhpdGluZyBxdWlja2x5IGFzIGlmIGR1 ZSB0byBhIGNyYXNoLgotICoKLSAqIE5vcm1hbGx5LCB0aGlzIHdvdWxkIGJlIHVzZWQgZm9y IGhhbmRsaW5nIFNJR1FVSVQuCi0gKi8KLXZvaWQKLVNpZ25hbEhhbmRsZXJGb3JDcmFzaEV4 aXQoU0lHTkFMX0FSR1MpCi17Ci0JLyoKLQkgKiBXZSBETyBOT1Qgd2FudCB0byBydW4gcHJv Y19leGl0KCkgb3IgYXRleGl0KCkgY2FsbGJhY2tzIC0tIHdlJ3JlIGhlcmUKLQkgKiBiZWNh dXNlIHNoYXJlZCBtZW1vcnkgbWF5IGJlIGNvcnJ1cHRlZCwgc28gd2UgZG9uJ3Qgd2FudCB0 byB0cnkgdG8KLQkgKiBjbGVhbiB1cCBvdXIgdHJhbnNhY3Rpb24uICBKdXN0IG5haWwgdGhl IHdpbmRvd3Mgc2h1dCBhbmQgZ2V0IG91dCBvZgotCSAqIHRvd24uICBUaGUgY2FsbGJhY2tz IHdvdWxkbid0IGJlIHNhZmUgdG8gcnVuIGZyb20gYSBzaWduYWwgaGFuZGxlciwKLQkgKiBh bnl3YXkuCi0JICoKLQkgKiBOb3RlIHdlIGRvIF9leGl0KDIpIG5vdCBfZXhpdCgwKS4gIFRo aXMgaXMgdG8gZm9yY2UgdGhlIHBvc3RtYXN0ZXIgaW50bwotCSAqIGEgc3lzdGVtIHJlc2V0 IGN5Y2xlIGlmIHNvbWVvbmUgc2VuZHMgYSBtYW51YWwgU0lHUVVJVCB0byBhIHJhbmRvbQot CSAqIGJhY2tlbmQuICBUaGlzIGlzIG5lY2Vzc2FyeSBwcmVjaXNlbHkgYmVjYXVzZSB3ZSBk b24ndCBjbGVhbiB1cCBvdXIKLQkgKiBzaGFyZWQgbWVtb3J5IHN0YXRlLiAgKFRoZSAiZGVh ZCBtYW4gc3dpdGNoIiBtZWNoYW5pc20gaW4gcG1zaWduYWwuYwotCSAqIHNob3VsZCBlbnN1 cmUgdGhlIHBvc3RtYXN0ZXIgc2VlcyB0aGlzIGFzIGEgY3Jhc2gsIHRvbywgYnV0IG5vIGhh cm0gaW4KLQkgKiBiZWluZyBkb3VibHkgc3VyZS4pCi0JICovCi0JX2V4aXQoMik7Ci19Ci0K LS8qCi0gKiBTaW1wbGUgc2lnbmFsIGhhbmRsZXIgZm9yIHRyaWdnZXJpbmcgYSBsb25nLXJ1 bm5pbmcgYmFja2dyb3VuZCBwcm9jZXNzIHRvCi0gKiBzaHV0IGRvd24gYW5kIGV4aXQuCi0g KgotICogVHlwaWNhbGx5LCB0aGlzIGhhbmRsZXIgd291bGQgYmUgdXNlZCBmb3IgU0lHVEVS TSwgYnV0IHNvbWUgcHJvY2Vzc2VzIHVzZQotICogb3RoZXIgc2lnbmFscy4gSW4gcGFydGlj dWxhciwgdGhlIGNoZWNrcG9pbnRlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2VyCi0gKiBl eGl0IG9uIFNJR1VTUjIsIGFuZCB0aGUgV0FMIHdyaXRlciBleGl0cyBvbiBlaXRoZXIgU0lH SU5UIG9yIFNJR1RFUk0uCi0gKgotICogU2h1dGRvd25SZXF1ZXN0UGVuZGluZyBzaG91bGQg YmUgY2hlY2tlZCBhdCBhIGNvbnZlbmllbnQgcGxhY2Ugd2l0aGluIHRoZQotICogbWFpbiBs b29wLCBvciBlbHNlIHRoZSBtYWluIGxvb3Agc2hvdWxkIGNhbGwgUHJvY2Vzc01haW5Mb29w SW50ZXJydXB0cy4KLSAqLwotdm9pZAotU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVz dChTSUdOQUxfQVJHUykKLXsKLQlTaHV0ZG93blJlcXVlc3RQZW5kaW5nID0gdHJ1ZTsKLQlT ZXRMYXRjaChNeUxhdGNoKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCmlu ZGV4IGUxZjcwNzI2NjA0Li5mYmQ0MGNiMTBkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21l c29uLmJ1aWxkCkBAIC03LDcgKzcsNiBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAg ICdiZ3dyaXRlci5jJywKICAgJ2NoZWNrcG9pbnRlci5jJywKICAgJ2ZvcmtfcHJvY2Vzcy5j JywKLSAgJ2ludGVycnVwdC5jJywKICAgJ2xhdW5jaF9iYWNrZW5kLmMnLAogICAncGdhcmNo LmMnLAogICAncG1jaGlsZC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcGdhcmNoLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IDEw YTVlZjllMTVjLi4xZjRjMzU3NmU1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9wZ2FyY2guYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBA IC0zMywxNyArMzMsMTcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5oIgog I2luY2x1ZGUgImFyY2hpdmUvYXJjaGl2ZV9tb2R1bGUuaCIKICNpbmNsdWRlICJhcmNoaXZl L3NoZWxsX2FyY2hpdmUuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVk ZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgi CiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNp bmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVy L2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcGdhcmNoLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Fp b19zdWJzeXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJvY3NpZ25hbC5oIgpAQCAtMTMyLDExICsxMzIsNiBAQCBzdHJ1Y3QgYXJjaF9m aWxlc19zdGF0ZQogCiBzdGF0aWMgc3RydWN0IGFyY2hfZmlsZXNfc3RhdGUgKmFyY2hfZmls ZXMgPSBOVUxMOwogCi0vKgotICogRmxhZ3Mgc2V0IGJ5IGludGVycnVwdCBoYW5kbGVycyBm b3IgbGF0ZXIgc2VydmljZSBpbiB0aGUgbWFpbiBsb29wLgotICovCi1zdGF0aWMgdm9sYXRp bGUgc2lnX2F0b21pY190IHJlYWR5X3RvX3N0b3AgPSBmYWxzZTsKLQogLyogLS0tLS0tLS0t LQogICogTG9jYWwgZnVuY3Rpb24gZm9yd2FyZCBkZWNsYXJhdGlvbnMKICAqIC0tLS0tLS0t LS0KQEAgLTE0OCwxMCArMTQzLDExIEBAIHN0YXRpYyBib29sIHBnYXJjaF9hcmNoaXZlWGxv ZyhjaGFyICp4bG9nKTsKIHN0YXRpYyBib29sIHBnYXJjaF9yZWFkeVhsb2coY2hhciAqeGxv Zyk7CiBzdGF0aWMgdm9pZCBwZ2FyY2hfYXJjaGl2ZURvbmUoY2hhciAqeGxvZyk7CiBzdGF0 aWMgdm9pZCBwZ2FyY2hfZGllKGludCBjb2RlLCBEYXR1bSBhcmcpOwotc3RhdGljIHZvaWQg UHJvY2Vzc1BnQXJjaEludGVycnVwdHModm9pZCk7CiBzdGF0aWMgaW50CXJlYWR5X2ZpbGVf Y29tcGFyYXRvcihEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwogc3RhdGljIHZvaWQg TG9hZEFyY2hpdmVMaWJyYXJ5KHZvaWQpOwogc3RhdGljIHZvaWQgcGdhcmNoX2NhbGxfbW9k dWxlX3NodXRkb3duX2NiKGludCBjb2RlLCBEYXR1bSBhcmcpOworc3RhdGljIHZvaWQgcGdh cmNoX1Byb2Nlc3NDb25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCk7CisKIAogLyogUmVwb3J0 IHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFBnQXJjaFNobWVtSW5pdCAqLwogU2l6 ZQpAQCAtMjI1LDE4ICsyMjEsMjcgQEAgUGdBcmNoaXZlck1haW4oY29uc3Qgdm9pZCAqc3Rh cnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAlBdXhpbGlhcnlQcm9jZXNz TWFpbkNvbW1vbigpOwogCiAJLyoKLQkgKiBJZ25vcmUgYWxsIHNpZ25hbHMgdXN1YWxseSBi b3VuZCB0byBzb21lIGFjdGlvbiBpbiB0aGUgcG9zdG1hc3RlciwKLQkgKiBleGNlcHQgZm9y IFNJR0hVUCwgU0lHVEVSTSwgU0lHVVNSMSwgU0lHVVNSMiwgYW5kIFNJR1FVSVQuCisJICog bm8gcXVlcnkgY2FuY2VsLiBYWFg6IHNob3VsZCB3ZSBsZWF2ZSB0aGUgc2lnbmFsIGhhbmRs ZXIgaW4gcGxhY2UgYW5kCisJICoganVzdCBub3QgaW5zdGFsbCBhbiBpbnRlcnJ1cHQgaGFu ZGxlciBmb3IgaXQ/CiAJICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9y Q29uZmlnUmVsb2FkKTsKKwkvKiBhbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgaXQ/ICovCiAJ cHFzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdURVJNLCBTaWduYWxI YW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKLQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFs cmVhZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdB TFJNLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25h bChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CisKKwkvKiBUT0RPOiB1 c2UgaW50ZXJydXB0IGZvciB0aGlzIGRpcmVjdGx5ICovCiAJcHFzaWduYWwoU0lHVVNSMiwg cGdhcmNoX3dha2VuX3N0b3ApOwogCisJLyoKKwkgKiBUaGVzZSBpbnRlcnJ1cHQgaGFuZGxl cnMgYXJlIGNhbGxlZCBpbiB0aGUgbG9vcHMgcGdhcmNoX01haW5Mb29wIGFuZAorCSAqIHBn YXJjaF9BcmNoaXZlckNvcHlMb29wLiBEbyBub3Qgc2V0IElOVEVSUlVQVF9URVJNSU5BVEUg aGFuZGxlciwKKwkgKiBiZWNhdXNlIHRoYXQncyBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgbG9v cHMuCisJICovCisJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfQ09ORklHX1JFTE9B RCwgcGdhcmNoX1Byb2Nlc3NDb25maWdSZWxvYWRJbnRlcnJ1cHQpOworCUVuYWJsZUludGVy cnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCk7CisJU2V0SW50ZXJydXB0SGFuZGxlcihJ TlRFUlJVUFRfQkFSUklFUiwgUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKTsKKwlFbmFibGVJ bnRlcnJ1cHQoSU5URVJSVVBUX0JBUlJJRVIpOworCVNldEludGVycnVwdEhhbmRsZXIoSU5U RVJSVVBUX0xPR19NRU1PUllfQ09OVEVYVCwgUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRl cnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfTE9HX01FTU9SWV9DT05URVhU KTsKKwogCS8qIFVuYmxvY2sgc2lnbmFscyAodGhleSB3ZXJlIGJsb2NrZWQgd2hlbiB0aGUg cG9zdG1hc3RlciBmb3JrZWQgdXMpICovCiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZV bkJsb2NrU2lnLCBOVUxMKTsKIApAQCAtMjQ3LDggKzI1Miw4IEBAIFBnQXJjaGl2ZXJNYWlu KGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAJ b25fc2htZW1fZXhpdChwZ2FyY2hfZGllLCAwKTsKIAogCS8qCi0JICogQWR2ZXJ0aXNlIG91 ciBwcm9jIG51bWJlciBzbyB0aGF0IGJhY2tlbmRzIGNhbiB1c2Ugb3VyIGxhdGNoIHRvIHdh a2UgdXMKLQkgKiB1cCB3aGlsZSB3ZSdyZSBzbGVlcGluZy4KKwkgKiBBZHZlcnRpc2Ugb3Vy IHByb2MgbnVtYmVyIHNvIHRoYXQgYmFja2VuZHMgY2FuIHdha2UgdXMgdXAgd2hpbGUgd2Un cmUKKwkgKiBzbGVlcGluZy4KIAkgKi8KIAlQZ0FyY2gtPnBncHJvY25vID0gTXlQcm9jTnVt YmVyOwogCkBAIC0yODIsMTMgKzI4NywxMiBAQCBQZ0FyY2hXYWtldXAodm9pZCkKIAlpbnQJ CQlhcmNoX3BncHJvY25vID0gUGdBcmNoLT5wZ3Byb2NubzsKIAogCS8qCi0JICogV2UgZG9u J3QgYWNxdWlyZSBQcm9jQXJyYXlMb2NrIGhlcmUuICBJdCdzIGFjdHVhbGx5IGZpbmUgYmVj YXVzZQotCSAqIHByb2NMYXRjaCBpc24ndCBldmVyIGZyZWVkLCBzbyB3ZSBqdXN0IGNhbiBw b3RlbnRpYWxseSBzZXQgdGhlIHdyb25nCi0JICogcHJvY2VzcycgKG9yIG5vIHByb2Nlc3Mn KSBsYXRjaC4gIEV2ZW4gaW4gdGhhdCBjYXNlIHRoZSBhcmNoaXZlciB3aWxsCi0JICogYmUg cmVsYXVuY2hlZCBzaG9ydGx5IGFuZCB3aWxsIHN0YXJ0IGFyY2hpdmluZy4KKwkgKiBXZSBk b24ndCBhY3F1aXJlIFByb2NBcnJheUxvY2sgaGVyZSwgc28gd2UgbWF5IHNlbmQgdGhlIGlu dGVycnVwdCB0bworCSAqIHdyb25nIHByb2Nlc3MsIGJ1dCB0aGF0J3MgaGFybWxlc3MuICBF dmVuIGluIHRoYXQgY2FzZSB0aGUgYXJjaGl2ZXIKKwkgKiB3aWxsIGJlIHJlbGF1bmNoZWQg c2hvcnRseSBhbmQgd2lsbCBzdGFydCBhcmNoaXZpbmcuCiAJICovCiAJaWYgKGFyY2hfcGdw cm9jbm8gIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKLQkJU2V0TGF0Y2goJkdldFBHUHJvY0J5 TnVtYmVyKGFyY2hfcGdwcm9jbm8pLT5wcm9jTGF0Y2gpOworCQlTZW5kSW50ZXJydXB0KElO VEVSUlVQVF9XQUlUX1dBS0VVUCwgYXJjaF9wZ3Byb2Nubyk7CiB9CiAKIApAQCAtMjk3LDgg KzMwMSw3IEBAIHN0YXRpYyB2b2lkCiBwZ2FyY2hfd2FrZW5fc3RvcChTSUdOQUxfQVJHUykK IHsKIAkvKiBzZXQgZmxhZyB0byBkbyBhIGZpbmFsIGN5Y2xlIGFuZCBzaHV0IGRvd24gYWZ0 ZXJ3YXJkcyAqLwotCXJlYWR5X3RvX3N0b3AgPSB0cnVlOwotCVNldExhdGNoKE15TGF0Y2gp OworCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9TSFVURE9XTl9QR0FSQ0gpOwogfQogCiAv KgpAQCAtMzA5LDcgKzMxMiw3IEBAIHBnYXJjaF93YWtlbl9zdG9wKFNJR05BTF9BUkdTKQog c3RhdGljIHZvaWQKIHBnYXJjaF9NYWluTG9vcCh2b2lkKQogewotCWJvb2wJCXRpbWVfdG9f c3RvcDsKKwlib29sCQl0aW1lX3RvX3N0b3AgPSBmYWxzZTsKIAogCS8qCiAJICogVGhlcmUg c2hvdWxkbid0IGJlIGFueXRoaW5nIGZvciB0aGUgYXJjaGl2ZXIgdG8gZG8gZXhjZXB0IHRv IHdhaXQgZm9yIGEKQEAgLTMxOCwxMyArMzIxLDE1IEBAIHBnYXJjaF9NYWluTG9vcCh2b2lk KQogCSAqLwogCWRvCiAJewotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkvKiBGSVhNRTog aXMgdGhpcyB1c2VkIGZvciBzb21ldGhpbmcgaW4gcGdhcmNoPyBUbyBudWRnZSBpdD8gKi8K KwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCQkvKiBXaGVu IHdlIGdldCBTSUdVU1IyLCB3ZSBkbyBvbmUgbW9yZSBhcmNoaXZlIGN5Y2xlLCB0aGVuIGV4 aXQgKi8KLQkJdGltZV90b19zdG9wID0gcmVhZHlfdG9fc3RvcDsKKwkJaWYgKEludGVycnVw dFBlbmRpbmcoSU5URVJSVVBUX1NIVVRET1dOX1BHQVJDSCkpCisJCQl0aW1lX3RvX3N0b3Ag PSB0cnVlOwogCiAJCS8qIENoZWNrIGZvciBiYXJyaWVyIGV2ZW50cyBhbmQgY29uZmlnIHVw ZGF0ZSAqLwotCQlQcm9jZXNzUGdBcmNoSW50ZXJydXB0cygpOworCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwogCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGdvdHRlbiBTSUdURVJNLCB3ZSBu b3JtYWxseSBqdXN0IHNpdCBhbmQgZG8gbm90aGluZyB1bnRpbApAQCAtMzM0LDcgKzMzOSw3 IEBAIHBnYXJjaF9NYWluTG9vcCh2b2lkKQogCQkgKiB0aGF0IHRoZSBwb3N0bWFzdGVyIGNh biBzdGFydCBhIG5ldyBhcmNoaXZlciBpZiBuZWVkZWQuICBBbHNvIGV4aXQKIAkJICogaWYg dGltZSB1bmV4cGVjdGVkbHkgZ29lcyBiYWNrd2FyZC4KIAkJICovCi0JCWlmIChTaHV0ZG93 blJlcXVlc3RQZW5kaW5nKQorCQlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfVEVS TUlOQVRFKSkKIAkJewogCQkJdGltZV90CQljdXJ0aW1lID0gdGltZShOVUxMKTsKIApAQCAt MzQ2LDYgKzM1MSw3IEBAIHBnYXJjaF9NYWluTG9vcCh2b2lkKQogCQl9CiAKIAkJLyogRG8g d2hhdCB3ZSdyZSBoZXJlIGZvciAqLworCiAJCXBnYXJjaF9BcmNoaXZlckNvcHlMb29wKCk7 CiAKIAkJLyoKQEAgLTM1NiwxMCArMzYyLDEzIEBAIHBnYXJjaF9NYWluTG9vcCh2b2lkKQog CQl7CiAJCQlpbnQJCQlyYzsKIAotCQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJ CSAgIFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9QT1NUTUFTVEVSX0RFQVRILAot CQkJCQkJICAgUEdBUkNIX0FVVE9XQUtFX0lOVEVSVkFMICogMTAwMEwsCi0JCQkJCQkgICBX QUlUX0VWRU5UX0FSQ0hJVkVSX01BSU4pOworCQkJcmMgPSBXYWl0SW50ZXJydXB0KElOVEVS UlVQVF9XQUlUX1dBS0VVUCB8CisJCQkJCQkJICAgSU5URVJSVVBUX1RFUk1JTkFURSB8CisJ CQkJCQkJICAgSU5URVJSVVBUX1NIVVRET1dOX1BHQVJDSCB8CisJCQkJCQkJICAgQ2hlY2tG b3JJbnRlcnJ1cHRzTWFzaywKKwkJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VU IHwgV0xfUE9TVE1BU1RFUl9ERUFUSCwKKwkJCQkJCQkgICBQR0FSQ0hfQVVUT1dBS0VfSU5U RVJWQUwgKiAxMDAwTCwKKwkJCQkJCQkgICBXQUlUX0VWRU5UX0FSQ0hJVkVSX01BSU4pOwog CQkJaWYgKHJjICYgV0xfUE9TVE1BU1RFUl9ERUFUSCkKIAkJCQl0aW1lX3RvX3N0b3AgPSB0 cnVlOwogCQl9CkBAIC00MDgsNyArNDE3LDcgQEAgcGdhcmNoX0FyY2hpdmVyQ29weUxvb3Ao dm9pZCkKIAkJCSAqIGNvbW1hbmQsIGFuZCB0aGUgc2Vjb25kIGlzIHRvIGF2b2lkIGNvbmZs aWN0cyB3aXRoIGFub3RoZXIKIAkJCSAqIGFyY2hpdmVyIHNwYXduZWQgYnkgYSBuZXdlciBw b3N0bWFzdGVyLgogCQkJICovCi0JCQlpZiAoU2h1dGRvd25SZXF1ZXN0UGVuZGluZyB8fCAh UG9zdG1hc3RlcklzQWxpdmUoKSkKKwkJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQ VF9URVJNSU5BVEUpIHx8ICFQb3N0bWFzdGVySXNBbGl2ZSgpKQogCQkJCXJldHVybjsKIAog CQkJLyoKQEAgLTQxNiw3ICs0MjUsNyBAQCBwZ2FyY2hfQXJjaGl2ZXJDb3B5TG9vcCh2b2lk KQogCQkJICogd2UnbGwgYWRvcHQgYSBuZXcgc2V0dGluZyBmb3IgYXJjaGl2ZV9jb21tYW5k IGFzIHNvb24gYXMKIAkJCSAqIHBvc3NpYmxlLCBldmVuIGlmIHRoZXJlIGlzIGEgYmFja2xv ZyBvZiBmaWxlcyB0byBiZSBhcmNoaXZlZC4KIAkJCSAqLwotCQkJUHJvY2Vzc1BnQXJjaElu dGVycnVwdHMoKTsKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJCS8qIFJlc2V0 IHZhcmlhYmxlcyB0aGF0IG1pZ2h0IGJlIHNldCBieSB0aGUgY2FsbGJhY2sgKi8KIAkJCWFy Y2hfbW9kdWxlX2NoZWNrX2VycmRldGFpbF9zdHJpbmcgPSBOVUxMOwpAQCAtODQ5LDMwICs4 NTgsMTMgQEAgcGdhcmNoX2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogCVBnQXJjaC0+cGdw cm9jbm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOwogfQogCi0vKgotICogSW50ZXJydXB0IGhh bmRsZXIgZm9yIFdBTCBhcmNoaXZlciBwcm9jZXNzLgotICoKLSAqIFRoaXMgaXMgY2FsbGVk IGluIHRoZSBsb29wcyBwZ2FyY2hfTWFpbkxvb3AgYW5kIHBnYXJjaF9BcmNoaXZlckNvcHlM b29wLgotICogSXQgY2hlY2tzIGZvciBiYXJyaWVyIGV2ZW50cywgY29uZmlnIHVwZGF0ZSBh bmQgcmVxdWVzdCBmb3IgbG9nZ2luZyBvZgotICogbWVtb3J5IGNvbnRleHRzLCBidXQgbm90 IHNodXRkb3duIHJlcXVlc3QgYmVjYXVzZSBob3cgdG8gaGFuZGxlCi0gKiBzaHV0ZG93biBy ZXF1ZXN0IGlzIGRpZmZlcmVudCBiZXR3ZWVuIHRob3NlIGxvb3BzLgotICovCiBzdGF0aWMg dm9pZAotUHJvY2Vzc1BnQXJjaEludGVycnVwdHModm9pZCkKK3BnYXJjaF9Qcm9jZXNzQ29u ZmlnUmVsb2FkSW50ZXJydXB0KHZvaWQpCiB7Ci0JaWYgKFByb2NTaWduYWxCYXJyaWVyUGVu ZGluZykKLQkJUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKCk7Ci0KLQkvKiBQZXJmb3JtIGxv Z2dpbmcgb2YgbWVtb3J5IGNvbnRleHRzIG9mIHRoaXMgcHJvY2VzcyAqLwotCWlmIChMb2dN ZW1vcnlDb250ZXh0UGVuZGluZykKLQkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1 cHQoKTsKLQotCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQogCXsKIAkJY2hhcgkgICAqYXJj aGl2ZUxpYiA9IHBzdHJkdXAoWExvZ0FyY2hpdmVMaWJyYXJ5KTsKIAkJYm9vbAkJYXJjaGl2 ZUxpYkNoYW5nZWQ7CiAKLQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCQlQcm9j ZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKIAogCQlpZiAoWExvZ0FyY2hpdmVMaWJyYXJ5 WzBdICE9ICdcMCcgJiYgWExvZ0FyY2hpdmVDb21tYW5kWzBdICE9ICdcMCcpCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDNmYWM0NmM0MDJiLi42ZWZjNTY5Njk5 NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTUzOSwxMCArNTM5 LDggQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkgKiBTZXQg dXAgc2lnbmFsIGhhbmRsZXJzIGZvciB0aGUgcG9zdG1hc3RlciBwcm9jZXNzLgogCSAqCiAJ ICogQ0FVVElPTjogd2hlbiBjaGFuZ2luZyB0aGlzIGxpc3QsIGNoZWNrIGZvciBzaWRlLWVm ZmVjdHMgb24gdGhlIHNpZ25hbAotCSAqIGhhbmRsaW5nIHNldHVwIG9mIGNoaWxkIHByb2Nl c3Nlcy4gIFNlZSB0Y29wL3Bvc3RncmVzLmMsCi0JICogYm9vdHN0cmFwL2Jvb3RzdHJhcC5j LCBwb3N0bWFzdGVyL2Jnd3JpdGVyLmMsIHBvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMsCi0JICog cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMsIHBvc3RtYXN0ZXIvcGdhcmNoLmMsIHBvc3RtYXN0 ZXIvc3lzbG9nZ2VyLmMsCi0JICogcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGFuZCBwb3N0bWFz dGVyL2NoZWNrcG9pbnRlci5jLgorCSAqIGhhbmRsaW5nIHNldHVwIG9mIGNoaWxkIHByb2Nl c3Nlcy4gIFNlZQorCSAqIFNldFBvc3RtYXN0ZXJDaGlsZFNpZ25hbEhhbmRsZXJzKCkKIAkg Ki8KIAlwcWluaXRtYXNrKCk7CiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZCbG9ja1Np ZywgTlVMTCk7CkBAIC01NTksNyArNTU3LDYgQEAgUG9zdG1hc3Rlck1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAogCS8qIFRoaXMgbWF5IGNvbmZpZ3VyZSBTSUdVUkcsIGRlcGVu ZGluZyBvbiBwbGF0Zm9ybS4gKi8KIAlJbml0aWFsaXplV2FpdEV2ZW50U3VwcG9ydCgpOwot CUluaXRQcm9jZXNzTG9jYWxMYXRjaCgpOwogCiAJLyoKIAkgKiBObyBvdGhlciBwbGFjZSBp biBQb3N0Z3JlcyBzaG91bGQgdG91Y2ggU0lHVFRJTi9TSUdUVE9VIGhhbmRsaW5nLiAgV2UK QEAgLTU4MCw2ICs1NzcsOCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCXBxc2lnbmFsKFNJR1hGU1osIFNJR19JR04pOyAvKiBpZ25vcmVkICovCiAjZW5k aWYKIAorCS8qIG5vdGU6IHdlIGRvIG5vdCBpbnN0YWxsIHRoZSBzdGFuZGFyZCBpbnRlcnJ1 cHQgaGFuZGxlcnMgaW4gcG9zdG1hc3RlciAqLworCiAJLyogQmVnaW4gYWNjZXB0aW5nIHNp Z25hbHMuICovCiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZVbkJsb2NrU2lnLCBOVUxM KTsKIApAQCAtMTY0NSwxNCArMTY0NCwxNSBAQCBDb25maWd1cmVQb3N0bWFzdGVyV2FpdFNl dChib29sIGFjY2VwdF9jb25uZWN0aW9ucykKIAogCXBtX3dhaXRfc2V0ID0gQ3JlYXRlV2Fp dEV2ZW50U2V0KE5VTEwsCiAJCQkJCQkJCQkgYWNjZXB0X2Nvbm5lY3Rpb25zID8gKDEgKyBO dW1MaXN0ZW5Tb2NrZXRzKSA6IDEpOwotCUFkZFdhaXRFdmVudFRvU2V0KHBtX3dhaXRfc2V0 LCBXTF9MQVRDSF9TRVQsIFBHSU5WQUxJRF9TT0NLRVQsIE15TGF0Y2gsCisJQWRkV2FpdEV2 ZW50VG9TZXQocG1fd2FpdF9zZXQsIFdMX0lOVEVSUlVQVCwgUEdJTlZBTElEX1NPQ0tFVCwK KwkJCQkJICBJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCB8IElOVEVSUlVQVF9XQUlUX1dBS0VV UCwKIAkJCQkJICBOVUxMKTsKIAogCWlmIChhY2NlcHRfY29ubmVjdGlvbnMpCiAJewogCQlm b3IgKGludCBpID0gMDsgaSA8IE51bUxpc3RlblNvY2tldHM7IGkrKykKIAkJCUFkZFdhaXRF dmVudFRvU2V0KHBtX3dhaXRfc2V0LCBXTF9TT0NLRVRfQUNDRVBULCBMaXN0ZW5Tb2NrZXRz W2ldLAotCQkJCQkJCSAgTlVMTCwgTlVMTCk7CisJCQkJCQkJICAwLCBOVUxMKTsKIAl9CiB9 CiAKQEAgLTE2ODEsMTkgKzE2ODEsMjAgQEAgU2VydmVyTG9vcCh2b2lkKQogCQkJCQkJCQkg ICAwIC8qIHBvc3RtYXN0ZXIgcG9zdHMgbm8gd2FpdF9ldmVudHMgKi8gKTsKIAogCQkvKgot CQkgKiBMYXRjaCBzZXQgYnkgc2lnbmFsIGhhbmRsZXIsIG9yIG5ldyBjb25uZWN0aW9uIHBl bmRpbmcgb24gYW55IG9mCi0JCSAqIG91ciBzb2NrZXRzPyBJZiB0aGUgbGF0dGVyLCBmb3Jr IGEgY2hpbGQgcHJvY2VzcyB0byBkZWFsIHdpdGggaXQuCisJCSAqIEludGVycnVwdCByYWlz ZWQgYnkgc2lnbmFsIGhhbmRsZXIsIG9yIG5ldyBjb25uZWN0aW9uIHBlbmRpbmcgb24KKwkJ ICogYW55IG9mIG91ciBzb2NrZXRzPyAgSWYgdGhlIGxhdHRlciwgZm9yayBhIGNoaWxkIHBy b2Nlc3MgdG8gZGVhbAorCQkgKiB3aXRoIGl0LgogCQkgKi8KIAkJZm9yIChpbnQgaSA9IDA7 IGkgPCBuZXZlbnRzOyBpKyspCiAJCXsKLQkJCWlmIChldmVudHNbaV0uZXZlbnRzICYgV0xf TEFUQ0hfU0VUKQotCQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlpZiAoZXZlbnRzW2ld LmV2ZW50cyAmIFdMX0lOVEVSUlVQVCkKKwkJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRf V0FJVF9XQUtFVVApOwogCiAJCQkvKgogCQkJICogVGhlIGZvbGxvd2luZyByZXF1ZXN0cyBh cmUgaGFuZGxlZCB1bmNvbmRpdGlvbmFsbHksIGV2ZW4gaWYgd2UKLQkJCSAqIGRpZG4ndCBz ZWUgV0xfTEFUQ0hfU0VULiAgVGhpcyBnaXZlcyBoaWdoIHByaW9yaXR5IHRvIHNodXRkb3du Ci0JCQkgKiBhbmQgcmVsb2FkIHJlcXVlc3RzIHdoZXJlIHRoZSBsYXRjaCBoYXBwZW5zIHRv IGFwcGVhciBsYXRlciBpbgotCQkJICogZXZlbnRzW10gb3Igd2lsbCBiZSByZXBvcnRlZCBi eSBhIGxhdGVyIGNhbGwgdG8KKwkJCSAqIGRpZG4ndCBzZWUgV0xfSU5URVJSVVBULiAgVGhp cyBnaXZlcyBoaWdoIHByaW9yaXR5IHRvIHNodXRkb3duCisJCQkgKiBhbmQgcmVsb2FkIHJl cXVlc3RzIHdoZXJlIHRoZSBpbnRlcnJ1cHQgZXZlbnQgaGFwcGVucyB0byBhcHBlYXIKKwkJ CSAqIGxhdGVyIGluIGV2ZW50c1tdIG9yIHdpbGwgYmUgcmVwb3J0ZWQgYnkgYSBsYXRlciBj YWxsIHRvCiAJCQkgKiBXYWl0RXZlbnRTZXRXYWl0KCkuCiAJCQkgKi8KIAkJCWlmIChwZW5k aW5nX3BtX3NodXRkb3duX3JlcXVlc3QpCkBAIC0xOTg1LDcgKzE5ODYsNyBAQCBzdGF0aWMg dm9pZAogaGFuZGxlX3BtX3Btc2lnbmFsX3NpZ25hbChTSUdOQUxfQVJHUykKIHsKIAlwZW5k aW5nX3BtX3Btc2lnbmFsID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUlu dGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogfQogCiAvKgpAQCAtMTk5NSw3ICsx OTk2LDcgQEAgc3RhdGljIHZvaWQKIGhhbmRsZV9wbV9yZWxvYWRfcmVxdWVzdF9zaWduYWwo U0lHTkFMX0FSR1MpCiB7CiAJcGVuZGluZ19wbV9yZWxvYWRfcmVxdWVzdCA9IHRydWU7Ci0J U2V0TGF0Y2goTXlMYXRjaCk7CisJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FL RVVQKTsKIH0KIAogLyoKQEAgLTIwNzIsNyArMjA3Myw3IEBAIGhhbmRsZV9wbV9zaHV0ZG93 bl9yZXF1ZXN0X3NpZ25hbChTSUdOQUxfQVJHUykKIAkJCXBlbmRpbmdfcG1fc2h1dGRvd25f cmVxdWVzdCA9IHRydWU7CiAJCQlicmVhazsKIAl9Ci0JU2V0TGF0Y2goTXlMYXRjaCk7CisJ UmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIH0KIAogLyoKQEAgLTIy MzMsNyArMjIzNCw3IEBAIHN0YXRpYyB2b2lkCiBoYW5kbGVfcG1fY2hpbGRfZXhpdF9zaWdu YWwoU0lHTkFMX0FSR1MpCiB7CiAJcGVuZGluZ19wbV9jaGlsZF9leGl0ID0gdHJ1ZTsKLQlT ZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtF VVApOwogfQogCiAvKgpAQCAtMjU4MSw2ICsyNTgyLDcgQEAgQ2xlYW51cEJhY2tlbmQoUE1D aGlsZCAqYnAsCiAJYm9vbAkJY3Jhc2hlZCA9IGZhbHNlOwogCWJvb2wJCWxvZ2dlZCA9IGZh bHNlOwogCXBpZF90CQlicF9waWQ7CisJaW50CQkJYnBfY2hpbGRfc2xvdDsKIAlib29sCQli cF9iZ3dvcmtlcl9ub3RpZnk7CiAJQmFja2VuZFR5cGUgYnBfYmtlbmRfdHlwZTsKIAlSZWdp c3RlcmVkQmdXb3JrZXIgKnJ3OwpAQCAtMjYyOCw2ICsyNjMwLDcgQEAgQ2xlYW51cEJhY2tl bmQoUE1DaGlsZCAqYnAsCiAJICogZGV0YWNoZWQgY2xlYW5seS4KIAkgKi8KIAlicF9waWQg PSBicC0+cGlkOworCWJwX2NoaWxkX3Nsb3QgPSBicC0+Y2hpbGRfc2xvdDsKIAlicF9iZ3dv cmtlcl9ub3RpZnkgPSBicC0+Ymd3b3JrZXJfbm90aWZ5OwogCWJwX2JrZW5kX3R5cGUgPSBi cC0+YmtlbmRfdHlwZTsKIAlydyA9IGJwLT5ydzsKQEAgLTI2NTUsMTQgKzI2NTgsMTQgQEAg Q2xlYW51cEJhY2tlbmQoUE1DaGlsZCAqYnAsCiAJfQogCiAJLyoKLQkgKiBUaGlzIGJhY2tl bmQgbWF5IGhhdmUgYmVlbiBzbGF0ZWQgdG8gcmVjZWl2ZSBTSUdVU1IxIHdoZW4gc29tZQot CSAqIGJhY2tncm91bmQgd29ya2VyIHN0YXJ0ZWQgb3Igc3RvcHBlZC4gIENhbmNlbCB0aG9z ZSBub3RpZmljYXRpb25zLCBhcwotCSAqIHdlIGRvbid0IHdhbnQgdG8gc2lnbmFsIFBJRHMg dGhhdCBhcmUgbm90IFBvc3RncmVTUUwgYmFja2VuZHMuICBUaGlzCisJICogVGhpcyBiYWNr ZW5kIG1heSBoYXZlIGJlZW4gc2xhdGVkIHRvIHJlY2VpdmUgSU5URVJSVVBUX1dBSVRfV0FL RVVQIHdoZW4KKwkgKiBzb21lIGJhY2tncm91bmQgd29ya2VyIHN0YXJ0ZWQgb3Igc3RvcHBl ZC4gIENhbmNlbCB0aG9zZSBub3RpZmljYXRpb25zLAorCSAqIGFzIHdlIGRvbid0IHdhbnQg dG8gc2lnbmFsIFBJRHMgdGhhdCBhcmUgbm90IFBvc3RncmVTUUwgYmFja2VuZHMuICBUaGlz CiAJICogZ2V0cyBza2lwcGVkIGluIHRoZSAocHJvYmFibHkgdmVyeSBjb21tb24pIGNhc2Ug d2hlcmUgdGhlIGJhY2tlbmQgaGFzCiAJICogbmV2ZXIgcmVxdWVzdGVkIGFueSBzdWNoIG5v dGlmaWNhdGlvbnMuCiAJICovCiAJaWYgKGJwX2Jnd29ya2VyX25vdGlmeSkKLQkJQmFja2dy b3VuZFdvcmtlclN0b3BOb3RpZmljYXRpb25zKGJwX3BpZCk7CisJCUJhY2tncm91bmRXb3Jr ZXJTdG9wTm90aWZpY2F0aW9ucyhicF9jaGlsZF9zbG90KTsKIAogCS8qCiAJICogSWYgaXQg d2FzIGFuIGF1dG92YWN1dW0gd29ya2VyLCB3YWtlIHVwIHRoZSBsYXVuY2hlciBzbyB0aGF0 IGl0IGNhbgpAQCAtMzkyMSw3ICszOTI0LDcgQEAgcHJvY2Vzc19wbV9wbXNpZ25hbCh2b2lk KQogICogYnV0IHdlIGRvIHVzZSBpbiBiYWNrZW5kcy4gIElmIHdlIHdlcmUgdG8gU0lHX0lH TiBzdWNoIHNpZ25hbHMgaW4gdGhlCiAgKiBwb3N0bWFzdGVyLCB0aGVuIGEgbmV3bHkgc3Rh cnRlZCBiYWNrZW5kIG1pZ2h0IGRyb3AgYSBzaWduYWwgdGhhdCBhcnJpdmVzCiAgKiBiZWZv cmUgaXQncyBhYmxlIHRvIHJlY29uZmlndXJlIGl0cyBzaWduYWwgcHJvY2Vzc2luZy4gIChT ZWUgbm90ZXMgaW4KLSAqIHRjb3AvcG9zdGdyZXMuYy4pCisgKiB0Y29wL3Bvc3RncmVzLmMu KSBYWFg6IHdoZXJlIGFyZSB0aG9zZSBub3RlcyBub3c/CiAgKi8KIHN0YXRpYyB2b2lkCiBk dW1teV9oYW5kbGVyKFNJR05BTF9BUkdTKQpAQCAtNDI5NiwxNSArNDI5OSwxNSBAQCBtYXli ZV9zdGFydF9iZ3dvcmtlcnModm9pZCkKIAkJewogCQkJaWYgKHJ3LT5yd193b3JrZXIuYmd3 X3Jlc3RhcnRfdGltZSA9PSBCR1dfTkVWRVJfUkVTVEFSVCkKIAkJCXsKLQkJCQlpbnQJCQlu b3RpZnlfcGlkOworCQkJCVByb2NOdW1iZXIJbm90aWZ5X3Byb2NfbnVtYmVyOwogCi0JCQkJ bm90aWZ5X3BpZCA9IHJ3LT5yd193b3JrZXIuYmd3X25vdGlmeV9waWQ7CisJCQkJbm90aWZ5 X3Byb2NfbnVtYmVyID0gR2V0Tm90aWZ5UHJvY051bWJlckZvclJlZ2lzdGVyZWRXb3JrZXIo cncpOwogCiAJCQkJRm9yZ2V0QmFja2dyb3VuZFdvcmtlcihydyk7CiAKIAkJCQkvKiBSZXBv cnQgd29ya2VyIGlzIGdvbmUgbm93LiAqLwotCQkJCWlmIChub3RpZnlfcGlkICE9IDApCi0J CQkJCWtpbGwobm90aWZ5X3BpZCwgU0lHVVNSMSk7CisJCQkJaWYgKG5vdGlmeV9wcm9jX251 bWJlciAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQorCQkJCQlTZW5kSW50ZXJydXB0KElOVEVS UlVQVF9XQUlUX1dBS0VVUCwgbm90aWZ5X3Byb2NfbnVtYmVyKTsKIAogCQkJCWNvbnRpbnVl OwogCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYwppbmRleCAzMzBjMTBkZGIwYi4u YmIyMzY0MmI3M2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1 cC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCkBAIC0yMiwxMiAr MjIsMTUgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy94 bG9ncmVjb3ZlcnkuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCisjaW5jbHVk ZSAiaXBjL2ludGVycnVwdC5oIgorI2luY2x1ZGUgImlwYy9zaWduYWxfaGFuZGxlcnMuaCIK ICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvc3RhcnR1cC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9wbXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgog I2luY2x1ZGUgInV0aWxzL2d1Yy5oIgpAQCAtMzgsMjEgKzQxLDE0IEBACiAjaWZuZGVmIFVT RV9QT1NUTUFTVEVSX0RFQVRIX1NJR05BTAogLyoKICAqIE9uIHN5c3RlbXMgdGhhdCBuZWVk IHRvIG1ha2UgYSBzeXN0ZW0gY2FsbCB0byBmaW5kIG91dCBpZiB0aGUgcG9zdG1hc3RlciBo YXMKLSAqIGdvbmUgYXdheSwgd2UnbGwgZG8gc28gb25seSBldmVyeSBOdGggY2FsbCB0byBQ cm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKCkuCisgKiBnb25lIGF3YXksIHdlJ2xsIGRv IHNvIG9ubHkgZXZlcnkgTnRoIGNhbGwgdG8gU3RhcnR1cENoZWNrUG9zdG1hc3RlckRlYXRo KCkuCiAgKiBUaGlzIG9ubHkgYWZmZWN0cyBob3cgbG9uZyBpdCB0YWtlcyB1cyB0byBkZXRl Y3QgdGhlIGNvbmRpdGlvbiB3aGlsZSB3ZSdyZQotICogYnVzeSByZXBsYXlpbmcgV0FMLiAg TGF0Y2ggd2FpdHMgYW5kIHNpbWlsYXIgd2hpY2ggc2hvdWxkIHJlYWN0IGltbWVkaWF0ZWx5 CisgKiBidXN5IHJlcGxheWluZyBXQUwuICBJbnRlcnJ1cHQgd2FpdHMgYW5kIHNpbWlsYXIg c2hvdWxkIHJlYWN0IGltbWVkaWF0ZWx5CiAgKiB0aHJvdWdoIHRoZSB1c3VhbCB0ZWNobmlx dWVzLgogICovCiAjZGVmaW5lIFBPU1RNQVNURVJfUE9MTF9SQVRFX0xJTUlUIDEwMjQKICNl bmRpZgogCi0vKgotICogRmxhZ3Mgc2V0IGJ5IGludGVycnVwdCBoYW5kbGVycyBmb3IgbGF0 ZXIgc2VydmljZSBpbiB0aGUgcmVkbyBsb29wLgotICovCi1zdGF0aWMgdm9sYXRpbGUgc2ln X2F0b21pY190IGdvdF9TSUdIVVAgPSBmYWxzZTsKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRv bWljX3Qgc2h1dGRvd25fcmVxdWVzdGVkID0gZmFsc2U7Ci1zdGF0aWMgdm9sYXRpbGUgc2ln X2F0b21pY190IHByb21vdGVfc2lnbmFsZWQgPSBmYWxzZTsKLQogLyoKICAqIEZsYWcgc2V0 IHdoZW4gZXhlY3V0aW5nIGEgcmVzdG9yZSBjb21tYW5kLCB0byB0ZWxsIFNJR1RFUk0gc2ln bmFsIGhhbmRsZXIKICAqIHRoYXQgaXQncyBzYWZlIHRvIGp1c3QgcHJvY19leGl0LgpAQCAt NzcsNyArNzMsNyBAQCBpbnQJCQlsb2dfc3RhcnR1cF9wcm9ncmVzc19pbnRlcnZhbCA9IDEw MDAwOwkvKiAxMCBzZWMgKi8KIAogLyogU2lnbmFsIGhhbmRsZXJzICovCiBzdGF0aWMgdm9p ZCBTdGFydHVwUHJvY1RyaWdnZXJIYW5kbGVyKFNJR05BTF9BUkdTKTsKLXN0YXRpYyB2b2lk IFN0YXJ0dXBQcm9jU2lnSHVwSGFuZGxlcihTSUdOQUxfQVJHUyk7CitzdGF0aWMgdm9pZCBT dGFydHVwUHJvY1NodXRkb3duSGFuZGxlcihTSUdOQUxfQVJHUyk7CiAKIC8qIENhbGxiYWNr cyAqLwogc3RhdGljIHZvaWQgU3RhcnR1cFByb2NFeGl0KGludCBjb2RlLCBEYXR1bSBhcmcp OwpAQCAtOTIsMTYgKzg4LDEyIEBAIHN0YXRpYyB2b2lkIFN0YXJ0dXBQcm9jRXhpdChpbnQg Y29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkCiBTdGFydHVwUHJvY1RyaWdnZXJIYW5k bGVyKFNJR05BTF9BUkdTKQogewotCXByb21vdGVfc2lnbmFsZWQgPSB0cnVlOwotCVdha2V1 cFJlY292ZXJ5KCk7Ci19Ci0KLS8qIFNJR0hVUDogc2V0IGZsYWcgdG8gcmUtcmVhZCBjb25m aWcgZmlsZSBhdCBuZXh0IGNvbnZlbmllbnQgdGltZSAqLwotc3RhdGljIHZvaWQKLVN0YXJ0 dXBQcm9jU2lnSHVwSGFuZGxlcihTSUdOQUxfQVJHUykKLXsKLQlnb3RfU0lHSFVQID0gdHJ1 ZTsKLQlXYWtldXBSZWNvdmVyeSgpOworCS8qCisJICogVGhlIElOVEVSUlVQVF9DSEVDS19Q Uk9NT1RFIGZsYWcgaGludHMgdGhlIHN0YXJ0dXAgcHJvY2VzcyB0byBjaGVjayBmb3IKKwkg KiB0aGUgc2lnbmFsIGZpbGUsIHdoaWxlIElOVEVSUlVQVF9XQUxfQVJSSVZFRCB3YWtlcyB1 cCB0aGUgcHJvY2VzcyBmcm9tCisJICogc2xlZXAuCisJICovCisJUmFpc2VJbnRlcnJ1cHQo SU5URVJSVVBUX0NIRUNLX1BST01PVEUgfCBJTlRFUlJVUFRfV0FMX0FSUklWRUQpOwogfQog CiAvKiBTSUdURVJNOiBzZXQgZmxhZyB0byBhYm9ydCByZWRvIGFuZCBleGl0ICovCkBAIC0x MTEsOCArMTAzLDE2IEBAIFN0YXJ0dXBQcm9jU2h1dGRvd25IYW5kbGVyKFNJR05BTF9BUkdT KQogCWlmIChpbl9yZXN0b3JlX2NvbW1hbmQpCiAJCXByb2NfZXhpdCgxKTsKIAllbHNlCi0J CXNodXRkb3duX3JlcXVlc3RlZCA9IHRydWU7Ci0JV2FrZXVwUmVjb3ZlcnkoKTsKKwkJUmFp c2VJbnRlcnJ1cHQoSU5URVJSVVBUX1RFUk1JTkFURSk7Cit9CisKKy8qIFByb2Nlc3MgdmFy aW91cyBpbnRlcnJ1cHRzIHRoYXQgbWlnaHQgYmUgc2VudCB0byB0aGUgc3RhcnR1cCBwcm9j ZXNzICovCisKK3N0YXRpYyB2b2lkCitQcm9jZXNzU3RhcnR1cFByb2NUZXJtaW5hdGVJbnRl cnJ1cHQodm9pZCkKK3sKKwkvKiB3ZSB3ZXJlIHJlcXVlc3RlZCB0byBleGl0IHdpdGhvdXQg ZmluaXNoaW5nIHJlY292ZXJ5LiAqLworCXByb2NfZXhpdCgxKTsKIH0KIAogLyoKQEAgLTEy Miw3ICsxMjIsOCBAQCBTdGFydHVwUHJvY1NodXRkb3duSGFuZGxlcihTSUdOQUxfQVJHUykK ICAqIHRvIHJlc3RhcnQgaXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1TdGFydHVwUmVyZWFkQ29u ZmlnKHZvaWQpCitQcm9jZXNzU3RhcnR1cFByb2NDb25maWdSZWxvYWRJbnRlcnJ1cHQodm9p ZCkKKwogewogCWNoYXIJICAgKmNvbm5pbmZvID0gcHN0cmR1cChQcmltYXJ5Q29ubkluZm8p OwogCWNoYXIJICAgKnNsb3RuYW1lID0gcHN0cmR1cChQcmltYXJ5U2xvdE5hbWUpOwpAQCAt MTQ5LDI5ICsxNTAsMTMgQEAgU3RhcnR1cFJlcmVhZENvbmZpZyh2b2lkKQogCQlTdGFydHVw UmVxdWVzdFdhbFJlY2VpdmVyUmVzdGFydCgpOwogfQogCi0vKiBQcm9jZXNzIHZhcmlvdXMg c2lnbmFscyB0aGF0IG1pZ2h0IGJlIHNlbnQgdG8gdGhlIHN0YXJ0dXAgcHJvY2VzcyAqLwog dm9pZAotUHJvY2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0cyh2b2lkKQorU3RhcnR1cFByb2ND aGVja1Bvc3RtYXN0ZXJEZWF0aCh2b2lkKQogewogI2lmZGVmIFBPU1RNQVNURVJfUE9MTF9S QVRFX0xJTUlUCiAJc3RhdGljIHVpbnQzMiBwb3N0bWFzdGVyX3BvbGxfY291bnQgPSAwOwog I2VuZGlmCiAKLQkvKgotCSAqIFByb2Nlc3MgYW55IHJlcXVlc3RzIG9yIHNpZ25hbHMgcmVj ZWl2ZWQgcmVjZW50bHkuCi0JICovCi0JaWYgKGdvdF9TSUdIVVApCi0JewotCQlnb3RfU0lH SFVQID0gZmFsc2U7Ci0JCVN0YXJ0dXBSZXJlYWRDb25maWcoKTsKLQl9Ci0KLQkvKgotCSAq IENoZWNrIGlmIHdlIHdlcmUgcmVxdWVzdGVkIHRvIGV4aXQgd2l0aG91dCBmaW5pc2hpbmcg cmVjb3ZlcnkuCi0JICovCi0JaWYgKHNodXRkb3duX3JlcXVlc3RlZCkKLQkJcHJvY19leGl0 KDEpOwotCiAJLyoKIAkgKiBFbWVyZ2VuY3kgYmFpbG91dCBpZiBwb3N0bWFzdGVyIGhhcyBk aWVkLiAgVGhpcyBpcyB0byBhdm9pZCB0aGUKIAkgKiBuZWNlc3NpdHkgZm9yIG1hbnVhbCBj bGVhbnVwIG9mIGFsbCBwb3N0bWFzdGVyIGNoaWxkcmVuLiAgRG8gdGhpcyBsZXNzCkBAIC0x ODQsMTQgKzE2OSw2IEBAIFByb2Nlc3NTdGFydHVwUHJvY0ludGVycnVwdHModm9pZCkKICNl bmRpZgogCQkhUG9zdG1hc3RlcklzQWxpdmUoKSkKIAkJZXhpdCgxKTsKLQotCS8qIFByb2Nl c3MgYmFycmllciBldmVudHMgKi8KLQlpZiAoUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nKQot CQlQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIoKTsKLQotCS8qIFBlcmZvcm0gbG9nZ2luZyBv ZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCi0JaWYgKExvZ01lbW9yeUNv bnRleHRQZW5kaW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwog fQogCiAKQEAgLTIyNSwxNSArMjAyLDEzIEBAIFN0YXJ0dXBQcm9jZXNzTWFpbihjb25zdCB2 b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCS8qCiAJICog UHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0 IHNlbmQgdXMuCiAJICovCi0JcHFzaWduYWwoU0lHSFVQLCBTdGFydHVwUHJvY1NpZ0h1cEhh bmRsZXIpOyAvKiByZWxvYWQgY29uZmlnIGZpbGUgKi8KLQlwcXNpZ25hbChTSUdJTlQsIFNJ R19JR04pOwkvKiBpZ25vcmUgcXVlcnkgY2FuY2VsICovCisKKwkvKiBvdmVycmlkZSBTSUdU RVJNIGJlY2F1c2Ugd2UgbmVlZCBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkIGhhbmRsaW5n ICovCiAJcHFzaWduYWwoU0lHVEVSTSwgU3RhcnR1cFByb2NTaHV0ZG93bkhhbmRsZXIpOwkv KiByZXF1ZXN0IHNodXRkb3duICovCi0JLyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5 IHNldCB1cCBieSBJbml0UG9zdG1hc3RlckNoaWxkICovCi0JSW5pdGlhbGl6ZVRpbWVvdXRz KCk7CQkvKiBlc3RhYmxpc2hlcyBTSUdBTFJNIGhhbmRsZXIgKi8KLQlwcXNpZ25hbChTSUdQ SVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFf aGFuZGxlcik7CiAJcHFzaWduYWwoU0lHVVNSMiwgU3RhcnR1cFByb2NUcmlnZ2VySGFuZGxl cik7CiAKKwlJbml0aWFsaXplVGltZW91dHMoKTsJCS8qIGVzdGFibGlzaGVzIFNJR0FMUk0g aGFuZGxlciAqLworCiAJLyoKIAkgKiBSZWdpc3RlciB0aW1lb3V0cyBuZWVkZWQgZm9yIHN0 YW5kYnkgbW9kZQogCSAqLwpAQCAtMjQxLDYgKzIxNiwxMyBAQCBTdGFydHVwUHJvY2Vzc01h aW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikK IAlSZWdpc3RlclRpbWVvdXQoU1RBTkRCWV9USU1FT1VULCBTdGFuZGJ5VGltZW91dEhhbmRs ZXIpOwogCVJlZ2lzdGVyVGltZW91dChTVEFOREJZX0xPQ0tfVElNRU9VVCwgU3RhbmRieUxv Y2tUaW1lb3V0SGFuZGxlcik7CiAKKwkvKiBPbmx5IHNldCB1cCBhIHN1YnNldCBvZiB0aGUg c3RhbmRhcmQgaW50ZXJydXB0IGhhbmRsZXJzICovCisJU2V0U3RhbmRhcmRJbnRlcnJ1cHRI YW5kbGVycygpOworCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX1RFUk1JTkFURSwg UHJvY2Vzc1N0YXJ0dXBQcm9jVGVybWluYXRlSW50ZXJydXB0KTsKKwlFbmFibGVJbnRlcnJ1 cHQoSU5URVJSVVBUX1RFUk1JTkFURSk7CisJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJV UFRfQ09ORklHX1JFTE9BRCwgUHJvY2Vzc1N0YXJ0dXBQcm9jQ29uZmlnUmVsb2FkSW50ZXJy dXB0KTsKKwlFbmFibGVJbnRlcnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpOworCiAJ LyoKIAkgKiBVbmJsb2NrIHNpZ25hbHMgKHRoZXkgd2VyZSBibG9ja2VkIHdoZW4gdGhlIHBv c3RtYXN0ZXIgZm9ya2VkIHVzKQogCSAqLwpAQCAtMjY4LDcgKzI1MCw3IEBAIFByZVJlc3Rv cmVDb21tYW5kKHZvaWQpCiAJICogc2h1dGRvd24gcmVxdWVzdCByZWNlaXZlZCBqdXN0IGJl Zm9yZSB0aGlzLgogCSAqLwogCWluX3Jlc3RvcmVfY29tbWFuZCA9IHRydWU7Ci0JaWYgKHNo dXRkb3duX3JlcXVlc3RlZCkKKwlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfVEVS TUlOQVRFKSkKIAkJcHJvY19leGl0KDEpOwogfQogCkBAIC0yNzgsMTggKzI2MCw2IEBAIFBv c3RSZXN0b3JlQ29tbWFuZCh2b2lkKQogCWluX3Jlc3RvcmVfY29tbWFuZCA9IGZhbHNlOwog fQogCi1ib29sCi1Jc1Byb21vdGVTaWduYWxlZCh2b2lkKQotewotCXJldHVybiBwcm9tb3Rl X3NpZ25hbGVkOwotfQotCi12b2lkCi1SZXNldFByb21vdGVTaWduYWxlZCh2b2lkKQotewot CXByb21vdGVfc2lnbmFsZWQgPSBmYWxzZTsKLX0KLQogLyoKICAqIFNldCBhIGZsYWcgaW5k aWNhdGluZyB0aGF0IGl0J3MgdGltZSB0byBsb2cgYSBwcm9ncmVzcyByZXBvcnQuCiAgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jCmluZGV4IDg1MTViZmI5NjUzLi5jOWZh YTc2YjZhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIu YworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jCkBAIC0zMiw2ICsz Miw4IEBACiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9maWxl X3Blcm0uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3Np Z25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVk ZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTM5LDEz ICs0MSwxMSBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBndGltZS5oIgog I2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2lu dGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9kc20uaCIK ICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNp bmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5o IgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIK QEAgLTI3MiwxNiArMjcyLDE0IEBAIFN5c0xvZ2dlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1 cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkgKiB1cHN0cmVhbSBwcm9jZXNz ZXMgYXJlIGdvbmUsIHRvIGVuc3VyZSB3ZSBkb24ndCBtaXNzIGFueSBkeWluZyBnYXNwcyBv ZgogCSAqIGJyb2tlbiBiYWNrZW5kcy4uLgogCSAqLwotCi0JcHFzaWduYWwoU0lHSFVQLCBT aWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsgLyogc2V0IGZsYWcgdG8gcmVhZCBjb25m aWcKLQkJCQkJCQkJCQkJCQkgKiBmaWxlICovCiAJcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdO KTsKIAlwcXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKIAlwcXNpZ25hbChTSUdRVUlULCBT SUdfSUdOKTsKLQlwcXNpZ25hbChTSUdBTFJNLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdQ SVBFLCBTSUdfSUdOKTsKKwogCXBxc2lnbmFsKFNJR1VTUjEsIHNpZ1VzcjFIYW5kbGVyKTsJ LyogcmVxdWVzdCBsb2cgcm90YXRpb24gKi8KLQlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdO KTsKKworCVNldFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMoKTsKKwlEaXNhYmxlSW50ZXJy dXB0KElOVEVSUlVQVF9URVJNSU5BVEUpOwogCiAJc2lncHJvY21hc2soU0lHX1NFVE1BU0ss ICZVbkJsb2NrU2lnLCBOVUxMKTsKIApAQCAtMzIyLDcgKzMyMCw3IEBAIFN5c0xvZ2dlck1h aW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikK IAl3aGVyZVRvU2VuZE91dHB1dCA9IERlc3ROb25lOwogCiAJLyoKLQkgKiBTZXQgdXAgYSBy ZXVzYWJsZSBXYWl0RXZlbnRTZXQgb2JqZWN0IHdlJ2xsIHVzZSB0byB3YWl0IGZvciBvdXIg bGF0Y2gsCisJICogU2V0IHVwIGEgcmV1c2FibGUgV2FpdEV2ZW50U2V0IG9iamVjdCB3ZSds bCB1c2UgdG8gd2FpdCBmb3IgaW50ZXJydXB0cywKIAkgKiBhbmQgKGV4Y2VwdCBvbiBXaW5k b3dzKSBvdXIgc29ja2V0LgogCSAqCiAJICogVW5saWtlIGFsbCBvdGhlciBwb3N0bWFzdGVy IGNoaWxkIHByb2Nlc3Nlcywgd2UnbGwgaWdub3JlIHBvc3RtYXN0ZXIKQEAgLTMzMiw5ICsz MzAsMTIgQEAgU3lzTG9nZ2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVf dCBzdGFydHVwX2RhdGFfbGVuKQogCSAqIChpbmNsdWRpbmcgdGhlIHBvc3RtYXN0ZXIpLgog CSAqLwogCXdlcyA9IENyZWF0ZVdhaXRFdmVudFNldChOVUxMLCAyKTsKLQlBZGRXYWl0RXZl bnRUb1NldCh3ZXMsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwgTXlMYXRjaCwg TlVMTCk7CisJQWRkV2FpdEV2ZW50VG9TZXQod2VzLCBXTF9JTlRFUlJVUFQsIFBHSU5WQUxJ RF9TT0NLRVQsCisJCQkJCSAgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQgfAorCQkJCQkgIElO VEVSUlVQVF9XQUlUX1dBS0VVUCwJLyogZm9yIGxvZyByb3RhdGlvbiAqLworCQkJCQkgIE5V TEwpOwogI2lmbmRlZiBXSU4zMgotCUFkZFdhaXRFdmVudFRvU2V0KHdlcywgV0xfU09DS0VU X1JFQURBQkxFLCBzeXNsb2dQaXBlWzBdLCBOVUxMLCBOVUxMKTsKKwlBZGRXYWl0RXZlbnRU b1NldCh3ZXMsIFdMX1NPQ0tFVF9SRUFEQUJMRSwgc3lzbG9nUGlwZVswXSwgMCwgTlVMTCk7 CiAjZW5kaWYKIAogCS8qIG1haW4gd29ya2VyIGxvb3AgKi8KQEAgLTM1MCwxNCArMzUxLDEz IEBAIFN5c0xvZ2dlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikKICNlbmRpZgogCiAJCS8qIENsZWFyIGFueSBhbHJlYWR5LXBlbmRp bmcgd2FrZXVwcyAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlDbGVhckludGVycnVw dChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJCS8qCiAJCSAqIFByb2Nlc3MgYW55IHJl cXVlc3RzIG9yIHNpZ25hbHMgcmVjZWl2ZWQgcmVjZW50bHkuCiAJCSAqLwotCQlpZiAoQ29u ZmlnUmVsb2FkUGVuZGluZykKKwkJaWYgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJSVVBUX0NP TkZJR19SRUxPQUQpKQogCQl7Ci0JCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CiAJ CQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKIAogCQkJLyoKQEAgLTExODIsNyAr MTE4Miw3IEBAIHBpcGVUaHJlYWQodm9pZCAqYXJnKQogCQkJCSBmdGVsbG8oY3N2bG9nRmls ZSkgPj0gTG9nX1JvdGF0aW9uU2l6ZSAqIChwZ29mZl90KSAxMDI0KSB8fAogCQkJCShqc29u bG9nRmlsZSAhPSBOVUxMICYmCiAJCQkJIGZ0ZWxsbyhqc29ubG9nRmlsZSkgPj0gTG9nX1Jv dGF0aW9uU2l6ZSAqIChwZ29mZl90KSAxMDI0KSkKLQkJCQlTZXRMYXRjaChNeUxhdGNoKTsK KwkJCQlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQl9CiAJCUxl YXZlQ3JpdGljYWxTZWN0aW9uKCZzeXNsb2dnZXJTZWN0aW9uKTsKIAl9CkBAIC0xMTkzLDgg KzExOTMsOCBAQCBwaXBlVGhyZWFkKHZvaWQgKmFyZykKIAkvKiBpZiB0aGVyZSdzIGFueSBk YXRhIGxlZnQgdGhlbiBmb3JjZSBpdCBvdXQgbm93ICovCiAJZmx1c2hfcGlwZV9pbnB1dChs b2didWZmZXIsICZieXRlc19pbl9sb2didWZmZXIpOwogCi0JLyogc2V0IHRoZSBsYXRjaCB0 byB3YWtlbiB0aGUgbWFpbiB0aHJlYWQsIHdoaWNoIHdpbGwgcXVpdCAqLwotCVNldExhdGNo KE15TGF0Y2gpOworCS8qIHJhaXNlIHRoZSBpbnRlcnJ1cHQgdG8gd2FrZW4gdGhlIG1haW4g dGhyZWFkLCB3aGljaCB3aWxsIHF1aXQgKi8KKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRf V0FJVF9XQUtFVVApOwogCiAJTGVhdmVDcml0aWNhbFNlY3Rpb24oJnN5c2xvZ2dlclNlY3Rp b24pOwogCV9lbmR0aHJlYWQoKTsKQEAgLTE1ODUsOSArMTU4NSwxMCBAQCBSZW1vdmVMb2dy b3RhdGVTaWduYWxGaWxlcyh2b2lkKQogfQogCiAvKiBTSUdVU1IxOiBzZXQgZmxhZyB0byBy b3RhdGUgbG9nZmlsZSAqLworLyogIFRPRE86IFVzZSBhbiBpbnRlcnJ1cHQgZmxhZyBmb3Ig dGhpcyAqLwogc3RhdGljIHZvaWQKIHNpZ1VzcjFIYW5kbGVyKFNJR05BTF9BUkdTKQogewog CXJvdGF0aW9uX3JlcXVlc3RlZCA9IHRydWU7Ci0JU2V0TGF0Y2goTXlMYXRjaCk7CisJUmFp c2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci93YWxzdW1tYXJpemVyLmMKaW5kZXggNGU0ZWVkNGQwNzYuLmQ4Yzc1NGFkMjgw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwor KysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpAQCAtMzEsMTcg KzMxLDE3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlX3hsb2cuaCIKICNpbmNsdWRl ICJjb21tYW5kcy9kYmNvbW1hbmRzX3hsb2cuaCIKICNpbmNsdWRlICJjb21tb24vYmxrcmVm dGFibGUuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3Np Z25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9hdXhwcm9jZXNzLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIK ICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX3N1YnN5cy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgot I2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3Np Z25hbC5oIgpAQCAtMTQ2LDcgKzE0Niw3IEBAIGludAkJCXdhbF9zdW1tYXJ5X2tlZXBfdGlt ZSA9IDEwICogSE9VUlNfUEVSX0RBWSAqIE1JTlNfUEVSX0hPVVI7CiAKIHN0YXRpYyB2b2lk IFdhbFN1bW1hcml6ZXJTaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyBY TG9nUmVjUHRyIEdldExhdGVzdExTTihUaW1lTGluZUlEICp0bGkpOwotc3RhdGljIHZvaWQg UHJvY2Vzc1dhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKHZvaWQpOworc3RhdGljIHZvaWQgUHJv Y2Vzc1dhbFN1bW1hcml6ZXJDb25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCk7CiBzdGF0aWMg WExvZ1JlY1B0ciBTdW1tYXJpemVXQUwoVGltZUxpbmVJRCB0bGksIFhMb2dSZWNQdHIgc3Rh cnRfbHNuLAogCQkJCQkJCSAgIGJvb2wgZXhhY3QsIFhMb2dSZWNQdHIgc3dpdGNoX2xzbiwK IAkJCQkJCQkgICBYTG9nUmVjUHRyIG1heGltdW1fbHNuKTsKQEAgLTI0MCwxNiArMjQwLDE1 IEBAIFdhbFN1bW1hcml6ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCQkoZXJybXNnX2ludGVybmFsKCJXQUwgc3VtbWFyaXpl ciBzdGFydGVkIikpKTsKIAogCS8qCi0JICogUHJvcGVybHkgYWNjZXB0IG9yIGlnbm9yZSBz aWduYWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQgdXMKKwkgKiBTZXQgdXAgaW50ZXJy dXB0IGhhbmRsZXJzCiAJICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9y Q29uZmlnUmVsb2FkKTsKLQlwcXNpZ25hbChTSUdJTlQsIFNJR19JR04pOwkvKiBubyBxdWVy eSB0byBjYW5jZWwgKi8KLQlwcXNpZ25hbChTSUdURVJNLCBTaWduYWxIYW5kbGVyRm9yU2h1 dGRvd25SZXF1ZXN0KTsKLQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0IHVw IGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdBTFJNLCBTSUdfSUdO KTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdVU1IxLCBw cm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNSMiwgU0lHX0lH Tik7IC8qIG5vdCB1c2VkICovCisJU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVycygpOwor CisJLyogd2UgY2FuIGp1c3QgcHJvY19leGl0KDApIGF0IGFueSBwb2ludCBpZiByZXF1ZXN0 ZWQgdG8gdGVybWluYXRlICovCisJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfVEVS TUlOQVRFLCBQcm9jZXNzQXV4UHJvY2Vzc1NodXRkb3duSW50ZXJydXB0KTsKKwlFbmFibGVJ bnRlcnJ1cHQoSU5URVJSVVBUX1RFUk1JTkFURSk7CisJU2V0SW50ZXJydXB0SGFuZGxlcihJ TlRFUlJVUFRfQ09ORklHX1JFTE9BRCwgUHJvY2Vzc1dhbFN1bW1hcml6ZXJDb25maWdSZWxv YWRJbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9B RCk7CiAKIAkvKiBBZHZlcnRpc2Ugb3Vyc2VsdmVzLiAqLwogCW9uX3NobWVtX2V4aXQoV2Fs U3VtbWFyaXplclNodXRkb3duLCAoRGF0dW0pIDApOwpAQCAtMzA5LDEwICszMDgsOCBAQCBX YWxTdW1tYXJpemVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFy dHVwX2RhdGFfbGVuKQogCQkgKiBTbyBhIHJlYWxseSBmYXN0IHJldHJ5IHRpbWUgZG9lc24n dCBzZWVtIHRvIGJlIGVzcGVjaWFsbHkKIAkJICogYmVuZWZpY2lhbCwgYW5kIGl0IHdpbGwg Y2x1dHRlciB0aGUgbG9ncy4KIAkJICovCi0JCSh2b2lkKSBXYWl0TGF0Y2goTlVMTCwKLQkJ CQkJCSBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCSAxMDAwMCwK LQkJCQkJCSBXQUlUX0VWRU5UX1dBTF9TVU1NQVJJWkVSX0VSUk9SKTsKKwkJKHZvaWQpIFdh aXRJbnRlcnJ1cHQoMCwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDEwMDAw LAorCQkJCQkJCSBXQUlUX0VWRU5UX1dBTF9TVU1NQVJJWkVSX0VSUk9SKTsKIAl9CiAKIAkv KiBXZSBjYW4gbm93IGhhbmRsZSBlcmVwb3J0KEVSUk9SKSAqLwpAQCAtMzQ5LDcgKzM0Niw3 IEBAIFdhbFN1bW1hcml6ZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiAJCU1lbW9yeUNvbnRleHRSZXNldChjb250ZXh0KTsKIAog CQkvKiBQcm9jZXNzIGFueSBzaWduYWxzIHJlY2VpdmVkIHJlY2VudGx5LiAqLwotCQlQcm9j ZXNzV2FsU3VtbWFyaXplckludGVycnVwdHMoKTsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKIAogCQkvKiBJZiBpdCdzIHRpbWUgdG8gcmVtb3ZlIGFueSBvbGQgV0FMIHN1bW1hcmll cywgZG8gdGhhdCBub3cuICovCiAJCU1heWJlUmVtb3ZlT2xkV2FsU3VtbWFyaWVzKCk7CkBA IC02MjQsOCArNjIxLDggQEAgR2V0T2xkZXN0VW5zdW1tYXJpemVkTFNOKFRpbWVMaW5lSUQg KnRsaSwgYm9vbCAqbHNuX2lzX2V4YWN0KQogICoKICAqIFRoaXMgbWlnaHQgbm90IHdvcmss IGJlY2F1c2UgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGUgV0FMIHN1bW1hcml6ZXIK ICAqIHByb2Nlc3Mgd2FzIHN1Y2Nlc3NmdWxseSBzdGFydGVkLCBhbmQgaXQgYWxzbyBtaWdo dCBoYXZlIHN0YXJ0ZWQgYnV0Ci0gKiBzdWJzZXF1ZW50bHkgdGVybWluYXRlZC4gU28sIHVu ZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCB0aGlzIHdpbGwgZ2V0IHRoZQotICogbGF0Y2gg c2V0LCBidXQgdGhlcmUncyBubyBndWFyYW50ZWUuCisgKiBzdWJzZXF1ZW50bHkgdGVybWlu YXRlZC4gU28sIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCB0aGlzIHdpbGwgc2VuZAor ICogdGhlIGludGVycnVwdCwgYnV0IHRoZXJlJ3Mgbm8gZ3VhcmFudGVlLgogICovCiB2b2lk CiBXYWtldXBXYWxTdW1tYXJpemVyKHZvaWQpCkBAIC02NDAsNyArNjM3LDcgQEAgV2FrZXVw V2FsU3VtbWFyaXplcih2b2lkKQogCUxXTG9ja1JlbGVhc2UoV0FMU3VtbWFyaXplckxvY2sp OwogCiAJaWYgKHBncHJvY25vICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNldExhdGNo KCZHZXRQR1Byb2NCeU51bWJlcihwZ3Byb2NubyktPnByb2NMYXRjaCk7CisJCVNlbmRJbnRl cnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBwZ3Byb2Nubyk7CiB9CiAKIC8qCkBAIC04 NDksMjcgKzg0NiwxNyBAQCBHZXRMYXRlc3RMU04oVGltZUxpbmVJRCAqdGxpKQogICogSW50 ZXJydXB0IGhhbmRsZXIgZm9yIG1haW4gbG9vcCBvZiBXQUwgc3VtbWFyaXplciBwcm9jZXNz LgogICovCiBzdGF0aWMgdm9pZAotUHJvY2Vzc1dhbFN1bW1hcml6ZXJJbnRlcnJ1cHRzKHZv aWQpCitQcm9jZXNzV2FsU3VtbWFyaXplckNvbmZpZ1JlbG9hZEludGVycnVwdCh2b2lkKQog ewotCWlmIChQcm9jU2lnbmFsQmFycmllclBlbmRpbmcpCi0JCVByb2Nlc3NQcm9jU2lnbmFs QmFycmllcigpOwotCi0JaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCi0JewotCQlDb25maWdS ZWxvYWRQZW5kaW5nID0gZmFsc2U7Ci0JCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVAp OwotCX0KKwlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKIAotCWlmIChTaHV0ZG93 blJlcXVlc3RQZW5kaW5nIHx8ICFzdW1tYXJpemVfd2FsKQorCS8qIElmICdzdW1tYXJpemVf d2FsJyB3YXMgdHVybmVkIG9mZiwgZXhpdCAqLworCWlmICghc3VtbWFyaXplX3dhbCAmJiAh SW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfVEVSTUlOQVRFKSkKIAl7CiAJCWVyZXBvcnQo REVCVUcxLAotCQkJCWVycm1zZ19pbnRlcm5hbCgiV0FMIHN1bW1hcml6ZXIgc2h1dHRpbmcg ZG93biIpKTsKLQkJcHJvY19leGl0KDApOworCQkJCWVycm1zZ19pbnRlcm5hbCgiV0FMIHN1 bW1hcml6ZXIgc2h1dHRpbmcgZG93biBiZWNhdXNlIHN1bW1hcml6ZV93YWwgd2FzIGRpc2Fi bGVkIikpOworCQlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfVEVSTUlOQVRFKTsKIAl9Ci0K LQkvKiBQZXJmb3JtIGxvZ2dpbmcgb2YgbWVtb3J5IGNvbnRleHRzIG9mIHRoaXMgcHJvY2Vz cyAqLwotCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykKLQkJUHJvY2Vzc0xvZ01lbW9y eUNvbnRleHRJbnRlcnJ1cHQoKTsKIH0KIAogLyoKQEAgLTEwMDgsNyArOTk1LDcgQEAgU3Vt bWFyaXplV0FMKFRpbWVMaW5lSUQgdGxpLCBYTG9nUmVjUHRyIHN0YXJ0X2xzbiwgYm9vbCBl eGFjdCwKIAkJWExvZ1JlY29yZCAqcmVjb3JkOwogCQl1aW50OAkJcm1pZDsKIAotCQlQcm9j ZXNzV2FsU3VtbWFyaXplckludGVycnVwdHMoKTsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKIAogCQkvKiBXZSBzaG91bGRuJ3QgZ28gYmFja3dhcmQuICovCiAJCUFzc2VydChzdW1t YXJ5X3N0YXJ0X2xzbiA8PSB4bG9ncmVhZGVyLT5FbmRSZWNQdHIpOwpAQCAtMTQ5NSw3ICsx NDgyLDcgQEAgc3VtbWFyaXplcl9yZWFkX2xvY2FsX3hsb2dfcGFnZShYTG9nUmVhZGVyU3Rh dGUgKnN0YXRlLAogCVdBTFJlYWRFcnJvciBlcnJpbmZvOwogCVN1bW1hcml6ZXJSZWFkTG9j YWxYTG9nUHJpdmF0ZSAqcHJpdmF0ZV9kYXRhOwogCi0JUHJvY2Vzc1dhbFN1bW1hcml6ZXJJ bnRlcnJ1cHRzKCk7CisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCXByaXZhdGVfZGF0 YSA9IChTdW1tYXJpemVyUmVhZExvY2FsWExvZ1ByaXZhdGUgKikKIAkJc3RhdGUtPnByaXZh dGVfZGF0YTsKQEAgLTE1MzMsNyArMTUyMCw3IEBAIHN1bW1hcml6ZXJfcmVhZF9sb2NhbF94 bG9nX3BhZ2UoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwKIAkJCQkgKiBjdXJyZW50IHRpbWVs aW5lLCBzbyBtb3JlIGRhdGEgbWlnaHQgc2hvdyB1cC4gIERlbGF5IGhlcmUKIAkJCQkgKiBz byB3ZSBkb24ndCB0aWdodC1sb29wLgogCQkJCSAqLwotCQkJCVByb2Nlc3NXYWxTdW1tYXJp emVySW50ZXJydXB0cygpOworCQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAJCQkJc3Vt bWFyaXplcl93YWl0X2Zvcl93YWwoKTsKIAogCQkJCS8qIFJlY2hlY2sgZW5kLW9mLVdBTC4g Ki8KQEAgLTE2MzMsMTEgKzE2MjAsMTUgQEAgc3VtbWFyaXplcl93YWl0X2Zvcl93YWwodm9p ZCkKIAlwZ3N0YXRfcmVwb3J0X3dhbChmYWxzZSk7CiAKIAkvKiBPSywgbm93IHNsZWVwLiAq LwotCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJIFdMX0xBVENIX1NFVCB8IFdM X1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkgc2xlZXBfcXVhbnRhICog TVNfUEVSX1NMRUVQX1FVQU5UVU0sCi0JCQkJCSBXQUlUX0VWRU5UX1dBTF9TVU1NQVJJWkVS X1dBTCk7Ci0JUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkodm9pZCkgV2FpdEludGVycnVwdChJ TlRFUlJVUFRfV0FJVF9XQUtFVVAgfAorCQkJCQkJIElOVEVSUlVQVF9URVJNSU5BVEUgfAor CQkJCQkJIElOVEVSUlVQVF9DT05GSUdfUkVMT0FEIHwKKwkJCQkJCSBJTlRFUlJVUFRfQkFS UklFUiB8CisJCQkJCQkgSU5URVJSVVBUX0xPR19NRU1PUllfQ09OVEVYVCwKKwkJCQkJCSBX TF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJ CSBzbGVlcF9xdWFudGEgKiBNU19QRVJfU0xFRVBfUVVBTlRVTSwKKwkJCQkJCSBXQUlUX0VW RU5UX1dBTF9TVU1NQVJJWkVSX1dBTCk7CisJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dB SVRfV0FLRVVQKTsKIAogCS8qIFJlc2V0IGNvdW50IG9mIHBhZ2VzIHJlYWQuICovCiAJcGFn ZXNfcmVhZF9zaW5jZV9sYXN0X3NsZWVwID0gMDsKQEAgLTE2ODQsNyArMTY3NSw3IEBAIE1h eWJlUmVtb3ZlT2xkV2FsU3VtbWFyaWVzKHZvaWQpCiAJCVhMb2dSZWNQdHIJb2xkZXN0X2xz biA9IEludmFsaWRYTG9nUmVjUHRyOwogCQlUaW1lTGluZUlECXNlbGVjdGVkX3RsaTsKIAot CQlQcm9jZXNzV2FsU3VtbWFyaXplckludGVycnVwdHMoKTsKKwkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKIAogCQkvKgogCQkgKiBQaWNrIGEgdGltZWxpbmUgZm9yIHdoaWNoIHNvbWUg c3VtbWFyeSBmaWxlcyBzdGlsbCBleGlzdCBvbiBkaXNrLApAQCAtMTcwMyw3ICsxNjk0LDcg QEAgTWF5YmVSZW1vdmVPbGRXYWxTdW1tYXJpZXModm9pZCkKIAkJewogCQkJV2FsU3VtbWFy eUZpbGUgKndzID0gbGZpcnN0KGxjKTsKIAotCQkJUHJvY2Vzc1dhbFN1bW1hcml6ZXJJbnRl cnJ1cHRzKCk7CisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCiAJCQkvKiBJZiBpdCdz IG5vdCBvbiB0aGlzIHRpbWVsaW5lLCBpdCdzIG5vdCB0aW1lIHRvIGNvbnNpZGVyIGl0LiAq LwogCQkJaWYgKHNlbGVjdGVkX3RsaSAhPSB3cy0+dGxpKQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv d2Fsd3JpdGVyLmMKaW5kZXggMTg1MTQxN2FkMWIuLjkzZGZjOThjYzM0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jCisrKyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMKQEAgLTQ1LDExICs0NSwxMiBAQAogI2luY2x1ZGUg PHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJpcGMv aW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1 ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCi0jaW5j bHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3dh bHdyaXRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX3N1YnN5cy5oIgogI2luY2x1ZGUg InN0b3JhZ2UvYnVmbWdyLmgiCkBAIC05NywxNiArOTgsMTQgQEAgV2FsV3JpdGVyTWFpbihj b25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCUF1 eGlsaWFyeVByb2Nlc3NNYWluQ29tbW9uKCk7CiAKIAkvKgotCSAqIFByb3Blcmx5IGFjY2Vw dCBvciBpZ25vcmUgc2lnbmFscyB0aGUgcG9zdG1hc3RlciBtaWdodCBzZW5kIHVzCisJICog U2V0IHVwIGludGVycnVwdCBoYW5kbGVycwogCSAqLwotCXBxc2lnbmFsKFNJR0hVUCwgU2ln bmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7Ci0JcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdO KTsJLyogbm8gcXVlcnkgdG8gY2FuY2VsICovCi0JcHFzaWduYWwoU0lHVEVSTSwgU2lnbmFs SGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7Ci0JLyogU0lHUVVJVCBoYW5kbGVyIHdhcyBh bHJlYWR5IHNldCB1cCBieSBJbml0UG9zdG1hc3RlckNoaWxkICovCi0JcHFzaWduYWwoU0lH QUxSTSwgU0lHX0lHTik7Ci0JcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0JcHFzaWdu YWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJ R1VTUjIsIFNJR19JR04pOyAvKiBub3QgdXNlZCAqLworCVNldFN0YW5kYXJkSW50ZXJydXB0 SGFuZGxlcnMoKTsKKworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9B RCk7CisJLyogd2UgY2FuIGp1c3QgcHJvY19leGl0KDApIGF0IGFueSBwb2ludCBpZiByZXF1 ZXN0ZWQgdG8gdGVybWluYXRlICovCisJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRf VEVSTUlOQVRFLCBQcm9jZXNzQXV4UHJvY2Vzc1NodXRkb3duSW50ZXJydXB0KTsKKwlFbmFi bGVJbnRlcnJ1cHQoSU5URVJSVVBUX1RFUk1JTkFURSk7CiAKIAkvKgogCSAqIENyZWF0ZSBh IG1lbW9yeSBjb250ZXh0IHRoYXQgd2Ugd2lsbCBkbyBhbGwgb3VyIHdvcmsgaW4uICBXZSBk byB0aGlzIHNvCkBAIC0yMDksMTIgKzIwOCwxMiBAQCBXYWxXcml0ZXJNYWluKGNvbnN0IHZv aWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAKIAkJLyoKIAkJ ICogQWR2ZXJ0aXNlIHdoZXRoZXIgd2UgbWlnaHQgaGliZXJuYXRlIGluIHRoaXMgY3ljbGUu ICBXZSBkbyB0aGlzCi0JCSAqIGJlZm9yZSByZXNldHRpbmcgdGhlIGxhdGNoIHRvIGVuc3Vy ZSB0aGF0IGFueSBhc3luYyBjb21taXRzIHdpbGwKLQkJICogc2VlIHRoZSBmbGFnIHNldCBp ZiB0aGV5IG1pZ2h0IHBvc3NpYmx5IG5lZWQgdG8gd2FrZSB1cyB1cCwgYW5kCi0JCSAqIHRo YXQgd2Ugd29uJ3QgbWlzcyBhbnkgc2lnbmFsIHRoZXkgc2VuZCB1cy4gIChJZiB3ZSBkaXNj b3ZlciB3b3JrCi0JCSAqIHRvIGRvIGluIHRoZSBsYXN0IGN5Y2xlIGJlZm9yZSB3ZSB3b3Vs ZCBoaWJlcm5hdGUsIHRoZSBnbG9iYWwgZmxhZwotCQkgKiB3aWxsIGJlIHNldCB1bm5lY2Vz c2FyaWx5LCBidXQgbGl0dGxlIGhhcm0gaXMgZG9uZS4pICBCdXQgYXZvaWQKLQkJICogdG91 Y2hpbmcgdGhlIGdsb2JhbCBmbGFnIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBjaGFuZ2UuCisJ CSAqIGJlZm9yZSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IGZsYWcgdG8gZW5zdXJlIHRoYXQg YW55IGFzeW5jIGNvbW1pdHMKKwkJICogd2lsbCBzZWUgdGhlIGZsYWcgc2V0IGlmIHRoZXkg bWlnaHQgcG9zc2libHkgbmVlZCB0byB3YWtlIHVzIHVwLAorCQkgKiBhbmQgdGhhdCB3ZSB3 b24ndCBtaXNzIGFueSBzaWduYWwgdGhleSBzZW5kIHVzLiAgKElmIHdlIGRpc2NvdmVyCisJ CSAqIHdvcmsgdG8gZG8gaW4gdGhlIGxhc3QgY3ljbGUgYmVmb3JlIHdlIHdvdWxkIGhpYmVy bmF0ZSwgdGhlIGdsb2JhbAorCQkgKiBmbGFnIHdpbGwgYmUgc2V0IHVubmVjZXNzYXJpbHks IGJ1dCBsaXR0bGUgaGFybSBpcyBkb25lLikgIEJ1dAorCQkgKiBhdm9pZCB0b3VjaGluZyB0 aGUgZ2xvYmFsIGZsYWcgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGNoYW5nZS4KIAkJICovCiAJ CWlmIChoaWJlcm5hdGluZyAhPSAobGVmdF90aWxsX2hpYmVybmF0ZSA8PSAxKSkKIAkJewpA QCAtMjIyLDExICsyMjEsMTAgQEAgV2FsV3JpdGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVw X2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJU2V0V2FsV3JpdGVyU2xlZXBp bmcoaGliZXJuYXRpbmcpOwogCQl9CiAKLQkJLyogQ2xlYXIgYW55IGFscmVhZHktcGVuZGlu ZyB3YWtldXBzICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCUNsZWFySW50ZXJydXB0 KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAKLQkJLyogUHJvY2VzcyBhbnkgc2lnbmFscyBy ZWNlaXZlZCByZWNlbnRseSAqLwotCQlQcm9jZXNzTWFpbkxvb3BJbnRlcnJ1cHRzKCk7CisJ CS8qIFByb2Nlc3MgYW55IGludGVycnVwdHMgcmVjZWl2ZWQgcmVjZW50bHkgKi8KKwkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKgogCQkgKiBEbyB3aGF0IHdlJ3JlIGhlcmUg Zm9yOyB0aGVuLCBpZiBYTG9nQmFja2dyb3VuZEZsdXNoKCkgZm91bmQgdXNlZnVsCkBAIC0y NTAsOSArMjQ4LDkgQEAgV2FsV3JpdGVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEs IHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQllbHNlCiAJCQljdXJfdGltZW91dCA9IFdh bFdyaXRlckRlbGF5ICogSElCRVJOQVRFX0ZBQ1RPUjsKIAotCQkodm9pZCkgV2FpdExhdGNo KE15TGF0Y2gsCi0JCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRf T05fUE1fREVBVEgsCi0JCQkJCQkgY3VyX3RpbWVvdXQsCi0JCQkJCQkgV0FJVF9FVkVOVF9X QUxfV1JJVEVSX01BSU4pOworCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVy cnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRFUlJV UFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgY3VyX3Rp bWVvdXQsCisJCQkJCQkJIFdBSVRfRVZFTlRfV0FMX1dSSVRFUl9NQUlOKTsKIAl9CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xp YnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVj ZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmluZGV4IDdjODYzOWIzMmU5Li4xNTZjYjk3NjY3 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZl ci9saWJwcXdhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGli cHF3YWxyZWNlaXZlci9saWJwcXdhbHJlY2VpdmVyLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNp bmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwcWV4cGJ1ZmZlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5o IgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sc24uaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKaW5kZXgg N2NkNmU5MTJhOWMuLjVhZjIwZGI2NTdmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpAQCAtMTU3LDE2 ICsxNTcsMTcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nl c3MvcGFyYWxsZWwuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAi aXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAj aW5jbHVkZSAibGlicHEvcHFtcS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1ZGUg InBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNh bGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3dvcmtlcl9pbnRlcm5hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCi0jaW5jbHVk ZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKQEAgLTI0 MCwxMiArMjQxLDYgQEAgc3RhdGljIExpc3QgKlBhcmFsbGVsQXBwbHlXb3JrZXJQb29sID0g TklMOwogICovCiBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICpNeVBhcmFsbGVsU2hhcmVk ID0gTlVMTDsKIAotLyoKLSAqIElzIHRoZXJlIGEgbWVzc2FnZSBzZW50IGJ5IGEgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIHRoYXQgdGhlIGxlYWRlciBhcHBseQotICogd29ya2VyIG5lZWRz IHRvIHJlY2VpdmU/Ci0gKi8KLXZvbGF0aWxlIHNpZ19hdG9taWNfdCBQYXJhbGxlbEFwcGx5 TWVzc2FnZVBlbmRpbmcgPSBmYWxzZTsKLQogLyoKICAqIENhY2hlIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGFwcGx5aW5nIHRoZQogICog Y3VycmVudCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uIEl0IGlzIHVzZWQgdG8gc2F2ZSB0aGUg Y29zdCBvZiBzZWFyY2hpbmcgdGhlCkBAIC03MDgsMzAgKzcwMyw2IEBAIHBhX3Byb2Nlc3Nf c3Bvb2xlZF9tZXNzYWdlc19pZl9yZXF1aXJlZCh2b2lkKQogCXJldHVybiB0cnVlOwogfQog Ci0vKgotICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIG1haW4gbG9vcCBvZiBwYXJhbGxlbCBh cHBseSB3b3JrZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1Qcm9jZXNzUGFyYWxsZWxBcHBseUlu dGVycnVwdHModm9pZCkKLXsKLQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCi0JaWYgKFNo dXRkb3duUmVxdWVzdFBlbmRpbmcpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNn KCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3Igc3Vic2Ny aXB0aW9uIFwiJXNcIiBoYXMgZmluaXNoZWQiLAotCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5h bWUpKSk7Ci0KLQkJcHJvY19leGl0KDApOwotCX0KLQotCWlmIChDb25maWdSZWxvYWRQZW5k aW5nKQotCXsKLQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwotCQlQcm9jZXNzQ29u ZmlnRmlsZShQR0NfU0lHSFVQKTsKLQl9Ci19Ci0KIC8qIFBhcmFsbGVsIGFwcGx5IHdvcmtl ciBtYWluIGxvb3AuICovCiBzdGF0aWMgdm9pZAogTG9naWNhbFBhcmFsbGVsQXBwbHlMb29w KHNobV9tcV9oYW5kbGUgKm1xaCkKQEAgLTc2MSw3ICs3MzIsMTggQEAgTG9naWNhbFBhcmFs bGVsQXBwbHlMb29wKHNobV9tcV9oYW5kbGUgKm1xaCkKIAkJdm9pZAkgICAqZGF0YTsKIAkJ U2l6ZQkJbGVuOwogCi0JCVByb2Nlc3NQYXJhbGxlbEFwcGx5SW50ZXJydXB0cygpOworCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCQlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJV UFRfU0hVVERPV05fUEFSQUxMRUxfQVBQTFlfV09SS0VSKSkKKwkJeworCQkJZXJlcG9ydChM T0csCisJCQkJCShlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkg d29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIGhhcyBmaW5pc2hlZCIsCisJCQkJCQkJ TXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCQlwcm9jX2V4aXQoMCk7CisJCX0KKwkJaWYg KENvbnN1bWVJbnRlcnJ1cHQoSU5URVJSVVBUX1RFUk1JTkFURSkpCisJCQlQcm9jZXNzVGVy bWluYXRlSW50ZXJydXB0KCk7CisJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9D T05GSUdfUkVMT0FEKSkKKwkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwogCiAJ CS8qIEVuc3VyZSB3ZSBhcmUgcmVhZGluZyB0aGUgZGF0YSBpbnRvIG91ciBtZW1vcnkgY29u dGV4dC4gKi8KIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5TWVzc2FnZUNvbnRleHQp OwpAQCAtODA3LDEzICs3ODksMTcgQEAgTG9naWNhbFBhcmFsbGVsQXBwbHlMb29wKHNobV9t cV9oYW5kbGUgKm1xaCkKIAkJCQlpbnQJCQlyYzsKIAogCQkJCS8qIFdhaXQgZm9yIG1vcmUg d29yay4gKi8KLQkJCQlyYyA9IFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkJCSAgIFdMX0xB VENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkJCSAg IDEwMDBMLAotCQkJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9N QUlOKTsKLQotCQkJCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKLQkJCQkJUmVzZXRMYXRjaChN eUxhdGNoKTsKKwkJCQlyYyA9IFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFz ayB8CisJCQkJCQkJCSAgIElOVEVSUlVQVF9TSFVURE9XTl9QQVJBTExFTF9BUFBMWV9XT1JL RVIgfAorCQkJCQkJCQkgICBJTlRFUlJVUFRfVEVSTUlOQVRFIHwKKwkJCQkJCQkJICAgSU5U RVJSVVBUX0NPTkZJR19SRUxPQUQgfAorCQkJCQkJCQkgICBJTlRFUlJVUFRfV0FJVF9XQUtF VVAsCisJCQkJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09O X1BNX0RFQVRILAorCQkJCQkJCQkgICAxMDAwTCwKKwkJCQkJCQkJICAgV0FJVF9FVkVOVF9M T0dJQ0FMX1BBUkFMTEVMX0FQUExZX01BSU4pOworCisJCQkJaWYgKHJjICYgV0xfSU5URVJS VVBUKQorCQkJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJ fQogCQl9CiAJCWVsc2UKQEAgLTg0Niw5ICs4MzIsOCBAQCBMb2dpY2FsUGFyYWxsZWxBcHBs eUxvb3Aoc2htX21xX2hhbmRsZSAqbXFoKQogc3RhdGljIHZvaWQKIHBhX3NodXRkb3duKGlu dCBjb2RlLCBEYXR1bSBhcmcpCiB7Ci0JU2VuZFByb2NTaWduYWwoTXlMb2dpY2FsUmVwV29y a2VyLT5sZWFkZXJfcGlkLAotCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FH RSwKLQkJCQkgICBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwlTZW5kSW50ZXJydXB0KElOVEVS UlVQVF9QQVJBTExFTF9NRVNTQUdFLAorCQkJCSAgTXlMb2dpY2FsUmVwV29ya2VyLT5sZWFk ZXJfcGdwcm9jbm8pOwogCiAJZHNtX2RldGFjaCgoZHNtX3NlZ21lbnQgKikgRGF0dW1HZXRQ b2ludGVyKGFyZykpOwogfQpAQCAtODczLDE1ICs4NTgsMTggQEAgUGFyYWxsZWxBcHBseVdv cmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJSW5pdGlhbGl6aW5nQXBwbHlXb3JrZXIgPSB0 cnVlOwogCiAJLyoKLQkgKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcuCisJICogU2V0dXAgaW50 ZXJydXB0IGhhbmRsaW5nLgogCSAqCi0JICogTm90ZTogV2UgaW50ZW50aW9uYWxseSB1c2Vk IFNJR1VTUjIgdG8gdHJpZ2dlciBhIGdyYWNlZnVsIHNodXRkb3duCi0JICogaW5pdGlhdGVk IGJ5IHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyLiBUaGlzIGhlbHBzIHRvIGRpZmZlcmVudGlh dGUgaXQKLQkgKiBmcm9tIHRoZSBjYXNlIHdoZXJlIHdlIGFib3J0IHRoZSBjdXJyZW50IHRy YW5zYWN0aW9uIGFuZCBleGl0IG9uCi0JICogcmVjZWl2aW5nIFNJR1RFUk0uCisJICogSW4g YWRkaXRpb24gdG8gdGhlIHVzdWFsIGludGVycnVwdHMsIHdlIHVzZQorCSAqIElOVEVSUlVQ VF9TSFVURE9XTl9QQVJBTExFTF9BUFBMWV9XT1JLRVIgYXMgYWx0ZXJuYXRpdmUgdG8KKwkg KiBJTlRFUlJVUFRfVEVSTUlOQVRFIHRvIHRyaWdnZXIgYSBncmFjZWZ1bCBzaHV0ZG93biBp bml0aWF0ZWQgYnkgdGhlCisJICogbGVhZGVyIGFwcGx5IHdvcmtlci4gVGhpcyBoZWxwcyB0 byBkaWZmZXJlbnRpYXRlIGl0IGZyb20gdGhlIGNhc2Ugd2hlcmUKKwkgKiB3ZSBhYm9ydCB0 aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgZXhpdCBvbiByZWNlaXZpbmcgU0lHVEVSTS4K KwkgKgorCSAqIEZJWE1FOiBJdCBoYXMgdGhlIHNhbWUgZWZmZWN0LCBidXQgcHJpbnRzIGFu IGFkZGl0aW9uYWwgbWVzc2FnZSB0byB0aGUKKwkgKiBsb2cuIElzIGl0IHdvcnRoIGRpc3Rp bmd1aXNoaW5nLCBhbmQgZG8gd2UgZXZlbiB3YW50IHRoZSBsb2cgbWVzc2FnZT8KIAkgKi8K LQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBx c2lnbmFsKFNJR1VTUjIsIFNpZ25hbEhhbmRsZXJGb3JTaHV0ZG93blJlcXVlc3QpOworCVNl dFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMoKTsKIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9j a1NpZ25hbHMoKTsKIAogCS8qCkBAIC05NDIsOCArOTMwLDcgQEAgUGFyYWxsZWxBcHBseVdv cmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJZXJyb3JfbXFoID0gc2htX21xX2F0dGFjaCht cSwgc2VnLCBOVUxMKTsKIAogCXBxX3JlZGlyZWN0X3RvX3NobV9tcShzZWcsIGVycm9yX21x aCk7Ci0JcHFfc2V0X3BhcmFsbGVsX2xlYWRlcihNeUxvZ2ljYWxSZXBXb3JrZXItPmxlYWRl cl9waWQsCi0JCQkJCQkgICBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwlwcV9zZXRfcGFyYWxs ZWxfbGVhZGVyKE15TG9naWNhbFJlcFdvcmtlci0+bGVhZGVyX3BncHJvY25vKTsKIAogCU15 TG9naWNhbFJlcFdvcmtlci0+bGFzdF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXIt Pmxhc3RfcmVjdl90aW1lID0KIAkJTXlMb2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0g MDsKQEAgLTk3NywyOSArOTY0LDcgQEAgUGFyYWxsZWxBcHBseVdvcmtlck1haW4oRGF0dW0g bWFpbl9hcmcpCiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfb3JpZ2luKG9yaWdpbm5hbWUp OwogCiAJTG9naWNhbFBhcmFsbGVsQXBwbHlMb29wKG1xaCk7Ci0KLQkvKgotCSAqIFRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgbXVzdCBub3QgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgcGFy YWxsZWwgYXBwbHkKLQkgKiB3b3JrZXIgd2lsbCBvbmx5IHN0b3Agd2hlbiBpdCByZWNlaXZl cyBhIFNJR1RFUk0gb3IgU0lHVVNSMiBmcm9tIHRoZQotCSAqIGxlYWRlciwgb3IgU0lHSU5U IGZyb20gaXRzZWxmLCBvciB3aGVuIHRoZXJlIGlzIGFuIGVycm9yLiBOb25lIG9mIHRoZXNl Ci0JICogY2FzZXMgd2lsbCBhbGxvdyB0aGUgY29kZSB0byByZWFjaCBoZXJlLgotCSAqLwot CUFzc2VydChmYWxzZSk7Ci19Ci0KLS8qCi0gKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRl cnJ1cHQgaW5kaWNhdGluZyBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBtZXNzYWdlLgotICoK LSAqIE5vdGU6IHRoaXMgaXMgY2FsbGVkIHdpdGhpbiBhIHNpZ25hbCBoYW5kbGVyISBBbGwg d2UgY2FuIGRvIGlzIHNldCBhIGZsYWcKLSAqIHRoYXQgd2lsbCBjYXVzZSB0aGUgbmV4dCBD SEVDS19GT1JfSU5URVJSVVBUUygpIHRvIGludm9rZQotICogUHJvY2Vzc1BhcmFsbGVsQXBw bHlNZXNzYWdlcygpLgotICovCi12b2lkCi1IYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZUlu dGVycnVwdCh2b2lkKQotewotCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOwotCVBhcmFsbGVs QXBwbHlNZXNzYWdlUGVuZGluZyA9IHRydWU7Ci0JU2V0TGF0Y2goTXlMYXRjaCk7CisJQXNz ZXJ0KGZhbHNlKTsJCQkJLyogTG9naWNhbFBhcmFsbGVsQXBwbHlMb29wIG5ldmVyIHJldHVy bnMgKi8KIH0KIAogLyoKQEAgLTEwNjYsNyArMTAzMSw3IEBAIFByb2Nlc3NQYXJhbGxlbEFw cGx5TWVzc2FnZShTdHJpbmdJbmZvIG1zZykKIH0KIAogLyoKLSAqIEhhbmRsZSBhbnkgcXVl dWVkIHByb3RvY29sIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gcGFyYWxsZWwgYXBwbHkgd29y a2Vycy4KKyAqIFByb2Nlc3MgYW55IHF1ZXVlZCBwcm90b2NvbCBtZXNzYWdlcyByZWNlaXZl ZCBmcm9tIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMuCiAgKi8KIHZvaWQKIFByb2Nlc3NQYXJh bGxlbEFwcGx5TWVzc2FnZXModm9pZCkKQEAgLTEwNzYsNiArMTA0MSw5IEBAIFByb2Nlc3NQ YXJhbGxlbEFwcGx5TWVzc2FnZXModm9pZCkKIAogCXN0YXRpYyBNZW1vcnlDb250ZXh0IGhw YW1fY29udGV4dCA9IE5VTEw7CiAKKwkvKiBXZSBkb24ndCBleHBlY3QgdGhlIGxlYWRlciBh cHBseSB3b3JrZXIgdG8gYWxzbyBydW4gcGFyYWxsZWwgcXVlcmllcyAqLworCUFzc2VydCgh UGFyYWxsZWxDb250ZXh0QWN0aXZlKCkpOworCiAJLyoKIAkgKiBUaGlzIGlzIGludm9rZWQg ZnJvbSBQcm9jZXNzSW50ZXJydXB0cygpLCBhbmQgc2luY2Ugc29tZSBvZiB0aGUKIAkgKiBm dW5jdGlvbnMgaXQgY2FsbHMgY29udGFpbiBDSEVDS19GT1JfSU5URVJSVVBUUygpLCB0aGVy ZSBpcyBhIHBvdGVudGlhbApAQCAtMTA5OSw4ICsxMDY3LDYgQEAgUHJvY2Vzc1BhcmFsbGVs QXBwbHlNZXNzYWdlcyh2b2lkKQogCiAJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhocGFtX2NvbnRleHQpOwogCi0JUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0g ZmFsc2U7Ci0KIAlmb3JlYWNoKGxjLCBQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCkKIAl7CiAJ CXNobV9tcV9yZXN1bHQgcmVzOwpAQCAtMTE5MSwxNCArMTE1NywxNSBAQCBwYV9zZW5kX2Rh dGEoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywgY29uc3Qg dm9pZCAqZGF0YSkKIAkJQXNzZXJ0KHJlc3VsdCA9PSBTSE1fTVFfV09VTERfQkxPQ0spOwog CiAJCS8qIFdhaXQgYmVmb3JlIHJldHJ5aW5nLiAqLwotCQlyYyA9IFdhaXRMYXRjaChNeUxh dGNoLAotCQkJCQkgICBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9Q TV9ERUFUSCwKLQkJCQkJICAgU0hNX1NFTkRfUkVUUllfSU5URVJWQUxfTVMsCi0JCQkJCSAg IFdBSVRfRVZFTlRfTE9HSUNBTF9BUFBMWV9TRU5EX0RBVEEpOworCQlyYyA9IFdhaXRJbnRl cnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkgICBJTlRFUlJVUFRfV0FJ VF9XQUtFVVAsCisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJ VF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAgIFNITV9TRU5EX1JFVFJZX0lOVEVSVkFMX01TLAor CQkJCQkJICAgV0FJVF9FVkVOVF9MT0dJQ0FMX0FQUExZX1NFTkRfREFUQSk7CiAKLQkJaWYg KHJjICYgV0xfTEFUQ0hfU0VUKQorCQlpZiAocmMgJiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJ CVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJ VF9XQUtFVVApOwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJfQogCkBAIC0xMjYz LDEzICsxMjMwLDE0IEBAIHBhX3dhaXRfZm9yX3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdv cmtlckluZm8gKndpbmZvLAogCQkJYnJlYWs7CiAKIAkJLyogV2FpdCB0byBiZSBzaWduYWxs ZWQuICovCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJCSBXTF9MQVRDSF9T RVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKLQkJCQkJCSAxMEwsCi0J CQkJCQkgV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSk7 Ci0KLQkJLyogUmVzZXQgdGhlIGxhdGNoIHNvIHdlIGRvbid0IHNwaW4uICovCi0JCVJlc2V0 TGF0Y2goTXlMYXRjaCk7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJy dXB0c01hc2sgfAorCQkJCQkJCSBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJIFdM X0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJ CSAxMEwsCisJCQkJCQkJIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9TVEFU RV9DSEFOR0UpOworCisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZyBzbyB3ZSBkb24n dCBzcGluLiAqLworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwog CiAJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3aGlsZSB3ZSB3ZXJlIHdh aXRpbmcuICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKaW5kZXggZTYxMTJlMTFlYzIuLmQ2NmJh MGI2ZjVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xh dW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hl ci5jCkBAIC0yNSwxMSArMjUsMTIgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlw dGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uX3JlbC5oIgogI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVk ZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJw b3N0bWFzdGVyL2Jnd29ya2VyLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90Lmgi CkBAIC01OCw3ICs1OSw3IEBAIExvZ2ljYWxSZXBXb3JrZXIgKk15TG9naWNhbFJlcFdvcmtl ciA9IE5VTEw7CiB0eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwQ3R4U3RydWN0CiB7CiAJLyog U3VwZXJ2aXNvciBwcm9jZXNzLiAqLwotCXBpZF90CQlsYXVuY2hlcl9waWQ7CisJUHJvY051 bWJlcglsYXVuY2hlcl9wcm9jbm87CiAKIAkvKiBIYXNoIHRhYmxlIGhvbGRpbmcgbGFzdCBz dGFydCB0aW1lcyBvZiBzdWJzY3JpcHRpb25zJyBhcHBseSB3b3JrZXJzLiAqLwogCWRzYV9o YW5kbGUJbGFzdF9zdGFydF9kc2E7CkBAIC0xODMsNyArMTg0LDYgQEAgV2FpdEZvclJlcGxp Y2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJCQkJCQkg ICBCYWNrZ3JvdW5kV29ya2VySGFuZGxlICpoYW5kbGUpCiB7CiAJYm9vbAkJcmVzdWx0ID0g ZmFsc2U7Ci0JYm9vbAkJZHJvcHBlZF9sYXRjaCA9IGZhbHNlOwogCiAJZm9yICg7OykKIAl7 CkBAIC0yMTksMjcgKzIxOSwyOCBAQCBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRhY2go TG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogCQl9CiAKIAkJLyoKLQkJICogV2UgbmVlZCB0 aW1lb3V0IGJlY2F1c2Ugd2UgZ2VuZXJhbGx5IGRvbid0IGdldCBub3RpZmllZCB2aWEgbGF0 Y2gKLQkJICogYWJvdXQgdGhlIHdvcmtlciBhdHRhY2guICBCdXQgd2UgZG9uJ3QgZXhwZWN0 IHRvIGhhdmUgdG8gd2FpdCBsb25nLgorCQkgKiBXZSBuZWVkIHRpbWVvdXQgYmVjYXVzZSB3 ZSBnZW5lcmFsbHkgZG9uJ3QgZ2V0IG5vdGlmaWVkIHZpYSBhbgorCQkgKiBpbnRlcnJ1cHQg YWJvdXQgdGhlIHdvcmtlciBhdHRhY2guICBCdXQgd2UgZG9uJ3QgZXhwZWN0IHRvIGhhdmUg dG8KKwkJICogd2FpdCBsb25nLgogCQkgKi8KLQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwK LQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVB VEgsCi0JCQkJCSAgIDEwTCwgV0FJVF9FVkVOVF9CR1dPUktFUl9TVEFSVFVQKTsKKwkJcmMg PSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkJICAgSU5U RVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJICAgV0xfSU5URVJSVVBUIHwgV0xfVElNRU9V VCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgICAxMEwsIFdBSVRfRVZFTlRfQkdX T1JLRVJfU1RBUlRVUCk7CiAKLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQlpZiAocmMg JiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDbGVh ckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKLQkJCWRyb3BwZWRfbGF0Y2ggPSB0cnVlOwogCQl9CiAJfQogCiAJLyoKLQkg KiBJZiB3ZSBoYWQgdG8gY2xlYXIgYSBsYXRjaCBldmVudCBpbiBvcmRlciB0byB3YWl0LCBi ZSBzdXJlIHRvIHJlc3RvcmUKLQkgKiBpdCBiZWZvcmUgZXhpdGluZy4gIE90aGVyd2lzZSBj YWxsZXIgbWF5IG1pc3MgZXZlbnRzLgorCSAqIFhYWDogV2UgdXNlZCB0byBoYXZlIHRvIHJl c3RvcmUgdGhlIHByb2Nlc3MgbGF0Y2gsIGJlY2F1c2UgdGhlIGxhdW5jaGVyCisJICogcmVs aWVkIG9uIHRoZSBzYW1lIGxhdGNoIHRvIHdhaXQgZm9yIG90aGVyIHN0YXR1cyBjaGFuZ2Vz LiBCdXQgV2Ugbm93CisJICogdXNlIElOVEVSUlVQVF9TVUJTQ1JJUFRJT05fQ0hBTkdFIGZv ciB0aGF0LiBCdXQgZm9yIGNsYXJpeSwgcGVyaGFwcyB3ZQorCSAqIHNob3VsZCB1c2UgYSBk ZXNpZ25lZCBpbnRlcnJ1cHQgZm9yIHRoaXMgd2FpdCB0b28/CiAJICovCi0JaWYgKGRyb3Bw ZWRfbGF0Y2gpCi0JCVNldExhdGNoKE15TGF0Y2gpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0K QEAgLTQ3Myw2ICs0NzQsNyBAQCByZXRyeToKIAl3b3JrZXItPnJlbHN0YXRlX2xzbiA9IElu dmFsaWRYTG9nUmVjUHRyOwogCXdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPSBOVUxMOwogCXdv cmtlci0+bGVhZGVyX3BpZCA9IGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlciA/IE15UHJvY1Bp ZCA6IEludmFsaWRQaWQ7CisJd29ya2VyLT5sZWFkZXJfcGdwcm9jbm8gPSBpc19wYXJhbGxl bF9hcHBseV93b3JrZXIgPyBNeVByb2NOdW1iZXIgOiBJTlZBTElEX1BST0NfTlVNQkVSOwog CXdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBpc19wYXJhbGxlbF9hcHBseV93b3JrZXI7CiAJ d29ya2VyLT5vbGRlc3Rfbm9ucmVtb3ZhYmxlX3hpZCA9IHJldGFpbl9kZWFkX3R1cGxlcwog CQk/IE15UmVwbGljYXRpb25TbG90LT5kYXRhLnhtaW4KQEAgLTUzOSw3ICs1NDEsNiBAQCBy ZXRyeToKIAl9CiAKIAliZ3cuYmd3X3Jlc3RhcnRfdGltZSA9IEJHV19ORVZFUl9SRVNUQVJU OwotCWJndy5iZ3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsKIAliZ3cuYmd3X21haW5fYXJn ID0gSW50MzJHZXREYXR1bShzbG90KTsKIAogCWlmICghUmVnaXN0ZXJEeW5hbWljQmFja2dy b3VuZFdvcmtlcigmYmd3LCAmYmd3X2hhbmRsZSkpCkBAIC01NjYsNyArNTY3LDcgQEAgcmV0 cnk6CiAgKiBzbG90LgogICovCiBzdGF0aWMgdm9pZAotbG9naWNhbHJlcF93b3JrZXJfc3Rv cF9pbnRlcm5hbChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIsIGludCBzaWdubykKK2xvZ2lj YWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLCBJ bnRlcnJ1cHRNYXNrIGludGVycnVwdCkKIHsKIAl1aW50MTYJCWdlbmVyYXRpb247CiAKQEAg LTU4OSwxMyArNTkwLDE0IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9n aWNhbFJlcFdvcmtlciAqd29ya2VyLCBpbnQgc2lnbm8pCiAJCUxXTG9ja1JlbGVhc2UoTG9n aWNhbFJlcFdvcmtlckxvY2spOwogCiAJCS8qIFdhaXQgYSBiaXQgLS0tIHdlIGRvbid0IGV4 cGVjdCB0byBoYXZlIHRvIHdhaXQgbG9uZy4gKi8KLQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRj aCwKLQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1f REVBVEgsCi0JCQkJCSAgIDEwTCwgV0FJVF9FVkVOVF9CR1dPUktFUl9TVEFSVFVQKTsKKwkJ cmMgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkJICAg SU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJICAgV0xfSU5URVJSVVBUIHwgV0xfVElN RU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkgICAxMEwsIFdBSVRfRVZFTlRf QkdXT1JLRVJfU1RBUlRVUCk7CiAKLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQlpZiAo cmMgJiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlD bGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKIAkJfQogCkBAIC02MTYsNyArNjE4LDcgQEAgbG9naWNhbHJlcF93b3Jr ZXJfc3RvcF9pbnRlcm5hbChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIsIGludCBzaWdubykK IAl9CiAKIAkvKiBOb3cgdGVybWluYXRlIHRoZSB3b3JrZXIgLi4uICovCi0Ja2lsbCh3b3Jr ZXItPnByb2MtPnBpZCwgc2lnbm8pOworCVNlbmRJbnRlcnJ1cHQoaW50ZXJydXB0LCBHZXRO dW1iZXJGcm9tUEdQcm9jKHdvcmtlci0+cHJvYykpOwogCiAJLyogLi4uIGFuZCB3YWl0IGZv ciBpdCB0byBkaWUuICovCiAJZm9yICg7OykKQEAgLTYzMCwxMyArNjMyLDE0IEBAIGxvZ2lj YWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLCBp bnQgc2lnbm8pCiAJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogCiAJ CS8qIFdhaXQgYSBiaXQgLS0tIHdlIGRvbid0IGV4cGVjdCB0byBoYXZlIHRvIHdhaXQgbG9u Zy4gKi8KLQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJICAgV0xfTEFUQ0hfU0VU IHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCSAgIDEwTCwgV0FJ VF9FVkVOVF9CR1dPUktFUl9TSFVURE9XTik7CisJCXJjID0gV2FpdEludGVycnVwdChDaGVj a0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCSAgIElOVEVSUlVQVF9XQUlUX1dBS0VVUCwK KwkJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RF QVRILAorCQkJCQkJICAgMTBMLCBXQUlUX0VWRU5UX0JHV09SS0VSX1NIVVRET1dOKTsKIAot CQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCWlmIChyYyAmIFdMX0lOVEVSUlVQVCkKIAkJ ewotCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQ VF9XQUlUX1dBS0VVUCk7CiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCQl9CiAKQEAg LTY2Myw3ICs2NjYsNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKExvZ2ljYWxSZXBXb3Jr ZXJUeXBlIHd0eXBlLCBPaWQgc3ViaWQsIE9pZCByZWxpZCkKIAlpZiAod29ya2VyKQogCXsK IAkJQXNzZXJ0KCFpc1BhcmFsbGVsQXBwbHlXb3JrZXIod29ya2VyKSk7Ci0JCWxvZ2ljYWxy ZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBTSUdURVJNKTsKKwkJbG9naWNhbHJl cF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3b3JrZXIsIElOVEVSUlVQVF9URVJNSU5BVEUpOwog CX0KIAogCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwpAQCAtNjcyLDgg KzY3NSw5IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoTG9naWNhbFJlcFdvcmtlclR5cGUg d3R5cGUsIE9pZCBzdWJpZCwgT2lkIHJlbGlkKQogLyoKICAqIFN0b3AgdGhlIGdpdmVuIGxv Z2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyLgogICoKLSAqIE5vZGUg dGhhdCB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHVVNSMiBpbnN0ZWFkIG9mIFNJR1RFUk0gdG8g dGhlIHBhcmFsbGVsIGFwcGx5Ci0gKiB3b3JrZXIgc28gdGhhdCB0aGUgd29ya2VyIGV4aXRz IGNsZWFubHkuCisgKiBOb2RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNlbmRzIElOVEVSUlVQVF9T SFVURE9XTl9QQVJBTExFTF9BUFBMWV9XT1JLRVIKKyAqIGluc3RlYWQgb2YgSU5URVJSVVBU X1RFUk1JTkFURSB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHNvIHRoYXQgdGhlCisg KiB3b3JrZXIgZXhpdHMgbW9yZSBjbGVhbmx5LiAoRklYTUU6IHdoYXQncyB0aGUgZGlmZmVy ZW5jZSByZWFsbHk/KQogICovCiB2b2lkCiBsb2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKFBh cmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKQEAgLTcxMCwxMyArNzE0LDEzIEBAIGxv Z2ljYWxyZXBfcGFfd29ya2VyX3N0b3AoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZv KQogCSAqIE9ubHkgc3RvcCB0aGUgd29ya2VyIGlmIHRoZSBnZW5lcmF0aW9uIG1hdGNoZXMg YW5kIHRoZSB3b3JrZXIgaXMgYWxpdmUuCiAJICovCiAJaWYgKHdvcmtlci0+Z2VuZXJhdGlv biA9PSBnZW5lcmF0aW9uICYmIHdvcmtlci0+cHJvYykKLQkJbG9naWNhbHJlcF93b3JrZXJf c3RvcF9pbnRlcm5hbCh3b3JrZXIsIFNJR1VTUjIpOworCQlsb2dpY2FscmVwX3dvcmtlcl9z dG9wX2ludGVybmFsKHdvcmtlciwgSU5URVJSVVBUX1NIVVRET1dOX1BBUkFMTEVMX0FQUExZ X1dPUktFUik7CiAKIAlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIH0K IAogLyoKLSAqIFdha2UgdXAgKHVzaW5nIGxhdGNoKSBhbnkgbG9naWNhbCByZXBsaWNhdGlv biB3b3JrZXIgdGhhdCBtYXRjaGVzIHRoZQorICogV2FrZSB1cCAodXNpbmcgaW50ZXJydXB0 KSBhbnkgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgdGhhdCBtYXRjaGVzIHRoZQogICog c3BlY2lmaWVkIHdvcmtlciB0eXBlLCBzdWJzY3JpcHRpb24gaWQsIGFuZCByZWxhdGlvbiBp ZC4KICAqLwogdm9pZApAQCAtNzM4LDcgKzc0Miw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3dh a2V1cChMb2dpY2FsUmVwV29ya2VyVHlwZSB3dHlwZSwgT2lkIHN1YmlkLCBPaWQgcmVsaWQp CiB9CiAKIC8qCi0gKiBXYWtlIHVwICh1c2luZyBsYXRjaCkgdGhlIHNwZWNpZmllZCBsb2dp Y2FsIHJlcGxpY2F0aW9uIHdvcmtlci4KKyAqIFdha2UgdXAgKHVzaW5nIGludGVycnVwdCkg dGhlIHNwZWNpZmllZCBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlci4KICAqCiAgKiBDYWxs ZXIgbXVzdCBob2xkIGxvY2ssIGVsc2Ugd29ya2VyLT5wcm9jIGNvdWxkIGNoYW5nZSB1bmRl ciB1cy4KICAqLwpAQCAtNzQ3LDcgKzc1MSw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1 cF9wdHIoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogewogCUFzc2VydChMV0xvY2tIZWxk QnlNZShMb2dpY2FsUmVwV29ya2VyTG9jaykpOwogCi0JU2V0TGF0Y2goJndvcmtlci0+cHJv Yy0+cHJvY0xhdGNoKTsKKwlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwg R2V0TnVtYmVyRnJvbVBHUHJvYyh3b3JrZXItPnByb2MpKTsKIH0KIAogLyoKQEAgLTgxNSw3 ICs4MTksNyBAQCBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCkKIAkJCUxvZ2ljYWxS ZXBXb3JrZXIgKncgPSAoTG9naWNhbFJlcFdvcmtlciAqKSBsZmlyc3QobGMpOwogCiAJCQlp ZiAoaXNQYXJhbGxlbEFwcGx5V29ya2VyKHcpKQotCQkJCWxvZ2ljYWxyZXBfd29ya2VyX3N0 b3BfaW50ZXJuYWwodywgU0lHVEVSTSk7CisJCQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9p bnRlcm5hbCh3LCBJTlRFUlJVUFRfVEVSTUlOQVRFKTsKIAkJfQogCiAJCUxXTG9ja1JlbGVh c2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwpAQCAtODQ3LDYgKzg1MSw3IEBAIGxvZ2ljYWxy ZXBfd29ya2VyX2NsZWFudXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogCXdvcmtlci0+ c3ViaWQgPSBJbnZhbGlkT2lkOwogCXdvcmtlci0+cmVsaWQgPSBJbnZhbGlkT2lkOwogCXdv cmtlci0+bGVhZGVyX3BpZCA9IEludmFsaWRQaWQ7CisJd29ya2VyLT5sZWFkZXJfcGdwcm9j bm8gPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCXdvcmtlci0+cGFyYWxsZWxfYXBwbHkgPSBm YWxzZTsKIH0KIApAQCAtODU4LDcgKzg2Myw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2NsZWFu dXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQogc3RhdGljIHZvaWQKIGxvZ2ljYWxyZXBf bGF1bmNoZXJfb25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpCiB7Ci0JTG9naWNhbFJlcEN0 eC0+bGF1bmNoZXJfcGlkID0gMDsKKwlMb2dpY2FsUmVwQ3R4LT5sYXVuY2hlcl9wcm9jbm8g PSBJTlZBTElEX1BST0NfTlVNQkVSOwogfQogCiAvKgpAQCAtMTAxOSw3ICsxMDI0LDYgQEAg QXBwbHlMYXVuY2hlclJlZ2lzdGVyKHZvaWQpCiAJc25wcmludGYoYmd3LmJnd190eXBlLCBC R1dfTUFYTEVOLAogCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIGxhdW5jaGVyIik7CiAJYmd3 LmJnd19yZXN0YXJ0X3RpbWUgPSA1OwotCWJndy5iZ3dfbm90aWZ5X3BpZCA9IDA7CiAJYmd3 LmJnd19tYWluX2FyZyA9IChEYXR1bSkgMDsKIAogCVJlZ2lzdGVyQmFja2dyb3VuZFdvcmtl cigmYmd3KTsKQEAgLTEwNDUsNiArMTA0OSw3IEBAIEFwcGx5TGF1bmNoZXJTaG1lbUluaXQo dm9pZCkKIAogCQltZW1zZXQoTG9naWNhbFJlcEN0eCwgMCwgQXBwbHlMYXVuY2hlclNobWVt U2l6ZSgpKTsKIAorCQlMb2dpY2FsUmVwQ3R4LT5sYXVuY2hlcl9wcm9jbm8gPSBJTlZBTElE X1BST0NfTlVNQkVSOwogCQlMb2dpY2FsUmVwQ3R4LT5sYXN0X3N0YXJ0X2RzYSA9IERTQV9I QU5ETEVfSU5WQUxJRDsKIAkJTG9naWNhbFJlcEN0eC0+bGFzdF9zdGFydF9kc2ggPSBEU0hB U0hfSEFORExFX0lOVkFMSUQ7CiAKQEAgLTExOTMsOCArMTE5OCwxMiBAQCBBcHBseUxhdW5j aGVyV2FrZXVwQXRDb21taXQodm9pZCkKIHZvaWQKIEFwcGx5TGF1bmNoZXJXYWtldXAodm9p ZCkKIHsKLQlpZiAoTG9naWNhbFJlcEN0eC0+bGF1bmNoZXJfcGlkICE9IDApCi0JCWtpbGwo TG9naWNhbFJlcEN0eC0+bGF1bmNoZXJfcGlkLCBTSUdVU1IxKTsKKwl2b2xhdGlsZSBMb2dp Y2FsUmVwQ3R4U3RydWN0ICpyZXBjdHggPSBMb2dpY2FsUmVwQ3R4OworCVByb2NOdW1iZXIJ bGF1bmNoZXJfcHJvY25vOworCisJbGF1bmNoZXJfcHJvY25vID0gcmVwY3R4LT5sYXVuY2hl cl9wcm9jbm87CisJaWYgKGxhdW5jaGVyX3Byb2NubyAhPSBJTlZBTElEX1BST0NfTlVNQkVS KQorCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9TVUJTQ1JJUFRJT05fQ0hBTkdFLCBsYXVu Y2hlcl9wcm9jbm8pOwogfQogCiAvKgpAQCAtMTIwOCwxMyArMTIxNywxNiBAQCBBcHBseUxh dW5jaGVyTWFpbihEYXR1bSBtYWluX2FyZykKIAogCWJlZm9yZV9zaG1lbV9leGl0KGxvZ2lj YWxyZXBfbGF1bmNoZXJfb25leGl0LCAoRGF0dW0pIDApOwogCi0JQXNzZXJ0KExvZ2ljYWxS ZXBDdHgtPmxhdW5jaGVyX3BpZCA9PSAwKTsKLQlMb2dpY2FsUmVwQ3R4LT5sYXVuY2hlcl9w aWQgPSBNeVByb2NQaWQ7CisJQXNzZXJ0KExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3Byb2Nu byA9PSBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwlMb2dpY2FsUmVwQ3R4LT5sYXVuY2hlcl9w cm9jbm8gPSBNeVByb2NOdW1iZXI7CiAKLQkvKiBFc3RhYmxpc2ggc2lnbmFsIGhhbmRsZXJz LiAqLwotCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7 CisJLyogRXN0YWJsaXNoIGludGVycnVwdCBoYW5kbGVycy4gKi8KIAlCYWNrZ3JvdW5kV29y a2VyVW5ibG9ja1NpZ25hbHMoKTsKIAorCVNldFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMo KTsKKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9RVUVSWV9DQU5DRUwsIFByb2Nl c3NRdWVyeUNhbmNlbEludGVycnVwdCk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9R VUVSWV9DQU5DRUwpOworCiAJLyoKIAkgKiBFc3RhYmxpc2ggY29ubmVjdGlvbiB0byBuYWls ZWQgY2F0YWxvZ3MgKHdlIG9ubHkgZXZlciBhY2Nlc3MKIAkgKiBwZ19zdWJzY3JpcHRpb24p LgpAQCAtMTI1Niw2ICsxMjY4LDcgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9h cmcpCiAJCSAqIGRldGVjdGlvbiBpZiBvbmUgb2YgdGhlIHN1YnNjcmlwdGlvbiBlbmFibGVz IHJldGFpbl9kZWFkX3R1cGxlcwogCQkgKiBvcHRpb24uCiAJCSAqLworCQlDbGVhckludGVy cnVwdChJTlRFUlJVUFRfU1VCU0NSSVBUSU9OX0NIQU5HRSk7CiAJCXN1Ymxpc3QgPSBnZXRf c3Vic2NyaXB0aW9uX2xpc3QoKTsKIAkJZm9yZWFjaChsYywgc3VibGlzdCkKIAkJewpAQCAt MTQxNiwyMSArMTQyOSwxOSBAQCBBcHBseUxhdW5jaGVyTWFpbihEYXR1bSBtYWluX2FyZykK IAkJTWVtb3J5Q29udGV4dERlbGV0ZShzdWJjdHgpOwogCiAJCS8qIFdhaXQgZm9yIG1vcmUg d29yay4gKi8KLQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJCQkJICAgV0xfTEFUQ0hf U0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJCSAgIHdhaXRf dGltZSwKLQkJCQkJICAgV0FJVF9FVkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU4pOwotCi0J CWlmIChyYyAmIFdMX0xBVENIX1NFVCkKKwkJcmMgPSBXYWl0SW50ZXJydXB0KENoZWNrRm9y SW50ZXJydXB0c01hc2sgfAorCQkJCQkJICAgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQgfAor CQkJCQkJICAgSU5URVJSVVBUX1NVQlNDUklQVElPTl9DSEFOR0UsCisJCQkJCQkgICBXTF9J TlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAg IHdhaXRfdGltZSwKKwkJCQkJCSAgIFdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlO KTsKKworCQlpZiAocmMgJiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlM YXRjaCk7CiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9CiAKLQkJaWYgKENvbmZp Z1JlbG9hZFBlbmRpbmcpCi0JCXsKLQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsK LQkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOworCQkJaWYgKENvbnN1bWVJbnRl cnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpKQorCQkJCVByb2Nlc3NDb25maWdGaWxl KFBHQ19TSUdIVVApOwogCQl9CiAJfQogCkBAIC0xNTg1LDcgKzE1OTYsNyBAQCBDcmVhdGVD b25mbGljdERldGVjdGlvblNsb3Qodm9pZCkKIGJvb2wKIElzTG9naWNhbExhdW5jaGVyKHZv aWQpCiB7Ci0JcmV0dXJuIExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3BpZCA9PSBNeVByb2NQ aWQ7CisJcmV0dXJuIExvZ2ljYWxSZXBDdHgtPmxhdW5jaGVyX3Byb2NubyA9PSBNeVByb2NO dW1iZXI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3NlcXVlbmNlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9zZXF1ZW5jZXN5bmMuYwppbmRleCA5YzkyZmRkZDYyNC4uNjc3NTAyNDJmN2MgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYwpA QCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uX3Jl bC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd29ya2Vy X2ludGVybmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCkBAIC00OTQsMTEgKzQ5Myw4 IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAogCQkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKIAotCQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCi0JCQl7 Ci0JCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQkJaWYgKENvbnN1bWVJbnRl cnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpKQogCQkJCVByb2Nlc3NDb25maWdGaWxl KFBHQ19TSUdIVVApOwotCQkJfQogCiAJCQlzeW5jX3N0YXR1cyA9IGdldF9hbmRfdmFsaWRh dGVfc2VxX2luZm8oc2xvdCwgJnNlcXVlbmNlX3JlbCwKIAkJCQkJCQkJCQkJCQkmc2VxaW5m bywgJnNlcWlkeCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Nsb3RzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3Rz eW5jLmMKaW5kZXggNWUxZWU3ZTQ3MjguLjlkYmY4OWNiODMyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jCkBAIC01OSw5ICs1OSwxMCBAQAog I2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hs b2dyZWNvdmVyeS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKKyNpbmNs dWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5o IgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCi0j aW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdHN5bmMuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9zbmFwYnVpbGQuaCIKQEAgLTc5LDkgKzgwLDkgQEAKIC8qCiAg KiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24gdG8gY29udHJvbCBzbG90IHN5bmNo cm9uaXphdGlvbi4KICAqCi0gKiBUaGUgJ3BpZCcgaXMgZWl0aGVyIHRoZSBzbG90IHN5bmMg d29ya2VyJ3MgcGlkIG9yIHRoZSBiYWNrZW5kJ3MgcGlkIHJ1bm5pbmcKKyAqIFRoZSAncHJv Y25vJyBpcyBlaXRoZXIgdGhlIHNsb3Qgc3luYyB3b3JrZXIncyBwcm9jbm8gb3IgdGhlIGJh Y2tlbmQncyBwcm9jbm8gcnVubmluZwogICogdGhlIFNRTCBmdW5jdGlvbiBwZ19zeW5jX3Jl cGxpY2F0aW9uX3Nsb3RzKCkuIFdoZW4gdGhlIHN0YXJ0dXAgcHJvY2VzcyBzZXRzCi0gKiAn c3RvcFNpZ25hbGVkJyBkdXJpbmcgcHJvbW90aW9uLCBpdCB1c2VzIHRoaXMgJ3BpZCcgdG8g d2FrZSB1cCB0aGUgY3VycmVudGx5CisgKiAnc3RvcFNpZ25hbGVkJyBkdXJpbmcgcHJvbW90 aW9uLCBpdCB1c2VzIHRoaXMgJ3Byb2NubycgdG8gd2FrZSB1cCB0aGUgY3VycmVudGx5CiAg KiBzeW5jaHJvbml6aW5nIHByb2Nlc3Mgc28gdGhhdCB0aGUgcHJvY2VzcyBjYW4gaW1tZWRp YXRlbHkgc3RvcCBpdHMKICAqIHN5bmNocm9uaXppbmcgd29yayBvbiBzZWVpbmcgJ3N0b3BT aWduYWxlZCcgc2V0LgogICogU2V0dGluZyAnc3RvcFNpZ25hbGVkJyBpcyBhbHNvIHVzZWQg dG8gaGFuZGxlIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVuIHRoZQpAQCAtMTA0LDcgKzEwNSw3 IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IFNsb3RTeW5jQ3R4U3RydWN0CiB7Ci0JcGlkX3QJ CXBpZDsKKwlQcm9jTnVtYmVyCXByb2NubzsKIAlib29sCQlzdG9wU2lnbmFsZWQ7CiAJYm9v bAkJc3luY2luZzsKIAl0aW1lX3QJCWxhc3Rfc3RhcnRfdGltZTsKQEAgLTEyMjMsNyArMTIy NCw3IEBAIHNsb3RzeW5jX3JlcmVhZF9jb25maWcodm9pZCkKIAlpZiAoaXNfc2xvdHN5bmNf d29ya2VyKQogCQlBc3NlcnQoc3luY19yZXBsaWNhdGlvbl9zbG90cyk7CiAKLQlDb25maWdS ZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX0NPTkZJ R19SRUxPQUQpOwogCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwogCiAJY29ubmlu Zm9fY2hhbmdlZCA9IHN0cmNtcChvbGRfcHJpbWFyeV9jb25uaW5mbywgUHJpbWFyeUNvbm5J bmZvKSAhPSAwOwpAQCAtMTI4NiwxMyArMTI4NywxNCBAQCBzbG90c3luY19yZXJlYWRfY29u ZmlnKHZvaWQpCiB9CiAKIC8qCi0gKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgcHJvY2VzcyBw ZXJmb3JtaW5nIHNsb3Qgc3luY2hyb25pemF0aW9uLgorICogQ2hlY2sgZm9yIGludGVycnVw dHMgd2hpbGUgcGVyZm9ybWluZyBzbG90IHN5bmNocm9uaXphdGlvbi4KKyAqCisgKiBUaGlz IGRvZXMgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgYnV0IGFsc28gY2hlY2tzIGZvcgorICog SU5URVJSVVBUX0NPTkZJR19SRUxPQUQgYW5kIGNoZWNrcyBmb3IgJ3N0b3BTaWduYWxlZCcu CiAgKi8KIHN0YXRpYyB2b2lkCiBQcm9jZXNzU2xvdFN5bmNJbnRlcnJ1cHRzKHZvaWQpCiB7 Ci0JQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQogCWlmIChTbG90U3luY0N0eC0+c3RvcFNp Z25hbGVkKQogCXsKIAkJaWYgKEFtTG9naWNhbFNsb3RTeW5jV29ya2VyUHJvY2VzcygpKQpA QCAtMTMxNCw3ICsxMzE2LDkgQEAgUHJvY2Vzc1Nsb3RTeW5jSW50ZXJydXB0cyh2b2lkKQog CQl9CiAJfQogCi0JaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCisJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKworCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9DT05GSUdfUkVM T0FEKSkKIAkJc2xvdHN5bmNfcmVyZWFkX2NvbmZpZygpOwogfQogCkBAIC0xMzU4LDcgKzEz NjIsNyBAQCBzbG90c3luY193b3JrZXJfb25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpCiAK IAlTcGluTG9ja0FjcXVpcmUoJlNsb3RTeW5jQ3R4LT5tdXRleCk7CiAKLQlTbG90U3luY0N0 eC0+cGlkID0gSW52YWxpZFBpZDsKKwlTbG90U3luY0N0eC0+cHJvY25vID0gSU5WQUxJRF9Q Uk9DX05VTUJFUjsKIAogCS8qCiAJICogSWYgc3luY2luZ19zbG90cyBpcyB0cnVlLCBpdCBp bmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2VzcyBlcnJvcmVkIG91dApAQCAtMTQwNCwxMyArMTQw OCwxNiBAQCB3YWl0X2Zvcl9zbG90X2FjdGl2aXR5KGJvb2wgc29tZV9zbG90X3VwZGF0ZWQp CiAJCXNsZWVwX21zID0gTUlOX1NMT1RTWU5DX1dPUktFUl9OQVBUSU1FX01TOwogCX0KIAot CXJjID0gV2FpdExhdGNoKE15TGF0Y2gsCi0JCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElN RU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJICAgc2xlZXBfbXMsCi0JCQkJICAg V0FJVF9FVkVOVF9SRVBMSUNBVElPTl9TTE9UU1lOQ19NQUlOKTsKKwkvKiBXYWl0IGZvciB0 aGUgaW50ZXJydXB0cyB0aGF0IFByb2Nlc3NTbG90U3luY0ludGVycnVwdHMoKSB3aWxsIGhh bmRsZSAqLworCXJjID0gV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwK KwkJCQkJICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJICAgSU5URVJSVVBUX0NP TkZJR19SRUxPQUQsCisJCQkJCSAgIFdMX0lOVEVSUlVQVCB8IFdMX1RJTUVPVVQgfCBXTF9F WElUX09OX1BNX0RFQVRILAorCQkJCQkgICBzbGVlcF9tcywKKwkJCQkJICAgV0FJVF9FVkVO VF9SRVBMSUNBVElPTl9TTE9UU1lOQ19NQUlOKTsKIAotCWlmIChyYyAmIFdMX0xBVENIX1NF VCkKLQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwlpZiAocmMgJiBXTF9JTlRFUlJVUFQpCisJ CUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiB9CiAKIC8qCkBAIC0x NDE4LDcgKzE0MjUsNyBAQCB3YWl0X2Zvcl9zbG90X2FjdGl2aXR5KGJvb2wgc29tZV9zbG90 X3VwZGF0ZWQpCiAgKiBPdGhlcndpc2UsIGFkdmVydGlzZSB0aGF0IGEgc3luYyBpcyBpbiBw cm9ncmVzcy4KICAqLwogc3RhdGljIHZvaWQKLWNoZWNrX2FuZF9zZXRfc3luY19pbmZvKHBp ZF90IHN5bmNfcHJvY2Vzc19waWQpCitjaGVja19hbmRfc2V0X3N5bmNfaW5mbyhQcm9jTnVt YmVyIHN5bmNfcHJvY2Vzc19wcm9jbm8pCiB7CiAJU3BpbkxvY2tBY3F1aXJlKCZTbG90U3lu Y0N0eC0+bXV0ZXgpOwogCkBAIC0xNDMwLDE2ICsxNDM3LDE2IEBAIGNoZWNrX2FuZF9zZXRf c3luY19pbmZvKHBpZF90IHN5bmNfcHJvY2Vzc19waWQpCiAJCQkJZXJybXNnKCJjYW5ub3Qg c3luY2hyb25pemUgcmVwbGljYXRpb24gc2xvdHMgY29uY3VycmVudGx5IikpOwogCX0KIAot CS8qIFRoZSBwaWQgbXVzdCBub3QgYmUgYWxyZWFkeSBhc3NpZ25lZCBpbiBTbG90U3luY0N0 eCAqLwotCUFzc2VydChTbG90U3luY0N0eC0+cGlkID09IEludmFsaWRQaWQpOworCS8qIFRo ZSBwcm9jbm8gbXVzdCBub3QgYmUgYWxyZWFkeSBhc3NpZ25lZCBpbiBTbG90U3luY0N0eCAq LworCUFzc2VydChTbG90U3luY0N0eC0+cHJvY25vID09IElOVkFMSURfUFJPQ19OVU1CRVIp OwogCiAJU2xvdFN5bmNDdHgtPnN5bmNpbmcgPSB0cnVlOwogCiAJLyoKLQkgKiBBZHZlcnRp c2UgdGhlIHJlcXVpcmVkIFBJRCBzbyB0aGF0IHRoZSBzdGFydHVwIHByb2Nlc3MgY2FuIGtp bGwgdGhlCi0JICogc2xvdCBzeW5jIHByb2Nlc3Mgb24gcHJvbW90aW9uLgorCSAqIEFkdmVy dGlzZSB0aGUgcmVxdWlyZWQgcHJvYyBudW1iZXIgc28gdGhhdCB0aGUgc3RhcnR1cCBwcm9j ZXNzIGNhbiBraWxsCisJICogdGhlIHNsb3Qgc3luYyBwcm9jZXNzIG9uIHByb21vdGlvbi4K IAkgKi8KLQlTbG90U3luY0N0eC0+cGlkID0gc3luY19wcm9jZXNzX3BpZDsKKwlTbG90U3lu Y0N0eC0+cHJvY25vID0gc3luY19wcm9jZXNzX3Byb2NubzsKIAogCVNwaW5Mb2NrUmVsZWFz ZSgmU2xvdFN5bmNDdHgtPm11dGV4KTsKIApAQCAtMTQ1NCw3ICsxNDYxLDcgQEAgcmVzZXRf c3luY2luZ19mbGFnKHZvaWQpCiB7CiAJU3BpbkxvY2tBY3F1aXJlKCZTbG90U3luY0N0eC0+ bXV0ZXgpOwogCVNsb3RTeW5jQ3R4LT5zeW5jaW5nID0gZmFsc2U7Ci0JU2xvdFN5bmNDdHgt PnBpZCA9IEludmFsaWRQaWQ7CisJU2xvdFN5bmNDdHgtPnByb2NubyA9IElOVkFMSURfUFJP Q19OVU1CRVI7CiAJU3BpbkxvY2tSZWxlYXNlKCZTbG90U3luY0N0eC0+bXV0ZXgpOwogCiAJ c3luY2luZ19zbG90cyA9IGZhbHNlOwpAQCAtMTUyOSwxOSArMTUzNiwxNSBAQCBSZXBsU2xv dFN5bmNXb3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0 dXBfZGF0YV9sZW4pCiAJUEdfZXhjZXB0aW9uX3N0YWNrID0gJmxvY2FsX3NpZ2ptcF9idWY7 CiAKIAkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNp Z25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR0lOVCwgU3RhdGVt ZW50Q2FuY2VsSGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKIAlwcXNpZ25h bChTSUdGUEUsIEZsb2F0RXhjZXB0aW9uSGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNSMSwg cHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJR1VTUjIsIFNJR19J R04pOwotCXBxc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOwogCi0JY2hlY2tfYW5kX3NldF9z eW5jX2luZm8oTXlQcm9jUGlkKTsKKwlTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7 CisKKwljaGVja19hbmRfc2V0X3N5bmNfaW5mbyhNeVByb2NOdW1iZXIpOwogCiAJZXJlcG9y dChMT0csIGVycm1zZygic2xvdCBzeW5jIHdvcmtlciBzdGFydGVkIikpOwogCi0JLyogUmVn aXN0ZXIgaXQgYXMgc29vbiBhcyBTbG90U3luY0N0eC0+cGlkIGlzIGluaXRpYWxpemVkLiAq LworCS8qIFJlZ2lzdGVyIGl0IGFzIHNvb24gYXMgU2xvdFN5bmNDdHgtPnByb2NubyBpcyBp bml0aWFsaXplZC4gKi8KIAliZWZvcmVfc2htZW1fZXhpdChzbG90c3luY193b3JrZXJfb25l eGl0LCAoRGF0dW0pIDApOwogCiAJLyoKQEAgLTE2ODEsNyArMTY4NCw3IEBAIHVwZGF0ZV9z eW5jZWRfc2xvdHNfaW5hY3RpdmVfc2luY2Uodm9pZCkKIAkJcmV0dXJuOwogCiAJLyogVGhl IHNsb3Qgc3luYyB3b3JrZXIgb3IgdGhlIFNRTCBmdW5jdGlvbiBtdXN0bid0IGJlIHJ1bm5p bmcgYnkgbm93ICovCi0JQXNzZXJ0KChTbG90U3luY0N0eC0+cGlkID09IEludmFsaWRQaWQp ICYmICFTbG90U3luY0N0eC0+c3luY2luZyk7CisJQXNzZXJ0KChTbG90U3luY0N0eC0+cHJv Y25vID09IElOVkFMSURfUFJPQ19OVU1CRVIpICYmICFTbG90U3luY0N0eC0+c3luY2luZyk7 CiAKIAlMV0xvY2tBY3F1aXJlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrLCBMV19TSEFS RUQpOwogCkBAIC0xNzIwLDcgKzE3MjMsNyBAQCB1cGRhdGVfc3luY2VkX3Nsb3RzX2luYWN0 aXZlX3NpbmNlKHZvaWQpCiB2b2lkCiBTaHV0RG93blNsb3RTeW5jKHZvaWQpCiB7Ci0JcGlk X3QJCXN5bmNfcHJvY2Vzc19waWQ7CisJUHJvY051bWJlcglzeW5jX3Byb2Nlc3NfcHJvY25v OwogCiAJU3BpbkxvY2tBY3F1aXJlKCZTbG90U3luY0N0eC0+bXV0ZXgpOwogCkBAIC0xNzM3 LDcgKzE3NDAsNyBAQCBTaHV0RG93blNsb3RTeW5jKHZvaWQpCiAJCXJldHVybjsKIAl9CiAK LQlzeW5jX3Byb2Nlc3NfcGlkID0gU2xvdFN5bmNDdHgtPnBpZDsKKwlzeW5jX3Byb2Nlc3Nf cHJvY25vID0gU2xvdFN5bmNDdHgtPnByb2NubzsKIAogCVNwaW5Mb2NrUmVsZWFzZSgmU2xv dFN5bmNDdHgtPm11dGV4KTsKIApAQCAtMTc0NSw4ICsxNzQ4LDggQEAgU2h1dERvd25TbG90 U3luYyh2b2lkKQogCSAqIFNpZ25hbCBwcm9jZXNzIGRvaW5nIHNsb3RzeW5jLCBpZiBhbnku IFRoZSBwcm9jZXNzIHdpbGwgc3RvcCB1cG9uCiAJICogZGV0ZWN0aW5nIHRoYXQgdGhlIHN0 b3BTaWduYWxlZCBmbGFnIGlzIHNldCB0byB0cnVlLgogCSAqLwotCWlmIChzeW5jX3Byb2Nl c3NfcGlkICE9IEludmFsaWRQaWQpCi0JCWtpbGwoc3luY19wcm9jZXNzX3BpZCwgU0lHVVNS MSk7CisJaWYgKHN5bmNfcHJvY2Vzc19wcm9jbm8gIT0gSU5WQUxJRF9QUk9DX05VTUJFUikK KwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIHN5bmNfcHJvY2Vzc19w cm9jbm8pOwogCiAJLyogV2FpdCBmb3Igc2xvdCBzeW5jIHRvIGVuZCAqLwogCWZvciAoOzsp CkBAIC0xNzU0LDEzICsxNzU3LDE0IEBAIFNodXREb3duU2xvdFN5bmModm9pZCkKIAkJaW50 CQkJcmM7CiAKIAkJLyogV2FpdCBhIGJpdCwgd2UgZG9uJ3QgZXhwZWN0IHRvIGhhdmUgdG8g d2FpdCBsb25nICovCi0JCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsCi0JCQkJCSAgIFdMX0xB VENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkgICAx MEwsIFdBSVRfRVZFTlRfUkVQTElDQVRJT05fU0xPVFNZTkNfU0hVVERPV04pOworCQlyYyA9 IFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkgICBJTlRF UlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VU IHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAgIDEwTCwgV0FJVF9FVkVOVF9SRVBM SUNBVElPTl9TTE9UU1lOQ19TSFVURE9XTik7CiAKLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VU KQorCQlpZiAocmMgJiBXTF9JTlRFUlJVUFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRj aCk7CisJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJfQogCkBAIC0xODQ1LDcgKzE4NDksNyBAQCBTbG90 U3luY1NobWVtSW5pdCh2b2lkKQogCWlmICghZm91bmQpCiAJewogCQltZW1zZXQoU2xvdFN5 bmNDdHgsIDAsIHNpemUpOwotCQlTbG90U3luY0N0eC0+cGlkID0gSW52YWxpZFBpZDsKKwkJ U2xvdFN5bmNDdHgtPnByb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCVNwaW5Mb2Nr SW5pdCgmU2xvdFN5bmNDdHgtPm11dGV4KTsKIAl9CiB9CkBAIC0xOTIzLDcgKzE5MjcsNyBA QCBTeW5jUmVwbGljYXRpb25TbG90cyhXYWxSZWNlaXZlckNvbm4gKndyY29ubikKIAkJTGlz dAkgICAqcmVtb3RlX3Nsb3RzID0gTklMOwogCQlMaXN0CSAgICpzbG90X25hbWVzID0gTklM OwkvKiBMaXN0IG9mIHNsb3QgbmFtZXMgdG8gdHJhY2sgKi8KIAotCQljaGVja19hbmRfc2V0 X3N5bmNfaW5mbyhNeVByb2NQaWQpOworCQljaGVja19hbmRfc2V0X3N5bmNfaW5mbyhNeVBy b2NOdW1iZXIpOwogCiAJCS8qIENoZWNrIGZvciBpbnRlcnJ1cHRzIGFuZCBjb25maWcgY2hh bmdlcyAqLwogCQlQcm9jZXNzU2xvdFN5bmNJbnRlcnJ1cHRzKCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCBiY2NiZjYxYmYzOS4u Zjg1YmJkNjdiM2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYwpAQCAtMTAwLDYgKzEwMCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19z dWJzY3JpcHRpb25fcmVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvY29weS5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNp bmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKQEAgLTExMiw3ICsxMTMsNiBAQAog I2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vd29ya2VyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNp bmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAj aW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTE2 OCwxMSArMTY4LDEyIEBAIHdhaXRfZm9yX3RhYmxlX3N0YXRlX2NoYW5nZShPaWQgcmVsaWQs IGNoYXIgZXhwZWN0ZWRfc3RhdGUpCiAJCWlmICghd29ya2VyKQogCQkJYnJlYWs7CiAKLQkJ KHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkJIFdMX0xBVENIX1NFVCB8IFdMX1RJ TUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkJIDEwMDBMLCBXQUlUX0VWRU5U X0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0UpOworCQkodm9pZCkgV2FpdEludGVycnVwdChD aGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkgSU5URVJSVVBUX1dBSVRfV0FLRVVQ LAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9E RUFUSCwKKwkJCQkJCQkgMTAwMEwsIFdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX1NUQVRFX0NI QU5HRSk7CiAKLQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5U RVJSVVBUX1dBSVRfV0FLRVVQKTsKIAl9CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yMTksMTUg KzIyMCwxNiBAQCB3YWl0X2Zvcl93b3JrZXJfc3RhdGVfY2hhbmdlKGNoYXIgZXhwZWN0ZWRf c3RhdGUpCiAJCQlicmVhazsKIAogCQkvKgotCQkgKiBXYWl0LiAgV2UgZXhwZWN0IHRvIGdl dCBhIGxhdGNoIHNpZ25hbCBiYWNrIGZyb20gdGhlIGFwcGx5IHdvcmtlciwKKwkJICogV2Fp dC4gIFdlIGV4cGVjdCB0byBnZXQgYW4gaW50ZXJydXB0IHdha2V1cCBmcm9tIHRoZSBhcHBs eSB3b3JrZXIsCiAJCSAqIGJ1dCB1c2UgYSB0aW1lb3V0IGluIGNhc2UgaXQgZGllcyB3aXRo b3V0IHNlbmRpbmcgb25lLgogCQkgKi8KLQkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKLQkJ CQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgs Ci0JCQkJCSAgIDEwMDBMLCBXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0Up OworCQlyYyA9IFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJ CQkgICBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBX TF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCSAgIDEwMDBMLCBXQUlU X0VWRU5UX0xPR0lDQUxfU1lOQ19TVEFURV9DSEFOR0UpOwogCi0JCWlmIChyYyAmIFdMX0xB VENIX1NFVCkKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCWlmIChyYyAmIFdMX0lOVEVS UlVQVCkKKwkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJfQog CiAJcmV0dXJuIGZhbHNlOwpAQCAtNTE5LDcgKzUyMSw3IEBAIFByb2Nlc3NTeW5jaW5nVGFi bGVzRm9yQXBwbHkoWExvZ1JlY1B0ciBjdXJyZW50X2xzbikKIAkJCQkJCSAqIHRoZSBleGlz dGluZyBsb2NrcyBiZWZvcmUgZW50ZXJpbmcgYSBidXN5IGxvb3AuCiAJCQkJCQkgKiBUaGlz IGlzIHJlcXVpcmVkIHRvIGF2b2lkIGFueSB1bmRldGVjdGVkIGRlYWRsb2NrcwogCQkJCQkJ ICogZHVlIHRvIGFueSBleGlzdGluZyBsb2NrIGFzIGRlYWRsb2NrIGRldGVjdG9yIHdvbid0 Ci0JCQkJCQkgKiBiZSBhYmxlIHRvIGRldGVjdCB0aGUgd2FpdHMgb24gdGhlIGxhdGNoLgor CQkJCQkJICogYmUgYWJsZSB0byBkZXRlY3QgdGhlIHdhaXRzIG9uIHRoZSBpbnRlcnJ1cHQu CiAJCQkJCQkgKgogCQkJCQkJICogQWxzbyBjbG9zZSBhbnkgdGFibGVzIHByaW9yIHRvIHRo ZSBjb21taXQuCiAJCQkJCQkgKi8KQEAgLTY5OCwxNCArNzAwLDEyIEBAIGNvcHlfcmVhZF9k YXRhKHZvaWQgKm91dGJ1ZiwgaW50IG1pbnJlYWQsIGludCBtYXhyZWFkKQogCQl9CiAKIAkJ LyoKLQkJICogV2FpdCBmb3IgbW9yZSBkYXRhIG9yIGxhdGNoLgorCQkgKiBXYWl0IGZvciBt b3JlIGRhdGEgb3IgaW50ZXJydXB0LgogCQkgKi8KLQkJKHZvaWQpIFdhaXRMYXRjaE9yU29j a2V0KE15TGF0Y2gsCi0JCQkJCQkJCSBXTF9TT0NLRVRfUkVBREFCTEUgfCBXTF9MQVRDSF9T RVQgfAotCQkJCQkJCQkgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCi0JCQkJ CQkJCSBmZCwgMTAwMEwsIFdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX0RBVEEpOwotCi0JCVJl c2V0TGF0Y2goTXlMYXRjaCk7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0T3JTb2NrZXQoQ2hl Y2tGb3JJbnRlcnJ1cHRzTWFzaywKKwkJCQkJCQkJCSBXTF9TT0NLRVRfUkVBREFCTEUgfCBX TF9JTlRFUlJVUFQgfAorCQkJCQkJCQkJIFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RF QVRILAorCQkJCQkJCQkJIGZkLCAxMDAwTCwgV0FJVF9FVkVOVF9MT0dJQ0FMX1NZTkNfREFU QSk7CiAJfQogCiAJcmV0dXJuIGJ5dGVzcmVhZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IGY5YzRiNDg0NzU0Li44YzMxYmNhZDQzZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYworKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCkBAIC0yNjEsMTMg KzI2MSwxNCBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKICNpbmNsdWRlICJl eGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAiaXBjL3NpZ25hbF9o YW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVy cnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsd3JpdGVyLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vY29uZmxpY3QuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs bGF1bmNoZXIuaCIKQEAgLTI4MSw3ICsyODIsNiBAQAogI2luY2x1ZGUgInJld3JpdGUvcmV3 cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRl ICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgogI2lu Y2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKQEAgLTQwNTYsMTEgKzQwNTYsOCBAQCBMb2dpY2Fs UmVwQXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAkJCQkJaW50CQkJYzsK IAkJCQkJU3RyaW5nSW5mb0RhdGEgczsKIAotCQkJCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGlu ZykKLQkJCQkJewotCQkJCQkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQkJCQlp ZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCiAJCQkJCQlQ cm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKLQkJCQkJfQogCiAJCQkJCS8qIFJlc2V0 IHRpbWVvdXQuICovCiAJCQkJCWxhc3RfcmVjdl90aW1lc3RhbXAgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7CkBAIC00MTc5LDExICs0MTc2LDExIEBAIExvZ2ljYWxSZXBBcHBseUxvb3Ao WExvZ1JlY1B0ciBsYXN0X3JlY2VpdmVkKQogCQkJYnJlYWs7CiAKIAkJLyoKLQkJICogV2Fp dCBmb3IgbW9yZSBkYXRhIG9yIGxhdGNoLiAgSWYgd2UgaGF2ZSB1bmZsdXNoZWQgdHJhbnNh Y3Rpb25zLAotCQkgKiB3YWtlIHVwIGFmdGVyIFdhbFdyaXRlckRlbGF5IHRvIHNlZSBpZiB0 aGV5J3ZlIGJlZW4gZmx1c2hlZCB5ZXQgKGluCi0JCSAqIHdoaWNoIGNhc2Ugd2Ugc2hvdWxk IHNlbmQgYSBmZWVkYmFjayBtZXNzYWdlKS4gIE90aGVyd2lzZSwgdGhlcmUncwotCQkgKiBu byBwYXJ0aWN1bGFyIHVyZ2VuY3kgYWJvdXQgd2FraW5nIHVwIHVubGVzcyB3ZSBnZXQgZGF0 YSBvciBhCi0JCSAqIHNpZ25hbC4KKwkJICogV2FpdCBmb3IgbW9yZSBkYXRhIG9yIGludGVy cnVwdC4gIElmIHdlIGhhdmUgdW5mbHVzaGVkCisJCSAqIHRyYW5zYWN0aW9ucywgd2FrZSB1 cCBhZnRlciBXYWxXcml0ZXJEZWxheSB0byBzZWUgaWYgdGhleSd2ZSBiZWVuCisJCSAqIGZs dXNoZWQgeWV0IChpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBzZW5kIGEgZmVlZGJhY2sgbWVz c2FnZSkuCisJCSAqIE90aGVyd2lzZSwgdGhlcmUncyBubyBwYXJ0aWN1bGFyIHVyZ2VuY3kg YWJvdXQgd2FraW5nIHVwIHVubGVzcyB3ZQorCQkgKiBnZXQgZGF0YSBvciBhIHNpZ25hbC4K IAkJICovCiAJCWlmICghZGxpc3RfaXNfZW1wdHkoJmxzbl9tYXBwaW5nKSkKIAkJCXdhaXRf dGltZSA9IFdhbFdyaXRlckRlbGF5OwpAQCAtNDIwNCwyMyArNDIwMSwyMiBAQCBMb2dpY2Fs UmVwQXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAkJCQl3YWl0X3RpbWUg PSBNaW4od2FpdF90aW1lLCBNeVN1YnNjcmlwdGlvbi0+bWF4cmV0ZW50aW9uKTsKIAkJfQog Ci0JCXJjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlMYXRjaCwKLQkJCQkJCQkgICBXTF9TT0NL RVRfUkVBREFCTEUgfCBXTF9MQVRDSF9TRVQgfAotCQkJCQkJCSAgIFdMX1RJTUVPVVQgfCBX TF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkJCSAgIGZkLCB3YWl0X3RpbWUsCi0JCQkJCQkJ ICAgV0FJVF9FVkVOVF9MT0dJQ0FMX0FQUExZX01BSU4pOworCQlyYyA9IFdhaXRJbnRlcnJ1 cHRPclNvY2tldChDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkJCQkJICAgSU5URVJS VVBUX1dBSVRfV0FLRVVQIHwKKwkJCQkJCQkJICAgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQs CisJCQkJCQkJCSAgIFdMX1NPQ0tFVF9SRUFEQUJMRSB8IFdMX0lOVEVSUlVQVCB8CisJCQkJ CQkJCSAgIFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCQkgICBm ZCwgd2FpdF90aW1lLAorCQkJCQkJCQkgICBXQUlUX0VWRU5UX0xPR0lDQUxfQVBQTFlfTUFJ Tik7CiAKLQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQlpZiAocmMgJiBXTF9JTlRFUlJV UFQpCiAJCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDbGVhckludGVycnVwdChJ TlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJ fQogCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0JCQlDb25maWdSZWxvYWRQ ZW5kaW5nID0gZmFsc2U7CisJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9DT05G SUdfUkVMT0FEKSkKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVApOwotCQl9CiAK IAkJaWYgKHJjICYgV0xfVElNRU9VVCkKIAkJewpAQCAtNTkyOSw4ICs1OTI1LDEzIEBAIFNl dHVwQXBwbHlPclN5bmNXb3JrZXIoaW50IHdvcmtlcl9zbG90KQogCiAJQXNzZXJ0KGFtX3Rh Ymxlc3luY193b3JrZXIoKSB8fCBhbV9zZXF1ZW5jZXN5bmNfd29ya2VyKCkgfHwgYW1fbGVh ZGVyX2FwcGx5X3dvcmtlcigpKTsKIAotCS8qIFNldHVwIHNpZ25hbCBoYW5kbGluZyAqLwot CXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7CisJLyog U2V0dXAgaW50ZXJydXB0IGhhbmRsaW5nICovCisJU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5k bGVycygpOworCisJLyogT3ZlcnJpZGUgdGhlIGhhbmRsZXIgZm9yIHBhcmFsbGxlbCBtZXNz YWdlcyAqLworCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX1BBUkFMTEVMX01FU1NB R0UsIFByb2Nlc3NQYXJhbGxlbEFwcGx5TWVzc2FnZXMpOworCUVuYWJsZUludGVycnVwdChJ TlRFUlJVUFRfUEFSQUxMRUxfTUVTU0FHRSk7CisKIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9j a1NpZ25hbHMoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9zbG90LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKaW5kZXggMjhjNzAx OTQwMmIuLjk3NDJkZGQxZmQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9zbG90LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCkBAIC00NCw5 ICs0NCw5IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWNvdmVyeS5oIgogI2luY2x1ZGUg ImNvbW1vbi9maWxlX3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2lu Y2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxsYXVuY2hlci5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3Nsb3RzeW5jLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpAQCAt NjIyLDcgKzYyMiw2IEBAIFJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoY29uc3QgY2hhciAqbmFt ZSwgYm9vbCBub3dhaXQsIGJvb2wgZXJyb3JfaWZfaW52YWxpZCkKIHsKIAlSZXBsaWNhdGlv blNsb3QgKnM7CiAJUHJvY051bWJlcglhY3RpdmVfcHJvYzsKLQlpbnQJCQlhY3RpdmVfcGlk OwogCiAJQXNzZXJ0KG5hbWUgIT0gTlVMTCk7CiAKQEAgLTY4NSw3ICs2ODQsNiBAQCByZXRy eToKIAkJcy0+YWN0aXZlX3Byb2MgPSBhY3RpdmVfcHJvYyA9IE15UHJvY051bWJlcjsKIAkJ UmVwbGljYXRpb25TbG90U2V0SW5hY3RpdmVTaW5jZShzLCAwLCB0cnVlKTsKIAl9Ci0JYWN0 aXZlX3BpZCA9IEdldFBHUHJvY0J5TnVtYmVyKGFjdGl2ZV9wcm9jKS0+cGlkOwogCUxXTG9j a1JlbGVhc2UoUmVwbGljYXRpb25TbG90Q29udHJvbExvY2spOwogCiAJLyoKQEAgLTcwNyw3 ICs3MDUsNyBAQCByZXRyeToKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX09CSkVDVF9JTl9VU0UpLAogCQkJCSBlcnJtc2coInJlcGxpY2F0aW9uIHNsb3QgXCIl c1wiIGlzIGFjdGl2ZSBmb3IgUElEICVkIiwKLQkJCQkJCU5hbWVTdHIocy0+ZGF0YS5uYW1l KSwgYWN0aXZlX3BpZCkpKTsKKwkJCQkJCU5hbWVTdHIocy0+ZGF0YS5uYW1lKSwgR2V0UEdQ cm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLT5waWQpKSk7CiAJfQogCWVsc2UgaWYgKCFub3dh aXQpCiAJCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsgLyogbm8gc2xlZXAgbmVl ZGVkIGFmdGVyIGFsbCAqLwpAQCAtMTk2OCw3ICsxOTY2LDcgQEAgSW52YWxpZGF0ZVBvc3Np Ymx5T2Jzb2xldGVTbG90KHVpbnQzMiBwb3NzaWJsZV9jYXVzZXMsCiAJCQkJCQkJICAgT2lk IGRib2lkLCBUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uLAogCQkJCQkJ CSAgIGJvb2wgKnJlbGVhc2VkX2xvY2tfb3V0KQogewotCWludAkJCWxhc3Rfc2lnbmFsZWRf cGlkID0gMDsKKwlQcm9jTnVtYmVyCWxhc3Rfc2lnbmFsZWRfcHJvYyA9IElOVkFMSURfUFJP Q19OVU1CRVI7CiAJYm9vbAkJcmVsZWFzZWRfbG9jayA9IGZhbHNlOwogCWJvb2wJCWludmFs aWRhdGVkID0gZmFsc2U7CiAJVGltZXN0YW1wVHogaW5hY3RpdmVfc2luY2UgPSAwOwpAQCAt MTk3OCw3ICsxOTc2LDYgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KHVpbnQz MiBwb3NzaWJsZV9jYXVzZXMsCiAJCVhMb2dSZWNQdHIJcmVzdGFydF9sc247CiAJCU5hbWVE YXRhCXNsb3RuYW1lOwogCQlQcm9jTnVtYmVyCWFjdGl2ZV9wcm9jOwotCQlpbnQJCQlhY3Rp dmVfcGlkID0gMDsKIAkJUmVwbGljYXRpb25TbG90SW52YWxpZGF0aW9uQ2F1c2UgaW52YWxp ZGF0aW9uX2NhdXNlID0gUlNfSU5WQUxfTk9ORTsKIAkJVGltZXN0YW1wVHogbm93ID0gMDsK IAkJbG9uZwkJc2xvdF9pZGxlX3NlY3MgPSAwOwpAQCAtMjA2MiwxMSArMjA1OSw2IEBAIElu dmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAog CQkJLyogTGV0IGNhbGxlciBrbm93ICovCiAJCQlpbnZhbGlkYXRlZCA9IHRydWU7CiAJCX0K LQkJZWxzZQotCQl7Ci0JCQlhY3RpdmVfcGlkID0gR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZl X3Byb2MpLT5waWQ7Ci0JCQlBc3NlcnQoYWN0aXZlX3BpZCAhPSAwKTsKLQkJfQogCiAJCVNw aW5Mb2NrUmVsZWFzZSgmcy0+bXV0ZXgpOwogCkBAIC0yMTA1LDIyICsyMDk3LDI1IEBAIElu dmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2VzLAog CQkJICogcHJvY2VzcyBvd25zIGl0LiBUbyBoYW5kbGUgdGhhdCwgd2Ugc2lnbmFsIG9ubHkg aWYgdGhlIFBJRCBvZgogCQkJICogdGhlIG93bmluZyBwcm9jZXNzIGhhcyBjaGFuZ2VkIGZy b20gdGhlIHByZXZpb3VzIHRpbWUuIChUaGlzCiAJCQkgKiBsb2dpYyBhc3N1bWVzIHRoYXQg dGhlIHNhbWUgUElEIGlzIG5vdCByZXVzZWQgdmVyeSBxdWlja2x5LikKKwkJCSAqCisJCQkg KiBGSVhNRTogbmVlZCBhbm90aGVyIGNoZWNrIG5vdyB0aGF0IHdlJ3JlIHVzaW5nIFByb2NO dW1iZXJzLAorCQkJICogd2hpY2ggZG8gZ2V0IHJlY3ljbGVkIHF1aWNrbHkKIAkJCSAqLwot CQkJaWYgKGxhc3Rfc2lnbmFsZWRfcGlkICE9IGFjdGl2ZV9waWQpCisJCQlpZiAobGFzdF9z aWduYWxlZF9wcm9jICE9IGFjdGl2ZV9wcm9jKQogCQkJewotCQkJCVJlcG9ydFNsb3RJbnZh bGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCB0cnVlLCBhY3RpdmVfcGlkLAorCQkJCVJl cG9ydFNsb3RJbnZhbGlkYXRpb24oaW52YWxpZGF0aW9uX2NhdXNlLCB0cnVlLAorCQkJCQkJ CQkJICAgR2V0UEdQcm9jQnlOdW1iZXIoYWN0aXZlX3Byb2MpLT5waWQsCiAJCQkJCQkJCQkg ICBzbG90bmFtZSwgcmVzdGFydF9sc24sCiAJCQkJCQkJCQkgICBvbGRlc3RMU04sIHNuYXBz aG90Q29uZmxpY3RIb3Jpem9uLAogCQkJCQkJCQkJICAgc2xvdF9pZGxlX3NlY3MpOwogCiAJ CQkJaWYgKE15QmFja2VuZFR5cGUgPT0gQl9TVEFSVFVQKQogCQkJCQkodm9pZCkgU2lnbmFs UmVjb3ZlcnlDb25mbGljdChHZXRQR1Byb2NCeU51bWJlcihhY3RpdmVfcHJvYyksCi0JCQkJ CQkJCQkJCQkgIGFjdGl2ZV9waWQsCiAJCQkJCQkJCQkJCQkgIFJFQ09WRVJZX0NPTkZMSUNU X0xPR0lDQUxTTE9UKTsKIAkJCQllbHNlCi0JCQkJCSh2b2lkKSBraWxsKGFjdGl2ZV9waWQs IFNJR1RFUk0pOworCQkJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9URVJNSU5BVEUsIGFj dGl2ZV9wcm9jKTsKIAotCQkJCWxhc3Rfc2lnbmFsZWRfcGlkID0gYWN0aXZlX3BpZDsKKwkJ CQlsYXN0X3NpZ25hbGVkX3Byb2MgPSBhY3RpdmVfcHJvYzsKIAkJCX0KIAogCQkJLyogV2Fp dCB1bnRpbCB0aGUgc2xvdCBpcyByZWxlYXNlZC4gKi8KQEAgLTIxNjEsNyArMjE1Niw4IEBA IEludmFsaWRhdGVQb3NzaWJseU9ic29sZXRlU2xvdCh1aW50MzIgcG9zc2libGVfY2F1c2Vz LAogCQkJUmVwbGljYXRpb25TbG90U2F2ZSgpOwogCQkJUmVwbGljYXRpb25TbG90UmVsZWFz ZSgpOwogCi0JCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRhdGlvbl9jYXVzZSwg ZmFsc2UsIGFjdGl2ZV9waWQsCisJCQlSZXBvcnRTbG90SW52YWxpZGF0aW9uKGludmFsaWRh dGlvbl9jYXVzZSwgZmFsc2UsCisJCQkJCQkJCSAgIEdldFBHUHJvY0J5TnVtYmVyKGFjdGl2 ZV9wcm9jKS0+cGlkLAogCQkJCQkJCQkgICBzbG90bmFtZSwgcmVzdGFydF9sc24sCiAJCQkJ CQkJCSAgIG9sZGVzdExTTiwgc25hcHNob3RDb25mbGljdEhvcml6b24sCiAJCQkJCQkJCSAg IHNsb3RfaWRsZV9zZWNzKTsKQEAgLTMyNTMsMTEgKzMyNDksOCBAQCBXYWl0Rm9yU3RhbmRi eUNvbmZpcm1hdGlvbihYTG9nUmVjUHRyIHdhaXRfZm9yX2xzbikKIAl7CiAJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CiAKLQkJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCi0JCXsKLQkJ CUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxzZTsKKwkJaWYgKENvbnN1bWVJbnRlcnJ1cHQo SU5URVJSVVBUX0NPTkZJR19SRUxPQUQpKQogCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJ R0hVUCk7Ci0JCX0KIAogCQkvKiBFeGl0IGlmIGRvbmUgd2FpdGluZyBmb3IgZXZlcnkgc2xv dC4gKi8KIAkJaWYgKFN0YW5kYnlTbG90c0hhdmVDYXVnaHR1cCh3YWl0X2Zvcl9sc24sIFdB Uk5JTkcpKQpAQCAtMzI2Nyw2ICszMjYwLDggQEAgV2FpdEZvclN0YW5kYnlDb25maXJtYXRp b24oWExvZ1JlY1B0ciB3YWl0X2Zvcl9sc24pCiAJCSAqIFdhaXQgZm9yIHRoZSBzbG90cyBp biB0aGUgc3luY2hyb25pemVkX3N0YW5kYnlfc2xvdHMgdG8gY2F0Y2ggdXAsCiAJCSAqIGJ1 dCB1c2UgYSB0aW1lb3V0ICgxcykgc28gd2UgY2FuIGFsc28gY2hlY2sgaWYgdGhlCiAJCSAq IHN5bmNocm9uaXplZF9zdGFuZGJ5X3Nsb3RzIGhhcyBiZWVuIGNoYW5nZWQuCisJCSAqCisJ CSAqIEZJWE1FOiBJIHRoaW5rIHdlIG5lZWQgYSB3YXkgdG8gYWRkIGEgQ1YgdG8gV2FpdEV2 ZW50U2V0CiAJCSAqLwogCQlDb25kaXRpb25WYXJpYWJsZVRpbWVkU2xlZXAoJldhbFNuZEN0 bC0+d2FsX2NvbmZpcm1fcmN2X2N2LCAxMDAwLAogCQkJCQkJCQkJV0FJVF9FVkVOVF9XQUlU X0ZPUl9TVEFOREJZX0NPTkZJUk1BVElPTik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9zeW5jcmVwLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zeW5jcmVw LmMKaW5kZXggZDE1ODJhNWQ3MTEuLjRiYTVlZDgyOGJmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9zeW5jcmVwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vc3luY3JlcC5jCkBAIC03Niw2ICs3Niw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MveGFj dC5oIgogI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5j bHVkZSAicmVwbGljYXRpb24vc3luY3JlcC5oIgpAQCAtMjY1LDIyICsyNjYsMjIgQEAgU3lu Y1JlcFdhaXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGJvb2wgY29tbWl0KQogCS8qCiAJICog V2FpdCBmb3Igc3BlY2lmaWVkIExTTiB0byBiZSBjb25maXJtZWQuCiAJICoKLQkgKiBFYWNo IHByb2MgaGFzIGl0cyBvd24gd2FpdCBsYXRjaCwgc28gd2UgcGVyZm9ybSBhIG5vcm1hbCBs YXRjaAorCSAqIEVhY2ggcHJvYyBoYXMgaXRzIG93biB3YWl0IGludGVycnVwdCB2ZWN0b3Is IHNvIHdlIHBlcmZvcm0gYSBub3JtYWwKIAkgKiBjaGVjay93YWl0IGxvb3AgaGVyZS4KIAkg Ki8KIAlmb3IgKDs7KQogCXsKIAkJaW50CQkJcmM7CiAKLQkJLyogTXVzdCByZXNldCB0aGUg bGF0Y2ggYmVmb3JlIHRlc3Rpbmcgc3RhdGUuICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7 CisJCS8qIE11c3QgY2xlYXIgdGhlIGludGVycnVwdCBmbGFnIGJlZm9yZSB0ZXN0aW5nIHN0 YXRlLiAqLworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogCiAJ CS8qCi0JCSAqIEFjcXVpcmluZyB0aGUgbG9jayBpcyBub3QgbmVlZGVkLCB0aGUgbGF0Y2gg ZW5zdXJlcyBwcm9wZXIKLQkJICogYmFycmllcnMuIElmIGl0IGxvb2tzIGxpa2Ugd2UncmUg ZG9uZSwgd2UgbXVzdCByZWFsbHkgYmUgZG9uZSwKLQkJICogYmVjYXVzZSBvbmNlIHdhbHNl bmRlciBjaGFuZ2VzIHRoZSBzdGF0ZSB0byBTWU5DX1JFUF9XQUlUX0NPTVBMRVRFLAotCQkg KiBpdCB3aWxsIG5ldmVyIHVwZGF0ZSBpdCBhZ2Fpbiwgc28gd2UgY2FuJ3QgYmUgc2VlaW5n IGEgc3RhbGUgdmFsdWUKLQkJICogaW4gdGhhdCBjYXNlLgorCQkgKiBBY3F1aXJpbmcgdGhl IGxvY2sgaXMgbm90IG5lZWRlZCwgdGhlIGludGVycnVwdCBlbnN1cmVzIHByb3BlcgorCQkg KiBiYXJyaWVycyAoRklYTUU6IGlzIHRoYXQgc28/KS4gSWYgaXQgbG9va3MgbGlrZSB3ZSdy ZSBkb25lLCB3ZSBtdXN0CisJCSAqIHJlYWxseSBiZSBkb25lLCBiZWNhdXNlIG9uY2Ugd2Fs c2VuZGVyIGNoYW5nZXMgdGhlIHN0YXRlIHRvCisJCSAqIFNZTkNfUkVQX1dBSVRfQ09NUExF VEUsIGl0IHdpbGwgbmV2ZXIgdXBkYXRlIGl0IGFnYWluLCBzbyB3ZSBjYW4ndAorCQkgKiBi ZSBzZWVpbmcgYSBzdGFsZSB2YWx1ZSBpbiB0aGF0IGNhc2UuCiAJCSAqLwogCQlpZiAoTXlQ cm9jLT5zeW5jUmVwU3RhdGUgPT0gU1lOQ19SRVBfV0FJVF9DT01QTEVURSkKIAkJCWJyZWFr OwpAQCAtMjk0LDEwICsyOTUsMTAgQEAgU3luY1JlcFdhaXRGb3JMU04oWExvZ1JlY1B0ciBs c24sIGJvb2wgY29tbWl0KQogCQkgKiBlbnRpdGxlZCB0byBhc3N1bWUgdGhhdCBhbiBhY2tu b3dsZWRnZWQgY29tbWl0IGlzIGFsc28gcmVwbGljYXRlZCwKIAkJICogd2hpY2ggbWlnaHQg bm90IGJlIHRydWUuIFNvIGluIHRoaXMgY2FzZSB3ZSBpc3N1ZSBhIFdBUk5JTkcgKHdoaWNo CiAJCSAqIHNvbWUgY2xpZW50cyBtYXkgYmUgYWJsZSB0byBpbnRlcnByZXQpIGFuZCBzaHV0 IG9mZiBmdXJ0aGVyIG91dHB1dC4KLQkJICogV2UgZG8gTk9UIHJlc2V0IFByb2NEaWVQZW5k aW5nLCBzbyB0aGF0IHRoZSBwcm9jZXNzIHdpbGwgZGllIGFmdGVyCi0JCSAqIHRoZSBjb21t aXQgaXMgY2xlYW5lZCB1cC4KKwkJICogV2UgZG8gTk9UIGNsZWFyIHRoZSBpbnRlcnJ1cHQg Yml0LCBzbyB0aGF0IHRoZSBwcm9jZXNzIHdpbGwgZGllCisJCSAqIGFmdGVyIHRoZSBjb21t aXQgaXMgY2xlYW5lZCB1cC4KIAkJICovCi0JCWlmIChQcm9jRGllUGVuZGluZykKKwkJaWYg KEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1RFUk1JTkFURSkpCiAJCXsKIAkJCWVyZXBv cnQoV0FSTklORywKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9BRE1JTl9TSFVURE9XTiksCkBA IC0zMTQsOSArMzE1LDggQEAgU3luY1JlcFdhaXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGJv b2wgY29tbWl0KQogCQkgKiBhbHRvZ2V0aGVyIGlzIG5vdCBoZWxwZnVsLCBzbyB3ZSBqdXN0 IHRlcm1pbmF0ZSB0aGUgd2FpdCB3aXRoIGEKIAkJICogc3VpdGFibGUgd2FybmluZy4KIAkJ ICovCi0JCWlmIChRdWVyeUNhbmNlbFBlbmRpbmcpCisJCWlmIChDb25zdW1lSW50ZXJydXB0 KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpKQogCQl7Ci0JCQlRdWVyeUNhbmNlbFBlbmRpbmcg PSBmYWxzZTsKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJKGVycm1zZygiY2FuY2VsaW5n IHdhaXQgZm9yIHN5bmNocm9ub3VzIHJlcGxpY2F0aW9uIGR1ZSB0byB1c2VyIHJlcXVlc3Qi KSwKIAkJCQkJIGVycmRldGFpbCgiVGhlIHRyYW5zYWN0aW9uIGhhcyBhbHJlYWR5IGNvbW1p dHRlZCBsb2NhbGx5LCBidXQgbWlnaHQgbm90IGhhdmUgYmVlbiByZXBsaWNhdGVkIHRvIHRo ZSBzdGFuZGJ5LiIpKSk7CkBAIC0zMjUsMTEgKzMyNSwxNSBAQCBTeW5jUmVwV2FpdEZvckxT TihYTG9nUmVjUHRyIGxzbiwgYm9vbCBjb21taXQpCiAJCX0KIAogCQkvKgotCQkgKiBXYWl0 IG9uIGxhdGNoLiAgQW55IGNvbmRpdGlvbiB0aGF0IHNob3VsZCB3YWtlIHVzIHVwIHdpbGwg c2V0IHRoZQotCQkgKiBsYXRjaCwgc28gbm8gbmVlZCBmb3IgdGltZW91dC4KKwkJICogV2Fp dCBvbiBpbnRlcnJ1cHQuICBBbnkgY29uZGl0aW9uIHRoYXQgc2hvdWxkIHdha2UgdXMgdXAg d2lsbCBzZXQKKwkJICogdGhlIGFwcHJvcHJpYXRlIGludGVycnVwdCwgc28gbm8gbmVlZCBm b3IgdGltZW91dC4KIAkJICovCi0JCXJjID0gV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENI X1NFVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsIC0xLAotCQkJCQkgICBXQUlUX0VWRU5UX1NZ TkNfUkVQKTsKKwkJcmMgPSBXYWl0SW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCB8 CisJCQkJCQkgICBJTlRFUlJVUFRfVEVSTUlOQVRFIHwKKwkJCQkJCSAgIElOVEVSUlVQVF9R VUVSWV9DQU5DRUwsCisJCQkJCQkgICBXTF9JTlRFUlJVUFQgfCBXTF9QT1NUTUFTVEVSX0RF QVRILAorCQkJCQkJICAgLTEsCisJCQkJCQkgICBXQUlUX0VWRU5UX1NZTkNfUkVQKTsKIAog CQkvKgogCQkgKiBJZiB0aGUgcG9zdG1hc3RlciBkaWVzLCB3ZSdsbCBwcm9iYWJseSBuZXZl ciBnZXQgYW4gYWNrbm93bGVkZ21lbnQsCkBAIC0zMzcsNyArMzQxLDcgQEAgU3luY1JlcFdh aXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGJvb2wgY29tbWl0KQogCQkgKi8KIAkJaWYgKHJj ICYgV0xfUE9TVE1BU1RFUl9ERUFUSCkKIAkJewotCQkJUHJvY0RpZVBlbmRpbmcgPSB0cnVl OworCQkJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1RFUk1JTkFURSk7CiAJCQl3aGVyZVRv U2VuZE91dHB1dCA9IERlc3ROb25lOwogCQkJU3luY1JlcENhbmNlbFdhaXQoKTsKIAkJCWJy ZWFrOwpAQCAtOTQ0LDcgKzk0OCw3IEBAIFN5bmNSZXBXYWtlUXVldWUoYm9vbCBhbGwsIGlu dCBtb2RlKQogCQkvKgogCQkgKiBXYWtlIG9ubHkgd2hlbiB3ZSBoYXZlIHNldCBzdGF0ZSBh bmQgcmVtb3ZlZCBmcm9tIHF1ZXVlLgogCQkgKi8KLQkJU2V0TGF0Y2goJihwcm9jLT5wcm9j TGF0Y2gpKTsKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIEdldE51 bWJlckZyb21QR1Byb2MocHJvYykpOwogCiAJCW51bXByb2NzKys7CiAJfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKaW5kZXggZWM2YzUxNjUzMGQuLmVkNTNkOTZj MzE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKQEAgLTYwLDEy ICs2MCwxMyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9nd2FpdC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfYXV0aGlkLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImlw Yy9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJpcGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5j bHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUg InBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJy dXB0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgpA QCAtMjQ2LDE2ICsyNDcsOCBAQCBXYWxSZWNlaXZlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1 cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkvKiBBcnJhbmdlIHRvIGNsZWFu IHVwIGF0IHdhbHJlY2VpdmVyIGV4aXQgKi8KIAlvbl9zaG1lbV9leGl0KFdhbFJjdkRpZSwg UG9pbnRlckdldERhdHVtKCZzdGFydHBvaW50VExJKSk7CiAKLQkvKiBQcm9wZXJseSBhY2Nl cHQgb3IgaWdub3JlIHNpZ25hbHMgdGhlIHBvc3RtYXN0ZXIgbWlnaHQgc2VuZCB1cyAqLwot CXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7IC8qIHNl dCBmbGFnIHRvIHJlYWQgY29uZmlnCi0JCQkJCQkJCQkJCQkJICogZmlsZSAqLwotCXBxc2ln bmFsKFNJR0lOVCwgU0lHX0lHTik7Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsJCS8qIHJl cXVlc3Qgc2h1dGRvd24gKi8KLQkvKiBTSUdRVUlUIGhhbmRsZXIgd2FzIGFscmVhZHkgc2V0 IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNpZ25hbChTSUdBTFJNLCBTSUdf SUdOKTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdVU1Ix LCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7Ci0JcHFzaWduYWwoU0lHVVNSMiwgU0lH X0lHTik7CisJLyogU2V0IHVwIGludGVycnVwdCBoYW5kbGVycy4gV2UgaGF2ZSBubyBzcGVj aWFsIG5lZWRzLiAqLworCVNldFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnMoKTsKIAogCS8q IExvYWQgdGhlIGxpYnBxLXNwZWNpZmljIGZ1bmN0aW9ucyAqLwogCWxvYWRfZmlsZSgibGli cHF3YWxyZWNlaXZlciIsIGZhbHNlKTsKQEAgLTQzOSw5ICs0MzIsOCBAQCBXYWxSZWNlaXZl ck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xl bikKIAkJCQkvKiBQcm9jZXNzIGFueSByZXF1ZXN0cyBvciBzaWduYWxzIHJlY2VpdmVkIHJl Y2VudGx5ICovCiAJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkJCWlmIChDb25m aWdSZWxvYWRQZW5kaW5nKQorCQkJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9D T05GSUdfUkVMT0FEKSkKIAkJCQl7Ci0JCQkJCUNvbmZpZ1JlbG9hZFBlbmRpbmcgPSBmYWxz ZTsKIAkJCQkJUHJvY2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7CiAJCQkJCS8qIHJlY29t cHV0ZSB3YWtldXAgdGltZXMgKi8KIAkJCQkJbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgp OwpAQCAtNTE0LDI1ICs1MDYsMjcgQEAgV2FsUmVjZWl2ZXJNYWluKGNvbnN0IHZvaWQgKnN0 YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAKIAkJCQkvKgogCQkJCSAq IElkZWFsbHkgd2Ugd291bGQgcmV1c2UgYSBXYWl0RXZlbnRTZXQgb2JqZWN0IHJlcGVhdGVk bHkKLQkJCQkgKiBoZXJlIHRvIGF2b2lkIHRoZSBvdmVyaGVhZHMgb2YgV2FpdExhdGNoT3JT b2NrZXQgb24gZXBvbGwKLQkJCQkgKiBzeXN0ZW1zLCBidXQgd2UgY2FuJ3QgYmUgc3VyZSB0 aGF0IGxpYnBxIChvciBhbnkgb3RoZXIKLQkJCQkgKiB3YWxyZWNlaXZlciBpbXBsZW1lbnRh dGlvbikgaGFzIHRoZSBzYW1lIHNvY2tldCAoZXZlbiBpZgotCQkJCSAqIHRoZSBmZCBpcyB0 aGUgc2FtZSBudW1iZXIsIGl0IG1heSBoYXZlIGJlZW4gY2xvc2VkIGFuZAorCQkJCSAqIGhl cmUgdG8gYXZvaWQgdGhlIG92ZXJoZWFkcyBvZiBXYWl0SW50ZXJydXB0T3JTb2NrZXQgb24K KwkJCQkgKiBlcG9sbCBzeXN0ZW1zLCBidXQgd2UgY2FuJ3QgYmUgc3VyZSB0aGF0IGxpYnBx IChvciBhbnkKKwkJCQkgKiBvdGhlciB3YWxyZWNlaXZlciBpbXBsZW1lbnRhdGlvbikgaGFz IHRoZSBzYW1lIHNvY2tldCAoZXZlbgorCQkJCSAqIGlmIHRoZSBmZCBpcyB0aGUgc2FtZSBu dW1iZXIsIGl0IG1heSBoYXZlIGJlZW4gY2xvc2VkIGFuZAogCQkJCSAqIHJlb3BlbmVkIHNp bmNlIHRoZSBsYXN0IHRpbWUpLiAgSW4gZnV0dXJlLCBpZiB0aGVyZSBpcyBhCiAJCQkJICog ZnVuY3Rpb24gZm9yIHJlbW92aW5nIHNvY2tldHMgZnJvbSBXYWl0RXZlbnRTZXQsIHRoZW4g d2UKIAkJCQkgKiBjb3VsZCBhZGQgYW5kIHJlbW92ZSBqdXN0IHRoZSBzb2NrZXQgZWFjaCB0 aW1lLCBwb3RlbnRpYWxseQogCQkJCSAqIGF2b2lkaW5nIHNvbWUgc3lzdGVtIGNhbGxzLgog CQkJCSAqLwogCQkJCUFzc2VydCh3YWl0X2ZkICE9IFBHSU5WQUxJRF9TT0NLRVQpOwotCQkJ CXJjID0gV2FpdExhdGNoT3JTb2NrZXQoTXlMYXRjaCwKLQkJCQkJCQkJCSAgIFdMX0VYSVRf T05fUE1fREVBVEggfCBXTF9TT0NLRVRfUkVBREFCTEUgfAotCQkJCQkJCQkJICAgV0xfVElN RU9VVCB8IFdMX0xBVENIX1NFVCwKLQkJCQkJCQkJCSAgIHdhaXRfZmQsCi0JCQkJCQkJCQkg ICBuYXAsCi0JCQkJCQkJCQkgICBXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9NQUlOKTsKLQkJ CQlpZiAocmMgJiBXTF9MQVRDSF9TRVQpCisJCQkJcmMgPSBXYWl0SW50ZXJydXB0T3JTb2Nr ZXQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkJCQkJICAgSU5URVJSVVBUX1dB SVRfV0FLRVVQIHwKKwkJCQkJCQkJCQkgICBJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCwKKwkJ CQkJCQkJCQkgICBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfU09DS0VUX1JFQURBQkxFIHwK KwkJCQkJCQkJCQkgICBXTF9USU1FT1VUIHwgV0xfSU5URVJSVVBULAorCQkJCQkJCQkJCSAg IHdhaXRfZmQsCisJCQkJCQkJCQkJICAgbmFwLAorCQkJCQkJCQkJCSAgIFdBSVRfRVZFTlRf V0FMX1JFQ0VJVkVSX01BSU4pOworCQkJCWlmIChyYyAmIFdMX0lOVEVSUlVQVCkKIAkJCQl7 Ci0JCQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQkJCUNsZWFySW50ZXJydXB0KElOVEVS UlVQVF9XQUlUX1dBS0VVUCk7CiAJCQkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJ CQkJaWYgKHdhbHJjdi0+Zm9yY2VfcmVwbHkpCkBAIC02ODAsNyArNjc0LDcgQEAgV2FsUmN2 V2FpdEZvclN0YXJ0UG9zaXRpb24oWExvZ1JlY1B0ciAqc3RhcnRwb2ludCwgVGltZUxpbmVJ RCAqc3RhcnRwb2ludFRMSSkKIAlXYWtldXBSZWNvdmVyeSgpOwogCWZvciAoOzspCiAJewot CQlSZXNldExhdGNoKE15TGF0Y2gpOworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJ VF9XQUtFVVApOwogCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTcxMiw4ICs3 MDYsMTIgQEAgV2FsUmN2V2FpdEZvclN0YXJ0UG9zaXRpb24oWExvZ1JlY1B0ciAqc3RhcnRw b2ludCwgVGltZUxpbmVJRCAqc3RhcnRwb2ludFRMSSkKIAkJfQogCQlTcGluTG9ja1JlbGVh c2UoJndhbHJjdi0+bXV0ZXgpOwogCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwgV0xf TEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKLQkJCQkJCSBXQUlUX0VWRU5U X1dBTF9SRUNFSVZFUl9XQUlUX1NUQVJUKTsKKwkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hl Y2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkJIElOVEVSUlVQVF9URVJNSU5BVEUgfAor CQkJCQkJCSBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8 IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkJIDAsCisJCQkJCQkJIFdBSVRfRVZFTlRf V0FMX1JFQ0VJVkVSX1dBSVRfU1RBUlQpOwogCX0KIAogCWlmICh1cGRhdGVfcHJvY2Vzc190 aXRsZSkKQEAgLTEzODQsNyArMTM4Miw3IEBAIFdhbFJjdkZvcmNlUmVwbHkodm9pZCkKIAlw cm9jbm8gPSBXYWxSY3YtPnByb2NubzsKIAlTcGluTG9ja1JlbGVhc2UoJldhbFJjdi0+bXV0 ZXgpOwogCWlmIChwcm9jbm8gIT0gSU5WQUxJRF9QUk9DX05VTUJFUikKLQkJU2V0TGF0Y2go JkdldFBHUHJvY0J5TnVtYmVyKHByb2NubyktPnByb2NMYXRjaCk7CisJCVNlbmRJbnRlcnJ1 cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBwcm9jbm8pOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXJmdW5jcy5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXJmdW5jcy5jCmluZGV4IGU2MmU4YTIwNDIw Li45MzNjNGU0MTU1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs cmVjZWl2ZXJmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2Vp dmVyZnVuY3MuYwpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2df aW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCisjaW5jbHVk ZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5o IgpAQCAtMzMyLDcgKzMzMyw3IEBAIFJlcXVlc3RYTG9nU3RyZWFtaW5nKFRpbWVMaW5lSUQg dGxpLCBYTG9nUmVjUHRyIHJlY3B0ciwgY29uc3QgY2hhciAqY29ubmluZm8sCiAJaWYgKGxh dW5jaCkKIAkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfV0FMUkVDRUlW RVIpOwogCWVsc2UgaWYgKHdhbHJjdl9wcm9jICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0J CVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJlcih3YWxyY3ZfcHJvYyktPnByb2NMYXRjaCk7 CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCB3YWxyY3ZfcHJvYyk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5k ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCmluZGV4IDVhY2M4 ZWUzYWM4Li40NDZlYWZlNjk0ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMKQEAgLTI1LDE0ICsyNSwxNCBAQAogICogdGhlIHdhbHNlbmRlciB3aWxsIGV4aXQgcXVp Y2tseSB3aXRob3V0IHNlbmRpbmcgYW55IG1vcmUgWExPRyByZWNvcmRzLgogICoKICAqIElm IHRoZSBzZXJ2ZXIgaXMgc2h1dCBkb3duLCBjaGVja3BvaW50ZXIgc2VuZHMgdXMKLSAqIFBS T0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcgYWZ0ZXIgYWxsIHJlZ3VsYXIgYmFja2VuZHMg aGF2ZSBleGl0ZWQuICBJZgorICogSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HIGFm dGVyIGFsbCByZWd1bGFyIGJhY2tlbmRzIGhhdmUgZXhpdGVkLiAgSWYKICAqIHRoZSBiYWNr ZW5kIGlzIGlkbGUgb3IgcnVucyBhbiBTUUwgcXVlcnkgdGhpcyBjYXVzZXMgdGhlIGJhY2tl bmQgdG8KICAqIHNodXRkb3duLCBpZiBsb2dpY2FsIHJlcGxpY2F0aW9uIGlzIGluIHByb2dy ZXNzIGFsbCBleGlzdGluZyBXQUwgcmVjb3JkcwogICogYXJlIHByb2Nlc3NlZCBmb2xsb3dl ZCBieSBhIHNodXRkb3duLiAgT3RoZXJ3aXNlIHRoaXMgY2F1c2VzIHRoZSB3YWxzZW5kZXIK ICAqIHRvIHN3aXRjaCB0byB0aGUgInN0b3BwaW5nIiBzdGF0ZS4gSW4gdGhpcyBzdGF0ZSwg dGhlIHdhbHNlbmRlciB3aWxsIHJlamVjdAogICogYW55IGZ1cnRoZXIgcmVwbGljYXRpb24g Y29tbWFuZHMuIFRoZSBjaGVja3BvaW50ZXIgYmVnaW5zIHRoZSBzaHV0ZG93bgogICogY2hl Y2twb2ludCBvbmNlIGFsbCB3YWxzZW5kZXJzIGFyZSBjb25maXJtZWQgYXMgc3RvcHBpbmcu IFdoZW4gdGhlIHNodXRkb3duCi0gKiBjaGVja3BvaW50IGZpbmlzaGVzLCB0aGUgcG9zdG1h c3RlciBzZW5kcyB1cyBTSUdVU1IyLiBUaGlzIGluc3RydWN0cworICogY2hlY2twb2ludCBm aW5pc2hlcywgdGhlIHBvc3RtYXN0ZXIgc2VuZHMgdXMgSU5URVJSVVBUX1dBTFNORF9TVE9Q LiBUaGlzIGluc3RydWN0cwogICogd2Fsc2VuZGVyIHRvIHNlbmQgYW55IG91dHN0YW5kaW5n IFdBTCwgaW5jbHVkaW5nIHRoZSBzaHV0ZG93biBjaGVja3BvaW50CiAgKiByZWNvcmQsIHdh aXQgZm9yIGl0IHRvIGJlIHJlcGxpY2F0ZWQgdG8gdGhlIHN0YW5kYnksIGFuZCB0aGVuIGV4 aXQuCiAgKgpAQCAtNjMsMTMgKzYzLDE0IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5o IgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJpcGMvc2lnbmFsX2hh bmRsZXJzLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9w cWZvcm1hdC5oIgogI2luY2x1ZGUgImxpYnBxL3Byb3RvY29sLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvcmVwbG5vZGVzLmgiCiAjaW5jbHVkZSAicGdz dGF0LmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdHN5bmMuaCIKQEAgLTIwMSwxNSArMjAyLDEy IEBAIHN0YXRpYyBib29sIHN0cmVhbWluZ0RvbmVSZWNlaXZpbmc7CiAvKiBBcmUgd2UgdGhl cmUgeWV0PyAqLwogc3RhdGljIGJvb2wgV2FsU25kQ2F1Z2h0VXAgPSBmYWxzZTsKIAotLyog RmxhZ3Mgc2V0IGJ5IHNpZ25hbCBoYW5kbGVycyBmb3IgbGF0ZXIgc2VydmljZSBpbiBtYWlu IGxvb3AgKi8KLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgZ290X1NJR1VTUjIgPSBm YWxzZTsKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgZ290X1NUT1BQSU5HID0gZmFs c2U7Ci0KIC8qCiAgKiBUaGlzIGlzIHNldCB3aGlsZSB3ZSBhcmUgc3RyZWFtaW5nLiBXaGVu IG5vdCBzZXQKLSAqIFBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcgc2lnbmFsIHdpbGwg YmUgaGFuZGxlZCBsaWtlIFNJR1RFUk0uIFdoZW4gc2V0LAotICogdGhlIG1haW4gbG9vcCBp cyByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcgZ290X1NUT1BQSU5HIGFuZCB0ZXJtaW5hdGlu ZyB3aGVuCi0gKiBpdCdzIHNldCAoYWZ0ZXIgc3RyZWFtaW5nIGFueSByZW1haW5pbmcgV0FM KS4KKyAqIElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORyBpbnRlcnJ1cHQgd2lsbCBi ZSBoYW5kbGVkIGxpa2UgU0lHVEVSTS4KKyAqIFdoZW4gc2V0LCB0aGUgbWFpbiBsb29wIGlz IHJlc3BvbnNpYmxlIGZvciBjaGVja2luZworICogSU5URVJSVVBUX1dBTFNORF9JTklUX1NU T1BQSU5HIGFuZCB0ZXJtaW5hdGluZyB3aGVuIGl0J3Mgc2V0IChhZnRlcgorICogc3RyZWFt aW5nIGFueSByZW1haW5pbmcgV0FMKS4KICAqLwogc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCByZXBsaWNhdGlvbl9hY3RpdmUgPSBmYWxzZTsKIApAQCAtMjgyLDcgKzI4MCw3IEBA IHN0YXRpYyB2b2lkIFdhbFNuZEtlZXBhbGl2ZShib29sIHJlcXVlc3RSZXBseSwgWExvZ1Jl Y1B0ciB3cml0ZVB0cik7CiBzdGF0aWMgdm9pZCBXYWxTbmRLZWVwYWxpdmVJZk5lY2Vzc2Fy eSh2b2lkKTsKIHN0YXRpYyB2b2lkIFdhbFNuZENoZWNrVGltZU91dCh2b2lkKTsKIHN0YXRp YyBsb25nIFdhbFNuZENvbXB1dGVTbGVlcHRpbWUoVGltZXN0YW1wVHogbm93KTsKLXN0YXRp YyB2b2lkIFdhbFNuZFdhaXQodWludDMyIHNvY2tldF9ldmVudHMsIGxvbmcgdGltZW91dCwg dWludDMyIHdhaXRfZXZlbnQpOworc3RhdGljIHZvaWQgV2FsU25kV2FpdCh1aW50MzIgc29j a2V0X2V2ZW50cywgbG9uZyB0aW1lb3V0LCB1aW50MzIgd2FpdF9ldmVudCwgdWludDMyIGlu dGVycnVwdE1hc2spOwogc3RhdGljIHZvaWQgV2FsU25kUHJlcGFyZVdyaXRlKExvZ2ljYWxE ZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY1B0ciBsc24sIFRyYW5zYWN0aW9uSWQgeGlk LCBib29sIGxhc3Rfd3JpdGUpOwogc3RhdGljIHZvaWQgV2FsU25kV3JpdGVEYXRhKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY1B0ciBsc24sIFRyYW5zYWN0aW9uSWQg eGlkLCBib29sIGxhc3Rfd3JpdGUpOwogc3RhdGljIHZvaWQgV2FsU25kVXBkYXRlUHJvZ3Jl c3MoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjUHRyIGxzbiwgVHJhbnNh Y3Rpb25JZCB4aWQsCkBAIC0zNzAsNyArMzY4LDggQEAgV2FsU25kRXJyb3JDbGVhbnVwKHZv aWQpCiAJaWYgKCFJc1RyYW5zYWN0aW9uT3JUcmFuc2FjdGlvbkJsb2NrKCkpCiAJCVJlbGVh c2VBdXhQcm9jZXNzUmVzb3VyY2VzKGZhbHNlKTsKIAotCWlmIChnb3RfU1RPUFBJTkcgfHwg Z290X1NJR1VTUjIpCisJaWYgKEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1dBTFNORF9J TklUX1NUT1BQSU5HKSB8fAorCQlJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9XQUxTTkRf U1RPUCkpCiAJCXByb2NfZXhpdCgwKTsKIAogCS8qIFJldmVydCBiYWNrIHRvIHN0YXJ0dXAg c3RhdGUgKi8KQEAgLTczOCw4ICs3MzcsMTYgQEAgSGFuZGxlVXBsb2FkTWFuaWZlc3RQYWNr ZXQoU3RyaW5nSW5mbyBidWYsIG9mZl90ICpvZmZzZXQsCiB7CiAJaW50CQkJbXR5cGU7CiAJ aW50CQkJbWF4bXNnbGVuOworCWJvb2wJCXNhdmVfcXVlcnlfY2FuY2VsX2VuYWJsZWQ7CiAK LQlIT0xEX0NBTkNFTF9JTlRFUlJVUFRTKCk7CisJLyoKKwkgKiBMaWtlIGluIFNvY2tldEJh Y2tlbmQsIGRvbid0IGFsbG93IHF1ZXJ5IGNhbmNlbCBpbnRlcnJ1cHRzIHdoaWxlCisJICog cmVhZGluZyBpbnB1dCBmcm9tIHRoZSBjbGllbnQsIGJlY2F1c2Ugd2UgbWlnaHQgbG9zZSBz eW5jIGluIHRoZSBGRS9CRQorCSAqIHByb3RvY29sLgorCSAqLworCXNhdmVfcXVlcnlfY2Fu Y2VsX2VuYWJsZWQgPSAoRW5hYmxlZEludGVycnVwdHNNYXNrICYgSU5URVJSVVBUX1FVRVJZ X0NBTkNFTCkgIT0gMDsKKwlpZiAoc2F2ZV9xdWVyeV9jYW5jZWxfZW5hYmxlZCkKKwkJRGlz YWJsZUludGVycnVwdChJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMKTsKIAogCXBxX3N0YXJ0bXNn cmVhZCgpOwogCW10eXBlID0gcHFfZ2V0Ynl0ZSgpOwpAQCAtNzczLDcgKzc4MCw5IEBAIEhh bmRsZVVwbG9hZE1hbmlmZXN0UGFja2V0KFN0cmluZ0luZm8gYnVmLCBvZmZfdCAqb2Zmc2V0 LAogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9G QUlMVVJFKSwKIAkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIEVPRiBvbiBjbGllbnQgY29ubmVj dGlvbiB3aXRoIGFuIG9wZW4gdHJhbnNhY3Rpb24iKSkpOwotCVJFU1VNRV9DQU5DRUxfSU5U RVJSVVBUUygpOworCisJaWYgKHNhdmVfcXVlcnlfY2FuY2VsX2VuYWJsZWQpCisJCUVuYWJs ZUludGVycnVwdChJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMKTsKIAogCS8qIFByb2Nlc3MgdGhl IG1lc3NhZ2UgKi8KIAlzd2l0Y2ggKG10eXBlKQpAQCAtOTcyLDEyICs5ODEsMTQgQEAgU3Rh cnRSZXBsaWNhdGlvbihTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQpCiAJCVN5bmNSZXBJbml0 Q29uZmlnKCk7CiAKIAkJLyogTWFpbiBsb29wIG9mIHdhbHNlbmRlciAqLworCQlEaXNhYmxl SW50ZXJydXB0KElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORyk7CiAJCXJlcGxpY2F0 aW9uX2FjdGl2ZSA9IHRydWU7CiAKIAkJV2FsU25kTG9vcChYTG9nU2VuZFBoeXNpY2FsKTsK IAogCQlyZXBsaWNhdGlvbl9hY3RpdmUgPSBmYWxzZTsKLQkJaWYgKGdvdF9TVE9QUElORykK KwkJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORyk7CisJ CWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORykp CiAJCQlwcm9jX2V4aXQoMCk7CiAJCVdhbFNuZFNldFN0YXRlKFdBTFNORFNUQVRFX1NUQVJU VVApOwogCkBAIC0xMDM2LDkgKzEwNDcsOSBAQCBTdGFydFJlcGxpY2F0aW9uKFN0YXJ0UmVw bGljYXRpb25DbWQgKmNtZCkKICAqIFhMb2dSZWFkZXJSb3V0aW5lLT5wYWdlX3JlYWQgY2Fs bGJhY2sgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgY29udGV4dHMsIGFzIGEKICAqIHdhbHNlbmRl ciBwcm9jZXNzLgogICoKLSAqIEluc2lkZSB0aGUgd2Fsc2VuZGVyIHdlIGNhbiBkbyBiZXR0 ZXIgdGhhbiByZWFkX2xvY2FsX3hsb2dfcGFnZSwKLSAqIHdoaWNoIGhhcyB0byBkbyBhIHBs YWluIHNsZWVwL2J1c3kgbG9vcCwgYmVjYXVzZSB0aGUgd2Fsc2VuZGVyJ3MgbGF0Y2ggZ2V0 cwotICogc2V0IGV2ZXJ5IHRpbWUgV0FMIGlzIGZsdXNoZWQuCisgKiBJbnNpZGUgdGhlIHdh bHNlbmRlciB3ZSBjYW4gZG8gYmV0dGVyIHRoYW4gcmVhZF9sb2NhbF94bG9nX3BhZ2UsIHdo aWNoIGhhcworICogdG8gZG8gYSBwbGFpbiBzbGVlcC9idXN5IGxvb3AsIGJlY2F1c2UgdGhl IHdhbHNlbmRlcidzIGludGVycnVwdCBnZXRzIHNldAorICogZXZlcnkgdGltZSBXQUwgaXMg Zmx1c2hlZC4KICAqLwogc3RhdGljIGludAogbG9naWNhbF9yZWFkX3hsb2dfcGFnZShYTG9n UmVhZGVyU3RhdGUgKnN0YXRlLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsIGludCByZXFM ZW4sCkBAIC0xNDc1LDcgKzE0ODYsNyBAQCBTdGFydExvZ2ljYWxSZXBsaWNhdGlvbihTdGFy dFJlcGxpY2F0aW9uQ21kICpjbWQpCiAJewogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNn KCJ0ZXJtaW5hdGluZyB3YWxzZW5kZXIgcHJvY2VzcyBhZnRlciBwcm9tb3Rpb24iKSkpOwot CQlnb3RfU1RPUFBJTkcgPSB0cnVlOworCQlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FM U05EX0lOSVRfU1RPUFBJTkcpOwogCX0KIAogCS8qCkBAIC0xNTI5LDcgKzE1NDAsNyBAQCBT dGFydExvZ2ljYWxSZXBsaWNhdGlvbihTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQpCiAJUmVw bGljYXRpb25TbG90UmVsZWFzZSgpOwogCiAJcmVwbGljYXRpb25fYWN0aXZlID0gZmFsc2U7 Ci0JaWYgKGdvdF9TVE9QUElORykKKwlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRf V0FMU05EX0lOSVRfU1RPUFBJTkcpKQogCQlwcm9jX2V4aXQoMCk7CiAJV2FsU25kU2V0U3Rh dGUoV0FMU05EU1RBVEVfU1RBUlRVUCk7CiAKQEAgLTE2MTksMTIgKzE2MzAsOCBAQCBXYWxT bmRXcml0ZURhdGEoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjUHRyIGxz biwgVHJhbnNhY3Rpb25JZCB4aWQsCiAgKiB0byBjaGFuZ2VzIGluIHN5bmNocm9ub3VzIHJl cGxpY2F0aW9uIHJlcXVpcmVtZW50cy4KICAqLwogc3RhdGljIHZvaWQKLVdhbFNuZEhhbmRs ZUNvbmZpZ1JlbG9hZCh2b2lkKQorUHJvY2Vzc1dhbFNuZENvbmZpZ1JlbG9hZEludGVycnVw dCh2b2lkKQogewotCWlmICghQ29uZmlnUmVsb2FkUGVuZGluZykKLQkJcmV0dXJuOwotCi0J Q29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOwogCVByb2Nlc3NDb25maWdGaWxlKFBHQ19T SUdIVVApOwogCVN5bmNSZXBJbml0Q29uZmlnKCk7CiAKQEAgLTE2NjQsMjMgKzE2NzEsMjcg QEAgUHJvY2Vzc1BlbmRpbmdXcml0ZXModm9pZCkKIAogCQkvKiBTbGVlcCB1bnRpbCBzb21l dGhpbmcgaGFwcGVucyBvciB3ZSB0aW1lIG91dCAqLwogCQlXYWxTbmRXYWl0KFdMX1NPQ0tF VF9XUklURUFCTEUgfCBXTF9TT0NLRVRfUkVBREFCTEUsIHNsZWVwdGltZSwKLQkJCQkgICBX QUlUX0VWRU5UX1dBTF9TRU5ERVJfV1JJVEVfREFUQSk7CisJCQkJICAgV0FJVF9FVkVOVF9X QUxfU0VOREVSX1dSSVRFX0RBVEEsCisJCQkJICAgQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8 CisJCQkJICAgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQgfAorCQkJCSAgIElOVEVSUlVQVF9X QUlUX1dBS0VVUCk7CiAKIAkJLyogQ2xlYXIgYW55IGFscmVhZHktcGVuZGluZyB3YWtldXBz ICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0KLQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCQkvKiBQ cm9jZXNzIGFueSByZXF1ZXN0cyBvciBzaWduYWxzIHJlY2VpdmVkIHJlY2VudGx5ICovCi0J CVdhbFNuZEhhbmRsZUNvbmZpZ1JlbG9hZCgpOworCQlDSEVDS19GT1JfSU5URVJSVVBUUygp OworCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkpCisJ CQlQcm9jZXNzV2FsU25kQ29uZmlnUmVsb2FkSW50ZXJydXB0KCk7CiAKIAkJLyogVHJ5IHRv IGZsdXNoIHBlbmRpbmcgb3V0cHV0IHRvIHRoZSBjbGllbnQgKi8KIAkJaWYgKHBxX2ZsdXNo X2lmX3dyaXRhYmxlKCkgIT0gMCkKIAkJCVdhbFNuZFNodXRkb3duKCk7CiAJfQogCi0JLyog cmVhY3RpdmF0ZSBsYXRjaCBzbyBXYWxTbmRMb29wIGtub3dzIHRvIGNvbnRpbnVlICovCi0J U2V0TGF0Y2goTXlMYXRjaCk7CisJLyogcmVhY3RpdmF0ZSBpbnRlcnJ1cHQgc28gV2FsU25k TG9vcCBrbm93cyB0byBjb250aW51ZSAqLworCS8qIEZJWE1FOiBzdGlsbCBuZWVkZWQ/ICov CisJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIH0KIAogLyoKQEAg LTE3ODMsNyArMTc5NCw3IEBAIFBoeXNpY2FsV2FrZXVwTG9naWNhbFdhbFNuZCh2b2lkKQog c3RhdGljIGJvb2wKIE5lZWRUb1dhaXRGb3JTdGFuZGJ5cyhYTG9nUmVjUHRyIGZsdXNoZWRf bHNuLCB1aW50MzIgKndhaXRfZXZlbnQpCiB7Ci0JaW50CQkJZWxldmVsID0gZ290X1NUT1BQ SU5HID8gRVJST1IgOiBXQVJOSU5HOworCWludAkJCWVsZXZlbCA9IEludGVycnVwdFBlbmRp bmcoSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSA/IEVSUk9SIDogV0FSTklORzsK IAlib29sCQlmYWlsb3Zlcl9zbG90OwogCiAJZmFpbG92ZXJfc2xvdCA9IChyZXBsaWNhdGlv bl9hY3RpdmUgJiYgTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEuZmFpbG92ZXIpOwpAQCAtMTg3 MCwxMiArMTg4MSwxMiBAQCBXYWxTbmRXYWl0Rm9yV2FsKFhMb2dSZWNQdHIgbG9jKQogCQlU aW1lc3RhbXBUeiBub3c7CiAKIAkJLyogQ2xlYXIgYW55IGFscmVhZHktcGVuZGluZyB3YWtl dXBzICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7Ci0KLQkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAogCQkv KiBQcm9jZXNzIGFueSByZXF1ZXN0cyBvciBzaWduYWxzIHJlY2VpdmVkIHJlY2VudGx5ICov Ci0JCVdhbFNuZEhhbmRsZUNvbmZpZ1JlbG9hZCgpOworCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOworCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCkp CisJCQlQcm9jZXNzV2FsU25kQ29uZmlnUmVsb2FkSW50ZXJydXB0KCk7CiAKIAkJLyogQ2hl Y2sgZm9yIGlucHV0IGZyb20gdGhlIGNsaWVudCAqLwogCQlQcm9jZXNzUmVwbGllc0lmQW55 KCk7CkBAIC0xODg1LDcgKzE4OTYsNyBAQCBXYWxTbmRXYWl0Rm9yV2FsKFhMb2dSZWNQdHIg bG9jKQogCQkgKiBvdGhlcndpc2Ugd2UnZCBwb3NzaWJseSBlbmQgdXAgd2FpdGluZyBmb3Ig V0FMIHRoYXQgbmV2ZXIgZ2V0cwogCQkgKiB3cml0dGVuLCBiZWNhdXNlIHdhbHdyaXRlciBo YXMgc2h1dCBkb3duIGFscmVhZHkuCiAJCSAqLwotCQlpZiAoZ290X1NUT1BQSU5HKQorCQlp ZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcpKQog CQkJWExvZ0JhY2tncm91bmRGbHVzaCgpOwogCiAJCS8qCkBAIC0xOTEwLDcgKzE5MjEsNyBA QCBXYWxTbmRXYWl0Rm9yV2FsKFhMb2dSZWNQdHIgbG9jKQogCQkgKiBSZWNlbnRGbHVzaFB0 ciwgc28gd2UgY2FuIHNlbmQgYWxsIHJlbWFpbmluZyBkYXRhIGJlZm9yZSBzaHV0dGluZwog CQkgKiBkb3duLgogCQkgKi8KLQkJaWYgKGdvdF9TVE9QUElORykKKwkJaWYgKEludGVycnVw dFBlbmRpbmcoSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSkKIAkJewogCQkJaWYg KE5lZWRUb1dhaXRGb3JTdGFuZGJ5cyhSZWNlbnRGbHVzaFB0ciwgJndhaXRfZXZlbnQpKQog CQkJCXdhaXRfZm9yX3N0YW5kYnlfYXRfc3RvcCA9IHRydWU7CkBAIC0xOTkyLDExICsyMDAz LDE1IEBAIFdhbFNuZFdhaXRGb3JXYWwoWExvZ1JlY1B0ciBsb2MpCiAJCQlsYXN0X2ZsdXNo ID0gbm93OwogCQl9CiAKLQkJV2FsU25kV2FpdCh3YWtlRXZlbnRzLCBzbGVlcHRpbWUsIHdh aXRfZXZlbnQpOworCQlXYWxTbmRXYWl0KHdha2VFdmVudHMsIHNsZWVwdGltZSwgd2FpdF9l dmVudCwKKwkJCQkgICBDaGVja0ZvckludGVycnVwdHNNYXNrIHwKKwkJCQkgICAod2FpdF9m b3Jfc3RhbmRieV9hdF9zdG9wID8gMCA6IElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElO RykgfAorCQkJCSAgIElOVEVSUlVQVF9DT05GSUdfUkVMT0FEIHwKKwkJCQkgICBJTlRFUlJV UFRfV0FJVF9XQUtFVVApOwogCX0KIAotCS8qIHJlYWN0aXZhdGUgbGF0Y2ggc28gV2FsU25k TG9vcCBrbm93cyB0byBjb250aW51ZSAqLwotCVNldExhdGNoKE15TGF0Y2gpOworCS8qIHJl YWN0aXZhdGUgaW50ZXJydXB0IGZsYWcgc28gV2FsU25kTG9vcCBrbm93cyB0byBjb250aW51 ZSAqLworCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJcmV0dXJu IFJlY2VudEZsdXNoUHRyOwogfQogCkBAIC0yMDIyLDcgKzIwMzcsNyBAQCBleGVjX3JlcGxp Y2F0aW9uX2NvbW1hbmQoY29uc3QgY2hhciAqY21kX3N0cmluZykKIAkgKiBJZiBXQUwgc2Vu ZGVyIGhhcyBiZWVuIHRvbGQgdGhhdCBzaHV0ZG93biBpcyBnZXR0aW5nIGNsb3NlLCBzd2l0 Y2ggaXRzCiAJICogc3RhdHVzIGFjY29yZGluZ2x5IHRvIGhhbmRsZSB0aGUgbmV4dCByZXBs aWNhdGlvbiBjb21tYW5kcyBjb3JyZWN0bHkuCiAJICovCi0JaWYgKGdvdF9TVE9QUElORykK KwlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcp KQogCQlXYWxTbmRTZXRTdGF0ZShXQUxTTkRTVEFURV9TVE9QUElORyk7CiAKIAkvKgpAQCAt Mjg5NSw2ICsyOTEwLDcgQEAgc3RhdGljIHZvaWQKIFdhbFNuZExvb3AoV2FsU25kU2VuZERh dGFDYWxsYmFjayBzZW5kX2RhdGEpCiB7CiAJVGltZXN0YW1wVHogbGFzdF9mbHVzaCA9IDA7 CisJYm9vbAkJc3RvcHBpbmcgPSBmYWxzZTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUg bGFzdCByZXBseSB0aW1lc3RhbXAuIFRoYXQgZW5hYmxlcyB0aW1lb3V0IHByb2Nlc3NpbmcK QEAgLTI5MDksMTMgKzI5MjUsMjAgQEAgV2FsU25kTG9vcChXYWxTbmRTZW5kRGF0YUNhbGxi YWNrIHNlbmRfZGF0YSkKIAkgKi8KIAlmb3IgKDs7KQogCXsKLQkJLyogQ2xlYXIgYW55IGFs cmVhZHktcGVuZGluZyB3YWtldXBzICovCi0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCS8q CisJCSAqIFJlbWVtYmVyIGlmIHdlIHJlY2VpdmVkIElOVEVSUlVQVF9XQUxTTkRfSU5JVF9T VE9QUElORyBiZWZvcmUgdGhlCisJCSAqIHByb2Nlc3NpbmcgYmVsb3cgYWxyZWFkeS4KKwkJ ICovCisJCWlmIChJbnRlcnJ1cHRQZW5kaW5nKElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9Q UElORykpCisJCQlzdG9wcGluZyA9IHRydWU7CiAKLQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKwkJLyogQ2xlYXIgYW55IGFscmVhZHktcGVuZGluZyB3YWtldXBzICovCisJCUNsZWFy SW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAKIAkJLyogUHJvY2VzcyBhbnkg cmVxdWVzdHMgb3Igc2lnbmFscyByZWNlaXZlZCByZWNlbnRseSAqLwotCQlXYWxTbmRIYW5k bGVDb25maWdSZWxvYWQoKTsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJaWYgKENv bnN1bWVJbnRlcnJ1cHQoSU5URVJSVVBUX0NPTkZJR19SRUxPQUQpKQorCQkJUHJvY2Vzc1dh bFNuZENvbmZpZ1JlbG9hZEludGVycnVwdCgpOwogCiAJCS8qIENoZWNrIGZvciBpbnB1dCBm cm9tIHRoZSBjbGllbnQgKi8KIAkJUHJvY2Vzc1JlcGxpZXNJZkFueSgpOwpAQCAtMjk2NCwx MyArMjk4NywxMyBAQCBXYWxTbmRMb29wKFdhbFNuZFNlbmREYXRhQ2FsbGJhY2sgc2VuZF9k YXRhKQogCQkJfQogCiAJCQkvKgotCQkJICogV2hlbiBTSUdVU1IyIGFycml2ZXMsIHdlIHNl bmQgYW55IG91dHN0YW5kaW5nIGxvZ3MgdXAgdG8gdGhlCi0JCQkgKiBzaHV0ZG93biBjaGVj a3BvaW50IHJlY29yZCAoaS5lLiwgdGhlIGxhdGVzdCByZWNvcmQpLCB3YWl0IGZvcgotCQkJ ICogdGhlbSB0byBiZSByZXBsaWNhdGVkIHRvIHRoZSBzdGFuZGJ5LCBhbmQgZXhpdC4gVGhp cyBtYXkgYmUgYQotCQkJICogbm9ybWFsIHRlcm1pbmF0aW9uIGF0IHNodXRkb3duLCBvciBh IHByb21vdGlvbiwgdGhlIHdhbHNlbmRlcgotCQkJICogaXMgbm90IHN1cmUgd2hpY2guCisJ CQkgKiBXaGVuIElOVEVSUlVQVF9XQUxTTkRfU1RPUCBhcnJpdmVzLCB3ZSBzZW5kIGFueSBv dXRzdGFuZGluZworCQkJICogbG9ncyB1cCB0byB0aGUgc2h1dGRvd24gY2hlY2twb2ludCBy ZWNvcmQgKGkuZS4sIHRoZSBsYXRlc3QKKwkJCSAqIHJlY29yZCksIHdhaXQgZm9yIHRoZW0g dG8gYmUgcmVwbGljYXRlZCB0byB0aGUgc3RhbmRieSwgYW5kCisJCQkgKiBleGl0LiBUaGlz IG1heSBiZSBhIG5vcm1hbCB0ZXJtaW5hdGlvbiBhdCBzaHV0ZG93biwgb3IgYQorCQkJICog cHJvbW90aW9uLCB0aGUgd2Fsc2VuZGVyIGlzIG5vdCBzdXJlIHdoaWNoLgogCQkJICovCi0J CQlpZiAoZ290X1NJR1VTUjIpCisJCQlpZiAoSW50ZXJydXB0UGVuZGluZyhJTlRFUlJVUFRf V0FMU05EX1NUT1ApKQogCQkJCVdhbFNuZERvbmUoc2VuZF9kYXRhKTsKIAkJfQogCkBAIC0z MDIyLDcgKzMwNDUsMTIgQEAgV2FsU25kTG9vcChXYWxTbmRTZW5kRGF0YUNhbGxiYWNrIHNl bmRfZGF0YSkKIAkJCX0KIAogCQkJLyogU2xlZXAgdW50aWwgc29tZXRoaW5nIGhhcHBlbnMg b3Igd2UgdGltZSBvdXQgKi8KLQkJCVdhbFNuZFdhaXQod2FrZUV2ZW50cywgc2xlZXB0aW1l LCBXQUlUX0VWRU5UX1dBTF9TRU5ERVJfTUFJTik7CisJCQlXYWxTbmRXYWl0KHdha2VFdmVu dHMsIHNsZWVwdGltZSwgV0FJVF9FVkVOVF9XQUxfU0VOREVSX01BSU4sCisJCQkJCSAgIENo ZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkgICAoc3RvcHBpbmcgPyAwIDogSU5URVJS VVBUX1dBTFNORF9JTklUX1NUT1BQSU5HKSB8CisJCQkJCSAgIElOVEVSUlVQVF9DT05GSUdf UkVMT0FEIHwKKwkJCQkJICAgSU5URVJSVVBUX1dBSVRfV0FLRVVQCisJCQkJKTsKIAkJfQog CX0KIH0KQEAgLTMwNjAsNiArMzA4OCw3IEBAIEluaXRXYWxTZW5kZXJTbG90KHZvaWQpCiAJ CQkvKgogCQkJICogRm91bmQgYSBmcmVlIHNsb3QuIFJlc2VydmUgaXQgZm9yIHVzLgogCQkJ ICovCisJCQl3YWxzbmQtPnBncHJvY25vID0gTXlQcm9jTnVtYmVyOwogCQkJd2Fsc25kLT5w aWQgPSBNeVByb2NQaWQ7CiAJCQl3YWxzbmQtPnN0YXRlID0gV0FMU05EU1RBVEVfU1RBUlRV UDsKIAkJCXdhbHNuZC0+c2VudFB0ciA9IEludmFsaWRYTG9nUmVjUHRyOwpAQCAtMzExNiw2 ICszMTQ1LDcgQEAgV2FsU25kS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKQogCVNwaW5Mb2Nr QWNxdWlyZSgmd2Fsc25kLT5tdXRleCk7CiAJLyogTWFyayBXYWxTbmQgc3RydWN0IGFzIG5v IGxvbmdlciBiZWluZyBpbiB1c2UuICovCiAJd2Fsc25kLT5waWQgPSAwOworCXdhbHNuZC0+ cGdwcm9jbm8gPSAwOwogCVNwaW5Mb2NrUmVsZWFzZSgmd2Fsc25kLT5tdXRleCk7CiB9CiAK QEAgLTMyMTAsNyArMzI0MCw3IEBAIFhMb2dTZW5kUGh5c2ljYWwodm9pZCkKIAlTaXplCQly Ynl0ZXM7CiAKIAkvKiBJZiByZXF1ZXN0ZWQgc3dpdGNoIHRoZSBXQUwgc2VuZGVyIHRvIHRo ZSBzdG9wcGluZyBzdGF0ZS4gKi8KLQlpZiAoZ290X1NUT1BQSU5HKQorCWlmIChJbnRlcnJ1 cHRQZW5kaW5nKElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORykpCiAJCVdhbFNuZFNl dFN0YXRlKFdBTFNORFNUQVRFX1NUT1BQSU5HKTsKIAogCWlmIChzdHJlYW1pbmdEb25lU2Vu ZGluZykKQEAgLTM1NzksOCArMzYwOSw4IEBAIFhMb2dTZW5kTG9naWNhbCh2b2lkKQogCSAq IHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBpbiBhbiBvcmRlcmx5IG1hbm5lciwgYWZ0ZXIg d3JpdGluZyBvdXQgYWxsCiAJICogdGhlIHBlbmRpbmcgZGF0YS4KIAkgKi8KLQlpZiAoV2Fs U25kQ2F1Z2h0VXAgJiYgZ290X1NUT1BQSU5HKQotCQlnb3RfU0lHVVNSMiA9IHRydWU7CisJ aWYgKFdhbFNuZENhdWdodFVwICYmIEludGVycnVwdFBlbmRpbmcoSU5URVJSVVBUX1dBTFNO RF9JTklUX1NUT1BQSU5HKSkKKwkJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBTFNORF9T VE9QKTsKIAogCS8qIFVwZGF0ZSBzaGFyZWQgbWVtb3J5IHN0YXR1cyAqLwogCXsKQEAgLTM2 OTcsNTIgKzM3MjcsNDMgQEAgV2FsU25kUnFzdEZpbGVSZWxvYWQodm9pZCkKIAl9CiB9CiAK LS8qCi0gKiBIYW5kbGUgUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORyBzaWduYWwuCi0g Ki8KLXZvaWQKLUhhbmRsZVdhbFNuZEluaXRTdG9wcGluZyh2b2lkKQotewotCUFzc2VydChh bV93YWxzZW5kZXIpOwotCi0JLyoKLQkgKiBJZiByZXBsaWNhdGlvbiBoYXMgbm90IHlldCBz dGFydGVkLCBkaWUgbGlrZSB3aXRoIFNJR1RFUk0uIElmCi0JICogcmVwbGljYXRpb24gaXMg YWN0aXZlLCBvbmx5IHNldCBhIGZsYWcgYW5kIHdha2UgdXAgdGhlIG1haW4gbG9vcC4gSXQK LQkgKiB3aWxsIHNlbmQgYW55IG91dHN0YW5kaW5nIFdBTCwgd2FpdCBmb3IgaXQgdG8gYmUg cmVwbGljYXRlZCB0byB0aGUKLQkgKiBzdGFuZGJ5LCBhbmQgdGhlbiBleGl0IGdyYWNlZnVs bHkuCi0JICovCi0JaWYgKCFyZXBsaWNhdGlvbl9hY3RpdmUpCi0JCWtpbGwoTXlQcm9jUGlk LCBTSUdURVJNKTsKLQllbHNlCi0JCWdvdF9TVE9QUElORyA9IHRydWU7Ci19Ci0KIC8qCiAg KiBTSUdVU1IyOiBzZXQgZmxhZyB0byBkbyBhIGxhc3QgY3ljbGUgYW5kIHNodXQgZG93biBh ZnRlcndhcmRzLiBUaGUgV0FMCiAgKiBzZW5kZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVu IHN3aXRjaGVkIHRvIFdBTFNORFNUQVRFX1NUT1BQSU5HIGF0CiAgKiB0aGlzIHBvaW50Lgor ICoKKyAqIFhYWDogVGhpcyBpcyBzdGlsbCBuZWVkZWQgYmVjYXVzZSB0aGUgcG9zdG1hc3Rl ciBjYW5ub3Qgc2VuZAorICogSU5URVJSVVBUX1dBTFNORF9TVE9QIGRpcmVjdGx5LgogICov CiBzdGF0aWMgdm9pZAogV2FsU25kTGFzdEN5Y2xlSGFuZGxlcihTSUdOQUxfQVJHUykKIHsK LQlnb3RfU0lHVVNSMiA9IHRydWU7Ci0JU2V0TGF0Y2goTXlMYXRjaCk7CisJUmFpc2VJbnRl cnJ1cHQoSU5URVJSVVBUX1dBTFNORF9TVE9QKTsKIH0KIAogLyogU2V0IHVwIHNpZ25hbCBo YW5kbGVycyAqLwogdm9pZAogV2FsU25kU2lnbmFscyh2b2lkKQogewotCS8qIFNldCB1cCBz aWduYWwgaGFuZGxlcnMgKi8KLQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JD b25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR0lOVCwgU3RhdGVtZW50Q2FuY2VsSGFuZGxl cik7CS8qIHF1ZXJ5IGNhbmNlbCAqLwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CQkvKiBy ZXF1ZXN0IHNodXRkb3duICovCi0JLyogU0lHUVVJVCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNl dCB1cCBieSBJbml0UG9zdG1hc3RlckNoaWxkICovCisJLyogU2V0IHVwIGludGVycnVwdCBo YW5kbGVycyAqLwogCUluaXRpYWxpemVUaW1lb3V0cygpOwkJLyogZXN0YWJsaXNoZXMgU0lH QUxSTSBoYW5kbGVyICovCi0JcHFzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0JcHFzaWdu YWwoU0lHVVNSMSwgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIpOwotCXBxc2lnbmFsKFNJ R1VTUjIsIFdhbFNuZExhc3RDeWNsZUhhbmRsZXIpOwkvKiByZXF1ZXN0IGEgbGFzdCBjeWNs ZSBhbmQKLQkJCQkJCQkJCQkJCSAqIHNodXRkb3duICovCisKKwkvKgorCSAqIElmIHJlcGxp Y2F0aW9uIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIGRpZSBsaWtlIHdpdGggU0lHVEVSTS4gV2hl bgorCSAqIHJlcGxpY2F0aW9uIHN0YXJ0cywgd2UgZGlzYWJsZSB0aGlzIGhhbmRsZXIgYW5k IGNoZWNrIHRoZSBmbGFnCisJICogZXhwbGljaXRseS4gVGhlIG1haW4gbG9vcCB3aWxsIHNl bmQgYW55IG91dHN0YW5kaW5nIFdBTCwgd2FpdCBmb3IgaXQgdG8KKwkgKiBiZSByZXBsaWNh dGVkIHRvIHRoZSBzdGFuZGJ5LCBhbmQgdGhlbiBleGl0IGdyYWNlZnVsbHkuCisJICovCisJ U2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcsIFBy b2Nlc3NUZXJtaW5hdGVJbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRf V0FMU05EX0lOSVRfU1RPUFBJTkcpOworCisJLyoKKwkgKiBPbiBJTlRFUlJVUFRfV0FMU05E X1NUT1AgaXMgdXNlZCB0byBmbHVzaCByZW1haW5pbmcgV0FMICh0aGUgc2h1dGRvd24KKwkg KiBjaGVja3BvaW50IHJlY29yZCkgYW5kIGV4aXQuIFdlIGNoZWNrIGZvciB0aGF0IGV4cGxp Y2l0bHksIHNvIG5vCisJICogaGFuZGxlciBmdW5jdGlvbi4gUG9zdG1hc3RlciBjYW5ub3Qg c2VuZCB0aGUgaW50ZXJydXB0IGRpcmVjdGx5LCBzbyB3ZQorCSAqIHNldCB1cCBhIFVuaXgg c2lnbmFsIGhhbmRsZXIgdG8gcmFpc2UgaXQuCisJICovCisJcHFzaWduYWwoU0lHVVNSMiwg V2FsU25kTGFzdEN5Y2xlSGFuZGxlcik7CiB9CiAKIC8qIFJlcG9ydCBzaGFyZWQtbWVtb3J5 IHNwYWNlIG5lZWRlZCBieSBXYWxTbmRTaG1lbUluaXQgKi8KQEAgLTM4MjUsMjQgKzM4NDYs MjggQEAgV2FsU25kV2FrZXVwKGJvb2wgcGh5c2ljYWwsIGJvb2wgbG9naWNhbCkKICAqIG9u IHBvc3RtYXN0ZXIgZGVhdGguCiAgKi8KIHN0YXRpYyB2b2lkCi1XYWxTbmRXYWl0KHVpbnQz MiBzb2NrZXRfZXZlbnRzLCBsb25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50KQorV2Fs U25kV2FpdCh1aW50MzIgc29ja2V0X2V2ZW50cywgbG9uZyB0aW1lb3V0LCB1aW50MzIgd2Fp dF9ldmVudCwgdWludDMyIGludGVycnVwdE1hc2spCiB7CiAJV2FpdEV2ZW50CWV2ZW50Owog Ci0JTW9kaWZ5V2FpdEV2ZW50KEZlQmVXYWl0U2V0LCBGZUJlV2FpdFNldFNvY2tldFBvcywg c29ja2V0X2V2ZW50cywgTlVMTCk7CisJLyogZm9yIGNvbmRpdGlvbiB2YXJpYWJsZXMgKi8K KwlpbnRlcnJ1cHRNYXNrIHw9IElOVEVSUlVQVF9XQUlUX1dBS0VVUDsKKworCU1vZGlmeVdh aXRFdmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRTb2NrZXRQb3MsIHNvY2tldF9ldmVu dHMsIDApOworCU1vZGlmeVdhaXRFdmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRJbnRl cnJ1cHRQb3MsIFdMX0lOVEVSUlVQVCwgaW50ZXJydXB0TWFzayk7CiAKIAkvKgogCSAqIFdl IHVzZSBhIGNvbmRpdGlvbiB2YXJpYWJsZSB0byBlZmZpY2llbnRseSB3YWtlIHVwIHdhbHNl bmRlcnMgaW4KIAkgKiBXYWxTbmRXYWtldXAoKS4KIAkgKgogCSAqIEV2ZXJ5IHdhbHNlbmRl ciBwcmVwYXJlcyB0byBzbGVlcCBvbiBhIHNoYXJlZCBtZW1vcnkgQ1YuIE5vdGUgdGhhdCBp dAotCSAqIGp1c3QgcHJlcGFyZXMgdG8gc2xlZXAgb24gdGhlIENWIChpLmUuLCBhZGRzIGl0 c2VsZiB0byB0aGUgQ1YncwotCSAqIHdhaXRsaXN0KSwgYnV0IGRvZXMgbm90IGFjdHVhbGx5 IHdhaXQgb24gdGhlIENWIChJT1csIGl0IG5ldmVyIGNhbGxzCi0JICogQ29uZGl0aW9uVmFy aWFibGVTbGVlcCgpKS4gSXQgc3RpbGwgdXNlcyBXYWl0RXZlbnRTZXRXYWl0KCkgZm9yCi0J ICogd2FpdGluZywgYmVjYXVzZSB3ZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3Igc29ja2V0IGV2 ZW50cy4gVGhlIHByb2Nlc3NlcwotCSAqIChzdGFydHVwIHByb2Nlc3MsIHdhbHJlY2VpdmVy IGV0Yy4pIHdhbnRpbmcgdG8gd2FrZSB1cCB3YWxzZW5kZXJzIHVzZQotCSAqIENvbmRpdGlv blZhcmlhYmxlQnJvYWRjYXN0KCksIHdoaWNoIGluIHR1cm4gY2FsbHMgU2V0TGF0Y2goKSwg aGVscGluZwotCSAqIHdhbHNlbmRlcnMgY29tZSBvdXQgb2YgV2FpdEV2ZW50U2V0V2FpdCgp LgorCSAqIGp1c3QgcHJlcGFyZXMgdG8gc2xlZXAgb24gdGhlIENWIHdhaXRsaXN0KSwgYnV0 IGRvZXMgbm90IGFjdHVhbGx5IHdhaXQKKwkgKiBvbiB0aGUgQ1YgKElPVywgaXQgbmV2ZXIg Y2FsbHMgQ29uZGl0aW9uVmFyaWFibGVTbGVlcCgpKS4gSXQgc3RpbGwgdXNlcworCSAqIFdh aXRFdmVudFNldFdhaXQoKSBmb3Igd2FpdGluZywgYmVjYXVzZSB3ZSBhbHNvIG5lZWQgdG8g d2FpdCBmb3Igc29ja2V0CisJICogZXZlbnRzLiBUaGUgcHJvY2Vzc2VzIChzdGFydHVwIHBy b2Nlc3MsIHdhbHJlY2VpdmVyIGV0Yy4pIHdhbnRpbmcgdG8KKwkgKiB3YWtlIHVwIHdhbHNl bmRlcnMgdXNlIENvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCksIHdoaWNoIGluIHR1cm4K KwkgKiBjYWxscyBTZW5kSW50ZXJydXB0KCksIGhlbHBpbmcgd2Fsc2VuZGVycyBjb21lIG91 dCBvZgorCSAqIFdhaXRFdmVudFNldFdhaXQoKS4KIAkgKgogCSAqIFRoaXMgYXBwcm9hY2gg aXMgc2ltcGxlIGFuZCBlZmZpY2llbnQgYmVjYXVzZSwgb25lIGRvZXNuJ3QgaGF2ZSB0byBs b29wCiAJICogdGhyb3VnaCBhbGwgdGhlIHdhbHNlbmRlcnMgc2xvdHMsIHdpdGggYSBzcGlu bG9jayBhY3F1aXNpdGlvbiBhbmQKQEAgLTM4OTAsMTYgKzM5MTUsMTYgQEAgV2FsU25kSW5p dFN0b3BwaW5nKHZvaWQpCiAJZm9yIChpID0gMDsgaSA8IG1heF93YWxfc2VuZGVyczsgaSsr KQogCXsKIAkJV2FsU25kCSAgICp3YWxzbmQgPSAmV2FsU25kQ3RsLT53YWxzbmRzW2ldOwot CQlwaWRfdAkJcGlkOworCQlQcm9jTnVtYmVyCXByb2NubzsKIAogCQlTcGluTG9ja0FjcXVp cmUoJndhbHNuZC0+bXV0ZXgpOwotCQlwaWQgPSB3YWxzbmQtPnBpZDsKKwkJcHJvY25vID0g d2Fsc25kLT5wZ3Byb2NubzsKIAkJU3BpbkxvY2tSZWxlYXNlKCZ3YWxzbmQtPm11dGV4KTsK IAotCQlpZiAocGlkID09IDApCisJCWlmIChwcm9jbm8gPT0gSU5WQUxJRF9QUk9DX05VTUJF UikKIAkJCWNvbnRpbnVlOwogCi0JCVNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19XQUxT TkRfSU5JVF9TVE9QUElORywgSU5WQUxJRF9QUk9DX05VTUJFUik7CisJCVNlbmRJbnRlcnJ1 cHQoSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HLCBwcm9jbm8pOwogCX0KIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCBlNGFlMzAzMWZlZi4uZGEyNjAxZThiOTIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCkBAIC0zOTAsNyArMzkwLDcgQEAgcGdhaW9faW9fdXBk YXRlX3N0YXRlKFBnQWlvSGFuZGxlICppb2gsIFBnQWlvSGFuZGxlU3RhdGUgbmV3X3N0YXRl KQogCSAqIGludGVycnVwdCBwcm9jZXNzaW5nIGNvdWxkIHdhaXQgZm9yIHRoZSBJTyB0byBj b21wbGV0ZSwgd2hpbGUgaW4gYW4KIAkgKiBpbnRlcm1lZGlhcnkgc3RhdGUuCiAJICovCi0J QXNzZXJ0KCFJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSk7CisJQXNzZXJ0KENoZWNr Rm9ySW50ZXJydXB0c01hc2sgPT0gMCk7CiAKIAlwZ2Fpb19kZWJ1Z19pbyhERUJVRzUsIGlv aCwKIAkJCQkgICAidXBkYXRpbmcgc3RhdGUgdG8gJXMiLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9haW8vYWlvX2lvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW9faW8uYwppbmRleCA3MmI0YzlmZWIzYS4uNzg3ODliM2Y4ZjMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL2Fpb19pby5jCkBAIC0xNjQsNyArMTY0LDcgQEAgcGdhaW9faW9fYmVmb3JlX3N0 YXJ0KFBnQWlvSGFuZGxlICppb2gpCiAJICogT3RoZXJ3aXNlIHRoZSBGRHMgcmVmZXJlbmNl ZCBieSB0aGUgSU8gY291bGQgYmUgY2xvc2VkIGR1ZSB0byBpbnRlcnJ1cHQKIAkgKiBwcm9j ZXNzaW5nLgogCSAqLwotCUFzc2VydCghSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCkp OworCUFzc2VydChDaGVja0ZvckludGVycnVwdHNNYXNrID09IDApOwogfQogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0aG9kX3dvcmtlci5jCmluZGV4IGQ5NjE3YzIwZTc2 Li40YzIxYjBmNDhhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vbWV0 aG9kX3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3Jr ZXIuYwpAQCAtMTMsNyArMTMsNyBAQAogICoKICAqIFNvIHRoYXQgdGhlIHN1Ym1pdHRlciBj YW4gbWFrZSBqdXN0IG9uZSBzeXN0ZW0gY2FsbCB3aGVuIHN1Ym1pdHRpbmcgYSBiYXRjaAog ICogb2YgSU9zLCB3YWtldXBzICJmYW4gb3V0IjsgZWFjaCB3b2tlbiBJTyB3b3JrZXIgY2Fu IHdha2UgdHdvIG1vcmUuIFhYWCBUaGlzCi0gKiBjb3VsZCBiZSBpbXByb3ZlZCBieSB1c2lu ZyBmdXRleGVzIGluc3RlYWQgb2YgbGF0Y2hlcyB0byB3YWtlIE4gd2FpdGVycy4KKyAqIGNv dWxkIGJlIGltcHJvdmVkIGJ5IHVzaW5nIGZ1dGV4ZXMgaW5zdGVhZCBvZiBpbnRlcnJ1cHRz IHRvIHdha2UgTiB3YWl0ZXJzLgogICoKICAqIFRoaXMgbWV0aG9kIG9mIEFJTyBpcyBhdmFp bGFibGUgaW4gYWxsIGJ1aWxkcyBvbiBhbGwgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZAogICog aXMgdGhlIGRlZmF1bHQuCkBAIC0yOSwxNyArMjksMTYgQEAKIAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKKyNpbmNsdWRlICJpcGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVkZSAi bGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw b3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgi Ci0jaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJzdG9yYWdl L2Fpby5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYWlvX2ludGVybmFsLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9haW9fc3Vic3lzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pb193b3JrZXIuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIK ICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90Lmgi CiAjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCkBAIC02Miw3ICs2MSw3IEBA IHR5cGVkZWYgc3RydWN0IFBnQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlCiAKIHR5cGVkZWYg c3RydWN0IFBnQWlvV29ya2VyU2xvdAogewotCUxhdGNoCSAgICpsYXRjaDsKKwlQcm9jTnVt YmVyCXByb2NubzsKIAlib29sCQlpbl91c2U7CiB9IFBnQWlvV29ya2VyU2xvdDsKIApAQCAt MTU0LDcgKzE1Myw3IEBAIHBnYWlvX3dvcmtlcl9zaG1lbV9pbml0KGJvb2wgZmlyc3RfdGlt ZSkKIAkJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29ya2VyX21hc2sgPSAwOwogCQlmb3Ig KGludCBpID0gMDsgaSA8IE1BWF9JT19XT1JLRVJTOyArK2kpCiAJCXsKLQkJCWlvX3dvcmtl cl9jb250cm9sLT53b3JrZXJzW2ldLmxhdGNoID0gTlVMTDsKKwkJCWlvX3dvcmtlcl9jb250 cm9sLT53b3JrZXJzW2ldLnByb2NubyA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCQlpb193 b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5pbl91c2UgPSBmYWxzZTsKIAkJfQogCX0KQEAg LTI0NCw3ICsyNDMsNyBAQCBwZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGludCBudW1f c3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCVBnQWlvSGFuZGxl ICpzeW5jaHJvbm91c19pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwogCWludAkJCW5z eW5jID0gMDsKLQlMYXRjaAkgICAqd2FrZXVwID0gTlVMTDsKKwlQcm9jTnVtYmVyCXdha2V1 cCA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJaW50CQkJd29ya2VyOwogCiAJQXNzZXJ0KG51 bV9zdGFnZWRfaW9zIDw9IFBHQUlPX1NVQk1JVF9CQVRDSF9TSVpFKTsKQEAgLTI2MywxMiAr MjYyLDEyIEBAIHBnYWlvX3dvcmtlcl9zdWJtaXRfaW50ZXJuYWwoaW50IG51bV9zdGFnZWRf aW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpCiAJCQljb250aW51ZTsKIAkJfQogCi0J CWlmICh3YWtldXAgPT0gTlVMTCkKKwkJaWYgKHdha2V1cCA9PSBJTlZBTElEX1BST0NfTlVN QkVSKQogCQl7CiAJCQkvKiBDaG9vc2UgYW4gaWRsZSB3b3JrZXIgdG8gd2FrZSB1cCBpZiB3 ZSBoYXZlbid0IGFscmVhZHkuICovCiAJCQl3b3JrZXIgPSBwZ2Fpb193b3JrZXJfY2hvb3Nl X2lkbGUoKTsKIAkJCWlmICh3b3JrZXIgPj0gMCkKLQkJCQl3YWtldXAgPSBpb193b3JrZXJf Y29udHJvbC0+d29ya2Vyc1t3b3JrZXJdLmxhdGNoOworCQkJCXdha2V1cCA9IGlvX3dvcmtl cl9jb250cm9sLT53b3JrZXJzW3dvcmtlcl0ucHJvY25vOwogCiAJCQlwZ2Fpb19kZWJ1Z19p byhERUJVRzQsIHN0YWdlZF9pb3NbaV0sCiAJCQkJCQkgICAiY2hvb3Npbmcgd29ya2VyICVk IiwKQEAgLTI3Nyw4ICsyNzYsMTAgQEAgcGdhaW9fd29ya2VyX3N1Ym1pdF9pbnRlcm5hbChp bnQgbnVtX3N0YWdlZF9pb3MsIFBnQWlvSGFuZGxlICoqc3RhZ2VkX2lvcykKIAl9CiAJTFdM b2NrUmVsZWFzZShBaW9Xb3JrZXJTdWJtaXNzaW9uUXVldWVMb2NrKTsKIAotCWlmICh3YWtl dXApCi0JCVNldExhdGNoKHdha2V1cCk7CisJaWYgKHdha2V1cCAhPSBJTlZBTElEX1BST0Nf TlVNQkVSKQorCXsKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIHdh a2V1cCk7CisJfQogCiAJLyogUnVuIHdoYXRldmVyIGlzIGxlZnQgc3luY2hyb25vdXNseS4g Ki8KIAlpZiAobnN5bmMgPiAwKQpAQCAtMzE0LDExICszMTUsMTEgQEAgcGdhaW9fd29ya2Vy X2RpZShpbnQgY29kZSwgRGF0dW0gYXJnKQogewogCUxXTG9ja0FjcXVpcmUoQWlvV29ya2Vy U3VibWlzc2lvblF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKIAlBc3NlcnQoaW9fd29ya2Vy X2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5pbl91c2UpOwotCUFzc2VydChpb193 b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNoID09IE15TGF0Y2gp OworCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLnBy b2NubyA9PSBNeVByb2NOdW1iZXIpOwogCiAJaW9fd29ya2VyX2NvbnRyb2wtPmlkbGVfd29y a2VyX21hc2sgJj0gfihVSU5UNjRfQygxKSA8PCBNeUlvV29ya2VySWQpOwogCWlvX3dvcmtl cl9jb250cm9sLT53b3JrZXJzW015SW9Xb3JrZXJJZF0uaW5fdXNlID0gZmFsc2U7Ci0JaW9f d29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5sYXRjaCA9IE5VTEw7CisJ aW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNbTXlJb1dvcmtlcklkXS5wcm9jbm8gPSBJTlZB TElEX1BST0NfTlVNQkVSOwogCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1 ZXVlTG9jayk7CiB9CiAKQEAgLTM0MSwyMCArMzQyLDIwIEBAIHBnYWlvX3dvcmtlcl9yZWdp c3Rlcih2b2lkKQogCXsKIAkJaWYgKCFpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5p bl91c2UpCiAJCXsKLQkJCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tpXS5s YXRjaCA9PSBOVUxMKTsKKwkJCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29ya2Vyc1tp XS5wcm9jbm8gPT0gSU5WQUxJRF9QUk9DX05VTUJFUik7CiAJCQlpb193b3JrZXJfY29udHJv bC0+d29ya2Vyc1tpXS5pbl91c2UgPSB0cnVlOwogCQkJTXlJb1dvcmtlcklkID0gaTsKIAkJ CWJyZWFrOwogCQl9CiAJCWVsc2UKLQkJCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+d29y a2Vyc1tpXS5sYXRjaCAhPSBOVUxMKTsKKwkJCUFzc2VydChpb193b3JrZXJfY29udHJvbC0+ d29ya2Vyc1tpXS5wcm9jbm8gIT0gSU5WQUxJRF9QUk9DX05VTUJFUik7CiAJfQogCiAJaWYg KE15SW9Xb3JrZXJJZCA9PSAtMSkKIAkJZWxvZyhFUlJPUiwgImNvdWxkbid0IGZpbmQgYSBm cmVlIHdvcmtlciBzbG90Iik7CiAKIAlpb193b3JrZXJfY29udHJvbC0+aWRsZV93b3JrZXJf bWFzayB8PSAoVUlOVDY0X0MoMSkgPDwgTXlJb1dvcmtlcklkKTsKLQlpb193b3JrZXJfY29u dHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLmxhdGNoID0gTXlMYXRjaDsKKwlpb193b3Jr ZXJfY29udHJvbC0+d29ya2Vyc1tNeUlvV29ya2VySWRdLnByb2NubyA9IE15UHJvY051bWJl cjsKIAlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2spOwogCiAJ b25fc2htZW1fZXhpdChwZ2Fpb193b3JrZXJfZGllLCAwKTsKQEAgLTM5MiwyMCArMzkzLDIw IEBAIElvV29ya2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFy dHVwX2RhdGFfbGVuKQogCiAJQXV4aWxpYXJ5UHJvY2Vzc01haW5Db21tb24oKTsKIAotCXBx c2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7Ci0JcHFzaWdu YWwoU0lHSU5ULCBkaWUpOwkJLyogdG8gYWxsb3cgbWFudWFsbHkgdHJpZ2dlcmluZyB3b3Jr ZXIgcmVzdGFydCAqLworCS8qIHh4eDogdGhpcyB1c2VkICdkaWUnLiBBbnkgcmVhc29uPyAq LworCXBxc2lnbmFsKFNJR0lOVCwgU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7 CS8qIHRvIGFsbG93IG1hbnVhbGx5CisJCQkJCQkJCQkJCQkJCSAqIHRyaWdnZXJpbmcgd29y a2VyCisJCQkJCQkJCQkJCQkJCSAqIHJlc3RhcnQgKi8KIAogCS8qCiAJICogSWdub3JlIFNJ R1RFUk0sIHdpbGwgZ2V0IGV4cGxpY2l0IHNodXRkb3duIHZpYSBTSUdVU1IyIGxhdGVyIGlu IHRoZQogCSAqIHNodXRkb3duIHNlcXVlbmNlLCBzaW1pbGFyIHRvIGNoZWNrcG9pbnRlci4K IAkgKi8KIAlwcXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKLQkvKiBTSUdRVUlUIGhhbmRs ZXIgd2FzIGFscmVhZHkgc2V0IHVwIGJ5IEluaXRQb3N0bWFzdGVyQ2hpbGQgKi8KLQlwcXNp Z25hbChTSUdBTFJNLCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsK LQlwcXNpZ25hbChTSUdVU1IxLCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcik7CiAJcHFz aWduYWwoU0lHVVNSMiwgU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCk7CiAKKwlT ZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CisKIAkvKiBhbHNvIHJlZ2lzdGVycyBh IHNodXRkb3duIGNhbGxiYWNrIHRvIHVucmVnaXN0ZXIgKi8KIAlwZ2Fpb193b3JrZXJfcmVn aXN0ZXIoKTsKIApAQCAtNDUzLDExICs0NTQsMTEgQEAgSW9Xb3JrZXJNYWluKGNvbnN0IHZv aWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiAKIAlzaWdwcm9j bWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcsIE5VTEwpOwogCi0Jd2hpbGUgKCFTaHV0 ZG93blJlcXVlc3RQZW5kaW5nKQorCXdoaWxlICghSW50ZXJydXB0UGVuZGluZyhJTlRFUlJV UFRfVEVSTUlOQVRFKSkKIAl7CiAJCXVpbnQzMgkJaW9faW5kZXg7Ci0JCUxhdGNoCSAgICps YXRjaGVzW0lPX1dPUktFUl9XQUtFVVBfRkFOT1VUXTsKLQkJaW50CQkJbmxhdGNoZXMgPSAw OworCQlQcm9jTnVtYmVyCXByb2Nub3NbSU9fV09SS0VSX1dBS0VVUF9GQU5PVVRdOworCQlp bnQJCQlucHJvY25vcyA9IDA7CiAJCWludAkJCW53YWtldXBzID0gMDsKIAkJaW50CQkJd29y a2VyOwogCkBAIC00OTAsMTMgKzQ5MSwxMyBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9pZCAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJCXsKIAkJCQlpZiAo KHdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpKSA8IDApCiAJCQkJCWJyZWFr OwotCQkJCWxhdGNoZXNbbmxhdGNoZXMrK10gPSBpb193b3JrZXJfY29udHJvbC0+d29ya2Vy c1t3b3JrZXJdLmxhdGNoOworCQkJCXByb2Nub3NbbnByb2Nub3MrK10gPSBpb193b3JrZXJf Y29udHJvbC0+d29ya2Vyc1t3b3JrZXJdLnByb2NubzsKIAkJCX0KIAkJfQogCQlMV0xvY2tS ZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZUxvY2spOwogCi0JCWZvciAoaW50IGkg PSAwOyBpIDwgbmxhdGNoZXM7ICsraSkKLQkJCVNldExhdGNoKGxhdGNoZXNbaV0pOworCQlm b3IgKGludCBpID0gMDsgaSA8IG5wcm9jbm9zOyArK2kpCisJCQlTZW5kSW50ZXJydXB0KElO VEVSUlVQVF9XQUlUX1dBS0VVUCwgcHJvY25vc1tpXSk7CiAKIAkJaWYgKGlvX2luZGV4ICE9 IC0xKQogCQl7CkBAIC01NjcsMTggKzU2OCwyMCBAQCBJb1dvcmtlck1haW4oY29uc3Qgdm9p ZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJfQogCQllbHNl CiAJCXsKLQkJCVdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09O X1BNX0RFQVRILCAtMSwKLQkJCQkJICBXQUlUX0VWRU5UX0lPX1dPUktFUl9NQUlOKTsKLQkJ CVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJy dXB0c01hc2sgfAorCQkJCQkJICBJTlRFUlJVUFRfQ09ORklHX1JFTE9BRCB8CisJCQkJCQkg IElOVEVSUlVQVF9URVJNSU5BVEUgfAorCQkJCQkJICBJTlRFUlJVUFRfV0FJVF9XQUtFVVAs CisJCQkJCQkgIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJCQkg IC0xLAorCQkJCQkJICBXQUlUX0VWRU5UX0lPX1dPUktFUl9NQUlOKTsKKwkJCUNsZWFySW50 ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJCX0KIAogCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwogCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0JCQlDb25m aWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCWlmIChDb25zdW1lSW50ZXJydXB0KElOVEVS UlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdIVVAp OwotCQl9CiAJfQogCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZp b3VzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBkMWJhYmFmZjAy My4uY2I2MWU2ZTFmY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVy L2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBA IC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9zdG9yYWdlX3hsb2cuaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVt ZW50LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYi9iaW5h cnloZWFwLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdfdHJhY2Uu aCIKQEAgLTMzNDUsNyArMzM0Niw3IEBAIFdha2VQaW5Db3VudFdhaXRlcihCdWZmZXJEZXNj ICpidWYpCiAJCVVubG9ja0J1ZkhkckV4dChidWYsIGJ1Zl9zdGF0ZSwKIAkJCQkJCTAsIEJN X1BJTl9DT1VOVF9XQUlURVIsCiAJCQkJCQkwKTsKLQkJUHJvY1NlbmRTaWduYWwod2FpdF9i YWNrZW5kX3BncHJvY25vKTsKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtF VVAsIHdhaXRfYmFja2VuZF9wZ3Byb2Nubyk7CiAJfQogCWVsc2UKIAkJVW5sb2NrQnVmSGRy KGJ1Zik7CkBAIC0zNTI1LDcgKzM1MjYsNyBAQCBCdWZmZXJTeW5jKGludCBmbGFncykKIAkJ CQkJCTApOwogCiAJCS8qIENoZWNrIGZvciBiYXJyaWVyIGV2ZW50cyBpbiBjYXNlIE5CdWZm ZXJzIGlzIGxhcmdlLiAqLwotCQlpZiAoUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nKQorCQlp ZiAoQ29uc3VtZUludGVycnVwdChJTlRFUlJVUFRfQkFSUklFUikpCiAJCQlQcm9jZXNzUHJv Y1NpZ25hbEJhcnJpZXIoKTsKIAl9CiAKQEAgLTM2MDYsNyArMzYwNyw3IEBAIEJ1ZmZlclN5 bmMoaW50IGZsYWdzKQogCQlzLT5udW1fdG9fc2NhbisrOwogCiAJCS8qIENoZWNrIGZvciBi YXJyaWVyIGV2ZW50cy4gKi8KLQkJaWYgKFByb2NTaWduYWxCYXJyaWVyUGVuZGluZykKKwkJ aWYgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJSVVBUX0JBUlJJRVIpKQogCQkJUHJvY2Vzc1By b2NTaWduYWxCYXJyaWVyKCk7CiAJfQogCkBAIC0zNjk3LDcgKzM2OTgsNyBAQCBCdWZmZXJT eW5jKGludCBmbGFncykKIAkJLyoKIAkJICogU2xlZXAgdG8gdGhyb3R0bGUgb3VyIEkvTyBy YXRlLgogCQkgKgotCQkgKiAoVGhpcyB3aWxsIGNoZWNrIGZvciBiYXJyaWVyIGV2ZW50cyBl dmVuIGlmIGl0IGRvZXNuJ3Qgc2xlZXAuKQorCQkgKiAoVGhpcyB3aWxsIGNoZWNrIGZvciBp bnRlcnJ1cHRzIGV2ZW4gaWYgaXQgZG9lc24ndCBzbGVlcC4pCiAJCSAqLwogCQlDaGVja3Bv aW50V3JpdGVEZWxheShmbGFncywgKGRvdWJsZSkgbnVtX3Byb2Nlc3NlZCAvIG51bV90b19z Y2FuKTsKIAl9CkBAIC02NjQzLDEyICs2NjQ0LDE4IEBAIExvY2tCdWZmZXJGb3JDbGVhbnVw KEJ1ZmZlciBidWZmZXIpCiAJCQlTZXRTdGFydHVwQnVmZmVyUGluV2FpdEJ1ZklkKC0xKTsK IAkJfQogCQllbHNlCi0JCQlQcm9jV2FpdEZvclNpZ25hbChXQUlUX0VWRU5UX0JVRkZFUl9D TEVBTlVQKTsKKwkJeworCQkJV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNr IHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJICBXTF9JTlRFUlJVUFQgfCBXTF9F WElUX09OX1BNX0RFQVRILCAwLAorCQkJCQkJICBXQUlUX0VWRU5UX0JVRkZFUl9DTEVBTlVQ KTsKKwkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CisJCQlDSEVD S19GT1JfSU5URVJSVVBUUygpOworCQl9CiAKIAkJLyoKIAkJICogUmVtb3ZlIGZsYWcgbWFy a2luZyB1cyBhcyB3YWl0ZXIuIE5vcm1hbGx5IHRoaXMgd2lsbCBub3QgYmUgc2V0Ci0JCSAq IGFueW1vcmUsIGJ1dCBQcm9jV2FpdEZvclNpZ25hbCgpIGNhbiByZXR1cm4gZm9yIG90aGVy IHNpZ25hbHMgYXMKLQkJICogd2VsbC4gIFdlIHRha2UgY2FyZSB0byBvbmx5IHJlc2V0IHRo ZSBmbGFnIGlmIHdlJ3JlIHRoZSB3YWl0ZXIsIGFzCisJCSAqIGFueW1vcmUsIGJ1dCBXYWl0 SW50ZXJydXB0IGNhbiByZXR1cm4gZm9yIG90aGVyIHNpZ25hbHMgYXMgd2VsbC4gV2UKKwkJ ICogdGFrZSBjYXJlIHRvIG9ubHkgcmVzZXQgdGhlIGZsYWcgaWYgd2UncmUgdGhlIHdhaXRl ciwgYXMKIAkJICogdGhlb3JldGljYWxseSBhbm90aGVyIGJhY2tlbmQgY291bGQgaGF2ZSBz dGFydGVkIHdhaXRpbmcuIFRoYXQncwogCQkgKiBpbXBvc3NpYmxlIHdpdGggdGhlIGN1cnJl bnQgdXNhZ2VzIGR1ZSB0byB0YWJsZSBsZXZlbCBsb2NraW5nLCBidXQKIAkJICogYmV0dGVy IGJlIHNhZmUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVl bGlzdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCBi NzY4NzgzNjE4OC4uYzNlOTc1OWI5YjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv ZnJlZWxpc3QuYwpAQCAtMTUsNiArMTUsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK ICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRl cm5hbHMuaCIKQEAgLTE5NiwyNyArMTk3LDI1IEBAIFN0cmF0ZWd5R2V0QnVmZmVyKEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50NjQgKmJ1Zl9zdGF0ZSwgYm9vbCAqZnJv bV9yCiAJLyoKIAkgKiBJZiBhc2tlZCwgd2UgbmVlZCB0byB3YWtlbiB0aGUgYmd3cml0ZXIu IFNpbmNlIHdlIGRvbid0IHdhbnQgdG8gcmVseSBvbgogCSAqIGEgc3BpbmxvY2sgZm9yIHRo aXMgd2UgZm9yY2UgYSByZWFkIGZyb20gc2hhcmVkIG1lbW9yeSBvbmNlLCBhbmQgdGhlbgot CSAqIHNldCB0aGUgbGF0Y2ggYmFzZWQgb24gdGhhdCB2YWx1ZS4gV2UgbmVlZCB0byBnbyB0 aHJvdWdoIHRoYXQgbGVuZ3RoCi0JICogYmVjYXVzZSBvdGhlcndpc2UgYmd3cHJvY25vIG1p Z2h0IGJlIHJlc2V0IHdoaWxlL2FmdGVyIHdlIGNoZWNrIGJlY2F1c2UKLQkgKiB0aGUgY29t cGlsZXIgbWlnaHQganVzdCByZXJlYWQgZnJvbSBtZW1vcnkuCisJICogc2VuZCB0aGUgaW50 ZXJydXB0IGJhc2VkIG9uIHRoYXQgdmFsdWUuIFdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGF0 CisJICogbGVuZ3RoIGJlY2F1c2Ugb3RoZXJ3aXNlIGJnd3Byb2NubyBtaWdodCBiZSByZXNl dCB3aGlsZS9hZnRlciB3ZSBjaGVjaworCSAqIGJlY2F1c2UgdGhlIGNvbXBpbGVyIG1pZ2h0 IGp1c3QgcmVyZWFkIGZyb20gbWVtb3J5LgogCSAqCi0JICogVGhpcyBjYW4gcG9zc2libHkg c2V0IHRoZSBsYXRjaCBvZiB0aGUgd3JvbmcgcHJvY2VzcyBpZiB0aGUgYmd3cml0ZXIKLQkg KiBkaWVzIGluIHRoZSB3cm9uZyBtb21lbnQuIEJ1dCBzaW5jZSBQR1BST0MtPnByb2NMYXRj aCBpcyBuZXZlcgotCSAqIGRlYWxsb2NhdGVkIHRoZSB3b3JzdCBjb25zZXF1ZW5jZSBvZiB0 aGF0IGlzIHRoYXQgd2Ugc2V0IHRoZSBsYXRjaCBvZgotCSAqIHNvbWUgYXJiaXRyYXJ5IHBy b2Nlc3MuCisJICogVGhpcyBjYW4gcG9zc2libHkgc2VuZCB0aGUgaW50ZXJydXB0IHRvIHRo ZSB3cm9uZyBwcm9jZXNzIGlmIHRoZQorCSAqIGJnd3JpdGVyIGRpZXMgaW4gdGhlIHdyb25n IG1vbWVudCwgYnV0IHRoYXQncyBoYXJtbGVzcy4KIAkgKi8KIAliZ3dwcm9jbm8gPSBJTlRf QUNDRVNTX09OQ0UoU3RyYXRlZ3lDb250cm9sLT5iZ3dwcm9jbm8pOwogCWlmIChiZ3dwcm9j bm8gIT0gLTEpCiAJewotCQkvKiByZXNldCBiZ3dwcm9jbm8gZmlyc3QsIGJlZm9yZSBzZXR0 aW5nIHRoZSBsYXRjaCAqLworCQkvKiByZXNldCBiZ3dwcm9jbm8gZmlyc3QsIGJlZm9yZSBz ZW5kaW5nIHRoZSBpbnRlcnJ1cHQgKi8KIAkJU3RyYXRlZ3lDb250cm9sLT5iZ3dwcm9jbm8g PSAtMTsKIAogCQkvKgotCQkgKiBOb3QgYWNxdWlyaW5nIFByb2NBcnJheUxvY2sgaGVyZSB3 aGljaCBpcyBzbGlnaHRseSBpY2t5LiBJdCdzCi0JCSAqIGFjdHVhbGx5IGZpbmUgYmVjYXVz ZSBwcm9jTGF0Y2ggaXNuJ3QgZXZlciBmcmVlZCwgc28gd2UganVzdCBjYW4KLQkJICogcG90 ZW50aWFsbHkgc2V0IHRoZSB3cm9uZyBwcm9jZXNzJyAob3Igbm8gcHJvY2VzcycpIGxhdGNo LgorCQkgKiBOb3QgYWNxdWlyaW5nIFByb2NBcnJheUxvY2sgaGVyZSB3aGljaCBpcyBzbGln aHRseSBpY2t5LCBiZWNhdXNlIHdlCisJCSAqIGNhbiBwb3RlbnRpYWxseSBzZW5kIHRoZSBp bnRlcnJ1cHQgdG8gdGhlIHdyb25nIHByb2Nlc3MgKG9yIG5vCisJCSAqIHByb2Nlc3MpLCBi dXQgaXQncyBoYXJtbGVzcy4KIAkJICovCi0JCVNldExhdGNoKCZHZXRQR1Byb2NCeU51bWJl cihiZ3dwcm9jbm8pLT5wcm9jTGF0Y2gpOworCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9X QUlUX1dBS0VVUCwgYmd3cHJvY25vKTsKIAl9CiAKIAkvKgpAQCAtMzQ3LDEwICszNDYsMTAg QEAgU3RyYXRlZ3lTeW5jU3RhcnQodWludDMyICpjb21wbGV0ZV9wYXNzZXMsIHVpbnQzMiAq bnVtX2J1Zl9hbGxvYykKIH0KIAogLyoKLSAqIFN0cmF0ZWd5Tm90aWZ5QmdXcml0ZXIgLS0g c2V0IG9yIGNsZWFyIGFsbG9jYXRpb24gbm90aWZpY2F0aW9uIGxhdGNoCisgKiBTdHJhdGVn eU5vdGlmeUJnV3JpdGVyIC0tIHNldCBvciBjbGVhciBhbGxvY2F0aW9uIG5vdGlmaWNhdGlv biBwcm9jZXNzCiAgKgogICogSWYgYmd3cHJvY25vIGlzbid0IC0xLCB0aGUgbmV4dCBpbnZv Y2F0aW9uIG9mIFN0cmF0ZWd5R2V0QnVmZmVyIHdpbGwKLSAqIHNldCB0aGF0IGxhdGNoLiAg UGFzcyAtMSB0byBjbGVhciB0aGUgcGVuZGluZyBub3RpZmljYXRpb24gYmVmb3JlIGl0Cisg KiBpbnRlcnJ1cHQgdGhhdCBwcm9jZXNzLiAgUGFzcyAtMSB0byBjbGVhciB0aGUgcGVuZGlu ZyBub3RpZmljYXRpb24gYmVmb3JlIGl0CiAgKiBoYXBwZW5zLiAgVGhpcyBmZWF0dXJlIGlz IHVzZWQgYnkgdGhlIGJnd3JpdGVyIHByb2Nlc3MgdG8gd2FrZSBpdHNlbGYgdXAKICAqIGZy b20gaGliZXJuYXRpb24sIGFuZCBpcyBub3QgbWVhbnQgZm9yIGFueWJvZHkgZWxzZSB0byB1 c2UuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL01ha2VmaWxl IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvTWFrZWZpbGUKaW5kZXggOWEwN2Y2ZTFkOTIu LjJkOThhNDNlNzQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtl ZmlsZQorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9NYWtlZmlsZQpAQCAtMTUsNyAr MTUsNiBAQCBPQkpTID0gXAogCWRzbV9yZWdpc3RyeS5vIFwKIAlpcGMubyBcCiAJaXBjaS5v IFwKLQlsYXRjaC5vIFwKIAlwbXNpZ25hbC5vIFwKIAlwcm9jYXJyYXkubyBcCiAJcHJvY3Np Z25hbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9pbXBs LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbC5jCmluZGV4IGUyMDg0NTdk ZjI3Li4zNjdjMTE2ODIxNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv ZHNtX2ltcGwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21faW1wbC5jCkBA IC0zNTcsOCArMzU3LDggQEAgZHNtX2ltcGxfcG9zaXhfcmVzaXplKGludCBmZCwgb2ZmX3Qg c2l6ZSkKIAkvKgogCSAqIEJsb2NrIGFsbCBibG9ja2FibGUgc2lnbmFscywgZXhjZXB0IFNJ R1FVSVQuICBwb3NpeF9mYWxsb2NhdGUoKSBjYW4gcnVuCiAJICogZm9yIHF1aXRlIGEgbG9u ZyB0aW1lLCBhbmQgaXMgYW4gYWxsLW9yLW5vdGhpbmcgb3BlcmF0aW9uLiAgSWYgd2UKLQkg KiBhbGxvd2VkIFNJR1VTUjEgdG8gaW50ZXJydXB0IHVzIHJlcGVhdGVkbHkgKGZvciBleGFt cGxlLCBkdWUgdG8KLQkgKiByZWNvdmVyeSBjb25mbGljdHMpLCB0aGUgcmV0cnkgbG9vcCBt aWdodCBuZXZlciBzdWNjZWVkLgorCSAqIGFsbG93ZWQgc2lnbmFscyB0byBpbnRlcnJ1cHQg dXMgcmVwZWF0ZWRseSAoZm9yIGV4YW1wbGUsIGR1ZSB0byBjb25maWcKKwkgKiBmaWxlIHJl bG9hZHMpLCB0aGUgcmV0cnkgbG9vcCBtaWdodCBuZXZlciBzdWNjZWVkLgogCSAqLwogCWlm IChJc1VuZGVyUG9zdG1hc3RlcikKIAkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZCbG9j a1NpZywgJnNhdmVfc2lnbWFzayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9pcGMuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwYy5jCmluZGV4IGNiOTQ0 ZWRkOGRmLi44MDY5NDc1NzFhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjLmMKQEAgLTIzLDYg KzIzLDcgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgog CisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2lmZGVmIFBST0ZJTEVfUElEX0RJUgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5oIgpAQCAtMTcyLDEzICsxNzMsMTIgQEAgcHJvY19leGl0X3ByZXBhcmUoaW50IGNvZGUp CiAJcHJvY19leGl0X2lucHJvZ3Jlc3MgPSB0cnVlOwogCiAJLyoKLQkgKiBGb3JnZXQgYW55 IHBlbmRpbmcgY2FuY2VsIG9yIGRpZSByZXF1ZXN0czsgd2UncmUgZG9pbmcgb3VyIGJlc3Qg dG8KLQkgKiBjbG9zZSB1cCBzaG9wIGFscmVhZHkuICBOb3RlIHRoYXQgdGhlIHNpZ25hbCBo YW5kbGVycyB3aWxsIG5vdCBzZXQKLQkgKiB0aGVzZSBmbGFncyBhZ2Fpbiwgbm93IHRoYXQg cHJvY19leGl0X2lucHJvZ3Jlc3MgaXMgc2V0LgorCSAqIEZvcmdldCBhbnkgcGVuZGluZyBj YW5jZWwgb3IgZGllIHJlcXVlc3RzIGFuZCBzZXQgSW50ZXJydXB0SG9sZG9mZkNvdW50CisJ ICogdG8gcHJldmVudCBhbnkgbW9yZSBpbnRlcnJ1cHRzIGZyb20gYmVpbmcgcHJvY2Vzc2Vk OyB3ZSdyZSBkb2luZyBvdXIKKwkgKiBiZXN0IHRvIGNsb3NlIHVwIHNob3AgYWxyZWFkeS4K IAkgKi8KLQlJbnRlcnJ1cHRQZW5kaW5nID0gZmFsc2U7Ci0JUHJvY0RpZVBlbmRpbmcgPSBm YWxzZTsKLQlRdWVyeUNhbmNlbFBlbmRpbmcgPSBmYWxzZTsKKwlDbGVhckludGVycnVwdChJ TlRFUlJVUFRfVEVSTUlOQVRFKTsKKwlDbGVhckludGVycnVwdChJTlRFUlJVUFRfUVVFUllf Q0FOQ0VMKTsKIAlJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPSAxOwogCUNyaXRTZWN0aW9uQ291 bnQgPSAwOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9sYXRjaC5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvbGF0Y2guYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggODUzN2U5ZmVmMmQuLjAwMDAwMDAwMDAwCi0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL2xhdGNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAot LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogbGF0Y2guYwotICoJICBSb3V0aW5lcyBm b3IgaW50ZXItcHJvY2VzcyBsYXRjaGVzCi0gKgotICogVGhlIGxhdGNoIGludGVyZmFjZSBp cyBhIHJlbGlhYmxlIHJlcGxhY2VtZW50IGZvciB0aGUgY29tbW9uIHBhdHRlcm4gb2YKLSAq IHVzaW5nIHBnX3VzbGVlcCgpIG9yIHNlbGVjdCgpIHRvIHdhaXQgdW50aWwgYSBzaWduYWwg YXJyaXZlcywgd2hlcmUgdGhlCi0gKiBzaWduYWwgaGFuZGxlciBzZXRzIGEgZmxhZyB2YXJp YWJsZS4gIFNlZSBsYXRjaC5oIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gKiBvbiBob3cgdG8g dXNlIHRoZW0uCi0gKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQot ICoKLSAqIElERU5USUZJQ0FUSU9OCi0gKgkgIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2xh dGNoLmMKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2luY2x1ZGUgInBvc3Rn cmVzLmgiCi0KLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKLSNpbmNsdWRlICJwb3J0L2F0b21p Y3MuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCi0jaW5jbHVkZSAic3RvcmFnZS93 YWl0ZXZlbnRzZXQuaCIKLSNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgotCi0vKiBBIGNv bW1vbiBXYWl0RXZlbnRTZXQgdXNlZCB0byBpbXBsZW1lbnQgV2FpdExhdGNoKCkgKi8KLXN0 YXRpYyBXYWl0RXZlbnRTZXQgKkxhdGNoV2FpdFNldDsKLQotLyogVGhlIHBvc2l0aW9ucyBv ZiB0aGUgbGF0Y2ggYW5kIFBNIGRlYXRoIGV2ZW50cyBpbiBMYXRjaFdhaXRTZXQgKi8KLSNk ZWZpbmUgTGF0Y2hXYWl0U2V0TGF0Y2hQb3MgMAotI2RlZmluZSBMYXRjaFdhaXRTZXRQb3N0 bWFzdGVyRGVhdGhQb3MgMQotCi12b2lkCi1Jbml0aWFsaXplTGF0Y2hXYWl0U2V0KHZvaWQp Ci17Ci0JaW50CQkJbGF0Y2hfcG9zIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWTsKLQotCUFz c2VydChMYXRjaFdhaXRTZXQgPT0gTlVMTCk7Ci0KLQkvKiBTZXQgdXAgdGhlIFdhaXRFdmVu dFNldCB1c2VkIGJ5IFdhaXRMYXRjaCgpLiAqLwotCUxhdGNoV2FpdFNldCA9IENyZWF0ZVdh aXRFdmVudFNldChOVUxMLCAyKTsKLQlsYXRjaF9wb3MgPSBBZGRXYWl0RXZlbnRUb1NldChM YXRjaFdhaXRTZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJCQkJ ICBNeUxhdGNoLCBOVUxMKTsKLQlBc3NlcnQobGF0Y2hfcG9zID09IExhdGNoV2FpdFNldExh dGNoUG9zKTsKLQotCS8qCi0JICogV2FpdExhdGNoIHdpbGwgbW9kaWZ5IHRoaXMgdG8gV0xf RVhJVF9PTl9QTV9ERUFUSCBvcgotCSAqIFdMX1BPU1RNQVNURVJfREVBVEggb24gZWFjaCBj YWxsLgotCSAqLwotCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCWxhdGNoX3BvcyA9 IEFkZFdhaXRFdmVudFRvU2V0KExhdGNoV2FpdFNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwK LQkJCQkJCQkJCSAgUEdJTlZBTElEX1NPQ0tFVCwgTlVMTCwgTlVMTCk7Ci0JCUFzc2VydChs YXRjaF9wb3MgPT0gTGF0Y2hXYWl0U2V0UG9zdG1hc3RlckRlYXRoUG9zKTsKLQl9Ci19Ci0K LS8qCi0gKiBJbml0aWFsaXplIGEgcHJvY2Vzcy1sb2NhbCBsYXRjaC4KLSAqLwotdm9pZAot SW5pdExhdGNoKExhdGNoICpsYXRjaCkKLXsKLQlsYXRjaC0+aXNfc2V0ID0gZmFsc2U7Ci0J bGF0Y2gtPm1heWJlX3NsZWVwaW5nID0gZmFsc2U7Ci0JbGF0Y2gtPm93bmVyX3BpZCA9IE15 UHJvY1BpZDsKLQlsYXRjaC0+aXNfc2hhcmVkID0gZmFsc2U7Ci0KLSNpZmRlZiBXSU4zMgot CWxhdGNoLT5ldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsK LQlpZiAobGF0Y2gtPmV2ZW50ID09IE5VTEwpCi0JCWVsb2coRVJST1IsICJDcmVhdGVFdmVu dCBmYWlsZWQ6IGVycm9yIGNvZGUgJWx1IiwgR2V0TGFzdEVycm9yKCkpOwotI2VuZGlmCQkJ CQkJCS8qIFdJTjMyICovCi19Ci0KLS8qCi0gKiBJbml0aWFsaXplIGEgc2hhcmVkIGxhdGNo IHRoYXQgY2FuIGJlIHNldCBmcm9tIG90aGVyIHByb2Nlc3Nlcy4gVGhlIGxhdGNoCi0gKiBp cyBpbml0aWFsbHkgb3duZWQgYnkgbm8tb25lOyB1c2UgT3duTGF0Y2ggdG8gYXNzb2NpYXRl IGl0IHdpdGggdGhlCi0gKiBjdXJyZW50IHByb2Nlc3MuCi0gKgotICogSW5pdFNoYXJlZExh dGNoIG5lZWRzIHRvIGJlIGNhbGxlZCBpbiBwb3N0bWFzdGVyIGJlZm9yZSBmb3JraW5nIGNo aWxkCi0gKiBwcm9jZXNzZXMsIHVzdWFsbHkgcmlnaHQgYWZ0ZXIgYWxsb2NhdGluZyB0aGUg c2hhcmVkIG1lbW9yeSBibG9jawotICogY29udGFpbmluZyB0aGUgbGF0Y2ggd2l0aCBTaG1l bUluaXRTdHJ1Y3QuIChUaGUgVW5peCBpbXBsZW1lbnRhdGlvbgotICogZG9lc24ndCBhY3R1 YWxseSByZXF1aXJlIHRoYXQsIGJ1dCB0aGUgV2luZG93cyBvbmUgZG9lcy4pIEJlY2F1c2Ug b2YKLSAqIHRoaXMgcmVzdHJpY3Rpb24sIHdlIGhhdmUgbm8gY29uY3VycmVuY3kgaXNzdWVz IHRvIHdvcnJ5IGFib3V0IGhlcmUuCi0gKgotICogTm90ZSB0aGF0IG90aGVyIGhhbmRsZXMg Y3JlYXRlZCBpbiB0aGlzIG1vZHVsZSBhcmUgbmV2ZXIgbWFya2VkIGFzCi0gKiBpbmhlcml0 YWJsZS4gIFRodXMgd2UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgY2xlYW5pbmcgdXAg Y2hpbGQKLSAqIHByb2Nlc3MgcmVmZXJlbmNlcyB0byBwb3N0bWFzdGVyLXByaXZhdGUgbGF0 Y2hlcyBvciBXYWl0RXZlbnRTZXRzLgotICovCi12b2lkCi1Jbml0U2hhcmVkTGF0Y2goTGF0 Y2ggKmxhdGNoKQotewotI2lmZGVmIFdJTjMyCi0JU0VDVVJJVFlfQVRUUklCVVRFUyBzYTsK LQotCS8qCi0JICogU2V0IHVwIHNlY3VyaXR5IGF0dHJpYnV0ZXMgdG8gc3BlY2lmeSB0aGF0 IHRoZSBldmVudHMgYXJlIGluaGVyaXRlZC4KLQkgKi8KLQlaZXJvTWVtb3J5KCZzYSwgc2l6 ZW9mKHNhKSk7Ci0Jc2Eubkxlbmd0aCA9IHNpemVvZihzYSk7Ci0Jc2EuYkluaGVyaXRIYW5k bGUgPSBUUlVFOwotCi0JbGF0Y2gtPmV2ZW50ID0gQ3JlYXRlRXZlbnQoJnNhLCBUUlVFLCBG QUxTRSwgTlVMTCk7Ci0JaWYgKGxhdGNoLT5ldmVudCA9PSBOVUxMKQotCQllbG9nKEVSUk9S LCAiQ3JlYXRlRXZlbnQgZmFpbGVkOiBlcnJvciBjb2RlICVsdSIsIEdldExhc3RFcnJvcigp KTsKLSNlbmRpZgotCi0JbGF0Y2gtPmlzX3NldCA9IGZhbHNlOwotCWxhdGNoLT5tYXliZV9z bGVlcGluZyA9IGZhbHNlOwotCWxhdGNoLT5vd25lcl9waWQgPSAwOwotCWxhdGNoLT5pc19z aGFyZWQgPSB0cnVlOwotfQotCi0vKgotICogQXNzb2NpYXRlIGEgc2hhcmVkIGxhdGNoIHdp dGggdGhlIGN1cnJlbnQgcHJvY2VzcywgYWxsb3dpbmcgaXQgdG8KLSAqIHdhaXQgb24gdGhl IGxhdGNoLgotICoKLSAqIEFsdGhvdWdoIHRoZXJlIGlzIGEgc2FuaXR5IGNoZWNrIGZvciBs YXRjaC1hbHJlYWR5LW93bmVkLCB3ZSBkb24ndCBkbwotICogYW55IHNvcnQgb2YgbG9ja2lu ZyBoZXJlLCBtZWFuaW5nIHRoYXQgd2UgY291bGQgZmFpbCB0byBkZXRlY3QgdGhlIGVycm9y Ci0gKiBpZiB0d28gcHJvY2Vzc2VzIHRyeSB0byBvd24gdGhlIHNhbWUgbGF0Y2ggYXQgYWJv dXQgdGhlIHNhbWUgdGltZS4gIElmCi0gKiB0aGVyZSBpcyBhbnkgcmlzayBvZiB0aGF0LCBj YWxsZXIgbXVzdCBwcm92aWRlIGFuIGludGVybG9jayB0byBwcmV2ZW50IGl0LgotICovCi12 b2lkCi1Pd25MYXRjaChMYXRjaCAqbGF0Y2gpCi17Ci0JaW50CQkJb3duZXJfcGlkOwotCi0J LyogU2FuaXR5IGNoZWNrcyAqLwotCUFzc2VydChsYXRjaC0+aXNfc2hhcmVkKTsKLQotCW93 bmVyX3BpZCA9IGxhdGNoLT5vd25lcl9waWQ7Ci0JaWYgKG93bmVyX3BpZCAhPSAwKQotCQll bG9nKFBBTklDLCAibGF0Y2ggYWxyZWFkeSBvd25lZCBieSBQSUQgJWQiLCBvd25lcl9waWQp OwotCi0JbGF0Y2gtPm93bmVyX3BpZCA9IE15UHJvY1BpZDsKLX0KLQotLyoKLSAqIERpc293 biBhIHNoYXJlZCBsYXRjaCBjdXJyZW50bHkgb3duZWQgYnkgdGhlIGN1cnJlbnQgcHJvY2Vz cy4KLSAqLwotdm9pZAotRGlzb3duTGF0Y2goTGF0Y2ggKmxhdGNoKQotewotCUFzc2VydChs YXRjaC0+aXNfc2hhcmVkKTsKLQlBc3NlcnQobGF0Y2gtPm93bmVyX3BpZCA9PSBNeVByb2NQ aWQpOwotCi0JbGF0Y2gtPm93bmVyX3BpZCA9IDA7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBh IGdpdmVuIGxhdGNoIHRvIGJlIHNldCwgb3IgZm9yIHBvc3RtYXN0ZXIgZGVhdGgsIG9yIHVu dGlsIHRpbWVvdXQKLSAqIGlzIGV4Y2VlZGVkLiAnd2FrZUV2ZW50cycgaXMgYSBiaXRtYXNr IHRoYXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRob3NlIGV2ZW50cwotICogdG8gd2FpdCBmb3Iu IElmIHRoZSBsYXRjaCBpcyBhbHJlYWR5IHNldCAoYW5kIFdMX0xBVENIX1NFVCBpcyBnaXZl biksIHRoZQotICogZnVuY3Rpb24gcmV0dXJucyBpbW1lZGlhdGVseS4KLSAqCi0gKiBUaGUg InRpbWVvdXQiIGlzIGdpdmVuIGluIG1pbGxpc2Vjb25kcy4gSXQgbXVzdCBiZSA+PSAwIGlm IFdMX1RJTUVPVVQgZmxhZwotICogaXMgZ2l2ZW4uICBBbHRob3VnaCBpdCBpcyBkZWNsYXJl ZCBhcyAibG9uZyIsIHdlIGRvbid0IGFjdHVhbGx5IHN1cHBvcnQKLSAqIHRpbWVvdXRzIGxv bmdlciB0aGFuIElOVF9NQVggbWlsbGlzZWNvbmRzLiAgTm90ZSB0aGF0IHNvbWUgZXh0cmEg b3ZlcmhlYWQKLSAqIGlzIGluY3VycmVkIHdoZW4gV0xfVElNRU9VVCBpcyBnaXZlbiwgc28g YXZvaWQgdXNpbmcgYSB0aW1lb3V0IGlmIHBvc3NpYmxlLgotICoKLSAqIFRoZSBsYXRjaCBt dXN0IGJlIG93bmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3MsIGllLiBpdCBtdXN0IGJlIGEK LSAqIHByb2Nlc3MtbG9jYWwgbGF0Y2ggaW5pdGlhbGl6ZWQgd2l0aCBJbml0TGF0Y2gsIG9y IGEgc2hhcmVkIGxhdGNoCi0gKiBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgcHJvY2Vz cyBieSBjYWxsaW5nIE93bkxhdGNoLgotICoKLSAqIFJldHVybnMgYml0IG1hc2sgaW5kaWNh dGluZyB3aGljaCBjb25kaXRpb24ocykgY2F1c2VkIHRoZSB3YWtlLXVwLiBOb3RlCi0gKiB0 aGF0IGlmIG11bHRpcGxlIHdha2UtdXAgY29uZGl0aW9ucyBhcmUgdHJ1ZSwgdGhlcmUgaXMg bm8gZ3VhcmFudGVlIHRoYXQKLSAqIHdlIHJldHVybiBhbGwgb2YgdGhlbSBpbiBvbmUgY2Fs bCwgYnV0IHdlIHdpbGwgcmV0dXJuIGF0IGxlYXN0IG9uZS4KLSAqLwotaW50Ci1XYWl0TGF0 Y2goTGF0Y2ggKmxhdGNoLCBpbnQgd2FrZUV2ZW50cywgbG9uZyB0aW1lb3V0LAotCQkgIHVp bnQzMiB3YWl0X2V2ZW50X2luZm8pCi17Ci0JV2FpdEV2ZW50CWV2ZW50OwotCi0JLyogUG9z dG1hc3Rlci1tYW5hZ2VkIGNhbGxlcnMgbXVzdCBoYW5kbGUgcG9zdG1hc3RlciBkZWF0aCBz b21laG93LiAqLwotCUFzc2VydCghSXNVbmRlclBvc3RtYXN0ZXIgfHwKLQkJICAgKHdha2VF dmVudHMgJiBXTF9FWElUX09OX1BNX0RFQVRIKSB8fAotCQkgICAod2FrZUV2ZW50cyAmIFdM X1BPU1RNQVNURVJfREVBVEgpKTsKLQotCS8qCi0JICogU29tZSBjYWxsZXJzIG1heSBoYXZl IGEgbGF0Y2ggb3RoZXIgdGhhbiBNeUxhdGNoLCBvciBubyBsYXRjaCBhdCBhbGwsCi0JICog b3Igd2FudCB0byBoYW5kbGUgcG9zdG1hc3RlciBkZWF0aCBkaWZmZXJlbnRseS4gIEl0J3Mg Y2hlYXAgdG8gYXNzaWduCi0JICogdGhvc2UsIHNvIGp1c3QgZG8gaXQgZXZlcnkgdGltZS4K LQkgKi8KLQlpZiAoISh3YWtlRXZlbnRzICYgV0xfTEFUQ0hfU0VUKSkKLQkJbGF0Y2ggPSBO VUxMOwotCU1vZGlmeVdhaXRFdmVudChMYXRjaFdhaXRTZXQsIExhdGNoV2FpdFNldExhdGNo UG9zLCBXTF9MQVRDSF9TRVQsIGxhdGNoKTsKLQotCWlmIChJc1VuZGVyUG9zdG1hc3RlcikK LQkJTW9kaWZ5V2FpdEV2ZW50KExhdGNoV2FpdFNldCwgTGF0Y2hXYWl0U2V0UG9zdG1hc3Rl ckRlYXRoUG9zLAotCQkJCQkJKHdha2VFdmVudHMgJiAoV0xfRVhJVF9PTl9QTV9ERUFUSCB8 IFdMX1BPU1RNQVNURVJfREVBVEgpKSwKLQkJCQkJCU5VTEwpOwotCi0JaWYgKFdhaXRFdmVu dFNldFdhaXQoTGF0Y2hXYWl0U2V0LAotCQkJCQkJICh3YWtlRXZlbnRzICYgV0xfVElNRU9V VCkgPyB0aW1lb3V0IDogLTEsCi0JCQkJCQkgJmV2ZW50LCAxLAotCQkJCQkJIHdhaXRfZXZl bnRfaW5mbykgPT0gMCkKLQkJcmV0dXJuIFdMX1RJTUVPVVQ7Ci0JZWxzZQotCQlyZXR1cm4g ZXZlbnQuZXZlbnRzOwotfQotCi0vKgotICogTGlrZSBXYWl0TGF0Y2gsIGJ1dCB3aXRoIGFu IGV4dHJhIHNvY2tldCBhcmd1bWVudCBmb3IgV0xfU09DS0VUXyoKLSAqIGNvbmRpdGlvbnMu Ci0gKgotICogV2hlbiB3YWl0aW5nIG9uIGEgc29ja2V0LCBFT0YgYW5kIGVycm9yIGNvbmRp dGlvbnMgYWx3YXlzIGNhdXNlIHRoZSBzb2NrZXQKLSAqIHRvIGJlIHJlcG9ydGVkIGFzIHJl YWRhYmxlL3dyaXRhYmxlL2Nvbm5lY3RlZCwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBkZWFs Ci0gKiB3aXRoIHRoZSBjb25kaXRpb24uCi0gKgotICogd2FrZUV2ZW50cyBtdXN0IGluY2x1 ZGUgZWl0aGVyIFdMX0VYSVRfT05fUE1fREVBVEggZm9yIGF1dG9tYXRpYyBleGl0Ci0gKiBp ZiB0aGUgcG9zdG1hc3RlciBkaWVzIG9yIFdMX1BPU1RNQVNURVJfREVBVEggZm9yIGEgZmxh ZyBzZXQgaW4gdGhlCi0gKiByZXR1cm4gdmFsdWUgaWYgdGhlIHBvc3RtYXN0ZXIgZGllcy4g IFRoZSBsYXR0ZXIgaXMgdXNlZnVsIGZvciByYXJlIGNhc2VzCi0gKiB3aGVyZSBzb21lIGJl aGF2aW9yIG90aGVyIHRoYW4gaW1tZWRpYXRlIGV4aXQgaXMgbmVlZGVkLgotICoKLSAqIE5C OiBUaGVzZSBkYXlzIHRoaXMgaXMganVzdCBhIHdyYXBwZXIgYXJvdW5kIHRoZSBXYWl0RXZl bnRTZXQgQVBJLiBXaGVuCi0gKiB1c2luZyBhIGxhdGNoIHZlcnkgZnJlcXVlbnRseSwgY29u c2lkZXIgY3JlYXRpbmcgYSBsb25nZXIgbGl2aW5nCi0gKiBXYWl0RXZlbnRTZXQgaW5zdGVh ZDsgdGhhdCdzIG1vcmUgZWZmaWNpZW50LgotICovCi1pbnQKLVdhaXRMYXRjaE9yU29ja2V0 KExhdGNoICpsYXRjaCwgaW50IHdha2VFdmVudHMsIHBnc29ja2V0IHNvY2ssCi0JCQkJICBs b25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCi17Ci0JaW50CQkJcmV0ID0g MDsKLQlpbnQJCQlyYzsKLQlXYWl0RXZlbnQJZXZlbnQ7Ci0JV2FpdEV2ZW50U2V0ICpzZXQg PSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIDMpOwotCi0JaWYg KHdha2VFdmVudHMgJiBXTF9USU1FT1VUKQotCQlBc3NlcnQodGltZW91dCA+PSAwKTsKLQll bHNlCi0JCXRpbWVvdXQgPSAtMTsKLQotCWlmICh3YWtlRXZlbnRzICYgV0xfTEFUQ0hfU0VU KQotCQlBZGRXYWl0RXZlbnRUb1NldChzZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NP Q0tFVCwKLQkJCQkJCSAgbGF0Y2gsIE5VTEwpOwotCi0JLyogUG9zdG1hc3Rlci1tYW5hZ2Vk IGNhbGxlcnMgbXVzdCBoYW5kbGUgcG9zdG1hc3RlciBkZWF0aCBzb21laG93LiAqLwotCUFz c2VydCghSXNVbmRlclBvc3RtYXN0ZXIgfHwKLQkJICAgKHdha2VFdmVudHMgJiBXTF9FWElU X09OX1BNX0RFQVRIKSB8fAotCQkgICAod2FrZUV2ZW50cyAmIFdMX1BPU1RNQVNURVJfREVB VEgpKTsKLQotCWlmICgod2FrZUV2ZW50cyAmIFdMX1BPU1RNQVNURVJfREVBVEgpICYmIElz VW5kZXJQb3N0bWFzdGVyKQotCQlBZGRXYWl0RXZlbnRUb1NldChzZXQsIFdMX1BPU1RNQVNU RVJfREVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJCQkgIE5VTEwsIE5VTEwpOwotCi0J aWYgKCh3YWtlRXZlbnRzICYgV0xfRVhJVF9PTl9QTV9ERUFUSCkgJiYgSXNVbmRlclBvc3Rt YXN0ZXIpCi0JCUFkZFdhaXRFdmVudFRvU2V0KHNldCwgV0xfRVhJVF9PTl9QTV9ERUFUSCwg UEdJTlZBTElEX1NPQ0tFVCwKLQkJCQkJCSAgTlVMTCwgTlVMTCk7Ci0KLQlpZiAod2FrZUV2 ZW50cyAmIFdMX1NPQ0tFVF9NQVNLKQotCXsKLQkJaW50CQkJZXY7Ci0KLQkJZXYgPSB3YWtl RXZlbnRzICYgV0xfU09DS0VUX01BU0s7Ci0JCUFkZFdhaXRFdmVudFRvU2V0KHNldCwgZXYs IHNvY2ssIE5VTEwsIE5VTEwpOwotCX0KLQotCXJjID0gV2FpdEV2ZW50U2V0V2FpdChzZXQs IHRpbWVvdXQsICZldmVudCwgMSwgd2FpdF9ldmVudF9pbmZvKTsKLQotCWlmIChyYyA9PSAw KQotCQlyZXQgfD0gV0xfVElNRU9VVDsKLQllbHNlCi0JewotCQlyZXQgfD0gZXZlbnQuZXZl bnRzICYgKFdMX0xBVENIX1NFVCB8Ci0JCQkJCQkJICAgV0xfUE9TVE1BU1RFUl9ERUFUSCB8 Ci0JCQkJCQkJICAgV0xfU09DS0VUX01BU0spOwotCX0KLQotCUZyZWVXYWl0RXZlbnRTZXQo c2V0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBTZXRzIGEgbGF0Y2ggYW5kIHdh a2VzIHVwIGFueW9uZSB3YWl0aW5nIG9uIGl0LgotICoKLSAqIFRoaXMgaXMgY2hlYXAgaWYg dGhlIGxhdGNoIGlzIGFscmVhZHkgc2V0LCBvdGhlcndpc2Ugbm90IHNvIG11Y2guCi0gKgot ICogTkI6IHdoZW4gY2FsbGluZyB0aGlzIGluIGEgc2lnbmFsIGhhbmRsZXIsIGJlIHN1cmUg dG8gc2F2ZSBhbmQgcmVzdG9yZQotICogZXJybm8gYXJvdW5kIGl0LiAgKFRoYXQncyBzdGFu ZGFyZCBwcmFjdGljZSBpbiBtb3N0IHNpZ25hbCBoYW5kbGVycywgb2YKLSAqIGNvdXJzZSwg YnV0IHdlIHVzZWQgdG8gb21pdCBpdCBpbiBoYW5kbGVycyB0aGF0IG9ubHkgc2V0IGEgZmxh Zy4pCi0gKgotICogTkI6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gY3JpdGljYWwg c2VjdGlvbnMgYW5kIHNpZ25hbCBoYW5kbGVycyBzbwotICogdGhyb3dpbmcgYW4gZXJyb3Ig aXMgbm90IGEgZ29vZCBpZGVhLgotICovCi12b2lkCi1TZXRMYXRjaChMYXRjaCAqbGF0Y2gp Ci17Ci0jaWZuZGVmIFdJTjMyCi0JcGlkX3QJCW93bmVyX3BpZDsKLSNlbHNlCi0JSEFORExF CQloYW5kbGU7Ci0jZW5kaWYKLQotCS8qCi0JICogVGhlIG1lbW9yeSBiYXJyaWVyIGhhcyB0 byBiZSBwbGFjZWQgaGVyZSB0byBlbnN1cmUgdGhhdCBhbnkgZmxhZwotCSAqIHZhcmlhYmxl cyBwb3NzaWJseSBjaGFuZ2VkIGJ5IHRoaXMgcHJvY2VzcyBoYXZlIGJlZW4gZmx1c2hlZCB0 byBtYWluCi0JICogbWVtb3J5LCBiZWZvcmUgd2UgY2hlY2svc2V0IGlzX3NldC4KLQkgKi8K LQlwZ19tZW1vcnlfYmFycmllcigpOwotCi0JLyogUXVpY2sgZXhpdCBpZiBhbHJlYWR5IHNl dCAqLwotCWlmIChsYXRjaC0+aXNfc2V0KQotCQlyZXR1cm47Ci0KLQlsYXRjaC0+aXNfc2V0 ID0gdHJ1ZTsKLQotCXBnX21lbW9yeV9iYXJyaWVyKCk7Ci0JaWYgKCFsYXRjaC0+bWF5YmVf c2xlZXBpbmcpCi0JCXJldHVybjsKLQotI2lmbmRlZiBXSU4zMgotCi0JLyoKLQkgKiBTZWUg aWYgYW55b25lJ3Mgd2FpdGluZyBmb3IgdGhlIGxhdGNoLiBJdCBjYW4gYmUgdGhlIGN1cnJl bnQgcHJvY2VzcyBpZgotCSAqIHdlJ3JlIGluIGEgc2lnbmFsIGhhbmRsZXIuIFdlIHVzZSB0 aGUgc2VsZi1waXBlIG9yIFNJR1VSRyB0byBvdXJzZWx2ZXMKLQkgKiB0byB3YWtlIHVwIFdh aXRFdmVudFNldFdhaXRCbG9jaygpIHdpdGhvdXQgcmFjZXMgaW4gdGhhdCBjYXNlLiBJZiBp dCdzCi0JICogYW5vdGhlciBwcm9jZXNzLCBzZW5kIGEgc2lnbmFsLgotCSAqCi0JICogRmV0 Y2ggb3duZXJfcGlkIG9ubHkgb25jZSwgaW4gY2FzZSB0aGUgbGF0Y2ggaXMgY29uY3VycmVu dGx5IGdldHRpbmcKLQkgKiBvd25lZCBvciBkaXNvd25lZC4gWFhYOiBUaGlzIGFzc3VtZXMg dGhhdCBwaWRfdCBpcyBhdG9taWMsIHdoaWNoIGlzbid0Ci0JICogZ3VhcmFudGVlZCB0byBi ZSB0cnVlISBJbiBwcmFjdGljZSwgdGhlIGVmZmVjdGl2ZSByYW5nZSBvZiBwaWRfdCBmaXRz Ci0JICogaW4gYSAzMiBiaXQgaW50ZWdlciwgYW5kIHNvIHNob3VsZCBiZSBhdG9taWMuIElu IHRoZSB3b3JzdCBjYXNlLCB3ZQotCSAqIG1pZ2h0IGVuZCB1cCBzaWduYWxpbmcgdGhlIHdy b25nIHByb2Nlc3MuIEV2ZW4gdGhlbiwgeW91J3JlIHZlcnkKLQkgKiB1bmx1Y2t5IGlmIGEg cHJvY2VzcyB3aXRoIHRoYXQgYm9ndXMgcGlkIGV4aXN0cyBhbmQgYmVsb25ncyB0bwotCSAq IFBvc3RncmVzOyBhbmQgUEcgZGF0YWJhc2UgcHJvY2Vzc2VzIHNob3VsZCBoYW5kbGUgZXhj ZXNzIFNJR1VTUjEKLQkgKiBpbnRlcnJ1cHRzIHdpdGhvdXQgYSBwcm9ibGVtIGFueWhvdy4K LQkgKgotCSAqIEFub3RoZXIgc29ydCBvZiByYWNlIGNvbmRpdGlvbiB0aGF0J3MgcG9zc2li bGUgaGVyZSBpcyBmb3IgYSBuZXcKLQkgKiBwcm9jZXNzIHRvIG93biB0aGUgbGF0Y2ggaW1t ZWRpYXRlbHkgYWZ0ZXIgd2UgbG9vaywgc28gd2UgZG9uJ3Qgc2lnbmFsCi0JICogaXQuIFRo aXMgaXMgb2theSBzbyBsb25nIGFzIGFsbCBjYWxsZXJzIG9mIFJlc2V0TGF0Y2gvV2FpdExh dGNoIGZvbGxvdwotCSAqIHRoZSBzdGFuZGFyZCBjb2RpbmcgY29udmVudGlvbiBvZiB3YWl0 aW5nIGF0IHRoZSBib3R0b20gb2YgdGhlaXIgbG9vcHMsCi0JICogbm90IHRoZSB0b3AsIHNv IHRoYXQgdGhleSdsbCBjb3JyZWN0bHkgcHJvY2VzcyBsYXRjaC1zZXR0aW5nIGV2ZW50cwot CSAqIHRoYXQgaGFwcGVuIGJlZm9yZSB0aGV5IGVudGVyIHRoZSBsb29wLgotCSAqLwotCW93 bmVyX3BpZCA9IGxhdGNoLT5vd25lcl9waWQ7Ci0JaWYgKG93bmVyX3BpZCA9PSAwKQotCQly ZXR1cm47Ci0JZWxzZSBpZiAob3duZXJfcGlkID09IE15UHJvY1BpZCkKLQkJV2FrZXVwTXlQ cm9jKCk7Ci0JZWxzZQotCQlXYWtldXBPdGhlclByb2Mob3duZXJfcGlkKTsKLQotI2Vsc2UK LQotCS8qCi0JICogU2VlIGlmIGFueW9uZSdzIHdhaXRpbmcgZm9yIHRoZSBsYXRjaC4gSXQg Y2FuIGJlIHRoZSBjdXJyZW50IHByb2Nlc3MgaWYKLQkgKiB3ZSdyZSBpbiBhIHNpZ25hbCBo YW5kbGVyLgotCSAqCi0JICogVXNlIGEgbG9jYWwgdmFyaWFibGUgaGVyZSBqdXN0IGluIGNh c2Ugc29tZWJvZHkgY2hhbmdlcyB0aGUgZXZlbnQgZmllbGQKLQkgKiBjb25jdXJyZW50bHkg KHdoaWNoIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbikuCi0JICovCi0JaGFuZGxlID0gbGF0 Y2gtPmV2ZW50OwotCWlmIChoYW5kbGUpCi0JewotCQlTZXRFdmVudChoYW5kbGUpOwotCi0J CS8qCi0JCSAqIE5vdGUgdGhhdCB3ZSBzaWxlbnRseSBpZ25vcmUgYW55IGVycm9ycy4gV2Ug bWlnaHQgYmUgaW4gYSBzaWduYWwKLQkJICogaGFuZGxlciBvciBvdGhlciBjcml0aWNhbCBw YXRoIHdoZXJlIGl0J3Mgbm90IHNhZmUgdG8gY2FsbCBlbG9nKCkuCi0JCSAqLwotCX0KLSNl bmRpZgotfQotCi0vKgotICogQ2xlYXIgdGhlIGxhdGNoLiBDYWxsaW5nIFdhaXRMYXRjaCBh ZnRlciB0aGlzIHdpbGwgc2xlZXAsIHVubGVzcwotICogdGhlIGxhdGNoIGlzIHNldCBhZ2Fp biBiZWZvcmUgdGhlIFdhaXRMYXRjaCBjYWxsLgotICovCi12b2lkCi1SZXNldExhdGNoKExh dGNoICpsYXRjaCkKLXsKLQkvKiBPbmx5IHRoZSBvd25lciBzaG91bGQgcmVzZXQgdGhlIGxh dGNoICovCi0JQXNzZXJ0KGxhdGNoLT5vd25lcl9waWQgPT0gTXlQcm9jUGlkKTsKLQlBc3Nl cnQobGF0Y2gtPm1heWJlX3NsZWVwaW5nID09IGZhbHNlKTsKLQotCWxhdGNoLT5pc19zZXQg PSBmYWxzZTsKLQotCS8qCi0JICogRW5zdXJlIHRoYXQgdGhlIHdyaXRlIHRvIGlzX3NldCBn ZXRzIGZsdXNoZWQgdG8gbWFpbiBtZW1vcnkgYmVmb3JlIHdlCi0JICogZXhhbWluZSBhbnkg ZmxhZyB2YXJpYWJsZXMuICBPdGhlcndpc2UgYSBjb25jdXJyZW50IFNldExhdGNoIG1pZ2h0 Ci0JICogZmFsc2VseSBjb25jbHVkZSB0aGF0IGl0IG5lZWRuJ3Qgc2lnbmFsIHVzLCBldmVu IHRob3VnaCB3ZSBoYXZlIG1pc3NlZAotCSAqIHNlZWluZyBzb21lIGZsYWcgdXBkYXRlcyB0 aGF0IFNldExhdGNoIHdhcyBzdXBwb3NlZCB0byBpbmZvcm0gdXMgb2YuCi0JICovCi0JcGdf bWVtb3J5X2JhcnJpZXIoKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvbWVzb24uYnVpbGQK aW5kZXggOWMxY2E5NTRkOWQuLjE0NzQ1YzA0ZTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9tZXNvbi5idWlsZApAQCAtNyw3ICs3LDYgQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVz KAogICAnZHNtX3JlZ2lzdHJ5LmMnLAogICAnaXBjLmMnLAogICAnaXBjaS5jJywKLSAgJ2xh dGNoLmMnLAogICAncG1zaWduYWwuYycsCiAgICdwcm9jYXJyYXkuYycsCiAgICdwcm9jc2ln bmFsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCA0MDMxMmRm MmNhYy4uYjM0ZTJjYjczMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5j CkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvY2F0YWxvZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlk LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIu aCIKQEAgLTM0NTAsMjcgKzM0NTEsMjcgQEAgR2V0Q29uZmxpY3RpbmdWaXJ0dWFsWElEcyhU cmFuc2FjdGlvbklkIGxpbWl0WG1pbiwgT2lkIGRiT2lkKQogICoKICAqIFRoZSAncGlkJyBp cyByZWR1bmRhbnQgd2l0aCAncHJvYycsIGJ1dCBpdCBhY3RzIGFzIGEgY3Jvc3MtY2hlY2sg dG8KICAqIGRldGVjdCBwcm9jZXNzIGhhZCBleGl0ZWQgYW5kIHRoZSBQR1BST0MgZW50cnkg d2FzIHJldXNlZCBmb3IgYSBkaWZmZXJlbnQKLSAqIHByb2Nlc3MuCisgKiBwcm9jZXNzLiBG SVhNRTogbG9zdCB0aGUgY3Jvc3NjaGVjay4gUmUtaW50cm9kdWNlIGEgc2Vzc2lvbiBJRCBv ciBzb21ldGhpbmc/CiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9jZXNzIHdhcyBz aWduYWxlZCwgb3IgZmFsc2UgaWYgbm90IGZvdW5kLgogICovCiBib29sCi1TaWduYWxSZWNv dmVyeUNvbmZsaWN0KFBHUFJPQyAqcHJvYywgcGlkX3QgcGlkLCBSZWNvdmVyeUNvbmZsaWN0 UmVhc29uIHJlYXNvbikKK1NpZ25hbFJlY292ZXJ5Q29uZmxpY3QoUEdQUk9DICpwcm9jLCBS ZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKIHsKIAlib29sCQlmb3VuZCA9IGZhbHNl OwogCiAJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19TSEFSRUQpOwogCiAJLyoK LQkgKiBLaWxsIHRoZSBwaWQgaWYgaXQncyBzdGlsbCBoZXJlLiBJZiBub3QsIHRoYXQncyB3 aGF0IHdlIHdhbnRlZCBzbworCSAqIEtpbGwgdGhlIHByb2Nlc3MgaWYgaXQncyBzdGlsbCBo ZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlIHdhbnRlZCBzbwogCSAqIGlnbm9yZSBhbnkg ZXJyb3JzLgogCSAqLwotCWlmIChwcm9jLT5waWQgPT0gcGlkKQorCWlmIChwcm9jLT5waWQg IT0gMCkKIAl7CiAJCSh2b2lkKSBwZ19hdG9taWNfZmV0Y2hfb3JfdTMyKCZwcm9jLT5wZW5k aW5nUmVjb3ZlcnlDb25mbGljdHMsICgxIDw8IHJlYXNvbikpOwogCiAJCS8qIHdha2UgdXAg dGhlIHByb2Nlc3MgKi8KLQkJKHZvaWQpIFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19S RUNPVkVSWV9DT05GTElDVCwgR2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSk7CisJCVNlbmRJ bnRlcnJ1cHQoSU5URVJSVVBUX1JFQ09WRVJZX0NPTkZMSUNULCBHZXROdW1iZXJGcm9tUEdQ cm9jKHByb2MpKTsKIAkJZm91bmQgPSB0cnVlOwogCX0KIApAQCAtMzUxMCwxMCArMzUxMSwx MCBAQCBTaWduYWxSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSUQoVmlydHVhbFRyYW5z YWN0aW9uSWQgdnhpZCwgUmVjb3ZlcnlDb25mbGljdAogCQkJCSh2b2lkKSBwZ19hdG9taWNf ZmV0Y2hfb3JfdTMyKCZwcm9jLT5wZW5kaW5nUmVjb3ZlcnlDb25mbGljdHMsICgxIDw8IHJl YXNvbikpOwogCiAJCQkJLyoKLQkJCQkgKiBLaWxsIHRoZSBwaWQgaWYgaXQncyBzdGlsbCBo ZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlCisJCQkJICogS2lsbCB0aGUgcHJvY2VzcyBp ZiBpdCdzIHN0aWxsIGhlcmUuIElmIG5vdCwgdGhhdCdzIHdoYXQgd2UKIAkJCQkgKiB3YW50 ZWQgc28gaWdub3JlIGFueSBlcnJvcnMuCiAJCQkJICovCi0JCQkJKHZvaWQpIFNlbmRQcm9j U2lnbmFsKHBpZCwgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCwgdnhpZC5wcm9jTnVtYmVy KTsKKwkJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9SRUNPVkVSWV9DT05GTElDVCwgdnhp ZC5wcm9jTnVtYmVyKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC0zNTQ1LDIxICszNTQ2 LDE4IEBAIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2UoT2lkIGRhdGFiYXNl aWQsIFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uCiAKIAkJaWYgKGRhdGFiYXNlaWQg PT0gSW52YWxpZE9pZCB8fCBwcm9jLT5kYXRhYmFzZUlkID09IGRhdGFiYXNlaWQpCiAJCXsK LQkJCVZpcnR1YWxUcmFuc2FjdGlvbklkIHByb2N2eGlkOwogCQkJcGlkX3QJCXBpZDsKIAot CQkJR0VUX1ZYSURfRlJPTV9QR1BST0MocHJvY3Z4aWQsICpwcm9jKTsKLQogCQkJcGlkID0g cHJvYy0+cGlkOwogCQkJaWYgKHBpZCAhPSAwKQogCQkJewogCQkJCSh2b2lkKSBwZ19hdG9t aWNfZmV0Y2hfb3JfdTMyKCZwcm9jLT5wZW5kaW5nUmVjb3ZlcnlDb25mbGljdHMsICgxIDw8 IHJlYXNvbikpOwogCiAJCQkJLyoKLQkJCQkgKiBLaWxsIHRoZSBwaWQgaWYgaXQncyBzdGls bCBoZXJlLiBJZiBub3QsIHRoYXQncyB3aGF0IHdlCisJCQkJICogS2lsbCB0aGUgcHJvY2Vz cyBpZiBpdCdzIHN0aWxsIGhlcmUuIElmIG5vdCwgdGhhdCdzIHdoYXQgd2UKIAkJCQkgKiB3 YW50ZWQgc28gaWdub3JlIGFueSBlcnJvcnMuCiAJCQkJICovCi0JCQkJKHZvaWQpIFNlbmRQ cm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCwgcHJvY3Z4aWQucHJv Y051bWJlcik7CisJCQkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfUkVDT1ZFUllfQ09ORkxJ Q1QsIEdldE51bWJlckZyb21QR1Byb2MocHJvYykpOwogCQkJfQogCQl9CiAJfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4IGQ0N2QxODBhMzJmLi4yMzViZjVk YzQwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMTksNiAr MTksNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19i aXR1dGlscy5oIgpAQCAtMjcsOCArMjgsOCBAQAogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dh bHNlbmRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFs LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2lu dmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCkBAIC0zNiwyOCArMzcsMjEgQEAK ICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCiAvKgotICogVGhlIFNJR1VTUjEgc2ln bmFsIGlzIG11bHRpcGxleGVkIHRvIHN1cHBvcnQgc2lnbmFsaW5nIG11bHRpcGxlIGV2ZW50 Ci0gKiB0eXBlcy4gVGhlIHNwZWNpZmljIHJlYXNvbiBpcyBjb21tdW5pY2F0ZWQgdmlhIGZs YWdzIGluIHNoYXJlZCBtZW1vcnkuCi0gKiBXZSBrZWVwIGEgYm9vbGVhbiBmbGFnIGZvciBl YWNoIHBvc3NpYmxlICJyZWFzb24iLCBzbyB0aGF0IGRpZmZlcmVudAotICogcmVhc29ucyBj YW4gYmUgc2lnbmFsZWQgdG8gYSBwcm9jZXNzIGNvbmN1cnJlbnRseS4gIChIb3dldmVyLCBp ZiB0aGUgc2FtZQotICogcmVhc29uIGlzIHNpZ25hbGVkIG1vcmUgdGhhbiBvbmNlIG5lYXJs eSBzaW11bHRhbmVvdXNseSwgdGhlIHByb2Nlc3MgbWF5Ci0gKiBvYnNlcnZlIGl0IG9ubHkg b25jZS4pCisgKiBTdGF0ZSBmb3IgdGhlIFByb2NTaWduYWxCYXJyaWVyIG1lY2hhbmlzbSBh bmQgcXVlcnkgY2FuY2VsbGF0aW9uLgogICoKLSAqIEVhY2ggcHJvY2VzcyB0aGF0IHdhbnRz IHRvIHJlY2VpdmUgc2lnbmFscyByZWdpc3RlcnMgaXRzIHByb2Nlc3MgSUQKLSAqIGluIHRo ZSBQcm9jU2lnbmFsU2xvdHMgYXJyYXkuIFRoZSBhcnJheSBpcyBpbmRleGVkIGJ5IFByb2NO dW1iZXIgdG8gbWFrZQotICogc2xvdCBhbGxvY2F0aW9uIHNpbXBsZSwgYW5kIHRvIGF2b2lk IGhhdmluZyB0byBzZWFyY2ggdGhlIGFycmF5IHdoZW4geW91Ci0gKiBrbm93IHRoZSBQcm9j TnVtYmVyIG9mIHRoZSBwcm9jZXNzIHlvdSdyZSBzaWduYWxpbmcuICAoV2UgZG8gc3VwcG9y dAotICogc2lnbmFsaW5nIHdpdGhvdXQgUHJvY051bWJlciwgYnV0IGl0J3MgYSBiaXQgbGVz cyBlZmZpY2llbnQuKQorICogRWFjaCBwcm9jZXNzIHRoYXQgd2FudHMgdG8gcGFydGljaXBh dGUgaW4gYmFycmllcnMgb3IgcXVlcnkgY2FuY2VsbGF0aW9uCisgKiByZWdpc3RlcnMgaXRz IHByb2Nlc3MgSUQgaW4gdGhlIFByb2NTaWduYWxTbG90cyBhcnJheS4gVGhlIGFycmF5IGlz IGluZGV4ZWQKKyAqIGJ5IFByb2NOdW1iZXIgdG8gbWFrZSBzbG90IGFsbG9jYXRpb24gc2lt cGxlLgogICoKICAqIFRoZSBmaWVsZHMgaW4gZWFjaCBzbG90IGFyZSBwcm90ZWN0ZWQgYnkg YSBzcGlubG9jaywgcHNzX211dGV4LiBwc3NfcGlkIGNhbgogICogYWxzbyBiZSByZWFkIHdp dGhvdXQgaG9sZGluZyB0aGUgc3BpbmxvY2ssIGFzIGEgcXVpY2sgcHJlbGltaW5hcnkgY2hl Y2sKICAqIHdoZW4gc2VhcmNoaW5nIGZvciBhIHBhcnRpY3VsYXIgUElEIGluIHRoZSBhcnJh eS4KICAqCi0gKiBwc3Nfc2lnbmFsRmxhZ3MgYXJlIGludGVuZGVkIHRvIGJlIHNldCBpbiBj YXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkIHRvCi0gKiBrZWVwIHRyYWNrIG9mIHdoZXRoZXIg b3Igbm90IHRoZSB0YXJnZXQgcHJvY2VzcyBoYXMgaGFuZGxlZCB0aGUgc2lnbmFsLAotICog YnV0IHNvbWV0aW1lcyB3ZSBuZWVkIGNvbmZpcm1hdGlvbiwgYXMgd2hlbiBtYWtpbmcgYSBn bG9iYWwgc3RhdGUgY2hhbmdlCi0gKiB0aGF0IGNhbm5vdCBiZSBjb25zaWRlcmVkIGNvbXBs ZXRlIHVudGlsIGFsbCBiYWNrZW5kcyBoYXZlIHRha2VuIG5vdGljZQotICogb2YgaXQuIEZv ciBzdWNoIHVzZSBjYXNlcywgd2Ugc2V0IGEgYml0IGluIHBzc19iYXJyaWVyQ2hlY2tNYXNr IGFuZCB0aGVuCisgKiBQbGFpbiBpbnRlcnJ1cHRzIGFyZSBpbnRlbmRlZCB0byBiZSBzZXQg aW4gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCB0bworICoga2VlcCB0cmFjayBvZiB3aGV0 aGVyIG9yIG5vdCB0aGUgdGFyZ2V0IHByb2Nlc3MgaGFzIGhhbmRsZWQgdGhlIHNpZ25hbCwg YnV0CisgKiBzb21ldGltZXMgd2UgbmVlZCBjb25maXJtYXRpb24sIGFzIHdoZW4gbWFraW5n IGEgZ2xvYmFsIHN0YXRlIGNoYW5nZSB0aGF0CisgKiBjYW5ub3QgYmUgY29uc2lkZXJlZCBj b21wbGV0ZSB1bnRpbCBhbGwgYmFja2VuZHMgaGF2ZSB0YWtlbiBub3RpY2Ugb2YKKyAqIGl0 LiBGb3Igc3VjaCB1c2UgY2FzZXMsIHdlIHNldCBhIGJpdCBpbiBwc3NfYmFycmllckNoZWNr TWFzayBhbmQgdGhlbgogICogaW5jcmVtZW50IHRoZSBjdXJyZW50ICJiYXJyaWVyIGdlbmVy YXRpb24iOyB3aGVuIHRoZSBuZXcgYmFycmllciBnZW5lcmF0aW9uCiAgKiAob3IgZ3JlYXRl cikgYXBwZWFycyBpbiB0aGUgcHNzX2JhcnJpZXJHZW5lcmF0aW9uIGZsYWcgb2YgZXZlcnkg cHJvY2VzcywKICAqIHdlIGtub3cgdGhhdCB0aGUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZl ZCBldmVyeXdoZXJlLgpAQCAtNjcsNyArNjEsNiBAQCB0eXBlZGVmIHN0cnVjdAogCXBnX2F0 b21pY191aW50MzIgcHNzX3BpZDsKIAlpbnQJCQlwc3NfY2FuY2VsX2tleV9sZW47IC8qIDAg bWVhbnMgbm8gY2FuY2VsbGF0aW9uIGlzIHBvc3NpYmxlICovCiAJdWludDgJCXBzc19jYW5j ZWxfa2V5W01BWF9DQU5DRUxfS0VZX0xFTkdUSF07Ci0Jdm9sYXRpbGUgc2lnX2F0b21pY190 IHBzc19zaWduYWxGbGFnc1tOVU1fUFJPQ1NJR05BTFNdOwogCXNsb2NrX3QJCXBzc19tdXRl eDsJCS8qIHByb3RlY3RzIHRoZSBhYm92ZSBmaWVsZHMgKi8KIAogCS8qIEJhcnJpZXItcmVs YXRlZCBmaWVsZHMgKG5vdCBwcm90ZWN0ZWQgYnkgcHNzX211dGV4KSAqLwpAQCAtMTA3LDcg KzEwMCw2IEBAIHN0cnVjdCBQcm9jU2lnbmFsSGVhZGVyCiBOT05fRVhFQ19TVEFUSUMgUHJv Y1NpZ25hbEhlYWRlciAqUHJvY1NpZ25hbCA9IE5VTEw7CiBzdGF0aWMgUHJvY1NpZ25hbFNs b3QgKk15UHJvY1NpZ25hbFNsb3QgPSBOVUxMOwogCi1zdGF0aWMgYm9vbCBDaGVja1Byb2NT aWduYWwoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pOwogc3RhdGljIHZvaWQgQ2xlYW51cFBy b2NTaWduYWxTdGF0ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgUmVz ZXRQcm9jU2lnbmFsQmFycmllckJpdHModWludDMyIGZsYWdzKTsKIApAQCAtMTUyLDcgKzE0 NCw2IEBAIFByb2NTaWduYWxTaG1lbUluaXQodm9pZCkKIAkJCVNwaW5Mb2NrSW5pdCgmc2xv dC0+cHNzX211dGV4KTsKIAkJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+cHNzX3BpZCwg MCk7CiAJCQlzbG90LT5wc3NfY2FuY2VsX2tleV9sZW4gPSAwOwotCQkJTWVtU2V0KHNsb3Qt PnBzc19zaWduYWxGbGFncywgMCwgc2l6ZW9mKHNsb3QtPnBzc19zaWduYWxGbGFncykpOwog CQkJcGdfYXRvbWljX2luaXRfdTY0KCZzbG90LT5wc3NfYmFycmllckdlbmVyYXRpb24sIFBH X1VJTlQ2NF9NQVgpOwogCQkJcGdfYXRvbWljX2luaXRfdTMyKCZzbG90LT5wc3NfYmFycmll ckNoZWNrTWFzaywgMCk7CiAJCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnNsb3QtPnBzc19i YXJyaWVyQ1YpOwpAQCAtMTgzLDkgKzE3NCw2IEBAIFByb2NTaWduYWxJbml0KGNvbnN0IHVp bnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2VsX2tleV9sZW4pCiAJLyogVmFsdWUgdXNlZCBm b3Igc2FuaXR5IGNoZWNrIGJlbG93ICovCiAJb2xkX3Bzc19waWQgPSBwZ19hdG9taWNfcmVh ZF91MzIoJnNsb3QtPnBzc19waWQpOwogCi0JLyogQ2xlYXIgb3V0IGFueSBsZWZ0b3ZlciBz aWduYWwgcmVhc29ucyAqLwotCU1lbVNldChzbG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAsIE5V TV9QUk9DU0lHTkFMUyAqIHNpemVvZihzaWdfYXRvbWljX3QpKTsKLQogCS8qCiAJICogSW5p dGlhbGl6ZSBiYXJyaWVyIHN0YXRlLiBTaW5jZSB3ZSdyZSBhIGJyYW5kLW5ldyBwcm9jZXNz LCB0aGVyZQogCSAqIHNob3VsZG4ndCBiZSBhbnkgbGVmdG92ZXIgYmFja2VuZC1wcml2YXRl IHN0YXRlIHRoYXQgbmVlZHMgdG8gYmUKQEAgLTIzNCw5ICsyMjIsMTAgQEAgQ2xlYW51cFBy b2NTaWduYWxTdGF0ZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpCiAJUHJvY1NpZ25hbFNsb3Qg KnNsb3QgPSBNeVByb2NTaWduYWxTbG90OwogCiAJLyoKLQkgKiBDbGVhciBNeVByb2NTaWdu YWxTbG90LCBzbyB0aGF0IGEgU0lHVVNSMSByZWNlaXZlZCBhZnRlciB0aGlzIHBvaW50Ci0J ICogd29uJ3QgdHJ5IHRvIGFjY2VzcyBpdCBhZnRlciBpdCdzIG5vIGxvbmdlciBvdXJzIChh bmQgcGVyaGFwcyBldmVuCi0JICogYWZ0ZXIgd2UndmUgdW5tYXBwZWQgdGhlIHNoYXJlZCBt ZW1vcnkgc2VnbWVudCkuCisJICogQ2xlYXIgTXlQcm9jU2lnbmFsU2xvdCwgc28gdGhhdCBp ZiBJTlRFUlJVUFRfQkFSUklFUiBpcyByZWNlaXZlZCBhZnRlcgorCSAqIHRoaXMgcG9pbnQs IFByb2Nlc3NQcm9jU2lnbmFsQmFycmllcigpIHdvbid0IHRyeSB0byBhY2Nlc3MgaXQgYWZ0 ZXIKKwkgKiBpdCdzIG5vIGxvbmdlciBvdXJzIChhbmQgcGVyaGFwcyBldmVuIGFmdGVyIHdl J3ZlIHVubWFwcGVkIHRoZSBzaGFyZWQKKwkgKiBtZW1vcnkgc2VnbWVudCkuCiAJICovCiAJ QXNzZXJ0KE15UHJvY1NpZ25hbFNsb3QgIT0gTlVMTCk7CiAJTXlQcm9jU2lnbmFsU2xvdCA9 IE5VTEw7CkBAIC0yNzEsNzMgKzI2MCw2IEBAIENsZWFudXBQcm9jU2lnbmFsU3RhdGUoaW50 IHN0YXR1cywgRGF0dW0gYXJnKQogCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZzbG90 LT5wc3NfYmFycmllckNWKTsKIH0KIAotLyoKLSAqIFNlbmRQcm9jU2lnbmFsCi0gKgkJU2Vu ZCBhIHNpZ25hbCB0byBhIFBvc3RncmVzIHByb2Nlc3MKLSAqCi0gKiBQcm92aWRpbmcgcHJv Y051bWJlciBpcyBvcHRpb25hbCwgYnV0IGl0IHdpbGwgc3BlZWQgdXAgdGhlIG9wZXJhdGlv bi4KLSAqCi0gKiBPbiBzdWNjZXNzIChhIHNpZ25hbCB3YXMgc2VudCksIHplcm8gaXMgcmV0 dXJuZWQuCi0gKiBPbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQsIGFuZCBlcnJubyBpcyBzZXQg KHR5cGljYWxseSB0byBFU1JDSCBvciBFUEVSTSkuCi0gKgotICogTm90IHRvIGJlIGNvbmZ1 c2VkIHdpdGggUHJvY1NlbmRTaWduYWwKLSAqLwotaW50Ci1TZW5kUHJvY1NpZ25hbChwaWRf dCBwaWQsIFByb2NTaWduYWxSZWFzb24gcmVhc29uLCBQcm9jTnVtYmVyIHByb2NOdW1iZXIp Ci17Ci0Jdm9sYXRpbGUgUHJvY1NpZ25hbFNsb3QgKnNsb3Q7Ci0KLQlpZiAocHJvY051bWJl ciAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQotCXsKLQkJQXNzZXJ0KHByb2NOdW1iZXIgPCBO dW1Qcm9jU2lnbmFsU2xvdHMpOwotCQlzbG90ID0gJlByb2NTaWduYWwtPnBzaF9zbG90W3By b2NOdW1iZXJdOwotCi0JCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+cHNzX211dGV4KTsKLQkJ aWYgKHBnX2F0b21pY19yZWFkX3UzMigmc2xvdC0+cHNzX3BpZCkgPT0gcGlkKQotCQl7Ci0J CQkvKiBBdG9taWNhbGx5IHNldCB0aGUgcHJvcGVyIGZsYWcgKi8KLQkJCXNsb3QtPnBzc19z aWduYWxGbGFnc1tyZWFzb25dID0gdHJ1ZTsKLQkJCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+ cHNzX211dGV4KTsKLQkJCS8qIFNlbmQgc2lnbmFsICovCi0JCQlyZXR1cm4ga2lsbChwaWQs IFNJR1VTUjEpOwotCQl9Ci0JCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+cHNzX211dGV4KTsK LQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogcHJvY051bWJlciBub3QgcHJvdmlkZWQsIHNv IHNlYXJjaCB0aGUgYXJyYXkgdXNpbmcgcGlkLiAgV2Ugc2VhcmNoCi0JCSAqIHRoZSBhcnJh eSBiYWNrIHRvIGZyb250IHNvIGFzIHRvIHJlZHVjZSBzZWFyY2ggb3ZlcmhlYWQuICBQYXNz aW5nCi0JCSAqIElOVkFMSURfUFJPQ19OVU1CRVIgbWVhbnMgdGhhdCB0aGUgdGFyZ2V0IGlz IG1vc3QgbGlrZWx5IGFuCi0JCSAqIGF1eGlsaWFyeSBwcm9jZXNzLCB3aGljaCB3aWxsIGhh dmUgYSBzbG90IG5lYXIgdGhlIGVuZCBvZiB0aGUKLQkJICogYXJyYXkuCi0JCSAqLwotCQlp bnQJCQlpOwotCi0JCWZvciAoaSA9IE51bVByb2NTaWduYWxTbG90cyAtIDE7IGkgPj0gMDsg aS0tKQotCQl7Ci0JCQlzbG90ID0gJlByb2NTaWduYWwtPnBzaF9zbG90W2ldOwotCi0JCQlp ZiAocGdfYXRvbWljX3JlYWRfdTMyKCZzbG90LT5wc3NfcGlkKSA9PSBwaWQpCi0JCQl7Ci0J CQkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5wc3NfbXV0ZXgpOwotCQkJCWlmIChwZ19hdG9t aWNfcmVhZF91MzIoJnNsb3QtPnBzc19waWQpID09IHBpZCkKLQkJCQl7Ci0JCQkJCS8qIEF0 b21pY2FsbHkgc2V0IHRoZSBwcm9wZXIgZmxhZyAqLwotCQkJCQlzbG90LT5wc3Nfc2lnbmFs RmxhZ3NbcmVhc29uXSA9IHRydWU7Ci0JCQkJCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+cHNz X211dGV4KTsKLQkJCQkJLyogU2VuZCBzaWduYWwgKi8KLQkJCQkJcmV0dXJuIGtpbGwocGlk LCBTSUdVU1IxKTsKLQkJCQl9Ci0JCQkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5wc3NfbXV0 ZXgpOwotCQkJfQotCQl9Ci0JfQotCi0JZXJybm8gPSBFU1JDSDsKLQlyZXR1cm4gLTE7Ci19 Ci0KIC8qCiAgKiBFbWl0UHJvY1NpZ25hbEJhcnJpZXIKICAqCQlTZW5kIGEgc2lnbmFsIHRv IGV2ZXJ5IFBvc3RncmVzIHByb2Nlc3MKQEAgLTM4Miw4ICszMDQsOCBAQCBFbWl0UHJvY1Np Z25hbEJhcnJpZXIoUHJvY1NpZ25hbEJhcnJpZXJUeXBlIHR5cGUpCiAJCXBnX2F0b21pY19h ZGRfZmV0Y2hfdTY0KCZQcm9jU2lnbmFsLT5wc2hfYmFycmllckdlbmVyYXRpb24sIDEpOwog CiAJLyoKLQkgKiBTaWduYWwgYWxsIHRoZSBwcm9jZXNzZXMsIHNvIHRoYXQgdGhleSB1cGRh dGUgdGhlaXIgYWR2ZXJ0aXNlZCBiYXJyaWVyCi0JICogZ2VuZXJhdGlvbi4KKwkgKiBTZW5k IGFuIGludGVycnVwdCB0byBhbGwgdGhlIHByb2Nlc3Nlcywgc28gdGhhdCB0aGV5IHVwZGF0 ZSB0aGVpcgorCSAqIGFkdmVydGlzZWQgYmFycmllciBnZW5lcmF0aW9uLgogCSAqCiAJICog Q29uY3VycmVuY3kgaXMgbm90IGEgcHJvYmxlbSBoZXJlLiBCYWNrZW5kcyB0aGF0IGhhdmUg ZXhpdGVkIGRvbid0CiAJICogbWF0dGVyLCBhbmQgbmV3IGJhY2tlbmRzIHRoYXQgaGF2ZSBq b2luZWQgc2luY2Ugd2UgZW50ZXJlZCB0aGlzCkBAIC0zOTQsMjUgKzMxNiwxMiBAQCBFbWl0 UHJvY1NpZ25hbEJhcnJpZXIoUHJvY1NpZ25hbEJhcnJpZXJUeXBlIHR5cGUpCiAJICogYmFj a2VuZHMgdGhhdCBuZWVkIHRvIHVwZGF0ZSBzdGF0ZSAtIGJ1dCB0aGV5IHdvbid0IGFjdHVh bGx5IG5lZWQgdG8KIAkgKiBjaGFuZ2UgYW55IHN0YXRlLgogCSAqLwotCWZvciAoaW50IGkg PSBOdW1Qcm9jU2lnbmFsU2xvdHMgLSAxOyBpID49IDA7IGktLSkKKwlmb3IgKFByb2NOdW1i ZXIgcGdwcm9jbm8gPSAwOyBwZ3Byb2NubyA8IE51bVByb2NTaWduYWxTbG90czsgcGdwcm9j bm8rKykKIAl7Ci0JCXZvbGF0aWxlIFByb2NTaWduYWxTbG90ICpzbG90ID0gJlByb2NTaWdu YWwtPnBzaF9zbG90W2ldOwotCQlwaWRfdAkJcGlkID0gcGdfYXRvbWljX3JlYWRfdTMyKCZz bG90LT5wc3NfcGlkKTsKLQotCQlpZiAocGlkICE9IDApCi0JCXsKLQkJCVNwaW5Mb2NrQWNx dWlyZSgmc2xvdC0+cHNzX211dGV4KTsKLQkJCXBpZCA9IHBnX2F0b21pY19yZWFkX3UzMigm c2xvdC0+cHNzX3BpZCk7Ci0JCQlpZiAocGlkICE9IDApCi0JCQl7Ci0JCQkJLyogc2VlIFNl bmRQcm9jU2lnbmFsIGZvciBkZXRhaWxzICovCi0JCQkJc2xvdC0+cHNzX3NpZ25hbEZsYWdz W1BST0NTSUdfQkFSUklFUl0gPSB0cnVlOwotCQkJCVNwaW5Mb2NrUmVsZWFzZSgmc2xvdC0+ cHNzX211dGV4KTsKLQkJCQlraWxsKHBpZCwgU0lHVVNSMSk7Ci0JCQl9Ci0JCQllbHNlCi0J CQkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5wc3NfbXV0ZXgpOwotCQl9CisJCWlmIChwZ3By b2NubyA9PSBNeVByb2NOdW1iZXIpCisJCQlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfQkFS UklFUik7CisJCWVsc2UKKwkJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX0JBUlJJRVIsIHBn cHJvY25vKTsKIAl9CiAKIAlyZXR1cm4gZ2VuZXJhdGlvbjsKQEAgLTQ3MiwyMyArMzgxLDYg QEAgV2FpdEZvclByb2NTaWduYWxCYXJyaWVyKHVpbnQ2NCBnZW5lcmF0aW9uKQogCXBnX21l bW9yeV9iYXJyaWVyKCk7CiB9CiAKLS8qCi0gKiBIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRl cnJ1cHQgaW5kaWNhdGluZyBhIGdsb2JhbCBiYXJyaWVyIGV2ZW50LgotICoKLSAqIEFsbCB0 aGUgYWN0dWFsIHdvcmsgaXMgZGVmZXJyZWQgdG8gUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVy KCksIGJlY2F1c2Ugd2UKLSAqIGNhbm5vdCBzYWZlbHkgYWNjZXNzIHRoZSBiYXJyaWVyIGdl bmVyYXRpb24gaW5zaWRlIHRoZSBzaWduYWwgaGFuZGxlciBhcwotICogNjRiaXQgYXRvbWlj cyBtaWdodCB1c2Ugc3BpbmxvY2sgYmFzZWQgZW11bGF0aW9uLCBldmVuIGZvciByZWFkcy4g QXMgdGhpcwotICogcm91dGluZSBvbmx5IGdldHMgY2FsbGVkIHdoZW4gUFJPQ1NJR19CQVJS SUVSIGlzIHNlbnQgdGhhdCB3b24ndCBjYXVzZSBhCi0gKiBsb3Qgb2YgdW5uZWNlc3Nhcnkg d29yay4KLSAqLwotc3RhdGljIHZvaWQKLUhhbmRsZVByb2NTaWduYWxCYXJyaWVySW50ZXJy dXB0KHZvaWQpCi17Ci0JSW50ZXJydXB0UGVuZGluZyA9IHRydWU7Ci0JUHJvY1NpZ25hbEJh cnJpZXJQZW5kaW5nID0gdHJ1ZTsKLQkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2ln bmFsX3NpZ3VzcjFfaGFuZGxlciAqLwotfQotCiAvKgogICogUGVyZm9ybSBnbG9iYWwgYmFy cmllciByZWxhdGVkIGludGVycnVwdCBjaGVja2luZy4KICAqCkBAIC01MDQsMTIgKzM5Niw4 IEBAIFByb2Nlc3NQcm9jU2lnbmFsQmFycmllcih2b2lkKQogCXVpbnQ2NAkJc2hhcmVkX2dl bjsKIAl2b2xhdGlsZSB1aW50MzIgZmxhZ3M7CiAKLQlBc3NlcnQoTXlQcm9jU2lnbmFsU2xv dCk7Ci0KLQkvKiBFeGl0IHF1aWNrbHkgaWYgdGhlcmUncyBubyB3b3JrIHRvIGRvLiAqLwot CWlmICghUHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nKQorCWlmIChNeVByb2NTaWduYWxTbG90 ID09IE5VTEwpCiAJCXJldHVybjsKLQlQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxz ZTsKIAogCS8qCiAJICogSXQncyBub3QgdW5saWtlbHkgdG8gcHJvY2VzcyBtdWx0aXBsZSBi YXJyaWVycyBhdCBvbmNlLCBiZWZvcmUgdGhlCkBAIC02NDEsNjggKzUyOSw3IEBAIHN0YXRp YyB2b2lkCiBSZXNldFByb2NTaWduYWxCYXJyaWVyQml0cyh1aW50MzIgZmxhZ3MpCiB7CiAJ cGdfYXRvbWljX2ZldGNoX29yX3UzMigmTXlQcm9jU2lnbmFsU2xvdC0+cHNzX2JhcnJpZXJD aGVja01hc2ssIGZsYWdzKTsKLQlQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSB0cnVlOwot CUludGVycnVwdFBlbmRpbmcgPSB0cnVlOwotfQotCi0vKgotICogQ2hlY2tQcm9jU2lnbmFs IC0gY2hlY2sgdG8gc2VlIGlmIGEgcGFydGljdWxhciByZWFzb24gaGFzIGJlZW4KLSAqIHNp Z25hbGVkLCBhbmQgY2xlYXIgdGhlIHNpZ25hbCBmbGFnLiAgU2hvdWxkIGJlIGNhbGxlZCBh ZnRlciByZWNlaXZpbmcKLSAqIFNJR1VTUjEuCi0gKi8KLXN0YXRpYyBib29sCi1DaGVja1By b2NTaWduYWwoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCi17Ci0Jdm9sYXRpbGUgUHJvY1Np Z25hbFNsb3QgKnNsb3QgPSBNeVByb2NTaWduYWxTbG90OwotCi0JaWYgKHNsb3QgIT0gTlVM TCkKLQl7Ci0JCS8qCi0JCSAqIENhcmVmdWwgaGVyZSAtLS0gZG9uJ3QgY2xlYXIgZmxhZyBp ZiB3ZSBoYXZlbid0IHNlZW4gaXQgc2V0LgotCQkgKiBwc3Nfc2lnbmFsRmxhZ3MgaXMgb2Yg dHlwZSAidm9sYXRpbGUgc2lnX2F0b21pY190IiB0byBhbGxvdyB1cyB0bwotCQkgKiByZWFk IGl0IGhlcmUgc2FmZWx5LCB3aXRob3V0IGhvbGRpbmcgdGhlIHNwaW5sb2NrLgotCQkgKi8K LQkJaWYgKHNsb3QtPnBzc19zaWduYWxGbGFnc1tyZWFzb25dKQotCQl7Ci0JCQlzbG90LT5w c3Nfc2lnbmFsRmxhZ3NbcmVhc29uXSA9IGZhbHNlOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0K LQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBwcm9jc2lnbmFsX3NpZ3VzcjFf aGFuZGxlciAtIGhhbmRsZSBTSUdVU1IxIHNpZ25hbC4KLSAqLwotdm9pZAotcHJvY3NpZ25h bF9zaWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpCi17Ci0JaWYgKENoZWNrUHJvY1NpZ25h bChQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBUKSkKLQkJSGFuZGxlQ2F0Y2h1cEludGVycnVw dCgpOwotCi0JaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQp KQotCQlIYW5kbGVOb3RpZnlJbnRlcnJ1cHQoKTsKLQotCWlmIChDaGVja1Byb2NTaWduYWwo UFJPQ1NJR19QQVJBTExFTF9NRVNTQUdFKSkKLQkJSGFuZGxlUGFyYWxsZWxNZXNzYWdlSW50 ZXJydXB0KCk7Ci0KLQlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfV0FMU05EX0lOSVRf U1RPUFBJTkcpKQotCQlIYW5kbGVXYWxTbmRJbml0U3RvcHBpbmcoKTsKLQotCWlmIChDaGVj a1Byb2NTaWduYWwoUFJPQ1NJR19CQVJSSUVSKSkKLQkJSGFuZGxlUHJvY1NpZ25hbEJhcnJp ZXJJbnRlcnJ1cHQoKTsKLQotCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVN T1JZX0NPTlRFWFQpKQotCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7Ci0K LQlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSkp Ci0JCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KCk7Ci0KLQlpZiAoQ2hl Y2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1QpKQotCQlIYW5kbGVSZWNv dmVyeUNvbmZsaWN0SW50ZXJydXB0KCk7Ci0KLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlz ZUludGVycnVwdChJTlRFUlJVUFRfQkFSUklFUik7CiB9CiAKIC8qCkBAIC03NjEsNiArNTg4 LDEwIEBAIFNlbmRDYW5jZWxSZXF1ZXN0KGludCBiYWNrZW5kUElELCBjb25zdCB1aW50OCAq Y2FuY2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVuKQogCQkJCS8qCiAJCQkJICogSWYgd2Ug aGF2ZSBzZXRzaWQoKSwgc2lnbmFsIHRoZSBiYWNrZW5kJ3Mgd2hvbGUgcHJvY2VzcwogCQkJ CSAqIGdyb3VwCisJCQkJICoKKwkJCQkgKiBGSVhNRTogY291bGQgd2Ugc2VuZCBJTlRFUlJV UFRfUVVFUllfQ0FOQ0VMIGhlcmUgZGlyZWN0bHk/CisJCQkJICogV2UgZG9uJ3QgaGF2ZSBh IFBHUFJPQyBlbnRyeSB5ZXQsIGJ1dCB0aGUgdGFyZ2V0IGJhY2tlbmQKKwkJCQkgKiBwcmVz dW1hYmx5IGRvZXMuCiAJCQkJICovCiAjaWZkZWYgSEFWRV9TRVRTSUQKIAkJCQlraWxsKC1i YWNrZW5kUElELCBTSUdJTlQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2htX21xLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1fbXEuYwppbmRleCA3 ZTlmYmMwMDcwNS4uZDAwZTRhZjQ1ZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3NobV9tcS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobV9tcS5j CkBAIC00LDcgKzQsNyBAQAogICoJICBzaW5nbGUtcmVhZGVyLCBzaW5nbGUtd3JpdGVyIHNo YXJlZCBtZW1vcnkgbWVzc2FnZSBxdWV1ZQogICoKICAqIEJvdGggdGhlIHNlbmRlciBhbmQg dGhlIHJlY2VpdmVyIG11c3QgaGF2ZSBhIFBHUFJPQzsgdGhlaXIgcmVzcGVjdGl2ZQotICog cHJvY2VzcyBsYXRjaGVzIGFyZSB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24uICBPbmx5IHRo ZSBzZW5kZXIgbWF5IHNlbmQsCisgKiBwcm9jZXNzIGludGVycnVwdHMgYXJlIHVzZWQgZm9y IHN5bmNocm9uaXphdGlvbi4gIE9ubHkgdGhlIHNlbmRlciBtYXkgc2VuZCwKICAqIGFuZCBv bmx5IHRoZSByZWNlaXZlciBtYXkgcmVjZWl2ZS4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gYWxs b3cgYSB1c2VyCiAgKiBiYWNrZW5kIHRvIGNvbW11bmljYXRlIHdpdGggd29ya2VyIGJhY2tl bmRzIHRoYXQgaXQgaGFzIHJlZ2lzdGVyZWQuCiAgKgpAQCAtMTgsNiArMTgsNyBAQAogCiAj aW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJw b3J0L3BnX2JpdHV0aWxzLmgiCkBAIC00NSwxMCArNDYsMTEgQEAKICAqCiAgKiBtcV9kZXRh Y2hlZCBuZWVkcyBubyBsb2NraW5nLiAgSXQgY2FuIGJlIHNldCBieSBlaXRoZXIgdGhlIHNl bmRlciBvciB0aGUKICAqIHJlY2VpdmVyLCBidXQgb25seSBldmVyIGZyb20gZmFsc2UgdG8g dHJ1ZSwgc28gcmVkdW5kYW50IHdyaXRlcyBkb24ndAotICogbWF0dGVyLiAgSXQgaXMgaW1w b3J0YW50IHRoYXQgaWYgd2Ugc2V0IG1xX2RldGFjaGVkIGFuZCB0aGVuIHNldCB0aGUKLSAq IGNvdW50ZXJwYXJ0eSdzIGxhdGNoLCB0aGUgY291bnRlcnBhcnR5IG11c3QgYmUgY2VydGFp biB0byBzZWUgdGhlIGNoYW5nZQotICogYWZ0ZXIgd2FraW5nIHVwLiAgU2luY2UgU2V0TGF0 Y2ggYmVnaW5zIHdpdGggYSBtZW1vcnkgYmFycmllciBhbmQgUmVzZXRMYXRjaAotICogZW5k cyB3aXRoIG9uZSwgdGhpcyBzaG91bGQgYmUgT0suCisgKiBtYXR0ZXIuICBJdCBpcyBpbXBv cnRhbnQgdGhhdCBpZiB3ZSBzZXQgbXFfZGV0YWNoZWQgYW5kIHRoZW4gc2VuZCB0aGUKKyAq IGludGVycnVwdCB0byB0aGUgY291bnRlcnBhcnR5LCB0aGUgY291bnRlcnBhcnR5IG11c3Qg YmUgY2VydGFpbiB0byBzZWUgdGhlCisgKiBjaGFuZ2UgYWZ0ZXIgd2FraW5nIHVwLiAgU2lu Y2UgU2VuZEludGVycnVwdCBiZWdpbnMgd2l0aCBhIG1lbW9yeSBiYXJyaWVyCisgKiBhbmQg Q2xlYXJJbnRlcnJ1cHQgZW5kcyB3aXRoIG9uZSwgdGhpcyBzaG91bGQgYmUgT0suCisgKiBY WFg6IE5vIGV4cGxpY2l0IG1lbW9yeSBiYXJyaWVycyBpbiBTZW5kSW50ZXJydXB0L0NsZWFy SW50ZXJydXB0LCBkbyB3ZSBuZWVkIHRvIGFkZCBzb21lPwogICoKICAqIG1xX3Jpbmdfc2l6 ZSBhbmQgbXFfcmluZ19vZmZzZXQgbmV2ZXIgY2hhbmdlIGFmdGVyIGluaXRpYWxpemF0aW9u LCBhbmQKICAqIGNhbiB0aGVyZWZvcmUgYmUgcmVhZCB3aXRob3V0IHRoZSBsb2NrLgpAQCAt MTEzLDcgKzExNSw3IEBAIHN0cnVjdCBzaG1fbXEKICAqIHlldCB1cGRhdGVkIGluIHRoZSBz aGFyZWQgbWVtb3J5LiAgV2Ugd2lsbCBub3QgdXBkYXRlIGl0IHVudGlsIHRoZSB3cml0dGVu CiAgKiBkYXRhIGlzIDEvNHRoIG9mIHRoZSByaW5nIHNpemUgb3IgdGhlIHR1cGxlIHF1ZXVl IGlzIGZ1bGwuICBUaGlzIHdpbGwKICAqIHByZXZlbnQgZnJlcXVlbnQgQ1BVIGNhY2hlIG1p c3NlcywgYW5kIGl0IHdpbGwgYWxzbyBhdm9pZCBmcmVxdWVudAotICogU2V0TGF0Y2goKSBj YWxscywgd2hpY2ggYXJlIHF1aXRlIGV4cGVuc2l2ZS4KKyAqIFNlbmRJbnRlcnJ1cHQoKSBj YWxscywgd2hpY2ggYXJlIHF1aXRlIGV4cGVuc2l2ZS4KICAqCiAgKiBtcWhfcGFydGlhbF9i eXRlcywgbXFoX2V4cGVjdGVkX2J5dGVzLCBhbmQgbXFoX2xlbmd0aF93b3JkX2NvbXBsZXRl CiAgKiBhcmUgdXNlZCB0byB0cmFjayB0aGUgc3RhdGUgb2Ygbm9uLWJsb2NraW5nIG9wZXJh dGlvbnMuICBXaGVuIHRoZSBjYWxsZXIKQEAgLTIxNSw3ICsyMTcsNyBAQCBzaG1fbXFfc2V0 X3JlY2VpdmVyKHNobV9tcSAqbXEsIFBHUFJPQyAqcHJvYykKIAlTcGluTG9ja1JlbGVhc2Uo Jm1xLT5tcV9tdXRleCk7CiAKIAlpZiAoc2VuZGVyICE9IE5VTEwpCi0JCVNldExhdGNoKCZz ZW5kZXItPnByb2NMYXRjaCk7CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FL RVVQLCBHZXROdW1iZXJGcm9tUEdQcm9jKHNlbmRlcikpOwogfQogCiAvKgpAQCAtMjMzLDcg KzIzNSw3IEBAIHNobV9tcV9zZXRfc2VuZGVyKHNobV9tcSAqbXEsIFBHUFJPQyAqcHJvYykK IAlTcGluTG9ja1JlbGVhc2UoJm1xLT5tcV9tdXRleCk7CiAKIAlpZiAocmVjZWl2ZXIgIT0g TlVMTCkKLQkJU2V0TGF0Y2goJnJlY2VpdmVyLT5wcm9jTGF0Y2gpOworCQlTZW5kSW50ZXJy dXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgR2V0TnVtYmVyRnJvbVBHUHJvYyhyZWNlaXZl cikpOwogfQogCiAvKgpAQCAtMzQyLDE2ICszNDQsMTUgQEAgc2htX21xX3NlbmQoc2htX21x X2hhbmRsZSAqbXFoLCBTaXplIG5ieXRlcywgY29uc3Qgdm9pZCAqZGF0YSwgYm9vbCBub3dh aXQsCiAgKiBXcml0ZSBhIG1lc3NhZ2UgaW50byBhIHNoYXJlZCBtZXNzYWdlIHF1ZXVlLCBn YXRoZXJlZCBmcm9tIG11bHRpcGxlCiAgKiBhZGRyZXNzZXMuCiAgKgotICogV2hlbiBub3dh aXQgPSBmYWxzZSwgd2UnbGwgd2FpdCBvbiBvdXIgcHJvY2VzcyBsYXRjaCB3aGVuIHRoZSBy aW5nIGJ1ZmZlcgotICogZmlsbHMgdXAsIGFuZCB0aGVuIGNvbnRpbnVlIHdyaXRpbmcgb25j ZSB0aGUgcmVjZWl2ZXIgaGFzIGRyYWluZWQgc29tZSBkYXRhLgotICogVGhlIHByb2Nlc3Mg bGF0Y2ggaXMgcmVzZXQgYWZ0ZXIgZWFjaCB3YWl0LgorICogV2hlbiBub3dhaXQgPSBmYWxz ZSwgd2UnbGwgd2FpdCB3aGVuIHRoZSByaW5nIGJ1ZmZlciBmaWxscyB1cCwgYW5kIHRoZW4K KyAqIGNvbnRpbnVlIHdyaXRpbmcgb25jZSB0aGUgcmVjZWl2ZXIgaGFzIGRyYWluZWQgc29t ZSBkYXRhLgogICoKLSAqIFdoZW4gbm93YWl0ID0gdHJ1ZSwgd2UgZG8gbm90IG1hbmlwdWxh dGUgdGhlIHN0YXRlIG9mIHRoZSBwcm9jZXNzIGxhdGNoOwotICogaW5zdGVhZCwgaWYgdGhl IGJ1ZmZlciBiZWNvbWVzIGZ1bGwsIHdlIHJldHVybiBTSE1fTVFfV09VTERfQkxPQ0suICBJ bgotICogdGhpcyBjYXNlLCB0aGUgY2FsbGVyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24g YWdhaW4sIHdpdGggdGhlIHNhbWUKLSAqIGFyZ3VtZW50cywgZWFjaCB0aW1lIHRoZSBwcm9j ZXNzIGxhdGNoIGlzIHNldC4gIChPbmNlIGJlZ3VuLCB0aGUgc2VuZGluZwotICogb2YgYSBt ZXNzYWdlIGNhbm5vdCBiZSBhYm9ydGVkIGV4Y2VwdCBieSBkZXRhY2hpbmcgZnJvbSB0aGUg cXVldWU7IGNoYW5naW5nCi0gKiB0aGUgbGVuZ3RoIG9yIHBheWxvYWQgd2lsbCBjb3JydXB0 IHRoZSBxdWV1ZS4pCisgKiBXaGVuIG5vd2FpdCA9IHRydWUsIGlmIHRoZSBidWZmZXIgYmVj b21lcyBmdWxsLCB3ZSByZXR1cm4KKyAqIFNITV9NUV9XT1VMRF9CTE9DSy4gIEluIHRoaXMg Y2FzZSwgdGhlIGNhbGxlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uCisgKiBhZ2Fpbiwg d2l0aCB0aGUgc2FtZSBhcmd1bWVudHMsIGVhY2ggdGltZSB0aGUgSU5URVJSVVBUX1dBSVRf V0FLRVVQCisgKiBpbnRlcnJ1cHQgaXMgc2V0LiAgKE9uY2UgYmVndW4sIHRoZSBzZW5kaW5n IG9mIGEgbWVzc2FnZSBjYW5ub3QgYmUgYWJvcnRlZAorICogZXhjZXB0IGJ5IGRldGFjaGlu ZyBmcm9tIHRoZSBxdWV1ZTsgY2hhbmdpbmcgdGhlIGxlbmd0aCBvciBwYXlsb2FkIHdpbGwK KyAqIGNvcnJ1cHQgdGhlIHF1ZXVlLikKICAqCiAgKiBXaGVuIGZvcmNlX2ZsdXNoID0gdHJ1 ZSwgd2UgaW1tZWRpYXRlbHkgdXBkYXRlIHRoZSBzaG1fbXEncyBtcV9ieXRlc193cml0dGVu CiAgKiBhbmQgbm90aWZ5IHRoZSByZWNlaXZlciAoaWYgaXQgaXMgYWxyZWFkeSBhdHRhY2hl ZCkuICBPdGhlcndpc2UsIHdlIGRvbid0CkBAIC01NDAsNyArNTQxLDcgQEAgc2htX21xX3Nl bmR2KHNobV9tcV9oYW5kbGUgKm1xaCwgc2htX21xX2lvdmVjICppb3YsIGludCBpb3ZjbnQs IGJvb2wgbm93YWl0LAogCXsKIAkJc2htX21xX2luY19ieXRlc193cml0dGVuKG1xLCBtcWgt Pm1xaF9zZW5kX3BlbmRpbmcpOwogCQlpZiAocmVjZWl2ZXIgIT0gTlVMTCkKLQkJCVNldExh dGNoKCZyZWNlaXZlci0+cHJvY0xhdGNoKTsKKwkJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBU X1dBSVRfV0FLRVVQLCBHZXROdW1iZXJGcm9tUEdQcm9jKHJlY2VpdmVyKSk7CiAJCW1xaC0+ bXFoX3NlbmRfcGVuZGluZyA9IDA7CiAJfQogCkBAIC01NTgsMTYgKzU1OSwxNSBAQCBzaG1f bXFfc2VuZHYoc2htX21xX2hhbmRsZSAqbXFoLCBzaG1fbXFfaW92ZWMgKmlvdiwgaW50IGlv dmNudCwgYm9vbCBub3dhaXQsCiAgKiB3aGlsZSBzdGlsbCBhbGxvd2luZyBsb25nZXIgbWVz c2FnZXMuICBJbiBlaXRoZXIgY2FzZSwgdGhlIHJldHVybiB2YWx1ZQogICogcmVtYWlucyB2 YWxpZCB1bnRpbCB0aGUgbmV4dCByZWNlaXZlIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgb24g dGhlIHF1ZXVlLgogICoKLSAqIFdoZW4gbm93YWl0ID0gZmFsc2UsIHdlJ2xsIHdhaXQgb24g b3VyIHByb2Nlc3MgbGF0Y2ggd2hlbiB0aGUgcmluZyBidWZmZXIKLSAqIGlzIGVtcHR5IGFu ZCB3ZSBoYXZlIG5vdCB5ZXQgcmVjZWl2ZWQgYSBmdWxsIG1lc3NhZ2UuICBUaGUgc2VuZGVy IHdpbGwKLSAqIHNldCBvdXIgcHJvY2VzcyBsYXRjaCBhZnRlciBtb3JlIGRhdGEgaGFzIGJl ZW4gd3JpdHRlbiwgYW5kIHdlJ2xsIHJlc3VtZQotICogcHJvY2Vzc2luZy4gIEVhY2ggY2Fs bCB3aWxsIHRoZXJlZm9yZSByZXR1cm4gYSBjb21wbGV0ZSBtZXNzYWdlCi0gKiAodW5sZXNz IHRoZSBzZW5kZXIgZGV0YWNoZXMgdGhlIHF1ZXVlKS4KKyAqIFdoZW4gbm93YWl0ID0gZmFs c2UsIHdlJ2xsIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIGVtcHR5IGFuZCB3ZSBoYXZlIG5v dAorICogeWV0IHJlY2VpdmVkIGEgZnVsbCBtZXNzYWdlLiAgVGhlIHNlbmRlciB3aWxsIHNl bmQgdXMgSU5URVJSVVBUX1dBSVRfV0FLRVVQCisgKiBhZnRlciBtb3JlIGRhdGEgaGFzIGJl ZW4gd3JpdHRlbiwgYW5kIHdlJ2xsIHJlc3VtZSBwcm9jZXNzaW5nLiAgRWFjaCBjYWxsCisg KiB3aWxsIHRoZXJlZm9yZSByZXR1cm4gYSBjb21wbGV0ZSBtZXNzYWdlICh1bmxlc3MgdGhl IHNlbmRlciBkZXRhY2hlcyB0aGUKKyAqIHF1ZXVlKS4KICAqCi0gKiBXaGVuIG5vd2FpdCA9 IHRydWUsIHdlIGRvIG5vdCBtYW5pcHVsYXRlIHRoZSBzdGF0ZSBvZiB0aGUgcHJvY2VzcyBs YXRjaDsKLSAqIGluc3RlYWQsIHdoZW5ldmVyIHRoZSBidWZmZXIgaXMgZW1wdHkgYW5kIHdl IG5lZWQgdG8gcmVhZCBmcm9tIGl0LCB3ZQotICogcmV0dXJuIFNITV9NUV9XT1VMRF9CTE9D Sy4gIEluIHRoaXMgY2FzZSwgdGhlIGNhbGxlciBzaG91bGQgY2FsbCB0aGlzCi0gKiBmdW5j dGlvbiBhZ2FpbiBhZnRlciB0aGUgcHJvY2VzcyBsYXRjaCBoYXMgYmVlbiBzZXQuCisgKiBX aGVuIG5vd2FpdCA9IHRydWUsIHdlIGRvIG5vdCB3YWl0IHdoZW4gdGhlIGJ1ZmZlciBpcyBl bXB0eSBhbmQgcmV0dXJuCisgKiBTSE1fTVFfV09VTERfQkxPQ0sgaW5zdGVhZC4gIEluIHRo aXMgY2FzZSwgdGhlIGNhbGxlciBzaG91bGQgY2FsbCB0aGlzCisgKiBmdW5jdGlvbiBhZ2Fp biBhZnRlciBJTlRFUlJVUFRfV0FJVF9XQUtFVVAgaGFzIGJlZW4gc2V0LgogICovCiBzaG1f bXFfcmVzdWx0CiBzaG1fbXFfcmVjZWl2ZShzaG1fbXFfaGFuZGxlICptcWgsIFNpemUgKm5i eXRlc3AsIHZvaWQgKipkYXRhcCwgYm9vbCBub3dhaXQpCkBAIC02MjAsOCArNjIwLDggQEAg c2htX21xX3JlY2VpdmUoc2htX21xX2hhbmRsZSAqbXFoLCBTaXplICpuYnl0ZXNwLCB2b2lk ICoqZGF0YXAsIGJvb2wgbm93YWl0KQogCSAqIElmIHdlJ3ZlIGNvbnN1bWVkIGFuIGFtb3Vu dCBvZiBkYXRhIGdyZWF0ZXIgdGhhbiAxLzR0aCBvZiB0aGUgcmluZwogCSAqIHNpemUsIG1h cmsgaXQgY29uc3VtZWQgaW4gc2hhcmVkIG1lbW9yeS4gIFdlIHRyeSB0byBhdm9pZCBkb2lu ZyB0aGlzCiAJICogdW5uZWNlc3NhcmlseSB3aGVuIG9ubHkgYSBzbWFsbCBhbW91bnQgb2Yg ZGF0YSBoYXMgYmVlbiBjb25zdW1lZCwKLQkgKiBiZWNhdXNlIFNldExhdGNoKCkgaXMgZmFp cmx5IGV4cGVuc2l2ZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyBpdCB0b28KLQkgKiBvZnRl bi4KKwkgKiBiZWNhdXNlIFNlbmRJbnRlcnJ1cHQoKSBpcyBmYWlybHkgZXhwZW5zaXZlIGFu ZCB3ZSBkb24ndCB3YW50IHRvIGRvIGl0CisJICogdG9vIG9mdGVuLgogCSAqLwogCWlmICht cWgtPm1xaF9jb25zdW1lX3BlbmRpbmcgPiBtcS0+bXFfcmluZ19zaXplIC8gNCkKIAl7CkBA IC04OTYsNyArODk2LDcgQEAgc2htX21xX2RldGFjaF9pbnRlcm5hbChzaG1fbXEgKm1xKQog CVNwaW5Mb2NrUmVsZWFzZSgmbXEtPm1xX211dGV4KTsKIAogCWlmICh2aWN0aW0gIT0gTlVM TCkKLQkJU2V0TGF0Y2goJnZpY3RpbS0+cHJvY0xhdGNoKTsKKwkJU2VuZEludGVycnVwdChJ TlRFUlJVUFRfV0FJVF9XQUtFVVAsIEdldE51bWJlckZyb21QR1Byb2ModmljdGltKSk7CiB9 CiAKIC8qCkBAIC05OTQsNyArOTk0LDcgQEAgc2htX21xX3NlbmRfYnl0ZXMoc2htX21xX2hh bmRsZSAqbXFoLCBTaXplIG5ieXRlcywgY29uc3Qgdm9pZCAqZGF0YSwKIAkJCSAqIFRoZXJl Zm9yZSwgd2UgY2FuIHJlYWQgaXQgd2l0aG91dCBhY3F1aXJpbmcgdGhlIHNwaW5sb2NrLgog CQkJICovCiAJCQlBc3NlcnQobXFoLT5tcWhfY291bnRlcnBhcnR5X2F0dGFjaGVkKTsKLQkJ CVNldExhdGNoKCZtcS0+bXFfcmVjZWl2ZXItPnByb2NMYXRjaCk7CisJCQlTZW5kSW50ZXJy dXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgR2V0TnVtYmVyRnJvbVBHUHJvYyhtcS0+bXFf cmVjZWl2ZXIpKTsKIAogCQkJLyoKIAkJCSAqIFdlIGhhdmUganVzdCB1cGRhdGVkIHRoZSBt cWhfc2VuZF9wZW5kaW5nIGJ5dGVzIGluIHRoZSBzaGFyZWQKQEAgLTEwMDIsNyArMTAwMiw3 IEBAIHNobV9tcV9zZW5kX2J5dGVzKHNobV9tcV9oYW5kbGUgKm1xaCwgU2l6ZSBuYnl0ZXMs IGNvbnN0IHZvaWQgKmRhdGEsCiAJCQkgKi8KIAkJCW1xaC0+bXFoX3NlbmRfcGVuZGluZyA9 IDA7CiAKLQkJCS8qIFNraXAgbWFuaXB1bGF0aW9uIG9mIG91ciBsYXRjaCBpZiBub3dhaXQg PSB0cnVlLiAqLworCQkJLyogU2tpcCB3YWl0aW5nIGlmIG5vd2FpdCA9IHRydWUuICovCiAJ CQlpZiAobm93YWl0KQogCQkJewogCQkJCSpieXRlc193cml0dGVuID0gc2VudDsKQEAgLTEw MTAsMTcgKzEwMTAsMTggQEAgc2htX21xX3NlbmRfYnl0ZXMoc2htX21xX2hhbmRsZSAqbXFo LCBTaXplIG5ieXRlcywgY29uc3Qgdm9pZCAqZGF0YSwKIAkJCX0KIAogCQkJLyoKLQkJCSAq IFdhaXQgZm9yIG91ciBsYXRjaCB0byBiZSBzZXQuICBJdCBtaWdodCBhbHJlYWR5IGJlIHNl dCBmb3Igc29tZQorCQkJICogV2FpdCBmb3IgdGhlIGludGVycnVwdC4gIEl0IG1pZ2h0IGFs cmVhZHkgYmUgc2V0IGZvciBzb21lCiAJCQkgKiB1bnJlbGF0ZWQgcmVhc29uLCBidXQgdGhh dCdsbCBqdXN0IHJlc3VsdCBpbiBvbmUgZXh0cmEgdHJpcAotCQkJICogdGhyb3VnaCB0aGUg bG9vcC4gIEl0J3Mgd29ydGggaXQgdG8gYXZvaWQgcmVzZXR0aW5nIHRoZSBsYXRjaAotCQkJ ICogYXQgdG9wIG9mIGxvb3AsIGJlY2F1c2Ugc2V0dGluZyBhbiBhbHJlYWR5LXNldCBsYXRj aCBpcyBtdWNoCi0JCQkgKiBjaGVhcGVyIHRoYW4gc2V0dGluZyBvbmUgdGhhdCBoYXMgYmVl biByZXNldC4KKwkJCSAqIHRocm91Z2ggdGhlIGxvb3AuICBJdCdzIHdvcnRoIGl0IHRvIGF2 b2lkIGNsZWFyaW5nIHRoZQorCQkJICogaW50ZXJydXB0IGF0IHRvcCBvZiBsb29wLCBiZWNh dXNlIHNldHRpbmcgYW4gYWxyZWFkeS1zZXQKKwkJCSAqIGludGVycnVwdCBpcyBtdWNoIGNo ZWFwZXIgdGhhbiBzZXR0aW5nIG9uZSB0aGF0IGhhcyBiZWVuIHJlc2V0LgogCQkJICovCi0J CQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05f UE1fREVBVEgsIDAsCi0JCQkJCQkJIFdBSVRfRVZFTlRfTUVTU0FHRV9RVUVVRV9TRU5EKTsK KwkJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRF UlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9FWElUX09O X1BNX0RFQVRILCAwLAorCQkJCQkJCQkgV0FJVF9FVkVOVF9NRVNTQUdFX1FVRVVFX1NFTkQp OwogCi0JCQkvKiBSZXNldCB0aGUgbGF0Y2ggc28gd2UgZG9uJ3Qgc3Bpbi4gKi8KLQkJCVJl c2V0TGF0Y2goTXlMYXRjaCk7CisJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IHNvIHdlIGRv bid0IHNwaW4uICovCisJCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAp OwogCiAJCQkvKiBBbiBpbnRlcnJ1cHQgbWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUgd2Ugd2Vy ZSB3YWl0aW5nLiAqLwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKQEAgLTEwNTUsNyAr MTA1Niw3IEBAIHNobV9tcV9zZW5kX2J5dGVzKHNobV9tcV9oYW5kbGUgKm1xaCwgU2l6ZSBu Ynl0ZXMsIGNvbnN0IHZvaWQgKmRhdGEsCiAKIAkJCS8qCiAJCQkgKiBGb3IgZWZmaWNpZW5j eSwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBieXRlcyB3cml0dGVuIGluIHRoZSBzaGFyZWQKLQkJ CSAqIG1lbW9yeSBhbmQgYWxzbyBkb24ndCBzZXQgdGhlIHJlYWRlcidzIGxhdGNoIGhlcmUu ICBSZWZlciB0bworCQkJICogbWVtb3J5IGFuZCBhbHNvIGRvbid0IHNlbmQgdGhlIHJlYWRl ciBpbnRlcnJ1cHQgaGVyZS4gIFJlZmVyIHRvCiAJCQkgKiB0aGUgY29tbWVudHMgYXRvcCB0 aGUgc2htX21xX2hhbmRsZSBzdHJ1Y3R1cmUgZm9yIG1vcmUKIAkJCSAqIGluZm9ybWF0aW9u LgogCQkJICovCkBAIC0xMTUxLDI1ICsxMTUyLDI5IEBAIHNobV9tcV9yZWNlaXZlX2J5dGVz KHNobV9tcV9oYW5kbGUgKm1xaCwgU2l6ZSBieXRlc19uZWVkZWQsIGJvb2wgbm93YWl0LAog CQkJbXFoLT5tcWhfY29uc3VtZV9wZW5kaW5nID0gMDsKIAkJfQogCi0JCS8qIFNraXAgbWFu aXB1bGF0aW9uIG9mIG91ciBsYXRjaCBpZiBub3dhaXQgPSB0cnVlLiAqLworCQkvKiBTa2lw IHdhaXRpbmcgaWYgbm93YWl0ID0gdHJ1ZS4gKi8KIAkJaWYgKG5vd2FpdCkKIAkJCXJldHVy biBTSE1fTVFfV09VTERfQkxPQ0s7CiAKIAkJLyoKLQkJICogV2FpdCBmb3Igb3VyIGxhdGNo IHRvIGJlIHNldC4gIEl0IG1pZ2h0IGFscmVhZHkgYmUgc2V0IGZvciBzb21lCisJCSAqIFdh aXQgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gYmUgc2V0LiAgSXQgbWlnaHQgYWxyZWFkeSBiZSBz ZXQgZm9yIHNvbWUKIAkJICogdW5yZWxhdGVkIHJlYXNvbiwgYnV0IHRoYXQnbGwganVzdCBy ZXN1bHQgaW4gb25lIGV4dHJhIHRyaXAgdGhyb3VnaAotCQkgKiB0aGUgbG9vcC4gIEl0J3Mg d29ydGggaXQgdG8gYXZvaWQgcmVzZXR0aW5nIHRoZSBsYXRjaCBhdCB0b3Agb2YKLQkJICog bG9vcCwgYmVjYXVzZSBzZXR0aW5nIGFuIGFscmVhZHktc2V0IGxhdGNoIGlzIG11Y2ggY2hl YXBlciB0aGFuCi0JCSAqIHNldHRpbmcgb25lIHRoYXQgaGFzIGJlZW4gcmVzZXQuCisJCSAq IHRoZSBsb29wLiAgSXQncyB3b3J0aCBpdCB0byBhdm9pZCBjbGVhcmluZyB0aGUgaW50ZXJy dXB0IGF0IHRvcCBvZgorCQkgKiBsb29wLCBiZWNhdXNlIHNldHRpbmcgYW4gYWxyZWFkeS1z ZXQgaW50ZXJydXB0IGlzIG11Y2ggY2hlYXBlciB0aGFuCisJCSAqIHNldHRpbmcgb25lIHRo YXQgaGFzIGJlZW4gY2xlYXJlZC4KIAkJICovCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRj aCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKLQkJCQkJCSBXQUlU X0VWRU5UX01FU1NBR0VfUVVFVUVfUkVDRUlWRSk7CisJCSh2b2lkKSBXYWl0SW50ZXJydXB0 KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJ CQkJIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCisJCQkJCQkJIFdB SVRfRVZFTlRfTUVTU0FHRV9RVUVVRV9SRUNFSVZFKTsKIAotCQkvKiBSZXNldCB0aGUgbGF0 Y2ggc28gd2UgZG9uJ3Qgc3Bpbi4gKi8KLQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKLQotCQkv KiBBbiBpbnRlcnJ1cHQgbWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5n LiAqLworCQkvKgorCQkgKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0cyB0aGF0IG1heSBo YXZlIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUKKwkJICogd2FpdGluZy4KKwkJICovCiAJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBzbyB3 ZSBkb24ndCBzcGluLiAqLworCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtF VVApOwogCX0KIH0KIApAQCAtMTI1MSwxNCArMTI1NiwxOCBAQCBzaG1fbXFfd2FpdF9pbnRl cm5hbChzaG1fbXEgKm1xLCBQR1BST0MgKipwdHIsIEJhY2tncm91bmRXb3JrZXJIYW5kbGUg KmhhbmRsZSkKIAkJfQogCiAJCS8qIFdhaXQgdG8gYmUgc2lnbmFsZWQuICovCi0JCSh2b2lk KSBXYWl0TGF0Y2goTXlMYXRjaCwgV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SCwgMCwKLQkJCQkJCSBXQUlUX0VWRU5UX01FU1NBR0VfUVVFVUVfSU5URVJOQUwpOworCQko dm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBU X1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9FWElUX09OX1BNX0RF QVRILCAwLAorCQkJCQkJCSBXQUlUX0VWRU5UX01FU1NBR0VfUVVFVUVfSU5URVJOQUwpOwog Ci0JCS8qIFJlc2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLwotCQlSZXNldExh dGNoKE15TGF0Y2gpOwotCi0JCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJlZCB3 aGlsZSB3ZSB3ZXJlIHdhaXRpbmcuICovCisJCS8qCisJCSAqIEhhbmRsZSBzdGFuZGFyZCBp bnRlcnJ1cHRzIHRoYXQgbWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZQorCQkgKiB3 YWl0aW5nLgorCQkgKi8KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBDbGVh ciB0aGUgaW50ZXJydXB0IHNvIHdlIGRvbid0IHNwaW4uICovCisJCUNsZWFySW50ZXJydXB0 KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTEy OTQsNyArMTMwMyw3IEBAIHNobV9tcV9pbmNfYnl0ZXNfcmVhZChzaG1fbXEgKm1xLCBTaXpl IG4pCiAJICovCiAJc2VuZGVyID0gbXEtPm1xX3NlbmRlcjsKIAlBc3NlcnQoc2VuZGVyICE9 IE5VTEwpOwotCVNldExhdGNoKCZzZW5kZXItPnByb2NMYXRjaCk7CisJU2VuZEludGVycnVw dChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIEdldE51bWJlckZyb21QR1Byb2Moc2VuZGVyKSk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaWduYWxm dW5jcy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lnbmFsZnVuY3MuYwppbmRleCBk NDhiNGZlMzc5OS4uYWFlZWJjYTZjOTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3NpZ25hbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ln bmFsZnVuY3MuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9zeXNsb2dnZXIuaCIKQEAgLTQxLDYgKzQyLDkgQEAKICAqIElu IHRoZSBldmVudCBvZiBhIGdlbmVyYWwgZmFpbHVyZSAocmV0dXJuIGNvZGUgMSksIGEgd2Fy bmluZyBtZXNzYWdlIHdpbGwKICAqIGJlIGVtaXR0ZWQuIEZvciBwZXJtaXNzaW9uIGVycm9y cywgZG9pbmcgdGhhdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YKICAqIHRoZSBjYWxsZXIu CisgKgorICogVE9ETzogVGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHRvIHNlbmQgYW4gaW50ZXJy dXB0IGRpcmVjdGx5IG5vdy4gQnV0IHNlbmRpbmcKKyAqIGEgU0lHVEVSTSBvciBTSUdJTlQg c3RpbGwgd29ya3MgdG9vLgogICovCiAjZGVmaW5lIFNJR05BTF9CQUNLRU5EX1NVQ0NFU1Mg MAogI2RlZmluZSBTSUdOQUxfQkFDS0VORF9FUlJPUiAxCkBAIC0yMDEsMTIgKzIwNSwxMiBA QCBwZ193YWl0X3VudGlsX3Rlcm1pbmF0aW9uKGludCBwaWQsIGludDY0IHRpbWVvdXQpCiAJ CS8qIFByb2Nlc3MgaW50ZXJydXB0cywgaWYgYW55LCBiZWZvcmUgd2FpdGluZyAqLwogCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCSh2b2lkKSBXYWl0TGF0Y2goTXlMYXRjaCwK LQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFU SCwKLQkJCQkJCSB3YWl0dGltZSwKLQkJCQkJCSBXQUlUX0VWRU5UX0JBQ0tFTkRfVEVSTUlO QVRJT04pOworCQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNr IHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9U SU1FT1VUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgd2FpdHRpbWUsCisJCQkJ CQkJIFdBSVRfRVZFTlRfQkFDS0VORF9URVJNSU5BVElPTik7CiAKLQkJUmVzZXRMYXRjaChN eUxhdGNoKTsKKwkJQ2xlYXJJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAog CQlyZW1haW5pbmd0aW1lIC09IHdhaXR0aW1lOwogCX0gd2hpbGUgKHJlbWFpbmluZ3RpbWUg PiAwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbC5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsLmMKaW5kZXggNTU1OWY3YzFjZmEuLmRj YWJkMjU5NTZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWwu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWwuYwpAQCAtMTUsMzAgKzE1 LDEzIEBACiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy94YWN0 LmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZh bGFkdC5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAKLQogdWludDY0CQlTaGFyZWRJ bnZhbGlkTWVzc2FnZUNvdW50ZXI7CiAKLQotLyoKLSAqIEJlY2F1c2UgYmFja2VuZHMgc2l0 dGluZyBpZGxlIHdpbGwgbm90IGJlIHJlYWRpbmcgc2ludmFsIGV2ZW50cywgd2UKLSAqIG5l ZWQgYSB3YXkgdG8gZ2l2ZSBhbiBpZGxlIGJhY2tlbmQgYSBzd2lmdCBraWNrIGluIHRoZSBy ZWFyIGFuZCBtYWtlCi0gKiBpdCBjYXRjaCB1cCBiZWZvcmUgdGhlIHNpbnZhbCBxdWV1ZSBv dmVyZmxvd3MgYW5kIGZvcmNlcyBpdCB0byBnbwotICogdGhyb3VnaCBhIGNhY2hlIHJlc2V0 IGV4ZXJjaXNlLiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcKLSAqIFBST0NTSUdfQ0FUQ0hV UF9JTlRFUlJVUFQgdG8gYW55IGJhY2tlbmQgdGhhdCBnZXRzIHRvbyBmYXIgYmVoaW5kLgot ICoKLSAqIFRoZSBzaWduYWwgaGFuZGxlciB3aWxsIHNldCBhbiBpbnRlcnJ1cHQgcGVuZGlu ZyBmbGFnIGFuZCB3aWxsIHNldCB0aGUKLSAqIHByb2Nlc3NlcyBsYXRjaC4gV2hlbmV2ZXIg c3RhcnRpbmcgdG8gcmVhZCBmcm9tIHRoZSBjbGllbnQsIG9yIHdoZW4KLSAqIGludGVycnVw dGVkIHdoaWxlIGRvaW5nIHNvLCBQcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdCgpIHdpbGwg Y2FsbAotICogUHJvY2Vzc0NhdGNodXBFdmVudCgpLgotICovCi12b2xhdGlsZSBzaWdfYXRv bWljX3QgY2F0Y2h1cEludGVycnVwdFBlbmRpbmcgPSBmYWxzZTsKLQotCiAvKgogICogU2Vu ZFNoYXJlZEludmFsaWRNZXNzYWdlcwogICoJQWRkIHNoYXJlZC1jYWNoZS1pbnZhbGlkYXRp b24gbWVzc2FnZShzKSB0byB0aGUgZ2xvYmFsIFNJIG1lc3NhZ2UgcXVldWUuCkBAIC0xMzIs MzggKzExNSwxMyBAQCBSZWNlaXZlU2hhcmVkSW52YWxpZE1lc3NhZ2VzKHZvaWQgKCppbnZh bEZ1bmN0aW9uKSAoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqbQogCSAqIGNhdGNodXAg c2lnbmFsIHRoaXMgd2F5IGF2b2lkcyBjcmVhdGluZyBzcGlrZXMgaW4gc3lzdGVtIGxvYWQg Zm9yIHdoYXQKIAkgKiBzaG91bGQgYmUganVzdCBhIGJhY2tncm91bmQgbWFpbnRlbmFuY2Ug YWN0aXZpdHkuCiAJICovCi0JaWYgKGNhdGNodXBJbnRlcnJ1cHRQZW5kaW5nKQorCWlmIChD b25zdW1lSW50ZXJydXB0KElOVEVSUlVQVF9TSU5WQUxfQ0FUQ0hVUCkpCiAJewotCQljYXRj aHVwSW50ZXJydXB0UGVuZGluZyA9IGZhbHNlOwogCQllbG9nKERFQlVHNCwgInNpbnZhbCBj YXRjaHVwIGNvbXBsZXRlLCBjbGVhbmluZyBxdWV1ZSIpOwogCQlTSUNsZWFudXBRdWV1ZShm YWxzZSwgMCk7CiAJfQogfQogCi0KLS8qCi0gKiBIYW5kbGVDYXRjaHVwSW50ZXJydXB0Ci0g KgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiBQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBUIGlz IHJlY2VpdmVkLgotICoKLSAqIFdlIHVzZWQgdG8gZGlyZWN0bHkgY2FsbCBQcm9jZXNzQ2F0 Y2h1cEV2ZW50IGRpcmVjdGx5IHdoZW4gaWRsZS4gVGhlc2UgZGF5cwotICogd2UganVzdCBz ZXQgYSBmbGFnIHRvIGRvIGl0IGxhdGVyIGFuZCBub3RpZnkgdGhlIHByb2Nlc3Mgb2YgdGhh dCBmYWN0IGJ5Ci0gKiBzZXR0aW5nIHRoZSBwcm9jZXNzJ3MgbGF0Y2guCi0gKi8KLXZvaWQK LUhhbmRsZUNhdGNodXBJbnRlcnJ1cHQodm9pZCkKLXsKLQkvKgotCSAqIE5vdGU6IHRoaXMg aXMgY2FsbGVkIGJ5IGEgU0lHTkFMIEhBTkRMRVIuIFlvdSBtdXN0IGJlIHZlcnkgd2FyeSB3 aGF0Ci0JICogeW91IGRvIGhlcmUuCi0JICovCi0KLQljYXRjaHVwSW50ZXJydXB0UGVuZGlu ZyA9IHRydWU7Ci0KLQkvKiBtYWtlIHN1cmUgdGhlIGV2ZW50IGlzIHByb2Nlc3NlZCBpbiBk dWUgY291cnNlICovCi0JU2V0TGF0Y2goTXlMYXRjaCk7Ci19Ci0KIC8qCiAgKiBQcm9jZXNz Q2F0Y2h1cEludGVycnVwdAogICoKQEAgLTE3MywxNSArMTMxLDE1IEBAIEhhbmRsZUNhdGNo dXBJbnRlcnJ1cHQodm9pZCkKIHZvaWQKIFByb2Nlc3NDYXRjaHVwSW50ZXJydXB0KHZvaWQp CiB7Ci0Jd2hpbGUgKGNhdGNodXBJbnRlcnJ1cHRQZW5kaW5nKQorCWRvCiAJewogCQkvKgog CQkgKiBXaGF0IHdlIG5lZWQgdG8gZG8gaGVyZSBpcyBjYXVzZSBSZWNlaXZlU2hhcmVkSW52 YWxpZE1lc3NhZ2VzKCkgdG8KLQkJICogcnVuLCB3aGljaCB3aWxsIGRvIHRoZSBuZWNlc3Nh cnkgd29yayBhbmQgYWxzbyByZXNldCB0aGUKLQkJICogY2F0Y2h1cEludGVycnVwdFBlbmRp bmcgZmxhZy4gIElmIHdlIGFyZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiB3ZQotCQkgKiBjYW4g anVzdCBjYWxsIEFjY2VwdEludmFsaWRhdGlvbk1lc3NhZ2VzKCkgdG8gZG8gdGhpcy4gIElm IHdlCi0JCSAqIGFyZW4ndCwgd2Ugc3RhcnQgYW5kIGltbWVkaWF0ZWx5IGVuZCBhIHRyYW5z YWN0aW9uOyB0aGUgY2FsbCB0bwotCQkgKiBBY2NlcHRJbnZhbGlkYXRpb25NZXNzYWdlcygp IGhhcHBlbnMgZG93biBpbnNpZGUgdHJhbnNhY3Rpb24gc3RhcnQuCisJCSAqIHJ1biwgd2hp Y2ggd2lsbCBkbyB0aGUgbmVjZXNzYXJ5IHdvcmsuICBJZiB3ZSBhcmUgaW5zaWRlIGEKKwkJ ICogdHJhbnNhY3Rpb24gd2UgY2FuIGp1c3QgY2FsbCBBY2NlcHRJbnZhbGlkYXRpb25NZXNz YWdlcygpIHRvIGRvCisJCSAqIHRoaXMuICBJZiB3ZSBhcmVuJ3QsIHdlIHN0YXJ0IGFuZCBp bW1lZGlhdGVseSBlbmQgYSB0cmFuc2FjdGlvbjsKKwkJICogdGhlIGNhbGwgdG8gQWNjZXB0 SW52YWxpZGF0aW9uTWVzc2FnZXMoKSBoYXBwZW5zIGRvd24gaW5zaWRlCisJCSAqIHRyYW5z YWN0aW9uIHN0YXJ0LgogCQkgKgogCQkgKiBJdCBpcyBhd2Z1bGx5IHRlbXB0aW5nIHRvIGp1 c3QgY2FsbCBBY2NlcHRJbnZhbGlkYXRpb25NZXNzYWdlcygpCiAJCSAqIHdpdGhvdXQgdGhl IHJlc3Qgb2YgdGhlIHhhY3Qgc3RhcnQvc3RvcCBvdmVyaGVhZCwgYW5kIEkgdGhpbmsgdGhh dApAQCAtMTkwLDE0ICsxNDgsMjAgQEAgUHJvY2Vzc0NhdGNodXBJbnRlcnJ1cHQodm9pZCkK IAkJICovCiAJCWlmIChJc1RyYW5zYWN0aW9uT3JUcmFuc2FjdGlvbkJsb2NrKCkpCiAJCXsK LQkJCWVsb2coREVCVUc0LCAiUHJvY2Vzc0NhdGNodXBFdmVudCBpbnNpZGUgdHJhbnNhY3Rp b24iKTsKKwkJCWVsb2coREVCVUc0LCAiUHJvY2Vzc0NhdGNodXBJbnRlcnJ1cHQgaW5zaWRl IHRyYW5zYWN0aW9uIik7CiAJCQlBY2NlcHRJbnZhbGlkYXRpb25NZXNzYWdlcygpOwogCQl9 CiAJCWVsc2UKIAkJewotCQkJZWxvZyhERUJVRzQsICJQcm9jZXNzQ2F0Y2h1cEV2ZW50IG91 dHNpZGUgdHJhbnNhY3Rpb24iKTsKKwkJCWVsb2coREVCVUc0LCAiUHJvY2Vzc0NhdGNodXBJ bnRlcnJ1cHQgb3V0c2lkZSB0cmFuc2FjdGlvbiIpOwogCQkJU3RhcnRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKIAkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCQl9CisKKwkJLyoK KwkJICogSWYgYW5vdGhlciBjYXRjaHVwIGludGVycnVwdCBhcnJpdmVkIHdoaWxlIHdlIHdl cmUgcHJvY2VzaW5nIHRoZQorCQkgKiBwcmV2aW91cyBvbmUsIHByb2Nlc3MgdGhlIG5ldyBv bmUgdG9vLgorCQkgKi8KIAl9CisJd2hpbGUgKENvbnN1bWVJbnRlcnJ1cHQoSU5URVJSVVBU X1NJTlZBTF9DQVRDSFVQKSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9zaW52YWxhZHQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5j CmluZGV4IGE3YTdjYzRmMGE5Li40MmM5ODdkY2I5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2ludmFsYWR0LmMKQEAgLTE3LDExICsxNywxMSBAQAogI2luY2x1ZGUgPHNpZ25hbC5o PgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jbnVtYmVyLmgi Ci0jaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFsLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z aG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc2ludmFsYWR0LmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCkBAIC0xMTgsNyArMTE4LDcgQEAKICAqIHdlIGV4Y2VlZCBDTEVBTlVQ X01JTi4gIFNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHNwZWVkLgogICoKICAqIFNJR19U SFJFU0hPTEQ6IHRoZSBtaW5pbXVtIG51bWJlciBvZiBtZXNzYWdlcyBhIGJhY2tlbmQgbXVz dCBoYXZlIGZhbGxlbgotICogYmVoaW5kIGJlZm9yZSB3ZSdsbCBzZW5kIGl0IFBST0NTSUdf Q0FUQ0hVUF9JTlRFUlJVUFQuCisgKiBiZWhpbmQgYmVmb3JlIHdlJ2xsIHNlbmQgaXQgSU5U RVJSVVBUX1NJTlZBTF9DQVRDSFVQLgogICoKICAqIFdSSVRFX1FVQU5UVU06IHRoZSBtYXgg bnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHB1c2ggaW50byB0aGUgYnVmZmVyIHBlcgogICogaXRl cmF0aW9uIG9mIFNJSW5zZXJ0RGF0YUVudHJpZXMuICBOb25jcml0aWNhbCBidXQgc2hvdWxk IGJlIGxlc3MgdGhhbgpAQCAtMzE0LDYgKzMxNCwxNCBAQCBTaGFyZWRJbnZhbEJhY2tlbmRJ bml0KGJvb2wgc2VuZE9ubHkpCiAKIAkvKiByZWdpc3RlciBleGl0IHJvdXRpbmUgdG8gbWFy ayBteSBlbnRyeSBpbmFjdGl2ZSBhdCBleGl0ICovCiAJb25fc2htZW1fZXhpdChDbGVhbnVw SW52YWxpZGF0aW9uU3RhdGUsIFBvaW50ZXJHZXREYXR1bShzZWdQKSk7CisKKwkvKgorCSAq IGFsbCBwcm9jZXNzZXMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiBzaGFyZWQgaW52YWxpZGF0aW9u cyBtdXN0IGhhbmRsZQorCSAqIGNhdGNodXAgaW50ZXJydXB0cyBwcm9tcHRseS4gKENsaWVu dCBiYWNrZW5kcyB3aWxsIGRpc2FibGUgdGhpcyB3aGlsZQorCSAqIHByb2Nlc3NpbmcgYSBx dWVyeSwgYnV0IGVuYWJsZSBieSBkZWZhdWx0LikKKwkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5k bGVyKElOVEVSUlVQVF9TSU5WQUxfQ0FUQ0hVUCwgUHJvY2Vzc0NhdGNodXBJbnRlcnJ1cHQp OworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfU0lOVkFMX0NBVENIVVApOwogfQogCiAv KgpAQCAtNTY1LDcgKzU3Myw3IEBAIFNJR2V0RGF0YUVudHJpZXMoU2hhcmVkSW52YWxpZGF0 aW9uTWVzc2FnZSAqZGF0YSwgaW50IGRhdGFzaXplKQogICogbWluRnJlZSBpcyB0aGUgbWlu aW11bSBudW1iZXIgb2YgbWVzc2FnZSBzbG90cyB0byBtYWtlIGZyZWUuCiAgKgogICogUG9z c2libGUgc2lkZSBlZmZlY3RzIG9mIHRoaXMgcm91dGluZSBpbmNsdWRlIG1hcmtpbmcgb25l IG9yIG1vcmUKLSAqIGJhY2tlbmRzIGFzICJyZXNldCIgaW4gdGhlIGFycmF5LCBhbmQgc2Vu ZGluZyBQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBUCisgKiBiYWNrZW5kcyBhcyAicmVzZXQi IGluIHRoZSBhcnJheSwgYW5kIHNlbmRpbmcgSU5URVJSVVBUX1NJTlZBTF9DQVRDSFVQCiAg KiB0byBzb21lIGJhY2tlbmQgdGhhdCBzZWVtcyB0byBiZSBnZXR0aW5nIHRvbyBmYXIgYmVo aW5kLiAgV2Ugc2lnbmFsIGF0CiAgKiBtb3N0IG9uZSBiYWNrZW5kIGF0IGEgdGltZSwgZm9y IHJlYXNvbnMgZXhwbGFpbmVkIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuCiAgKgpAQCAtNjU4 LDggKzY2Niw4IEBAIFNJQ2xlYW51cFF1ZXVlKGJvb2wgY2FsbGVySGFzV3JpdGVMb2NrLCBp bnQgbWluRnJlZSkKIAkJc2VnUC0+bmV4dFRocmVzaG9sZCA9IChudW1Nc2dzIC8gQ0xFQU5V UF9RVUFOVFVNICsgMSkgKiBDTEVBTlVQX1FVQU5UVU07CiAKIAkvKgotCSAqIExhc3RseSwg c2lnbmFsIGFueW9uZSB3aG8gbmVlZHMgYSBjYXRjaHVwIGludGVycnVwdC4gIFNpbmNlCi0J ICogU2VuZFByb2NTaWduYWwoKSBtaWdodCBub3QgYmUgZmFzdCwgd2UgZG9uJ3Qgd2FudCB0 byBob2xkIGxvY2tzIHdoaWxlCisJICogTGFzdGx5LCBzaWduYWwgYW55b25lIHdobyBuZWVk cyBhIGNhdGNodXAgaW50ZXJydXB0LiAgU2VuZEludGVycnVwdCgpCisJICogaXMgcHJldHR5 IGZhc3QsIGJ1dCB3ZSBuZXZlcnRoZWxlc3MgZG9uJ3Qgd2FudCB0byBob2xkIGxvY2tzIHdo aWxlCiAJICogZXhlY3V0aW5nIGl0LgogCSAqLwogCWlmIChuZWVkU2lnKQpAQCAtNjcwLDgg KzY3OCw4IEBAIFNJQ2xlYW51cFF1ZXVlKGJvb2wgY2FsbGVySGFzV3JpdGVMb2NrLCBpbnQg bWluRnJlZSkKIAkJbmVlZFNpZy0+c2lnbmFsZWQgPSB0cnVlOwogCQlMV0xvY2tSZWxlYXNl KFNJbnZhbFJlYWRMb2NrKTsKIAkJTFdMb2NrUmVsZWFzZShTSW52YWxXcml0ZUxvY2spOwot CQllbG9nKERFQlVHNCwgInNlbmRpbmcgc2ludmFsIGNhdGNodXAgc2lnbmFsIHRvIFBJRCAl ZCIsIChpbnQpIGhpc19waWQpOwotCQlTZW5kUHJvY1NpZ25hbChoaXNfcGlkLCBQUk9DU0lH X0NBVENIVVBfSU5URVJSVVBULCBoaXNfcHJvY051bWJlcik7CisJCWVsb2coREVCVUc0LCAi c2VuZGluZyBzaW52YWwgY2F0Y2h1cCBpbnRlcnJ1cHQgdG8gYmFja2VuZCBQSUQgJWQiLCAo aW50KSBoaXNfcGlkKTsKKwkJU2VuZEludGVycnVwdChJTlRFUlJVUFRfU0lOVkFMX0NBVENI VVAsIGhpc19wcm9jTnVtYmVyKTsKIAkJaWYgKGNhbGxlckhhc1dyaXRlTG9jaykKIAkJCUxX TG9ja0FjcXVpcmUoU0ludmFsV3JpdGVMb2NrLCBMV19FWENMVVNJVkUpOwogCX0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwppbmRleCBkODNhZmJmYjlkNi4uYzkyNDJkNmZiODkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNp bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVj b3ZlcnkuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCisjaW5jbHVkZSAiaXBj L2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3Rh dC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3QuaCIKQEAgLTU5Niw3ICs1OTcsNyBA QCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhEYXRhYmFzZShPaWQgZGJpZCkKICAqIFJl c29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aExvY2sgaXMgY2FsbGVkIGZyb20gUHJvY1NsZWVw KCkKICAqIHRvIHJlc29sdmUgY29uZmxpY3RzIHdpdGggb3RoZXIgYmFja2VuZHMgaG9sZGlu ZyByZWxhdGlvbiBsb2Nrcy4KICAqCi0gKiBUaGUgV2FpdExhdGNoIHNsZWVwIG5vcm1hbGx5 IGRvbmUgaW4gUHJvY1NsZWVwKCkKKyAqIFRoZSBXYWl0SW50ZXJydXB0IHNsZWVwIG5vcm1h bGx5IGRvbmUgaW4gUHJvY1NsZWVwKCkKICAqICh3aGVuIG5vdCBJbkhvdFN0YW5kYnkpIGlz IHBlcmZvcm1lZCBoZXJlLCBmb3IgY29kZSBjbGFyaXR5LgogICoKICAqIFdlIGVpdGhlciBy ZXNvbHZlIGNvbmZsaWN0cyBpbW1lZGlhdGVseSBvciBzZXQgYSB0aW1lb3V0IHRvIHdha2Ug dXMgYXQKQEAgLTY5OCw3ICs2OTksMTEgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRo TG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbG9nZ2luZ19jb25mbGljdCkKIAl9CiAKIAkv KiBXYWl0IHRvIGJlIHNpZ25hbGVkIGJ5IHRoZSByZWxlYXNlIG9mIHRoZSBSZWxhdGlvbiBM b2NrICovCi0JUHJvY1dhaXRGb3JTaWduYWwoUEdfV0FJVF9MT0NLIHwgbG9ja3RhZy5sb2Nr dGFnX3R5cGUpOworCVdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8IElO VEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkgIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRfT05f UE1fREVBVEgsIDAsCisJCQkJICBQR19XQUlUX0xPQ0sgfCBsb2NrdGFnLmxvY2t0YWdfdHlw ZSk7CisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwlDbGVhckludGVycnVwdChJTlRFUlJV UFRfV0FJVF9XQUtFVVApOwogCiAJLyoKIAkgKiBFeGl0IGlmIGx0aW1lIGlzIHJlYWNoZWQu IFRoZW4gYWxsIHRoZSBiYWNrZW5kcyBob2xkaW5nIGNvbmZsaWN0aW5nCkBAIC03NDYsNyAr NzUxLDExIEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aExvY2soTE9DS1RBRyBsb2Nr dGFnLCBib29sIGxvZ2dpbmdfY29uZmxpY3QpCiAJCSAqIHVudGlsIHRoZSByZWxhdGlvbiBs b2NrcyBhcmUgcmVsZWFzZWQgb3IgbHRpbWUgaXMgcmVhY2hlZC4KIAkJICovCiAJCWdvdF9z dGFuZGJ5X2RlYWRsb2NrX3RpbWVvdXQgPSBmYWxzZTsKLQkJUHJvY1dhaXRGb3JTaWduYWwo UEdfV0FJVF9MT0NLIHwgbG9ja3RhZy5sb2NrdGFnX3R5cGUpOworCQlXYWl0SW50ZXJydXB0 KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfAorCQkJCQkgIElOVEVSUlVQVF9XQUlUX1dBS0VV UCwgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkJICBQR19X QUlUX0xPQ0sgfCBsb2NrdGFnLmxvY2t0YWdfdHlwZSk7CisJCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7CisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJfQog CiBjbGVhbnVwOgpAQCAtNzY2LDE1ICs3NzUsMTYgQEAgY2xlYW51cDoKICAqIFJlc29sdmVS ZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbiBpcyBjYWxsZWQgZnJvbSBMb2NrQnVmZmVy Rm9yQ2xlYW51cCgpCiAgKiB0byByZXNvbHZlIGNvbmZsaWN0cyB3aXRoIG90aGVyIGJhY2tl bmRzIGhvbGRpbmcgYnVmZmVyIHBpbnMuCiAgKgotICogVGhlIFByb2NXYWl0Rm9yU2lnbmFs KCkgc2xlZXAgbm9ybWFsbHkgZG9uZSBpbiBMb2NrQnVmZmVyRm9yQ2xlYW51cCgpCi0gKiAo d2hlbiBub3QgSW5Ib3RTdGFuZGJ5KSBpcyBwZXJmb3JtZWQgaGVyZSwgZm9yIGNvZGUgY2xh cml0eS4KKyAqIFRoZSBXYWl0SW50ZXJydXB0IHNsZWVwIG5vcm1hbGx5IGRvbmUgaW4gTG9j a0J1ZmZlckZvckNsZWFudXAoKSAod2hlbiBub3QKKyAqIEluSG90U3RhbmRieSkgaXMgcGVy Zm9ybWVkIGhlcmUsIGZvciBjb2RlIGNsYXJpdHkuCiAgKgogICogV2UgZWl0aGVyIHJlc29s dmUgY29uZmxpY3RzIGltbWVkaWF0ZWx5IG9yIHNldCBhIHRpbWVvdXQgdG8gd2FrZSB1cyBh dAogICogdGhlIGxpbWl0IG9mIG91ciBwYXRpZW5jZS4KICAqCi0gKiBSZXNvbHZlIGNvbmZs aWN0cyBieSBzZW5kaW5nIGEgUFJPQ1NJRyBzaWduYWwgdG8gYWxsIGJhY2tlbmRzIHRvIGNo ZWNrIGlmCi0gKiB0aGV5IGhvbGQgb25lIG9mIHRoZSBidWZmZXIgcGlucyB0aGF0IGlzIGJs b2NraW5nIFN0YXJ0dXAgcHJvY2Vzcy4gSWYgc28sCi0gKiB0aG9zZSBiYWNrZW5kcyB3aWxs IHRha2UgYW4gYXBwcm9wcmlhdGUgZXJyb3IgYWN0aW9uLCBFUlJPUiBvciBGQVRBTC4KKyAq IFJlc29sdmUgY29uZmxpY3RzIGJ5IHNlbmRpbmcgUkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVS UElOIHRvIGFsbAorICogYmFja2VuZHMgdG8gY2hlY2sgaWYgdGhleSBob2xkIG9uZSBvZiB0 aGUgYnVmZmVyIHBpbnMgdGhhdCBpcyBibG9ja2luZworICogU3RhcnR1cCBwcm9jZXNzLiBJ ZiBzbywgdGhvc2UgYmFja2VuZHMgd2lsbCB0YWtlIGFuIGFwcHJvcHJpYXRlIGVycm9yCisg KiBhY3Rpb24sIEVSUk9SIG9yIEZBVEFMLgogICoKICAqIFdlIGFsc28gbXVzdCBjaGVjayBm b3IgZGVhZGxvY2tzLiAgRGVhZGxvY2tzIG9jY3VyIGJlY2F1c2UgaWYgcXVlcmllcwogICog d2FpdCBvbiBhIGxvY2ssIHRoYXQgbXVzdCBiZSBiZWhpbmQgYW4gQWNjZXNzRXhjbHVzaXZl TG9jaywgd2hpY2ggY2FuIG9ubHkKQEAgLTgzOCw5ICs4NDgsMTkgQEAgUmVzb2x2ZVJlY292 ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKHZvaWQpCiAJICogV2UgYXNzdW1lIHRoYXQgb25s eSBVbnBpbkJ1ZmZlcigpIGFuZCB0aGUgdGltZW91dCByZXF1ZXN0cyBlc3RhYmxpc2hlZAog CSAqIGFib3ZlIGNhbiB3YWtlIHVzIHVwIGhlcmUuIFdha2V1cFJlY292ZXJ5KCkgY2FsbGVk IGJ5IHdhbHJlY2VpdmVyIG9yCiAJICogU0lHSFVQIHNpZ25hbCBoYW5kbGVyLCBldGMgY2Fu bm90IGRvIHRoYXQgYmVjYXVzZSBpdCB1c2VzIHRoZSBkaWZmZXJlbnQKLQkgKiBsYXRjaCBm cm9tIHRoYXQgUHJvY1dhaXRGb3JTaWduYWwoKSB3YWl0cyBvbi4KKwkgKiBpbnRlcnJ1cHQg ZmxhZy4KKwkgKgorCSAqIEZJWE1FOiBzZWVtcyBsaWtlIGEgc2hha3kgYXNzdW1wdGlvbi4g V2FrZXVwUmVjb3ZlcnkoKSBpbmRlZWQgdXNlcyBhCisJICogZGlmZmVyZW50IGludGVycnVw dCBmbGFnIChkaWZmZXJlbnQgbGF0Y2ggZWFybGllciksIGJ1dCBvdGhlcgorCSAqIGludGVy cnVwdHMgY3VycmVudGx5IGluIENoZWNrRm9ySW50ZXJydXB0c01hc2sgY291bGQgc3VyZWx5 IHdha2UgdXMgdXAKKwkgKiB0b28uIEhvd2V2ZXIsIHRoZSBjYWxsZXIgbG9vcHMgaWYgdGhl IGJ1ZmZlciBpcyBzdGlsbCBwaW5uZWQsIHNvIHRoaXMKKwkgKiBpc24ndCBjb21wbGV0ZWx5 IGJyb2tlbi4gVGhlIHRpbWVvdXRzIGdldCByZXNldCB0aG91Z2guCiAJICovCi0JUHJvY1dh aXRGb3JTaWduYWwoV0FJVF9FVkVOVF9CVUZGRVJfQ0xFQU5VUCk7CisJV2FpdEludGVycnVw dChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAorCQkJ CSAgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkgIFdBSVRf RVZFTlRfQlVGRkVSX0NMRUFOVVApOworCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlU X1dBS0VVUCk7CisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCWlmIChnb3Rfc3RhbmRi eV9kZWxheV90aW1lb3V0KQogCQlTZW5kUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4o UkVDT1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOKTsKQEAgLTkzNiw2ICs5NTYsNyBAQCB2b2lk CiBTdGFuZGJ5RGVhZExvY2tIYW5kbGVyKHZvaWQpCiB7CiAJZ290X3N0YW5kYnlfZGVhZGxv Y2tfdGltZW91dCA9IHRydWU7CisJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FL RVVQKTsKIH0KIAogLyoKQEAgLTk0NSw2ICs5NjYsNyBAQCB2b2lkCiBTdGFuZGJ5VGltZW91 dEhhbmRsZXIodm9pZCkKIHsKIAlnb3Rfc3RhbmRieV9kZWxheV90aW1lb3V0ID0gdHJ1ZTsK KwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOwogfQogCiAvKgpAQCAt OTU0LDYgKzk3Niw3IEBAIHZvaWQKIFN0YW5kYnlMb2NrVGltZW91dEhhbmRsZXIodm9pZCkK IHsKIAlnb3Rfc3RhbmRieV9sb2NrX3RpbWVvdXQgPSB0cnVlOworCVJhaXNlSW50ZXJydXB0 KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy93YWl0ZXZlbnRzZXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3dhaXRldmVudHNldC5jCmluZGV4IDc3MmUzNTBhMGMwLi42MTJkZThiMzVlOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvd2FpdGV2ZW50c2V0LmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvd2FpdGV2ZW50c2V0LmMKQEAgLTgsOCArOCw4IEBA CiAgKiBwc2VsZWN0KCkgKGFzIG9wcG9zZWQgdG8gcGxhaW4gcG9sbCgpL3NlbGVjdCgpKS4K ICAqCiAgKiBZb3UgY2FuIHdhaXQgZm9yOgotICogLSBhIGxhdGNoIGJlaW5nIHNldCBmcm9t IGFub3RoZXIgcHJvY2VzcyBvciBmcm9tIHNpZ25hbCBoYW5kbGVyIGluIHRoZSBzYW1lCi0g KiAgIHByb2Nlc3MgKFdMX0xBVENIX1NFVCkKKyAqIC0gYW4gaW50ZXJydXB0IGZyb20gYW5v dGhlciBwcm9jZXNzIG9yIGZyb20gc2lnbmFsIGhhbmRsZXIgaW4gdGhlIHNhbWUKKyAqICAg cHJvY2VzcyAoV0xfSU5URVJSVVBUKQogICogLSBkYXRhIHRvIGJlY29tZSByZWFkYWJsZSBv ciB3cml0ZWFibGUgb24gYSBzb2NrZXQgKFdMX1NPQ0tFVF8qKQogICogLSBwb3N0bWFzdGVy IGRlYXRoIChXTF9QT1NUTUFTVEVSX0RFQVRIIG9yIFdMX0VYSVRfT05fUE1fREVBVEgpCiAg KiAtIHRpbWVvdXQgKFdMX1RJTUVPVVQpCkBAIC0xNywxNSArMTcsMTYgQEAKICAqIEltcGxl bWVudGF0aW9uCiAgKiAtLS0tLS0tLS0tLS0tLQogICoKLSAqIFRoZSBwb2xsKCkgaW1wbGVt ZW50YXRpb24gdXNlcyB0aGUgc28tY2FsbGVkIHNlbGYtcGlwZSB0cmljayB0byBvdmVyY29t ZSB0aGUKLSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmVkIHdpdGggcG9sbCgpIGFuZCBzZXR0 aW5nIGEgZ2xvYmFsIGZsYWcgaW4gdGhlIHNpZ25hbAotICogaGFuZGxlci4gV2hlbiBhIGxh dGNoIGlzIHNldCBhbmQgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyB3YWl0aW5nIGZvciBpdCwg dGhlCi0gKiBzaWduYWwgaGFuZGxlciB3YWtlcyB1cCB0aGUgcG9sbCgpIGluIFdhaXRMYXRj aCBieSB3cml0aW5nIGEgYnl0ZSB0byBhIHBpcGUuCi0gKiBBIHNpZ25hbCBieSBpdHNlbGYg ZG9lc24ndCBpbnRlcnJ1cHQgcG9sbCgpIG9uIGFsbCBwbGF0Zm9ybXMsIGFuZCBldmVuIG9u Ci0gKiBwbGF0Zm9ybXMgd2hlcmUgaXQgZG9lcywgYSBzaWduYWwgdGhhdCBhcnJpdmVzIGp1 c3QgYmVmb3JlIHRoZSBwb2xsKCkgY2FsbAotICogZG9lcyBub3QgcHJldmVudCBwb2xsKCkg ZnJvbSBlbnRlcmluZyBzbGVlcC4gQW4gaW5jb21pbmcgYnl0ZSBvbiBhIHBpcGUKLSAqIGhv d2V2ZXIgcmVsaWFibHkgaW50ZXJydXB0cyB0aGUgc2xlZXAsIGFuZCBjYXVzZXMgcG9sbCgp IHRvIHJldHVybgotICogaW1tZWRpYXRlbHkgZXZlbiBpZiB0aGUgc2lnbmFsIGFycml2ZXMg YmVmb3JlIHBvbGwoKSBiZWdpbnMuCisgKiBUaGUgcG9sbCgpIGltcGxlbWVudGF0aW9uIHVz ZXMgdGhlIHNvLWNhbGxlZCBzZWxmLXBpcGUgdHJpY2sgdG8gb3ZlcmNvbWUKKyAqIHRoZSBy YWNlIGNvbmRpdGlvbiBpbnZvbHZlZCB3aXRoIHBvbGwoKSBhbmQgc2V0dGluZyBhIGdsb2Jh bCBmbGFnIGluIHRoZQorICogc2lnbmFsIGhhbmRsZXIuIFdoZW4gYW4gaW50ZXJydXB0IGlz IHJlY2VpdmVkIGFuZCB0aGUgY3VycmVudCBwcm9jZXNzIGlzCisgKiB3YWl0aW5nIHdhaXRp bmcgZm9yIGl0LCB0aGUgc2lnbmFsIGhhbmRsZXIgd2FrZXMgdXAgdGhlIHBvbGwoKSBpbgor ICogV2FpdEludGVycnVwdCBieSB3cml0aW5nIGEgYnl0ZSB0byBhIHBpcGUuICBBIHNpZ25h bCBieSBpdHNlbGYgZG9lc24ndAorICogaW50ZXJydXB0IHBvbGwoKSBvbiBhbGwgcGxhdGZv cm1zLCBhbmQgZXZlbiBvbiBwbGF0Zm9ybXMgd2hlcmUgaXQgZG9lcywgYQorICogc2lnbmFs IHRoYXQgYXJyaXZlcyBqdXN0IGJlZm9yZSB0aGUgcG9sbCgpIGNhbGwgZG9lcyBub3QgcHJl dmVudCBwb2xsKCkKKyAqIGZyb20gZW50ZXJpbmcgc2xlZXAuIEFuIGluY29taW5nIGJ5dGUg b24gYSBwaXBlIGhvd2V2ZXIgcmVsaWFibHkgaW50ZXJydXB0cworICogdGhlIHNsZWVwLCBh bmQgY2F1c2VzIHBvbGwoKSB0byByZXR1cm4gaW1tZWRpYXRlbHkgZXZlbiBpZiB0aGUgc2ln bmFsCisgKiBhcnJpdmVzIGJlZm9yZSBwb2xsKCkgYmVnaW5zLgogICoKICAqIFRoZSBlcG9s bCgpIGltcGxlbWVudGF0aW9uIG92ZXJjb21lcyB0aGUgcmFjZSB3aXRoIGEgZGlmZmVyZW50 IHRlY2huaXF1ZTogaXQKICAqIGtlZXBzIFNJR1VSRyBibG9ja2VkIGFuZCBjb25zdW1lcyBm cm9tIGEgc2lnbmFsZmQoKSBkZXNjcmlwdG9yIGluc3RlYWQuICBXZQpAQCAtNzMsNyArNzQs NyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xh dGNoLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS93 YWl0ZXZlbnRzZXQuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3Jlc293bmVyLmgiCkBAIC0xMjgsMTMgKzEyOSwxMyBAQCBzdHJ1Y3QgV2FpdEV2 ZW50U2V0CiAJV2FpdEV2ZW50ICAqZXZlbnRzOwogCiAJLyoKLQkgKiBJZiBXTF9MQVRDSF9T RVQgaXMgc3BlY2lmaWVkIGluIGFueSB3YWl0IGV2ZW50LCBsYXRjaCBpcyBhIHBvaW50ZXIg dG8KLQkgKiBzYWlkIGxhdGNoLCBhbmQgbGF0Y2hfcG9zIHRoZSBvZmZzZXQgaW4gdGhlIC0+ ZXZlbnRzIGFycmF5LiBUaGlzIGlzCi0JICogdXNlZnVsIGJlY2F1c2Ugd2UgY2hlY2sgdGhl IHN0YXRlIG9mIHRoZSBsYXRjaCBiZWZvcmUgcGVyZm9ybWluZyBkb2luZwotCSAqIHN5c2Nh bGxzIHJlbGF0ZWQgdG8gd2FpdGluZy4KKwkgKiBJZiBXTF9JTlRFUlJVUFQgaXMgc3BlY2lm aWVkIGluIGFueSB3YWl0IGV2ZW50LCBpbnRlcnJ1cHRNYXNrIGlzIHRoZQorCSAqIGludGVy cnVwdHMgdG8gd2FpdCBmb3IsIGFuZCBpbnRlcnJ1cHRfcG9zIHRoZSBvZmZzZXQgaW4gdGhl IC0+ZXZlbnRzCisJICogYXJyYXkuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2Ugd2UgY2hlY2sg dGhlIHN0YXRlIG9mIHBlbmRpbmcgaW50ZXJydXB0cworCSAqIGJlZm9yZSBwZXJmb3JtaW5n IHN5c2NhbGxzIHJlbGF0ZWQgdG8gd2FpdGluZy4KIAkgKi8KLQlMYXRjaAkgICAqbGF0Y2g7 Ci0JaW50CQkJbGF0Y2hfcG9zOworCUludGVycnVwdE1hc2sgaW50ZXJydXB0X21hc2s7CisJ aW50CQkJaW50ZXJydXB0X3BvczsKIAogCS8qCiAJICogV0xfRVhJVF9PTl9QTV9ERUFUSCBp cyBjb252ZXJ0ZWQgdG8gV0xfUE9TVE1BU1RFUl9ERUFUSCwgYnV0IHRoaXMgZmxhZwpAQCAt MTY3LDcgKzE2OCw3IEBAIHN0cnVjdCBXYWl0RXZlbnRTZXQKIH07CiAKICNpZm5kZWYgV0lO MzIKLS8qIEFyZSB3ZSBjdXJyZW50bHkgaW4gV2FpdExhdGNoPyBUaGUgc2lnbmFsIGhhbmRs ZXIgd291bGQgbGlrZSB0byBrbm93LiAqLworLyogQXJlIHdlIGN1cnJlbnRseSBvbiBhIFdh aXRFdmVudFNldD8gVGhlIHNpZ25hbCBoYW5kbGVyIHdvdWxkIGxpa2UgdG8ga25vdy4gKi8K IHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3Qgd2FpdGluZyA9IGZhbHNlOwogI2VuZGlm CiAKQEAgLTE4Myw5ICsxODQsMTYgQEAgc3RhdGljIGludAlzZWxmcGlwZV93cml0ZWZkID0g LTE7CiAKIC8qIFByb2Nlc3Mgb3duaW5nIHRoZSBzZWxmLXBpcGUgLS0tIG5lZWRlZCBmb3Ig Y2hlY2tpbmcgcHVycG9zZXMgKi8KIHN0YXRpYyBpbnQJc2VsZnBpcGVfb3duZXJfcGlkID0g MDsKKyNlbmRpZgorCisjaWZkZWYgV0FJVF9VU0VfV0lOMzIKK3N0YXRpYyBIQU5ETEUgTG9j YWxJbnRlcnJ1cHRXYWtldXBFdmVudDsKKyNlbmRpZgogCiAvKiBQcml2YXRlIGZ1bmN0aW9u IHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGxhdGNoX3NpZ3VyZ19oYW5kbGVyKFNJR05B TF9BUkdTKTsKKworI2lmZGVmIFdBSVRfVVNFX1NFTEZfUElQRQorc3RhdGljIHZvaWQgaW50 ZXJydXB0X3NpZ3VyZ19oYW5kbGVyKFNJR05BTF9BUkdTKTsKIHN0YXRpYyB2b2lkIHNlbmRT ZWxmUGlwZUJ5dGUodm9pZCk7CiAjZW5kaWYKIApAQCAtMjM1LDcgKzI0Myw3IEBAIFJlc291 cmNlT3duZXJGb3JnZXRXYWl0RXZlbnRTZXQoUmVzb3VyY2VPd25lciBvd25lciwgV2FpdEV2 ZW50U2V0ICpzZXQpCiAgKiBJbml0aWFsaXplIHRoZSBwcm9jZXNzLWxvY2FsIHdhaXQgZXZl bnQgaW5mcmFzdHJ1Y3R1cmUuCiAgKgogICogVGhpcyBtdXN0IGJlIGNhbGxlZCBvbmNlIGR1 cmluZyBzdGFydHVwIG9mIGFueSBwcm9jZXNzIHRoYXQgY2FuIHdhaXQgb24KLSAqIGxhdGNo ZXMsIGJlZm9yZSBpdCBpc3N1ZXMgYW55IEluaXRMYXRjaCgpIG9yIE93bkxhdGNoKCkgY2Fs bHMuCisgKiBpbnRlcnJ1cHRzLgogICovCiB2b2lkCiBJbml0aWFsaXplV2FpdEV2ZW50U3Vw cG9ydCh2b2lkKQpAQCAtMjg1LDEyICsyOTMsMTIgQEAgSW5pdGlhbGl6ZVdhaXRFdmVudFN1 cHBvcnQodm9pZCkKIAogCS8qCiAJICogU2V0IHVwIHRoZSBzZWxmLXBpcGUgdGhhdCBhbGxv d3MgYSBzaWduYWwgaGFuZGxlciB0byB3YWtlIHVwIHRoZQotCSAqIHBvbGwoKS9lcG9sbF93 YWl0KCkgaW4gV2FpdExhdGNoLiBNYWtlIHRoZSB3cml0ZS1lbmQgbm9uLWJsb2NraW5nLCBz bwotCSAqIHRoYXQgU2V0TGF0Y2ggd29uJ3QgYmxvY2sgaWYgdGhlIGV2ZW50IGhhcyBhbHJl YWR5IGJlZW4gc2V0IG1hbnkgdGltZXMKLQkgKiBmaWxsaW5nIHRoZSBrZXJuZWwgYnVmZmVy LiBNYWtlIHRoZSByZWFkLWVuZCBub24tYmxvY2tpbmcgdG9vLCBzbyB0aGF0Ci0JICogd2Ug Y2FuIGVhc2lseSBjbGVhciB0aGUgcGlwZSBieSByZWFkaW5nIHVudGlsIEVBR0FJTiBvciBF V09VTERCTE9DSy4KLQkgKiBBbHNvLCBtYWtlIGJvdGggRkRzIGNsb3NlLW9uLWV4ZWMsIHNp bmNlIHdlIHN1cmVseSBkbyBub3Qgd2FudCBhbnkKLQkgKiBjaGlsZCBwcm9jZXNzZXMgbWVz c2luZyB3aXRoIHRoZW0uCisJICogcG9sbCgpL2Vwb2xsX3dhaXQoKSBpbiBXYWl0SW50ZXJy dXB0LiBNYWtlIHRoZSB3cml0ZS1lbmQgbm9uLWJsb2NraW5nLAorCSAqIHNvIHRoYXQgU2Vu ZEludGVycnVwdCB3b24ndCBibG9jayBpZiB0aGUgZXZlbnQgaGFzIGFscmVhZHkgYmVlbiBz ZXQKKwkgKiBtYW55IHRpbWVzIGZpbGxpbmcgdGhlIGtlcm5lbCBidWZmZXIuIE1ha2UgdGhl IHJlYWQtZW5kIG5vbi1ibG9ja2luZworCSAqIHRvbywgc28gdGhhdCB3ZSBjYW4gZWFzaWx5 IGNsZWFyIHRoZSBwaXBlIGJ5IHJlYWRpbmcgdW50aWwgRUFHQUlOIG9yCisJICogRVdPVUxE QkxPQ0suIEFsc28sIG1ha2UgYm90aCBGRHMgY2xvc2Utb24tZXhlYywgc2luY2Ugd2Ugc3Vy ZWx5IGRvIG5vdAorCSAqIHdhbnQgYW55IGNoaWxkIHByb2Nlc3NlcyBtZXNzaW5nIHdpdGgg dGhlbS4KIAkgKi8KIAlpZiAocGlwZShwaXBlZmQpIDwgMCkKIAkJZWxvZyhGQVRBTCwgInBp cGUoKSBmYWlsZWQ6ICVtIik7CkBAIC0zMTEsNyArMzE5LDcgQEAgSW5pdGlhbGl6ZVdhaXRF dmVudFN1cHBvcnQodm9pZCkKIAlSZXNlcnZlRXh0ZXJuYWxGRCgpOwogCVJlc2VydmVFeHRl cm5hbEZEKCk7CiAKLQlwcXNpZ25hbChTSUdVUkcsIGxhdGNoX3NpZ3VyZ19oYW5kbGVyKTsK KwlwcXNpZ25hbChTSUdVUkcsIGludGVycnVwdF9zaWd1cmdfaGFuZGxlcik7CiAjZW5kaWYK IAogI2lmZGVmIFdBSVRfVVNFX1NJR05BTEZECkBAIC0zNDksNiArMzU3LDEyIEBAIEluaXRp YWxpemVXYWl0RXZlbnRTdXBwb3J0KHZvaWQpCiAJLyogSWdub3JlIFNJR1VSRywgYmVjYXVz ZSB3ZSdsbCByZWNlaXZlIGl0IHZpYSBrcXVldWUuICovCiAJcHFzaWduYWwoU0lHVVJHLCBT SUdfSUdOKTsKICNlbmRpZgorCisjaWZkZWYgV0FJVF9VU0VfV0lOMzIKKwlMb2NhbEludGVy cnVwdFdha2V1cEV2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwp OworCWlmIChMb2NhbEludGVycnVwdFdha2V1cEV2ZW50ID09IE5VTEwpCisJCWVsb2coRVJS T1IsICJDcmVhdGVFdmVudCBmYWlsZWQ6IGVycm9yIGNvZGUgJWx1IiwgR2V0TGFzdEVycm9y KCkpOworI2VuZGlmCiB9CiAKIC8qCkBAIC00MTIsNyArNDI2LDggQEAgQ3JlYXRlV2FpdEV2 ZW50U2V0KFJlc291cmNlT3duZXIgcmVzb3duZXIsIGludCBuZXZlbnRzKQogCWRhdGEgKz0g TUFYQUxJR04oc2l6ZW9mKEhBTkRMRSkgKiBuZXZlbnRzKTsKICNlbmRpZgogCi0Jc2V0LT5s YXRjaCA9IE5VTEw7CisJc2V0LT5pbnRlcnJ1cHRfbWFzayA9IDA7CisJc2V0LT5pbnRlcnJ1 cHRfcG9zID0gLTE7CiAJc2V0LT5uZXZlbnRzX3NwYWNlID0gbmV2ZW50czsKIAlzZXQtPmV4 aXRfb25fcG9zdG1hc3Rlcl9kZWF0aCA9IGZhbHNlOwogCkBAIC00OTYsOSArNTExLDkgQEAg RnJlZVdhaXRFdmVudFNldChXYWl0RXZlbnRTZXQgKnNldCkKIAkJIGN1cl9ldmVudCA8IChz ZXQtPmV2ZW50cyArIHNldC0+bmV2ZW50cyk7CiAJCSBjdXJfZXZlbnQrKykKIAl7Ci0JCWlm IChjdXJfZXZlbnQtPmV2ZW50cyAmIFdMX0xBVENIX1NFVCkKKwkJaWYgKGN1cl9ldmVudC0+ ZXZlbnRzICYgV0xfSU5URVJSVVBUKQogCQl7Ci0JCQkvKiB1c2VzIHRoZSBsYXRjaCdzIEhB TkRMRSAqLworCQkJLyogdXNlcyB0aGUgcHJvY2VzcydzIHdha2V1cCBIQU5ETEUgKi8KIAkJ fQogCQllbHNlIGlmIChjdXJfZXZlbnQtPmV2ZW50cyAmIFdMX1BPU1RNQVNURVJfREVBVEgp CiAJCXsKQEAgLTUzNSw3ICs1NTAsNyBAQCBGcmVlV2FpdEV2ZW50U2V0QWZ0ZXJGb3JrKFdh aXRFdmVudFNldCAqc2V0KQogCiAvKiAtLS0KICAqIEFkZCBhbiBldmVudCB0byB0aGUgc2V0 LiBQb3NzaWJsZSBldmVudHMgYXJlOgotICogLSBXTF9MQVRDSF9TRVQ6IFdhaXQgZm9yIHRo ZSBsYXRjaCB0byBiZSBzZXQKKyAqIC0gV0xfSU5URVJSVVBUOiBXYWl0IGZvciB0aGUgaW50 ZXJydXB0IHRvIGJlIHJhaXNlZAogICogLSBXTF9QT1NUTUFTVEVSX0RFQVRIOiBXYWl0IGZv ciBwb3N0bWFzdGVyIHRvIGRpZQogICogLSBXTF9TT0NLRVRfUkVBREFCTEU6IFdhaXQgZm9y IHNvY2tldCB0byBiZWNvbWUgcmVhZGFibGUsCiAgKgkgY2FuIGJlIGNvbWJpbmVkIGluIG9u ZSBldmVudCB3aXRoIG90aGVyIFdMX1NPQ0tFVF8qIGV2ZW50cwpAQCAtNTUzLDEwICs1Njgs NiBAQCBGcmVlV2FpdEV2ZW50U2V0QWZ0ZXJGb3JrKFdhaXRFdmVudFNldCAqc2V0KQogICog UmV0dXJucyB0aGUgb2Zmc2V0IGluIFdhaXRFdmVudFNldC0+ZXZlbnRzIChzdGFydGluZyBm cm9tIDApLCB3aGljaCBjYW4gYmUKICAqIHVzZWQgdG8gbW9kaWZ5IHByZXZpb3VzbHkgYWRk ZWQgd2FpdCBldmVudHMgdXNpbmcgTW9kaWZ5V2FpdEV2ZW50KCkuCiAgKgotICogSW4gdGhl IFdMX0xBVENIX1NFVCBjYXNlIHRoZSBsYXRjaCBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjdXJy ZW50IHByb2Nlc3MsCi0gKiBpLmUuIGl0IG11c3QgYmUgYSBwcm9jZXNzLWxvY2FsIGxhdGNo IGluaXRpYWxpemVkIHdpdGggSW5pdExhdGNoLCBvciBhCi0gKiBzaGFyZWQgbGF0Y2ggYXNz b2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHByb2Nlc3MgYnkgY2FsbGluZyBPd25MYXRjaC4K LSAqCiAgKiBJbiB0aGUgV0xfU09DS0VUX1JFQURBQkxFL1dSSVRFQUJMRS9DT05ORUNURUQv QUNDRVBUIGNhc2VzLCBFT0YgYW5kIGVycm9yCiAgKiBjb25kaXRpb25zIGNhdXNlIHRoZSBz b2NrZXQgdG8gYmUgcmVwb3J0ZWQgYXMgcmVhZGFibGUvd3JpdGFibGUvY29ubmVjdGVkLAog ICogc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBkZWFsIHdpdGggdGhlIGNvbmRpdGlvbi4KQEAg LTU2Niw3ICs1NzcsNyBAQCBGcmVlV2FpdEV2ZW50U2V0QWZ0ZXJGb3JrKFdhaXRFdmVudFNl dCAqc2V0KQogICogZXZlbnRzLgogICovCiBpbnQKLUFkZFdhaXRFdmVudFRvU2V0KFdhaXRF dmVudFNldCAqc2V0LCB1aW50MzIgZXZlbnRzLCBwZ3NvY2tldCBmZCwgTGF0Y2ggKmxhdGNo LAorQWRkV2FpdEV2ZW50VG9TZXQoV2FpdEV2ZW50U2V0ICpzZXQsIHVpbnQzMiBldmVudHMs IHBnc29ja2V0IGZkLCBJbnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2ssCiAJCQkJICB2b2lk ICp1c2VyX2RhdGEpCiB7CiAJV2FpdEV2ZW50ICAqZXZlbnQ7CkBAIC01ODAsMTkgKzU5MSwx NiBAQCBBZGRXYWl0RXZlbnRUb1NldChXYWl0RXZlbnRTZXQgKnNldCwgdWludDMyIGV2ZW50 cywgcGdzb2NrZXQgZmQsIExhdGNoICpsYXRjaCwKIAkJc2V0LT5leGl0X29uX3Bvc3RtYXN0 ZXJfZGVhdGggPSB0cnVlOwogCX0KIAotCWlmIChsYXRjaCkKLQl7Ci0JCWlmIChsYXRjaC0+ b3duZXJfcGlkICE9IE15UHJvY1BpZCkKLQkJCWVsb2coRVJST1IsICJjYW5ub3Qgd2FpdCBv biBhIGxhdGNoIG93bmVkIGJ5IGFub3RoZXIgcHJvY2VzcyIpOwotCQlpZiAoc2V0LT5sYXRj aCkKLQkJCWVsb2coRVJST1IsICJjYW5ub3Qgd2FpdCBvbiBtb3JlIHRoYW4gb25lIGxhdGNo Iik7Ci0JCWlmICgoZXZlbnRzICYgV0xfTEFUQ0hfU0VUKSAhPSBXTF9MQVRDSF9TRVQpCi0J CQllbG9nKEVSUk9SLCAibGF0Y2ggZXZlbnRzIG9ubHkgc3VwcG9ydCBiZWluZyBzZXQiKTsK LQl9Ci0JZWxzZQorCS8qCisJICogSXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gd2Fp dCBmb3IgV0xfSU5URVJSVVBUIHdpdGggZW1wdHkKKwkgKiBpbnRlcnJ1cHRNYXNrLCBidXQg d2UgYWxsb3cgaXQgc28gdGhhdCB5b3UgY2FuIHVzZSBNb2RpZnlFdmVudCB0byBzZXQKKwkg KiB0aGUgaW50ZXJydXB0TWFzayBsYXRlci4gTm9uLXplcm8gaW50ZXJydXB0TWFzayBkb2Vz bid0IG1ha2Ugc2Vuc2UKKwkgKiB3aXRob3V0IFdMX0lOVEVSUlVQVCwgaG93ZXZlci4KKwkg Ki8KKwlpZiAoaW50ZXJydXB0TWFzayAhPSAwKQogCXsKLQkJaWYgKGV2ZW50cyAmIFdMX0xB VENIX1NFVCkKLQkJCWVsb2coRVJST1IsICJjYW5ub3Qgd2FpdCBvbiBsYXRjaCB3aXRob3V0 IGEgc3BlY2lmaWVkIGxhdGNoIik7CisJCWlmICgoZXZlbnRzICYgV0xfSU5URVJSVVBUKSAh PSBXTF9JTlRFUlJVUFQpCisJCQllbG9nKEVSUk9SLCAiaW50ZXJydXB0ZWQgZXZlbnRzIG9u bHkgc3VwcG9ydCBiZWluZyBzZXQiKTsKIAl9CiAKIAkvKiB3YWl0aW5nIGZvciBzb2NrZXQg cmVhZGluZXNzIHdpdGhvdXQgYSBzb2NrZXQgaW5kaWNhdGVzIGEgYnVnICovCkBAIC02MDgs MTAgKzYxNiwxMCBAQCBBZGRXYWl0RXZlbnRUb1NldChXYWl0RXZlbnRTZXQgKnNldCwgdWlu dDMyIGV2ZW50cywgcGdzb2NrZXQgZmQsIExhdGNoICpsYXRjaCwKIAlldmVudC0+cmVzZXQg PSBmYWxzZTsKICNlbmRpZgogCi0JaWYgKGV2ZW50cyA9PSBXTF9MQVRDSF9TRVQpCisJaWYg KGV2ZW50cyA9PSBXTF9JTlRFUlJVUFQpCiAJewotCQlzZXQtPmxhdGNoID0gbGF0Y2g7Ci0J CXNldC0+bGF0Y2hfcG9zID0gZXZlbnQtPnBvczsKKwkJc2V0LT5pbnRlcnJ1cHRfbWFzayA9 IGludGVycnVwdE1hc2s7CisJCXNldC0+aW50ZXJydXB0X3BvcyA9IGV2ZW50LT5wb3M7CiAj aWYgZGVmaW5lZChXQUlUX1VTRV9TRUxGX1BJUEUpCiAJCWV2ZW50LT5mZCA9IHNlbGZwaXBl X3JlYWRmZDsKICNlbGlmIGRlZmluZWQoV0FJVF9VU0VfU0lHTkFMRkQpCkBAIC02NDUsMTQg KzY1MywxNCBAQCBBZGRXYWl0RXZlbnRUb1NldChXYWl0RXZlbnRTZXQgKnNldCwgdWludDMy IGV2ZW50cywgcGdzb2NrZXQgZmQsIExhdGNoICpsYXRjaCwKIH0KIAogLyoKLSAqIENoYW5n ZSB0aGUgZXZlbnQgbWFzayBhbmQsIGluIHRoZSBXTF9MQVRDSF9TRVQgY2FzZSwgdGhlIGxh dGNoIGFzc29jaWF0ZWQKLSAqIHdpdGggdGhlIFdhaXRFdmVudC4gIFRoZSBsYXRjaCBtYXkg YmUgY2hhbmdlZCB0byBOVUxMIHRvIGRpc2FibGUgdGhlIGxhdGNoCi0gKiB0ZW1wb3Jhcmls eSwgYW5kIHRoZW4gc2V0IGJhY2sgdG8gYSBsYXRjaCBsYXRlci4KKyAqIENoYW5nZSB0aGUg ZXZlbnQgbWFzayBhbmQsIGluIHRoZSBXTF9JTlRFUlJVUFQgY2FzZSwgdGhlIGludGVycnVw dCBtYXNrCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIFdhaXRFdmVudC4gIFRoZSBpbnRlcnJ1 cHQgbWFzayBtYXkgYmUgY2hhbmdlZCB0byAwIHRvCisgKiBkaXNhYmxlIHRoZSB3YWtldXBz IG9uIGludGVycnVwdHMgdGVtcG9yYXJpbHksIGFuZCB0aGVuIHNldCBiYWNrIGxhdGVyLgog ICoKICAqICdwb3MnIGlzIHRoZSBpZCByZXR1cm5lZCBieSBBZGRXYWl0RXZlbnRUb1NldC4K ICAqLwogdm9pZAotTW9kaWZ5V2FpdEV2ZW50KFdhaXRFdmVudFNldCAqc2V0LCBpbnQgcG9z LCB1aW50MzIgZXZlbnRzLCBMYXRjaCAqbGF0Y2gpCitNb2RpZnlXYWl0RXZlbnQoV2FpdEV2 ZW50U2V0ICpzZXQsIGludCBwb3MsIHVpbnQzMiBldmVudHMsIEludGVycnVwdE1hc2sgaW50 ZXJydXB0TWFzaykKIHsKIAlXYWl0RXZlbnQgICpldmVudDsKICNpZiBkZWZpbmVkKFdBSVRf VVNFX0tRVUVVRSkKQEAgLTY4Miw0MCArNjkwLDM0IEBAIE1vZGlmeVdhaXRFdmVudChXYWl0 RXZlbnRTZXQgKnNldCwgaW50IHBvcywgdWludDMyIGV2ZW50cywgTGF0Y2ggKmxhdGNoKQog CX0KIAogCS8qCi0JICogSWYgbmVpdGhlciB0aGUgZXZlbnQgbWFzayBub3IgdGhlIGFzc29j aWF0ZWQgbGF0Y2ggY2hhbmdlcywgcmV0dXJuCi0JICogZWFybHkuIFRoYXQncyBhbiBpbXBv cnRhbnQgb3B0aW1pemF0aW9uIGZvciBzb21lIHNvY2tldHMsIHdoZXJlCisJICogSWYgbmVp dGhlciB0aGUgZXZlbnQgbWFzayBub3IgdGhlIGFzc29jaWF0ZWQgaW50ZXJydXB0IG1hc2sg Y2hhbmdlcywKKwkgKiByZXR1cm4gZWFybHkuIFRoYXQncyBhbiBpbXBvcnRhbnQgb3B0aW1p emF0aW9uIGZvciBzb21lIHNvY2tldHMsIHdoZXJlCiAJICogTW9kaWZ5V2FpdEV2ZW50IGlz IGZyZXF1ZW50bHkgdXNlZCB0byBzd2l0Y2ggZnJvbSB3YWl0aW5nIGZvciByZWFkcyB0bwog CSAqIHdhaXRpbmcgb24gd3JpdGVzLgogCSAqLwogCWlmIChldmVudHMgPT0gZXZlbnQtPmV2 ZW50cyAmJgotCQkoIShldmVudC0+ZXZlbnRzICYgV0xfTEFUQ0hfU0VUKSB8fCBzZXQtPmxh dGNoID09IGxhdGNoKSkKKwkJKCEoZXZlbnQtPmV2ZW50cyAmIFdMX0lOVEVSUlVQVCkgfHwg c2V0LT5pbnRlcnJ1cHRfbWFzayA9PSBpbnRlcnJ1cHRNYXNrKSkKIAkJcmV0dXJuOwogCi0J aWYgKGV2ZW50LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQgJiYgZXZlbnRzICE9IGV2ZW50LT5l dmVudHMpCi0JCWVsb2coRVJST1IsICJjYW5ub3QgbW9kaWZ5IGxhdGNoIGV2ZW50Iik7CisJ aWYgKGV2ZW50LT5ldmVudHMgJiBXTF9JTlRFUlJVUFQgJiYgZXZlbnRzICE9IGV2ZW50LT5l dmVudHMpCisJCWVsb2coRVJST1IsICJjYW5ub3QgbW9kaWZ5IGludGVycnVwdHMgZXZlbnQi KTsKIAogCS8qIEZJWE1FOiB2YWxpZGF0ZSBldmVudCBtYXNrICovCiAJZXZlbnQtPmV2ZW50 cyA9IGV2ZW50czsKIAotCWlmIChldmVudHMgPT0gV0xfTEFUQ0hfU0VUKQorCWlmIChldmVu dHMgPT0gV0xfSU5URVJSVVBUKQogCXsKLQkJaWYgKGxhdGNoICYmIGxhdGNoLT5vd25lcl9w aWQgIT0gTXlQcm9jUGlkKQotCQkJZWxvZyhFUlJPUiwgImNhbm5vdCB3YWl0IG9uIGEgbGF0 Y2ggb3duZWQgYnkgYW5vdGhlciBwcm9jZXNzIik7Ci0JCXNldC0+bGF0Y2ggPSBsYXRjaDsK KwkJc2V0LT5pbnRlcnJ1cHRfbWFzayA9IGludGVycnVwdE1hc2s7CiAKIAkJLyoKLQkJICog T24gVW5peCwgd2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgdGhlIGtlcm5lbCBvYmplY3QgYmVj YXVzZSB0aGUKLQkJICogdW5kZXJseWluZyBwaXBlIChpZiB0aGVyZSBpcyBvbmUpIGlzIHRo ZSBzYW1lIGZvciBhbGwgbGF0Y2hlcyBzbyB3ZQotCQkgKiBjYW4gcmV0dXJuIGltbWVkaWF0 ZWx5LiAgT24gV2luZG93cywgd2UgbmVlZCB0byB1cGRhdGUgb3VyIGFycmF5IG9mCi0JCSAq IGhhbmRsZXMsIGJ1dCB3ZSBsZWF2ZSB0aGUgb2xkIG9uZSBpbiBwbGFjZSBhbmQgdG9sZXJh dGUgc3B1cmlvdXMKLQkJICogd2FrZXVwcyBpZiB0aGUgbGF0Y2ggaXMgZGlzYWJsZWQuCisJ CSAqIFdlIGRvbid0IGJvdGhlciB0byBhZGp1c3QgdGhlIGV2ZW50IHdoZW4gdGhlIGludGVy cnVwdCBtYXNrCisJCSAqIGNoYW5nZXMuICBJdCBtZWFucyB0aGF0IHdoZW4gaW50ZXJydXB0 IG1hc2sgaXMgc2V0IHRvIDAsIHdlIHdpbGwKKwkJICogbGlzdGVuIG9uIHRoZSBrZXJuZWwg b2JqZWN0IHVubmVjZXNzYXJpbHksIGFuZCBtaWdodCBnZXQgc29tZQorCQkgKiBzcHVyaW91 cyB3YWtldXBzLiBUaGUgaW50ZXJydXB0IHNlbmRpbmcgY29kZSBzaG91bGQgbm90IHdha2Ug dXMgdXAKKwkJICogaWYgdGhlIFNMRUVQSU5HX09OX0lOVEVSUlVQVFMgYml0IGlzIG5vdCBh cm1lZCwgdGhvdWdoLCBzbyBpdAorCQkgKiBzaG91bGQgYmUgcmFyZS4KIAkJICovCi0jaWYg ZGVmaW5lZChXQUlUX1VTRV9XSU4zMikKLQkJaWYgKCFsYXRjaCkKLQkJCXJldHVybjsKLSNl bHNlCiAJCXJldHVybjsKLSNlbmRpZgogCX0KIAogI2lmIGRlZmluZWQoV0FJVF9VU0VfRVBP TEwpCkBAIC03NDUsOSArNzQ3LDggQEAgV2FpdEV2ZW50QWRqdXN0RXBvbGwoV2FpdEV2ZW50 U2V0ICpzZXQsIFdhaXRFdmVudCAqZXZlbnQsIGludCBhY3Rpb24pCiAJZXBvbGxfZXYuZXZl bnRzID0gRVBPTExFUlIgfCBFUE9MTEhVUDsKIAogCS8qIHByZXBhcmUgcG9sbGZkIGVudHJ5 IG9uY2UgKi8KLQlpZiAoZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRDSF9TRVQpCisJaWYgKGV2 ZW50LT5ldmVudHMgPT0gV0xfSU5URVJSVVBUKQogCXsKLQkJQXNzZXJ0KHNldC0+bGF0Y2gg IT0gTlVMTCk7CiAJCWVwb2xsX2V2LmV2ZW50cyB8PSBFUE9MTElOOwogCX0KIAllbHNlIGlm IChldmVudC0+ZXZlbnRzID09IFdMX1BPU1RNQVNURVJfREVBVEgpCkBAIC03OTQsOSArNzk1 LDggQEAgV2FpdEV2ZW50QWRqdXN0UG9sbChXYWl0RXZlbnRTZXQgKnNldCwgV2FpdEV2ZW50 ICpldmVudCkKIAlwb2xsZmQtPmZkID0gZXZlbnQtPmZkOwogCiAJLyogcHJlcGFyZSBwb2xs ZmQgZW50cnkgb25jZSAqLwotCWlmIChldmVudC0+ZXZlbnRzID09IFdMX0xBVENIX1NFVCkK KwlpZiAoZXZlbnQtPmV2ZW50cyA9PSBXTF9JTlRFUlJVUFQpCiAJewotCQlBc3NlcnQoc2V0 LT5sYXRjaCAhPSBOVUxMKTsKIAkJcG9sbGZkLT5ldmVudHMgPSBQT0xMSU47CiAJfQogCWVs c2UgaWYgKGV2ZW50LT5ldmVudHMgPT0gV0xfUE9TVE1BU1RFUl9ERUFUSCkKQEAgLTg1OCw5 ICs4NTgsOSBAQCBXYWl0RXZlbnRBZGp1c3RLcXVldWVBZGRQb3N0bWFzdGVyKHN0cnVjdCBr ZXZlbnQgKmtfZXYsIFdhaXRFdmVudCAqZXZlbnQpCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p ZAotV2FpdEV2ZW50QWRqdXN0S3F1ZXVlQWRkTGF0Y2goc3RydWN0IGtldmVudCAqa19ldiwg V2FpdEV2ZW50ICpldmVudCkKK1dhaXRFdmVudEFkanVzdEtxdWV1ZUFkZEludGVycnVwdFdh a2V1cChzdHJ1Y3Qga2V2ZW50ICprX2V2LCBXYWl0RXZlbnQgKmV2ZW50KQogewotCS8qIEZv ciBub3cgbGF0Y2ggY2FuIG9ubHkgYmUgYWRkZWQsIG5vdCByZW1vdmVkLiAqLworCS8qIEZv ciBub3cgaW50ZXJydXB0IHdha2V1cCBjYW4gb25seSBiZSBhZGRlZCwgbm90IHJlbW92ZWQu ICovCiAJa19ldi0+aWRlbnQgPSBTSUdVUkc7CiAJa19ldi0+ZmlsdGVyID0gRVZGSUxUX1NJ R05BTDsKIAlrX2V2LT5mbGFncyA9IEVWX0FERDsKQEAgLTg4Niw4ICs4ODYsNyBAQCBXYWl0 RXZlbnRBZGp1c3RLcXVldWUoV2FpdEV2ZW50U2V0ICpzZXQsIFdhaXRFdmVudCAqZXZlbnQs IGludCBvbGRfZXZlbnRzKQogCWlmIChvbGRfZXZlbnRzID09IGV2ZW50LT5ldmVudHMpCiAJ CXJldHVybjsKIAotCUFzc2VydChldmVudC0+ZXZlbnRzICE9IFdMX0xBVENIX1NFVCB8fCBz ZXQtPmxhdGNoICE9IE5VTEwpOwotCUFzc2VydChldmVudC0+ZXZlbnRzID09IFdMX0xBVENI X1NFVCB8fAorCUFzc2VydChldmVudC0+ZXZlbnRzID09IFdMX0lOVEVSUlVQVCB8fAogCQkg ICBldmVudC0+ZXZlbnRzID09IFdMX1BPU1RNQVNURVJfREVBVEggfHwKIAkJICAgKGV2ZW50 LT5ldmVudHMgJiAoV0xfU09DS0VUX1JFQURBQkxFIHwKIAkJCQkJCQkgV0xfU09DS0VUX1dS SVRFQUJMRSB8CkBAIC05MDIsMTAgKzkwMSwxMCBAQCBXYWl0RXZlbnRBZGp1c3RLcXVldWUo V2FpdEV2ZW50U2V0ICpzZXQsIFdhaXRFdmVudCAqZXZlbnQsIGludCBvbGRfZXZlbnRzKQog CQkgKi8KIAkJV2FpdEV2ZW50QWRqdXN0S3F1ZXVlQWRkUG9zdG1hc3Rlcigma19ldltjb3Vu dCsrXSwgZXZlbnQpOwogCX0KLQllbHNlIGlmIChldmVudC0+ZXZlbnRzID09IFdMX0xBVENI X1NFVCkKKwllbHNlIGlmIChldmVudC0+ZXZlbnRzID09IFdMX0lOVEVSUlVQVCkKIAl7Ci0J CS8qIFdlIGRldGVjdCBsYXRjaCB3YWtldXAgdXNpbmcgYSBzaWduYWwgZXZlbnQuICovCi0J CVdhaXRFdmVudEFkanVzdEtxdWV1ZUFkZExhdGNoKCZrX2V2W2NvdW50KytdLCBldmVudCk7 CisJCS8qIFdlIGRldGVjdCBpbnRlcnJ1cHQgd2FrZXVwIHVzaW5nIGEgc2lnbmFsIGV2ZW50 LiAqLworCQlXYWl0RXZlbnRBZGp1c3RLcXVldWVBZGRJbnRlcnJ1cHRXYWtldXAoJmtfZXZb Y291bnQrK10sIGV2ZW50KTsKIAl9CiAJZWxzZQogCXsKQEAgLTk4NSwxMCArOTg0LDEzIEBA IFdhaXRFdmVudEFkanVzdFdpbjMyKFdhaXRFdmVudFNldCAqc2V0LCBXYWl0RXZlbnQgKmV2 ZW50KQogewogCUhBTkRMRQkgICAqaGFuZGxlID0gJnNldC0+aGFuZGxlc1tldmVudC0+cG9z ICsgMV07CiAKLQlpZiAoZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRDSF9TRVQpCisJaWYgKGV2 ZW50LT5ldmVudHMgPT0gV0xfSU5URVJSVVBUKQogCXsKLQkJQXNzZXJ0KHNldC0+bGF0Y2gg IT0gTlVMTCk7Ci0JCSpoYW5kbGUgPSBzZXQtPmxhdGNoLT5ldmVudDsKKwkJLyoKKwkJICog V2UgcmVnaXN0ZXIgdGhlIGV2ZW50IGV2ZW4gaWYgaW50ZXJydXB0X21hc2sgaXMgemVyby4g V2UgbWlnaHQgZ2V0CisJCSAqIHNvbWUgc3B1cmlvdXMgd2FrZXVwcywgYnV0IHRoYXQncyBP SworCQkgKi8KKwkJKmhhbmRsZSA9IE15UHJvYyA/IE15UHJvYy0+aW50ZXJydXB0V2FrZXVw RXZlbnQgOiBMb2NhbEludGVycnVwdFdha2V1cEV2ZW50OwogCX0KIAllbHNlIGlmIChldmVu dC0+ZXZlbnRzID09IFdMX1BPU1RNQVNURVJfREVBVEgpCiAJewpAQCAtMTA0NCw2ICsxMDQ2 LDcgQEAgV2FpdEV2ZW50U2V0V2FpdChXYWl0RXZlbnRTZXQgKnNldCwgbG9uZyB0aW1lb3V0 LAogCWluc3RyX3RpbWUJc3RhcnRfdGltZTsKIAlpbnN0cl90aW1lCWN1cl90aW1lOwogCWxv bmcJCWN1cl90aW1lb3V0ID0gLTE7CisJYm9vbAkJc2xlZXBpbmdfZmxhZ19hcm1lZCA9IGZh bHNlOwogCiAJQXNzZXJ0KG5ldmVudHMgPiAwKTsKIApAQCAtMTA2NSwxMDAgKzEwNjgsMTE3 IEBAIFdhaXRFdmVudFNldFdhaXQoV2FpdEV2ZW50U2V0ICpzZXQsIGxvbmcgdGltZW91dCwK ICNpZm5kZWYgV0lOMzIKIAl3YWl0aW5nID0gdHJ1ZTsKICNlbHNlCi0JLyogRW5zdXJlIHRo YXQgc2lnbmFscyBhcmUgc2VydmljZWQgZXZlbiBpZiBsYXRjaCBpcyBhbHJlYWR5IHNldCAq LworCS8qIEVuc3VyZSB0aGF0IHNpZ25hbHMgYXJlIHNlcnZpY2VkIGV2ZW4gaWYgaW50ZXJy dXB0IGlzIGFscmVhZHkgcGVuZGluZyAqLwogCXBnd2luMzJfZGlzcGF0Y2hfcXVldWVkX3Np Z25hbHMoKTsKICNlbmRpZgotCXdoaWxlIChyZXR1cm5lZF9ldmVudHMgPT0gMCkKKworCS8q CisJICogQXRvbWljYWxseSBjaGVjayBpZiB0aGUgaW50ZXJydXB0IGlzIGFscmVhZHkgcGVu ZGluZyBhbmQgYWR2ZXJ0aXNlIHRoYXQKKwkgKiB3ZSBhcmUgYWJvdXQgdG8gc3RhcnQgc2xl ZXBpbmcuIElmIGl0IHdhcyBhbHJlYWR5IHBlbmRpbmcsIGF2b2lkCisJICogYmxvY2tpbmcg YWx0b2dldGhlci4KKwkgKgorCSAqIElmIHNvbWVvbmUgc2V0cyB0aGUgaW50ZXJydXB0IGZs YWcgYmV0d2VlbiB0aGlzIGFuZCB0aGUKKwkgKiBXYWl0RXZlbnRTZXRXYWl0QmxvY2soKSBi ZWxvdywgdGhlIHNldHRlciB3aWxsIHdyaXRlIGEgYnl0ZSB0byB0aGUgcGlwZQorCSAqIChv ciBzaWduYWwgdXMgYW5kIHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGRvIHRoYXQpLCBhbmQg dGhlIHJlYWRpbmVzcworCSAqIHJvdXRpbmUgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuCisJ ICovCisJaWYgKHNldC0+aW50ZXJydXB0X21hc2sgIT0gMCkKIAl7Ci0JCWludAkJCXJjOwor CQlJbnRlcnJ1cHRNYXNrIG9sZF9tYXNrOworCQlib29sCQlhbHJlYWR5X3BlbmRpbmcgPSBm YWxzZTsKIAogCQkvKgotCQkgKiBDaGVjayBpZiB0aGUgbGF0Y2ggaXMgc2V0IGFscmVhZHkg Zmlyc3QuICBJZiBzbywgd2UgZWl0aGVyIGV4aXQKLQkJICogaW1tZWRpYXRlbHkgb3IgYXNr IHRoZSBrZXJuZWwgZm9yIGZ1cnRoZXIgZXZlbnRzIGF2YWlsYWJsZSByaWdodAotCQkgKiBu b3cgd2l0aG91dCB3YWl0aW5nLCBkZXBlbmRpbmcgb24gaG93IG1hbnkgZXZlbnRzIHRoZSBj YWxsZXIgd2FudHMuCi0JCSAqCi0JCSAqIElmIHNvbWVvbmUgc2V0cyB0aGUgbGF0Y2ggYmV0 d2VlbiB0aGlzIGFuZCB0aGUKLQkJICogV2FpdEV2ZW50U2V0V2FpdEJsb2NrKCkgYmVsb3cs IHRoZSBzZXR0ZXIgd2lsbCB3cml0ZSBhIGJ5dGUgdG8gdGhlCi0JCSAqIHBpcGUgKG9yIHNp Z25hbCB1cyBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIHdpbGwgZG8gdGhhdCksIGFuZCB0aGUK LQkJICogcmVhZGluZXNzIHJvdXRpbmUgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuCi0JCSAq Ci0JCSAqIE9uIHVuaXgsIElmIHRoZXJlJ3MgYSBwZW5kaW5nIGJ5dGUgaW4gdGhlIHNlbGYg cGlwZSwgd2UnbGwgbm90aWNlCi0JCSAqIHdoZW5ldmVyIGJsb2NraW5nLiBPbmx5IGNsZWFy aW5nIHRoZSBwaXBlIGluIHRoYXQgY2FzZSBhdm9pZHMKLQkJICogaGF2aW5nIHRvIGRyYWlu IGl0IGV2ZXJ5IHRpbWUgV2FpdExhdGNoT3JTb2NrZXQoKSBpcyB1c2VkLiBTaG91bGQKLQkJ ICogdGhlIHBpcGUtYnVmZmVyIGZpbGwgdXAgd2UncmUgc3RpbGwgb2ssIGJlY2F1c2UgdGhl IHBpcGUgaXMgaW4KLQkJICogbm9uYmxvY2tpbmcgbW9kZS4gSXQncyB1bmxpa2VseSBmb3Ig dGhhdCB0byBoYXBwZW4sIGJlY2F1c2UgdGhlCi0JCSAqIHNlbGYgcGlwZSBpc24ndCBmaWxs ZWQgdW5sZXNzIHdlJ3JlIGJsb2NraW5nICh3YWl0aW5nID0gdHJ1ZSksIG9yCi0JCSAqIGZy b20gaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIgaW4gbGF0Y2hfc2lndXJnX2hhbmRsZXIoKS4K LQkJICoKLQkJICogT24gd2luZG93cywgd2UnbGwgYWxzbyBub3RpY2UgaWYgdGhlcmUncyBh IHBlbmRpbmcgZXZlbnQgZm9yIHRoZQotCQkgKiBsYXRjaCB3aGVuIGJsb2NraW5nLCBidXQg dGhlcmUncyBubyBkYW5nZXIgb2YgYW55dGhpbmcgZmlsbGluZyB1cCwKLQkJICogYXMgIlNl dHRpbmcgYW4gZXZlbnQgdGhhdCBpcyBhbHJlYWR5IHNldCBoYXMgbm8gZWZmZWN0LiIuCi0J CSAqCi0JCSAqIE5vdGU6IHdlIGFzc3VtZSB0aGF0IHRoZSBrZXJuZWwgY2FsbHMgaW52b2x2 ZWQgaW4gbGF0Y2ggbWFuYWdlbWVudAotCQkgKiB3aWxsIHByb3ZpZGUgYWRlcXVhdGUgc3lu Y2hyb25pemF0aW9uIG9uIG1hY2hpbmVzIHdpdGggd2VhayBtZW1vcnkKLQkJICogb3JkZXJp bmcsIHNvIHRoYXQgd2UgY2Fubm90IG1pc3Mgc2VlaW5nIGlzX3NldCBpZiBhIG5vdGlmaWNh dGlvbgotCQkgKiBoYXMgYWxyZWFkeSBiZWVuIHF1ZXVlZC4KKwkJICogUGVyZm9ybSBhIHBs YWluIGF0b21pYyByZWFkIGZpcnN0IGFzIGEgZmFzdCBwYXRoIGZvciB0aGUgY2FzZSB0aGF0 CisJCSAqIGFuIGludGVycnVwdCBpcyBhbHJlYWR5IHBlbmRpbmcuCiAJCSAqLwotCQlpZiAo c2V0LT5sYXRjaCAmJiAhc2V0LT5sYXRjaC0+aXNfc2V0KQorCQlvbGRfbWFzayA9IHBnX2F0 b21pY19yZWFkX3U2NChNeVBlbmRpbmdJbnRlcnJ1cHRzKTsKKwkJYWxyZWFkeV9wZW5kaW5n ID0gKChvbGRfbWFzayAmIHNldC0+aW50ZXJydXB0X21hc2spICE9IDApOworCisJCWlmICgh YWxyZWFkeV9wZW5kaW5nKQogCQl7Ci0JCQkvKiBhYm91dCB0byBzbGVlcCBvbiBhIGxhdGNo ICovCi0JCQlzZXQtPmxhdGNoLT5tYXliZV9zbGVlcGluZyA9IHRydWU7Ci0JCQlwZ19tZW1v cnlfYmFycmllcigpOwotCQkJLyogYW5kIHJlY2hlY2sgKi8KKwkJCS8qCisJCQkgKiBBdG9t aWNhbGx5IHNldCB0aGUgU0xFRVBJTkdfT05fSU5URVJSVVBUUyBiaXQgYW5kIHJlLWNoZWNr IGlmCisJCQkgKiBhbiBpbnRlcnJ1cHQgaXMgYWxyZWFkeSBwZW5kaW5nLiBUaGUgYXRvbWlj IG9wIHByb3ZpZGVzCisJCQkgKiBzeW5jaHJvbml6YXRpb24gc28gdGhhdCBpZiBhbiBpbnRl cnJ1cHQgYml0IGlzIHNldCBhZnRlciB0aGlzLAorCQkJICogdGhlIHNldHRlciB3aWxsIHdh a2UgdXMgdXAuCisJCQkgKi8KKwkJCW9sZF9tYXNrID0gcGdfYXRvbWljX2ZldGNoX29yX3U2 NChNeVBlbmRpbmdJbnRlcnJ1cHRzLCBTTEVFUElOR19PTl9JTlRFUlJVUFRTKTsKKwkJCWFs cmVhZHlfcGVuZGluZyA9ICgob2xkX21hc2sgJiBzZXQtPmludGVycnVwdF9tYXNrKSAhPSAw KTsKKworCQkJLyogcmVtZW1iZXIgdG8gY2xlYXIgdGhlIFNMRUVQSU5HX09OX0lOVEVSUlVQ VFMgZmxhZyBsYXRlciAqLworCQkJc2xlZXBpbmdfZmxhZ19hcm1lZCA9IHRydWU7CiAJCX0K IAotCQlpZiAoc2V0LT5sYXRjaCAmJiBzZXQtPmxhdGNoLT5pc19zZXQpCisJCWlmIChhbHJl YWR5X3BlbmRpbmcpCiAJCXsKIAkJCW9jY3VycmVkX2V2ZW50cy0+ZmQgPSBQR0lOVkFMSURf U09DS0VUOwotCQkJb2NjdXJyZWRfZXZlbnRzLT5wb3MgPSBzZXQtPmxhdGNoX3BvczsKKwkJ CW9jY3VycmVkX2V2ZW50cy0+cG9zID0gc2V0LT5pbnRlcnJ1cHRfcG9zOwogCQkJb2NjdXJy ZWRfZXZlbnRzLT51c2VyX2RhdGEgPQotCQkJCXNldC0+ZXZlbnRzW3NldC0+bGF0Y2hfcG9z XS51c2VyX2RhdGE7Ci0JCQlvY2N1cnJlZF9ldmVudHMtPmV2ZW50cyA9IFdMX0xBVENIX1NF VDsKKwkJCQlzZXQtPmV2ZW50c1tzZXQtPmludGVycnVwdF9wb3NdLnVzZXJfZGF0YTsKKwkJ CW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gV0xfSU5URVJSVVBUOwogCQkJb2NjdXJyZWRf ZXZlbnRzKys7CiAJCQlyZXR1cm5lZF9ldmVudHMrKzsKIAotCQkJLyogY291bGQgaGF2ZSBi ZWVuIHNldCBhYm92ZSAqLwotCQkJc2V0LT5sYXRjaC0+bWF5YmVfc2xlZXBpbmcgPSBmYWxz ZTsKLQotCQkJaWYgKHJldHVybmVkX2V2ZW50cyA9PSBuZXZlbnRzKQotCQkJCWJyZWFrOwkJ CS8qIG91dHB1dCBidWZmZXIgZnVsbCBhbHJlYWR5ICovCi0KIAkJCS8qCiAJCQkgKiBFdmVu IHRob3VnaCB3ZSBhbHJlYWR5IGhhdmUgYW4gZXZlbnQsIHdlJ2xsIHBvbGwganVzdCBvbmNl IHdpdGgKLQkJCSAqIHplcm8gdGltZW91dCB0byBzZWUgd2hhdCBub24tbGF0Y2ggZXZlbnRz IHdlIGNhbiBmaXQgaW50byB0aGUKLQkJCSAqIG91dHB1dCBidWZmZXIgYXQgdGhlIHNhbWUg dGltZS4KKwkJCSAqIHplcm8gdGltZW91dCB0byBzZWUgd2hhdCBub24taW50ZXJydXB0IGV2 ZW50cyB3ZSBjYW4gZml0IGludG8KKwkJCSAqIHRoZSBvdXRwdXQgYnVmZmVyIGF0IHRoZSBz YW1lIHRpbWUuCiAJCQkgKi8KIAkJCWN1cl90aW1lb3V0ID0gMDsKIAkJCXRpbWVvdXQgPSAw OwogCQl9CisJfQogCisJaWYgKG5ldmVudHMgPiByZXR1cm5lZF9ldmVudHMpCisJewogCQkv KgogCQkgKiBXYWl0IGZvciBldmVudHMgdXNpbmcgdGhlIHJlYWRpbmVzcyBwcmltaXRpdmUg Y2hvc2VuIGF0IHRoZSB0b3Agb2YKIAkJICogdGhpcyBmaWxlLiBJZiAtMSBpcyByZXR1cm5l ZCwgYSB0aW1lb3V0IGhhcyBvY2N1cnJlZCwgaWYgMCB3ZSBoYXZlCiAJCSAqIHRvIHJldHJ5 LCBldmVyeXRoaW5nID49IDEgaXMgdGhlIG51bWJlciBvZiByZXR1cm5lZCBldmVudHMuCisJ CSAqCisJCSAqIE9uIHVuaXgsIElmIHRoZXJlJ3MgYSBwZW5kaW5nIGJ5dGUgaW4gdGhlIHNl bGYgcGlwZSwgd2UnbGwgbm90aWNlCisJCSAqIHdoZW5ldmVyIGJsb2NraW5nLiBPbmx5IGNs ZWFyaW5nIHRoZSBwaXBlIGluIHRoYXQgY2FzZSBhdm9pZHMKKwkJICogaGF2aW5nIHRvIGRy YWluIGl0IGV2ZXJ5IHRpbWUgV2FpdEludGVycnVwdE9yU29ja2V0KCkgaXMgdXNlZC4KKwkJ ICogU2hvdWxkIHRoZSBwaXBlLWJ1ZmZlciBmaWxsIHVwIHdlJ3JlIHN0aWxsIG9rLCBiZWNh dXNlIHRoZSBwaXBlIGlzCisJCSAqIGluIG5vbmJsb2NraW5nIG1vZGUuIEl0J3MgdW5saWtl bHkgZm9yIHRoYXQgdG8gaGFwcGVuLCBiZWNhdXNlIHRoZQorCQkgKiBzZWxmIHBpcGUgaXNu J3QgZmlsbGVkIHVubGVzcyB3ZSdyZSBibG9ja2luZyAod2FpdGluZyA9IHRydWUpLCBvcgor CQkgKiBmcm9tIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyIGluIGludGVycnVwdF9zaWd1cmdf aGFuZGxlcigpLgorCQkgKgorCQkgKiBPbiB3aW5kb3dzLCB3ZSdsbCBhbHNvIG5vdGljZSBp ZiB0aGVyZSdzIGEgcGVuZGluZyBldmVudCBmb3IgdGhlCisJCSAqIGludGVycnVwdCB3aGVu IGJsb2NraW5nLCBidXQgdGhlcmUncyBubyBkYW5nZXIgb2YgYW55dGhpbmcgZmlsbGluZwor CQkgKiB1cCwgYXMgIlNldHRpbmcgYW4gZXZlbnQgdGhhdCBpcyBhbHJlYWR5IHNldCBoYXMg bm8gZWZmZWN0LiIuCiAJCSAqLwotCQlyYyA9IFdhaXRFdmVudFNldFdhaXRCbG9jayhzZXQs IGN1cl90aW1lb3V0LAotCQkJCQkJCQkgICBvY2N1cnJlZF9ldmVudHMsIG5ldmVudHMgLSBy ZXR1cm5lZF9ldmVudHMpOworCQlmb3IgKDs7KQorCQl7CisJCQlpbnQJCQlyYzsKIAotCQlp ZiAoc2V0LT5sYXRjaCAmJgotCQkJc2V0LT5sYXRjaC0+bWF5YmVfc2xlZXBpbmcpCi0JCQlz ZXQtPmxhdGNoLT5tYXliZV9zbGVlcGluZyA9IGZhbHNlOworCQkJcmMgPSBXYWl0RXZlbnRT ZXRXYWl0QmxvY2soc2V0LCBjdXJfdGltZW91dCwKKwkJCQkJCQkJCSAgIG9jY3VycmVkX2V2 ZW50cywgbmV2ZW50cyAtIHJldHVybmVkX2V2ZW50cyk7CiAKLQkJaWYgKHJjID09IC0xKQot CQkJYnJlYWs7CQkJCS8qIHRpbWVvdXQgb2NjdXJyZWQgKi8KLQkJZWxzZQotCQkJcmV0dXJu ZWRfZXZlbnRzICs9IHJjOworCQkJaWYgKHJjID09IC0xKQorCQkJCWJyZWFrOwkJCS8qIHRp bWVvdXQgb2NjdXJyZWQgKi8KKwkJCWVsc2UKKwkJCQlyZXR1cm5lZF9ldmVudHMgKz0gcmM7 CiAKLQkJLyogSWYgd2UncmUgbm90IGRvbmUsIHVwZGF0ZSBjdXJfdGltZW91dCBmb3IgbmV4 dCBpdGVyYXRpb24gKi8KLQkJaWYgKHJldHVybmVkX2V2ZW50cyA9PSAwICYmIHRpbWVvdXQg Pj0gMCkKLQkJewotCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChjdXJfdGltZSk7Ci0JCQlJ TlNUUl9USU1FX1NVQlRSQUNUKGN1cl90aW1lLCBzdGFydF90aW1lKTsKLQkJCWN1cl90aW1l b3V0ID0gdGltZW91dCAtIChsb25nKSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhjdXJfdGlt ZSk7Ci0JCQlpZiAoY3VyX3RpbWVvdXQgPD0gMCkKKwkJCWlmIChyZXR1cm5lZF9ldmVudHMg PiAwKQogCQkJCWJyZWFrOworCisJCQkvKiBJZiB3ZSdyZSBub3QgZG9uZSwgdXBkYXRlIGN1 cl90aW1lb3V0IGZvciBuZXh0IGl0ZXJhdGlvbiAqLworCQkJaWYgKHRpbWVvdXQgPj0gMCkK KwkJCXsKKwkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGN1cl90aW1lKTsKKwkJCQlJTlNU Ul9USU1FX1NVQlRSQUNUKGN1cl90aW1lLCBzdGFydF90aW1lKTsKKwkJCQljdXJfdGltZW91 dCA9IHRpbWVvdXQgLSAobG9uZykgSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoY3VyX3RpbWUp OworCQkJCWlmIChjdXJfdGltZW91dCA8PSAwKQorCQkJCQlicmVhazsKKwkJCX0KIAkJfQog CX0KKworCS8qIElmIHdlIHNldCB0aGUgU0xFRVBJTkdfT05fSU5URVJSVVBUUyBmbGFnLCBy ZXNldCBpdCBhZ2FpbiAqLworCWlmIChzbGVlcGluZ19mbGFnX2FybWVkKQorCQlwZ19hdG9t aWNfZmV0Y2hfYW5kX3U2NChNeVBlbmRpbmdJbnRlcnJ1cHRzLCB+KCh1aW50MzIpIFNMRUVQ SU5HX09OX0lOVEVSUlVQVFMpKTsKKwogI2lmbmRlZiBXSU4zMgogCXdhaXRpbmcgPSBmYWxz ZTsKICNlbmRpZgpAQCAtMTIyOSwxNiArMTI0OSwxNiBAQCBXYWl0RXZlbnRTZXRXYWl0Qmxv Y2soV2FpdEV2ZW50U2V0ICpzZXQsIGludCBjdXJfdGltZW91dCwKIAkJb2NjdXJyZWRfZXZl bnRzLT51c2VyX2RhdGEgPSBjdXJfZXZlbnQtPnVzZXJfZGF0YTsKIAkJb2NjdXJyZWRfZXZl bnRzLT5ldmVudHMgPSAwOwogCi0JCWlmIChjdXJfZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRD SF9TRVQgJiYKKwkJaWYgKGN1cl9ldmVudC0+ZXZlbnRzID09IFdMX0lOVEVSUlVQVCAmJgog CQkJY3VyX2Vwb2xsX2V2ZW50LT5ldmVudHMgJiAoRVBPTExJTiB8IEVQT0xMRVJSIHwgRVBP TExIVVApKQogCQl7CiAJCQkvKiBEcmFpbiB0aGUgc2lnbmFsZmQuICovCiAJCQlkcmFpbigp OwogCi0JCQlpZiAoc2V0LT5sYXRjaCAmJiBzZXQtPmxhdGNoLT5tYXliZV9zbGVlcGluZyAm JiBzZXQtPmxhdGNoLT5pc19zZXQpCisJCQlpZiAoc2V0LT5pbnRlcnJ1cHRfbWFzayAhPSAw ICYmIChwZ19hdG9taWNfcmVhZF91NjQoTXlQZW5kaW5nSW50ZXJydXB0cykgJiBzZXQtPmlu dGVycnVwdF9tYXNrKSAhPSAwKQogCQkJewogCQkJCW9jY3VycmVkX2V2ZW50cy0+ZmQgPSBQ R0lOVkFMSURfU09DS0VUOwotCQkJCW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gV0xfTEFU Q0hfU0VUOworCQkJCW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gV0xfSU5URVJSVVBUOwog CQkJCW9jY3VycmVkX2V2ZW50cysrOwogCQkJCXJldHVybmVkX2V2ZW50cysrOwogCQkJfQpA QCAtMTM5MSwxMyArMTQxMSwxMyBAQCBXYWl0RXZlbnRTZXRXYWl0QmxvY2soV2FpdEV2ZW50 U2V0ICpzZXQsIGludCBjdXJfdGltZW91dCwKIAkJb2NjdXJyZWRfZXZlbnRzLT51c2VyX2Rh dGEgPSBjdXJfZXZlbnQtPnVzZXJfZGF0YTsKIAkJb2NjdXJyZWRfZXZlbnRzLT5ldmVudHMg PSAwOwogCi0JCWlmIChjdXJfZXZlbnQtPmV2ZW50cyA9PSBXTF9MQVRDSF9TRVQgJiYKKwkJ aWYgKGN1cl9ldmVudC0+ZXZlbnRzID09IFdMX0lOVEVSUlVQVCAmJgogCQkJY3VyX2txdWV1 ZV9ldmVudC0+ZmlsdGVyID09IEVWRklMVF9TSUdOQUwpCiAJCXsKLQkJCWlmIChzZXQtPmxh dGNoICYmIHNldC0+bGF0Y2gtPm1heWJlX3NsZWVwaW5nICYmIHNldC0+bGF0Y2gtPmlzX3Nl dCkKKwkJCWlmIChzZXQtPmludGVycnVwdF9tYXNrICE9IDAgJiYgKHBnX2F0b21pY19yZWFk X3UzMihNeVBlbmRpbmdJbnRlcnJ1cHRzKSAmIHNldC0+aW50ZXJydXB0X21hc2spICE9IDAp CiAJCQl7CiAJCQkJb2NjdXJyZWRfZXZlbnRzLT5mZCA9IFBHSU5WQUxJRF9TT0NLRVQ7Ci0J CQkJb2NjdXJyZWRfZXZlbnRzLT5ldmVudHMgPSBXTF9MQVRDSF9TRVQ7CisJCQkJb2NjdXJy ZWRfZXZlbnRzLT5ldmVudHMgPSBXTF9JTlRFUlJVUFQ7CiAJCQkJb2NjdXJyZWRfZXZlbnRz Kys7CiAJCQkJcmV0dXJuZWRfZXZlbnRzKys7CiAJCQl9CkBAIC0xNTEzLDE2ICsxNTMzLDE2 IEBAIFdhaXRFdmVudFNldFdhaXRCbG9jayhXYWl0RXZlbnRTZXQgKnNldCwgaW50IGN1cl90 aW1lb3V0LAogCQlvY2N1cnJlZF9ldmVudHMtPnVzZXJfZGF0YSA9IGN1cl9ldmVudC0+dXNl cl9kYXRhOwogCQlvY2N1cnJlZF9ldmVudHMtPmV2ZW50cyA9IDA7CiAKLQkJaWYgKGN1cl9l dmVudC0+ZXZlbnRzID09IFdMX0xBVENIX1NFVCAmJgorCQlpZiAoY3VyX2V2ZW50LT5ldmVu dHMgPT0gV0xfSU5URVJSVVBUICYmCiAJCQkoY3VyX3BvbGxmZC0+cmV2ZW50cyAmIChQT0xM SU4gfCBQT0xMSFVQIHwgUE9MTEVSUiB8IFBPTExOVkFMKSkpCiAJCXsKIAkJCS8qIFRoZXJl J3MgZGF0YSBpbiB0aGUgc2VsZi1waXBlLCBjbGVhciBpdC4gKi8KIAkJCWRyYWluKCk7CiAK LQkJCWlmIChzZXQtPmxhdGNoICYmIHNldC0+bGF0Y2gtPm1heWJlX3NsZWVwaW5nICYmIHNl dC0+bGF0Y2gtPmlzX3NldCkKKwkJCWlmIChzZXQtPmludGVycnVwdF9tYXNrICE9IDAgJiYg KHBnX2F0b21pY19yZWFkX3UzMihNeVBlbmRpbmdJbnRlcnJ1cHRzKSAmIHNldC0+aW50ZXJy dXB0X21hc2spICE9IDApCiAJCQl7CiAJCQkJb2NjdXJyZWRfZXZlbnRzLT5mZCA9IFBHSU5W QUxJRF9TT0NLRVQ7Ci0JCQkJb2NjdXJyZWRfZXZlbnRzLT5ldmVudHMgPSBXTF9MQVRDSF9T RVQ7CisJCQkJb2NjdXJyZWRfZXZlbnRzLT5ldmVudHMgPSBXTF9JTlRFUlJVUFQ7CiAJCQkJ b2NjdXJyZWRfZXZlbnRzKys7CiAJCQkJcmV0dXJuZWRfZXZlbnRzKys7CiAJCQl9CkBAIC0x NjIxLDYgKzE2NDEsMTUgQEAgV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAq c2V0LCBpbnQgY3VyX3RpbWVvdXQsCiAJCQljdXJfZXZlbnQtPnJlc2V0ID0gZmFsc2U7CiAJ CX0KIAorCQkvKgorCQkgKiBXZSBuZWVkIHRvIHVzZSBkaWZmZXJlbnQgZXZlbnQgb2JqZWN0 IGRlcGVuZGluZyBvbiB3aGV0aGVyICJsb2NhbCIKKwkJICogb3IgInNoYXJlZCBtZW1vcnki IGludGVycnVwdHMgYXJlIGluIHVzZS4gVGhlcmUncyBubyBlYXN5IHdheSB0bworCQkgKiBh ZGp1c3QgYWxsIGV4aXN0aW5nIFdhaXRFdmVudFNldCB3aGVuIHlvdSBzd2l0Y2ggZnJvbSBs b2NhbCB0bworCQkgKiBzaGFyZWQgb3IgYmFjaywgc28gd2UgcmVmcmVzaCBpdCBvbiBldmVy eSBjYWxsLgorCQkgKi8KKwkJaWYgKGN1cl9ldmVudC0+ZXZlbnRzICYgV0xfSU5URVJSVVBU KQorCQkJV2FpdEV2ZW50QWRqdXN0V2luMzIoc2V0LCBjdXJfZXZlbnQpOworCiAJCS8qCiAJ CSAqIFdlIGFzc29jaWF0ZSB0aGUgc29ja2V0IHdpdGggYSBuZXcgZXZlbnQgaGFuZGxlIGZv ciBlYWNoCiAJCSAqIFdhaXRFdmVudFNldC4gIEZEX0NMT1NFIGlzIG9ubHkgZ2VuZXJhdGVk IG9uY2UgaWYgdGhlIG90aGVyIGVuZApAQCAtMTcyNiwxOSArMTc1NSwxNSBAQCBXYWl0RXZl bnRTZXRXYWl0QmxvY2soV2FpdEV2ZW50U2V0ICpzZXQsIGludCBjdXJfdGltZW91dCwKIAkJ b2NjdXJyZWRfZXZlbnRzLT51c2VyX2RhdGEgPSBjdXJfZXZlbnQtPnVzZXJfZGF0YTsKIAkJ b2NjdXJyZWRfZXZlbnRzLT5ldmVudHMgPSAwOwogCi0JCWlmIChjdXJfZXZlbnQtPmV2ZW50 cyA9PSBXTF9MQVRDSF9TRVQpCisJCWlmIChjdXJfZXZlbnQtPmV2ZW50cyA9PSBXTF9JTlRF UlJVUFQpCiAJCXsKLQkJCS8qCi0JCQkgKiBXZSBjYW5ub3QgdXNlIHNldC0+bGF0Y2gtPmV2 ZW50IHRvIHJlc2V0IHRoZSBmaXJlZCBldmVudCBpZiB3ZQotCQkJICogYXJlbid0IHdhaXRp bmcgb24gdGhpcyBsYXRjaCBub3cuCi0JCQkgKi8KIAkJCWlmICghUmVzZXRFdmVudChzZXQt PmhhbmRsZXNbY3VyX2V2ZW50LT5wb3MgKyAxXSkpCiAJCQkJZWxvZyhFUlJPUiwgIlJlc2V0 RXZlbnQgZmFpbGVkOiBlcnJvciBjb2RlICVsdSIsIEdldExhc3RFcnJvcigpKTsKIAotCQkJ aWYgKHNldC0+bGF0Y2ggJiYgc2V0LT5sYXRjaC0+bWF5YmVfc2xlZXBpbmcgJiYgc2V0LT5s YXRjaC0+aXNfc2V0KQorCQkJaWYgKHNldC0+aW50ZXJydXB0X21hc2sgIT0gMCAmJiAocGdf YXRvbWljX3JlYWRfdTMyKE15UGVuZGluZ0ludGVycnVwdHMpICYgc2V0LT5pbnRlcnJ1cHRf bWFzaykgIT0gMCkKIAkJCXsKIAkJCQlvY2N1cnJlZF9ldmVudHMtPmZkID0gUEdJTlZBTElE X1NPQ0tFVDsKLQkJCQlvY2N1cnJlZF9ldmVudHMtPmV2ZW50cyA9IFdMX0xBVENIX1NFVDsK KwkJCQlvY2N1cnJlZF9ldmVudHMtPmV2ZW50cyA9IFdMX0lOVEVSUlVQVDsKIAkJCQlvY2N1 cnJlZF9ldmVudHMrKzsKIAkJCQlyZXR1cm5lZF9ldmVudHMrKzsKIAkJCX0KQEAgLTE3ODMs NyArMTgwOCw3IEBAIFdhaXRFdmVudFNldFdhaXRCbG9jayhXYWl0RXZlbnRTZXQgKnNldCwg aW50IGN1cl90aW1lb3V0LAogCiAJCQkJLyotLS0tLS0KIAkJCQkgKiBXYWl0Rm9yTXVsdGlw bGVPYmplY3RzIGRvZXNuJ3QgZ3VhcmFudGVlIHRoYXQgYSByZWFkIGV2ZW50Ci0JCQkJICog d2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgbGF0Y2ggaXMgc2V0IGF0IHRoZSBzYW1lIHRpbWUu ICBFdmVuCisJCQkJICogd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgaW50ZXJydXB0IGlzIHNl dCBhdCB0aGUgc2FtZSB0aW1lLiAgRXZlbgogCQkJCSAqIGlmIGl0IGRpZCwgdGhlIGNhbGxl ciBtaWdodCBkcm9wIHRoYXQgZXZlbnQgZXhwZWN0aW5nIGl0IHRvCiAJCQkJICogcmVvY2N1 ciBvbiBuZXh0IGNhbGwuICBTbywgd2UgbXVzdCBmb3JjZSB0aGUgZXZlbnQgdG8gYmUKIAkJ CQkgKiByZXNldCBpZiB0aGlzIFdhaXRFdmVudFNldCBpcyB1c2VkIGFnYWluIGluIG9yZGVy IHRvIGF2b2lkCkBAIC0xODg5LDE4ICsxOTE0LDE3IEBAIEdldE51bVJlZ2lzdGVyZWRXYWl0 RXZlbnRzKFdhaXRFdmVudFNldCAqc2V0KQogI2lmIGRlZmluZWQoV0FJVF9VU0VfU0VMRl9Q SVBFKQogCiAvKgotICogU2V0TGF0Y2ggdXNlcyBTSUdVUkcgdG8gd2FrZSB1cCB0aGUgcHJv Y2VzcyB3YWl0aW5nIG9uIHRoZSBsYXRjaC4KLSAqCi0gKiBXYWtlIHVwIFdhaXRMYXRjaCwg aWYgd2UncmUgd2FpdGluZy4KKyAqIFdha2V1cE90aGVyUHJvYyBhbmQgV2FrdXBNeVByb2Mg dXNlIFNJR1VSRyB0byB3YWtlIHVwIHRoZSBwcm9jZXNzIHdhaXRpbmcKKyAqIGZvciBhbiBp bnRlcnJ1cHQKICAqLwogc3RhdGljIHZvaWQKLWxhdGNoX3NpZ3VyZ19oYW5kbGVyKFNJR05B TF9BUkdTKQoraW50ZXJydXB0X3NpZ3VyZ19oYW5kbGVyKFNJR05BTF9BUkdTKQogewogCWlm ICh3YWl0aW5nKQogCQlzZW5kU2VsZlBpcGVCeXRlKCk7CiB9CiAKLS8qIFNlbmQgb25lIGJ5 dGUgdG8gdGhlIHNlbGYtcGlwZSwgdG8gd2FrZSB1cCBXYWl0TGF0Y2ggKi8KKy8qIFNlbmQg b25lIGJ5dGUgdG8gdGhlIHNlbGYtcGlwZSwgdG8gd2FrZSB1cCBXYWl0SW50ZXJydXB0ICov CiBzdGF0aWMgdm9pZAogc2VuZFNlbGZQaXBlQnl0ZSh2b2lkKQogewpAQCAtMTkxNyw3ICsx OTQxLDcgQEAgcmV0cnk6CiAKIAkJLyoKIAkJICogSWYgdGhlIHBpcGUgaXMgZnVsbCwgd2Ug ZG9uJ3QgbmVlZCB0byByZXRyeSwgdGhlIGRhdGEgdGhhdCdzIHRoZXJlCi0JCSAqIGFscmVh ZHkgaXMgZW5vdWdoIHRvIHdha2UgdXAgV2FpdExhdGNoLgorCQkgKiBhbHJlYWR5IGlzIGVu b3VnaCB0byB3YWtlIHVwIFdhaXRJbnRlcnJ1cHQuCiAJCSAqLwogCQlpZiAoZXJybm8gPT0g RUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQogCQkJcmV0dXJuOwpAQCAtMjAwNCw3 ICsyMDI4LDYgQEAgUmVzT3duZXJSZWxlYXNlV2FpdEV2ZW50U2V0KERhdHVtIHJlcykKIAlG cmVlV2FpdEV2ZW50U2V0KHNldCk7CiB9CiAKLSNpZm5kZWYgV0lOMzIKIC8qCiAgKiBXYWtl IHVwIG15IHByb2Nlc3MgaWYgaXQncyBjdXJyZW50bHkgc2xlZXBpbmcgaW4gV2FpdEV2ZW50 U2V0V2FpdEJsb2NrKCkKICAqCkBAIC0yMDE0LDEyICsyMDM3LDExIEBAIFJlc093bmVyUmVs ZWFzZVdhaXRFdmVudFNldChEYXR1bSByZXMpCiAgKgogICogTkI6IHRoaXMgZnVuY3Rpb24g aXMgY2FsbGVkIGZyb20gY3JpdGljYWwgc2VjdGlvbnMgYW5kIHNpZ25hbCBoYW5kbGVycyBz bwogICogdGhyb3dpbmcgYW4gZXJyb3IgaXMgbm90IGEgZ29vZCBpZGVhLgotICoKLSAqIE9u IFdpbmRvd3MsIExhdGNoIHVzZXMgU2V0RXZlbnQgZGlyZWN0bHkgYW5kIHRoaXMgaXMgbm90 IHVzZWQuCiAgKi8KIHZvaWQKIFdha2V1cE15UHJvYyh2b2lkKQogeworI2lmbmRlZiBXSU4z MgogI2lmIGRlZmluZWQoV0FJVF9VU0VfU0VMRl9QSVBFKQogCWlmICh3YWl0aW5nKQogCQlz ZW5kU2VsZlBpcGVCeXRlKCk7CkBAIC0yMDI3LDEyICsyMDQ5LDI4IEBAIFdha2V1cE15UHJv Yyh2b2lkKQogCWlmICh3YWl0aW5nKQogCQlraWxsKE15UHJvY1BpZCwgU0lHVVJHKTsKICNl bmRpZgorI2Vsc2UKKwlTZXRFdmVudChNeVByb2MgPyBNeVByb2MtPmludGVycnVwdFdha2V1 cEV2ZW50IDogTG9jYWxJbnRlcnJ1cHRXYWtldXBFdmVudCk7CisjZW5kaWYKIH0KIAogLyog U2ltaWxhciB0byBXYWtldXBNeVByb2MsIGJ1dCB3YWtlIHVwIGFub3RoZXIgcHJvY2VzcyAq Lwogdm9pZAotV2FrZXVwT3RoZXJQcm9jKGludCBwaWQpCitXYWtldXBPdGhlclByb2MoUEdQ Uk9DICpwcm9jKQogewotCWtpbGwocGlkLCBTSUdVUkcpOwotfQorCS8qCisJICogTm90ZTog VGhpcyBjYW4gYWxzbyBiZSBjYWxsZWQgZnJvbSB0aGUgcG9zdG1hc3Rlciwgc28gYmUgY2Fy ZWZ1bCB0byBub3QKKwkgKiBhc3N1bWUgdGhhdCB0aGUgY29udGVudHMgb2Ygc2hhcmVkIG1l bW9yeSBhcmUgdmFsaWQuICBSZWFkaW5nIHRoZSAncGlkJworCSAqIChvciBldmVudCBoYW5k bGUgb24gV2luZG93cykgaXMgc2FmZSBlbm91Z2guCisJICovCisjaWZuZGVmIFdJTjMyCisJ a2lsbChwcm9jLT5waWQsIFNJR1VSRyk7CisjZWxzZQorCVNldEV2ZW50KHByb2MtPmludGVy cnVwdFdha2V1cEV2ZW50KTsKKworCS8qCisJICogTm90ZSB0aGF0IHdlIHNpbGVudGx5IGln bm9yZSBhbnkgZXJyb3JzLiBXZSBtaWdodCBiZSBpbiBhIHNpZ25hbAorCSAqIGhhbmRsZXIg b3Igb3RoZXIgY3JpdGljYWwgcGF0aCB3aGVyZSBpdCdzIG5vdCBzYWZlIHRvIGNhbGwgZWxv ZygpLgorCSAqLwogI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv Y29uZGl0aW9uX3ZhcmlhYmxlLmMKaW5kZXggMWYxNmIzZjc0NzUuLjBiYTgzNmNmOWYzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvY29uZGl0aW9uX3ZhcmlhYmxl LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRpdGlvbl92YXJpYWJsZS5j CkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAorI2luY2x1ZGUg ImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw b3J0YWJpbGl0eS9pbnN0cl90aW1lLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25kaXRpb25f dmFyaWFibGUuaCIKQEAgLTE0OSwyMyArMTUwLDI0IEBAIENvbmRpdGlvblZhcmlhYmxlVGlt ZWRTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YsIGxvbmcgdGltZW91dCwKIAkJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChzdGFydF90aW1lKTsKIAkJQXNzZXJ0KHRpbWVvdXQgPj0gMCAm JiB0aW1lb3V0IDw9IElOVF9NQVgpOwogCQljdXJfdGltZW91dCA9IHRpbWVvdXQ7Ci0JCXdh aXRfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1f REVBVEg7CisJCXdhaXRfZXZlbnRzID0gV0xfSU5URVJSVVBUIHwgV0xfVElNRU9VVCB8IFdM X0VYSVRfT05fUE1fREVBVEg7CiAJfQogCWVsc2UKLQkJd2FpdF9ldmVudHMgPSBXTF9MQVRD SF9TRVQgfCBXTF9FWElUX09OX1BNX0RFQVRIOworCQl3YWl0X2V2ZW50cyA9IFdMX0lOVEVS UlVQVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7CiAKIAl3aGlsZSAodHJ1ZSkKIAl7CiAJCWJv b2wJCWRvbmUgPSBmYWxzZTsKIAogCQkvKgotCQkgKiBXYWl0IGZvciBsYXRjaCB0byBiZSBz ZXQuICAoSWYgd2UncmUgYXdha2VuZWQgZm9yIHNvbWUgb3RoZXIKLQkJICogcmVhc29uLCB0 aGUgY29kZSBiZWxvdyB3aWxsIGNvcGUgYW55d2F5LikKKwkJICogV2FpdCBmb3IgaW50ZXJy dXB0LiAgKElmIHdlJ3JlIGF3YWtlbmVkIGZvciBzb21lIG90aGVyIHJlYXNvbiwgdGhlCisJ CSAqIGNvZGUgYmVsb3cgd2lsbCBjb3BlIGFueXdheS4pCiAJCSAqLwotCQkodm9pZCkgV2Fp dExhdGNoKE15TGF0Y2gsIHdhaXRfZXZlbnRzLCBjdXJfdGltZW91dCwgd2FpdF9ldmVudF9p bmZvKTsKKwkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQoQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8 IElOVEVSUlVQVF9XQUlUX1dBS0VVUCwKKwkJCQkJCQkgd2FpdF9ldmVudHMsIGN1cl90aW1l b3V0LCB3YWl0X2V2ZW50X2luZm8pOwogCi0JCS8qIFJlc2V0IGxhdGNoIGJlZm9yZSBleGFt aW5pbmcgdGhlIHN0YXRlIG9mIHRoZSB3YWl0IGxpc3QuICovCi0JCVJlc2V0TGF0Y2goTXlM YXRjaCk7CisJCS8qIENsZWFyIHRoZSBmbGFnIGJlZm9yZSBleGFtaW5pbmcgdGhlIHN0YXRl IG9mIHRoZSB3YWl0IGxpc3QuICovCisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlU X1dBS0VVUCk7CiAKIAkJLyoKIAkJICogSWYgdGhpcyBwcm9jZXNzIGhhcyBiZWVuIHRha2Vu IG91dCBvZiB0aGUgd2FpdCBsaXN0LCB0aGVuIHdlIGtub3cKQEAgLTE3OCw5ICsxODAsMTAg QEAgQ29uZGl0aW9uVmFyaWFibGVUaW1lZFNsZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdiwg bG9uZyB0aW1lb3V0LAogCQkgKiB0aGUgd2FpdCBsaXN0IG9ubHkgd2hlbiB0aGUgY2FsbGVy IGNhbGxzCiAJCSAqIENvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAuCiAJCSAqCi0JCSAq IElmIHdlJ3JlIHN0aWxsIGluIHRoZSB3YWl0IGxpc3QsIHRoZW4gdGhlIGxhdGNoIG11c3Qg aGF2ZSBiZWVuIHNldAotCQkgKiBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBDb25kaXRpb25W YXJpYWJsZVNpZ25hbDsgdGhvdWdoIHdlIGRvbid0Ci0JCSAqIGd1YXJhbnRlZSBub3QgdG8g cmV0dXJuIHNwdXJpb3VzbHksIHdlJ2xsIGF2b2lkIHRoaXMgb2J2aW91cyBjYXNlLgorCQkg KiBJZiB3ZSdyZSBzdGlsbCBpbiB0aGUgd2FpdCBsaXN0LCB0aGVuIHRoZSBpbnRlcnJ1cHQg bXVzdCBoYXZlIGJlZW4KKwkJICogc2VudCBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBDb25k aXRpb25WYXJpYWJsZVNpZ25hbDsgdGhvdWdoIHdlCisJCSAqIGRvbid0IGd1YXJhbnRlZSBu b3QgdG8gcmV0dXJuIHNwdXJpb3VzbHksIHdlJ2xsIGF2b2lkIHRoaXMgb2J2aW91cworCQkg KiBjYXNlLgogCQkgKi8KIAkJU3BpbkxvY2tBY3F1aXJlKCZjdi0+bXV0ZXgpOwogCQlpZiAo IXByb2NsaXN0X2NvbnRhaW5zKCZjdi0+d2FrZXVwLCBNeVByb2NOdW1iZXIsIGN2V2FpdExp bmspKQpAQCAtMjY4LDkgKzI3MSw5IEBAIENvbmRpdGlvblZhcmlhYmxlU2lnbmFsKENvbmRp dGlvblZhcmlhYmxlICpjdikKIAkJcHJvYyA9IHByb2NsaXN0X3BvcF9oZWFkX25vZGUoJmN2 LT53YWtldXAsIGN2V2FpdExpbmspOwogCVNwaW5Mb2NrUmVsZWFzZSgmY3YtPm11dGV4KTsK IAotCS8qIElmIHdlIGZvdW5kIHNvbWVvbmUgc2xlZXBpbmcsIHNldCB0aGVpciBsYXRjaCB0 byB3YWtlIHRoZW0gdXAuICovCisJLyogSWYgd2UgZm91bmQgc29tZW9uZSBzbGVlcGluZywg d2FrZSB0aGVtIHVwLiAqLwogCWlmIChwcm9jICE9IE5VTEwpCi0JCVNldExhdGNoKCZwcm9j LT5wcm9jTGF0Y2gpOworCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwg R2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSk7CiB9CiAKIC8qCkBAIC0yOTksOCArMzAyLDgg QEAgQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoQ29uZGl0aW9uVmFyaWFibGUgKmN2KQog CSAqIENWIGFuZCBpbiBkb2luZyBzbyByZW1vdmUgb3VyIHNlbnRpbmVsIGVudHJ5LiAgQnV0 IHRoYXQncyBmaW5lOiBzaW5jZQogCSAqIENWIHdhaXRlcnMgYXJlIGFsd2F5cyBhZGRlZCBh bmQgcmVtb3ZlZCBpbiBvcmRlciwgdGhhdCBtdXN0IG1lYW4gdGhhdAogCSAqIGV2ZXJ5IHBy ZXZpb3VzIHdhaXRlciBoYXMgYmVlbiB3YWtlbmVkLCBzbyB3ZSdyZSBkb25lLiAgV2UnbGwg Z2V0IGFuCi0JICogZXh0cmEgInNldCIgb24gb3VyIGxhdGNoIGZyb20gdGhlIHNvbWVvbmUg ZWxzZSdzIHNpZ25hbCwgd2hpY2ggaXMKLQkgKiBzbGlnaHRseSBpbmVmZmljaWVudCBidXQg aGFybWxlc3MuCisJICogZXh0cmEgaW50ZXJydXB0IGZyb20gdGhlIHNvbWVvbmUgZWxzZSdz IHNpZ25hbCwgd2hpY2ggaXMgc2xpZ2h0bHkKKwkgKiBpbmVmZmljaWVudCBidXQgaGFybWxl c3MuCiAJICoKIAkgKiBXZSBjYW4ndCBpbnNlcnQgb3VyIGN2V2FpdExpbmsgYXMgYSBzZW50 aW5lbCBpZiBpdCdzIGFscmVhZHkgaW4gdXNlIGluCiAJICogc29tZSBvdGhlciBwcm9jbGlz dC4gIFdoaWxlIHRoYXQncyBub3QgZXhwZWN0ZWQgdG8gYmUgdHJ1ZSBmb3IgdHlwaWNhbApA QCAtMzMzLDcgKzMzNiw3IEBAIENvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KENvbmRpdGlv blZhcmlhYmxlICpjdikKIAogCS8qIEF3YWtlbiBmaXJzdCB3YWl0ZXIsIGlmIHRoZXJlIHdh cyBvbmUuICovCiAJaWYgKHByb2MgIT0gTlVMTCkKLQkJU2V0TGF0Y2goJnByb2MtPnByb2NM YXRjaCk7CisJCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBHZXROdW1i ZXJGcm9tUEdQcm9jKHByb2MpKTsKIAogCXdoaWxlIChoYXZlX3NlbnRpbmVsKQogCXsKQEAg LTM1Nyw2ICszNjAsNiBAQCBDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdChDb25kaXRpb25W YXJpYWJsZSAqY3YpCiAJCVNwaW5Mb2NrUmVsZWFzZSgmY3YtPm11dGV4KTsKIAogCQlpZiAo cHJvYyAhPSBOVUxMICYmIHByb2MgIT0gTXlQcm9jKQotCQkJU2V0TGF0Y2goJnByb2MtPnBy b2NMYXRjaCk7CisJCQlTZW5kSW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCwgR2V0 TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3ByZWRpY2F0ZS5jCmluZGV4IGZlNzVlYWQzNTAxLi5mOTYxMDU0YTRiYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtMjA0LDYgKzIwNCw3IEBACiAjaW5j bHVkZSAiYWNjZXNzL3R3b3BoYXNlX3JtZ3IuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5o IgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInBvcnQvcGdfbGZpbmQuaCIKQEAgLTE1ODQsNyArMTU4NSwxMSBAQCBHZXRTYWZlU25h cHNob3QoU25hcHNob3Qgb3JpZ1NuYXBzaG90KQogCQkJCSBTeGFjdElzUk9VbnNhZmUoTXlT ZXJpYWxpemFibGVYYWN0KSkpCiAJCXsKIAkJCUxXTG9ja1JlbGVhc2UoU2VyaWFsaXphYmxl WGFjdEhhc2hMb2NrKTsKLQkJCVByb2NXYWl0Rm9yU2lnbmFsKFdBSVRfRVZFTlRfU0FGRV9T TkFQU0hPVCk7CisJCQlXYWl0SW50ZXJydXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgfCBJ TlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkgIFdMX0lOVEVSUlVQVCB8IFdMX0VYSVRf T05fUE1fREVBVEgsIDAsCisJCQkJCQkgIFdBSVRfRVZFTlRfU0FGRV9TTkFQU0hPVCk7CisJ CQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVApOworCQkJQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKTsKIAkJCUxXTG9ja0FjcXVpcmUoU2VyaWFsaXphYmxlWGFjdEhhc2hM b2NrLCBMV19FWENMVVNJVkUpOwogCQl9CiAJCU15U2VyaWFsaXphYmxlWGFjdC0+ZmxhZ3Mg Jj0gflNYQUNUX0ZMQUdfREVGRVJSQUJMRV9XQUlUSU5HOwpAQCAtMzYxNyw3ICszNjIyLDcg QEAgUmVsZWFzZVByZWRpY2F0ZUxvY2tzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNSZWFkT25s eVNhZmUpCiAJCQkgKi8KIAkJCWlmIChTeGFjdElzRGVmZXJyYWJsZVdhaXRpbmcocm9YYWN0 KSAmJgogCQkJCShTeGFjdElzUk9VbnNhZmUocm9YYWN0KSB8fCBTeGFjdElzUk9TYWZlKHJv WGFjdCkpKQotCQkJCVByb2NTZW5kU2lnbmFsKHJvWGFjdC0+cGdwcm9jbm8pOworCQkJCVNl bmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCByb1hhY3QtPnBncHJvY25vKTsK IAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2Mu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggZTAwMWNiMTE4MDMu Ljg5MmU4M2VlY2JkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJv Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTM3LDYgKzM3 LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d3YWl0LmgiCisjaW5jbHVkZSAi aXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBn c3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgpAQCAtMjE0LDYg KzIxNSw4IEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJcGdfYXRvbWljX2luaXRfdTMyKCZQ cm9jR2xvYmFsLT5hdkxhdW5jaGVyUHJvYywgSU5WQUxJRF9QUk9DX05VTUJFUik7CiAJcGdf YXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT53YWx3cml0ZXJQcm9jLCBJTlZBTElEX1BS T0NfTlVNQkVSKTsKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPmNoZWNrcG9p bnRlclByb2MsIElOVkFMSURfUFJPQ19OVU1CRVIpOworCXBnX2F0b21pY19pbml0X3UzMigm UHJvY0dsb2JhbC0+d2FscmVjZWl2ZXJQcm9jLCBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwlw Z19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPnN0YXJ0dXBQcm9jLCBJTlZBTElEX1BS T0NfTlVNQkVSKTsKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPnByb2NBcnJh eUdyb3VwRmlyc3QsIElOVkFMSURfUFJPQ19OVU1CRVIpOwogCXBnX2F0b21pY19pbml0X3Uz MigmUHJvY0dsb2JhbC0+Y2xvZ0dyb3VwRmlyc3QsIElOVkFMSURfUFJPQ19OVU1CRVIpOwog CkBAIC0zMDEsMTQgKzMwNCwyOCBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCQlBc3NlcnQo ZnBQdHIgPD0gZnBFbmRQdHIpOwogCiAJCS8qCi0JCSAqIFNldCB1cCBwZXItUEdQUk9DIHNl bWFwaG9yZSwgbGF0Y2gsIGFuZCBmcEluZm9Mb2NrLiAgUHJlcGFyZWQgeGFjdAotCQkgKiBk dW1teSBQR1BST0NzIGRvbid0IG5lZWQgdGhlc2UgdGhvdWdoIC0gdGhleSdyZSBuZXZlciBh c3NvY2lhdGVkCi0JCSAqIHdpdGggYSByZWFsIHByb2Nlc3MKKwkJICogU2V0IHVwIHBlci1Q R1BST0Mgc2VtYXBob3JlLCBpbnRlcnJ1cHQgd2FrZXVwIGV2ZW50IChvbiBXaW5kb3dzKSwK KwkJICogYW5kIGZwSW5mb0xvY2suICBQcmVwYXJlZCB4YWN0IGR1bW15IFBHUFJPQ3MgZG9u J3QgbmVlZCB0aGVzZQorCQkgKiB0aG91Z2ggLSB0aGV5J3JlIG5ldmVyIGFzc29jaWF0ZWQg d2l0aCBhIHJlYWwgcHJvY2VzcwogCQkgKi8KIAkJaWYgKGkgPCBGSVJTVF9QUkVQQVJFRF9Y QUNUX1BST0NfTlVNQkVSKQogCQl7CisjaWZkZWYgV0lOMzIKKwkJCVNFQ1VSSVRZX0FUVFJJ QlVURVMgc2E7CisKKwkJCS8qCisJCQkgKiBTZXQgdXAgc2VjdXJpdHkgYXR0cmlidXRlcyB0 byBzcGVjaWZ5IHRoYXQgdGhlIGV2ZW50cyBhcmUKKwkJCSAqIGluaGVyaXRlZC4KKwkJCSAq LworCQkJWmVyb01lbW9yeSgmc2EsIHNpemVvZihzYSkpOworCQkJc2Eubkxlbmd0aCA9IHNp emVvZihzYSk7CisJCQlzYS5iSW5oZXJpdEhhbmRsZSA9IFRSVUU7CisKKwkJCXByb2MtPmlu dGVycnVwdFdha2V1cEV2ZW50ID0gQ3JlYXRlRXZlbnQoJnNhLCBUUlVFLCBGQUxTRSwgTlVM TCk7CisJCQlpZiAocHJvYy0+aW50ZXJydXB0V2FrZXVwRXZlbnQgPT0gTlVMTCkKKwkJCQll bG9nKEVSUk9SLCAiQ3JlYXRlRXZlbnQgZmFpbGVkOiBlcnJvciBjb2RlICVsdSIsIEdldExh c3RFcnJvcigpKTsKKyNlbmRpZgogCQkJcHJvYy0+c2VtID0gUEdTZW1hcGhvcmVDcmVhdGUo KTsKLQkJCUluaXRTaGFyZWRMYXRjaCgmKHByb2MtPnByb2NMYXRjaCkpOwogCQkJTFdMb2Nr SW5pdGlhbGl6ZSgmKHByb2MtPmZwSW5mb0xvY2spLCBMV1RSQU5DSEVfTE9DS19GQVNUUEFU SCk7CiAJCX0KIApAQCAtNTE5LDEzICs1MzYsOCBAQCBJbml0UHJvY2Vzcyh2b2lkKQogCU15 UHJvYy0+Y2xvZ0dyb3VwTWVtYmVyTHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJQXNzZXJ0 KHBnX2F0b21pY19yZWFkX3UzMigmTXlQcm9jLT5jbG9nR3JvdXBOZXh0KSA9PSBJTlZBTElE X1BST0NfTlVNQkVSKTsKIAotCS8qCi0JICogQWNxdWlyZSBvd25lcnNoaXAgb2YgdGhlIFBH UFJPQydzIGxhdGNoLCBzbyB0aGF0IHdlIGNhbiB1c2UgV2FpdExhdGNoCi0JICogb24gaXQu ICBUaGF0IGFsbG93cyB1cyB0byByZXBvaW50IHRoZSBwcm9jZXNzIGxhdGNoLCB3aGljaCBz byBmYXIKLQkgKiBwb2ludHMgdG8gcHJvY2VzcyBsb2NhbCBvbmUsIHRvIHRoZSBzaGFyZWQg b25lLgotCSAqLwotCU93bkxhdGNoKCZNeVByb2MtPnByb2NMYXRjaCk7Ci0JU3dpdGNoVG9T aGFyZWRMYXRjaCgpOworCS8qIFN0YXJ0IGFjY2VwdGluZyBpbnRlcnJ1cHRzIGZyb20gb3Ro ZXIgcHJvY2Vzc2VzICovCisJU3dpdGNoVG9TaGFyZWRJbnRlcnJ1cHRzKCk7CiAKIAkvKiBu b3cgdGhhdCB3ZSBoYXZlIGEgcHJvYywgcmVwb3J0IHdhaXQgZXZlbnRzIHRvIHNoYXJlZCBt ZW1vcnkgKi8KIAlwZ3N0YXRfc2V0X3dhaXRfZXZlbnRfc3RvcmFnZSgmTXlQcm9jLT53YWl0 X2V2ZW50X2luZm8pOwpAQCAtNjkwLDEzICs3MDIsOCBAQCBJbml0QXV4aWxpYXJ5UHJvY2Vz cyh2b2lkKQogCX0KICNlbmRpZgogCi0JLyoKLQkgKiBBY3F1aXJlIG93bmVyc2hpcCBvZiB0 aGUgUEdQUk9DJ3MgbGF0Y2gsIHNvIHRoYXQgd2UgY2FuIHVzZSBXYWl0TGF0Y2gKLQkgKiBv biBpdC4gIFRoYXQgYWxsb3dzIHVzIHRvIHJlcG9pbnQgdGhlIHByb2Nlc3MgbGF0Y2gsIHdo aWNoIHNvIGZhcgotCSAqIHBvaW50cyB0byBwcm9jZXNzIGxvY2FsIG9uZSwgdG8gdGhlIHNo YXJlZCBvbmUuCi0JICovCi0JT3duTGF0Y2goJk15UHJvYy0+cHJvY0xhdGNoKTsKLQlTd2l0 Y2hUb1NoYXJlZExhdGNoKCk7CisJLyogU3RhcnQgYWNjZXB0aW5nIGludGVycnVwdHMgZnJv bSBvdGhlciBwcm9jZXNzZXMgKi8KKwlTd2l0Y2hUb1NoYXJlZEludGVycnVwdHMoKTsKIAog CS8qIG5vdyB0aGF0IHdlIGhhdmUgYSBwcm9jLCByZXBvcnQgd2FpdCBldmVudHMgdG8gc2hh cmVkIG1lbW9yeSAqLwogCXBnc3RhdF9zZXRfd2FpdF9ldmVudF9zdG9yYWdlKCZNeVByb2Mt PndhaXRfZXZlbnRfaW5mbyk7CkBAIC03MTksNiArNzI2LDEwIEBAIEluaXRBdXhpbGlhcnlQ cm9jZXNzKHZvaWQpCiAJCXBnX2F0b21pY193cml0ZV91MzIoJlByb2NHbG9iYWwtPndhbHdy aXRlclByb2MsIE15UHJvY051bWJlcik7CiAJaWYgKE15QmFja2VuZFR5cGUgPT0gQl9DSEVD S1BPSU5URVIpCiAJCXBnX2F0b21pY193cml0ZV91MzIoJlByb2NHbG9iYWwtPmNoZWNrcG9p bnRlclByb2MsIE15UHJvY051bWJlcik7CisJaWYgKE15QmFja2VuZFR5cGUgPT0gQl9XQUxf UkVDRUlWRVIpCisJCXBnX2F0b21pY193cml0ZV91MzIoJlByb2NHbG9iYWwtPndhbHJlY2Vp dmVyUHJvYywgTXlQcm9jTnVtYmVyKTsKKwlpZiAoTXlCYWNrZW5kVHlwZSA9PSBCX1NUQVJU VVApCisJCXBnX2F0b21pY193cml0ZV91MzIoJlByb2NHbG9iYWwtPnN0YXJ0dXBQcm9jLCBN eVByb2NOdW1iZXIpOwogCiAJLyoKIAkgKiBBcnJhbmdlIHRvIGNsZWFuIHVwIGF0IHByb2Nl c3MgZXhpdC4KQEAgLTk4OCwyMSArOTk5LDIwIEBAIFByb2NLaWxsKGludCBjb2RlLCBEYXR1 bSBhcmcpCiAJfQogCiAJLyoKLQkgKiBSZXNldCBNeUxhdGNoIHRvIHRoZSBwcm9jZXNzIGxv Y2FsIG9uZS4gIFRoaXMgaXMgc28gdGhhdCBzaWduYWwKLQkgKiBoYW5kbGVycyBldCBhbCBj YW4gY29udGludWUgdXNpbmcgdGhlIGxhdGNoIGFmdGVyIHRoZSBzaGFyZWQgbGF0Y2gKLQkg KiBpc24ndCBvdXJzIGFueW1vcmUuCisJICogUmVzZXQgaW50ZXJydXB0IHZlY3RvciB0byB0 aGUgcHJvY2VzcyBsb2NhbCBvbmUuICBUaGlzIGlzIHNvIHRoYXQKKwkgKiBzaWduYWwgaGFu ZGxlcnMgZXQgYWwgY2FuIGNvbnRpbnVlIHVzaW5nIGludGVycnVwdHMgYWZ0ZXIgdGhlIFBH UFJPQworCSAqIGVudHJ5IGlzbid0IG91cnMgYW55bW9yZS4KIAkgKgogCSAqIFNpbWlsYXJs eSwgc3RvcCByZXBvcnRpbmcgd2FpdCBldmVudHMgdG8gTXlQcm9jLT53YWl0X2V2ZW50X2lu Zm8uCiAJICoKLQkgKiBBZnRlciB0aGF0IGNsZWFyIE15UHJvYyBhbmQgZGlzb3duIHRoZSBz aGFyZWQgbGF0Y2guCisJICogQWZ0ZXIgdGhhdCBjbGVhciBNeVByb2MuCiAJICovCi0JU3dp dGNoQmFja1RvTG9jYWxMYXRjaCgpOworCVN3aXRjaFRvTG9jYWxJbnRlcnJ1cHRzKCk7CiAJ cGdzdGF0X3Jlc2V0X3dhaXRfZXZlbnRfc3RvcmFnZSgpOwogCiAJcHJvYyA9IE15UHJvYzsK IAlNeVByb2MgPSBOVUxMOwogCU15UHJvY051bWJlciA9IElOVkFMSURfUFJPQ19OVU1CRVI7 Ci0JRGlzb3duTGF0Y2goJnByb2MtPnByb2NMYXRjaCk7CiAKIAkvKiBNYXJrIHRoZSBwcm9j IG5vIGxvbmdlciBpbiB1c2UgKi8KIAlwcm9jLT5waWQgPSAwOwpAQCAtMTA2MSw3ICsxMDcx LDcgQEAgQXV4aWxpYXJ5UHJvY0tpbGwoaW50IGNvZGUsIERhdHVtIGFyZykKIAlDb25kaXRp b25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CiAKIAkvKiBsb29rIGF0IHRoZSBlcXVpdmFsZW50 IFByb2NLaWxsKCkgY29kZSBmb3IgY29tbWVudHMgKi8KLQlTd2l0Y2hCYWNrVG9Mb2NhbExh dGNoKCk7CisJU3dpdGNoVG9Mb2NhbEludGVycnVwdHMoKTsKIAlwZ3N0YXRfcmVzZXRfd2Fp dF9ldmVudF9zdG9yYWdlKCk7CiAKIAkvKiBJZiB0aGlzIHdhcyBvbmUgb2YgYXV4IHByb2Nl c3NlcyBhZHZlcnRpc2VkIGluIFByb2NHbG9iYWwsIGNsZWFyIGl0ICovCkBAIC0xMDgwLDEx ICsxMDkwLDIwIEBAIEF1eGlsaWFyeVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpCiAJ CUFzc2VydChwZ19hdG9taWNfcmVhZF91MzIoJlByb2NHbG9iYWwtPmNoZWNrcG9pbnRlclBy b2MpID09IE15UHJvY051bWJlcik7CiAJCXBnX2F0b21pY193cml0ZV91MzIoJlByb2NHbG9i YWwtPmNoZWNrcG9pbnRlclByb2MsIElOVkFMSURfUFJPQ19OVU1CRVIpOwogCX0KKwlpZiAo TXlCYWNrZW5kVHlwZSA9PSBCX1dBTF9SRUNFSVZFUikKKwl7CisJCUFzc2VydChwZ19hdG9t aWNfcmVhZF91MzIoJlByb2NHbG9iYWwtPndhbHJlY2VpdmVyUHJvYykgPT0gTXlQcm9jTnVt YmVyKTsKKwkJcGdfYXRvbWljX3dyaXRlX3UzMigmUHJvY0dsb2JhbC0+d2FscmVjZWl2ZXJQ cm9jLCBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwl9CisJaWYgKE15QmFja2VuZFR5cGUgPT0g Ql9TVEFSVFVQKQorCXsKKwkJQXNzZXJ0KHBnX2F0b21pY19yZWFkX3UzMigmUHJvY0dsb2Jh bC0+c3RhcnR1cFByb2MpID09IE15UHJvY051bWJlcik7CisJCXBnX2F0b21pY193cml0ZV91 MzIoJlByb2NHbG9iYWwtPnN0YXJ0dXBQcm9jLCBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwl9 CiAKIAlwcm9jID0gTXlQcm9jOwogCU15UHJvYyA9IE5VTEw7CiAJTXlQcm9jTnVtYmVyID0g SU5WQUxJRF9QUk9DX05VTUJFUjsKLQlEaXNvd25MYXRjaCgmcHJvYy0+cHJvY0xhdGNoKTsK IAogCVNwaW5Mb2NrQWNxdWlyZSgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzTG9jayk7CiAKQEAg LTE0MTIsMTggKzE0MzEsMTggQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrKQog CX0KIAogCS8qCi0JICogSWYgc29tZWJvZHkgd2FrZXMgdXMgYmV0d2VlbiBMV0xvY2tSZWxl YXNlIGFuZCBXYWl0TGF0Y2gsIHRoZSBsYXRjaAotCSAqIHdpbGwgbm90IHdhaXQuIEJ1dCBh IHNldCBsYXRjaCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgdGhlIGxvY2sKLQkg KiBpcyBmcmVlIG5vdywgYXMgdGhlcmUgYXJlIG1hbnkgb3RoZXIgc291cmNlcyBmb3IgbGF0 Y2ggc2V0cyB0aGFuCi0JICogc29tZWJvZHkgcmVsZWFzaW5nIHRoZSBsb2NrLgorCSAqIElm IHNvbWVib2R5IHdha2VzIHVzIGJldHdlZW4gTFdMb2NrUmVsZWFzZSBhbmQgV2FpdEludGVy cnVwdCwKKwkgKiBXYWl0SW50ZXJydXB0IHdpbGwgbm90IHdhaXQuIEJ1dCBhbiBpbnRlcnJ1 cHQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbgorCSAqIHRoYXQgdGhlIGxvY2sgaXMgZnJl ZSBub3csIGFzIHRoZXJlIGFyZSBtYW55IG90aGVyIHNvdXJjZXMgZm9yIHRoZQorCSAqIGlu dGVycnVwdCB0aGFuIHNvbWVib2R5IHJlbGVhc2luZyB0aGUgbG9jay4KIAkgKgotCSAqIFdl IHByb2Nlc3MgaW50ZXJydXB0cyB3aGVuZXZlciB0aGUgbGF0Y2ggaGFzIGJlZW4gc2V0LCBz byBjYW5jZWwvZGllCi0JICogaW50ZXJydXB0cyBhcmUgcHJvY2Vzc2VkIHF1aWNrbHkuIFRo aXMgbWVhbnMgd2UgbXVzdCBub3QgbWluZCBsb3NpbmcKLQkgKiBjb250cm9sIHRvIGEgY2Fu Y2VsL2RpZSBpbnRlcnJ1cHQgaGVyZS4gIFdlIGRvbid0LCBiZWNhdXNlIHdlIGhhdmUgbm8K LQkgKiBzaGFyZWQtc3RhdGUtY2hhbmdlIHdvcmsgdG8gZG8gYWZ0ZXIgYmVpbmcgZ3JhbnRl ZCB0aGUgbG9jayAodGhlCi0JICogZ3JhbnRvciBkaWQgaXQgYWxsKS4gIFdlIGRvIGhhdmUg dG8gd29ycnkgYWJvdXQgY2FuY2VsaW5nIHRoZSBkZWFkbG9jawotCSAqIHRpbWVvdXQgYW5k IHVwZGF0aW5nIHRoZSBsb2NhbGxvY2sgdGFibGUsIGJ1dCBpZiB3ZSBsb3NlIGNvbnRyb2wg dG8gYW4KLQkgKiBlcnJvciwgTG9ja0Vycm9yQ2xlYW51cCB3aWxsIGZpeCB0aGF0IHVwLgor CSAqIFdlIHByb2Nlc3MgaW50ZXJydXB0cyB3aGVuZXZlciB0aGUgaW50ZXJydXB0IGhhcyBi ZWVuIHNldCwgc28KKwkgKiBjYW5jZWwvZGllIGludGVycnVwdHMgYXJlIHByb2Nlc3NlZCBx dWlja2x5LiBUaGlzIG1lYW5zIHdlIG11c3Qgbm90CisJICogbWluZCBsb3NpbmcgY29udHJv bCB0byBhIGNhbmNlbC9kaWUgaW50ZXJydXB0IGhlcmUuICBXZSBkb24ndCwgYmVjYXVzZQor CSAqIHdlIGhhdmUgbm8gc2hhcmVkLXN0YXRlLWNoYW5nZSB3b3JrIHRvIGRvIGFmdGVyIGJl aW5nIGdyYW50ZWQgdGhlIGxvY2sKKwkgKiAodGhlIGdyYW50b3IgZGlkIGl0IGFsbCkuICBX ZSBkbyBoYXZlIHRvIHdvcnJ5IGFib3V0IGNhbmNlbGluZyB0aGUKKwkgKiBkZWFkbG9jayB0 aW1lb3V0IGFuZCB1cGRhdGluZyB0aGUgbG9jYWxsb2NrIHRhYmxlLCBidXQgaWYgd2UgbG9z ZQorCSAqIGNvbnRyb2wgdG8gYW4gZXJyb3IsIExvY2tFcnJvckNsZWFudXAgd2lsbCBmaXgg dGhhdCB1cC4KIAkgKi8KIAlkbwogCXsKQEAgLTE0NjksOSArMTQ4OCwxMCBAQCBQcm9jU2xl ZXAoTE9DQUxMT0NLICpsb2NhbGxvY2spCiAJCX0KIAkJZWxzZQogCQl7Ci0JCQkodm9pZCkg V2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgs IDAsCi0JCQkJCQkJIFBHX1dBSVRfTE9DSyB8IGxvY2FsbG9jay0+dGFnLmxvY2subG9ja3Rh Z190eXBlKTsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQkodm9pZCkgV2FpdEludGVy cnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJSVVBUX1dBSVRfV0FLRVVQLAor CQkJCQkJCQkgV0xfSU5URVJSVVBUIHwgV0xfRVhJVF9PTl9QTV9ERUFUSCwgMCwKKwkJCQkJ CQkJIFBHX1dBSVRfTE9DSyB8IGxvY2FsbG9jay0+dGFnLmxvY2subG9ja3RhZ190eXBlKTsK KwkJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7CiAJCQkvKiBjaGVj ayBmb3IgZGVhZGxvY2tzIGZpcnN0LCBhcyB0aGF0J3MgcHJvYmFibHkgbG9nLXdvcnRoeSAq LwogCQkJaWYgKGdvdF9kZWFkbG9ja190aW1lb3V0KQogCQkJewpAQCAtMTY3Nyw4ICsxNjk3 LDggQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrKQogCS8qCiAJICogRGlzYWJs ZSB0aGUgdGltZXJzLCBpZiB0aGV5IGFyZSBzdGlsbCBydW5uaW5nLiAgQXMgaW4gTG9ja0Vy cm9yQ2xlYW51cCwKIAkgKiB3ZSBtdXN0IHByZXNlcnZlIHRoZSBMT0NLX1RJTUVPVVQgaW5k aWNhdG9yIGZsYWc6IGlmIGEgbG9jayB0aW1lb3V0IGhhcwotCSAqIGFscmVhZHkgY2F1c2Vk IFF1ZXJ5Q2FuY2VsUGVuZGluZyB0byBiZWNvbWUgc2V0LCB3ZSB3YW50IHRoZSBjYW5jZWwg dG8KLQkgKiBiZSByZXBvcnRlZCBhcyBhIGxvY2sgdGltZW91dCwgbm90IGEgdXNlciBjYW5j ZWwuCisJICogYWxyZWFkeSByYWlzZWQgSU5URVJSVVBUX1FVRVJZX0NBTkNFTCwgd2Ugd2Fu dCB0aGUgY2FuY2VsIHRvIGJlCisJICogcmVwb3J0ZWQgYXMgYSBsb2NrIHRpbWVvdXQsIG5v dCBhIHVzZXIgY2FuY2VsLgogCSAqLwogCWlmICghSW5Ib3RTdGFuZGJ5KQogCXsKQEAgLTE3 MTUsNyArMTczNSw3IEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaykKIAogCiAv KgotICogUHJvY1dha2V1cCAtLSB3YWtlIHVwIGEgcHJvY2VzcyBieSBzZXR0aW5nIGl0cyBs YXRjaC4KKyAqIFByb2NXYWtldXAgLS0gd2FrZSB1cCBhIHByb2Nlc3MgYnkgc2VuZGluZyBp dCBhbiBpbnRlcnJ1cHQuCiAgKgogICoJIEFsc28gcmVtb3ZlIHRoZSBwcm9jZXNzIGZyb20g dGhlIHdhaXQgcXVldWUgYW5kIHNldCBpdHMgd2FpdExpbmsgaW52YWxpZC4KICAqCkBAIC0x NzQ0LDcgKzE3NjQsNyBAQCBQcm9jV2FrZXVwKFBHUFJPQyAqcHJvYywgUHJvY1dhaXRTdGF0 dXMgd2FpdFN0YXR1cykKIAlwZ19hdG9taWNfd3JpdGVfdTY0KCZwcm9jLT53YWl0U3RhcnQs IDApOwogCiAJLyogQW5kIGF3YWtlbiBpdCAqLwotCVNldExhdGNoKCZwcm9jLT5wcm9jTGF0 Y2gpOworCVNlbmRJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQLCBHZXROdW1iZXJG cm9tUEdQcm9jKHByb2MpKTsKIH0KIAogLyoKQEAgLTE5MDAsMTQgKzE5MjAsMTIgQEAgQ2hl Y2tEZWFkTG9ja0FsZXJ0KHZvaWQpCiAJZ290X2RlYWRsb2NrX3RpbWVvdXQgPSB0cnVlOwog CiAJLyoKLQkgKiBIYXZlIHRvIHNldCB0aGUgbGF0Y2ggYWdhaW4sIGV2ZW4gaWYgaGFuZGxl X3NpZ19hbGFybSBhbHJlYWR5IGRpZC4gQmFjawotCSAqIHRoZW4gZ290X2RlYWRsb2NrX3Rp bWVvdXQgd2Fzbid0IHlldCBzZXQuLi4gSXQncyB1bmxpa2VseSB0aGF0IHRoaXMKLQkgKiBl dmVyIHdvdWxkIGJlIGEgcHJvYmxlbSwgYnV0IHNldHRpbmcgYSBzZXQgbGF0Y2ggYWdhaW4g aXMgY2hlYXAuCi0JICoKLQkgKiBOb3RlIHRoYXQsIHdoZW4gdGhpcyBmdW5jdGlvbiBydW5z IGluc2lkZSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcigpLAotCSAqIHRoZSBoYW5kbGVy IGZ1bmN0aW9uIHNldHMgdGhlIGxhdGNoIGFnYWluIGFmdGVyIHRoZSBsYXRjaCBpcyBzZXQg aGVyZS4KKwkgKiBIYXZlIHRvIHJhaXNlIHRoZSBpbnRlcnJ1cHQgYWdhaW4sIGV2ZW4gaWYg aGFuZGxlX3NpZ19hbGFybSBhbHJlYWR5CisJICogZGlkLiBCYWNrIHRoZW4gZ290X2RlYWRs b2NrX3RpbWVvdXQgd2Fzbid0IHlldCBzZXQuLi4gSXQncyB1bmxpa2VseQorCSAqIHRoYXQg dGhpcyBldmVyIHdvdWxkIGJlIGEgcHJvYmxlbSwgYnV0IHJhaXNpbmcgYW4gaW50ZXJydXB0 IGFnYWluIGlzCisJICogY2hlYXAuCiAJICovCi0JU2V0TGF0Y2goTXlMYXRjaCk7CisJUmFp c2VJbnRlcnJ1cHQoSU5URVJSVVBUX1dBSVRfV0FLRVVQKTsKIAllcnJubyA9IHNhdmVfZXJy bm87CiB9CiAKQEAgLTE5ODYsMzQgKzIwMDQsNiBAQCBHZXRMb2NrSG9sZGVyc0FuZFdhaXRl cnMoTE9DQUxMT0NLICpsb2NhbGxvY2ssIFN0cmluZ0luZm8gbG9ja19ob2xkZXJzX3NidWYs CiAJfQogfQogCi0vKgotICogUHJvY1dhaXRGb3JTaWduYWwgLSB3YWl0IGZvciBhIHNpZ25h bCBmcm9tIGFub3RoZXIgYmFja2VuZC4KLSAqCi0gKiBBcyB0aGlzIHVzZXMgdGhlIGdlbmVy aWMgcHJvY2VzcyBsYXRjaCB0aGUgY2FsbGVyIGhhcyB0byBiZSByb2J1c3QgYWdhaW5zdAot ICogdW5yZWxhdGVkIHdha2V1cHM6IEFsd2F5cyBjaGVjayB0aGF0IHRoZSBkZXNpcmVkIHN0 YXRlIGhhcyBvY2N1cnJlZCwgYW5kCi0gKiB3YWl0IGFnYWluIGlmIG5vdC4KLSAqLwotdm9p ZAotUHJvY1dhaXRGb3JTaWduYWwodWludDMyIHdhaXRfZXZlbnRfaW5mbykKLXsKLQkodm9p ZCkgV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVB VEgsIDAsCi0JCQkJCSB3YWl0X2V2ZW50X2luZm8pOwotCVJlc2V0TGF0Y2goTXlMYXRjaCk7 Ci0JQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLX0KLQotLyoKLSAqIFByb2NTZW5kU2lnbmFs IC0gc2V0IHRoZSBsYXRjaCBvZiBhIGJhY2tlbmQgaWRlbnRpZmllZCBieSBQcm9jTnVtYmVy Ci0gKi8KLXZvaWQKLVByb2NTZW5kU2lnbmFsKFByb2NOdW1iZXIgcHJvY051bWJlcikKLXsK LQlpZiAocHJvY051bWJlciA8IDAgfHwgcHJvY051bWJlciA+PSBQcm9jR2xvYmFsLT5hbGxQ cm9jQ291bnQpCi0JCWVsb2coRVJST1IsICJwcm9jTnVtYmVyIG91dCBvZiByYW5nZSIpOwot Ci0JU2V0TGF0Y2goJkdldFBHUHJvY0J5TnVtYmVyKHByb2NOdW1iZXIpLT5wcm9jTGF0Y2gp OwotfQotCiAvKgogICogQmVjb21lTG9ja0dyb3VwTGVhZGVyIC0gZGVzaWduYXRlIHByb2Nl c3MgYXMgbG9jayBncm91cCBsZWFkZXIKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL3NtZ3Ivc21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpp bmRleCA1MzkxNjQwZDg2MS4uMmRkODBlMzZmZGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2Uvc21nci9zbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3Nt Z3IuYwpAQCAtOTk0LDcgKzk5NCw3IEBAIHNtZ3JmZChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwgdWludDMyICpvZmYpCiAJ ICogVGhlIGNhbGxlciBuZWVkcyB0byBwcmV2ZW50IGludGVycnVwdHMgZnJvbSBiZWluZyBw cm9jZXNzZWQsIG90aGVyd2lzZQogCSAqIHRoZSBGRCBjb3VsZCBiZSBjbG9zZWQgcHJlbWF0 dXJlbHkuCiAJICovCi0JQXNzZXJ0KCFJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSk7 CisJQXNzZXJ0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgPT0gMCk7CiAKIAlmZCA9IHNtZ3Jz d1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX2ZkKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBv ZmYpOwogCkBAIC0xMDczLDcgKzEwNzMsNyBAQCBzbWdyX2Fpb19yZW9wZW4oUGdBaW9IYW5k bGUgKmlvaCkKIAkgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIHByZXZlbnQgaW50ZXJydXB0cyBm cm9tIGJlaW5nIHByb2Nlc3NlZCwgb3RoZXJ3aXNlCiAJICogdGhlIEZEIGNvdWxkIGJlIGNs b3NlZCBhZ2FpbiBiZWZvcmUgd2UgZ2V0IHRvIGV4ZWN1dGluZyB0aGUgSU8uCiAJICovCi0J QXNzZXJ0KCFJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSk7CisJQXNzZXJ0KENoZWNr Rm9ySW50ZXJydXB0c01hc2sgPT0gMCk7CiAKIAlpZiAoc2QtPnNtZ3IuaXNfdGVtcCkKIAkJ cHJvY25vID0gcGdhaW9faW9fZ2V0X293bmVyKGlvaCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5 bmMuYwppbmRleCBiMWFjY2M2OGI5NS4uZmJlZDdkODJlOTggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2Uvc3luYy9zeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9z eW5jL3N5bmMuYwpAQCAtMjIsMTIgKzIyLDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL2NvbW1p dF90cy5oIgogI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKICNpbmNsdWRlICJhY2Nl c3MveGxvZy5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3J0YWJpbGl0eS9p bnN0cl90aW1lLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvZmQuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9tZC5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgpAQCAtNjExLDggKzYxMSw4IEBAIFJlZ2lzdGVyU3luY1Jl cXVlc3QoY29uc3QgRmlsZVRhZyAqZnRhZywgU3luY1JlcXVlc3RUeXBlIHR5cGUsCiAJCWlm IChyZXQgfHwgKCFyZXQgJiYgIXJldHJ5T25FcnJvcikpCiAJCQlicmVhazsKIAotCQlXYWl0 TGF0Y2goTlVMTCwgV0xfRVhJVF9PTl9QTV9ERUFUSCB8IFdMX1RJTUVPVVQsIDEwLAotCQkJ CSAgV0FJVF9FVkVOVF9SRUdJU1RFUl9TWU5DX1JFUVVFU1QpOworCQlXYWl0SW50ZXJydXB0 KDAsIFdMX0VYSVRfT05fUE1fREVBVEggfCBXTF9USU1FT1VULCAxMCwKKwkJCQkJICBXQUlU X0VWRU5UX1JFR0lTVEVSX1NZTkNfUkVRVUVTVCk7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMgYi9zcmMvYmFj a2VuZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5jCmluZGV4IGM1MTcxMTU5MjdjLi45NTk1NDc2 YzhlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYwor KysgYi9zcmMvYmFja2VuZC90Y29wL2JhY2tlbmRfc3RhcnR1cC5jCkBAIC0xOTgsNiArMTk4 LDE0IEBAIEJhY2tlbmRJbml0aWFsaXplKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENB Q19zdGF0ZSBjYWMpCiAJSW5pdGlhbGl6ZVRpbWVvdXRzKCk7CQkvKiBlc3RhYmxpc2hlcyBT SUdBTFJNIGhhbmRsZXIgKi8KIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlN0YXJ0dXBC bG9ja1NpZywgTlVMTCk7CiAKKwkvKgorCSAqIEZJWE1FOiBpbnN0YWxsIElOVEVSUlVQVF9U RVJNSU5BVEUgaGFuZGxlciBhdCBsZWFzdD8gTm90IHJlYWxseSBuZWVkZWQKKwkgKiBiZWNh dXNlIG5vIG9uZSBlbHNlIGNhbiBzZW5kIHVzIGludGVycnVwdHMgeWV0LCBhbmQgd2UgZG9u J3QgcmFpc2UgdGhlbQorCSAqIHdpdGhpbiB0aGUgYmFja2VuZCB5ZXQgZWl0aGVyLiBCdXQg aWYgd2UgY2hhbmdlZCBwb3N0bWFzdGVyIHRvIHNlbmQKKwkgKiBJTlRFUlJVUFRfVEVSTUlO QVRFIGRpcmVjdGx5LCBmb3IgZXhhbXBsZSwgd2UnZCBuZWVkIHRvIGhhbmRsZSBpdAorCSAq IGFscmVhZHkuCisJICovCisKIAkvKgogCSAqIEdldCB0aGUgcmVtb3RlIGhvc3QgbmFtZSBh bmQgcG9ydCBmb3IgbG9nZ2luZyBhbmQgc3RhdHVzIGRpc3BsYXkuCiAJICovCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bv c3RncmVzLmMKaW5kZXggNWQ2NmM4MDU2N2MuLjVlNTk1ZTUxOTg3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9z dGF0ZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21t b24vcGdfcHJuZy5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKKyNpbmNsdWRlICJp cGMvc2lnbmFsX2hhbmRsZXJzLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgogI2luY2x1ZGUg ImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKQEAgLTU0LDcg KzU2LDYgQEAKICNpbmNsdWRlICJwZ19nZXRvcHQuaCIKICNpbmNsdWRlICJwZ190cmFjZS5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAicmVw bGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9n aWNhbHdvcmtlci5oIgpAQCAtMTc5LDggKzE4MCw4IEBAIHN0YXRpYyBib29sIElzVHJhbnNh Y3Rpb25FeGl0U3RtdChOb2RlICpwYXJzZXRyZWUpOwogc3RhdGljIGJvb2wgSXNUcmFuc2Fj dGlvbkV4aXRTdG10TGlzdChMaXN0ICpwc3RtdHMpOwogc3RhdGljIGJvb2wgSXNUcmFuc2Fj dGlvblN0bXRMaXN0KExpc3QgKnBzdG10cyk7CiBzdGF0aWMgdm9pZCBkcm9wX3VubmFtZWRf c3RtdCh2b2lkKTsKLXN0YXRpYyB2b2lkIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJy dXB0cyh2b2lkKTsKLXN0YXRpYyB2b2lkIFByb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJy dXB0KFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uKTsKK3N0YXRpYyB2b2lkIFByb2Nl c3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KHZvaWQpOworc3RhdGljIHZvaWQgUHJvY2Vz c1JlY292ZXJ5Q29uZmxpY3QoUmVjb3ZlcnlDb25mbGljdFJlYXNvbiByZWFzb24pOwogc3Rh dGljIHZvaWQgcmVwb3J0X3JlY292ZXJ5X2NvbmZsaWN0KFJlY292ZXJ5Q29uZmxpY3RSZWFz b24gcmVhc29uKTsKIHN0YXRpYyB2b2lkIGxvZ19kaXNjb25uZWN0aW9ucyhpbnQgY29kZSwg RGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIGVuYWJsZV9zdGF0ZW1lbnRfdGltZW91dCh2b2lk KTsKQEAgLTMzNSw4ICszMzYsNiBAQCBpbnRlcmFjdGl2ZV9nZXRjKHZvaWQpCiAKIAljID0g Z2V0YyhzdGRpbik7CiAKLQlQcm9jZXNzQ2xpZW50UmVhZEludGVycnVwdChmYWxzZSk7Ci0K IAlyZXR1cm4gYzsKIH0KIApAQCAtMzUzLDExICszNTIsMjMgQEAgU29ja2V0QmFja2VuZChT dHJpbmdJbmZvIGluQnVmKQogewogCWludAkJCXF0eXBlOwogCWludAkJCW1heG1zZ2xlbjsK Kwlib29sCQlzYXZlX3F1ZXJ5X2NhbmNlbF9lbmFibGVkOworCisJLyoKKwkgKiBEb24ndCBh bGxvdyBxdWVyeSBjYW5jZWwgaW50ZXJydXB0cyB3aGlsZSByZWFkaW5nIGlucHV0IGZyb20g dGhlCisJICogY2xpZW50LCBiZWNhdXNlIHdlIG1pZ2h0IGxvc2Ugc3luYyBpbiB0aGUgRkUv QkUgcHJvdG9jb2wuICAoRGllCisJICogaW50ZXJydXB0cyBhcmUgT0ssIGJlY2F1c2Ugd2Ug d29uJ3QgcmVhZCBhbnkgZnVydGhlciBtZXNzYWdlcyBmcm9tIHRoZQorCSAqIGNsaWVudCBp biB0aGF0IGNhc2UuKQorCSAqCisJICogU2VlIHNpbWlsYXIgbG9naWMgaW4gUHJvY2Vzc1Jl Y292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoKS4KKwkgKi8KKwlzYXZlX3F1ZXJ5X2NhbmNlbF9l bmFibGVkID0gKEVuYWJsZWRJbnRlcnJ1cHRzTWFzayAmIElOVEVSUlVQVF9RVUVSWV9DQU5D RUwpICE9IDA7CisJaWYgKHNhdmVfcXVlcnlfY2FuY2VsX2VuYWJsZWQpCisJCURpc2FibGVJ bnRlcnJ1cHQoSU5URVJSVVBUX1FVRVJZX0NBTkNFTCk7CiAKIAkvKgogCSAqIEdldCBtZXNz YWdlIHR5cGUgY29kZSBmcm9tIHRoZSBmcm9udGVuZC4KIAkgKi8KLQlIT0xEX0NBTkNFTF9J TlRFUlJVUFRTKCk7CiAJcHFfc3RhcnRtc2dyZWFkKCk7CiAJcXR5cGUgPSBwcV9nZXRieXRl KCk7CiAKQEAgLTQ2NCw3ICs0NzUsOSBAQCBTb2NrZXRCYWNrZW5kKFN0cmluZ0luZm8gaW5C dWYpCiAJICovCiAJaWYgKHBxX2dldG1lc3NhZ2UoaW5CdWYsIG1heG1zZ2xlbikpCiAJCXJl dHVybiBFT0Y7CQkJCS8qIHN1aXRhYmxlIG1lc3NhZ2UgYWxyZWFkeSBsb2dnZWQgKi8KLQlS RVNVTUVfQ0FOQ0VMX0lOVEVSUlVQVFMoKTsKKworCWlmIChzYXZlX3F1ZXJ5X2NhbmNlbF9l bmFibGVkKQorCQlFbmFibGVJbnRlcnJ1cHQoSU5URVJSVVBUX1FVRVJZX0NBTkNFTCk7CiAK IAlyZXR1cm4gcXR5cGU7CiB9CkBAIC00ODgsMTA0ICs1MDEsNiBAQCBSZWFkQ29tbWFuZChT dHJpbmdJbmZvIGluQnVmKQogCXJldHVybiByZXN1bHQ7CiB9CiAKLS8qCi0gKiBQcm9jZXNz Q2xpZW50UmVhZEludGVycnVwdCgpIC0gUHJvY2VzcyBpbnRlcnJ1cHRzIHNwZWNpZmljIHRv IGNsaWVudCByZWFkcwotICoKLSAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGFuZCBh ZnRlciBsb3ctbGV2ZWwgcmVhZHMuCi0gKiAnYmxvY2tlZCcgaXMgdHJ1ZSBpZiBubyBkYXRh IHdhcyBhdmFpbGFibGUgdG8gcmVhZCBhbmQgd2UgcGxhbiB0byByZXRyeSwKLSAqIGZhbHNl IGlmIGFib3V0IHRvIHJlYWQgb3IgZG9uZSByZWFkaW5nLgotICoKLSAqIE11c3QgcHJlc2Vy dmUgZXJybm8hCi0gKi8KLXZvaWQKLVByb2Nlc3NDbGllbnRSZWFkSW50ZXJydXB0KGJvb2wg YmxvY2tlZCkKLXsKLQlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0KLQlpZiAoRG9pbmdD b21tYW5kUmVhZCkKLQl7Ci0JCS8qIENoZWNrIGZvciBnZW5lcmFsIGludGVycnVwdHMgdGhh dCBhcnJpdmVkIGJlZm9yZS93aGlsZSByZWFkaW5nICovCi0JCUNIRUNLX0ZPUl9JTlRFUlJV UFRTKCk7Ci0KLQkJLyogUHJvY2VzcyBzaW52YWwgY2F0Y2h1cCBpbnRlcnJ1cHRzLCBpZiBh bnkgKi8KLQkJaWYgKGNhdGNodXBJbnRlcnJ1cHRQZW5kaW5nKQotCQkJUHJvY2Vzc0NhdGNo dXBJbnRlcnJ1cHQoKTsKLQotCQkvKiBQcm9jZXNzIG5vdGlmeSBpbnRlcnJ1cHRzLCBpZiBh bnkgKi8KLQkJaWYgKG5vdGlmeUludGVycnVwdFBlbmRpbmcpCi0JCQlQcm9jZXNzTm90aWZ5 SW50ZXJydXB0KHRydWUpOwotCX0KLQllbHNlIGlmIChQcm9jRGllUGVuZGluZykKLQl7Ci0J CS8qCi0JCSAqIFdlJ3JlIGR5aW5nLiAgSWYgdGhlcmUgaXMgbm8gZGF0YSBhdmFpbGFibGUg dG8gcmVhZCwgdGhlbiBpdCdzIHNhZmUKLQkJICogKGFuZCBzYW5lKSB0byBoYW5kbGUgdGhh dCBub3cuICBJZiB3ZSBoYXZlbid0IHRyaWVkIHRvIHJlYWQgeWV0LAotCQkgKiBtYWtlIHN1 cmUgdGhlIHByb2Nlc3MgbGF0Y2ggaXMgc2V0LCBzbyB0aGF0IGlmIHRoZXJlIGlzIG5vIGRh dGEKLQkJICogdGhlbiB3ZSdsbCBjb21lIGJhY2sgaGVyZSBhbmQgZGllLiAgSWYgd2UncmUg ZG9uZSByZWFkaW5nLCBhbHNvCi0JCSAqIG1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBsYXRjaCBp cyBzZXQsIGFzIHdlIG1pZ2h0J3ZlIHVuZGVzaXJhYmx5Ci0JCSAqIGNsZWFyZWQgaXQgd2hp bGUgcmVhZGluZy4KLQkJICovCi0JCWlmIChibG9ja2VkKQotCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKLQkJZWxzZQotCQkJU2V0TGF0Y2goTXlMYXRjaCk7Ci0JfQotCi0JZXJybm8g PSBzYXZlX2Vycm5vOwotfQotCi0vKgotICogUHJvY2Vzc0NsaWVudFdyaXRlSW50ZXJydXB0 KCkgLSBQcm9jZXNzIGludGVycnVwdHMgc3BlY2lmaWMgdG8gY2xpZW50IHdyaXRlcwotICoK LSAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGFuZCBhZnRlciBsb3ctbGV2ZWwgd3Jp dGVzLgotICogJ2Jsb2NrZWQnIGlzIHRydWUgaWYgbm8gZGF0YSBjb3VsZCBiZSB3cml0dGVu IGFuZCB3ZSBwbGFuIHRvIHJldHJ5LAotICogZmFsc2UgaWYgYWJvdXQgdG8gd3JpdGUgb3Ig ZG9uZSB3cml0aW5nLgotICoKLSAqIE11c3QgcHJlc2VydmUgZXJybm8hCi0gKi8KLXZvaWQK LVByb2Nlc3NDbGllbnRXcml0ZUludGVycnVwdChib29sIGJsb2NrZWQpCi17Ci0JaW50CQkJ c2F2ZV9lcnJubyA9IGVycm5vOwotCi0JaWYgKFByb2NEaWVQZW5kaW5nKQotCXsKLQkJLyoK LQkJICogV2UncmUgZHlpbmcuICBJZiBpdCdzIG5vdCBwb3NzaWJsZSB0byB3cml0ZSwgdGhl biB3ZSBzaG91bGQgaGFuZGxlCi0JCSAqIHRoYXQgaW1tZWRpYXRlbHksIGVsc2UgYSBzdHVj ayBjbGllbnQgY291bGQgaW5kZWZpbml0ZWx5IGRlbGF5IG91cgotCQkgKiByZXNwb25zZSB0 byB0aGUgc2lnbmFsLiAgSWYgd2UgaGF2ZW4ndCB0cmllZCB0byB3cml0ZSB5ZXQsIG1ha2UK LQkJICogc3VyZSB0aGUgcHJvY2VzcyBsYXRjaCBpcyBzZXQsIHNvIHRoYXQgaWYgdGhlIHdy aXRlIHdvdWxkIGJsb2NrCi0JCSAqIHRoZW4gd2UnbGwgY29tZSBiYWNrIGhlcmUgYW5kIGRp ZS4gIElmIHdlJ3JlIGRvbmUgd3JpdGluZywgYWxzbwotCQkgKiBtYWtlIHN1cmUgdGhlIHBy b2Nlc3MgbGF0Y2ggaXMgc2V0LCBhcyB3ZSBtaWdodCd2ZSB1bmRlc2lyYWJseQotCQkgKiBj bGVhcmVkIGl0IHdoaWxlIHdyaXRpbmcuCi0JCSAqLwotCQlpZiAoYmxvY2tlZCkKLQkJewot CQkJLyoKLQkJCSAqIERvbid0IG1lc3Mgd2l0aCB3aGVyZVRvU2VuZE91dHB1dCBpZiBQcm9j ZXNzSW50ZXJydXB0cyB3b3VsZG4ndAotCQkJICogc2VydmljZSBQcm9jRGllUGVuZGluZy4K LQkJCSAqLwotCQkJaWYgKEludGVycnVwdEhvbGRvZmZDb3VudCA9PSAwICYmIENyaXRTZWN0 aW9uQ291bnQgPT0gMCkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFdlIGRvbid0IHdhbnQgdG8g c2VuZCB0aGUgY2xpZW50IHRoZSBlcnJvciBtZXNzYWdlLCBhcyBhKQotCQkJCSAqIHRoYXQg d291bGQgcG9zc2libHkgYmxvY2sgYWdhaW4sIGFuZCBiKSBpdCB3b3VsZCBsaWtlbHkKLQkJ CQkgKiBsZWFkIHRvIGxvc3Mgb2YgcHJvdG9jb2wgc3luYyBiZWNhdXNlIHdlIG1heSBoYXZl IGFscmVhZHkKLQkJCQkgKiBzZW50IGEgcGFydGlhbCBwcm90b2NvbCBtZXNzYWdlLgotCQkJ CSAqLwotCQkJCWlmICh3aGVyZVRvU2VuZE91dHB1dCA9PSBEZXN0UmVtb3RlKQotCQkJCQl3 aGVyZVRvU2VuZE91dHB1dCA9IERlc3ROb25lOwotCi0JCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlTZXRMYXRjaChNeUxhdGNoKTsKLQl9Ci0K LQllcnJubyA9IHNhdmVfZXJybm87Ci19Ci0KIC8qCiAgKiBEbyByYXcgcGFyc2luZyAob25s eSkuCiAgKgpAQCAtMjkxMCw3ICsyODI1LDcgQEAgZHJvcF91bm5hbWVkX3N0bXQodm9pZCkK ICAqIEVpdGhlciBzb21lIGJhY2tlbmQgaGFzIGJvdWdodCB0aGUgZmFybSwgb3Igd2UndmUg YmVlbiB0b2xkIHRvIHNodXQgZG93bgogICogImltbWVkaWF0ZWx5Ijsgc28gd2UgbmVlZCB0 byBzdG9wIHdoYXQgd2UncmUgZG9pbmcgYW5kIGV4aXQuCiAgKi8KLXZvaWQKK3N0YXRpYyB2 b2lkCiBxdWlja2RpZShTSUdOQUxfQVJHUykKIHsKIAlzaWdhZGRzZXQoJkJsb2NrU2lnLCBT SUdRVUlUKTsJLyogcHJldmVudCBuZXN0ZWQgY2FsbHMgKi8KQEAgLTMwMDcsNTAgKzI5MjIs MjYgQEAgcXVpY2tkaWUoU0lHTkFMX0FSR1MpCiAgKiBTaHV0ZG93biBzaWduYWwgZnJvbSBw b3N0bWFzdGVyOiBhYm9ydCB0cmFuc2FjdGlvbiBhbmQgZXhpdAogICogYXQgc29vbmVzdCBj b252ZW5pZW50IHRpbWUKICAqLwotdm9pZAorc3RhdGljIHZvaWQKIGRpZShTSUdOQUxfQVJH UykKIHsKLQkvKiBEb24ndCBqb2dnbGUgdGhlIGVsYm93IG9mIHByb2NfZXhpdCAqLwotCWlm ICghcHJvY19leGl0X2lucHJvZ3Jlc3MpCi0JewotCQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1 ZTsKLQkJUHJvY0RpZVBlbmRpbmcgPSB0cnVlOwotCX0KLQogCS8qIGZvciB0aGUgY3VtdWxh dGl2ZSBzdGF0cyBzeXN0ZW0gKi8KIAlwZ1N0YXRTZXNzaW9uRW5kQ2F1c2UgPSBESVNDT05O RUNUX0tJTExFRDsKIAotCS8qIElmIHdlJ3JlIHN0aWxsIGhlcmUsIHdha2VuIGFueXRoaW5n IHdhaXRpbmcgb24gdGhlIHByb2Nlc3MgbGF0Y2ggKi8KLQlTZXRMYXRjaChNeUxhdGNoKTsK KwkvKiBEb24ndCBqb2dnbGUgdGhlIGVsYm93IG9mIHByb2NfZXhpdCAqLworCWlmIChwcm9j X2V4aXRfaW5wcm9ncmVzcykKKwkJcmV0dXJuOworCisJUmFpc2VJbnRlcnJ1cHQoSU5URVJS VVBUX1RFUk1JTkFURSk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIHNpbmdsZSB1c2VyIG1v ZGUsIHdlIHdhbnQgdG8gcXVpdCBpbW1lZGlhdGVseSAtIHdlIGNhbid0Ci0JICogcmVseSBv biBsYXRjaGVzIGFzIHRoZXkgd291bGRuJ3Qgd29yayB3aGVuIHN0ZGluL3N0ZG91dCBpcyBh IGZpbGUuCisJICogcmVseSBvbiBpbnRlcnJ1cHRzIGFzIHRoZXkgd291bGRuJ3Qgd29yayB3 aGVuIHN0ZGluL3N0ZG91dCBpcyBhIGZpbGUuCiAJICogUmF0aGVyIHVnbHksIGJ1dCBpdCdz IHVubGlrZWx5IHRvIGJlIHdvcnRod2hpbGUgdG8gaW52ZXN0IG11Y2ggbW9yZQogCSAqIGVm Zm9ydCBqdXN0IGZvciB0aGUgYmVuZWZpdCBvZiBzaW5nbGUgdXNlciBtb2RlLgogCSAqLwog CWlmIChEb2luZ0NvbW1hbmRSZWFkICYmIHdoZXJlVG9TZW5kT3V0cHV0ICE9IERlc3RSZW1v dGUpCi0JCVByb2Nlc3NJbnRlcnJ1cHRzKCk7Ci19Ci0KLS8qCi0gKiBRdWVyeS1jYW5jZWwg c2lnbmFsIGZyb20gcG9zdG1hc3RlcjogYWJvcnQgY3VycmVudCB0cmFuc2FjdGlvbgotICog YXQgc29vbmVzdCBjb252ZW5pZW50IHRpbWUKLSAqLwotdm9pZAotU3RhdGVtZW50Q2FuY2Vs SGFuZGxlcihTSUdOQUxfQVJHUykKLXsKLQkvKgotCSAqIERvbid0IGpvZ2dsZSB0aGUgZWxi b3cgb2YgcHJvY19leGl0Ci0JICovCi0JaWYgKCFwcm9jX2V4aXRfaW5wcm9ncmVzcykKLQl7 Ci0JCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOwotCQlRdWVyeUNhbmNlbFBlbmRpbmcgPSB0 cnVlOwotCX0KLQotCS8qIElmIHdlJ3JlIHN0aWxsIGhlcmUsIHdha2VuIGFueXRoaW5nIHdh aXRpbmcgb24gdGhlIHByb2Nlc3MgbGF0Y2ggKi8KLQlTZXRMYXRjaChNeUxhdGNoKTsKKwkJ UHJvY2Vzc1Rlcm1pbmF0ZUludGVycnVwdCgpOwogfQogCiAvKiBzaWduYWwgaGFuZGxlciBm b3IgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uICovCkBAIC0zMDY3LDIyICsyOTU4LDkxIEBA IEZsb2F0RXhjZXB0aW9uSGFuZGxlcihTSUdOQUxfQVJHUykKIH0KIAogLyoKLSAqIFRlbGwg dGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB0byBwcm9jZXNzIHJlY292ZXJ5IGNv bmZsaWN0cy4gIFJ1bnMKLSAqIGluIGEgU0lHVVNSMSBoYW5kbGVyLgorICogU2V0IHRoZSAi c3RhbmRhcmQiIHNldCBvZiBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRvIGhhbmRsZSBjb21tb24g aW50ZXJydXB0cworICogdGhhdCBzaG91bGQgYmUgaGFuZGxlZCBieSBhbGwgb3IgbW9zdCBj aGlsZCBwcm9jZXNzZXMuCisgKgorICogVGhlIGNhbGxlciBtYXkgbW9kaWZ5IHRoZSBkZWZh dWx0cyBhZnRlciBjYWxsaW5nIHRoaXMgd2l0aCBmdXJ0aGVyCisgKiBTZXRJbnRlcnJ1cHRI YW5kbGVyKCkgb3IgRW5hYmxlL0Rpc2FibGVJbnRlcnJ1cHQoKSBjYWxscy4KICAqLwogdm9p ZAotSGFuZGxlUmVjb3ZlcnlDb25mbGljdEludGVycnVwdCh2b2lkKQorU2V0U3RhbmRhcmRJ bnRlcnJ1cHRIYW5kbGVycyh2b2lkKQogewotCWlmIChwZ19hdG9taWNfcmVhZF91MzIoJk15 UHJvYy0+cGVuZGluZ1JlY292ZXJ5Q29uZmxpY3RzKSAhPSAwKQotCQlJbnRlcnJ1cHRQZW5k aW5nID0gdHJ1ZTsKLQkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3Vz cjFfaGFuZGxlciAqLworCS8qIEFsbCBwcm9jZXNzZXMgc2hvdWxkIHJlYWN0IHRvIGJhcnJp ZXJzIGFuZCBtZW1vcnkgY29udGV4dCBkZWJ1Z2dpbmcgKi8KKwlTZXRJbnRlcnJ1cHRIYW5k bGVyKElOVEVSUlVQVF9CQVJSSUVSLCBQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIpOworCUVu YWJsZUludGVycnVwdChJTlRFUlJVUFRfQkFSUklFUik7CisJU2V0SW50ZXJydXB0SGFuZGxl cihJTlRFUlJVUFRfTE9HX01FTU9SWV9DT05URVhULCBQcm9jZXNzTG9nTWVtb3J5Q29udGV4 dEludGVycnVwdCk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9MT0dfTUVNT1JZX0NP TlRFWFQpOworCisJLyoKKwkgKiBDYXRjaHVwIGludGVycnVwdHMgbXVzdCBiZSBoYW5kbGVk IGluIGFueXRoaW5nIHRoYXQgcGFydGljaXBhdGVzIGluCisJICogc2hhcmVkIGludmFsaWRh dGlvbgorCSAqLworCS8qIFhYWDogZG9uZSBpbiBzaW52YWxhZHQuYyAqLworCS8qIFNldElu dGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX1NJTlZBTF9DQVRDSFVQLCBQcm9jZXNzQ2F0Y2h1 cEludGVycnVwdCk7ICovCisKKwkvKgorCSAqIEV2ZXJ5IHByb2Nlc3Mgc2hvdWxkIHJlYWN0 IHRvIElOVEVSUlVQVF9URVJNSU5BVEUuIEJ1dCBtYW55IHByb2Nlc3NlcworCSAqIGRpc2Fi bGUgdGhpcyBhbmQgZG8gdGhlaXIgb3duIGNoZWNrcyBhdCBhcHByb3ByaWF0ZSB0aW1lcy4K KwkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9URVJNSU5BVEUsIFByb2Nl c3NUZXJtaW5hdGVJbnRlcnJ1cHQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfVEVS TUlOQVRFKTsKKworCS8qCisJICogQmFja2VuZHMgYW5kIHByb2Nlc3NlcyB0aGF0IGNvbm5l Y3QgdG8gYSBwYXJ0aWN1bGFyIGRhdGFiYXNlIGNhbgorCSAqIGNvbmZsaWN0IHdpdGggcmVj b3ZlcnkKKwkgKgorCSAqIHh4eDogU2V0IHRoaXMgaW4gSW5pdFBvc3RncmVzIGlmIHdlJ3Jl IGNvbm5lY3RpbmcgdG8gYSBwYXJ0aWN1bGFyCisJICogZGF0YWJhc2U/CisJICovCisJU2V0 SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfUkVDT1ZFUllfQ09ORkxJQ1QsIFByb2Nlc3NS ZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KTsKKwlFbmFibGVJbnRlcnJ1cHQoSU5URVJSVVBU X1JFQ09WRVJZX0NPTkZMSUNUKTsKKworCS8qCisJICogQWxsIHByb2Nlc3NlcyBzaG91bGQg aGFuZGxlIGNvbmZpZyByZWxvYWRzLiBCdXQgdXN1YWxseSBvbmx5IGluCisJICogc3BlY2lm aWMgc3BvdHMsIGxpa2Ugd2hlbiBub3QgaW4gYSB0cmFuc2FjdGlvbiwgc28gdGhpcyBpcyBk aXNhYmxlZCBieQorCSAqIGRlZmF1bHQuCisJICoKKwkgKiBUaGlzIHJlbGllcyBvbiB0aGUg U0lHSFVQIHNpZ25hbCBoYW5kbGVyIHRvIHJhaXNlCisJICogSU5URVJSVVBUX0NPTkZJR19S RUxPQUQgb24gU0lHSFVQLgorCSAqLworCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBU X0NPTkZJR19SRUxPQUQsIFByb2Nlc3NDb25maWdSZWxvYWRJbnRlcnJ1cHQpOwogfQogCiAv KgotICogQ2hlY2sgb25lIGluZGl2aWR1YWwgY29uZmxpY3QgcmVhc29uLgorICogQ2hlY2sg ZWFjaCBwb3NzaWJsZSByZWNvdmVyeSBjb25mbGljdCByZWFzb24uCiAgKi8KIHN0YXRpYyB2 b2lkCi1Qcm9jZXNzUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChSZWNvdmVyeUNvbmZsaWN0 UmVhc29uIHJlYXNvbikKK1Byb2Nlc3NSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KHZvaWQp Cit7CisJdWludDMyCQlwZW5kaW5nOworCisJLyogQXJlIGFueSByZWNvdmVyeSBjb25mbGlj dHMgcGVuZGluZz8gKi8KKwlwZW5kaW5nID0gcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91 MzIoJk15UHJvYy0+cGVuZGluZ1JlY292ZXJ5Q29uZmxpY3RzKTsKKwlpZiAocGVuZGluZyA9 PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENoZWNrIHRoZSBjb25mbGljdHMgb25lIGJ5 IG9uZSwgY2xlYXJpbmcgZWFjaCBmbGFnIG9ubHkgYmVmb3JlCisJICogcHJvY2Vzc2luZyB0 aGUgcGFydGljdWxhciBjb25mbGljdC4gIFRoaXMgZW5zdXJlcyB0aGF0IGlmIG11bHRpcGxl CisJICogY29uZmxpY3RzIGFyZSBwZW5kaW5nLCB3ZSBjb21lIGJhY2sgaGVyZSB0byBwcm9j ZXNzIHRoZSByZW1haW5pbmcKKwkgKiBjb25mbGljdHMsIGlmIGFuIGVycm9yIGlzIHRocm93 biBkdXJpbmcgcHJvY2Vzc2luZyBvbmUgb2YgdGhlbS4KKwkgKi8KKwlmb3IgKFJlY292ZXJ5 Q29uZmxpY3RSZWFzb24gcmVhc29uID0gMDsKKwkJIHJlYXNvbiA8IE5VTV9SRUNPVkVSWV9D T05GTElDVF9SRUFTT05TOworCQkgcmVhc29uKyspCisJeworCQlpZiAoKHBlbmRpbmcgJiAo MSA8PCByZWFzb24pKSAhPSAwKQorCQl7CisJCQkvKiBjbGVhciB0aGUgZmxhZyAqLworCQkJ KHZvaWQpIHBnX2F0b21pY19mZXRjaF9hbmRfdTMyKCZNeVByb2MtPnBlbmRpbmdSZWNvdmVy eUNvbmZsaWN0cywgfigxIDw8IHJlYXNvbikpOworCisJCQlQcm9jZXNzUmVjb3ZlcnlDb25m bGljdChyZWFzb24pOworCQl9CisJfQorfQorCit2b2lkCitQcm9jZXNzUmVjb3ZlcnlDb25m bGljdChSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKIHsKIAlzd2l0Y2ggKHJlYXNv bikKIAl7CkBAIC0zMjQyLDE0ICszMjAyLDE0IEBAIHJlcG9ydF9yZWNvdmVyeV9jb25mbGlj dChSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbikKIAkJaWYgKCFEb2luZ0NvbW1hbmRS ZWFkKQogCQl7CiAJCQkvKiBBdm9pZCBsb3Npbmcgc3luYyBpbiB0aGUgRkUvQkUgcHJvdG9j b2wuICovCi0JCQlpZiAoUXVlcnlDYW5jZWxIb2xkb2ZmQ291bnQgIT0gMCkKKwkJCWlmICgh SU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpKQog CQkJewogCQkJCS8qCiAJCQkJICogUmUtYXJtIGFuZCBkZWZlciB0aGlzIGludGVycnVwdCB1 bnRpbCBsYXRlci4gIFNlZSBzaW1pbGFyCiAJCQkJICogY29kZSBpbiBQcm9jZXNzSW50ZXJy dXB0cygpLgogCQkJCSAqLwogCQkJCSh2b2lkKSBwZ19hdG9taWNfZmV0Y2hfb3JfdTMyKCZN eVByb2MtPnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0cywgKDEgPDwgcmVhc29uKSk7Ci0JCQkJ SW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJCQkJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBU X1JFQ09WRVJZX0NPTkZMSUNUKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAKQEAgLTMyODAsNzIg KzMyNDAsMzEgQEAgcmVwb3J0X3JlY292ZXJ5X2NvbmZsaWN0KFJlY292ZXJ5Q29uZmxpY3RS ZWFzb24gcmVhc29uKQogCQkJCQkgIiBkYXRhYmFzZSBhbmQgcmVwZWF0IHlvdXIgY29tbWFu ZC4iKSkpOwogfQogCi0vKgotICogQ2hlY2sgZWFjaCBwb3NzaWJsZSByZWNvdmVyeSBjb25m bGljdCByZWFzb24uCi0gKi8KLXN0YXRpYyB2b2lkCi1Qcm9jZXNzUmVjb3ZlcnlDb25mbGlj dEludGVycnVwdHModm9pZCkKK3ZvaWQKK1Byb2Nlc3NDb25maWdSZWxvYWRJbnRlcnJ1cHQo dm9pZCkKIHsKLQl1aW50MzIJCXBlbmRpbmc7Ci0KLQkvKgotCSAqIFdlIGRvbid0IG5lZWQg dG8gd29ycnkgYWJvdXQgam9nZ2xpbmcgdGhlIGVsYm93IG9mIHByb2NfZXhpdCwgYmVjYXVz ZQotCSAqIHByb2NfZXhpdF9wcmVwYXJlKCkgaG9sZHMgaW50ZXJydXB0cywgc28gUHJvY2Vz c0ludGVycnVwdHMoKSB3b24ndCBjYWxsCi0JICogdXMuCi0JICovCi0JQXNzZXJ0KCFwcm9j X2V4aXRfaW5wcm9ncmVzcyk7Ci0JQXNzZXJ0KEludGVycnVwdEhvbGRvZmZDb3VudCA9PSAw KTsKLQotCS8qIEFyZSBhbnkgcmVjb3ZlcnkgY29uZmxpY3QgcGVuZGluZz8gKi8KLQlwZW5k aW5nID0gcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91MzIoJk15UHJvYy0+cGVuZGluZ1Jl Y292ZXJ5Q29uZmxpY3RzKTsKLQlpZiAocGVuZGluZyA9PSAwKQotCQlyZXR1cm47CisJUHJv Y2Vzc0NvbmZpZ0ZpbGUoUEdDX1NJR0hVUCk7Cit9CiAKK3ZvaWQKK1Byb2Nlc3NBc3luY05v dGlmeUludGVycnVwdCh2b2lkKQorewogCS8qCi0JICogQ2hlY2sgdGhlIGNvbmZsaWN0cyBv bmUgYnkgb25lLCBjbGVhcmluZyBlYWNoIGZsYWcgb25seSBiZWZvcmUKLQkgKiBwcm9jZXNz aW5nIHRoZSBwYXJ0aWN1bGFyIGNvbmZsaWN0LiAgVGhpcyBlbnN1cmVzIHRoYXQgaWYgbXVs dGlwbGUKLQkgKiBjb25mbGljdHMgYXJlIHBlbmRpbmcsIHdlIGNvbWUgYmFjayBoZXJlIHRv IHByb2Nlc3MgdGhlIHJlbWFpbmluZwotCSAqIGNvbmZsaWN0cywgaWYgYW4gZXJyb3IgaXMg dGhyb3duIGR1cmluZyBwcm9jZXNzaW5nIG9uZSBvZiB0aGVtLgorCSAqIFRoaXMgaXMgb25s eSBlbmFibGVkIHdoaWxlIERvaW5nQ29tbWFuZFJlYWQsIHNvIHdlIHdhbnQgdG8gZmx1c2gg dGhlCisJICogYXN5bmMgbm90aWZ5IHRvIHRoZSBjbGllbnQgaW1tZWRpYXRlbHkKIAkgKi8K LQlmb3IgKFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uID0gMDsKLQkJIHJlYXNvbiA8 IE5VTV9SRUNPVkVSWV9DT05GTElDVF9SRUFTT05TOwotCQkgcmVhc29uKyspCi0JewotCQlp ZiAoKHBlbmRpbmcgJiAoMSA8PCByZWFzb24pKSAhPSAwKQotCQl7Ci0JCQkvKiBjbGVhciB0 aGUgZmxhZyAqLwotCQkJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9hbmRfdTMyKCZNeVByb2Mt PnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0cywgfigxIDw8IHJlYXNvbikpOwotCi0JCQlQcm9j ZXNzUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChyZWFzb24pOwotCQl9Ci0JfQorCUFzc2Vy dChEb2luZ0NvbW1hbmRSZWFkKTsKKwlQcm9jZXNzTm90aWZ5SW50ZXJydXB0KHRydWUpOwog fQogCi0vKgotICogUHJvY2Vzc0ludGVycnVwdHM6IG91dC1vZi1saW5lIHBvcnRpb24gb2Yg Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBtYWNybwotICoKLSAqIElmIGFuIGludGVycnVwdCBj b25kaXRpb24gaXMgcGVuZGluZywgYW5kIGl0J3Mgc2FmZSB0byBzZXJ2aWNlIGl0LAotICog dGhlbiBjbGVhciB0aGUgZmxhZyBhbmQgYWNjZXB0IHRoZSBpbnRlcnJ1cHQuICBDYWxsZWQg b25seSB3aGVuCi0gKiBJbnRlcnJ1cHRQZW5kaW5nIGlzIHRydWUuCi0gKgotICogTm90ZTog aWYgSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCkgaXMgdHJ1ZSwgdGhlbiBQcm9jZXNz SW50ZXJydXB0cwotICogaXMgZ3VhcmFudGVlZCB0byBjbGVhciB0aGUgSW50ZXJydXB0UGVu ZGluZyBmbGFnIGJlZm9yZSByZXR1cm5pbmcuCi0gKiAoVGhpcyBpcyBub3QgdGhlIHNhbWUg YXMgZ3VhcmFudGVlaW5nIHRoYXQgaXQncyBzdGlsbCBjbGVhciB3aGVuIHdlCi0gKiByZXR1 cm47IGFub3RoZXIgaW50ZXJydXB0IGNvdWxkIGhhdmUgYXJyaXZlZC4gIEJ1dCB3ZSBwcm9t aXNlIHRoYXQKLSAqIGFueSBwcmUtZXhpc3Rpbmcgb25lIHdpbGwgaGF2ZSBiZWVuIHNlcnZp Y2VkLikKLSAqLwogdm9pZAotUHJvY2Vzc0ludGVycnVwdHModm9pZCkKK1Byb2Nlc3NUZXJt aW5hdGVJbnRlcnJ1cHQodm9pZCkKIHsKIAkvKiBPSyB0byBhY2NlcHQgYW55IGludGVycnVw dHMgbm93PyAqLwotCWlmIChJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgIT0gMCB8fCBDcml0U2Vj dGlvbkNvdW50ICE9IDApCi0JCXJldHVybjsKLQlJbnRlcnJ1cHRQZW5kaW5nID0gZmFsc2U7 CisJQXNzZXJ0KEludGVycnVwdEhvbGRvZmZDb3VudCA9PSAwKTsKKwlBc3NlcnQoQ3JpdFNl Y3Rpb25Db3VudCA9PSAwKTsKIAotCWlmIChQcm9jRGllUGVuZGluZykKIAl7Ci0JCVByb2NE aWVQZW5kaW5nID0gZmFsc2U7Ci0JCVF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOyAvKiBQ cm9jRGllIHRydW1wcyBRdWVyeUNhbmNlbCAqLwogCQlMb2NrRXJyb3JDbGVhbnVwKCk7CiAJ CS8qIEFzIGluIHF1aWNrZGllLCBkb24ndCByaXNrIHNlbmRpbmcgdG8gY2xpZW50IGR1cmlu ZyBhdXRoICovCiAJCWlmIChDbGllbnRBdXRoSW5Qcm9ncmVzcyAmJiB3aGVyZVRvU2VuZE91 dHB1dCA9PSBEZXN0UmVtb3RlKQpAQCAtMzM5NCw2NSArMzMxMyw1NSBAQCBQcm9jZXNzSW50 ZXJydXB0cyh2b2lkKQogCQkJCQkoZXJyY29kZShFUlJDT0RFX0FETUlOX1NIVVRET1dOKSwK IAkJCQkJIGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUgdG8gYWRtaW5pc3Ry YXRvciBjb21tYW5kIikpKTsKIAl9Cit9CiAKLQlpZiAoQ2hlY2tDbGllbnRDb25uZWN0aW9u UGVuZGluZykKLQl7Ci0JCUNoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRpbmcgPSBmYWxzZTsK LQotCQkvKgotCQkgKiBDaGVjayBmb3IgbG9zdCBjb25uZWN0aW9uIGFuZCByZS1hcm0sIGlm IHN0aWxsIGNvbmZpZ3VyZWQsIGJ1dCBub3QKLQkJICogaWYgd2UndmUgYXJyaXZlZCBiYWNr IGF0IERvaW5nQ29tbWFuZFJlYWQgc3RhdGUuICBXZSBkb24ndCB3YW50IHRvCi0JCSAqIHdh a2UgdXAgaWRsZSBzZXNzaW9ucywgYW5kIHRoZXkgYWxyZWFkeSBrbm93IGhvdyB0byBkZXRl Y3QgbG9zdAotCQkgKiBjb25uZWN0aW9ucy4KLQkJICovCi0JCWlmICghRG9pbmdDb21tYW5k UmVhZCAmJiBjbGllbnRfY29ubmVjdGlvbl9jaGVja19pbnRlcnZhbCA+IDApCi0JCXsKLQkJ CWlmICghcHFfY2hlY2tfY29ubmVjdGlvbigpKQotCQkJCUNsaWVudENvbm5lY3Rpb25Mb3N0 ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQllbmFibGVfdGltZW91dF9hZnRlcihDTElFTlRfQ09O TkVDVElPTl9DSEVDS19USU1FT1VULAotCQkJCQkJCQkJIGNsaWVudF9jb25uZWN0aW9uX2No ZWNrX2ludGVydmFsKTsKLQkJfQotCX0KIAotCWlmIChDbGllbnRDb25uZWN0aW9uTG9zdCkK K3ZvaWQKK1Byb2Nlc3NDbGllbnRDaGVja1RpbWVvdXRJbnRlcnJ1cHQodm9pZCkKK3sKKwkv KgorCSAqIENoZWNrIGZvciBsb3N0IGNvbm5lY3Rpb24gYW5kIHJlLWFybSwgaWYgc3RpbGwg Y29uZmlndXJlZCwgYnV0IG5vdCBpZgorCSAqIHdlJ3ZlIGFycml2ZWQgYmFjayBhdCBEb2lu Z0NvbW1hbmRSZWFkIHN0YXRlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWtlIHVwCisJICogaWRs ZSBzZXNzaW9ucywgYW5kIHRoZXkgYWxyZWFkeSBrbm93IGhvdyB0byBkZXRlY3QgbG9zdCBj b25uZWN0aW9ucy4KKwkgKi8KKwlpZiAoIURvaW5nQ29tbWFuZFJlYWQgJiYgY2xpZW50X2Nv bm5lY3Rpb25fY2hlY2tfaW50ZXJ2YWwgPiAwKQogCXsKLQkJUXVlcnlDYW5jZWxQZW5kaW5n ID0gZmFsc2U7IC8qIGxvc3QgY29ubmVjdGlvbiB0cnVtcHMgUXVlcnlDYW5jZWwgKi8KLQkJ TG9ja0Vycm9yQ2xlYW51cCgpOwotCQkvKiBkb24ndCBzZW5kIHRvIGNsaWVudCwgd2UgYWxy ZWFkeSBrbm93IHRoZSBjb25uZWN0aW9uIHRvIGJlIGRlYWQuICovCi0JCXdoZXJlVG9TZW5k T3V0cHV0ID0gRGVzdE5vbmU7Ci0JCWVyZXBvcnQoRkFUQUwsCi0JCQkJKGVycmNvZGUoRVJS Q09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAotCQkJCSBlcnJtc2coImNvbm5lY3Rpb24gdG8g Y2xpZW50IGxvc3QiKSkpOworCQlpZiAoIXBxX2NoZWNrX2Nvbm5lY3Rpb24oKSkKKwkJCVJh aXNlSW50ZXJydXB0KElOVEVSUlVQVF9DTElFTlRfQ09OTkVDVElPTl9MT1NUKTsKKwkJZWxz ZQorCQkJZW5hYmxlX3RpbWVvdXRfYWZ0ZXIoQ0xJRU5UX0NPTk5FQ1RJT05fQ0hFQ0tfVElN RU9VVCwKKwkJCQkJCQkJIGNsaWVudF9jb25uZWN0aW9uX2NoZWNrX2ludGVydmFsKTsKIAl9 Cit9CisKK3ZvaWQKK1Byb2Nlc3NDbGllbnRDb25uZWN0aW9uTG9zdCh2b2lkKQoreworCS8q IEZJWE1FOiBjaGVjayBwcm9jZGllIGZpcnN0ICovCiAKKwlDbGVhckludGVycnVwdChJTlRF UlJVUFRfUVVFUllfQ0FOQ0VMKTsgLyogbG9zdCBjb25uZWN0aW9uIHRydW1wcworCQkJCQkJ CQkJCQkgKiBRdWVyeUNhbmNlbCAqLworCUxvY2tFcnJvckNsZWFudXAoKTsKKwkvKiBkb24n dCBzZW5kIHRvIGNsaWVudCwgd2UgYWxyZWFkeSBrbm93IHRoZSBjb25uZWN0aW9uIHRvIGJl IGRlYWQuICovCisJd2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0Tm9uZTsKKwllcmVwb3J0KEZB VEFMLAorCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAorCQkJIGVy cm1zZygiY29ubmVjdGlvbiB0byBjbGllbnQgbG9zdCIpKSk7Cit9CisKK3ZvaWQKK1Byb2Nl c3NRdWVyeUNhbmNlbEludGVycnVwdCh2b2lkKQorewogCS8qCi0JICogRG9uJ3QgYWxsb3cg cXVlcnkgY2FuY2VsIGludGVycnVwdHMgd2hpbGUgcmVhZGluZyBpbnB1dCBmcm9tIHRoZQot CSAqIGNsaWVudCwgYmVjYXVzZSB3ZSBtaWdodCBsb3NlIHN5bmMgaW4gdGhlIEZFL0JFIHBy b3RvY29sLiAgKERpZQotCSAqIGludGVycnVwdHMgYXJlIE9LLCBiZWNhdXNlIHdlIHdvbid0 IHJlYWQgYW55IGZ1cnRoZXIgbWVzc2FnZXMgZnJvbSB0aGUKLQkgKiBjbGllbnQgaW4gdGhh dCBjYXNlLikKLQkgKgotCSAqIFNlZSBzaW1pbGFyIGxvZ2ljIGluIFByb2Nlc3NSZWNvdmVy eUNvbmZsaWN0SW50ZXJydXB0cygpLgorCSAqIEZJWE1FOiBDaGVjayBjbGllbnQgY29ubmVj dGlvbiBsb3N0IGFuZCB0ZXJtaW5hdGUgaW50ZXJydXB0cyBmaXJzdCwgc28KKwkgKiB0aGF0 IGlmIHdlJ3JlIGFib3V0IHRvIHRlcm1pbmF0ZSB0aGUgd2hvbGUgYmFja2VuZCBhbnl3YXks IHdlIGRvIHRoYXQKKwkgKiBzdHJhaWdodCBhd2F5IGFuZCBza2lwIHRoZSBxdWVyeSBjYW5j ZWxsYXRpb24uCiAJICovCi0JaWYgKFF1ZXJ5Q2FuY2VsUGVuZGluZyAmJiBRdWVyeUNhbmNl bEhvbGRvZmZDb3VudCAhPSAwKQotCXsKLQkJLyoKLQkJICogUmUtYXJtIEludGVycnVwdFBl bmRpbmcgc28gdGhhdCB3ZSBwcm9jZXNzIHRoZSBjYW5jZWwgcmVxdWVzdCBhcwotCQkgKiBz b29uIGFzIHdlJ3JlIGRvbmUgcmVhZGluZyB0aGUgbWVzc2FnZS4gIChYWFggdGhpcyBpcyBz ZXJpb3VzbHkKLQkJICogdWdseTogaXQgY29tcGxpY2F0ZXMgSU5URVJSVVBUU19DQU5fQkVf UFJPQ0VTU0VEKCksIGFuZCBpdCBtZWFucyB3ZQotCQkgKiBjYW4ndCB1c2UgdGhhdCBtYWNy byBkaXJlY3RseSBhcyB0aGUgaW5pdGlhbCB0ZXN0IGluIHRoaXMgZnVuY3Rpb24sCi0JCSAq IG1lYW5pbmcgdGhhdCB0aGlzIGNvZGUgYWxzbyBjcmVhdGVzIG9wcG9ydHVuaXRpZXMgZm9y IG90aGVyIGJ1Z3MgdG8KLQkJICogYXBwZWFyLikKLQkJICovCi0JCUludGVycnVwdFBlbmRp bmcgPSB0cnVlOwotCX0KLQllbHNlIGlmIChRdWVyeUNhbmNlbFBlbmRpbmcpCisKIAl7CiAJ CWJvb2wJCWxvY2tfdGltZW91dF9vY2N1cnJlZDsKIAkJYm9vbAkJc3RtdF90aW1lb3V0X29j Y3VycmVkOwogCi0JCVF1ZXJ5Q2FuY2VsUGVuZGluZyA9IGZhbHNlOwotCiAJCS8qCiAJCSAq IElmIExPQ0tfVElNRU9VVCBhbmQgU1RBVEVNRU5UX1RJTUVPVVQgaW5kaWNhdG9ycyBhcmUg Ym90aCBzZXQsIHdlCiAJCSAqIG5lZWQgdG8gY2xlYXIgYm90aCwgc28gYWx3YXlzIGZldGNo IGJvdGguCkBAIC0zNTA1LDc2ICszNDE0LDY2IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQp CiAJCQkJCSBlcnJtc2coImNhbmNlbGluZyBzdGF0ZW1lbnQgZHVlIHRvIHVzZXIgcmVxdWVz dCIpKSk7CiAJCX0KIAl9Cit9CiAKLQlpZiAocGdfYXRvbWljX3JlYWRfdTMyKCZNeVByb2Mt PnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0cykgIT0gMCkKLQkJUHJvY2Vzc1JlY292ZXJ5Q29u ZmxpY3RJbnRlcnJ1cHRzKCk7CiAKLQlpZiAoSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGlt ZW91dFBlbmRpbmcpCit2b2lkCitQcm9jZXNzSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGlt ZW91dEludGVycnVwdCh2b2lkKQoreworCS8qCisJICogSWYgdGhlIEdVQyBoYXMgYmVlbiBy ZXNldCB0byB6ZXJvLCBpZ25vcmUgdGhlIGludGVycnVwdC4gIFRoaXMgaXMKKwkgKiBpbXBv cnRhbnQgYmVjYXVzZSB0aGUgR1VDIHVwZGF0ZSBpdHNlbGYgd29uJ3QgZGlzYWJsZSBhbnkg cGVuZGluZworCSAqIGludGVycnVwdC4gIFdlIG5lZWQgdG8gdW5zZXQgdGhlIGZsYWcgYmVm b3JlIHRoZSBpbmplY3Rpb24gcG9pbnQsCisJICogb3RoZXJ3aXNlIHdlIGNvdWxkIGxvb3Ag aW4gaW50ZXJydXB0cyBjaGVja2luZy4KKwkgKi8KKwlpZiAoSWRsZUluVHJhbnNhY3Rpb25T ZXNzaW9uVGltZW91dCA+IDApCiAJewotCQkvKgotCQkgKiBJZiB0aGUgR1VDIGhhcyBiZWVu IHJlc2V0IHRvIHplcm8sIGlnbm9yZSB0aGUgc2lnbmFsLiAgVGhpcyBpcwotCQkgKiBpbXBv cnRhbnQgYmVjYXVzZSB0aGUgR1VDIHVwZGF0ZSBpdHNlbGYgd29uJ3QgZGlzYWJsZSBhbnkg cGVuZGluZwotCQkgKiBpbnRlcnJ1cHQuICBXZSBuZWVkIHRvIHVuc2V0IHRoZSBmbGFnIGJl Zm9yZSB0aGUgaW5qZWN0aW9uIHBvaW50LAotCQkgKiBvdGhlcndpc2Ugd2UgY291bGQgbG9v cCBpbiBpbnRlcnJ1cHRzIGNoZWNraW5nLgotCQkgKi8KLQkJSWRsZUluVHJhbnNhY3Rpb25T ZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKLQkJaWYgKElkbGVJblRyYW5zYWN0aW9u U2Vzc2lvblRpbWVvdXQgPiAwKQotCQl7Ci0JCQlJTkpFQ1RJT05fUE9JTlQoImlkbGUtaW4t dHJhbnNhY3Rpb24tc2Vzc2lvbi10aW1lb3V0IiwgTlVMTCk7Ci0JCQllcmVwb3J0KEZBVEFM LAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lETEVfSU5fVFJBTlNBQ1RJT05fU0VTU0lPTl9U SU1FT1VUKSwKLQkJCQkJIGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlvbiBkdWUgdG8g aWRsZS1pbi10cmFuc2FjdGlvbiB0aW1lb3V0IikpKTsKLQkJfQorCQlJTkpFQ1RJT05fUE9J TlQoImlkbGUtaW4tdHJhbnNhY3Rpb24tc2Vzc2lvbi10aW1lb3V0IiwgTlVMTCk7CisJCWVy ZXBvcnQoRkFUQUwsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JRExFX0lOX1RSQU5TQUNUSU9O X1NFU1NJT05fVElNRU9VVCksCisJCQkJIGVycm1zZygidGVybWluYXRpbmcgY29ubmVjdGlv biBkdWUgdG8gaWRsZS1pbi10cmFuc2FjdGlvbiB0aW1lb3V0IikpKTsKIAl9Cit9CiAKLQlp ZiAoVHJhbnNhY3Rpb25UaW1lb3V0UGVuZGluZykKK3ZvaWQKK1Byb2Nlc3NUcmFuc2FjdGlv blRpbWVvdXRJbnRlcnJ1cHQodm9pZCkKK3sKKwkvKiBBcyBhYm92ZSwgaWdub3JlIHRoZSBz aWduYWwgaWYgdGhlIEdVQyBoYXMgYmVlbiByZXNldCB0byB6ZXJvLiAqLworCWlmIChUcmFu c2FjdGlvblRpbWVvdXQgPiAwKQogCXsKLQkJLyogQXMgYWJvdmUsIGlnbm9yZSB0aGUgc2ln bmFsIGlmIHRoZSBHVUMgaGFzIGJlZW4gcmVzZXQgdG8gemVyby4gKi8KLQkJVHJhbnNhY3Rp b25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwotCQlpZiAoVHJhbnNhY3Rpb25UaW1lb3V0ID4g MCkKLQkJewotCQkJSU5KRUNUSU9OX1BPSU5UKCJ0cmFuc2FjdGlvbi10aW1lb3V0IiwgTlVM TCk7Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX1RSQU5TQUNU SU9OX1RJTUVPVVQpLAotCQkJCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBjb25uZWN0aW9uIGR1 ZSB0byB0cmFuc2FjdGlvbiB0aW1lb3V0IikpKTsKLQkJfQorCQlJTkpFQ1RJT05fUE9JTlQo InRyYW5zYWN0aW9uLXRpbWVvdXQiLCBOVUxMKTsKKwkJZXJlcG9ydChGQVRBTCwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1RSQU5TQUNUSU9OX1RJTUVPVVQpLAorCQkJCSBlcnJtc2coInRl cm1pbmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIHRyYW5zYWN0aW9uIHRpbWVvdXQiKSkpOwog CX0KK30KIAotCWlmIChJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nKQordm9pZAorUHJvY2Vz c0lkbGVTZXNzaW9uVGltZW91dEludGVycnVwdCh2b2lkKQoreworCS8qIEFzIGFib3ZlLCBp Z25vcmUgdGhlIHNpZ25hbCBpZiB0aGUgR1VDIGhhcyBiZWVuIHJlc2V0IHRvIHplcm8uICov CisJaWYgKElkbGVTZXNzaW9uVGltZW91dCA+IDApCiAJewotCQkvKiBBcyBhYm92ZSwgaWdu b3JlIHRoZSBzaWduYWwgaWYgdGhlIEdVQyBoYXMgYmVlbiByZXNldCB0byB6ZXJvLiAqLwot CQlJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7Ci0JCWlmIChJZGxlU2Vzc2lv blRpbWVvdXQgPiAwKQotCQl7Ci0JCQlJTkpFQ1RJT05fUE9JTlQoImlkbGUtc2Vzc2lvbi10 aW1lb3V0IiwgTlVMTCk7Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJD T0RFX0lETEVfU0VTU0lPTl9USU1FT1VUKSwKLQkJCQkJIGVycm1zZygidGVybWluYXRpbmcg Y29ubmVjdGlvbiBkdWUgdG8gaWRsZS1zZXNzaW9uIHRpbWVvdXQiKSkpOwotCQl9CisJCUlO SkVDVElPTl9QT0lOVCgiaWRsZS1zZXNzaW9uLXRpbWVvdXQiLCBOVUxMKTsKKwkJZXJlcG9y dChGQVRBTCwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lETEVfU0VTU0lPTl9USU1FT1VUKSwK KwkJCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBjb25uZWN0aW9uIGR1ZSB0byBpZGxlLXNlc3Np b24gdGltZW91dCIpKSk7CiAJfQorfQogCit2b2lkCitQcm9jZXNzSWRsZVN0YXRzVGltZW91 dEludGVycnVwdCh2b2lkKQorewogCS8qCi0JICogSWYgdGhlcmUgYXJlIHBlbmRpbmcgc3Rh dHMgdXBkYXRlcyBhbmQgd2UgY3VycmVudGx5IGFyZSB0cnVseSBpZGxlCi0JICogKG1hdGNo aW5nIHRoZSBjb25kaXRpb25zIGluIFBvc3RncmVzTWFpbigpLCByZXBvcnQgc3RhdHMgbm93 LgorCSAqIFN0YXRzIHVwZGF0ZSB3YXMgcmVxdWVzdGVkLiBUaGlzIGhhbmRsZXIgaXMgb25s eSBlbmFibGVkIHdoZW4gd2UncmUKKwkgKiB0cnVseSBpZGxlLCB3aXRoIG5vIHRyYW5zYWN0 aW9uIGluIHByb2dyZXNzCiAJICovCi0JaWYgKElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5k aW5nICYmCi0JCURvaW5nQ29tbWFuZFJlYWQgJiYgIUlzVHJhbnNhY3Rpb25PclRyYW5zYWN0 aW9uQmxvY2soKSkKLQl7Ci0JCUlkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nID0gZmFs c2U7Ci0JCXBnc3RhdF9yZXBvcnRfc3RhdCh0cnVlKTsKLQl9Ci0KLQlpZiAoUHJvY1NpZ25h bEJhcnJpZXJQZW5kaW5nKQotCQlQcm9jZXNzUHJvY1NpZ25hbEJhcnJpZXIoKTsKLQotCWlm IChQYXJhbGxlbE1lc3NhZ2VQZW5kaW5nKQotCQlQcm9jZXNzUGFyYWxsZWxNZXNzYWdlcygp OwotCi0JaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQotCQlQcm9jZXNzTG9nTWVtb3J5 Q29udGV4dEludGVycnVwdCgpOwotCi0JaWYgKFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGlu ZykKLQkJUHJvY2Vzc1BhcmFsbGVsQXBwbHlNZXNzYWdlcygpOworCS8qCisJICogRklYTUU6 IGNoZWNrIHRoYXQgdGhpcyBpcyBjYWxsZWQgdW5kZXIgcmlnaHQgY29uZGl0aW9ucyBhbHNv IGluCisJICogd2Fsc2VuZGVycworCSAqLworCUFzc2VydCghSXNUcmFuc2FjdGlvbk9yVHJh bnNhY3Rpb25CbG9jaygpKTsKKwlwZ3N0YXRfcmVwb3J0X3N0YXQodHJ1ZSk7CiB9CiAKIC8q CkBAIC00MjM4LDkgKzQxMzcsMTMgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAKIAlBc3NlcnQoR2V0UHJvY2Vzc2luZ01vZGUo KSA9PSBJbml0UHJvY2Vzc2luZyk7CiAKKwlIT0xEX0lOVEVSUlVQVFMoKTsKKwlTZXRTdGFu ZGFyZEludGVycnVwdEhhbmRsZXJzKCk7CisKIAkvKgotCSAqIFNldCB1cCBzaWduYWwgaGFu ZGxlcnMuICAoSW5pdFBvc3RtYXN0ZXJDaGlsZCBvciBJbml0U3RhbmRhbG9uZVByb2Nlc3MK LQkgKiBoYXMgYWxyZWFkeSBzZXQgdXAgQmxvY2tTaWcgYW5kIG1hZGUgdGhhdCB0aGUgYWN0 aXZlIHNpZ25hbCBtYXNrLikKKwkgKiBTZXQgdXAgc2lnbmFsIGFuZCBpbnRlcnJ1cHQgaGFu ZGxlcnMuICAoSW5pdFBvc3RtYXN0ZXJDaGlsZCBvcgorCSAqIEluaXRTdGFuZGFsb25lUHJv Y2VzcyBoYXMgYWxyZWFkeSBzZXQgdXAgQmxvY2tTaWcgYW5kIG1hZGUgdGhhdCB0aGUKKwkg KiBhY3RpdmUgc2lnbmFsIG1hc2suKQogCSAqCiAJICogTm90ZSB0aGF0IHBvc3RtYXN0ZXIg YmxvY2tlZCBhbGwgc2lnbmFscyBiZWZvcmUgZm9ya2luZyBjaGlsZCBwcm9jZXNzLAogCSAq IHNvIHRoZXJlIGlzIG5vIHJhY2UgY29uZGl0aW9uIHdoZXJlYnkgd2UgbWlnaHQgcmVjZWl2 ZSBhIHNpZ25hbCBiZWZvcmUKQEAgLTQyNTMsMTMgKzQxNTYsMjUgQEAgUG9zdGdyZXNNYWlu KGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJICogYW4gaXNz dWUgZm9yIHNpZ25hbHMgdGhhdCBhcmUgbG9jYWxseSBnZW5lcmF0ZWQsIHN1Y2ggYXMgU0lH QUxSTSBhbmQKIAkgKiBTSUdQSVBFLikKIAkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElO VEVSUlVQVF9RVUVSWV9DQU5DRUwsIFByb2Nlc3NRdWVyeUNhbmNlbEludGVycnVwdCk7CisJ RW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9RVUVSWV9DQU5DRUwpOworCiAJaWYgKGFtX3dh bHNlbmRlcikKKwl7CisJCXBxc2lnbmFsKFNJR1RFUk0sIFNpZ25hbEhhbmRsZXJGb3JTaHV0 ZG93blJlcXVlc3QpOworCiAJCVdhbFNuZFNpZ25hbHMoKTsKKwl9CiAJZWxzZQogCXsKLQkJ cHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKLQkJcHFz aWduYWwoU0lHSU5ULCBTdGF0ZW1lbnRDYW5jZWxIYW5kbGVyKTsJLyogY2FuY2VsIGN1cnJl bnQgcXVlcnkgKi8KLQkJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsgLyogY2FuY2VsIGN1cnJl bnQgcXVlcnkgYW5kIGV4aXQgKi8KKwkJcHFzaWduYWwoU0lHSU5ULCBTaWduYWxIYW5kbGVy Rm9yUXVlcnlDYW5jZWwpOwkvKiBjYW5jZWwgY3VycmVudCBxdWVyeSAqLworCisJCS8qCisJ CSAqIENhbmNlbCBjdXJyZW50IHF1ZXJ5IGFuZCBleGl0LiBUaGlzIGlzIGEgYml0IG1vcmUg Y29tcGxpY2F0ZWQgaW4KKwkJICogYmFja2VuZCBwcm9jZXNzZXMuIHNvIHdlIHdlIGNhbm5v dCB1c2UKKwkJICogU2lnbmFsSGFuZGxlckZvclNodXRkb3duUmVxdWVzdCBoZXJlLgorCQkg Ki8KKwkJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsgLyogKi8KIAogCQkvKgogCQkgKiBJbiBh IHBvc3RtYXN0ZXIgY2hpbGQgYmFja2VuZCwgcmVwbGFjZSBTaWduYWxIYW5kbGVyRm9yQ3Jh c2hFeGl0CkBAIC00MjczLDcgKzQxODgsMTQgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIg KmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCQlwcXNpZ25hbChTSUdRVUlULCBx dWlja2RpZSk7CS8qIGhhcmQgY3Jhc2ggdGltZSAqLwogCQllbHNlCiAJCQlwcXNpZ25hbChT SUdRVUlULCBkaWUpOyAvKiBjYW5jZWwgY3VycmVudCBxdWVyeSBhbmQgZXhpdCAqLworCiAJ CUluaXRpYWxpemVUaW1lb3V0cygpOwkvKiBlc3RhYmxpc2hlcyBTSUdBTFJNIGhhbmRsZXIg Ki8KKwkJU2V0SW50ZXJydXB0SGFuZGxlcihJTlRFUlJVUFRfVFJBTlNBQ1RJT05fVElNRU9V VCwgUHJvY2Vzc1RyYW5zYWN0aW9uVGltZW91dEludGVycnVwdCk7CisJCUVuYWJsZUludGVy cnVwdChJTlRFUlJVUFRfVFJBTlNBQ1RJT05fVElNRU9VVCk7CisJCVNldEludGVycnVwdEhh bmRsZXIoSU5URVJSVVBUX0lETEVfU0VTU0lPTl9USU1FT1VULCBQcm9jZXNzSWRsZVNlc3Np b25UaW1lb3V0SW50ZXJydXB0KTsKKwkJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9JRExF X1NFU1NJT05fVElNRU9VVCk7CisJCVNldEludGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX0lE TEVfSU5fVFJBTlNBQ1RJT05fU0VTU0lPTl9USU1FT1VULCBQcm9jZXNzSWRsZUluVHJhbnNh Y3Rpb25TZXNzaW9uVGltZW91dEludGVycnVwdCk7CisJCUVuYWJsZUludGVycnVwdChJTlRF UlJVUFRfSURMRV9JTl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQpOwogCiAJCS8qCiAJ CSAqIElnbm9yZSBmYWlsdXJlIHRvIHdyaXRlIHRvIGZyb250ZW5kLiBOb3RlOiBpZiBmcm9u dGVuZCBjbG9zZXMKQEAgLTQyODIsMTEgKzQyMDQsMzEgQEAgUG9zdGdyZXNNYWluKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCSAqIG1pZHN0IG9mIG91 dHB1dCBkdXJpbmcgd2hvLWtub3dzLXdoYXQgb3BlcmF0aW9uLi4uCiAJCSAqLwogCQlwcXNp Z25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLQkJcHFzaWduYWwoU0lHVVNSMSwgcHJvY3NpZ25h bF9zaWd1c3IxX2hhbmRsZXIpOwotCQlwcXNpZ25hbChTSUdVU1IyLCBTSUdfSUdOKTsKIAkJ cHFzaWduYWwoU0lHRlBFLCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIpOwogCX0KIAorCVNldElu dGVycnVwdEhhbmRsZXIoSU5URVJSVVBUX0NMSUVOVF9DSEVDS19USU1FT1VULCBQcm9jZXNz Q2xpZW50Q2hlY2tUaW1lb3V0SW50ZXJydXB0KTsKKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElO VEVSUlVQVF9DTElFTlRfQ09OTkVDVElPTl9MT1NULCBQcm9jZXNzQ2xpZW50Q29ubmVjdGlv bkxvc3QpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfQ0xJRU5UX0NIRUNLX1RJTUVP VVQpOworCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfQ0xJRU5UX0NPTk5FQ1RJT05fTE9T VCk7CisKKwkvKiBzdGF0cyB1cGRhdGVzIGFyZSBvbmx5IHNlbnQgd2hlbiB3ZSdyZSBpZGxl LCBzbyBkb24ndCBlbmFibGUgdGhpcyB5ZXQgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElO VEVSUlVQVF9JRExFX1NUQVRTX1RJTUVPVVQsIFByb2Nlc3NJZGxlU3RhdHNUaW1lb3V0SW50 ZXJydXB0KTsKKworCS8qCisJICogQmFja2VuZHMgdGhhdCBjYW4gTElTVEVOIG5lZWQgdGhp cy4gKEl0IGlzIG9ubHkgZW5hYmxlZCB3aGVuIGlkbGUKKwkgKiBvdXRzaWRlIGEgdHJhbnNh Y3Rpb24sIGhvd2V2ZXIuKQorCSAqCisJICogRklYTUU6IHNob3VsZCBiZ3dvcmtlcnMgZG8g dGhpcyB0b28/IE9yIGl0J3MgdXAgdG8gdGhlbSB0byBzZXQgdXAgdGhlCisJICogaGFuZGxl ciBpZiB0aGV5IExJU1RFTj8KKwkgKi8KKwlTZXRJbnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQ VF9BU1lOQ19OT1RJRlksIFByb2Nlc3NBc3luY05vdGlmeUludGVycnVwdCk7CisKKwlTZXRJ bnRlcnJ1cHRIYW5kbGVyKElOVEVSUlVQVF9QQVJBTExFTF9NRVNTQUdFLCBQcm9jZXNzUGFy YWxsZWxNZXNzYWdlcyk7CisJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9QQVJBTExFTF9N RVNTQUdFKTsKKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKIAkvKiBFYXJseSBpbml0aWFs aXphdGlvbiAqLwogCUJhc2VJbml0KCk7CiAKQEAgLTQ0NTQsMTEgKzQzOTYsMTQgQEAgUG9z dGdyZXNNYWluKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJ CSAqIGZvcmdldHRpbmcgYSB0aW1lb3V0IGNhbmNlbC4KIAkJICovCiAJCWRpc2FibGVfYWxs X3RpbWVvdXRzKGZhbHNlKTsJLyogZG8gZmlyc3QgdG8gYXZvaWQgcmFjZSBjb25kaXRpb24g Ki8KLQkJUXVlcnlDYW5jZWxQZW5kaW5nID0gZmFsc2U7CisJCUNsZWFySW50ZXJydXB0KElO VEVSUlVQVF9RVUVSWV9DQU5DRUwpOwogCQlpZGxlX2luX3RyYW5zYWN0aW9uX3RpbWVvdXRf ZW5hYmxlZCA9IGZhbHNlOwogCQlpZGxlX3Nlc3Npb25fdGltZW91dF9lbmFibGVkID0gZmFs c2U7CiAKIAkJLyogTm90IHJlYWRpbmcgZnJvbSB0aGUgY2xpZW50IGFueW1vcmUuICovCisJ CURpc2FibGVJbnRlcnJ1cHQoSU5URVJSVVBUX1NJTlZBTF9DQVRDSFVQKTsKKwkJRGlzYWJs ZUludGVycnVwdChJTlRFUlJVUFRfQVNZTkNfTk9USUZZKTsKKwkJRGlzYWJsZUludGVycnVw dChJTlRFUlJVUFRfSURMRV9TVEFUU19USU1FT1VUKTsKIAkJRG9pbmdDb21tYW5kUmVhZCA9 IGZhbHNlOwogCiAJCS8qIE1ha2Ugc3VyZSBsaWJwcSBpcyBpbiBhIGdvb2Qgc3RhdGUgKi8K QEAgLTQ2MzksNyArNDU4NCw3IEBAIFBvc3RncmVzTWFpbihjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCQkJCSAqIHdlcmUgcmVjZWl2ZWQgZHVyaW5nIHRo ZSBqdXN0LWZpbmlzaGVkIHRyYW5zYWN0aW9uLCB0aGV5J2xsCiAJCQkJICogYmUgc2VlbiBi eSB0aGUgY2xpZW50IGJlZm9yZSBSZWFkeUZvclF1ZXJ5IGlzLgogCQkJCSAqLwotCQkJCWlm IChub3RpZnlJbnRlcnJ1cHRQZW5kaW5nKQorCQkJCWlmIChDb25zdW1lSW50ZXJydXB0KElO VEVSUlVQVF9BU1lOQ19OT1RJRlkpKQogCQkJCQlQcm9jZXNzTm90aWZ5SW50ZXJydXB0KGZh bHNlKTsKIAogCQkJCS8qCkBAIC00NzI4LDYgKzQ2NzMsMjggQEAgUG9zdGdyZXNNYWluKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCSAqLwogCQlEb2lu Z0NvbW1hbmRSZWFkID0gdHJ1ZTsKIAorCQkvKgorCQkgKiBMZXQgY2FjaGUgaW52YWwgY2F0 Y2h1cCByZXF1ZXN0cyB0byBiZSBwcm9jZXNzZWQgd2hpbGUgd2UncmUgaWRsZS4KKwkJICov CisJCUVuYWJsZUludGVycnVwdChJTlRFUlJVUFRfU0lOVkFMX0NBVENIVVApOworCisJCS8q CisJCSAqIFdoZW4gd2UncmUgdHJ1bHkgaWRsZSwgaS5lLiBubyB0cmFuc2FjdGlvbiBpbiBw cm9ncmVzcywgd2UgY2FuCisJCSAqIGFkZGl0aW9uYWxseSBwcm9jZXNzIGFueSBhc3luYyBM SVNURU4vTk9USUZZIG1lc3NhZ2VzIGFuZCBzdGF0cworCQkgKiB1cGRhdGUgcmVxdWVzdHMu CisJCSAqLworCQlpZiAoIUlzVHJhbnNhY3Rpb25PclRyYW5zYWN0aW9uQmxvY2soKSkKKwkJ eworCQkJRW5hYmxlSW50ZXJydXB0KElOVEVSUlVQVF9BU1lOQ19OT1RJRlkpOworCQkJRW5h YmxlSW50ZXJydXB0KElOVEVSUlVQVF9JRExFX1NUQVRTX1RJTUVPVVQpOworCQl9CisKKwkJ LyoKKwkJICogSWYgYW55IG9mIHRoZSBuZXdseS1lbmFibGVkIGludGVycnVwdHMgYXJlIGFs cmVhZHkgcGVuZGluZywgcHJvY2VzcworCQkgKiB0aGVtIG5vdy4KKwkJICovCisJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisKIAkJLyoKIAkJICogKDMpIHJlYWQgYSBjb21tYW5kIChs b29wIGJsb2NrcyBoZXJlKQogCQkgKi8KQEAgLTQ3NTcsMjIgKzQ3MjQsMjIgQEAgUG9zdGdy ZXNNYWluKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCSAq CiAJCSAqIFF1ZXJ5IGNhbmNlbCBpcyBzdXBwb3NlZCB0byBiZSBhIG5vLW9wIHdoZW4gdGhl cmUgaXMgbm8gcXVlcnkgaW4KIAkJICogcHJvZ3Jlc3MsIHNvIGlmIGEgcXVlcnkgY2FuY2Vs IGFycml2ZWQgd2hpbGUgd2Ugd2VyZSBpZGxlLCBqdXN0Ci0JCSAqIHJlc2V0IFF1ZXJ5Q2Fu Y2VsUGVuZGluZy4gUHJvY2Vzc0ludGVycnVwdHMoKSBoYXMgdGhhdCBlZmZlY3Qgd2hlbgot CQkgKiBpdCdzIGNhbGxlZCB3aGVuIERvaW5nQ29tbWFuZFJlYWQgaXMgc2V0LCBzbyBjaGVj ayBmb3IgaW50ZXJydXB0cwotCQkgKiBiZWZvcmUgcmVzZXR0aW5nIERvaW5nQ29tbWFuZFJl YWQuCisJCSAqIHJlc2V0IElOVEVSUlVQVF9RVUVSWV9DQU5DRUwuIFByb2Nlc3NJbnRlcnJ1 cHRzKCkgaGFzIHRoYXQgZWZmZWN0CisJCSAqIHdoZW4gaXQncyBjYWxsZWQgd2hlbiBEb2lu Z0NvbW1hbmRSZWFkIGlzIHNldCwgc28gY2hlY2sgZm9yCisJCSAqIGludGVycnVwdHMgYmVm b3JlIHJlc2V0dGluZyBEb2luZ0NvbW1hbmRSZWFkLgogCQkgKi8KIAkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKIAkJRG9pbmdDb21tYW5kUmVhZCA9IGZhbHNlOworCQlEaXNhYmxlSW50 ZXJydXB0KElOVEVSUlVQVF9TSU5WQUxfQ0FUQ0hVUCk7CisJCURpc2FibGVJbnRlcnJ1cHQo SU5URVJSVVBUX0FTWU5DX05PVElGWSk7CisJCURpc2FibGVJbnRlcnJ1cHQoSU5URVJSVVBU X0lETEVfU1RBVFNfVElNRU9VVCk7CiAKIAkJLyoKIAkJICogKDYpIGNoZWNrIGZvciBhbnkg b3RoZXIgaW50ZXJlc3RpbmcgZXZlbnRzIHRoYXQgaGFwcGVuZWQgd2hpbGUgd2UKIAkJICog c2xlcHQuCiAJCSAqLwotCQlpZiAoQ29uZmlnUmVsb2FkUGVuZGluZykKLQkJewotCQkJQ29u ZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNlOworCQlpZiAoQ29uc3VtZUludGVycnVwdChJTlRF UlJVUFRfQ09ORklHX1JFTE9BRCkpCiAJCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQ KTsKLQkJfQogCiAJCS8qCiAJCSAqICg3KSBwcm9jZXNzIHRoZSBjb21tYW5kLiAgQnV0IGln bm9yZSBpdCBpZiB3ZSdyZSBza2lwcGluZyB0aWxsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbnBhdGhfZ3JhbS55IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pz b25wYXRoX2dyYW0ueQppbmRleCA4NzA3MDIzNWQxMS4uNmFhNjk4MDU4OTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2dyYW0ueQpAQCAtMTgsOCArMTgsOCBAQAogCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJmbWdyLmgiCisj aW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImpzb25wYXRoX2ludGVybmFs LmgiCi0jaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5o IgogI2luY2x1ZGUgInJlZ2V4L3JlZ2V4LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwppbmRleCBjN2Y3YjhiYzJkZC4uMTg4 MDM4YzlmNjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3Mu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMKQEAgLTE2LDYgKzE2 LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgor I2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5 LmgiCkBAIC0yNjYsNyArMjY3LDYgQEAgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJaW50CQkJcGlkID0gUEdfR0VUQVJHX0lOVDMyKDAp OwogCVBHUFJPQwkgICAqcHJvYzsKLQlQcm9jTnVtYmVyCXByb2NOdW1iZXIgPSBJTlZBTElE X1BST0NfTlVNQkVSOwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIHByb2Nlc3Mgd2l0aCBnaXZl biBwaWQgaXMgYSBiYWNrZW5kIG9yIGFuIGF1eGlsaWFyeSBwcm9jZXNzLgpAQCAtMjk1LDE0 ICsyOTUsNyBAQCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05f QVJHUykKIAkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwogCX0KIAotCXByb2NOdW1iZXIgPSBH ZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpOwotCWlmIChTZW5kUHJvY1NpZ25hbChwaWQsIFBS T0NTSUdfTE9HX01FTU9SWV9DT05URVhULCBwcm9jTnVtYmVyKSA8IDApCi0JewotCQkvKiBB Z2FpbiwganVzdCBhIHdhcm5pbmcgdG8gYWxsb3cgbG9vcHMgKi8KLQkJZXJlcG9ydChXQVJO SU5HLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCBzZW5kIHNpZ25hbCB0byBwcm9jZXNzICVk OiAlbSIsIHBpZCkpKTsKLQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwotCX0KKwlTZW5kSW50 ZXJydXB0KElOVEVSUlVQVF9MT0dfTUVNT1JZX0NPTlRFWFQsIEdldE51bWJlckZyb21QR1By b2MocHJvYykpOwogCiAJUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvbWlzYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21p c2MuYwppbmRleCAzMmE3ODdkN2RmNy4uOWY2NjAzNjM5MjEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9taXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21p c2MuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2Uu aCIKICNpbmNsdWRlICJjb21tb24va2V5d29yZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgog I2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV90 eXBlLmgiCkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zeXNsb2dn ZXIuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9mZC5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKICNpbmNsdWRlICJ0 Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9mbWdyb2lkcy5oIgpAQCAtMzQ2LDE2ICszNDYsMTYgQEAgcGdfc2xlZXAoUEdf RlVOQ1RJT05fQVJHUykKIAl1c2VjcyA9IChpbnQ2NCkgTWluKHNlY3MsIChmbG9hdDgpIChQ R19JTlQ2NF9NQVggLyAyKSk7CiAKIAkvKgotCSAqIFdlIHNsZWVwIHVzaW5nIFdhaXRMYXRj aCwgdG8gZW5zdXJlIHRoYXQgd2UnbGwgd2FrZSB1cCBwcm9tcHRseSBpZiBhbgotCSAqIGlt cG9ydGFudCBzaWduYWwgKHN1Y2ggYXMgU0lHQUxSTSBvciBTSUdJTlQpIGFycml2ZXMuICBC ZWNhdXNlCi0JICogV2FpdExhdGNoJ3MgdXBwZXIgbGltaXQgb2YgZGVsYXkgaXMgSU5UX01B WCBtaWxsaXNlY29uZHMsIGFuZCB0aGUgdXNlcgotCSAqIG1pZ2h0IGFzayBmb3IgbW9yZSB0 aGFuIHRoYXQsIHdlIHNsZWVwIGZvciBhdCBtb3N0IDEwIG1pbnV0ZXMgYW5kIHRoZW4KLQkg KiBsb29wLgorCSAqIFdlIHNsZWVwIHVzaW5nIFdhaXRJbnRlcnJ1cHQsIHRvIGVuc3VyZSB0 aGF0IHdlJ2xsIHdha2UgdXAgcHJvbXB0bHkgaWYKKwkgKiBhbiBpbXBvcnRhbnQgc2lnbmFs IChzdWNoIGFzIFNJR0FMUk0gb3IgU0lHSU5UKSBhcnJpdmVzLiAgQmVjYXVzZQorCSAqIFdh aXRJbnRlcnJ1cHQncyB1cHBlciBsaW1pdCBvZiBkZWxheSBpcyBJTlRfTUFYIG1pbGxpc2Vj b25kcywgYW5kIHRoZQorCSAqIHVzZXIgbWlnaHQgYXNrIGZvciBtb3JlIHRoYW4gdGhhdCwg d2Ugc2xlZXAgZm9yIGF0IG1vc3QgMTAgbWludXRlcyBhbmQKKwkgKiB0aGVuIGxvb3AuCiAJ ICoKIAkgKiBCeSBjb21wdXRpbmcgdGhlIGludGVuZGVkIHN0b3AgdGltZSBpbml0aWFsbHks IHdlIGF2b2lkIGFjY3VtdWxhdGlvbiBvZgogCSAqIGV4dHJhIGRlbGF5IGFjcm9zcyBtdWx0 aXBsZSBzbGVlcHMuICBUaGlzIGFsc28gZW5zdXJlcyB3ZSB3b24ndCBkZWxheQotCSAqIGxl c3MgdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWUgd2hlbiBXYWl0TGF0Y2ggaXMgdGVybWluYXRl ZCBlYXJseSBieSBhCi0JICogbm9uLXF1ZXJ5LWNhbmNlbGluZyBzaWduYWwgc3VjaCBhcyBT SUdIVVAuCisJICogbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgdGltZSB3aGVuIFdhaXRJbnRl cnJ1cHQgaXMgdGVybWluYXRlZCBlYXJseSBieQorCSAqIGEgbm9uLXF1ZXJ5LWNhbmNlbGlu ZyBzaWduYWwgc3VjaCBhcyBTSUdIVVAuCiAJICovCiAJZW5kdGltZSA9IEdldEN1cnJlbnRU aW1lc3RhbXAoKSArIHVzZWNzOwogCkBAIC0zNzQsMTEgKzM3NCwxMCBAQCBwZ19zbGVlcChQ R19GVU5DVElPTl9BUkdTKQogCQllbHNlCiAJCQlicmVhazsKIAotCQkodm9pZCkgV2FpdExh dGNoKE15TGF0Y2gsCi0JCQkJCQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VY SVRfT05fUE1fREVBVEgsCi0JCQkJCQkgZGVsYXlfbXMsCi0JCQkJCQkgV0FJVF9FVkVOVF9Q R19TTEVFUCk7Ci0JCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCSh2b2lkKSBXYWl0SW50ZXJy dXB0KENoZWNrRm9ySW50ZXJydXB0c01hc2ssCisJCQkJCQkJIFdMX0lOVEVSUlVQVCB8IFdM X1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAorCQkJCQkJCSBkZWxheV9tcywKKwkJ CQkJCQkgV0FJVF9FVkVOVF9QR19TTEVFUCk7CiAJfQogCiAJUEdfUkVUVVJOX1ZPSUQoKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYwppbmRleCA2ZjhjZjI5YzkxMC4uYjlkNTFl MGU1ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdGltZXN0YW1wLmMKQEAgLTE3MzcsMTAgKzE3 MzcsMTAgQEAgVGltZXN0YW1wRGlmZmVyZW5jZShUaW1lc3RhbXBUeiBzdGFydF90aW1lLCBU aW1lc3RhbXBUeiBzdG9wX3RpbWUsCiAgKiBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNv bmRzIC0tIGNvbnZlcnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28KICAqIAkJdGltZXN0 YW1wcyBpbnRvIGludGVnZXIgbWlsbGlzZWNvbmRzCiAgKgotICogVGhpcyBpcyB0eXBpY2Fs bHkgdXNlZCB0byBjYWxjdWxhdGUgYSB3YWl0IHRpbWVvdXQgZm9yIFdhaXRMYXRjaCgpCisg KiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGNhbGN1bGF0ZSBhIHdhaXQgdGltZW91dCBm b3IgV2FpdEludGVycnVwdCgpCiAgKiBvciBhIHJlbGF0ZWQgZnVuY3Rpb24uICBUaGUgY2hv aWNlIG9mICJsb25nIiBhcyB0aGUgcmVzdWx0IHR5cGUKICAqIGlzIHRvIGhhcm1vbml6ZSB3 aXRoIHRoYXQ7IGZ1cnRoZXJtb3JlLCB3ZSBjbGFtcCB0aGUgcmVzdWx0IHRvIGF0IG1vc3QK LSAqIElOVF9NQVggbWlsbGlzZWNvbmRzLCBiZWNhdXNlIHRoYXQncyBhbGwgdGhhdCBXYWl0 TGF0Y2goKSBhbGxvd3MuCisgKiBJTlRfTUFYIG1pbGxpc2Vjb25kcywgYmVjYXVzZSB0aGF0 J3MgYWxsIHRoYXQgV2FpdEludGVycnVwdCgpIGFsbG93cy4KICAqCiAgKiBXZSBleHBlY3Qg c3RhcnRfdGltZSA8PSBzdG9wX3RpbWUuICBJZiBub3QsIHdlIHJldHVybiB6ZXJvLAogICog c2luY2UgdGhlbiB3ZSdyZSBhbHJlYWR5IHBhc3QgdGhlIHByZXZpb3VzbHkgZGV0ZXJtaW5l ZCBzdG9wX3RpbWUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9n LmMgYi9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9nLmMKaW5kZXggODBiNzhmMjUyNjcu LmEzNmM3YzMzMjQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9n LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jCkBAIC01MzcsNyArNTM3 LDYgQEAgZXJyZmluaXNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBjb25z dCBjaGFyICpmdW5jbmFtZSkKIAkJICogc2hvdWxkIG1ha2UgbGlmZSBlYXNpZXIgZm9yIG1v c3QuKQogCQkgKi8KIAkJSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKLQkJUXVlcnlDYW5j ZWxIb2xkb2ZmQ291bnQgPSAwOwogCiAJCUNyaXRTZWN0aW9uQ291bnQgPSAwOwkvKiBzaG91 bGQgYmUgdW5uZWNlc3NhcnksIGJ1dC4uLiAqLwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFs cy5jCmluZGV4IDM2YWQ3MDhiMzYwLi5hODc0NzUzMTlhMyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMKQEAgLTI5LDIwICsyOSw2IEBACiAKIFByb3RvY29sVmVyc2lvbiBGcm9u dGVuZFByb3RvY29sOwogCi12b2xhdGlsZSBzaWdfYXRvbWljX3QgSW50ZXJydXB0UGVuZGlu ZyA9IGZhbHNlOwotdm9sYXRpbGUgc2lnX2F0b21pY190IFF1ZXJ5Q2FuY2VsUGVuZGluZyA9 IGZhbHNlOwotdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NEaWVQZW5kaW5nID0gZmFsc2U7 Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2hlY2tDbGllbnRDb25uZWN0aW9uUGVuZGluZyA9 IGZhbHNlOwotdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0ID0g ZmFsc2U7Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9u VGltZW91dFBlbmRpbmcgPSBmYWxzZTsKLXZvbGF0aWxlIHNpZ19hdG9taWNfdCBUcmFuc2Fj dGlvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7Ci12b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRs ZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwotdm9sYXRpbGUgc2lnX2F0b21pY190 IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwotdm9sYXRpbGUgc2lnX2F0b21p Y190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7Ci12b2xhdGlsZSBzaWdfYXRv bWljX3QgSWRsZVN0YXRzVXBkYXRlVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKLXZvbGF0aWxl IHVpbnQzMiBJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPSAwOwotdm9sYXRpbGUgdWludDMyIFF1 ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50ID0gMDsKLXZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlv bkNvdW50ID0gMDsKIAogaW50CQkJTXlQcm9jUGlkOwogcGdfdGltZV90CU15U3RhcnRUaW1l OwpAQCAtNTMsMTUgKzM5LDYgQEAgdWludDgJCU15Q2FuY2VsS2V5W01BWF9DQU5DRUxfS0VZ X0xFTkdUSF07CiBpbnQJCQlNeUNhbmNlbEtleUxlbmd0aCA9IDA7CiBpbnQJCQlNeVBNQ2hp bGRTbG90OwogCi0vKgotICogTXlMYXRjaCBwb2ludHMgdG8gdGhlIGxhdGNoIHRoYXQgc2hv dWxkIGJlIHVzZWQgZm9yIHNpZ25hbCBoYW5kbGluZyBieSB0aGUKLSAqIGN1cnJlbnQgcHJv Y2Vzcy4gSXQgd2lsbCBlaXRoZXIgcG9pbnQgdG8gYSBwcm9jZXNzIGxvY2FsIGxhdGNoIGlm IHRoZQotICogY3VycmVudCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgYSBQR1BST0MgZW50cnkg aW4gdGhhdCBtb21lbnQsIG9yIHRvCi0gKiBQR1BST0MtPnByb2NMYXRjaCBpZiBpdCBoYXMu IFRodXMgaXQgY2FuIGFsd2F5cyBiZSB1c2VkIGluIHNpZ25hbCBoYW5kbGVycywKLSAqIHdp dGhvdXQgY2hlY2tpbmcgZm9yIGl0cyBleGlzdGVuY2UuCi0gKi8KLXN0cnVjdCBMYXRjaCAq TXlMYXRjaDsKLQogLyoKICAqIERhdGFEaXIgaXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhl IHRvcCBsZXZlbCBvZiB0aGUgUEdEQVRBIGRpcmVjdG9yeSB0cmVlLgogICogRXhjZXB0IGR1 cmluZyBlYXJseSBzdGFydHVwLCB0aGlzIGlzIGFsc28gdGhlIHNlcnZlcidzIHdvcmtpbmcg ZGlyZWN0b3J5OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5p dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IGZhZGY4NTZk OWJjLi5mZGNlZTk0NjQwNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9t aXNjaW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAt MzIsMTggKzMyLDE3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgi CisjaW5jbHVkZSAiaXBjL3NpZ25hbF9oYW5kbGVycy5oIgogI2luY2x1ZGUgImxpYnBxL2xp YnBxLmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtYi9wZ193 Y2hhci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgotI2luY2x1ZGUgInBvc3RtYXN0 ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vc2xvdHN5bmMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Zk LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNo LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKQEAgLTY2LDggKzY1LDYg QEAgQmFja2VuZFR5cGUgTXlCYWNrZW5kVHlwZTsKIC8qIExpc3Qgb2YgbG9jayBmaWxlcyB0 byBiZSByZW1vdmVkIGF0IHByb2MgZXhpdCAqLwogc3RhdGljIExpc3QgKmxvY2tfZmlsZXMg PSBOSUw7CiAKLXN0YXRpYyBMYXRjaCBMb2NhbExhdGNoRGF0YTsKLQogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoJCWlnbm9yaW5nIHN5c3RlbSBpbmRleGVzIHN1cHBvcnQgc3R1ZmYKICAqCkBAIC0x MjYsMTAgKzEyMyw5IEBAIEluaXRQb3N0bWFzdGVyQ2hpbGQodm9pZCkKIAlwcWluaXRtYXNr KCk7CiAjZW5kaWYKIAotCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2NhbCBsYXRjaCBzdXBw b3J0ICovCisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzLWxvY2FsIGludGVycnVwdCBzdXBwb3J0 ICovCiAJSW5pdGlhbGl6ZVdhaXRFdmVudFN1cHBvcnQoKTsKLQlJbml0UHJvY2Vzc0xvY2Fs TGF0Y2goKTsKLQlJbml0aWFsaXplTGF0Y2hXYWl0U2V0KCk7CisJSW5pdGlhbGl6ZUludGVy cnVwdFdhaXRTZXQoKTsKIAogCS8qCiAJICogSWYgcG9zc2libGUsIG1ha2UgdGhpcyBwcm9j ZXNzIGEgZ3JvdXAgbGVhZGVyLCBzbyB0aGF0IHRoZSBwb3N0bWFzdGVyCkBAIC0xNDMsMjUg KzEzOSwxMiBAQCBJbml0UG9zdG1hc3RlckNoaWxkKHZvaWQpCiAjZW5kaWYKIAogCS8qCi0J ICogUmVzZXQgc2lnbmFscyB0aGF0IGFyZSB1c2VkIGJ5IHBvc3RtYXN0ZXIgYnV0IG5vdCBi eSBjaGlsZCBwcm9jZXNzZXMuCisJICogU2V0IHN0YW5kYXJkIHNpZ25hbCBoYW5kbGVycyBz dWl0YWJsZSBmb3IgbW9zdCBiYWNrZW5kIHByb2Nlc3Nlcy4KIAkgKgotCSAqIEN1cnJlbnRs eSBqdXN0IFNJR0NITEQuICBUaGUgaGFuZGxlcnMgZm9yIG90aGVyIHNpZ25hbHMgYXJlIG92 ZXJyaWRkZW4KLQkgKiBsYXRlciwgZGVwZW5kaW5nIG9uIHRoZSBjaGlsZCBwcm9jZXNzIHR5 cGUuCisJICogV2UgZG9uJ3QgdW5ibG9jayB0aGUgc2lnbmFscyB5ZXQsIHNvIHRoYXQgaWYg dGhlIHByb2Nlc3MgbmVlZHMgc3BlY2lhbAorCSAqIHNpZ25hbCBoYW5kbGluZywgaXQgY2Fu IGluc3RhbGwgY3VzdG9tIGhhbmRsZXJzIGJlZm9yZSB1bmJsb2NraW5nLgogCSAqLwotCXBx c2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOyAvKiBzeXN0ZW0oKSByZXF1aXJlcyB0aGlzIHRv IGJlIFNJR19ERkwgcmF0aGVyCi0JCQkJCQkJCSAqIHRoYW4gU0lHX0lHTiBvbiBzb21lIHBs YXRmb3JtcyAqLwotCi0JLyoKLQkgKiBFdmVyeSBwb3N0bWFzdGVyIGNoaWxkIHByb2Nlc3Mg aXMgZXhwZWN0ZWQgdG8gcmVzcG9uZCBwcm9tcHRseSB0bwotCSAqIFNJR1FVSVQgYXQgYWxs IHRpbWVzLiAgVGhlcmVmb3JlIHdlIGNlbnRyYWxseSByZW1vdmUgU0lHUVVJVCBmcm9tCi0J ICogQmxvY2tTaWcgYW5kIGluc3RhbGwgYSBzdWl0YWJsZSBzaWduYWwgaGFuZGxlci4gIChD bGllbnQtZmFjaW5nCi0JICogcHJvY2Vzc2VzIG1heSBjaG9vc2UgdG8gcmVwbGFjZSB0aGlz IGRlZmF1bHQgY2hvaWNlIG9mIGhhbmRsZXIgd2l0aAotCSAqIHF1aWNrZGllKCkuKSAgQWxs IG90aGVyIGJsb2NrYWJsZSBzaWduYWxzIHJlbWFpbiBibG9ja2VkIGZvciBub3cuCi0JICov Ci0JcHFzaWduYWwoU0lHUVVJVCwgU2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdCk7Ci0KLQlz aWdkZWxzZXQoJkJsb2NrU2lnLCBTSUdRVUlUKTsKLQlzaWdwcm9jbWFzayhTSUdfU0VUTUFT SywgJkJsb2NrU2lnLCBOVUxMKTsKKwlTZXRQb3N0bWFzdGVyQ2hpbGRTaWduYWxIYW5kbGVy cygpOwogCiAJLyoKIAkgKiBJdCBpcyB1cCB0byB0aGUgKk1haW4oKSBmdW5jdGlvbiB0byBz ZXQgc2lnbmFsIGhhbmRsZXJzIGFwcHJvcHJpYXRlIGZvcgpAQCAtMjAxLDEwICsxODQsOSBA QCBJbml0U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJndjApCiAKIAlJbml0UHJv Y2Vzc0dsb2JhbHMoKTsKIAotCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2NhbCBsYXRjaCBz dXBwb3J0ICovCisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzLWxvY2FsIGludGVycnVwdCBzdXBw b3J0ICovCiAJSW5pdGlhbGl6ZVdhaXRFdmVudFN1cHBvcnQoKTsKLQlJbml0UHJvY2Vzc0xv Y2FsTGF0Y2goKTsKLQlJbml0aWFsaXplTGF0Y2hXYWl0U2V0KCk7CisJSW5pdGlhbGl6ZUlu dGVycnVwdFdhaXRTZXQoKTsKIAogCS8qCiAJICogRm9yIGNvbnNpc3RlbmN5IHdpdGggSW5p dFBvc3RtYXN0ZXJDaGlsZCwgaW5pdGlhbGl6ZSBzaWduYWwgbWFzayBoZXJlLgpAQCAtMjI1 LDQ4ICsyMDcsNiBAQCBJbml0U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJndjAp CiAJCWdldF9wa2dsaWJfcGF0aChteV9leGVjX3BhdGgsIHBrZ2xpYl9wYXRoKTsKIH0KIAot dm9pZAotU3dpdGNoVG9TaGFyZWRMYXRjaCh2b2lkKQotewotCUFzc2VydChNeUxhdGNoID09 ICZMb2NhbExhdGNoRGF0YSk7Ci0JQXNzZXJ0KE15UHJvYyAhPSBOVUxMKTsKLQotCU15TGF0 Y2ggPSAmTXlQcm9jLT5wcm9jTGF0Y2g7Ci0KLQlpZiAoRmVCZVdhaXRTZXQpCi0JCU1vZGlm eVdhaXRFdmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRMYXRjaFBvcywgV0xfTEFUQ0hf U0VULAotCQkJCQkJTXlMYXRjaCk7Ci0KLQkvKgotCSAqIFNldCB0aGUgc2hhcmVkIGxhdGNo IGFzIHRoZSBsb2NhbCBvbmUgbWlnaHQgaGF2ZSBiZWVuIHNldC4gVGhpcwotCSAqIHNob3Vs ZG4ndCBub3JtYWxseSBiZSBuZWNlc3NhcnkgYXMgY29kZSBpcyBzdXBwb3NlZCB0byBjaGVj ayB0aGUKLQkgKiBjb25kaXRpb24gYmVmb3JlIHdhaXRpbmcgZm9yIHRoZSBsYXRjaCwgYnV0 IGEgYml0IGNhcmUgY2FuJ3QgaHVydC4KLQkgKi8KLQlTZXRMYXRjaChNeUxhdGNoKTsKLX0K LQotdm9pZAotSW5pdFByb2Nlc3NMb2NhbExhdGNoKHZvaWQpCi17Ci0JTXlMYXRjaCA9ICZM b2NhbExhdGNoRGF0YTsKLQlJbml0TGF0Y2goTXlMYXRjaCk7Ci19Ci0KLXZvaWQKLVN3aXRj aEJhY2tUb0xvY2FsTGF0Y2godm9pZCkKLXsKLQlBc3NlcnQoTXlMYXRjaCAhPSAmTG9jYWxM YXRjaERhdGEpOwotCUFzc2VydChNeVByb2MgIT0gTlVMTCAmJiBNeUxhdGNoID09ICZNeVBy b2MtPnByb2NMYXRjaCk7Ci0KLQlNeUxhdGNoID0gJkxvY2FsTGF0Y2hEYXRhOwotCi0JaWYg KEZlQmVXYWl0U2V0KQotCQlNb2RpZnlXYWl0RXZlbnQoRmVCZVdhaXRTZXQsIEZlQmVXYWl0 U2V0TGF0Y2hQb3MsIFdMX0xBVENIX1NFVCwKLQkJCQkJCU15TGF0Y2gpOwotCi0JU2V0TGF0 Y2goTXlMYXRjaCk7Ci19Ci0KIC8qCiAgKiBSZXR1cm4gYSBodW1hbi1yZWFkYWJsZSBzdHJp bmcgcmVwcmVzZW50YXRpb24gb2YgYSBCYWNrZW5kVHlwZS4KICAqCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9p bml0L3Bvc3Rpbml0LmMKaW5kZXggYjU5ZTA4NjA1Y2MuLjRmMWFhOTRhNjYxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9z ZXR0aW5nLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlLmgiCisjaW5jbHVk ZSAiaXBjL2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpYnBxL2F1dGguaCIKICNpbmNsdWRl ICJsaWJwcS9saWJwcS1iZS5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCkBAIC0xMzcx LDIwICsxMzcyLDE5IEBAIFNodXRkb3duUG9zdGdyZXMoaW50IGNvZGUsIERhdHVtIGFyZykK IHN0YXRpYyB2b2lkCiBTdGF0ZW1lbnRUaW1lb3V0SGFuZGxlcih2b2lkKQogewotCWludAkJ CXNpZyA9IFNJR0lOVDsKLQogCS8qCiAJICogRHVyaW5nIGF1dGhlbnRpY2F0aW9uIHRoZSB0 aW1lb3V0IGlzIHVzZWQgdG8gZGVhbCB3aXRoCiAJICogYXV0aGVudGljYXRpb25fdGltZW91 dCAtIHdlIHdhbnQgdG8gcXVpdCBpbiByZXNwb25zZSB0byBzdWNoIHRpbWVvdXRzLgogCSAq LwogCWlmIChDbGllbnRBdXRoSW5Qcm9ncmVzcykKLQkJc2lnID0gU0lHVEVSTTsKKwkJUmFp c2VJbnRlcnJ1cHQoSU5URVJSVVBUX1RFUk1JTkFURSk7CisJZWxzZQorCQlSYWlzZUludGVy cnVwdChJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMKTsKIAotI2lmZGVmIEhBVkVfU0VUU0lECi0J LyogdHJ5IHRvIHNpZ25hbCB3aG9sZSBwcm9jZXNzIGdyb3VwICovCi0Ja2lsbCgtTXlQcm9j UGlkLCBzaWcpOwotI2VuZGlmCi0Ja2lsbChNeVByb2NQaWQsIHNpZyk7CisJLyoKKwkgKiBG SVhNRTogd2UgdXNlZCB0byBzaWduYWwgdGhlIHdob2xlIHByb2Nlc3MgZ3JvdXAuIElzIHRo YXQgaW1wb3J0YW50LCBpZgorCSAqIHdlJ3JlIGUuZy4gZXhlY3V0aW5nIGFyY2hpdmVfY29t bWFuZCA/CisJICovCiB9CiAKIC8qCkBAIC0xMzkzLDUxICsxMzkzLDM3IEBAIFN0YXRlbWVu dFRpbWVvdXRIYW5kbGVyKHZvaWQpCiBzdGF0aWMgdm9pZAogTG9ja1RpbWVvdXRIYW5kbGVy KHZvaWQpCiB7Ci0jaWZkZWYgSEFWRV9TRVRTSUQKLQkvKiB0cnkgdG8gc2lnbmFsIHdob2xl IHByb2Nlc3MgZ3JvdXAgKi8KLQlraWxsKC1NeVByb2NQaWQsIFNJR0lOVCk7Ci0jZW5kaWYK LQlraWxsKE15UHJvY1BpZCwgU0lHSU5UKTsKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRf UVVFUllfQ0FOQ0VMKTsKIH0KIAogc3RhdGljIHZvaWQKIFRyYW5zYWN0aW9uVGltZW91dEhh bmRsZXIodm9pZCkKIHsKLQlUcmFuc2FjdGlvblRpbWVvdXRQZW5kaW5nID0gdHJ1ZTsKLQlJ bnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUlu dGVycnVwdChJTlRFUlJVUFRfVFJBTlNBQ1RJT05fVElNRU9VVCk7CiB9CiAKIHN0YXRpYyB2 b2lkCiBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0SGFuZGxlcih2b2lkKQogewot CUlkbGVJblRyYW5zYWN0aW9uU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gdHJ1ZTsKLQlJbnRl cnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUludGVy cnVwdChJTlRFUlJVUFRfSURMRV9JTl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQpOwog fQogCiBzdGF0aWMgdm9pZAogSWRsZVNlc3Npb25UaW1lb3V0SGFuZGxlcih2b2lkKQogewot CUlkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSB0cnVlOwotCUludGVycnVwdFBlbmRpbmcg PSB0cnVlOwotCVNldExhdGNoKE15TGF0Y2gpOworCVJhaXNlSW50ZXJydXB0KElOVEVSUlVQ VF9JRExFX1NFU1NJT05fVElNRU9VVCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBJZGxlU3RhdHNV cGRhdGVUaW1lb3V0SGFuZGxlcih2b2lkKQogewotCUlkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQ ZW5kaW5nID0gdHJ1ZTsKLQlJbnRlcnJ1cHRQZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChN eUxhdGNoKTsKKwlSYWlzZUludGVycnVwdChJTlRFUlJVUFRfSURMRV9TVEFUU19USU1FT1VU KTsKIH0KIAogc3RhdGljIHZvaWQKIENsaWVudENoZWNrVGltZW91dEhhbmRsZXIodm9pZCkK IHsKLQlDaGVja0NsaWVudENvbm5lY3Rpb25QZW5kaW5nID0gdHJ1ZTsKLQlJbnRlcnJ1cHRQ ZW5kaW5nID0gdHJ1ZTsKLQlTZXRMYXRjaChNeUxhdGNoKTsKKwlSYWlzZUludGVycnVwdChJ TlRFUlJVUFRfQ0xJRU5UX0NIRUNLX1RJTUVPVVQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy90aW1lb3V0LmMgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL3RpbWVvdXQuYwppbmRleCBkZGJhNWRjNjA3Yy4uMWYzYWQzZGJmNTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvdGltZW91dC5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvdGltZW91dC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8c3lz L3RpbWUuaD4KIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgInN0b3JhZ2Uv bGF0Y2guaCIKICNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCiAjaW5jbHVkZSAidXRpbHMv dGltZXN0YW1wLmgiCiAKQEAgLTM3MCwxMiArMzY5LDYgQEAgaGFuZGxlX3NpZ19hbGFybShT SUdOQUxfQVJHUykKIAkgKi8KIAlIT0xEX0lOVEVSUlVQVFMoKTsKIAotCS8qCi0JICogU0lH QUxSTSBpcyBhbHdheXMgY2F1c2UgZm9yIHdha2luZyBhbnl0aGluZyB3YWl0aW5nIG9uIHRo ZSBwcm9jZXNzCi0JICogbGF0Y2guCi0JICovCi0JU2V0TGF0Y2goTXlMYXRjaCk7Ci0KIAkv KgogCSAqIEFsd2F5cyByZXNldCBzaWduYWxfcGVuZGluZywgZXZlbiBpZiAhYWxhcm1fZW5h YmxlZCwgc2luY2UgaW5kZWVkIG5vCiAJICogc2lnbmFsIGlzIG5vdyBwZW5kaW5nLgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgYi9zcmMvYmFja2VuZC91 dGlscy9tbWdyL21jeHQuYwppbmRleCAwNzNiZGIzNWQyYS4uOTk2Y2FlMDViMjcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL21tZ3IvbWN4dC5jCkBAIC0xMzExLDM2ICsxMzExLDE2IEBAIE1lbW9yeUNvbnRl eHRBbGxvY0V4dGVuZGVkKE1lbW9yeUNvbnRleHQgY29udGV4dCwgU2l6ZSBzaXplLCBpbnQg ZmxhZ3MpCiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIEhhbmRsZUxvZ01lbW9yeUNvbnRl eHRJbnRlcnJ1cHQKLSAqCQlIYW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNh dGluZyBsb2dnaW5nIG9mIG1lbW9yeQotICoJCWNvbnRleHRzLgotICoKLSAqIEFsbCB0aGUg YWN0dWFsIHdvcmsgaXMgZGVmZXJyZWQgdG8gUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRl cnJ1cHQoKSwKLSAqIGJlY2F1c2Ugd2UgY2Fubm90IHNhZmVseSBlbWl0IGEgbG9nIG1lc3Nh Z2UgaW5zaWRlIHRoZSBzaWduYWwgaGFuZGxlci4KLSAqLwotdm9pZAotSGFuZGxlTG9nTWVt b3J5Q29udGV4dEludGVycnVwdCh2b2lkKQotewotCUludGVycnVwdFBlbmRpbmcgPSB0cnVl OwotCUxvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0gdHJ1ZTsKLQkvKiBsYXRjaCB3aWxsIGJl IHNldCBieSBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlciAqLwotfQotCiAvKgogICogUHJv Y2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQKICAqIAkJUGVyZm9ybSBsb2dnaW5nIG9m IG1lbW9yeSBjb250ZXh0cyBvZiB0aGlzIGJhY2tlbmQgcHJvY2Vzcy4KICAqCi0gKiBBbnkg YmFja2VuZCB0aGF0IHBhcnRpY2lwYXRlcyBpbiBQcm9jU2lnbmFsIHNpZ25hbGluZyBtdXN0 IGFycmFuZ2UKLSAqIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB3ZSBzZWUgTG9nTWVtb3J5 Q29udGV4dFBlbmRpbmcgc2V0LgotICogSXQgaXMgY2FsbGVkIGZyb20gQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKSwgd2hpY2ggaXMgZW5vdWdoIGJlY2F1c2UKLSAqIHRoZSB0YXJnZXQgcHJv Y2VzcyBmb3IgbG9nZ2luZyBvZiBtZW1vcnkgY29udGV4dHMgaXMgYSBiYWNrZW5kLgorICog VGhpcyBpcyB0aGUgaGFuZGxlciBmb3IgSU5URVJSVVBUX0xPR19NRU1PUllfQ09OVEVYVCwg bm9ybWFsbHkgY2FsbGVkIGZyb20KKyAqIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCiAgKi8K IHZvaWQKIFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpCiB7Ci0JTG9n TWVtb3J5Q29udGV4dFBlbmRpbmcgPSBmYWxzZTsKLQogCS8qCiAJICogRXhpdCBpbW1lZGlh dGVseSBpZiBtZW1vcnkgY29udGV4dCBsb2dnaW5nIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mu IFRoaXMKIAkgKiBwcmV2ZW50cyByZWN1cnNpdmUgY2FsbHMsIHdoaWNoIGNvdWxkIG9jY3Vy IGlmIGxvZ2dpbmcgaXMgcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3NjcmFt LWNvbW1vbi5jIGIvc3JjL2NvbW1vbi9zY3JhbS1jb21tb24uYwppbmRleCAyNTlmYTU1NTRi Ni4uMDBiOTJhN2ZlYTEgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vc2NyYW0tY29tbW9uLmMK KysrIGIvc3JjL2NvbW1vbi9zY3JhbS1jb21tb24uYwpAQCAtMjMsNyArMjMsNyBAQAogI2lu Y2x1ZGUgImNvbW1vbi9obWFjLmgiCiAjaW5jbHVkZSAiY29tbW9uL3NjcmFtLWNvbW1vbi5o IgogI2lmbmRlZiBGUk9OVEVORAotI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUg ImlwYy9pbnRlcnJ1cHQuaCIKICNlbmRpZgogI2luY2x1ZGUgInBvcnQvcGdfYnN3YXAuaCIK IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvTWFrZWZpbGUgYi9zcmMvaW5jbHVkZS9NYWtl ZmlsZQppbmRleCBhYzY3M2Y0Y2YxNy4uYzQ3NGQ2ZmJlM2MgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL01ha2VmaWxlCisrKyBiL3NyYy9pbmNsdWRlL01ha2VmaWxlCkBAIC0yOCw2ICsy OCw3IEBAIFNVQkRJUlMgPSBcCiAJZXhlY3V0b3IgXAogCWZlX3V0aWxzIFwKIAlmb3JlaWdu IFwKKwlpcGMgXAogCWppdCBcCiAJbGliIFwKIAlsaWJwcSBcCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9hY2Nlc3MvcGFyYWxsZWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9wYXJhbGxl bC5oCmluZGV4IDYwZjg1NzY3NWUwLi42ZDU3YzMxMDIzOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3BhcmFsbGVsLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3BhcmFs bGVsLmgKQEAgLTU1LDcgKzU1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxXb3JrZXJD b250ZXh0CiAJc2htX3RvYyAgICAqdG9jOwogfSBQYXJhbGxlbFdvcmtlckNvbnRleHQ7CiAK LWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxsZWxNZXNz YWdlUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgUGFyYWxsZWxXb3JrZXJOdW1i ZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBJbml0aWFsaXppbmdQYXJhbGxlbFdvcmtl cjsKIApAQCAtNzIsNyArNzEsNiBAQCBleHRlcm4gdm9pZCBXYWl0Rm9yUGFyYWxsZWxXb3Jr ZXJzVG9GaW5pc2goUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiB2b2lkIERlc3Ry b3lQYXJhbGxlbENvbnRleHQoUGFyYWxsZWxDb250ZXh0ICpwY3h0KTsKIGV4dGVybiBib29s IFBhcmFsbGVsQ29udGV4dEFjdGl2ZSh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgSGFuZGxlUGFy YWxsZWxNZXNzYWdlSW50ZXJydXB0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc1BhcmFs bGVsTWVzc2FnZXModm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9QYXJhbGxlbChib29s IGlzQ29tbWl0KTsKIGV4dGVybiB2b2lkIEF0RU9TdWJYYWN0X1BhcmFsbGVsKGJvb2wgaXND b21taXQsIFN1YlRyYW5zYWN0aW9uSWQgbXlTdWJJZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3Jl Y292ZXJ5LmgKaW5kZXggMjg0MjEwNmIyODUuLjc1NjRkMjNjZjdiIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2dyZWNvdmVyeS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRl ICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0 Y2guaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKIAogLyoKQEAgLTc3LDIzICs3 Niw2IEBAIHR5cGVkZWYgc3RydWN0IFhMb2dSZWNvdmVyeUN0bERhdGEKIAkgKi8KIAlib29s CQlTaGFyZWRQcm9tb3RlSXNUcmlnZ2VyZWQ7CiAKLQkvKgotCSAqIHJlY292ZXJ5V2FrZXVw TGF0Y2ggaXMgdXNlZCB0byB3YWtlIHVwIHRoZSBzdGFydHVwIHByb2Nlc3MgdG8gY29udGlu dWUKLQkgKiBXQUwgcmVwbGF5LCBpZiBpdCBpcyB3YWl0aW5nIGZvciBXQUwgdG8gYXJyaXZl IG9yIHByb21vdGlvbiB0byBiZQotCSAqIHJlcXVlc3RlZC4KLQkgKgotCSAqIE5vdGUgdGhh dCB0aGUgc3RhcnR1cCBwcm9jZXNzIGFsc28gdXNlcyBhbm90aGVyIGxhdGNoLCBpdHMgcHJv Y0xhdGNoLAotCSAqIHRvIHdhaXQgZm9yIHJlY292ZXJ5IGNvbmZsaWN0LiBJZiB3ZSBnZXQg cmlkIG9mIHJlY292ZXJ5V2FrZXVwTGF0Y2ggZm9yCi0JICogc2lnbmFsaW5nIHRoZSBzdGFy dHVwIHByb2Nlc3MgaW4gZmF2b3Igb2YgdXNpbmcgaXRzIHByb2NMYXRjaCwgd2hpY2gKLQkg KiBjb21wb3J0cyBiZXR0ZXIgd2l0aCBwb3NzaWJsZSBnZW5lcmljIHNpZ25hbCBoYW5kbGVy cyB1c2luZyB0aGF0IGxhdGNoLgotCSAqIEJ1dCB3ZSBzaG91bGQgbm90IGRvIHRoYXQgYmVj YXVzZSB0aGUgc3RhcnR1cCBwcm9jZXNzIGRvZXNuJ3QgYXNzdW1lCi0JICogdGhhdCBpdCdz IHdha2VuIHVwIGJ5IHdhbHJlY2VpdmVyIHByb2Nlc3Mgb3IgU0lHSFVQIHNpZ25hbCBoYW5k bGVyCi0JICogd2hpbGUgaXQncyB3YWl0aW5nIGZvciByZWNvdmVyeSBjb25mbGljdC4gVGhl IHNlcGFyYXRlIGxhdGNoZXMsCi0JICogcmVjb3ZlcnlXYWtldXBMYXRjaCBhbmQgcHJvY0xh dGNoLCBzaG91bGQgYmUgdXNlZCBmb3IgaW50ZXItcHJvY2VzcwotCSAqIGNvbW11bmljYXRp b24gZm9yIFdBTCByZXBsYXkgYW5kIHJlY292ZXJ5IGNvbmZsaWN0LCByZXNwZWN0aXZlbHku Ci0JICovCi0JTGF0Y2gJCXJlY292ZXJ5V2FrZXVwTGF0Y2g7Ci0KIAkvKgogCSAqIExhc3Qg cmVjb3JkIHN1Y2Nlc3NmdWxseSByZXBsYXllZC4KIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2FzeW5jLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5o CmluZGV4IDNiYWFlN2NiOGRjLi5hY2Q5YWZiY2M0YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvYXN5bmMuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9hc3luYy5o CkBAIC0xMywxMSArMTMsOCBAQAogI2lmbmRlZiBBU1lOQ19ICiAjZGVmaW5lIEFTWU5DX0gK IAotI2luY2x1ZGUgPHNpZ25hbC5oPgotCiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBUcmFj ZV9ub3RpZnk7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9ub3RpZnlfcXVldWVfcGFn ZXM7Ci1leHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IG5vdGlmeUlu dGVycnVwdFBlbmRpbmc7CiAKIGV4dGVybiBTaXplIEFzeW5jU2htZW1TaXplKHZvaWQpOwog ZXh0ZXJuIHZvaWQgQXN5bmNTaG1lbUluaXQodm9pZCk7CkBAIC00MCw5ICszNyw2IEBAIGV4 dGVybiB2b2lkIEF0U3ViQ29tbWl0X05vdGlmeSh2b2lkKTsKIGV4dGVybiB2b2lkIEF0U3Vi QWJvcnRfTm90aWZ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgQXRQcmVwYXJlX05vdGlmeSh2b2lk KTsKIAotLyogc2lnbmFsIGhhbmRsZXIgZm9yIGluYm91bmQgbm90aWZpZXMgKFBST0NTSUdf Tk9USUZZX0lOVEVSUlVQVCkgKi8KLWV4dGVybiB2b2lkIEhhbmRsZU5vdGlmeUludGVycnVw dCh2b2lkKTsKLQogLyogcHJvY2VzcyBpbnRlcnJ1cHRzICovCiBleHRlcm4gdm9pZCBQcm9j ZXNzTm90aWZ5SW50ZXJydXB0KGJvb2wgZmx1c2gpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9pcGMvaW50ZXJydXB0LmggYi9zcmMvaW5jbHVkZS9pcGMvaW50ZXJydXB0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIzOWQ1OGY3NTk3Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvaXBjL2ludGVycnVwdC5oCkBAIC0wLDAgKzEs MzcwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbnRlcnJ1cHQuaAorICoJ ICBJbnRlci1wcm9jZXNzIGludGVycnVwdHMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2luY2x1 ZGUvaXBjL2ludGVycnVwdC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2lmbmRlZiBJUENfSU5URVJSVVBUX0gKKyNkZWZpbmUgSVBDX0lOVEVSUlVQVF9ICisKKyNp bmNsdWRlICJwb3J0L2F0b21pY3MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NudW1iZXIu aCIKKworLyoKKyAqIEluY2x1ZGUgd2FpdGV2ZW50c2V0LmggZm9yIHRoZSBXTF8qIGZsYWdz LiBUaGV5J3JlIG5vdCBuZWVkZWQgaGVyLCBidXQgYXJlCisgKiBuZWVkZWQgd2hpY2ggYXJl IG5lZWRlZCBieSBhbGwgY2FsbGVycyBvZiBXYWl0SW50ZXJydXB0LCBzbyBpbmNsdWRlIGl0 CisgKiBoZXJlLgorICoKKyAqIE5vdGU6IEludGVycnVwdE1hc2sgaXMgZGVmaW5kIGluIHdh aXRldmVudHNldC5oIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kKKyAqLworI2luY2x1 ZGUgInN0b3JhZ2Uvd2FpdGV2ZW50c2V0LmgiCisKKworLyoKKyAqIEZsYWdzIGluIHRoZSBw ZW5kaW5nIGludGVycnVwdHMgYml0bWFzay4gRWFjaCB2YWx1ZSBpcyBhIGRpZmZlcmVudCBi aXQsIHNvIHRoYXQKKyAqIHRoZXNlIGNhbiBiZSBjb252ZW5pZW50bHkgT1InZCB0b2dldGhl ci4KKyAqLworI2RlZmluZSBVSU5UNjRfQklUKHNoaWZ0KSAoVUlOVDY0X0MoMSkgPDwgKHNo aWZ0KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCZWdpbiBkZWZpbml0aW9ucyBvZiBi dWlsdC1pbiBpbnRlcnJ1cHQgYml0cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICog SU5URVJSVVBUX1dBSVRfV0FLRVVQIGlzIHNoYXJlZCBieSBtYW55IHVzZSBjYXNlcyB0aGF0 IG5lZWQgdG8gd2FrZSB1cAorICogYSBwcm9jZXNzLCB3aGljaCBkb24ndCBuZWVkIGEgZGVk aWNhdGVkIGludGVycnVwdCBiaXQuCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX1dBSVRfV0FL RVVQCQkJCQlVSU5UNjRfQklUKDApCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdGFu ZGFyZCBpbnRlcnJ1cHRzIGhhbmRsZWQgdGhlIHNhbWUgYnkgbW9zdCBwcm9jZXNzZXMKKyAq CisgKiBNb3N0IG9mIHRoZXNlIGFyZSBub3JtYWxseSBwcm9jZXNzZWQgYnkgQ0hFQ0tfRk9S X0lOVEVSUlVQVFMoKSBvbmNlCisgKiBwcm9jZXNzIHN0YXJ0dXAgaGFzIHJlYWNoZWQgU2V0 U3RhbmRhcmRJbnRlcnJ1cHRzKCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBC YWNrZW5kIGhhcyBiZWVuIHJlcXVlc3RlZCB0byB0ZXJtaW5hdGUgZ3JhY2VmdWxseS4KKyAq CisgKiBUaGlzIGlzIHJhaXNlZCBieSB0aGUgU0lHVEVSTSBzaWduYWwgaGFuZGxlciwgb3Ig Y2FuIGJlIHNlbnQgZGlyZWN0bHkgYnkKKyAqIGFub3RoZXIgYmFja2VuZCBlLmcuIHdpdGgg cGdfdGVybWluYXRlX2JhY2tlbmQoKS4KKyAqLworI2RlZmluZSBJTlRFUlJVUFRfVEVSTUlO QVRFCQkJCQkJVUlOVDY0X0JJVCgxKQorCisvKgorICogQ2FuY2VsIGN1cnJlbnQgcXVlcnks IGlmIGFueS4KKyAqCisgKiBTZW50IHRvIHJlZ3VsYXIgYmFja2VuZHMgYnkgcGdfY2FuY2Vs X2JhY2tlbmQoKSwgU0lHSU5ULCBvciBpbiByZXNwb25zZSB0bworICogYSBxdWVyeSBjYW5j ZWxsYXRpb24gcGFja2V0LiAgU29tZSBvdGhlciBwcm9jZXNzZXMgbGlrZSBhdXRvdmFjdXVt IHdvcmtlcnMKKyAqIGFuZCBsb2dpY2FsIGRlY29kaW5nIHByb2Nlc3NlcyBhbHNvIHJlYWN0 IHRvIHRoaXMuCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX1FVRVJZX0NBTkNFTAkJCQkJVUlO VDY0X0JJVCgyKQorCisvKgorICogUmVjb3ZlcnkgY29uZmxpY3QuIFRoaXMgaXMgc2VudCBi eSB0aGUgc3RhcnR1cCBwcm9jZXNzIGluIGhvdCBzdGFuZGJ5IG1vZGUKKyAqIHdoZW4gYSBi YWNrZW5kIGhvbGRzIGJhY2sgdGhlIFdBTCByZXBsYXkgZm9yIHRvbyBsb25nLiBUaGUgcmVh c29uIGZvciB0aGUKKyAqIGNvbmZsaWN0IGluZGljYXRlZCBieSB0aGUgUEdQUk9DLT5wZW5k aW5nUmVjb3ZlcnlDb25mbGljdHMKKyAqIGJpdG1hc2suIENvbmZsaWN0cyBhcmUgZ2VuZXJh bGx5IHJlc29sdmVkIGJ5IHRlcm1pbmF0aW5nIHRoZSBjdXJyZW50IHF1ZXJ5CisgKiBvciBz ZXNzaW9uLiBUaGUgZXhhY3QgcmVhY3Rpb24gZGVwZW5kcyBvbiB0aGUgcmVhc29uIGFuZCB3 aGF0IHN0YXRlIHRoZQorICogYmFja2VuZCBpcyBpbi4KKyAqLworI2RlZmluZSBJTlRFUlJV UFRfUkVDT1ZFUllfQ09ORkxJQ1QgCQkJVUlOVDY0X0JJVCgzKQorCisvKgorICogQ29uZmln IGZpbGUgcmVsb2FkIGlzIHJlcXVlc3RlZC4KKyAqCisgKiBUaGlzIGlzIG5vcm1hbGx5IGRp c2FibGVkIGFuZCB0aGVyZWZvcmUgbm90IGhhbmRsZWQgYXQKKyAqIENIRUNLX0ZPUl9JTlRF UlJVUFRTKCkuIFRoZSAibWFpbiBsb29wIiBpbiBlYWNoIHByb2Nlc3MgaXMgZXhwZWN0ZWQg dG8KKyAqIGNoZWNrIGZvciBpdCBleHBsaWNpdGx5LgorICovCisjZGVmaW5lIElOVEVSUlVQ VF9DT05GSUdfUkVMT0FECQkJCQlVSU5UNjRfQklUKDQpCisKKy8qCisgKiBMb2cgY3VycmVu dCBtZW1vcnkgY29udGV4dHMsIHNlbnQgYnkgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzKCkKKyAqLworI2RlZmluZSBJTlRFUlJVUFRfTE9HX01FTU9SWV9DT05URVhUIAkJCVVJ TlQ2NF9CSVQoNSkKKworLyoKKyAqIHByb2NzaWduYWwgZ2xvYmFsIGJhcnJpZXIgaW50ZXJy dXB0CisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX0JBUlJJRVIJCQkJCQlVSU5UNjRfQklUKDYp CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbnRlcnJ1cHRzIHVzZWQgYnkgY2xpZW50 IGJhY2tlbmRzIGFuZCBtb3N0IG90aGVyIHByb2Nlc3NlcyB0aGF0CisgKiBjb25uZWN0IHRv IGEgcGFydGljdWxhciBkYXRhYmFzZS4KKyAqCisgKiBNb3N0IG9mIHRoZXNlIGFyZSBhbHNv IHByb2Nlc3NlZCBieSBDSEVDS19GT1JfSU5URVJSVVBUUygpIG9uY2UgcHJvY2VzcworICog c3RhcnR1cCBoYXMgcmVhY2hlZCBTZXRTdGFuZGFyZEludGVycnVwdHMoKS4KKyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworLyogUmFpc2VkIGJ5IHRpbWVycyAqLworI2RlZmluZSBJTlRFUlJV UFRfVFJBTlNBQ1RJT05fVElNRU9VVAkJCVVJTlQ2NF9CSVQoNykKKyNkZWZpbmUgSU5URVJS VVBUX0lETEVfU0VTU0lPTl9USU1FT1VUCQkJVUlOVDY0X0JJVCg4KQorI2RlZmluZSBJTlRF UlJVUFRfSURMRV9JTl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQgVUlOVDY0X0JJVCg5 KQorI2RlZmluZSBJTlRFUlJVUFRfQ0xJRU5UX0NIRUNLX1RJTUVPVVQJCQlVSU5UNjRfQklU KDEwKQorCisvKiBSYWlzZWQgYnkgdGltZXIgd2hpbGUgaWRsZSwgdG8gc2VuZCBhIHN0YXRz IHVwZGF0ZSAqLworI2RlZmluZSBJTlRFUlJVUFRfSURMRV9TVEFUU19USU1FT1VUCQkJVUlO VDY0X0JJVCgxMSkKKworLyogUmFpc2VkIHN5bmNocm9ub3VzbHkgd2hlbiB0aGUgY2xpZW50 IGNvbm5lY3Rpb24gaXMgbG9zdCAqLworI2RlZmluZSBJTlRFUlJVUFRfQ0xJRU5UX0NPTk5F Q1RJT05fTE9TVAkJIFVJTlQ2NF9CSVQoMTIpCisKKy8qCisgKiBJTlRFUlJVUFRfQVNZTkNf Tk9USUZZIGlzIHNlbnQgdG8gbm90aWZ5IGJhY2tlbmRzIHRoYXQgaGF2ZSByZWdpc3RlcmVk IHRvCisgKiBMSVNURU4gb24gYW55IGNoYW5uZWxzIHRoYXQgdGhleSBtaWdodCBoYXZlIG1l c3NhZ2VzIHRoZXkgbmVlZCB0byBkZWxpdmVyCisgKiB0byB0aGUgZnJvbnRlbmQuIEl0IGlz IGFsc28gcHJvY2Vzc2VkIHdoZW5ldmVyIHN0YXJ0aW5nIHRvIHJlYWQgZnJvbSB0aGUKKyAq IGNsaWVudCBvciB3aGlsZSBkb2luZyBzbywgYnV0IG9ubHkgd2hlbiB0aGVyZSBpcyBubyB0 cmFuc2FjdGlvbiBpbgorICogcHJvZ3Jlc3MuCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX0FT WU5DX05PVElGWQkJCQkJVUlOVDY0X0JJVCgxMykKKworLyoKKyAqIEJlY2F1c2UgYmFja2Vu ZHMgc2l0dGluZyBpZGxlIHdpbGwgbm90IGJlIHJlYWRpbmcgc2ludmFsIGV2ZW50cywgd2Ug bmVlZCBhCisgKiB3YXkgdG8gZ2l2ZSBhbiBpZGxlIGJhY2tlbmQgYSBzd2lmdCBraWNrIGlu IHRoZSByZWFyIGFuZCBtYWtlIGl0IGNhdGNoIHVwCisgKiBiZWZvcmUgdGhlIHNpbnZhbCBx dWV1ZSBvdmVyZmxvd3MgYW5kIGZvcmNlcyBpdCB0byBnbyB0aHJvdWdoIGEgY2FjaGUgcmVz ZXQKKyAqIGV4ZXJjaXNlLiAgVGhpcyBpcyBkb25lIGJ5IHNlbmRpbmcgSU5URVJSVVBUX1NJ TlZBTF9DQVRDSFVQIHRvIGFueSBiYWNrZW5kCisgKiB0aGF0IGdldHMgdG9vIGZhciBiZWhp bmQuCisgKgorICogVGhlIGludGVycnVwdCBpcyBwcm9jZXNzZWQgd2hlbmV2ZXIgc3RhcnRp bmcgdG8gcmVhZCBmcm9tIHRoZSBjbGllbnQsIG9yCisgKiB3aGVuIGludGVycnVwdGVkIHdo aWxlIGRvaW5nIHNvLgorICovCisjZGVmaW5lIElOVEVSUlVQVF9TSU5WQUxfQ0FUQ0hVUAkJ CQlVSU5UNjRfQklUKDE0KQorCisvKiBNZXNzYWdlIGZyb20gYSBjb29wZXJhdGluZyBwYXJh bGxlbCBiYWNrZW5kIG9yIGFwcGx5IHdvcmtlciAqLworI2RlZmluZSBJTlRFUlJVUFRfUEFS QUxMRUxfTUVTU0FHRQkJCQlVSU5UNjRfQklUKDE1KQorCisKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogUHJvY2Vzcy1zcGVjaWZpYyBpbnRlcnJ1cHRzCisgKgorICogU29tZSBwcm9jZXNz ZXMgbmVlZCBkZWRpY2F0ZWQgaW50ZXJydXB0cyBmb3IgdmFyaW91cyBwdXJwb3Nlcy4gIEln bm9yZWQKKyAqIGJ5IG90aGVyIHByb2Nlc3Nlcy4KKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor LyogYXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCisjZGVmaW5l IElOVEVSUlVQVF9XQUxTTkRfSU5JVF9TVE9QUElORwkJCVVJTlQ2NF9CSVQoMTYpCisKKy8q IFRPRE86IGRvY3VtZW50IHRoZSBkaWZmZXJlbmNlIHdpdGggSU5URVJSVVBUX1dBTFNORF9J TklUX1NUT1BQSU5HICovCisjZGVmaW5lIElOVEVSUlVQVF9XQUxTTkRfU1RPUAkJCQkJVUlO VDY0X0JJVCgxNykKKworLyoKKyAqIElOVEVSUlVQVF9XQUxfQVJSSVZFRCBpcyB1c2VkIHRv IHdha2UgdXAgdGhlIHN0YXJ0dXAgcHJvY2VzcywgdG8gdGVsbAorICogaXQgdGhhdCBpdCBz aG91bGQgY29udGludWUgV0FMIHJlcGxheS4gSXQncyBzZW50IGJ5IFdBTCByZWNlaXZlciB3 aGVuCisgKiBtb3JlIFdBTCBhcnJpdmVzLCBvciB3aGVuIHByb21vdGlvbiBpcyByZXF1ZXN0 ZWQuCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX1dBTF9BUlJJVkVECQkJCQlVSU5UNjRfQklU KDE4KQorCisvKiBXYWtlIHVwIHN0YXJ0dXAgcHJvY2VzcyB0byBjaGVjayBmb3IgdGhlIHBy b21vdGlvbiBzaWduYWwgZmlsZSAqLworI2RlZmluZSBJTlRFUlJVUFRfQ0hFQ0tfUFJPTU9U RQkJCQkJVUlOVDY0X0JJVCgxOSkKKworLyogc2VudCB0byBsb2dpY2FsIHJlcGxpY2F0aW9u IGxhdW5jaGVyLCB3aGVuIGEgc3Vic2NyaXB0aW9uIGNoYW5nZXMgKi8KKyNkZWZpbmUgSU5U RVJSVVBUX1NVQlNDUklQVElPTl9DSEFOR0UJCQlVSU5UNjRfQklUKDIwKQorCisvKiBHcmFj ZWZ1bCBzaHV0ZG93biByZXF1ZXN0IGZvciBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciAqLwor I2RlZmluZSBJTlRFUlJVUFRfU0hVVERPV05fUEFSQUxMRUxfQVBQTFlfV09SS0VSIFVJTlQ2 NF9CSVQoMjEpCisKKy8qIFJlcXVlc3QgY2hlY2twb2ludGVyIHRvIHBlcmZvcm0gb25lIGxh c3QgY2hlY2twb2ludCwgdGhlbiBzaHV0IGRvd24uICovCisjZGVmaW5lIElOVEVSUlVQVF9T SFVURE9XTl9YTE9HCQkJCQlVSU5UNjRfQklUKDIyKQorCisjZGVmaW5lIElOVEVSUlVQVF9T SFVURE9XTl9QR0FSQ0gJCQkJVUlOVDY0X0JJVCgyMykKKworLyoKKyAqIFRoaXMgaXMgc2Vu dCB0byB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciB3aGVuIGFuIGF1dG92YWN1dW0gd29ya2Vy IGV4aXRzCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX0FVVE9WQUNVVU1fV09SS0VSX0ZJTklT SEVEIAlVSU5UNjRfQklUKDI0KQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW5kIG9m IGJ1aWx0LWluIGludGVycnVwdCBiaXRzCisgKgorICogVGhlIHJlbWFpbmluZyBiaXRzIGFy ZSBoYW5kZWQgb3V0IGJ5IFJlcXVlc3RBZGRpbkludGVycnVwdCwgZm9yCisgKiBleHRlbnNp b25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEJFR0lOX0FERElOX0lOVEVSUlVQ VFMgMjUKKyNkZWZpbmUgRU5EX0FERElOX0lOVEVSUlVQVFMgNjMKKworLyoKKyAqIFNMRUVQ SU5HX09OX0lOVEVSUlVQVFMgaW5kaWNhdGVzIHRoYXQgdGhlIGJhY2tlbmQgaXMgY3VycmVu dGx5IGJsb2NrZWQKKyAqIHdhaXRpbmcgZm9yIGFuIGludGVycnVwdC4gIElmIHNldCwgdGhl IGJhY2tlbmQgbmVlZHMgdG8gYmUgd29rZW4gdXAgd2hlbiBhCisgKiBiaXQgaW4gdGhlIHBl bmRpbmcgaW50ZXJydXB0cyBtYXNrIGlzIHNldC4gIEl0J3MgdXNlZCBpbnRlcm5hbGx5IGJ5 IHRoZQorICogaW50ZXJydXB0IG1hY2hpbmVyeSwgYW5kIGNhbm5vdCBiZSB1c2VkIGRpcmVj dGx5IGluIHRoZSBwdWJsaWMgZnVuY3Rpb25zLgorICogSXQncyBuYW1lZCBkaWZmZXJlbnRs eSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZSBhY3R1YWwgaW50ZXJydXB0IGZsYWdzLgor ICovCisjZGVmaW5lIFNMRUVQSU5HX09OX0lOVEVSUlVQVFMgVUlOVDY0X0JJVCg2MykKKwor ZXh0ZXJuIFBHRExMSU1QT1JUIHBnX2F0b21pY191aW50NjQgKk15UGVuZGluZ0ludGVycnVw dHM7CisKKy8qCisgKiBUZXN0IGFuIGludGVycnVwdCBmbGFnIChvciBmbGFncykuCisgKi8K K3N0YXRpYyBpbmxpbmUgYm9vbAorSW50ZXJydXB0UGVuZGluZyhJbnRlcnJ1cHRNYXNrIGlu dGVycnVwdE1hc2spCit7CisJLyoKKwkgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gbWVtb3J5 IGJhcnJpZXIgaGVyZS4gVGhpcyBpcyB1c2VkIGluCisJICogQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKSwgc28gd2Ugd2FudCB0aGlzIHRvIGJlIGFzIGNoZWFwIGFzIHBvc3NpYmxlLgorCSAq CisJICogVGhhdCBtZWFucyB0aGF0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgY29uY3VycmVudGx5 IHNldCBieSBhbm90aGVyCisJICogcHJvY2Vzcywgd2UgbWlnaHQgbWlzcyBpdC4gVGhhdCBz aG91bGQgYmUgT0ssIGJlY2F1c2UgdGhlIG5leHQKKwkgKiBXYWl0SW50ZXJydXB0KCkgb3Ig ZXF1aXZhbGVudCBjYWxsIGFjdHMgYXMgYSBzeW5jaHJvbml6YXRpb24gYmFycmllci4KKwkg KiBXZSB3aWxsIHNlZSB0aGUgdXBkYXRlZCB2YWx1ZSBiZWZvcmUgc2xlZXBpbmcuCisJICov CisJcmV0dXJuIChwZ19hdG9taWNfcmVhZF91NjQoTXlQZW5kaW5nSW50ZXJydXB0cykgJiBp bnRlcnJ1cHRNYXNrKSAhPSAwOworfQorCisvKgorICogQ2xlYXIgYW4gaW50ZXJydXB0IGZs YWcgKG9yIGZsYWdzKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitDbGVhckludGVycnVw dChJbnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2spCit7CisJcGdfYXRvbWljX2ZldGNoX2Fu ZF91NjQoTXlQZW5kaW5nSW50ZXJydXB0cywgfmludGVycnVwdE1hc2spOworfQorCisvKgor ICogVGVzdCBhbmQgY2xlYXIgYW4gaW50ZXJydXB0IGZsYWcgKG9yIGZsYWdzKS4KKyAqLwor c3RhdGljIGlubGluZSBib29sCitDb25zdW1lSW50ZXJydXB0KEludGVycnVwdE1hc2sgaW50 ZXJydXB0TWFzaykKK3sKKwlpZiAobGlrZWx5KCFJbnRlcnJ1cHRQZW5kaW5nKGludGVycnVw dE1hc2spKSkKKwkJcmV0dXJuIGZhbHNlOworCisJQ2xlYXJJbnRlcnJ1cHQoaW50ZXJydXB0 TWFzayk7CisJcmV0dXJuIHRydWU7Cit9CisKK2V4dGVybiB2b2lkIFJhaXNlSW50ZXJydXB0 KEludGVycnVwdE1hc2sgaW50ZXJydXB0TWFzayk7CitleHRlcm4gdm9pZCBTZW5kSW50ZXJy dXB0KEludGVycnVwdE1hc2sgaW50ZXJydXB0TWFzaywgUHJvY051bWJlciBwZ3Byb2Nubyk7 CitleHRlcm4gaW50CVdhaXRJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNr LCBpbnQgd2FrZUV2ZW50cywgbG9uZyB0aW1lb3V0LAorCQkJCQkJICB1aW50MzIgd2FpdF9l dmVudF9pbmZvKTsKK2V4dGVybiBpbnQJV2FpdEludGVycnVwdE9yU29ja2V0KEludGVycnVw dE1hc2sgaW50ZXJydXB0TWFzaywgaW50IHdha2VFdmVudHMsIHBnc29ja2V0IHNvY2ssCisJ CQkJCQkJCSAgbG9uZyB0aW1lb3V0LCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKK2V4dGVy biB2b2lkIFN3aXRjaFRvTG9jYWxJbnRlcnJ1cHRzKHZvaWQpOworZXh0ZXJuIHZvaWQgU3dp dGNoVG9TaGFyZWRJbnRlcnJ1cHRzKHZvaWQpOworZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZUlu dGVycnVwdFdhaXRTZXQodm9pZCk7CisKK3R5cGVkZWYgdm9pZCAoKnBnX2ludGVycnVwdF9o YW5kbGVyX3QpICh2b2lkKTsKK2V4dGVybiB2b2lkIFNldEludGVycnVwdEhhbmRsZXIoSW50 ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrLCBwZ19pbnRlcnJ1cHRfaGFuZGxlcl90IGhhbmRs ZXIpOworCitleHRlcm4gdm9pZCBFbmFibGVJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBpbnRl cnJ1cHRNYXNrKTsKK2V4dGVybiB2b2lkIERpc2FibGVJbnRlcnJ1cHQoSW50ZXJydXB0TWFz ayBpbnRlcnJ1cHRNYXNrKTsKKworLyogZm9yIGV4dGVuc2lvbnMgKi8KK2V4dGVybiBJbnRl cnJ1cHRNYXNrIFJlcXVlc3RBZGRpbkludGVycnVwdCh2b2lkKTsKKworLyogU3RhbmRhcmQg aW50ZXJydXB0IGhhbmRsZXJzLiBEZWZpbmVkIGluIHRjb3AvcG9zdGdyZXMuYyAqLworZXh0 ZXJuIHZvaWQgU2V0U3RhbmRhcmRJbnRlcnJ1cHRIYW5kbGVycyh2b2lkKTsKKworZXh0ZXJu IHZvaWQgUHJvY2Vzc1F1ZXJ5Q2FuY2VsSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQg UHJvY2Vzc1Rlcm1pbmF0ZUludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3ND b25maWdSZWxvYWRJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzQXN5bmNO b3RpZnlJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzSWRsZVN0YXRzVGlt ZW91dEludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NSZWNvdmVyeUNvbmZs aWN0SW50ZXJydXB0cyh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NUcmFuc2FjdGlvblRp bWVvdXRJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzSWRsZVNlc3Npb25U aW1lb3V0SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0lkbGVJblRyYW5z YWN0aW9uU2Vzc2lvblRpbWVvdXRJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9j ZXNzQ2xpZW50Q2hlY2tUaW1lb3V0SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJv Y2Vzc0NsaWVudENvbm5lY3Rpb25Mb3N0KHZvaWQpOworCitleHRlcm4gdm9pZCBQcm9jZXNz QXV4UHJvY2Vzc1NodXRkb3duSW50ZXJydXB0KHZvaWQpOworCisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgorICoJICBDSEVDS19GT1JfSU5URVJSVVBUUygpIGFuZCBmcmllbmRzCisg KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0 aWxlIEludGVycnVwdE1hc2sgRW5hYmxlZEludGVycnVwdHNNYXNrOworZXh0ZXJuIFBHRExM SU1QT1JUIHZvbGF0aWxlIEludGVycnVwdE1hc2sgQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzazsK KworZXh0ZXJuIHZvaWQgUHJvY2Vzc0ludGVycnVwdHModm9pZCk7CisKKy8qIFRlc3Qgd2hl dGhlciBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZyAqLworI2lmbmRlZiBXSU4zMgorI2RlZmlu ZSBJTlRFUlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKG1hc2spIFwKKwkodW5saWtlbHkoSW50 ZXJydXB0UGVuZGluZyhtYXNrKSkpCisjZWxzZQorI2RlZmluZSBJTlRFUlJVUFRTX1BFTkRJ TkdfQ09ORElUSU9OKG1hc2spIFwKKwkodW5saWtlbHkoVU5CTE9DS0VEX1NJR05BTF9RVUVV RSgpKSA/IFwKKwkgcGd3aW4zMl9kaXNwYXRjaF9xdWV1ZWRfc2lnbmFscygpIDogKHZvaWQp IDAsCVwKKwkgdW5saWtlbHkoSW50ZXJydXB0UGVuZGluZyhtYXNrKSkpCisjZW5kaWYKKwor LyoKKyAqIElzIFByb2Nlc3NJbnRlcnJ1cHRzKCkgZ3VhcmFudGVlZCB0byBjbGVhciBhbGwg dGhlIGJpdHMgaW4gJ21hc2snPworICoKKyAqIChUaGUgaW50ZXJydXB0IGhhbmRsZXIgbWF5 IHJlLXJhaXNlIHRoZSBpbnRlcnJ1cHQsIHRob3VnaCkKKyAqLworI2RlZmluZSBJTlRFUlJV UFRTX0NBTl9CRV9QUk9DRVNTRUQobWFzaykgXAorCSgoKG1hc2spICYgQ2hlY2tGb3JJbnRl cnJ1cHRzTWFzaykgPT0gKG1hc2spKQorCisvKiBTZXJ2aWNlIGludGVycnVwdCwgaWYgb25l IGlzIHBlbmRpbmcgYW5kIGl0J3Mgc2FmZSB0byBzZXJ2aWNlIGl0IG5vdyAqLworI2RlZmlu ZSBDSEVDS19GT1JfSU5URVJSVVBUUygpCQkJCQlcCitkbyB7IFwKKwlpZiAoSU5URVJSVVBU U19QRU5ESU5HX0NPTkRJVElPTihDaGVja0ZvckludGVycnVwdHNNYXNrKSkgXAorCQlQcm9j ZXNzSW50ZXJydXB0cygpOwkJCQkJCQkJCQkJXAorfSB3aGlsZSgwKQorCisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICoJICBDcml0aWNhbCBzZWN0aW9uIGFuZCBpbnRlcnJ1cHQg aG9sZG9mZiBtZWNoYW5pc20KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogdGhl c2UgYXJlIG1hcmtlZCB2b2xhdGlsZSBiZWNhdXNlIHRoZXkgYXJlIGV4YW1pbmVkIGJ5IHNp Z25hbCBoYW5kbGVyczogKi8KKy8qCisgKiBYWFg6IGlzIHRoYXQgc3RpbGwgdHJ1ZT8gU2hv dWxkIHdlIHVzZSBsb2NhbCB2YXJzIHRvIGF2b2lkIHJlcGVhdGVkIGFjY2VzcworICogZS5n LiBpbnNpZGUgUkVTVU1FX0lOVEVSUlVQVFMoKSA/CisgKi8KK2V4dGVybiBQR0RMTElNUE9S VCB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50OworZXh0ZXJuIFBHRExM SU1QT1JUIHZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50OworCitzdGF0aWMgaW5s aW5lIHZvaWQKK0hPTERfSU5URVJSVVBUUyh2b2lkKQoreworCUludGVycnVwdEhvbGRvZmZD b3VudCsrOworCUNoZWNrRm9ySW50ZXJydXB0c01hc2sgPSAoSW50ZXJydXB0TWFzaykgMDsK K30KKworc3RhdGljIGlubGluZSB2b2lkCitSRVNVTUVfSU5URVJSVVBUUyh2b2lkKQorewor CUFzc2VydChDaGVja0ZvckludGVycnVwdHNNYXNrID09IDApOworCUFzc2VydChJbnRlcnJ1 cHRIb2xkb2ZmQ291bnQgPiAwKTsKKwlJbnRlcnJ1cHRIb2xkb2ZmQ291bnQtLTsKKwlpZiAo SW50ZXJydXB0SG9sZG9mZkNvdW50ID09IDAgJiYgQ3JpdFNlY3Rpb25Db3VudCA9PSAwKQor CQlDaGVja0ZvckludGVycnVwdHNNYXNrID0gRW5hYmxlZEludGVycnVwdHNNYXNrOworCWVs c2UKKwkJQXNzZXJ0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgPT0gMCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAorU1RBUlRfQ1JJVF9TRUNUSU9OKHZvaWQpCit7CisJQ3JpdFNlY3Rp b25Db3VudCsrOworCUNoZWNrRm9ySW50ZXJydXB0c01hc2sgPSAwOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQKK0VORF9DUklUX1NFQ1RJT04odm9pZCkKK3sKKwlBc3NlcnQoQ3JpdFNl Y3Rpb25Db3VudCA+IDApOworCUNyaXRTZWN0aW9uQ291bnQtLTsKKwlpZiAoSW50ZXJydXB0 SG9sZG9mZkNvdW50ID09IDAgJiYgQ3JpdFNlY3Rpb25Db3VudCA9PSAwKQorCQlDaGVja0Zv ckludGVycnVwdHNNYXNrID0gRW5hYmxlZEludGVycnVwdHNNYXNrOworCWVsc2UKKwkJQXNz ZXJ0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgPT0gMCk7Cit9CisKKyNlbmRpZgkJCQkJCQkv KiBJUENfSU5URVJSVVBUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvaW50ZXJydXB0LmggYi9zcmMvaW5jbHVkZS9pcGMvc2lnbmFsX2hhbmRsZXJzLmgKc2lt aWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9p bnRlcnJ1cHQuaApyZW5hbWUgdG8gc3JjL2luY2x1ZGUvaXBjL3NpZ25hbF9oYW5kbGVycy5o CmluZGV4IGUxNDgyNjI2ZGZkLi5jYmU5MTQzY2ZkZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuaAorKysgYi9zcmMvaW5jbHVkZS9pcGMvc2lnbmFs X2hhbmRsZXJzLmgKQEAgLTIxLDEyICsyMSwxMCBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+ CiAKLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ29uZmlnUmVs b2FkUGVuZGluZzsKLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3Qg U2h1dGRvd25SZXF1ZXN0UGVuZGluZzsKLQotZXh0ZXJuIHZvaWQgUHJvY2Vzc01haW5Mb29w SW50ZXJydXB0cyh2b2lkKTsKK2V4dGVybiB2b2lkIFNldFBvc3RtYXN0ZXJDaGlsZFNpZ25h bEhhbmRsZXJzKHZvaWQpOwogZXh0ZXJuIHZvaWQgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1Jl bG9hZChTSUdOQUxfQVJHUyk7CiBleHRlcm4gdm9pZCBTaWduYWxIYW5kbGVyRm9yQ3Jhc2hF eGl0KFNJR05BTF9BUkdTKTsKIGV4dGVybiB2b2lkIFNpZ25hbEhhbmRsZXJGb3JTaHV0ZG93 blJlcXVlc3QoU0lHTkFMX0FSR1MpOworZXh0ZXJuIHZvaWQgU2lnbmFsSGFuZGxlckZvclF1 ZXJ5Q2FuY2VsKFNJR05BTF9BUkdTKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9saWJwcS9saWJwcS1iZS1mZS1oZWxwZXJzLmggYi9zcmMvaW5jbHVkZS9saWJwcS9s aWJwcS1iZS1mZS1oZWxwZXJzLmgKaW5kZXggODVkOGI2M2YwMTkuLjUzZDgwZjQwZDEwIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS1mZS1oZWxwZXJzLmgKKysr IGIvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUtZmUtaGVscGVycy5oCkBAIC0zMCwxMCAr MzAsOSBAQAogI2lmbmRlZiBMSUJQUV9CRV9GRV9IRUxQRVJTX0gKICNkZWZpbmUgTElCUFFf QkVfRkVfSEVMUEVSU19ICiAKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVk ZSAibGlicHEvbGlicHEtYmUtZmUuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJzdG9yYWdlL2ZkLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgogI2luY2x1 ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIK IApAQCAtMTY3LDggKzE2Niw4IEBAIGxpYnBxc3J2X2Nvbm5lY3RfaW50ZXJuYWwoUEdjb25u ICpjb25uLCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKQogCQlyZXR1cm47CiAKIAkvKgotCSAq IFdhaXRMYXRjaE9yU29ja2V0KCkgY2FuIGNvbmNlaXZhYmx5IGZhaWwsIGhhbmRsZSB0aGF0 IGNhc2UgaGVyZSBpbnN0ZWFkCi0JICogb2YgcmVxdWlyaW5nIGFsbCBjYWxsZXJzIHRvIGRv IHNvLgorCSAqIFdhaXRJbnRlcnJ1cHRPclNvY2tldCgpIGNhbiBjb25jZWl2YWJseSBmYWls LCBoYW5kbGUgdGhhdCBjYXNlIGhlcmUKKwkgKiBpbnN0ZWFkIG9mIHJlcXVpcmluZyBhbGwg Y2FsbGVycyB0byBkbyBzby4KIAkgKi8KIAlQR19UUlkoKTsKIAl7CkBAIC0xOTksMTggKzE5 OCwxNSBAQCBsaWJwcXNydl9jb25uZWN0X2ludGVybmFsKFBHY29ubiAqY29ubiwgdWludDMy IHdhaXRfZXZlbnRfaW5mbykKIAkJCWVsc2UKIAkJCQlpb19mbGFnID0gV0xfU09DS0VUX1dS SVRFQUJMRTsKIAotCQkJcmMgPSBXYWl0TGF0Y2hPclNvY2tldChNeUxhdGNoLAotCQkJCQkJ CQkgICBXTF9FWElUX09OX1BNX0RFQVRIIHwgV0xfTEFUQ0hfU0VUIHwgaW9fZmxhZywKLQkJ CQkJCQkJICAgUFFzb2NrZXQoY29ubiksCi0JCQkJCQkJCSAgIDAsCi0JCQkJCQkJCSAgIHdh aXRfZXZlbnRfaW5mbyk7CisJCQlyYyA9IFdhaXRJbnRlcnJ1cHRPclNvY2tldChDaGVja0Zv ckludGVycnVwdHNNYXNrLAorCQkJCQkJCQkJICAgV0xfRVhJVF9PTl9QTV9ERUFUSCB8IFdM X0lOVEVSUlVQVCB8IGlvX2ZsYWcsCisJCQkJCQkJCQkgICBQUXNvY2tldChjb25uKSwKKwkJ CQkJCQkJCSAgIDAsCisJCQkJCQkJCQkgICB3YWl0X2V2ZW50X2luZm8pOwogCiAJCQkvKiBJ bnRlcnJ1cHRlZD8gKi8KLQkJCWlmIChyYyAmIFdMX0xBVENIX1NFVCkKLQkJCXsKLQkJCQlS ZXNldExhdGNoKE15TGF0Y2gpOworCQkJaWYgKHJjICYgV0xfSU5URVJSVVBUKQogCQkJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCQl9CiAKIAkJCS8qIElmIHNvY2tldCBpcyByZWFk eSwgYWR2YW5jZSB0aGUgbGlicHEgc3RhdGUgbWFjaGluZSAqLwogCQkJaWYgKHJjICYgaW9f ZmxhZykKQEAgLTMyMCwxOSArMzE2LDE2IEBAIGxpYnBxc3J2X2dldF9yZXN1bHQoUEdjb25u ICpjb25uLCB1aW50MzIgd2FpdF9ldmVudF9pbmZvKQogCXsKIAkJaW50CQkJcmM7CiAKLQkJ cmMgPSBXYWl0TGF0Y2hPclNvY2tldChNeUxhdGNoLAotCQkJCQkJCSAgIFdMX0VYSVRfT05f UE1fREVBVEggfCBXTF9MQVRDSF9TRVQgfAotCQkJCQkJCSAgIFdMX1NPQ0tFVF9SRUFEQUJM RSwKLQkJCQkJCQkgICBQUXNvY2tldChjb25uKSwKLQkJCQkJCQkgICAwLAotCQkJCQkJCSAg IHdhaXRfZXZlbnRfaW5mbyk7CisJCXJjID0gV2FpdEludGVycnVwdE9yU29ja2V0KENoZWNr Rm9ySW50ZXJydXB0c01hc2ssCisJCQkJCQkJCSAgIFdMX0VYSVRfT05fUE1fREVBVEggfCBX TF9JTlRFUlJVUFQgfAorCQkJCQkJCQkgICBXTF9TT0NLRVRfUkVBREFCTEUsCisJCQkJCQkJ CSAgIFBRc29ja2V0KGNvbm4pLAorCQkJCQkJCQkgICAwLAorCQkJCQkJCQkgICB3YWl0X2V2 ZW50X2luZm8pOwogCiAJCS8qIEludGVycnVwdGVkPyAqLwotCQlpZiAocmMgJiBXTF9MQVRD SF9TRVQpCi0JCXsKLQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCWlmIChyYyAmIFdMX0lO VEVSUlVQVCkKIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCX0KIAogCQkvKiBDb25z dW1lIHdoYXRldmVyIGRhdGEgaXMgYXZhaWxhYmxlIGZyb20gdGhlIHNvY2tldCAqLwogCQlp ZiAoUFFjb25zdW1lSW5wdXQoY29ubikgPT0gMCkKQEAgLTM4Niw3ICszNzksNyBAQCBsaWJw cXNydl9jYW5jZWwoUEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBlbmR0aW1lKQogCQkJUG9z dGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBwb2xscmVzOwogCQkJVGltZXN0YW1wVHogbm93Owog CQkJbG9uZwkJY3VyX3RpbWVvdXQ7Ci0JCQlpbnQJCQl3YWl0RXZlbnRzID0gV0xfTEFUQ0hf U0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7CisJCQlpbnQJCQl3YWl0 RXZlbnRzID0gV0xfSU5URVJSVVBUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVB VEg7CiAKIAkJCXBvbGxyZXMgPSBQUWNhbmNlbFBvbGwoY2FuY2VsX2Nvbm4pOwogCQkJaWYg KHBvbGxyZXMgPT0gUEdSRVNfUE9MTElOR19PSykKQEAgLTQxNSwxMCArNDA4LDkgQEAgbGli cHFzcnZfY2FuY2VsKFBHY29ubiAqY29ubiwgVGltZXN0YW1wVHogZW5kdGltZSkKIAkJCX0K IAogCQkJLyogU2xlZXAgdW50aWwgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KLQkJCVdh aXRMYXRjaE9yU29ja2V0KE15TGF0Y2gsIHdhaXRFdmVudHMsIFBRY2FuY2VsU29ja2V0KGNh bmNlbF9jb25uKSwKLQkJCQkJCQkgIGN1cl90aW1lb3V0LCBQR19XQUlUX0NMSUVOVCk7Ci0K LQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlXYWl0SW50ZXJydXB0T3JTb2NrZXQoQ2hl Y2tGb3JJbnRlcnJ1cHRzTWFzaywgd2FpdEV2ZW50cywKKwkJCQkJCQkJICBQUWNhbmNlbFNv Y2tldChjYW5jZWxfY29ubiksCisJCQkJCQkJCSAgY3VyX3RpbWVvdXQsIFBHX1dBSVRfQ0xJ RU5UKTsKIAogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJfQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbGlicHEvbGlicHEuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmgK aW5kZXggNzkwNzI0YjZhMGIuLmI4MDkwNzNkNDhjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9saWJwcS9saWJwcS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmgKQEAgLTY0 LDcgKzY0LDcgQEAgZXh0ZXJuIGNvbnN0IFBHRExMSU1QT1JUIFBRY29tbU1ldGhvZHMgKlBx Q29tbU1ldGhvZHM7CiBleHRlcm4gUEdETExJTVBPUlQgV2FpdEV2ZW50U2V0ICpGZUJlV2Fp dFNldDsKIAogI2RlZmluZSBGZUJlV2FpdFNldFNvY2tldFBvcyAwCi0jZGVmaW5lIEZlQmVX YWl0U2V0TGF0Y2hQb3MgMQorI2RlZmluZSBGZUJlV2FpdFNldEludGVycnVwdFBvcyAxCiAj ZGVmaW5lIEZlQmVXYWl0U2V0TkV2ZW50cyAzCiAKIGV4dGVybiBpbnQJTGlzdGVuU2VydmVy UG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpob3N0TmFtZSwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2xpYnBxL3BxbXEuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL3BxbXEuaAppbmRl eCAzNjc4MGMwODE2ZS4uZWE5NmFlOTU0NWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xp YnBxL3BxbXEuaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9wcW1xLmgKQEAgLTE4LDcgKzE4 LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgogCiBleHRlcm4gdm9pZCBwcV9y ZWRpcmVjdF90b19zaG1fbXEoZHNtX3NlZ21lbnQgKnNlZywgc2htX21xX2hhbmRsZSAqbXFo KTsKLWV4dGVybiB2b2lkIHBxX3NldF9wYXJhbGxlbF9sZWFkZXIocGlkX3QgcGlkLCBQcm9j TnVtYmVyIHByb2NOdW1iZXIpOworZXh0ZXJuIHZvaWQgcHFfc2V0X3BhcmFsbGVsX2xlYWRl cihQcm9jTnVtYmVyIHByb2NOdW1iZXIpOwogCiBleHRlcm4gdm9pZCBwcV9wYXJzZV9lcnJv cm5vdGljZShTdHJpbmdJbmZvIG1zZywgRXJyb3JEYXRhICplZGF0YSk7CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL21lc29uLmJ1aWxkIGIvc3JjL2luY2x1ZGUvbWVzb24uYnVpbGQK aW5kZXggN2Q3MzRkOTJkYWIuLmRhODEyOTM1NWNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9tZXNvbi5idWlsZAorKysgYi9zcmMvaW5jbHVkZS9tZXNvbi5idWlsZApAQCAtMTM1LDYg KzEzNSw3IEBAIGhlYWRlcl9zdWJkaXJzID0gWwogICAnZXhlY3V0b3InLAogICAnZmVfdXRp bHMnLAogICAnZm9yZWlnbicsCisgICdpcGMnLAogICAnaml0JywKICAgJ2xpYicsCiAgICds aWJwcScsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCmluZGV4IGYxNmYzNTY1OWI5Li40NzZlNjBhNGQwNiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlzY2Fk bWluLmgKQEAgLTI4LDEzMiArMjgsMTUgQEAKICNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3Rh bXAuaCIgLyogZm9yIFRpbWVzdGFtcFR6ICovCiAjaW5jbHVkZSAicGd0aW1lLmgiCQkJCS8q IGZvciBwZ190aW1lX3QgKi8KIAotCi0jZGVmaW5lIEludmFsaWRQaWQJCQkJKC0xKQotCi0K LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgotICoJICBTeXN0ZW0gaW50ZXJydXB0IGFuZCBj cml0aWNhbCBzZWN0aW9uIGhhbmRsaW5nCi0gKgotICogVGhlcmUgYXJlIHR3byB0eXBlcyBv ZiBpbnRlcnJ1cHRzIHRoYXQgYSBydW5uaW5nIGJhY2tlbmQgbmVlZHMgdG8gYWNjZXB0Ci0g KiB3aXRob3V0IG1lc3NpbmcgdXAgaXRzIHN0YXRlOiBRdWVyeUNhbmNlbCAoU0lHSU5UKSBh bmQgUHJvY0RpZSAoU0lHVEVSTSkuCi0gKiBJbiBib3RoIGNhc2VzLCB3ZSBuZWVkIHRvIGJl IGFibGUgdG8gY2xlYW4gdXAgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24KLSAqIGdyYWNlZnVs bHksIHNvIHdlIGNhbid0IHJlc3BvbmQgdG8gdGhlIGludGVycnVwdCBpbnN0YW50YW5lb3Vz bHkgLS0tCi0gKiB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IGludGVybmFsIGRhdGEgc3Ry dWN0dXJlcyB3b3VsZCBiZSBzZWxmLWNvbnNpc3RlbnQKLSAqIGlmIHRoZSBjb2RlIGlzIGlu dGVycnVwdGVkIGF0IGFuIGFyYml0cmFyeSBpbnN0YW50LiAgSW5zdGVhZCwgdGhlIHNpZ25h bAotICogaGFuZGxlcnMgc2V0IGZsYWdzIHRoYXQgYXJlIGNoZWNrZWQgcGVyaW9kaWNhbGx5 IGR1cmluZyBleGVjdXRpb24uCi0gKgotICogVGhlIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkg bWFjcm8gaXMgY2FsbGVkIGF0IHN0cmF0ZWdpY2FsbHkgbG9jYXRlZCBzcG90cwotICogd2hl cmUgaXQgaXMgbm9ybWFsbHkgc2FmZSB0byBhY2NlcHQgYSBjYW5jZWwgb3IgZGllIGludGVy cnVwdC4gIEluIHNvbWUKLSAqIGNhc2VzLCB3ZSBpbnZva2UgQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKSBpbnNpZGUgbG93LWxldmVsIHN1YnJvdXRpbmVzIHRoYXQKLSAqIG1pZ2h0IHNvbWV0 aW1lcyBiZSBjYWxsZWQgaW4gY29udGV4dHMgdGhhdCBkbyAqbm90KiB3YW50IHRvIGFsbG93 IGEgY2FuY2VsCi0gKiBvciBkaWUgaW50ZXJydXB0LiAgVGhlIEhPTERfSU5URVJSVVBUUygp IGFuZCBSRVNVTUVfSU5URVJSVVBUUygpIG1hY3JvcwotICogYWxsb3cgY29kZSB0byBlbnN1 cmUgdGhhdCBubyBjYW5jZWwgb3IgZGllIGludGVycnVwdCB3aWxsIGJlIGFjY2VwdGVkLAot ICogZXZlbiBpZiBDSEVDS19GT1JfSU5URVJSVVBUUygpIGdldHMgY2FsbGVkIGluIGEgc3Vi cm91dGluZS4gIFRoZSBpbnRlcnJ1cHQKLSAqIHdpbGwgYmUgaGVsZCBvZmYgdW50aWwgQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKSBpcyBkb25lIG91dHNpZGUgYW55Ci0gKiBIT0xEX0lOVEVS UlVQVFMoKSAuLi4gUkVTVU1FX0lOVEVSUlVQVFMoKSBzZWN0aW9uLgotICoKLSAqIFRoZXJl IGlzIGFsc28gYSBtZWNoYW5pc20gdG8gcHJldmVudCBxdWVyeSBjYW5jZWwgaW50ZXJydXB0 cywgd2hpbGUgc3RpbGwKLSAqIGFsbG93aW5nIGRpZSBpbnRlcnJ1cHRzOiBIT0xEX0NBTkNF TF9JTlRFUlJVUFRTKCkgYW5kCi0gKiBSRVNVTUVfQ0FOQ0VMX0lOVEVSUlVQVFMoKS4KLSAq Ci0gKiBOb3RlIHRoYXQgUHJvY2Vzc0ludGVycnVwdHMoKSBoYXMgYWxzbyBhY3F1aXJlZCBh IG51bWJlciBvZiB0YXNrcyB0aGF0Ci0gKiBkbyBub3QgbmVjZXNzYXJpbHkgY2F1c2UgYSBx dWVyeS1jYW5jZWwtb3ItZGllIHJlc3BvbnNlLiAgSGVuY2UsIGl0J3MKLSAqIHBvc3NpYmxl IHRoYXQgaXQgd2lsbCBqdXN0IGNsZWFyIEludGVycnVwdFBlbmRpbmcgYW5kIHJldHVybi4K LSAqCi0gKiBJTlRFUlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKCkgY2FuIGJlIGNoZWNrZWQg dG8gc2VlIHdoZXRoZXIgYW4KLSAqIGludGVycnVwdCBuZWVkcyB0byBiZSBzZXJ2aWNlZCwg d2l0aG91dCB0cnlpbmcgdG8gZG8gc28gaW1tZWRpYXRlbHkuCi0gKiBTb21lIGNhbGxlcnMg YXJlIGFsc28gaW50ZXJlc3RlZCBpbiBJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSwK LSAqIHdoaWNoIHRlbGxzIHdoZXRoZXIgUHJvY2Vzc0ludGVycnVwdHMgaXMgc3VyZSB0byBj bGVhciB0aGUgaW50ZXJydXB0LgotICoKLSAqIFNwZWNpYWwgbWVjaGFuaXNtcyBhcmUgdXNl ZCB0byBsZXQgYW4gaW50ZXJydXB0IGJlIGFjY2VwdGVkIHdoZW4gd2UgYXJlCi0gKiB3YWl0 aW5nIGZvciBhIGxvY2sgb3Igd2hlbiB3ZSBhcmUgd2FpdGluZyBmb3IgY29tbWFuZCBpbnB1 dCAoYnV0LCBvZgotICogY291cnNlLCBvbmx5IGlmIHRoZSBpbnRlcnJ1cHQgaG9sZG9mZiBj b3VudGVyIGlzIHplcm8pLiAgU2VlIHRoZQotICogcmVsYXRlZCBjb2RlIGZvciBkZXRhaWxz LgotICoKLSAqIEEgbG9zdCBjb25uZWN0aW9uIGlzIGhhbmRsZWQgc2ltaWxhcmx5LCBhbHRo b3VnaCB0aGUgbG9zcyBvZiBjb25uZWN0aW9uCi0gKiBkb2VzIG5vdCByYWlzZSBhIHNpZ25h bCwgYnV0IGlzIGRldGVjdGVkIHdoZW4gd2UgZmFpbCB0byB3cml0ZSB0byB0aGUKLSAqIHNv Y2tldC4gSWYgdGhlcmUgd2FzIGEgc2lnbmFsIGZvciBhIGJyb2tlbiBjb25uZWN0aW9uLCB3 ZSBjb3VsZCBtYWtlIHVzZSBvZgotICogaXQgYnkgc2V0dGluZyBDbGllbnRDb25uZWN0aW9u TG9zdCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuCi0gKgotICogQSByZWxhdGVkLCBidXQgY29u Y2VwdHVhbGx5IGRpc3RpbmN0LCBtZWNoYW5pc20gaXMgdGhlICJjcml0aWNhbCBzZWN0aW9u IgotICogbWVjaGFuaXNtLiAgQSBjcml0aWNhbCBzZWN0aW9uIG5vdCBvbmx5IGhvbGRzIG9m ZiBjYW5jZWwvZGllIGludGVycnVwdHMsCi0gKiBidXQgY2F1c2VzIGFueSBlcmVwb3J0KEVS Uk9SKSBvciBlcmVwb3J0KEZBVEFMKSB0byBiZWNvbWUgZXJlcG9ydChQQU5JQykKLSAqIC0t LSB0aGF0IGlzLCBhIHN5c3RlbS13aWRlIHJlc2V0IGlzIGZvcmNlZC4gIE5lZWRsZXNzIHRv IHNheSwgb25seSByZWFsbHkKLSAqICpjcml0aWNhbCogY29kZSBzaG91bGQgYmUgbWFya2Vk IGFzIGEgY3JpdGljYWwgc2VjdGlvbiEJQ3VycmVudGx5LCB0aGlzCi0gKiBtZWNoYW5pc20g aXMgb25seSB1c2VkIGZvciBYTE9HLXJlbGF0ZWQgY29kZS4KLSAqCi0gKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0KLS8qIGluIGdsb2JhbHMuYyAqLwotLyogdGhlc2UgYXJlIG1hcmtl ZCB2b2xhdGlsZSBiZWNhdXNlIHRoZXkgYXJlIHNldCBieSBzaWduYWwgaGFuZGxlcnM6ICov Ci1leHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IEludGVycnVwdFBl bmRpbmc7Ci1leHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFF1ZXJ5 Q2FuY2VsUGVuZGluZzsKLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgUHJvY0RpZVBlbmRpbmc7Ci1leHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0 b21pY190IElkbGVJblRyYW5zYWN0aW9uU2Vzc2lvblRpbWVvdXRQZW5kaW5nOwotZXh0ZXJu IFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBUcmFuc2FjdGlvblRpbWVvdXRQ ZW5kaW5nOwotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxl U2Vzc2lvblRpbWVvdXRQZW5kaW5nOwotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmc7Ci1leHRlcm4gUEdETExJTVBP UlQgdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nOwotZXh0 ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlU3RhdHNVcGRhdGVU aW1lb3V0UGVuZGluZzsKLQotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBDaGVja0NsaWVudENvbm5lY3Rpb25QZW5kaW5nOwotZXh0ZXJuIFBHRExMSU1QT1JU IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9zdDsKLQotLyogdGhl c2UgYXJlIG1hcmtlZCB2b2xhdGlsZSBiZWNhdXNlIHRoZXkgYXJlIGV4YW1pbmVkIGJ5IHNp Z25hbCBoYW5kbGVyczogKi8KLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSB1aW50MzIg SW50ZXJydXB0SG9sZG9mZkNvdW50OwotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHVp bnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudDsKLWV4dGVybiBQR0RMTElNUE9SVCB2b2xh dGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3VudDsKLQotLyogaW4gdGNvcC9wb3N0Z3Jlcy5j ICovCi1leHRlcm4gdm9pZCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKTsKLQotLyogVGVzdCB3 aGV0aGVyIGFuIGludGVycnVwdCBpcyBwZW5kaW5nICovCi0jaWZuZGVmIFdJTjMyCi0jZGVm aW5lIElOVEVSUlVQVFNfUEVORElOR19DT05ESVRJT04oKSBcCi0JKHVubGlrZWx5KEludGVy cnVwdFBlbmRpbmcpKQotI2Vsc2UKLSNkZWZpbmUgSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJ VElPTigpIFwKLQkodW5saWtlbHkoVU5CTE9DS0VEX1NJR05BTF9RVUVVRSgpKSA/IFwKLQkg cGd3aW4zMl9kaXNwYXRjaF9xdWV1ZWRfc2lnbmFscygpIDogKHZvaWQpIDAsIFwKLQkgdW5s aWtlbHkoSW50ZXJydXB0UGVuZGluZykpCisvKgorICogWFhYOiBtYW55IGZpbGVzIGluY2x1 ZGUgbWlzY2FkbWluLmggZm9yIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuIEtlZXAgdGhlbQor ICogd29ya2luZyB3aXRob3V0IGNoYW5nZXMKKyAqLworI2lmbmRlZiBGUk9OVEVORAorI2lu Y2x1ZGUgImlwYy9pbnRlcnJ1cHQuaCIKICNlbmRpZgogCi0vKiBTZXJ2aWNlIGludGVycnVw dCwgaWYgb25lIGlzIHBlbmRpbmcgYW5kIGl0J3Mgc2FmZSB0byBzZXJ2aWNlIGl0IG5vdyAq LwotI2RlZmluZSBDSEVDS19GT1JfSU5URVJSVVBUUygpIFwKLWRvIHsgXAotCWlmIChJTlRF UlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKCkpIFwKLQkJUHJvY2Vzc0ludGVycnVwdHMoKTsg XAotfSB3aGlsZSgwKQotCi0vKiBJcyBQcm9jZXNzSW50ZXJydXB0cygpIGd1YXJhbnRlZWQg dG8gY2xlYXIgSW50ZXJydXB0UGVuZGluZz8gKi8KLSNkZWZpbmUgSU5URVJSVVBUU19DQU5f QkVfUFJPQ0VTU0VEKCkgXAotCShJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPT0gMCAmJiBDcml0 U2VjdGlvbkNvdW50ID09IDAgJiYgXAotCSBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9PSAw KQotCi0jZGVmaW5lIEhPTERfSU5URVJSVVBUUygpICAoSW50ZXJydXB0SG9sZG9mZkNvdW50 KyspCi0KLSNkZWZpbmUgUkVTVU1FX0lOVEVSUlVQVFMoKSBcCi1kbyB7IFwKLQlBc3NlcnQo SW50ZXJydXB0SG9sZG9mZkNvdW50ID4gMCk7IFwKLQlJbnRlcnJ1cHRIb2xkb2ZmQ291bnQt LTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIEhPTERfQ0FOQ0VMX0lOVEVSUlVQVFMoKSAg KFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50KyspCi0KLSNkZWZpbmUgUkVTVU1FX0NBTkNFTF9J TlRFUlJVUFRTKCkgXAotZG8geyBcCi0JQXNzZXJ0KFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50 ID4gMCk7IFwKLQlRdWVyeUNhbmNlbEhvbGRvZmZDb3VudC0tOyBcCi19IHdoaWxlKDApCi0K LSNkZWZpbmUgU1RBUlRfQ1JJVF9TRUNUSU9OKCkgIChDcml0U2VjdGlvbkNvdW50KyspCi0K LSNkZWZpbmUgRU5EX0NSSVRfU0VDVElPTigpIFwKLWRvIHsgXAotCUFzc2VydChDcml0U2Vj dGlvbkNvdW50ID4gMCk7IFwKLQlDcml0U2VjdGlvbkNvdW50LS07IFwKLX0gd2hpbGUoMCkK KyNkZWZpbmUgSW52YWxpZFBpZAkJCQkoLTEpCiAKIAogLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCkBAIC0xOTEsNyArNzQsNiBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IE15UHJvY1Bp ZDsKIGV4dGVybiBQR0RMTElNUE9SVCBwZ190aW1lX3QgTXlTdGFydFRpbWU7CiBleHRlcm4g UEdETExJTVBPUlQgVGltZXN0YW1wVHogTXlTdGFydFRpbWVzdGFtcDsKIGV4dGVybiBQR0RM TElNUE9SVCBzdHJ1Y3QgUG9ydCAqTXlQcm9jUG9ydDsKLWV4dGVybiBQR0RMTElNUE9SVCBz dHJ1Y3QgTGF0Y2ggKk15TGF0Y2g7CiBleHRlcm4gUEdETExJTVBPUlQgdWludDggTXlDYW5j ZWxLZXlbXTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTXlDYW5jZWxLZXlMZW5ndGg7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IE15UE1DaGlsZFNsb3Q7CkBAIC0zMjQsOSArMjA2LDYg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKkRhdGFiYXNlUGF0aDsKIC8qIG5vdyBpbiB1 dGlscy9pbml0L21pc2Npbml0LmMgKi8KIGV4dGVybiB2b2lkIEluaXRQb3N0bWFzdGVyQ2hp bGQodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hh ciAqYXJndjApOwotZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3NMb2NhbExhdGNoKHZvaWQpOwot ZXh0ZXJuIHZvaWQgU3dpdGNoVG9TaGFyZWRMYXRjaCh2b2lkKTsKLWV4dGVybiB2b2lkIFN3 aXRjaEJhY2tUb0xvY2FsTGF0Y2godm9pZCk7CiAKIC8qCiAgKiBNeUJhY2tlbmRUeXBlIGlu ZGljYXRlcyB3aGF0IGtpbmQgb2YgYSBiYWNrZW5kIHRoaXMgaXMuCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFz dGVyL2Jnd29ya2VyLmgKaW5kZXggNzQxOGU2NGUxOWIuLjUzYWUxMDcyMmRlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyLmgKKysrIGIvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlci5oCkBAIC02Niw2ICs2NiwxNCBAQAogICovCiAjZGVm aW5lIEJHV09SS0VSX0lOVEVSUlVQVElCTEUJCQkweDAwMDQKIAorLyoKKyAqIER5bmFtaWMg d29ya2VycyBjcmVhdGVkIHdpdGggc2hhcmVkIG1lbW9yeSBhY2Nlc3MgdXN1YWxseSBzZW5k IGFuIGludGVycnVwdAorICogdG8gdGhlIGNyZWF0aW5nIGJhY2tlbmQgd2hlbiB0aGV5IHN0 YXJ0IGFuZCBzdG9wLCBhbGxvd2luZworICogV2FpdEZvckJhY2tncm91bmRXb3JrZXJ7U3Rh cnR1cCxTaHV0ZG93bn0oKSB0byB3b3JrLiAgU3VjaCBub3RpZmljYXRpb25zCisgKiBjYW4g YmUgc3VwcHJlc3NlZCB3aXRoIHRoaXMgZmxhZy4KKyAqLworI2RlZmluZSBCR1dPUktFUl9O T19OT1RJRlkJCQkJCQkJMHgwMDA4CisKIC8qCiAgKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW50 ZXJuYWxseSBmb3IgcGFyYWxsZWwgcXVlcmllcywgdG8ga2VlcCB0cmFjayBvZiB0aGUKICAq IG51bWJlciBvZiBhY3RpdmUgcGFyYWxsZWwgd29ya2VycyBhbmQgbWFrZSBzdXJlIHdlIG5l dmVyIGxhdW5jaCBtb3JlIHRoYW4KQEAgLTEwNCw3ICsxMTIsNyBAQCB0eXBlZGVmIHN0cnVj dCBCYWNrZ3JvdW5kV29ya2VyCiAJY2hhcgkJYmd3X2Z1bmN0aW9uX25hbWVbQkdXX01BWExF Tl07CiAJRGF0dW0JCWJnd19tYWluX2FyZzsKIAljaGFyCQliZ3dfZXh0cmFbQkdXX0VYVFJB TEVOXTsKLQlwaWRfdAkJYmd3X25vdGlmeV9waWQ7IC8qIFNJR1VTUjEgdGhpcyBiYWNrZW5k IG9uIHN0YXJ0L3N0b3AgKi8KKwlwaWRfdAkJYmd3X25vdGlmeV9waWQ7IC8qIG5vdCB1c2Vk ICovCiB9IEJhY2tncm91bmRXb3JrZXI7CiAKIHR5cGVkZWYgZW51bSBCZ3dIYW5kbGVTdGF0 dXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJu YWxzLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCmlu ZGV4IGI3ODljYWY0MDM0Li44ZGNhOWY4NDMzOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVk ZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJvY251 bWJlci5oIgogCiAvKiBHVUMgb3B0aW9ucyAqLwogCkBAIC00Nyw5ICs0OCwxMCBAQCBleHRl cm4gdm9pZCBCYWNrZ3JvdW5kV29ya2VyU3RhdGVDaGFuZ2UoYm9vbCBhbGxvd19uZXdfd29y a2Vycyk7CiBleHRlcm4gdm9pZCBGb3JnZXRCYWNrZ3JvdW5kV29ya2VyKFJlZ2lzdGVyZWRC Z1dvcmtlciAqcncpOwogZXh0ZXJuIHZvaWQgUmVwb3J0QmFja2dyb3VuZFdvcmtlclBJRChS ZWdpc3RlcmVkQmdXb3JrZXIgKnJ3KTsKIGV4dGVybiB2b2lkIFJlcG9ydEJhY2tncm91bmRX b3JrZXJFeGl0KFJlZ2lzdGVyZWRCZ1dvcmtlciAqcncpOwotZXh0ZXJuIHZvaWQgQmFja2dy b3VuZFdvcmtlclN0b3BOb3RpZmljYXRpb25zKHBpZF90IHBpZCk7CitleHRlcm4gdm9pZCBC YWNrZ3JvdW5kV29ya2VyU3RvcE5vdGlmaWNhdGlvbnMoaW50IHBtY2hpbGQpOwogZXh0ZXJu IHZvaWQgRm9yZ2V0VW5zdGFydGVkQmFja2dyb3VuZFdvcmtlcnModm9pZCk7CiBleHRlcm4g dm9pZCBSZXNldEJhY2tncm91bmRXb3JrZXJDcmFzaFRpbWVzKHZvaWQpOworZXh0ZXJuIFBy b2NOdW1iZXIgR2V0Tm90aWZ5UHJvY051bWJlckZvclJlZ2lzdGVyZWRXb3JrZXIoUmVnaXN0 ZXJlZEJnV29ya2VyICpydyk7CiAKIC8qIEVudHJ5IHBvaW50IGZvciBiYWNrZ3JvdW5kIHdv cmtlciBwcm9jZXNzZXMgKi8KIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIEJhY2tncm91bmRX b3JrZXJNYWluKGNvbnN0IHZvaWQgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9zdGFydHVwLmgg Yi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N0YXJ0dXAuaAppbmRleCA0ZDFlMTIxMzFkMy4u ZGZiMmIwYjY1Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1 cC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oCkBAIC0yNSwxMiAr MjUsMTAgQEAKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBsb2dfc3RhcnR1cF9wcm9ncmVz c19pbnRlcnZhbDsKIAotZXh0ZXJuIHZvaWQgUHJvY2Vzc1N0YXJ0dXBQcm9jSW50ZXJydXB0 cyh2b2lkKTsKK2V4dGVybiB2b2lkIFN0YXJ0dXBQcm9jQ2hlY2tQb3N0bWFzdGVyRGVhdGgo dm9pZCk7CiBwZ19ub3JldHVybiBleHRlcm4gdm9pZCBTdGFydHVwUHJvY2Vzc01haW4oY29u c3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CiBleHRl cm4gdm9pZCBQcmVSZXN0b3JlQ29tbWFuZCh2b2lkKTsKIGV4dGVybiB2b2lkIFBvc3RSZXN0 b3JlQ29tbWFuZCh2b2lkKTsKLWV4dGVybiBib29sIElzUHJvbW90ZVNpZ25hbGVkKHZvaWQp OwotZXh0ZXJuIHZvaWQgUmVzZXRQcm9tb3RlU2lnbmFsZWQodm9pZCk7CiAKIGV4dGVybiB2 b2lkIGVuYWJsZV9zdGFydHVwX3Byb2dyZXNzX3RpbWVvdXQodm9pZCk7CiBleHRlcm4gdm9p ZCBkaXNhYmxlX3N0YXJ0dXBfcHJvZ3Jlc3NfdGltZW91dCh2b2lkKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaAppbmRleCA3ZDc0OGEyOGRhOC4uMzgyMjY5 MDAxY2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3Jr ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKQEAg LTEyLDEwICsxMiw2IEBACiAjaWZuZGVmIExPR0lDQUxXT1JLRVJfSAogI2RlZmluZSBMT0dJ Q0FMV09SS0VSX0gKIAotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1leHRlcm4gUEdETExJTVBP UlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZzsK LQogZXh0ZXJuIHZvaWQgQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsKIGV4dGVy biB2b2lkIFBhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKTsKIGV4dGVy biB2b2lkIFRhYmxlU3luY1dvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpOwpAQCAtMjQsNyAr MjAsNiBAQCBleHRlcm4gdm9pZCBTZXF1ZW5jZVN5bmNXb3JrZXJNYWluKERhdHVtIG1haW5f YXJnKTsKIGV4dGVybiBib29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKIGV4dGVybiBib29s IElzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIodm9pZCk7CiAKLWV4dGVybiB2b2lkIEhh bmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJydXB0KHZvaWQpOwogZXh0ZXJuIHZvaWQg UHJvY2Vzc1BhcmFsbGVsQXBwbHlNZXNzYWdlcyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgTG9n aWNhbFJlcFdvcmtlcnNXYWtldXBBdENvbW1pdChPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxzZW5kZXIuaAppbmRleCBhNGRmM2I4ZTBhZS4uNjliOTViYjI3ZWMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5oCkBAIC00Niw3ICs0Niw2IEBAIGV4 dGVybiB2b2lkIFdhbFNuZFNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFdhbFNuZFdh a2V1cChib29sIHBoeXNpY2FsLCBib29sIGxvZ2ljYWwpOwogZXh0ZXJuIHZvaWQgV2FsU25k SW5pdFN0b3BwaW5nKHZvaWQpOwogZXh0ZXJuIHZvaWQgV2FsU25kV2FpdFN0b3BwaW5nKHZv aWQpOwotZXh0ZXJuIHZvaWQgSGFuZGxlV2FsU25kSW5pdFN0b3BwaW5nKHZvaWQpOwogZXh0 ZXJuIHZvaWQgV2FsU25kUnFzdEZpbGVSZWxvYWQodm9pZCk7CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXJfcHJpdmF0ZS5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyX3ByaXZhdGUuaAppbmRleCA1ZGU2NzRkNTQx MC4uYzE4YjY0MzU5ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dh bHNlbmRlcl9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2Vu ZGVyX3ByaXZhdGUuaApAQCAtNDAsNiArNDAsOCBAQCB0eXBlZGVmIGVudW0gV2FsU25kU3Rh dGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgV2FsU25kCiB7CisJUHJvY051bWJlcglwZ3Byb2Nu bzsJCS8qIHRoaXMgd2Fsc2VuZGVyJ3MgUHJvY051bWJlciwgb3IgaW52YWxpZCBpZgorCQkJ CQkJCQkgKiBub3QgYWN0aXZlICovCiAJcGlkX3QJCXBpZDsJCQkvKiB0aGlzIHdhbHNlbmRl cidzIFBJRCwgb3IgMCBpZiBub3QgYWN0aXZlICovCiAKIAlXYWxTbmRTdGF0ZSBzdGF0ZTsJ CQkvKiB0aGlzIHdhbHNlbmRlcidzIHN0YXRlICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IDRlY2JkY2ZhZGFjLi5kMzY4YmM2MDUzNiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTc5 LDkgKzc5LDEwIEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBXb3JrZXIKIAlGaWxlU2V0 ICAgICpzdHJlYW1fZmlsZXNldDsKIAogCS8qCi0JICogUElEIG9mIGxlYWRlciBhcHBseSB3 b3JrZXIgaWYgdGhpcyBzbG90IGlzIHVzZWQgZm9yIGEgcGFyYWxsZWwgYXBwbHkKLQkgKiB3 b3JrZXIsIEludmFsaWRQaWQgb3RoZXJ3aXNlLgorCSAqIExlYWRlciBhcHBseSB3b3JrZXIg aWYgdGhpcyBzbG90IGlzIHVzZWQgZm9yIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLAorCSAq IElOVkFMSURfUFJPQ19OVU1CRVIvSW52YWxpZFBpZCBvdGhlcndpc2UuCiAJICovCisJUHJv Y051bWJlcglsZWFkZXJfcGdwcm9jbm87CiAJcGlkX3QJCWxlYWRlcl9waWQ7CiAKIAkvKiBJ bmRpY2F0ZXMgd2hldGhlciBhcHBseSBjYW4gYmUgcGVyZm9ybWVkIGluIHBhcmFsbGVsLiAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sYXRjaC5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9sYXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmRh ZGM4Njk1OS4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sYXRjaC5o CisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICoKLSAqIGxhdGNoLmgKLSAqCSAgUm91dGluZXMgZm9yIGludGVycHJvY2VzcyBsYXRj aGVzCi0gKgotICogQSBsYXRjaCBpcyBhIGJvb2xlYW4gdmFyaWFibGUsIHdpdGggb3BlcmF0 aW9ucyB0aGF0IGxldCBwcm9jZXNzZXMgc2xlZXAKLSAqIHVudGlsIGl0IGlzIHNldC4gQSBs YXRjaCBjYW4gYmUgc2V0IGZyb20gYW5vdGhlciBwcm9jZXNzLCBvciBhIHNpZ25hbAotICog aGFuZGxlciB3aXRoaW4gdGhlIHNhbWUgcHJvY2Vzcy4KLSAqCi0gKiBUaGUgbGF0Y2ggaW50 ZXJmYWNlIGlzIGEgcmVsaWFibGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBjb21tb24gcGF0dGVy biBvZgotICogdXNpbmcgcGdfdXNsZWVwKCkgb3Igc2VsZWN0KCkgdG8gd2FpdCB1bnRpbCBh IHNpZ25hbCBhcnJpdmVzLCB3aGVyZSB0aGUKLSAqIHNpZ25hbCBoYW5kbGVyIHNldHMgYSBm bGFnIHZhcmlhYmxlLiBCZWNhdXNlIG9uIHNvbWUgcGxhdGZvcm1zIGFuCi0gKiBpbmNvbWlu ZyBzaWduYWwgZG9lc24ndCBpbnRlcnJ1cHQgc2xlZXAsIGFuZCBldmVuIG9uIHBsYXRmb3Jt cyB3aGVyZSBpdAotICogZG9lcyB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIGlmIHRoZSBz aWduYWwgYXJyaXZlcyBqdXN0IGJlZm9yZQotICogZW50ZXJpbmcgdGhlIHNsZWVwLCB0aGUg Y29tbW9uIHBhdHRlcm4gbXVzdCBwZXJpb2RpY2FsbHkgd2FrZSB1cCBhbmQKLSAqIHBvbGwg dGhlIGZsYWcgdmFyaWFibGUuIFRoZSBwc2VsZWN0KCkgc3lzdGVtIGNhbGwgd2FzIGludmVu dGVkIHRvIHNvbHZlCi0gKiB0aGlzIHByb2JsZW0sIGJ1dCBpdCBpcyBub3QgcG9ydGFibGUg ZW5vdWdoLiBMYXRjaGVzIGFyZSBkZXNpZ25lZCB0bwotICogb3ZlcmNvbWUgdGhlc2UgbGlt aXRhdGlvbnMsIGFsbG93aW5nIHlvdSB0byBzbGVlcCB3aXRob3V0IHBvbGxpbmcgYW5kCi0g KiBlbnN1cmluZyBxdWljayByZXNwb25zZSB0byBzaWduYWxzIGZyb20gb3RoZXIgcHJvY2Vz c2VzLgotICoKLSAqIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgbGF0Y2hlczogbG9jYWwgYW5k IHNoYXJlZC4gQSBsb2NhbCBsYXRjaCBpcwotICogaW5pdGlhbGl6ZWQgYnkgSW5pdExhdGNo LCBhbmQgY2FuIG9ubHkgYmUgc2V0IGZyb20gdGhlIHNhbWUgcHJvY2Vzcy4KLSAqIEEgbG9j YWwgbGF0Y2ggY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IgYSBzaWduYWwgdG8gYXJyaXZlLCBi eSBjYWxsaW5nCi0gKiBTZXRMYXRjaCBpbiB0aGUgc2lnbmFsIGhhbmRsZXIuIEEgc2hhcmVk IGxhdGNoIHJlc2lkZXMgaW4gc2hhcmVkIG1lbW9yeSwKLSAqIGFuZCBtdXN0IGJlIGluaXRp YWxpemVkIGF0IHBvc3RtYXN0ZXIgc3RhcnR1cCBieSBJbml0U2hhcmVkTGF0Y2guIEJlZm9y ZQotICogYSBzaGFyZWQgbGF0Y2ggY2FuIGJlIHdhaXRlZCBvbiwgaXQgbXVzdCBiZSBhc3Nv Y2lhdGVkIHdpdGggYSBwcm9jZXNzCi0gKiB3aXRoIE93bkxhdGNoLiBPbmx5IHRoZSBwcm9j ZXNzIG93bmluZyB0aGUgbGF0Y2ggY2FuIHdhaXQgb24gaXQsIGJ1dCBhbnkKLSAqIHByb2Nl c3MgY2FuIHNldCBpdC4KLSAqCi0gKiBUaGVyZSBhcmUgdGhyZWUgYmFzaWMgb3BlcmF0aW9u cyBvbiBhIGxhdGNoOgotICoKLSAqIFNldExhdGNoCQktIFNldHMgdGhlIGxhdGNoCi0gKiBS ZXNldExhdGNoCS0gQ2xlYXJzIHRoZSBsYXRjaCwgYWxsb3dpbmcgaXQgdG8gYmUgc2V0IGFn YWluCi0gKiBXYWl0TGF0Y2gJLSBXYWl0cyBmb3IgdGhlIGxhdGNoIHRvIGJlY29tZSBzZXQK LSAqCi0gKiBXYWl0TGF0Y2ggaW5jbHVkZXMgYSBwcm92aXNpb24gZm9yIHRpbWVvdXRzICh3 aGljaCBzaG91bGQgYmUgYXZvaWRlZAotICogd2hlbiBwb3NzaWJsZSwgYXMgdGhleSBpbmN1 ciBleHRyYSBvdmVyaGVhZCkgYW5kIGEgcHJvdmlzaW9uIGZvcgotICogcG9zdG1hc3RlciBj aGlsZCBwcm9jZXNzZXMgdG8gd2FrZSB1cCBpbW1lZGlhdGVseSBvbiBwb3N0bWFzdGVyIGRl YXRoLgotICogU2VlIGxhdGNoLmMgZm9yIGRldGFpbGVkIHNwZWNpZmljYXRpb25zIGZvciB0 aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgotICoKLSAqIFRoZSBjb3JyZWN0IHBhdHRlcm4gdG8g d2FpdCBmb3IgZXZlbnQocykgaXM6Ci0gKgotICogZm9yICg7OykKLSAqIHsKLSAqCSAgIFJl c2V0TGF0Y2goKTsKLSAqCSAgIGlmICh3b3JrIHRvIGRvKQotICoJCSAgIERvIFN0dWZmKCk7 Ci0gKgkgICBXYWl0TGF0Y2goKTsKLSAqIH0KLSAqCi0gKiBJdCdzIGltcG9ydGFudCB0byBy ZXNldCB0aGUgbGF0Y2ggKmJlZm9yZSogY2hlY2tpbmcgaWYgdGhlcmUncyB3b3JrIHRvCi0g KiBkby4gT3RoZXJ3aXNlLCBpZiBzb21lb25lIHNldHMgdGhlIGxhdGNoIGJldHdlZW4gdGhl IGNoZWNrIGFuZCB0aGUKLSAqIFJlc2V0TGF0Y2ggY2FsbCwgeW91IHdpbGwgbWlzcyBpdCBh bmQgV2FpdCB3aWxsIGluY29ycmVjdGx5IGJsb2NrLgotICoKLSAqIEFub3RoZXIgdmFsaWQg Y29kaW5nIHBhdHRlcm4gbG9va3MgbGlrZToKLSAqCi0gKiBmb3IgKDs7KQotICogewotICoJ ICAgaWYgKHdvcmsgdG8gZG8pCi0gKgkJICAgRG8gU3R1ZmYoKTsgLy8gaW4gcGFydGljdWxh ciwgZXhpdCBsb29wIGlmIHNvbWUgY29uZGl0aW9uIHNhdGlzZmllZAotICoJICAgV2FpdExh dGNoKCk7Ci0gKgkgICBSZXNldExhdGNoKCk7Ci0gKiB9Ci0gKgotICogVGhpcyBpcyB1c2Vm dWwgdG8gcmVkdWNlIGxhdGNoIHRyYWZmaWMgaWYgaXQncyBleHBlY3RlZCB0aGF0IHRoZSBs b29wJ3MKLSAqIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiB3aWxsIG9mdGVuIGJlIHNhdGlzZmll ZCBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uOwotICogdGhlIGNvc3QgaXMgYW4gZXh0cmEgbG9v cCBpdGVyYXRpb24gYmVmb3JlIGJsb2NraW5nIHdoZW4gaXQgaXMgbm90LgotICogV2hhdCBt dXN0IGJlIGF2b2lkZWQgaXMgcGxhY2luZyBhbnkgY2hlY2tzIGZvciBhc3luY2hyb25vdXMg ZXZlbnRzIGFmdGVyCi0gKiBXYWl0TGF0Y2ggYW5kIGJlZm9yZSBSZXNldExhdGNoLCBhcyB0 aGF0IGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbi4KLSAqCi0gKiBUbyB3YWtlIHVwIHRoZSB3 YWl0ZXIsIHlvdSBtdXN0IGZpcnN0IHNldCBhIGdsb2JhbCBmbGFnIG9yIHNvbWV0aGluZwot ICogZWxzZSB0aGF0IHRoZSB3YWl0IGxvb3AgdGVzdHMgaW4gdGhlICJpZiAod29yayB0byBk bykiIHBhcnQsIGFuZCBjYWxsCi0gKiBTZXRMYXRjaCAqYWZ0ZXIqIHRoYXQuIFNldExhdGNo IGlzIGRlc2lnbmVkIHRvIHJldHVybiBxdWlja2x5IGlmIHRoZQotICogbGF0Y2ggaXMgYWxy ZWFkeSBzZXQuCi0gKgotICogT24gc29tZSBwbGF0Zm9ybXMsIHNpZ25hbHMgd2lsbCBub3Qg aW50ZXJydXB0IHRoZSBsYXRjaCB3YWl0IHByaW1pdGl2ZQotICogYnkgdGhlbXNlbHZlcy4g IFRoZXJlZm9yZSwgaXQgaXMgY3JpdGljYWwgdGhhdCBhbnkgc2lnbmFsIGhhbmRsZXIgdGhh dAotICogaXMgbWVhbnQgdG8gdGVybWluYXRlIGEgV2FpdExhdGNoIHdhaXQgY2FsbHMgU2V0 TGF0Y2guCi0gKgotICogTm90ZSB0aGF0IHVzZSBvZiB0aGUgcHJvY2VzcyBsYXRjaCAoUEdQ Uk9DLnByb2NMYXRjaCkgaXMgZ2VuZXJhbGx5IGJldHRlcgotICogdGhhbiBhbiBhZC1ob2Mg c2hhcmVkIGxhdGNoIGZvciBzaWduYWxpbmcgYXV4aWxpYXJ5IHByb2Nlc3Nlcy4gIFRoaXMg aXMKLSAqIGJlY2F1c2UgZ2VuZXJpYyBzaWduYWwgaGFuZGxlcnMgd2lsbCBjYWxsIFNldExh dGNoIG9uIHRoZSBwcm9jZXNzIGxhdGNoCi0gKiBvbmx5LCBzbyB1c2luZyBhbnkgbGF0Y2gg b3RoZXIgdGhhbiB0aGUgcHJvY2VzcyBsYXRjaCBlZmZlY3RpdmVseSBwcmVjbHVkZXMKLSAq IHVzZSBvZiBhbnkgZ2VuZXJpYyBoYW5kbGVyLgotICoKLSAqCi0gKiBTZWUgYWxzbyBXYWl0 RXZlbnRTZXRzIGluIHdhaXRldmVudHNldC5oLiBUaGV5IGFsbG93IHRvIHdhaXQgZm9yIGxh dGNoZXMKLSAqIGJlaW5nIHNldCBhbmQgYWRkaXRpb25hbCBldmVudHMgLSBwb3N0bWFzdGVy IGR5aW5nIGFuZCBzb2NrZXQgcmVhZGluZXNzIG9mCi0gKiBzZXZlcmFsIHNvY2tldHMgY3Vy cmVudGx5IC0gYXQgdGhlIHNhbWUgdGltZS4gIE9uIG1hbnkgcGxhdGZvcm1zIHVzaW5nIGEK LSAqIGxvbmcgbGl2ZWQgZXZlbnQgc2V0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdXNpbmcg V2FpdExhdGNoIG9yCi0gKiBXYWl0TGF0Y2hPclNvY2tldC4KLSAqCi0gKgotICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQotICoKLSAqIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvbGF0Y2guaAotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0jaWZuZGVmIExB VENIX0gKLSNkZWZpbmUgTEFUQ0hfSAotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLSNpbmNs dWRlICJzdG9yYWdlL3dhaXRldmVudHNldC5oIgkvKiBmb3IgV0xfKiBhcmd1bWVudHMgdG8g V2FpdExhdGNoICovCi0KLS8qCi0gKiBMYXRjaCBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHRyZWF0 ZWQgYXMgb3BhcXVlIGFuZCBvbmx5IGFjY2Vzc2VkIHRocm91Z2gKLSAqIHRoZSBwdWJsaWMg ZnVuY3Rpb25zLiBJdCBpcyBkZWZpbmVkIGhlcmUgdG8gYWxsb3cgZW1iZWRkaW5nIExhdGNo ZXMgYXMKLSAqIHBhcnQgb2YgYmlnZ2VyIHN0cnVjdHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0 IExhdGNoCi17Ci0Jc2lnX2F0b21pY190IGlzX3NldDsKLQlzaWdfYXRvbWljX3QgbWF5YmVf c2xlZXBpbmc7Ci0JYm9vbAkJaXNfc2hhcmVkOwotCWludAkJCW93bmVyX3BpZDsKLSNpZmRl ZiBXSU4zMgotCUhBTkRMRQkJZXZlbnQ7Ci0jZW5kaWYKLX0gTGF0Y2g7Ci0KLS8qCi0gKiBw cm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbGF0Y2guYwotICovCi1leHRlcm4gdm9pZCBJ bml0TGF0Y2goTGF0Y2ggKmxhdGNoKTsKLWV4dGVybiB2b2lkIEluaXRTaGFyZWRMYXRjaChM YXRjaCAqbGF0Y2gpOwotZXh0ZXJuIHZvaWQgT3duTGF0Y2goTGF0Y2ggKmxhdGNoKTsKLWV4 dGVybiB2b2lkIERpc293bkxhdGNoKExhdGNoICpsYXRjaCk7Ci1leHRlcm4gdm9pZCBTZXRM YXRjaChMYXRjaCAqbGF0Y2gpOwotZXh0ZXJuIHZvaWQgUmVzZXRMYXRjaChMYXRjaCAqbGF0 Y2gpOwotCi1leHRlcm4gaW50CVdhaXRMYXRjaChMYXRjaCAqbGF0Y2gsIGludCB3YWtlRXZl bnRzLCBsb25nIHRpbWVvdXQsCi0JCQkJCSAgdWludDMyIHdhaXRfZXZlbnRfaW5mbyk7Ci1l eHRlcm4gaW50CVdhaXRMYXRjaE9yU29ja2V0KExhdGNoICpsYXRjaCwgaW50IHdha2VFdmVu dHMsCi0JCQkJCQkJICBwZ3NvY2tldCBzb2NrLCBsb25nIHRpbWVvdXQsIHVpbnQzMiB3YWl0 X2V2ZW50X2luZm8pOwotZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZUxhdGNoV2FpdFNldCh2b2lk KTsKLQotI2VuZGlmCQkJCQkJCS8qIExBVENIX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvYy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXgg NGExZmFmYjkwMzguLjFjYTRjNzA3MTVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2MuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtMTgsNyAr MTgsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImxpYi9p bGlzdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgotI2luY2x1ZGUgInN0b3JhZ2UvbGF0 Y2guaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2suaCIKICNpbmNsdWRlICJzdG9yYWdlL3Bn X3NlbWEuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NsaXN0X3R5cGVzLmgiCkBAIC0yNTEs MTIgKzI1MCwxOCBAQCB0eXBlZGVmIHN0cnVjdCBQR1BST0MKIAkgKiBJbnRlci1wcm9jZXNz IHNpZ25hbGluZwogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQlMYXRjaAkJcHJvY0xhdGNo OwkJLyogZ2VuZXJpYyBsYXRjaCBmb3IgcHJvY2VzcyAqLwotCiAJUEdTZW1hcGhvcmUgc2Vt OwkJCS8qIE9ORSBzZW1hcGhvcmUgdG8gc2xlZXAgb24gKi8KIAogCWludAkJCWRlbGF5Q2hr cHRGbGFnczsJLyogZm9yIERFTEFZX0NIS1BUXyogZmxhZ3MgKi8KIAorCS8qIEJpdCBtYXNr IG9mIHBlbmRpbmcgaW50ZXJydXB0cywgd2FpdGluZyB0byBiZSBwcm9jZXNzZWQgKi8KKwlw Z19hdG9taWNfdWludDY0IHBlbmRpbmdJbnRlcnJ1cHRzOworCisjaWZkZWYgV0lOMzIKKwkv KiBFdmVudCBoYW5kbGUgdG8gd2FrZSB1cCB0aGUgcHJvY2VzcyB3aGVuIHNlbmRpbmcgYW4g aW50ZXJydXB0ICovCisJSEFORExFICAgICAgICAgIGludGVycnVwdFdha2V1cEV2ZW50Owor I2VuZGlmCisKIAkvKgogCSAqIFdoaWxlIGluIGhvdCBzdGFuZGJ5IG1vZGUsIHNob3dzIHRo YXQgYSBjb25mbGljdCBzaWduYWwgaGFzIGJlZW4gc2VudAogCSAqIGZvciB0aGUgY3VycmVu dCB0cmFuc2FjdGlvbi4gU2V0L2NsZWFyZWQgd2hpbGUgaG9sZGluZyBQcm9jQXJyYXlMb2Nr LApAQCAtNDk0LDYgKzQ5OSw4IEBAIHR5cGVkZWYgc3RydWN0IFBST0NfSERSCiAJcGdfYXRv bWljX3VpbnQzMiBhdkxhdW5jaGVyUHJvYzsKIAlwZ19hdG9taWNfdWludDMyIHdhbHdyaXRl clByb2M7CiAJcGdfYXRvbWljX3VpbnQzMiBjaGVja3BvaW50ZXJQcm9jOworCXBnX2F0b21p Y191aW50MzIgd2FscmVjZWl2ZXJQcm9jOworCXBnX2F0b21pY191aW50MzIgc3RhcnR1cFBy b2M7CiAKIAkvKiBDdXJyZW50IHNoYXJlZCBlc3RpbWF0ZSBvZiBhcHByb3ByaWF0ZSBzcGlu c19wZXJfZGVsYXkgdmFsdWUgKi8KIAlpbnQJCQlzcGluc19wZXJfZGVsYXk7CkBAIC01Nzcs OSArNTg0LDYgQEAgZXh0ZXJuIHZvaWQgR2V0TG9ja0hvbGRlcnNBbmRXYWl0ZXJzKExPQ0FM TE9DSyAqbG9jYWxsb2NrLAogCQkJCQkJCQkJIFN0cmluZ0luZm8gbG9ja193YWl0ZXJzX3Ni dWYsCiAJCQkJCQkJCQkgaW50ICpsb2NrSG9sZGVyc051bSk7CiAKLWV4dGVybiB2b2lkIFBy b2NXYWl0Rm9yU2lnbmFsKHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pOwotZXh0ZXJuIHZvaWQg UHJvY1NlbmRTaWduYWwoUHJvY051bWJlciBwcm9jTnVtYmVyKTsKLQogZXh0ZXJuIFBHUFJP QyAqQXV4aWxpYXJ5UGlkR2V0UHJvYyhpbnQgcGlkKTsKIAogZXh0ZXJuIHZvaWQgQmVjb21l TG9ja0dyb3VwTGVhZGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jYXJyYXkuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKaW5kZXgg YzVhYjE1NzRmZTMuLmI3MjAxZDFhOTE3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2NhcnJheS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgK QEAgLTc4LDcgKzc4LDcgQEAgZXh0ZXJuIFZpcnR1YWxUcmFuc2FjdGlvbklkICpHZXRDdXJy ZW50VmlydHVhbFhJRHMoVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW4sCiAJCQkJCQkJCQkJCQkg ICBpbnQgKm52eGlkcyk7CiBleHRlcm4gVmlydHVhbFRyYW5zYWN0aW9uSWQgKkdldENvbmZs aWN0aW5nVmlydHVhbFhJRHMoVHJhbnNhY3Rpb25JZCBsaW1pdFhtaW4sIE9pZCBkYk9pZCk7 CiAKLWV4dGVybiBib29sIFNpZ25hbFJlY292ZXJ5Q29uZmxpY3QoUEdQUk9DICpwcm9jLCBw aWRfdCBwaWQsIFJlY292ZXJ5Q29uZmxpY3RSZWFzb24gcmVhc29uKTsKK2V4dGVybiBib29s IFNpZ25hbFJlY292ZXJ5Q29uZmxpY3QoUEdQUk9DICpwcm9jLCBSZWNvdmVyeUNvbmZsaWN0 UmVhc29uIHJlYXNvbik7CiBleHRlcm4gYm9vbCBTaWduYWxSZWNvdmVyeUNvbmZsaWN0V2l0 aFZpcnR1YWxYSUQoVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZCwgUmVjb3ZlcnlDb25mbGlj dFJlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgU2lnbmFsUmVjb3ZlcnlDb25mbGljdFdp dGhEYXRhYmFzZShPaWQgZGF0YWJhc2VpZCwgUmVjb3ZlcnlDb25mbGljdFJlYXNvbiByZWFz b24pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IDM0OGZiYTUzYTkzLi4x OGIyOGI3YjcwNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAgLTE0LDM1ICsx NCw2IEBACiAjaWZuZGVmIFBST0NTSUdOQUxfSAogI2RlZmluZSBQUk9DU0lHTkFMX0gKIAot I2luY2x1ZGUgInN0b3JhZ2UvcHJvY251bWJlci5oIgotCi0KLS8qCi0gKiBSZWFzb25zIGZv ciBzaWduYWxpbmcgYSBQb3N0Z3JlcyBjaGlsZCBwcm9jZXNzIChhIGJhY2tlbmQgb3IgYW4g YXV4aWxpYXJ5Ci0gKiBwcm9jZXNzLCBsaWtlIGNoZWNrcG9pbnRlcikuICBXZSBjYW4gY29w ZSB3aXRoIGNvbmN1cnJlbnQgc2lnbmFscyBmb3IgZGlmZmVyZW50Ci0gKiByZWFzb25zLiAg SG93ZXZlciwgaWYgdGhlIHNhbWUgcmVhc29uIGlzIHNpZ25hbGVkIG11bHRpcGxlIHRpbWVz IGluIHF1aWNrCi0gKiBzdWNjZXNzaW9uLCB0aGUgcHJvY2VzcyBpcyBsaWtlbHkgdG8gb2Jz ZXJ2ZSBvbmx5IG9uZSBub3RpZmljYXRpb24gb2YgaXQuCi0gKiBUaGlzIGlzIG9rYXkgZm9y IHRoZSBwcmVzZW50IHVzZXMuCi0gKgotICogQWxzbywgYmVjYXVzZSBvZiByYWNlIGNvbmRp dGlvbnMsIGl0J3MgaW1wb3J0YW50IHRoYXQgYWxsIHRoZSBzaWduYWxzIGJlCi0gKiBkZWZp bmVkIHNvIHRoYXQgbm8gaGFybSBpcyBkb25lIGlmIGEgcHJvY2VzcyBtaXN0YWtlbmx5IHJl Y2VpdmVzIG9uZS4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0JUFJPQ1NJR19DQVRDSFVQX0lO VEVSUlVQVCwJLyogc2ludmFsIGNhdGNodXAgaW50ZXJydXB0ICovCi0JUFJPQ1NJR19OT1RJ RllfSU5URVJSVVBULAkvKiBsaXN0ZW4vbm90aWZ5IGludGVycnVwdCAqLwotCVBST0NTSUdf UEFSQUxMRUxfTUVTU0FHRSwJLyogbWVzc2FnZSBmcm9tIGNvb3BlcmF0aW5nIHBhcmFsbGVs IGJhY2tlbmQgKi8KLQlQUk9DU0lHX1dBTFNORF9JTklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fs c2VuZGVycyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAgKi8KLQlQUk9DU0lHX0JBUlJJRVIs CQkJLyogZ2xvYmFsIGJhcnJpZXIgaW50ZXJydXB0ICAqLwotCVBST0NTSUdfTE9HX01FTU9S WV9DT05URVhULCAvKiBhc2sgYmFja2VuZCB0byBsb2cgdGhlIG1lbW9yeSBjb250ZXh0cyAq LwotCVBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVTU0FHRSwgLyogTWVzc2FnZSBmcm9tIHBh cmFsbGVsIGFwcGx5IHdvcmtlcnMgKi8KLQlQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNULAkv KiBiYWNrZW5kIGlzIGJsb2NraW5nIHJlY292ZXJ5LCBjaGVjawotCQkJCQkJCQkgKiBQR1BS T0MtPnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0cyBmb3IgdGhlCi0JCQkJCQkJCSAqIHJlYXNv biAqLwotfSBQcm9jU2lnbmFsUmVhc29uOwotCi0jZGVmaW5lIE5VTV9QUk9DU0lHTkFMUyAo UFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVCArIDEpCi0KIHR5cGVkZWYgZW51bQogewogCVBS T0NTSUdOQUxfQkFSUklFUl9TTUdSUkVMRUFTRSwgLyogYXNrIHNtZ3IgdG8gY2xvc2UgZmls ZXMgKi8KQEAgLTY3LDE2ICszOCwxMiBAQCBleHRlcm4gU2l6ZSBQcm9jU2lnbmFsU2htZW1T aXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkKTsKIAog ZXh0ZXJuIHZvaWQgUHJvY1NpZ25hbEluaXQoY29uc3QgdWludDggKmNhbmNlbF9rZXksIGlu dCBjYW5jZWxfa2V5X2xlbik7Ci1leHRlcm4gaW50CVNlbmRQcm9jU2lnbmFsKHBpZF90IHBp ZCwgUHJvY1NpZ25hbFJlYXNvbiByZWFzb24sCi0JCQkJCQkgICBQcm9jTnVtYmVyIHByb2NO dW1iZXIpOwogZXh0ZXJuIHZvaWQgU2VuZENhbmNlbFJlcXVlc3QoaW50IGJhY2tlbmRQSUQs IGNvbnN0IHVpbnQ4ICpjYW5jZWxfa2V5LCBpbnQgY2FuY2VsX2tleV9sZW4pOwogCiBleHRl cm4gdWludDY0IEVtaXRQcm9jU2lnbmFsQmFycmllcihQcm9jU2lnbmFsQmFycmllclR5cGUg dHlwZSk7CiBleHRlcm4gdm9pZCBXYWl0Rm9yUHJvY1NpZ25hbEJhcnJpZXIodWludDY0IGdl bmVyYXRpb24pOwogZXh0ZXJuIHZvaWQgUHJvY2Vzc1Byb2NTaWduYWxCYXJyaWVyKHZvaWQp OwogCi1leHRlcm4gdm9pZCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihTSUdOQUxfQVJH Uyk7Ci0KIC8qIFByb2NTaWduYWxIZWFkZXIgaXMgYW4gb3BhcXVlIHN0cnVjdCwgZGV0YWls cyBrbm93biBvbmx5IHdpdGhpbiBwcm9jc2lnbmFsLmMgKi8KIHR5cGVkZWYgc3RydWN0IFBy b2NTaWduYWxIZWFkZXIgUHJvY1NpZ25hbEhlYWRlcjsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zaW52YWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsLmgK aW5kZXggNGQzM2ZkY2FiZTEuLjZjZWNiZmQ5Y2Y4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3NpbnZhbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsLmgK QEAgLTEzNywxNiArMTM3LDExIEBAIHR5cGVkZWYgdW5pb24KIC8qIENvdW50ZXIgb2YgbWVz c2FnZXMgcHJvY2Vzc2VkOyBkb24ndCB3b3JyeSBhYm91dCBvdmVyZmxvdy4gKi8KIGV4dGVy biBQR0RMTElNUE9SVCB1aW50NjQgU2hhcmVkSW52YWxpZE1lc3NhZ2VDb3VudGVyOwogCi1l eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IGNhdGNodXBJbnRlcnJ1 cHRQZW5kaW5nOwotCiBleHRlcm4gdm9pZCBTZW5kU2hhcmVkSW52YWxpZE1lc3NhZ2VzKGNv bnN0IFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgKm1zZ3MsCiAJCQkJCQkJCQkgIGludCBu KTsKIGV4dGVybiB2b2lkIFJlY2VpdmVTaGFyZWRJbnZhbGlkTWVzc2FnZXModm9pZCAoKmlu dmFsRnVuY3Rpb24pIChTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICptc2cpLAogCQkJCQkJ CQkJCSB2b2lkICgqcmVzZXRGdW5jdGlvbikgKHZvaWQpKTsKIAotLyogc2lnbmFsIGhhbmRs ZXIgZm9yIGNhdGNodXAgZXZlbnRzIChQUk9DU0lHX0NBVENIVVBfSU5URVJSVVBUKSAqLwot ZXh0ZXJuIHZvaWQgSGFuZGxlQ2F0Y2h1cEludGVycnVwdCh2b2lkKTsKLQogLyoKICAqIGVu YWJsZS9kaXNhYmxlIHByb2Nlc3Npbmcgb2YgY2F0Y2h1cCBldmVudHMgZGlyZWN0bHkgZnJv bSBzaWduYWwgaGFuZGxlci4KICAqIFRoZSBlbmFibGUgcm91dGluZSBmaXJzdCBwZXJmb3Jt cyBwcm9jZXNzaW5nIG9mIGFueSBjYXRjaHVwIGV2ZW50cyB0aGF0CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3dhaXRldmVudHNldC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS93YWl0ZXZlbnRzZXQuaAppbmRleCA1MzQxMjY3ZjBhMC4uYTdmOTc0YzViYTIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvd2FpdGV2ZW50c2V0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS93YWl0ZXZlbnRzZXQuaApAQCAtMywxNiArMywxNSBAQAogICogd2Fp dGV2ZW50c2V0LmgKICAqCQlwcG9sbCgpIC8gcHNlbGVjdCgpIGxpa2UgaW50ZXJmYWNlIGZv ciB3YWl0aW5nIGZvciBldmVudHMKICAqCi0gKiBXYWl0RXZlbnRTZXRzIGFsbG93IHRvIHdh aXQgZm9yIGxhdGNoZXMgYmVpbmcgc2V0IGFuZCBhZGRpdGlvbmFsIGV2ZW50cyAtCisgKiBX YWl0RXZlbnRTZXRzIGFsbG93IHRvIHdhaXQgZm9yIGludGVycnVwdHMgYmVpbmcgc2V0IGFu ZCBhZGRpdGlvbmFsIGV2ZW50cyAtCiAgKiBwb3N0bWFzdGVyIGR5aW5nIGFuZCBzb2NrZXQg cmVhZGluZXNzIG9mIHNldmVyYWwgc29ja2V0cyBjdXJyZW50bHkgLSBhdCB0aGUKICAqIHNh bWUgdGltZS4gIE9uIG1hbnkgcGxhdGZvcm1zIHVzaW5nIGEgbG9uZyBsaXZlZCBldmVudCBz ZXQgaXMgbW9yZQotICogZWZmaWNpZW50IHRoYW4gdXNpbmcgV2FpdExhdGNoIG9yIFdhaXRM YXRjaE9yU29ja2V0LgorICogZWZmaWNpZW50IHRoYW4gdXNpbmcgV2FpdEludGVycnVwdCBv ciBXYWl0SW50ZXJydXB0T3JTb2NrZXQuCiAgKgotICogV2FpdEV2ZW50U2V0V2FpdCBpbmNs dWRlcyBhIHByb3Zpc2lvbiBmb3IgdGltZW91dHMgKHdoaWNoIHNob3VsZCBiZSBhdm9pZGVk CisgKiBXYWl0SW50ZXJydXB0IGluY2x1ZGVzIGEgcHJvdmlzaW9uIGZvciB0aW1lb3V0cyAo d2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQKICAqIHdoZW4gcG9zc2libGUsIGFzIHRoZXkgaW5j dXIgZXh0cmEgb3ZlcmhlYWQpIGFuZCBhIHByb3Zpc2lvbiBmb3IgcG9zdG1hc3RlcgogICog Y2hpbGQgcHJvY2Vzc2VzIHRvIHdha2UgdXAgaW1tZWRpYXRlbHkgb24gcG9zdG1hc3RlciBk ZWF0aC4gIFNlZQotICogc3RvcmFnZS9pcGMvd2FpdGV2ZW50c2V0LmMgZm9yIGRldGFpbGVk IHNwZWNpZmljYXRpb25zIGZvciB0aGUgZXhwb3J0ZWQKLSAqIGZ1bmN0aW9ucy4KKyAqIGlw Yy9pbnRlcnJ1cHQuYyBmb3IgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBleHBv cnRlZCBmdW5jdGlvbnMuCiAgKgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cApAQCAtMjUsMTMg KzI0LDE3IEBACiAjaWZuZGVmIFdBSVRFVkVOVFNFVF9ICiAjZGVmaW5lIFdBSVRFVkVOVFNF VF9ICiAKLSNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgorI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY251bWJlci5oIgorCisvKiBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVw ZW5kZW5jeSB0byBpbnRlcnJ1cHQuaCAqLwordHlwZWRlZiB1aW50NjQgSW50ZXJydXB0TWFz azsKKwogCiAvKgotICogQml0bWFza3MgZm9yIGV2ZW50cyB0aGF0IG1heSB3YWtlLXVwIFdh aXRMYXRjaCgpLCBXYWl0TGF0Y2hPclNvY2tldCgpLCBvcgotICogV2FpdEV2ZW50U2V0V2Fp dCgpLgorICogQml0bWFza3MgZm9yIGV2ZW50cyB0aGF0IG1heSB3YWtlLXVwIFdhaXRJbnRl cnJ1cHQoKSwKKyAqIFdhaXRJbnRlcnJ1cHRPclNvY2tldCgpLCBvciBXYWl0RXZlbnRTZXRX YWl0KCkuCiAgKi8KLSNkZWZpbmUgV0xfTEFUQ0hfU0VUCQkgKDEgPDwgMCkKKyNkZWZpbmUg V0xfSU5URVJSVVBUCQkgKDEgPDwgMCkKICNkZWZpbmUgV0xfU09DS0VUX1JFQURBQkxFCSAo MSA8PCAxKQogI2RlZmluZSBXTF9TT0NLRVRfV1JJVEVBQkxFICAoMSA8PCAyKQogI2RlZmlu ZSBXTF9USU1FT1VUCQkJICgxIDw8IDMpCS8qIG5vdCBmb3IgV2FpdEV2ZW50U2V0V2FpdCgp ICovCkBAIC03MCwyOSArNzMsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgV2FpdEV2ZW50CiAvKiBm b3J3YXJkIGRlY2xhcmF0aW9ucyB0byBhdm9pZCBleHBvc2luZyB3YWl0ZXZlbnRzZXQuYyBp bXBsZW1lbnRhdGlvbiBkZXRhaWxzICovCiB0eXBlZGVmIHN0cnVjdCBXYWl0RXZlbnRTZXQg V2FpdEV2ZW50U2V0OwogCi1zdHJ1Y3QgTGF0Y2g7CitzdHJ1Y3QgUEdQUk9DOwogCiAvKgog ICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHdhaXRldmVudHNldC5jCiAgKi8KIGV4 dGVybiB2b2lkIEluaXRpYWxpemVXYWl0RXZlbnRTdXBwb3J0KHZvaWQpOworI2lmZGVmIFdJ TjMyCitleHRlcm4gSEFORExFIENyZWF0ZVNoYXJlZFdha2V1cEhhbmRsZSh2b2lkKTsKKyNl bmRpZgorCitzdHJ1Y3QgUmVzb3VyY2VPd25lckRhdGE7CiAKLWV4dGVybiBXYWl0RXZlbnRT ZXQgKkNyZWF0ZVdhaXRFdmVudFNldChSZXNvdXJjZU93bmVyIHJlc293bmVyLCBpbnQgbmV2 ZW50cyk7CitleHRlcm4gV2FpdEV2ZW50U2V0ICpDcmVhdGVXYWl0RXZlbnRTZXQoc3RydWN0 IFJlc291cmNlT3duZXJEYXRhICpyZXNvd25lciwgaW50IG5ldmVudHMpOwogZXh0ZXJuIHZv aWQgRnJlZVdhaXRFdmVudFNldChXYWl0RXZlbnRTZXQgKnNldCk7CiBleHRlcm4gdm9pZCBG cmVlV2FpdEV2ZW50U2V0QWZ0ZXJGb3JrKFdhaXRFdmVudFNldCAqc2V0KTsKIGV4dGVybiBp bnQJQWRkV2FpdEV2ZW50VG9TZXQoV2FpdEV2ZW50U2V0ICpzZXQsIHVpbnQzMiBldmVudHMs IHBnc29ja2V0IGZkLAotCQkJCQkJCSAgc3RydWN0IExhdGNoICpsYXRjaCwgdm9pZCAqdXNl cl9kYXRhKTsKKwkJCQkJCQkgIHVpbnQ2NCBpbnRlcnJ1cHRNYXNrLCB2b2lkICp1c2VyX2Rh dGEpOwogZXh0ZXJuIHZvaWQgTW9kaWZ5V2FpdEV2ZW50KFdhaXRFdmVudFNldCAqc2V0LCBp bnQgcG9zLCB1aW50MzIgZXZlbnRzLAotCQkJCQkJCXN0cnVjdCBMYXRjaCAqbGF0Y2gpOwor CQkJCQkJCXVpbnQ2NCBpbnRlcnJ1cHRNYXNrKTsKIGV4dGVybiBpbnQJV2FpdEV2ZW50U2V0 V2FpdChXYWl0RXZlbnRTZXQgKnNldCwgbG9uZyB0aW1lb3V0LAogCQkJCQkJCSBXYWl0RXZl bnQgKm9jY3VycmVkX2V2ZW50cywgaW50IG5ldmVudHMsCiAJCQkJCQkJIHVpbnQzMiB3YWl0 X2V2ZW50X2luZm8pOwogZXh0ZXJuIGludAlHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhX YWl0RXZlbnRTZXQgKnNldCk7CiBleHRlcm4gYm9vbCBXYWl0RXZlbnRTZXRDYW5SZXBvcnRD bG9zZWQodm9pZCk7CiAKLSNpZm5kZWYgV0lOMzIKKy8qIGxvdyBsZXZlbCBmdW5jdGlvbnMg dXNlZCB0byBpbXBsZW1lbnQgU2VuZEludGVycnVwdCAqLwogZXh0ZXJuIHZvaWQgV2FrZXVw TXlQcm9jKHZvaWQpOwotZXh0ZXJuIHZvaWQgV2FrZXVwT3RoZXJQcm9jKGludCBwaWQpOwot I2VuZGlmCitleHRlcm4gdm9pZCBXYWtldXBPdGhlclByb2Moc3RydWN0IFBHUFJPQyAqcHJv Yyk7CiAKICNlbmRpZgkJCQkJCQkvKiBXQUlURVZFTlRTRVRfSCAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdGNvcC90Y29wcHJvdC5oIGIvc3JjL2luY2x1ZGUvdGNvcC90Y29wcHJv dC5oCmluZGV4IDViYzViY2ZiMjBkLi43N2FiOTUwZWFlMiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdGNvcC90Y29wcHJvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvdGNvcHByb3Qu aApAQCAtMTYsNyArMTYsNiBAQAogCiAjaW5jbHVkZSAibm9kZXMvcGFyYW1zLmgiCiAjaW5j bHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9jc2lnbmFs LmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVkZSAidXRpbHMvcXVlcnllbnZp cm9ubWVudC5oIgogCkBAIC03MCwxMyArNjksNyBAQCBleHRlcm4gTGlzdCAqcGdfcGxhbl9x dWVyaWVzKExpc3QgKnF1ZXJ5dHJlZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKIAkJ CQkJCQkgaW50IGN1cnNvck9wdGlvbnMsCiAJCQkJCQkJIFBhcmFtTGlzdEluZm8gYm91bmRQ YXJhbXMpOwogCi1leHRlcm4gdm9pZCBkaWUoU0lHTkFMX0FSR1MpOwotcGdfbm9yZXR1cm4g ZXh0ZXJuIHZvaWQgcXVpY2tkaWUoU0lHTkFMX0FSR1MpOwotZXh0ZXJuIHZvaWQgU3RhdGVt ZW50Q2FuY2VsSGFuZGxlcihTSUdOQUxfQVJHUyk7CiBwZ19ub3JldHVybiBleHRlcm4gdm9p ZCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIoU0lHTkFMX0FSR1MpOwotZXh0ZXJuIHZvaWQgSGFu ZGxlUmVjb3ZlcnlDb25mbGljdEludGVycnVwdCh2b2lkKTsKLWV4dGVybiB2b2lkIFByb2Nl c3NDbGllbnRSZWFkSW50ZXJydXB0KGJvb2wgYmxvY2tlZCk7Ci1leHRlcm4gdm9pZCBQcm9j ZXNzQ2xpZW50V3JpdGVJbnRlcnJ1cHQoYm9vbCBibG9ja2VkKTsKIAogZXh0ZXJuIHZvaWQg cHJvY2Vzc19wb3N0Z3Jlc19zd2l0Y2hlcyhpbnQgYXJnYywgY2hhciAqYXJndltdLAogCQkJ CQkJCQkJICBHdWNDb250ZXh0IGN0eCwgY29uc3QgY2hhciAqKmRibmFtZSk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9tZW11dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMv bWVtdXRpbHMuaAppbmRleCAxMWFiMTcxN2ExNi4uNWQ0NzY0M2ViNzcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL21lbXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv bWVtdXRpbHMuaApAQCAtMTAxLDcgKzEwMSw2IEBAIGV4dGVybiB2b2lkIE1lbW9yeUNvbnRl eHRDaGVjayhNZW1vcnlDb250ZXh0IGNvbnRleHQpOwogI2RlZmluZSBNZW1vcnlDb250ZXh0 Q29weUFuZFNldElkZW50aWZpZXIoY3h0LCBpZCkgXAogCU1lbW9yeUNvbnRleHRTZXRJZGVu dGlmaWVyKGN4dCwgTWVtb3J5Q29udGV4dFN0cmR1cChjeHQsIGlkKSkKIAotZXh0ZXJuIHZv aWQgSGFuZGxlTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lk IFByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KHZvaWQpOwogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmggYi9zcmMvaW5jbHVk ZS91dGlscy9wZ3N0YXRfaW50ZXJuYWwuaAppbmRleCA5YjhmYmFlMDBlZC4uMmNmODA5Y2Q3 YzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oCisr KyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oCkBAIC0xNSw2ICsxNSw3 IEBACiAKIAogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKyNpbmNsdWRl ICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibGliL2RzaGFzaC5oIgogI2luY2x1ZGUg ImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgpkaWZmIC0tZ2l0IGEvc3JjL3Bv cnQvcGdfbnVtYS5jIGIvc3JjL3BvcnQvcGdfbnVtYS5jCmluZGV4IDg5NTQ2NjkyNzNhLi4x ZGY1ZWUzMDMzZiAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvcGdfbnVtYS5jCisrKyBiL3NyYy9w b3J0L3BnX251bWEuYwpAQCAtMTYsNyArMTYsMTAgQEAKICNpbmNsdWRlICJjLmgiCiAjaW5j bHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpZm5kZWYgRlJP TlRFTkQKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgImlwYy9pbnRlcnJ1cHQu aCIKKyNlbmRpZgogI2luY2x1ZGUgInBvcnQvcGdfbnVtYS5oIgogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3BvcnQvcGdzbGVlcC5jIGIvc3JjL3BvcnQvcGdzbGVlcC5jCmluZGV4IDRjMzFl NTAzZWIxLi4wYmQ1MGJkYjIzZiAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvcGdzbGVlcC5jCisr KyBiL3NyYy9wb3J0L3Bnc2xlZXAuYwpAQCAtMzIsMTAgKzMyLDEwIEBACiAgKgogICogQ0FV VElPTjogSXQncyBub3QgYSBnb29kIGlkZWEgdG8gdXNlIGxvbmcgc2xlZXBzIGluIHRoZSBi YWNrZW5kLiAgVGhleSB3aWxsCiAgKiBzaWxlbnRseSByZXR1cm4gZWFybHkgaWYgYSBzaWdu YWwgaXMgY2F1Z2h0LCBidXQgdGhhdCBkb2Vzbid0IGluY2x1ZGUKLSAqIGxhdGNoZXMgYmVp bmcgc2V0IG9uIG1vc3QgT1NlcywgYW5kIGV2ZW4gc2lnbmFsIGhhbmRsZXJzIHRoYXQgc2V0 IE15TGF0Y2gKLSAqIG1pZ2h0IGhhcHBlbiB0byBydW4gYmVmb3JlIHRoZSBzbGVlcCBiZWdp bnMsIGFsbG93aW5nIHRoZSBmdWxsIGRlbGF5LgotICogQmV0dGVyIHByYWN0aWNlIGlzIHRv IHVzZSBXYWl0TGF0Y2goKSB3aXRoIGEgdGltZW91dCwgc28gdGhhdCBiYWNrZW5kcwotICog cmVzcG9uZCB0byBsYXRjaGVzIGFuZCBzaWduYWxzIHByb21wdGx5LgorICogaW50ZXJydXB0 cyBiZWluZyByZWNlaXZlZCBvbiBtb3N0IE9TZXMsIGFuZCBldmVuIHNpZ25hbCBoYW5kbGVy cyB0aGF0IHJhaXNlCisgKiBhbiBpbnRlcnJ1cHQgbWlnaHQgaGFwcGVuIHRvIHJ1biBiZWZv cmUgdGhlIHNsZWVwIGJlZ2lucywgYWxsb3dpbmcgdGhlIGZ1bGwKKyAqIGRlbGF5LiAgQmV0 dGVyIHByYWN0aWNlIGlzIHRvIHVzZSBXYWl0SW50ZXJydXB0KCkgd2l0aCBhIHRpbWVvdXQs IHNvIHRoYXQKKyAqIGJhY2tlbmRzIHJlc3BvbmQgdG8gaW50ZXJydXB0cyBhbmQgc2lnbmFs cyBwcm9tcHRseS4KICAqLwogdm9pZAogcGdfdXNsZWVwKGxvbmcgbWljcm9zZWMpCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9udGVzdGVyLmMgYi9zcmMvdGVz dC9pc29sYXRpb24vaXNvbGF0aW9udGVzdGVyLmMKaW5kZXggNDQwYzg3NWI4YWMuLmQ1Njhl OTBjMDY0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9udGVzdGVy LmMKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jCkBAIC03NjIs NyArNzYyLDcgQEAgdHJ5X2NvbXBsZXRlX3N0ZXBzKFRlc3RTcGVjICp0ZXN0c3BlYywgUGVy bXV0YXRpb25TdGVwICoqd2FpdGluZywKIAl7CiAJCWludAkJCXcgPSAwOwogCi0JCS8qIFJl c2V0IGxhdGNoOyB3ZSBvbmx5IGNhcmUgYWJvdXQgbm90aWNlcyByZWNlaXZlZCB3aXRoaW4g bG9vcC4gKi8KKwkJLyogUmVzZXQgZmxhZzsgd2Ugb25seSBjYXJlIGFib3V0IG5vdGljZXMg cmVjZWl2ZWQgd2l0aGluIGxvb3AuICovCiAJCWFueV9uZXdfbm90aWNlID0gZmFsc2U7CiAK IAkJLyogTGlrZXdpc2UsIHRoZXNlIHZhcmlhYmxlcyByZXNldCBmb3IgZWFjaCByZXRyeS4g Ki8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvc2V0dXAuYyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvc2V0dXAuYwppbmRleCAzNmJiMjU1OTIy Yy4uNWMzNzUwMDIyNWQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1f bXEvc2V0dXAuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htX21xL3NldHVwLmMK QEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRl ICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgpAQCAtMTM0LDYg KzEzNSw3IEBAIHNldHVwX2R5bmFtaWNfc2hhcmVkX21lbW9yeShpbnQ2NCBxdWV1ZV9zaXpl LCBpbnQgbndvcmtlcnMsCiAKIAkvKiBTZXQgdXAgdGhlIGhlYWRlciByZWdpb24uICovCiAJ aGRyID0gc2htX3RvY19hbGxvY2F0ZSh0b2MsIHNpemVvZih0ZXN0X3NobV9tcV9oZWFkZXIp KTsKKwloZHItPmxlYWRlcl9wcm9jX251bWJlciA9IE15UHJvY051bWJlcjsKIAlTcGluTG9j a0luaXQoJmhkci0+bXV0ZXgpOwogCWhkci0+d29ya2Vyc190b3RhbCA9IG53b3JrZXJzOwog CWhkci0+d29ya2Vyc19hdHRhY2hlZCA9IDA7CkBAIC0yMjMsOCArMjI1LDYgQEAgc2V0dXBf YmFja2dyb3VuZF93b3JrZXJzKGludCBud29ya2VycywgZHNtX3NlZ21lbnQgKnNlZykKIAlz cHJpbnRmKHdvcmtlci5iZ3dfZnVuY3Rpb25fbmFtZSwgInRlc3Rfc2htX21xX21haW4iKTsK IAlzbnByaW50Zih3b3JrZXIuYmd3X3R5cGUsIEJHV19NQVhMRU4sICJ0ZXN0X3NobV9tcSIp OwogCXdvcmtlci5iZ3dfbWFpbl9hcmcgPSBVSW50MzJHZXREYXR1bShkc21fc2VnbWVudF9o YW5kbGUoc2VnKSk7Ci0JLyogc2V0IGJnd19ub3RpZnlfcGlkLCBzbyB3ZSBjYW4gZGV0ZWN0 IGlmIHRoZSB3b3JrZXIgc3RvcHMgKi8KLQl3b3JrZXIuYmd3X25vdGlmeV9waWQgPSBNeVBy b2NQaWQ7CiAKIAkvKiBSZWdpc3RlciB0aGUgd29ya2Vycy4gKi8KIAlmb3IgKGkgPSAwOyBp IDwgbndvcmtlcnM7ICsraSkKQEAgLTI2NSw2ICsyNjUsOSBAQCB3YWl0X2Zvcl93b3JrZXJz X3RvX2JlY29tZV9yZWFkeSh3b3JrZXJfc3RhdGUgKndzdGF0ZSwKIAl7CiAJCWludAkJCXdv cmtlcnNfcmVhZHk7CiAKKwkJLyogQ2xlYXIgdGhlIGludGVycnVwdCBmbGFnIHNvIHdlIGRv bid0IHNwaW4uICovCisJCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9XQUlUX1dBS0VVUCk7 CisKIAkJLyogSWYgYWxsIHRoZSB3b3JrZXJzIGFyZSByZWFkeSwgd2UgaGF2ZSBzdWNjZWVk ZWQuICovCiAJCVNwaW5Mb2NrQWNxdWlyZSgmaGRyLT5tdXRleCk7CiAJCXdvcmtlcnNfcmVh ZHkgPSBoZHItPndvcmtlcnNfcmVhZHk7CkBAIC0yODcsMTEgKzI5MCw5IEBAIHdhaXRfZm9y X3dvcmtlcnNfdG9fYmVjb21lX3JlYWR5KHdvcmtlcl9zdGF0ZSAqd3N0YXRlLAogCQkJd2Vf Ymd3b3JrZXJfc3RhcnR1cCA9IFdhaXRFdmVudEV4dGVuc2lvbk5ldygiVGVzdFNobU1xQmdX b3JrZXJTdGFydHVwIik7CiAKIAkJLyogV2FpdCB0byBiZSBzaWduYWxlZC4gKi8KLQkJKHZv aWQpIFdhaXRMYXRjaChNeUxhdGNoLCBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RF QVRILCAwLAotCQkJCQkJIHdlX2Jnd29ya2VyX3N0YXJ0dXApOwotCi0JCS8qIFJlc2V0IHRo ZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLwotCQlSZXNldExhdGNoKE15TGF0Y2gpOwor CQkodm9pZCkgV2FpdEludGVycnVwdChDaGVja0ZvckludGVycnVwdHNNYXNrIHwgSU5URVJS VVBUX1dBSVRfV0FLRVVQLAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9FWElUX09OX1BN X0RFQVRILCAwLAorCQkJCQkJCSB3ZV9iZ3dvcmtlcl9zdGFydHVwKTsKIAogCQkvKiBBbiBp bnRlcnJ1cHQgbWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZSB3YWl0aW5nLiAqLwog CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X3NobV9tcS90ZXN0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htX21xL3Rl c3QuYwppbmRleCBjZTk3ZTZlMWFhNC4uMDIyNjVmZjBmMzAgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvdGVzdC5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9zaG1fbXEvdGVzdC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSAicG9zdGdy ZXMuaCIKIAogI2luY2x1ZGUgImZtZ3IuaCIKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAidmFyYXR0LmgiCkBAIC0xNzEsNiArMTcx LDggQEAgdGVzdF9zaG1fbXFfcGlwZWxpbmVkKFBHX0ZVTkNUSU9OX0FSR1MpCiAJewogCQli b29sCQl3YWl0ID0gdHJ1ZTsKIAorCQlDbGVhckludGVycnVwdChJTlRFUlJVUFRfV0FJVF9X QUtFVVApOworCiAJCS8qCiAJCSAqIElmIHdlIGhhdmVuJ3QgeWV0IHNlbnQgdGhlIG1lc3Nh Z2UgdGhlIHJlcXVpc2l0ZSBudW1iZXIgb2YgdGltZXMsCiAJCSAqIHRyeSBhZ2FpbiB0byBz ZW5kIGl0IG5vdy4gIE5vdGUgdGhhdCB3aGVuIHNobV9tcV9zZW5kKCkgcmV0dXJucwpAQCAt MjM1LDEzICsyMzcsMTMgQEAgdGVzdF9zaG1fbXFfcGlwZWxpbmVkKFBHX0ZVTkNUSU9OX0FS R1MpCiAKIAkJCS8qCiAJCQkgKiBJZiB3ZSBtYWRlIG5vIHByb2dyZXNzLCB3YWl0IGZvciBv bmUgb2YgdGhlIG90aGVyIHByb2Nlc3NlcyB0bwotCQkJICogd2hpY2ggd2UgYXJlIGNvbm5l Y3RlZCB0byBzZXQgb3VyIGxhdGNoLCBpbmRpY2F0aW5nIHRoYXQgdGhleQotCQkJICogaGF2 ZSByZWFkIG9yIHdyaXR0ZW4gZGF0YSBhbmQgdGhlcmVmb3JlIHRoZXJlIG1heSBub3cgYmUg d29yawotCQkJICogZm9yIHVzIHRvIGRvLgorCQkJICogd2hpY2ggd2UgYXJlIGNvbm5lY3Rl ZCB0byBzZW5kIHVzIHRoZSBJTlRFUlJVUFRfV0FJVF9XQUtFVVAKKwkJCSAqIGludGVycnVw dCwgaW5kaWNhdGluZyB0aGF0IHRoZXkgaGF2ZSByZWFkIG9yIHdyaXR0ZW4gZGF0YSBhbmQK KwkJCSAqIHRoZXJlZm9yZSB0aGVyZSBtYXkgbm93IGJlIHdvcmsgZm9yIHVzIHRvIGRvLgog CQkJICovCi0JCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsIFdMX0xBVENIX1NFVCB8IFdM X0VYSVRfT05fUE1fREVBVEgsIDAsCi0JCQkJCQkJIHdlX21lc3NhZ2VfcXVldWUpOwotCQkJ UmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJCSh2b2lkKSBXYWl0SW50ZXJydXB0KENoZWNrRm9y SW50ZXJydXB0c01hc2sgfCBJTlRFUlJVUFRfV0FJVF9XQUtFVVAsCisJCQkJCQkJCSBXTF9J TlRFUlJVUFQgfCBXTF9FWElUX09OX1BNX0RFQVRILCAwLAorCQkJCQkJCQkgd2VfbWVzc2Fn ZV9xdWV1ZSk7CiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCQl9CiAJfQpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobV9tcS90ZXN0X3NobV9tcS5oIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X3NobV9tcS90ZXN0X3NobV9tcS5oCmluZGV4IGI2YTAyOTAy ODljLi42ZjA4MjZiZTM0MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3No bV9tcS90ZXN0X3NobV9tcS5oCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEv dGVzdF9zaG1fbXEuaApAQCAtMjgsNiArMjgsOCBAQAogICovCiB0eXBlZGVmIHN0cnVjdAog eworCVByb2NOdW1iZXIJbGVhZGVyX3Byb2NfbnVtYmVyOworCiAJc2xvY2tfdAkJbXV0ZXg7 CiAJaW50CQkJd29ya2Vyc190b3RhbDsKIAlpbnQJCQl3b3JrZXJzX2F0dGFjaGVkOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NobV9tcS93b3JrZXIuYyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvd29ya2VyLmMKaW5kZXggZTEzYzA1YWU1YzcuLjk4 YWQ2MWZjODAwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2htX21xL3dv cmtlci5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zaG1fbXEvd29ya2VyLmMKQEAg LTE5LDkgKzE5LDggQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKLSNpbmNsdWRlICJt aXNjYWRtaW4uaCIKKyNpbmNsdWRlICJpcGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9pcGMuaCIKLSNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3NobV9tcS5oIgpAQCAtNTQsNyArNTMsNiBAQCB0ZXN0X3NobV9tcV9tYWlu KERhdHVtIG1haW5fYXJnKQogCXNobV9tcV9oYW5kbGUgKm91dHFoOwogCXZvbGF0aWxlIHRl c3Rfc2htX21xX2hlYWRlciAqaGRyOwogCWludAkJCW15d29ya2VybnVtYmVyOwotCVBHUFJP QwkgICAqcmVnaXN0cmFudDsKIAogCS8qIFVuYmxvY2sgc2lnbmFscy4gIFRoZSBzdGFuZGFy ZCBzaWduYWwgaGFuZGxlcnMgYXJlIE9LIGZvciB1cy4gKi8KIAlCYWNrZ3JvdW5kV29ya2Vy VW5ibG9ja1NpZ25hbHMoKTsKQEAgLTExOCwxMyArMTE2LDcgQEAgdGVzdF9zaG1fbXFfbWFp bihEYXR1bSBtYWluX2FyZykKIAlTcGluTG9ja0FjcXVpcmUoJmhkci0+bXV0ZXgpOwogCSsr aGRyLT53b3JrZXJzX3JlYWR5OwogCVNwaW5Mb2NrUmVsZWFzZSgmaGRyLT5tdXRleCk7Ci0J cmVnaXN0cmFudCA9IEJhY2tlbmRQaWRHZXRQcm9jKE15Qmd3b3JrZXJFbnRyeS0+Ymd3X25v dGlmeV9waWQpOwotCWlmIChyZWdpc3RyYW50ID09IE5VTEwpCi0JewotCQllbG9nKERFQlVH MSwgInJlZ2lzdHJhbnQgYmFja2VuZCBoYXMgZXhpdGVkIHByZW1hdHVyZWx5Iik7Ci0JCXBy b2NfZXhpdCgxKTsKLQl9Ci0JU2V0TGF0Y2goJnJlZ2lzdHJhbnQtPnByb2NMYXRjaCk7CisJ U2VuZEludGVycnVwdChJTlRFUlJVUFRfV0FJVF9XQUtFVVAsIGhkci0+bGVhZGVyX3Byb2Nf bnVtYmVyKTsKIAogCS8qIERvIHRoZSB3b3JrLiAqLwogCWNvcHlfbWVzc2FnZXMoaW5xaCwg b3V0cWgpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy93b3JrZXJfc3BpL3dvcmtl cl9zcGkuYyBiL3NyYy90ZXN0L21vZHVsZXMvd29ya2VyX3NwaS93b3JrZXJfc3BpLmMKaW5k ZXggZDFlNGEyYmQ5NTIuLjhmOWZhOWUxODM0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1 bGVzL3dvcmtlcl9zcGkvd29ya2VyX3NwaS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvd29y a2VyX3NwaS93b3JrZXJfc3BpLmMKQEAgLTQsOCArNCw4IEBACiAgKgkJU2FtcGxlIGJhY2tn cm91bmQgd29ya2VyIGNvZGUgdGhhdCBkZW1vbnN0cmF0ZXMgdmFyaW91cyBjb2RpbmcKICAq CQlwYXR0ZXJuczogZXN0YWJsaXNoaW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbjsgc3RhcnRp bmcgYW5kIGNvbW1pdHRpbmcKICAqCQl0cmFuc2FjdGlvbnM7IHVzaW5nIEdVQyB2YXJpYWJs ZXMsIGFuZCBoZWVkaW5nIFNJR0hVUCB0byByZXJlYWQKLSAqCQl0aGUgY29uZmlndXJhdGlv biBmaWxlOyByZXBvcnRpbmcgdG8gcGdfc3RhdF9hY3Rpdml0eTsgdXNpbmcgdGhlCi0gKgkJ cHJvY2VzcyBsYXRjaCB0byBzbGVlcCBhbmQgZXhpdCBpbiBjYXNlIG9mIHBvc3RtYXN0ZXIg ZGVhdGguCisgKgkJdGhlIGNvbmZpZ3VyYXRpb24gZmlsZTsgcmVwb3J0aW5nIHRvIHBnX3N0 YXRfYWN0aXZpdHk7IHVzaW5nCisgKgkJV2FpdEludGVycnVwdCB0byBzbGVlcCBhbmQgZXhp dCBpbiBjYXNlIG9mIHBvc3RtYXN0ZXIgZGVhdGguCiAgKgogICogVGhpcyBjb2RlIGNvbm5l Y3RzIHRvIGEgZGF0YWJhc2UsIGNyZWF0ZXMgYSBzY2hlbWEgYW5kIHRhYmxlLCBhbmQgc3Vt bWFyaXplcwogICogdGhlIG51bWJlcnMgY29udGFpbmVkIHRoZXJlaW4uICBUbyBzZWUgaXQg d29ya2luZywgaW5zZXJ0IGFuIGluaXRpYWwgdmFsdWUKQEAgLTIzLDEwICsyMyw4IEBACiAj aW5jbHVkZSAicG9zdGdyZXMuaCIKIAogLyogVGhlc2UgYXJlIGFsd2F5cyBuZWNlc3Nhcnkg Zm9yIGEgYmd3b3JrZXIgKi8KLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJp cGMvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgotI2lu Y2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCi0jaW5jbHVkZSAic3RvcmFnZS9sYXRj aC5oIgogCiAvKiB0aGVzZSBoZWFkZXJzIGFyZSB1c2VkIGJ5IHRoaXMgcGFydGljdWxhciB3 b3JrZXIncyBjb2RlICovCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKQEAgLTE1NSwxMSAr MTUzLDEwIEBAIHdvcmtlcl9zcGlfbWFpbihEYXR1bSBtYWluX2FyZykKIAlwICs9IHNpemVv ZihPaWQpOwogCW1lbWNweSgmZmxhZ3MsIHAsIHNpemVvZihiaXRzMzIpKTsKIAotCS8qIEVz dGFibGlzaCBzaWduYWwgaGFuZGxlcnMgYmVmb3JlIHVuYmxvY2tpbmcgc2lnbmFscy4gKi8K LQlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBx c2lnbmFsKFNJR1RFUk0sIGRpZSk7Ci0KLQkvKiBXZSdyZSBub3cgcmVhZHkgdG8gcmVjZWl2 ZSBzaWduYWxzICovCisJLyoKKwkgKiBUaGUgc3RhbmRhcmQgaW50ZXJydXB0IGFuZCBzaWdu YWwgaGFuZGxlcnMgYXJlIE9LIGZvciB1czsgdW5ibG9jaworCSAqIHNpZ25hbHMuCisJICov CiAJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CiAKIAkvKiBDb25uZWN0IHRv IG91ciBkYXRhYmFzZSAqLwpAQCAtMjEzLDI2ICsyMTAsMjUgQEAgd29ya2VyX3NwaV9tYWlu KERhdHVtIG1haW5fYXJnKQogCiAJCS8qCiAJCSAqIEJhY2tncm91bmQgd29ya2VycyBtdXN0 bid0IGNhbGwgdXNsZWVwKCkgb3IgYW55IGRpcmVjdCBlcXVpdmFsZW50OgotCQkgKiBpbnN0 ZWFkLCB0aGV5IG1heSB3YWl0IG9uIHRoZWlyIHByb2Nlc3MgbGF0Y2gsIHdoaWNoIHNsZWVw cyBhcwotCQkgKiBuZWNlc3NhcnksIGJ1dCBpcyBhd2FrZW5lZCBpZiBwb3N0bWFzdGVyIGRp ZXMuICBUaGF0IHdheSB0aGUKLQkJICogYmFja2dyb3VuZCBwcm9jZXNzIGdvZXMgYXdheSBp bW1lZGlhdGVseSBpbiBhbiBlbWVyZ2VuY3kuCisJCSAqIGluc3RlYWQsIHRoZXkgbWF5IHVz ZSBXYWl0SW50ZXJydXB0LCB3aGljaCBzbGVlcHMgYXMgbmVjZXNzYXJ5LCBidXQKKwkJICog aXMgYXdha2VuZWQgaWYgcG9zdG1hc3RlciBkaWVzLiAgVGhhdCB3YXkgdGhlIGJhY2tncm91 bmQgcHJvY2VzcworCQkgKiBnb2VzIGF3YXkgaW1tZWRpYXRlbHkgaW4gYW4gZW1lcmdlbmN5 LgogCQkgKi8KLQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLAotCQkJCQkJIFdMX0xBVENI X1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRILAotCQkJCQkJIHdvcmtl cl9zcGlfbmFwdGltZSAqIDEwMDBMLAotCQkJCQkJIHdvcmtlcl9zcGlfd2FpdF9ldmVudF9t YWluKTsKLQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKKwkJKHZvaWQpIFdhaXRJbnRlcnJ1cHQo Q2hlY2tGb3JJbnRlcnJ1cHRzTWFzayB8CisJCQkJCQkJIElOVEVSUlVQVF9DT05GSUdfUkVM T0FELAorCQkJCQkJCSBXTF9JTlRFUlJVUFQgfCBXTF9USU1FT1VUIHwgV0xfRVhJVF9PTl9Q TV9ERUFUSCwKKwkJCQkJCQkgd29ya2VyX3NwaV9uYXB0aW1lICogMTAwMEwsCisJCQkJCQkJ IHdvcmtlcl9zcGlfd2FpdF9ldmVudF9tYWluKTsKIAogCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOwogCiAJCS8qCi0JCSAqIEluIGNhc2Ugb2YgYSBTSUdIVVAsIGp1c3QgcmVsb2FkIHRo ZSBjb25maWd1cmF0aW9uLgorCQkgKiBSZWxvYWQgY29uZmlndXJhdGlvbiBpZiByZXF1ZXN0 ZWQuICBUaGlzIGlzIG5vdCBkb25lIGJ5CisJCSAqIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkg YmVjYXVzZSB3ZSBvbmx5IHdhbnQgaXQgdG8gaGFwcGVuIGhlcmUgaW4KKwkJICogdGhlIG1h aW4gbG9vcC4KIAkJICovCi0JCWlmIChDb25maWdSZWxvYWRQZW5kaW5nKQotCQl7Ci0JCQlD b25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJCWlmIChDb25zdW1lSW50ZXJydXB0KElO VEVSUlVQVF9DT05GSUdfUkVMT0FEKSkKIAkJCVByb2Nlc3NDb25maWdGaWxlKFBHQ19TSUdI VVApOwotCQl9CiAKIAkJLyoKIAkJICogU3RhcnQgYSB0cmFuc2FjdGlvbiBvbiB3aGljaCB3 ZSBjYW4gcnVuIHF1ZXJpZXMuICBOb3RlIHRoYXQgZWFjaApAQCAtMzY2LDcgKzM2Miw2IEBA IF9QR19pbml0KHZvaWQpCiAJd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUgPSBCR1dfTkVWRVJf UkVTVEFSVDsKIAlzcHJpbnRmKHdvcmtlci5iZ3dfbGlicmFyeV9uYW1lLCAid29ya2VyX3Nw aSIpOwogCXNwcmludGYod29ya2VyLmJnd19mdW5jdGlvbl9uYW1lLCAid29ya2VyX3NwaV9t YWluIik7Ci0Jd29ya2VyLmJnd19ub3RpZnlfcGlkID0gMDsKIAogCS8qCiAJICogTm93IGZp bGwgaW4gd29ya2VyLXNwZWNpZmljIGRhdGEsIGFuZCBkbyB0aGUgYWN0dWFsIHJlZ2lzdHJh dGlvbnMuCkBAIC00MjAsOCArNDE1LDYgQEAgd29ya2VyX3NwaV9sYXVuY2goUEdfRlVOQ1RJ T05fQVJHUykKIAlzbnByaW50Zih3b3JrZXIuYmd3X25hbWUsIEJHV19NQVhMRU4sICJ3b3Jr ZXJfc3BpIGR5bmFtaWMgd29ya2VyICVkIiwgaSk7CiAJc25wcmludGYod29ya2VyLmJnd190 eXBlLCBCR1dfTUFYTEVOLCAid29ya2VyX3NwaSBkeW5hbWljIik7CiAJd29ya2VyLmJnd19t YWluX2FyZyA9IEludDMyR2V0RGF0dW0oaSk7Ci0JLyogc2V0IGJnd19ub3RpZnlfcGlkIHNv IHRoYXQgd2UgY2FuIHVzZSBXYWl0Rm9yQmFja2dyb3VuZFdvcmtlclN0YXJ0dXAgKi8KLQl3 b3JrZXIuYmd3X25vdGlmeV9waWQgPSBNeVByb2NQaWQ7CiAKIAkvKiBleHRyYWN0IGZsYWdz LCBpZiBhbnkgKi8KIAluZGltID0gQVJSX05ESU0oYXJyKTsKZGlmZiAtLWdpdCBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKaW5kZXggNzdlM2MwNDE0NGUuLjhhMzU0M2NjYjg3IDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMTMyOCw2ICsxMzI4LDcgQEAgSW50ZWdlcgogSW50ZWdl clNldAogSW50ZXJuYWxEZWZhdWx0QUNMCiBJbnRlcm5hbEdyYW50CitJbnRlcnJ1cHRNYXNr CiBJbnRlcnZhbAogSW50ZXJ2YWxBZ2dTdGF0ZQogSW50b0NsYXVzZQpAQCAtMTU2NSw3ICsx NTY2LDYgQEAgTFo0U3RhdGUKIExhYmVsUHJvdmlkZXIKIExhZ1RyYWNrZXIKIExhcmdlT2Jq ZWN0RGVzYwotTGF0Y2gKIExhdW5jaGVyTGFzdFN0YXJ0VGltZXNFbnRyeQogTGVycEZ1bmMK IExleERlc2NyCkBAIC0yMDI5LDYgKzIwMjksNyBAQCBQTHlVbmljb2RlX0Zyb21TdHJpbmdB bmRTaXplX3QKIFBMeV9lbG9nX2ltcGxfdAogUE1DaGlsZAogUE1DaGlsZFBvb2wKK1BNQ2hp bGRTbG90RGF0YQogUE1JTklEVU1QX0NBTExCQUNLX0lORk9STUFUSU9OCiBQTUlOSURVTVBf RVhDRVBUSU9OX0lORk9STUFUSU9OCiBQTUlOSURVTVBfVVNFUl9TVFJFQU1fSU5GT1JNQVRJ T04KLS0gCjIuNDcuMwoK --------------q01luzhinYR3hIjKSuMMW8ZM Content-Type: text/x-patch; charset=UTF-8; name="v12-0004-Introduce-PendingInterrupts-with-separate-flags-.patch" Content-Disposition: attachment; filename*0="v12-0004-Introduce-PendingInterrupts-with-separate-flags-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0MjY0Yjk0YmQ3ZGE1NWZjZWU1NDQ1OTZiNzUxZjJkY2ExNzk2MDI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjAgRmViIDIwMjYgMTY6MTQ6MDkgKzAyMDAK U3ViamVjdDogW1BBVENIIHYxMiA0LzRdIEludHJvZHVjZSBQZW5kaW5nSW50ZXJydXB0cyB3 aXRoIHNlcGFyYXRlICdmbGFncycKIGZpZWxkIGFuZCAiYXR0ZW50aW9uIgoKVGhpcyBkb2Vz IGEgY291cGxlIG9mIHRoaW5nczoKCi0gU3BsaXQgdGhlIGludGVycnVwdHMgbWFzayBpbnRv IHR3byAzMi1iaXQgZmllbGRzIG9uCiAgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVMQVRJT04g c3lzdGVtcy4gVGhpcyBmaXhlcyB0aGUgc2VsZi1kZWFkbG9jawogIHJpc2sgd2hlbiB1c2Vk IGZyb20gc2lnbmFsIGhhbmRsZXJzLgoKLSBJbnRyb2R1Y2UgYW4gImF0dGVudGlvbiBtYXNr IiBmaWVsZCwgd2hlcmUgdGhlIGJhY2tlbmQgY2FuIGFkdmVydGlzZQogIHRoZSBpbnRlcnJ1 cHRzIGl0IGlzIGN1cnJlbnRseSBpbnRlcmVzdGVkIGluLCBhbmQgYSBzZXBhcmF0ZSAiZmxh Z3MiCiAgZmllbGQuIFdlIG5vIGxvbmdlciBuZWVkIHRvIHN0ZWFsIGJpdHMgZnJvbSB0aGUg aW50ZXJydXB0IG1hc2sgZm9yCiAgdGhlIGZsYWdzLgoKICBXaGVuZXZlciBhIGJhY2tlbmQg c2VuZHMgYW4gaW50ZXJydXB0LCBpdCBjaGVja3MgdGhlIGF0dGVudGlvbiBtYXNrCiAgYW5k IG9ubHkgd2FrZXMgdXAgdGhlIGJhY2tlbmQgaWYgdGhlIGludGVycnVwdCBpcyBpbiB0aGUg YXR0ZW50aW9uCiAgbWFzay4gV2hlbiBub3Qgc2xlZXBpbmcsIHRoZSBzYW1lIG1lY2hhbmlz bSBpcyB1c2VkIHRvIHNldCBhIGZsYWcKICBmb3IgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwg dGVsbGluZyB0aGUgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpCiAgdGhhdCBpdCBoYXMg c29tZSB3b3JrIHRvIGRvLiBCeSBtb3ZpbmcgdGhhdCB3b3JrIG9mIGNoZWNraW5nIHRoZQog IGF0dGVudGlvbiBtYXNrIHRvIHRoZSBzZW5kZXIsIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkg bmVlZHMgZmV3ZXIKICBpbnN0cnVjdGlvbnMuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGdkb2luc2VydC5jIHwgICA5ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9wYXJhbGxlbC5jICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2lwYy9pbnRlcnJ1cHQuYyAg ICAgICAgICAgICB8IDMxNyArKysrKysrKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvaXBjLmMgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy93YWl0ZXZlbnRzZXQuYyAgfCAgNTggKystLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC91dGlscy9lcnJvci9l bG9nLmMgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL2lwYy9pbnRlcnJ1cHQuaCAg ICAgICAgICAgICB8IDM4MyArKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRl L2lwYy9zdGFuZGFyZF9pbnRlcnJ1cHRzLmggICB8IDE5NCArKysrKysrKysrKysKIHNyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvYy5oICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgIHwgICAxICsKIDExIGZpbGVzIGNoYW5n ZWQsIDYzNCBpbnNlcnRpb25zKCspLCAzNTAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2luY2x1ZGUvaXBjL3N0YW5kYXJkX2ludGVycnVwdHMuaAoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnZG9pbnNlcnQuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnZG9pbnNlcnQuYwppbmRleCBiOGI1ZWFhYzU3YS4uN2M3 MzcxYzY5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnZG9p bnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2RvaW5zZXJ0LmMK QEAgLTIwMzUsMTEgKzIwMzUsOCBAQCBzcGdkb2luc2VydChSZWxhdGlvbiBpbmRleCwgU3BH aXN0U3RhdGUgKnN0YXRlLAogCQkgKiBwZW5kaW5nLCBicmVhayBvdXQgb2YgdGhlIGxvb3Ag YW5kIGRlYWwgd2l0aCB0aGUgc2l0dWF0aW9uIGJlbG93LgogCQkgKiBTZXQgcmVzdWx0ID0g ZmFsc2UgYmVjYXVzZSB3ZSBtdXN0IHJlc3RhcnQgdGhlIGluc2VydGlvbiBpZiB0aGUKIAkJ ICogaW50ZXJydXB0IGlzbid0IGEgcXVlcnktY2FuY2VsLW9yLWRpZSBjYXNlLgotCQkgKgot CQkgKiBGSVhNRTogQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayBjb3ZlcnMgbW9yZSB0aGFuIGp1 c3QgcXVlcnkgY2FuY2VsCi0JCSAqIGFuZCBkaWUuICBDb3VsZCB3ZSBiZSBtb3JlIHByZWNp c2UgaGVyZT8KIAkJICovCi0JCWlmIChJTlRFUlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKENo ZWNrRm9ySW50ZXJydXB0c01hc2spKQorCQlpZiAoSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJ VElPTigpKQogCQl7CiAJCQlyZXN1bHQgPSBmYWxzZTsKIAkJCWJyZWFrOwpAQCAtMjE2NSw3 ICsyMTYyLDcgQEAgc3BnZG9pbnNlcnQoUmVsYXRpb24gaW5kZXgsIFNwR2lzdFN0YXRlICpz dGF0ZSwKIAkJCSAqIHJlcGVhdGVkbHksIGNoZWNrIGZvciBxdWVyeSBjYW5jZWwgKHNlZSBj b21tZW50cyBhYm92ZSkuCiAJCQkgKi8KIAlwcm9jZXNzX2lubmVyX3R1cGxlOgotCQkJaWYg KElOVEVSUlVQVFNfUEVORElOR19DT05ESVRJT04oQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaykp CisJCQlpZiAoSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTigpKQogCQkJewogCQkJCXJl c3VsdCA9IGZhbHNlOwogCQkJCWJyZWFrOwpAQCAtMjM0MSw3ICsyMzM4LDcgQEAgc3BnZG9p bnNlcnQoUmVsYXRpb24gaW5kZXgsIFNwR2lzdFN0YXRlICpzdGF0ZSwKIAkgKiB3ZXJlIHRo ZSBjYXNlLCB0ZWxsaW5nIHRoZSBjYWxsZXIgdG8gcmV0cnkgd291bGQgY3JlYXRlIGFuIGlu ZmluaXRlCiAJICogbG9vcC4KIAkgKi8KLQlBc3NlcnQoSU5URVJSVVBUU19DQU5fQkVfUFJP Q0VTU0VEKENoZWNrRm9ySW50ZXJydXB0c01hc2spKTsKKwlBc3NlcnQoSU5URVJSVVBUU19D QU5fQkVfUFJPQ0VTU0VEKCkpOwogCiAJLyoKIAkgKiBGaW5hbGx5LCBjaGVjayBmb3IgaW50 ZXJydXB0cyBhZ2Fpbi4gIElmIHRoZXJlIHdhcyBhIHF1ZXJ5IGNhbmNlbCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jCmluZGV4IGM2NjhhMjZkNWEwLi4yOTVhOTBl N2QyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jCkBAIC0yMzgs NyArMjM4LDcgQEAgSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKFBhcmFsbGVsQ29udGV4dCAqcGN4 dCkKIAkgKiBXZSBjYW4gZGVhbCB3aXRoIHRoYXQgZWRnZSBjYXNlIGJ5IHByZXRlbmRpbmcg bm8gd29ya2VycyB3ZXJlCiAJICogcmVxdWVzdGVkLgogCSAqLwotCWlmICghSU5URVJSVVBU U19DQU5fQkVfUFJPQ0VTU0VEKENoZWNrRm9ySW50ZXJydXB0c01hc2spKQorCWlmICghSU5U RVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKCkpCiAJCXBjeHQtPm53b3JrZXJzID0gMDsKIAog CS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9pcGMvaW50ZXJydXB0LmMgYi9zcmMvYmFj a2VuZC9pcGMvaW50ZXJydXB0LmMKaW5kZXggNjFkMTQ4NDA5YmMuLmNmOTAxZWIxZDlkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9pcGMvaW50ZXJydXB0LmMKKysrIGIvc3JjL2JhY2tl bmQvaXBjL2ludGVycnVwdC5jCkBAIC0yMiwyOSArMjIsMTggQEAKICNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5oIgogCisKKy8qIFZhcmlh YmxlcyBmb3IgdGhlIGhvbGRvZmYgbWVjaGFuaXNtICovCit1aW50MzIJCUludGVycnVwdEhv bGRvZmZDb3VudCA9IDA7Cit1aW50MzIJCUNyaXRTZWN0aW9uQ291bnQgPSAwOworCiAvKgog ICogQ3VycmVudGx5IGluc3RhbGxlZCBpbnRlcnJ1cHQgaGFuZGxlcnMKICAqLwogc3RhdGlj IHBnX2ludGVycnVwdF9oYW5kbGVyX3QgaW50ZXJydXB0X2hhbmRsZXJzWzY0XTsKIAotLyoK LSAqIFhYWDogaXMgJ3ZvbGF0aWxlJyBzdGlsbCBuZWVkZWQgb24gYWxsIHRoZSB2YXJpYWJs ZXMgYmVsb3c/IFdoaWNoIG9uZXMgYXJlCi0gKiBhY2Nlc3NlZCBmcm9tIHNpZ25hbCBoYW5k bGVycz8KLSAqLwotCiAvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBlbmFibGVkIGludGVycnVw dHMgKi8KLXZvbGF0aWxlIEludGVycnVwdE1hc2sgRW5hYmxlZEludGVycnVwdHNNYXNrOwot Ci0vKgotICogSW50ZXJydXB0cyB0aGF0IHdvdWxkIGJlIHByb2Nlc3NlZCBieSBDSEVDS19G T1JfSU5URVJSVVBUUygpLiAgVGhpcyBpcwotICogZXF1YWwgdG8gRW5hYmxlZEludGVycnVw dHNNYXNrLCBleGNlcHQgd2hlbiBpbnRlcnJ1cHRzIGFyZSBoZWxkIG9mZiBieQotICogSE9M RC9SRVNVTUVfSU5URVJSVVBUUygpIG9yIGEgY3JpdGljYWwgc2VjdGlvbi4KLSAqLwotdm9s YXRpbGUgSW50ZXJydXB0TWFzayBDaGVja0ZvckludGVycnVwdHNNYXNrOwotCi0vKiBWYXJp YWJsZXMgZm9yIGhvbGRvZmYgbWVjaGFuaXNtICovCi12b2xhdGlsZSB1aW50MzIgSW50ZXJy dXB0SG9sZG9mZkNvdW50ID0gMDsKLXZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50 ID0gMDsKK0ludGVycnVwdE1hc2sgRW5hYmxlZEludGVycnVwdHNNYXNrOwogCiAvKiBBIGNv bW1vbiBXYWl0RXZlbnRTZXQgdXNlZCB0byBpbXBsZW1lbnQgV2FpdEludGVycnVwdCgpICov CiBzdGF0aWMgV2FpdEV2ZW50U2V0ICpJbnRlcnJ1cHRXYWl0U2V0OwpAQCAtNTMsOSArNDIs MTAgQEAgc3RhdGljIFdhaXRFdmVudFNldCAqSW50ZXJydXB0V2FpdFNldDsKICNkZWZpbmUg SW50ZXJydXB0V2FpdFNldEludGVycnVwdFBvcyAwCiAjZGVmaW5lIEludGVycnVwdFdhaXRT ZXRQb3N0bWFzdGVyRGVhdGhQb3MgMQogCi1zdGF0aWMgcGdfYXRvbWljX3VpbnQ2NCBMb2Nh bFBlbmRpbmdJbnRlcnJ1cHRzOwotCi1wZ19hdG9taWNfdWludDY0ICpNeVBlbmRpbmdJbnRl cnJ1cHRzID0gJkxvY2FsUGVuZGluZ0ludGVycnVwdHM7CitzdGF0aWMgUGVuZGluZ0ludGVy cnVwdHMgTG9jYWxQZW5kaW5nSW50ZXJydXB0czsKK1BlbmRpbmdJbnRlcnJ1cHRzICpNeVBl bmRpbmdJbnRlcnJ1cHRzID0gJkxvY2FsUGVuZGluZ0ludGVycnVwdHM7CitwZ19hdG9taWNf dWludDMyICpNeVBlbmRpbmdJbnRlcnJ1cHRzRmxhZ3MgPSAmTG9jYWxQZW5kaW5nSW50ZXJy dXB0cy5mbGFnczsKK2NvbnN0IHBnX2F0b21pY191aW50MzIgWmVyb1BlbmRpbmdJbnRlcnJ1 cHRzRmxhZ3M7CiAKIHN0YXRpYyBpbnQJbmV4dEFkZGluSW50ZXJydXB0Qml0ID0gQkVHSU5f QURESU5fSU5URVJSVVBUUzsKIApAQCAtOTQsMTAgKzg0LDggQEAgRW5hYmxlSW50ZXJydXB0 KEludGVycnVwdE1hc2sgaW50ZXJydXB0TWFzaykKIAkJCUFzc2VydChpbnRlcnJ1cHRfaGFu ZGxlcnNbaV0gIT0gTlVMTCk7CiAJfQogI2VuZGlmCi0KIAlFbmFibGVkSW50ZXJydXB0c01h c2sgfD0gaW50ZXJydXB0TWFzazsKLQlpZiAoSW50ZXJydXB0SG9sZG9mZkNvdW50ID09IDAg JiYgQ3JpdFNlY3Rpb25Db3VudCA9PSAwKQotCQlDaGVja0ZvckludGVycnVwdHNNYXNrID0g RW5hYmxlZEludGVycnVwdHNNYXNrOworCVNldEludGVycnVwdEF0dGVudGlvbk1hc2soRW5h YmxlZEludGVycnVwdHNNYXNrKTsKIH0KIAogLyoKQEAgLTExMiw2NyArMTAwLDE3MyBAQCB2 b2lkCiBEaXNhYmxlSW50ZXJydXB0KEludGVycnVwdE1hc2sgaW50ZXJydXB0TWFzaykKIHsK IAlFbmFibGVkSW50ZXJydXB0c01hc2sgJj0gfmludGVycnVwdE1hc2s7CisjaWZuZGVmIFBH X0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCisJcGdfYXRvbWljX3dyaXRlX3U2NCgmTXlQ ZW5kaW5nSW50ZXJydXB0cy0+YXR0ZW50aW9uX21hc2ssIEVuYWJsZWRJbnRlcnJ1cHRzTWFz ayk7CisjZWxzZQorCXBnX2F0b21pY193cml0ZV91MzIoJk15UGVuZGluZ0ludGVycnVwdHMt PmF0dGVudGlvbl9tYXNrX2xvLCAodWludDMyKSBFbmFibGVkSW50ZXJydXB0c01hc2spOwor CXBnX2F0b21pY193cml0ZV91MzIoJk15UGVuZGluZ0ludGVycnVwdHMtPmF0dGVudGlvbl9t YXNrX2hpLCAodWludDMyKSAoRW5hYmxlZEludGVycnVwdHNNYXNrID4+IDMyKSk7CisjZW5k aWYKKworCS8qCisJICogTm90ZTogdGhlIEFUVEVOVElPTiBmbGFnIG1pZ2h0IG5vdyBiZSB1 bm5lY2Vzc2FyaWx5IHNldC4gV2UgZG9uJ3QgdHJ5CisJICogdG8gY2xlYXIgaXQgaGVyZSwg dGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB3aWxsIHRha2UgY2FyZSBvZiBpdC4K KwkgKi8KK30KKworLyoKKyAqIFJlc2V0IEludGVycnVwdEhvbGRvZmZDb3VudCBhbmQgQ3Jp dFNlY3Rpb25Db3VudCB0byBnaXZlbiB2YWx1ZXMuICBVc2VkCisgKiB3aGVuIHJlY292ZXJp bmcgZnJvbSBhbiBlcnJvci4KKyAqLwordm9pZAorUmVzZXRJbnRlcnJ1cHRIb2xkb2ZmQ291 bnRzKHVpbnQzMiBuZXdfaG9sZG9mZl9jb3VudCwgdWludDMyIG5ld19jcml0X3NlY3Rpb25f Y291bnQpCit7CisJSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gbmV3X2hvbGRvZmZfY291bnQ7 CisJQ3JpdFNlY3Rpb25Db3VudCA9IG5ld19jcml0X3NlY3Rpb25fY291bnQ7CiAJaWYgKElu dGVycnVwdEhvbGRvZmZDb3VudCA9PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCkKLQkJ Q2hlY2tGb3JJbnRlcnJ1cHRzTWFzayA9IEVuYWJsZWRJbnRlcnJ1cHRzTWFzazsKKwkJTXlQ ZW5kaW5nSW50ZXJydXB0c0ZsYWdzID0gJk15UGVuZGluZ0ludGVycnVwdHMtPmZsYWdzOwor CWVsc2UKKwkJTXlQZW5kaW5nSW50ZXJydXB0c0ZsYWdzID0gdW5jb25zdGlmeShwZ19hdG9t aWNfdWludDMyICosICZaZXJvUGVuZGluZ0ludGVycnVwdHNGbGFncyk7CiB9CiAKIC8qCiAg KiBQcm9jZXNzSW50ZXJydXB0czogb3V0LW9mLWxpbmUgcG9ydGlvbiBvZiBDSEVDS19GT1Jf SU5URVJSVVBUUygpIG1hY3JvCiAgKgotICogSWYgYW4gaW50ZXJydXB0IGNvbmRpdGlvbiBp cyBwZW5kaW5nLCBhbmQgaXQncyBzYWZlIHRvIHNlcnZpY2UgaXQsCi0gKiB0aGVuIGNsZWFy IHRoZSBmbGFnIGFuZCBjYWxsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqIElmIGFuIGlu dGVycnVwdCBjb25kaXRpb24gaXMgcGVuZGluZywgYW5kIGl0J3Mgc2FmZSB0byBzZXJ2aWNl IGl0LCB0aGVuCisgKiBjbGVhciB0aGUgZmxhZyBhbmQgY2FsbCB0aGUgaW50ZXJydXB0IGhh bmRsZXIuCiAgKgotICogTm90ZTogaWYgSU5URVJSVVBUU19DQU5fQkVfUFJPQ0VTU0VEKGlu dGVycnVwdCkgaXMgdHJ1ZSwgdGhlbgotICogUHJvY2Vzc0ludGVycnVwdHMgaXMgZ3VhcmFu dGVlZCB0byBjbGVhciB0aGUgZ2l2ZW4gaW50ZXJydXB0IGJlZm9yZQotICogcmV0dXJuaW5n LCBpZiBpdCB3YXMgc2V0IHdoZW4gZW50ZXJpbmcuICAoVGhpcyBpcyBub3QgdGhlIHNhbWUg YXMKLSAqIGd1YXJhbnRlZWluZyB0aGF0IGl0J3Mgc3RpbGwgY2xlYXIgd2hlbiB3ZSByZXR1 cm47IGFub3RoZXIgaW50ZXJydXB0IGNvdWxkCi0gKiBoYXZlIGFycml2ZWQuICBCdXQgd2Ug cHJvbWlzZSB0aGF0IGFueSBwcmUtZXhpc3Rpbmcgb25lIHdpbGwgaGF2ZSBiZWVuCi0gKiBz ZXJ2aWNlZC4pCisgKiBOb3RlOiBpZiBJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSBp cyB0cnVlLCBQcm9jZXNzSW50ZXJydXB0cygpIGlzCisgKiBndWFyYW50ZWVkIHRvIGNsZWFy IGFsbCB0aGUgZW5hYmxlZCBpbnRlcnJ1cHRzIGJlZm9yZSByZXR1cm5pbmcuICAoVGhpcyBp cworICogbm90IHRoZSBzYW1lIGFzIGd1YXJhbnRlZWluZyB0aGF0IGl0J3Mgc3RpbGwgY2xl YXIgd2hlbiB3ZSByZXR1cm47IGFub3RoZXIKKyAqIGludGVycnVwdCBjb3VsZCBoYXZlIGFy cml2ZWQuICBCdXQgd2UgcHJvbWlzZSB0aGF0IGFueSBwcmUtZXhpc3Rpbmcgb25lCisgKiB3 aWxsIGhhdmUgYmVlbiBzZXJ2aWNlZC4pCiAgKi8KIHZvaWQKIFByb2Nlc3NJbnRlcnJ1cHRz KHZvaWQpCiB7CisJdWludDY0CQlwZW5kaW5nOwogCUludGVycnVwdE1hc2sgaW50ZXJydXB0 c1RvUHJvY2VzczsKIAotCUFzc2VydChJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPT0gMCAmJiBD cml0U2VjdGlvbkNvdW50ID09IDApOworCUFzc2VydChJTlRFUlJVUFRTX0NBTl9CRV9QUk9D RVNTRUQoKSk7CisJQXNzZXJ0KChwZ19hdG9taWNfcmVhZF91MzIoJk15UGVuZGluZ0ludGVy cnVwdHMtPmZsYWdzKSAmIFBJX0ZMQUdfU0xFRVBJTkcpID09IDApOworCisJLyoKKwkgKiBD bGVhciB0aGUgQVRURU5USU9OIGZsYWcgZmlyc3QuIFRoaXMgZW5zdXJlcyB0aGF0IGlmIGFu eSBpbnRlcnJ1cHRzIGFyZQorCSAqIHJlY2VpdmVkIHdoaWxlIHdlJ3JlIHByb2Nlc3Npbmcs IHRoZSBmbGFnIGlzIHNldCBhZ2Fpbi4KKwkgKi8KKwkodm9pZCkgcGdfYXRvbWljX3dyaXRl X3UzMigmTXlQZW5kaW5nSW50ZXJydXB0cy0+ZmxhZ3MsIDApOworCisJLyoKKwkgKiBNYWtl IHN1cmUgb3RoZXJzIHNlZSB0aGUgY2xlYXJpbmcgb2YgdGhlIGZsYWdzLCBiZWZvcmUgd2Ug cmVhZCB0aGUKKwkgKiBwZW5kaW5nIGludGVycnVwdHMuCisJICovCisJcGdfbWVtb3J5X2Jh cnJpZXIoKTsKIAogCS8qIENoZWNrIG9uY2Ugd2hhdCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5n ICovCi0JaW50ZXJydXB0c1RvUHJvY2VzcyA9Ci0JCXBnX2F0b21pY19yZWFkX3U2NChNeVBl bmRpbmdJbnRlcnJ1cHRzKSAmIENoZWNrRm9ySW50ZXJydXB0c01hc2s7CisjaWZuZGVmIFBH X0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCisJcGVuZGluZyA9IHBnX2F0b21pY19yZWFk X3U2NCgmTXlQZW5kaW5nSW50ZXJydXB0cy0+aW50ZXJydXB0cyk7CisjZWxzZQorCXBlbmRp bmcgPSAodWludDY0KSBwZ19hdG9taWNfcmVhZF91MzIoJk15UGVuZGluZ0ludGVycnVwdHMt PmludGVycnVwdHNfbG8pOworCXBlbmRpbmcgfD0gKHVpbnQ2NCkgcGdfYXRvbWljX3JlYWRf dTMyKCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5pbnRlcnJ1cHRzX2hpKSA8PCAzMjsKKyNlbmRp ZgorCWludGVycnVwdHNUb1Byb2Nlc3MgPSBwZW5kaW5nICYgRW5hYmxlZEludGVycnVwdHNN YXNrOwogCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGhvZihpbnRlcnJ1cHRfaGFuZGxl cnMpOyBpKyspCisJaWYgKGludGVycnVwdHNUb1Byb2Nlc3MgIT0gMCkKIAl7Ci0JCWlmICgo aW50ZXJydXB0c1RvUHJvY2VzcyAmIFVJTlQ2NF9CSVQoaSkpICE9IDApCisJCUFzc2VydChJ bnRlcnJ1cHRIb2xkb2ZmQ291bnQgPT0gMCAmJiBDcml0U2VjdGlvbkNvdW50ID09IDApOwor CisJCS8qIEludGVycnVwdCBoYW5kbGVycyBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIHJlLWVu dHJhbnQuICovCisJCUhPTERfSU5URVJSVVBUUygpOworCisJCWZvciAoaW50IGkgPSAwOyBp IDwgbGVuZ3Rob2YoaW50ZXJydXB0X2hhbmRsZXJzKTsgaSsrKQogCQl7Ci0JCQkvKgotCQkJ ICogQ2xlYXIgdGhlIGludGVycnVwdCAqYmVmb3JlKiBjYWxsaW5nIHRoZSBoYW5kbGVyIGZ1 bmN0aW9uLCBzbwotCQkJICogdGhhdCBpZiB0aGUgaW50ZXJydXB0IGlzIHJlY2VpdmVkIGFn YWluIHdoaWxlIHRoZSBoYW5kbGVyCi0JCQkgKiBmdW5jdGlvbiBpcyBiZWluZyBleGVjdXRl ZCwgd2Ugd29uJ3QgbWlzcyBpdC4KLQkJCSAqCi0JCQkgKiBGb3Igc2ltaWxhciByZWFzb25z LCB3ZSBhbHNvIGNsZWFyIHRoZSBmbGFncyBvbmUgYnkgb25lIGV2ZW4gaWYKLQkJCSAqIG11 bHRpcGxlIGludGVycnVwdHMgYXJlIHBlbmRpbmcuICBPdGhlcndpc2UgaWYgb25lIG9mIHRo ZQotCQkJICogaW50ZXJydXB0IGhhbmRsZXJzIGJhaWwgb3V0IHdpdGggYW4gRVJST1IsIHdl IHdvdWxkIGhhdmUKLQkJCSAqIGFscmVhZHkgY2xlYXJlZCB0aGUgb3RoZXIgYml0cywgYW5k IHdvdWxkIG1pc3MgcHJvY2Vzc2luZyB0aGVtLgotCQkJICovCi0JCQlDbGVhckludGVycnVw dChVSU5UNjRfQklUKGkpKTsKLQotCQkJLyogQ2FsbCB0aGUgaGFuZGxlciBmdW5jdGlvbiAq LwotCQkJKCppbnRlcnJ1cHRfaGFuZGxlcnNbaV0pICgpOworCQkJaWYgKChpbnRlcnJ1cHRz VG9Qcm9jZXNzICYgVUlOVDY0X0JJVChpKSkgIT0gMCkKKwkJCXsKKwkJCQkvKgorCQkJCSAq IENsZWFyIHRoZSBpbnRlcnJ1cHQgKmJlZm9yZSogY2FsbGluZyB0aGUgaGFuZGxlciBmdW5j dGlvbiwKKwkJCQkgKiBzbyB0aGF0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgcmVjZWl2ZWQgYWdh aW4gd2hpbGUgdGhlCisJCQkJICogaGFuZGxlciBmdW5jdGlvbiBpcyBiZWluZyBleGVjdXRl ZCwgd2Ugd29uJ3QgbWlzcyBpdC4KKwkJCQkgKgorCQkJCSAqIEZvciBzaW1pbGFyIHJlYXNv bnMsIHdlIGFsc28gY2xlYXIgdGhlIGZsYWdzIG9uZSBieSBvbmUKKwkJCQkgKiBldmVuIGlm IG11bHRpcGxlIGludGVycnVwdHMgYXJlIHBlbmRpbmcuICBPdGhlcndpc2UgaWYgb25lCisJ CQkJICogb2YgdGhlIGludGVycnVwdCBoYW5kbGVycyBiYWlsIG91dCB3aXRoIGFuIEVSUk9S LCB3ZSB3b3VsZAorCQkJCSAqIGhhdmUgYWxyZWFkeSBjbGVhcmVkIHRoZSBvdGhlciBiaXRz LCBhbmQgd291bGQgbWlzcworCQkJCSAqIHByb2Nlc3NpbmcgdGhlbS4KKwkJCQkgKi8KKwkJ CQlDbGVhckludGVycnVwdChVSU5UNjRfQklUKGkpKTsKKworCQkJCS8qIENhbGwgdGhlIGhh bmRsZXIgZnVuY3Rpb24gKi8KKwkJCQkoKmludGVycnVwdF9oYW5kbGVyc1tpXSkgKCk7CisJ CQl9CiAJCX0KKworCQlSRVNVTUVfSU5URVJSVVBUUygpOwogCX0KKworCS8qCisJICogSWYg d2UgZ2V0IGhlcmUsIHdlIHByb2Nlc3NlZCBhbGwgdGhlIGludGVycnVwdHMgdGhhdCB3ZXJl IHBlbmRpbmcgd2hlbgorCSAqIHdlIHN0YXJ0ZWQuICBJZiBhbnkgbmV3IGludGVycnVwdHMg YXJyaXZlZCB3aGlsZSB3ZSB3ZXJlIHByb2Nlc3NpbmcsCisJICogdGhleSBtdXN0J3ZlIHNl dCB0aGUgQVRURU5USU9OIGZsYWcgYWdhaW4gc28gd2UnbGwgZ2V0IGJhY2sgaGVyZSBvbiB0 aGUKKwkgKiBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCisJICovCiB9CiAKIC8qCi0g KiBTd2l0Y2ggdG8gbG9jYWwgaW50ZXJydXB0cy4gIE90aGVyIGJhY2tlbmRzIGNhbid0IHNl bmQgaW50ZXJydXB0cyB0byB0aGlzCi0gKiBvbmUuICBPbmx5IFJhaXNlSW50ZXJydXB0KCkg Y2FuIHNldCB0aGVtLCBmcm9tIGluc2lkZSB0aGlzIHByb2Nlc3MuCisgKiBVcGRhdGUgTXlQ ZW5kaW5nSW50ZXJydXB0cy0+YXR0ZW50aW9uX21hc2ssIHNldHRpbmcgUElfRkxBR19BVFRF TlRJT04gaWYKKyAqIGFueSBvZiB0aGUgaW50ZXJydXB0cyBpbiB0aGUgbmV3IG1hc2sgYXJl IGFscmVhZHkgcGVuZGluZy4gIFRoaXMgc2hvdWxkIGJlCisgKiBjYWxsZWQgZXZlcnkgdGlt ZSBhZnRlciBlbmFibGluZyBuZXcgYml0cyBpbiBFbmFibGVkSW50ZXJydXB0c01hc2ssIHNv IHRoYXQKKyAqIHRoZSBuZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgd2lsbCByZWFjdCBj b3JyZWN0bHkgdG8gdGhlIG5ld2x5IGVuYWJsZWQKKyAqIGludGVycnVwdHMuCiAgKi8KIHZv aWQKLVN3aXRjaFRvTG9jYWxJbnRlcnJ1cHRzKHZvaWQpCitTZXRJbnRlcnJ1cHRBdHRlbnRp b25NYXNrKEludGVycnVwdE1hc2sgbWFzaykKK3sKKwkvKgorCSAqIFRoaXMgc2hvdWxkIG5v dCBiZSBjYWxsZWQgd2hpbGUgc2xlZXBpbmcuIE5vIG90aGVyIHByb2Nlc3Mgc2V0cyB0aGUK KwkgKiBmbGFnLCBzbyB3aGVuIHdlIGNsZWFyL3NldCAnZmxhZ3MnIGJlbG93LCB3ZSBkb24n dCBuZWVkIHRvIHdvcnJ5IGFib3V0CisJICogb3ZlcndyaXRpbmcgaXQuCisJICovCisJQXNz ZXJ0KChwZ19hdG9taWNfcmVhZF91MzIoJk15UGVuZGluZ0ludGVycnVwdHMtPmZsYWdzKSAm IFBJX0ZMQUdfU0xFRVBJTkcpID09IDApOworCisjaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2 NF9TSU1VTEFUSU9OCisJcGdfYXRvbWljX3dyaXRlX3U2NCgmTXlQZW5kaW5nSW50ZXJydXB0 cy0+YXR0ZW50aW9uX21hc2ssIG1hc2spOworI2Vsc2UKKwlwZ19hdG9taWNfd3JpdGVfdTMy KCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5hdHRlbnRpb25fbWFza19sbywgKHVpbnQzMikgbWFz ayk7CisJcGdfYXRvbWljX3dyaXRlX3UzMigmTXlQZW5kaW5nSW50ZXJydXB0cy0+YXR0ZW50 aW9uX21hc2tfaGksICh1aW50MzIpIChtYXNrID4+IDMyKSk7CisjZW5kaWYKKworCS8qCisJ ICogTWFrZSBzdXJlIG90aGVyIHByb2Nlc3NlcyBzZWUgdGhlIHVwZGF0ZWQgYXR0ZW50aW9u X21hc2sgYmVmb3JlIHdlIHJlYWQKKwkgKiB0aGUgaW50ZXJydXB0cyB0aGF0IGFyZSBjdXJy ZW50bHkgcGVuZGluZy4KKwkgKgorCSAqIFhYWDogSXQgbWlnaHQgYmUgY2hlYXBlciB0byB1 c2UgcGdfYXRvbWljX3dyaXRlX21lbWJhcnJpZXJfdTY0IHZhcmlhbnQKKwkgKiBhYm92ZSwg cGFpcmVkIHdpdGggcGdfYXRvbWljX3JlYWRfbWVtYmFycmllcl91NjQoKSBoZXJlIHRvIHJl YWQgdGhlCisJICogcGVuZGluZyBpbnRlcnJ1cHRzIGluc3RlYWQgb2YgdGhlIGJhcnJpZXIt bGVzcyBJbnRlcnJ1cHRQZW5kaW5nKCkuCisJICovCisJcGdfbWVtb3J5X2JhcnJpZXIoKTsK KworCWlmIChJbnRlcnJ1cHRQZW5kaW5nKG1hc2spKQorCQlwZ19hdG9taWNfd3JpdGVfdTMy KCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5mbGFncywgUElfRkxBR19BVFRFTlRJT04pOworfQor CisKKy8qCisgKiBNYWtlICduZXdfcHRyJyB0aGUgYWN0aXZlIGludGVycnVwdCB2ZWN0b3Is IHRyYW5zZmVyaW5nIGFsbCB0aGUgcGVuZGluZworICogaW50ZXJydXB0IGJpdHMgZnJvbSB0 aGUgb2xkIE15UGVuZGluZ0ludGVycnVwdHMgdmVjdG9yIHRvIHRoZSBuZXcgb25lLgorICov CitzdGF0aWMgdm9pZAorU3dpdGNoTXlQZW5kaW5nSW50ZXJydXB0c1B0cihQZW5kaW5nSW50 ZXJydXB0cyAqbmV3X3B0cikKIHsKLQlpZiAoTXlQZW5kaW5nSW50ZXJydXB0cyA9PSAmTG9j YWxQZW5kaW5nSW50ZXJydXB0cykKKwlQZW5kaW5nSW50ZXJydXB0cyAqb2xkX3B0ciA9IE15 UGVuZGluZ0ludGVycnVwdHM7CisKKwkvKiBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGlsZSBz bGVlcGluZyAqLworCUFzc2VydCgocGdfYXRvbWljX3JlYWRfdTMyKCZNeVBlbmRpbmdJbnRl cnJ1cHRzLT5mbGFncykgJiBQSV9GTEFHX1NMRUVQSU5HKSA9PSAwKTsKKworCWlmIChuZXdf cHRyID09IG9sZF9wdHIpCiAJCXJldHVybjsKIAotCU15UGVuZGluZ0ludGVycnVwdHMgPSAm TG9jYWxQZW5kaW5nSW50ZXJydXB0czsKKwlNeVBlbmRpbmdJbnRlcnJ1cHRzID0gbmV3X3B0 cjsKKwlpZiAoTXlQZW5kaW5nSW50ZXJydXB0c0ZsYWdzID09ICZvbGRfcHRyLT5mbGFncykK KwkJTXlQZW5kaW5nSW50ZXJydXB0c0ZsYWdzID0gJm5ld19wdHItPmZsYWdzOwogCiAJLyoK IAkgKiBNYWtlIHN1cmUgdGhhdCBTSUdBTFJNIGhhbmRsZXJzIHRoYXQgY2FsbCBSYWlzZUlu dGVycnVwdCgpIGFyZSBub3cKQEAgLTE4MSwxNCArMjc1LDQyIEBAIFN3aXRjaFRvTG9jYWxJ bnRlcnJ1cHRzKHZvaWQpCiAJcGdfbWVtb3J5X2JhcnJpZXIoKTsKIAogCS8qCi0JICogTWl4 IGluIHRoZSBpbnRlcnJ1cHRzIHRoYXQgd2UgaGF2ZSByZWNlaXZlZCBhbHJlYWR5IGluIG91 ciBzaGFyZWQKLQkgKiBpbnRlcnJ1cHQgdmVjdG9yLCB3aGlsZSBhdG9taWNhbGx5IGNsZWFy aW5nIGl0LiAgT3RoZXIgYmFja2VuZHMgbWF5Ci0JICogY29udGludWUgdG8gc2V0IGJpdHMg aW4gaXQgYWZ0ZXIgdGhpcyBwb2ludCwgYnV0IHdlJ3ZlIGF0b21pY2FsbHkKKwkgKiBNaXgg aW4gdGhlIGludGVycnVwdHMgdGhhdCB3ZSBoYXZlIHJlY2VpdmVkIGFscmVhZHkgaW4gJ25l d19wdHInLCB3aGlsZQorCSAqIGF0b21pY2FsbHkgY2xlYXJpbmcgdGhlbSBmcm9tICdvbGRf cHRyJy4gIE90aGVyIGJhY2tlbmRzIG1heSBjb250aW51ZQorCSAqIHRvIHNldCBiaXRzIGlu ICdvbGRfcHRyJyBhZnRlciB0aGlzIHBvaW50LCBidXQgd2UndmUgYXRvbWljYWxseQogCSAq IHRyYW5zZmVycmVkIHRoZSBleGlzdGluZyBiaXRzIHRvIG91ciBsb2NhbCB2ZWN0b3Igc28g d2Ugd29uJ3QgZ2V0CiAJICogZHVwbGljYXRlZCBpbnRlcnJ1cHRzIGxhdGVyIGlmIHdlIHN3 aXRjaCBiYWNrLgogCSAqLwotCXBnX2F0b21pY19mZXRjaF9vcl91NjQoTXlQZW5kaW5nSW50 ZXJydXB0cywKLQkJCQkJCSAgIHBnX2F0b21pY19leGNoYW5nZV91NjQoJk15UHJvYy0+cGVu ZGluZ0ludGVycnVwdHMsIDApKTsKKyNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVM QVRJT04KKwl7CisJCXVpbnQ2NAkJb2xkX2ludGVycnVwdHM7CisKKwkJb2xkX2ludGVycnVw dHMgPSBwZ19hdG9taWNfZXhjaGFuZ2VfdTY0KCZvbGRfcHRyLT5pbnRlcnJ1cHRzLCAwKTsK KwkJcGdfYXRvbWljX2ZldGNoX29yX3U2NCgmbmV3X3B0ci0+aW50ZXJydXB0cywgb2xkX2lu dGVycnVwdHMpOworCX0KKyNlbHNlCisJeworCQl1aW50MzIJCW9sZF9pbnRlcnJ1cHRzX2xv OworCQl1aW50MzIJCW9sZF9pbnRlcnJ1cHRzX2hpOworCisJCW9sZF9pbnRlcnJ1cHRzX2xv ID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmb2xkX3B0ci0+aW50ZXJydXB0c19sbywgMCk7 CisJCW9sZF9pbnRlcnJ1cHRzX2hpID0gcGdfYXRvbWljX2V4Y2hhbmdlX3UzMigmb2xkX3B0 ci0+aW50ZXJydXB0c19oaSwgMCk7CisJCXBnX2F0b21pY19mZXRjaF9vcl91MzIoJm5ld19w dHItPmludGVycnVwdHNfbG8sIG9sZF9pbnRlcnJ1cHRzX2xvKTsKKwkJcGdfYXRvbWljX2Zl dGNoX29yX3UzMigmbmV3X3B0ci0+aW50ZXJydXB0c19oaSwgb2xkX2ludGVycnVwdHNfaGkp OworCX0KKyNlbmRpZgorCisJU2V0SW50ZXJydXB0QXR0ZW50aW9uTWFzayhFbmFibGVkSW50 ZXJydXB0c01hc2spOworfQorCisvKgorICogU3dpdGNoIHRvIGxvY2FsIGludGVycnVwdHMu ICBPdGhlciBiYWNrZW5kcyBjYW4ndCBzZW5kIGludGVycnVwdHMgdG8gdGhpcworICogb25l LiAgT25seSBSYWlzZUludGVycnVwdCgpIGNhbiBzZXQgdGhlbSwgZnJvbSBpbnNpZGUgdGhp cyBwcm9jZXNzLgorICovCit2b2lkCitTd2l0Y2hUb0xvY2FsSW50ZXJydXB0cyh2b2lkKQor eworCVN3aXRjaE15UGVuZGluZ0ludGVycnVwdHNQdHIoJkxvY2FsUGVuZGluZ0ludGVycnVw dHMpOwogfQogCiAvKgpAQCAtMTk4LDIwICszMjAsNjEgQEAgU3dpdGNoVG9Mb2NhbEludGVy cnVwdHModm9pZCkKIHZvaWQKIFN3aXRjaFRvU2hhcmVkSW50ZXJydXB0cyh2b2lkKQogewot CWlmIChNeVBlbmRpbmdJbnRlcnJ1cHRzID09ICZNeVByb2MtPnBlbmRpbmdJbnRlcnJ1cHRz KQotCQlyZXR1cm47CisJU3dpdGNoTXlQZW5kaW5nSW50ZXJydXB0c1B0cigmTXlQcm9jLT5w ZW5kaW5nSW50ZXJydXB0cyk7Cit9CiAKLQlNeVBlbmRpbmdJbnRlcnJ1cHRzID0gJk15UHJv Yy0+cGVuZGluZ0ludGVycnVwdHM7CitzdGF0aWMgYm9vbAorU2VuZE9yUmFpc2VJbnRlcnJ1 cHQoUGVuZGluZ0ludGVycnVwdHMgKnB0ciwgSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNr KQoreworCXVpbnQ2NAkJb2xkX3BlbmRpbmc7CisJdWludDY0CQlhdHRlbnRpb25fbWFzazsK Kwl1aW50MzIJCW9sZF9mbGFnczsKKwlib29sCQl3YWtldXAgPSBmYWxzZTsKIAogCS8qCi0J ICogTWFrZSBzdXJlIHRoYXQgU0lHQUxSTSBoYW5kbGVycyB0aGF0IGNhbGwgUmFpc2VJbnRl cnJ1cHQoKSBhcmUgbm93Ci0JICogc2VlaW5nIHRoZSBuZXcgTXlQZW5kaW5nSW50ZXJydXB0 cyBkZXN0aW5hdGlvbi4KKwkgKiBEbyBhbiAidW5sb2NrZWQiIHJlYWQgZmlyc3QsIGZvciBh IHF1aWNrIGV4aXQgaWYgYWxsIHRoZSBiaXRzIGFyZQorCSAqIGFscmVhZHkgc2V0LgogCSAq LwotCXBnX21lbW9yeV9iYXJyaWVyKCk7CisjaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9T SU1VTEFUSU9OCisJb2xkX3BlbmRpbmcgPSBwZ19hdG9taWNfcmVhZF91NjQoJnB0ci0+aW50 ZXJydXB0cyk7CisjZWxzZQorCW9sZF9wZW5kaW5nID0gKHVpbnQ2NCkgcGdfYXRvbWljX3Jl YWRfdTMyKCZwdHItPmludGVycnVwdHNfbG8pOworCW9sZF9wZW5kaW5nIHw9ICh1aW50NjQp IHBnX2F0b21pY19yZWFkX3UzMigmcHRyLT5pbnRlcnJ1cHRzX2hpKSA8PCAzMjsKKyNlbmRp ZgorCisJaWYgKChpbnRlcnJ1cHRNYXNrICYgfm9sZF9wZW5kaW5nKSA9PSAwKQorCQlyZXR1 cm4gZmFsc2U7CQkJLyogbm8gbmV3IGJpdHMgd2VyZSBzZXQgKi8KKworCS8qIE9SIG91ciBi aXRzIHRvIHRoZSB0YXJnZXQgKi8KKyNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVM QVRJT04KKwkodm9pZCkgcGdfYXRvbWljX2ZldGNoX29yX3U2NCgmcHRyLT5pbnRlcnJ1cHRz LCBpbnRlcnJ1cHRNYXNrKTsKKyNlbHNlCisJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9vcl91 MzIoJnB0ci0+aW50ZXJydXB0c19sbywgKHVpbnQzMikgaW50ZXJydXB0TWFzayk7CisJKHZv aWQpIHBnX2F0b21pY19mZXRjaF9vcl91MzIoJnB0ci0+aW50ZXJydXB0c19oaSwgKHVpbnQz MikgKGludGVycnVwdE1hc2sgPj4gMzIpKTsKKyNlbmRpZgogCi0JLyogTWl4IGluIGFueSB1 bmhhbmRsZWQgYml0cyBmcm9tIExvY2FsUGVuZGluZ0ludGVycnVwdHMuICovCi0JcGdfYXRv bWljX2ZldGNoX29yX3U2NChNeVBlbmRpbmdJbnRlcnJ1cHRzLAotCQkJCQkJICAgcGdfYXRv bWljX2V4Y2hhbmdlX3U2NCgmTG9jYWxQZW5kaW5nSW50ZXJydXB0cywgMCkpOworCS8qCisJ ICogRGlkIHdlIHNldCBhbnkgYml0cyB0aGF0IHRoZSByZXF1aXJlcyB0aGUgdGFyZ2V0IHBy b2Nlc3MncyBBVFRFTlRJT04/CisJICovCisjaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9T SU1VTEFUSU9OCisJYXR0ZW50aW9uX21hc2sgPSBwZ19hdG9taWNfcmVhZF91NjQoJnB0ci0+ YXR0ZW50aW9uX21hc2spOworI2Vsc2UKKwlhdHRlbnRpb25fbWFzayA9ICh1aW50NjQpIHBn X2F0b21pY19yZWFkX3UzMigmcHRyLT5hdHRlbnRpb25fbWFza19sbyk7CisJYXR0ZW50aW9u X21hc2sgfD0gKHVpbnQ2NCkgcGdfYXRvbWljX3JlYWRfdTMyKCZwdHItPmF0dGVudGlvbl9t YXNrX2hpKSA8PCAzMjsKKyNlbmRpZgorCWlmICgoYXR0ZW50aW9uX21hc2sgJiBpbnRlcnJ1 cHRNYXNrKSAhPSAwKQorCXsKKwkJb2xkX2ZsYWdzID0gcGdfYXRvbWljX2ZldGNoX29yX3Uz MigmcHRyLT5mbGFncywgUElfRkxBR19BVFRFTlRJT04pOworCisJCS8qCisJCSAqIEZ1cnRo ZXJtb3JlLCBpZiB0aGUgcHJvY2VzcyBpcyBjdXJyZW50bHkgc2xlZXBpbmcgb24gdGhlc2UK KwkJICogaW50ZXJydXB0cywgd2FrZSBpdCB1cC4KKwkJICovCisJCWlmICgob2xkX2ZsYWdz ICYgUElfRkxBR19TTEVFUElORykgIT0gMCkKKwkJCXdha2V1cCA9IHRydWU7CisJfQorCisJ cmV0dXJuIHdha2V1cDsKIH0KIAogLyoKQEAgLTIyMywxNSArMzg2LDcgQEAgU3dpdGNoVG9T aGFyZWRJbnRlcnJ1cHRzKHZvaWQpCiB2b2lkCiBSYWlzZUludGVycnVwdChJbnRlcnJ1cHRN YXNrIGludGVycnVwdE1hc2spCiB7Ci0JdWludDY0CQlvbGRfcGVuZGluZzsKLQotCW9sZF9w ZW5kaW5nID0gcGdfYXRvbWljX2ZldGNoX29yX3U2NChNeVBlbmRpbmdJbnRlcnJ1cHRzLCBp bnRlcnJ1cHRNYXNrKTsKLQotCS8qCi0JICogSWYgdGhlIHByb2Nlc3MgaXMgY3VycmVudGx5 IGJsb2NrZWQgd2FpdGluZyBmb3IgYW4gaW50ZXJydXB0IHRvIGFycml2ZSwKLQkgKiBhbmQg dGhlIGludGVycnVwdCB3YXNuJ3QgYWxyZWFkeSBwZW5kaW5nLCB3YWtlIGl0IHVwLgotCSAq LwotCWlmICgob2xkX3BlbmRpbmcgJiAoaW50ZXJydXB0TWFzayB8IFNMRUVQSU5HX09OX0lO VEVSUlVQVFMpKSA9PSBTTEVFUElOR19PTl9JTlRFUlJVUFRTKQorCWlmIChTZW5kT3JSYWlz ZUludGVycnVwdChNeVBlbmRpbmdJbnRlcnJ1cHRzLCBpbnRlcnJ1cHRNYXNrKSkKIAkJV2Fr ZXVwTXlQcm9jKCk7CiB9CiAKQEAgLTI0OCwxNCArNDAzLDEyIEBAIHZvaWQKIFNlbmRJbnRl cnJ1cHQoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrLCBQcm9jTnVtYmVyIHBncHJvY25v KQogewogCVBHUFJPQwkgICAqcHJvYzsKLQl1aW50NjQJCW9sZF9wZW5kaW5nOwogCiAJQXNz ZXJ0KHBncHJvY25vICE9IElOVkFMSURfUFJPQ19OVU1CRVIpOwogCUFzc2VydChwZ3Byb2Nu byA+PSAwKTsKIAlBc3NlcnQocGdwcm9jbm8gPCBQcm9jR2xvYmFsLT5hbGxQcm9jQ291bnQp OwogCiAJcHJvYyA9ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1twZ3Byb2Nub107Ci0Jb2xkX3Bl bmRpbmcgPSBwZ19hdG9taWNfZmV0Y2hfb3JfdTY0KCZwcm9jLT5wZW5kaW5nSW50ZXJydXB0 cywgaW50ZXJydXB0TWFzayk7CiAKIAllbG9nKERFQlVHMSwgInNlbmRpbmcgaW50ZXJydXB0 IDB4MDE2JSIgUFJJeDY0ICIgdG8gcGlkICVkIiwgaW50ZXJydXB0TWFzaywgcHJvYy0+cGlk KTsKIApAQCAtMjYzLDcgKzQxNiw3IEBAIFNlbmRJbnRlcnJ1cHQoSW50ZXJydXB0TWFzayBp bnRlcnJ1cHRNYXNrLCBQcm9jTnVtYmVyIHBncHJvY25vKQogCSAqIElmIHRoZSBwcm9jZXNz IGlzIGN1cnJlbnRseSBibG9ja2VkIHdhaXRpbmcgZm9yIGFuIGludGVycnVwdCB0byBhcnJp dmUsCiAJICogYW5kIHRoZSBpbnRlcnJ1cHQgd2Fzbid0IGFscmVhZHkgcGVuZGluZywgd2Fr ZSBpdCB1cC4KIAkgKi8KLQlpZiAoKG9sZF9wZW5kaW5nICYgKGludGVycnVwdE1hc2sgfCBT TEVFUElOR19PTl9JTlRFUlJVUFRTKSkgPT0gU0xFRVBJTkdfT05fSU5URVJSVVBUUykKKwlp ZiAoU2VuZE9yUmFpc2VJbnRlcnJ1cHQoJnByb2MtPnBlbmRpbmdJbnRlcnJ1cHRzLCBpbnRl cnJ1cHRNYXNrKSkKIAkJV2FrZXVwT3RoZXJQcm9jKHByb2MpOwogfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGMuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL2lwYy5jCmluZGV4IDgwNjk0NzU3MWFlLi4wZTg2NDkxZTFiNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjLmMKQEAgLTE3MywxNCArMTczLDEzIEBAIHByb2NfZXhpdF9wcmVwYXJlKGlu dCBjb2RlKQogCXByb2NfZXhpdF9pbnByb2dyZXNzID0gdHJ1ZTsKIAogCS8qCi0JICogRm9y Z2V0IGFueSBwZW5kaW5nIGNhbmNlbCBvciBkaWUgcmVxdWVzdHMgYW5kIHNldCBJbnRlcnJ1 cHRIb2xkb2ZmQ291bnQKLQkgKiB0byBwcmV2ZW50IGFueSBtb3JlIGludGVycnVwdHMgZnJv bSBiZWluZyBwcm9jZXNzZWQ7IHdlJ3JlIGRvaW5nIG91cgotCSAqIGJlc3QgdG8gY2xvc2Ug dXAgc2hvcCBhbHJlYWR5LgorCSAqIEZvcmdldCBhbnkgcGVuZGluZyBjYW5jZWwgb3IgZGll IHJlcXVlc3RzIGFuZCBob2xkIGludGVycnVwdHMgdG8KKwkgKiBwcmV2ZW50IGFueSBtb3Jl IGludGVycnVwdHMgZnJvbSBiZWluZyBwcm9jZXNzZWQ7IHdlJ3JlIGRvaW5nIG91ciBiZXN0 CisJICogdG8gY2xvc2UgdXAgc2hvcCBhbHJlYWR5LgogCSAqLwogCUNsZWFySW50ZXJydXB0 KElOVEVSUlVQVF9URVJNSU5BVEUpOwogCUNsZWFySW50ZXJydXB0KElOVEVSUlVQVF9RVUVS WV9DQU5DRUwpOwotCUludGVycnVwdEhvbGRvZmZDb3VudCA9IDE7Ci0JQ3JpdFNlY3Rpb25D b3VudCA9IDA7CisJUmVzZXRJbnRlcnJ1cHRIb2xkb2ZmQ291bnRzKDEsIDApOwogCiAJLyoK IAkgKiBBbHNvIGNsZWFyIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrLCB0byBwcmV2ZW50IGVy cm9yIGNhbGxiYWNrcyBmcm9tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy93YWl0ZXZlbnRzZXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3dhaXRldmVudHNl dC5jCmluZGV4IDYxMmRlOGIzNWU5Li5iZDUyMTEwMzg5ZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvd2FpdGV2ZW50c2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvd2FpdGV2ZW50c2V0LmMKQEAgLTcxNCw4ICs3MTQsNyBAQCBNb2RpZnlXYWl0 RXZlbnQoV2FpdEV2ZW50U2V0ICpzZXQsIGludCBwb3MsIHVpbnQzMiBldmVudHMsIEludGVy cnVwdE1hc2sgaW50ZXJydQogCQkgKiBjaGFuZ2VzLiAgSXQgbWVhbnMgdGhhdCB3aGVuIGlu dGVycnVwdCBtYXNrIGlzIHNldCB0byAwLCB3ZSB3aWxsCiAJCSAqIGxpc3RlbiBvbiB0aGUg a2VybmVsIG9iamVjdCB1bm5lY2Vzc2FyaWx5LCBhbmQgbWlnaHQgZ2V0IHNvbWUKIAkJICog c3B1cmlvdXMgd2FrZXVwcy4gVGhlIGludGVycnVwdCBzZW5kaW5nIGNvZGUgc2hvdWxkIG5v dCB3YWtlIHVzIHVwCi0JCSAqIGlmIHRoZSBTTEVFUElOR19PTl9JTlRFUlJVUFRTIGJpdCBp cyBub3QgYXJtZWQsIHRob3VnaCwgc28gaXQKLQkJICogc2hvdWxkIGJlIHJhcmUuCisJCSAq IGlmIHRoZSBTTEVFUElORyBiaXQgaXMgbm90IGFybWVkLCB0aG91Z2gsIHNvIGl0IHNob3Vs ZCBiZSByYXJlLgogCQkgKi8KIAkJcmV0dXJuOwogCX0KQEAgLTEwNzIsNiArMTA3MSwxNCBA QCBXYWl0RXZlbnRTZXRXYWl0KFdhaXRFdmVudFNldCAqc2V0LCBsb25nIHRpbWVvdXQsCiAJ cGd3aW4zMl9kaXNwYXRjaF9xdWV1ZWRfc2lnbmFscygpOwogI2VuZGlmCiAKKwkvKgorCSAq IFdlIHdpbGwgY2hhbmdlIHRoZSAnYXR0ZW50aW9uX21hc2snIGluIE15UGVuZGluZ0ludGVy cnVwdHMgZm9yIHRoZQorCSAqIHNsZWVwLCB3aGljaCBtZWFucyB0aGF0IENIRUNLX0ZPUl9J TlRFUlJVUFRTKCkgd29uJ3Qgd29yayBjb3JyZWN0bHkuCisJICogVGhlcmUgYXJlIG5vIENI RUNLX0ZPUl9JTlRFUlJVUFRTKCkgY2FsbHMgYmVsb3csIGJ1dCBob2xkIGludGVycnVwdHMK KwkgKiB1bnRpbCB3ZSd2ZSByZXN0b3JlZCAnYXR0ZW50aW9uX21hc2snIGp1c3QgdG8gYmUg c3VyZS4KKwkgKi8KKwlIT0xEX0lOVEVSUlVQVFMoKTsKKwogCS8qCiAJICogQXRvbWljYWxs eSBjaGVjayBpZiB0aGUgaW50ZXJydXB0IGlzIGFscmVhZHkgcGVuZGluZyBhbmQgYWR2ZXJ0 aXNlIHRoYXQKIAkgKiB3ZSBhcmUgYWJvdXQgdG8gc3RhcnQgc2xlZXBpbmcuIElmIGl0IHdh cyBhbHJlYWR5IHBlbmRpbmcsIGF2b2lkCkBAIC0xMDg0LDI4ICsxMDkxLDM1IEBAIFdhaXRF dmVudFNldFdhaXQoV2FpdEV2ZW50U2V0ICpzZXQsIGxvbmcgdGltZW91dCwKIAkgKi8KIAlp ZiAoc2V0LT5pbnRlcnJ1cHRfbWFzayAhPSAwKQogCXsKLQkJSW50ZXJydXB0TWFzayBvbGRf bWFzazsKIAkJYm9vbAkJYWxyZWFkeV9wZW5kaW5nID0gZmFsc2U7CiAKIAkJLyoKIAkJICog UGVyZm9ybSBhIHBsYWluIGF0b21pYyByZWFkIGZpcnN0IGFzIGEgZmFzdCBwYXRoIGZvciB0 aGUgY2FzZSB0aGF0CiAJCSAqIGFuIGludGVycnVwdCBpcyBhbHJlYWR5IHBlbmRpbmcuCiAJ CSAqLwotCQlvbGRfbWFzayA9IHBnX2F0b21pY19yZWFkX3U2NChNeVBlbmRpbmdJbnRlcnJ1 cHRzKTsKLQkJYWxyZWFkeV9wZW5kaW5nID0gKChvbGRfbWFzayAmIHNldC0+aW50ZXJydXB0 X21hc2spICE9IDApOworCQlhbHJlYWR5X3BlbmRpbmcgPSBJbnRlcnJ1cHRQZW5kaW5nKHNl dC0+aW50ZXJydXB0X21hc2spOwogCiAJCWlmICghYWxyZWFkeV9wZW5kaW5nKQogCQl7CiAJ CQkvKgotCQkJICogQXRvbWljYWxseSBzZXQgdGhlIFNMRUVQSU5HX09OX0lOVEVSUlVQVFMg Yml0IGFuZCByZS1jaGVjayBpZgotCQkJICogYW4gaW50ZXJydXB0IGlzIGFscmVhZHkgcGVu ZGluZy4gVGhlIGF0b21pYyBvcCBwcm92aWRlcwotCQkJICogc3luY2hyb25pemF0aW9uIHNv IHRoYXQgaWYgYW4gaW50ZXJydXB0IGJpdCBpcyBzZXQgYWZ0ZXIgdGhpcywKLQkJCSAqIHRo ZSBzZXR0ZXIgd2lsbCB3YWtlIHVzIHVwLgorCQkJICogU2V0IHRoZSBhdHRlbnRpb24gbWFz ayBhbmQgU0xFRVBJTkcgYml0IGFuZCByZS1jaGVjayBpZiBhbgorCQkJICogaW50ZXJydXB0 IGlzIGFscmVhZHkgcGVuZGluZy4gIFRoZSBtZW1vcnkgYmFycmllciBzeW5jaHJvbml6ZXMK KwkJCSAqIHdpdGggdGhlIGF0b21pYyBmZXRjaC1vciBpbiBTZW5kT3JSYWlzZUludGVycnVw dCgpIHNvIHRoYXQgaWYKKwkJCSAqIGFuIGludGVycnVwdCBiaXQgaXMgc2V0IGFmdGVyIHNl dHRpbmcgdGhlIGZsYWcsIHRoZSBzZXR0ZXIgd2lsbAorCQkJICogc2VlIHRoZSBTTEVFUElO RyBmbGFnIGFuZCB3aWxsIHdha2UgdXMgdXAuCiAJCQkgKi8KLQkJCW9sZF9tYXNrID0gcGdf YXRvbWljX2ZldGNoX29yX3U2NChNeVBlbmRpbmdJbnRlcnJ1cHRzLCBTTEVFUElOR19PTl9J TlRFUlJVUFRTKTsKLQkJCWFscmVhZHlfcGVuZGluZyA9ICgob2xkX21hc2sgJiBzZXQtPmlu dGVycnVwdF9tYXNrKSAhPSAwKTsKKyNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVM QVRJT04KKwkJCXBnX2F0b21pY193cml0ZV91NjQoJk15UGVuZGluZ0ludGVycnVwdHMtPmF0 dGVudGlvbl9tYXNrLCBzZXQtPmludGVycnVwdF9tYXNrKTsKKyNlbHNlCisJCQlwZ19hdG9t aWNfd3JpdGVfdTMyKCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5hdHRlbnRpb25fbWFza19sbywg KHVpbnQzMikgc2V0LT5pbnRlcnJ1cHRfbWFzayk7CisJCQlwZ19hdG9taWNfd3JpdGVfdTMy KCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5hdHRlbnRpb25fbWFza19oaSwgKHVpbnQzMikgKHNl dC0+aW50ZXJydXB0X21hc2sgPj4gMzIpKTsKKyNlbmRpZgorCQkJcGdfYXRvbWljX3dyaXRl X3UzMigmTXlQZW5kaW5nSW50ZXJydXB0cy0+ZmxhZ3MsIFBJX0ZMQUdfU0xFRVBJTkcpOwor CisJCQlwZ19tZW1vcnlfYmFycmllcigpOworCQkJYWxyZWFkeV9wZW5kaW5nID0gSW50ZXJy dXB0UGVuZGluZyhzZXQtPmludGVycnVwdF9tYXNrKTsKIAotCQkJLyogcmVtZW1iZXIgdG8g Y2xlYXIgdGhlIFNMRUVQSU5HX09OX0lOVEVSUlVQVFMgZmxhZyBsYXRlciAqLworCQkJLyog UmVtZW1iZXIgdG8gY2xlYXIgdGhlIFNMRUVQSU5HIGZsYWcgYWZ0ZXJ3YXJkcy4gKi8KIAkJ CXNsZWVwaW5nX2ZsYWdfYXJtZWQgPSB0cnVlOwogCQl9CiAKQEAgLTExNzUsOSArMTE4OSwx NyBAQCBXYWl0RXZlbnRTZXRXYWl0KFdhaXRFdmVudFNldCAqc2V0LCBsb25nIHRpbWVvdXQs CiAJCX0KIAl9CiAKLQkvKiBJZiB3ZSBzZXQgdGhlIFNMRUVQSU5HX09OX0lOVEVSUlVQVFMg ZmxhZywgcmVzZXQgaXQgYWdhaW4gKi8KKwkvKgorCSAqIElmIHdlIHNsZXB0LCBjbGVhciB0 aGUgU0xFRVBJTkcgZmxhZyBhZ2FpbiBhbmQgcmVzZXQgdGhlIGF0dGVudGlvbiBtYXNrCisJ ICogZm9yIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkKKwkgKi8KIAlpZiAoc2xlZXBpbmdfZmxh Z19hcm1lZCkKLQkJcGdfYXRvbWljX2ZldGNoX2FuZF91NjQoTXlQZW5kaW5nSW50ZXJydXB0 cywgfigodWludDMyKSBTTEVFUElOR19PTl9JTlRFUlJVUFRTKSk7CisJeworCQlwZ19hdG9t aWNfd3JpdGVfdTMyKCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5mbGFncywgMCk7CisJCVNldElu dGVycnVwdEF0dGVudGlvbk1hc2soRW5hYmxlZEludGVycnVwdHNNYXNrKTsKKwl9CisKKwlS RVNVTUVfSU5URVJSVVBUUygpOwogCiAjaWZuZGVmIFdJTjMyCiAJd2FpdGluZyA9IGZhbHNl OwpAQCAtMTI1NSw3ICsxMjc3LDcgQEAgV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVu dFNldCAqc2V0LCBpbnQgY3VyX3RpbWVvdXQsCiAJCQkvKiBEcmFpbiB0aGUgc2lnbmFsZmQu ICovCiAJCQlkcmFpbigpOwogCi0JCQlpZiAoc2V0LT5pbnRlcnJ1cHRfbWFzayAhPSAwICYm IChwZ19hdG9taWNfcmVhZF91NjQoTXlQZW5kaW5nSW50ZXJydXB0cykgJiBzZXQtPmludGVy cnVwdF9tYXNrKSAhPSAwKQorCQkJaWYgKHNldC0+aW50ZXJydXB0X21hc2sgIT0gMCAmJiBJ bnRlcnJ1cHRQZW5kaW5nKHNldC0+aW50ZXJydXB0X21hc2spKQogCQkJewogCQkJCW9jY3Vy cmVkX2V2ZW50cy0+ZmQgPSBQR0lOVkFMSURfU09DS0VUOwogCQkJCW9jY3VycmVkX2V2ZW50 cy0+ZXZlbnRzID0gV0xfSU5URVJSVVBUOwpAQCAtMTQxNCw3ICsxNDM2LDcgQEAgV2FpdEV2 ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQgY3VyX3RpbWVvdXQsCiAJ CWlmIChjdXJfZXZlbnQtPmV2ZW50cyA9PSBXTF9JTlRFUlJVUFQgJiYKIAkJCWN1cl9rcXVl dWVfZXZlbnQtPmZpbHRlciA9PSBFVkZJTFRfU0lHTkFMKQogCQl7Ci0JCQlpZiAoc2V0LT5p bnRlcnJ1cHRfbWFzayAhPSAwICYmIChwZ19hdG9taWNfcmVhZF91MzIoTXlQZW5kaW5nSW50 ZXJydXB0cykgJiBzZXQtPmludGVycnVwdF9tYXNrKSAhPSAwKQorCQkJaWYgKHNldC0+aW50 ZXJydXB0X21hc2sgIT0gMCAmJiBJbnRlcnJ1cHRQZW5kaW5nKHNldC0+aW50ZXJydXB0X21h c2spKQogCQkJewogCQkJCW9jY3VycmVkX2V2ZW50cy0+ZmQgPSBQR0lOVkFMSURfU09DS0VU OwogCQkJCW9jY3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gV0xfSU5URVJSVVBUOwpAQCAtMTUz OSw3ICsxNTYxLDcgQEAgV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0 LCBpbnQgY3VyX3RpbWVvdXQsCiAJCQkvKiBUaGVyZSdzIGRhdGEgaW4gdGhlIHNlbGYtcGlw ZSwgY2xlYXIgaXQuICovCiAJCQlkcmFpbigpOwogCi0JCQlpZiAoc2V0LT5pbnRlcnJ1cHRf bWFzayAhPSAwICYmIChwZ19hdG9taWNfcmVhZF91MzIoTXlQZW5kaW5nSW50ZXJydXB0cykg JiBzZXQtPmludGVycnVwdF9tYXNrKSAhPSAwKQorCQkJaWYgKHNldC0+aW50ZXJydXB0X21h c2sgIT0gMCAmJiBJbnRlcnJ1cHRQZW5kaW5nKHNldC0+aW50ZXJydXB0X21hc2spKQogCQkJ ewogCQkJCW9jY3VycmVkX2V2ZW50cy0+ZmQgPSBQR0lOVkFMSURfU09DS0VUOwogCQkJCW9j Y3VycmVkX2V2ZW50cy0+ZXZlbnRzID0gV0xfSU5URVJSVVBUOwpAQCAtMTc2MCw3ICsxNzgy LDcgQEAgV2FpdEV2ZW50U2V0V2FpdEJsb2NrKFdhaXRFdmVudFNldCAqc2V0LCBpbnQgY3Vy X3RpbWVvdXQsCiAJCQlpZiAoIVJlc2V0RXZlbnQoc2V0LT5oYW5kbGVzW2N1cl9ldmVudC0+ cG9zICsgMV0pKQogCQkJCWVsb2coRVJST1IsICJSZXNldEV2ZW50IGZhaWxlZDogZXJyb3Ig Y29kZSAlbHUiLCBHZXRMYXN0RXJyb3IoKSk7CiAKLQkJCWlmIChzZXQtPmludGVycnVwdF9t YXNrICE9IDAgJiYgKHBnX2F0b21pY19yZWFkX3UzMihNeVBlbmRpbmdJbnRlcnJ1cHRzKSAm IHNldC0+aW50ZXJydXB0X21hc2spICE9IDApCisJCQlpZiAoc2V0LT5pbnRlcnJ1cHRfbWFz ayAhPSAwICYmIEludGVycnVwdFBlbmRpbmcoc2V0LT5pbnRlcnJ1cHRfbWFzaykpCiAJCQl7 CiAJCQkJb2NjdXJyZWRfZXZlbnRzLT5mZCA9IFBHSU5WQUxJRF9TT0NLRVQ7CiAJCQkJb2Nj dXJyZWRfZXZlbnRzLT5ldmVudHMgPSBXTF9JTlRFUlJVUFQ7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK aW5kZXggNWU1OTVlNTE5ODcuLjk0ZTU5YWZmNGVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBA IC0zMjAyLDExICszMjAyLDExIEBAIHJlcG9ydF9yZWNvdmVyeV9jb25mbGljdChSZWNvdmVy eUNvbmZsaWN0UmVhc29uIHJlYXNvbikKIAkJaWYgKCFEb2luZ0NvbW1hbmRSZWFkKQogCQl7 CiAJCQkvKiBBdm9pZCBsb3Npbmcgc3luYyBpbiB0aGUgRkUvQkUgcHJvdG9jb2wuICovCi0J CQlpZiAoIUlOVEVSUlVQVFNfQ0FOX0JFX1BST0NFU1NFRChJTlRFUlJVUFRfUVVFUllfQ0FO Q0VMKSkKKwkJCWlmICgoRW5hYmxlZEludGVycnVwdHNNYXNrICYgSU5URVJSVVBUX1FVRVJZ X0NBTkNFTCkgPT0gMCkKIAkJCXsKIAkJCQkvKgogCQkJCSAqIFJlLWFybSBhbmQgZGVmZXIg dGhpcyBpbnRlcnJ1cHQgdW50aWwgbGF0ZXIuICBTZWUgc2ltaWxhcgotCQkJCSAqIGNvZGUg aW4gUHJvY2Vzc0ludGVycnVwdHMoKS4KKwkJCQkgKiBjb2RlIGluIFByb2Nlc3NJbnRlcnJ1 cHRzKCkuIEZJWE1FOiB3aGF0IHNpbWlsYXIgY29kZQogCQkJCSAqLwogCQkJCSh2b2lkKSBw Z19hdG9taWNfZmV0Y2hfb3JfdTMyKCZNeVByb2MtPnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0 cywgKDEgPDwgcmVhc29uKSk7CiAJCQkJUmFpc2VJbnRlcnJ1cHQoSU5URVJSVVBUX1JFQ09W RVJZX0NPTkZMSUNUKTsKQEAgLTMyNjEsNyArMzI2MSw2IEBAIHZvaWQKIFByb2Nlc3NUZXJt aW5hdGVJbnRlcnJ1cHQodm9pZCkKIHsKIAkvKiBPSyB0byBhY2NlcHQgYW55IGludGVycnVw dHMgbm93PyAqLwotCUFzc2VydChJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPT0gMCk7CiAJQXNz ZXJ0KENyaXRTZWN0aW9uQ291bnQgPT0gMCk7CiAKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9lcnJvci9lbG9nLmMgYi9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9n LmMKaW5kZXggYTM2YzdjMzMyNDkuLjQwNGU0MjQ3ODMxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9lcnJvci9lbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3Iv ZWxvZy5jCkBAIC01MzYsOSArNTM2LDcgQEAgZXJyZmluaXNoKGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBpbnQgbGluZW5vLCBjb25zdCBjaGFyICpmdW5jbmFtZSkKIAkJICogY291bGQgc2F2 ZSBhbmQgcmVzdG9yZSBJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgZm9yIGl0c2VsZiwgYnV0IHRo aXMKIAkJICogc2hvdWxkIG1ha2UgbGlmZSBlYXNpZXIgZm9yIG1vc3QuKQogCQkgKi8KLQkJ SW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKLQotCQlDcml0U2VjdGlvbkNvdW50ID0gMDsJ Lyogc2hvdWxkIGJlIHVubmVjZXNzYXJ5LCBidXQuLi4gKi8KKwkJUmVzZXRJbnRlcnJ1cHRI b2xkb2ZmQ291bnRzKDAsIDApOwogCiAJCS8qCiAJCSAqIE5vdGUgdGhhdCB3ZSBsZWF2ZSBD dXJyZW50TWVtb3J5Q29udGV4dCBzZXQgdG8gRXJyb3JDb250ZXh0LiBUaGUKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2lwYy9pbnRlcnJ1cHQuaCBiL3NyYy9pbmNsdWRlL2lwYy9pbnRl cnJ1cHQuaAppbmRleCAyMzlkNThmNzU5Ny4uMTAyMzRkNGY5ODcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2lwYy9pbnRlcnJ1cHQuaAorKysgYi9zcmMvaW5jbHVkZS9pcGMvaW50ZXJy dXB0LmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpZm5kZWYgSVBDX0lOVEVSUlVQVF9ICiAjZGVm aW5lIElQQ19JTlRFUlJVUFRfSAogCisjaW5jbHVkZSAiaXBjL3N0YW5kYXJkX2ludGVycnVw dHMuaCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2NudW1iZXIuaCIKIApAQCAtMjMsMjEyICsyNCwxMjggQEAKICAqIG5lZWRlZCB3aGljaCBh cmUgbmVlZGVkIGJ5IGFsbCBjYWxsZXJzIG9mIFdhaXRJbnRlcnJ1cHQsIHNvIGluY2x1ZGUg aXQKICAqIGhlcmUuCiAgKgotICogTm90ZTogSW50ZXJydXB0TWFzayBpcyBkZWZpbmQgaW4g d2FpdGV2ZW50c2V0LmggdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeQorICogTm90ZTog SW50ZXJydXB0TWFzayBpcyBkZWZpbmVkIGluIHdhaXRldmVudHNldC5oIHRvIGF2b2lkIGNp cmN1bGFyIGRlcGVuZGVuY3kKICAqLwogI2luY2x1ZGUgInN0b3JhZ2Uvd2FpdGV2ZW50c2V0 LmgiCiAKLQogLyoKLSAqIEZsYWdzIGluIHRoZSBwZW5kaW5nIGludGVycnVwdHMgYml0bWFz ay4gRWFjaCB2YWx1ZSBpcyBhIGRpZmZlcmVudCBiaXQsIHNvIHRoYXQKLSAqIHRoZXNlIGNh biBiZSBjb252ZW5pZW50bHkgT1InZCB0b2dldGhlci4KLSAqLwotI2RlZmluZSBVSU5UNjRf QklUKHNoaWZ0KSAoVUlOVDY0X0MoMSkgPDwgKHNoaWZ0KSkKLQotLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCi0gKiBCZWdpbiBkZWZpbml0aW9ucyBvZiBidWlsdC1pbiBpbnRlcnJ1cHQgYml0cwot ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotCi0vKgotICogSU5URVJSVVBUX1dBSVRfV0FLRVVQIGlz IHNoYXJlZCBieSBtYW55IHVzZSBjYXNlcyB0aGF0IG5lZWQgdG8gd2FrZSB1cAotICogYSBw cm9jZXNzLCB3aGljaCBkb24ndCBuZWVkIGEgZGVkaWNhdGVkIGludGVycnVwdCBiaXQuCi0g Ki8KLSNkZWZpbmUgSU5URVJSVVBUX1dBSVRfV0FLRVVQCQkJCQlVSU5UNjRfQklUKDApCi0K LQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCi0gKiBTdGFuZGFyZCBpbnRlcnJ1cHRzIGhhbmRsZWQg dGhlIHNhbWUgYnkgbW9zdCBwcm9jZXNzZXMKKyAqIFBlbmRpbmdJbnRlcnJ1cHRzIGlzIHVz ZWQgdG8gcmVjZWl2ZSBhbmQgd2FpdCBmb3IgaW50ZXJydXB0cy4gIFRoZQorICogJ2ludGVy cnVwdHMnIGZpZWxkIGlzIGEgYml0bWFzayByZXByZXNlbnRpbmcgaW50ZXJydXB0cyB0aGF0 IGFyZSBjdXJyZW50bHkKKyAqIHBlbmRpbmcgZm9yIHRoZSBwcm9jZXNzLgogICoKLSAqIE1v c3Qgb2YgdGhlc2UgYXJlIG5vcm1hbGx5IHByb2Nlc3NlZCBieSBDSEVDS19GT1JfSU5URVJS VVBUUygpIG9uY2UKLSAqIHByb2Nlc3Mgc3RhcnR1cCBoYXMgcmVhY2hlZCBTZXRTdGFuZGFy ZEludGVycnVwdHMoKS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEJhY2tlbmQg aGFzIGJlZW4gcmVxdWVzdGVkIHRvIHRlcm1pbmF0ZSBncmFjZWZ1bGx5LgorICogV2Ugc3Vw cG9ydCB1cCB0byA2NCBkaWZmZXJlbnQgaW50ZXJydXB0cy4gIFRoYXQgd2F5LCBhbiBpbnRl cnJ1cHQgbWFzayBjYW4KKyAqIGJlIGNvbnZlbmllbnRseSBzdG9yZWQgYXMgb25lIDY0LWJp dCBhdG9taWMgaW50ZWdlciwgb24gc3lzdGVtcyB3aXRoIDY0LWJpdAorICogYXRvbWljcy4g IE9uIG90aGVyIHN5c3RlbXMsIGl0J3Mgc3BsaXQgaW50byB0d28gMzItYml0IGF0b21pYyBm aWVsZHMsIHdoaWNoCisgKiBpcyBnb29kIGVub3VnaCBiZWNhdXNlIHdlIGRvbid0IHJlbHkg b24gYXRvbWljaXR5IGJldHdlZW4gZGlmZmVyZW50CisgKiBpbnRlcnJ1cHQgYml0cy4gIChO b3RlIHRoYXQgdGhlIDY0LWJpdCBhdG9taWNzIHNpbXVsYXRpb24gcmVsaWVzIG9uCisgKiBz cGlubG9ja3MsIHdoaWNoIGNyZWF0ZXMgYSBkZWFkbG9jayByaXNrIHdoZW4gdXNlZCBmcm9t IHNpZ25hbCBoYW5kbGVycywgc28KKyAqIHdlIGNhbm5vdCByZWx5IG9uIHRoZSBzaW11bGF0 ZWQgNjQtYml0IGF0b21pY3MuKQogICoKLSAqIFRoaXMgaXMgcmFpc2VkIGJ5IHRoZSBTSUdU RVJNIHNpZ25hbCBoYW5kbGVyLCBvciBjYW4gYmUgc2VudCBkaXJlY3RseSBieQotICogYW5v dGhlciBiYWNrZW5kIGUuZy4gd2l0aCBwZ190ZXJtaW5hdGVfYmFja2VuZCgpLgotICovCi0j ZGVmaW5lIElOVEVSUlVQVF9URVJNSU5BVEUJCQkJCQlVSU5UNjRfQklUKDEpCi0KLS8qCi0g KiBDYW5jZWwgY3VycmVudCBxdWVyeSwgaWYgYW55LgorICogQXR0ZW50aW9uIG1lY2hhbmlz bQorICogLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKLSAqIFNlbnQgdG8gcmVndWxhciBiYWNr ZW5kcyBieSBwZ19jYW5jZWxfYmFja2VuZCgpLCBTSUdJTlQsIG9yIGluIHJlc3BvbnNlIHRv Ci0gKiBhIHF1ZXJ5IGNhbmNlbGxhdGlvbiBwYWNrZXQuICBTb21lIG90aGVyIHByb2Nlc3Nl cyBsaWtlIGF1dG92YWN1dW0gd29ya2VycwotICogYW5kIGxvZ2ljYWwgZGVjb2RpbmcgcHJv Y2Vzc2VzIGFsc28gcmVhY3QgdG8gdGhpcy4KLSAqLwotI2RlZmluZSBJTlRFUlJVUFRfUVVF UllfQ0FOQ0VMCQkJCQlVSU5UNjRfQklUKDIpCi0KLS8qCi0gKiBSZWNvdmVyeSBjb25mbGlj dC4gVGhpcyBpcyBzZW50IGJ5IHRoZSBzdGFydHVwIHByb2Nlc3MgaW4gaG90IHN0YW5kYnkg bW9kZQotICogd2hlbiBhIGJhY2tlbmQgaG9sZHMgYmFjayB0aGUgV0FMIHJlcGxheSBmb3Ig dG9vIGxvbmcuIFRoZSByZWFzb24gZm9yIHRoZQotICogY29uZmxpY3QgaW5kaWNhdGVkIGJ5 IHRoZSBQR1BST0MtPnBlbmRpbmdSZWNvdmVyeUNvbmZsaWN0cwotICogYml0bWFzay4gQ29u ZmxpY3RzIGFyZSBnZW5lcmFsbHkgcmVzb2x2ZWQgYnkgdGVybWluYXRpbmcgdGhlIGN1cnJl bnQgcXVlcnkKLSAqIG9yIHNlc3Npb24uIFRoZSBleGFjdCByZWFjdGlvbiBkZXBlbmRzIG9u IHRoZSByZWFzb24gYW5kIHdoYXQgc3RhdGUgdGhlCi0gKiBiYWNrZW5kIGlzIGluLgotICov Ci0jZGVmaW5lIElOVEVSUlVQVF9SRUNPVkVSWV9DT05GTElDVCAJCQlVSU5UNjRfQklUKDMp Ci0KLS8qCi0gKiBDb25maWcgZmlsZSByZWxvYWQgaXMgcmVxdWVzdGVkLgorICogVGhlICdh dHRlbnRpb25fbWFzaycgZmllbGQgbGV0cyBhIGJhY2tlbmQgYWR2ZXJ0aXNlIHdoaWNoIGlu dGVycnVwdHMgaXQgaXMKKyAqIGN1cnJlbnRseSBpbnRlcmVzdGVkIGluLiAgV2hlbiBhIGJh Y2tlbmQgaXMgc2xlZXBpbmcsIHdhaXRpbmcgZm9yIGFuCisgKiBpbnRlcnJ1cHQgdG8gYXJy aXZlLCBpdCBzZXRzIHRoZSBiaXRzIGZvciB0aGUgd2FpdGVkLWZvciBpbnRlcnJ1cHRzIGlu CisgKiAnYXR0ZW50aW9uX21hc2snLiAgQXQgb3RoZXIgdGltZXMsIHRoZSAnYXR0ZW50aW9u X21hc2snIGVxdWFscworICogRW5hYmxlZEludGVycnVwdHNNYXNrLCBpLmUuIHRoZSBpbnRl cnJ1cHRzIHRoYXQgY2FuIGJlIHByb2Nlc3NlZCBieSBhCisgKiBDSEVDS19GT1JfSU5URVJS VVBUUygpLgogICoKLSAqIFRoaXMgaXMgbm9ybWFsbHkgZGlzYWJsZWQgYW5kIHRoZXJlZm9y ZSBub3QgaGFuZGxlZCBhdAotICogQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4gVGhlICJtYWlu IGxvb3AiIGluIGVhY2ggcHJvY2VzcyBpcyBleHBlY3RlZCB0bwotICogY2hlY2sgZm9yIGl0 IGV4cGxpY2l0bHkuCi0gKi8KLSNkZWZpbmUgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQJCQkJ CVVJTlQ2NF9CSVQoNCkKLQotLyoKLSAqIExvZyBjdXJyZW50IG1lbW9yeSBjb250ZXh0cywg c2VudCBieSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQotICovCi0jZGVmaW5l IElOVEVSUlVQVF9MT0dfTUVNT1JZX0NPTlRFWFQgCQkJVUlOVDY0X0JJVCg1KQotCi0vKgot ICogcHJvY3NpZ25hbCBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQKLSAqLwotI2RlZmluZSBJ TlRFUlJVUFRfQkFSUklFUgkJCQkJCVVJTlQ2NF9CSVQoNikKLQotCi0vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKLSAqIEludGVycnVwdHMgdXNlZCBieSBjbGllbnQgYmFja2VuZHMgYW5kIG1vc3Qg b3RoZXIgcHJvY2Vzc2VzIHRoYXQKLSAqIGNvbm5lY3QgdG8gYSBwYXJ0aWN1bGFyIGRhdGFi YXNlLgorICogV2hlbiBhIGJhY2tlbmQgc2V0cyB0aGUgaW50ZXJydXB0IGJpdCBvZiBhbm90 aGVyIGJhY2tlbmQgKG9yIHRoZSBzYW1lCisgKiBiYWNrZW5kKSwgaXQgYWxzbyBjaGVja3Mg aWYgdGhhdCBpbnRlcnJ1cHQgaXMgaW4gdGhlIHRhcmdldCdzCisgKiAnYXR0ZW50aW9uX21h c2snLiAgSWYgc28sIGl0IHNldHMgdGhlIEFUVEVOVElPTiBmbGFnLiAgRnVydGhlcm1vcmUs IGlmIHRoZQorICogdGFyZ2V0IGJhY2tlbmQgaXMgY3VycmVudGx5IHNsZWVwaW5nLCBpLmUu IGlmIHRoZSBTTEVFUElORyBpcyBzZXQsIGl0IGFsc28KKyAqIHdha2VzIGl0IHVwLgogICoK LSAqIE1vc3Qgb2YgdGhlc2UgYXJlIGFsc28gcHJvY2Vzc2VkIGJ5IENIRUNLX0ZPUl9JTlRF UlJVUFRTKCkgb25jZSBwcm9jZXNzCi0gKiBzdGFydHVwIGhhcyByZWFjaGVkIFNldFN0YW5k YXJkSW50ZXJydXB0cygpLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBSYWlzZWQgYnkg dGltZXJzICovCi0jZGVmaW5lIElOVEVSUlVQVF9UUkFOU0FDVElPTl9USU1FT1VUCQkJVUlO VDY0X0JJVCg3KQotI2RlZmluZSBJTlRFUlJVUFRfSURMRV9TRVNTSU9OX1RJTUVPVVQJCQlV SU5UNjRfQklUKDgpCi0jZGVmaW5lIElOVEVSUlVQVF9JRExFX0lOX1RSQU5TQUNUSU9OX1NF U1NJT05fVElNRU9VVCBVSU5UNjRfQklUKDkpCi0jZGVmaW5lIElOVEVSUlVQVF9DTElFTlRf Q0hFQ0tfVElNRU9VVAkJCVVJTlQ2NF9CSVQoMTApCi0KLS8qIFJhaXNlZCBieSB0aW1lciB3 aGlsZSBpZGxlLCB0byBzZW5kIGEgc3RhdHMgdXBkYXRlICovCi0jZGVmaW5lIElOVEVSUlVQ VF9JRExFX1NUQVRTX1RJTUVPVVQJCQlVSU5UNjRfQklUKDExKQotCi0vKiBSYWlzZWQgc3lu Y2hyb25vdXNseSB3aGVuIHRoZSBjbGllbnQgY29ubmVjdGlvbiBpcyBsb3N0ICovCi0jZGVm aW5lIElOVEVSUlVQVF9DTElFTlRfQ09OTkVDVElPTl9MT1NUCQkgVUlOVDY0X0JJVCgxMikK LQotLyoKLSAqIElOVEVSUlVQVF9BU1lOQ19OT1RJRlkgaXMgc2VudCB0byBub3RpZnkgYmFj a2VuZHMgdGhhdCBoYXZlIHJlZ2lzdGVyZWQgdG8KLSAqIExJU1RFTiBvbiBhbnkgY2hhbm5l bHMgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgbWVzc2FnZXMgdGhleSBuZWVkIHRvIGRlbGl2ZXIK LSAqIHRvIHRoZSBmcm9udGVuZC4gSXQgaXMgYWxzbyBwcm9jZXNzZWQgd2hlbmV2ZXIgc3Rh cnRpbmcgdG8gcmVhZCBmcm9tIHRoZQotICogY2xpZW50IG9yIHdoaWxlIGRvaW5nIHNvLCBi dXQgb25seSB3aGVuIHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGluCi0gKiBwcm9ncmVzcy4K LSAqLwotI2RlZmluZSBJTlRFUlJVUFRfQVNZTkNfTk9USUZZCQkJCQlVSU5UNjRfQklUKDEz KQotCi0vKgotICogQmVjYXVzZSBiYWNrZW5kcyBzaXR0aW5nIGlkbGUgd2lsbCBub3QgYmUg cmVhZGluZyBzaW52YWwgZXZlbnRzLCB3ZSBuZWVkIGEKLSAqIHdheSB0byBnaXZlIGFuIGlk bGUgYmFja2VuZCBhIHN3aWZ0IGtpY2sgaW4gdGhlIHJlYXIgYW5kIG1ha2UgaXQgY2F0Y2gg dXAKLSAqIGJlZm9yZSB0aGUgc2ludmFsIHF1ZXVlIG92ZXJmbG93cyBhbmQgZm9yY2VzIGl0 IHRvIGdvIHRocm91Z2ggYSBjYWNoZSByZXNldAotICogZXhlcmNpc2UuICBUaGlzIGlzIGRv bmUgYnkgc2VuZGluZyBJTlRFUlJVUFRfU0lOVkFMX0NBVENIVVAgdG8gYW55IGJhY2tlbmQK LSAqIHRoYXQgZ2V0cyB0b28gZmFyIGJlaGluZC4KKyAqIFdoZW4gbm90IHNsZWVwaW5nLCB0 aGUgQVRURU5USU9OIGZsYWcgaXMgdXNlZCBhcyBhIHF1aWNrIGNoZWNrIGluCisgKiBDSEVD S19GT1JfSU5URVJSVVBUUygpIGZvciB3aGV0aGVyIGFueSBpbnRlcnJ1cHRzIG5lZWQgdG8g YmUgcHJvY2Vzc2VkLgorICogQ2hlY2tpbmcgYSBzaW5nbGUgZmxhZyByZXF1aXJlcyBmZXdl ciBpbnN0cnVjdGlvbnMgdGhhbiBjaGVja2luZyB0aGUKKyAqIGludGVycnVwdCBiaXRzIGFn YWluc3QgRW5hYmxlZEludGVycnVwdHNNYXNrOyB0aGUgYXR0ZW50aW9uIG1lY2hhbmlzbQor ICogc2hpZnRzIHRoYXQgd29yayB0byB0aGUgc2VuZGluZyBiYWNrZW5kLgogICoKLSAqIFRo ZSBpbnRlcnJ1cHQgaXMgcHJvY2Vzc2VkIHdoZW5ldmVyIHN0YXJ0aW5nIHRvIHJlYWQgZnJv bSB0aGUgY2xpZW50LCBvcgotICogd2hlbiBpbnRlcnJ1cHRlZCB3aGlsZSBkb2luZyBzby4K KyAqIFRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgaW4gaG93IHRoZSBBVFRFTlRJT04gZmxh ZyBpcyBzZXQuICBJZiBhIGJhY2tlbmQKKyAqIGNsZWFycyBhIGJpdCBmcm9tIGl0cyAnYXR0 ZW50aW9uX21hc2snLCBhbmQgYW5vdGhlciBiYWNrZW5kIGlzIGNvbmN1cnJlbnRseQorICog c2VuZGluZyB0aGF0IGludGVycnVwdCwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBBVFRFTlRJ T04gZmxhZyBnZXRzIHNldCBvcgorICogdGhlIHByb2Nlc3MgaXMgd29rZW4gdXAgYWZ0ZXIg dGhlICdhdHRlbnRpb25fbWFzaycgaGFzIGFscmVhZHkgYmVlbgorICogY2xlYXJlZC4gIFRo ZSBzeXN0ZW0gdG9sZXJhdGVzIHNwdXJpb3VzbHkgc2V0IEFUVEVOVElPTiBmbGFnIGFuZCB3 YWtldXBzLAorICogc28gdGhhdCdzIE9LLiAgVGhlIG9wZXJhdGlvbnMgYXJlIG9yZGVyZWQg c28gdGhhdCB0aGUgb3Bwb3NpdGUgaXMgbm90CisgKiBwb3NzaWJsZTogaWYgeW91IHNldCBh IGJpdCBpbiB0aGUgJ2F0dGVudGlvbl9tYXNrJyBhbmQgdGhlbiBjaGVjayB0aGF0IHRoZQor ICogYml0IGlzIG5vdCBzZXQgaW4gdGhlICdpbnRlcnJ1cHRzJyBtYXNrLCB5b3UgYXJlIGd1 YXJhbnRlZWQgdG8gcmVjZWl2ZSB0aGUKKyAqIGF0dGVudGlvbiBmbGFnIG9yIGEgd2FrZXVw IGlmIHRoZSBpbnRlcnJ1cHQgaXMgc2V0IGxhdGVyLgogICovCi0jZGVmaW5lIElOVEVSUlVQ VF9TSU5WQUxfQ0FUQ0hVUAkJCQlVSU5UNjRfQklUKDE0KQotCi0vKiBNZXNzYWdlIGZyb20g YSBjb29wZXJhdGluZyBwYXJhbGxlbCBiYWNrZW5kIG9yIGFwcGx5IHdvcmtlciAqLwotI2Rl ZmluZSBJTlRFUlJVUFRfUEFSQUxMRUxfTUVTU0FHRQkJCQlVSU5UNjRfQklUKDE1KQotCi0K LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgotICogUHJvY2Vzcy1zcGVjaWZpYyBpbnRlcnJ1cHRzCi0g KgotICogU29tZSBwcm9jZXNzZXMgbmVlZCBkZWRpY2F0ZWQgaW50ZXJydXB0cyBmb3IgdmFy aW91cyBwdXJwb3Nlcy4gIElnbm9yZWQKLSAqIGJ5IG90aGVyIHByb2Nlc3Nlcy4KLSAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJcGdfYXRvbWljX3VpbnQzMiBm bGFnczsJCS8qIFBJX0ZMQUdfKiAqLwogCi0vKiBhc2sgd2Fsc2VuZGVycyB0byBwcmVwYXJl IGZvciBzaHV0ZG93biAgKi8KLSNkZWZpbmUgSU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQ SU5HCQkJVUlOVDY0X0JJVCgxNikKKyNpZm5kZWYgUEdfSEFWRV9BVE9NSUNfVTY0X1NJTVVM QVRJT04KKwlwZ19hdG9taWNfdWludDY0IGludGVycnVwdHM7CS8qIHBlbmRpbmcgaW50ZXJy dXB0cyAqLworCXBnX2F0b21pY191aW50NjQgYXR0ZW50aW9uX21hc2s7CS8qIGludGVycnVw dHMgdGhhdCBzZXQgdGhlIEFUVEVOVElPTgorCQkJCQkJCQkJCSAqIGZsYWcgKi8KKyNlbHNl CisJcGdfYXRvbWljX3VpbnQzMiBpbnRlcnJ1cHRzX2xvOworCXBnX2F0b21pY191aW50MzIg aW50ZXJydXB0c19oaTsKKwlwZ19hdG9taWNfdWludDMyIGF0dGVudGlvbl9tYXNrX2xvOwor CXBnX2F0b21pY191aW50MzIgYXR0ZW50aW9uX21hc2tfaGk7CisjZW5kaWYKK30gUGVuZGlu Z0ludGVycnVwdHM7CiAKLS8qIFRPRE86IGRvY3VtZW50IHRoZSBkaWZmZXJlbmNlIHdpdGgg SU5URVJSVVBUX1dBTFNORF9JTklUX1NUT1BQSU5HICovCi0jZGVmaW5lIElOVEVSUlVQVF9X QUxTTkRfU1RPUAkJCQkJVUlOVDY0X0JJVCgxNykKKyNkZWZpbmUgUElfRkxBR19BVFRFTlRJ T04JCTB4MDEKKyNkZWZpbmUgUElfRkxBR19TTEVFUElORwkJMHgwMgogCiAvKgotICogSU5U RVJSVVBUX1dBTF9BUlJJVkVEIGlzIHVzZWQgdG8gd2FrZSB1cCB0aGUgc3RhcnR1cCBwcm9j ZXNzLCB0byB0ZWxsCi0gKiBpdCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBXQUwgcmVwbGF5 LiBJdCdzIHNlbnQgYnkgV0FMIHJlY2VpdmVyIHdoZW4KLSAqIG1vcmUgV0FMIGFycml2ZXMs IG9yIHdoZW4gcHJvbW90aW9uIGlzIHJlcXVlc3RlZC4KKyAqIEludGVycnVwdCB2ZWN0b3Ig Y3VycmVudGx5IGluIHVzZSBmb3IgdGhpcyBwcm9jZXNzLiAgTW9zdCBvZiB0aGUgdGltZSB0 aGlzCisgKiBwb2ludHMgdG8gTXlQcm9jLT5wZW5kaW5nSW50ZXJydXB0cywgYnV0IGluIHBy b2Nlc3NlcyB0aGF0IGhhdmUgbm8gUEdQUk9DCisgKiBlbnRyeSAoeWV0KSwgaXQgcG9pbnRz IHRvIGEgcHJvY2Vzcy1wcml2YXRlIHZhcmlhYmxlLCBzbyB0aGF0IGludGVycnVwdHMKKyAq IGNhbiBuZXZlcnRoZWxlc3MgYmUgdXNlZCBmcm9tIHNpZ25hbCBoYW5kbGVycyBpbiB0aGUg c2FtZSBwcm9jZXNzLgogICovCi0jZGVmaW5lIElOVEVSUlVQVF9XQUxfQVJSSVZFRAkJCQkJ VUlOVDY0X0JJVCgxOCkKLQotLyogV2FrZSB1cCBzdGFydHVwIHByb2Nlc3MgdG8gY2hlY2sg Zm9yIHRoZSBwcm9tb3Rpb24gc2lnbmFsIGZpbGUgKi8KLSNkZWZpbmUgSU5URVJSVVBUX0NI RUNLX1BST01PVEUJCQkJCVVJTlQ2NF9CSVQoMTkpCi0KLS8qIHNlbnQgdG8gbG9naWNhbCBy ZXBsaWNhdGlvbiBsYXVuY2hlciwgd2hlbiBhIHN1YnNjcmlwdGlvbiBjaGFuZ2VzICovCi0j ZGVmaW5lIElOVEVSUlVQVF9TVUJTQ1JJUFRJT05fQ0hBTkdFCQkJVUlOVDY0X0JJVCgyMCkK LQotLyogR3JhY2VmdWwgc2h1dGRvd24gcmVxdWVzdCBmb3IgYSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgKi8KLSNkZWZpbmUgSU5URVJSVVBUX1NIVVRET1dOX1BBUkFMTEVMX0FQUExZX1dP UktFUiBVSU5UNjRfQklUKDIxKQotCi0vKiBSZXF1ZXN0IGNoZWNrcG9pbnRlciB0byBwZXJm b3JtIG9uZSBsYXN0IGNoZWNrcG9pbnQsIHRoZW4gc2h1dCBkb3duLiAqLwotI2RlZmluZSBJ TlRFUlJVUFRfU0hVVERPV05fWExPRwkJCQkJVUlOVDY0X0JJVCgyMikKLQotI2RlZmluZSBJ TlRFUlJVUFRfU0hVVERPV05fUEdBUkNICQkJCVVJTlQ2NF9CSVQoMjMpCitleHRlcm4gUEdE TExJTVBPUlQgUGVuZGluZ0ludGVycnVwdHMgKk15UGVuZGluZ0ludGVycnVwdHM7CiAKIC8q Ci0gKiBUaGlzIGlzIHNlbnQgdG8gdGhlIGF1dG92YWN1dW0gbGF1bmNoZXIgd2hlbiBhbiBh dXRvdmFjdXVtIHdvcmtlciBleGl0cwotICovCi0jZGVmaW5lIElOVEVSUlVQVF9BVVRPVkFD VVVNX1dPUktFUl9GSU5JU0hFRCAJVUlOVDY0X0JJVCgyNCkKLQotCi0vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKLSAqIEVuZCBvZiBidWlsdC1pbiBpbnRlcnJ1cHQgYml0cworICogVGVzdCBpZiBh biBpbnRlcnJ1cHQgaXMgcGVuZGluZwogICoKLSAqIFRoZSByZW1haW5pbmcgYml0cyBhcmUg aGFuZGVkIG91dCBieSBSZXF1ZXN0QWRkaW5JbnRlcnJ1cHQsIGZvcgotICogZXh0ZW5zaW9u cwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBCRUdJTl9BRERJTl9JTlRFUlJVUFRT IDI1Ci0jZGVmaW5lIEVORF9BRERJTl9JTlRFUlJVUFRTIDYzCi0KLS8qCi0gKiBTTEVFUElO R19PTl9JTlRFUlJVUFRTIGluZGljYXRlcyB0aGF0IHRoZSBiYWNrZW5kIGlzIGN1cnJlbnRs eSBibG9ja2VkCi0gKiB3YWl0aW5nIGZvciBhbiBpbnRlcnJ1cHQuICBJZiBzZXQsIHRoZSBi YWNrZW5kIG5lZWRzIHRvIGJlIHdva2VuIHVwIHdoZW4gYQotICogYml0IGluIHRoZSBwZW5k aW5nIGludGVycnVwdHMgbWFzayBpcyBzZXQuICBJdCdzIHVzZWQgaW50ZXJuYWxseSBieSB0 aGUKLSAqIGludGVycnVwdCBtYWNoaW5lcnksIGFuZCBjYW5ub3QgYmUgdXNlZCBkaXJlY3Rs eSBpbiB0aGUgcHVibGljIGZ1bmN0aW9ucy4KLSAqIEl0J3MgbmFtZWQgZGlmZmVyZW50bHkg dG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYWN0dWFsIGludGVycnVwdCBmbGFncy4KLSAq LwotI2RlZmluZSBTTEVFUElOR19PTl9JTlRFUlJVUFRTIFVJTlQ2NF9CSVQoNjMpCi0KLWV4 dGVybiBQR0RMTElNUE9SVCBwZ19hdG9taWNfdWludDY0ICpNeVBlbmRpbmdJbnRlcnJ1cHRz OwotCi0vKgotICogVGVzdCBhbiBpbnRlcnJ1cHQgZmxhZyAob3IgZmxhZ3MpLgorICogSWYg J2ludGVycnVwdE1hc2snIGhhcyBtdWx0aXBsZSBiaXRzIHNldCwgcmV0dXJucyB0cnVlIGlm IGFueSBvZiB0aGVtIGFyZQorICogcGVuZGluZy4KICAqLwogc3RhdGljIGlubGluZSBib29s CiBJbnRlcnJ1cHRQZW5kaW5nKEludGVycnVwdE1hc2sgaW50ZXJydXB0TWFzaykKIHsKIAkv KgotCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBtZW1vcnkgYmFycmllciBoZXJlLiBUaGlz IGlzIHVzZWQgaW4KLQkgKiBDSEVDS19GT1JfSU5URVJSVVBUUygpLCBzbyB3ZSB3YW50IHRo aXMgdG8gYmUgYXMgY2hlYXAgYXMgcG9zc2libGUuCi0JICoKLQkgKiBUaGF0IG1lYW5zIHRo YXQgaWYgdGhlIGludGVycnVwdCBpcyBjb25jdXJyZW50bHkgc2V0IGJ5IGFub3RoZXIKLQkg KiBwcm9jZXNzLCB3ZSBtaWdodCBtaXNzIGl0LiBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVz ZSB0aGUgbmV4dAotCSAqIFdhaXRJbnRlcnJ1cHQoKSBvciBlcXVpdmFsZW50IGNhbGwgYWN0 cyBhcyBhIHN5bmNocm9uaXphdGlvbiBiYXJyaWVyLgotCSAqIFdlIHdpbGwgc2VlIHRoZSB1 cGRhdGVkIHZhbHVlIGJlZm9yZSBzbGVlcGluZy4KKwkgKiBOb3RlIHRoYXQgdGhlcmUgaXMg bm8gbWVtb3J5IGJhcnJpZXIgaGVyZSwgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUKKwkg KiBhcyBjaGVhcCBhcyBwb3NzaWJsZS4gIFRoYXQgbWVhbnMgdGhhdCBpZiB0aGUgaW50ZXJy dXB0IGlzIGNvbmN1cnJlbnRseQorCSAqIHNldCBieSBhbm90aGVyIHByb2Nlc3MsIHdlIG1p Z2h0IG1pc3MgaXQuICBUaGF0IHNob3VsZCBiZSBPSywgYmVjYXVzZQorCSAqIHRoZSBuZXh0 IFdhaXRJbnRlcnJ1cHQoKSBvciBlcXVpdmFsZW50IGNhbGwgYWN0cyBhcyBhIHN5bmNocm9u aXphdGlvbgorCSAqIGJhcnJpZXI7IHdlIHdpbGwgc2VlIHRoZSB1cGRhdGVkIHZhbHVlIGJl Zm9yZSBzbGVlcGluZy4KIAkgKi8KLQlyZXR1cm4gKHBnX2F0b21pY19yZWFkX3U2NChNeVBl bmRpbmdJbnRlcnJ1cHRzKSAmIGludGVycnVwdE1hc2spICE9IDA7CisJdWludDY0CQlwZW5k aW5nOworCisjaWZuZGVmIFBHX0hBVkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCisJcGVuZGlu ZyA9IHBnX2F0b21pY19yZWFkX3U2NCgmTXlQZW5kaW5nSW50ZXJydXB0cy0+aW50ZXJydXB0 cyk7CisjZWxzZQorCXBlbmRpbmcgPSAodWludDY0KSBwZ19hdG9taWNfcmVhZF91MzIoJk15 UGVuZGluZ0ludGVycnVwdHMtPmludGVycnVwdHNfbG8pOworCXBlbmRpbmcgfD0gKHVpbnQ2 NCkgcGdfYXRvbWljX3JlYWRfdTMyKCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5pbnRlcnJ1cHRz X2hpKSA8PCAzMjsKKyNlbmRpZgorCisJcmV0dXJuIChwZW5kaW5nICYgaW50ZXJydXB0TWFz aykgIT0gMDsKIH0KIAogLyoKICAqIENsZWFyIGFuIGludGVycnVwdCBmbGFnIChvciBmbGFn cykuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgY2xlYXIgdGhlIEFUVEVOVElP TiBmbGFnLCBzbyBpZiBpdCB3YXMgYWxyZWFkeSBzZXQsCisgKiB0aGUgbmV4dCBDSEVDS19G T1JfSU5URVJSVVBUUygpIHdpbGwgbWFrZSBhbiB1bm5lY2Vzc2FyeSBidXQgaGFybWxlc3MK KyAqIFByb2Nlc3NJbnRlcnJ1cHRzKCkgY2FsbC4KICAqLwogc3RhdGljIGlubGluZSB2b2lk CiBDbGVhckludGVycnVwdChJbnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2spCiB7Ci0JcGdf YXRvbWljX2ZldGNoX2FuZF91NjQoTXlQZW5kaW5nSW50ZXJydXB0cywgfmludGVycnVwdE1h c2spOworCXVpbnQ2NAkJbWFzayA9IH5pbnRlcnJ1cHRNYXNrOworCisjaWZuZGVmIFBHX0hB VkVfQVRPTUlDX1U2NF9TSU1VTEFUSU9OCisJKHZvaWQpIHBnX2F0b21pY19mZXRjaF9hbmRf dTY0KCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5pbnRlcnJ1cHRzLCBtYXNrKTsKKyNlbHNlCisJ KHZvaWQpIHBnX2F0b21pY19mZXRjaF9hbmRfdTMyKCZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5p bnRlcnJ1cHRzX2xvLCAodWludDMyKSBtYXNrKTsKKwkodm9pZCkgcGdfYXRvbWljX2ZldGNo X2FuZF91MzIoJk15UGVuZGluZ0ludGVycnVwdHMtPmludGVycnVwdHNfaGksICh1aW50MzIp IChtYXNrID4+IDMyKSk7CisjZW5kaWYKIH0KIAogLyoKQEAgLTI1NCwxMDYgKzE3MSwxMTAg QEAgZXh0ZXJuIHZvaWQgU3dpdGNoVG9Mb2NhbEludGVycnVwdHModm9pZCk7CiBleHRlcm4g dm9pZCBTd2l0Y2hUb1NoYXJlZEludGVycnVwdHModm9pZCk7CiBleHRlcm4gdm9pZCBJbml0 aWFsaXplSW50ZXJydXB0V2FpdFNldCh2b2lkKTsKIAotdHlwZWRlZiB2b2lkICgqcGdfaW50 ZXJydXB0X2hhbmRsZXJfdCkgKHZvaWQpOwotZXh0ZXJuIHZvaWQgU2V0SW50ZXJydXB0SGFu ZGxlcihJbnRlcnJ1cHRNYXNrIGludGVycnVwdE1hc2ssIHBnX2ludGVycnVwdF9oYW5kbGVy X3QgaGFuZGxlcik7Ci0KLWV4dGVybiB2b2lkIEVuYWJsZUludGVycnVwdChJbnRlcnJ1cHRN YXNrIGludGVycnVwdE1hc2spOwotZXh0ZXJuIHZvaWQgRGlzYWJsZUludGVycnVwdChJbnRl cnJ1cHRNYXNrIGludGVycnVwdE1hc2spOwotCi0vKiBmb3IgZXh0ZW5zaW9ucyAqLwotZXh0 ZXJuIEludGVycnVwdE1hc2sgUmVxdWVzdEFkZGluSW50ZXJydXB0KHZvaWQpOwotCi0vKiBT dGFuZGFyZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIERlZmluZWQgaW4gdGNvcC9wb3N0Z3Jlcy5j ICovCi1leHRlcm4gdm9pZCBTZXRTdGFuZGFyZEludGVycnVwdEhhbmRsZXJzKHZvaWQpOwot Ci1leHRlcm4gdm9pZCBQcm9jZXNzUXVlcnlDYW5jZWxJbnRlcnJ1cHQodm9pZCk7Ci1leHRl cm4gdm9pZCBQcm9jZXNzVGVybWluYXRlSW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQg UHJvY2Vzc0NvbmZpZ1JlbG9hZEludGVycnVwdCh2b2lkKTsKLWV4dGVybiB2b2lkIFByb2Nl c3NBc3luY05vdGlmeUludGVycnVwdCh2b2lkKTsKLWV4dGVybiB2b2lkIFByb2Nlc3NJZGxl U3RhdHNUaW1lb3V0SW50ZXJydXB0KHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY2Vzc1JlY292 ZXJ5Q29uZmxpY3RJbnRlcnJ1cHRzKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY2Vzc1RyYW5z YWN0aW9uVGltZW91dEludGVycnVwdCh2b2lkKTsKLWV4dGVybiB2b2lkIFByb2Nlc3NJZGxl U2Vzc2lvblRpbWVvdXRJbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4gdm9pZCBQcm9jZXNzSWRs ZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dEludGVycnVwdCh2b2lkKTsKLWV4dGVybiB2 b2lkIFByb2Nlc3NDbGllbnRDaGVja1RpbWVvdXRJbnRlcnJ1cHQodm9pZCk7Ci1leHRlcm4g dm9pZCBQcm9jZXNzQ2xpZW50Q29ubmVjdGlvbkxvc3Qodm9pZCk7Ci0KLWV4dGVybiB2b2lk IFByb2Nlc3NBdXhQcm9jZXNzU2h1dGRvd25JbnRlcnJ1cHQodm9pZCk7Ci0KIAogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCiAgKgkgIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgYW5kIGZy aWVuZHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyogSW50ZXJydXB0cyBjdXJy ZW50bHkgZW5hYmxlZCBmb3IgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSBwcm9jZXNzaW5nICov CitleHRlcm4gUEdETExJTVBPUlQgSW50ZXJydXB0TWFzayBFbmFibGVkSW50ZXJydXB0c01h c2s7CiAKLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBJbnRlcnJ1cHRNYXNrIEVuYWJs ZWRJbnRlcnJ1cHRzTWFzazsKLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBJbnRlcnJ1 cHRNYXNrIENoZWNrRm9ySW50ZXJydXB0c01hc2s7Ci0KLWV4dGVybiB2b2lkIFByb2Nlc3NJ bnRlcnJ1cHRzKHZvaWQpOworLyoKKyAqIFBvaW50ZXIgdG8gTXlQZW5kaW5nSW50ZXJydXB0 cy0+ZmxhZ3MsIGV4Y2VwdCB3aGVuIGludGVycnVwdCBob2xkb2ZmIG9yIGEKKyAqIGNyaXRp Y2FsIHNlY3Rpb24gcHJldmVudHMgaW50ZXJydXB0cyBwcm9jZXNzaW5nLCBpbiB3aGljaCBj YXNlIHRoaXMgcG9pbnRzCisgKiB0byBhIGR1bW15IGFsbC16ZXJvcyB2YXJpYWJsZSAoWmVy b1BlbmRpbmdJbnRlcnJ1cHRzRmxhZ3MpIGluc3RlYWQuICBUaGlzCisgKiBhbGxvd3MgQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKSB0byBmb2xsb3cganVzdCB0aGlzIG9uZSBwb2ludGVyLCBh bmQgbm90IGhhdmUKKyAqIHRvIGNoZWNrIHRoZSBob2xkb2ZmIGNvdW50cyBzZXBhcmF0ZWx5 LgorICovCitleHRlcm4gUEdETExJTVBPUlQgcGdfYXRvbWljX3VpbnQzMiAqTXlQZW5kaW5n SW50ZXJydXB0c0ZsYWdzOwogCi0vKiBUZXN0IHdoZXRoZXIgYW4gaW50ZXJydXB0IGlzIHBl bmRpbmcgKi8KKy8qCisgKiBDaGVjayB3aGV0aGVyIGFueSBlbmFibGVkIGludGVycnVwdCBp cyBwZW5kaW5nLCB3aXRob3V0IHRyeWluZyB0byBzZXJ2aWNlCisgKiBpdCBpbW1lZGlhdGVs eS4gIFRoaXMgaXMgY2FuIGJlIHVzZWQgaW4gYSBIT0xEX0lOVEVSUlVQVFMoKSBibG9jayB0 byBjaGVjaworICogaWYgdGhlIEhPTERfSU5URVJSVVBUUygpIGlzIGRlbGF5aW5nIHRoZSBp bnRlcnJ1cHQgcHJvY2Vzc2luZy4KKyAqLwogI2lmbmRlZiBXSU4zMgotI2RlZmluZSBJTlRF UlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKG1hc2spIFwKLQkodW5saWtlbHkoSW50ZXJydXB0 UGVuZGluZyhtYXNrKSkpCisjZGVmaW5lIElOVEVSUlVQVFNfUEVORElOR19DT05ESVRJT04o KSBcCisJKHVubGlrZWx5KEludGVycnVwdFBlbmRpbmcoRW5hYmxlZEludGVycnVwdHNNYXNr KSkpCiAjZWxzZQotI2RlZmluZSBJTlRFUlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKG1hc2sp IFwKKyNkZWZpbmUgSU5URVJSVVBUU19QRU5ESU5HX0NPTkRJVElPTigpIFwKIAkodW5saWtl bHkoVU5CTE9DS0VEX1NJR05BTF9RVUVVRSgpKSA/IFwKIAkgcGd3aW4zMl9kaXNwYXRjaF9x dWV1ZWRfc2lnbmFscygpIDogKHZvaWQpIDAsCVwKLQkgdW5saWtlbHkoSW50ZXJydXB0UGVu ZGluZyhtYXNrKSkpCisJIHVubGlrZWx5KEludGVycnVwdFBlbmRpbmcoRW5hYmxlZEludGVy cnVwdHNNYXNrKSkpCiAjZW5kaWYKIAogLyoKLSAqIElzIFByb2Nlc3NJbnRlcnJ1cHRzKCkg Z3VhcmFudGVlZCB0byBjbGVhciBhbGwgdGhlIGJpdHMgaW4gJ21hc2snPwotICoKLSAqIChU aGUgaW50ZXJydXB0IGhhbmRsZXIgbWF5IHJlLXJhaXNlIHRoZSBpbnRlcnJ1cHQsIHRob3Vn aCkKKyAqIENhbiBpbnRlcnJ1cHRzIGJlIHByb2Nlc3NlZCBpbiB0aGUgY3VycmVudCBzdGF0 ZSwgaS5lLiBhcmUgdGhlIGludGVycnVwdHMKKyAqIG5vdCBwcmV2ZW50ZWQgYnkgdGhlIEhP TERfSU5URVJSVVBUUygpIG9yIGEgY3JpdGljYWwgc2VjdGlvbiBjcml0aWNhbAorICogc2Vj dGlvbj8KICAqLwotI2RlZmluZSBJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQobWFzaykg XAotCSgoKG1hc2spICYgQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzaykgPT0gKG1hc2spKQorI2Rl ZmluZSBJTlRFUlJVUFRTX0NBTl9CRV9QUk9DRVNTRUQoKSBcCisJKEludGVycnVwdEhvbGRv ZmZDb3VudCA9PSAwICYmIENyaXRTZWN0aW9uQ291bnQgPT0gMCkKIAotLyogU2VydmljZSBp bnRlcnJ1cHQsIGlmIG9uZSBpcyBwZW5kaW5nIGFuZCBpdCdzIHNhZmUgdG8gc2VydmljZSBp dCBub3cgKi8KKy8qCisgKiBJbnRlcnJ1cHRzIHRoYXQgd291bGQgYmUgcHJvY2Vzc2VkIGJ5 IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuICBUaGlzIGlzCisgKiBlcXVhbCB0byBFbmFibGVk SW50ZXJydXB0c01hc2ssIGV4Y2VwdCB3aGVuIGludGVycnVwdHMgYXJlIGhlbGQgb2ZmIGJ5 CisgKiBIT0xEL1JFU1VNRV9JTlRFUlJVUFRTKCkgb3IgYSBjcml0aWNhbCBzZWN0aW9uLgor ICovCisjZGVmaW5lIENoZWNrRm9ySW50ZXJydXB0c01hc2sgXAorCShJTlRFUlJVUFRTX0NB Tl9CRV9QUk9DRVNTRUQoKSA/IEVuYWJsZWRJbnRlcnJ1cHRzTWFzayA6IDApCisKKy8qCisg KiBTZXJ2aWNlIGFuIGludGVycnVwdCwgaWYgb25lIGlzIHBlbmRpbmcgYW5kIGl0J3Mgc2Fm ZSB0byBzZXJ2aWNlIGl0IG5vdy4KKyAqCisgKiBOQjogVGhpcyBpcyBjYWxsZWQgZnJvbSBh bGwgb3ZlciB0aGUgY29kZWJhc2UsIGFuZCBpbiBmYWlybHkgdGlnaHQgbG9vcHMsCisgKiBz byB0aGlzIG5lZWRzIHRvIGJlIHZlcnkgc2hvcnQgYW5kIGZhc3Qgd2hlbiB0aGVyZSBpcyBu byB3b3JrIHRvIGRvIQorICovCiAjZGVmaW5lIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkJCQkJ CVwKIGRvIHsgXAotCWlmIChJTlRFUlJVUFRTX1BFTkRJTkdfQ09ORElUSU9OKENoZWNrRm9y SW50ZXJydXB0c01hc2spKSBcCisJaWYgKHVubGlrZWx5KHBnX2F0b21pY19yZWFkX3UzMihN eVBlbmRpbmdJbnRlcnJ1cHRzRmxhZ3MpICE9IDApKSBcCiAJCVByb2Nlc3NJbnRlcnJ1cHRz KCk7CQkJCQkJCQkJCQlcCiB9IHdoaWxlKDApCiAKK3R5cGVkZWYgdm9pZCAoKnBnX2ludGVy cnVwdF9oYW5kbGVyX3QpICh2b2lkKTsKK2V4dGVybiB2b2lkIFNldEludGVycnVwdEhhbmRs ZXIoSW50ZXJydXB0TWFzayBpbnRlcnJ1cHRNYXNrLCBwZ19pbnRlcnJ1cHRfaGFuZGxlcl90 IGhhbmRsZXIpOworCitleHRlcm4gdm9pZCBFbmFibGVJbnRlcnJ1cHQoSW50ZXJydXB0TWFz ayBpbnRlcnJ1cHRNYXNrKTsKK2V4dGVybiB2b2lkIERpc2FibGVJbnRlcnJ1cHQoSW50ZXJy dXB0TWFzayBpbnRlcnJ1cHRNYXNrKTsKKworZXh0ZXJuIHZvaWQgUHJvY2Vzc0ludGVycnVw dHModm9pZCk7CitleHRlcm4gdm9pZCBTZXRJbnRlcnJ1cHRBdHRlbnRpb25NYXNrKEludGVy cnVwdE1hc2sgbWFzayk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJICBDcml0 aWNhbCBzZWN0aW9uIGFuZCBpbnRlcnJ1cHQgaG9sZG9mZiBtZWNoYW5pc20KICAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KIAotLyogdGhlc2UgYXJlIG1hcmtlZCB2b2xhdGlsZSBiZWNh dXNlIHRoZXkgYXJlIGV4YW1pbmVkIGJ5IHNpZ25hbCBoYW5kbGVyczogKi8KLS8qCi0gKiBY WFg6IGlzIHRoYXQgc3RpbGwgdHJ1ZT8gU2hvdWxkIHdlIHVzZSBsb2NhbCB2YXJzIHRvIGF2 b2lkIHJlcGVhdGVkIGFjY2VzcwotICogZS5nLiBpbnNpZGUgUkVTVU1FX0lOVEVSUlVQVFMo KSA/Ci0gKi8KLWV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0 SG9sZG9mZkNvdW50OwotZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHVpbnQzMiBDcml0 U2VjdGlvbkNvdW50OworZXh0ZXJuIFBHRExMSU1QT1JUIHVpbnQzMiBJbnRlcnJ1cHRIb2xk b2ZmQ291bnQ7CitleHRlcm4gUEdETExJTVBPUlQgdWludDMyIENyaXRTZWN0aW9uQ291bnQ7 CisKK2V4dGVybiBjb25zdCBwZ19hdG9taWNfdWludDMyIFplcm9QZW5kaW5nSW50ZXJydXB0 c0ZsYWdzOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIEhPTERfSU5URVJSVVBUUyh2b2lkKQog ewogCUludGVycnVwdEhvbGRvZmZDb3VudCsrOwotCUNoZWNrRm9ySW50ZXJydXB0c01hc2sg PSAoSW50ZXJydXB0TWFzaykgMDsKKworCS8qCisJICogRGlzYWJsZSBDSEVDS19GT1JfSU5U RVJSVVBUUygpIGJ5IHBvaW50aW5nIE15UGVuZGluZ0ludGVycnVwdHNGbGFncyB0bworCSAq IGFuIGFsbC16ZXJvcyBjb25zdGFudC4KKwkgKi8KKwlNeVBlbmRpbmdJbnRlcnJ1cHRzRmxh Z3MgPSB1bmNvbnN0aWZ5KHBnX2F0b21pY191aW50MzIgKiwgJlplcm9QZW5kaW5nSW50ZXJy dXB0c0ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBSRVNVTUVfSU5URVJSVVBU Uyh2b2lkKQogewotCUFzc2VydChDaGVja0ZvckludGVycnVwdHNNYXNrID09IDApOwogCUFz c2VydChJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPiAwKTsKIAlJbnRlcnJ1cHRIb2xkb2ZmQ291 bnQtLTsKIAlpZiAoSW50ZXJydXB0SG9sZG9mZkNvdW50ID09IDAgJiYgQ3JpdFNlY3Rpb25D b3VudCA9PSAwKQotCQlDaGVja0ZvckludGVycnVwdHNNYXNrID0gRW5hYmxlZEludGVycnVw dHNNYXNrOwotCWVsc2UKLQkJQXNzZXJ0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgPT0gMCk7 CisJCU15UGVuZGluZ0ludGVycnVwdHNGbGFncyA9ICZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5m bGFnczsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBTVEFSVF9DUklUX1NFQ1RJT04odm9p ZCkKIHsKIAlDcml0U2VjdGlvbkNvdW50Kys7Ci0JQ2hlY2tGb3JJbnRlcnJ1cHRzTWFzayA9 IDA7CisJTXlQZW5kaW5nSW50ZXJydXB0c0ZsYWdzID0gdW5jb25zdGlmeShwZ19hdG9taWNf dWludDMyICosICZaZXJvUGVuZGluZ0ludGVycnVwdHNGbGFncyk7CiB9CiAKIHN0YXRpYyBp bmxpbmUgdm9pZApAQCAtMzYyLDkgKzI4Myw5IEBAIEVORF9DUklUX1NFQ1RJT04odm9pZCkK IAlBc3NlcnQoQ3JpdFNlY3Rpb25Db3VudCA+IDApOwogCUNyaXRTZWN0aW9uQ291bnQtLTsK IAlpZiAoSW50ZXJydXB0SG9sZG9mZkNvdW50ID09IDAgJiYgQ3JpdFNlY3Rpb25Db3VudCA9 PSAwKQotCQlDaGVja0ZvckludGVycnVwdHNNYXNrID0gRW5hYmxlZEludGVycnVwdHNNYXNr OwotCWVsc2UKLQkJQXNzZXJ0KENoZWNrRm9ySW50ZXJydXB0c01hc2sgPT0gMCk7CisJCU15 UGVuZGluZ0ludGVycnVwdHNGbGFncyA9ICZNeVBlbmRpbmdJbnRlcnJ1cHRzLT5mbGFnczsK IH0KIAorZXh0ZXJuIHZvaWQgUmVzZXRJbnRlcnJ1cHRIb2xkb2ZmQ291bnRzKHVpbnQzMiBu ZXdfaG9sZG9mZl9jb3VudCwgdWludDMyIG5ld19jcml0X3NlY3Rpb25fY291bnQpOworCiAj ZW5kaWYJCQkJCQkJLyogSVBDX0lOVEVSUlVQVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9pcGMvc3RhbmRhcmRfaW50ZXJydXB0cy5oIGIvc3JjL2luY2x1ZGUvaXBjL3N0YW5k YXJkX2ludGVycnVwdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uODkwN2IzNzhmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9pcGMvc3Rh bmRhcmRfaW50ZXJydXB0cy5oCkBAIC0wLDAgKzEsMTk0IEBACisjaWZuZGVmIElQQ19TVEFO REFSRF9JTlRFUlJVUFRTX0gKKyNkZWZpbmUgSVBDX1NUQU5EQVJEX0lOVEVSUlVQVFNfSAor CisvKiBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSB0byBpbnRl cnJ1cHQuaCAqLwordHlwZWRlZiB1aW50NjQgSW50ZXJydXB0TWFzazsKKworLyoKKyAqIElu dGVycnVwdCBiaXRzIHRoYXQgdXNlZCBpbiBQZW5kaW5nSW50cnJ1cHRzLT5pbnRlcnJ1cHRz IGJpdG1hc2suICBFYWNoCisgKiB2YWx1ZSBpcyBhIGRpZmZlcmVudCBiaXQsIHNvIHRoYXQg dGhlc2UgY2FuIGJlIGNvbnZlbmllbnRseSBPUidkIHRvZ2V0aGVyLgorICovCisjZGVmaW5l IFVJTlQ2NF9CSVQoc2hpZnQpIChVSU5UNjRfQygxKSA8PCAoc2hpZnQpKQorCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqIEJlZ2luIGRlZmluaXRpb25zIG9mIGJ1aWx0LWluIGludGVycnVw dCBiaXRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBJTlRFUlJVUFRfV0FJVF9X QUtFVVAgaXMgc2hhcmVkIGJ5IG1hbnkgdXNlIGNhc2VzIHRoYXQgbmVlZCB0byB3YWtlIHVw CisgKiBhIHByb2Nlc3MsIHdoaWNoIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgaW50ZXJydXB0 IGJpdC4KKyAqLworI2RlZmluZSBJTlRFUlJVUFRfV0FJVF9XQUtFVVAJCQkJCVVJTlQ2NF9C SVQoMCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0YW5kYXJkIGludGVycnVwdHMg aGFuZGxlZCB0aGUgc2FtZSBieSBtb3N0IHByb2Nlc3NlcworICoKKyAqIE1vc3Qgb2YgdGhl c2UgYXJlIG5vcm1hbGx5IHByb2Nlc3NlZCBieSBDSEVDS19GT1JfSU5URVJSVVBUUygpIG9u Y2UKKyAqIHByb2Nlc3Mgc3RhcnR1cCBoYXMgcmVhY2hlZCBTZXRTdGFuZGFyZEludGVycnVw dHMoKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEJhY2tlbmQgaGFzIGJlZW4g cmVxdWVzdGVkIHRvIHRlcm1pbmF0ZSBncmFjZWZ1bGx5LgorICoKKyAqIFRoaXMgaXMgcmFp c2VkIGJ5IHRoZSBTSUdURVJNIHNpZ25hbCBoYW5kbGVyLCBvciBjYW4gYmUgc2VudCBkaXJl Y3RseSBieQorICogYW5vdGhlciBiYWNrZW5kIGUuZy4gd2l0aCBwZ190ZXJtaW5hdGVfYmFj a2VuZCgpLgorICovCisjZGVmaW5lIElOVEVSUlVQVF9URVJNSU5BVEUJCQkJCQlVSU5UNjRf QklUKDEpCisKKy8qCisgKiBDYW5jZWwgY3VycmVudCBxdWVyeSwgaWYgYW55LgorICoKKyAq IFNlbnQgdG8gcmVndWxhciBiYWNrZW5kcyBieSBwZ19jYW5jZWxfYmFja2VuZCgpLCBTSUdJ TlQsIG9yIGluIHJlc3BvbnNlIHRvCisgKiBhIHF1ZXJ5IGNhbmNlbGxhdGlvbiBwYWNrZXQu ICBTb21lIG90aGVyIHByb2Nlc3NlcyBsaWtlIGF1dG92YWN1dW0gd29ya2VycworICogYW5k IGxvZ2ljYWwgZGVjb2RpbmcgcHJvY2Vzc2VzIGFsc28gcmVhY3QgdG8gdGhpcy4KKyAqLwor I2RlZmluZSBJTlRFUlJVUFRfUVVFUllfQ0FOQ0VMCQkJCQlVSU5UNjRfQklUKDIpCisKKy8q CisgKiBSZWNvdmVyeSBjb25mbGljdC4gVGhpcyBpcyBzZW50IGJ5IHRoZSBzdGFydHVwIHBy b2Nlc3MgaW4gaG90IHN0YW5kYnkgbW9kZQorICogd2hlbiBhIGJhY2tlbmQgaG9sZHMgYmFj ayB0aGUgV0FMIHJlcGxheSBmb3IgdG9vIGxvbmcuIFRoZSByZWFzb24gZm9yIHRoZQorICog Y29uZmxpY3QgaW5kaWNhdGVkIGJ5IHRoZSBQR1BST0MtPnBlbmRpbmdSZWNvdmVyeUNvbmZs aWN0cworICogYml0bWFzay4gQ29uZmxpY3RzIGFyZSBnZW5lcmFsbHkgcmVzb2x2ZWQgYnkg dGVybWluYXRpbmcgdGhlIGN1cnJlbnQgcXVlcnkKKyAqIG9yIHNlc3Npb24uIFRoZSBleGFj dCByZWFjdGlvbiBkZXBlbmRzIG9uIHRoZSByZWFzb24gYW5kIHdoYXQgc3RhdGUgdGhlCisg KiBiYWNrZW5kIGlzIGluLgorICovCisjZGVmaW5lIElOVEVSUlVQVF9SRUNPVkVSWV9DT05G TElDVCAJCQlVSU5UNjRfQklUKDMpCisKKy8qCisgKiBDb25maWcgZmlsZSByZWxvYWQgaXMg cmVxdWVzdGVkLgorICoKKyAqIFRoaXMgaXMgbm9ybWFsbHkgZGlzYWJsZWQgYW5kIHRoZXJl Zm9yZSBub3QgaGFuZGxlZCBhdAorICogQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKS4gVGhlICJt YWluIGxvb3AiIGluIGVhY2ggcHJvY2VzcyBpcyBleHBlY3RlZCB0bworICogY2hlY2sgZm9y IGl0IGV4cGxpY2l0bHkuCisgKi8KKyNkZWZpbmUgSU5URVJSVVBUX0NPTkZJR19SRUxPQUQJ CQkJCVVJTlQ2NF9CSVQoNCkKKworLyoKKyAqIExvZyBjdXJyZW50IG1lbW9yeSBjb250ZXh0 cywgc2VudCBieSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQorICovCisjZGVm aW5lIElOVEVSUlVQVF9MT0dfTUVNT1JZX0NPTlRFWFQgCQkJVUlOVDY0X0JJVCg1KQorCisv KgorICogcHJvY3NpZ25hbCBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQKKyAqLworI2RlZmlu ZSBJTlRFUlJVUFRfQkFSUklFUgkJCQkJCVVJTlQ2NF9CSVQoNikKKworCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqIEludGVycnVwdHMgdXNlZCBieSBjbGllbnQgYmFja2VuZHMgYW5kIG1v c3Qgb3RoZXIgcHJvY2Vzc2VzIHRoYXQKKyAqIGNvbm5lY3QgdG8gYSBwYXJ0aWN1bGFyIGRh dGFiYXNlLgorICoKKyAqIE1vc3Qgb2YgdGhlc2UgYXJlIGFsc28gcHJvY2Vzc2VkIGJ5IENI RUNLX0ZPUl9JTlRFUlJVUFRTKCkgb25jZSBwcm9jZXNzCisgKiBzdGFydHVwIGhhcyByZWFj aGVkIFNldFN0YW5kYXJkSW50ZXJydXB0cygpLgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisv KiBSYWlzZWQgYnkgdGltZXJzICovCisjZGVmaW5lIElOVEVSUlVQVF9UUkFOU0FDVElPTl9U SU1FT1VUCQkJVUlOVDY0X0JJVCg3KQorI2RlZmluZSBJTlRFUlJVUFRfSURMRV9TRVNTSU9O X1RJTUVPVVQJCQlVSU5UNjRfQklUKDgpCisjZGVmaW5lIElOVEVSUlVQVF9JRExFX0lOX1RS QU5TQUNUSU9OX1NFU1NJT05fVElNRU9VVCBVSU5UNjRfQklUKDkpCisjZGVmaW5lIElOVEVS UlVQVF9DTElFTlRfQ0hFQ0tfVElNRU9VVAkJCVVJTlQ2NF9CSVQoMTApCisKKy8qIFJhaXNl ZCBieSB0aW1lciB3aGlsZSBpZGxlLCB0byBzZW5kIGEgc3RhdHMgdXBkYXRlICovCisjZGVm aW5lIElOVEVSUlVQVF9JRExFX1NUQVRTX1RJTUVPVVQJCQlVSU5UNjRfQklUKDExKQorCisv KiBSYWlzZWQgc3luY2hyb25vdXNseSB3aGVuIHRoZSBjbGllbnQgY29ubmVjdGlvbiBpcyBs b3N0ICovCisjZGVmaW5lIElOVEVSUlVQVF9DTElFTlRfQ09OTkVDVElPTl9MT1NUCQkgVUlO VDY0X0JJVCgxMikKKworLyoKKyAqIElOVEVSUlVQVF9BU1lOQ19OT1RJRlkgaXMgc2VudCB0 byBub3RpZnkgYmFja2VuZHMgdGhhdCBoYXZlIHJlZ2lzdGVyZWQgdG8KKyAqIExJU1RFTiBv biBhbnkgY2hhbm5lbHMgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgbWVzc2FnZXMgdGhleSBuZWVk IHRvIGRlbGl2ZXIKKyAqIHRvIHRoZSBmcm9udGVuZC4gSXQgaXMgYWxzbyBwcm9jZXNzZWQg d2hlbmV2ZXIgc3RhcnRpbmcgdG8gcmVhZCBmcm9tIHRoZQorICogY2xpZW50IG9yIHdoaWxl IGRvaW5nIHNvLCBidXQgb25seSB3aGVuIHRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIGluCisg KiBwcm9ncmVzcy4KKyAqLworI2RlZmluZSBJTlRFUlJVUFRfQVNZTkNfTk9USUZZCQkJCQlV SU5UNjRfQklUKDEzKQorCisvKgorICogQmVjYXVzZSBiYWNrZW5kcyBzaXR0aW5nIGlkbGUg d2lsbCBub3QgYmUgcmVhZGluZyBzaW52YWwgZXZlbnRzLCB3ZSBuZWVkIGEKKyAqIHdheSB0 byBnaXZlIGFuIGlkbGUgYmFja2VuZCBhIHN3aWZ0IGtpY2sgaW4gdGhlIHJlYXIgYW5kIG1h a2UgaXQgY2F0Y2ggdXAKKyAqIGJlZm9yZSB0aGUgc2ludmFsIHF1ZXVlIG92ZXJmbG93cyBh bmQgZm9yY2VzIGl0IHRvIGdvIHRocm91Z2ggYSBjYWNoZSByZXNldAorICogZXhlcmNpc2Uu ICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyBJTlRFUlJVUFRfU0lOVkFMX0NBVENIVVAgdG8g YW55IGJhY2tlbmQKKyAqIHRoYXQgZ2V0cyB0b28gZmFyIGJlaGluZC4KKyAqCisgKiBUaGUg aW50ZXJydXB0IGlzIHByb2Nlc3NlZCB3aGVuZXZlciBzdGFydGluZyB0byByZWFkIGZyb20g dGhlIGNsaWVudCwgb3IKKyAqIHdoZW4gaW50ZXJydXB0ZWQgd2hpbGUgZG9pbmcgc28uCisg Ki8KKyNkZWZpbmUgSU5URVJSVVBUX1NJTlZBTF9DQVRDSFVQCQkJCVVJTlQ2NF9CSVQoMTQp CisKKy8qIE1lc3NhZ2UgZnJvbSBhIGNvb3BlcmF0aW5nIHBhcmFsbGVsIGJhY2tlbmQgb3Ig YXBwbHkgd29ya2VyICovCisjZGVmaW5lIElOVEVSUlVQVF9QQVJBTExFTF9NRVNTQUdFCQkJ CVVJTlQ2NF9CSVQoMTUpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZXNzLXNw ZWNpZmljIGludGVycnVwdHMKKyAqCisgKiBTb21lIHByb2Nlc3NlcyBuZWVkIGRlZGljYXRl ZCBpbnRlcnJ1cHRzIGZvciB2YXJpb3VzIHB1cnBvc2VzLiAgSWdub3JlZAorICogYnkgb3Ro ZXIgcHJvY2Vzc2VzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBhc2sgd2Fsc2VuZGVy cyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAgKi8KKyNkZWZpbmUgSU5URVJSVVBUX1dBTFNO RF9JTklUX1NUT1BQSU5HCQkJVUlOVDY0X0JJVCgxNikKKworLyogVE9ETzogZG9jdW1lbnQg dGhlIGRpZmZlcmVuY2Ugd2l0aCBJTlRFUlJVUFRfV0FMU05EX0lOSVRfU1RPUFBJTkcgKi8K KyNkZWZpbmUgSU5URVJSVVBUX1dBTFNORF9TVE9QCQkJCQlVSU5UNjRfQklUKDE3KQorCisv KgorICogSU5URVJSVVBUX1dBTF9BUlJJVkVEIGlzIHVzZWQgdG8gd2FrZSB1cCB0aGUgc3Rh cnR1cCBwcm9jZXNzLCB0byB0ZWxsCisgKiBpdCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBX QUwgcmVwbGF5LiBJdCdzIHNlbnQgYnkgV0FMIHJlY2VpdmVyIHdoZW4KKyAqIG1vcmUgV0FM IGFycml2ZXMsIG9yIHdoZW4gcHJvbW90aW9uIGlzIHJlcXVlc3RlZC4KKyAqLworI2RlZmlu ZSBJTlRFUlJVUFRfV0FMX0FSUklWRUQJCQkJCVVJTlQ2NF9CSVQoMTgpCisKKy8qIFdha2Ug dXAgc3RhcnR1cCBwcm9jZXNzIHRvIGNoZWNrIGZvciB0aGUgcHJvbW90aW9uIHNpZ25hbCBm aWxlICovCisjZGVmaW5lIElOVEVSUlVQVF9DSEVDS19QUk9NT1RFCQkJCQlVSU5UNjRfQklU KDE5KQorCisvKiBzZW50IHRvIGxvZ2ljYWwgcmVwbGljYXRpb24gbGF1bmNoZXIsIHdoZW4g YSBzdWJzY3JpcHRpb24gY2hhbmdlcyAqLworI2RlZmluZSBJTlRFUlJVUFRfU1VCU0NSSVBU SU9OX0NIQU5HRQkJCVVJTlQ2NF9CSVQoMjApCisKKy8qIEdyYWNlZnVsIHNodXRkb3duIHJl cXVlc3QgZm9yIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyICovCisjZGVmaW5lIElOVEVSUlVQ VF9TSFVURE9XTl9QQVJBTExFTF9BUFBMWV9XT1JLRVIgVUlOVDY0X0JJVCgyMSkKKworLyog UmVxdWVzdCBjaGVja3BvaW50ZXIgdG8gcGVyZm9ybSBvbmUgbGFzdCBjaGVja3BvaW50LCB0 aGVuIHNodXQgZG93bi4gKi8KKyNkZWZpbmUgSU5URVJSVVBUX1NIVVRET1dOX1hMT0cJCQkJ CVVJTlQ2NF9CSVQoMjIpCisKKyNkZWZpbmUgSU5URVJSVVBUX1NIVVRET1dOX1BHQVJDSAkJ CQlVSU5UNjRfQklUKDIzKQorCisvKgorICogVGhpcyBpcyBzZW50IHRvIHRoZSBhdXRvdmFj dXVtIGxhdW5jaGVyIHdoZW4gYW4gYXV0b3ZhY3V1bSB3b3JrZXIgZXhpdHMKKyAqLworI2Rl ZmluZSBJTlRFUlJVUFRfQVVUT1ZBQ1VVTV9XT1JLRVJfRklOSVNIRUQgCVVJTlQ2NF9CSVQo MjQpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbmQgb2YgYnVpbHQtaW4gaW50ZXJy dXB0IGJpdHMKKyAqCisgKiBUaGUgcmVtYWluaW5nIGJpdHMgYXJlIGhhbmRlZCBvdXQgYnkg UmVxdWVzdEFkZGluSW50ZXJydXB0LCBmb3IKKyAqIGV4dGVuc2lvbnMKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKyNkZWZpbmUgQkVHSU5fQURESU5fSU5URVJSVVBUUyAyNQorI2RlZmluZSBF TkRfQURESU5fSU5URVJSVVBUUyA2NAorCisKKy8qIGZvciBleHRlbnNpb25zICovCitleHRl cm4gSW50ZXJydXB0TWFzayBSZXF1ZXN0QWRkaW5JbnRlcnJ1cHQodm9pZCk7CisKKy8qIFN0 YW5kYXJkIGludGVycnVwdCBoYW5kbGVycy4gRGVmaW5lZCBpbiB0Y29wL3Bvc3RncmVzLmMg Ki8KK2V4dGVybiB2b2lkIFNldFN0YW5kYXJkSW50ZXJydXB0SGFuZGxlcnModm9pZCk7CisK K2V4dGVybiB2b2lkIFByb2Nlc3NRdWVyeUNhbmNlbEludGVycnVwdCh2b2lkKTsKK2V4dGVy biB2b2lkIFByb2Nlc3NUZXJtaW5hdGVJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQ cm9jZXNzQ29uZmlnUmVsb2FkSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vz c0FzeW5jTm90aWZ5SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0lkbGVT dGF0c1RpbWVvdXRJbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzUmVjb3Zl cnlDb25mbGljdEludGVycnVwdHModm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzVHJhbnNh Y3Rpb25UaW1lb3V0SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0lkbGVT ZXNzaW9uVGltZW91dEludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NJZGxl SW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZv aWQgUHJvY2Vzc0NsaWVudENoZWNrVGltZW91dEludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2 b2lkIFByb2Nlc3NDbGllbnRDb25uZWN0aW9uTG9zdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQg UHJvY2Vzc0F1eFByb2Nlc3NTaHV0ZG93bkludGVycnVwdCh2b2lkKTsKKworCisjZW5kaWYJ CQkJCQkJLyogSVBDX1NUQU5EQVJEX0lOVEVSUlVQVFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaApp bmRleCAxY2E0YzcwNzE1Yy4uMjU5MDAwNjI3MGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC0y NTUsNyArMjU1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdQUk9DCiAJaW50CQkJZGVsYXlDaGtw dEZsYWdzOwkvKiBmb3IgREVMQVlfQ0hLUFRfKiBmbGFncyAqLwogCiAJLyogQml0IG1hc2sg b2YgcGVuZGluZyBpbnRlcnJ1cHRzLCB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCAqLwotCXBn X2F0b21pY191aW50NjQgcGVuZGluZ0ludGVycnVwdHM7CisJUGVuZGluZ0ludGVycnVwdHMg cGVuZGluZ0ludGVycnVwdHM7CiAKICNpZmRlZiBXSU4zMgogCS8qIEV2ZW50IGhhbmRsZSB0 byB3YWtlIHVwIHRoZSBwcm9jZXNzIHdoZW4gc2VuZGluZyBhbiBpbnRlcnJ1cHQgKi8KZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOGEzNTQzY2NiODcuLjI1OWVhMTU1YjAz IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjE4NSw2ICsyMTg1LDcgQEAg UGF0dGVybkluZm9BcnJheQogUGF0dGVybl9QcmVmaXhfU3RhdHVzCiBQYXR0ZXJuX1R5cGUK IFBlbmRpbmdGc3luY0VudHJ5CitQZW5kaW5nSW50ZXJydXB0cwogUGVuZGluZ0xpc3RlbkFj dGlvbgogUGVuZGluZ0xpc3RlbkVudHJ5CiBQZW5kaW5nUmVsRGVsZXRlCi0tIAoyLjQ3LjMK Cg== --------------q01luzhinYR3hIjKSuMMW8ZM--