From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C12DA13D897; Sun, 16 Feb 2025 06:14:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739686502; cv=none; b=dVR2IzOatwCTXPJfrWF/yjLEDKMdDxxmzErKMKqVJESlY1n9QSrCfDTYuvT9gLgh6kARnLc0kw4cxhgURZfr35b99y2k3oe5GY05F642d5RtoupHSaHsihf4dX8t+jhwOjWRdyDJKO1CtSxG8PyhxPDvpEVAeCzO9qqUqPdKVik= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739686502; c=relaxed/simple; bh=i8w7HpYDQ2T3KX9GNVnujaABlVCO0sEEaJdHAJDAW/c=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=Mq4wrJdzpWZnVhOn3uHc0mvT7Vnc27gm11/XRJcoAVnsTbG16HiszEt5HowyaitS+d1pmqK6ivqmkr7ToTPoQepnUnDUXOJthEV808Hv6W3dDfys1ft6WagQCLkj4Vyo/gHo81K0pyTvap6xudGmUEz6WJYj913LjVd+wBOskqI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de; spf=pass smtp.mailfrom=gmx.de; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b=X9XXiQcr; arc=none smtp.client-ip=212.227.15.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.de header.i=w_armin@gmx.de header.b="X9XXiQcr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1739686488; x=1740291288; i=w_armin@gmx.de; bh=i8w7HpYDQ2T3KX9GNVnujaABlVCO0sEEaJdHAJDAW/c=; h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:From:To: Cc:References:In-Reply-To:Content-Type:Content-Transfer-Encoding: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=X9XXiQcrCxX7uuveWQCM7sv9w6jpC6Mxas6Naqc+YnmL/hzupR6AVcO0BrpsoBAk 10agdznGXSurcC+Hfcws8ui642yYXkFIWsO9ESPp65dRNGzjateOYwkEkeyWnjknX a5yawfto6QMtnZEYqRml+1TBCSQ+/jj1aoMqc6LBTnsgCFcdsU0NjxcL/d56YDfOP aCbe8ehWwrwPLrsgpIM4jPA1iF+2HUFovNl8S4tnSVrflSUhVI9W5UAXR5utsN5vs qBgv1mvbzqze8S4DGhN6b0BNE5ecH3tTT7RC8kBvlizod9kqt0f9ZtiLw+eWzG9i+ nHU9KPlLOXYMj8FKWQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.0.69] ([87.177.78.219]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MmlT2-1t36B41new-00nRE0; Sun, 16 Feb 2025 07:14:48 +0100 Message-ID: <36201d78-1b6c-4a8c-9e53-90cf43aca2c5@gmx.de> Date: Sun, 16 Feb 2025 07:14:46 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 08/10] platform/x86: alienware-wmi-wmax: Add support for manual fan control From: Armin Wolf To: Kurt Borja , =?UTF-8?Q?Ilpo_J=C3=A4rvinen?= Cc: platform-driver-x86@vger.kernel.org, Hans de Goede , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Guenter Roeck References: <20250208051614.10644-1-kuurtb@gmail.com> <20250208051614.10644-9-kuurtb@gmail.com> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:7qbwuEAfues1phdF/I3FSVwgPLFzG6A8F83kHXwUA0Dsl8AnAYH l0MVN/kSudbeJ0OnHicHa+I9P61drCIixNh+t3SHGip6imAN8jetNgmrdlJDDBdAJR5OTv4 mit5U7V27SDM6/AgBTLSOnJaWuRqBQPGReKVakFWKt5dDhFjCzzlpMAN8aXYPmgPhef3oqw ImyoIXCjW9rpZ3PXbyfdw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:S3xutyQnoSo=;6bqL+oMNzZGCBCrg7bKb4qw8lp9 gnX1xobbDg9F1MWc2lUjql+coFF6Q81Pga4fNawRfGzaEJ0/rA+RapqD7FjMXHJnwUDR5I+cj IleraaFWza9yCKxMl0/4fvC9shbGPBAKdZHGQOHLr6Vw9M1OxePz4JSbipAWNnYh7lqWRdnh9 /5v+egM0t2XukiUsDK9D70IxamElaMI4PAI0brE1e9tJrFm/6xmch6UNM+HLizlC4cuC1HgO5 qXgZp4lra1KzMfkeYHOlVjKv95LdCWs60OIOda2b56fYmNWNqLFOUMblPVRQ8dHhu2fY5wfS/ tKQbJ0W6YhNSR1Qxx2+tfHyqIkzzJm9wYZNldayIdvh9kgp3vuX/WNg8e6r+/szy3LDBerxI9 VuoUZ5A+EB28ElcHqHI8kLcXngX9CHjMWlLV3S0LmejixcpFC5NjVQz9hiYkRwXuw/TXhtJ1F fRFfG78yYUpdki5aY/5eGT4VHov38q21FGxtttrexdLhkZLWSqH3PW1iRWSy1RRlDO/4/YeaX jL0RAoCQRNtajcT2HAJTzGSVKjcAcLjEO2Zw3g6RFJrlBCKfZkQ71GoSUOIHUhV5PxvDdPzjN qmh+K8ztkEgdiaZ6wtkyLCIzP3NXVR2cqz7UFphzeorCzRSj5qUpEMRWjeo077ZIXzkpM00N6 fgnm/HWYftPOtgJTAW5qFL+bqdSFDc/RqgXw5FqSsY+X0KYVTg3UlashkYU9RCaqVzsCt84Xs mdQEZ3b9sAbDZVxJYKv9G+Bb9zPPbuARcR4irVmEQxvlrOqhnbhxXh9lpPIKKFxRKdv/sbw+f tJd8lYNFvIhfcUM/3SbA3KeFEf18VRM4szAhxiWyMcABYr1oUH2gItxE3/DVwdaULZS0kdkJ7 G2B3PwnrTV8d+P94GRNc12BBufgLqcCFSLU51niujRMoSnfMajBQe2QzfMvA1CNbrkmCK/Ats 24kvqfzFdDvuqdJHUqw9As1S6o9G+35aOAAKlr6gGyILjwXRKO8MSb/EvlodoBUwuxthJXxbL s3+S2bhOhGCHvDRzkuyIvp3qDVja7klr2YKE8V2Uzvgdb8XjBhJc/7GWMk/v+62tTSJo5qAEj g8XCNGfiNsM1mJ1aZIoRVqQcK+kLYDkFb3NpglGYl6nqiqK75rhn48d/c+hzYXzaMpc9fc6CN VlmECuOeBfCVz4D11SrbbarV46jJKJ1654dPTdIAhhmeqTFRoA3ZsuaBnklTZdk/WItun/rHi n53m3dpZYkpsQeH3C9UU+LeVGLDWbioPCKTcur/uT5w03lXgaesY7pt7zqevoaNMVLp22QvhL lJBQjVqQMzDm9VJx4N11xX4Nfa8cQPQqFMovDKE6zA+Dn4CxiNJOKriULDXbTZI9vpk5AGHno ldgicFGrSzJeSlGnVPhaeDNtSGjsTJ+qNZ/c2/xVeGegL3/YZkdy6+QEha QW0gMTYuMDIuMjUgdW0gMDc6MTIgc2NocmllYiBBcm1pbiBXb2xmOg0KDQo+IEFtIDA4LjAyLjI1 IHVtIDA2OjE2IHNjaHJpZWIgS3VydCBCb3JqYToNCj4NCj4+IEFsbCBtb2RlbHMgd2l0aCB0aGUg IkFXQ0MiIFdNQVggZGV2aWNlIHN1cHBvcnQgYSB3YXkgb2YgbWFudWFsbHkNCj4+IGNvbnRyb2xs aW5nIGZhbnMuDQo+Pg0KPj4gVGhlIFBXTSBkdXR5IGN5Y2xlIG9mIGEgZmFuIGNhbid0IGJlIGNv bnRyb2xsZWQgZGlyZWN0bHkuIEluc3RlYWQgdGhlDQo+PiBBV0NDIGludGVyZmFjZSBsZXQncyB1 cyB0dW5lIGEgUFdNIGBib29zdGAgdmFsdWUsIHdoaWNoIGhhcyB0aGUNCj4+IGZvbGxvd2luZyBl bXBpcmljYWxseSBkaXNjb3ZlcmVkIGJlaGF2aW9yIG92ZXIgdGhlIFBXTSB2YWx1ZToNCj4+DQo+ PiDCoMKgwqDCoHB3bSA9IHB3bV9iYXNlICsgKHB3bV9ib29zdCAvIDI1NSkgKiAocHdtX21heCAt IHB3bV9iYXNlKQ0KPj4NCj4+IFdoZXJlIHRoZSBwd21fYmFzZSBpcyB0aGUgbG9ja2VkIFBXTSB2 YWx1ZSBjb250cm9sbGVkIGJ5IHRoZSBFQyBhbmQNCj4+IHB3bV9ib29zdCBpcyBhIHZhbHVlIGJl dHdlZW4gMCBhbmQgMjU1Lg0KPj4NCj4+IFRoaXMgcHdtX2Jvb3N0IGtub2IgaXMgZXhwb3NlZCBh cyBhIHN0YW5kYXJkIGBwd21gIGF0dHJpYnV0ZS4NCj4NCj4gSSBhbSBub3Qgc3VyZSBpZiBleHBv c2luZyB0aGlzIG92ZXIgdGhlIHN0YW5kYXJkICJwd20iIGF0dHJpYnV0ZSBpcyANCj4gY29ycmVj dCBoZXJlLA0KPiBzaW5jZSB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGV4cGVjdCB0byBoYXZlIGZ1 bGwgYWNjZXNzIHRvIHRoZSBmYW4gDQo+IHdoZW4gdXNpbmcgdGhlDQo+ICJwd20iIGF0dHJpYnV0 ZS4NCj4NCj4gTWF5YmUgdXNpbmcgYSBjdXN0b20gYXR0cmlidXRlIGxpa2UgImZhblhfYm9vc3Qi IHdvdWxkIG1ha2Ugc2Vuc2UgDQo+IGhlcmU/IEVpdGhlciB3YXkNCj4gZG9jdW1lbnRpbmcgdGhp cyBzcGVjaWFsIGJlaGF2aW9yIHdvdWxkIGJlIG5pY2UgZm9yIGZ1dHVyZSB1c2VycywgDQo+IG1h eWJlIHlvdSBjYW4gd3JpdGUNCj4gdGhpcyBkb3duIHVuZGVyIERvY3VtZW50YXRpb24vYWRtaW4t Z3VpZGUvbGFwdG9wcz8NCj4NCj4gVGhhbmtzLA0KPiBBcm1pbiBXb2xmDQo+DQo+PiBDYzogR3Vl bnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0Pg0KPj4gU2lnbmVkLW9mZi1ieTogS3VydCBC b3JqYSA8a3V1cnRiQGdtYWlsLmNvbT4NCj4+IC0tLQ0KPj4gwqAgLi4uL3BsYXRmb3JtL3g4Ni9k ZWxsL2FsaWVud2FyZS13bWktd21heC5jwqDCoMKgIHwgNTUgKysrKysrKysrKysrKysrKystLQ0K Pj4gwqAgMSBmaWxlIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pDQo+ Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdt aS13bWF4LmMgDQo+PiBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13 bWF4LmMNCj4+IGluZGV4IDVmMDJkYTdmZjI1Zi4uMDZkNmY4OGVhNTRiIDEwMDY0NA0KPj4gLS0t IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYw0KPj4gKysr IGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYw0KPj4gQEAg LTEzLDYgKzEzLDcgQEANCj4+IMKgICNpbmNsdWRlIDxsaW51eC9kbWkuaD4NCj4+IMKgICNpbmNs dWRlIDxsaW51eC9od21vbi5oPg0KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4NCj4+ ICsjaW5jbHVkZSA8bGludXgvbWlubWF4Lmg+DQo+PiDCoCAjaW5jbHVkZSA8bGludXgvbW9kdWxl cGFyYW0uaD4NCj4+IMKgICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPj4gwqAgI2luY2x1ZGUg PGxpbnV4L292ZXJmbG93Lmg+DQo+PiBAQCAtMTc2LDEwICsxNzcsMTIgQEAgZW51bSBBV0NDX1RI RVJNQUxfSU5GT1JNQVRJT05fT1BFUkFUSU9OUyB7DQo+PiDCoMKgwqDCoMKgIEFXQ0NfT1BfR0VU X01JTl9SUE3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gMHgwOCwNCj4+IMKgwqDCoMKgwqAgQVdD Q19PUF9HRVRfTUFYX1JQTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAweDA5LA0KPj4gwqDCoMKg wqDCoCBBV0NDX09QX0dFVF9DVVJSRU5UX1BST0ZJTEXCoMKgwqDCoMKgwqDCoCA9IDB4MEIsDQo+ PiArwqDCoMKgIEFXQ0NfT1BfR0VUX0ZBTl9CT09TVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAw eDBDLA0KPj4gwqAgfTsNCj4+DQo+PiDCoCBlbnVtIEFXQ0NfVEhFUk1BTF9DT05UUk9MX09QRVJB VElPTlMgew0KPj4gwqDCoMKgwqDCoCBBV0NDX09QX0FDVElWQVRFX1BST0ZJTEXCoMKgwqDCoMKg wqDCoCA9IDB4MDEsDQo+PiArwqDCoMKgIEFXQ0NfT1BfU0VUX0ZBTl9CT09TVMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgPSAweDAyLA0KPj4gwqAgfTsNCj4+DQo+PiDCoCBlbnVtIEFXQ0NfR0FNRV9T SElGVF9TVEFUVVNfT1BFUkFUSU9OUyB7DQo+PiBAQCAtNTYzLDEyICs1NjYsMTMgQEAgc3RhdGlj IGlubGluZSBpbnQgDQo+PiBhd2NjX3RoZXJtYWxfaW5mb3JtYXRpb24oc3RydWN0IHdtaV9kZXZp Y2UgKndkZXYsIHU4IG9wZXJhdGlvbg0KPj4gwqDCoMKgwqDCoCByZXR1cm4gX19hd2NjX3dtaV9j b21tYW5kKHdkZXYsIA0KPj4gQVdDQ19NRVRIT0RfVEhFUk1BTF9JTkZPUk1BVElPTiwgJmFyZ3Ms IG91dCk7DQo+PiDCoCB9DQo+Pg0KPj4gLXN0YXRpYyBpbmxpbmUgaW50IGF3Y2NfdGhlcm1hbF9j b250cm9sKHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2LCB1OCANCj4+IHByb2ZpbGUpDQo+PiArc3Rh dGljIGlubGluZSBpbnQgYXdjY190aGVybWFsX2NvbnRyb2woc3RydWN0IHdtaV9kZXZpY2UgKndk ZXYsIHU4IA0KPj4gb3BlcmF0aW9uLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHU4IGFyZzEsIHU4IGFyZzIpDQo+PiDCoCB7DQo+PiDCoMKgwqDCoMKg IHN0cnVjdCB3bWF4X3UzMl9hcmdzIGFyZ3MgPSB7DQo+PiAtwqDCoMKgwqDCoMKgwqAgLm9wZXJh dGlvbiA9IEFXQ0NfT1BfQUNUSVZBVEVfUFJPRklMRSwNCj4+IC3CoMKgwqDCoMKgwqDCoCAuYXJn MSA9IHByb2ZpbGUsDQo+PiAtwqDCoMKgwqDCoMKgwqAgLmFyZzIgPSAwLA0KPj4gK8KgwqDCoMKg wqDCoMKgIC5vcGVyYXRpb24gPSBvcGVyYXRpb24sDQo+PiArwqDCoMKgwqDCoMKgwqAgLmFyZzEg PSBhcmcxLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5hcmcyID0gYXJnMiwNCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCAuYXJnMyA9IDAsDQo+PiDCoMKgwqDCoMKgIH07DQo+PiDCoMKgwqDCoMKgIHUzMiBv dXQ7DQo+PiBAQCAtNjg0LDYgKzY4OCwxMSBAQCBzdGF0aWMgdW1vZGVfdCBhd2NjX2h3bW9uX2lz X3Zpc2libGUoY29uc3Qgdm9pZCANCj4+ICpkcnZkYXRhLCBlbnVtIGh3bW9uX3NlbnNvcl90eXBl DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNoYW5uZWwgPCBwcml2LT5mYW5fY291bnQpDQo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDQ0NDsNCj4+DQo+PiArwqDCoMKg wqDCoMKgwqAgYnJlYWs7DQo+PiArwqDCoMKgIGNhc2UgaHdtb25fcHdtOg0KPj4gK8KgwqDCoMKg wqDCoMKgIGlmIChjaGFubmVsIDwgcHJpdi0+ZmFuX2NvdW50KQ0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIDA2NDQ7DQo+PiArDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7 DQo+PiDCoMKgwqDCoMKgIGRlZmF1bHQ6DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+ PiBAQCAtNjk4LDYgKzcwNyw3IEBAIHN0YXRpYyBpbnQgYXdjY19od21vbl9yZWFkKHN0cnVjdCBk ZXZpY2UgKmRldiwgDQo+PiBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLA0KPj4gwqDCoMKg wqDCoCBzdHJ1Y3QgYXdjY19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+PiDC oMKgwqDCoMKgIHN0cnVjdCBhd2NjX3RlbXBfY2hhbm5lbF9kYXRhICp0ZW1wOw0KPj4gwqDCoMKg wqDCoCBzdHJ1Y3QgYXdjY19mYW5fY2hhbm5lbF9kYXRhICpmYW47DQo+PiArwqDCoMKgIHUzMiBm YW5fYm9vc3Q7DQo+PiDCoMKgwqDCoMKgIGludCByZXQ7DQo+Pg0KPj4gwqDCoMKgwqDCoCBzd2l0 Y2ggKHR5cGUpIHsNCj4+IEBAIC03NDIsNiArNzUyLDE2IEBAIHN0YXRpYyBpbnQgYXdjY19od21v bl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgDQo+PiBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0 eXBlLA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOw0K Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+DQo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+ PiArwqDCoMKgIGNhc2UgaHdtb25fcHdtOg0KPj4gK8KgwqDCoMKgwqDCoMKgIGZhbiA9ICZwcml2 LT5mYW5fZGF0YVtjaGFubmVsXTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBhd2Nj X3RoZXJtYWxfaW5mb3JtYXRpb24ocHJpdi0+d2RldiwgDQo+PiBBV0NDX09QX0dFVF9GQU5fQk9P U1QsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBmYW4tPmlkLCAmZmFuX2Jvb3N0KTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQ0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+ICsNCj4+ICvCoMKgwqDC oMKgwqDCoCAqdmFsID0gZmFuX2Jvb3N0Ow0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0K Pj4gwqDCoMKgwqDCoCBkZWZhdWx0Og0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU9Q Tk9UU1VQUDsNCj4+IEBAIC03OTYsMTAgKzgxNiwyNyBAQCBzdGF0aWMgaW50IGF3Y2NfaHdtb25f cmVhZF9zdHJpbmcoc3RydWN0IGRldmljZSANCj4+ICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5 cGVzIHR5DQo+PiDCoMKgwqDCoMKgIHJldHVybiAwOw0KPj4gwqAgfQ0KPj4NCj4+ICsNCg0KSSBu ZWFybHkgZm9yZ290OiBQbGVhc2UgZG9uJ3QgdXNlIG11bHRpcGxlIGJsYW5rIGxpbmVzLg0KDQpU aGFua3MsDQpBcm1pbiBXb2xmDQoNCj4+DQo+PiArc3RhdGljIGludCBhd2NjX2h3bW9uX3dyaXRl KHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSANCj4+IGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgYXR0ciwgaW50IGNoYW5uZWws IGxvbmcgdmFsKQ0KPj4gK3sNCj4+ICvCoMKgwqAgc3RydWN0IGF3Y2NfcHJpdiAqcHJpdiA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOw0KPj4gK8KgwqDCoCB1OCBmYW5faWQgPSBwcml2LT5mYW5fZGF0 YVtjaGFubmVsXS5pZDsNCj4+ICsNCj4+ICvCoMKgwqAgc3dpdGNoICh0eXBlKSB7DQo+PiArwqDC oMKgIGNhc2UgaHdtb25fcHdtOg0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBhd2NjX3RoZXJt YWxfY29udHJvbChwcml2LT53ZGV2LCBBV0NDX09QX1NFVF9GQU5fQk9PU1QsDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmYW5faWQsICh1OCljbGFt cF92YWwodmFsLCAwLCAyNTUpKTsNCj4+ICvCoMKgwqAgZGVmYXVsdDoNCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVPUE5PVFNVUFA7DQo+PiArwqDCoMKgIH0NCj4+ICt9DQo+PiArDQo+PiDC oCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBhd2NjX2h3bW9uX29wcyA9IHsNCj4+IMKg wqDCoMKgwqAgLmlzX3Zpc2libGUgPSBhd2NjX2h3bW9uX2lzX3Zpc2libGUsDQo+PiDCoMKgwqDC oMKgIC5yZWFkID0gYXdjY19od21vbl9yZWFkLA0KPj4gwqDCoMKgwqDCoCAucmVhZF9zdHJpbmcg PSBhd2NjX2h3bW9uX3JlYWRfc3RyaW5nLA0KPj4gK8KgwqDCoCAud3JpdGUgPSBhd2NjX2h3bW9u X3dyaXRlLA0KPj4gwqAgfTsNCj4+DQo+PiDCoCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2No YW5uZWxfaW5mbyAqIGNvbnN0IGF3Y2NfaHdtb25faW5mb1tdID0gew0KPj4gQEAgLTgxNCw2ICs4 NTEsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKiBjb25zdCAN Cj4+IGF3Y2NfaHdtb25faW5mb1tdID0gew0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgSFdNT05fRl9MQUJFTCB8IEhXTU9OX0ZfSU5QVVQgfCBIV01PTl9GX01JTiB8IA0KPj4g SFdNT05fRl9NQVgsDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV01PTl9G X0xBQkVMIHwgSFdNT05fRl9JTlBVVCB8IEhXTU9OX0ZfTUlOIHwgDQo+PiBIV01PTl9GX01BWA0K Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKSwNCj4+ICvCoMKgwqAgSFdNT05f Q0hBTk5FTF9JTkZPKHB3bSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9O X1BXTV9JTlBVVCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX1BXTV9J TlBVVCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX1BXTV9JTlBVVCwN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX1BXTV9JTlBVVA0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKSwNCj4+IMKgwqDCoMKgwqAgTlVMTA0KPj4gwqAg fTsNCj4+DQo+PiBAQCAtOTU0LDggKzk5Nyw4IEBAIHN0YXRpYyBpbnQgYXdjY19wbGF0Zm9ybV9w cm9maWxlX3NldChzdHJ1Y3QgDQo+PiBkZXZpY2UgKmRldiwNCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB9DQo+PiDCoMKgwqDCoMKgIH0NCj4+DQo+PiAtwqDCoMKgIHJldHVybiBhd2NjX3RoZXJtYWxf Y29udHJvbChwcml2LT53ZGV2LA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHByaXYtPnN1cHBvcnRlZF9wcm9maWxlc1twcm9maWxlXSk7DQo+PiArwqDCoMKgIHJl dHVybiBhd2NjX3RoZXJtYWxfY29udHJvbChwcml2LT53ZGV2LCBBV0NDX09QX0FDVElWQVRFX1BS T0ZJTEUsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+ c3VwcG9ydGVkX3Byb2ZpbGVzW3Byb2ZpbGVdLCAwKTsNCj4+IMKgIH0NCj4+DQo+PiDCoCBzdGF0 aWMgaW50IGF3Y2NfcGxhdGZvcm1fcHJvZmlsZV9wcm9iZSh2b2lkICpkcnZkYXRhLCB1bnNpZ25l ZCBsb25nIA0KPj4gKmNob2ljZXMpDQo+DQo=