From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 38895C432C3 for ; Thu, 14 Nov 2019 23:56:45 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0A42D206E5 for ; Thu, 14 Nov 2019 23:56:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0A42D206E5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=Intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 512996F37C; Thu, 14 Nov 2019 23:56:44 +0000 (UTC) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id BD3E56F37C for ; Thu, 14 Nov 2019 23:56:42 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Nov 2019 15:56:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,306,1569308400"; d="scan'208";a="203223076" Received: from johnharr-mobl3.ger.corp.intel.com (HELO [10.251.23.29]) ([10.251.23.29]) by fmsmga008.fm.intel.com with ESMTP; 14 Nov 2019 15:56:41 -0800 To: Daniele Ceraolo Spurio , intel-gfx@lists.freedesktop.org References: <20191106222550.20752-1-daniele.ceraolospurio@intel.com> <20191106222550.20752-4-daniele.ceraolospurio@intel.com> From: John Harrison Message-ID: <9f8e7012-c165-364e-ea26-57aae203a77c@Intel.com> Date: Thu, 14 Nov 2019 15:56:41 -0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 MIME-Version: 1.0 In-Reply-To: <20191106222550.20752-4-daniele.ceraolospurio@intel.com> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 3/4] drm/i915/guc: kill doorbell code and selftests X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191114235641.PD0kB47c6KgDQgUYpPi-_yGSW5y1g8qKEiE3rpm1Ch0@z> T24gMTEvNi8yMDE5IDE0OjI1LCBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIHdyb3RlOgo+IEluc3Rl YWQgb2YgcmVseWluZyBvbiB0aGUgd29ya3F1ZXVlLCB0aGUgdXBjb21pbmcgcmV3b3JrZWQgR3VD Cj4gc3VibWlzc2lvbiBmbG93IHdpbGwgb2ZmZXIgdGhlIGhvc3QgZHJpdmVyIGluZGlwZW5kZW50 IGNvbnRyb2wgb3ZlcgppbmRlcGVuZGVudAoKPiB0aGUgZXhlY3V0aW9uIHN0YXR1cyBvZiBlYWNo IGNvbnRleHQgc3VibWl0dGVkIHRvIEd1Qy4gQXMgcGFydCBvZiB0aGlzLAo+IHRoZSBkb29yYmVs bCB1c2FnZSBtb2RlbCBoYXMgYmVlbiByZXdvcmtlZCwgd2l0aCBlYWNoIGRvb3JiZWxsIGJlaW5n Cj4gcGFpcmVkIHRvIGEgc2luZ2xlIGxyYyBhbmQgYSBkb29yYmVsbCByaW5nIHJlcHJlc2VudGlu ZyBuZXcgd29yawo+IGF2YWlsYWJsZSBmb3IgdGhhdCBzcGVjaWZpYyBjb250ZXh0LiBUaGlzIG1l Y2hhbmlzbSwgaG93ZXZlciwgbGltaXRzCj4gdGhlIG51bWJlciBvZiBjb250ZXh0cyB0aGF0IGNh biBiZSByZWdpc3RlcmVkIHdpdGggR3VDIHRvIHRoZSBudW1iZXIgb2YKPiBkb29yYmVsbHMsIHdo aWNoIGlzIGFuIHVuZGVzaXJlZCBsaW1pdGF0aW9uLiBMdWNraWx5LCBHdUMgd2lsbCBhbHNvCk5v dCBleGFjdGx5ICdsdWNraWx5Jy4gTW9yZSBhIGNhc2Ugb2YsIHdlIHNhaWQgdGhlIGRvb3JiZWxs cyB3b24ndCB3b3JrIApmb3IgbGludXggc28gY2FuIHdlIGhhdmUgYSBIMkcgaW5zdGVhZCBhbmQg dGhleSBsaXN0ZW5lZC4KCj4gcHJvdmlkZSBhIEgyRyB0aGF0IHdpbGwgYWxsb3cgdGhlIGhvc3Qg dG8gbm90aWZ5IHRoZSBHdUMgb2Ygd29yawo+IGF2YWlsYWJsZSBmb3IgYSBzcGVjaWZpZWQgbHJj LCBzbyB3ZSBjYW4gdXNlIHRoYXQgbWVjaGFuaXNtIGluc3RlYWQgb2YKPiByZWx5aW5nIG9uIHRo ZSBkb29yYmVsbHMuIFdlIGNhbiB0aGVyZWZvcmUgZHJvcCB0aGUgZG9vcmJlbGwgY29kZSB3ZQo+ IGN1cnJlbnRseSBoYXZlLCBhbHNvIGdpdmVuIHRoZSBmYWN0IHRoYXQgaW4gdGhlIHVubGlrZWx5 IGNhc2Ugd2UnZCB3YW50Cj4gdG8gc3dpdGNoIGJhY2sgdG8gdXNpbmcgZG9vcmJlbGxzIHdlJ2Qg aGF2ZSB0byBoZWF2aWx5IHJld29yayBpdC4KPiBUaGUgd29ya3F1ZXVlIHdpbGwgc3RpbGwgaGF2 ZSBhIHVzZSBpbiB0aGUgbmV3IGludGVyZmFjZSB0byBwYXNzIHNwZWNpYWwKPiBjb21tYW5kcywg c28gdGhhdCBjb2RlIGhhcyBiZWVuIHJldGFpbmVkIGZvciBub3cuCj4KPiBXaXRoIHRoZSBkb29y YmVsbHMgZ29uZSBhbmQgdGhlIEd1QyBjbGllbnQgYmVjb21pbmcgZXZlbiBzaW1wbGVyLCB0aGUK PiBleGlzdGluZyBHdUMgc2VsZnRlc3RzIGRvbid0IGdpdmUgdXMgYW55IG1lYW5pbmdmdWwgY292 ZXJhZ2Ugc28gd2UgY2FuCj4gcmVtb3ZlIHRoZW0gYXMgd2VsbC4gU29tZSBzZWxmdGVzdHMgbWln aHQgY29tZSB3aXRoIHRoZSBuZXcgY29kZSwgYnV0Cj4gdGhleSB3aWxsIGxvb2sgZGlmZmVyZW50 IGZyb20gd2hhdCB3ZSBoYXZlIG5vdyBzbyBpZiBkb2Vzbid0IHNlZW0gd29ydGgKPiBpdCB0byBr ZWVwIHRoZSBmaWxlIGFyb3VuZCBpbiB0aGUgbWVhbnRpbWUuCj4KPiBTaWduZWQtb2ZmLWJ5OiBE YW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgo+ IENjOiBNaWNoYWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4KPiBDYzog Sm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPiBDYzogTWF0dGhldyBC cm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWMuaCAgICAgICAgfCAgIDggKy0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3VjL2ludGVsX2d1Y19md2lmLmggICB8ICAgMiArLQo+ICAgLi4uL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIHwgMzczICsrLS0tLS0tLS0tLS0tLS0t LQo+ICAgLi4uL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5oIHwgICA5 ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5jICAgICAgICAgfCAg IDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL3NlbGZ0ZXN0X2d1Yy5jICAgICB8 IDI5OSAtLS0tLS0tLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMgICAgICAgICAgIHwgIDExICstCj4gICAuLi4vZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2 ZV9zZWxmdGVzdHMuaCAgfCAgIDEgLQo+ICAgOCBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25z KCspLCA2NjggZGVsZXRpb25zKC0pCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvdWMvc2VsZnRlc3RfZ3VjLmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3Vj L2ludGVsX2d1Yy5oCj4gaW5kZXggYmY0MzhmODIwYzM1Li5iMmQxNzY2ZTY4OWEgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmgKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuaAo+IEBAIC0yMCw4ICsyMCw4IEBAIHN0 cnVjdCBfX2d1Y19hZHNfYmxvYjsKPiAgIAo+ICAgLyoKPiAgICAqIFRvcCBsZXZlbCBzdHJ1Y3R1 cmUgb2YgR3VDLiBJdCBoYW5kbGVzIGZpcm13YXJlIGxvYWRpbmcgYW5kIG1hbmFnZXMgY2xpZW50 Cj4gLSAqIHBvb2wgYW5kIGRvb3JiZWxscy4gaW50ZWxfZ3VjIG93bnMgYSBpbnRlbF9ndWNfY2xp ZW50IHRvIHJlcGxhY2UgdGhlIGxlZ2FjeQo+IC0gKiBFeGVjTGlzdCBzdWJtaXNzaW9uLgo+ICsg KiBwb29sLiBpbnRlbF9ndWMgb3ducyBhIGludGVsX2d1Y19jbGllbnQgdG8gcmVwbGFjZSB0aGUg bGVnYWN5IEV4ZWNMaXN0Cj4gKyAqIHN1Ym1pc3Npb24uCj4gICAgKi8KPiAgIHN0cnVjdCBpbnRl bF9ndWMgewo+ICAgCXN0cnVjdCBpbnRlbF91Y19mdyBmdzsKPiBAQCAtNTAsMTAgKzUwLDYgQEAg c3RydWN0IGludGVsX2d1YyB7Cj4gICAKPiAgIAlzdHJ1Y3QgaW50ZWxfZ3VjX2NsaWVudCAqZXhl Y2J1Zl9jbGllbnQ7Cj4gICAKPiAtCURFQ0xBUkVfQklUTUFQKGRvb3JiZWxsX2JpdG1hcCwgR1VD X05VTV9ET09SQkVMTFMpOwo+IC0JLyogQ3ljbGljIGNvdW50ZXIgbW9kIHBhZ2VzaXplCSovCj4g LQl1MzIgZGJfY2FjaGVsaW5lOwo+IC0KPiAgIAkvKiBDb250cm9sIHBhcmFtcyBmb3IgZncgaW5p dGlhbGl6YXRpb24gKi8KPiAgIAl1MzIgcGFyYW1zW0dVQ19DVExfTUFYX0RXT1JEU107Cj4gICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Z3aWYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19md2lmLmgKPiBpbmRleCBh MjZhODVkNTAyMDkuLjFlOGU0YWY3ZDljYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWNfZndpZi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvdWMvaW50ZWxfZ3VjX2Z3aWYuaAo+IEBAIC0zMSw3ICszMSw3IEBACj4gICAKPiAgICNkZWZp bmUgR1VDX0RPT1JCRUxMX0lOVkFMSUQJCTI1Ngo+ICAgCj4gLSNkZWZpbmUgR1VDX0RCX1NJWkUJ CQkoUEFHRV9TSVpFKQo+ICsjZGVmaW5lIEdVQ19QRF9TSVpFCQkJKFBBR0VfU0laRSkKPiAgICNk ZWZpbmUgR1VDX1dRX1NJWkUJCQkoUEFHRV9TSVpFICogMikKPiAgIAo+ICAgLyogV29yayBxdWV1 ZSBpdGVtIGhlYWRlciBkZWZpbml0aW9ucyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+IGluZGV4IDZhYzIxM2RkYmZhMy4uMDA4 OGMzNDE3NjQxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2d1Y19zdWJtaXNzaW9uLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWNfc3VibWlzc2lvbi5jCj4gQEAgLTMwLDggKzMwLDggQEAKPiAgICAqIEd1QyBjbGllbnQ6 Cj4gICAgKiBBIGludGVsX2d1Y19jbGllbnQgcmVmZXJzIHRvIGEgc3VibWlzc2lvbiBwYXRoIHRo cm91Z2ggR3VDLiBDdXJyZW50bHksIHRoZXJlCj4gICAgKiBpcyBvbmx5IG9uZSBjbGllbnQsIHdo aWNoIGlzIGNoYXJnZWQgd2l0aCBhbGwgc3VibWlzc2lvbnMgdG8gdGhlIEd1Qy4gVGhpcwo+IC0g KiBzdHJ1Y3QgaXMgdGhlIG93bmVyIG9mIGEgZG9vcmJlbGwsIGEgcHJvY2VzcyBkZXNjcmlwdG9y IGFuZCBhIHdvcmtxdWV1ZSAoYWxsCj4gLSAqIG9mIHRoZW0gaW5zaWRlIGEgc2luZ2xlIGdlbSBv YmplY3QgdGhhdCBjb250YWlucyBhbGwgcmVxdWlyZWQgcGFnZXMgZm9yIHRoZXNlCj4gKyAqIHN0 cnVjdCBpcyB0aGUgb3duZXIgb2YgYSBwcm9jZXNzIGRlc2NyaXB0b3IgYW5kIGEgd29ya3F1ZXVl IChib3RoIG9mIHRoZW0KPiArICogaW5zaWRlIGEgc2luZ2xlIGdlbSBvYmplY3QgdGhhdCBjb250 YWlucyBhbGwgcmVxdWlyZWQgcGFnZXMgZm9yIHRoZXNlCj4gICAgKiBlbGVtZW50cykuCj4gICAg Kgo+ICAgICogR3VDIHN0YWdlIGRlc2NyaXB0b3I6Cj4gQEAgLTM5LDEzICszOSwxMyBAQAo+ICAg ICogZGVzY3JpcHRvcnMsIGFuZCBzaGFyZXMgdGhlbSB3aXRoIHRoZSBHdUMuCj4gICAgKiBDdXJy ZW50bHksIHRoZXJlIGV4aXN0cyBhIDE6MSBtYXBwaW5nIGJldHdlZW4gYSBpbnRlbF9ndWNfY2xp ZW50IGFuZCBhCj4gICAgKiBndWNfc3RhZ2VfZGVzYyAodmlhIHRoZSBjbGllbnQncyBzdGFnZV9p ZCksIHNvIGVmZmVjdGl2ZWx5IG9ubHkgb25lCj4gLSAqIGdldHMgdXNlZC4gVGhpcyBzdGFnZSBk ZXNjcmlwdG9yIGxldHMgdGhlIEd1QyBrbm93IGFib3V0IHRoZSBkb29yYmVsbCwKPiAtICogd29y a3F1ZXVlIGFuZCBwcm9jZXNzIGRlc2NyaXB0b3IuIFRoZW9yZXRpY2FsbHksIGl0IGFsc28gbGV0 cyB0aGUgR3VDCj4gLSAqIGtub3cgYWJvdXQgb3VyIEhXIGNvbnRleHRzIChjb250ZXh0IElELCBl dGMuLi4pLCBidXQgd2UgYWN0dWFsbHkKPiAtICogZW1wbG95IGEga2luZCBvZiBzdWJtaXNzaW9u IHdoZXJlIHRoZSBHdUMgdXNlcyB0aGUgTFJDQSBzZW50IHZpYSB0aGUgd29yawo+IC0gKiBpdGVt IGluc3RlYWQgKHRoZSBzaW5nbGUgZ3VjX3N0YWdlX2Rlc2MgYXNzb2NpYXRlZCB0byBleGVjYnVm IGNsaWVudAo+IC0gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVmYXVsdCBrZXJu ZWwgY29udGV4dCBvbmx5LCBidXQgdGhpcyBpcwo+IC0gKiBlc3NlbnRpYWxseSB1bnVzZWQpLiBU aGlzIGlzIGNhbGxlZCBhICJwcm94eSIgc3VibWlzc2lvbi4KPiArICogZ2V0cyB1c2VkLiBUaGlz IHN0YWdlIGRlc2NyaXB0b3IgbGV0cyB0aGUgR3VDIGtub3cgYWJvdXQgdGhlIHdvcmtxdWV1ZSBh bmQKPiArICogcHJvY2VzcyBkZXNjcmlwdG9yLiBUaGVvcmV0aWNhbGx5LCBpdCBhbHNvIGxldHMg dGhlIEd1QyBrbm93IGFib3V0IG91ciBIVwo+ICsgKiBjb250ZXh0cyAoY29udGV4dCBJRCwgZXRj Li4uKSwgYnV0IHdlIGFjdHVhbGx5IGVtcGxveSBhIGtpbmQgb2Ygc3VibWlzc2lvbgo+ICsgKiB3 aGVyZSB0aGUgR3VDIHVzZXMgdGhlIExSQ0Egc2VudCB2aWEgdGhlIHdvcmsgaXRlbSBpbnN0ZWFk ICh0aGUgc2luZ2xlCj4gKyAqIGd1Y19zdGFnZV9kZXNjIGFzc29jaWF0ZWQgdG8gZXhlY2J1ZiBj bGllbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCj4gKyAqIGRlZmF1bHQga2VybmVs IGNvbnRleHQgb25seSwgYnV0IHRoaXMgaXMgZXNzZW50aWFsbHkgdW51c2VkKS4gVGhpcyBpcyBj YWxsZWQKPiArICogYSAicHJveHkiIHN1Ym1pc3Npb24uCj4gICAgKgo+ICAgICogVGhlIFNjcmF0 Y2ggcmVnaXN0ZXJzOgo+ICAgICogVGhlcmUgYXJlIDE2IE1NSU8tYmFzZWQgcmVnaXN0ZXJzIHN0 YXJ0IGZyb20gMHhDMTgwLiBUaGUga2VybmVsIGRyaXZlciB3cml0ZXMKPiBAQCAtNTYsMTAgKzU2 LDYgQEAKPiAgICAqIHRoZW4gcHJvY2VlZHMuCj4gICAgKiBTZWUgaW50ZWxfZ3VjX3NlbmQoKQo+ ICAgICoKPiAtICogRG9vcmJlbGxzOgo+IC0gKiBEb29yYmVsbHMgYXJlIGludGVycnVwdHMgdG8g dUtlcm5lbC4gQSBkb29yYmVsbCBpcyBhIHNpbmdsZSBjYWNoZSBsaW5lIChRVykKPiAtICogbWFw cGVkIGludG8gcHJvY2VzcyBzcGFjZS4KPiAtICoKPiAgICAqIFdvcmsgSXRlbXM6Cj4gICAgKiBU aGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiB3b3JrIGl0ZW1zIHRoYXQgdGhlIGhvc3QgbWF5IHBs YWNlIGludG8gYQo+ICAgICogd29ya3F1ZXVlLCBlYWNoIHdpdGggaXRzIG93biByZXF1aXJlbWVu dHMgYW5kIGxpbWl0YXRpb25zLiBDdXJyZW50bHkgb25seQo+IEBAIC04MSw3OCArNzcsNiBAQCBz dGF0aWMgaW5saW5lIGJvb2wgaXNfaGlnaF9wcmlvcml0eShzdHJ1Y3QgaW50ZWxfZ3VjX2NsaWVu dCAqY2xpZW50KQo+ICAgCQljbGllbnQtPnByaW9yaXR5ID09IEdVQ19DTElFTlRfUFJJT1JJVFlf SElHSCk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCByZXNlcnZlX2Rvb3JiZWxsKHN0cnVjdCBp bnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ IC0JdW5zaWduZWQgbG9uZyBlbmQ7Cj4gLQl1MTYgaWQ7Cj4gLQo+IC0JR0VNX0JVR19PTihjbGll bnQtPmRvb3JiZWxsX2lkICE9IEdVQ19ET09SQkVMTF9JTlZBTElEKTsKPiAtCj4gLQkvKgo+IC0J ICogVGhlIGJpdG1hcCB0cmFja3Mgd2hpY2ggZG9vcmJlbGwgcmVnaXN0ZXJzIGFyZSBjdXJyZW50 bHkgaW4gdXNlLgo+IC0JICogSXQgaXMgc3BsaXQgaW50byB0d28gaGFsdmVzOyB0aGUgZmlyc3Qg aGFsZiBpcyB1c2VkIGZvciBub3JtYWwKPiAtCSAqIHByaW9yaXR5IGNvbnRleHRzLCB0aGUgc2Vj b25kIGhhbGYgZm9yIGhpZ2gtcHJpb3JpdHkgb25lcy4KPiAtCSAqLwo+IC0Jb2Zmc2V0ID0gMDsK PiAtCWVuZCA9IEdVQ19OVU1fRE9PUkJFTExTIC8gMjsKPiAtCWlmIChpc19oaWdoX3ByaW9yaXR5 KGNsaWVudCkpIHsKPiAtCQlvZmZzZXQgPSBlbmQ7Cj4gLQkJZW5kICs9IG9mZnNldDsKPiAtCX0K PiAtCj4gLQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChjbGllbnQtPmd1Yy0+ZG9vcmJlbGxfYml0 bWFwLCBlbmQsIG9mZnNldCk7Cj4gLQlpZiAoaWQgPT0gZW5kKQo+IC0JCXJldHVybiAtRU5PU1BD Owo+IC0KPiAtCV9fc2V0X2JpdChpZCwgY2xpZW50LT5ndWMtPmRvb3JiZWxsX2JpdG1hcCk7Cj4g LQljbGllbnQtPmRvb3JiZWxsX2lkID0gaWQ7Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJjbGllbnQg JXUgKGhpZ2ggcHJpbz0lcykgcmVzZXJ2ZWQgZG9vcmJlbGw6ICVkXG4iLAo+IC0JCQkgY2xpZW50 LT5zdGFnZV9pZCwgeWVzbm8oaXNfaGlnaF9wcmlvcml0eShjbGllbnQpKSwKPiAtCQkJIGlkKTsK PiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBoYXNfZG9vcmJlbGwoc3RydWN0 IGludGVsX2d1Y19jbGllbnQgKmNsaWVudCkKPiAtewo+IC0JaWYgKGNsaWVudC0+ZG9vcmJlbGxf aWQgPT0gR1VDX0RPT1JCRUxMX0lOVkFMSUQpCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0KPiAtCXJl dHVybiB0ZXN0X2JpdChjbGllbnQtPmRvb3JiZWxsX2lkLCBjbGllbnQtPmd1Yy0+ZG9vcmJlbGxf Yml0bWFwKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgdW5yZXNlcnZlX2Rvb3JiZWxsKHN0cnVj dCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4gLXsKPiAtCUdFTV9CVUdfT04oIWhhc19kb29y YmVsbChjbGllbnQpKTsKPiAtCj4gLQlfX2NsZWFyX2JpdChjbGllbnQtPmRvb3JiZWxsX2lkLCBj bGllbnQtPmd1Yy0+ZG9vcmJlbGxfYml0bWFwKTsKPiAtCWNsaWVudC0+ZG9vcmJlbGxfaWQgPSBH VUNfRE9PUkJFTExfSU5WQUxJRDsKPiAtfQo+IC0KPiAtLyoKPiAtICogVGVsbCB0aGUgR3VDIHRv IGFsbG9jYXRlIG9yIGRlYWxsb2NhdGUgYSBzcGVjaWZpYyBkb29yYmVsbAo+IC0gKi8KPiAtCj4g LXN0YXRpYyBpbnQgX19ndWNfYWxsb2NhdGVfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3Vj LCB1MzIgc3RhZ2VfaWQpCj4gLXsKPiAtCXUzMiBhY3Rpb25bXSA9IHsKPiAtCQlJTlRFTF9HVUNf QUNUSU9OX0FMTE9DQVRFX0RPT1JCRUxMLAo+IC0JCXN0YWdlX2lkCj4gLQl9Owo+IC0KPiAtCXJl dHVybiBpbnRlbF9ndWNfc2VuZChndWMsIGFjdGlvbiwgQVJSQVlfU0laRShhY3Rpb24pKTsKPiAt fQo+IC0KPiAtc3RhdGljIGludCBfX2d1Y19kZWFsbG9jYXRlX2Rvb3JiZWxsKHN0cnVjdCBpbnRl bF9ndWMgKmd1YywgdTMyIHN0YWdlX2lkKQo+IC17Cj4gLQl1MzIgYWN0aW9uW10gPSB7Cj4gLQkJ SU5URUxfR1VDX0FDVElPTl9ERUFMTE9DQVRFX0RPT1JCRUxMLAo+IC0JCXN0YWdlX2lkCj4gLQl9 Owo+IC0KPiAtCXJldHVybiBpbnRlbF9ndWNfc2VuZChndWMsIGFjdGlvbiwgQVJSQVlfU0laRShh Y3Rpb24pKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyBzdHJ1Y3QgZ3VjX3N0YWdlX2Rlc2MgKl9fZ2V0 X3N0YWdlX2Rlc2Moc3RydWN0IGludGVsX2d1Y19jbGllbnQgKmNsaWVudCkKPiAgIHsKPiAgIAlz dHJ1Y3QgZ3VjX3N0YWdlX2Rlc2MgKmJhc2UgPSBjbGllbnQtPmd1Yy0+c3RhZ2VfZGVzY19wb29s X3ZhZGRyOwo+IEBAIC0xNjAsMTE4ICs4NCwxMCBAQCBzdGF0aWMgc3RydWN0IGd1Y19zdGFnZV9k ZXNjICpfX2dldF9zdGFnZV9kZXNjKHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4g ICAJcmV0dXJuICZiYXNlW2NsaWVudC0+c3RhZ2VfaWRdOwo+ICAgfQo+ICAgCj4gLS8qCj4gLSAq IEluaXRpYWxpc2UsIHVwZGF0ZSwgb3IgY2xlYXIgZG9vcmJlbGwgZGF0YSBzaGFyZWQgd2l0aCB0 aGUgR3VDCj4gLSAqCj4gLSAqIFRoZXNlIGZ1bmN0aW9ucyBtb2RpZnkgc2hhcmVkIGRhdGEgYW5k IHNvIG5lZWQgYWNjZXNzIHRvIHRoZSBtYXBwZWQKPiAtICogY2xpZW50IG9iamVjdCB3aGljaCBj b250YWlucyB0aGUgcGFnZSBiZWluZyB1c2VkIGZvciB0aGUgZG9vcmJlbGwKPiAtICovCj4gLQo+ IC1zdGF0aWMgdm9pZCBfX3VwZGF0ZV9kb29yYmVsbF9kZXNjKHN0cnVjdCBpbnRlbF9ndWNfY2xp ZW50ICpjbGllbnQsIHUxNiBuZXdfaWQpCj4gLXsKPiAtCXN0cnVjdCBndWNfc3RhZ2VfZGVzYyAq ZGVzYzsKPiAtCj4gLQkvKiBVcGRhdGUgdGhlIEd1QydzIGlkZWEgb2YgdGhlIGRvb3JiZWxsIElE ICovCj4gLQlkZXNjID0gX19nZXRfc3RhZ2VfZGVzYyhjbGllbnQpOwo+IC0JZGVzYy0+ZGJfaWQg PSBuZXdfaWQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKl9f Z2V0X2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4gLXsKPiAtCXJl dHVybiBjbGllbnQtPnZhZGRyICsgY2xpZW50LT5kb29yYmVsbF9vZmZzZXQ7Cj4gLX0KPiAtCj4g LXN0YXRpYyBib29sIF9fZG9vcmJlbGxfdmFsaWQoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MTYg ZGJfaWQpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IGd1Y190b19ndChn dWMpLT51bmNvcmU7Cj4gLQo+IC0JR0VNX0JVR19PTihkYl9pZCA+PSBHVUNfTlVNX0RPT1JCRUxM Uyk7Cj4gLQlyZXR1cm4gaW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X0RSQlJFR0woZGJf aWQpKSAmIEdFTjhfRFJCX1ZBTElEOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX2luaXRfZG9v cmJlbGwoc3RydWN0IGludGVsX2d1Y19jbGllbnQgKmNsaWVudCkKPiAtewo+IC0Jc3RydWN0IGd1 Y19kb29yYmVsbF9pbmZvICpkb29yYmVsbDsKPiAtCj4gLQlkb29yYmVsbCA9IF9fZ2V0X2Rvb3Ji ZWxsKGNsaWVudCk7Cj4gLQlkb29yYmVsbC0+ZGJfc3RhdHVzID0gR1VDX0RPT1JCRUxMX0VOQUJM RUQ7Cj4gLQlkb29yYmVsbC0+Y29va2llID0gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX19m aW5pX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4gLXsKPiAtCXN0 cnVjdCBndWNfZG9vcmJlbGxfaW5mbyAqZG9vcmJlbGw7Cj4gLQl1MTYgZGJfaWQgPSBjbGllbnQt PmRvb3JiZWxsX2lkOwo+IC0KPiAtCWRvb3JiZWxsID0gX19nZXRfZG9vcmJlbGwoY2xpZW50KTsK PiAtCWRvb3JiZWxsLT5kYl9zdGF0dXMgPSBHVUNfRE9PUkJFTExfRElTQUJMRUQ7Cj4gLQo+IC0J LyogRG9vcmJlbGwgcmVsZWFzZSBmbG93IHJlcXVpcmVzIHRoYXQgd2Ugd2FpdCBmb3IgR0VOOF9E UkJfVkFMSUQgYml0Cj4gLQkgKiB0byBnbyB0byB6ZXJvIGFmdGVyIHVwZGF0aW5nIGRiX3N0YXR1 cyBiZWZvcmUgd2UgY2FsbCB0aGUgR3VDIHRvCj4gLQkgKiByZWxlYXNlIHRoZSBkb29yYmVsbAo+ IC0JICovCj4gLQlpZiAod2FpdF9mb3JfdXMoIV9fZG9vcmJlbGxfdmFsaWQoY2xpZW50LT5ndWMs IGRiX2lkKSwgMTApKQo+IC0JCVdBUk5fT05DRSh0cnVlLCAiRG9vcmJlbGwgbmV2ZXIgYmVjYW1l IGludmFsaWQgYWZ0ZXIgZGlzYWJsZVxuIik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgY3JlYXRl X2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4gLXsKPiAtCWludCBy ZXQ7Cj4gLQo+IC0JaWYgKFdBUk5fT04oIWhhc19kb29yYmVsbChjbGllbnQpKSkKPiAtCQlyZXR1 cm4gLUVOT0RFVjsgLyogaW50ZXJuYWwgc2V0dXAgZXJyb3IsIHNob3VsZCBuZXZlciBoYXBwZW4g Ki8KPiAtCj4gLQlfX3VwZGF0ZV9kb29yYmVsbF9kZXNjKGNsaWVudCwgY2xpZW50LT5kb29yYmVs bF9pZCk7Cj4gLQlfX2luaXRfZG9vcmJlbGwoY2xpZW50KTsKPiAtCj4gLQlyZXQgPSBfX2d1Y19h bGxvY2F0ZV9kb29yYmVsbChjbGllbnQtPmd1YywgY2xpZW50LT5zdGFnZV9pZCk7Cj4gLQlpZiAo cmV0KSB7Cj4gLQkJX19maW5pX2Rvb3JiZWxsKGNsaWVudCk7Cj4gLQkJX191cGRhdGVfZG9vcmJl bGxfZGVzYyhjbGllbnQsIEdVQ19ET09SQkVMTF9JTlZBTElEKTsKPiAtCQlEUk1fREVCVUdfRFJJ VkVSKCJDb3VsZG4ndCBjcmVhdGUgY2xpZW50ICV1IGRvb3JiZWxsOiAlZFxuIiwKPiAtCQkJCSBj bGllbnQtPnN0YWdlX2lkLCByZXQpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZGVzdHJveV9kb29yYmVsbChzdHJ1Y3QgaW50 ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+IC17Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCUdFTV9CVUdf T04oIWhhc19kb29yYmVsbChjbGllbnQpKTsKPiAtCj4gLQlfX2ZpbmlfZG9vcmJlbGwoY2xpZW50 KTsKPiAtCXJldCA9IF9fZ3VjX2RlYWxsb2NhdGVfZG9vcmJlbGwoY2xpZW50LT5ndWMsIGNsaWVu dC0+c3RhZ2VfaWQpOwo+IC0JaWYgKHJldCkKPiAtCQlEUk1fRVJST1IoIkNvdWxkbid0IGRlc3Ry b3kgY2xpZW50ICV1IGRvb3JiZWxsOiAlZFxuIiwKPiAtCQkJICBjbGllbnQtPnN0YWdlX2lkLCBy ZXQpOwo+IC0KPiAtCV9fdXBkYXRlX2Rvb3JiZWxsX2Rlc2MoY2xpZW50LCBHVUNfRE9PUkJFTExf SU5WQUxJRCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIHVuc2lnbmVk IGxvbmcgX19zZWxlY3RfY2FjaGVsaW5lKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPiAtewo+IC0J dW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4gLQo+IC0JLyogRG9vcmJlbGwgdXNlcyBhIHNpbmdsZSBj YWNoZSBsaW5lIHdpdGhpbiBhIHBhZ2UgKi8KPiAtCW9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGd1 Yy0+ZGJfY2FjaGVsaW5lKTsKPiAtCj4gLQkvKiBNb3ZpbmcgdG8gbmV4dCBjYWNoZSBsaW5lIHRv IHJlZHVjZSBjb250ZW50aW9uICovCj4gLQlndWMtPmRiX2NhY2hlbGluZSArPSBjYWNoZV9saW5l X3NpemUoKTsKPiAtCj4gLQlEUk1fREVCVUdfRFJJVkVSKCJyZXNlcnZlZCBjYWNoZWxpbmUgMHgl bHgsIG5leHQgMHgleCwgbGluZXNpemUgJXVcbiIsCj4gLQkJCSBvZmZzZXQsIGd1Yy0+ZGJfY2Fj aGVsaW5lLCBjYWNoZV9saW5lX3NpemUoKSk7Cj4gLQlyZXR1cm4gb2Zmc2V0Owo+IC19Cj4gLQo+ ICAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3VjX3Byb2Nlc3NfZGVzYyAqCj4gICBfX2dldF9wcm9j ZXNzX2Rlc2Moc3RydWN0IGludGVsX2d1Y19jbGllbnQgKmNsaWVudCkKPiAgIHsKPiAtCXJldHVy biBjbGllbnQtPnZhZGRyICsgY2xpZW50LT5wcm9jX2Rlc2Nfb2Zmc2V0Owo+ICsJcmV0dXJuIGNs aWVudC0+dmFkZHI7Cj4gICB9Cj4gICAKPiAgIC8qCj4gQEAgLTMzMiw4ICsxNDgsOCBAQCBzdGF0 aWMgdm9pZCBndWNfc3RhZ2VfZGVzY19wb29sX2Rlc3Ryb3koc3RydWN0IGludGVsX2d1YyAqZ3Vj KQo+ICAgICogSW5pdGlhbGlzZS9jbGVhciB0aGUgc3RhZ2UgZGVzY3JpcHRvciBzaGFyZWQgd2l0 aCB0aGUgR3VDIGZpcm13YXJlLgo+ICAgICoKPiAgICAqIFRoaXMgZGVzY3JpcHRvciB0ZWxscyB0 aGUgR3VDIHdoZXJlIChpbiBHR1RUIHNwYWNlKSB0byBmaW5kIHRoZSBpbXBvcnRhbnQKPiAtICog ZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0aW5nIHRvIHRoaXMgY2xpZW50IChkb29yYmVsbCwgcHJvY2Vz cyBkZXNjcmlwdG9yLAo+IC0gKiB3cml0ZSBxdWV1ZSwgZXRjKS4KPiArICogZGF0YSBzdHJ1Y3R1 cmVzIHJlbGF0aW5nIHRvIHRoaXMgY2xpZW50IChwcm9jZXNzIGRlc2NyaXB0b3IsIHdyaXRlIHF1 ZXVlLAo+ICsgKiBldGMpLgo+ICAgICovCj4gICBzdGF0aWMgdm9pZCBndWNfc3RhZ2VfZGVzY19p bml0KHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4gICB7Cj4gQEAgLTM1MCwxOSAr MTY2LDE0IEBAIHN0YXRpYyB2b2lkIGd1Y19zdGFnZV9kZXNjX2luaXQoc3RydWN0IGludGVsX2d1 Y19jbGllbnQgKmNsaWVudCkKPiAgIAkJZGVzYy0+YXR0cmlidXRlIHw9IEdVQ19TVEFHRV9ERVND X0FUVFJfUFJFRU1QVDsKPiAgIAlkZXNjLT5zdGFnZV9pZCA9IGNsaWVudC0+c3RhZ2VfaWQ7Cj4g ICAJZGVzYy0+cHJpb3JpdHkgPSBjbGllbnQtPnByaW9yaXR5Owo+IC0JZGVzYy0+ZGJfaWQgPSBj bGllbnQtPmRvb3JiZWxsX2lkOwo+ICAgCj4gICAJLyoKPiAtCSAqIFRoZSBkb29yYmVsbCwgcHJv Y2VzcyBkZXNjcmlwdG9yLCBhbmQgd29ya3F1ZXVlIGFyZSBhbGwgcGFydHMKPiAtCSAqIG9mIHRo ZSBjbGllbnQgb2JqZWN0LCB3aGljaCB0aGUgR3VDIHdpbGwgcmVmZXJlbmNlIHZpYSB0aGUgR0dU VAo+ICsJICogVGhlIHByb2Nlc3MgZGVzY3JpcHRvciBhbmQgd29ya3F1ZXVlIGFyZSBhbGwgcGFy dHMgb2YgdGhlIGNsaWVudAo+ICsJICogb2JqZWN0LCB3aGljaCB0aGUgR3VDIHdpbGwgcmVmZXJl bmNlIHZpYSB0aGUgR0dUVAo+ICAgCSAqLwo+ICAgCWdmeF9hZGRyID0gaW50ZWxfZ3VjX2dndHRf b2Zmc2V0KGd1YywgY2xpZW50LT52bWEpOwo+IC0JZGVzYy0+ZGJfdHJpZ2dlcl9waHkgPSBzZ19k bWFfYWRkcmVzcyhjbGllbnQtPnZtYS0+cGFnZXMtPnNnbCkgKwo+IC0JCQkJY2xpZW50LT5kb29y YmVsbF9vZmZzZXQ7Cj4gLQlkZXNjLT5kYl90cmlnZ2VyX2NwdSA9IHB0cl90b191NjQoX19nZXRf ZG9vcmJlbGwoY2xpZW50KSk7Cj4gLQlkZXNjLT5kYl90cmlnZ2VyX3VrID0gZ2Z4X2FkZHIgKyBj bGllbnQtPmRvb3JiZWxsX29mZnNldDsKPiAtCWRlc2MtPnByb2Nlc3NfZGVzYyA9IGdmeF9hZGRy ICsgY2xpZW50LT5wcm9jX2Rlc2Nfb2Zmc2V0Owo+IC0JZGVzYy0+d3FfYWRkciA9IGdmeF9hZGRy ICsgR1VDX0RCX1NJWkU7Cj4gKwlkZXNjLT5wcm9jZXNzX2Rlc2MgPSBnZnhfYWRkcjsKPiArCWRl c2MtPndxX2FkZHIgPSBnZnhfYWRkciArIEdVQ19QRF9TSVpFOwo+ICAgCWRlc2MtPndxX3NpemUg PSBHVUNfV1FfU0laRTsKPiAgIAo+ICAgCWRlc2MtPmRlc2NfcHJpdmF0ZSA9IHB0cl90b191NjQo Y2xpZW50KTsKPiBAQCAtNDA4LDQ4ICsyMTksMjMgQEAgc3RhdGljIHZvaWQgZ3VjX3dxX2l0ZW1f YXBwZW5kKHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQsCj4gICAJCQkgICAgICBHVUNf V1FfU0laRSkgPCB3cWlfc2l6ZSk7Cj4gICAJR0VNX0JVR19PTih3cV9vZmYgJiAod3FpX3NpemUg LSAxKSk7Cj4gICAKPiAtCS8qIFdRIHN0YXJ0cyBmcm9tIHRoZSBwYWdlIGFmdGVyIGRvb3JiZWxs IC8gcHJvY2Vzc19kZXNjICovCj4gLQl3cWkgPSBjbGllbnQtPnZhZGRyICsgd3Ffb2ZmICsgR1VD X0RCX1NJWkU7Cj4gLQo+IC0JaWYgKEk5MTVfU0VMRlRFU1RfT05MWShjbGllbnQtPnVzZV9ub3Bf d3FpKSkgewo+IC0JCXdxaS0+aGVhZGVyID0gV1FfVFlQRV9OT09QIHwgKHdxaV9sZW4gPDwgV1Ff TEVOX1NISUZUKTsKPiAtCX0gZWxzZSB7Cj4gLQkJLyogTm93IGZpbGwgaW4gdGhlIDQtd29yZCB3 b3JrIHF1ZXVlIGl0ZW0gKi8KPiAtCQl3cWktPmhlYWRlciA9IFdRX1RZUEVfSU5PUkRFUiB8Cj4g LQkJCSAgICAgICh3cWlfbGVuIDw8IFdRX0xFTl9TSElGVCkgfAo+IC0JCQkgICAgICAodGFyZ2V0 X2VuZ2luZSA8PCBXUV9UQVJHRVRfU0hJRlQpIHwKPiAtCQkJICAgICAgV1FfTk9fV0NGTFVTSF9X QUlUOwo+IC0JCXdxaS0+Y29udGV4dF9kZXNjID0gY29udGV4dF9kZXNjOwo+IC0JCXdxaS0+c3Vi bWl0X2VsZW1lbnRfaW5mbyA9IHJpbmdfdGFpbCA8PCBXUV9SSU5HX1RBSUxfU0hJRlQ7Cj4gLQkJ R0VNX0JVR19PTihyaW5nX3RhaWwgPiBXUV9SSU5HX1RBSUxfTUFYKTsKPiAtCQl3cWktPmZlbmNl X2lkID0gZmVuY2VfaWQ7Cj4gLQl9Cj4gKwkvKiBXUSBzdGFydHMgZnJvbSB0aGUgcGFnZSBhZnRl ciBwcm9jZXNzX2Rlc2MgKi8KPiArCXdxaSA9IGNsaWVudC0+dmFkZHIgKyB3cV9vZmYgKyBHVUNf UERfU0laRTsKPiArCj4gKwkvKiBOb3cgZmlsbCBpbiB0aGUgNC13b3JkIHdvcmsgcXVldWUgaXRl bSAqLwo+ICsJd3FpLT5oZWFkZXIgPSBXUV9UWVBFX0lOT1JERVIgfAo+ICsJCSAgICAgICh3cWlf bGVuIDw8IFdRX0xFTl9TSElGVCkgfAo+ICsJCSAgICAgICh0YXJnZXRfZW5naW5lIDw8IFdRX1RB UkdFVF9TSElGVCkgfAo+ICsJCSAgICAgIFdRX05PX1dDRkxVU0hfV0FJVDsKPiArCXdxaS0+Y29u dGV4dF9kZXNjID0gY29udGV4dF9kZXNjOwo+ICsJd3FpLT5zdWJtaXRfZWxlbWVudF9pbmZvID0g cmluZ190YWlsIDw8IFdRX1JJTkdfVEFJTF9TSElGVDsKPiArCUdFTV9CVUdfT04ocmluZ190YWls ID4gV1FfUklOR19UQUlMX01BWCk7Cj4gKwl3cWktPmZlbmNlX2lkID0gZmVuY2VfaWQ7Cj4gICAK PiAgIAkvKiBNYWtlIHRoZSB1cGRhdGUgdmlzaWJsZSB0byBHdUMgKi8KPiAgIAlXUklURV9PTkNF KGRlc2MtPnRhaWwsICh3cV9vZmYgKyB3cWlfc2l6ZSkgJiAoR1VDX1dRX1NJWkUgLSAxKSk7Cj4g ICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgZ3VjX3JpbmdfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1 Y19jbGllbnQgKmNsaWVudCkKPiAtewo+IC0Jc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkYjsK PiAtCXUzMiBjb29raWU7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmY2xpZW50LT53cV9s b2NrKTsKPiAtCj4gLQkvKiBwb2ludGVyIG9mIGN1cnJlbnQgZG9vcmJlbGwgY2FjaGVsaW5lICov Cj4gLQlkYiA9IF9fZ2V0X2Rvb3JiZWxsKGNsaWVudCk7Cj4gLQo+IC0JLyoKPiAtCSAqIFdlJ3Jl IG5vdCBleHBlY3RpbmcgdGhlIGRvb3JiZWxsIGNvb2tpZSB0byBjaGFuZ2UgYmVoaW5kIG91ciBi YWNrLAo+IC0JICogd2UgYWxzbyBuZWVkIHRvIHRyZWF0IDAgYXMgYSByZXNlcnZlZCB2YWx1ZS4K PiAtCSAqLwo+IC0JY29va2llID0gUkVBRF9PTkNFKGRiLT5jb29raWUpOwo+IC0JV0FSTl9PTl9P TkNFKHhjaGcoJmRiLT5jb29raWUsIGNvb2tpZSArIDEgPzogY29va2llICsgMikgIT0gY29va2ll KTsKPiAtCj4gLQkvKiBYWFg6IGRvb3JiZWxsIHdhcyBsb3N0IGFuZCBuZWVkIHRvIGFjcXVpcmUg aXQgYWdhaW4gKi8KPiAtCUdFTV9CVUdfT04oZGItPmRiX3N0YXR1cyAhPSBHVUNfRE9PUkJFTExf RU5BQkxFRCk7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdm9pZCBndWNfYWRkX3JlcXVlc3Qoc3RydWN0 IGludGVsX2d1YyAqZ3VjLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgIHsKPiAgIAlzdHJ1 Y3QgaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50ID0gZ3VjLT5leGVjYnVmX2NsaWVudDsKPiBAQCAt NDU5LDcgKzI0NSw2IEBAIHN0YXRpYyB2b2lkIGd1Y19hZGRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxf Z3VjICpndWMsIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAgCj4gICAJZ3VjX3dxX2l0ZW1f YXBwZW5kKGNsaWVudCwgZW5naW5lLT5ndWNfaWQsIGN0eF9kZXNjLAo+ICAgCQkJICAgcmluZ190 YWlsLCBycS0+ZmVuY2Uuc2Vxbm8pOwo+IC0JZ3VjX3JpbmdfZG9vcmJlbGwoY2xpZW50KTsKPiAg IH0KPiAgIAo+ICAgLyoKPiBAQCAtNzQ0LDM2ICs1MjksNiBAQCBzdGF0aWMgdm9pZCBndWNfcmVz ZXRfZmluaXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgICAqIHBhdGggb2Yg Z3VjX3N1Ym1pdCgpIGFib3ZlLgo+ICAgICovCj4gICAKPiAtLyogQ2hlY2sgdGhhdCBhIGRvb3Ji ZWxsIHJlZ2lzdGVyIGlzIGluIHRoZSBleHBlY3RlZCBzdGF0ZSAqLwo+IC1zdGF0aWMgYm9vbCBk b29yYmVsbF9vayhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUxNiBkYl9pZCkKPiAtewo+IC0JYm9v bCB2YWxpZDsKPiAtCj4gLQlHRU1fQlVHX09OKGRiX2lkID49IEdVQ19OVU1fRE9PUkJFTExTKTsK PiAtCj4gLQl2YWxpZCA9IF9fZG9vcmJlbGxfdmFsaWQoZ3VjLCBkYl9pZCk7Cj4gLQo+IC0JaWYg KHRlc3RfYml0KGRiX2lkLCBndWMtPmRvb3JiZWxsX2JpdG1hcCkgPT0gdmFsaWQpCj4gLQkJcmV0 dXJuIHRydWU7Cj4gLQo+IC0JRFJNX0RFQlVHX0RSSVZFUigiRG9vcmJlbGwgJXUgaGFzIHVuZXhw ZWN0ZWQgc3RhdGU6IHZhbGlkPSVzXG4iLAo+IC0JCQkgZGJfaWQsIHllc25vKHZhbGlkKSk7Cj4g LQo+IC0JcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBndWNfdmVyaWZ5X2Rv b3JiZWxscyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4gLXsKPiAtCWJvb2wgZG9vcmJlbGxzX29r ID0gdHJ1ZTsKPiAtCXUxNiBkYl9pZDsKPiAtCj4gLQlmb3IgKGRiX2lkID0gMDsgZGJfaWQgPCBH VUNfTlVNX0RPT1JCRUxMUzsgKytkYl9pZCkKPiAtCQlpZiAoIWRvb3JiZWxsX29rKGd1YywgZGJf aWQpKQo+IC0JCQlkb29yYmVsbHNfb2sgPSBmYWxzZTsKPiAtCj4gLQlyZXR1cm4gZG9vcmJlbGxz X29rOwo+IC19Cj4gLQo+ICAgLyoqCj4gICAgKiBndWNfY2xpZW50X2FsbG9jKCkgLSBBbGxvY2F0 ZSBhbiBpbnRlbF9ndWNfY2xpZW50Cj4gICAgKiBAZ3VjOgl0aGUgaW50ZWxfZ3VjIHN0cnVjdHVy ZQo+IEBAIC03OTgsNyArNTUzLDYgQEAgZ3VjX2NsaWVudF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMsIHUzMiBwcmlvcml0eSkKPiAgIAo+ICAgCWNsaWVudC0+Z3VjID0gZ3VjOwo+ICAgCWNs aWVudC0+cHJpb3JpdHkgPSBwcmlvcml0eTsKPiAtCWNsaWVudC0+ZG9vcmJlbGxfaWQgPSBHVUNf RE9PUkJFTExfSU5WQUxJRDsKPiAgIAlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT53cV9sb2NrKTsK PiAgIAo+ICAgCXJldCA9IGlkYV9zaW1wbGVfZ2V0KCZndWMtPnN0YWdlX2lkcywgMCwgR1VDX01B WF9TVEFHRV9ERVNDUklQVE9SUywKPiBAQCAtODA5LDcgKzU2Myw3IEBAIGd1Y19jbGllbnRfYWxs b2Moc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgcHJpb3JpdHkpCj4gICAJY2xpZW50LT5zdGFn ZV9pZCA9IHJldDsKPiAgIAo+ICAgCS8qIFRoZSBmaXJzdCBwYWdlIGlzIGRvb3JiZWxsL3Byb2Nf ZGVzYy4gVHdvIGZvbGxvd2VkIHBhZ2VzIGFyZSB3cS4gKi8KTmVlZCB0byB1cGRhdGUgdGhpcyBj b21tZW50IGFzIHdlbGwuCgo+IC0Jdm1hID0gaW50ZWxfZ3VjX2FsbG9jYXRlX3ZtYShndWMsIEdV Q19EQl9TSVpFICsgR1VDX1dRX1NJWkUpOwo+ICsJdm1hID0gaW50ZWxfZ3VjX2FsbG9jYXRlX3Zt YShndWMsIEdVQ19QRF9TSVpFICsgR1VDX1dRX1NJWkUpOwo+ICAgCWlmIChJU19FUlIodm1hKSkg ewo+ICAgCQlyZXQgPSBQVFJfRVJSKHZtYSk7Cj4gICAJCWdvdG8gZXJyX2lkOwo+IEBAIC04MjUs MzEgKzU3OSwxMSBAQCBndWNfY2xpZW50X2FsbG9jKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMy IHByaW9yaXR5KQo+ICAgCX0KPiAgIAljbGllbnQtPnZhZGRyID0gdmFkZHI7Cj4gICAKPiAtCXJl dCA9IHJlc2VydmVfZG9vcmJlbGwoY2xpZW50KTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBlcnJf dmFkZHI7Cj4gLQo+IC0JY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgPSBfX3NlbGVjdF9jYWNoZWxp bmUoZ3VjKTsKPiAtCj4gLQkvKgo+IC0JICogU2luY2UgdGhlIGRvb3JiZWxsIG9ubHkgcmVxdWly ZXMgYSBzaW5nbGUgY2FjaGVsaW5lLCB3ZSBjYW4gc2F2ZQo+IC0JICogc3BhY2UgYnkgcHV0dGlu ZyB0aGUgYXBwbGljYXRpb24gcHJvY2VzcyBkZXNjcmlwdG9yIGluIHRoZSBzYW1lCj4gLQkgKiBw YWdlLiBVc2UgdGhlIGhhbGYgb2YgdGhlIHBhZ2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUgdGhlIGRv b3JiZWxsLgo+IC0JICovCj4gLQlpZiAoY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgPj0gKEdVQ19E Ql9TSVpFIC8gMikpCj4gLQkJY2xpZW50LT5wcm9jX2Rlc2Nfb2Zmc2V0ID0gMDsKPiAtCWVsc2UK PiAtCQljbGllbnQtPnByb2NfZGVzY19vZmZzZXQgPSAoR1VDX0RCX1NJWkUgLyAyKTsKPiAtCj4g ICAJRFJNX0RFQlVHX0RSSVZFUigibmV3IHByaW9yaXR5ICV1IGNsaWVudCAlcDogc3RhZ2VfaWQg JXVcbiIsCj4gICAJCQkgcHJpb3JpdHksIGNsaWVudCwgY2xpZW50LT5zdGFnZV9pZCk7Cj4gLQlE Uk1fREVCVUdfRFJJVkVSKCJkb29yYmVsbCBpZCAldSwgY2FjaGVsaW5lIG9mZnNldCAweCVseFxu IiwKPiAtCQkJIGNsaWVudC0+ZG9vcmJlbGxfaWQsIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0KTsK PiAgIAo+ICAgCXJldHVybiBjbGllbnQ7Cj4gICAKPiAtZXJyX3ZhZGRyOgo+IC0JaTkxNV9nZW1f b2JqZWN0X3VucGluX21hcChjbGllbnQtPnZtYS0+b2JqKTsKPiAgIGVycl92bWE6Cj4gICAJaTkx NV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmNsaWVudC0+dm1hLCAwKTsKPiAgIGVycl9pZDoKPiBA QCAtODYxLDcgKzU5NSw2IEBAIGd1Y19jbGllbnRfYWxsb2Moc3RydWN0IGludGVsX2d1YyAqZ3Vj LCB1MzIgcHJpb3JpdHkpCj4gICAKPiAgIHN0YXRpYyB2b2lkIGd1Y19jbGllbnRfZnJlZShzdHJ1 Y3QgaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICAgewo+IC0JdW5yZXNlcnZlX2Rvb3JiZWxs KGNsaWVudCk7Cj4gICAJaTkxNV92bWFfdW5waW5fYW5kX3JlbGVhc2UoJmNsaWVudC0+dm1hLCBJ OTE1X1ZNQV9SRUxFQVNFX01BUCk7Cj4gICAJaWRhX3NpbXBsZV9yZW1vdmUoJmNsaWVudC0+Z3Vj LT5zdGFnZV9pZHMsIGNsaWVudC0+c3RhZ2VfaWQpOwo+ICAgCWtmcmVlKGNsaWVudCk7Cj4gQEAg LTg5Miw0NCArNjI1LDIxIEBAIHN0YXRpYyB2b2lkIGd1Y19jbGllbnRzX2Rlc3Ryb3koc3RydWN0 IGludGVsX2d1YyAqZ3VjKQo+ICAgCQlndWNfY2xpZW50X2ZyZWUoY2xpZW50KTsKPiAgIH0KPiAg IAo+IC1zdGF0aWMgaW50IF9fZ3VjX2NsaWVudF9lbmFibGUoc3RydWN0IGludGVsX2d1Y19jbGll bnQgKmNsaWVudCkKPiArc3RhdGljIHZvaWQgX19ndWNfY2xpZW50X2VuYWJsZShzdHJ1Y3QgaW50 ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICAgewo+IC0JaW50IHJldDsKPiAtCj4gICAJZ3VjX3By b2NfZGVzY19pbml0KGNsaWVudCk7Cj4gICAJZ3VjX3N0YWdlX2Rlc2NfaW5pdChjbGllbnQpOwo+ IC0KPiAtCXJldCA9IGNyZWF0ZV9kb29yYmVsbChjbGllbnQpOwo+IC0JaWYgKHJldCkKPiAtCQln b3RvIGZhaWw7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1mYWlsOgo+IC0JZ3VjX3N0YWdlX2Rl c2NfZmluaShjbGllbnQpOwo+IC0JZ3VjX3Byb2NfZGVzY19maW5pKGNsaWVudCk7Cj4gLQlyZXR1 cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9pZCBfX2d1Y19jbGllbnRfZGlzYWJsZShz dHJ1Y3QgaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICAgewo+IC0JLyoKPiAtCSAqIEJ5IHRo ZSB0aW1lIHdlJ3JlIGhlcmUsIEd1QyBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXQuIGlmIHRo YXQgaXMKPiAtCSAqIHRoZSBjYXNlLCBpbnN0ZWFkIG9mIHRyeWluZyAoaW4gdmFpbikgdG8gY29t bXVuaWNhdGUgd2l0aCBpdCwgbGV0J3MKPiAtCSAqIGp1c3QgY2xlYW51cCB0aGUgZG9vcmJlbGwg SFcgYW5kIG91ciBpbnRlcm5hbCBzdGF0ZS4KPiAtCSAqLwpUaGlzIGNvbW1lbnQgc2hvdWxkIGJl IGtlcHQsIG9ubHkgZHJvcHBpbmcgdGhlICdkb29yZWxsIEhXIGFuZCcgcGhyYXNlPwoKPiAtCWlm IChpbnRlbF9ndWNfaXNfcnVubmluZyhjbGllbnQtPmd1YykpCj4gLQkJZGVzdHJveV9kb29yYmVs bChjbGllbnQpOwo+IC0JZWxzZQo+IC0JCV9fZmluaV9kb29yYmVsbChjbGllbnQpOwo+IC0KPiAg IAlndWNfc3RhZ2VfZGVzY19maW5pKGNsaWVudCk7Cj4gICAJZ3VjX3Byb2NfZGVzY19maW5pKGNs aWVudCk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludCBndWNfY2xpZW50c19lbmFibGUoc3RydWN0 IGludGVsX2d1YyAqZ3VjKQo+ICtzdGF0aWMgdm9pZCBndWNfY2xpZW50c19lbmFibGUoc3RydWN0 IGludGVsX2d1YyAqZ3VjKQo+ICAgewo+IC0JcmV0dXJuIF9fZ3VjX2NsaWVudF9lbmFibGUoZ3Vj LT5leGVjYnVmX2NsaWVudCk7Cj4gKwlfX2d1Y19jbGllbnRfZW5hYmxlKGd1Yy0+ZXhlY2J1Zl9j bGllbnQpOwo+ICAgfQo+ICAgClRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSBwb2ludGxlc3Mgd3Jh cHBlci4gSSdtIGd1ZXNzaW5nIHRoZXJlIHdhcyBhIAptdXRleCBsb2NrIG9yIHNvbWV0aGluZyBp biBoZXJlIG9yaWdpbmFsbHk/IE1heWJlIHRpbWUgdG8gZHJvcCB0aGUgJ19fJyAKdmVyc2lvbiBh bmQganVzdCBtb3ZlIHRoZSBhY3R1YWwgd29yayBpbnRvIHRoaXMgZnVuY3Rpb24/CgpPdGhlcndp c2UsIGxvb2tzIGdvb2QgdG8gbWUuIFNvIHdpdGggc29tZSBjb3JyZWN0ZWQgY29tbWVudHM6ClJl dmlld2VkLWJ5OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgoKPiAg IHN0YXRpYyB2b2lkIGd1Y19jbGllbnRzX2Rpc2FibGUoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ IEBAIC05NTgsNyArNjY4LDYgQEAgaW50IGludGVsX2d1Y19zdWJtaXNzaW9uX2luaXQoc3RydWN0 IGludGVsX2d1YyAqZ3VjKQo+ICAgCSAqLwo+ICAgCUdFTV9CVUdfT04oIWd1Yy0+c3RhZ2VfZGVz Y19wb29sKTsKPiAgIAo+IC0JV0FSTl9PTighZ3VjX3ZlcmlmeV9kb29yYmVsbHMoZ3VjKSk7Cj4g ICAJcmV0ID0gZ3VjX2NsaWVudHNfY3JlYXRlKGd1Yyk7Cj4gICAJaWYgKHJldCkKPiAgIAkJZ290 byBlcnJfcG9vbDsKPiBAQCAtOTczLDcgKzY4Miw2IEBAIGludCBpbnRlbF9ndWNfc3VibWlzc2lv bl9pbml0KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPiAgIHZvaWQgaW50ZWxfZ3VjX3N1Ym1pc3Np b25fZmluaShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4gICB7Cj4gICAJZ3VjX2NsaWVudHNfZGVz dHJveShndWMpOwo+IC0JV0FSTl9PTighZ3VjX3ZlcmlmeV9kb29yYmVsbHMoZ3VjKSk7Cj4gICAK PiAgIAlpZiAoZ3VjLT5zdGFnZV9kZXNjX3Bvb2wpCj4gICAJCWd1Y19zdGFnZV9kZXNjX3Bvb2xf ZGVzdHJveShndWMpOwo+IEBAIC0xMDg5LDE2ICs3OTcsMTEgQEAgc3RhdGljIHZvaWQgZ3VjX3Nl dF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAg CUdFTV9CVUdfT04oZW5naW5lLT5pcnFfZW5hYmxlIHx8IGVuZ2luZS0+aXJxX2Rpc2FibGUpOwo+ ICAgfQo+ICAgCj4gLWludCBpbnRlbF9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGludGVs X2d1YyAqZ3VjKQo+ICt2b2lkIGludGVsX2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMpCj4gICB7Cj4gICAJc3RydWN0IGludGVsX2d0ICpndCA9IGd1Y190b19ndChn dWMpOwo+ICAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAgIAllbnVtIGludGVs X2VuZ2luZV9pZCBpZDsKPiAtCWludCBlcnI7Cj4gLQo+IC0JZXJyID0gaTkxNV9pbmplY3RfcHJv YmVfZXJyb3IoZ3QtPmk5MTUsIC1FTlhJTyk7Cj4gLQlpZiAoZXJyKQo+IC0JCXJldHVybiBlcnI7 Cj4gICAKPiAgIAkvKgo+ICAgCSAqIFdlJ3JlIHVzaW5nIEd1QyB3b3JrIGl0ZW1zIGZvciBzdWJt aXR0aW5nIHdvcmsgdGhyb3VnaCBHdUMuIFNpbmNlCj4gQEAgLTExMTUsOSArODE4LDcgQEAgaW50 IGludGVsX2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4gICAK PiAgIAlHRU1fQlVHX09OKCFndWMtPmV4ZWNidWZfY2xpZW50KTsKPiAgIAo+IC0JZXJyID0gZ3Vj X2NsaWVudHNfZW5hYmxlKGd1Yyk7Cj4gLQlpZiAoZXJyKQo+IC0JCXJldHVybiBlcnI7Cj4gKwln dWNfY2xpZW50c19lbmFibGUoZ3VjKTsKPiAgIAo+ICAgCS8qIFRha2Ugb3ZlciBmcm9tIG1hbnVh bCBjb250cm9sIG9mIEVMU1AgKGV4ZWNsaXN0cykgKi8KPiAgIAlndWNfaW50ZXJydXB0c19jYXB0 dXJlKGd0KTsKPiBAQCAtMTEyNiw4ICs4MjcsNiBAQCBpbnQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25f ZW5hYmxlKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPiAgIAkJZW5naW5lLT5zZXRfZGVmYXVsdF9z dWJtaXNzaW9uID0gZ3VjX3NldF9kZWZhdWx0X3N1Ym1pc3Npb247Cj4gICAJCWVuZ2luZS0+c2V0 X2RlZmF1bHRfc3VibWlzc2lvbihlbmdpbmUpOwo+ICAgCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAg IH0KPiAgIAo+ICAgdm9pZCBpbnRlbF9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBpbnRl bF9ndWMgKmd1YykKPiBAQCAtMTE1NSw3ICs4NTQsMyBAQCB2b2lkIGludGVsX2d1Y19zdWJtaXNz aW9uX2luaXRfZWFybHkoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICAgewo+ICAgCWd1Yy0+c3Vi bWlzc2lvbl9zdXBwb3J0ZWQgPSBfX2d1Y19zdWJtaXNzaW9uX3N1cHBvcnQoZ3VjKTsKPiAgIH0K PiAtCj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKPiAtI2luY2x1 ZGUgInNlbGZ0ZXN0X2d1Yy5jIgo+IC0jZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmgKPiBpbmRleCA1NGQ3MTY4MjgzNTIuLmUy ZGViNGU2ZjQyYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWNfc3VibWlzc2lvbi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfZ3VjX3N1Ym1pc3Npb24uaAo+IEBAIC00NCwyMSArNDQsMTQgQEAgc3RydWN0IGludGVsX2d1 Y19jbGllbnQgewo+ICAgCS8qIGJpdG1hcCBvZiAoaG9zdCkgZW5naW5lIGlkcyAqLwo+ICAgCXUz MiBwcmlvcml0eTsKPiAgIAl1MzIgc3RhZ2VfaWQ7Cj4gLQl1MzIgcHJvY19kZXNjX29mZnNldDsK PiAtCj4gLQl1MTYgZG9vcmJlbGxfaWQ7Cj4gLQl1bnNpZ25lZCBsb25nIGRvb3JiZWxsX29mZnNl dDsKPiAgIAo+ICAgCS8qIFByb3RlY3RzIEd1QyBjbGllbnQncyBXUSBhY2Nlc3MgKi8KPiAgIAlz cGlubG9ja190IHdxX2xvY2s7Cj4gLQo+IC0JLyogRm9yIHRlc3RpbmcgcHVycG9zZXMsIHVzZSBu b3AgV1EgaXRlbXMgaW5zdGVhZCBvZiByZWFsIG9uZXMgKi8KPiAtCUk5MTVfU0VMRlRFU1RfREVD TEFSRShib29sIHVzZV9ub3Bfd3FpKTsKPiAgIH07Cj4gICAKPiAgIHZvaWQgaW50ZWxfZ3VjX3N1 Ym1pc3Npb25faW5pdF9lYXJseShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwo+ICAgaW50IGludGVs X2d1Y19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKPiAtaW50IGludGVs X2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwo+ICt2b2lkIGlu dGVsX2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwo+ICAgdm9p ZCBpbnRlbF9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Cj4g ICB2b2lkIGludGVsX2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsK PiAgIGludCBpbnRlbF9ndWNfcHJlZW1wdF93b3JrX2NyZWF0ZShzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91Yy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfdWMuYwo+IGluZGV4IDYyOWIxOTM3 N2EyOS4uYzY1MTkwNjZhMGY2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L3VjL2ludGVsX3VjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF91 Yy5jCj4gQEAgLTQ4NiwxMSArNDg2LDggQEAgaW50IGludGVsX3VjX2luaXRfaHcoc3RydWN0IGlu dGVsX3VjICp1YykKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl9jb21tdW5pY2F0aW9uOwo+ ICAgCj4gLQlpZiAoaW50ZWxfdWNfc3VwcG9ydHNfZ3VjX3N1Ym1pc3Npb24odWMpKSB7Cj4gLQkJ cmV0ID0gaW50ZWxfZ3VjX3N1Ym1pc3Npb25fZW5hYmxlKGd1Yyk7Cj4gLQkJaWYgKHJldCkKPiAt CQkJZ290byBlcnJfY29tbXVuaWNhdGlvbjsKPiAtCX0KPiArCWlmIChpbnRlbF91Y19zdXBwb3J0 c19ndWNfc3VibWlzc2lvbih1YykpCj4gKwkJaW50ZWxfZ3VjX3N1Ym1pc3Npb25fZW5hYmxlKGd1 Yyk7Cj4gICAKPiAgIAlkZXZfaW5mbyhpOTE1LT5kcm0uZGV2LCAiJXMgZmlybXdhcmUgJXMgdmVy c2lvbiAldS4ldSAlczolc1xuIiwKPiAgIAkJIGludGVsX3VjX2Z3X3R5cGVfcmVwcihJTlRFTF9V Q19GV19UWVBFX0dVQyksIGd1Yy0+ZncucGF0aCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvdWMvc2VsZnRlc3RfZ3VjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91 Yy9zZWxmdGVzdF9ndWMuYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IGQ4YTgw Mzg4YmQzMS4uMDAwMDAwMDAwMDAwCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv c2VsZnRlc3RfZ3VjLmMKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMjk5ICswLDAgQEAKPiAtLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgwqkgMjAx NyBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJpOTE1X3NlbGZ0ZXN0 LmgiCj4gLSNpbmNsdWRlICJnZW0vaTkxNV9nZW1fcG0uaCIKPiAtCj4gLS8qIG1heCBkb29yYmVs bCBudW1iZXIgKyBuZWdhdGl2ZSB0ZXN0IGZvciBlYWNoIGNsaWVudCB0eXBlICovCj4gLSNkZWZp bmUgQVRURU1QVFMgKEdVQ19OVU1fRE9PUkJFTExTICsgR1VDX0NMSUVOVF9QUklPUklUWV9OVU0p Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGludGVsX2d1Y19jbGllbnQgKmNsaWVudHNbQVRURU1QVFNd Owo+IC0KPiAtc3RhdGljIGJvb2wgYXZhaWxhYmxlX2RicyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMs IHUzMiBwcmlvcml0eSkKPiAtewo+IC0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4gLQl1bnNpZ25l ZCBsb25nIGVuZDsKPiAtCXUxNiBpZDsKPiAtCj4gLQkvKiBmaXJzdCBoYWxmIGlzIHVzZWQgZm9y IG5vcm1hbCBwcmlvcml0eSwgc2Vjb25kIGhhbGYgZm9yIGhpZ2ggKi8KPiAtCW9mZnNldCA9IDA7 Cj4gLQllbmQgPSBHVUNfTlVNX0RPT1JCRUxMUyAvIDI7Cj4gLQlpZiAocHJpb3JpdHkgPD0gR1VD X0NMSUVOVF9QUklPUklUWV9ISUdIKSB7Cj4gLQkJb2Zmc2V0ID0gZW5kOwo+IC0JCWVuZCArPSBv ZmZzZXQ7Cj4gLQl9Cj4gLQo+IC0JaWQgPSBmaW5kX25leHRfemVyb19iaXQoZ3VjLT5kb29yYmVs bF9iaXRtYXAsIGVuZCwgb2Zmc2V0KTsKPiAtCWlmIChpZCA8IGVuZCkKPiAtCQlyZXR1cm4gdHJ1 ZTsKPiAtCj4gLQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgY2hlY2tfYWxs X2Rvb3JiZWxscyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4gLXsKPiAtCXUxNiBkYl9pZDsKPiAt Cj4gLQlwcl9pbmZvX29uY2UoIk1heCBudW1iZXIgb2YgZG9vcmJlbGxzOiAlZCIsIEdVQ19OVU1f RE9PUkJFTExTKTsKPiAtCWZvciAoZGJfaWQgPSAwOyBkYl9pZCA8IEdVQ19OVU1fRE9PUkJFTExT OyArK2RiX2lkKSB7Cj4gLQkJaWYgKCFkb29yYmVsbF9vayhndWMsIGRiX2lkKSkgewo+IC0JCQlw cl9lcnIoImRvb3JiZWxsICVkLCBub3Qgb2tcbiIsIGRiX2lkKTsKPiAtCQkJcmV0dXJuIC1FSU87 Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJp bmdfZG9vcmJlbGxfbm9wKHN0cnVjdCBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4gLXsKPiAt CXN0cnVjdCBndWNfcHJvY2Vzc19kZXNjICpkZXNjID0gX19nZXRfcHJvY2Vzc19kZXNjKGNsaWVu dCk7Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCWNsaWVudC0+dXNlX25vcF93cWkgPSB0cnVlOwo+IC0K PiAtCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+d3FfbG9jayk7Cj4gLQo+IC0JZ3VjX3dxX2l0ZW1f YXBwZW5kKGNsaWVudCwgMCwgMCwgMCwgMCk7Cj4gLQlndWNfcmluZ19kb29yYmVsbChjbGllbnQp Owo+IC0KPiAtCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT53cV9sb2NrKTsKPiAtCj4gLQljbGll bnQtPnVzZV9ub3Bfd3FpID0gZmFsc2U7Cj4gLQo+IC0JLyogaWYgdGhlcmUgYXJlIG5vIGlzc3Vl cyBHdUMgd2lsbCB1cGRhdGUgdGhlIFdRIGhlYWQgYW5kIGtlZXAgdGhlCj4gLQkgKiBXUSBpbiBh Y3RpdmUgc3RhdHVzCj4gLQkgKi8KPiAtCWVyciA9IHdhaXRfZm9yKFJFQURfT05DRShkZXNjLT5o ZWFkKSA9PSBSRUFEX09OQ0UoZGVzYy0+dGFpbCksIDEwKTsKPiAtCWlmIChlcnIpIHsKPiAtCQlw cl9lcnIoImRvb3JiZWxsICV1IHJpbmcgZmFpbGVkIVxuIiwgY2xpZW50LT5kb29yYmVsbF9pZCk7 Cj4gLQkJcmV0dXJuIC1FSU87Cj4gLQl9Cj4gLQo+IC0JaWYgKGRlc2MtPndxX3N0YXR1cyAhPSBX UV9TVEFUVVNfQUNUSVZFKSB7Cj4gLQkJcHJfZXJyKCJkb29yYmVsbCAldSByaW5nIHB1dCBXUSBp biBiYWQgc3RhdGUgKCV1KSFcbiIsCj4gLQkJICAgICAgIGNsaWVudC0+ZG9vcmJlbGxfaWQsIGRl c2MtPndxX3N0YXR1cyk7Cj4gLQkJcmV0dXJuIC1FSU87Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7 Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIEJhc2ljIGNsaWVudCBzYW5pdHkgY2hlY2ssIGhhbmR5IHRv IHZhbGlkYXRlIGNyZWF0ZV9jbGllbnRzLgo+IC0gKi8KPiAtc3RhdGljIGludCB2YWxpZGF0ZV9j bGllbnQoc3RydWN0IGludGVsX2d1Y19jbGllbnQgKmNsaWVudCwgaW50IGNsaWVudF9wcmlvcml0 eSkKPiAtewo+IC0JaWYgKGNsaWVudC0+cHJpb3JpdHkgIT0gY2xpZW50X3ByaW9yaXR5IHx8Cj4g LQkgICAgY2xpZW50LT5kb29yYmVsbF9pZCA9PSBHVUNfRE9PUkJFTExfSU5WQUxJRCkKPiAtCQly ZXR1cm4gLUVJTlZBTDsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGlj IGJvb2wgY2xpZW50X2Rvb3JiZWxsX2luX3N5bmMoc3RydWN0IGludGVsX2d1Y19jbGllbnQgKmNs aWVudCkKPiAtewo+IC0JcmV0dXJuICFjbGllbnQgfHwgZG9vcmJlbGxfb2soY2xpZW50LT5ndWMs IGNsaWVudC0+ZG9vcmJlbGxfaWQpOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBDaGVjayB0aGF0IHdl J3JlIGFibGUgdG8gc3luY2hyb25pemUgZ3VjX2NsaWVudHMgd2l0aCB0aGVpciBkb29yYmVsbHMK PiAtICoKPiAtICogV2UncmUgY3JlYXRpbmcgY2xpZW50cyBhbmQgcmVzZXJ2aW5nIGRvb3JiZWxs cyBvbmNlLCBhdCBtb2R1bGUgbG9hZC4gRHVyaW5nCj4gLSAqIG1vZHVsZSBsaWZldGltZSwgR3VD LCBkb29yYmVsbCBIVywgYW5kIGk5MTUgc3RhdGUgbWF5IGdvIG91dCBvZiBzeW5jIGR1ZSB0bwo+ IC0gKiBHdUMgYmVpbmcgcmVzZXQuIEluIG90aGVyIHdvcmRzIC0gR3VDIGNsaWVudHMgYXJlIHN0 aWxsIGFyb3VuZCwgYnV0IHRoZQo+IC0gKiBzdGF0dXMgb2YgdGhlaXIgZG9vcmJlbGxzIG1heSBi ZSBpbmNvcnJlY3QuIFRoaXMgaXMgdGhlIHJlYXNvbiBiZWhpbmQKPiAtICogdmFsaWRhdGluZyB0 aGF0IHRoZSBkb29yYmVsbHMgc3RhdHVzIGV4cGVjdGVkIGJ5IHRoZSBkcml2ZXIgbWF0Y2hlcyB3 aGF0IHRoZQo+IC0gKiBHdUMvSFcgaGF2ZS4KPiAtICovCj4gLXN0YXRpYyBpbnQgaWd0X2d1Y19j bGllbnRzKHZvaWQgKmFyZykKPiAtewo+IC0Jc3RydWN0IGludGVsX2d0ICpndCA9IGFyZzsKPiAt CXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZndC0+dWMuZ3VjOwo+IC0JaW50ZWxfd2FrZXJlZl90 IHdha2VyZWY7Cj4gLQlpbnQgZXJyID0gMDsKPiAtCj4gLQlHRU1fQlVHX09OKCFIQVNfR1RfVUMo Z3QtPmk5MTUpKTsKPiAtCXdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChndC0+dW5jb3Jl LT5ycG0pOwo+IC0KPiAtCWVyciA9IGNoZWNrX2FsbF9kb29yYmVsbHMoZ3VjKTsKPiAtCWlmIChl cnIpCj4gLQkJZ290byB1bmxvY2s7Cj4gLQo+IC0JLyoKPiAtCSAqIEdldCByaWQgb2YgY2xpZW50 cyBjcmVhdGVkIGR1cmluZyBkcml2ZXIgbG9hZCBiZWNhdXNlIHRoZSB0ZXN0IHdpbGwKPiAtCSAq IHJlY3JlYXRlIHRoZW0uCj4gLQkgKi8KPiAtCWd1Y19jbGllbnRzX2Rpc2FibGUoZ3VjKTsKPiAt CWd1Y19jbGllbnRzX2Rlc3Ryb3koZ3VjKTsKPiAtCWlmIChndWMtPmV4ZWNidWZfY2xpZW50KSB7 Cj4gLQkJcHJfZXJyKCJndWNfY2xpZW50c19kZXN0cm95IGxpZWQhXG4iKTsKPiAtCQllcnIgPSAt RUlOVkFMOwo+IC0JCWdvdG8gdW5sb2NrOwo+IC0JfQo+IC0KPiAtCWVyciA9IGd1Y19jbGllbnRz X2NyZWF0ZShndWMpOwo+IC0JaWYgKGVycikgewo+IC0JCXByX2VycigiRmFpbGVkIHRvIGNyZWF0 ZSBjbGllbnRzXG4iKTsKPiAtCQlnb3RvIHVubG9jazsKPiAtCX0KPiAtCUdFTV9CVUdfT04oIWd1 Yy0+ZXhlY2J1Zl9jbGllbnQpOwo+IC0KPiAtCWVyciA9IHZhbGlkYXRlX2NsaWVudChndWMtPmV4 ZWNidWZfY2xpZW50LAo+IC0JCQkgICAgICBHVUNfQ0xJRU5UX1BSSU9SSVRZX0tNRF9OT1JNQUwp Owo+IC0JaWYgKGVycikgewo+IC0JCXByX2VycigiZXhlY2J1ZyBjbGllbnQgdmFsaWRhdGlvbiBm YWlsZWRcbiIpOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtCS8qIHRoZSBjbGllbnQgc2hv dWxkIG5vdyBoYXZlIHJlc2VydmVkIGEgZG9vcmJlbGwgKi8KPiAtCWlmICghaGFzX2Rvb3JiZWxs KGd1Yy0+ZXhlY2J1Zl9jbGllbnQpKSB7Cj4gLQkJcHJfZXJyKCJndWNfY2xpZW50c19jcmVhdGUg ZGlkbid0IHJlc2VydmUgZG9vcmJlbGxzXG4iKTsKPiAtCQllcnIgPSAtRUlOVkFMOwo+IC0JCWdv dG8gb3V0Owo+IC0JfQo+IC0KPiAtCS8qIE5vdyBlbmFibGUgdGhlIGNsaWVudHMgKi8KPiAtCWd1 Y19jbGllbnRzX2VuYWJsZShndWMpOwo+IC0KPiAtCS8qIGVhY2ggY2xpZW50IHNob3VsZCBub3cg aGF2ZSByZWNlaXZlZCBhIGRvb3JiZWxsICovCj4gLQlpZiAoIWNsaWVudF9kb29yYmVsbF9pbl9z eW5jKGd1Yy0+ZXhlY2J1Zl9jbGllbnQpKSB7Cj4gLQkJcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlh bGl6ZSB0aGUgZG9vcmJlbGxzXG4iKTsKPiAtCQllcnIgPSAtRUlOVkFMOwo+IC0JCWdvdG8gb3V0 Owo+IC0JfQo+IC0KPiAtCS8qCj4gLQkgKiBCYXNpYyB0ZXN0IC0gYW4gYXR0ZW1wdCB0byByZWFs bG9jYXRlIGEgdmFsaWQgZG9vcmJlbGwgdG8gdGhlCj4gLQkgKiBjbGllbnQgaXQgaXMgY3VycmVu dGx5IGFzc2lnbmVkIHNob3VsZCBub3QgY2F1c2UgYSBmYWlsdXJlLgo+IC0JICovCj4gLQllcnIg PSBjcmVhdGVfZG9vcmJlbGwoZ3VjLT5leGVjYnVmX2NsaWVudCk7Cj4gLQo+IC1vdXQ6Cj4gLQkv Kgo+IC0JICogTGVhdmUgY2xlYW4gc3RhdGUgZm9yIG90aGVyIHRlc3QsIHBsdXMgdGhlIGRyaXZl ciBhbHdheXMgZGVzdHJveSB0aGUKPiAtCSAqIGNsaWVudHMgZHVyaW5nIHVubG9hZC4KPiAtCSAq Lwo+IC0JZ3VjX2NsaWVudHNfZGlzYWJsZShndWMpOwo+IC0JZ3VjX2NsaWVudHNfZGVzdHJveShn dWMpOwo+IC0JZ3VjX2NsaWVudHNfY3JlYXRlKGd1Yyk7Cj4gLQlndWNfY2xpZW50c19lbmFibGUo Z3VjKTsKPiAtdW5sb2NrOgo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQoZ3QtPnVuY29yZS0+cnBt LCB3YWtlcmVmKTsKPiAtCXJldHVybiBlcnI7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIENyZWF0ZSBh cyBtYW55IGNsaWVudHMgYXMgbnVtYmVyIG9mIGRvb3JiZWxscy4gTm90ZSB0aGF0IHRoZXJlJ3Mg YWxyZWFkeQo+IC0gKiBjbGllbnQocykvZG9vcmJlbGwocykgY3JlYXRlZCBkdXJpbmcgZHJpdmVy IGxvYWQsIGJ1dCB0aGlzIHRlc3QgY3JlYXRlcwo+IC0gKiBpdHMgb3duIGFuZCBkbyBub3QgaW50 ZXJhY3Qgd2l0aCB0aGUgZXhpc3Rpbmcgb25lcy4KPiAtICovCj4gLXN0YXRpYyBpbnQgaWd0X2d1 Y19kb29yYmVsbHModm9pZCAqYXJnKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJn Owo+IC0Jc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmd0LT51Yy5ndWM7Cj4gLQlpbnRlbF93YWtl cmVmX3Qgd2FrZXJlZjsKPiAtCWludCBpLCBlcnIgPSAwOwo+IC0JdTE2IGRiX2lkOwo+IC0KPiAt CUdFTV9CVUdfT04oIUhBU19HVF9VQyhndC0+aTkxNSkpOwo+IC0Jd2FrZXJlZiA9IGludGVsX3J1 bnRpbWVfcG1fZ2V0KGd0LT51bmNvcmUtPnJwbSk7Cj4gLQo+IC0JZXJyID0gY2hlY2tfYWxsX2Rv b3JiZWxscyhndWMpOwo+IC0JaWYgKGVycikKPiAtCQlnb3RvIHVubG9jazsKPiAtCj4gLQlmb3Ig KGkgPSAwOyBpIDwgQVRURU1QVFM7IGkrKykgewo+IC0JCWNsaWVudHNbaV0gPSBndWNfY2xpZW50 X2FsbG9jKGd1YywgaSAlIEdVQ19DTElFTlRfUFJJT1JJVFlfTlVNKTsKPiAtCj4gLQkJaWYgKCFj bGllbnRzW2ldKSB7Cj4gLQkJCXByX2VycigiWyVkXSBObyBndWMgY2xpZW50XG4iLCBpKTsKPiAt CQkJZXJyID0gLUVJTlZBTDsKPiAtCQkJZ290byBvdXQ7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoSVNf RVJSKGNsaWVudHNbaV0pKSB7Cj4gLQkJCWlmIChQVFJfRVJSKGNsaWVudHNbaV0pICE9IC1FTk9T UEMpIHsKPiAtCQkJCXByX2VycigiWyVkXSB1bmV4cGVjdGVkIGVycm9yXG4iLCBpKTsKPiAtCQkJ CWVyciA9IFBUUl9FUlIoY2xpZW50c1tpXSk7Cj4gLQkJCQlnb3RvIG91dDsKPiAtCQkJfQo+IC0K PiAtCQkJaWYgKGF2YWlsYWJsZV9kYnMoZ3VjLCBpICUgR1VDX0NMSUVOVF9QUklPUklUWV9OVU0p KSB7Cj4gLQkJCQlwcl9lcnIoIlslZF0gbm9uLWRiIHJlbGF0ZWQgYWxsb2MgZmFpbFxuIiwgaSk7 Cj4gLQkJCQllcnIgPSAtRUlOVkFMOwo+IC0JCQkJZ290byBvdXQ7Cj4gLQkJCX0KPiAtCj4gLQkJ CS8qIGV4cGVjdGVkLCByYW4gb3V0IG9mIGRicyBmb3IgdGhpcyBjbGllbnQgdHlwZSAqLwo+IC0J CQljb250aW51ZTsKPiAtCQl9Cj4gLQo+IC0JCS8qCj4gLQkJICogVGhlIGNoZWNrIGJlbG93IGlz IG9ubHkgdmFsaWQgYmVjYXVzZSB3ZSBrZWVwIGEgZG9vcmJlbGwKPiAtCQkgKiBhc3NpZ25lZCBk dXJpbmcgdGhlIHdob2xlIGxpZmUgb2YgdGhlIGNsaWVudC4KPiAtCQkgKi8KPiAtCQlpZiAoY2xp ZW50c1tpXS0+c3RhZ2VfaWQgPj0gR1VDX05VTV9ET09SQkVMTFMpIHsKPiAtCQkJcHJfZXJyKCJb JWRdIG1vcmUgY2xpZW50cyB0aGFuIGRvb3JiZWxscyAoJWQgPj0gJWQpXG4iLAo+IC0JCQkgICAg ICAgaSwgY2xpZW50c1tpXS0+c3RhZ2VfaWQsIEdVQ19OVU1fRE9PUkJFTExTKTsKPiAtCQkJZXJy ID0gLUVJTlZBTDsKPiAtCQkJZ290byBvdXQ7Cj4gLQkJfQo+IC0KPiAtCQllcnIgPSB2YWxpZGF0 ZV9jbGllbnQoY2xpZW50c1tpXSwgaSAlIEdVQ19DTElFTlRfUFJJT1JJVFlfTlVNKTsKPiAtCQlp ZiAoZXJyKSB7Cj4gLQkJCXByX2VycigiWyVkXSBjbGllbnRfYWxsb2Mgc2FuaXR5IGNoZWNrIGZh aWxlZCFcbiIsIGkpOwo+IC0JCQllcnIgPSAtRUlOVkFMOwo+IC0JCQlnb3RvIG91dDsKPiAtCQl9 Cj4gLQo+IC0JCWRiX2lkID0gY2xpZW50c1tpXS0+ZG9vcmJlbGxfaWQ7Cj4gLQo+IC0JCWVyciA9 IF9fZ3VjX2NsaWVudF9lbmFibGUoY2xpZW50c1tpXSk7Cj4gLQkJaWYgKGVycikgewo+IC0JCQlw cl9lcnIoIlslZF0gRmFpbGVkIHRvIGNyZWF0ZSBhIGRvb3JiZWxsXG4iLCBpKTsKPiAtCQkJZ290 byBvdXQ7Cj4gLQkJfQo+IC0KPiAtCQkvKiBkb29yYmVsbCBpZCBzaG91bGRuJ3QgY2hhbmdlLCB3 ZSBhcmUgaG9sZGluZyB0aGUgbXV0ZXggKi8KPiAtCQlpZiAoZGJfaWQgIT0gY2xpZW50c1tpXS0+ ZG9vcmJlbGxfaWQpIHsKPiAtCQkJcHJfZXJyKCJbJWRdIGRvb3JiZWxsIGlkIGNoYW5nZWQgKCVk ICE9ICVkKVxuIiwKPiAtCQkJICAgICAgIGksIGRiX2lkLCBjbGllbnRzW2ldLT5kb29yYmVsbF9p ZCk7Cj4gLQkJCWVyciA9IC1FSU5WQUw7Cj4gLQkJCWdvdG8gb3V0Owo+IC0JCX0KPiAtCj4gLQkJ ZXJyID0gY2hlY2tfYWxsX2Rvb3JiZWxscyhndWMpOwo+IC0JCWlmIChlcnIpCj4gLQkJCWdvdG8g b3V0Owo+IC0KPiAtCQllcnIgPSByaW5nX2Rvb3JiZWxsX25vcChjbGllbnRzW2ldKTsKPiAtCQlp ZiAoZXJyKQo+IC0JCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLW91dDoKPiAtCWZvciAoaSA9IDA7 IGkgPCBBVFRFTVBUUzsgaSsrKQo+IC0JCWlmICghSVNfRVJSX09SX05VTEwoY2xpZW50c1tpXSkp IHsKPiAtCQkJX19ndWNfY2xpZW50X2Rpc2FibGUoY2xpZW50c1tpXSk7Cj4gLQkJCWd1Y19jbGll bnRfZnJlZShjbGllbnRzW2ldKTsKPiAtCQl9Cj4gLXVubG9jazoKPiAtCWludGVsX3J1bnRpbWVf cG1fcHV0KGd0LT51bmNvcmUtPnJwbSwgd2FrZXJlZik7Cj4gLQlyZXR1cm4gZXJyOwo+IC19Cj4g LQo+IC1pbnQgaW50ZWxfZ3VjX2xpdmVfc2VsZnRlc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpCj4gLXsKPiAtCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10g PSB7Cj4gLQkJU1VCVEVTVChpZ3RfZ3VjX2NsaWVudHMpLAo+IC0JCVNVQlRFU1QoaWd0X2d1Y19k b29yYmVsbHMpLAo+IC0JfTsKPiAtCj4gLQlpZiAoIVVTRVNfR1VDX1NVQk1JU1NJT04oaTkxNSkp Cj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JcmV0dXJuIGludGVsX2d0X2xpdmVfc3VidGVzdHModGVz dHMsICZpOTE1LT5ndCk7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGlu ZGV4IGNhYjYzMjc5MWY3My4uNWQ1OTc0ZTdmM2VkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kZWJ1Z2ZzLmMKPiBAQCAtMTgxNSwxNyArMTgxNSwxMCBAQCBzdGF0aWMgaW50IGk5MTVfZ3Vj X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAgCj4gICAJR0VNX0JVR19P TighZ3VjLT5leGVjYnVmX2NsaWVudCk7Cj4gICAKPiAtCXNlcV9wcmludGYobSwgIlxuRG9vcmJl bGwgbWFwOlxuIik7Cj4gLQlzZXFfcHJpbnRmKG0sICJcdCUqcGJcbiIsIEdVQ19OVU1fRE9PUkJF TExTLCBndWMtPmRvb3JiZWxsX2JpdG1hcCk7Cj4gLQlzZXFfcHJpbnRmKG0sICJEb29yYmVsbCBu ZXh0IGNhY2hlbGluZTogMHgleFxuIiwgZ3VjLT5kYl9jYWNoZWxpbmUpOwo+IC0KPiAgIAlzZXFf cHJpbnRmKG0sICJcbkd1QyBleGVjYnVmIGNsaWVudCBAICVwOlxuIiwgY2xpZW50KTsKPiAtCXNl cV9wcmludGYobSwgIlx0UHJpb3JpdHkgJWQsIEd1QyBzdGFnZSBpbmRleDogJXUsIFBEIG9mZnNl dCAweCV4XG4iLAo+ICsJc2VxX3ByaW50ZihtLCAiXHRQcmlvcml0eSAlZCwgR3VDIHN0YWdlIGlu ZGV4OiAldVxuIiwKPiAgIAkJICAgY2xpZW50LT5wcmlvcml0eSwKPiAtCQkgICBjbGllbnQtPnN0 YWdlX2lkLAo+IC0JCSAgIGNsaWVudC0+cHJvY19kZXNjX29mZnNldCk7Cj4gLQlzZXFfcHJpbnRm KG0sICJcdERvb3JiZWxsIGlkICVkLCBvZmZzZXQ6IDB4JWx4XG4iLAo+IC0JCSAgIGNsaWVudC0+ ZG9vcmJlbGxfaWQsIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0KTsKPiArCQkgICBjbGllbnQtPnN0 YWdlX2lkKTsKPiAgIAkvKiBBZGQgbW9yZSBhcyByZXF1aXJlZCAuLi4gKi8KPiAgIAo+ICAgCXJl dHVybiAwOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkx NV9saXZlX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVf bGl2ZV9zZWxmdGVzdHMuaAo+IGluZGV4IDRiM2NhYzczZTI5MS4uZmIwM2Y4YTkwY2FjIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRl c3RzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3Nl bGZ0ZXN0cy5oCj4gQEAgLTM2LDUgKzM2LDQgQEAgc2VsZnRlc3QocmVzZXQsIGludGVsX3Jlc2V0 X2xpdmVfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QobWVtb3J5X3JlZ2lvbiwgaW50ZWxfbWVtb3J5 X3JlZ2lvbl9saXZlX3NlbGZ0ZXN0cykKPiAgIHNlbGZ0ZXN0KGhhbmdjaGVjaywgaW50ZWxfaGFu Z2NoZWNrX2xpdmVfc2VsZnRlc3RzKQo+ICAgc2VsZnRlc3QoZXhlY2xpc3RzLCBpbnRlbF9leGVj bGlzdHNfbGl2ZV9zZWxmdGVzdHMpCj4gLXNlbGZ0ZXN0KGd1YywgaW50ZWxfZ3VjX2xpdmVfc2Vs ZnRlc3QpCj4gICBzZWxmdGVzdChwZXJmLCBpOTE1X3BlcmZfbGl2ZV9zZWxmdGVzdHMpCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=