Return-path: Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:34911 "EHLO mx0a-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752445AbbGHAOQ (ORCPT ); Tue, 7 Jul 2015 20:14:16 -0400 From: David Lin To: Johannes Berg CC: "linux-wireless@vger.kernel.org" , "Chor Teck Law" , Pete Hsieh Subject: RE: [PATCH v5] Add new mac80211 driver mwlwifi. Date: Wed, 8 Jul 2015 00:14:10 +0000 Message-ID: (sfid-20150708_021423_727569_CDD6BABA) References: <92d77d0990b94d23ae66fb69fb55a6fb@SC-EXCH02.marvell.com> <1435917081.2059.33.camel@sipsolutions.net> In-Reply-To: <1435917081.2059.33.camel@sipsolutions.net> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: PiBKb2hhbm5lcyBCZXJnIHdyb3RlOg0KPiANCj4gPiArLyogQml0IGRlZmluaXRpbyBmb3IgTUFD UkVHX1JFR19BMkhfSU5URVJSVVBUX0NBVVNFIChBMkhSSUMpICovDQo+IA0KPiB0eXBvDQo+DQoN CldpbGwgY29ycmVjdCBpdC4NCg0KPiANCj4gPiArLyogQml0IGRlZmluaXRpbyBmb3IgTUFDUkVH X1JFR19IMkFfSU5URVJSVVBUX0NBVVNFIChIMkFSSUMpICovDQo+IA0KPiBzYW1lIGhlcmUNCj4N Cg0KV2lsbCBjb3JyZWN0IGl0Lg0KDQo+DQo+ID4gK3N0cnVjdCBtd2xfY2hpcF9pbmZvIHsNCj4g PiArCWNoYXIgKnBhcnRfbmFtZTsNCj4gPiArCWNoYXIgKmZ3X2ltYWdlOw0KPiA+ICt9Ow0KPiAN Cj4gY29uc3QgY2hhciAqPw0KPg0KDQpXaWxsIG1vZGlmeSBpdC4NCg0KPg0KPiA+ICtzdHJ1Y3Qg bXdsX3R4X2huZGwgew0KPiA+ICsJc3RydWN0IHNrX2J1ZmYgKnBza19idWZmOw0KPiA+ICsJdTgg KnN0YV9pbmZvOw0KPiANCj4gdTggKiBzZWVtcyB2ZXJ5IHN0cmFuZ2UgZm9yIHN0YV9pbmZvPw0K Pg0KDQpXaWxsIGNoYW5nZSBpdCB0byAidm9pZCAqIi4NCg0KPiANCj4gPiArCXN0cnVjdCBtd2xf dHhfZGVzYyAqcGRlc2M7DQo+ID4gKwlzdHJ1Y3QgbXdsX3R4X2huZGwgKnBuZXh0Ow0KPiA+ICt9 Ow0KPiANCj4gWW91IHByb2JhYmx5IHNob3VsZG4ndCBoYW5kLXdyaXRlIHlvdXIgb3duIGxpbmtl ZCBsaXN0IGltcGxlbWVudGF0aW9uLi4uIFlvdQ0KPiBjb3VsZCBwb3NzaWJseSBldmVuIHB1dCBh bGwgdGhpcyBpbnRvIHRoZSBza2ItPmNiIGFuZCBnZXQgcmlkIG9mIHRoZSBleHRyYSBzdHJ1Y3QN Cj4gZW50aXJlbHksIGp1c3QgdXNpbmcgYW4gc2tiIGxpc3Q/DQo+IA0KPiA+ICtzdHJ1Y3QgbXds X3J4X2huZGwgew0KPiA+ICsJc3RydWN0IHNrX2J1ZmYgKnBza19idWZmOyAgICAvKiBhc3NvY2lh dGVkIHNrX2J1ZmYgZm9yIExpbnV4DQo+ICAgICAgKi8NCj4gPiArCXN0cnVjdCBtd2xfcnhfZGVz YyAqcGRlc2M7DQo+ID4gKwlzdHJ1Y3QgbXdsX3J4X2huZGwgKnBuZXh0Ow0KPiA+ICt9Ow0KPiAN Cj4gRGl0dG8gaGVyZS4NCj4gDQoNClRoZXNlIHR3byBzdHJ1Y3R1cmVzIGFyZSB1c2VkIHRvIGJp bmRpbmcgc29ja2V0IGJ1ZmZlciBhbmQgZmlybXdhcmUgZGVzY3JpcHRvci4gSXQgc2hvdWxkIGJl IGJldHRlciB0byBsZWF2ZSB0aGVzZSBmaWVsZHMgaGVyZSBpbnN0ZWFkIG9mIG1vdmluZyB0aGVt IGludG8gc2tiLT5jYi4NCg0KPiANCj4gPiArCXN0cnVjdCBtd2xfdHhfcHdyX3RibCB0eF9wd3Jf dGJsW1NZU0FEUFRfTUFYX05VTV9DSEFOTkVMU107DQo+ID4gKwl1MzIgY2RkOyAgICAgICAgICAg ICAgICAgICAgIC8qIDA6IG9mZiwgMTogb24gKi8NCj4gDQo+IGJvb2w/DQo+DQoNCldpbGwgbW9k aWZ5IGl0Lg0KDQo+IA0KPiA+ICsJc3BpbmxvY2tfdCBzdGFfbG9jazsgICAgICAgICAvKiBmb3Ig cHJpdmF0ZSBzdGEgaW5mbw0KPiAgKi8NCj4gPiArCXN0cnVjdCBsaXN0X2hlYWQgc3RhX2xpc3Q7 ICAgLyogTGlzdCBvZiBzdGF0aW9ucw0KPiAgKi8NCj4gDQo+IENvdWxkIGNvbnNpZGVyIHVzaW5n IHRoZSBtYWM4MDIxMSBzdGF0aW9uIGl0ZXJhdGlvbg0KPiBpZWVlODAyMTFfaXRlcmF0ZV9zdGF0 aW9uc19hdG9taWMoKS4NCj4NCg0KSXQgaXMgYmV0dGVyIHRvIGtlZXAgcHJpdmF0ZSBzdGF0aW9u IGluZm9ybWF0aW9uIGxpc3QgaW4gbXdsd2lmaSBkcml2ZXIuDQoNCj4NCj4gPiArc3RydWN0IGJl YWNvbl9pbmZvIHsNCj4gPiArCWJvb2wgdmFsaWQ7DQo+ID4gKwl1MTYgY2FwX2luZm87DQo+ID4g Kwl1OCBiX3JhdGVfc2V0W1NZU0FEUFRfTUFYX0RBVEFfUkFURVNfR107DQo+ID4gKwl1OCBvcF9y YXRlX3NldFtTWVNBRFBUX01BWF9EQVRBX1JBVEVTX0ddOw0KPiA+ICsJdTE2IGllX3dtbV9sZW47 ICAgICAgICAgICAgICAgLyogS2VlcCBXTU0gSUUgKi8NCj4gPiArCXU4ICppZV93bW1fcHRyOw0K PiA+ICsJdTE2IGllX3Jzbl9sZW47ICAgICAgICAgICAgICAgLyogS2VlcCBXUEEgSUUgKi8NCj4g PiArCXU4ICppZV9yc25fcHRyOw0KPiA+ICsJdTE2IGllX3JzbjQ4X2xlbjsgICAgICAgICAgICAg LyogS2VlcCBXUEEyIElFICovDQo+ID4gKwl1OCAqaWVfcnNuNDhfcHRyOw0KPiA+ICsJdTE2IGll X2h0X2xlbjsgICAgICAgICAgICAgICAgLyogS2VlcCBIVCBJRSAqLw0KPiA+ICsJdTggKmllX2h0 X3B0cjsNCj4gPiArCXU4IGllX2xpc3RfaHRbMTQ4XTsNCj4gPiArCXUxNiBpZV92aHRfbGVuOyAg ICAgICAgICAgICAgIC8qIEtlZXAgVkhUIElFICovDQo+ID4gKwl1OCAqaWVfdmh0X3B0cjsNCj4g PiArCXU4IGllX2xpc3Rfdmh0WzI0XTsNCj4gPiArfTsNCj4gDQo+IFRoYXQgc3RydWN0IGlzIHBh Y2tlZCByZWFsbHkgaW5lZmZpY2llbnRseSB3aXRoIHBvaW50ZXJzIGFuZCB1MTZzIGludGVybGVh dmVkLg0KPiBUaG9zZSB1MTZzIGNhbiBhbHNvIGJlIHU4cy4NCj4NCg0KV2lsbCByZWFycmFuZ2Ug dGhlbS4NCg0KPiANCj4gPiArc3RydWN0IG13bF92aWYgew0KPiA+ICsJc3RydWN0IGxpc3RfaGVh ZCBsaXN0Ow0KPiANCj4gQ291bGQgYWxzbyBjb25zaWRlciB1c2luZyBpdGVyYXRlX2FjdGl2ZV9p bnRlcmZhY2VzKCkgYW5kIGZyaWVuZHMuDQo+DQoNCkl0IGlzIGJldHRlciB0byBrZWVwIHByaXZh dGUgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGxpc3QgaW4gbXdsd2lmaSBkcml2ZXIuDQoNCj4NCj4g PiArCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7DQo+IA0KPiBhbmQgeW91IHNob3VsZCBwcm9i YWJseSBlbWJlZCB0aGUgc3RydWN0IGludG8gdGhlIHZpZi0+cHJpdiwgdGhlbiB5b3UgZG9uJ3QN Cj4gbmVlZCBhIHZpZiBwb2ludGVyIGluIGl0ICh1c2UgY29udGFpbmVyX29mKQ0KPg0KDQpXaWxs IG1vZGlmeSBpdC4NCg0KPiANCj4gPiArCXUxNiBzZXFubzsgICAgICAgLyogTm9uIEFNUERVIHNl cXVlbmNlIG51bWJlciBhc3NpZ25lZCBieQ0KPiBkcml2ZXIuICAqLw0KPiANCj4gVGhhdCBzZWVt cyBhIGJpdCBzdHJhbmdlIC0gd2h5IG5vdCBqdXN0IGxlYXZlIGl0IHVwIHRvIG1hYzgwMjExIHRo ZW4/DQo+IA0KPiA+ICsJLyogSW5kaWNhdGUgaWYgdGhpcyBpcyBzdGF0aW9uIG1vZGUgKi8NCj4g PiArCWJvb2wgaXNfc3RhOw0KPiANCj4gdXNlIHZpZi0+dHlwZSBpbnN0ZWFkDQo+DQoNCldpbGwg bW9kaWZ5IGl0Lg0KDQo+IA0KPiA+ICtzdHJ1Y3QgbXdsX2Ftc2R1X2ZyYWcgew0KPiA+ICsJc3Ry dWN0IHNrX2J1ZmYgKnNrYjsNCj4gPiArCXU4IHBhZDsNCj4gPiArCXU4ICpjdXJfcG9zOw0KPiA+ ICsJdTggbnVtOw0KPiA+ICsJdTMyIGppZmZpZXM7DQo+IA0KPiB1bnNpZ25lZCBsb25nDQo+IA0K PiBhbHNvIHN0cnVjdCBvcmRlcmluZyBpcyByZWFsbHkgYWJvdXQgYXMgYmFkIGFzIGl0IGNvdWxk IGJlIHdpdGggbG90cyBvZiBwYWRkaW5nDQo+IA0KDQpXaWxsIG1vZGlmeSBpdC4NCg0KPiA+ICtz dHJ1Y3QgbXdsX3N0YSB7DQo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQo+ID4gKwlzdHJ1 Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KPiANCj4gc2FtZSBoZXJlIC0gZW1iZWQgdGhlIHN0cnVj dCBpbnRvIHN0YS0+cHJpdiBhbmQgZ2V0IHJpZCBvZiB0aGUgc3RhIHBvaW50ZXINCj4NCg0KV2ls bCBtb2RpZnkgaXQuDQoNCj4gDQo+ID4gKy8qIFRyYW5zbWlzc2lvbiBpbmZvcm1hdGlvbiB0byB0 cmFuc21pdCBhIHNvY2tldCBidWZmZXIuICovIHN0cnVjdA0KPiA+ICttd2xfdHhfY3RybCB7DQo+ ID4gKwl2b2lkICpzdGE7DQo+ID4gKwl2b2lkICp2aWY7DQo+ID4gKwl2b2lkICprX2NvbmY7DQo+ IA0KPiB2b2lkIHBvaW50ZXJzIGRvbid0IHNlZW0gc28gZ3JlYXQNCj4gQnV0IHBlcmhhcHMgeW91 IGRvIHdhbnQgdGhlbSB0byBhdm9pZCBtaXN0YWtlcywgYnV0IHlvdSBzaG91bGQgYWRkIGENCj4g Y29tbWVudCB0aGVuLg0KPiBJZiB5b3UncmUgbm90IHN1cmUgd2hhdCBtaXN0YWtlcyBJJ20gdGFs a2luZyBhYm91dCAtIGNvbnNpZGVyIGFuIGludGVyZmFjZSBvcg0KPiBzdGF0aW9uIHRoYXQncyBy ZW1vdmVkIHdoaWxlIHRoZSBwYWNrZXQgaXMgcGVuZGluZyBUWC4NCj4NCg0KV2hlbiBpbnRlcmZh Y2Ugb3Igc3RhdGlvbiBpcyByZW1vdmVkLCByZWxhdGVkIHBlbmRpbmcgc29ja2V0IGJ1ZmZlcnMg d2lsbCBiZSByZW1vdmVkLg0KDQo+DQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG13bF92aWYg Km13bF9kZXZfZ2V0X3ZpZihjb25zdCBzdHJ1Y3QNCj4gaWVlZTgwMjExX3ZpZiAqdmlmKQ0KPiA+ ICt7DQo+ID4gKwlyZXR1cm4gKHN0cnVjdCBtd2xfdmlmICopJnZpZi0+ZHJ2X3ByaXY7IH0NCj4g PiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG13bF9zdGEgKm13bF9kZXZfZ2V0X3N0YShj b25zdCBzdHJ1Y3QNCj4gaWVlZTgwMjExX3N0YSAqc3RhKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4g KHN0cnVjdCBtd2xfc3RhICopJnN0YS0+ZHJ2X3ByaXY7IH0NCj4gDQo+IE9oIHdhaXQsIHNvIHlv dSAqZG8qIGVtYmVkIHRoZSBzdHJ1Y3RzIC0geW91IGNhbiB1c2UgY29udGFpbmVyX29mKCkgdG8g Z28gdGhlDQo+IG90aGVyIHdheSB0aGVuIGFuZCBnZXQgcmlkIG9mIHRoZSBwb2ludGVycy4NCj4g DQoNCldpbGwgbW9kaWZ5IGl0Lg0KDQo+DQo+ID4gK3N0YXRpYyBpbnQgbXdsX2Z3Y21kX3dhaXRf Y29tcGxldGUoc3RydWN0IG13bF9wcml2ICpwcml2LCB1bnNpZ25lZA0KPiBzaG9ydCBjbWQpDQo+ ID4gK3sNCj4gPiArCXVuc2lnbmVkIGludCBjdXJyX2l0ZXJhdGlvbiA9IE1BWF9XQUlUX0ZXX0NP TVBMRVRFX0lURVJBVElPTlM7DQo+ID4gKw0KPiA+ICsJdW5zaWduZWQgc2hvcnQgaW50X2NvZGUg PSAwOw0KPiA+ICsNCj4gPiArCWRvIHsNCj4gPiArCQlpbnRfY29kZSA9IGxlMTZfdG9fY3B1KCoo KF9fbGUxNiAqKSZwcml2DQo+IC0+cGNtZF9idWZbMF0pKTsNCj4gPiArCQltZGVsYXkoMSk7DQo+ ID4gKwl9IHdoaWxlICgoaW50X2NvZGUgIT0gY21kKSAmJiAoLS1jdXJyX2l0ZXJhdGlvbikpOw0K PiA+ICsNCj4gPiArCWlmIChjdXJyX2l0ZXJhdGlvbiA9PSAwKSB7DQo+ID4gKwkJd2lwaHlfZXJy KHByaXYtPmh3LT53aXBoeSwgImNtZCAweCUwNHg9JXMgdGltZWQNCj4gb3V0XG4iLA0KPiA+ICsJ CQkgIGNtZCwgbXdsX2Z3Y21kX2dldF9jbWRfc3RyaW5nKGNtZCkpOw0KPiA+ICsJCXJldHVybiAt RUlPOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW1kZWxheSgzKTsNCj4gDQo+IEJvdGggbWRlbGF5 KDEpIGFuZCBtZGVsYXkoMykgYXJlIEVYVFJFTUVMWSBsb25nIGZvciBhdG9taWMgY29udGV4dCwg dGhpcyBpcw0KPiBtYWRlIG11Y2ggd29yc2UgYnkgdGhlIGl0ZXJhdGlvbiBjb3VudGVyIHN0YXJ0 aW5nIGF0IDEwMDAwLCB3aGljaCBtZWFucw0KPiB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuLCBpbiB0 aGUgZmFpbHVyZSBjYXNlLCBibG9jayB0aGUgc3lzdGVtIGZvciAxMCBzZWNvbmRzIQ0KPiBUaGF0 IHNlZW1zIGV4Y2Vzc2l2ZSwgcGFydGljdWxhcmx5IHdoZW4gaXQncyBjYWxsZWQgZnJvbSBhdG9t aWMgY29udGV4dC4NCj4gDQo+IERvIHlvdSByZWFsbHkgbmVlZCB0aGF0IGJ0dz8gbWlnaHQgYmUg ZmFyIGJldHRlciB0byBzbGVlcCBmb3Igc29tZQ0KPiBldmVudC9pbnRlcnJ1cHQgaGVyZS4gQWxt b3N0IGFsbCBtYWM4MDIxMSBBUEkgZnVuY3Rpb25zIGNhbiBzbGVlcCwgYW5kIHlvdQ0KPiBwcm9i YWJseSAoaG9wZWZ1bGx5KSBhcmVuJ3QgZ2V0dGluZyBoZXJlIGZvciBUWC9SWC4NCj4gDQoNCkkg dGhpbmsgdGhleSBhcmUgbmVlZGVkLCB0aG91Z2ggaXQgc2hvdWxkIGdvIHRocm91Z2ggdmVyeSBm YXN0IGFuZCBuZXZlciBmYWlsIG9uIGEgaGVhbHRoeSBzeXN0ZW0uIFRoZSBudW1iZXIgb2YgaXRl cmF0aW9ucyBkZXBlbmQgb24gaHcgdHlwZS9pbnRlcmZhY2Ugc3BlZWQuIFdlIGNhbiByZWR1Y2Ug dGhlIG1heCBpdGVyYXRpb25zIGJhc2VkIG9uIHN5c3RlbXMgdGhhdCB3ZSBoYXZlIHRyaWVkIGFu ZCBnbyBmcm9tIHRoZXJlLg0KDQo+IA0KPiA+ICtzdGF0aWMgaW50IG13bF9md2NtZF9nZXRfdHhf cG93ZXJzKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwgdTE2DQo+ICpwb3dsaXN0LCB1MTYgY2gsDQo+ ID4gKwkJCQkgICB1MTYgYmFuZCwgdTE2IHdpZHRoLCB1MTYgc3ViX2NoKSB7DQo+ID4gKwlzdHJ1 Y3QgaG9zdGNtZF9jbWRfODAyXzExX3R4X3Bvd2VyICpwY21kOw0KPiA+ICsJaW50IGk7DQo+ID4g Kw0KPiA+ICsJcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3R4X3Bvd2VyICopJnBy aXYNCj4gLT5wY21kX2J1ZlswXTsNCj4gPiArDQo+ID4gKwlzcGluX2xvY2soJnByaXYtPmZ3Y21k X2xvY2spOw0KPiANCj4gTWF5YmUgdGhlbiB0aGF0IGNvdWxkIGFsc28gYmUgYSBtdXRleCBpbnN0 ZWFkLg0KPg0KDQpXaWxsIG5vdCBjaGFuZ2UgaXQuDQoNCj4gDQo+ID4gK3N0YXRpYyB1OCBtd2xf ZndjbWRfZ2V0XzgwbV9wcmlfY2hubF9vZmZzZXQodTggY2hhbm5lbCkgew0KPiA+ICsJdTggYWN0 X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzA7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChjaGFu bmVsKSB7DQo+ID4gKwljYXNlIDM2Og0KPiA+ICsJCWFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllf Q0hBTl8wOw0KPiA+ICsJCWJyZWFrOw0KPiANCj4gVGhpcyBpcyBraW5kYSBtZXNzZWQgdXAgLSB3 aHkgYXJlbid0IHlvdSB1c2luZyBzb21ldGhpbmcgbGlrZSBjaGFubmVsDQo+IC0+aHdfY2hhbm5l bCBvciB3aGF0ZXZlciBpdCdzIGNhbGxlZD8NCj4NCg0KUGxlYXNlIGNoZWNrIG13bF9md2NtZF9z ZXRfcmZfY2hhbm5lbCgpLCB0aGUgbXdsX2Z3Y21kX2dldF84MG1fcHJpX2Nobmxfb2Zmc2V0KCkg aXMgb25seSB1c2VkIHRvIGNvbnZlcnQgaHdfdmFsdWUgdG8gY29uc3RhbnRzIHVzZWQgYnkgRlcg Y29tbWFuZC4NCg0KPg0KPiA+ICtzdGF0aWMgaW50IG13bF9md2NtZF9zZXRfaWVzKHN0cnVjdCBt d2xfcHJpdiAqcHJpdiwgc3RydWN0IG13bF92aWYNCj4gKm13bF92aWYpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBob3N0Y21kX2NtZF9zZXRfaWVzICpwY21kOw0KPiA+ICsNCj4gPiArCWlmICghbXds X3ZpZi0+YmVhY29uX2luZm8udmFsaWQpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0K PiA+ICsJaWYgKG13bF92aWYtPmJlYWNvbl9pbmZvLmllX2h0X2xlbiA+IHNpemVvZihwY21kLT5p ZV9saXN0X2h0KSkNCj4gPiArCQlnb3RvIGVpbnZhbDsNCj4gPiArDQo+ID4gKwlpZiAobXdsX3Zp Zi0+YmVhY29uX2luZm8uaWVfdmh0X2xlbiA+IHNpemVvZihwY21kDQo+IC0+aWVfbGlzdF92aHQp KQ0KPiA+ICsJCWdvdG8gZWludmFsOw0KPiA+ICsNCj4gPiArCXBjbWQgPSAoc3RydWN0IGhvc3Rj bWRfY21kX3NldF9pZXMgKikmcHJpdi0+cGNtZF9idWZbMF07DQo+ID4gKw0KPiA+ICsJc3Bpbl9s b2NrKCZwcml2LT5md2NtZF9sb2NrKTsNCj4gPiArDQo+ID4gKwltZW1zZXQocGNtZCwgMHgwMCwg c2l6ZW9mKCpwY21kKSk7DQo+ID4gKwlwY21kLT5jbWRfaGRyLmNtZCA9IGNwdV90b19sZTE2KEhP U1RDTURfQ01EX1NFVF9JRVMpOw0KPiA+ICsJcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUx NihzaXplb2YoKnBjbWQpKTsNCj4gPiArCXBjbWQtPmNtZF9oZHIubWFjaWQgPSBtd2xfdmlmLT5t YWNpZDsNCj4gPiArDQo+ID4gKwlwY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihIT1NUQ01EX0FD VF9HRU5fU0VUKTsNCj4gPiArDQo+ID4gKwlwY21kLT5pZV9saXN0X2xlbl9odCA9IGNwdV90b19s ZTE2KG13bF92aWYNCj4gLT5iZWFjb25faW5mby5pZV9odF9sZW4pOw0KPiA+ICsJbWVtY3B5KHBj bWQtPmllX2xpc3RfaHQsIG13bF92aWYtPmJlYWNvbl9pbmZvLmllX2h0X3B0ciwNCj4gPiArCSAg ICAgICBtd2xfdmlmLT5iZWFjb25faW5mby5pZV9odF9sZW4pOw0KPiA+ICsNCj4gPiArCXBjbWQt PmllX2xpc3RfbGVuX3ZodCA9IGNwdV90b19sZTE2KG13bF92aWYNCj4gLT5iZWFjb25faW5mby5p ZV92aHRfbGVuKTsNCj4gPiArCW1lbWNweShwY21kLT5pZV9saXN0X3ZodCwgbXdsX3ZpZi0+YmVh Y29uX2luZm8uaWVfdmh0X3B0ciwNCj4gPiArCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5mby5p ZV92aHRfbGVuKTsNCj4gPiArDQo+ID4gKwlpZiAocHJpdi0+Y2hpcF90eXBlID09IE1XTDg4OTcp IHsNCj4gPiArCQlwY21kLT5pZV9saXN0X2xlbl9wcm9wcmlldGFyeSA9DQo+ID4gKwkJCWNwdV90 b19sZTE2KG13bF92aWYtPmJlYWNvbl9pbmZvLmllX3dtbV9sZW4pOw0KPiA+ICsJCW1lbWNweShw Y21kLT5pZV9saXN0X3Byb3ByaWV0YXJ5LA0KPiA+ICsJCSAgICAgICBtd2xfdmlmLT5iZWFjb25f aW5mby5pZV93bW1fcHRyLA0KPiA+ICsJCSAgICAgICBtd2xfdmlmLT5iZWFjb25faW5mby5pZV93 bW1fbGVuKTsNCj4gPiArCX0NCj4gDQo+IFdoeSB3b3VsZCB0aGUgZmlybXdhcmUgZXZlbiBjYXJl IGFib3V0IHRoZSBzcGxpdCBpbnRvIHRoZSB2YXJpb3VzIElFcz8NCj4gDQo+IFlvdSdyZSBwb3Rl bnRpYWxseSBsb3NpbmcgaW5mb3JtYXRpb24gaGVyZSBieSB0cmVhdGluZyAqb25seSogdGhlIFdN TSBJRSBhcw0KPiB0aGUgInJlbWFpbmluZyIgLSB5b3UgcmVhbGx5IHNob3VsZCB0cnkgaGFyZGVy IHRvIHByZXNlcnZlIHRoZSBJRXMgY29taW5nIGZyb20NCj4gaG9zdGFwZCBjb21wbGV0ZWx5Lg0K Pg0KDQpUaGlzIGlzIHRoZSBpbnRlcmZhY2Ugd2l0aCBvdXIgZmlybXdhcmUuDQoNCj4gDQo+ID4g K3ZvaWQgbXdsX2Z3Y21kX2ludF9kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KSB7DQo+ ID4gKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXY7DQo+ID4gKw0KPiA+ICsJcHJpdiA9IGh3LT5wcml2 Ow0KPiANCj4gWW91IGNhbiByb2xsIHRoYXQgaW50byBvbmUgbGluZSBidHcsIGluIG1hbnkgbWFu eSBwbGFjZXMsIHRvIHJlZHVjZSB0aGUgbGVuZ3RoDQo+IG9mIHlvdXIgY29kZS4NCj4NCg0KV2ls bCBtb2RpZnkgaXQuDQoNCj4gDQo+ID4gKyNpZiBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEEgPiAz DQo+IA0KPiBJdCBkb2Vzbid0IHNlZW0gcmlnaHQgZm9yIHRoaXMgdG8gYmUgYSBjb21waWxlLXRp bWUgZmxhZz8gSWYgaXQncyBuZWVkZWQgZm9yDQo+IGRpZmZlcmVudCBkZXZpY2VzIHRoZW4gaXQg c2hvdWxkIGJlIGEgcnVuLXRpbWUgY2hvaWNlLCBpZiBpdCdzIGp1c3QgYSBjb25zdGFudCB3aHkN Cj4gYm90aGVyIHdpdGggdGhlICNpZiwgYW5kIGlmIGl0J3Mgc29tZSBzb3J0IG9mIGNvbXBpbGUt dGltZSBvcHRpb24gdGhlbiBzaG91bGRuJ3QNCj4gaXQgYmUgYSBDT05GSUdfKj8NCj4gDQoNCldp bGwgcmVtb3ZlIGl0Lg0KDQo+IA0KPiA+ICtpbnQgbXdsX2Z3Y21kX3NldF9od19zcGVjcyhzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodykgew0KPiA+ICsJc3RydWN0IG13bF9wcml2ICpwcml2Ow0KPiA+ ICsJc3RydWN0IGhvc3RjbWRfY21kX3NldF9od19zcGVjICpwY21kOw0KPiA+ICsJaW50IGk7DQo+ ID4gKw0KPiA+ICsJcHJpdiA9IGh3LT5wcml2Ow0KPiA+ICsNCj4gPiArCXBjbWQgPSAoc3RydWN0 IGhvc3RjbWRfY21kX3NldF9od19zcGVjICopJnByaXYtPnBjbWRfYnVmWzBdOw0KPiA+ICsNCj4g PiArCXNwaW5fbG9jaygmcHJpdi0+ZndjbWRfbG9jayk7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KHBj bWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KPiA+ICsJcGNtZC0+Y21kX2hkci5jbWQgPSBjcHVf dG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfSFdfU1BFQyk7DQo+ID4gKwlwY21kLT5jbWRfaGRyLmxl biA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOw0KPiA+ICsJcGNtZC0+d2NiX2Jhc2VbMF0g PSBjcHVfdG9fbGUzMihwcml2DQo+IC0+ZGVzY19kYXRhWzBdLnBwaHlzX3R4X3JpbmcpOw0KPiA+ ICsjaWYgU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBID4gMw0KPiA+ICsJZm9yIChpID0gMTsgaSA8 IFNZU0FEUFRfVE9UQUxfVFhfUVVFVUVTOyBpKyspDQo+ID4gKwkJcGNtZC0+d2NiX2Jhc2VbaV0g PQ0KPiA+ICsJCQljcHVfdG9fbGUzMihwcml2LT5kZXNjX2RhdGFbaV0ucHBoeXNfdHhfcmluZyk7 DQo+ID4gKyNlbmRpZg0KPiANCj4gQWxzbyBoZXJlLCB3aXRoIHRoZSBhZGRpdGlvbmFsIHdyaW5r bGUgdGhhdCB5b3UnbGwgZ2V0IGEgY29tcGlsZXIgd2FybmluZw0KPiAodW51c2VkIHZhcmlhYmxl ICdpJykgd2hlbiBpdCdzIDw9IDMuDQo+DQoNCldpbGwgcmVtb3ZlIGl0Lg0KDQo+IA0KPiA+ICtz dGF0aWMgaW50IG13bF9tYWM4MDIxMV9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykgew0K PiA+ICsJc3RydWN0IG13bF9wcml2ICpwcml2Ow0KPiA+ICsJaW50IHJjOw0KPiA+ICsNCj4gPiAr CXByaXYgPSBody0+cHJpdjsNCj4gPiArDQo+ID4gKwlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBk ZXYtPmlycSwgbXdsX2lzciwNCj4gPiArCQkJIElSUUZfU0hBUkVELCBNV0xfRFJWX05BTUUsIGh3 KTsNCj4gPiArCWlmIChyYykgew0KPiA+ICsJCXByaXYtPmlycSA9IC0xOw0KPiA+ICsJCXdpcGh5 X2Vycihody0+d2lwaHksICJmYWlsIHRvIHJlZ2lzdGVyIElSUQ0KPiBoYW5kbGVyXG4iKTsNCj4g PiArCQlyZXR1cm4gcmM7DQo+ID4gKwl9DQo+ID4gKwlwcml2LT5pcnEgPSBwcml2LT5wZGV2LT5p cnE7DQo+IA0KPiBXaHkgZG8geW91IGRvIHRoaXMgZXZlcnkgdGltZSB5b3UgYnJpbmcgdXAgdGhl IGRldmljZT8gSXQncyBzbWFydGVyIHRvIGRvIHRoaXMNCj4gb25jZSBmb3IgcmVnaXN0cmF0aW9u Lg0KPg0KDQpXaWxsIG1vZGlmeSBpdC4NCg0KPiANCj4gPiArCS8qIEVuYWJsZSBUWCByZWNsYWlt IGFuZCBSWCB0YXNrbGV0cy4gKi8NCj4gPiArCXRhc2tsZXRfZW5hYmxlKCZwcml2LT50eF90YXNr KTsNCj4gPiArCXRhc2tsZXRfZW5hYmxlKCZwcml2LT5yeF90YXNrKTsNCj4gPiArDQo+ID4gKwkv KiBFbmFibGUgaW50ZXJydXB0cyAqLw0KPiA+ICsJbXdsX2Z3Y21kX2ludF9lbmFibGUoaHcpOw0K PiANCj4gT2J2aW91c2x5IHlvdSBkb24ndCBoYXZlIHRvICplbmFibGUqIGludGVycnVwdHMsIHVu dGlsIGhlcmUsIGJ1dCByZSAtcmVnaXN0ZXJpbmcNCj4gYWxsIHRoZSB0aW1lIHNlZW1zIHN0cmFu Z2UuDQo+IA0KPiA+ICsJLyogRGlzYWJsZSBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4gKi8N Cj4gPiArCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfdGFzayk7DQo+ID4gKwl0YXNrbGV0X2Rp c2FibGUoJnByaXYtPnJ4X3Rhc2spOw0KPiA+ICsNCj4gPiArCS8qIFJldHVybiBhbGwgc2ticyB0 byBtYWM4MDIxMSAqLw0KPiA+ICsJbXdsX3R4X2RvbmUoKHVuc2lnbmVkIGxvbmcpaHcpOw0KPiAN Cj4gRXJyLCB3aHkgd291bGQgeW91IGhhdmUgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCB0YWtl cyBhbiAndW5zaWduZWQgbG9uZycNCj4gaW5zdGVhZCBvZiBhIHByb3Blcmx5IHR5cGVkIHBvaW50 ZXI/Pw0KPg0KDQp0YXNrbGV0X2luaXQoJnByaXYtPnR4X3Rhc2ssICh2b2lkICopbXdsX3R4X2Rv bmUsICh1bnNpZ25lZCBsb25nKWh3KTsgPT4gbXdsX3R4X2RvbmUoKSBpcyBhbHNvIHVzZWQgaGVy ZS4NCg0KPiANCj4gPiArCWlmICghbWFjaWQtLSkgew0KPiANCj4gVGhhdCdzIC4uLiBhd2t3YXJk LiBCZXR0ZXIgcmV3cml0ZSBpdCB0byBjaGVjayBmaXJzdCBhbmQgdGhlbiBkZWNyZW1lbnQgbGF0 ZXIuDQo+DQoNCldpbGwgbW9kaWZ5IGl0Lg0KDQo+IA0KPiA+ICsJaWYgKHZpZi0+dHlwZSA9PSBO TDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7DQo+ID4gKwkJZXRoZXJfYWRkcl9jb3B5KG13bF92aWYt PnN0YV9tYWMsIHZpZi0+YWRkcik7DQo+ID4gKwkJbXdsX3ZpZi0+aXNfc3RhID0gdHJ1ZTsNCj4g PiArCQltd2xfZndjbWRfYnNzX3N0YXJ0KGh3LCB2aWYsIHRydWUpOw0KPiA+ICsJCW13bF9md2Nt ZF9zZXRfaW5mcmFfbW9kZShodywgdmlmKTsNCj4gPiArCQltd2xfZndjbWRfc2V0X21hY19hZGRy X2NsaWVudChodywgdmlmLCB2aWYtPmFkZHIpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICh2 aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsNCj4gPiArCQlldGhlcl9hZGRyX2NvcHko bXdsX3ZpZi0+YnNzaWQsIHZpZi0+YWRkcik7DQo+ID4gKwkJbXdsX2Z3Y21kX3NldF9uZXdfc3Ru X2FkZF9zZWxmKGh3LCB2aWYpOw0KPiA+ICsJfQ0KPiANCj4gc3dpdGNoPw0KPiANCj4gPiArCWlm ICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikNCj4gPiArCQltd2xfZndjbWRf cmVtb3ZlX21hY19hZGRyKGh3LCB2aWYsIHZpZi0+YWRkcik7DQo+ID4gKw0KPiA+ICsJaWYgKHZp Zi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkNCj4gPiArCQltd2xfZndjbWRfc2V0X25ld19z dG5fZGVsKGh3LCB2aWYsIHZpZi0+YWRkcik7DQo+IA0KPiBkaXR0bw0KPiANCj4gPiArCXdpcGh5 X2RlYnVnKGh3LT53aXBoeSwgImludGVyZmFjZTogJWQsIGNoYW5nZTogMHgleFxuIiwNCj4gPiAr CQkgICAgdmlmLT50eXBlLCBjaGFuZ2VkKTsNCj4gPiArDQo+ID4gKwlpZiAodmlmLT50eXBlID09 IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pDQo+ID4gKwkJbXdsX21hYzgwMjExX2Jzc19pbmZvX2No YW5nZWRfc3RhKGh3LCB2aWYsIGluZm8sDQo+IGNoYW5nZWQpOw0KPiA+ICsNCj4gPiArCWlmICh2 aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApDQo+ID4gKwkJbXdsX21hYzgwMjExX2Jzc19p bmZvX2NoYW5nZWRfYXAoaHcsIHZpZiwgaW5mbywNCj4gY2hhbmdlZCk7DQo+IA0KPiBkaXR0bw0K Pg0KDQpXaWxsIG1vZGlmeSBpdC4NCg0KPiANCj4gPiArc3RhdGljIGludCBtd2xfbWFjODAyMTFf YW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KPiA+ICsJCQkJICAgICBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KPiA+ICsJCQkJICAgICBlbnVtIGllZWU4MDIxMV9hbXBk dV9tbG1lX2FjdGlvbg0KPiBhY3Rpb24sDQo+ID4gKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGEsDQo+ID4gKwkJCQkgICAgIHUxNiB0aWQsIHUxNiAqc3NuLCB1OCBidWZfc2l6ZSkg ew0KPiBbLi4uXQ0KPiA+ICsJc3Bpbl9sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7DQo+IFsuLi5d DQo+ID4gKwkJCXN0cmVhbSA9IG13bF9md2NtZF9hZGRfc3RyZWFtKGh3LCBzdGEsIHRpZCk7DQo+ IA0KPiBUaGlzIGlzIGFib3V0IHRoZSBvbmx5IHBsYWNlIHRoYXQgYWN0dWFsbHkgc2VuZHMgYSBj b21tYW5kIHdoaWxlIGl0IGNhbid0IHNsZWVwLg0KPiBJdCBzZWVtcyB5b3Ugc2hvdWxkIGJlIGFi bGUgdG8gcmVzdHJ1Y3R1cmUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGF0LCBzbyB0aGF0DQo+ IHlvdSBkb24ndCBoYXZlIHRvIHVzZSBhIHNwaW5sb2NrIGZvciBjb21tYW5kIHNlbmRpbmcgYW5k IGRvbid0IG5lZWQgYWxsIHRoYXQNCj4gYnVzeS1wb2xsaW5nIGJ1dCBjYW4gcHJvcGVybHkgZ28g dG8gc2xlZXAgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGZpcm13YXJlIHRvDQo+IHJlc3BvbmQgdG8g YSBjb21tYW5kLg0KPg0KPiANCj4gPiArY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsX21h YzgwMjExX29wcyA9IHsNCj4gPiArCS50eCAgICAgICAgICAgICAgICAgPSBtd2xfbWFjODAyMTFf dHgsDQo+ID4gKwkuc3RhcnQgICAgICAgICAgICAgID0gbXdsX21hYzgwMjExX3N0YXJ0LA0KPiA+ ICsJLnN0b3AgICAgICAgICAgICAgICA9IG13bF9tYWM4MDIxMV9zdG9wLA0KPiA+ICsJLmFkZF9p bnRlcmZhY2UgICAgICA9IG13bF9tYWM4MDIxMV9hZGRfaW50ZXJmYWNlLA0KPiA+ICsJLnJlbW92 ZV9pbnRlcmZhY2UgICA9IG13bF9tYWM4MDIxMV9yZW1vdmVfaW50ZXJmYWNlLA0KPiA+ICsJLmNv bmZpZyAgICAgICAgICAgICA9IG13bF9tYWM4MDIxMV9jb25maWcsDQo+ID4gKwkuYnNzX2luZm9f Y2hhbmdlZCAgID0gbXdsX21hYzgwMjExX2Jzc19pbmZvX2NoYW5nZWQsDQo+ID4gKwkuY29uZmln dXJlX2ZpbHRlciAgID0gbXdsX21hYzgwMjExX2NvbmZpZ3VyZV9maWx0ZXIsDQo+ID4gKwkuc2V0 X2tleSAgICAgICAgICAgID0gbXdsX21hYzgwMjExX3NldF9rZXksDQo+ID4gKwkuc2V0X3J0c190 aHJlc2hvbGQgID0gbXdsX21hYzgwMjExX3NldF9ydHNfdGhyZXNob2xkLA0KPiA+ICsJLnN0YV9h ZGQgICAgICAgICAgICA9IG13bF9tYWM4MDIxMV9zdGFfYWRkLA0KPiA+ICsJLnN0YV9yZW1vdmUg ICAgICAgICA9IG13bF9tYWM4MDIxMV9zdGFfcmVtb3ZlLA0KPiA+ICsJLmNvbmZfdHggICAgICAg ICAgICA9IG13bF9tYWM4MDIxMV9jb25mX3R4LA0KPiA+ICsJLmdldF9zdGF0cyAgICAgICAgICA9 IG13bF9tYWM4MDIxMV9nZXRfc3RhdHMsDQo+ID4gKwkuZ2V0X3N1cnZleSAgICAgICAgID0gbXds X21hYzgwMjExX2dldF9zdXJ2ZXksDQo+ID4gKwkuYW1wZHVfYWN0aW9uICAgICAgID0gbXdsX21h YzgwMjExX2FtcGR1X2FjdGlvbiwNCj4gPiArfTsNCj4gDQo+IEFsbCB0aGUgY2FsbGJhY2tzIHRo YXQgeW91IHVzZSBjYW4gc2xlZXAgKGFwYXJ0IGZyb20gVFggd2hlcmUgeW91IGRvbid0IHNlbmQN Cj4gZmlybXdhcmUgY29tbWFuZHMpLCBzbyByZWFsbHkgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJl c3RydWN0dXJlIHRoZQ0KPiBhZ2dyZWdhdGlvbiBjb2RlIHNsaWdodGx5Lg0KPg0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2x3aWZpL21hYzgwMjExLmgNCj4gYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9td2x3aWZpL21hYzgwMjExLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjAyNjdkZDg1DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bHdpZmkvbWFjODAyMTEuaA0KPiA+IEBAIC0w LDAgKzEsMjUgQEANCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIE1h cnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgc29mdHdhcmUg ZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbA0KPiBJbnRlcm5hdGlv bmFsDQo+ID4gKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBWZXJzaW9uIDIsDQo+IEp1bmUgMTk5MQ0KPiA+ICsgKiAodGhlICJMaWNlbnNl IikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcw0KPiBGaWxl IGluDQo+ID4gKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIExpY2Vuc2UsIGEgY29weQ0KPiBvZiB3aGljaA0KPiA+ICsgKiBpcyBhdmFpbGFibGUgYnkg d3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQo+ID4gKyAqDQo+ ID4gKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBBTkQNCj4gVEhFDQo+ID4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQQ0KPiBQQVJUSUNVTEFSDQo+IFBVUlBPU0UNCj4g PiArICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRk aXRpb25hbA0KPiBkZXRhaWxzIGFib3V0DQo+ID4gKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1l ci4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBkZWZp bmVzIG1hYzgwMjExIHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBf bWFjODAyMTFfaF8NCj4gPiArI2RlZmluZSBfbWFjODAyMTFfaF8NCj4gPiArDQo+ID4gKyNpbmNs dWRlIDxuZXQvbWFjODAyMTEuaD4NCj4gPiArDQo+ID4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX29wcyBtd2xfbWFjODAyMTFfb3BzOw0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIF9tYWM4 MDIxMV9oXyAqLw0KPiANCj4gVGhhdCBmaWxlIHNlZW1zIHNvbWV3aGF0IHBvaW50bGVzcyA6KQ0K PiBKdXN0IHB1dCB0aGUgb25lIGxpbmUgaW50byBkZXYuaD8NCj4NCg0KV2lsbCBtb2RpZnkgaXQu DQoNCj4gDQo+ID4gKwl3aXBoeV9pbmZvKHByaXYtPmh3LT53aXBoeSwgInByaXYtPmlvYmFzZTEg PSAlcFxuIiwgcHJpdg0KPiAtPmlvYmFzZTEpOw0KPiANCj4gQXQgImluZm8iIGxldmVsLCB0aGF0 IHNlZW1zIGEgYml0IG92ZXJraWxsLg0KPg0KDQpXaWxsIGNoYW5nZSBpdCB0byB3aXBoeV9kZWJ1 Zy4NCg0KPiANCj4gPiArCXByaXYtPnBjbWRfYnVmID0NCj4gPiArCQkodW5zaWduZWQgc2hvcnQg KilkbWFfYWxsb2NfY29oZXJlbnQoJnByaXYtPnBkZXYtPmRldiwNCj4gPiArCQkJCQkJICAgICBD TURfQlVGX1NJWkUsDQo+ID4gKwkJCQkJCSAgICAgJnByaXYNCj4gLT5wcGh5c19jbWRfYnVmLA0K PiA+ICsJCQkJCQkgICAgIEdGUF9LRVJORUwpOw0KPiA+ICsNCj4gPiArCWlmICghcHJpdi0+cGNt ZF9idWYpIHsNCj4gPiArCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LA0KPiA+ICsJCQkgICIl czogY2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgY29tbWFuZA0KPiBidWZmZXJcbiIsDQo+ID4gKwkJ CSAgTVdMX0RSVl9OQU1FKTsNCj4gPiArCQlnb3RvIGVycl9pb3VubWFwX2lvYmFzZTE7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksDQo+ID4gKwkJICAg InByaXYtPnBjbWRfYnVmID0gJXAgIHByaXYtPnBwaHlzX2NtZF9idWYgPSAlcFxuIiwNCj4gPiAr CQkgICBwcml2LT5wY21kX2J1ZiwNCj4gPiArCQkgICAodm9pZCAqKXByaXYtPnBwaHlzX2NtZF9i dWYpOw0KPiANCj4gRGl0dG8uIE5vYm9keSB3aWxsIGV2ZXIgd2FudCB0byBzZWUgdGhpcy4NCj4g DQo+IEFsc28sIHRoZXJlJ3MgdXN1YWxseSBubyBuZWVkIHRvIHByaW50IGFueXRoaW5nIG9uIGFs bG9jYXRpb24gZmFpbHVyZXMgYXMgdGhleSdyZQ0KPiB2ZXJ5IG5vaXN5IGFscmVhZHkuDQo+DQoN CldpbGwgcmVtb3ZlIGl0Lg0KDQo+IA0KPiA+ICsgICAgIHJjID0gcGNpX3NldF9kbWFfbWFzayhw ZGV2LCAweGZmZmZmZmZmKTsNCj4gDQo+IFlvdSBzaG91bGQgdXNlIG9uZSBvZiB0aGUgRE1BIG1h c2sgY29uc3RhbnRzLg0KPiANCg0KV2lsbCBtb2RpZnkgaXQuDQoNCj4NCj4gPiArCWlmIChkZXNj LT5wcnhfcmluZykgew0KPiA+ICsJCWRlc2MtPnJ4X2J1Zl9zaXplID0gU1lTQURQVF9NQVhfQUdH Ul9TSVpFOw0KPiA+ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgU1lTQURQVF9NQVhfTlVNX1JY X0RFU0M7IGkrKykgew0KPiA+ICsJCQlyeF9obmRsID0gJmRlc2MtPnJ4X2huZGxbaV07DQo+ID4g KwkJCXJ4X2huZGwtPnBza19idWZmID0NCj4gPiArCQkJCWRldl9hbGxvY19za2IoZGVzYy0+cnhf YnVmX3NpemUpOw0KPiA+ICsNCj4gPiArCQkJaWYgKCFyeF9obmRsLT5wc2tfYnVmZikgew0KPiA+ ICsJCQkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwNCj4gPiArCQkJCQkgICJyeGRlc2MgJWk6 IG5vIHNrYnVmZg0KPiBhdmFpbGFibGVcbiIsDQo+ID4gKwkJCQkJICBpKTsNCj4gPiArCQkJCXJl dHVybiAtRU5PTUVNOw0KPiA+ICsJCQl9DQo+ID4gKw0KPiA+ICsJCQlpZiAoc2tiX2xpbmVhcml6 ZShyeF9obmRsLT5wc2tfYnVmZikpIHsNCj4gPiArCQkJCWRldl9rZnJlZV9za2JfYW55KHJ4X2hu ZGwtPnBza19idWZmKTsNCj4gPiArCQkJCXJ4X2huZGwtPnBza19idWZmID0gTlVMTDsNCj4gPiAr CQkJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksDQo+ID4gKwkJCQkJICAibmVlZCBsaW5lYXJp emUgbWVtb3J5XG4iKTsNCj4gPiArCQkJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsJCQl9DQo+IA0K PiBUaGlzIGlzIHN0aWxsIGNvbXBsZXRlbHkgcG9pbnRsZXNzLg0KPiANCj4gPiArCQkJc2tiX3Jl c2VydmUocnhfaG5kbC0+cHNrX2J1ZmYsDQo+ID4gKwkJCQkgICAgU1lTQURQVF9NSU5fQllURVNf SEVBRFJPT00pOw0KPiA+ICsJCQlkZXNjLT5wcnhfcmluZ1tpXS5yeF9jb250cm9sID0NCj4gPiAr CQkJCUVBR0xFX1JYRF9DVFJMX0RSSVZFUl9PV047DQo+ID4gKwkJCWRlc2MtPnByeF9yaW5nW2ld LnN0YXR1cyA9DQo+IEVBR0xFX1JYRF9TVEFUVVNfT0s7DQo+ID4gKwkJCWRlc2MtPnByeF9yaW5n W2ldLnFvc19jdHJsID0gMHgwMDAwOw0KPiA+ICsJCQlkZXNjLT5wcnhfcmluZ1tpXS5jaGFubmVs ID0gMHgwMDsNCj4gPiArCQkJZGVzYy0+cHJ4X3JpbmdbaV0ucnNzaSA9IDB4MDA7DQo+ID4gKwkJ CWRlc2MtPnByeF9yaW5nW2ldLnBrdF9sZW4gPQ0KPiA+ICsJCQkJY3B1X3RvX2xlMTYoU1lTQURQ VF9NQVhfQUdHUl9TSVpFKTsNCj4gPiArCQkJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRl diwNCj4gPiArCQkJCQkgICAgIHJ4X2huZGwtPnBza19idWZmLT5kYXRhLA0KPiA+ICsJCQkJCSAg ICAgZGVzYy0+cnhfYnVmX3NpemUsDQo+ID4gKwkJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0Up Ow0KPiANCj4gWW91IG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSAocHJvcGVybHkgLSB1 c2UgdGhlIHJpZ2h0IGZ1bmN0aW9uLCBub3QgIT0NCj4gTlVMTCEpDQo+DQoNCldpbGwgbW9kaWZ5 IGl0Lg0KDQo+IA0KPiA+ICsJaWYgKGRlc2MtPnByeF9yaW5nKSB7DQo+ID4gKwkJZm9yIChpID0g MDsgaSA8IFNZU0FEUFRfTUFYX05VTV9SWF9ERVNDOyBpKyspIHsNCj4gPiArCQkJcnhfaG5kbCA9 ICZkZXNjLT5yeF9obmRsW2ldOw0KPiA+ICsJCQlpZiAoIXJ4X2huZGwtPnBza19idWZmKQ0KPiA+ ICsJCQkJY29udGludWU7DQo+ID4gKw0KPiA+ICsJCQlpZiAoc2tiX3NoaW5mbyhyeF9obmRsLT5w c2tfYnVmZiktPm5yX2ZyYWdzKQ0KPiA+ICsJCQkJc2tiX3NoaW5mbyhyeF9obmRsLT5wc2tfYnVm ZikNCj4gLT5ucl9mcmFncyA9IDA7DQo+ID4gKw0KPiA+ICsJCQlpZiAoc2tiX3NoaW5mbyhyeF9o bmRsLT5wc2tfYnVmZiktPmZyYWdfbGlzdCkNCj4gPiArCQkJCXNrYl9zaGluZm8ocnhfaG5kbC0+ cHNrX2J1ZmYpDQo+IC0+ZnJhZ19saXN0ID0gTlVMTDsNCj4gDQo+IEhvdyBkbyB5b3UgdGhpbmsg dGhpcyB3b3VsZCBtYWtlIGFueSBzZW5zZT8/DQo+DQoNCldpbGwgY29ycmVjdCBpdC4NCg0KPiAN Cj4gPiArCQlpZiAocGRlc2MtPnN0YXR1cyAhPSBHRU5FUkFMX0RFQ1JZUFRfRVJSKSB7DQo+ID4g KwkJCWlmICgoKHBkZXNjLT5zdGF0dXMgJiAofkRFQ1JZUFRfRVJSX01BU0spKSAmDQo+ID4gKwkJ CSAgICBUS0lQX0RFQ1JZUFRfTUlDX0VSUikgJiYgISgocGRlc2MtPnN0YXR1cw0KPiAmDQo+ID4g KwkJCSAgICAoV0VQX0RFQ1JZUFRfSUNWX0VSUiB8DQo+IFRLSVBfREVDUllQVF9JQ1ZfRVJSKSkp KSB7DQo+IA0KPiBUaGUgY29kZSBmb3JtYXR0aW5nIGZvciB0aGlzIGNvbmRpdGlvbiBpcyB2ZXJ5 IHZlcnkgc3RyYW5nZS4NCj4gDQo+ID4gK3N0YXRpYyBpbnQgbXdsX3J4X3JlZmlsbChzdHJ1Y3Qg bXdsX3ByaXYgKnByaXYsIHN0cnVjdCBtd2xfcnhfaG5kbA0KPiAqcnhfaG5kbCkNCj4gPiArew0K PiA+ICsJc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQo+ID4gKw0KPiA+ICsJZGVzYyA9ICZw cml2LT5kZXNjX2RhdGFbMF07DQo+ID4gKw0KPiA+ICsJcnhfaG5kbC0+cHNrX2J1ZmYgPSBkZXZf YWxsb2Nfc2tiKGRlc2MtPnJ4X2J1Zl9zaXplKTsNCj4gPiArDQo+ID4gKwlpZiAoIXJ4X2huZGwt PnBza19idWZmKQ0KPiA+ICsJCWdvdG8gbm9tZW07DQo+ID4gKw0KPiA+ICsJaWYgKHNrYl9saW5l YXJpemUocnhfaG5kbC0+cHNrX2J1ZmYpKSB7DQo+ID4gKwkJZGV2X2tmcmVlX3NrYl9hbnkocnhf aG5kbC0+cHNrX2J1ZmYpOw0KPiA+ICsJCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJuZWVk IGxpbmVhcml6ZSBtZW1vcnlcbiIpOw0KPiA+ICsJCWdvdG8gbm9tZW07DQo+ID4gKwl9DQo+IA0K PiBTdGlsbCBtYWtlIG5vIHNlbnNlLg0KPiANCj4gPiArCXJ4X2huZGwtPnBkZXNjLT5wcGh5c19i dWZmX2RhdGEgPQ0KPiA+ICsJCWNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYs DQo+ID4gKwkJCQkJICAgcnhfaG5kbC0+cHNrX2J1ZmYtPmRhdGEsDQo+ID4gKwkJCQkJICAgZGVz Yy0+cnhfYnVmX3NpemUsDQo+ID4gKwkJCQkJICAgUENJX0RNQV9CSURJUkVDVElPTkFMKSk7DQo+ IA0KPiBBbHNvIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZS4gQklESVJFQ1RJT05BTCBh bHNvIHNlZW1zIHdyb25nLg0KPiANCg0KV2lsbCBtb2RpZnkgaXQuDQoNCj4gDQo+ID4gK2ludCBt d2xfcnhfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykgew0KPiA+ICsJc3RydWN0IG13bF9w cml2ICpwcml2Ow0KPiA+ICsJaW50IHJjOw0KPiA+ICsNCj4gPiArCXByaXYgPSBody0+cHJpdjsN Cj4gPiArDQo+ID4gKwlyYyA9IG13bF9yeF9yaW5nX2FsbG9jKHByaXYpOw0KPiA+ICsJaWYgKHJj KSB7DQo+ID4gKwkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImFsbG9jYXRpbmcgUlggcmluZyBmYWls ZWRcbiIpOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlyYyA9IG13bF9yeF9yaW5nX2luaXQocHJp dik7DQo+ID4gKwkJaWYgKHJjKSB7DQo+ID4gKwkJCW13bF9yeF9yaW5nX2ZyZWUocHJpdik7DQo+ ID4gKwkJCXdpcGh5X2Vycihody0+d2lwaHksDQo+ID4gKwkJCQkgICJpbml0aWFsaXppbmcgUlgg cmluZyBmYWlsZWRcbiIpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gDQo+IEJldHRlciB3cml0ZSB0 aGlzIGFzDQo+IA0KPiAgcmMgPSBhbGxvYygpDQo+ICBpZiAocmMpDQo+ICAgIHJldHVybjsNCj4g IHJjID0gaW5pdCgpDQo+ICBpZiAocmMpDQo+ICAgIHJldHVybjsNCj4gDQo+IGV0Yy4NCj4gDQoN CldpbGwgbW9kaWZ5IGl0Lg0KDQo+ID4gKwkJCWlmIChpZWVlODAyMTFfaGFzX3RvZHMod2gtPmZy YW1lX2NvbnRyb2wpKQ0KPiA+ICsJCQkJbXdsX3ZpZiA9IG13bF9yeF9maW5kX3ZpZl9ic3MocHJp diwgd2gNCj4gLT5hZGRyMSk7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCW13bF92aWYgPSBtd2xf cnhfZmluZF92aWZfYnNzKHByaXYsIHdoDQo+IC0+YWRkcjIpOw0KPiA+ICsNCj4gPiArCQkJaWYg KG13bF92aWYgJiYgbXdsX3ZpZi0+aXNfaHdfY3J5cHRvX2VuYWJsZWQpDQo+IHsNCj4gPiArCQkJ CS8qIFdoZW4gTU1JQyBFUlJPUiBpcyBlbmNvdW50ZXJlZA0KPiA+ICsJCQkJICogYnkgdGhlIGZp cm13YXJlLCBwYXlsb2FkIGlzDQo+ID4gKwkJCQkgKiBkcm9wcGVkIGFuZCBvbmx5IDMyIGJ5dGVz IG9mDQo+ID4gKwkJCQkgKiBtd2w4ayBGaXJtd2FyZSBoZWFkZXIgaXMgc2VudA0KPiA+ICsJCQkJ ICogdG8gdGhlIGhvc3QuDQo+ID4gKwkJCQkgKg0KPiA+ICsJCQkJICogV2UgbmVlZCB0byBhZGQg Zm91ciBieXRlcyBvZg0KPiA+ICsJCQkJICoga2V5IGluZm9ybWF0aW9uLiAgSW4gaXQNCj4gPiAr CQkJCSAqIE1BQzgwMjExIGV4cGVjdHMga2V5aWR4IHNldCB0bw0KPiA+ICsJCQkJICogMCBmb3Ig dHJpZ2dlcmluZyBDb3VudGVyDQo+ID4gKwkJCQkgKiBNZWFzdXJlIG9mIE1NSUMgZmFpbHVyZS4N Cj4gPiArCQkJCSAqLw0KPiANCj4gVW1tLiBUaGF0J3Mgb25seSB0cnVlIGZvciBQVEtzLg0KPiAN Cj4gPiArc3RhdGljIGludCBtd2xfdHhfcmluZ19hbGxvYyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYp IHsNCj4gPiArCXN0cnVjdCBtd2xfZGVzY19kYXRhICpkZXNjOw0KPiA+ICsJaW50IG51bTsNCj4g PiArCXU4ICptZW07DQo+ID4gKw0KPiA+ICsJZGVzYyA9ICZwcml2LT5kZXNjX2RhdGFbMF07DQo+ ID4gKw0KPiA+ICsJbWVtID0gKHU4ICopZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5wZGV2LT5k ZXYsDQo+ID4gKwkJTUFYX05VTV9UWF9SSU5HX0JZVEVTICogU1lTQURQVF9OVU1fT0ZfREVTQ19E QVRBLA0KPiA+ICsJCSZkZXNjLT5wcGh5c190eF9yaW5nLCBHRlBfS0VSTkVMKTsNCj4gDQo+IFRo YXQgY2FzdCBpcyBwb2ludGxlc3MsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHZvaWQgKi4NCj4gDQo+ ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfdHhfaW5zZXJ0X2NjbXBfaGRyKHU4ICpwY2NtcF9o ZHIsDQo+ID4gKwkJCQkJICB1OCBrZXlfaWQsIHUxNiBpdjE2LCB1MzINCj4gaXYzMikNCj4gPiAr ew0KPiA+ICsJKigodTE2ICopcGNjbXBfaGRyKSA9IGl2MTY7DQo+ID4gKwlwY2NtcF9oZHJbMl0g PSAwOw0KPiA+ICsJcGNjbXBfaGRyWzNdID0gRVhUX0lWIHwgKGtleV9pZCA8PCA2KTsNCj4gPiAr CSooKHUzMiAqKSZwY2NtcF9oZHJbNF0pID0gaXYzMjsNCj4gPiArfQ0KPiANCj4gV2h5IGRvbid0 IHlvdSBsZXQgbWFjODAyMTEgZG8gdGhpcz8gWW91IGFsc28gaGF2ZSBjbGVhciBhbGlnbm1lbnQg YW5kDQo+IGVuZGlhbiBpc3N1ZXMgaGVyZSwgc28gbWFjODAyMTEgd2lsbCBkbyBpdCBiZXR0ZXIu Li4NCj4NCg0KV2lsbCBmaXggYWxpZ25tZW50IGFuZCBlbmRpYW4gcHJvYmxlbS4gQ29udmVyc2lv biBvZiBkYXRhIHBhY2tldCB0byB3b3JrIHdpdGggZmlybXdhcmUgaXMgZG9uZSBhbmQgd2VsbCB0 ZXN0ZWQuIE1heWJlIHdlIGNhbiBjaGVjayBob3cgdG8gbGV0IG1hYzgwMjExIGRvIHRoaXMgbGF0 ZXIuDQoNCj4gDQo+ID4gKwlpZiAodHhfc3RhdHMtPnN0YXJ0X3RpbWUgPT0gMCkNCj4gPiArCQl0 eF9zdGF0cy0+c3RhcnRfdGltZSA9IGppZmZpZXM7DQo+IA0KPiBCdHcsIGRvbid0IHJlbWVtYmVy IGlmIEkgY29tbWVudGVkIG9uIHRoaXMgYmVmb3JlIC0gYnV0IHlvdSBjYW4ndCBzdG9yZSBqaWZm aWVzDQo+IGluIGEgdTMyLCBuZWVkIHVuc2lnbmVkIGxvbmcuDQo+IA0KDQpXaWxsIG1vZGlmeSBp dC4NCg0KPiANCj4gPiArCWlmICh0eF9obmRsLT5wZGVzYy0+c3RhdHVzICE9DQo+ID4gKwkgICAg RUFHTEVfVFhEX1NUQVRVU19JRExFKSB7DQo+IA0KPiB3aGF0J3Mgd2l0aCB0aGUgbGluZWJyZWFr Pw0KPiANCg0KV2lsbCByZW1vdmUgaXQuDQoNCj4gDQo+ID4gKwlpZiAoaWVlZTgwMjExX2lzX2Rh dGEod2gtPmZyYW1lX2NvbnRyb2wpKSB7DQo+ID4gKwkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9h ZGRyKHdoLT5hZGRyMSkpIHsNCj4gPiArCQkJaWYgKGNjbXApIHsNCj4gPiArCQkJCW13bF90eF9p bnNlcnRfY2NtcF9oZHIoZG1hX2RhdGEtPmRhdGEsDQo+ID4gKwkJCQkJCSAgICAgICBtd2xfdmlm DQo+IC0+a2V5aWR4LA0KPiA+ICsJCQkJCQkgICAgICAgbXdsX3ZpZi0+aXYxNiwNCj4gPiArCQkJ CQkJICAgICAgIG13bF92aWYtPml2MzIpOw0KPiA+ICsJCQkJSU5DUkVBU0VfSVYobXdsX3ZpZi0+ aXYxNiwgbXdsX3ZpZg0KPiAtPml2MzIpOw0KPiA+ICsJCQl9DQo+ID4gKwkJfSBlbHNlIHsNCj4g PiArCQkJaWYgKGNjbXApIHsNCj4gPiArCQkJCWlmIChtd2xfdmlmLT5pc19zdGEpIHsNCj4gPiAr CQkJCQltd2xfdHhfaW5zZXJ0X2NjbXBfaGRyKGRtYV9kYXQNCj4gYS0+ZGF0YSwNCj4gPiArCQkJ CQkJCSAgICAgICBtd2xfdmlmDQo+IC0+a2V5aWR4LA0KPiA+ICsJCQkJCQkJICAgICAgIG13bF92 aWYNCj4gLT5pdjE2LA0KPiA+ICsJCQkJCQkJICAgICAgIG13bF92aWYNCj4gLT5pdjMyKTsNCj4g PiArCQkJCQlJTkNSRUFTRV9JVihtd2xfdmlmLT5pdjE2LA0KPiA+ICsJCQkJCQkgICAgbXdsX3Zp Zi0+aXYzMik7DQo+ID4gKwkJCQl9IGVsc2Ugew0KPiA+ICsJCQkJCXN0cnVjdCBtd2xfc3RhICpz dGFfaW5mbzsNCj4gPiArDQo+ID4gKwkJCQkJc3RhX2luZm8gPQ0KPiBtd2xfZGV2X2dldF9zdGEo c3RhKTsNCj4gPiArDQo+ID4gKwkJCQkJbXdsX3R4X2luc2VydF9jY21wX2hkcihkbWFfZGF0DQo+ IGEtPmRhdGEsDQo+ID4gKwkJCQkJCQkgICAgICAgMCwNCj4gPiArDQo+ICBzdGFfaW5mby0+aXYx NiwNCj4gPiArDQo+ICBzdGFfaW5mby0+aXYzMik7DQo+ID4gKwkJCQkJSU5DUkVBU0VfSVYoc3Rh X2luZm8tPml2MTYsDQo+ID4gKwkJCQkJCSAgICBzdGFfaW5mby0+aXYzMik7DQo+ID4gKwkJCQl9 DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKwl9DQo+IA0KPiBBbGwgb2YgdGhpcyBpcyB2ZXJ5 IHZlcnkgZHViaW91cy4gV2h5IG5vdCBsZXQgbWFjODAyMTEgaGFuZGxlIGl0Pw0KDQpDb252ZXJz aW9uIG9mIGRhdGEgcGFja2V0IHRvIHdvcmsgd2l0aCBmaXJtd2FyZSBpcyBkb25lIGFuZCB3ZWxs IHRlc3RlZC4gTWF5YmUgd2UgY2FuIGNoZWNrIGhvdyB0byBsZXQgbWFjODAyMTEgZG8gdGhpcyBs YXRlci4NCg0KPiANCj4gPiArCXR4X2Rlc2MtPnBrdF9wdHIgPQ0KPiA+ICsJCWNwdV90b19sZTMy KHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHR4X3NrYi0+ZGF0YSwNCj4gPiArCQkJCQkgICB0 eF9za2ItPmxlbiwNCj4gUENJX0RNQV9UT0RFVklDRSkpOw0KPiANCj4gbWlzc2luZyBlcnJvciBj aGVjaw0KPiANCj4gPiAraW50IG13bF90eF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KSB7 DQo+ID4gKwlzdHJ1Y3QgbXdsX3ByaXYgKnByaXY7DQo+ID4gKwlpbnQgcmM7DQo+ID4gKw0KPiA+ ICsJcHJpdiA9IGh3LT5wcml2Ow0KPiA+ICsNCj4gPiArCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnBy aXYtPmRlbGF5X3EpOw0KPiA+ICsNCj4gPiArCXJjID0gbXdsX3R4X3JpbmdfYWxsb2MocHJpdik7 DQo+ID4gKwlpZiAocmMpIHsNCj4gPiArCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiYWxsb2NhdGlu ZyBUWCByaW5nIGZhaWxlZFxuIik7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJjID0gbXdsX3R4 X3JpbmdfaW5pdChwcml2KTsNCj4gPiArCQlpZiAocmMpIHsNCj4gPiArCQkJbXdsX3R4X3Jpbmdf ZnJlZShwcml2KTsNCj4gPiArCQkJd2lwaHlfZXJyKGh3LT53aXBoeSwgImluaXRpYWxpemluZyBU WCByaW5nDQo+IGZhaWxlZFxuIik7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJl dHVybiByYzsNCj4gPiArfQ0KPiANCj4gU2FtZSBjb21tZW50IGFzIG9uIFJYLg0KPiANCg0KV2ls bCBtb2RpZnkgaXQuDQoNCj4NCj4gPiArCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2 KEVUSF9QX1BBRSkpIHsNCj4gPiArCQlpbmRleCA9IElFRUU4MDIxMV9BQ19WTzsNCj4gPiArCQll YXBvbF9mcmFtZSA9IHRydWU7DQo+ID4gKwl9DQo+IA0KPiBUaGVyZSdzIGEgdHhfaW5mbyBmbGFn IGZvciB0aGlzIHRoYXQncyBhIGJpdCBtb3JlIGdlbmVyaWMuDQo+DQoNCk1heWJlIG1vZGlmeSBp dCBsYXRlci4NCg0KPg0KPiBKb2hhbm5lcw0KDQpUaGFua3MsDQpEYXZpZA0K