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.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 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 0777CC433E0 for ; Tue, 30 Jun 2020 02:57:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BBCA220663 for ; Tue, 30 Jun 2020 02:57:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="b+AYguWu" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728840AbgF3C5S (ORCPT ); Mon, 29 Jun 2020 22:57:18 -0400 Received: from Mailgw01.mediatek.com ([1.203.163.78]:8784 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726746AbgF3C5Q (ORCPT ); Mon, 29 Jun 2020 22:57:16 -0400 X-UUID: c048d3ec95c047f0aa851639e8ac36df-20200630 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=CJPPxlJ+lBkk1T6CRfZuA+gpaMpZ4ScoaHOPkiXhlf4=; b=b+AYguWuIKSyRzFi8gHgKtveB4pezBVaQGf+ZdzKrpkb+2HxTud5nsUemigAduNWRlik71J4WH2FmfN9/HkthieyqzzXMtQV9t1t6OoXrxKW2IA735VwCaVew8F6wK017YC1Mf4SqpomFN6xS2K5QhfR23aS58zclMn6DaFa7+g=; X-UUID: c048d3ec95c047f0aa851639e8ac36df-20200630 Received: from mtkcas34.mediatek.inc [(172.27.4.253)] by mailgw01.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 1199221814; Tue, 30 Jun 2020 10:56:44 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 30 Jun 2020 10:56:42 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 30 Jun 2020 10:56:40 +0800 Message-ID: <1593485781.20112.43.camel@mhfsdcap03> Subject: Re: [PATCH RESEND v9 18/18] media: platform: Add jpeg enc feature From: Xia Jiang To: Tomasz Figa CC: Hans Verkuil , Mauro Carvalho Chehab , Rob Herring , "Matthias Brugger" , Rick Chang , , , , , , Marek Szyprowski , , , , , , Date: Tue, 30 Jun 2020 10:56:21 +0800 In-Reply-To: <20200611184640.GC8694@chromium.org> References: <20200604090553.10861-1-xia.jiang@mediatek.com> <20200604090553.10861-20-xia.jiang@mediatek.com> <20200611184640.GC8694@chromium.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 6FBB461BA667E2202A69FCC4220A8E66BE2B8EF97A3579271F239B6868B4B1FB2000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVGh1LCAyMDIwLTA2LTExIGF0IDE4OjQ2ICswMDAwLCBUb21hc3ogRmlnYSB3cm90ZToNCj4g SGkgWGlhLA0KPiANCj4gT24gVGh1LCBKdW4gMDQsIDIwMjAgYXQgMDU6MDU6NTNQTSArMDgwMCwg WGlhIEppYW5nIHdyb3RlOg0KPiA+IEFkZCBtdGsganBlZyBlbmNvZGUgdjRsMiBkcml2ZXIgYmFz ZWQgb24ganBlZyBkZWNvZGUsIGJlY2F1c2UgdGhhdCBqcGVnDQo+ID4gZGVjb2RlIGFuZCBlbmNv ZGUgaGF2ZSBncmVhdCBzaW1pbGFyaXRpZXMgd2l0aCBmdW5jdGlvbiBvcGVyYXRpb24uDQo+ID4g DQo+ID4gU2lnbmVkLW9mZi1ieTogWGlhIEppYW5nIDx4aWEuamlhbmdAbWVkaWF0ZWsuY29tPg0K PiA+IC0tLQ0KPiA+IHY5OiBhZGQgbWVtYmVyIHZhcmlhYmxlKHN0cnVjdCB2NGwyX3JlY3QpIGlu IG91dF9xIHN0cnVjdHVyZSBmb3Igc3RvcmluZw0KPiA+ICAgICB0aGUgYWN0aXZlIGNyb3AgaW5m b3JtYXRpb24uDQo+ID4gICAgIG1vdmUgdGhlIHJlbmFtaW5nIGV4c3RpbmcgZnVuY3Rpb25zL2Rl ZmluZXMvdmFyaWFibGVzIHRvIGEgc2VwYXJhdGUgcGF0Y2guDQo+ID4gLS0tDQo+ID4gIGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvTWFrZWZpbGUgICAgICB8ICAgNSArLQ0KPiA+ICAu Li4vbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfY29yZS5jICAgfCA4NDUgKysrKysr KysrKysrKysrLS0tDQo+ID4gIC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19j b3JlLmggICB8ICA0NCArLQ0KPiA+ICAuLi4vbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pw ZWdfZW5jX2h3LmMgfCAxOTMgKysrKw0KPiA+ICAuLi4vbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcv bXRrX2pwZWdfZW5jX2h3LmggfCAxMjMgKysrDQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwgMTA4NCBp bnNlcnRpb25zKCspLCAxMjYgZGVsZXRpb25zKC0pDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19ody5jDQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVn X2VuY19ody5oDQo+ID4gDQo+IA0KPiBUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4gUGxlYXNlIHNl ZSBteSBjb21tZW50cyBpbmxpbmUuDQpEZWFyIFRvbWFzeiwNCg0KVGhhbmsgeW91IGZvciB5b3Vy IHJlcGx5Lg0KDQpJIGhhdmUgZml4ZWQgdGhlIGRyaXZlciBieSBmb2xsb3dpbmcgeW91ciBvcGlu aW9ucyBhbG1vc3RseSwgYnV0IHRoZXJlDQppcyBzb21lIGNvbmZ1c2lvbiBhYm91dCBzb21lIG9m IHRoZSBvcGluaW9ucy4gSSdkIGxpa2UgdG8gaGF2ZSBhIGZ1cnRoZXINCmRpc2N1c3Npb24gd2l0 aCB5b3UuIFBsZWFzZSBzZWUgbXkgcmVwbHkgYmVsb3cuDQo+IA0KPiBbc25pcF0NCj4gPiArc3Rh dGljIGludCBtdGtfanBlZ19lbmNfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnBy aXYsDQo+ID4gKwkJCQkgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4gPiAr DQo+ID4gKwlzdHJzY3B5KGNhcC0+ZHJpdmVyLCBNVEtfSlBFR19OQU1FLCBzaXplb2YoY2FwLT5k cml2ZXIpKTsNCj4gPiArCXN0cnNjcHkoY2FwLT5jYXJkLCBNVEtfSlBFR19OQU1FICIgZW5jb2Rl ciIsIHNpemVvZihjYXAtPmNhcmQpKTsNCj4gPiArCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNp emVvZihjYXAtPmJ1c19pbmZvKSwgInBsYXRmb3JtOiVzIiwNCj4gPiArCQkgZGV2X25hbWUoanBl Zy0+ZGV2KSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gDQo+IEkgY2FuIHNl ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIG10a19qcGVnX2RlY19xdWVyeWNhcCgp IG9ubHkgd2l0aA0KPiB0aGUgIiBlbmNvZGVyIiBzdHJpbmcuIFBlcmhhcHMgdGhleSBjb3VsZCBi ZSBtZXJnZWQ/DQo+IA0KPiA+ICsNCj4gPiAgc3RhdGljIGludCBtdGtfanBlZ19kZWNfcXVlcnlj YXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gIAkJCQkgc3RydWN0IHY0bDJf Y2FwYWJpbGl0eSAqY2FwKQ0KPiA+ICB7DQo+ID4gQEAgLTg4LDYgKzE1Nyw1NCBAQCBzdGF0aWMg aW50IG10a19qcGVnX2RlY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwN Cj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4gIA0KPiA+ICtzdGF0aWMgaW50IHZpZGlvY19q cGVnX2VuY19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCj4gPiArew0KPiA+ICsJc3Ry dWN0IG10a19qcGVnX2N0eCAqY3R4ID0gY3RybF90b19jdHgoY3RybCk7DQo+ID4gKw0KPiA+ICsJ c3dpdGNoIChjdHJsLT5pZCkgew0KPiA+ICsJY2FzZSBWNEwyX0NJRF9KUEVHX1JFU1RBUlRfSU5U RVJWQUw6DQo+ID4gKwkJY3R4LT5yZXN0YXJ0X2ludGVydmFsID0gY3RybC0+dmFsOw0KPiA+ICsJ CWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwyX0NJRF9KUEVHX0NPTVBSRVNTSU9OX1FVQUxJVFk6DQo+ ID4gKwkJY3R4LT5lbmNfcXVhbGl0eSA9IGN0cmwtPnZhbDsNCj4gPiArCQlicmVhazsNCj4gPiAr CWNhc2UgVjRMMl9DSURfSlBFR19BQ1RJVkVfTUFSS0VSOg0KPiA+ICsJCWN0eC0+ZW5hYmxlX2V4 aWYgPSBjdHJsLT52YWwgJiBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9BUFAxID8NCj4gPiArCQkJ CSAgIHRydWUgOiBmYWxzZTsNCj4gDQo+IG5pdDogSWYgY3R4LT5lbmFibGVfZXhpZiBpcyBvZiB0 aGUgYm9vbCB0eXBlLCB0aGUgdGVybmFyeSBvcGVyYXRvciBjb3VsZCBiZQ0KPiByZW1vdmVkLCBi ZWNhdXNlIGFueSBub24temVybyB2YWx1ZSBpcyBpbXBsaWNpdGx5IHR1cm5lZCBpbnRvIDEsIGFz IHBlciBbMV0uDQo+IA0KPiBbMV0gaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC92NS42 L3Byb2Nlc3MvY29kaW5nLXN0eWxlLmh0bWwjdXNpbmctYm9vbA0KPiANCj4gW3NuaXBdDQo+ID4g K3N0YXRpYyBpbnQgbXRrX2pwZWdfZW5jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZp bGUsIHZvaWQgKnByaXYsDQo+ID4gKwkJCQkJIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQo+ID4g K3sNCj4gPiArCXJldHVybiBtdGtfanBlZ19lbnVtX2ZtdChtdGtfanBlZ19lbmNfZm9ybWF0cywN Cj4gPiArCQkJCSBNVEtfSlBFR19FTkNfTlVNX0ZPUk1BVFMsIGYsDQo+ID4gKwkJCQkgTVRLX0pQ RUdfRk1UX0ZMQUdfRU5DX0NBUFRVUkUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW50 IG10a19qcGVnX2RlY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpw cml2LA0KPiA+ICAJCQkJCSBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQ0KPiA+ICB7DQo+ID4gQEAg LTExNyw2ICsyNDIsMTQgQEAgc3RhdGljIGludCBtdGtfanBlZ19kZWNfZW51bV9mbXRfdmlkX2Nh cChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgCQkJCSBNVEtfSlBFR19GTVRf RkxBR19ERUNfQ0FQVFVSRSk7DQo+ID4gIH0NCj4gPiAgDQo+ID4gK3N0YXRpYyBpbnQgbXRrX2pw ZWdfZW5jX2VudW1fZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ ID4gKwkJCQkJIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQo+ID4gK3sNCj4gPiArCXJldHVybiBt dGtfanBlZ19lbnVtX2ZtdChtdGtfanBlZ19lbmNfZm9ybWF0cywNCj4gPiArCQkJCSBNVEtfSlBF R19FTkNfTlVNX0ZPUk1BVFMsIGYsDQo+ID4gKwkJCQkgTVRLX0pQRUdfRk1UX0ZMQUdfRU5DX09V VFBVVCk7DQo+IA0KPiBEbyB3ZSBuZWVkIHNlcGFyYXRlIGltcGxlbWVudGF0aW9ucyBvZiB0aGVz ZT8gImZvcm1hdHMiIGFuZCAibnVtX2Zvcm1hdHMiDQo+IGNvdWxkIGJlIHNwZWNpZmllZCBieSB0 aGUgbWF0Y2ggZGF0YSBzdHJ1Y3QgYW5kIHVzZWQgaW4gYSBnZW5lcmljIGZ1bmN0aW9uLg0KPiAN Cj4gQWxzbywgZG8gd2UgbmVlZCBzZXBhcmF0ZSBmbGFncyBmb3IgRU5DX09VVFBVVC9DQVBUVVJF IGFuZA0KPiBERUNfT1VUUFVUL0NBUFRVUkU/DQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0 aWMgaW50IG10a19qcGVnX2RlY19lbnVtX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2 b2lkICpwcml2LA0KPiA+ICAJCQkJCSBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQ0KPiA+ICB7DQo+ ID4gQEAgLTEzMiw5MyArMjY1LDY2IEBAIG10a19qcGVnX2dldF9xX2RhdGEoc3RydWN0IG10a19q cGVnX2N0eCAqY3R4LCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkNCj4gPiAgCXJldHVybiAmY3R4 LT5jYXBfcTsNCj4gPiAgfQ0KPiA+ICANCj4gPiAtc3RhdGljIHN0cnVjdCBtdGtfanBlZ19mbXQg Km10a19qcGVnX2ZpbmRfZm9ybWF0KHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCwNCj4gPiAtCQkJ CQkJIHUzMiBwaXhlbGZvcm1hdCwNCj4gPiArc3RhdGljIHN0cnVjdCBtdGtfanBlZ19mbXQgKm10 a19qcGVnX2ZpbmRfZm9ybWF0KHUzMiBwaXhlbGZvcm1hdCwNCj4gPiAgCQkJCQkJIHVuc2lnbmVk IGludCBmbXRfdHlwZSkNCj4gPiAgew0KPiA+IC0JdW5zaWduZWQgaW50IGssIGZtdF9mbGFnOw0K PiA+ICsJdW5zaWduZWQgaW50IGs7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfZm10ICpmbXQ7DQo+ ID4gIA0KPiA+IC0JZm10X2ZsYWcgPSAoZm10X3R5cGUgPT0gTVRLX0pQRUdfRk1UX1RZUEVfT1VU UFVUKSA/DQo+ID4gLQkJICAgTVRLX0pQRUdfRk1UX0ZMQUdfREVDX09VVFBVVCA6DQo+ID4gLQkJ ICAgTVRLX0pQRUdfRk1UX0ZMQUdfREVDX0NBUFRVUkU7DQo+ID4gKwlmb3IgKGsgPSAwOyBrIDwg TVRLX0pQRUdfRU5DX05VTV9GT1JNQVRTOyBrKyspIHsNCj4gPiArCQlmbXQgPSAmbXRrX2pwZWdf ZW5jX2Zvcm1hdHNba107DQo+ID4gKw0KPiA+ICsJCWlmIChmbXQtPmZvdXJjYyA9PSBwaXhlbGZv cm1hdCAmJiBmbXQtPmZsYWdzICYgZm10X3R5cGUpDQo+ID4gKwkJCXJldHVybiBmbXQ7DQo+ID4g Kwl9DQo+ID4gIA0KPiA+ICAJZm9yIChrID0gMDsgayA8IE1US19KUEVHX0RFQ19OVU1fRk9STUFU UzsgaysrKSB7DQo+ID4gLQkJc3RydWN0IG10a19qcGVnX2ZtdCAqZm10ID0gJm10a19qcGVnX2Rl Y19mb3JtYXRzW2tdOw0KPiA+ICsJCWZtdCA9ICZtdGtfanBlZ19kZWNfZm9ybWF0c1trXTsNCj4g PiAgDQo+ID4gLQkJaWYgKGZtdC0+Zm91cmNjID09IHBpeGVsZm9ybWF0ICYmIGZtdC0+ZmxhZ3Mg JiBmbXRfZmxhZykNCj4gPiArCQlpZiAoZm10LT5mb3VyY2MgPT0gcGl4ZWxmb3JtYXQgJiYgZm10 LT5mbGFncyAmIGZtdF90eXBlKQ0KPiA+ICAJCQlyZXR1cm4gZm10Ow0KPiA+ICAJfQ0KPiANCj4g V2Ugc2hvdWxkIG9ubHkgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggb25lIG9mIHRoZSBhcnJheXMu IE15IHN1Z2dlc3Rpb24NCj4gYWJvdmUgYWJvdXQgbWFraW5nICJmb3JtYXRzIiBhbmQgIm51bV9m b3JtYXRzIiBhIG1lbWJlciBvZiB0aGUgbWF0Y2ggZGF0YQ0KPiBzaG91bGQgdGFrZSBjYXJlIG9m IHRoaXMgb25lIHRvby4NCj4gDQo+ID4gIA0KPiA+ICAJcmV0dXJuIE5VTEw7DQo+ID4gIH0NCj4g PiAgDQo+ID4gLXN0YXRpYyB2b2lkIG10a19qcGVnX2FkanVzdF9mbXRfbXBsYW5lKHN0cnVjdCBt dGtfanBlZ19jdHggKmN0eCwNCj4gPiAtCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYp DQo+ID4gLXsNCj4gPiAtCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXAgPSAm Zi0+Zm10LnBpeF9tcDsNCj4gPiAtCXN0cnVjdCBtdGtfanBlZ19xX2RhdGEgKnFfZGF0YTsNCj4g PiAtCWludCBpOw0KPiA+IC0NCj4gPiAtCXFfZGF0YSA9IG10a19qcGVnX2dldF9xX2RhdGEoY3R4 LCBmLT50eXBlKTsNCj4gPiAtDQo+ID4gLQlwaXhfbXAtPndpZHRoID0gcV9kYXRhLT53Ow0KPiA+ IC0JcGl4X21wLT5oZWlnaHQgPSBxX2RhdGEtPmg7DQo+ID4gLQlwaXhfbXAtPnBpeGVsZm9ybWF0 ID0gcV9kYXRhLT5mbXQtPmZvdXJjYzsNCj4gPiAtCXBpeF9tcC0+bnVtX3BsYW5lcyA9IHFfZGF0 YS0+Zm10LT5jb2xwbGFuZXM7DQo+ID4gLQ0KPiA+IC0JZm9yIChpID0gMDsgaSA8IHBpeF9tcC0+ bnVtX3BsYW5lczsgaSsrKSB7DQo+ID4gLQkJcGl4X21wLT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJs aW5lID0gcV9kYXRhLT5ieXRlc3BlcmxpbmVbaV07DQo+ID4gLQkJcGl4X21wLT5wbGFuZV9mbXRb aV0uc2l6ZWltYWdlID0gcV9kYXRhLT5zaXplaW1hZ2VbaV07DQo+ID4gLQl9DQo+ID4gLX0NCj4g PiAtDQo+ID4gLXN0YXRpYyBpbnQgbXRrX2pwZWdfdHJ5X2ZtdF9tcGxhbmUoc3RydWN0IHY0bDJf Zm9ybWF0ICpmLA0KPiA+IC0JCQkJICAgc3RydWN0IG10a19qcGVnX2ZtdCAqZm10LA0KPiA+IC0J CQkJICAgc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LCBpbnQgcV90eXBlKQ0KPiA+ICtzdGF0aWMg aW50IHZpZGlvY190cnlfZm10KHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwgc3RydWN0IG10a19qcGVn X2ZtdCAqZm10KQ0KPiANCj4gVGhlIG5hbWUgaXMgYSBiaXQgbWlzbGVhZGluZywgYmVjYXVzZSBp dCdzIHN1Z2dlc3RpbmcgdGhhdCBpdCdzIHRoZQ0KPiB2aWRpb2NfdHJ5X2ZtdCBjYWxsYmFjaywg YnV0IGl0J3MganVzdCBhbiBpbnRlcm5hbCBoZWxwZXIuIEkgdGhpbmsgdGhlDQo+IG9yaWdpbmFs IG5hbWUgd2FzIGZpbmUuDQo+IA0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0 X21wbGFuZSAqcGl4X21wID0gJmYtPmZtdC5waXhfbXA7DQo+ID4gIAlpbnQgaTsNCj4gPiAgDQo+ ID4gIAlwaXhfbXAtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+IC0NCj4gPiAtCWlmIChj dHgtPnN0YXRlICE9IE1US19KUEVHX0lOSVQpIHsNCj4gPiAtCQltdGtfanBlZ19hZGp1c3RfZm10 X21wbGFuZShjdHgsIGYpOw0KPiA+IC0JCXJldHVybiAwOw0KPiA+IC0JfQ0KPiANCj4gSXMgaXQg b2theSB0byByZW1vdmUgdGhpcz8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IHByZXZlbnRl ZCBjaGFuZ2luZw0KPiB0aGUgZm9ybWF0IHdoaWxlIHN0cmVhbWluZywgd2hpY2ggc2hvdWxkIGlz IGFzIGV4cGVjdGVkLg0KPiANCj4gPiAtDQo+ID4gIAlwaXhfbXAtPm51bV9wbGFuZXMgPSBmbXQt PmNvbHBsYW5lczsNCj4gPiAgCXBpeF9tcC0+cGl4ZWxmb3JtYXQgPSBmbXQtPmZvdXJjYzsNCj4g PiAgDQo+ID4gLQlpZiAocV90eXBlID09IE1US19KUEVHX0ZNVF9UWVBFX09VVFBVVCkgew0KPiA+ IC0JCXN0cnVjdCB2NGwyX3BsYW5lX3BpeF9mb3JtYXQgKnBmbXQgPSAmcGl4X21wLT5wbGFuZV9m bXRbMF07DQo+ID4gLQ0KPiA+ICsJaWYgKGZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9KUEVH KSB7DQo+ID4gIAkJcGl4X21wLT5oZWlnaHQgPSBjbGFtcChwaXhfbXAtPmhlaWdodCwgTVRLX0pQ RUdfTUlOX0hFSUdIVCwNCj4gPiAgCQkJCSAgICAgICBNVEtfSlBFR19NQVhfSEVJR0hUKTsNCj4g PiAgCQlwaXhfbXAtPndpZHRoID0gY2xhbXAocGl4X21wLT53aWR0aCwgTVRLX0pQRUdfTUlOX1dJ RFRILA0KPiA+ICAJCQkJICAgICAgTVRLX0pQRUdfTUFYX1dJRFRIKTsNCj4gPiAtDQo+ID4gLQkJ cGZtdC0+Ynl0ZXNwZXJsaW5lID0gMDsNCj4gPiAtCQkvKiBTb3VyY2Ugc2l6ZSBtdXN0IGJlIGFs aWduZWQgdG8gMTI4ICovDQo+ID4gLQkJcGZtdC0+c2l6ZWltYWdlID0gcm91bmRfdXAocGZtdC0+ c2l6ZWltYWdlLCAxMjgpOw0KPiA+IC0JCWlmIChwZm10LT5zaXplaW1hZ2UgPT0gMCkNCj4gPiAt CQkJcGZtdC0+c2l6ZWltYWdlID0gTVRLX0pQRUdfREVGQVVMVF9TSVpFSU1BR0U7DQo+ID4gLQkJ cmV0dXJuIDA7DQo+ID4gKwkJcGl4X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gMDsN Cj4gPiArCQlwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPQ0KPiA+ICsJCQkJcm91bmRf dXAocGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlLCAxMjgpOw0KPiA+ICsJCWlmIChwaXhf bXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPT0gMCkNCj4gPiArCQkJcGl4X21wLT5wbGFuZV9m bXRbMF0uc2l6ZWltYWdlID0NCj4gPiArCQkJCU1US19KUEVHX0RFRkFVTFRfU0laRUlNQUdFOw0K PiA+ICsJfSBlbHNlIHsNCj4gPiArCQlwaXhfbXAtPmhlaWdodCA9IGNsYW1wKHJvdW5kX3VwKHBp eF9tcC0+aGVpZ2h0LCBmbXQtPnZfYWxpZ24pLA0KPiA+ICsJCQkJICAgICAgIE1US19KUEVHX01J Tl9IRUlHSFQsDQo+ID4gKwkJCQkgICAgICAgTVRLX0pQRUdfTUFYX0hFSUdIVCk7DQo+ID4gKwkJ cGl4X21wLT53aWR0aCA9IGNsYW1wKHJvdW5kX3VwKHBpeF9tcC0+d2lkdGgsIGZtdC0+aF9hbGln biksDQo+ID4gKwkJCQkgICAgICBNVEtfSlBFR19NSU5fV0lEVEgsIE1US19KUEVHX01BWF9XSURU SCk7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IHBpeF9tcC0+bnVtX3BsYW5lczsgaSsrKSB7DQo+ ID4gKwkJCXN0cnVjdCB2NGwyX3BsYW5lX3BpeF9mb3JtYXQgKnBmbXQgPQ0KPiA+ICsJCQkJCQkJ JnBpeF9tcC0+cGxhbmVfZm10W2ldOw0KPiA+ICsJCQl1MzIgc3RyaWRlID0gcGl4X21wLT53aWR0 aCAqIGZtdC0+aF9zYW1wbGVbaV0gLyA0Ow0KPiA+ICsJCQl1MzIgaCA9IHBpeF9tcC0+aGVpZ2h0 ICogZm10LT52X3NhbXBsZVtpXSAvIDQ7DQo+ID4gKw0KPiA+ICsJCQlwZm10LT5ieXRlc3Blcmxp bmUgPSBzdHJpZGU7DQo+ID4gKwkJCXBmbXQtPnNpemVpbWFnZSA9IHN0cmlkZSAqIGg7DQo+ID4g KwkJfQ0KPiA+ICAJfQ0KPiA+ICANCj4gPiAtCS8qIHR5cGUgaXMgTVRLX0pQRUdfRk1UX1RZUEVf Q0FQVFVSRSAqLw0KPiA+IC0JcGl4X21wLT5oZWlnaHQgPSBjbGFtcChyb3VuZF91cChwaXhfbXAt PmhlaWdodCwgZm10LT52X2FsaWduKSwNCj4gPiAtCQkJICAgICAgIE1US19KUEVHX01JTl9IRUlH SFQsIE1US19KUEVHX01BWF9IRUlHSFQpOw0KPiA+IC0JcGl4X21wLT53aWR0aCA9IGNsYW1wKHJv dW5kX3VwKHBpeF9tcC0+d2lkdGgsIGZtdC0+aF9hbGlnbiksDQo+ID4gLQkJCSAgICAgIE1US19K UEVHX01JTl9XSURUSCwgTVRLX0pQRUdfTUFYX1dJRFRIKTsNCj4gPiAtDQo+ID4gLQlmb3IgKGkg PSAwOyBpIDwgZm10LT5jb2xwbGFuZXM7IGkrKykgew0KPiA+IC0JCXN0cnVjdCB2NGwyX3BsYW5l X3BpeF9mb3JtYXQgKnBmbXQgPSAmcGl4X21wLT5wbGFuZV9mbXRbaV07DQo+ID4gLQkJdTMyIHN0 cmlkZSA9IHBpeF9tcC0+d2lkdGggKiBmbXQtPmhfc2FtcGxlW2ldIC8gNDsNCj4gPiAtCQl1MzIg aCA9IHBpeF9tcC0+aGVpZ2h0ICogZm10LT52X3NhbXBsZVtpXSAvIDQ7DQo+ID4gLQ0KPiA+IC0J CXBmbXQtPmJ5dGVzcGVybGluZSA9IHN0cmlkZTsNCj4gPiAtCQlwZm10LT5zaXplaW1hZ2UgPSBz dHJpZGUgKiBoOw0KPiA+IC0JfQ0KPiA+ICAJcmV0dXJuIDA7DQo+IA0KPiBBcmUgYWxsIHRoZSBj aGFuZ2VzIGFib3ZlIG5lZWRlZCBmb3IgdGhlIGVuY29kZXI/IElmIEknbSBsb29raW5nIGNvcnJl Y3RseSwNCj4gdGhleSdyZSBtb3N0bHkgcmVmYWN0b3JpbmcgYW5kIHNob3VsZCBiZSBkb25lIGlu IGEgc2VwYXJhdGUgcGF0Y2guIEhvd2V2ZXIsDQo+IEkgZG9uJ3Qgc2VlIGFueSBiaWcgaXNzdWUg d2l0aCB0aGUgZXhpc3RpbmcgY29kaW5nIHN0eWxlIGluIHRoaXMgZnVuY3Rpb24sDQo+IHNvIHBl cmhhcHMgdGhlIHJlZmFjdG9yaW5nIGNvdWxkIGJlIGF2b2lkZWQuDQo+IA0KPiA+ICB9DQo+ID4g IA0KPiA+IEBAIC0yNzEsMTQgKzM3NywzNSBAQCBzdGF0aWMgaW50IG10a19qcGVnX2dfZm10X3Zp ZF9tcGxhbmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gIAlyZXR1cm4gMDsN Cj4gPiAgfQ0KPiA+ICANCj4gPiArc3RhdGljIGludCBtdGtfanBlZ19lbmNfdHJ5X2ZtdF92aWRf Y2FwX21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiArCQkJCQkgICAg ICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdf Y3R4ICpjdHggPSBtdGtfanBlZ19maF90b19jdHgocHJpdik7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pw ZWdfZm10ICpmbXQ7DQo+ID4gKw0KPiA+ICsJZm10ID0gbXRrX2pwZWdfZmluZF9mb3JtYXQoZi0+ Zm10LnBpeF9tcC5waXhlbGZvcm1hdCwNCj4gPiArCQkJCSAgIE1US19KUEVHX0ZNVF9GTEFHX0VO Q19DQVBUVVJFKTsNCj4gPiArCWlmICghZm10KQ0KPiA+ICsJCWZtdCA9IGN0eC0+Y2FwX3EuZm10 Ow0KPiA+ICsNCj4gPiArCXY0bDJfZGJnKDIsIGRlYnVnLCAmY3R4LT5qcGVnLT52NGwyX2Rldiwg IiglZCkgdHJ5X2ZtdDolYyVjJWMlY1xuIiwNCj4gPiArCQkgZi0+dHlwZSwNCj4gPiArCQkgKGZt dC0+Zm91cmNjICYgMHhmZiksDQo+ID4gKwkJIChmbXQtPmZvdXJjYyA+PiAgOCAmIDB4ZmYpLA0K PiA+ICsJCSAoZm10LT5mb3VyY2MgPj4gMTYgJiAweGZmKSwNCj4gPiArCQkgKGZtdC0+Zm91cmNj ID4+IDI0ICYgMHhmZikpOw0KPiA+ICsNCj4gPiArCXJldHVybiB2aWRpb2NfdHJ5X2ZtdChmLCBm bXQpOw0KPiA+ICt9DQo+IA0KPiBJcyB0aGVyZSByZWFsbHkgYW55dGhpbmcgZW5jb2Rlci1zcGVj aWZpYyBpbiB0aGlzIGZ1bmN0aW9uPyBDb3VsZCB0aGUgc2FtZQ0KPiBmdW5jdGlvbiBhcyB0aGUg ZGVjb2RlciBiZSB1c2VkIGluc3RlYWQ/DQo+IA0KPiA+ICsNCj4gPiAgc3RhdGljIGludCBtdGtf anBlZ19kZWNfdHJ5X2ZtdF92aWRfY2FwX21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAq cHJpdiwNCj4gPiAgCQkJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPiA+ICB7DQo+ ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSBtdGtfanBlZ19maF90b19jdHgocHJpdik7 DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfZm10ICpmbXQ7DQo+ID4gIA0KPiA+IC0JZm10ID0gbXRr X2pwZWdfZmluZF9mb3JtYXQoY3R4LCBmLT5mbXQucGl4X21wLnBpeGVsZm9ybWF0LA0KPiA+IC0J CQkJICAgTVRLX0pQRUdfRk1UX1RZUEVfQ0FQVFVSRSk7DQo+ID4gKwlmbXQgPSBtdGtfanBlZ19m aW5kX2Zvcm1hdChmLT5mbXQucGl4X21wLnBpeGVsZm9ybWF0LA0KPiA+ICsJCQkJICAgTVRLX0pQ RUdfRk1UX0ZMQUdfREVDX0NBUFRVUkUpOw0KPiA+ICAJaWYgKCFmbXQpDQo+ID4gIAkJZm10ID0g Y3R4LT5jYXBfcS5mbXQ7DQo+ID4gIA0KPiA+IEBAIC0yODksNyArNDE2LDMzIEBAIHN0YXRpYyBp bnQgbXRrX2pwZWdfZGVjX3RyeV9mbXRfdmlkX2NhcF9tcGxhbmUoc3RydWN0IGZpbGUgKmZpbGUs IHZvaWQgKnByaXYsDQo+ID4gIAkJIChmbXQtPmZvdXJjYyA+PiAxNiAmIDB4ZmYpLA0KPiA+ICAJ CSAoZm10LT5mb3VyY2MgPj4gMjQgJiAweGZmKSk7DQo+ID4gIA0KPiA+IC0JcmV0dXJuIG10a19q cGVnX3RyeV9mbXRfbXBsYW5lKGYsIGZtdCwgY3R4LCBNVEtfSlBFR19GTVRfVFlQRV9DQVBUVVJF KTsNCj4gPiArCWlmIChjdHgtPnN0YXRlICE9IE1US19KUEVHX0lOSVQpIHsNCj4gPiArCQltdGtf anBlZ19nX2ZtdF92aWRfbXBsYW5lKGZpbGUsIHByaXYsIGYpOw0KPiA+ICsJCXJldHVybiAwOw0K PiA+ICsJfQ0KPiANCj4gSXMgdGhpcyByZWFsbHkgbGltaXRlZCB0byB0aGUgZGVjb2Rlcj8gSW4g Z2VuZXJhbCBjdXJyZW50bHkgd2UgZG9uJ3QNCj4gc3VwcG9ydCBjaGFuZ2luZyB0aGUgcmVzb2x1 dGlvbiBmcm9tIHRoZSB1c2Vyc3BhY2Ugd2hlbiBzdHJlYW1pbmcgaXMNCj4gc3RhcnRlZCBhbmQg aXQgYXBwbGllcyB0byBib3RoIGVuY29kZXIgYW5kIGRlY29kZXIuDQo+IA0KPiA+ICsNCj4gPiAr CXJldHVybiB2aWRpb2NfdHJ5X2ZtdChmLCBmbXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IG10a19qcGVnX2VuY190cnlfZm10X3ZpZF9vdXRfbXBsYW5lKHN0cnVjdCBmaWxlICpm aWxlLCB2b2lkICpwcml2LA0KPiA+ICsJCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCA9IG10a19qcGVnX2ZoX3Rv X2N0eChwcml2KTsNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19mbXQgKmZtdDsNCj4gPiArDQo+ID4g KwlmbXQgPSBtdGtfanBlZ19maW5kX2Zvcm1hdChmLT5mbXQucGl4X21wLnBpeGVsZm9ybWF0LA0K PiA+ICsJCQkJICAgTVRLX0pQRUdfRk1UX0ZMQUdfRU5DX09VVFBVVCk7DQo+ID4gKwlpZiAoIWZt dCkNCj4gPiArCQlmbXQgPSBjdHgtPm91dF9xLmZtdDsNCj4gPiArDQo+ID4gKwl2NGwyX2RiZygy LCBkZWJ1ZywgJmN0eC0+anBlZy0+djRsMl9kZXYsICIoJWQpIHRyeV9mbXQ6JWMlYyVjJWNcbiIs DQo+ID4gKwkJIGYtPnR5cGUsDQo+ID4gKwkJIChmbXQtPmZvdXJjYyAmIDB4ZmYpLA0KPiA+ICsJ CSAoZm10LT5mb3VyY2MgPj4gIDggJiAweGZmKSwNCj4gPiArCQkgKGZtdC0+Zm91cmNjID4+IDE2 ICYgMHhmZiksDQo+ID4gKwkJIChmbXQtPmZvdXJjYyA+PiAyNCAmIDB4ZmYpKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gdmlkaW9jX3RyeV9mbXQoZiwgZm10KTsNCj4gPiAgfQ0KPiANCj4gRGl0dG8u DQo+IA0KPiA+ICANCj4gPiAgc3RhdGljIGludCBtdGtfanBlZ19kZWNfdHJ5X2ZtdF92aWRfb3V0 X21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiBAQCAtMjk4LDggKzQ1 MSw4IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfZGVjX3RyeV9mbXRfdmlkX291dF9tcGxhbmUoc3Ry dWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpj dHggPSBtdGtfanBlZ19maF90b19jdHgocHJpdik7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfZm10 ICpmbXQ7DQo+ID4gIA0KPiA+IC0JZm10ID0gbXRrX2pwZWdfZmluZF9mb3JtYXQoY3R4LCBmLT5m bXQucGl4X21wLnBpeGVsZm9ybWF0LA0KPiA+IC0JCQkJICAgTVRLX0pQRUdfRk1UX1RZUEVfT1VU UFVUKTsNCj4gPiArCWZtdCA9IG10a19qcGVnX2ZpbmRfZm9ybWF0KGYtPmZtdC5waXhfbXAucGl4 ZWxmb3JtYXQsDQo+ID4gKwkJCQkgICBNVEtfSlBFR19GTVRfRkxBR19ERUNfT1VUUFVUKTsNCj4g PiAgCWlmICghZm10KQ0KPiA+ICAJCWZtdCA9IGN0eC0+b3V0X3EuZm10Ow0KPiA+ICANCj4gPiBA QCAtMzEwLDE3ICs0NjMsMjEgQEAgc3RhdGljIGludCBtdGtfanBlZ19kZWNfdHJ5X2ZtdF92aWRf b3V0X21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgCQkgKGZtdC0+ Zm91cmNjID4+IDE2ICYgMHhmZiksDQo+ID4gIAkJIChmbXQtPmZvdXJjYyA+PiAyNCAmIDB4ZmYp KTsNCj4gPiAgDQo+ID4gLQlyZXR1cm4gbXRrX2pwZWdfdHJ5X2ZtdF9tcGxhbmUoZiwgZm10LCBj dHgsIE1US19KUEVHX0ZNVF9UWVBFX09VVFBVVCk7DQo+ID4gKwlpZiAoY3R4LT5zdGF0ZSAhPSBN VEtfSlBFR19JTklUKSB7DQo+ID4gKwkJbXRrX2pwZWdfZ19mbXRfdmlkX21wbGFuZShmaWxlLCBw cml2LCBmKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gDQo+IERpdHRvLg0KPiANCj4g PiArDQo+ID4gKwlyZXR1cm4gdmlkaW9jX3RyeV9mbXQoZiwgZm10KTsNCj4gPiAgfQ0KPiA+ICAN Cj4gPiAgc3RhdGljIGludCBtdGtfanBlZ19zX2ZtdF9tcGxhbmUoc3RydWN0IG10a19qcGVnX2N0 eCAqY3R4LA0KPiA+IC0JCQkJIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCj4gPiArCQkJCSBzdHJ1 Y3QgdjRsMl9mb3JtYXQgKmYsIHVuc2lnbmVkIGludCBmbXRfdHlwZSkNCj4gPiAgew0KPiA+ICAJ c3RydWN0IHZiMl9xdWV1ZSAqdnE7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfcV9kYXRhICpxX2Rh dGEgPSBOVUxMOw0KPiA+ICAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcCA9 ICZmLT5mbXQucGl4X21wOw0KPiA+ICAJc3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IGN0eC0+ anBlZzsNCj4gPiAtCXVuc2lnbmVkIGludCBmX3R5cGU7DQo+ID4gIAlpbnQgaTsNCj4gPiAgDQo+ ID4gIAl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPmZoLm0ybV9jdHgsIGYtPnR5cGUpOw0KPiA+ IEBAIC0zMzQsMTIgKzQ5MSwxMSBAQCBzdGF0aWMgaW50IG10a19qcGVnX3NfZm10X21wbGFuZShz dHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgsDQo+ID4gIAkJcmV0dXJuIC1FQlVTWTsNCj4gPiAgCX0N Cj4gPiAgDQo+ID4gLQlmX3R5cGUgPSBWNEwyX1RZUEVfSVNfT1VUUFVUKGYtPnR5cGUpID8NCj4g PiAtCQkJIE1US19KUEVHX0ZNVF9UWVBFX09VVFBVVCA6IE1US19KUEVHX0ZNVF9UWVBFX0NBUFRV UkU7DQo+ID4gLQ0KPiA+IC0JcV9kYXRhLT5mbXQgPSBtdGtfanBlZ19maW5kX2Zvcm1hdChjdHgs IHBpeF9tcC0+cGl4ZWxmb3JtYXQsIGZfdHlwZSk7DQo+ID4gKwlxX2RhdGEtPmZtdCA9IG10a19q cGVnX2ZpbmRfZm9ybWF0KHBpeF9tcC0+cGl4ZWxmb3JtYXQsIGZtdF90eXBlKTsNCj4gPiAgCXFf ZGF0YS0+dyA9IHBpeF9tcC0+d2lkdGg7DQo+ID4gIAlxX2RhdGEtPmggPSBwaXhfbXAtPmhlaWdo dDsNCj4gPiArCXFfZGF0YS0+Y3JvcF9yZWN0LndpZHRoID0gcGl4X21wLT53aWR0aDsNCj4gPiAr CXFfZGF0YS0+Y3JvcF9yZWN0LmhlaWdodCA9IHBpeF9tcC0+aGVpZ2h0Ow0KPiA+ICAJY3R4LT5j b2xvcnNwYWNlID0gcGl4X21wLT5jb2xvcnNwYWNlOw0KPiA+ICAJY3R4LT55Y2Jjcl9lbmMgPSBw aXhfbXAtPnljYmNyX2VuYzsNCj4gPiAgCWN0eC0+eGZlcl9mdW5jID0gcGl4X21wLT54ZmVyX2Z1 bmM7DQo+ID4gQEAgLTM2NSw2ICs1MjEsMTkgQEAgc3RhdGljIGludCBtdGtfanBlZ19zX2ZtdF9t cGxhbmUoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LA0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0N Cj4gPiAgDQo+ID4gK3N0YXRpYyBpbnQgbXRrX2pwZWdfZW5jX3NfZm10X3ZpZF9vdXRfbXBsYW5l KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICsJCQkJCSAgICAgc3RydWN0IHY0 bDJfZm9ybWF0ICpmKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9 IG10a19qcGVnX2VuY190cnlfZm10X3ZpZF9vdXRfbXBsYW5lKGZpbGUsIHByaXYsIGYpOw0KPiA+ ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldHVybiBtdGtf anBlZ19zX2ZtdF9tcGxhbmUobXRrX2pwZWdfZmhfdG9fY3R4KHByaXYpLCBmLA0KPiA+ICsJCQkJ ICAgICBNVEtfSlBFR19GTVRfRkxBR19FTkNfT1VUUFVUKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAg c3RhdGljIGludCBtdGtfanBlZ19kZWNfc19mbXRfdmlkX291dF9tcGxhbmUoc3RydWN0IGZpbGUg KmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gIAkJCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYp DQo+ID4gIHsNCj4gPiBAQCAtMzc0LDcgKzU0MywyMSBAQCBzdGF0aWMgaW50IG10a19qcGVnX2Rl Y19zX2ZtdF92aWRfb3V0X21wbGFuZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4g PiAgCWlmIChyZXQpDQo+ID4gIAkJcmV0dXJuIHJldDsNCj4gPiAgDQo+ID4gLQlyZXR1cm4gbXRr X2pwZWdfc19mbXRfbXBsYW5lKG10a19qcGVnX2ZoX3RvX2N0eChwcml2KSwgZik7DQo+ID4gKwly ZXR1cm4gbXRrX2pwZWdfc19mbXRfbXBsYW5lKG10a19qcGVnX2ZoX3RvX2N0eChwcml2KSwgZiwN Cj4gPiArCQkJCSAgICAgTVRLX0pQRUdfRk1UX0ZMQUdfREVDX09VVFBVVCk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX2pwZWdfZW5jX3NfZm10X3ZpZF9jYXBfbXBsYW5lKHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICsJCQkJCSAgICAgc3RydWN0IHY0bDJf Zm9ybWF0ICpmKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IG10 a19qcGVnX2VuY190cnlfZm10X3ZpZF9jYXBfbXBsYW5lKGZpbGUsIHByaXYsIGYpOw0KPiA+ICsJ aWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXJldHVybiBtdGtfanBl Z19zX2ZtdF9tcGxhbmUobXRrX2pwZWdfZmhfdG9fY3R4KHByaXYpLCBmLA0KPiA+ICsJCQkJICAg ICBNVEtfSlBFR19GTVRfRkxBR19FTkNfQ0FQVFVSRSk7DQo+ID4gIH0NCj4gPiAgDQo+ID4gIHN0 YXRpYyBpbnQgbXRrX2pwZWdfZGVjX3NfZm10X3ZpZF9jYXBfbXBsYW5lKHN0cnVjdCBmaWxlICpm aWxlLCB2b2lkICpwcml2LA0KPiA+IEBAIC0zODYsNyArNTY5LDggQEAgc3RhdGljIGludCBtdGtf anBlZ19kZWNfc19mbXRfdmlkX2NhcF9tcGxhbmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnBy aXYsDQo+ID4gIAlpZiAocmV0KQ0KPiA+ICAJCXJldHVybiByZXQ7DQo+ID4gIA0KPiA+IC0JcmV0 dXJuIG10a19qcGVnX3NfZm10X21wbGFuZShtdGtfanBlZ19maF90b19jdHgocHJpdiksIGYpOw0K PiA+ICsJcmV0dXJuIG10a19qcGVnX3NfZm10X21wbGFuZShtdGtfanBlZ19maF90b19jdHgocHJp diksIGYsDQo+ID4gKwkJCQkgICAgIE1US19KUEVHX0ZNVF9GTEFHX0RFQ19DQVBUVVJFKTsNCj4g PiAgfQ0KPiANCj4gSXMgaXQgcmVhbGx5IG5lY2Vzc2FyeSB0byBoYXZlIHNlcGFyYXRlIHZhcmlh bnRzIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMgZm9yDQo+IGRlY29kZXIgYW5kIGVuY29kZXI/DQo+ IA0KPiA+ICANCj4gPiAgc3RhdGljIHZvaWQgbXRrX2pwZWdfcXVldWVfc3JjX2NoZ19ldmVudChz dHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgpDQo+ID4gQEAgLTQxMSw2ICs1OTUsMjkgQEAgc3RhdGlj IGludCBtdGtfanBlZ19zdWJzY3JpYmVfZXZlbnQoc3RydWN0IHY0bDJfZmggKmZoLA0KPiA+ICAJ cmV0dXJuIHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQoZmgsIHN1Yik7DQo+ID4gIH0NCj4gPiAg DQo+ID4gK3N0YXRpYyBpbnQgbXRrX2pwZWdfZW5jX2dfc2VsZWN0aW9uKHN0cnVjdCBmaWxlICpm aWxlLCB2b2lkICpwcml2LA0KPiA+ICsJCQkJICAgIHN0cnVjdCB2NGwyX3NlbGVjdGlvbiAqcykN Cj4gPiArew0KPiA+ICsJc3RydWN0IG10a19qcGVnX2N0eCAqY3R4ID0gbXRrX2pwZWdfZmhfdG9f Y3R4KHByaXYpOw0KPiA+ICsNCj4gPiArCWlmIChzLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklE RU9fT1VUUFVUKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAo cy0+dGFyZ2V0KSB7DQo+ID4gKwljYXNlIFY0TDJfU0VMX1RHVF9DUk9QOg0KPiA+ICsJY2FzZSBW NEwyX1NFTF9UR1RfQ1JPUF9CT1VORFM6DQo+ID4gKwljYXNlIFY0TDJfU0VMX1RHVF9DUk9QX0RF RkFVTFQ6DQo+ID4gKwkJcy0+ci53aWR0aCA9IGN0eC0+b3V0X3EudzsNCj4gPiArCQlzLT5yLmhl aWdodCA9IGN0eC0+b3V0X3EuaDsNCj4gPiArCQlzLT5yLmxlZnQgPSAwOw0KPiA+ICsJCXMtPnIu dG9wID0gMDsNCj4gDQo+IElzIHRoaXMgcmVhbGx5IGNvcnJlY3Q/IFRoZSBmdW5jdGlvbiBzZWVt cyB0byBiZSByZXR1cm5pbmcgdGhlIGZ1bGwgZnJhbWUNCj4gc2l6ZSByZWdhcmRsZXNzIG9mIHRo ZSBzZWxlY3Rpb24gdGFyZ2V0LiBGb3IgQk9VTkRTIGFuZCBERUZBVUxUUyB0aGlzIHdvdWxkDQo+ IGJlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGluZGVlZCwgYnV0IENST1Agc2hvdWxkIHJldHVybiB0 aGUgYWN0aXZlIGNyb3ANCj4gcmVjdGFuZ2xlLCBhcyBzZXQgYnkgU19TRUxFQ1RJT04uDQo+IA0K PiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiArCX0NCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW50IG10 a19qcGVnX2RlY19nX3NlbGVjdGlvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4g PiAgCQkJCSAgICBzdHJ1Y3QgdjRsMl9zZWxlY3Rpb24gKnMpDQo+ID4gIHsNCj4gPiBAQCAtNDQw LDYgKzY0NywyOSBAQCBzdGF0aWMgaW50IG10a19qcGVnX2RlY19nX3NlbGVjdGlvbihzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4gIA0K PiA+ICtzdGF0aWMgaW50IG10a19qcGVnX2VuY19zX3NlbGVjdGlvbihzdHJ1Y3QgZmlsZSAqZmls ZSwgdm9pZCAqcHJpdiwNCj4gPiArCQkJCSAgICBzdHJ1Y3QgdjRsMl9zZWxlY3Rpb24gKnMpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCA9IG10a19qcGVnX2ZoX3RvX2N0 eChwcml2KTsNCj4gPiArDQo+ID4gKwlpZiAocy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVP X09VVFBVVCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKHMt PnRhcmdldCkgew0KPiA+ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUDoNCj4gPiArCQlzLT5yLmxl ZnQgPSAwOw0KPiA+ICsJCXMtPnIudG9wID0gMDsNCj4gPiArCQlzLT5yLndpZHRoID0gbWluKHMt PnIud2lkdGgsIGN0eC0+b3V0X3Eudyk7DQo+ID4gKwkJcy0+ci5oZWlnaHQgPSBtaW4ocy0+ci5o ZWlnaHQsIGN0eC0+b3V0X3EuaCk7DQo+ID4gKwkJY3R4LT5vdXRfcS5jcm9wX3JlY3QgPSBzLT5y Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3Rh dGljIGludCBtdGtfanBlZ19kZWNfc19zZWxlY3Rpb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQg KnByaXYsDQo+ID4gIAkJCQkgICAgc3RydWN0IHY0bDJfc2VsZWN0aW9uICpzKQ0KPiA+ICB7DQo+ ID4gQEAgLTQ4NCw2ICs3MTQsMzMgQEAgc3RhdGljIGludCBtdGtfanBlZ19xYnVmKHN0cnVjdCBm aWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikNCj4gPiAgCXJl dHVybiB2NGwyX20ybV9xYnVmKGZpbGUsIGZoLT5tMm1fY3R4LCBidWYpOw0KPiA+ICB9DQo+ID4g IA0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIG10a19qcGVnX2VuY19p b2N0bF9vcHMgPSB7DQo+ID4gKwkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAgICAgICAgID0gbXRr X2pwZWdfZW5jX3F1ZXJ5Y2FwLA0KPiA+ICsJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gbXRr X2pwZWdfZW5jX2VudW1fZm10X3ZpZF9jYXAsDQo+ID4gKwkudmlkaW9jX2VudW1fZm10X3ZpZF9v dXQJPSBtdGtfanBlZ19lbmNfZW51bV9mbXRfdmlkX291dCwNCj4gPiArCS52aWRpb2NfdHJ5X2Zt dF92aWRfY2FwX21wbGFuZQk9IG10a19qcGVnX2VuY190cnlfZm10X3ZpZF9jYXBfbXBsYW5lLA0K PiA+ICsJLnZpZGlvY190cnlfZm10X3ZpZF9vdXRfbXBsYW5lCT0gbXRrX2pwZWdfZW5jX3RyeV9m bXRfdmlkX291dF9tcGxhbmUsDQo+ID4gKwkudmlkaW9jX2dfZm10X3ZpZF9jYXBfbXBsYW5lICAg ID0gbXRrX2pwZWdfZ19mbXRfdmlkX21wbGFuZSwNCj4gPiArCS52aWRpb2NfZ19mbXRfdmlkX291 dF9tcGxhbmUgICAgPSBtdGtfanBlZ19nX2ZtdF92aWRfbXBsYW5lLA0KPiA+ICsJLnZpZGlvY19z X2ZtdF92aWRfY2FwX21wbGFuZSAgICA9IG10a19qcGVnX2VuY19zX2ZtdF92aWRfY2FwX21wbGFu ZSwNCj4gPiArCS52aWRpb2Nfc19mbXRfdmlkX291dF9tcGxhbmUgICAgPSBtdGtfanBlZ19lbmNf c19mbXRfdmlkX291dF9tcGxhbmUsDQo+ID4gKwkudmlkaW9jX3FidWYgICAgICAgICAgICAgICAg ICAgID0gbXRrX2pwZWdfcWJ1ZiwNCj4gDQo+IE5vdCBkaXJlY3RseSBhIGNvbW1lbnQgZm9yIHRo aXMgcGF0Y2gsIGJ1dCBzaW5jZSB0aGUgcHJldmlvdXMgcGF0Y2ggcmVtb3ZlZA0KPiB0aGUgTEFT VF9GUkFNRSBoYW5kbGluZywgd291bGRuJ3QgaXQgYmUgZW5vdWdoIHRvIGp1c3QgdXNlIHY0bDJf bTJtX3FidWYoKQ0KPiBhcyB0aGlzIGNhbGxiYWNrPw0KPiANCj4gW3NuaXBdDQo+ID4gK3N0YXRp YyB2b2lkIG10a19qcGVnX2VuY19idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHZi LT52YjJfcXVldWUpOw0KPiA+ICsJc3RydWN0IG10a19qcGVnX2RldiAqanBlZyA9IGN0eC0+anBl ZzsNCj4gPiArDQo+ID4gKwl2NGwyX2RiZygyLCBkZWJ1ZywgJmpwZWctPnY0bDJfZGV2LCAiKCVk KSBidWZfcSBpZD0lZCwgdmI9JXBcbiIsDQo+ID4gKwkJIHZiLT52YjJfcXVldWUtPnR5cGUsIHZi LT5pbmRleCwgdmIpOw0KPiA+ICsNCj4gPiArCXY0bDJfbTJtX2J1Zl9xdWV1ZShjdHgtPmZoLm0y bV9jdHgsIHRvX3ZiMl92NGwyX2J1ZmZlcih2YikpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0 aWMgdm9pZCBtdGtfanBlZ19kZWNfYnVmX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4g PiAgew0KPiA+ICAJc3RydWN0IG10a19qcGVnX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdih2 Yi0+dmIyX3F1ZXVlKTsNCj4gPiBAQCAtNjY0LDYgKzkzMiwxNSBAQCBzdGF0aWMgc3RydWN0IHZi Ml92NGwyX2J1ZmZlciAqbXRrX2pwZWdfYnVmX3JlbW92ZShzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpj dHgsDQo+ID4gIAkJcmV0dXJuIHY0bDJfbTJtX2RzdF9idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0 eCk7DQo+ID4gIH0NCj4gPiAgDQo+ID4gK3N0YXRpYyB2b2lkIG10a19qcGVnX2VuY19zdG9wX3N0 cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pw ZWdfY3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHEpOw0KPiA+ICsJc3RydWN0IHZiMl92NGwy X2J1ZmZlciAqdmI7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKCh2YiA9IG10a19qcGVnX2J1Zl9yZW1v dmUoY3R4LCBxLT50eXBlKSkpDQo+ID4gKwkJdjRsMl9tMm1fYnVmX2RvbmUodmIsIFZCMl9CVUZf U1RBVEVfRVJST1IpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgdm9pZCBtdGtfanBlZ19k ZWNfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqcSkNCj4gPiAgew0KPiA+ICAJc3Ry dWN0IG10a19qcGVnX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdihxKTsNCj4gPiBAQCAtNjk5 LDYgKzk3NiwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgbXRrX2pwZWdfZGVjX3Fv cHMgPSB7DQo+ID4gIAkuc3RvcF9zdHJlYW1pbmcgICAgID0gbXRrX2pwZWdfZGVjX3N0b3Bfc3Ry ZWFtaW5nLA0KPiA+ICB9Ow0KPiA+ICANCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3Bz IG10a19qcGVnX2VuY19xb3BzID0gew0KPiA+ICsJLnF1ZXVlX3NldHVwICAgICAgICA9IG10a19q cGVnX3F1ZXVlX3NldHVwLA0KPiA+ICsJLmJ1Zl9wcmVwYXJlICAgICAgICA9IG10a19qcGVnX2J1 Zl9wcmVwYXJlLA0KPiA+ICsJLmJ1Zl9xdWV1ZSAgICAgICAgICA9IG10a19qcGVnX2VuY19idWZf cXVldWUsDQo+ID4gKwkud2FpdF9wcmVwYXJlICAgICAgID0gdmIyX29wc193YWl0X3ByZXBhcmUs DQo+ID4gKwkud2FpdF9maW5pc2ggICAgICAgID0gdmIyX29wc193YWl0X2ZpbmlzaCwNCj4gPiAr CS5zdG9wX3N0cmVhbWluZyAgICAgPSBtdGtfanBlZ19lbmNfc3RvcF9zdHJlYW1pbmcsDQo+ID4g K307DQo+ID4gKw0KPiA+ICBzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZGVjX3NyYyhzdHJ1Y3Qg bXRrX2pwZWdfY3R4ICpjdHgsDQo+ID4gIAkJCQkgc3RydWN0IHZiMl9idWZmZXIgKnNyY19idWYs DQo+ID4gIAkJCQkgc3RydWN0IG10a19qcGVnX2JzICpicykNCj4gPiBAQCAtNzM2LDYgKzEwMjIs ODUgQEAgc3RhdGljIGludCBtdGtfanBlZ19zZXRfZGVjX2RzdChzdHJ1Y3QgbXRrX2pwZWdfY3R4 ICpjdHgsDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+ICANCj4gPiArc3RhdGljIHZvaWQg bXRrX2pwZWdfc2V0X2VuY19kc3Qoc3RydWN0IG10a19qcGVnX2N0eCAqY3R4LCB2b2lkIF9faW9t ZW0gKmJhc2UsDQo+ID4gKwkJCQkgc3RydWN0IHZiMl9idWZmZXIgKmRzdF9idWYsDQo+ID4gKwkJ CQkgc3RydWN0IG10a19qcGVnX2VuY19icyAqYnMpDQo+ID4gK3sNCj4gPiArCWJzLT5kbWFfYWRk ciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKGRzdF9idWYsIDApOw0KPiA+ICsJYnMt PmRtYV9hZGRyX29mZnNldCA9IGN0eC0+ZW5hYmxlX2V4aWYgPyBNVEtfSlBFR19NQVhfRVhJRl9T SVpFIDogMDsNCj4gPiArCWJzLT5kbWFfYWRkcl9vZmZzZXRtYXNrID0gYnMtPmRtYV9hZGRyICYg SlBFR19FTkNfRFNUX0FERFJfT0ZGU0VUX01BU0s7DQo+ID4gKwlicy0+c2l6ZSA9IHZiMl9wbGFu ZV9zaXplKGRzdF9idWYsIDApOw0KPiANCj4gV2UncmUgY29tcHV0aW5nIHRoZXNlIHZhbHVlcyBh bmQgdGhlbiB3cml0aW5nIHRvIHRoZSBoYXJkd2FyZSBzdHJhaWdodGF3YXkuDQo+IERvIHdlIG5l ZWQgdG8gc2F2ZSB0aGVzZSB2YWx1ZXMgdG8gdGhlIGJzIHN0cnVjdD8gSWYgbm8sIGRvIHdlIG5l ZWQgdGhlIGJzDQo+IHN0cnVjdCBhdCBhbGw/DQo+IA0KPiA+ICsNCj4gPiArCW10a19qcGVnX2Vu Y19zZXRfZHN0X2FkZHIoYmFzZSwgYnMtPmRtYV9hZGRyLCBicy0+c2l6ZSwNCj4gPiArCQkJCSAg YnMtPmRtYV9hZGRyX29mZnNldCwNCj4gPiArCQkJCSAgYnMtPmRtYV9hZGRyX29mZnNldG1hc2sp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZW5jX3NyYyhz dHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHgsIHZvaWQgX19pb21lbSAqYmFzZSwNCj4gPiArCQkJCSBz dHJ1Y3QgdmIyX2J1ZmZlciAqc3JjX2J1ZikNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4gKwlk bWFfYWRkcl90CWRtYV9hZGRyOw0KPiANCj4gbml0OiBPbmx5IG9uZSBzcGFjZSBzaG91bGQgYmUg YmV0d2VlbiB2YXJpYWJsZSB0eXBlIGFuZCBuYW1lLg0KPiANCj4gPiArDQo+ID4gKwltdGtfanBl Z19lbmNfc2V0X2ltZ19zaXplKGJhc2UsIGN0eC0+b3V0X3EuY3JvcF9yZWN0LndpZHRoLA0KPiA+ ICsJCQkJICBjdHgtPm91dF9xLmNyb3BfcmVjdC5oZWlnaHQpOw0KPiA+ICsJbXRrX2pwZWdfZW5j X3NldF9ibGtfbnVtKGJhc2UsIGN0eC0+b3V0X3EuZm10LT5mb3VyY2MsDQo+ID4gKwkJCQkgY3R4 LT5vdXRfcS5jcm9wX3JlY3Qud2lkdGgsDQo+ID4gKwkJCQkgY3R4LT5vdXRfcS5jcm9wX3JlY3Qu aGVpZ2h0KTsNCj4gPiArCW10a19qcGVnX2VuY19zZXRfc3RyaWRlKGJhc2UsIGN0eC0+b3V0X3Eu Zm10LT5mb3VyY2MsIGN0eC0+b3V0X3EudywNCj4gPiArCQkJCWN0eC0+b3V0X3EuaCwgY3R4LT5v dXRfcS5ieXRlc3BlcmxpbmVbMF0pOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBzcmNf YnVmLT5udW1fcGxhbmVzOyBpKyspIHsNCj4gPiArCQlkbWFfYWRkciA9IHZiMl9kbWFfY29udGln X3BsYW5lX2RtYV9hZGRyKHNyY19idWYsIGkpICsNCj4gPiArCQkJICAgc3JjX2J1Zi0+cGxhbmVz W2ldLmRhdGFfb2Zmc2V0Ow0KPiA+ICsJCW10a19qcGVnX2VuY19zZXRfc3JjX2FkZHIoYmFzZSwg ZG1hX2FkZHIsIGkpOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBt dGtfanBlZ19lbmNfZGV2aWNlX3J1bih2b2lkICpwcml2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg bXRrX2pwZWdfY3R4ICpjdHggPSBwcml2Ow0KPiA+ICsJc3RydWN0IG10a19qcGVnX2RldiAqanBl ZyA9IGN0eC0+anBlZzsNCj4gPiArCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnNyY19idWYsICpk c3RfYnVmOw0KPiA+ICsJZW51bSB2YjJfYnVmZmVyX3N0YXRlIGJ1Zl9zdGF0ZSA9IFZCMl9CVUZf U1RBVEVfRVJST1I7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsJc3RydWN0IG10 a19qcGVnX3NyY19idWYgKmpwZWdfc3JjX2J1ZjsNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19lbmNf YnMgZW5jX2JzOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlzcmNfYnVmID0gdjRsMl9t Mm1fbmV4dF9zcmNfYnVmKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gKwlkc3RfYnVmID0gdjRsMl9t Mm1fbmV4dF9kc3RfYnVmKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gKwlqcGVnX3NyY19idWYgPSBt dGtfanBlZ192YjJfdG9fc3JjYnVmKCZzcmNfYnVmLT52YjJfYnVmKTsNCj4gPiArDQo+ID4gKwly ZXQgPSBwbV9ydW50aW1lX2dldF9zeW5jKGpwZWctPmRldik7DQo+ID4gKwlpZiAocmV0IDwgMCkN Cj4gPiArCQlnb3RvIGVuY19lbmQ7DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmpw ZWctPmh3X2xvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogUmVzZXR0aW5n IHRoZSBoYXJkd2FyZSBldmVyeSBmcmFtZSBpcyB0byBlbnN1cmUgdGhhdCBhbGwgdGhlDQo+ID4g KwkgKiByZWdpc3RlcnMgYXJlIGNsZWFyZWQuIFRoaXMgaXMgYSBoYXJkd2FyZSByZXF1aXJlbWVu dC4NCj4gPiArCSAqLw0KPiA+ICsJbXRrX2pwZWdfZW5jX3Jlc2V0KGpwZWctPnJlZ19iYXNlKTsN Cj4gPiArDQo+ID4gKwltdGtfanBlZ19zZXRfZW5jX2RzdChjdHgsIGpwZWctPnJlZ19iYXNlLCAm ZHN0X2J1Zi0+dmIyX2J1ZiwgJmVuY19icyk7DQo+ID4gKwltdGtfanBlZ19zZXRfZW5jX3NyYyhj dHgsIGpwZWctPnJlZ19iYXNlLCAmc3JjX2J1Zi0+dmIyX2J1Zik7DQo+ID4gKwltdGtfanBlZ19l bmNfc2V0X2NvbmZpZyhqcGVnLT5yZWdfYmFzZSwgY3R4LT5vdXRfcS5mbXQtPmh3X2Zvcm1hdCwN Cj4gPiArCQkJCWN0eC0+ZW5hYmxlX2V4aWYsIGN0eC0+ZW5jX3F1YWxpdHksDQo+ID4gKwkJCQlj dHgtPnJlc3RhcnRfaW50ZXJ2YWwpOw0KPiA+ICsJbXRrX2pwZWdfZW5jX3N0YXJ0KGpwZWctPnJl Z19iYXNlKTsNCj4gDQo+IENvdWxkIHdlIGp1c3QgbW92ZSB0aGUgYWJvdmUgNSBmdW5jdGlvbnMg aW50byBvbmUgZnVuY3Rpb24gaW5zaWRlDQo+IG10a19qcGVnX2VuY19ody5jIHRoYXQgdGFrZXMg bXRrX2pwZWdfZGV2IHBvaW50ZXIgYXMgaXRzIGFyZ3VtZW50LCBsZXQncw0KPiBzYXkgbXRrX2pw ZWdfZW5jX2h3X3J1bigpIGFuZCBzaW1wbHkgcHJvZ3JhbSBhbGwgdGhlIGRhdGEgdG8gdGhlIHJl Z2lzdGVycw0KPiBkaXJlY3RseSwgd2l0aG91dCB0aGUgZXh0cmEgbGV2ZWwgb2YgYWJzdHJhY3Rp b25zPw0KSSBjYW4gbW92ZSB0aGUgNSBmdW5jdGlvbnMgaW50byBvbmUgZnVuY3Rpb24obXRrX2pw ZWdfZW5jX2h3X3J1bigpKSwgYnV0DQp0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdmVyeSBsb25nLCBi ZWNhdXNlIGl0IGNvbnRhaW5zIGNvbXB1dGF0aW9uIGNvZGUNCnN1Y2ggYXMgc2V0dGluZyBkc3Qg YWRkciwgYmxrX251bSwgcXVhbGl0eS4NCkluIHY0LCB5b3UgaGF2ZSBhZHZpY2VkIHRoZSBmb2xs b3dpbmcgYXJjaGl0ZWN0dXJlOg0KSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgbW9kZWwsIGFzIHVz ZWQgYnkgbWFueSBvdGhlciBkcml2ZXJzOg0KDQptdGtfanBlZ19lbmNfc2V0X3NyYygpDQp7DQog ICAgICAgIC8vIFNldCBhbnkgcmVnaXN0ZXJzIHJlbGF0ZWQgdG8gc291cmNlIGZvcm1hdCBhbmQg YnVmZmVyDQp9DQoNCm10a19qcGVnX2VuY19zZXRfZHN0KCkNCnsNCiAgICAgICAgLy8gU2V0IGFu eSByZWdpc3RlcnMgcmVsYXRlZCB0byBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIGJ1ZmZlcg0KfQ0K DQptdGtfanBlZ19lbmNfc2V0X3BhcmFtcygpDQp7DQogICAgICAgIC8vIFNldCBhbnkgcmVnaXN0 ZXJzIHJlbGF0ZWQgdG8gYWRkaXRpb25hbCBlbmNvZGluZyBwYXJhbWV0ZXJzDQp9DQoNCm10a19q cGVnX2VuY19kZXZpY2VfcnVuKGVuYywgY3R4KQ0Kew0KICAgICAgICBtdGtfanBlZ19lbmNfc2V0 X3NyYyhlbmMsIHNyY19idWYsIHNyY19mbXQpOw0KICAgICAgICBtdGtfanBlZ19lbmNfc2V0X2Rz dChlbmMsIGRzdF9idWYsIGRzdF9mbXQpOw0KICAgICAgICBtdGtfanBlZ19lbmNfc2V0X3BhcmFt cyhlbmMsIGN0eCk7DQogICAgICAgIC8vIFRyaWdnZXIgdGhlIGhhcmR3YXJlIHJ1bg0KfQ0KSSB0 aGluayB0aGF0IHRoaXMgYXJjaGl0ZWN0dXJlIGlzIG1vcmUgY2xlYXIobXRrX2pwZWdfZW5jX3Nl dF9jb25maWcgaXMNCmVxdWl2YWxlbnQgdG8gbXRrX2pwZWdfZW5jX3NldF9wYXJhbXMpLg0KU2hv dWxkIEkga2VlcCB0aGUgb3JpZ2luYWwgYXJjaGl0ZWN0dXJlIG9yIG1vdmUgNSBmdW5jdGlvbnMg aW50bw0KbXRrX2pwZWdfZW5jX2h3X3J1bj8NCj4gDQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZqcGVnLT5od19sb2NrLCBmbGFncyk7DQo+ID4gKwlyZXR1cm47DQo+ID4gKw0KPiA+ICtl bmNfZW5kOg0KPiA+ICsJdjRsMl9tMm1fc3JjX2J1Zl9yZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsN Cj4gPiArCXY0bDJfbTJtX2RzdF9idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gKwl2 NGwyX20ybV9idWZfZG9uZShzcmNfYnVmLCBidWZfc3RhdGUpOw0KPiA+ICsJdjRsMl9tMm1fYnVm X2RvbmUoZHN0X2J1ZiwgYnVmX3N0YXRlKTsNCj4gPiArCXY0bDJfbTJtX2pvYl9maW5pc2goanBl Zy0+bTJtX2RldiwgY3R4LT5maC5tMm1fY3R4KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgc3RhdGlj IHZvaWQgbXRrX2pwZWdfZGVjX2RldmljZV9ydW4odm9pZCAqcHJpdikNCj4gPiAgew0KPiA+ICAJ c3RydWN0IG10a19qcGVnX2N0eCAqY3R4ID0gcHJpdjsNCj4gPiBAQCAtNzg1LDYgKzExNTAsMTEg QEAgc3RhdGljIHZvaWQgbXRrX2pwZWdfZGVjX2RldmljZV9ydW4odm9pZCAqcHJpdikNCj4gPiAg CXY0bDJfbTJtX2pvYl9maW5pc2goanBlZy0+bTJtX2RldiwgY3R4LT5maC5tMm1fY3R4KTsNCj4g PiAgfQ0KPiA+ICANCj4gPiArc3RhdGljIGludCBtdGtfanBlZ19lbmNfam9iX3JlYWR5KHZvaWQg KnByaXYpDQo+ID4gK3sNCj4gPiArCQlyZXR1cm4gMTsNCj4gPiArfQ0KPiA+ICsNCj4gDQo+IFRo ZSBjYWxsYmFjayBpcyBvcHRpb25hbCwgc28gY2FuIGJlIGp1c3QgcmVtb3ZlZCBpZiBpdCBhbHdh eXMgcmV0dXJucyAxLg0KPiANCj4gPiAgc3RhdGljIGludCBtdGtfanBlZ19kZWNfam9iX3JlYWR5 KHZvaWQgKnByaXYpDQo+ID4gIHsNCj4gPiAgCXN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCA9IHBy aXY7DQo+ID4gQEAgLTc5Miw2ICsxMTYyLDExIEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfZGVjX2pv Yl9yZWFkeSh2b2lkICpwcml2KQ0KPiA+ICAJcmV0dXJuIChjdHgtPnN0YXRlID09IE1US19KUEVH X1JVTk5JTkcpID8gMSA6IDA7DQo+ID4gIH0NCj4gPiAgDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9tMm1fb3BzIG10a19qcGVnX2VuY19tMm1fb3BzID0gew0KPiA+ICsJLmRldmljZV9y dW4gPSBtdGtfanBlZ19lbmNfZGV2aWNlX3J1biwNCj4gPiArCS5qb2JfcmVhZHkgID0gbXRrX2pw ZWdfZW5jX2pvYl9yZWFkeSwNCj4gPiArfTsNCj4gPiArDQo+ID4gIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgdjRsMl9tMm1fb3BzIG10a19qcGVnX2RlY19tMm1fb3BzID0gew0KPiA+ICAJLmRldmljZV9y dW4gPSBtdGtfanBlZ19kZWNfZGV2aWNlX3J1biwNCj4gPiAgCS5qb2JfcmVhZHkgID0gbXRrX2pw ZWdfZGVjX2pvYl9yZWFkeSwNCj4gPiBAQCAtODMwLDI0ICsxMjA1LDEwOSBAQCBzdGF0aWMgaW50 IG10a19qcGVnX2RlY19xdWV1ZV9pbml0KHZvaWQgKnByaXYsIHN0cnVjdCB2YjJfcXVldWUgKnNy Y192cSwNCj4gPiAgCXJldHVybiByZXQ7DQo+ID4gIH0NCj4gPiAgDQo+ID4gLXN0YXRpYyB2b2lk IG10a19qcGVnX2Nsa19vbihzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnKQ0KPiA+ICtzdGF0aWMg aW50IG10a19qcGVnX2VuY19xdWV1ZV9pbml0KHZvaWQgKnByaXYsIHN0cnVjdCB2YjJfcXVldWUg KnNyY192cSwNCj4gPiArCQkJCSAgIHN0cnVjdCB2YjJfcXVldWUgKmRzdF92cSkNCj4gPiAgew0K PiA+ICsJc3RydWN0IG10a19qcGVnX2N0eCAqY3R4ID0gcHJpdjsNCj4gPiAgCWludCByZXQ7DQo+ ID4gIA0KPiA+ICsJc3JjX3ZxLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBM QU5FOw0KPiA+ICsJc3JjX3ZxLT5pb19tb2RlcyA9IFZCMl9ETUFCVUYgfCBWQjJfTU1BUDsNCj4g PiArCXNyY192cS0+ZHJ2X3ByaXYgPSBjdHg7DQo+ID4gKwlzcmNfdnEtPmJ1Zl9zdHJ1Y3Rfc2l6 ZSA9IHNpemVvZihzdHJ1Y3QgbXRrX2pwZWdfc3JjX2J1Zik7DQo+ID4gKwlzcmNfdnEtPm9wcyA9 ICZtdGtfanBlZ19lbmNfcW9wczsNCj4gPiArCXNyY192cS0+bWVtX29wcyA9ICZ2YjJfZG1hX2Nv bnRpZ19tZW1vcHM7DQo+ID4gKwlzcmNfdnEtPnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZM QUdfVElNRVNUQU1QX0NPUFk7DQo+ID4gKwlzcmNfdnEtPmxvY2sgPSAmY3R4LT5qcGVnLT5sb2Nr Ow0KPiA+ICsJc3JjX3ZxLT5kZXYgPSBjdHgtPmpwZWctPmRldjsNCj4gPiArCXJldCA9IHZiMl9x dWV1ZV9pbml0KHNyY192cSk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKw0KPiA+ICsJZHN0X3ZxLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01Q TEFORTsNCj4gPiArCWRzdF92cS0+aW9fbW9kZXMgPSBWQjJfRE1BQlVGIHwgVkIyX01NQVA7DQo+ ID4gKwlkc3RfdnEtPmRydl9wcml2ID0gY3R4Ow0KPiA+ICsJZHN0X3ZxLT5idWZfc3RydWN0X3Np emUgPSBzaXplb2Yoc3RydWN0IHY0bDJfbTJtX2J1ZmZlcik7DQo+ID4gKwlkc3RfdnEtPm9wcyA9 ICZtdGtfanBlZ19lbmNfcW9wczsNCj4gPiArCWRzdF92cS0+bWVtX29wcyA9ICZ2YjJfZG1hX2Nv bnRpZ19tZW1vcHM7DQo+ID4gKwlkc3RfdnEtPnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZM QUdfVElNRVNUQU1QX0NPUFk7DQo+ID4gKwlkc3RfdnEtPmxvY2sgPSAmY3R4LT5qcGVnLT5sb2Nr Ow0KPiA+ICsJZHN0X3ZxLT5kZXYgPSBjdHgtPmpwZWctPmRldjsNCj4gPiArCXJldCA9IHZiMl9x dWV1ZV9pbml0KGRzdF92cSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiAN Cj4gVGhpcyBvbmx5IGRpZmZlcnMgaW4gIm9wcyIgZnJvbSB0aGUgZGVjb2RlciBpbXBsZW1lbnRh dGlvbi4gUGVyaGFwcw0KPiBib3RoIGZ1bmN0aW9ucyBjb3VsZCBiZSBtZXJnZWQ/DQo+IA0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX2pwZWdfY2xrX29uKHN0cnVjdCBtdGtfanBlZ19kZXYg KmpwZWcpDQo+ID4gK3sNCj4gPiArCWludCByZXQsIGk7DQo+ID4gKw0KPiA+ICAJcmV0ID0gbXRr X3NtaV9sYXJiX2dldChqcGVnLT5sYXJiKTsNCj4gPiAgCWlmIChyZXQpDQo+ID4gIAkJZGV2X2Vy cihqcGVnLT5kZXYsICJtdGtfc21pX2xhcmJfZ2V0IGxhcmJ2ZGVjIGZhaWwgJWRcbiIsIHJldCk7 DQo+ID4gLQljbGtfcHJlcGFyZV9lbmFibGUoanBlZy0+Y2xrX2pkZWNfc21pKTsNCj4gPiAtCWNs a19wcmVwYXJlX2VuYWJsZShqcGVnLT5jbGtfamRlYyk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0g MDsgaSA8IGpwZWctPnZhcmlhbnQtPm51bV9jbG9ja3M7IGkrKykgew0KPiA+ICsJCXJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShqcGVnLT5jbG9ja3NbaV0pOw0KPiANCj4gSW5zdGVhZCBvZiBhbiBv cGVuIGNvZGVkIGxvb3AsIGNvdWxkIHRoZSBjbGtfYnVsa18qKCkgaGVscGVycyBiZSB1c2VkDQo+ IGluc3RlYWQ/IChMb29rIGZvciBkZXZtX2Nsa19idWxrX2dldCgpIGFuZCBkZXZtX2Nsa19idWxr X3ByZXBhcmVfZW5hYmxlKCkuKQ0KPiANCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCXdoaWxl ICgtLWkgPj0gMCkNCj4gPiArCQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShqcGVnLT5jbG9ja3Nb aV0pOw0KPiANCj4gbml0OiBUaGUgdHlwaWNhbCBjb252ZW50aW9uIGlzIHRvIGRvIGVycm9yIGhh bmRsaW5nIGluIGFuIGVycm9yIHBhdGggb24gdGhlDQo+IGJvdHRvbSBvZiB0aGUgZnVuY3Rpb24u DQo+IA0KPiBBbHNvLCBpdCB3b3VsZCBiZSBuaWNlIHRvIHByaW50IGFuIGVycm9yIG1lc3NhZ2Uu DQo+IA0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiAgfQ0KPiA+ICANCj4gPiAgc3RhdGljIHZvaWQg bXRrX2pwZWdfY2xrX29mZihzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnKQ0KPiA+ICB7DQo+ID4g LQljbGtfZGlzYWJsZV91bnByZXBhcmUoanBlZy0+Y2xrX2pkZWMpOw0KPiA+IC0JY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGpwZWctPmNsa19qZGVjX3NtaSk7DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ ID4gKwlmb3IgKGkgPSBqcGVnLT52YXJpYW50LT5udW1fY2xvY2tzIC0gMTsgaSA+PSAwOyBpLS0p DQo+ID4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGpwZWctPmNsb2Nrc1tpXSk7DQo+IA0KPiBE aXR0by4NCj4gDQo+ID4gIAltdGtfc21pX2xhcmJfcHV0KGpwZWctPmxhcmIpOw0KPiA+ICB9DQo+ ID4gIA0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2pwZWdfZW5jX2lycShpbnQgaXJxLCB2 b2lkICpwcml2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpqcGVnID0gcHJp djsNCj4gPiArCXN0cnVjdCBtdGtfanBlZ19jdHggKmN0eDsNCj4gPiArCXN0cnVjdCB2YjJfdjRs Ml9idWZmZXIgKnNyY19idWYsICpkc3RfYnVmOw0KPiA+ICsJc3RydWN0IG10a19qcGVnX3NyY19i dWYgKmpwZWdfc3JjX2J1ZjsNCj4gPiArCWVudW0gdmIyX2J1ZmZlcl9zdGF0ZSBidWZfc3RhdGUg PSBWQjJfQlVGX1NUQVRFX0VSUk9SOw0KPiA+ICsJdTMyIGVuY19pcnFfcmV0Ow0KPiA+ICsJdTMy IGVuY19yZXQsIHJlc3VsdF9zaXplOw0KPiA+ICsNCj4gPiArCWN0eCA9IHY0bDJfbTJtX2dldF9j dXJyX3ByaXYoanBlZy0+bTJtX2Rldik7DQo+ID4gKwlpZiAoIWN0eCkgew0KPiA+ICsJCXY0bDJf ZXJyKCZqcGVnLT52NGwyX2RldiwgIkNvbnRleHQgaXMgTlVMTFxuIik7DQo+ID4gKwkJcmV0dXJu IElSUV9IQU5ETEVEOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXNyY19idWYgPSB2NGwyX20ybV9z cmNfYnVmX3JlbW92ZShjdHgtPmZoLm0ybV9jdHgpOw0KPiA+ICsJZHN0X2J1ZiA9IHY0bDJfbTJt X2RzdF9idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gKwlqcGVnX3NyY19idWYgPSBt dGtfanBlZ192YjJfdG9fc3JjYnVmKCZzcmNfYnVmLT52YjJfYnVmKTsNCj4gPiArDQo+ID4gKwll bmNfcmV0ID0gbXRrX2pwZWdfZW5jX2dldF9hbmRfY2xlYXJfaW50X3N0YXR1cyhqcGVnLT5yZWdf YmFzZSk7DQo+IA0KPiBXZSBzaG91bGQgY2hlY2sgdGhlIGludGVycnVwdCBzdGF0dXMgYXQgdGhl IGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24gYW5kDQo+IHJldHVybiBJUlFfTk9ORSBpZiB0aGVy ZSB3YXNuJ3QgYW55IGZsYWcgc2V0Lg0KPiANCj4gPiArCWVuY19pcnFfcmV0ID0gbXRrX2pwZWdf ZW5jX2VudW1fcmVzdWx0KGpwZWctPnJlZ19iYXNlLCBlbmNfcmV0KTsNCj4gPiArDQo+ID4gKwlp ZiAoZW5jX2lycV9yZXQgPj0gTVRLX0pQRUdfRU5DX1JFU1VMVF9TVEFMTCkNCj4gPiArCQltdGtf anBlZ19lbmNfcmVzZXQoanBlZy0+cmVnX2Jhc2UpOw0KPiA+ICsNCj4gPiArCWlmIChlbmNfaXJx X3JldCAhPSBNVEtfSlBFR19FTkNfUkVTVUxUX0RPTkUpIHsNCj4gPiArCQlkZXZfZXJyKGpwZWct PmRldiwgImVuY29kZSBmYWlsZWRcbiIpOw0KPiA+ICsJCWdvdG8gZW5jX2VuZDsNCj4gPiArCX0N Cj4gDQo+IEFzIEkgc3VnZ2VzdGVkIGJlZm9yZSwgaXQgd291bGQgaGF2ZSBiZWVuIG11Y2ggbW9y ZSBjbGVhciBpZiB0aGUgaW50ZXJydXB0DQo+IHN0YXR1cyBiaXRzIHdlcmUganVzdCBkaXJlY3Rs eSByZWFkIGFuZCBjaGVja2VkIGluIHRoaXMgZnVuY3Rpb24sIHdpdGhvdXQNCj4gaW50cm9kdWNp bmcgdGhlIGFkZGl0aW9uYWwgYWJzdHJhY3Rpb24uDQo+IA0KPiA+ICsNCj4gPiArCXJlc3VsdF9z aXplID0gbXRrX2pwZWdfZW5jX2dldF9maWxlX3NpemUoanBlZy0+cmVnX2Jhc2UpOw0KPiA+ICsJ dmIyX3NldF9wbGFuZV9wYXlsb2FkKCZkc3RfYnVmLT52YjJfYnVmLCAwLCByZXN1bHRfc2l6ZSk7 DQo+ID4gKw0KPiA+ICsJYnVmX3N0YXRlID0gVkIyX0JVRl9TVEFURV9ET05FOw0KPiA+ICsNCj4g PiArZW5jX2VuZDoNCj4gPiArCXY0bDJfbTJtX2J1Zl9kb25lKHNyY19idWYsIGJ1Zl9zdGF0ZSk7 DQo+ID4gKwl2NGwyX20ybV9idWZfZG9uZShkc3RfYnVmLCBidWZfc3RhdGUpOw0KPiA+ICsJdjRs Ml9tMm1fam9iX2ZpbmlzaChqcGVnLT5tMm1fZGV2LCBjdHgtPmZoLm0ybV9jdHgpOw0KPiA+ICsJ cG1fcnVudGltZV9wdXQoY3R4LT5qcGVnLT5kZXYpOw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVE Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2pwZWdfZGVjX2ly cShpbnQgaXJxLCB2b2lkICpwcml2KQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgbXRrX2pwZWdfZGV2 ICpqcGVnID0gcHJpdjsNCj4gPiBAQCAtODkzLDM2ICsxMzUzLDEzMCBAQCBzdGF0aWMgaXJxcmV0 dXJuX3QgbXRrX2pwZWdfZGVjX2lycShpbnQgaXJxLCB2b2lkICpwcml2KQ0KPiA+ICAJcmV0dXJu IElSUV9IQU5ETEVEOw0KPiA+ICB9DQo+ID4gIA0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfanBlZ19z ZXRfZW5jX2RlZmF1bHRfcGFyYW1zKHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCkNCj4gPiArew0K PiA+ICsJc3RydWN0IG10a19qcGVnX3FfZGF0YSAqcSA9ICZjdHgtPm91dF9xOw0KPiA+ICsJc3Ry dWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcDsNCj4gPiArDQo+ID4gKwlwaXhfbXAg PSBrbWFsbG9jKHNpemVvZigqcGl4X21wKSwgR0ZQX0tFUk5FTCk7DQo+IA0KPiBEbyB3ZSBuZWVk IHRvIGFsbG9jYXRlIHRoaXMgcGl4X21wPyBDb3VsZCB3ZSBpbnN0ZWFkIGp1c3QgZW1iZWQgaXQg aW5zaWRlDQo+IGN0eD8NCj4gDQo+IEFsc28sIHRoaXMgaXMgYWN0dWFsbHkgYSBtZW1vcnkgbGVh aywgYmVjYXVzZSBJIGRvbid0IHNlZSB0aGlzIHN0cnVjdHVyZQ0KPiBzYXZlZCBhbnl3aGVyZSBv ciBmcmVlZC4NCj4gDQo+ID4gKw0KPiA+ICsJY3R4LT5maC5jdHJsX2hhbmRsZXIgPSAmY3R4LT5j dHJsX2hkbDsNCj4gPiArCWN0eC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLA0K PiA+ICsJY3R4LT55Y2Jjcl9lbmMgPSBWNEwyX1lDQkNSX0VOQ19ERUZBVUxUOw0KPiA+ICsJY3R4 LT5xdWFudGl6YXRpb24gPSBWNEwyX1FVQU5USVpBVElPTl9ERUZBVUxUOw0KPiA+ICsJY3R4LT54 ZmVyX2Z1bmMgPSBWNEwyX1hGRVJfRlVOQ19ERUZBVUxUOw0KPiANCj4gU2luY2Ugd2UgYWxyZWFk eSBoYXZlIGEgdjRsMl9waXhfZm9ybWF0X21wbGFuZSBzdHJ1Y3Qgd2hpY2ggaGFzIGZpZWxkcyBm b3INCj4gdGhlIGFib3ZlIDQgdmFsdWVzLCBjb3VsZCB3ZSBqdXN0IHN0b3JlIHRoZW0gdGhlcmU/ DQo+IA0KPiBBbHNvLCBJIGRvbid0IHNlZSB0aGlzIGRyaXZlciBoYW5kbGluZyB0aGUgY29sb3Jz cGFjZXMgaW4gYW55IHdheSwgYnV0IGl0DQo+IHNlZW1zIHRvIGFsbG93IGNoYW5naW5nIHRoZW0g ZnJvbSB0aGUgdXNlcnNwYWNlLiBUaGlzIGlzIGluY29ycmVjdCwgYmVjYXVzZQ0KPiB0aGUgdXNl cnNwYWNlIGhhcyBubyB3YXkgdG8ga25vdyB0aGF0IHRoZSBjb2xvcnNwYWNlIGlzIG5vdCBoYW5k bGVkLg0KPiBJbnN0ZWFkLCB0aGUgdHJ5X2ZtdCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWx3YXlz IG92ZXJyaWRlIHRoZQ0KPiB1c2Vyc3BhY2UtcHJvdmlkZWQgY29sb3JzcGFjZSBjb25maWd1cmF0 aW9uIHdpdGggdGhlIG9uZXMgdGhhdCB0aGUgZHJpdmVyDQo+IGFzc3VtZXMuDQo+IA0KPiA+ICsJ cGl4X21wLT53aWR0aCA9IE1US19KUEVHX01JTl9XSURUSDsNCj4gPiArCXBpeF9tcC0+aGVpZ2h0 ID0gTVRLX0pQRUdfTUlOX0hFSUdIVDsNCj4gPiArDQo+ID4gKwlxLT5mbXQgPSBtdGtfanBlZ19m aW5kX2Zvcm1hdChWNEwyX1BJWF9GTVRfWVVZViwNCj4gPiArCQkJCSAgICAgIE1US19KUEVHX0ZN VF9GTEFHX0VOQ19PVVRQVVQpOw0KPiA+ICsJdmlkaW9jX3RyeV9mbXQoY29udGFpbmVyX29mKHBp eF9tcCwgc3RydWN0IHY0bDJfZm9ybWF0LA0KPiA+ICsJCQkJICAgIGZtdC5waXhfbXApLCBxLT5m bXQpOw0KPiA+ICsJcS0+dyA9IHBpeF9tcC0+d2lkdGg7DQo+ID4gKwlxLT5oID0gcGl4X21wLT5o ZWlnaHQ7DQo+ID4gKwlxLT5jcm9wX3JlY3Qud2lkdGggPSBwaXhfbXAtPndpZHRoOw0KPiA+ICsJ cS0+Y3JvcF9yZWN0LmhlaWdodCA9IHBpeF9tcC0+aGVpZ2h0Ow0KPiA+ICsJcS0+c2l6ZWltYWdl WzBdID0gcGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlOw0KPiA+ICsJcS0+Ynl0ZXNwZXJs aW5lWzBdID0gcGl4X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lOw0KPiANCj4gQWN0dWFs bHksIGRvIHdlIG5lZWQgdGhpcyBjdXN0b20gbXRrX2pwZWdfcV9kYXRhIHN0cnVjdD8gV2h5IGNv dWxkbid0IHdlDQo+IGp1c3Qga2VlcCB0aGUgc2FtZSB2YWx1ZXMgaW5zaWRlIHRoZSBzdGFuZGFy ZCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lDQo+IHN0cnVjdD8NCkkgdGhpbmsgdGhhdCB3ZSBuZWVk IG10a19qcGVnX3FfZGF0YSBzdHJ1Y3QuSWYgd2UgZGVsZXRlIGl0LCBob3cgY2FuIHdlDQprbm93 IHRoZXNlIHZhbHVlcyh3LCBoLCBzaXplaW1hZ2UsIGJ5dGVzcGVybGluZSwgbXRrX2pwZWdfZm10 KSBiZWxvbmcgdG8NCm91dHB1dCBvciBjYXB0dXJlKG91dHB1dCBhbmQgY2FwdHVyZSdzIHNpemVp bWFnZXMgYXJlIGRpZmZlcmVudCwgd2lkdGgNCmFuZCBoZWlnaHQgYXJlIGRpZmZlcm50IHRvbyBm b3IganBlZyBkZWMgKT9XZSBoYXZlDQpzX2ZtdF92aWRfb3V0X21wbGFuZS9jYXBfbXBsYW5lIGZ1 bmN0aW9uIHRvIHNldCB0aGVzZSB2YWx1ZXMuDQoNCkJ1dCB3ZSBjYW4gdXNlIHN0YW5kYXJkIHY0 bDJfcGl4X2Zvcm1hdF9tcGxhbmUgc3RydWN0IHJlcGxhY2luZyB0aGUgdywgaA0KYnl0ZXNwZXJs aW5lLCBzaXplaW1hZ2UgaW4gbXRrX2pwZWdfcV9kYXRhIHN0cnVjdCBsaWtlIHRoaXM6DQpzdHJ1 Y3QgbXRrX2pwZWdfcV9kYXRhew0KCXN0cnVjdCBtdGtfanBlZ19mbXQgKmZtdDsNCglzdHJ1Y3Qg djRsMl9waXhfZm9ybWF0X21wbGFuZSBwaXhfbXA7DQoJc3RydWN0IHY0bDJfcmVjdCBlbmNfY3Jv cF9yZWN0DQp9DQpUaGVuIGRlbGV0ZSBjdHgtPmNvbG9yc3BhY2UgY3R4LT55Y2Jjcl9lbmMgY3R4 LT5xdWFudGl6YXRpb24NCmN0eC0+eGZlcl9mdW5jLCBiZWN1YXNlIHY0bDJfcGl4X2Zvcm1hdF9t cGxhbmUgaW4gcV9kYXRhIGhhcyBjb250YWluZWQNCnRoZW0gYW5kIGFzc2lnbiB0aGVtIGZvciBv dXRfcSBhbmQgY2FwX3Egc2VwYXJhdGVseS4NCg0KV0RZVD8NCj4gDQo+IEluIGdlbmVyYWwgaXQn cyBwcmVmZXJyZWQgdG8gdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwgc3RydWN0dXJlcyBhcyBtdWNo IGFzDQo+IHBvc3NpYmxlIGFuZCBvbmx5IGludHJvZHVjZSBsb2NhbCBkcml2ZXIgc3RydWN0dXJl cyBmb3IgZGF0YSB0aGF0IGNhbid0IGJlDQo+IHN0b3JlZCBpbiBnZW5lcmljIG9uZXMuDQo+IA0K PiA+ICsNCj4gPiArCXEgPSAmY3R4LT5jYXBfcTsNCj4gPiArCXEtPmZtdCA9IG10a19qcGVnX2Zp bmRfZm9ybWF0KFY0TDJfUElYX0ZNVF9KUEVHLA0KPiA+ICsJCQkJICAgICAgTVRLX0pQRUdfRk1U X0ZMQUdfRU5DX0NBUFRVUkUpOw0KPiA+ICsJcGl4X21wLT53aWR0aCA9IE1US19KUEVHX01JTl9X SURUSDsNCj4gPiArCXBpeF9tcC0+aGVpZ2h0ID0gTVRLX0pQRUdfTUlOX0hFSUdIVDsNCj4gPiAr CXZpZGlvY190cnlfZm10KGNvbnRhaW5lcl9vZihwaXhfbXAsIHN0cnVjdCB2NGwyX2Zvcm1hdCwN Cj4gPiArCQkJCSAgICBmbXQucGl4X21wKSwgcS0+Zm10KTsNCj4gPiArCXEtPncgPSBwaXhfbXAt PndpZHRoOw0KPiA+ICsJcS0+aCA9IHBpeF9tcC0+aGVpZ2h0Ow0KPiA+ICsJcS0+c2l6ZWltYWdl WzBdID0gcGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlOw0KPiA+ICsJcS0+Ynl0ZXNwZXJs aW5lWzBdID0gcGl4X21wLT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lOw0KPiANCj4gRGl0dG8u DQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgdm9pZCBtdGtfanBlZ19zZXRfZGVjX2Rl ZmF1bHRfcGFyYW1zKHN0cnVjdCBtdGtfanBlZ19jdHggKmN0eCkNCj4gPiAgew0KPiA+ICAJc3Ry dWN0IG10a19qcGVnX3FfZGF0YSAqcSA9ICZjdHgtPm91dF9xOw0KPiA+ICsJc3RydWN0IHY0bDJf cGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcDsNCj4gPiAgCWludCBpOw0KPiA+ICANCj4gPiArCXBp eF9tcCA9IGttYWxsb2Moc2l6ZW9mKCpwaXhfbXApLCBHRlBfS0VSTkVMKTsNCj4gPiArDQo+ID4g KwljdHgtPmZoLmN0cmxfaGFuZGxlciA9ICZjdHgtPmN0cmxfaGRsOw0KPiA+ICAJY3R4LT5jb2xv cnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsDQo+ID4gIAljdHgtPnljYmNyX2VuYyA9IFY0 TDJfWUNCQ1JfRU5DX0RFRkFVTFQ7DQo+ID4gIAljdHgtPnF1YW50aXphdGlvbiA9IFY0TDJfUVVB TlRJWkFUSU9OX0RFRkFVTFQ7DQo+ID4gIAljdHgtPnhmZXJfZnVuYyA9IFY0TDJfWEZFUl9GVU5D X0RFRkFVTFQ7DQo+ID4gLQ0KPiA+IC0JcS0+Zm10ID0gbXRrX2pwZWdfZmluZF9mb3JtYXQoY3R4 LCBWNEwyX1BJWF9GTVRfSlBFRywNCj4gPiAtCQkJCQkgICAgICBNVEtfSlBFR19GTVRfVFlQRV9P VVRQVVQpOw0KPiA+IC0JcS0+dyA9IE1US19KUEVHX01JTl9XSURUSDsNCj4gPiAtCXEtPmggPSBN VEtfSlBFR19NSU5fSEVJR0hUOw0KPiA+IC0JcS0+Ynl0ZXNwZXJsaW5lWzBdID0gMDsNCj4gPiAt CXEtPnNpemVpbWFnZVswXSA9IE1US19KUEVHX0RFRkFVTFRfU0laRUlNQUdFOw0KPiA+ICsJcGl4 X21wLT53aWR0aCA9IE1US19KUEVHX01JTl9XSURUSDsNCj4gPiArCXBpeF9tcC0+aGVpZ2h0ID0g TVRLX0pQRUdfTUlOX0hFSUdIVDsNCj4gPiArDQo+ID4gKwlxLT5mbXQgPSBtdGtfanBlZ19maW5k X2Zvcm1hdChWNEwyX1BJWF9GTVRfSlBFRywNCj4gPiArCQkJCSAgICAgIE1US19KUEVHX0ZNVF9G TEFHX0RFQ19PVVRQVVQpOw0KPiA+ICsJdmlkaW9jX3RyeV9mbXQoY29udGFpbmVyX29mKHBpeF9t cCwgc3RydWN0IHY0bDJfZm9ybWF0LA0KPiA+ICsJCQkJICAgIGZtdC5waXhfbXApLCBxLT5mbXQp Ow0KPiA+ICsJcS0+dyA9IHBpeF9tcC0+d2lkdGg7DQo+ID4gKwlxLT5oID0gcGl4X21wLT5oZWln aHQ7DQo+ID4gKwlxLT5zaXplaW1hZ2VbMF0gPSBwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1h Z2U7DQo+ID4gKwlxLT5ieXRlc3BlcmxpbmVbMF0gPSBwaXhfbXAtPnBsYW5lX2ZtdFswXS5ieXRl c3BlcmxpbmU7DQo+ID4gIA0KPiA+ICAJcSA9ICZjdHgtPmNhcF9xOw0KPiA+IC0JcS0+Zm10ID0g bXRrX2pwZWdfZmluZF9mb3JtYXQoY3R4LCBWNEwyX1BJWF9GTVRfWVVWNDIwTSwNCj4gPiAtCQkJ CQkgICAgICBNVEtfSlBFR19GTVRfVFlQRV9DQVBUVVJFKTsNCj4gPiAtCXEtPncgPSBNVEtfSlBF R19NSU5fV0lEVEg7DQo+ID4gLQlxLT5oID0gTVRLX0pQRUdfTUlOX0hFSUdIVDsNCj4gPiAtDQo+ ID4gKwlxLT5mbXQgPSBtdGtfanBlZ19maW5kX2Zvcm1hdChWNEwyX1BJWF9GTVRfWVVWNDIwTSwN Cj4gPiArCQkJCSAgICAgIE1US19KUEVHX0ZNVF9GTEFHX0RFQ19DQVBUVVJFKTsNCj4gPiArCXBp eF9tcC0+d2lkdGggPSBNVEtfSlBFR19NSU5fV0lEVEg7DQo+ID4gKwlwaXhfbXAtPmhlaWdodCA9 IE1US19KUEVHX01JTl9IRUlHSFQ7DQo+ID4gKwl2aWRpb2NfdHJ5X2ZtdChjb250YWluZXJfb2Yo cGl4X21wLCBzdHJ1Y3QgdjRsMl9mb3JtYXQsDQo+ID4gKwkJCQkgICAgZm10LnBpeF9tcCksIHEt PmZtdCk7DQo+ID4gKwlxLT53ID0gcGl4X21wLT53aWR0aDsNCj4gPiArCXEtPmggPSBwaXhfbXAt PmhlaWdodDsNCj4gPiAgCWZvciAoaSA9IDA7IGkgPCBxLT5mbXQtPmNvbHBsYW5lczsgaSsrKSB7 DQo+ID4gLQkJdTMyIHN0cmlkZSA9IHEtPncgKiBxLT5mbXQtPmhfc2FtcGxlW2ldIC8gNDsNCj4g PiAtCQl1MzIgaCA9IHEtPmggKiBxLT5mbXQtPnZfc2FtcGxlW2ldIC8gNDsNCj4gPiArCQlxLT5z aXplaW1hZ2VbaV0gPSBwaXhfbXAtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2U7DQo+ID4gKwkJcS0+ Ynl0ZXNwZXJsaW5lW2ldID0gcGl4X21wLT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lOw0KPiA+ ICsJfQ0KPiA+ICt9DQo+ID4gIA0KPiANCj4gU2FtZSBjb21tZW50cyBhcyBmb3IgdGhlIGVuY29k ZXIgdmVyc2lvbi4NCj4gDQo+IE9uIHRvcCBvZiB0aGF0LCBib3RoIGZ1bmN0aW9ucyBhcmUgYWxt b3N0IGlkZW50aWNhbCBhbmQgaXQgc2hvdWxkIGJlDQo+IHBvc3NpYmxlIHRvIG1lcmdlIHRoZW0u DQo+IA0KPiA+IC0JCXEtPmJ5dGVzcGVybGluZVtpXSA9IHN0cmlkZTsNCj4gPiAtCQlxLT5zaXpl aW1hZ2VbaV0gPSBzdHJpZGUgKiBoOw0KPiA+ICtzdGF0aWMgaW50IG10a19qcGVnX2VuY19vcGVu KHN0cnVjdCBmaWxlICpmaWxlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfZGV2ICpq cGVnID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCj4gPiArCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZm ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7DQo+ID4gKwlzdHJ1Y3QgbXRrX2pwZWdfY3R4ICpjdHg7 DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKwljdHggPSBremFsbG9jKHNpemVvZigq Y3R4KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIWN0eCkNCj4gPiArCQlyZXR1cm4gLUVOT01F TTsNCj4gPiArDQo+ID4gKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZqcGVnLT5sb2Nr KSkgew0KPiA+ICsJCXJldCA9IC1FUkVTVEFSVFNZUzsNCj4gPiArCQlnb3RvIGZyZWU7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJdjRsMl9maF9pbml0KCZjdHgtPmZoLCB2ZmQpOw0KPiA+ICsJZmls ZS0+cHJpdmF0ZV9kYXRhID0gJmN0eC0+Zmg7DQo+ID4gKwl2NGwyX2ZoX2FkZCgmY3R4LT5maCk7 DQo+ID4gKw0KPiA+ICsJY3R4LT5qcGVnID0ganBlZzsNCj4gPiArCWN0eC0+ZmgubTJtX2N0eCA9 IHY0bDJfbTJtX2N0eF9pbml0KGpwZWctPm0ybV9kZXYsIGN0eCwNCj4gPiArCQkJCQkgICAgbXRr X2pwZWdfZW5jX3F1ZXVlX2luaXQpOw0KPiA+ICsJaWYgKElTX0VSUihjdHgtPmZoLm0ybV9jdHgp KSB7DQo+ID4gKwkJcmV0ID0gUFRSX0VSUihjdHgtPmZoLm0ybV9jdHgpOw0KPiA+ICsJCWdvdG8g ZXJyb3I7DQo+ID4gIAl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gbXRrX2pwZWdfZW5jX2N0cmxzX3Nl dHVwKGN0eCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJdjRsMl9lcnIoJmpwZWctPnY0bDJf ZGV2LCAiRmFpbGVkIHRvIHNldHVwIGpwZWcgZW5jIGNvbnRyb2xzXG4iKTsNCj4gPiArCQlnb3Rv IGVycm9yOw0KPiA+ICsJfQ0KPiA+ICsJbXRrX2pwZWdfc2V0X2VuY19kZWZhdWx0X3BhcmFtcyhj dHgpOw0KPiA+ICsNCj4gPiArCW11dGV4X3VubG9jaygmanBlZy0+bG9jayk7DQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArDQo+ID4gK2Vycm9yOg0KPiA+ICsJdjRsMl9maF9kZWwoJmN0eC0+ZmgpOw0K PiA+ICsJdjRsMl9maF9leGl0KCZjdHgtPmZoKTsNCj4gPiArCW11dGV4X3VubG9jaygmanBlZy0+ bG9jayk7DQo+ID4gK2ZyZWU6DQo+ID4gKwlrZnJlZShjdHgpOw0KPiA+ICsJcmV0dXJuIHJldDsN Cj4gPiAgfQ0KPiANCj4gSXQgbG9va3MgbGlrZSB0aGUgcXVldWVfaW5pdCBhcmd1bWVudCB0byB2 NGwyX20ybV9jdHhfaW5pdCgpIGFuZCBjb250cm9sDQo+IGhhbmRsaW5nIHdvdWxkIGJlIHRoZSBv bmx5IGRpZmZlcmVuY2VzIGZyb20gdGhlIGRlY29kZXIgdmVyc2lvbi4gUGVyaGFwcw0KPiB0aGUg ZnVuY3Rpb25zIGNhbiBiZSBtZXJnZWQ/DQo+IA0KPiA+ICANCj4gPiAgc3RhdGljIGludCBtdGtf anBlZ19kZWNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4gPiBAQCAtOTUzLDYgKzE1MDcsMTIg QEAgc3RhdGljIGludCBtdGtfanBlZ19kZWNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4gPiAg CQlnb3RvIGVycm9yOw0KPiA+ICAJfQ0KPiA+ICANCj4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2lu aXQoJmN0eC0+Y3RybF9oZGwsIDApOw0KPiA+ICsJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfc2V0 dXAoJmN0eC0+Y3RybF9oZGwpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCXY0bDJfZXJyKCZq cGVnLT52NGwyX2RldiwgIkZhaWxlZCB0byBzZXR1cCBqcGVnIGRlYyBjb250cm9sc1xuIik7DQo+ ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0NCj4gDQo+IFRoZXJlIGFyZSBubyBjb250cm9scyBm b3IgdGhlIGRlY29kZXIsIHNvIHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIHNldCB1cA0KPiBh IGNvbnRyb2wgaGFuZGxlci4NCj4gDQo+ID4gIAltdGtfanBlZ19zZXRfZGVjX2RlZmF1bHRfcGFy YW1zKGN0eCk7DQo+ID4gIAltdXRleF91bmxvY2soJmpwZWctPmxvY2spOw0KPiA+ICAJcmV0dXJu IDA7DQo+ID4gQEAgLTk3Myw2ICsxNTMzLDcgQEAgc3RhdGljIGludCBtdGtfanBlZ19yZWxlYXNl KHN0cnVjdCBmaWxlICpmaWxlKQ0KPiA+ICANCj4gPiAgCW11dGV4X2xvY2soJmpwZWctPmxvY2sp Ow0KPiA+ICAJdjRsMl9tMm1fY3R4X3JlbGVhc2UoY3R4LT5maC5tMm1fY3R4KTsNCj4gPiArCXY0 bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmN0eC0+Y3RybF9oZGwpOw0KPiA+ICAJdjRsMl9maF9kZWwo JmN0eC0+ZmgpOw0KPiA+ICAJdjRsMl9maF9leGl0KCZjdHgtPmZoKTsNCj4gPiAgCWtmcmVlKGN0 eCk7DQo+ID4gQEAgLTk4MCw2ICsxNTQxLDE1IEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfcmVsZWFz ZShzdHJ1Y3QgZmlsZSAqZmlsZSkNCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9DQo+ID4gIA0KPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIG10a19qcGVnX2VuY19m b3BzID0gew0KPiA+ICsJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsDQo+ID4gKwkub3Bl biAgICAgICAgICAgPSBtdGtfanBlZ19lbmNfb3BlbiwNCj4gPiArCS5yZWxlYXNlICAgICAgICA9 IG10a19qcGVnX3JlbGVhc2UsDQo+ID4gKwkucG9sbCAgICAgICAgICAgPSB2NGwyX20ybV9mb3Bf cG9sbCwNCj4gPiArCS51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMiwNCj4gPiArCS5tbWFw ICAgICAgICAgICA9IHY0bDJfbTJtX2ZvcF9tbWFwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gDQo+IElm IHdlIG1lcmdlIHRoZSAub3BlbigpIGltcGxlbWVudGF0aW9uLCB0aGUgc2FtZSBzdHJ1Y3QgY291 bGQgYmUgdXNlZCBmb3INCj4gYm90aCBkZWNvZGVyIGFuZCBlbmNvZGVyLg0KPiANCj4gW3NuaXBd DQo+ID4gQEAgLTEwNDIsOCArMTYxOSwxMiBAQCBzdGF0aWMgaW50IG10a19qcGVnX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gIAkJcmV0dXJuIGpwZWdfaXJxOw0KPiA+ ICAJfQ0KPiA+ICANCj4gPiAtCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwganBl Z19pcnEsIG10a19qcGVnX2RlY19pcnEsIDAsDQo+ID4gLQkJCSAgICAgICBwZGV2LT5uYW1lLCBq cGVnKTsNCj4gPiArCWlmIChqcGVnLT52YXJpYW50LT5pc19lbmNvZGVyKQ0KPiA+ICsJCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwganBlZ19pcnEsIG10a19qcGVnX2VuY19pcnEs DQo+ID4gKwkJCQkgICAgICAgMCwgcGRldi0+bmFtZSwganBlZyk7DQo+ID4gKwllbHNlDQo+ID4g KwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBqcGVnX2lycSwgbXRrX2pwZWdf ZGVjX2lycSwNCj4gPiArCQkJCSAgICAgICAwLCBwZGV2LT5uYW1lLCBqcGVnKTsNCj4gDQo+IFJh dGhlciB0aGFuIGhhdmluZyAiaXNfZW5jb2RlciIgaW4gdGhlIHZhcmlhbnQgc3RydWN0LCB3b3Vs ZCBpdCBtYWtlIG1vcmUNCj4gc2Vuc2UgdG8gaGF2ZSAiaXJxX2hhbmRsZXIiIGluc3RlYWQ/IFRo YXQgd291bGQgYXZvaWQgdGhlIGV4cGxpY2l0IGlmLg0KRG8geW91IG1lYW4gdG8gZGVsZXRlICJp c19lbmNvZGVyIj8gSXQgaXMgdXNlZCA4IHRpbWVzIGluIHRoZQ0KZHJpdmVyLlNob3VsZCBJIG1v dmUgdGhlbSBhbGwgdG8gdGhlIG1hdGNoIGRhdGE/DQoNCkJlc3QgUmVnYXJkcywNClhpYSBKaWFu Zw0KPiANCj4gPiAgCWlmIChyZXQpIHsNCj4gPiAgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWls ZWQgdG8gcmVxdWVzdCBqcGVnX2lycSAlZCAoJWQpXG4iLA0KPiA+ICAJCQlqcGVnX2lycSwgcmV0 KTsNCj4gPiBAQCAtMTA2Myw3ICsxNjQ0LDEwIEBAIHN0YXRpYyBpbnQgbXRrX2pwZWdfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgCQlnb3RvIGVycl9kZXZfcmVnaXN0 ZXI7DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0JanBlZy0+bTJtX2RldiA9IHY0bDJfbTJtX2luaXQo Jm10a19qcGVnX2RlY19tMm1fb3BzKTsNCj4gPiArCWlmIChqcGVnLT52YXJpYW50LT5pc19lbmNv ZGVyKQ0KPiA+ICsJCWpwZWctPm0ybV9kZXYgPSB2NGwyX20ybV9pbml0KCZtdGtfanBlZ19lbmNf bTJtX29wcyk7DQo+ID4gKwllbHNlDQo+ID4gKwkJanBlZy0+bTJtX2RldiA9IHY0bDJfbTJtX2lu aXQoJm10a19qcGVnX2RlY19tMm1fb3BzKTsNCj4gDQo+IFNhbWUgaGVyZS4gVGhlIHZhcmlhbnQg c3RydWN0IGNvdWxkIGhhdmUgYSAibTJtX29wcyIgcG9pbnRlci4NCj4gDQo+ID4gIAlpZiAoSVNf RVJSKGpwZWctPm0ybV9kZXYpKSB7DQo+ID4gIAkJdjRsMl9lcnIoJmpwZWctPnY0bDJfZGV2LCAi RmFpbGVkIHRvIGluaXQgbWVtMm1lbSBkZXZpY2VcbiIpOw0KPiA+ICAJCXJldCA9IFBUUl9FUlIo anBlZy0+bTJtX2Rldik7DQo+ID4gQEAgLTEwNzYsOSArMTY2MCwxNSBAQCBzdGF0aWMgaW50IG10 a19qcGVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gIAkJZ290byBl cnJfdmZkX2pwZWdfYWxsb2M7DQo+ID4gIAl9DQo+ID4gIAlzbnByaW50ZihqcGVnLT52ZGV2LT5u YW1lLCBzaXplb2YoanBlZy0+dmRldi0+bmFtZSksDQo+ID4gLQkJICIlcy1kZWMiLCBNVEtfSlBF R19OQU1FKTsNCj4gPiAtCWpwZWctPnZkZXYtPmZvcHMgPSAmbXRrX2pwZWdfZGVjX2ZvcHM7DQo+ ID4gLQlqcGVnLT52ZGV2LT5pb2N0bF9vcHMgPSAmbXRrX2pwZWdfZGVjX2lvY3RsX29wczsNCj4g PiArCQkgIiVzLSVzIiwgTVRLX0pQRUdfTkFNRSwNCj4gPiArCQkganBlZy0+dmFyaWFudC0+aXNf ZW5jb2RlciA/ICJlbmMiIDogImRlYyIpOw0KPiA+ICsJaWYgKGpwZWctPnZhcmlhbnQtPmlzX2Vu Y29kZXIpIHsNCj4gPiArCQlqcGVnLT52ZGV2LT5mb3BzID0gJm10a19qcGVnX2VuY19mb3BzOw0K PiA+ICsJCWpwZWctPnZkZXYtPmlvY3RsX29wcyA9ICZtdGtfanBlZ19lbmNfaW9jdGxfb3BzOw0K PiA+ICsJfSBlbHNlIHsNCj4gPiArCQlqcGVnLT52ZGV2LT5mb3BzID0gJm10a19qcGVnX2RlY19m b3BzOw0KPiA+ICsJCWpwZWctPnZkZXYtPmlvY3RsX29wcyA9ICZtdGtfanBlZ19kZWNfaW9jdGxf b3BzOw0KPiA+ICsJfQ0KPiANCj4gU2ltaWxhcmx5IGhlcmUuDQo+IA0KPiBbc25pcF0NCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19jb3Jl LmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2NvcmUuaA0KPiA+ IGluZGV4IDBiNTllNDg0OTVkNS4uOWVjMmMzMzUwYTE2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfY29yZS5oDQo+ID4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstanBlZy9tdGtfanBlZ19jb3JlLmgNCj4gPiBAQCAtMyw2 ICszLDcgQEANCj4gPiAgICogQ29weXJpZ2h0IChjKSAyMDE2IE1lZGlhVGVrIEluYy4NCj4gPiAg ICogQXV0aG9yOiBNaW5nIEhzaXUgVHNhaSA8bWluZ2hzaXUudHNhaUBtZWRpYXRlay5jb20+DQo+ ID4gICAqICAgICAgICAgUmljayBDaGFuZyA8cmljay5jaGFuZ0BtZWRpYXRlay5jb20+DQo+ID4g KyAqICAgICAgICAgWGlhIEppYW5nIDx4aWEuamlhbmdAbWVkaWF0ZWsuY29tPg0KPiA+ICAgKi8N Cj4gPiAgDQo+ID4gICNpZm5kZWYgX01US19KUEVHX0NPUkVfSA0KPiA+IEBAIC0xNiwxOSArMTcs MjEgQEANCj4gPiAgI2RlZmluZSBNVEtfSlBFR19OQU1FCQkibXRrLWpwZWciDQo+ID4gIA0KPiA+ ICAjZGVmaW5lIE1US19KUEVHX0NPTVBfTUFYCQkzDQo+ID4gKyNkZWZpbmUgTVRLX0pQRUdfTUFY X0NMT0NLUwkJMg0KPiA+ICsNCj4gPiAgDQo+IA0KPiBEdXBsaWNhdGUgYmxhbmsgbGluZS4NCj4g DQo+ID4gICNkZWZpbmUgTVRLX0pQRUdfRk1UX0ZMQUdfREVDX09VVFBVVAlCSVQoMCkNCj4gPiAg I2RlZmluZSBNVEtfSlBFR19GTVRfRkxBR19ERUNfQ0FQVFVSRQlCSVQoMSkNCj4gPiAtDQo+ID4g LSNkZWZpbmUgTVRLX0pQRUdfRk1UX1RZUEVfT1VUUFVUCTENCj4gPiAtI2RlZmluZSBNVEtfSlBF R19GTVRfVFlQRV9DQVBUVVJFCTINCj4gPiArI2RlZmluZSBNVEtfSlBFR19GTVRfRkxBR19FTkNf T1VUUFVUCUJJVCgyKQ0KPiA+ICsjZGVmaW5lIE1US19KUEVHX0ZNVF9GTEFHX0VOQ19DQVBUVVJF CUJJVCgzKQ0KPiANCj4gRG8gd2UgbmVlZCBzZXBhcmF0ZSBiaXRzIGZvciBkZWNvZGVyIGFuZCBl bmNvZGVyPw0KPiANCj4gPiAgDQo+ID4gICNkZWZpbmUgTVRLX0pQRUdfTUlOX1dJRFRICTMyVQ0K PiA+ICAjZGVmaW5lIE1US19KUEVHX01JTl9IRUlHSFQJMzJVDQo+ID4gLSNkZWZpbmUgTVRLX0pQ RUdfTUFYX1dJRFRICTgxOTJVDQo+ID4gLSNkZWZpbmUgTVRLX0pQRUdfTUFYX0hFSUdIVAk4MTky VQ0KPiA+ICsjZGVmaW5lIE1US19KUEVHX01BWF9XSURUSAk2NTUzNVUNCj4gPiArI2RlZmluZSBN VEtfSlBFR19NQVhfSEVJR0hUCTY1NTM1VQ0KPiANCj4gSWYgdGhpcyBpcyBhIGNoYW5nZSB2YWxp ZCBmb3IgdGhlIGRlY29kZXIgdG9vLCBpdCBzaG91bGQgYmUgYSBzZXBhcmF0ZQ0KPiBwYXRjaC4N Cj4gDQo+ID4gIA0KPiA+ICAjZGVmaW5lIE1US19KUEVHX0RFRkFVTFRfU0laRUlNQUdFCSgxICog MTAyNCAqIDEwMjQpDQo+ID4gKyNkZWZpbmUgTVRLX0pQRUdfTUFYX0VYSUZfU0laRQkoNjQgKiAx MDI0KQ0KPiANCj4gVGhlcmUgaXMgb25lIHRoaW5nIHRoYXQgSSByZWFsaXplZCBub3cuIElmIHRo ZSBFWElGIG1vZGUgaXMgZW5hYmxlZCwgdGhlDQo+IGRyaXZlciBuZWVkcyB0byBlbnN1cmUgdGhh dCB0aGUgYnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgRVhJRiBkYXRhLg0KPiBUaGUg dmIyIC5idWZfcHJlcGFyZSBjYWxsYmFjayB3b3VsZCBiZSB0aGUgcmlnaHQgcGxhY2UgdG8gZG8g dGhhdC4NCj4gDQo+ID4gIA0KPiA+ICAvKioNCj4gPiAgICogZW51bSBtdGtfanBlZ19jdHhfc3Rh dGUgLSBzdGF0ZXMgb2YgdGhlIGNvbnRleHQgc3RhdGUgbWFjaGluZQ0KPiA+IEBAIC00Miw2ICs0 NSwxOCBAQCBlbnVtIG10a19qcGVnX2N0eF9zdGF0ZSB7DQo+ID4gIAlNVEtfSlBFR19TT1VSQ0Vf Q0hBTkdFLA0KPiA+ICB9Ow0KPiA+ICANCj4gPiArLyoqDQo+ID4gKyAqIG10a19qcGVnX3Zhcmlh bnQgLSBtdGsganBlZyBkcml2ZXIgdmFyaWFudA0KPiA+ICsgKiBAaXNfZW5jb2RlcjoJCWRyaXZl ciBtb2RlIGlzIGpwZWcgZW5jb2Rlcg0KPiA+ICsgKiBAY2xrX25hbWVzOgkJY2xvY2sgbmFtZXMN Cj4gPiArICogQG51bV9jbG9ja3M6CQludW1iZXJzIG9mIGNsb2NrDQo+ID4gKyAqLw0KPiA+ICtz dHJ1Y3QgbXRrX2pwZWdfdmFyaWFudCB7DQo+ID4gKwlib29sIGlzX2VuY29kZXI7DQo+ID4gKwlj b25zdCBjaGFyCQkqY2xrX25hbWVzW01US19KUEVHX01BWF9DTE9DS1NdOw0KPiA+ICsJaW50CQkJ bnVtX2Nsb2NrczsNCj4gDQo+IGhpbnQ6IFBsZWFzZSBhdm9pZCB0YWJzIGJldHdlZW4gdHlwZXMg YW5kIG5hbWVzLCBhcyBpdCBtYWtlcyBpdCBkaWZmaWN1bHQNCj4gdG8gYWRkIG5ldyBmaWVsZHMg bGF0ZXIgKHRoZSBudW1iZXIgb2YgdGFicyBtaWdodCBuZWVkIHRvIGNoYW5nZSBmb3IgYWxsDQo+ IG1lbWJlcnMpLg0KPiANCj4gW3NuaXBdDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vbXRrLWpwZWcvbXRrX2pwZWdfZW5jX2h3LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL210ay1qcGVnL210a19qcGVnX2VuY19ody5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjdmYzFkZTkyMGE3NQ0KPiA+IC0tLSAvZGV2L251bGwN Cj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1qcGVnL210a19qcGVnX2VuY19o dy5jDQo+ID4gQEAgLTAsMCArMSwxOTMgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQ0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgTWVk aWFUZWsgSW5jLg0KPiA+ICsgKiBBdXRob3I6IFhpYSBKaWFuZyA8eGlhLmppYW5nQG1lZGlhdGVr LmNvbT4NCj4gPiArICoNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8u aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEv dmlkZW9idWYyLWNvcmUuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJtdGtfanBlZ19lbmNfaHcu aCINCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2pwZWdfZW5jX3FsdCBtdGtf anBlZ19lbmNfcXVhbGl0eVtdID0gew0KPiA+ICsJey5xdWFsaXR5X3BhcmFtID0gMzQsIC5oYXJk d2FyZV92YWx1ZSA9IEpQRUdfRU5DX1FVQUxJVFlfUTM0fSwNCj4gPiArCXsucXVhbGl0eV9wYXJh bSA9IDM5LCAuaGFyZHdhcmVfdmFsdWUgPSBKUEVHX0VOQ19RVUFMSVRZX1EzOX0sDQo+ID4gKwl7 LnF1YWxpdHlfcGFyYW0gPSA0OCwgLmhhcmR3YXJlX3ZhbHVlID0gSlBFR19FTkNfUVVBTElUWV9R NDh9LA0KPiA+ICsJey5xdWFsaXR5X3BhcmFtID0gNjAsIC5oYXJkd2FyZV92YWx1ZSA9IEpQRUdf RU5DX1FVQUxJVFlfUTYwfSwNCj4gPiArCXsucXVhbGl0eV9wYXJhbSA9IDY0LCAuaGFyZHdhcmVf dmFsdWUgPSBKUEVHX0VOQ19RVUFMSVRZX1E2NH0sDQo+ID4gKwl7LnF1YWxpdHlfcGFyYW0gPSA2 OCwgLmhhcmR3YXJlX3ZhbHVlID0gSlBFR19FTkNfUVVBTElUWV9RNjh9LA0KPiA+ICsJey5xdWFs aXR5X3BhcmFtID0gNzQsIC5oYXJkd2FyZV92YWx1ZSA9IEpQRUdfRU5DX1FVQUxJVFlfUTc0fSwN Cj4gPiArCXsucXVhbGl0eV9wYXJhbSA9IDgwLCAuaGFyZHdhcmVfdmFsdWUgPSBKUEVHX0VOQ19R VUFMSVRZX1E4MH0sDQo+ID4gKwl7LnF1YWxpdHlfcGFyYW0gPSA4MiwgLmhhcmR3YXJlX3ZhbHVl ID0gSlBFR19FTkNfUVVBTElUWV9RODJ9LA0KPiA+ICsJey5xdWFsaXR5X3BhcmFtID0gODQsIC5o YXJkd2FyZV92YWx1ZSA9IEpQRUdfRU5DX1FVQUxJVFlfUTg0fSwNCj4gPiArCXsucXVhbGl0eV9w YXJhbSA9IDg3LCAuaGFyZHdhcmVfdmFsdWUgPSBKUEVHX0VOQ19RVUFMSVRZX1E4N30sDQo+ID4g Kwl7LnF1YWxpdHlfcGFyYW0gPSA5MCwgLmhhcmR3YXJlX3ZhbHVlID0gSlBFR19FTkNfUVVBTElU WV9ROTB9LA0KPiA+ICsJey5xdWFsaXR5X3BhcmFtID0gOTIsIC5oYXJkd2FyZV92YWx1ZSA9IEpQ RUdfRU5DX1FVQUxJVFlfUTkyfSwNCj4gPiArCXsucXVhbGl0eV9wYXJhbSA9IDk1LCAuaGFyZHdh cmVfdmFsdWUgPSBKUEVHX0VOQ19RVUFMSVRZX1E5NX0sDQo+ID4gKwl7LnF1YWxpdHlfcGFyYW0g PSA5NywgLmhhcmR3YXJlX3ZhbHVlID0gSlBFR19FTkNfUVVBTElUWV9ROTd9LA0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArdm9pZCBtdGtfanBlZ19lbmNfcmVzZXQodm9pZCBfX2lvbWVtICpiYXNlKQ0K PiANCj4gSSdkIHN1Z2dlc3QgcGFzc2luZyBzdHJ1Y3QgbXRrX2pwZWdfZGV2IHBvaW50ZXIgdG8g YWxsIHRoZXNlIGZ1bmN0aW9ucywgaW4NCj4gY2FzZSBtb3JlIGRhdGEgYWJvdXQgdGhlIGhhcmR3 YXJlIGlzIG5lZWRlZCBpbiB0aGUgZnV0dXJlLg0KPiANCj4gPiArew0KPiA+ICsJd3JpdGVsKDB4 MDAsIGJhc2UgKyBKUEVHX0VOQ19SU1RCKTsNCj4gDQo+IG5pdDogSnVzdCAwIGlzIGVub3VnaC4N Cj4gDQo+ID4gKwl3cml0ZWwoSlBFR19FTkNfUkVTRVRfQklULCBiYXNlICsgSlBFR19FTkNfUlNU Qik7DQo+ID4gKwl3cml0ZWwoMHgwMCwgYmFzZSArIEpQRUdfRU5DX0NPREVDX1NFTCk7DQo+IA0K PiBEaXR0by4NCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gK3UzMiBtdGtfanBlZ19lbmNfZ2V0X2Fu ZF9jbGVhcl9pbnRfc3RhdHVzKHZvaWQgX19pb21lbSAqYmFzZSkNCj4gPiArew0KPiA+ICsJdTMy IHJldDsNCj4gPiArDQo+ID4gKwlyZXQgPSByZWFkbChiYXNlICsgSlBFR19FTkNfSU5UX1NUUykg Jg0KPiA+ICsJCSAgICBKUEVHX0VOQ19JTlRfU1RBVFVTX01BU0tfQUxMSVJROw0KPiA+ICsJaWYg KHJldCkNCj4gPiArCQl3cml0ZWwoMCwgYmFzZSArIEpQRUdfRU5DX0lOVF9TVFMpOw0KPiA+ICsN Cj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3UzMiBtdGtfanBlZ19lbmNf Z2V0X2ZpbGVfc2l6ZSh2b2lkIF9faW9tZW0gKmJhc2UpDQo+ID4gK3sNCj4gPiArCXJldHVybiBy ZWFkbChiYXNlICsgSlBFR19FTkNfRE1BX0FERFIwKSAtDQo+ID4gKwkgICAgICAgcmVhZGwoYmFz ZSArIEpQRUdfRU5DX0RTVF9BRERSMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3UzMiBtdGtfanBl Z19lbmNfZW51bV9yZXN1bHQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgaXJxX3N0YXR1cykNCj4g PiArew0KPiA+ICsJaWYgKGlycV9zdGF0dXMgJiBKUEVHX0VOQ19JTlRfU1RBVFVTX0RPTkUpDQo+ ID4gKwkJcmV0dXJuIE1US19KUEVHX0VOQ19SRVNVTFRfRE9ORTsNCj4gPiArCWVsc2UgaWYgKGly cV9zdGF0dXMgJiBKUEVHX0VOQ19JTlRfU1RBVFVTX1NUQUxMKQ0KPiA+ICsJCXJldHVybiBNVEtf SlBFR19FTkNfUkVTVUxUX1NUQUxMOw0KPiA+ICsJZWxzZQ0KPiA+ICsJCXJldHVybiBNVEtfSlBF R19FTkNfUkVTVUxUX1ZDT0RFQ19JUlE7DQo+ID4gK30NCj4gDQo+IEl0IGxvb2tzIGxpa2UgdGhl IGRyaXZlciBvbmx5IGNhcmVzIGFib3V0IDIgY2FzZXM6IERPTkUgYW5kIGFueXRoaW5nIGVsc2Uu DQo+IEFjdHVhbGx5IGl0IGFsc28gY2FyZXMgYWJvdXQgYSBjYXNlIHdoZXJlIG5vIGJpdHMgYXJl IHNldCBpbiBpcnFfc3RhdHVzLA0KPiB3aGljaCBjb3VsZCBiZSBhbiBpbnRlcnJ1cHQgY29udHJv bGxlciBtaXNjb25maWd1cmF0aW9uIG9yIGFuIGludGVycnVwdA0KPiBnZW5lcmF0ZWQgYnkgYW5v dGhlciBkZXZpY2Ugb24gdGhlIHNhbWUgc2hhcmVkIElSUSBsaW5lLCB3aGljaCBzaG91bGQgYmUN Cj4gaGFuZGxlZCBieSByZXR1cm5pbmcgSVJRX05PTkUuIFNpbmNlIGludGVycnVwdCBoYW5kbGlu ZyBpcyBhIGxvdyBsZXZlbA0KPiBoYXJkd2FyZSBvcGVyYXRpb24sIEknZCBzdWdnZXN0IGFub3Ro ZXIgZGVzaWduOg0KPiAtIHB1dCB0aGUgaXJxX2hhbmRsZXJfdCBmdW5jdGlvbiBoZXJlIGluIHRo aXMgZmlsZSBhbmQgaGF2ZSBpdCBkaXJlY3RseQ0KPiAgIGFjY2VzcyB0aGUgaGFyZHdhcmUgcmVn aXN0ZXJzIGFuZCBjaGVjayB0aGUgaW50ZXJydXB0IGJpdHMsDQo+IC0gYWRkIGFuIG10a19qcGVn X2VuY19kb25lKC4uLiwgZW51bSB2YjJfYnVmZmVyX3N0YXRlIHN0YXRlLCBzaXplX3QNCj4gICBw YXlsb2FkKSwgd2hpY2ggd291bGQgYmUgY2FsbGVkIGZyb20gdGhpcyBsb3cgbGV2ZWwgaW50ZXJy dXB0IGhhbmRsZXIgYW5kDQo+ICAgZG8gdGhlIFY0TDIgYnVmZmVyIGFuZCBNMk0gam9iIGhhbmRs aW5nLg0KPiANCj4gV0RZVD8NCj4gDQo+ID4gKw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19zZXRf aW1nX3NpemUodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpDQo+IA0K PiBJZiB3ZSBwYXNzIHN0cnVjdCBtdGtfanBlZ19kZXYgdG8gdGhpcyBmdW5jdGlvbiwgdGhlIHdp ZHRoIGFuZCBoZWlnaHQNCj4gYXJndW1lbnRzIHdvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYXMgdGhl eSBjb3VsZCBiZSBkaXJlY3RseSByZXRyaWV2ZWQgZnJvbQ0KPiB0aGUgZHJpdmVyIHN0YXRlLg0K PiANCj4gU2ltaWxhciBhZHZpY2UgYXBwbGllcyB0byB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRo aXMgZmlsZS4NCj4gDQo+ID4gK3sNCj4gPiArCXUzMiB2YWx1ZTsNCj4gPiArDQo+ID4gKwl2YWx1 ZSA9IHdpZHRoIDw8IDE2IHwgaGVpZ2h0Ow0KPiA+ICsJd3JpdGVsKHZhbHVlLCBiYXNlICsgSlBF R19FTkNfSU1HX1NJWkUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19z ZXRfYmxrX251bSh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBlbmNfZm9ybWF0LCB1MzIgd2lkdGgs DQo+ID4gKwkJCSAgICAgIHUzMiBoZWlnaHQpDQo+ID4gK3sNCj4gPiArCXUzMiBibGtfbnVtOw0K PiA+ICsJdTMyIGlzXzQyMDsNCj4gPiArCXUzMiBwYWRkaW5nX3dpZHRoOw0KPiA+ICsJdTMyIHBh ZGRpbmdfaGVpZ2h0Ow0KPiA+ICsJdTMyIGx1bWFfYmxvY2tzOw0KPiA+ICsJdTMyIGNocm9tYV9i bG9ja3M7DQo+ID4gKw0KPiA+ICsJaXNfNDIwID0gKGVuY19mb3JtYXQgPT0gVjRMMl9QSVhfRk1U X05WMTJNIHx8DQo+ID4gKwkJICBlbmNfZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9OVjIxTSkgPyAx IDogMDsNCj4gPiArCXBhZGRpbmdfd2lkdGggPSByb3VuZF91cCh3aWR0aCwgMTYpOw0KPiA+ICsJ cGFkZGluZ19oZWlnaHQgPSByb3VuZF91cChoZWlnaHQsIGlzXzQyMCA/IDE2IDogOCk7DQo+ID4g Kw0KPiA+ICsJbHVtYV9ibG9ja3MgPSBwYWRkaW5nX3dpZHRoIC8gOCAqIHBhZGRpbmdfaGVpZ2h0 IC8gODsNCj4gPiArCWlmIChpc180MjApDQo+ID4gKwkJY2hyb21hX2Jsb2NrcyA9IGx1bWFfYmxv Y2tzIC8gNDsNCj4gPiArCWVsc2UNCj4gPiArCQljaHJvbWFfYmxvY2tzID0gbHVtYV9ibG9ja3Mg LyAyOw0KPiA+ICsNCj4gPiArCWJsa19udW0gPSBsdW1hX2Jsb2NrcyArIDIgKiBjaHJvbWFfYmxv Y2tzIC0gMTsNCj4gPiArDQo+ID4gKwl3cml0ZWwoYmxrX251bSwgYmFzZSArIEpQRUdfRU5DX0JM S19OVU0pOw0KPiA+ICt9DQo+IA0KPiBNeSBjb21tZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBmcm9t IHY3IGhhdmVuJ3QgYmVlbiBhZGRyZXNzZWQuDQo+IA0KPiA+ICsNCj4gPiArdm9pZCBtdGtfanBl Z19lbmNfc2V0X3N0cmlkZSh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiBlbmNfZm9ybWF0LCB1MzIg d2lkdGgsDQo+ID4gKwkJCSAgICAgdTMyIGhlaWdodCwgdTMyIGJ5dGVzcGVybGluZSkNCj4gPiAr ew0KPiA+ICsJdTMyIGltZ19zdHJpZGU7DQo+ID4gKwl1MzIgbWVtX3N0cmlkZTsNCj4gPiArDQo+ ID4gKwlpZiAoZW5jX2Zvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTlYxMk0gfHwNCj4gPiArCSAgICBl bmNfZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9OVjIxTSkgew0KPiA+ICsJCWltZ19zdHJpZGUgPSBy b3VuZF91cCh3aWR0aCwgMTYpOw0KPiA+ICsJCW1lbV9zdHJpZGUgPSBieXRlc3BlcmxpbmU7DQo+ ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWltZ19zdHJpZGUgPSByb3VuZF91cCh3aWR0aCAqIDIsIDMy KTsNCj4gPiArCQltZW1fc3RyaWRlID0gaW1nX3N0cmlkZTsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwl3cml0ZWwoaW1nX3N0cmlkZSwgYmFzZSArIEpQRUdfRU5DX0lNR19TVFJJREUpOw0KPiA+ICsJ d3JpdGVsKG1lbV9zdHJpZGUsIGJhc2UgKyBKUEVHX0VOQ19TVFJJREUpOw0KPiA+ICt9DQo+ID4g Kw0KPiANCj4gTXkgY29tbWVudHMgZm9yIHRoaXMgZnVuY3Rpb24gZnJvbSB2NyBoYXZlbid0IGJl ZW4gYWRkcmVzc2VkLg0KPiANCj4gPiArdm9pZCBtdGtfanBlZ19lbmNfc2V0X3NyY19hZGRyKHZv aWQgX19pb21lbSAqYmFzZSwgdTMyIHNyY19hZGRyLA0KPiA+ICsJCQkgICAgICAgdTMyIHBsYW5l X2luZGV4KQ0KPiA+ICt7DQo+ID4gKwlpZiAoIXBsYW5lX2luZGV4KQ0KPiA+ICsJCXdyaXRlbChz cmNfYWRkciwgYmFzZSArIEpQRUdfRU5DX1NSQ19MVU1BX0FERFIpOw0KPiA+ICsJZWxzZQ0KPiA+ ICsJCXdyaXRlbChzcmNfYWRkciwgYmFzZSArIEpQRUdfRU5DX1NSQ19DSFJPTUFfQUREUik7DQo+ IA0KPiBEbyB3ZSBuZWVkIHRoaXMgcGxhbmVfaW5kZXggaWYgd2Ugb25seSBoYXZlIDIgcGxhbmVz PyBBbHNvLCBmb3IgaW50ZXJsZWF2ZWQNCj4gZm9ybWF0cywgbGlrZSBZVVlWLCB3aGF0IHNob3Vs ZCB0aGUgTFVNQSBhbmQgQ0hST01BIHJlZ2lzdGVycyBiZSBzZXQgdG8/DQo+IA0KPiA+ICt9DQo+ ID4gKw0KPiA+ICt2b2lkIG10a19qcGVnX2VuY19zZXRfZHN0X2FkZHIodm9pZCBfX2lvbWVtICpi YXNlLCB1MzIgZHN0X2FkZHIsDQo+ID4gKwkJCSAgICAgICB1MzIgc3RhbGxfc2l6ZSwgdTMyIGlu aXRfb2Zmc2V0LA0KPiA+ICsJCQkgICAgICAgdTMyIG9mZnNldF9tYXNrKQ0KPiA+ICt7DQo+ID4g Kwl3cml0ZWwoaW5pdF9vZmZzZXQgJiB+MHhmLCBiYXNlICsgSlBFR19FTkNfT0ZGU0VUX0FERFIp Ow0KPiA+ICsJd3JpdGVsKG9mZnNldF9tYXNrICYgMHhmLCBiYXNlICsgSlBFR19FTkNfQllURV9P RkZTRVRfTUFTSyk7DQo+ID4gKwl3cml0ZWwoZHN0X2FkZHIgJiB+MHhmLCBiYXNlICsgSlBFR19F TkNfRFNUX0FERFIwKTsNCj4gPiArCXdyaXRlbCgoZHN0X2FkZHIgKyBzdGFsbF9zaXplKSAmIH4w eGYsIGJhc2UgKyBKUEVHX0VOQ19TVEFMTF9BRERSMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB2b2lkIG10a19qcGVnX2VuY19zZXRfcXVhbGl0eSh2b2lkIF9faW9tZW0gKmJhc2UsIHUz MiBxdWFsaXR5KQ0KPiA+ICt7DQo+ID4gKwl1MzIgdmFsdWU7DQo+ID4gKwl1MzIgaSwgZW5jX3F1 YWxpdHk7DQo+ID4gKw0KPiA+ICsJZW5jX3F1YWxpdHkgPSBtdGtfanBlZ19lbmNfcXVhbGl0eVsw XS5oYXJkd2FyZV92YWx1ZTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19q cGVnX2VuY19xdWFsaXR5KTsgaSsrKSB7DQo+ID4gKwkJaWYgKHF1YWxpdHkgPD0gbXRrX2pwZWdf ZW5jX3F1YWxpdHlbaV0ucXVhbGl0eV9wYXJhbSkgew0KPiA+ICsJCQllbmNfcXVhbGl0eSA9IG10 a19qcGVnX2VuY19xdWFsaXR5W2ldLmhhcmR3YXJlX3ZhbHVlOw0KPiA+ICsJCQlicmVhazsNCj4g PiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdmFsdWUgPSByZWFkbChiYXNlICsgSlBFR19F TkNfUVVBTElUWSk7DQo+IA0KPiBuaXQ6IElzIGl0IHN0aWxsIG5lY2Vzc2FyeSB0byByZWFkIHRo ZSByZWdpc3RlciBoZXJlPyBUeXBpY2FsbHkgdGhlIHJlc2VydmVkDQo+IGJpdHMgd291bGQgYmUg ZGVmaW5lZCBhcyBTQlogKHNob3VsZCBiZSB6ZXJvKSBhbmQgaXQgc2hvdWxkIGJlIHNhZmUgdG8g anVzdA0KPiB3cml0ZSAwIHRvIHRoZW0uDQo+IA0KPiA+ICsJdmFsdWUgPSAodmFsdWUgJiBKUEVH X0VOQ19RVUFMSVRZX01BU0spIHwgZW5jX3F1YWxpdHk7DQo+ID4gKwl3cml0ZWwodmFsdWUsIGJh c2UgKyBKUEVHX0VOQ19RVUFMSVRZKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg bXRrX2pwZWdfZW5jX3NldF9jdHJsKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIGVuY19mb3JtYXQs DQo+ID4gKwkJCQkgIGJvb2wgZXhpZl9lbiwgdTMyIHJlc3RhcnRfaW50ZXJ2YWwpDQo+ID4gK3sN Cj4gPiArCXUzMiB2YWx1ZTsNCj4gPiArDQo+ID4gKwl2YWx1ZSA9IHJlYWRsKGJhc2UgKyBKUEVH X0VOQ19DVFJMKTsNCj4gDQo+IG5pdDogSXMgaXQgc3RpbGwgbmVjZXNzYXJ5IHRvIHJlYWQgdGhl IHJlZ2lzdGVyIGhlcmU/DQo+IA0KPiA+ICsJdmFsdWUgJj0gfkpQRUdfRU5DX0NUUkxfWVVWX0ZP Uk1BVF9NQVNLOw0KPiA+ICsJdmFsdWUgfD0gKGVuY19mb3JtYXQgJiAzKSA8PCAzOw0KPiA+ICsJ aWYgKGV4aWZfZW4pDQo+ID4gKwkJdmFsdWUgfD0gSlBFR19FTkNfQ1RSTF9GSUxFX0ZPUk1BVF9C SVQ7DQo+ID4gKwllbHNlDQo+ID4gKwkJdmFsdWUgJj0gfkpQRUdfRU5DX0NUUkxfRklMRV9GT1JN QVRfQklUOw0KPiA+ICsJaWYgKHJlc3RhcnRfaW50ZXJ2YWwpDQo+ID4gKwkJdmFsdWUgfD0gSlBF R19FTkNfQ1RSTF9SRVNUQVJUX0VOX0JJVDsNCj4gPiArCWVsc2UNCj4gPiArCQl2YWx1ZSAmPSB+ SlBFR19FTkNfQ1RSTF9SRVNUQVJUX0VOX0JJVDsNCj4gPiArCXdyaXRlbCh2YWx1ZSwgYmFzZSAr IEpQRUdfRU5DX0NUUkwpOw0KPiA+ICt9DQo+ID4gKw0KPiANCj4gQmVzdCByZWdhcmRzLA0KPiBU b21hc3oNCg0K