Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752533AbeAQJit (ORCPT + 1 other); Wed, 17 Jan 2018 04:38:49 -0500 Received: from mg.richtek.com ([220.130.44.152]:58402 "EHLO mg.richtek.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750908AbeAQJil (ORCPT ); Wed, 17 Jan 2018 04:38:41 -0500 X-Greylist: delayed 463 seconds by postgrey-1.27 at vger.kernel.org; Wed, 17 Jan 2018 04:38:40 EST X-MailGates: (compute_score:DELIVER,40,3) X-MailGates: (compute_score:DELIVER,40,3) From: =?utf-8?B?c2h1ZmFuX2xlZSjmnY7mm7jluIYp?= To: 'ShuFanLee' , "heikki.krogerus@linux.intel.com" CC: =?utf-8?B?Y3lfaHVhbmco6buD5ZWf5Y6fKQ==?= , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" Subject: RE: [PATCH] USB TYPEC: RT1711H Type-C Chip Driver Thread-Topic: [PATCH] USB TYPEC: RT1711H Type-C Chip Driver Thread-Index: AQHTieCLFd+d5p/wz0qymBaVQ9+cLaN31SBA Date: Wed, 17 Jan 2018 09:30:45 +0000 Message-ID: <5d3aade6e32040da800d5127d303aa19@ex1.rt.l> References: <1515567552-7692-1-git-send-email-leechu729@gmail.com> In-Reply-To: <1515567552-7692-1-git-send-email-leechu729@gmail.com> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [192.168.92.54] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: RGVhciBIZWlra2ksDQoNCiAgU29ycnkgZm9yIGJvdGhlcmluZy4NCg0KICBKdXN0IHdhbnQgdG8g Y2hlY2sgaXMgdGhlcmUgYW55dGhpbmcgd2UgbmVlZCB0byBtb2RpZnk/DQoNCiAgVGhhbmsgeW91 IQ0KDQpCZXN0IFJlZ2FyZHMsDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KU2h1LUZh biBMZWUNClJpY2h0ZWsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbg0KVEVMOiArODg2LTMtNTUyNjc4 OSAjMjM1OQ0KRkFYOiArODg2LTMtNTUyNjYxMg0KKioqKioqKioqKioqKioqKioqKioqKioqKioq KioNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IFNodUZhbkxlZSBbbWFpbHRv OmxlZWNodTcyOUBnbWFpbC5jb21dDQpTZW50OiBXZWRuZXNkYXksIEphbnVhcnkgMTAsIDIwMTgg Mjo1OSBQTQ0KVG86IGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20NCkNjOiBjeV9odWFu Zyjpu4PllZ/ljp8pOyBzaHVmYW5fbGVlKOadjuabuOW4hik7IGxpbnV4LWtlcm5lbEB2Z2VyLmtl cm5lbC5vcmc7IGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcNClN1YmplY3Q6IFtQQVRDSF0gVVNC IFRZUEVDOiBSVDE3MTFIIFR5cGUtQyBDaGlwIERyaXZlcg0KDQpGcm9tOiBTaHVGYW5MZWUgPHNo dWZhbl9sZWVAcmljaHRlay5jb20+DQoNClJpY2h0ZWsgUlQxNzExSCBUeXBlLUMgY2hpcCBkcml2 ZXIgdGhhdCB3b3JrcyB3aXRoDQpUeXBlLUMgUG9ydCBDb250cm9sbGVyIE1hbmFnZXIgdG8gcHJv dmlkZSBVU0IgUEQgYW5kDQpVU0IgVHlwZS1DIGZ1bmN0aW9uYWxpdGllcy4NCg0KU2lnbmVkLW9m Zi1ieTogU2h1RmFuTGVlIDxzaHVmYW5fbGVlQHJpY2h0ZWsuY29tPg0KLS0tDQogLi4uL2Rldmlj ZXRyZWUvYmluZGluZ3MvdXNiL3JpY2h0ZWsscnQxNzExaC50eHQgICAgfCAgIDM4ICsNCiBhcmNo L2FybTY0L2Jvb3QvZHRzL2hpc2lsaWNvbi9ydDE3MTFoLmR0c2kgICAgICAgICB8ICAgMTEgKw0K IGRyaXZlcnMvdXNiL3R5cGVjL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg MiArDQogZHJpdmVycy91c2IvdHlwZWMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAxICsNCiBkcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL0tjb25maWcgICAgICAgICAgICAg ICAgICB8ICAgIDcgKw0KIGRyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvTWFrZWZpbGUgICAgICAg ICAgICAgICAgIHwgICAgMiArDQogZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9ydDE3MTFoLmMg ICAgICAgICAgICAgICAgfCAyMjQxICsrKysrKysrKysrKysrKysrKysrDQogZHJpdmVycy91c2Iv dHlwZWMvcnQxNzExaC9ydDE3MTFoLmggICAgICAgICAgICAgICAgfCAgMzAwICsrKw0KIDggZmls ZXMgY2hhbmdlZCwgMjYwMiBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3Vt ZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvcmljaHRlayxydDE3MTFoLnR4dA0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybTY0L2Jvb3QvZHRzL2hpc2lsaWNvbi9ydDE3MTFoLmR0 c2kNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9LY29uZmln DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvTWFrZWZpbGUN CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9ydDE3MTFoLmMN CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9ydDE3MTFoLmgN Cg0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2Ivcmlj aHRlayxydDE3MTFoLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2Iv cmljaHRlayxydDE3MTFoLnR4dA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAu LmMyODI5OWMNCi0tLSAvZGV2L251bGwNCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9i aW5kaW5ncy91c2IvcmljaHRlayxydDE3MTFoLnR4dA0KQEAgLTAsMCArMSwzOCBAQA0KK1JpY2h0 ZWsgUlQxNzExSCBUeXBlLUMgUG9ydCBDb250cm9sbGVyLg0KKw0KK1JlcXVpcmVkIHByb3BlcnRp ZXM6DQorLSBjb21wYXRpYmxlIDogTXVzdCBiZSAicmljaHRlayx0eXBlY19ydDE3MTFoIjsNCist IHJlZyA6IE11c3QgYmUgMHg0ZSwgaXQncyBkZWZhdWx0IHNsYXZlIGFkZHJlc3Mgb2YgUlQxNzEx SC4NCistIHJ0LGludHJfZ3BpbyA6IElSUSBHUElPIHBpbiB0aGF0J3MgY29ubmVjdGVkIHRvIFJU MTcxMUggaW50ZXJydXB0Lg0KKw0KK09wdGlvbmFsIG5vZGU6DQorLSBydCxuYW1lIDogTmFtZSB1 c2VkIGZvciByZWdpc3RlcmluZyBJUlEgYW5kIGNyZWF0aW5nIGt0aHJlYWQuDQorICAgIElmIHRo aXMgcHJvcGVydHkgaXMgbm90IHNwZWNpZmllZCwgImRlZmF1bHQiIHdpbGwgYmUgYXBwbGllZC4N CistIHJ0LGRlZl9yb2xlIDogRGVmYXVsdCBwb3J0IHJvbGUgKFRZUEVDX1NJTksoMCkgb3IgVFlQ RUNfU09VUkNFKDEpKS4NCitTZXQgdG8gVFlQRUNfTk9fUFJFRkVSUkVEX1JPTEUoLTEpIGlmIG5v IGRlZmF1bHQgcm9sZS4NCitJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzcGVjaWZpZWQsIFRZUEVD X1NJTksgd2lsbCBiZSBhcHBsaWVkLg0KKy0gcnQscG9ydF90eXBlIDogUG9ydCB0eXBlIChUWVBF Q19QT1JUX0RGUCgwKSwgVFlQRUNfUE9SVF9VRlAoMSksDQorIG9yIFRZUEVDX1BPUlRfRFJQKDIp KS4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3Qgc3BlY2lmaWVkLA0KKyBUWVBFQ19QT1JUX0RSUCB3 aWxsIGJlIGFwcGxpZWQuDQorLSBydCxtYXhfc25rX212IDogTWF4aW11bSBhY2NlcHRhYmxlIHNp bmsgdm9sdGFnZSBpbiBtVi4NCisgIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHNwZWNpZmllZCwg NTAwMG1WIHdpbGwgYmUgYXBwbGllZC4NCistIHJ0LG1heF9zbmtfbWEgOiBNYXhpbXVtIHNpbmsg Y3VycmVudCBpbiBtQS4NCisgIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHNwZWNpZmllZCwgMzAw MG1BIHdpbGwgYmUgYXBwbGllZC4NCistIHJ0LG1heF9zbmtfbXcgOiBNYXhpbXVtIHJlcXVpcmVk IHNpbmsgcG93ZXIgaW4gbVcuDQorICBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzcGVjaWZpZWQs IDE1MDAwbVcgd2lsbCBiZSBhcHBsaWVkLg0KKy0gcnQsb3BlcmF0aW5nX3Nua19tdyA6IFJlcXVp cmVkIG9wZXJhdGluZyBzaW5rIHBvd2VyIGluIG1XLg0KK0lmIHRoaXMgcHJvcGVydHkgaXMgbm90 IHNwZWNpZmllZCwNCisyNTAwbVcgd2lsbCBiZSBhcHBsaWVkLg0KKy0gcnQsdHJ5X3JvbGVfaHcg OiBUcnVlIGlmIHRyeS57U3JjLFNua30gaXMgaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUuDQorICAg SWYgdGhpcyBwcm9wZXJ0eSBpcyBub3Qgc3BlY2lmaWVkLCBGYWxzZSB3aWxsIGJlIGFwcGxpZWQu DQorDQorRXhhbXBsZToNCitydDE3MTFoQDRlIHsNCitzdGF0dXMgPSAib2siOw0KK2NvbXBhdGli bGUgPSAicmljaHRlayx0eXBlY19ydDE3MTFoIjsNCityZWcgPSA8MHg0ZT47DQorcnQsaW50cl9n cGlvID0gPCZncGlvMjYgMCAweDA+Ow0KK3J0LG5hbWUgPSAicnQxNzExaCI7DQorcnQscG9ydF90 eXBlID0gPDI+OyAvKiAwOiBERlAsIDE6IFVGUCwgMjogRFJQICovDQorcnQsZGVmX3JvbGUgPSA8 MD47IC8qIDA6IFNOSywgMTogU1JDLCAtMTogVFlQRUNfTk9fUFJFRkVSUkVEX1JPTEUgKi8NCit9 Ow0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvaGlzaWxpY29uL3J0MTcxMWguZHRz aSBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvaGlzaWxpY29uL3J0MTcxMWguZHRzaQ0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjQxOTZjYzANCi0tLSAvZGV2L251bGwNCisrKyBi L2FyY2gvYXJtNjQvYm9vdC9kdHMvaGlzaWxpY29uL3J0MTcxMWguZHRzaQ0KQEAgLTAsMCArMSwx MSBAQA0KKyZpMmM3IHsNCitydDE3MTFoQDRlIHsNCitzdGF0dXMgPSAib2siOw0KK2NvbXBhdGli bGUgPSAicmljaHRlayx0eXBlY19ydDE3MTFoIjsNCityZWcgPSA8MHg0ZT47DQorcnQsaW50cl9n cGlvID0gPCZncGlvMjYgMCAweDA+Ow0KK3J0LG5hbWUgPSAicnQxNzExaCI7DQorcnQscG9ydF90 eXBlID0gPDI+OyAvKiAwOiBERlAsIDE6IFVGUCwgMjogRFJQICovDQorcnQsZGVmX3JvbGUgPSA8 MD47IC8qIDA6IFNOSywgMTogU1JDICovDQorfTsNCit9Ow0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL3R5cGVjL0tjb25maWcgYi9kcml2ZXJzL3VzYi90eXBlYy9LY29uZmlnDQppbmRleCBiY2Iy NzQ0Li43YmVkZTBiIDEwMDY0NA0KLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvS2NvbmZpZw0KKysr IGIvZHJpdmVycy91c2IvdHlwZWMvS2NvbmZpZw0KQEAgLTU2LDYgKzU2LDggQEAgaWYgVFlQRUNf VENQTQ0KDQogc291cmNlICJkcml2ZXJzL3VzYi90eXBlYy9mdXNiMzAyL0tjb25maWciDQoNCitz b3VyY2UgImRyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgvS2NvbmZpZyINCisNCiBjb25maWcgVFlQ RUNfV0NPVkUNCiB0cmlzdGF0ZSAiSW50ZWwgV2hpc2tleUNvdmUgUE1JQyBVU0IgVHlwZS1DIFBI WSBkcml2ZXIiDQogZGVwZW5kcyBvbiBBQ1BJDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlw ZWMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi90eXBlYy9NYWtlZmlsZQ0KaW5kZXggYmIzMTM4YS4u ZTNhYWYzYyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvdXNiL3R5cGVjL01ha2VmaWxlDQorKysgYi9k cml2ZXJzL3VzYi90eXBlYy9NYWtlZmlsZQ0KQEAgLTIsNiArMiw3IEBADQogb2JqLSQoQ09ORklH X1RZUEVDKSs9IHR5cGVjLm8NCiBvYmotJChDT05GSUdfVFlQRUNfVENQTSkrPSB0Y3BtLm8NCiBv YmoteSs9IGZ1c2IzMDIvDQorb2JqLSQoQ09ORklHX1RZUEVDX1JUMTcxMUgpKz0gcnQxNzExaC8N CiBvYmotJChDT05GSUdfVFlQRUNfV0NPVkUpKz0gdHlwZWNfd2NvdmUubw0KIG9iai0kKENPTkZJ R19UWVBFQ19VQ1NJKSs9IHVjc2kvDQogb2JqLSQoQ09ORklHX1RZUEVDX1RQUzY1OThYKSs9IHRw czY1OTh4Lm8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL0tjb25maWcg Yi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL0tjb25maWcNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwLi4yZmJmZmY1DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3Vz Yi90eXBlYy9ydDE3MTFoL0tjb25maWcNCkBAIC0wLDAgKzEsNyBAQA0KK2NvbmZpZyBUWVBFQ19S VDE3MTFIDQordHJpc3RhdGUgIlJpY2h0ZWsgUlQxNzExSCBUeXBlLUMgY2hpcCBkcml2ZXIiDQor ZGVwZW5kcyBvbiBJMkMgJiYgUE9XRVJfU1VQUExZDQoraGVscA0KKyAgVGhlIFJpY2h0ZWsgUlQx NzExSCAgIFR5cGUtQyBjaGlwIGRyaXZlciB0aGF0IHdvcmtzIHdpdGgNCisgIFR5cGUtQyBQb3J0 IENvbnRyb2xsZXIgTWFuYWdlciB0byBwcm92aWRlIFVTQiBQRCBhbmQgVVNCDQorICBUeXBlLUMg ZnVuY3Rpb25hbGl0aWVzLg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgv TWFrZWZpbGUgYi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL01ha2VmaWxlDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNWZhYjhhZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIv ZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9NYWtlZmlsZQ0KQEAgLTAsMCArMSwyIEBADQorIyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KK29iai0kKENPTkZJR19UWVBFQ19SVDE3 MTFIKSs9IHJ0MTcxMWgubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3J0MTcxMWgv cnQxNzExaC5jIGIvZHJpdmVycy91c2IvdHlwZWMvcnQxNzExaC9ydDE3MTFoLmMNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4xYWVmM2U4DQotLS0gL2Rldi9udWxsDQorKysg Yi9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL3J0MTcxMWguYw0KQEAgLTAsMCArMSwyMjQxIEBA DQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQorLyoNCisgKiBDb3B5cmln aHQgMjAxNyBSaWNodGVrIFRlY2hub2xvZ2ggQ29ycC4NCisgKg0KKyAqIFJpY2h0ZWsgUlQxNzEx SCBUeXBlLUMgQ2hpcCBEcml2ZXINCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ DQorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+DQor I2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGludXgvaTJjLmg+DQor I2luY2x1ZGUgPGxpbnV4L3VzYi90eXBlYy5oPg0KKyNpbmNsdWRlIDxsaW51eC91c2IvdGNwbS5o Pg0KKyNpbmNsdWRlIDxsaW51eC91c2IvcGQuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5o Pg0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2Nv bnN1bWVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPg0KKyNpbmNsdWRlIDxs aW51eC9leHRjb24uaD4NCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+DQorI2luY2x1ZGUg PGxpbnV4L2t0aHJlYWQuaD4NCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+DQorI2luY2x1ZGUgPGxp bnV4L2FsYXJtdGltZXIuaD4NCisjaW5jbHVkZSA8bGludXgvc2NoZWQvY2xvY2suaD4NCisjaW5j bHVkZSA8dWFwaS9saW51eC9zY2hlZC90eXBlcy5oPg0KKw0KKyNpbmNsdWRlICJydDE3MTFoLmgi DQorDQorI2RlZmluZSBSVDE3MTFIX0RSVl9WRVJTSU9OIjEuMC4zIg0KKw0KKyNkZWZpbmUgTE9H X0JVRkZFUl9FTlRSSUVTMTAyNA0KKyNkZWZpbmUgTE9HX0JVRkZFUl9FTlRSWV9TSVpFMTI4IC8q IDEyOCBjaGFyIHBlciBsaW5lICovDQorDQorZW51bSB7DQorUlQxNzExSF9EQkdfTE9HID0gMCwN CitSVDE3MTFIX0RCR19SRUdTLA0KK1JUMTcxMUhfREJHX1JFR19BRERSLA0KK1JUMTcxMUhfREJH X0RBVEEsDQorUlQxNzExSF9EQkdfTUFYLA0KK307DQorDQorc3RydWN0IHJ0MTcxMWhfZGJnX2lu Zm8gew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXA7DQoraW50IGlkOw0KK307DQorDQorDQor c3RydWN0IHJ0MTcxMWhfY2hpcCB7DQorc3RydWN0IGkyY19jbGllbnQgKmkyYzsNCitzdHJ1Y3Qg ZGV2aWNlICpkZXY7DQordWludDE2X3QgZGlkOw0KK2ludCBpcnFfZ3BpbzsNCitpbnQgaXJxOw0K K2NoYXIgKm5hbWU7DQorc3RydWN0IHRjcGNfZGV2IHRjcGNfZGV2Ow0KK3N0cnVjdCB0Y3BjX2Nv bmZpZyB0Y3BjX2NmZzsNCitzdHJ1Y3QgdGNwbV9wb3J0ICp0Y3BtX3BvcnQ7DQorc3RydWN0IHJl Z3VsYXRvciAqdmJ1czsNCitzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOw0KKw0KKy8qIElSUSAq Lw0KK3N0cnVjdCBrdGhyZWFkX3dvcmtlciBpcnFfd29ya2VyOw0KK3N0cnVjdCBrdGhyZWFkX3dv cmsgaXJxX3dvcms7DQorc3RydWN0IHRhc2tfc3RydWN0ICppcnFfd29ya2VyX3Rhc2s7DQorYXRv bWljX3QgcG9sbF9jb3VudDsNCitzdHJ1Y3QgZGVsYXllZF93b3JrIHBvbGxfd29yazsNCisNCisv KiBMUE0gKi8NCitzdHJ1Y3QgZGVsYXllZF93b3JrIHdha2V1cF93b3JrOw0KK3N0cnVjdCBhbGFy bSB3YWtldXBfdGltZXI7DQorc3RydWN0IG11dGV4IHdha2V1cF9sb2NrOw0KK2VudW0gdHlwZWNf Y2NfcHVsbCBscG1fcHVsbDsNCitib29sIHdha2V1cF9vbmNlOw0KK2Jvb2wgbG93X3JwX2R1dHlf Y250ZG93bjsNCitib29sIGNhYmxlX29ubHk7DQorYm9vbCBscG07DQorDQorLyogSTJDICovDQor YXRvbWljX3QgaTJjX2J1c3k7DQorYXRvbWljX3QgcG1fc3VzcGVuZDsNCisNCisvKiBwc3kgKyBw c3kgc3RhdHVzICovDQorc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5Ow0KK3UzMiBjdXJyZW50X2xp bWl0Ow0KK3UzMiBzdXBwbHlfdm9sdGFnZTsNCisNCisvKiBsb2NrIGZvciBzaGFyaW5nIGNoaXAg c3RhdGVzICovDQorc3RydWN0IG11dGV4IGxvY2s7DQorDQorLyogcG9ydCBzdGF0dXMgKi8NCiti b29sIHZjb25uX29uOw0KK2Jvb2wgdmJ1c19vbjsNCitib29sIGNoYXJnZV9vbjsNCitib29sIHZi dXNfcHJlc2VudDsNCitlbnVtIHR5cGVjX2NjX3BvbGFyaXR5IHBvbGFyaXR5Ow0KK2VudW0gdHlw ZWNfY2Nfc3RhdHVzIGNjMTsNCitlbnVtIHR5cGVjX2NjX3N0YXR1cyBjYzI7DQorZW51bSB0eXBl Y19yb2xlIHB3cl9yb2xlOw0KK2Jvb2wgZHJwX3RvZ2dsaW5nOw0KKw0KKyNpZmRlZiBDT05GSUdf REVCVUdfRlMNCitzdHJ1Y3QgZGVudHJ5ICpkYmdkaXI7DQorc3RydWN0IHJ0MTcxMWhfZGJnX2lu Zm8gZGJnX2luZm9bUlQxNzExSF9EQkdfTUFYXTsNCitzdHJ1Y3QgZGVudHJ5ICpkYmdfZmlsZXNb UlQxNzExSF9EQkdfTUFYXTsNCitpbnQgZGJnX3JlZ2lkeDsNCitzdHJ1Y3QgbXV0ZXggZGJnb3Bz X2xvY2s7DQorLyogbG9jayBmb3IgbG9nIGJ1ZmZlciBhY2Nlc3MgKi8NCitzdHJ1Y3QgbXV0ZXgg bG9nYnVmZmVyX2xvY2s7DQoraW50IGxvZ2J1ZmZlcl9oZWFkOw0KK2ludCBsb2didWZmZXJfdGFp bDsNCit1OCAqbG9nYnVmZmVyW0xPR19CVUZGRVJfRU5UUklFU107DQorI2VuZGlmIC8qIENPTkZJ R19ERUJVR19GUyAqLw0KK307DQorDQorLyoNCisgKiBMb2dnaW5nICYgZGVidWdnaW5nDQorICov DQorDQorI2lmZGVmIENPTkZJR19ERUJVR19GUw0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9yZWdf YmxvY2tfcmVhZChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1aW50OF90IHJlZywNCitpbnQg bGVuLCB1aW50OF90ICpkYXRhKTsNCitzdGF0aWMgaW50IHJ0MTcxMWhfcmVnX2Jsb2NrX3dyaXRl KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIHVpbnQ4X3QgcmVnLA0KK2ludCBsZW4sIGNvbnN0 IHVpbnQ4X3QgKmRhdGEpOw0KKw0KK3N0cnVjdCByZWdfZGVzYyB7DQordWludDhfdCBhZGRyOw0K K3VpbnQ4X3Qgc2l6ZTsNCit9Ow0KKyNkZWZpbmUgREVDTF9SRUcoX2FkZHIsIF9zaXplKSB7LmFk ZHIgPSBfYWRkciwgLnNpemUgPSBfc2l6ZX0NCisNCitzdGF0aWMgc3RydWN0IHJlZ19kZXNjIHJ0 MTcxMWhfcmVnX2Rlc2NbXSA9IHsNCitERUNMX1JFRyhSVDE3MTFIX1JFR19WSUQsIDIpLA0KK0RF Q0xfUkVHKFJUMTcxMUhfUkVHX1BJRCwgMiksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfRElELCAy KSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19UWVBFQ19SRVYsIDIpLA0KK0RFQ0xfUkVHKFJUMTcx MUhfUkVHX1BEX1JFViwgMiksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfUERJRl9SRVYsIDIpLA0K K0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0FMRVJULCAyKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19B TEVSVF9NQVNLLCAyKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19QT1dFUl9TVEFUVVNfTUFTSywg MSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTX01BU0ssIDEpLA0KK0RFQ0xf UkVHKFJUMTcxMUhfUkVHX1RDUENfQ1RSTCwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfUk9M RV9DVFJMLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19GQVVMVF9DVFJMLCAxKSwNCitERUNM X1JFRyhSVDE3MTFIX1JFR19QT1dFUl9DVFJMLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19D Q19TVEFUVVMsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVUywgMSksDQor REVDTF9SRUcoUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTLCAxKSwNCitERUNMX1JFRyhSVDE3MTFI X1JFR19DT01NQU5ELCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19NU0dfSERSX0lORk8sIDEp LA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JYX0RFVEVDVCwgMSksDQorREVDTF9SRUcoUlQxNzEx SF9SRUdfUlhfQllURV9DTlQsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JYX0JVRl9GUkFN RV9UWVBFLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19SWF9IRFIsIDIpLA0KK0RFQ0xfUkVH KFJUMTcxMUhfUkVHX1JYX0RBVEEsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1RSQU5TTUlU LCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19UWF9CWVRFX0NOVCwgMSksDQorREVDTF9SRUco UlQxNzExSF9SRUdfVFhfSERSLCAyKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19UWF9EQVRBLCAx KSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19DTEtfQ1RSTDIsIDEpLA0KK0RFQ0xfUkVHKFJUMTcx MUhfUkVHX0NMS19DVFJMMywgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfQk1DX0NUUkwsIDEp LA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX0JNQ0lPX1JYRFpTRUwsIDEpLA0KK0RFQ0xfUkVHKFJU MTcxMUhfUkVHX1ZDT05OX0NMSU1JVEVOLCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19SVF9T VEFUVVMsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1JUX0lOVCwgMSksDQorREVDTF9SRUco UlQxNzExSF9SRUdfUlRfTUFTSywgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfSURMRV9DVFJM LCAxKSwNCitERUNMX1JFRyhSVDE3MTFIX1JFR19JTlRSU1RfQ1RSTCwgMSksDQorREVDTF9SRUco UlQxNzExSF9SRUdfV0FUQ0hET0dfQ1RSTCwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfSTJD UlNUX0NUUkwsIDEpLA0KK0RFQ0xfUkVHKFJUMTcxMUhfUkVHX1NXUkVTRVQsIDEpLA0KK0RFQ0xf UkVHKFJUMTcxMUhfUkVHX1RUQ1BDX0ZJTFRFUiwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdf RFJQX1RPR0dMRV9DWUNMRSwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfRFJQX0RVVFlfQ1RS TCwgMSksDQorREVDTF9SRUcoUlQxNzExSF9SRUdfQk1DSU9fUlhEWkVOLCAxKSwNCit9Ow0KKw0K K3N0YXRpYyBjb25zdCBjaGFyICpydDE3MTFoX2RiZ19maWxlbmFtZVtSVDE3MTFIX0RCR19NQVhd ID0gew0KKyJsb2ciLCAicmVncyIsICJyZWdfYWRkciIsICJkYXRhIiwNCit9Ow0KKw0KK3N0YXRp YyBib29sIHJ0MTcxMWhfbG9nX2Z1bGwoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQor cmV0dXJuIGNoaXAtPmxvZ2J1ZmZlcl90YWlsID09DQorKGNoaXAtPmxvZ2J1ZmZlcl9oZWFkICsg MSkgJSBMT0dfQlVGRkVSX0VOVFJJRVM7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9ydDE3MTFoX2xv ZyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBjb25zdCBjaGFyICpmbXQsDQorIHZhX2xpc3Qg YXJncykNCit7DQorY2hhciB0bXBidWZmZXJbTE9HX0JVRkZFUl9FTlRSWV9TSVpFXTsNCit1NjQg dHNfbnNlYyA9IGxvY2FsX2Nsb2NrKCk7DQordW5zaWduZWQgbG9uZyByZW1fbnNlYzsNCisNCitp ZiAoIWNoaXAtPmxvZ2J1ZmZlcltjaGlwLT5sb2didWZmZXJfaGVhZF0pIHsNCitjaGlwLT5sb2di dWZmZXJbY2hpcC0+bG9nYnVmZmVyX2hlYWRdID0NCitkZXZtX2t6YWxsb2MoY2hpcC0+ZGV2LCBM T0dfQlVGRkVSX0VOVFJZX1NJWkUsIEdGUF9LRVJORUwpOw0KK2lmICghY2hpcC0+bG9nYnVmZmVy W2NoaXAtPmxvZ2J1ZmZlcl9oZWFkXSkNCityZXR1cm47DQorfQ0KKw0KK3ZzbnByaW50Zih0bXBi dWZmZXIsIHNpemVvZih0bXBidWZmZXIpLCBmbXQsIGFyZ3MpOw0KKw0KK211dGV4X2xvY2soJmNo aXAtPmxvZ2J1ZmZlcl9sb2NrKTsNCisNCitpZiAocnQxNzExaF9sb2dfZnVsbChjaGlwKSkgew0K K2NoaXAtPmxvZ2J1ZmZlcl9oZWFkID0gbWF4KGNoaXAtPmxvZ2J1ZmZlcl9oZWFkIC0gMSwgMCk7 DQorc3RybGNweSh0bXBidWZmZXIsICJvdmVyZmxvdyIsIHNpemVvZih0bXBidWZmZXIpKTsNCit9 DQorDQoraWYgKGNoaXAtPmxvZ2J1ZmZlcl9oZWFkIDwgMCB8fA0KK2NoaXAtPmxvZ2J1ZmZlcl9o ZWFkID49IExPR19CVUZGRVJfRU5UUklFUykgew0KK2Rldl93YXJuKGNoaXAtPmRldiwgIiVzIGJh ZCBsb2cgYnVmZmVyIGluZGV4ICVkXG4iLCBfX2Z1bmNfXywNCitjaGlwLT5sb2didWZmZXJfaGVh ZCk7DQorZ290byBhYm9ydDsNCit9DQorDQoraWYgKCFjaGlwLT5sb2didWZmZXJbY2hpcC0+bG9n YnVmZmVyX2hlYWRdKSB7DQorZGV2X3dhcm4oY2hpcC0+ZGV2LCAiJXMgbG9nIGJ1ZmZlciBpbmRl eCAlZCBpcyBOVUxMXG4iLA0KK19fZnVuY19fLCBjaGlwLT5sb2didWZmZXJfaGVhZCk7DQorZ290 byBhYm9ydDsNCit9DQorDQorcmVtX25zZWMgPSBkb19kaXYodHNfbnNlYywgMTAwMDAwMDAwMCk7 DQorc2NucHJpbnRmKGNoaXAtPmxvZ2J1ZmZlcltjaGlwLT5sb2didWZmZXJfaGVhZF0sIExPR19C VUZGRVJfRU5UUllfU0laRSwNCisiWyU1bHUuJTA2bHVdICVzIiwgKHVuc2lnbmVkIGxvbmcpdHNf bnNlYywgcmVtX25zZWMgLyAxMDAwLA0KKyAgdG1wYnVmZmVyKTsNCitjaGlwLT5sb2didWZmZXJf aGVhZCA9IChjaGlwLT5sb2didWZmZXJfaGVhZCArIDEpICUgTE9HX0JVRkZFUl9FTlRSSUVTOw0K Kw0KK2Fib3J0Og0KK211dGV4X3VubG9jaygmY2hpcC0+bG9nYnVmZmVyX2xvY2spOw0KK30NCisN CitzdGF0aWMgdm9pZCBydDE3MTFoX2xvZyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLA0KK2Nv bnN0IGNoYXIgKmZtdCwgLi4uKQ0KK3sNCit2YV9saXN0IGFyZ3M7DQorDQordmFfc3RhcnQoYXJn cywgZm10KTsNCitfcnQxNzExaF9sb2coY2hpcCwgZm10LCBhcmdzKTsNCit2YV9lbmQoYXJncyk7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9sb2dfc2hvdyhzdHJ1Y3QgcnQxNzExaF9jaGlw ICpjaGlwLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpDQorew0KK2ludCB0YWlsOw0KKw0KK211dGV4X2xv Y2soJmNoaXAtPmxvZ2J1ZmZlcl9sb2NrKTsNCit0YWlsID0gY2hpcC0+bG9nYnVmZmVyX3RhaWw7 DQord2hpbGUgKHRhaWwgIT0gY2hpcC0+bG9nYnVmZmVyX2hlYWQpIHsNCitzZXFfcHJpbnRmKHMs ICIlcyIsIGNoaXAtPmxvZ2J1ZmZlclt0YWlsXSk7DQordGFpbCA9ICh0YWlsICsgMSkgJSBMT0df QlVGRkVSX0VOVFJJRVM7DQorfQ0KK2lmICghc2VxX2hhc19vdmVyZmxvd2VkKHMpKQ0KK2NoaXAt PmxvZ2J1ZmZlcl90YWlsID0gdGFpbDsNCittdXRleF91bmxvY2soJmNoaXAtPmxvZ2J1ZmZlcl9s b2NrKTsNCisNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX3JlZ3Nfc2hv dyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMpDQorew0KK2lu dCByZXQgPSAwOw0KK2ludCBpID0gMCwgaiA9IDA7DQorc3RydWN0IHJlZ19kZXNjICpkZXNjID0g TlVMTDsNCit1aW50OF90IHJlZ3ZhbFsyXSA9IHswfTsNCisNCitmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShydDE3MTFoX3JlZ19kZXNjKTsgaSsrKSB7DQorZGVzYyA9ICZydDE3MTFoX3JlZ19k ZXNjW2ldOw0KK3JldCA9IHJ0MTcxMWhfcmVnX2Jsb2NrX3JlYWQoY2hpcCwgZGVzYy0+YWRkciwg ZGVzYy0+c2l6ZSwNCityZWd2YWwpOw0KK2lmIChyZXQgPCAwKSB7DQorZGV2X2VycihjaGlwLT5k ZXYsICIlcyByZWFkIHJlZzB4JTAyWCBmYWlsXG4iLA0KK19fZnVuY19fLCBkZXNjLT5hZGRyKTsN Citjb250aW51ZTsNCit9DQorDQorc2VxX3ByaW50ZihzLCAicmVnMHglMDJ4OjB4IiwgZGVzYy0+ YWRkcik7DQorZm9yIChqID0gMDsgaiA8IGRlc2MtPnNpemU7IGorKykNCitzZXFfcHJpbnRmKHMs ICIlMDJ4LCIsIHJlZ3ZhbFtqXSk7DQorc2VxX3B1dHMocywgIlxuIik7DQorfQ0KKw0KK3JldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBydDE3MTFoX3JlZ19hZGRyX3Nob3coc3Ry dWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwNCitzdHJ1Y3Qgc2VxX2ZpbGUgKnMpDQorew0KK3N0cnVj dCByZWdfZGVzYyAqZGVzYyA9ICZydDE3MTFoX3JlZ19kZXNjW2NoaXAtPmRiZ19yZWdpZHhdOw0K Kw0KK3NlcV9wcmludGYocywgIjB4JTAyeFxuIiwgZGVzYy0+YWRkcik7DQorcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MTcxMWhfZGF0YV9zaG93KHN0cnVjdCBydDE3MTFo X2NoaXAgKmNoaXAsDQorc3RydWN0IHNlcV9maWxlICpzKQ0KK3sNCitpbnQgcmV0ID0gMCwgaSA9 IDA7DQorc3RydWN0IHJlZ19kZXNjICpkZXNjID0gJnJ0MTcxMWhfcmVnX2Rlc2NbY2hpcC0+ZGJn X3JlZ2lkeF07DQordWludDhfdCByZWd2YWxbMl0gPSB7MH07DQorDQorcmV0ID0gcnQxNzExaF9y ZWdfYmxvY2tfcmVhZChjaGlwLCBkZXNjLT5hZGRyLCBkZXNjLT5zaXplLCByZWd2YWwpOw0KK2lm IChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorDQorc2VxX3ByaW50ZihzLCAicmVnMHglMDJ4PTB4 IiwgZGVzYy0+YWRkcik7DQorZm9yIChpID0gMDsgaSA8IGRlc2MtPnNpemU7IGkrKykNCitzZXFf cHJpbnRmKHMsICIlMDJ4LCIsIHJlZ3ZhbFtpXSk7DQorc2VxX3B1dHMocywgIlxuIik7DQorcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2Zp bGUgKnMsIHZvaWQgKnYpDQorew0KK2ludCByZXQgPSAwOw0KK3N0cnVjdCBydDE3MTFoX2RiZ19p bmZvICppbmZvID0gKHN0cnVjdCBydDE3MTFoX2RiZ19pbmZvICopcy0+cHJpdmF0ZTsNCitzdHJ1 Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsNCisNCittdXRleF9sb2NrKCZjaGlw LT5kYmdvcHNfbG9jayk7DQorc3dpdGNoIChpbmZvLT5pZCkgew0KK2Nhc2UgUlQxNzExSF9EQkdf TE9HOg0KK3JldCA9IHJ0MTcxMWhfbG9nX3Nob3coY2hpcCwgcyk7DQorYnJlYWs7DQorY2FzZSBS VDE3MTFIX0RCR19SRUdTOg0KK3JldCA9IHJ0MTcxMWhfcmVnc19zaG93KGNoaXAsIHMpOw0KK2Jy ZWFrOw0KK2Nhc2UgUlQxNzExSF9EQkdfUkVHX0FERFI6DQorcmV0ID0gcnQxNzExaF9yZWdfYWRk cl9zaG93KGNoaXAsIHMpOw0KK2JyZWFrOw0KK2Nhc2UgUlQxNzExSF9EQkdfREFUQToNCityZXQg PSBydDE3MTFoX2RhdGFfc2hvdyhjaGlwLCBzKTsNCiticmVhazsNCitkZWZhdWx0Og0KK3JldCA9 IC1FSU5WQUw7DQorYnJlYWs7DQorfQ0KKw0KK211dGV4X3VubG9jaygmY2hpcC0+ZGJnb3BzX2xv Y2spOw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9kYmdfb3Blbihz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQoraWYgKGZpbGUtPmZf bW9kZSAmIEZNT0RFX1JFQUQpDQorcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0MTcxMWhfZGJn X3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOw0KK2ZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5p X3ByaXZhdGU7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZ2V0X3BhcmFtZXRlcnMo Y2hhciAqYnVmLCBsb25nIGludCAqcGFyYW0xLCBpbnQgbnVtX29mX3BhcikNCit7DQorY2hhciAq dG9rZW47DQoraW50IGJhc2UsIGNudDsNCisNCit0b2tlbiA9IHN0cnNlcCgmYnVmLCAiICIpOw0K Kw0KK2ZvciAoY250ID0gMDsgY250IDwgbnVtX29mX3BhcjsgY250KyspIHsNCitpZiAodG9rZW4g IT0gTlVMTCkgew0KK2lmICgodG9rZW5bMV0gPT0gJ3gnKSB8fCAodG9rZW5bMV0gPT0gJ1gnKSkN CitiYXNlID0gMTY7DQorZWxzZQ0KK2Jhc2UgPSAxMDsNCisNCitpZiAoa3N0cnRvdWwodG9rZW4s IGJhc2UsICZwYXJhbTFbY250XSkgIT0gMCkNCityZXR1cm4gLUVJTlZBTDsNCisNCit0b2tlbiA9 IHN0cnNlcCgmYnVmLCAiICIpOw0KK30gZWxzZQ0KK3JldHVybiAtRUlOVkFMOw0KK30NCityZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGludCBnZXRfZGF0YXMoY29uc3QgY2hhciAqYnVmLCBjb25z dCBpbnQgbGVuZ3RoLA0KK3Vuc2lnbmVkIGNoYXIgKmRhdGFfYnVmZmVyLCB1bnNpZ25lZCBjaGFy IGRhdGFfbGVuZ3RoKQ0KK3sNCitpbnQgaSwgcHRyOw0KK2xvbmcgaW50IHZhbHVlOw0KK2NoYXIg dG9rZW5bNV07DQorDQordG9rZW5bMF0gPSAnMCc7DQordG9rZW5bMV0gPSAneCc7DQordG9rZW5b NF0gPSAwOw0KK2lmIChidWZbMF0gIT0gJzAnIHx8IGJ1ZlsxXSAhPSAneCcpDQorcmV0dXJuIC1F SU5WQUw7DQorDQorcHRyID0gMjsNCitmb3IgKGkgPSAwOyAoaSA8IGRhdGFfbGVuZ3RoKSAmJiAo cHRyICsgMiA8PSBsZW5ndGgpOyBpKyspIHsNCit0b2tlblsyXSA9IGJ1ZltwdHIrK107DQordG9r ZW5bM10gPSBidWZbcHRyKytdOw0KK3B0cisrOw0KK2lmIChrc3RydG91bCh0b2tlbiwgMTYsICZ2 YWx1ZSkgIT0gMCkNCityZXR1cm4gLUVJTlZBTDsNCitkYXRhX2J1ZmZlcltpXSA9IHZhbHVlOw0K K30NCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX3JlZ2FkZHIyaWR4KHVp bnQ4X3QgcmVnX2FkZHIpDQorew0KK2ludCBpID0gMDsNCitzdHJ1Y3QgcmVnX2Rlc2MgKmRlc2Mg PSBOVUxMOw0KKw0KK2ZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0MTcxMWhfcmVnX2Rlc2Mp OyBpKyspIHsNCitkZXNjID0gJnJ0MTcxMWhfcmVnX2Rlc2NbaV07DQoraWYgKGRlc2MtPmFkZHIg PT0gcmVnX2FkZHIpDQorcmV0dXJuIGk7DQorfQ0KK3JldHVybiAtRUlOVkFMOw0KK30NCisNCitz dGF0aWMgc3NpemVfdCBydDE3MTFoX2RiZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qg Y2hhciBfX3VzZXIgKnVidWYsDQorc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQorew0KK2lu dCByZXQgPSAwOw0KK3N0cnVjdCBydDE3MTFoX2RiZ19pbmZvICppbmZvID0NCisoc3RydWN0IHJ0 MTcxMWhfZGJnX2luZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7DQorc3RydWN0IHJ0MTcxMWhfY2hp cCAqY2hpcCA9IGluZm8tPmNoaXA7DQorc3RydWN0IHJlZ19kZXNjICpkZXNjID0gTlVMTDsNCitj aGFyIGxidWZbMTI4XTsNCitsb25nIGludCBwYXJhbVs1XTsNCit1bnNpZ25lZCBjaGFyIHJlZ19k YXRhWzJdID0gezB9Ow0KKw0KK2lmIChjb3VudCA+IHNpemVvZihsYnVmKSAtIDEpDQorcmV0dXJu IC1FRkFVTFQ7DQorDQorcmV0ID0gY29weV9mcm9tX3VzZXIobGJ1ZiwgdWJ1ZiwgY291bnQpOw0K K2lmIChyZXQpDQorcmV0dXJuIC1FRkFVTFQ7DQorbGJ1Zltjb3VudF0gPSAnXDAnOw0KKw0KK211 dGV4X2xvY2soJmNoaXAtPmRiZ29wc19sb2NrKTsNCitzd2l0Y2ggKGluZm8tPmlkKSB7DQorY2Fz ZSBSVDE3MTFIX0RCR19SRUdfQUREUjoNCityZXQgPSBnZXRfcGFyYW1ldGVycyhsYnVmLCBwYXJh bSwgMSk7DQoraWYgKHJldCA8IDApIHsNCitkZXZfZXJyKGNoaXAtPmRldiwgIiVzIGdldCBwYXJh bSBmYWlsXG4iLCBfX2Z1bmNfXyk7DQorcmV0ID0gLUVJTlZBTDsNCitnb3RvIG91dDsNCit9DQor cmV0ID0gcnQxNzExaF9yZWdhZGRyMmlkeChwYXJhbVswXSk7DQoraWYgKHJldCA8IDApIHsNCitk ZXZfZXJyKGNoaXAtPmRldiwgIiVzIGFkZHIyaWR4IGZhaWxcbiIsIF9fZnVuY19fKTsNCityZXQg PSAtRUlOVkFMOw0KK2dvdG8gb3V0Ow0KK30NCitjaGlwLT5kYmdfcmVnaWR4ID0gcmV0Ow0KK2Jy ZWFrOw0KK2Nhc2UgUlQxNzExSF9EQkdfREFUQToNCitkZXNjID0gJnJ0MTcxMWhfcmVnX2Rlc2Nb Y2hpcC0+ZGJnX3JlZ2lkeF07DQoraWYgKChkZXNjLT5zaXplIC0gMSkgKiAzICsgNSAhPSBjb3Vu dCkgew0KK2Rldl9lcnIoY2hpcC0+ZGV2LCAiJXMgaW5jb3JyZWN0IGlucHV0IGxlbmd0aFxuIiwN CitfX2Z1bmNfXyk7DQorcmV0ID0gLUVJTlZBTDsNCitnb3RvIG91dDsNCit9DQorcmV0ID0gZ2V0 X2RhdGFzKChjaGFyICopdWJ1ZiwgY291bnQsIHJlZ19kYXRhLCBkZXNjLT5zaXplKTsNCitpZiAo cmV0IDwgMCkgew0KK2Rldl9lcnIoY2hpcC0+ZGV2LCAiJXMgZ2V0IGRhdGEgZmFpbFxuIiwgX19m dW5jX18pOw0KK3JldCA9IC1FSU5WQUw7DQorZ290byBvdXQ7DQorfQ0KK3JldCA9IHJ0MTcxMWhf cmVnX2Jsb2NrX3dyaXRlKGNoaXAsIGRlc2MtPmFkZHIsIGRlc2MtPnNpemUsDQorcmVnX2RhdGEp Ow0KK2JyZWFrOw0KK2RlZmF1bHQ6DQorcmV0ID0gLUVJTlZBTDsNCiticmVhazsNCit9DQorDQor b3V0Og0KK211dGV4X3VubG9jaygmY2hpcC0+ZGJnb3BzX2xvY2spOw0KK3JldHVybiByZXQgPCAw ID8gcmV0IDogY291bnQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9kYmdfcmVsZWFzZShz dHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQoraWYgKGZpbGUtPmZf bW9kZSAmIEZNT0RFX1JFQUQpDQorcmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxlKTsN CityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg cnQxNzExaF9kYmdfb3BzID0gew0KKy5vcGVuPSBydDE3MTFoX2RiZ19vcGVuLA0KKy5sbHNlZWs9 IHNlcV9sc2VlaywNCisucmVhZD0gc2VxX3JlYWQsDQorLndyaXRlPSBydDE3MTFoX2RiZ193cml0 ZSwNCisucmVsZWFzZT0gcnQxNzExaF9kYmdfcmVsZWFzZSwNCit9Ow0KKw0KKw0KK3N0YXRpYyBp bnQgcnQxNzExaF9kZWJ1Z2ZzX2luaXQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQor aW50IHJldCA9IDAsIGkgPSAwOw0KK3N0cnVjdCBydDE3MTFoX2RiZ19pbmZvICppbmZvID0gTlVM TDsNCitpbnQgbGVuID0gMDsNCitjaGFyICpkaXJuYW1lID0gTlVMTDsNCisNCittdXRleF9pbml0 KCZjaGlwLT5sb2didWZmZXJfbG9jayk7DQorbXV0ZXhfaW5pdCgmY2hpcC0+ZGJnb3BzX2xvY2sp Ow0KK2xlbiA9IHN0cmxlbihkZXZfbmFtZShjaGlwLT5kZXYpKTsNCitkaXJuYW1lID0gZGV2bV9r emFsbG9jKGNoaXAtPmRldiwgbGVuICsgOSwgR0ZQX0tFUk5FTCk7DQoraWYgKCFkaXJuYW1lKQ0K K3JldHVybiAtRU5PTUVNOw0KK3NucHJpbnRmKGRpcm5hbWUsIGxlbiArIDksICJydDE3MTFoLSVz IiwgZGV2X25hbWUoY2hpcC0+ZGV2KSk7DQoraWYgKCFjaGlwLT5kYmdkaXIpIHsNCitjaGlwLT5k YmdkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgTlVMTCk7DQoraWYgKCFjaGlwLT5k YmdkaXIpDQorcmV0dXJuIC1FTk9NRU07DQorfQ0KKw0KK2ZvciAoaSA9IDA7IGkgPCBSVDE3MTFI X0RCR19NQVg7IGkrKykgew0KK2luZm8gPSAmY2hpcC0+ZGJnX2luZm9baV07DQoraW5mby0+Y2hp cCA9IGNoaXA7DQoraW5mby0+aWQgPSBpOw0KK2NoaXAtPmRiZ19maWxlc1tpXSA9IGRlYnVnZnNf Y3JlYXRlX2ZpbGUoDQorcnQxNzExaF9kYmdfZmlsZW5hbWVbaV0sIFNfSUZSRUcgfCAwNDQ0LA0K K2NoaXAtPmRiZ2RpciwgaW5mbywgJnJ0MTcxMWhfZGJnX29wcyk7DQoraWYgKCFjaGlwLT5kYmdf ZmlsZXNbaV0pIHsNCityZXQgPSAtRUlOVkFMOw0KK2dvdG8gZXJyOw0KK30NCit9DQorDQorcmV0 dXJuIDA7DQorZXJyOg0KK2RlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjaGlwLT5kYmdkaXIpOw0K K3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHJ0MTcxMWhfZGVidWdmc19leGl0KHN0 cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2RlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShj aGlwLT5kYmdkaXIpOw0KK30NCisNCisjZWxzZQ0KKw0KK3N0YXRpYyB2b2lkIHJ0MTcxMWhfbG9n KGNvbnN0IHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0K K3sNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2RlYnVnZnNfaW5pdChjb25zdCBzdHJ1Y3Qg cnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQg cnQxNzExaF9kZWJ1Z2ZzX2V4aXQoY29uc3Qgc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7 DQorfQ0KKw0KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8NCisNCitzdGF0aWMgY29uc3Qg Y2hhciAqIGNvbnN0IHR5cGVjX2NjX3N0YXR1c19uYW1lW10gPSB7DQorW1RZUEVDX0NDX09QRU5d PSAiT3BlbiIsDQorW1RZUEVDX0NDX1JBXT0gIlJhIiwNCitbVFlQRUNfQ0NfUkRdPSAiUmQiLA0K K1tUWVBFQ19DQ19SUF9ERUZdPSAiUnAtZGVmIiwNCitbVFlQRUNfQ0NfUlBfMV81XT0gIlJwLTEu NSIsDQorW1RZUEVDX0NDX1JQXzNfMF09ICJScC0zLjAiLA0KK307DQorDQorc3RhdGljIGNvbnN0 IGNoYXIgKiBjb25zdCBjY19wb2xhcml0eV9uYW1lW10gPSB7DQorW1RZUEVDX1BPTEFSSVRZX0ND MV09ICJQb2xhcml0eV9DQzEiLA0KK1tUWVBFQ19QT0xBUklUWV9DQzJdPSAiUG9sYXJpdHlfQ0My IiwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHJhbnNtaXRfdHlwZV9uYW1l W10gPSB7DQorW1RDUENfVFhfU09QXT0gIlNPUCIsDQorW1RDUENfVFhfU09QX1BSSU1FXT0gIlNP UCciLA0KK1tUQ1BDX1RYX1NPUF9QUklNRV9QUklNRV09ICJTT1AnJyIsDQorW1RDUENfVFhfU09Q X0RFQlVHX1BSSU1FXT0gIkRFQlVHJyIsDQorW1RDUENfVFhfU09QX0RFQlVHX1BSSU1FX1BSSU1F XT0gIkRFQlVHJyciLA0KK1tUQ1BDX1RYX0hBUkRfUkVTRVRdPSAiSEFSRF9SRVNFVCIsDQorW1RD UENfVFhfQ0FCTEVfUkVTRVRdPSAiQ0FCTEVfUkVTRVQiLA0KK1tUQ1BDX1RYX0JJU1RfTU9ERV8y XT0gIkJJU1RfTU9ERV8yIiwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHlw ZWNfcm9sZV9uYW1lW10gPSB7DQorW1RZUEVDX1NJTktdPSAiU2luayIsDQorW1RZUEVDX1NPVVJD RV09ICJTb3VyY2UiLA0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0eXBlY19k YXRhX3JvbGVfbmFtZVtdID0gew0KK1tUWVBFQ19ERVZJQ0VdPSAiRGV2aWNlIiwNCitbVFlQRUNf SE9TVF09ICJIb3N0IiwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBlbnVtIHR5cGVjX2NjX3B1bGwg dHlwZWNfY2Nfc3RhdHVzX3B1bGxfbWFwcGluZ1tdID0gew0KK1tUWVBFQ19DQ19PUEVOXSA9IFRZ UEVDX0NDX1BVTExfT1BFTiwNCitbVFlQRUNfQ0NfUkFdID0gVFlQRUNfQ0NfUFVMTF9SQSwNCitb VFlQRUNfQ0NfUkRdID0gVFlQRUNfQ0NfUFVMTF9SRCwNCitbVFlQRUNfQ0NfUlBfREVGXSA9IFRZ UEVDX0NDX1BVTExfUlBfREVGLA0KK1tUWVBFQ19DQ19SUF8xXzVdID0gVFlQRUNfQ0NfUFVMTF9S UF8xXzUsDQorW1RZUEVDX0NDX1JQXzNfMF0gPSBUWVBFQ19DQ19QVUxMX1JQXzNfMCwNCit9Ow0K Kw0KK3N0YXRpYyBpbmxpbmUgZW51bSB0eXBlY19jY19wdWxsIHJ0MTcxMWhfY2Nfc3RhdHVzMnB1 bGwoZW51bSB0eXBlY19jY19zdGF0dXMgY2MpDQorew0KK3JldHVybiB0eXBlY19jY19zdGF0dXNf cHVsbF9tYXBwaW5nW2NjXTsNCit9DQorDQorI2RlZmluZSBQRE9fRklYRURfRkxBR1MgXA0KKyhQ RE9fRklYRURfRFVBTF9ST0xFIHwgUERPX0ZJWEVEX0RBVEFfU1dBUCB8IFBET19GSVhFRF9VU0Jf Q09NTSkNCisNCitzdGF0aWMgY29uc3QgdTMyIHNyY19wZG9bXSA9IHsNCitQRE9fRklYRUQoNTAw MCwgNTAwLCBQRE9fRklYRURfRkxBR1MpLA0KK307DQorDQorc3RhdGljIGNvbnN0IHUzMiBzbmtf cGRvW10gPSB7DQorUERPX0ZJWEVEKDUwMDAsIDUwMCwgUERPX0ZJWEVEX0ZMQUdTKSwNCit9Ow0K Kw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwY19jb25maWcgcnQxNzExaF90Y3BjX2NvbmZpZyA9 IHsNCisuc3JjX3BkbyA9IHNyY19wZG8sDQorLm5yX3NyY19wZG8gPSBBUlJBWV9TSVpFKHNyY19w ZG8pLA0KKy5zbmtfcGRvID0gc25rX3BkbywNCisubnJfc25rX3BkbyA9IEFSUkFZX1NJWkUoc25r X3BkbyksDQorLm1heF9zbmtfbXYgPSA1MDAwLA0KKy5tYXhfc25rX21hID0gMzAwMCwNCisubWF4 X3Nua19tdyA9IDE1MDAwLA0KKy5vcGVyYXRpbmdfc25rX213ID0gMjUwMCwNCisudHlwZSA9IFRZ UEVDX1BPUlRfRFJQLA0KKy5kZWZhdWx0X3JvbGUgPSBUWVBFQ19TSU5LLA0KKy5hbHRfbW9kZXMg PSBOVUxMLA0KK307DQorDQorI2RlZmluZSBSVDE3MTFIX1JFU1VNRV9SRVRSWSAxMA0KKyNkZWZp bmUgUlQxNzExSF9SRVNVTUVfUkVUUllfU0xFRVAgNTANCisNCitzdGF0aWMgaW5saW5lIGJvb2wg cnQxNzExaF9pc19zdXNwZW5kZWQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQoraW50 IHJldHJ5X2NudCA9IDA7DQorDQorZm9yIChyZXRyeV9jbnQgPSAwOyByZXRyeV9jbnQgPCBSVDE3 MTFIX1JFU1VNRV9SRVRSWTsgcmV0cnlfY250KyspIHsNCitpZiAoYXRvbWljX3JlYWQoJmNoaXAt PnBtX3N1c3BlbmQpKSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIHJldHJ5ICVkLyVkXG4iLCBf X2Z1bmNfXywNCityZXRyeV9jbnQgKyAxLCBSVDE3MTFIX1JFU1VNRV9SRVRSWSk7DQorbXNsZWVw KFJUMTcxMUhfUkVTVU1FX1JFVFJZX1NMRUVQKTsNCit9IGVsc2UNCityZXR1cm4gZmFsc2U7DQor fQ0KKw0KK3JldHVybiB0cnVlOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfcmVnX3JlYWQo c3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhfdCByZWcsDQordWludDhfdCAqZGF0YSkN Cit7DQoraW50IHJldCA9IDA7DQorDQorYXRvbWljX3NldCgmY2hpcC0+aTJjX2J1c3ksIDEpOw0K K2lmIChydDE3MTFoX2lzX3N1c3BlbmRlZChjaGlwKSkgew0KK2F0b21pY19zZXQoJmNoaXAtPmky Y19idXN5LCAwKTsNCityZXR1cm4gLUVUSU1FRE9VVDsNCit9DQorDQorcmV0ID0gaTJjX3NtYnVz X3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2hpcC0+aTJjLCByZWcsIDEsIGRhdGEpOw0KK2lmIChyZXQg PCAwKQ0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyByZWclMDJYIGZhaWwoJWQpXG4iLCBfX2Z1bmNf XywgcmVnLCByZXQpOw0KK2F0b21pY19zZXQoJmNoaXAtPmkyY19idXN5LCAwKTsNCisNCityZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfcmVnX3dyaXRlKHN0cnVjdCBydDE3 MTFoX2NoaXAgKmNoaXAsIHVpbnQ4X3QgcmVnLA0KK3VpbnQ4X3QgZGF0YSkNCit7DQoraW50IHJl dCA9IDA7DQorDQorYXRvbWljX3NldCgmY2hpcC0+aTJjX2J1c3ksIDEpOw0KK2lmIChydDE3MTFo X2lzX3N1c3BlbmRlZChjaGlwKSkgew0KK2F0b21pY19zZXQoJmNoaXAtPmkyY19idXN5LCAwKTsN CityZXR1cm4gLUVUSU1FRE9VVDsNCit9DQorDQorcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19i bG9ja19kYXRhKGNoaXAtPmkyYywgcmVnLCAxLCAmZGF0YSk7DQoraWYgKHJldCA8IDApDQorcnQx NzExaF9sb2coY2hpcCwgIiVzIHJlZyUwMlggPSAlMDJYIGZhaWwoJWQpXG4iLCBfX2Z1bmNfXywg cmVnLA0KK2RhdGEsIHJldCk7DQorYXRvbWljX3NldCgmY2hpcC0+aTJjX2J1c3ksIDApOw0KKw0K K3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9yZWdfYmxvY2tfd3JpdGUo c3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwgdWludDhfdCByZWcsDQoraW50IGxlbiwgY29uc3Qg dWludDhfdCAqZGF0YSkNCit7DQoraW50IHJldCA9IDA7DQorDQorYXRvbWljX3NldCgmY2hpcC0+ aTJjX2J1c3ksIDEpOw0KK2lmIChydDE3MTFoX2lzX3N1c3BlbmRlZChjaGlwKSkgew0KK2F0b21p Y19zZXQoJmNoaXAtPmkyY19idXN5LCAwKTsNCityZXR1cm4gLUVUSU1FRE9VVDsNCit9DQorDQor cmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNoaXAtPmkyYywgcmVnLCBsZW4s IGRhdGEpOw0KK2lmIChyZXQgPCAwKQ0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyByZWclMDJYLCBs ZW4gPSAlZCBmYWlsKCVkKVxuIiwgX19mdW5jX18sDQorcmVnLCBsZW4sIHJldCk7DQorYXRvbWlj X3NldCgmY2hpcC0+aTJjX2J1c3ksIDApOw0KKw0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRp YyBpbnQgcnQxNzExaF9yZWdfYmxvY2tfcmVhZChzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCB1 aW50OF90IHJlZywNCitpbnQgbGVuLCB1aW50OF90ICpkYXRhKQ0KK3sNCitpbnQgcmV0ID0gMDsN CisNCithdG9taWNfc2V0KCZjaGlwLT5pMmNfYnVzeSwgMSk7DQoraWYgKHJ0MTcxMWhfaXNfc3Vz cGVuZGVkKGNoaXApKSB7DQorYXRvbWljX3NldCgmY2hpcC0+aTJjX2J1c3ksIDApOw0KK3JldHVy biAtRVRJTUVET1VUOw0KK30NCisNCityZXQgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0 YShjaGlwLT5pMmMsIHJlZywgbGVuLCBkYXRhKTsNCitpZiAocmV0IDwgMCkNCitydDE3MTFoX2xv ZyhjaGlwLCAiJXMgcmVnJTAyWCwgbGVuID0gJWQgZmFpbCglZClcbiIsIF9fZnVuY19fLA0KK3Jl ZywgbGVuLCByZXQpOw0KK2F0b21pY19zZXQoJmNoaXAtPmkyY19idXN5LCAwKTsNCisNCityZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBydDE3MTFoX3JlZ193cml0ZV93b3Jk KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIHVpbnQ4X3QgcmVnLA0KK3VpbnQxNl90IGRhdGEp DQorew0KK2RhdGEgPSBjcHVfdG9fbGUxNihkYXRhKTsNCityZXR1cm4gcnQxNzExaF9yZWdfYmxv Y2tfd3JpdGUoY2hpcCwgcmVnLCAyLCAodWludDhfdCAqKSZkYXRhKTsNCit9DQorDQorc3RhdGlj IGlubGluZSBpbnQgcnQxNzExaF9yZWdfcmVhZF93b3JkKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNo aXAsIHVpbnQ4X3QgcmVnLA0KK3VpbnQxNl90ICpkYXRhKQ0KK3sNCitpbnQgcmV0ID0gMDsNCisN CityZXQgPSBydDE3MTFoX3JlZ19ibG9ja19yZWFkKGNoaXAsIHJlZywgMiwgKHVpbnQ4X3QgKilk YXRhKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KKypkYXRhID0gbGUxNl90b19jcHUo KmRhdGEpOw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfcHN5X2dldF9w cm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksDQorZW51bSBwb3dlcl9zdXBwbHlfcHJv cGVydHkgcHNwLCB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQ0KK3sNCitzdHJ1Y3Qg cnQxNzExaF9jaGlwICpjaGlwID0gcG93ZXJfc3VwcGx5X2dldF9kcnZkYXRhKHBzeSk7DQorDQor c3dpdGNoIChwc3ApIHsNCitjYXNlIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORToNCit2YWwtPmlu dHZhbCA9IGNoaXAtPmNoYXJnZV9vbjsNCiticmVhazsNCitjYXNlIFBPV0VSX1NVUFBMWV9QUk9Q X1ZPTFRBR0VfTk9XOg0KK3ZhbC0+aW50dmFsID0gY2hpcC0+c3VwcGx5X3ZvbHRhZ2UgKiAxMDAw OyAvKiBtViAtPiDCtVYgKi8NCiticmVhazsNCitjYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJF TlRfTUFYOg0KK3ZhbC0+aW50dmFsID0gY2hpcC0+Y3VycmVudF9saW1pdCAqIDEwMDA7IC8qIG1B IC0+IMK1QSAqLw0KK2JyZWFrOw0KK2RlZmF1bHQ6DQorcmV0dXJuIC1FTk9EQVRBOw0KK30NCisN CityZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHJ0 MTcxMWhfcHN5X3Byb3BlcnRpZXNbXSA9IHsNCitQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsDQor UE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csDQorUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVO VF9NQVgsDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHBvd2VyX3N1cHBseV9kZXNjIHJ0 MTcxMWhfcHN5X2Rlc2MgPSB7DQorLm5hbWU9ICJydDE3MTFoLXR5cGVjLXNvdXJjZSIsDQorLnR5 cGU9IFBPV0VSX1NVUFBMWV9UWVBFX1VTQl9UWVBFX0MsDQorLnByb3BlcnRpZXM9IHJ0MTcxMWhf cHN5X3Byb3BlcnRpZXMsDQorLm51bV9wcm9wZXJ0aWVzPSBBUlJBWV9TSVpFKHJ0MTcxMWhfcHN5 X3Byb3BlcnRpZXMpLA0KKy5nZXRfcHJvcGVydHk9IHJ0MTcxMWhfcHN5X2dldF9wcm9wZXJ0eSwN Cit9Ow0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MTcxMWhfc29mdHdhcmVfcmVzZXQoc3RydWN0 IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQoraW50IHJldCA9IDA7DQorDQorcmV0ID0gcnQxNzEx aF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfU1dSRVNFVCwgMHgwMSk7DQoraWYgKHJldCA8 IDApDQorcmV0dXJuIHJldDsNCisNCit1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQorcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MTcxMWhfY29tbWFuZChzdHJ1Y3QgcnQx NzExaF9jaGlwICpjaGlwLCB1aW50OF90IGNtZCkNCit7DQorcmV0dXJuIHJ0MTcxMWhfcmVnX3dy aXRlKGNoaXAsIFJUMTcxMUhfUkVHX0NPTU1BTkQsIGNtZCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxp bmUgaW50IHJ0MTcxMWhfaW5pdF9jY19wYXJhbXMoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCwN Citjb25zdCBlbnVtIHR5cGVjX2NjX3N0YXR1cyAqY2MpDQorew0KK2ludCByZXQgPSAwOw0KK3Vp bnQ4X3QgZW4gPSAwLCBzZWwgPSAwOw0KKw0KK2lmICgqY2MgPT0gVFlQRUNfQ0NfUlBfREVGKSB7 IC8qIDAuNTUgKi8NCitlbiA9IDA7DQorc2VsID0gMHg4MTsNCit9IGVsc2UgaWYgKGNoaXAtPmRp ZCA+PSBSVDE3MTFIX0RJRF9EKSB7IC8qIDAuMzUgJiAwLjc1ICovDQorZW4gPSAxOw0KK3NlbCA9 IDB4ODE7DQorfSBlbHNlIHsgLyogMC40ICYgMC43ICovDQorZW4gPSAxOw0KK3NlbCA9IDB4ODA7 DQorfQ0KKw0KK3JldCA9IHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX0JNQ0lP X1JYRFpFTiwgZW4pOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorDQorcmV0dXJuIHJ0 MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX0JNQ0lPX1JYRFpTRUwsIHNlbCk7DQor fQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9hbGVydF9zdGF0dXNfY2xlYXIoc3RydWN0IHJ0MTcx MWhfY2hpcCAqY2hpcCwgdWludDMyX3QgbWFzaykNCit7DQoraW50IHJldCA9IDA7DQordWludDE2 X3QgbWFza190MSA9IDA7DQordWludDhfdCBtYXNrX3QyID0gMDsNCisNCisvKiBXcml0ZSAxIGNs ZWFyICovDQorbWFza190MSA9ICh1aW50MTZfdCltYXNrOw0KK3JldCA9IHJ0MTcxMWhfcmVnX3dy aXRlX3dvcmQoY2hpcCwgUlQxNzExSF9SRUdfQUxFUlQsIG1hc2tfdDEpOw0KK2lmIChyZXQgPCAw KQ0KK3JldHVybiByZXQ7DQorDQorbWFza190MiA9IG1hc2sgPj4gMTY7DQoraWYgKG1hc2tfdDIp IHsNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19SVF9JTlQsIG1h c2tfdDIpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorfQ0KKw0KK3JldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfaW5pdF9hbGVydF9tYXNrKHN0cnVjdCBydDE3MTFo X2NoaXAgKmNoaXApDQorew0KK3VpbnQxNl90IG1hc2sgPSAwOw0KKw0KK21hc2sgPSBSVDE3MTFI X1JFR19BTEVSVF9DQ19TVEFUVVMgfCBSVDE3MTFIX1JFR19BTEVSVF9QT1dFUl9TVEFUVVM7DQor DQorbWFzayB8PSBSVDE3MTFIX1JFR19BTEVSVF9UWF9TVUNDRVNTIHwgUlQxNzExSF9SRUdfQUxF UlRfVFhfRElTQ0FSREVEDQorfCBSVDE3MTFIX1JFR19BTEVSVF9UWF9GQUlMRUQgfCBSVDE3MTFI X1JFR19BTEVSVF9SWF9IQVJEX1JTVA0KK3wgUlQxNzExSF9SRUdfQUxFUlRfUlhfU1RBVFVTIHwg UlQxNzExSF9SRUdfQUxFUlRfUlhfQlVGX09WRjsNCisNCittYXNrIHw9IFJUMTcxMUhfUkVHX0FM RVJUX0ZBVUxUOw0KKw0KK3JldHVybiBydDE3MTFoX3JlZ193cml0ZV93b3JkKGNoaXAsIFJUMTcx MUhfUkVHX0FMRVJUX01BU0ssIG1hc2spOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfaW5p dF9wb3dlcl9zdGF0dXNfbWFzayhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCit1aW50 OF90IG1hc2sgPSBSVDE3MTFIX1JFR19QT1dFUl9TVEFUVVNfVkJVU19QUkVTOw0KKw0KK3JldHVy biBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19QT1dFUl9TVEFUVVNfTUFTSywg bWFzayk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9pbml0X2ZhdWx0X21hc2soc3RydWN0 IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQorY29uc3QgdWludDhfdCBtYXNrID0gUlQxNzExSF9S RUdfRkFVTFRfU1RBVFVTX1ZDT05OX09WDQorfCBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVNfVkNP Tk5fT0M7DQorDQorcmV0dXJuIHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX0ZB VUxUX1NUQVRVU19NQVNLLCBtYXNrKTsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX2luaXRf cnRfbWFzayhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCit1aW50OF90IHJ0X21hc2sg PSBSVDE3MTFIX1JFR19NX1ZCVVNfODA7DQorDQoraWYgKGNoaXAtPmRpZCA8IFJUMTcxMUhfRElE X0QpDQorcnRfbWFzayB8PSAoUlQxNzExSF9SRUdfTV9XQUtFVVAgfCBSVDE3MTFIX1JFR19NX1JB X0RFVEFDSCk7DQorDQorcmV0dXJuIHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVH X1JUX01BU0ssIHJ0X21hc2spOw0KK30NCisNCisjZGVmaW5lIFJUMTcxMUhfV0FLRVVQX1dPUktf VElNRSgxMDAwKQ0KK3N0YXRpYyBlbnVtIGFsYXJtdGltZXJfcmVzdGFydA0KK3J0MTcxMWhfYWxh cm1fd2FrZXVwX2hhbmRsZXIoc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBub3cpDQorew0K K3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPQ0KK2NvbnRhaW5lcl9vZihhbGFybSwgc3RydWN0 IHJ0MTcxMWhfY2hpcCwgd2FrZXVwX3RpbWVyKTsNCisNCitydDE3MTFoX2xvZyhjaGlwLCAiJXNc biIsIF9fZnVuY19fKTsNCitwbV93YWtldXBfZXZlbnQoY2hpcC0+ZGV2LCBSVDE3MTFIX1dBS0VV UF9XT1JLX1RJTUUpOw0KK3NjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+d2FrZXVwX3dvcmss IDApOw0KK3JldHVybiBBTEFSTVRJTUVSX05PUkVTVEFSVDsNCit9DQorDQorc3RhdGljIHZvaWQg cnQxNzExaF9lbmFibGVfd2FrZXVwX3RpbWVyKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIGJv b2wgZW4pDQorew0KK2ludCB0b3V0ID0gMzAwOyAvKiBzICovDQorDQorcnQxNzExaF9sb2coY2hp cCwgIiVzICVkXG4iLCBfX2Z1bmNfXywgZW4pOw0KK2lmIChlbikgew0KK2lmICghY2hpcC0+d2Fr ZXVwX29uY2UpDQordG91dCA9IChjaGlwLT5sb3dfcnBfZHV0eV9jbnRkb3duKSA/IDUgOiAyMDsN CithbGFybV9zdGFydF9yZWxhdGl2ZSgmY2hpcC0+d2FrZXVwX3RpbWVyLCBrdGltZV9zZXQodG91 dCwgMCkpOw0KK30gZWxzZQ0KK2FsYXJtX2NhbmNlbCgmY2hpcC0+d2FrZXVwX3RpbWVyKTsNCit9 DQorDQorc3RhdGljIGlubGluZSBib29sIHJ0MTcxMWhfaXNfY2Nfb3BlbihzdHJ1Y3QgcnQxNzEx aF9jaGlwICpjaGlwKQ0KK3sNCitpZiAoIWNoaXAtPmRycF90b2dnbGluZyAmJiBjaGlwLT5jYzEg PT0gVFlQRUNfQ0NfT1BFTiAmJg0KK2NoaXAtPmNjMiA9PSBUWVBFQ19DQ19PUEVOKQ0KK3JldHVy biB0cnVlOw0KK3JldHVybiBmYWxzZTsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX3NldF9s b3dfcnBfZHV0eShzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBib29sIGxvd19ycCkNCit7DQor dWludDE2X3QgZHV0eSA9IGxvd19ycCA/IFJUMTcxMUhfTE9XX1JQX0RVVFkgOiBSVDE3MTFIX05P Uk1BTF9SUF9EVVRZOw0KKw0KK3JldHVybiBydDE3MTFoX3JlZ193cml0ZV93b3JkKGNoaXAsIFJU MTcxMUhfUkVHX0RSUF9EVVRZX0NUUkwsIGR1dHkpOw0KK30NCisNCisvKg0KKyAqIHJ0MTcxMWhf Y2hlY2tfZmFsc2VfcmFfZGV0YWNoDQorICoNCisgKiBDaGVjayBzaW5nbGUgUmEgcmVzaXN0YW5j ZSAoZU1hcmspIGV4aXN0cyBvciBub3Qgd2hlbg0KKyAqMSkgcmEgZGV0YWNoIGludCB0cmlnZ2Vy ZWQNCisgKjIpIHdha2V1cCB0aW1lciB0cmlnZ2VyZWQNCisgKg0KKyAqIElmIHJlZW50ZXJpbmcg bG93LXBvd2VyIG1vZGUgYW5kIGVNYXJrIHN0aWxsIGV4aXN0cywNCisgKiBpdCBtYXkgY2F1c2Ug YW4gaW5maW5pdGUgbG9vcC4NCisgKg0KKyAqIElmIGNjIHN0YXR1cyBpcyBib3RoIG9wZW4sIHJl dHVybiB0cnVlOyBvdGhlcndpc2UgcmV0dXJuIGZhbHNlDQorICovDQorc3RhdGljIGludCBfX3Rj cG1fZ2V0X2NjKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApOw0KK3N0YXRpYyBpbnQgX190Y3Bt X3NldF9jYyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBlbnVtIHR5cGVjX2NjX3N0YXR1cyBj Yyk7DQorc3RhdGljIGlubGluZSBpbnQgX190Y3BtX3N0YXJ0X2RycF90b2dnbGluZyhzdHJ1Y3Qg cnQxNzExaF9jaGlwICpjaGlwKTsNCitzdGF0aWMgaW5saW5lIGJvb2wgcnQxNzExaF9jaGVja19m YWxzZV9yYV9kZXRhY2goc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQorYm9vbCBkcnAg PSAoY2hpcC0+dGNwY19jZmcudHlwZSA9PSBUWVBFQ19QT1JUX0RSUCkgPyB0cnVlIDogZmFsc2U7 DQorDQorcnQxNzExaF9sb2coY2hpcCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQorDQorLyoNCisgKiBJ ZiB0aGUgRFVUIGlzIERSUCBhbmQgY3VycmVudCBDQyBzdGF0dXMgaGFzIHN0b3BwZWQgdG9nZ2xp bmcsDQorICogbGV0IGNjX2hhbmRsZXIgdG8gaGFuZGxlIGl0IGxhdGVyLg0KKyAqDQorICogSWYg Q0MgaXMgdG9nZ2xpbmcsIGZvcmNlIENDIHRvIHByZXNlbnQgUnANCisgKi8NCitpZiAoZHJwKSB7 DQorX190Y3BtX2dldF9jYyhjaGlwKTsNCisNCitpZiAoIWNoaXAtPmRycF90b2dnbGluZykgew0K K3J0MTcxMWhfbG9nKGNoaXAsICIlcyAxKCVzLCAlcylcbiIsIF9fZnVuY19fLA0KK3R5cGVjX2Nj X3N0YXR1c19uYW1lW2NoaXAtPmNjMV0sDQordHlwZWNfY2Nfc3RhdHVzX25hbWVbY2hpcC0+Y2My XSk7DQorcmV0dXJuIHRydWU7DQorfQ0KK19fdGNwbV9zZXRfY2MoY2hpcCwgVFlQRUNfQ0NfUlBf REVGKTsNCit1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQorfQ0KKw0KKy8qDQorICogQ2hlY2sg Q0Mgc3RhdHVzDQorICogUmQgKGRldmljZSkgLT4gbGV0IGNjX2hhbmRsZXIgdG8gaGFuZGxlIGl0 IGxhdGVyDQorICogZU1hcmsgb25seSAtPiBSZXNjaGVkdWxlIHdha2V1cCB0aW1lcg0KKyAqIE9w ZW4gLT4gKHRydWUgY29uZGl0aW9uKQ0KKyAqIFJlYWQgdG8gcmVlbnRlciBsb3ctcG93ZXIgbW9k ZS4NCisgKiBJZiB3ZSByZXBlYXRlZGx5IGVudGVyIHRoaXMgc2l0dWF0aW9uLA0KKyAqIGl0IHdp bGwgdHJpZ2dlciBsb3cgcnAgZHV0eSBwcm90ZWN0aW9uDQorICovDQorX190Y3BtX2dldF9jYyhj aGlwKTsNCitpZiAocnQxNzExaF9pc19jY19vcGVuKGNoaXApKQ0KK2NoaXAtPmNhYmxlX29ubHkg PSBmYWxzZTsNCitlbHNlIGlmICgoY2hpcC0+Y2MxICsgY2hpcC0+Y2MyKSA9PSBUWVBFQ19DQ19S QSkgew0KK2NoaXAtPmNhYmxlX29ubHkgPSB0cnVlOw0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyAy KGVtYXJrKVxuIiwgX19mdW5jX18pOw0KK30gZWxzZSB7DQorY2hpcC0+Y2FibGVfb25seSA9IGZh bHNlOw0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyAzKCVzICVzKVxuIiwgX19mdW5jX18sDQordHlw ZWNfY2Nfc3RhdHVzX25hbWVbY2hpcC0+Y2MxXSwNCit0eXBlY19jY19zdGF0dXNfbmFtZVtjaGlw LT5jYzJdKTsNCityZXR1cm4gdHJ1ZTsNCit9DQorDQoraWYgKGNoaXAtPmNhYmxlX29ubHkpDQor cnQxNzExaF9lbmFibGVfd2FrZXVwX3RpbWVyKGNoaXAsIHRydWUpOw0KK2Vsc2Ugew0KK2lmIChj aGlwLT5sb3dfcnBfZHV0eV9jbnRkb3duKQ0KK3J0MTcxMWhfc2V0X2xvd19ycF9kdXR5KGNoaXAs IHRydWUpOw0KK2Vsc2Ugew0KK2NoaXAtPndha2V1cF9vbmNlID0gZmFsc2U7DQorY2hpcC0+bG93 X3JwX2R1dHlfY250ZG93biA9IHRydWU7DQorfQ0KK30NCisNCisvKiBJZiBEVVAgaXMgRFJQLCBm b3JjZSBDQyB0byB0b2dnbGUgYWdhaW4gKi8NCitpZiAoZHJwKSB7DQorX190Y3BtX3N0YXJ0X2Ry cF90b2dnbGluZyhjaGlwKTsNCitydDE3MTFoX2FsZXJ0X3N0YXR1c19jbGVhcihjaGlwLA0KK1JU MTcxMUhfUkVHX0FMRVJUX0VYVF9SQV9ERVRBQ0gpOw0KK30NCisNCityZXR1cm4gY2hpcC0+Y2Fi bGVfb25seTsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX3NldF9sb3dfcG93ZXJfbW9kZShz dHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwLCBib29sIGVuLA0KK2VudW0gdHlwZWNfY2NfcHVsbCBw dWxsKQ0KK3sNCit1aW50OF90IGRhdGEgPSAwOw0KKw0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyAl ZFxuIiwgX19mdW5jX18sIGVuKTsNCisNCitpZiAoZW4pIHsNCitkYXRhID0gUlQxNzExSF9SRUdf Qk1DSU9fTFBFTjsNCisNCitpZiAocHVsbCAmIFRZUEVDX0NDX1BVTExfUlApDQorZGF0YSB8PSBS VDE3MTFIX1JFR19CTUNJT19MUFJQUkQ7DQorfSBlbHNlDQorZGF0YSA9IFJUMTcxMUhfUkVHX0JN Q0lPX0JHX0VOIHwNCitSVDE3MTFIX1JFR19WQlVTX0RFVF9FTiB8IFJUMTcxMUhfUkVHX0JNQ0lP X09TQ19FTjsNCisNCityZXR1cm4gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdf Qk1DX0NUUkwsIGRhdGEpOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfZW50ZXJfbHBtX2Fn YWluKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2Jvb2wgY2hlY2tfcmEgPSAoY2hp cC0+bHBtKSB8fCAoY2hpcC0+Y2FibGVfb25seSk7DQorDQoraWYgKGNoZWNrX3JhICYmIHJ0MTcx MWhfY2hlY2tfZmFsc2VfcmFfZGV0YWNoKGNoaXApKQ0KK3JldHVybiAwOw0KKw0KK3J0MTcxMWhf bG9nKGNoaXAsICIlcyByZXRyeSBscG1cbiIsIF9fZnVuY19fKTsNCitjaGlwLT5scG0gPSB0cnVl Ow0KKw0KK3J0MTcxMWhfc2V0X2xvd19wb3dlcl9tb2RlKGNoaXAsIHRydWUsDQorKGNoaXAtPnB3 cl9yb2xlICE9IFRZUEVDX1NPVVJDRSkgPw0KK1RZUEVDX0NDX1BVTExfRFJQIDogVFlQRUNfQ0Nf UFVMTF9SUCk7DQorDQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHJ0MTcxMWhfd2Fr ZXVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCitzdHJ1Y3QgcnQxNzExaF9j aGlwICpjaGlwID0NCitjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MTcxMWhfY2hpcCwgd2Fr ZXVwX3dvcmsud29yayk7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+d2FrZXVwX2xvY2spOw0KK211 dGV4X2xvY2soJmNoaXAtPmxvY2spOw0KK3J0MTcxMWhfbG9nKGNoaXAsICIlc1xuIiwgX19mdW5j X18pOw0KK2NoaXAtPndha2V1cF9vbmNlID0gdHJ1ZTsNCitydDE3MTFoX2VudGVyX2xwbV9hZ2Fp bihjaGlwKTsNCittdXRleF91bmxvY2soJmNoaXAtPmxvY2spOw0KK211dGV4X3VubG9jaygmY2hp cC0+d2FrZXVwX2xvY2spOw0KK3BtX3JlbGF4KGNoaXAtPmRldik7DQorfQ0KKw0KK3N0YXRpYyBp bmxpbmUgaW50IHJ0MTcxMWhfdHJ5X2xvd19wb3dlcl9tb2RlKHN0cnVjdCBydDE3MTFoX2NoaXAg KmNoaXApDQorew0KK3JldHVybiBydDE3MTFoX3NldF9sb3dfcG93ZXJfbW9kZShjaGlwLCB0cnVl LCBjaGlwLT5scG1fcHVsbCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MTcxMWhfZW50 ZXJfbG93X3Bvd2VyX21vZGUoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQorcmV0dXJu IHJ0MTcxMWhfdHJ5X2xvd19wb3dlcl9tb2RlKGNoaXApOw0KK30NCisNCitzdGF0aWMgaW5saW5l IGludCBydDE3MTFoX2VuYWJsZV9sb3dfcG93ZXJfbW9kZShzdHJ1Y3QgcnQxNzExaF9jaGlwICpj aGlwLA0KK2VudW0gdHlwZWNfY2NfcHVsbCBwdWxsKQ0KK3sNCitpZiAoY2hpcC0+Y2FibGVfb25s eSkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyByYSBvbmx5XG4iLCBfX2Z1bmNfXyk7DQorcnQx NzExaF9lbmFibGVfd2FrZXVwX3RpbWVyKGNoaXAsIHRydWUpOw0KK3JldHVybiAwOw0KK30NCisN CitpZiAoY2hpcC0+bHBtICE9IHRydWUpIHsNCitjaGlwLT5scG0gPSB0cnVlOw0KK2NoaXAtPmxw bV9wdWxsID0gcHVsbDsNCityZXR1cm4gcnQxNzExaF9lbnRlcl9sb3dfcG93ZXJfbW9kZShjaGlw KTsNCit9DQorDQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IHJ0MTcxMWhf ZGlzYWJsZV9sb3dfcG93ZXJfbW9kZShzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCitp bnQgcmV0ID0gMDsNCisNCitpZiAoY2hpcC0+bHBtICE9IGZhbHNlKSB7DQorY2hpcC0+bHBtID0g ZmFsc2U7DQorcnQxNzExaF9zZXRfbG93X3JwX2R1dHkoY2hpcCwgZmFsc2UpOw0KK3JldCA9IHJ0 MTcxMWhfc2V0X2xvd19wb3dlcl9tb2RlKGNoaXAsIGZhbHNlLA0KK1RZUEVDX0NDX1BVTExfRFJQ KTsNCit9DQorDQorY2hpcC0+d2FrZXVwX29uY2UgPSBmYWxzZTsNCitjaGlwLT5sb3dfcnBfZHV0 eV9jbnRkb3duID0gZmFsc2U7DQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB0Y3Bt X2luaXQoc3RydWN0IHRjcGNfZGV2ICpkZXYpDQorew0KK2ludCByZXQgPSAwOw0KK3N0cnVjdCBy dDE3MTFoX2NoaXAgKmNoaXAgPSBjb250YWluZXJfb2YoZGV2LA0KK3N0cnVjdCBydDE3MTFoX2No aXAsIHRjcGNfZGV2KTsNCisNCitydDE3MTFoX2xvZyhjaGlwLCAiJXNcbiIsIF9fZnVuY19fKTsN CisNCisvKiBDSyAzMDBLIGZyb20gMzIwSywgc2hpcHBpbmcgb2ZmLCBhdXRvX2lkbGUgZW5hYmxl LCB0b3V0ID0gMzJtcyAqLw0KK3JldCA9IHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhf UkVHX0lETEVfQ1RSTCwNCitSVDE3MTFIX1JFR19JRExFX1NFVCgwLCAxLCAxLCAyKSk7DQoraWYg KHJldCA8IDApIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgc2V0IGlkbGUgY3RybCBmYWlsKCVk KVxuIiwgX19mdW5jX18sIHJldCk7DQorcmV0dXJuIHJldDsNCit9DQorDQorcmV0ID0gcnQxNzEx aF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfSTJDUlNUX0NUUkwsDQorUlQxNzExSF9SRUdf STJDUlNUX1NFVCh0cnVlLCAweDBGKSk7DQoraWYgKHJldCA8IDApIHsNCitydDE3MTFoX2xvZyhj aGlwLCAiJXMgc2V0IGkyY3JzdCBmYWlsKCVkKVxuIiwgX19mdW5jX18sIHJldCk7DQorcmV0dXJu IHJldDsNCit9DQorDQorLyogVUZQIEJvdGggUkQgc2V0dGluZyAqLw0KKy8qIERSUCA9IDAsIFJw VmFsID0gMCAoRGVmYXVsdCksIFJkLCBSZCAqLw0KK3JldCA9IHJ0MTcxMWhfcmVnX3dyaXRlKGNo aXAsIFJUMTcxMUhfUkVHX1JPTEVfQ1RSTCwNCitSVDE3MTFIX1JFR19ST0xFX0NUUkxfUkVTX1NF VCgwLCAwLCBUWVBFQ19DQ19QVUxMX1JELA0KK1RZUEVDX0NDX1BVTExfUkQpKTsNCitpZiAocmV0 IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyBzZXQgcm9sZSBjdHJsIGZhaWwoJWQpXG4i LCBfX2Z1bmNfXywgcmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCisNCisvKg0KKyAqIENDIERldGVj dCBEZWJvdW5jZSA6ICgyNi43ICogdmFsKSB1cw0KKyAqIFRyYW5zaXRpb24gd2luZG93IGNvdW50 IDogc3BlYyAxMn4yMHVzLCBiYXNlZCBvbiAyLjRNSHoNCisgKi8NCityZXQgPSBydDE3MTFoX3Jl Z193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19UVENQQ19GSUxURVIsIDB4MEYpOw0KK2lmIChyZXQg PCAwKSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIHNldCBjYyBkZWIgZmFpbCglZClcbiIsIF9f ZnVuY19fLCByZXQpOw0KK3JldHVybiByZXQ7DQorfQ0KKw0KKy8qICBEUlAgVG9nZ2xlIEN5Y2xl IDogKDUxLjIgKyA2LjQgKiB2YWwpIG1zICovDQorcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQx NzExSF9SRUdfRFJQX1RPR0dMRV9DWUNMRSwgNCk7DQoraWYgKHJldCA8IDApIHsNCitydDE3MTFo X2xvZyhjaGlwLCAiJXMgc2V0IHRvZyBjeWMgZmFpbCglZClcbiIsIF9fZnVuY19fLCByZXQpOw0K K3JldHVybiByZXQ7DQorfQ0KKw0KKy8qIERSUCBEdXR5IEN0cmw6IDMzJSAqLw0KK3JldCA9IHJ0 MTcxMWhfcmVnX3dyaXRlX3dvcmQoY2hpcCwgUlQxNzExSF9SRUdfRFJQX0RVVFlfQ1RSTCwNCitS VDE3MTFIX05PUk1BTF9SUF9EVVRZKTsNCitpZiAocmV0IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNo aXAsICIlcyBzZXQgZHJwIGR1dHkgZmFpbCglZClcbiIsIF9fZnVuY19fLCByZXQpOw0KK3JldHVy biByZXQ7DQorfQ0KKw0KKy8qIFZjb25uIE9DICovDQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGUo Y2hpcCwgUlQxNzExSF9SRUdfVkNPTk5fQ0xJTUlURU4sIDEpOw0KK2lmIChyZXQgPCAwKSB7DQor cnQxNzExaF9sb2coY2hpcCwgIiVzIGVuIHZjb25uIG9jIGZhaWwoJWQpXG4iLCBfX2Z1bmNfXywg cmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCisNCisvKiBBbGVydCAmIE1hc2sgKi8NCityZXQgPSBy dDE3MTFoX2FsZXJ0X3N0YXR1c19jbGVhcihjaGlwLCAweGZmZmZmZmZmKTsNCitpZiAocmV0IDwg MCkgew0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyBjbGVhciBhbGVydCBmYWlsKCVkKVxuIiwgX19m dW5jX18sIHJldCk7DQorcmV0dXJuIHJldDsNCit9DQorcmV0ID0gcnQxNzExaF9pbml0X3Bvd2Vy X3N0YXR1c19tYXNrKGNoaXApOw0KK2lmIChyZXQgPCAwKSB7DQorcnQxNzExaF9sb2coY2hpcCwg IiVzIGluaXQgcHdyIG1hc2sgZmFpbCglZClcbiIsIF9fZnVuY19fLCByZXQpOw0KK3JldHVybiBy ZXQ7DQorfQ0KK3JldCA9IHJ0MTcxMWhfaW5pdF9hbGVydF9tYXNrKGNoaXApOw0KK2lmIChyZXQg PCAwKSB7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIGluaXQgYWxlcnQgbWFzayBmYWlsKCVkKVxu IiwgX19mdW5jX18sDQorcmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCityZXQgPSBydDE3MTFoX2lu aXRfZmF1bHRfbWFzayhjaGlwKTsNCitpZiAocmV0IDwgMCkgew0KK3J0MTcxMWhfbG9nKGNoaXAs ICIlcyBpbml0IGZhdWx0IG1hc2sgZmFpbCglZClcbiIsIF9fZnVuY19fLA0KK3JldCk7DQorcmV0 dXJuIHJldDsNCit9DQorcmV0ID0gcnQxNzExaF9pbml0X3J0X21hc2soY2hpcCk7DQoraWYgKHJl dCA8IDApIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgaW5pdCBydCBtYXNrIGZhaWwoJWQpXG4i LCBfX2Z1bmNfXywgcmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCisNCityZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCB0Y3BtX2dldF92YnVzKHN0cnVjdCB0Y3BjX2RldiAqZGV2KQ0KK3sNCitp bnQgcmV0ID0gMDsNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGRl diwgc3RydWN0IHJ0MTcxMWhfY2hpcCwNCit0Y3BjX2Rldik7DQorDQorcnQxNzExaF9sb2coY2hp cCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQorbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7DQorcmV0ID0g Y2hpcC0+dmJ1c19wcmVzZW50ID8gMSA6IDA7DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsN CisNCityZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHRjcG1fZ2V0X2N1cnJlbnRfbGlt aXQoc3RydWN0IHRjcGNfZGV2ICpkZXYpDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAg PSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0KK3RjcGNfZGV2KTsNCitp bnQgY3VycmVudF9saW1pdCA9IDA7DQordW5zaWduZWQgbG9uZyB0aW1lb3V0Ow0KKw0KK3J0MTcx MWhfbG9nKGNoaXAsICIlc1xuIiwgX19mdW5jX18pOw0KK2lmICghY2hpcC0+ZXh0Y29uKQ0KK3Jl dHVybiAwOw0KKw0KKy8qDQorICogVVNCMiBDaGFyZ2VyIGRldGVjdGlvbiBtYXkgc3RpbGwgYmUg aW4gcHJvZ3Jlc3Mgd2hlbiB3ZSBnZXQgaGVyZSwNCisgKiB0aGlzIGNhbiB0YWtlIHVwdG8gNjAw bXMsIHdhaXQgODAwbXMgbWF4Lg0KKyAqLw0KK3RpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9f amlmZmllcyg4MDApOw0KK2RvIHsNCitpZiAoZXh0Y29uX2dldF9zdGF0ZShjaGlwLT5leHRjb24s IEVYVENPTl9DSEdfVVNCX1NEUCkgPT0gMSkNCitjdXJyZW50X2xpbWl0ID0gNTAwOw0KKw0KK2lm IChleHRjb25fZ2V0X3N0YXRlKGNoaXAtPmV4dGNvbiwgRVhUQ09OX0NIR19VU0JfQ0RQKSA9PSAx IHx8DQorICAgIGV4dGNvbl9nZXRfc3RhdGUoY2hpcC0+ZXh0Y29uLCBFWFRDT05fQ0hHX1VTQl9B Q0EpID09IDEpDQorY3VycmVudF9saW1pdCA9IDE1MDA7DQorDQoraWYgKGV4dGNvbl9nZXRfc3Rh dGUoY2hpcC0+ZXh0Y29uLCBFWFRDT05fQ0hHX1VTQl9EQ1ApID09IDEpDQorY3VycmVudF9saW1p dCA9IDIwMDA7DQorDQorbXNsZWVwKDUwKTsNCit9IHdoaWxlIChjdXJyZW50X2xpbWl0ID09IDAg JiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOw0KKw0KK3JldHVybiBjdXJyZW50X2xp bWl0Ow0KK30NCisNCitzdGF0aWMgaW50IF9fdGNwbV9zZXRfY2Moc3RydWN0IHJ0MTcxMWhfY2hp cCAqY2hpcCwgZW51bSB0eXBlY19jY19zdGF0dXMgY2MpDQorew0KK3VpbnQ4X3QgZGF0YSA9IDAs IHB1bGwgPSAwLCBycF9sdmwgPSAwOw0KKw0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyAlc1xuIiwg X19mdW5jX18sIHR5cGVjX2NjX3N0YXR1c19uYW1lW2NjXSk7DQorc3dpdGNoIChjYykgew0KK2Nh c2UgVFlQRUNfQ0NfT1BFTjoNCitjYXNlIFRZUEVDX0NDX1JEOg0KK2Nhc2UgVFlQRUNfQ0NfUlBf REVGOg0KK2Nhc2UgVFlQRUNfQ0NfUlBfMV81Og0KK2Nhc2UgVFlQRUNfQ0NfUlBfM18wOg0KK3B1 bGwgPSBydDE3MTFoX2NjX3N0YXR1czJwdWxsKGNjKTsNCitycF9sdmwgPSBSVDE3MTFIX1RZUEVD X0NDX1BVTExfR0VUX1JQX0xWTChwdWxsKTsNCitwdWxsID0gUlQxNzExSF9UWVBFQ19DQ19QVUxM X0dFVF9SRVMocHVsbCk7DQorZGF0YSA9IFJUMTcxMUhfUkVHX1JPTEVfQ1RSTF9SRVNfU0VUKDAs IHJwX2x2bCwgcHVsbCwgcHVsbCk7DQorYnJlYWs7DQorZGVmYXVsdDoNCitydDE3MTFoX2xvZyhj aGlwLCAiJXMgdW5zdXBwb3J0ZWQgY2MgdmFsdWUgJXNcbiIsIF9fZnVuY19fLA0KK3R5cGVjX2Nj X3N0YXR1c19uYW1lW2NjXSk7DQorcmV0dXJuIC1FSU5WQUw7DQorfQ0KKw0KK3JldHVybiBydDE3 MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19ST0xFX0NUUkwsIGRhdGEpOw0KK30NCisN CitzdGF0aWMgaW50IHRjcG1fc2V0X2NjKHN0cnVjdCB0Y3BjX2RldiAqZGV2LCBlbnVtIHR5cGVj X2NjX3N0YXR1cyBjYykNCit7DQoraW50IHJldCA9IDA7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAq Y2hpcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBydDE3MTFoX2NoaXAsDQordGNwY19kZXYp Ow0KKw0KK211dGV4X2xvY2soJmNoaXAtPmxvY2spOw0KK3JldCA9IF9fdGNwbV9zZXRfY2MoY2hp cCwgY2MpOw0KK211dGV4X3VubG9jaygmY2hpcC0+bG9jayk7DQorDQorcmV0dXJuIHJldDsNCit9 DQorDQorc3RhdGljIGlubGluZSBlbnVtIHR5cGVjX2NjX3N0YXR1cyBydDE3MTFoX2NjMmVudW0o ZW51bSB0eXBlY19jY19zdGF0dXMgY2MsDQorYm9vbCBhY3RfYXNfc2luaykNCit7DQorcmV0dXJu IGFjdF9hc19zaW5rID8gY2MgKyAyIDogY2M7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX190Y3BtX2dl dF9jYyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCitpbnQgcmV0ID0gMDsNCit1aW50 OF90IHN0YXR1cyA9IDAsIHJvbGVfY3RybCA9IDAsIGNjX3JvbGUgPSAwOw0KK2Jvb2wgYWN0X2Fz X3NpbmssIGFjdF9hc19kcnA7DQorDQorcmV0ID0gcnQxNzExaF9yZWdfcmVhZChjaGlwLCBSVDE3 MTFIX1JFR19DQ19TVEFUVVMsICZzdGF0dXMpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7 DQorDQorcmV0ID0gcnQxNzExaF9yZWdfcmVhZChjaGlwLCBSVDE3MTFIX1JFR19ST0xFX0NUUkws ICZyb2xlX2N0cmwpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorDQoraWYgKHN0YXR1 cyAmIFJUMTcxMUhfUkVHX0NDX1NUQVRVU19EUlBfVE9HR0xJTkcpIHsNCisvKiBkdXJpbmcgdG9n Z2xpbmcsIGNvbnNpZGVyIGNjIGFzIE9wZW4gKi8NCitjaGlwLT5jYzEgPSBUWVBFQ19DQ19PUEVO Ow0KK2NoaXAtPmNjMiA9IFRZUEVDX0NDX09QRU47DQorcnQxNzExaF9sb2coY2hpcCwgIiVzIGRy cCB0b2dnbGluZ1xuIiwgX19mdW5jX18pOw0KK3JldHVybiAwOw0KK30NCitjaGlwLT5kcnBfdG9n Z2xpbmcgPSBmYWxzZTsNCisNCithY3RfYXNfZHJwID0gUlQxNzExSF9SRUdfUk9MRV9DVFJMX0RS UCAmIHJvbGVfY3RybDsNCisNCitpZiAoYWN0X2FzX2RycCkNCithY3RfYXNfc2luayA9IFJUMTcx MUhfUkVHX0NDX1NUQVRVU19EUlBfUkVTVUxUKHN0YXR1cyk7DQorZWxzZSB7DQorY2Nfcm9sZSA9 IFJUMTcxMUhfUkVHX1JPTEVfQ1RSTF9DQzEocm9sZV9jdHJsKTsNCithY3RfYXNfc2luayA9IChj Y19yb2xlID09IFRZUEVDX0NDX1BVTExfUlApID8gZmFsc2UgOiB0cnVlOw0KK30NCisNCitjaGlw LT5jYzEgPSBSVDE3MTFIX1JFR19DQ19TVEFUVVNfQ0MxKHN0YXR1cyk7DQorY2hpcC0+Y2MyID0g UlQxNzExSF9SRUdfQ0NfU1RBVFVTX0NDMihzdGF0dXMpOw0KK2lmIChjaGlwLT5jYzEgIT0gVFlQ RUNfQ0NfT1BFTikNCitjaGlwLT5jYzEgPSBydDE3MTFoX2NjMmVudW0oY2hpcC0+Y2MxLCBhY3Rf YXNfc2luayk7DQoraWYgKGNoaXAtPmNjMiAhPSBUWVBFQ19DQ19PUEVOKQ0KK2NoaXAtPmNjMiA9 IHJ0MTcxMWhfY2MyZW51bShjaGlwLT5jYzIsIGFjdF9hc19zaW5rKTsNCisNCityZXQgPSBydDE3 MTFoX2luaXRfY2NfcGFyYW1zKGNoaXAsIGNoaXAtPnBvbGFyaXR5ID8NCismY2hpcC0+Y2MyIDog JmNoaXAtPmNjMSk7DQoraWYgKHJldCA8IDApDQorcnQxNzExaF9sb2coY2hpcCwgIiVzIGluaXQg Y2MgcGFyYW0gZmFpbCglZClcbiIsIF9fZnVuY19fLCByZXQpOw0KKw0KK3J0MTcxMWhfbG9nKGNo aXAsICIlcyBjYzEgPSAlcywgY2MyID0gJXNcbiIsIF9fZnVuY19fLA0KK3R5cGVjX2NjX3N0YXR1 c19uYW1lW2NoaXAtPmNjMV0sDQordHlwZWNfY2Nfc3RhdHVzX25hbWVbY2hpcC0+Y2MyXSk7DQor DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGNwbV9nZXRfY2Moc3RydWN0IHRjcGNf ZGV2ICpkZXYsDQorZW51bSB0eXBlY19jY19zdGF0dXMgKmNjMSwgZW51bSB0eXBlY19jY19zdGF0 dXMgKmNjMikNCit7DQoraW50IHJldCA9IDA7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCA9 IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBydDE3MTFoX2NoaXAsDQordGNwY19kZXYpOw0KKw0K K211dGV4X2xvY2soJmNoaXAtPmxvY2spOw0KK3JldCA9IF9fdGNwbV9nZXRfY2MoY2hpcCk7DQor aWYgKHJldCA8IDApDQorZ290byBvdXQ7DQorKmNjMSA9IGNoaXAtPmNjMTsNCisqY2MyID0gY2hp cC0+Y2MyOw0KK291dDoNCittdXRleF91bmxvY2soJmNoaXAtPmxvY2spOw0KK3JldHVybiByZXQ7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGNwbV9zZXRfcG9sYXJpdHkoc3RydWN0IHRjcGNfZGV2ICpk ZXYsDQorZW51bSB0eXBlY19jY19wb2xhcml0eSBwb2xhcml0eSkNCit7DQoraW50IHJldCA9IDA7 DQordWludDhfdCBkYXRhID0gMDsNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFp bmVyX29mKGRldiwgc3RydWN0IHJ0MTcxMWhfY2hpcCwNCit0Y3BjX2Rldik7DQorDQorbXV0ZXhf bG9jaygmY2hpcC0+bG9jayk7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzICVzXG4iLCBfX2Z1bmNf XywgY2NfcG9sYXJpdHlfbmFtZVtwb2xhcml0eV0pOw0KK3JldCA9IHJ0MTcxMWhfaW5pdF9jY19w YXJhbXMoY2hpcCwgcG9sYXJpdHkgPyAmY2hpcC0+Y2MyIDogJmNoaXAtPmNjMSk7DQoraWYgKHJl dCA8IDApDQorZ290byBvdXQ7DQorDQorcmV0ID0gcnQxNzExaF9yZWdfcmVhZChjaGlwLCBSVDE3 MTFIX1JFR19UQ1BDX0NUUkwsICZkYXRhKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCisN CitkYXRhICY9IH5SVDE3MTFIX1JFR19UQ1BDX0NUUkxfUExVR19PUklFTlQ7DQorZGF0YSB8PSBw b2xhcml0eSA/IFJUMTcxMUhfUkVHX1RDUENfQ1RSTF9QTFVHX09SSUVOVCA6IDA7DQorDQorcmV0 ID0gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfVENQQ19DVFJMLCBkYXRhKTsN CitvdXQ6DQorbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsNCityZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50IHRjcG1fc2V0X3Zjb25uKHN0cnVjdCB0Y3BjX2RldiAqZGV2LCBib29sIG9u KQ0KK3sNCitpbnQgcmV0ID0gMDsNCit1aW50OF90IGRhdGEgPSAwOw0KK3N0cnVjdCBydDE3MTFo X2NoaXAgKmNoaXAgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0KK3Rj cGNfZGV2KTsNCisNCittdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsNCitpZiAoY2hpcC0+dmNvbm5f b24gPT0gb24pIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgdmNvbm4gaXMgYWxyZWFkeSAlZFxu IiwgX19mdW5jX18sIG9uKTsNCitnb3RvIG91dDsNCit9DQorcmV0ID0gcnQxNzExaF9yZWdfcmVh ZChjaGlwLCBSVDE3MTFIX1JFR19QT1dFUl9DVFJMLCAmZGF0YSk7DQoraWYgKHJldCA8IDApDQor Z290byBvdXQ7DQorDQorZGF0YSAmPSB+UlQxNzExSF9SRUdfUE9XRVJfQ1RSTF9WQ09OTjsNCitk YXRhIHw9IG9uID8gUlQxNzExSF9SRUdfUE9XRVJfQ1RSTF9WQ09OTiA6IDA7DQorDQorcmV0ID0g cnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfUE9XRVJfQ1RSTCwgZGF0YSk7DQor aWYgKHJldCA8IDApDQorZ290byBvdXQ7DQorDQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGUoY2hp cCwgUlQxNzExSF9SRUdfSURMRV9DVFJMLA0KK1JUMTcxMUhfUkVHX0lETEVfU0VUKDAsIDEsIG9u ID8gMCA6IDEsIDIpKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCisNCitjaGlwLT52Y29u bl9vbiA9IG9uOw0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyB2Y29ubiA9ICVkXG4iLCBfX2Z1bmNf Xywgb24pOw0KKw0KK291dDoNCittdXRleF91bmxvY2soJmNoaXAtPmxvY2spOw0KK3JldHVybiBy ZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdGNwbV9zZXRfdmJ1cyhzdHJ1Y3QgdGNwY19kZXYgKmRl diwgYm9vbCBvbiwgYm9vbCBjaGFyZ2UpDQorew0KK2ludCByZXQgPSAwOw0KK3N0cnVjdCBydDE3 MTFoX2NoaXAgKmNoaXAgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcnQxNzExaF9jaGlwLA0K K3RjcGNfZGV2KTsNCisNCittdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsNCitpZiAoY2hpcC0+dmJ1 c19vbiA9PSBvbikNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgdmJ1cyBpcyBhbHJlYWR5ICVkXG4i LCBfX2Z1bmNfXywgb24pOw0KK2Vsc2Ugew0KK3JldCA9IChvbiA/IHJlZ3VsYXRvcl9lbmFibGUg OiByZWd1bGF0b3JfZGlzYWJsZSkoY2hpcC0+dmJ1cyk7DQoraWYgKHJldCA8IDApIHsNCitydDE3 MTFoX2xvZyhjaGlwLCAiJXMgY2Fubm90ICVzIHZidXMgcmVndWxhdG9yKCVkKVxuIiwNCitfX2Z1 bmNfXywgb24gPyAiZW5hYmxlIiA6ICJkaXNhYmxlIiwgcmV0KTsNCitnb3RvIG91dDsNCit9DQor Y2hpcC0+dmJ1c19vbiA9IG9uOw0KK3J0MTcxMWhfbG9nKGNoaXAsICIlcyB2YnVzID0gJWRcbiIs IF9fZnVuY19fLCBvbik7DQorfQ0KK2lmIChjaGlwLT5jaGFyZ2Vfb24gPT0gY2hhcmdlKQ0KK3J0 MTcxMWhfbG9nKGNoaXAsICIlcyBjaGcgaXMgYWxyZWFkeSAlZFxuIiwgX19mdW5jX18sIGNoYXJn ZSk7DQorZWxzZSB7DQorY2hpcC0+Y2hhcmdlX29uID0gY2hhcmdlOw0KK3Bvd2VyX3N1cHBseV9j aGFuZ2VkKGNoaXAtPnBzeSk7DQorfQ0KKw0KK291dDoNCittdXRleF91bmxvY2soJmNoaXAtPmxv Y2spOw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHRjcG1fc2V0X2N1cnJlbnRfbGlt aXQoc3RydWN0IHRjcGNfZGV2ICpkZXYsIHUzMiBtYXhfbWEsDQordTMyIG12KQ0KK3sNCitzdHJ1 Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHJ0MTcxMWhf Y2hpcCwNCit0Y3BjX2Rldik7DQorDQorcnQxNzExaF9sb2coY2hpcCwgIiVzICVkIG1hLCAlZCBt diAobm90IGltcGxlbWVudGVkKVxuIiwgX19mdW5jX18sDQorbWF4X21hLCBtdik7DQorDQorbXV0 ZXhfbG9jaygmY2hpcC0+bG9jayk7DQorY2hpcC0+c3VwcGx5X3ZvbHRhZ2UgPSBtdjsNCitjaGlw LT5jdXJyZW50X2xpbWl0ID0gbWF4X21hOw0KK211dGV4X3VubG9jaygmY2hpcC0+bG9jayk7DQor DQorcG93ZXJfc3VwcGx5X2NoYW5nZWQoY2hpcC0+cHN5KTsNCityZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGludCB0Y3BtX3NldF9wZF9yeChzdHJ1Y3QgdGNwY19kZXYgKmRldiwgYm9vbCBvbikN Cit7DQoraW50IHJldCA9IDA7DQordWludDhfdCByeF9lbiA9IDB4MDA7DQorc3RydWN0IHJ0MTcx MWhfY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBydDE3MTFoX2NoaXAsDQor dGNwY19kZXYpOw0KKw0KK211dGV4X2xvY2soJmNoaXAtPmxvY2spOw0KK3J0MTcxMWhfbG9nKGNo aXAsICIlcyAlZFxuIiwgX19mdW5jX18sIG9uKTsNCitpZiAob24pDQorcnhfZW4gPSBCSVQoVENQ Q19UWF9TT1ApIHwgQklUKFRDUENfVFhfSEFSRF9SRVNFVCk7DQorDQorcmV0ID0gcnQxNzExaF9y ZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfUlhfREVURUNULCByeF9lbik7DQorbXV0ZXhfdW5s b2NrKCZjaGlwLT5sb2NrKTsNCityZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHRjcG1f c2V0X3JvbGVzKHN0cnVjdCB0Y3BjX2RldiAqZGV2LCBib29sIGF0dGFjaGVkLA0KK2VudW0gdHlw ZWNfcm9sZSBwd3IsIGVudW0gdHlwZWNfZGF0YV9yb2xlIGRhdGEpDQorew0KK2ludCByZXQgPSAw Ow0KK3VpbnQ4X3QgbXNnX2hkciA9IFJUMTcxMUhfUkVHX01TR19IRFJfSU5GT19TRVQoZGF0YSwg cHdyKTsNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGRldiwgc3Ry dWN0IHJ0MTcxMWhfY2hpcCwNCit0Y3BjX2Rldik7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+bG9j ayk7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzICVzICVzXG4iLCBfX2Z1bmNfXywgdHlwZWNfcm9s ZV9uYW1lW3B3cl0sDQordHlwZWNfZGF0YV9yb2xlX25hbWVbZGF0YV0pOw0KK3JldCA9IHJ0MTcx MWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX01TR19IRFJfSU5GTywgbXNnX2hkcik7DQor aWYgKHJldCA8IDApDQorZ290byBvdXQ7DQorY2hpcC0+cHdyX3JvbGUgPSBwd3I7DQorb3V0Og0K K211dGV4X3VubG9jaygmY2hpcC0+bG9jayk7DQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGlj IGlubGluZSBpbnQgX190Y3BtX3N0YXJ0X2RycF90b2dnbGluZyhzdHJ1Y3QgcnQxNzExaF9jaGlw ICpjaGlwKQ0KK3sNCitpbnQgcmV0ID0gMDsNCit1aW50OF90IGRhdGEgPSAwOw0KK3VpbnQ4X3Qg cnBfZGVmID0gUlQxNzExSF9UWVBFQ19DQ19QVUxMX0dFVF9SUF9MVkwoVFlQRUNfQ0NfUFVMTF9S UF9ERUYpOw0KK3VpbnQ4X3QgY2Nfcm9sZSA9IFRZUEVDX0NDX1BVTExfUkQ7DQorDQorZGF0YSA9 IFJUMTcxMUhfUkVHX1JPTEVfQ1RSTF9SRVNfU0VUKDAsIHJwX2RlZiwgY2Nfcm9sZSwgY2Nfcm9s ZSk7DQorcmV0ID0gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfUk9MRV9DVFJM LCBkYXRhKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KK21kZWxheSgxKTsNCitkYXRh ID0gUlQxNzExSF9SRUdfUk9MRV9DVFJMX1JFU19TRVQoMSwgcnBfZGVmLCBjY19yb2xlLCBjY19y b2xlKTsNCityZXQgPSBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3MTFIX1JFR19ST0xFX0NU UkwsIGRhdGEpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQorcmV0ID0gcnQxNzExaF9j b21tYW5kKGNoaXAsIFJUMTcxMUhfQ01EX0xPT0tfQ09OTkVDVElPTik7DQoraWYgKHJldCA8IDAp DQorcmV0dXJuIHJldDsNCitjaGlwLT5kcnBfdG9nZ2xpbmcgPSB0cnVlOw0KKw0KK3JldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IHRjcG1fc3RhcnRfZHJwX3RvZ2dsaW5nKHN0cnVjdCB0Y3Bj X2RldiAqZGV2LA0KK2VudW0gdHlwZWNfY2Nfc3RhdHVzIGNjKQ0KK3sNCitpbnQgcmV0ID0gMDsN CitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHJ0 MTcxMWhfY2hpcCwNCit0Y3BjX2Rldik7DQorDQorbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7DQor cnQxNzExaF9sb2coY2hpcCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQorcmV0ID0gX190Y3BtX3N0YXJ0 X2RycF90b2dnbGluZyhjaGlwKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dDsNCitpZiAoY2hp cC0+ZGlkIDwgUlQxNzExSF9ESURfRCkNCityZXQgPSBydDE3MTFoX2VuYWJsZV9sb3dfcG93ZXJf bW9kZShjaGlwLCBUWVBFQ19DQ19QVUxMX0RSUCk7DQorDQorb3V0Og0KK211dGV4X3VubG9jaygm Y2hpcC0+bG9jayk7DQorcmV0dXJuIHJldDsNCit9DQorDQorI3ByYWdtYSBwYWNrKHB1c2gsIDEp DQorc3RydWN0IHRjcGNfdHJhbnNtaXRfcGFja2V0IHsNCit1aW50OF90IGNudDsNCit1aW50MTZf dCBtc2dfaGVhZGVyOw0KK3VpbnQ4X3QgZGF0YVtzaXplb2YodWludDMyX3QpICogUERfTUFYX1BB WUxPQURdOw0KK307DQorI3ByYWdtYSBwYWNrKHBvcCkNCisNCitzdGF0aWMgaW50IHRjcG1fcGRf dHJhbnNtaXQoc3RydWN0IHRjcGNfZGV2ICpkZXYsDQorZW51bSB0Y3BtX3RyYW5zbWl0X3R5cGUg dHlwZSwgY29uc3Qgc3RydWN0IHBkX21lc3NhZ2UgKm1zZykNCit7DQoraW50IHJldCA9IDA7DQor aW50IGRhdGFfY250ID0gMDsNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVy X29mKGRldiwgc3RydWN0IHJ0MTcxMWhfY2hpcCwNCit0Y3BjX2Rldik7DQorc3RydWN0IHRjcGNf dHJhbnNtaXRfcGFja2V0IHBhY2tldDsNCisNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgJXNcbiIs IF9fZnVuY19fLCB0cmFuc21pdF90eXBlX25hbWVbdHlwZV0pOw0KK211dGV4X2xvY2soJmNoaXAt PmxvY2spOw0KK3N3aXRjaCAodHlwZSkgew0KK2Nhc2UgVENQQ19UWF9TT1A6DQorZGF0YV9jbnQg PSBzaXplb2YodWludDMyX3QpICogcGRfaGVhZGVyX2NudF9sZShtc2ctPmhlYWRlcik7DQorcGFj a2V0LmNudCA9IGRhdGFfY250ICsgc2l6ZW9mKHVpbnQxNl90KTsNCitwYWNrZXQubXNnX2hlYWRl ciA9IG1zZy0+aGVhZGVyOw0KK2lmIChkYXRhX2NudCA+IDApDQorbWVtY3B5KHBhY2tldC5kYXRh LCAodWludDhfdCAqKW1zZy0+cGF5bG9hZCwgZGF0YV9jbnQpOw0KKw0KK3JldCA9IHJ0MTcxMWhf cmVnX2Jsb2NrX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX1RYX0JZVEVfQ05ULA0KK3BhY2tldC5j bnQgKyAxLCAodWludDhfdCAqKSZwYWNrZXQpOw0KK2lmIChyZXQgPCAwKSB7DQorcnQxNzExaF9s b2coY2hpcCwgIiVzIGZhaWwgKCVkKVxuIiwgX19mdW5jX18sIHJldCk7DQorZ290byBvdXQ7DQor fQ0KK2JyZWFrOw0KK2Nhc2UgVENQQ19UWF9IQVJEX1JFU0VUOg0KK2JyZWFrOw0KK2RlZmF1bHQ6 DQorcnQxNzExaF9sb2coY2hpcCwgInR5cGUgJXMgbm90IHN1cHBvcnRlZFxuIiwNCit0cmFuc21p dF90eXBlX25hbWVbdHlwZV0pOw0KK3JldCA9IC1FSU5WQUw7DQorZ290byBvdXQ7DQorfQ0KKw0K K3JldCA9IHJ0MTcxMWhfcmVnX3dyaXRlKGNoaXAsIFJUMTcxMUhfUkVHX1RSQU5TTUlULA0KK1JU MTcxMUhfUkVHX1RSQU5TTUlUX1NFVCgzLCB0eXBlKSk7DQorb3V0Og0KK211dGV4X3VubG9jaygm Y2hpcC0+bG9jayk7DQorcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBydDE3MTFoX3Bh cnNlX2R0KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK2ludCByZXQgPSAwLCBsZW4g PSAwOw0KK3VpbnQzMl90IHZhbCA9IDA7DQorc3RydWN0IGRldmljZV9ub2RlICpucCA9IGNoaXAt PmRldi0+b2Zfbm9kZTsNCitzdHJ1Y3QgdGNwY19jb25maWcgKmNmZyA9ICZjaGlwLT50Y3BjX2Nm ZzsNCitjb25zdCBjaGFyICpuYW1lID0gImRlZmF1bHQiOw0KKw0KK2lmICghbnApDQorcmV0dXJu IC1FSU5WQUw7DQorDQorZGV2X2luZm8oY2hpcC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsNCisN CittZW1jcHkoY2ZnLCAmcnQxNzExaF90Y3BjX2NvbmZpZywgc2l6ZW9mKHN0cnVjdCB0Y3BjX2Nv bmZpZykpOw0KKw0KK3JldCA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAicnQsaW50cl9ncGlvIiwg MCk7DQoraWYgKHJldCA8IDApIHsNCitkZXZfZXJyKGNoaXAtPmRldiwgIiVzIGdldCBpbnQgZ3Bp byBmYWlsKCVkKVxuIiwNCitfX2Z1bmNfXywgcmV0KTsNCityZXR1cm4gcmV0Ow0KK30NCitjaGlw LT5pcnFfZ3BpbyA9IHJldDsNCitkZXZfaW5mbyhjaGlwLT5kZXYsICIlcyBpcnFfZ3BpbyA9ICVk XG4iLCBfX2Z1bmNfXywgY2hpcC0+aXJxX2dwaW8pOw0KKw0KK29mX3Byb3BlcnR5X3JlYWRfc3Ry aW5nKG5wLCAicnQsbmFtZSIsICZuYW1lKTsNCisNCitsZW4gPSBzdHJsZW4obmFtZSk7DQorY2hp cC0+bmFtZSA9IGRldm1fa3phbGxvYyhjaGlwLT5kZXYsIGxlbiArIDEsIEdGUF9LRVJORUwpOw0K K2lmICghY2hpcC0+bmFtZSkNCityZXR1cm4gLUVOT01FTTsNCitzdHJsY3B5KGNoaXAtPm5hbWUs IG5hbWUsIHN0cmxlbihuYW1lKSArIDEpOw0KKw0KK2lmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihu cCwgInJ0LGRlZl9yb2xlIiwgJnZhbCkgPT0gMCkNCitjZmctPmRlZmF1bHRfcm9sZSA9IHZhbDsN CisNCitpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJydCxwb3J0X3R5cGUiLCAmdmFsKSA9 PSAwKQ0KK2NmZy0+dHlwZSA9IHZhbDsNCisNCitpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAs ICJydCxtYXhfc25rX212IiwgJnZhbCkgPT0gMCkNCitjZmctPm1heF9zbmtfbXYgPSB2YWw7DQor DQoraWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicnQsbWF4X3Nua19tYSIsICZ2YWwpID09 IDApDQorY2ZnLT5tYXhfc25rX21hID0gdmFsOw0KKw0KK2lmIChvZl9wcm9wZXJ0eV9yZWFkX3Uz MihucCwgInJ0LG1heF9zbmtfbXciLCAmdmFsKSA9PSAwKQ0KK2NmZy0+bWF4X3Nua19tdyA9IHZh bDsNCisNCitpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJydCxvcGVyYXRpbmdfc25rX213 IiwgJnZhbCkgPT0gMCkNCitjZmctPm9wZXJhdGluZ19zbmtfbXcgPSB2YWw7DQorDQorY2ZnLT50 cnlfcm9sZV9odyA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgInJ0LHRyeV9yb2xlX2h3Iik7 DQorDQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHJ0MTcxMWhfaW5pdF90Y3BjX2Rl dihzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0KK3sNCitjaGlwLT50Y3BjX2Rldi5jb25maWcg PSAmY2hpcC0+dGNwY19jZmc7DQorY2hpcC0+dGNwY19kZXYuaW5pdCA9IHRjcG1faW5pdDsNCitj aGlwLT50Y3BjX2Rldi5nZXRfdmJ1cyA9IHRjcG1fZ2V0X3ZidXM7DQorY2hpcC0+dGNwY19kZXYu Z2V0X2N1cnJlbnRfbGltaXQgPSB0Y3BtX2dldF9jdXJyZW50X2xpbWl0Ow0KK2NoaXAtPnRjcGNf ZGV2LnNldF9jYyA9IHRjcG1fc2V0X2NjOw0KK2NoaXAtPnRjcGNfZGV2LmdldF9jYyA9IHRjcG1f Z2V0X2NjOw0KK2NoaXAtPnRjcGNfZGV2LnNldF9wb2xhcml0eSA9IHRjcG1fc2V0X3BvbGFyaXR5 Ow0KK2NoaXAtPnRjcGNfZGV2LnNldF92Y29ubiA9IHRjcG1fc2V0X3Zjb25uOw0KK2NoaXAtPnRj cGNfZGV2LnNldF92YnVzID0gdGNwbV9zZXRfdmJ1czsNCitjaGlwLT50Y3BjX2Rldi5zZXRfY3Vy cmVudF9saW1pdCA9IHRjcG1fc2V0X2N1cnJlbnRfbGltaXQ7DQorY2hpcC0+dGNwY19kZXYuc2V0 X3BkX3J4ID0gdGNwbV9zZXRfcGRfcng7DQorY2hpcC0+dGNwY19kZXYuc2V0X3JvbGVzID0gdGNw bV9zZXRfcm9sZXM7DQorY2hpcC0+dGNwY19kZXYuc3RhcnRfZHJwX3RvZ2dsaW5nID0gdGNwbV9z dGFydF9kcnBfdG9nZ2xpbmc7DQorY2hpcC0+dGNwY19kZXYucGRfdHJhbnNtaXQgPSB0Y3BtX3Bk X3RyYW5zbWl0Ow0KK2NoaXAtPnRjcGNfZGV2Lm11eCA9IE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBp bnQgcnQxNzExaF9nZXRfYWxlcnRfc3RhdHVzKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsDQor dWludDMyX3QgKmFsZXJ0KQ0KK3sNCitpbnQgcmV0ID0gMDsNCit1aW50MTZfdCBkYXRhID0gMDsN Cit1aW50OF90IHJ0X2ludCA9IDA7DQorDQorcmV0ID0gcnQxNzExaF9yZWdfcmVhZF93b3JkKGNo aXAsIFJUMTcxMUhfUkVHX0FMRVJULCAmZGF0YSk7DQoraWYgKHJldCA8IDApDQorcmV0dXJuIHJl dDsNCisqYWxlcnQgPSBkYXRhOw0KKw0KK3JldCA9IHJ0MTcxMWhfcmVnX3JlYWQoY2hpcCwgUlQx NzExSF9SRUdfUlRfSU5ULCAmcnRfaW50KTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0K KyphbGVydCB8PSBydF9pbnQgPDwgMTY7DQorDQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgcnQxNzExaF9nZXRfZmF1bHRfc3RhdHVzKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAsIHVp bnQ4X3QgKnN0YXR1cykNCit7DQorcmV0dXJuIHJ0MTcxMWhfcmVnX3JlYWQoY2hpcCwgUlQxNzEx SF9SRUdfRkFVTFRfU1RBVFVTLCBzdGF0dXMpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBy dDE3MTFoX2ZhdWx0X3N0YXR1c192Y29ubl9vdihzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0K K3sNCitpbnQgcmV0ID0gMDsNCit1aW50OF90IGRhdGEgPSAwOw0KKw0KK3JldCA9IHJ0MTcxMWhf cmVnX3JlYWQoY2hpcCwgUlQxNzExSF9SRUdfQk1DX0NUUkwsICZkYXRhKTsNCitpZiAocmV0IDwg MCkNCityZXR1cm4gcmV0Ow0KKw0KK2RhdGEgJj0gflJUMTcxMUhfUkVHX0RJU0NIQVJHRV9FTjsN CityZXR1cm4gcnQxNzExaF9yZWdfd3JpdGUoY2hpcCwgUlQxNzExSF9SRUdfQk1DX0NUUkwsIGRh dGEpOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfZmF1bHRfc3RhdHVzX2NsZWFyKHN0cnVj dCBydDE3MTFoX2NoaXAgKmNoaXAsIHVpbnQ4X3Qgc3RhdHVzKQ0KK3sNCitpZiAoc3RhdHVzICYg UlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTX1ZDT05OX09WKQ0KK3J0MTcxMWhfZmF1bHRfc3RhdHVz X3Zjb25uX292KGNoaXApOw0KKw0KK3JldHVybiBydDE3MTFoX3JlZ193cml0ZShjaGlwLCBSVDE3 MTFIX1JFR19GQVVMVF9TVEFUVVMsIHN0YXR1cyk7DQorfQ0KKw0KKy8qIEFsZXJ0IGhhbmRsZXJz ICovDQorDQorc3RhdGljIGludCBydDE3MTFoX2FsZXJ0X2NjX2NoYW5nZWQoc3RydWN0IHJ0MTcx MWhfY2hpcCAqY2hpcCkNCit7DQoraW50IHJldCA9IDA7DQorDQorcmV0ID0gX190Y3BtX2dldF9j YyhjaGlwKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KKw0KK2lmIChjaGlwLT5kcnBf dG9nZ2xpbmcpIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgRFJQIHRvZ2dsaW5nXG4iLCBfX2Z1 bmNfXyk7DQoraWYgKGNoaXAtPmRpZCA8IFJUMTcxMUhfRElEX0QgJiYgY2hpcC0+bHBtICYmICFj aGlwLT5jYWJsZV9vbmx5KQ0KK3J0MTcxMWhfZW50ZXJfbG93X3Bvd2VyX21vZGUoY2hpcCk7DQor cmV0dXJuIDA7DQorfQ0KK2lmIChjaGlwLT5kaWQgPCBSVDE3MTFIX0RJRF9EKQ0KK3J0MTcxMWhf ZGlzYWJsZV9sb3dfcG93ZXJfbW9kZShjaGlwKTsNCisNCit0Y3BtX2NjX2NoYW5nZShjaGlwLT50 Y3BtX3BvcnQpOw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfYWxlcnRf cG93ZXJfc3RhdHVzX2NoYW5nZWQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQoraW50 IHJldCA9IDA7DQorYm9vbCB2YnVzX3ByZXMgPSBmYWxzZTsNCit1aW50OF90IGRhdGEgPSAwOw0K Kw0KK3JldCA9IHJ0MTcxMWhfcmVnX3JlYWQoY2hpcCwgUlQxNzExSF9SRUdfUE9XRVJfU1RBVFVT LCAmZGF0YSk7DQoraWYgKHJldCA8IDApDQorZ290byBvdXQ7DQorDQordmJ1c19wcmVzID0gKGRh dGEgJiBSVDE3MTFIX1JFR19QT1dFUl9TVEFUVVNfVkJVU19QUkVTKSA/IHRydWUgOiBmYWxzZTsN CitpZiAodmJ1c19wcmVzICE9IGNoaXAtPnZidXNfcHJlc2VudCkgew0KK2NoaXAtPnZidXNfcHJl c2VudCA9IHZidXNfcHJlczsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgdmJ1cyA9ICVkXG4iLCBf X2Z1bmNfXywgdmJ1c19wcmVzKTsNCit0Y3BtX3ZidXNfY2hhbmdlKGNoaXAtPnRjcG1fcG9ydCk7 DQorfQ0KKw0KK291dDoNCityZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhf YWxlcnRfcmVjdl9tc2coc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQoraW50IHJldCA9 IDAsIGxlbiA9IDA7DQordWludDhfdCBidWZbMl07DQorc3RydWN0IHBkX21lc3NhZ2UgbXNnOw0K K2NvbnN0IHVpbnQzMl90IGFsZXJ0X3J4ID0NCitSVDE3MTFIX1JFR19BTEVSVF9SWF9TVEFUVVMg fCBSVDE3MTFIX1JFR19BTEVSVF9SWF9CVUZfT1ZGOw0KKw0KK3J0MTcxMWhfbG9nKGNoaXAsICIl c1xuIiwgX19mdW5jX18pOw0KK3JldCA9IHJ0MTcxMWhfcmVnX2Jsb2NrX3JlYWQoY2hpcCwgUlQx NzExSF9SRUdfUlhfSERSLCAyLCBidWYpOw0KK2lmIChyZXQgPCAwKQ0KK3JldHVybiByZXQ7DQor DQorbWVtY3B5KCYobXNnLmhlYWRlciksIGJ1ZiwgMik7DQorDQorbGVuID0gcGRfaGVhZGVyX2Nu dF9sZShtc2cuaGVhZGVyKSAqIDQ7DQoraWYgKGxlbiA+IFBEX01BWF9QQVlMT0FEICogNCkgew0K K3J0MTcxMWhfbG9nKGNoaXAsICIlcyBQRCBtZXNzYWdlIHRvbyBsb25nICVkXG4iLCBfX2Z1bmNf XywgbGVuKTsNCityZXR1cm4gLUVJTlZBTDsNCit9DQoraWYgKGxlbiA+IDApDQorcmV0ID0gcnQx NzExaF9yZWdfYmxvY2tfcmVhZChjaGlwLCBSVDE3MTFIX1JFR19SWF9EQVRBLCBsZW4sDQorKHVp bnQ4X3QgKiltc2cucGF5bG9hZCk7DQorDQorLyogUmVhZCBjb21wbGV0ZSwgY2xlYXIgUlggc3Rh dHVzIGFsZXJ0IGJpdCAqLw0KK3J0MTcxMWhfYWxlcnRfc3RhdHVzX2NsZWFyKGNoaXAsIGFsZXJ0 X3J4KTsNCisNCit0Y3BtX3BkX3JlY2VpdmUoY2hpcC0+dGNwbV9wb3J0LCAmbXNnKTsNCityZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfYWxlcnRfcmVjdl9oYXJkX3Jlc2V0 KHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK3RjcG1fcGRfaGFyZF9yZXNldChjaGlw LT50Y3BtX3BvcnQpOw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfYWxl cnRfdHhfZmFpbGVkKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXApDQorew0KK3RjcG1fcGRfdHJh bnNtaXRfY29tcGxldGUoY2hpcC0+dGNwbV9wb3J0LCBUQ1BDX1RYX0ZBSUxFRCk7DQorcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9hbGVydF90eF9kaXNjYXJkKHN0cnVjdCBy dDE3MTFoX2NoaXAgKmNoaXApDQorew0KK3RjcG1fcGRfdHJhbnNtaXRfY29tcGxldGUoY2hpcC0+ dGNwbV9wb3J0LCBUQ1BDX1RYX0RJU0NBUkRFRCk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyBpbnQgcnQxNzExaF9hbGVydF90eF9zdWNjZXNzKHN0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAp DQorew0KK3RjcG1fcGRfdHJhbnNtaXRfY29tcGxldGUoY2hpcC0+dGNwbV9wb3J0LCBUQ1BDX1RY X1NVQ0NFU1MpOw0KK3JldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfYWxlcnRf ZmF1bHQoc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQoraW50IHJldCA9IDA7DQordWlu dDhfdCBzdGF0dXMgPSAwOw0KKw0KK3JldCA9IHJ0MTcxMWhfZ2V0X2ZhdWx0X3N0YXR1cyhjaGlw LCAmc3RhdHVzKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KKw0KK3J0MTcxMWhfbG9n KGNoaXAsICIlcyAweCUwMlhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOw0KK3J0MTcxMWhfZmF1bHRf c3RhdHVzX2NsZWFyKGNoaXAsIHN0YXR1cyk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgcnQxNzExaF9hbGVydF9yeF9vdmVyZmxvdyhzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwKQ0K K3sNCitpbnQgcmV0ID0gMDsNCit1aW50MzJfdCBhbGVydF9zdGF0dXMgPSAwOw0KKw0KK3J0MTcx MWhfbG9nKGNoaXAsICIlc1xuIiwgX19mdW5jX18pOw0KKw0KK3JldCA9IHJ0MTcxMWhfZ2V0X2Fs ZXJ0X3N0YXR1cyhjaGlwLCAmYWxlcnRfc3RhdHVzKTsNCitpZiAocmV0IDwgMCkNCityZXR1cm4g cmV0Ow0KKw0KK2lmIChhbGVydF9zdGF0dXMgJiBSVDE3MTFIX1JFR19BTEVSVF9SWF9TVEFUVVMp DQorcmV0dXJuIHJ0MTcxMWhfYWxlcnRfcmVjdl9tc2coY2hpcCk7DQorDQorcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9hbGVydF93YWtldXAoc3RydWN0IHJ0MTcxMWhfY2hp cCAqY2hpcCkNCit7DQorcnQxNzExaF9sb2coY2hpcCwgIiVzXG4iLCBfX2Z1bmNfXyk7DQoraWYg KGNoaXAtPmRycF90b2dnbGluZykNCitydDE3MTFoX2VuYWJsZV93YWtldXBfdGltZXIoY2hpcCwg dHJ1ZSk7DQorcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9hbGVydF9yYV9k ZXRhY2goc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCkNCit7DQorcnQxNzExaF9sb2coY2hpcCwg IiVzXG4iLCBfX2Z1bmNfXyk7DQoraWYgKGNoaXAtPmRycF90b2dnbGluZykNCitydDE3MTFoX2Vu dGVyX2xwbV9hZ2FpbihjaGlwKTsNCisNCityZXR1cm4gMDsNCit9DQorDQorc3RydWN0IHJ0MTcx MWhfYWxlcnRfaGFuZGxlciB7DQordWludDMyX3QgYml0X21hc2s7DQoraW50ICgqaGFuZGxlciko c3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hpcCk7DQorfTsNCisNCisjZGVmaW5lIFJUMTcxMUhfREVD TF9BTEVSVF9IQU5ETEVSKHhiaXQsIHhoYW5kbGVyKSB7IFwNCisuYml0X21hc2sgPSAxIDw8IHhi aXQsIFwNCisuaGFuZGxlciA9IHhoYW5kbGVyLCBcDQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcnQxNzExaF9hbGVydF9oYW5kbGVyIHJ0MTcxMWhfYWxlcnRfaGFuZGxlcnNbXSA9IHsNCitS VDE3MTFIX0RFQ0xfQUxFUlRfSEFORExFUig0LCBydDE3MTFoX2FsZXJ0X3R4X2ZhaWxlZCksDQor UlQxNzExSF9ERUNMX0FMRVJUX0hBTkRMRVIoNSwgcnQxNzExaF9hbGVydF90eF9kaXNjYXJkKSwN CitSVDE3MTFIX0RFQ0xfQUxFUlRfSEFORExFUig2LCBydDE3MTFoX2FsZXJ0X3R4X3N1Y2Nlc3Mp LA0KK1JUMTcxMUhfREVDTF9BTEVSVF9IQU5ETEVSKDIsIHJ0MTcxMWhfYWxlcnRfcmVjdl9tc2cp LA0KK1JUMTcxMUhfREVDTF9BTEVSVF9IQU5ETEVSKDcsIE5VTEwpLA0KK1JUMTcxMUhfREVDTF9B TEVSVF9IQU5ETEVSKDgsIE5VTEwpLA0KK1JUMTcxMUhfREVDTF9BTEVSVF9IQU5ETEVSKDMsIHJ0 MTcxMWhfYWxlcnRfcmVjdl9oYXJkX3Jlc2V0KSwNCitSVDE3MTFIX0RFQ0xfQUxFUlRfSEFORExF UigxMCwgcnQxNzExaF9hbGVydF9yeF9vdmVyZmxvdyksDQorUlQxNzExSF9ERUNMX0FMRVJUX0hB TkRMRVIoMTYsIHJ0MTcxMWhfYWxlcnRfd2FrZXVwKSwNCitSVDE3MTFIX0RFQ0xfQUxFUlRfSEFO RExFUigyMSwgcnQxNzExaF9hbGVydF9yYV9kZXRhY2gpLA0KK1JUMTcxMUhfREVDTF9BTEVSVF9I QU5ETEVSKDksIHJ0MTcxMWhfYWxlcnRfZmF1bHQpLA0KK1JUMTcxMUhfREVDTF9BTEVSVF9IQU5E TEVSKDAsIHJ0MTcxMWhfYWxlcnRfY2NfY2hhbmdlZCksDQorUlQxNzExSF9ERUNMX0FMRVJUX0hB TkRMRVIoMSwgcnQxNzExaF9hbGVydF9wb3dlcl9zdGF0dXNfY2hhbmdlZCksDQorfTsNCisNCitz dGF0aWMgaW50IF9fcnQxNzExaF9pcnFfaGFuZGxlcihzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlw KQ0KK3sNCitpbnQgaSA9IDAsIHJldCA9IDA7DQordWludDMyX3QgYWxlcnRfc3RhdHVzID0gMDsN CisNCityZXQgPSBydDE3MTFoX2dldF9hbGVydF9zdGF0dXMoY2hpcCwgJmFsZXJ0X3N0YXR1cyk7 DQoraWYgKHJldCA8IDApIHsNCitydDE3MTFoX2xvZyhjaGlwLCAiJXMgZ2V0IGFsZXJ0IHN0YXR1 cyBmYWlsKCVkKVxuIiwNCitfX2Z1bmNfXywgcmV0KTsNCitnb3RvIG91dDsNCit9DQorDQorcnQx NzExaF9hbGVydF9zdGF0dXNfY2xlYXIoY2hpcCwNCithbGVydF9zdGF0dXMgJiAoflJUMTcxMUhf UkVHX0FMRVJUX1JYX01BU0spKTsNCisNCitpZiAoYWxlcnRfc3RhdHVzKQ0KK3J0MTcxMWhfbG9n KGNoaXAsICIlcyAweCUwNFhcbiIsIF9fZnVuY19fLCBhbGVydF9zdGF0dXMpOw0KKw0KK2lmIChh bGVydF9zdGF0dXMgJiBSVDE3MTFIX1JFR19BTEVSVF9FWFRfVkJVU184MCkNCithbGVydF9zdGF0 dXMgfD0gUlQxNzExSF9SRUdfQUxFUlRfUE9XRVJfU1RBVFVTOw0KKw0KK2ZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHJ0MTcxMWhfYWxlcnRfaGFuZGxlcnMpOyBpKyspIHsNCitpZiAocnQxNzEx aF9hbGVydF9oYW5kbGVyc1tpXS5iaXRfbWFzayAmIGFsZXJ0X3N0YXR1cykgew0KK2lmIChydDE3 MTFoX2FsZXJ0X2hhbmRsZXJzW2ldLmhhbmRsZXIgIT0gMCkNCitydDE3MTFoX2FsZXJ0X2hhbmRs ZXJzW2ldLmhhbmRsZXIoY2hpcCk7DQorfQ0KK30NCisNCitvdXQ6DQorcmV0dXJuIHJldDsNCit9 DQorDQorc3RhdGljIGlubGluZSB2b2lkIHJ0MTcxMWhfcG9sbF9jdHJsKHN0cnVjdCBydDE3MTFo X2NoaXAgKmNoaXApDQorew0KK2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmY2hpcC0+cG9sbF93 b3JrKTsNCisNCitpZiAoYXRvbWljX3JlYWQoJmNoaXAtPnBvbGxfY291bnQpID09IDApIHsNCith dG9taWNfaW5jKCZjaGlwLT5wb2xsX2NvdW50KTsNCitjcHVfaWRsZV9wb2xsX2N0cmwodHJ1ZSk7 DQorfQ0KKw0KK3NjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+cG9sbF93b3JrLCBtc2Vjc190 b19qaWZmaWVzKDQwKSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHJ0MTcxMWhfaXJxX3dvcmtfaGFu ZGxlcihzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQ0KK3sNCitzdHJ1Y3QgcnQxNzExaF9jaGlw ICpjaGlwID0NCitjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MTcxMWhfY2hpcCwgaXJxX3dv cmspOw0KK2ludCByZXQgPSAwLCBncGlvX3ZhbCA9IDA7DQorDQorcnQxNzExaF9wb2xsX2N0cmwo Y2hpcCk7DQorbXV0ZXhfbG9jaygmY2hpcC0+d2FrZXVwX2xvY2spOw0KK211dGV4X2xvY2soJmNo aXAtPmxvY2spOw0KK2RvIHsNCityZXQgPSBfX3J0MTcxMWhfaXJxX2hhbmRsZXIoY2hpcCk7DQor aWYgKHJldCA8IDApDQorYnJlYWs7DQorZ3Bpb192YWwgPSBncGlvX2dldF92YWx1ZShjaGlwLT5p cnFfZ3Bpbyk7DQorfSB3aGlsZSAoZ3Bpb192YWwgPT0gMCk7DQorbXV0ZXhfdW5sb2NrKCZjaGlw LT5sb2NrKTsNCittdXRleF91bmxvY2soJmNoaXAtPndha2V1cF9sb2NrKTsNCit9DQorDQorc3Rh dGljIHZvaWQgcnQxNzExaF9wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sN CitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBy dDE3MTFoX2NoaXAsDQorcG9sbF93b3JrLndvcmspOw0KKw0KK2lmICAoYXRvbWljX2RlY19hbmRf dGVzdCgmY2hpcC0+cG9sbF9jb3VudCkpDQorY3B1X2lkbGVfcG9sbF9jdHJsKGZhbHNlKTsNCit9 DQorI2RlZmluZSBSVDE3MTFIX0lSUV9XQUtFX1RJTUUoNTAwKSAvKiBtcyAqLw0KKw0KK3N0YXRp YyBpcnFyZXR1cm5fdCBydDE3MTFoX2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQ0K K3sNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gZGF0YTsNCisNCitwbV93YWtldXBfZXZl bnQoY2hpcC0+ZGV2LCBSVDE3MTFIX0lSUV9XQUtFX1RJTUUpOw0KK2t0aHJlYWRfcXVldWVfd29y aygmY2hpcC0+aXJxX3dvcmtlciwgJmNoaXAtPmlycV93b3JrKTsNCisNCityZXR1cm4gSVJRX0hB TkRMRUQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9pbml0X2FsZXJ0KHN0cnVjdCBydDE3 MTFoX2NoaXAgKmNoaXApDQorew0KK2ludCByZXQgPSAwLCBsZW4gPSAwOw0KK2NoYXIgKm5hbWUg PSBOVUxMOw0KK3N0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsuc2NoZWRfcHJpb3JpdHkgPSBN QVhfUlRfUFJJTyAtIDF9Ow0KKw0KK3J0MTcxMWhfcmVnX3dyaXRlX3dvcmQoY2hpcCwgUlQxNzEx SF9SRUdfQUxFUlRfTUFTSywgMCk7DQorcnQxNzExaF9yZWdfd3JpdGVfd29yZChjaGlwLCBSVDE3 MTFIX1JFR19BTEVSVCwgMHhmZmZmKTsNCisNCitsZW4gPSBzdHJsZW4oY2hpcC0+bmFtZSk7DQor bmFtZSA9IGRldm1fa3phbGxvYyhjaGlwLT5kZXYsIGxlbiArIDUsIEdGUF9LRVJORUwpOw0KK2lm ICghbmFtZSkNCityZXR1cm4gLUVOT01FTTsNCisNCitzbnByaW50ZihuYW1lLCBsZW4sICIlcy1J UlEiLCBjaGlwLT5uYW1lKTsNCisNCitkZXZfaW5mbyhjaGlwLT5kZXYsICIlcyBuYW1lID0gJXMs IGdwaW8gPSAlZFxuIiwgX19mdW5jX18sIGNoaXAtPm5hbWUsDQorY2hpcC0+aXJxX2dwaW8pOw0K Kw0KK3JldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZShjaGlwLT5kZXYsIGNoaXAtPmlycV9ncGlv LA0KK0dQSU9GX0lOLCBuYW1lKTsNCitpZiAocmV0IDwgMCkgew0KK2Rldl9lcnIoY2hpcC0+ZGV2 LCAiJXMgcmVxdWVzdCBncGlvIGZhaWwoJWQpXG4iLA0KK19fZnVuY19fLCByZXQpOw0KK2dvdG8g ZXJyX2luaXRfYWxlcnQ7DQorfQ0KKw0KK2NoaXAtPmlycSA9IGdwaW9fdG9faXJxKGNoaXAtPmly cV9ncGlvKTsNCitpZiAoY2hpcC0+aXJxIDw9IDApIHsNCitkZXZfZXJyKGNoaXAtPmRldiwgIiVz IGdwaW8yaXJxIGZhaWwoJWQpXG4iLA0KK19fZnVuY19fLCBjaGlwLT5pcnEpOw0KK3JldCA9IC1F SU5WQUw7DQorZ290byBlcnJfaW5pdF9hbGVydDsNCit9DQorZGV2X2luZm8oY2hpcC0+ZGV2LCAi JXMgaXJxID0gJWRcbiIsIF9fZnVuY19fLCBjaGlwLT5pcnEpOw0KKw0KK2t0aHJlYWRfaW5pdF93 b3JrZXIoJmNoaXAtPmlycV93b3JrZXIpOw0KK2NoaXAtPmlycV93b3JrZXJfdGFzayA9IGt0aHJl YWRfcnVuKGt0aHJlYWRfd29ya2VyX2ZuLA0KKyZjaGlwLT5pcnFfd29ya2VyLCBjaGlwLT5uYW1l KTsNCitpZiAoSVNfRVJSKGNoaXAtPmlycV93b3JrZXJfdGFzaykpIHsNCitkZXZfZXJyKGNoaXAt PmRldiwgIiVzIGNvdWxkIG5vdCBjcmVhdGUgdGNwYyB0YXNrXG4iLCBfX2Z1bmNfXyk7DQorZ290 byBlcnJfaW5pdF9hbGVydDsNCit9DQorDQorc2NoZWRfc2V0c2NoZWR1bGVyKGNoaXAtPmlycV93 b3JrZXJfdGFzaywgU0NIRURfRklGTywgJnBhcmFtKTsNCitrdGhyZWFkX2luaXRfd29yaygmY2hp cC0+aXJxX3dvcmssIHJ0MTcxMWhfaXJxX3dvcmtfaGFuZGxlcik7DQorDQorcmV0ID0gZGV2bV9y ZXF1ZXN0X2lycShjaGlwLT5kZXYsIGNoaXAtPmlycSwgcnQxNzExaF9pbnRyX2hhbmRsZXIsDQor SVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX05PX1RIUkVBRCB8IElSUUZfTk9fU1VTUEVORCwg bmFtZSwNCitjaGlwKTsNCitpZiAocmV0IDwgMCkgew0KK2Rldl9lcnIoY2hpcC0+ZGV2LCAiJXMg cmVxdWVzdCBpcnElZCBmYWlsKCVkKVxuIiwNCitfX2Z1bmNfXywgY2hpcC0+aXJxLCByZXQpOw0K K2dvdG8gZXJyX2luaXRfYWxlcnQ7DQorfQ0KK2VuYWJsZV9pcnFfd2FrZShjaGlwLT5pcnEpOw0K K3JldHVybiAwOw0KKw0KK2Vycl9pbml0X2FsZXJ0Og0KK2Rldm1fa2ZyZWUoY2hpcC0+ZGV2LCBu YW1lKTsNCityZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfY2hlY2tfcmV2 aXNpb24oc3RydWN0IGkyY19jbGllbnQgKmkyYykNCit7DQoraW50IHJldCA9IDA7DQorDQorcmV0 ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGkyYywgMHgwMCk7DQoraWYgKHJldCA8IDApDQor cmV0dXJuIHJldDsNCitpZiAocmV0ICE9IDB4MjljZikgew0KK2Rldl9lcnIoJmkyYy0+ZGV2LCAi dmlkIGlzIG5vdCBjb3JyZWN0LCAweCUwNHhcbiIsIHJldCk7DQorcmV0dXJuIC1FTk9ERVY7DQor fQ0KK3JldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShpMmMsIDB4MDIpOw0KK2lmIChyZXQg PCAwKQ0KK3JldHVybiByZXQ7DQoraWYgKHJldCAhPSAweDE3MTEpIHsNCitkZXZfZXJyKCZpMmMt PmRldiwgInBpZCBpcyBub3QgY29ycmVjdCwgMHglMDR4XG4iLCByZXQpOw0KK3JldHVybiAtRU5P REVWOw0KK30NCityZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoaTJjLCAweDA0KTsNCitp ZiAocmV0IDwgMCkNCityZXR1cm4gcmV0Ow0KKy8qIHJldHVybiBkaWQgKi8NCityZXR1cm4gcmV0 Ow0KK30NCisNCitzdGF0aWMgaW50IHJ0MTcxMWhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQsDQorICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpDQorew0KK2lu dCByZXQgPSAwOw0KK3VpbnQxNl90IGRpZCA9IDA7DQorc3RydWN0IHJ0MTcxMWhfY2hpcCAqY2hp cCA9IE5VTEw7DQorc3RydWN0IHBvd2VyX3N1cHBseV9jb25maWcgY2ZnID0ge307DQorDQorcHJf aW5mbygiJXMgJXNcbiIsIF9fZnVuY19fLCBSVDE3MTFIX0RSVl9WRVJTSU9OKTsNCisNCitpZiAo IWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwNCitJMkNfRlVOQ19TTUJV U19JMkNfQkxPQ0spKSB7DQorZGV2X2VycigmY2xpZW50LT5kZXYsDQorIkkyQy9TTUJ1c3l5IGJs b2NrIGZ1bmN0aW9uYWxpdHkgbm90IHN1cHBvcnRlZCFcbiIpOw0KK3JldHVybiAtRU5PREVWOw0K K30NCityZXQgPSBydDE3MTFoX2NoZWNrX3JldmlzaW9uKGNsaWVudCk7DQoraWYgKHJldCA8IDAp IHsNCitkZXZfZXJyKCZjbGllbnQtPmRldiwgImNoZWNrIHZpZC9waWQvZGlkIGZhaWxcbiIpOw0K K3JldHVybiByZXQ7DQorfQ0KK2RpZCA9ICh1aW50MTZfdClyZXQ7DQorZGV2X2luZm8oJmNsaWVu dC0+ZGV2LCAiZGlkID0gMHglMDR4XG4iLCBkaWQpOw0KK2NoaXAgPSBkZXZtX2t6YWxsb2MoJmNs aWVudC0+ZGV2LCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsNCitpZiAoIWNoaXApDQorcmV0 dXJuIC1FTk9NRU07DQorY2hpcC0+aTJjID0gY2xpZW50Ow0KK2NoaXAtPmRldiA9ICZjbGllbnQt PmRldjsNCitjaGlwLT5kaWQgPSBkaWQ7DQorbXV0ZXhfaW5pdCgmY2hpcC0+bG9jayk7DQorbXV0 ZXhfaW5pdCgmY2hpcC0+d2FrZXVwX2xvY2spOw0KK0lOSVRfREVMQVlFRF9XT1JLKCZjaGlwLT5w b2xsX3dvcmssIHJ0MTcxMWhfcG9sbF93b3JrKTsNCitJTklUX0RFTEFZRURfV09SSygmY2hpcC0+ d2FrZXVwX3dvcmssIHJ0MTcxMWhfd2FrZXVwX3dvcmspOw0KK2FsYXJtX2luaXQoJmNoaXAtPndh a2V1cF90aW1lciwgQUxBUk1fUkVBTFRJTUUsDQorcnQxNzExaF9hbGFybV93YWtldXBfaGFuZGxl cik7DQoraTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7DQorDQorcmV0ID0gcnQxNzEx aF9wYXJzZV9kdChjaGlwKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dF9wYXJzZV9kdDsNCisN CitjZmcuZHJ2X2RhdGEgPSBjaGlwOw0KK2NoaXAtPnBzeSA9IGRldm1fcG93ZXJfc3VwcGx5X3Jl Z2lzdGVyKGNoaXAtPmRldiwgJnJ0MTcxMWhfcHN5X2Rlc2MsDQorJmNmZyk7DQoraWYgKElTX0VS UihjaGlwLT5wc3kpKSB7DQorcmV0ID0gUFRSX0VSUihjaGlwLT5wc3kpOw0KK2Rldl9lcnIoY2hp cC0+ZGV2LCAiJXMgcmVnaXN0ZXIgcHN5IGZhaWwoJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsNCitn b3RvIG91dF9wc3lfcmVnOw0KK30NCisNCitjaGlwLT52YnVzID0gZGV2bV9yZWd1bGF0b3JfZ2V0 KGNoaXAtPmRldiwgInZidXMiKTsNCitpZiAoSVNfRVJSKGNoaXAtPnZidXMpKSB7DQorcmV0ID0g UFRSX0VSUihjaGlwLT52YnVzKTsNCitnb3RvIG91dF9yZWdfZ2V0Ow0KK30NCisNCityZXQgPSBy dDE3MTFoX2RlYnVnZnNfaW5pdChjaGlwKTsNCitpZiAocmV0IDwgMCkNCitnb3RvIG91dF9kYmdm c19pbml0Ow0KKw0KK3JldCA9IHJ0MTcxMWhfc29mdHdhcmVfcmVzZXQoY2hpcCk7DQoraWYgKHJl dCA8IDApDQorZ290byBvdXRfc3dfcmVzZXQ7DQorDQorcmV0ID0gcnQxNzExaF9pbml0X2FsZXJ0 KGNoaXApOw0KK2lmIChyZXQgPCAwKQ0KK2dvdG8gb3V0X2luaXRfYWxlcnQ7DQorDQorcnQxNzEx aF9pbml0X3RjcGNfZGV2KGNoaXApOw0KKw0KK2NoaXAtPnRjcG1fcG9ydCA9IHRjcG1fcmVnaXN0 ZXJfcG9ydChjaGlwLT5kZXYsDQorJmNoaXAtPnRjcGNfZGV2KTsNCitpZiAoSVNfRVJSKGNoaXAt PnRjcG1fcG9ydCkpIHsNCityZXQgPSBQVFJfRVJSKGNoaXAtPnRjcG1fcG9ydCk7DQorZGV2X2Vy cihjaGlwLT5kZXYsICIlcyByZWdpc3RlciB0Y3BtIHBvcnQgZmFpbCglZCkiLA0KK19fZnVuY19f LCByZXQpOw0KK2dvdG8gb3V0X3RjcG1fcmVnOw0KK30NCisNCitwbV9ydW50aW1lX3NldF9hY3Rp dmUoJmNsaWVudC0+ZGV2KTsNCitwbV9ydW50aW1lX2VuYWJsZSgmY2xpZW50LT5kZXYpOw0KK2Rl dl9pbmZvKGNoaXAtPmRldiwgIiVzOiBzdWNjZXNzZnVsbHlcbiIsIF9fZnVuY19fKTsNCityZXR1 cm4gMDsNCisNCitvdXRfdGNwbV9yZWc6DQorb3V0X2luaXRfYWxlcnQ6DQorb3V0X3N3X3Jlc2V0 Og0KK3J0MTcxMWhfZGVidWdmc19leGl0KGNoaXApOw0KK291dF9kYmdmc19pbml0Og0KK291dF9y ZWdfZ2V0Og0KK291dF9wc3lfcmVnOg0KK291dF9wYXJzZV9kdDoNCittdXRleF9kZXN0cm95KCZj aGlwLT5sb2NrKTsNCitkZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgY2hpcCk7DQorcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgcnQxNzExaF9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQpDQorew0KK3N0cnVjdCBydDE3MTFoX2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVu dGRhdGEoY2xpZW50KTsNCisNCitwbV9ydW50aW1lX2Rpc2FibGUoJmNsaWVudC0+ZGV2KTsNCitw bV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KTsNCitpZiAoY2hpcCkgew0KK3J0 MTcxMWhfZGVidWdmc19leGl0KGNoaXApOw0KK211dGV4X2Rlc3Ryb3koJmNoaXAtPmxvY2spOw0K K30NCitkZXZfaW5mbyhjaGlwLT5kZXYsICIlczogc3VjY2Vzc2Z1bGx5XG4iLCBfX2Z1bmNfXyk7 DQorcmV0dXJuIDA7DQorfQ0KKw0KKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCitzdGF0aWMgaW50 IHJ0MTcxMWhfaTJjX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCitzdHJ1Y3Qg cnQxNzExaF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorDQoraWYgKGNoaXAp IHsNCitpZiAoYXRvbWljX3JlYWQoJmNoaXAtPmkyY19idXN5KSkNCityZXR1cm4gLUVCVVNZOw0K K2F0b21pY19zZXQoJmNoaXAtPnBtX3N1c3BlbmQsIDEpOw0KK30NCityZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCBydDE3MTFoX2kyY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0K K3sNCitzdHJ1Y3QgcnQxNzExaF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQor DQoraWYgKGNoaXApDQorYXRvbWljX3NldCgmY2hpcC0+cG1fc3VzcGVuZCwgMCk7DQorcmV0dXJu IDA7DQorfQ0KKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8NCisNCitzdGF0aWMgY29uc3Qg c3RydWN0IGRldl9wbV9vcHMgcnQxNzExaF9pMmNfcG1fb3BzID0gew0KK1NFVF9TWVNURU1fU0xF RVBfUE1fT1BTKHJ0MTcxMWhfaTJjX3BtX3N1c3BlbmQsIHJ0MTcxMWhfaTJjX3BtX3Jlc3VtZSkN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ0MTcxMWhfb2ZfZGV2 aWNlX2lkW10gPSB7DQoreyAuY29tcGF0aWJsZSA9ICJyaWNodGVrLHR5cGVjX3J0MTcxMWgiLH0s DQoreyB9LA0KK307DQorTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnQxNzExaF9vZl9kZXZpY2Vf aWQpOw0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBydDE3MTFoX2kyY19k ZXZpY2VfaWRbXSA9IHsNCit7ICJ0eXBlY19ydDE3MTFoIiwgMH0sDQoreyB9LA0KK307DQorTU9E VUxFX0RFVklDRV9UQUJMRShpMmMsIHJ0MTcxMWhfaTJjX2RldmljZV9pZCk7DQorDQorc3RhdGlj IHN0cnVjdCBpMmNfZHJpdmVyIHJ0MTcxMWhfaTJjX2RyaXZlciA9IHsNCisuZHJpdmVyID0gew0K Ky5uYW1lID0gInR5cGVjX3J0MTcxMWgiLA0KKy5vd25lciA9IFRISVNfTU9EVUxFLA0KKy5vZl9t YXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihydDE3MTFoX29mX2RldmljZV9pZCksDQorLnBtID0g JnJ0MTcxMWhfaTJjX3BtX29wcywNCit9LA0KKy5wcm9iZSA9IHJ0MTcxMWhfaTJjX3Byb2JlLA0K Ky5yZW1vdmUgPSBydDE3MTFoX2kyY19yZW1vdmUsDQorLmlkX3RhYmxlID0gcnQxNzExaF9pMmNf ZGV2aWNlX2lkLA0KK307DQorbW9kdWxlX2kyY19kcml2ZXIocnQxNzExaF9pMmNfZHJpdmVyKTsN CisNCitNT0RVTEVfQVVUSE9SKCJjeV9odWFuZyA8Y3lfaHVhbmdAcmljaHRlay5jb20+Iik7DQor TU9EVUxFX0RFU0NSSVBUSU9OKCJydDE3MTFoIHR5cGVjIGRyaXZlciIpOw0KK01PRFVMRV9WRVJT SU9OKFJUMTcxMUhfRFJWX1ZFUlNJT04pOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCmRpZmYg LS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy9ydDE3MTFoL3J0MTcxMWguaCBiL2RyaXZlcnMvdXNi L3R5cGVjL3J0MTcxMWgvcnQxNzExaC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMC4uOGI2NzQ2NA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy91c2IvdHlwZWMvcnQx NzExaC9ydDE3MTFoLmgNCkBAIC0wLDAgKzEsMzAwIEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjArDQorLyoNCisgKiBDb3B5cmlnaHQgMjAxNyBSaWNodGVrIFRlY2hub2xv Z2ggQ29ycC4NCisgKg0KKyAqIFJpY2h0ZWsgUlQxNzExSCBUeXBlLUMgQ2hpcCBEcml2ZXINCisg Ki8NCisNCisjaWZuZGVmIF9fTElOVVhfUlQxNzExSF9IDQorI2RlZmluZSBfX0xJTlVYX1JUMTcx MUhfSA0KKw0KKy8qIERldmljZSBJRCAqLw0KKyNkZWZpbmUgUlQxNzExSF9ESURfQTB4MjE3MA0K KyNkZWZpbmUgUlQxNzExSF9ESURfQjB4MjE3MQ0KKyNkZWZpbmUgUlQxNzExSF9ESURfQzB4MjE3 Mg0KKyNkZWZpbmUgUlQxNzExSF9ESURfRDB4MjE3Mw0KKw0KKy8qIFJlZ2lzdGVycyAqLw0KKyNk ZWZpbmUgUlQxNzExSF9SRUdfVklEKDB4MDApDQorI2RlZmluZSBSVDE3MTFIX1JFR19QSUQoMHgw MikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0RJRCgweDA0KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf VFlQRUNfUkVWKDB4MDYpDQorI2RlZmluZSBSVDE3MTFIX1JFR19QRF9SRVYoMHgwOCkNCisjZGVm aW5lIFJUMTcxMUhfUkVHX1BESUZfUkVWKDB4MEEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVS VCgweDEwKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQUxFUlRfTUFTSygweDEyKQ0KKyNkZWZpbmUg UlQxNzExSF9SRUdfUE9XRVJfU1RBVFVTX01BU0soMHgxNCkNCisjZGVmaW5lIFJUMTcxMUhfUkVH X0ZBVUxUX1NUQVRVU19NQVNLKDB4MTUpDQorI2RlZmluZSBSVDE3MTFIX1JFR19UQ1BDX0NUUkwo MHgxOSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1JPTEVfQ1RSTCgweDFBKQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfRkFVTFRfQ1RSTCgweDFCKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUE9XRVJfQ1RS TCgweDFDKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0NfU1RBVFVTKDB4MUQpDQorI2RlZmluZSBS VDE3MTFIX1JFR19QT1dFUl9TVEFUVVMoMHgxRSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0ZBVUxU X1NUQVRVUygweDFGKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ09NTUFORCgweDIzKQ0KKyNkZWZp bmUgUlQxNzExSF9SRUdfTVNHX0hEUl9JTkZPKDB4MmUpDQorI2RlZmluZSBSVDE3MTFIX1JFR19S WF9ERVRFQ1QoMHgyZikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1JYX0JZVEVfQ05UKDB4MzApDQor I2RlZmluZSBSVDE3MTFIX1JFR19SWF9CVUZfRlJBTUVfVFlQRSgweDMxKQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfUlhfSERSKDB4MzIpDQorI2RlZmluZSBSVDE3MTFIX1JFR19SWF9EQVRBKDB4MzQp DQorI2RlZmluZSBSVDE3MTFIX1JFR19UUkFOU01JVCgweDUwKQ0KKyNkZWZpbmUgUlQxNzExSF9S RUdfVFhfQllURV9DTlQoMHg1MSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1RYX0hEUigweDUyKQ0K KyNkZWZpbmUgUlQxNzExSF9SRUdfVFhfREFUQSgweDU0KQ0KKw0KKyNkZWZpbmUgUlQxNzExSF9S RUdfQ0xLX0NUUkwyKDB4ODcpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfQ1RSTDMoMHg4OCkN CisjZGVmaW5lIFJUMTcxMUhfUkVHX0JNQ19DVFJMKDB4OTApDQorI2RlZmluZSBSVDE3MTFIX1JF R19CTUNJT19SWERaU0VMKDB4OTMpDQorI2RlZmluZSBSVDE3MTFIX1JFR19WQ09OTl9DTElNSVRF TigweDk1KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUlRfU1RBVFVTKDB4OTcpDQorI2RlZmluZSBS VDE3MTFIX1JFR19SVF9JTlQoMHg5OCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1JUX01BU0soMHg5 OSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0lETEVfQ1RSTCgweDlCKQ0KKyNkZWZpbmUgUlQxNzEx SF9SRUdfSU5UUlNUX0NUUkwoMHg5QykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1dBVENIRE9HX0NU UkwoMHg5RCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0kyQ1JTVF9DVFJMKDBYOUUpDQorI2RlZmlu ZSBSVDE3MTFIX1JFR19TV1JFU0VUKDB4QTApDQorI2RlZmluZSBSVDE3MTFIX1JFR19UVENQQ19G SUxURVIoMHhBMSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0RSUF9UT0dHTEVfQ1lDTEUoMHhBMikN CisjZGVmaW5lIFJUMTcxMUhfUkVHX0RSUF9EVVRZX0NUUkwoMHhBMykNCisjZGVmaW5lIFJUMTcx MUhfUkVHX0JNQ0lPX1JYRFpFTigweEFGKQ0KKw0KKw0KKyNpZm5kZWYgQklUDQorI2RlZmluZSBC SVQoeCkoMSA8PCAoeCkpDQorI2VuZGlmDQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19BTEVSVCgw eDEwKQ0KKyAqIFJUMTcxMUhfUkVHX0FMRVJUX01BU0soMHgxMikNCisgKi8NCisjZGVmaW5lIFJU MTcxMUhfUkVHX1ZCVVNfU0lOS19ESVNDT05ORUNUQklUKDExKQ0KKyNkZWZpbmUgUlQxNzExSF9S RUdfQUxFUlRfUlhfQlVGX09WRkJJVCgxMCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUX0ZB VUxUQklUKDkpDQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVSVF9MT19WT0xUQklUKDgpDQorI2Rl ZmluZSBSVDE3MTFIX1JFR19BTEVSVF9ISV9WT0xUQklUKDcpDQorI2RlZmluZSBSVDE3MTFIX1JF R19BTEVSVF9UWF9TVUNDRVNTQklUKDYpDQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVSVF9UWF9E SVNDQVJERURCSVQoNSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUX1RYX0ZBSUxFREJJVCg0 KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQUxFUlRfUlhfSEFSRF9SU1RCSVQoMykNCisjZGVmaW5l IFJUMTcxMUhfUkVHX0FMRVJUX1JYX1NUQVRVU0JJVCgyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdf QUxFUlRfUE9XRVJfU1RBVFVTQklUKDEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19BTEVSVF9DQ19T VEFUVVNCSVQoMCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUX1JYX01BU0sgXA0KKyhSVDE3 MTFIX1JFR19BTEVSVF9SWF9TVEFUVVMgfCBSVDE3MTFIX1JFR19BTEVSVF9SWF9CVUZfT1ZGKQ0K Kw0KKy8qDQorICogUlQxNzExSF9SRUdfUE9XRVJfU1RBVFVTX01BU0soMHgxNCkNCisgKiBSVDE3 MTFIX1JFR19QT1dFUl9TVEFUVVMoMHgxRSkNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX1BP V0VSX1NUQVRVU19UQ1BDX0lOSVRJQUxCSVQoNikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1BPV0VS X1NUQVRVU19TUkNfSFZCSVQoNSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVU19T UkNfVkJVU0JJVCg0KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUE9XRVJfU1RBVFVTX1ZCVVNfUFJF U19ERVRCSVQoMykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVU19WQlVTX1BSRVNC SVQoMikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1BPV0VSX1NUQVRVU19WQ09OTl9QUkVTQklUKDEp DQorI2RlZmluZSBSVDE3MTFIX1JFR19QT1dFUl9TVEFUVVNfU0lOS19WQlVTQklUKDApDQorDQor LyoNCisgKiBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVNfTUFTSygweDE1KQ0KKyAqIFJUMTcxMUhf UkVHX0ZBVUxUX1NUQVRVUygweDFGKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRkFVTFRf U1RBVFVTX1ZDT05OX09WQklUKDcpDQorI2RlZmluZSBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVNf Rk9SQ0VfT0ZGX1ZCVVNCSVQoNikNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0ZBVUxUX1NUQVRVU19B VVRPX0RJU0NfRkFJTEJJVCg1KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTX0ZP UkNFX0RJU0NfRkFJTEJJVCg0KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRkFVTFRfU1RBVFVTX1ZC VVNfT0NCSVQoMykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0ZBVUxUX1NUQVRVU19WQlVTX09WQklU KDIpDQorI2RlZmluZSBSVDE3MTFIX1JFR19GQVVMVF9TVEFUVVNfVkNPTk5fT0NCSVQoMSkNCisj ZGVmaW5lIFJUMTcxMUhfUkVHX0ZBVUxUX1NUQVRVU19JMkNfRVJST1JCSVQoMCkNCisNCisvKg0K KyAqIFJUMTcxMUhfUkVHX1JPTEVfQ1RSTCgweDFBKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9S RUdfUk9MRV9DVFJMX0RSUEJJVCg2KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUk9MRV9DVFJMX1JF U19TRVQoZHJwLCBycCwgY2MxLCBjYzIpIFwNCisoKGRycCkgPDwgNiB8IChycCkgPDwgNCB8IChj YzIpIDw8IDIgfCAoY2MxKSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1JPTEVfQ1RSTF9DQzIocmVn KSgoKHJlZykgJiAweDBDKSA+PiAyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfUk9MRV9DVFJMX0ND MShyZWcpKChyZWcpICYgMHgwMykNCisjZGVmaW5lIFJUMTcxMUhfVFlQRUNfQ0NfUFVMTF9HRVRf UlBfTFZMKHB1bGwpKChwdWxsICYgMHgxOCkgPj4gMykNCisjZGVmaW5lIFJUMTcxMUhfVFlQRUNf Q0NfUFVMTF9HRVRfUkVTKHB1bGwpKHB1bGwgJiAweDA3KQ0KKw0KK2VudW0gdHlwZWNfY2NfcHVs bCB7DQorVFlQRUNfQ0NfUFVMTF9SQSA9IDAsDQorVFlQRUNfQ0NfUFVMTF9SUCwNCitUWVBFQ19D Q19QVUxMX1JELA0KK1RZUEVDX0NDX1BVTExfT1BFTiwNCitUWVBFQ19DQ19QVUxMX0RSUCwvKiBm cm9tIHJkICovDQorDQorVFlQRUNfQ0NfUFVMTF9SUF9ERUYgPSAxLC8qIDB4MDAgKyAxICovDQor VFlQRUNfQ0NfUFVMTF9SUF8xXzUgPSA5LC8qIDB4MDggKyAxICovDQorVFlQRUNfQ0NfUFVMTF9S UF8zXzAgPSAxNywvKiAweDEwICsgMSAqLw0KKw0KK1RZUEVDX0NDX1BVTExfRFJQX0RFRiA9IDQs LyogMHgwMCArIDQgKi8NCitUWVBFQ19DQ19QVUxMX0RSUF8xXzUgPSAxMiwvKiAweDA4ICsgNCAq Lw0KK1RZUEVDX0NDX1BVTExfRFJQXzNfMCA9IDIwLC8qIDB4MTAgKyA0ICovDQorfTsNCisNCisv Kg0KKyAqIFJUMTcxMUhfUkVHX1RDUENfQ1RSTCgweDE5KQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzEx SF9SRUdfVENQQ19DVFJMX0JJU1RfVEVTVF9NT0RFQklUKDEpDQorI2RlZmluZSBSVDE3MTFIX1JF R19UQ1BDX0NUUkxfUExVR19PUklFTlRCSVQoMCkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX0ZB VUxUX0NUUkwoMHgxQikNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX0ZBVUxUX0NUUkxfRElT X1ZDT05OX09WQklUKDcpDQorI2RlZmluZSBSVDE3MTFIX1JFR19GQVVMVF9DVFJMX0RJU19TTktf VkJVU19PQ0JJVCgyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfRkFVTFRfQ1RSTF9ESVNfVkNPTk5f T0NCSVQoMCkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX1BPV0VSX0NUUkwoMHgxQykNCisgKi8N CisjZGVmaW5lIFJUMTcxMUhfUkVHX1BPV0VSX0NUUkxfVkNPTk5CSVQoMCkNCisNCisvKg0KKyAq IFJUMTcxMUhfUkVHX0NDX1NUQVRVUygweDFEKQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdf Q0NfU1RBVFVTX0RSUF9UT0dHTElOR0JJVCg1KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0NfU1RB VFVTX0RSUF9SRVNVTFQocmVnKSgoKHJlZykgJiAweDEwKSA+PiA0KQ0KKyNkZWZpbmUgUlQxNzEx SF9SRUdfQ0NfU1RBVFVTX0NDMihyZWcpKCgocmVnKSAmIDB4MEMpID4+IDIpDQorI2RlZmluZSBS VDE3MTFIX1JFR19DQ19TVEFUVVNfQ0MxKHJlZykoKHJlZykgJiAweDAzKQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfQ0NfU1RBVFVTX1JEMkVOVU0oY2MpKChjYykgKyAyKQ0KKw0KKy8qDQorICogUlQx NzExSF9SRUdfQ09NTUFORCgweDIzKQ0KKyAqLw0KK2VudW0gcnQxNzExaF9jb21tYW5kIHsNCitS VDE3MTFIX0NNRF9XQUtFX0kyQyA9IDB4MTEsDQorUlQxNzExSF9DTURfRElTQUJMRV9WQlVTX0RF VEVDVCA9IDB4MjIsDQorUlQxNzExSF9DTURfRU5BQkxFX1ZCVVNfREVURUNUID0gMHgzMywNCitS VDE3MTFIX0NNRF9ESVNBQkxFX1NJTktfVkJVUyA9IDB4NDQsDQorUlQxNzExSF9DTURfRU5BQkxF X1NJTktfVkJVUyA9IDB4NTUsDQorUlQxNzExSF9DTURfRElTQUJMRV9TT1VSQ0VfVkJVUyA9IDB4 NjYsDQorUlQxNzExSF9DTURfRU5BQkxFX1NPVVJDRV9WQlVTID0gMHg3NywNCitSVDE3MTFIX0NN RF9TT1VSQ0VfVkJVU19IViA9IDB4ODgsDQorUlQxNzExSF9DTURfTE9PS19DT05ORUNUSU9OID0g MHg5OSwNCitSVDE3MTFIX0NNRF9SWF9PTkVfTU9ERSA9IDB4QUEsDQorUlQxNzExSF9DTURfSTJD X0lETEUgPSAweEZGLA0KK307DQorDQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19NU0dfSERSX0lO Rk8oMHgyRSkNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX01TR19IRFJfSU5GT19TRVQoZHJv bGUsIHByb2xlKSBcDQorKChkcm9sZSkgPDwgMyB8IChQRF9SRVYyMCA8PCAxKSB8IChwcm9sZSkp DQorI2RlZmluZSBSVDE3MTFIX1JFR19NU0dfSERSX0lORk9fRFJPTEUocmVnKSgoKHJlZykgJiAw eDA4KSA+PiAzKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfTVNHX0hEUl9JTkZPX1BST0xFKHJlZyko KHJlZykgJiAweDAxKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfVFJBTlNNSVQoMHg1MCkNCisg Ki8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX1RSQU5TTUlUX1NFVChyZXRyeSwgdHlwZSkoKHJldHJ5 KSA8PCA0IHwgKHR5cGUpKQ0KKw0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfQ0xLX0NUUkwyKDB4 ODcpDQorICovDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfRElWXzYwMEtfRU5CSVQoNykNCisj ZGVmaW5lIFJUMTcxMUhfUkVHX0NMS19CQ0xLMl9FTkJJVCg2KQ0KKyNkZWZpbmUgUlQxNzExSF9S RUdfQ0xLX0JDTEsyX1RHX0VOQklUKDUpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfRElWXzMw MEtfRU5CSVQoMykNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0NMS19DS18zMDBLX0VOQklUKDIpDQor I2RlZmluZSBSVDE3MTFIX1JFR19DTEtfQkNMS19FTkJJVCgxKQ0KKyNkZWZpbmUgUlQxNzExSF9S RUdfQ0xLX0JDTEtfVEhfRU5CSVQoMCkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX0NMS19DVFJM MygweDg4KQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0xLX09TQ01VWF9SR19FTkJJVCg3 KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0xLX0NLXzI0TV9FTkJJVCg2KQ0KKyNkZWZpbmUgUlQx NzExSF9SRUdfQ0xLX09TQ19SR19FTkJJVCg1KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0xLX0RJ Vl8yUDRNX0VOQklUKDQpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfQ0tfMlA0TV9FTkJJVCgz KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQ0xLX1BDTEtfRU5CSVQoMikNCisjZGVmaW5lIFJUMTcx MUhfUkVHX0NMS19QQ0xLX1JHX0VOQklUKDEpDQorI2RlZmluZSBSVDE3MTFIX1JFR19DTEtfUENM S19UR19FTkJJVCgwKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfQk1DX0NUUkwoMHg5MCkNCisg Ki8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX0lETEVfRU5CSVQoNikNCisjZGVmaW5lIFJUMTcxMUhf UkVHX0RJU0NIQVJHRV9FTkJJVCg1KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfQk1DSU9fTFBSUFJE QklUKDQpDQorI2RlZmluZSBSVDE3MTFIX1JFR19CTUNJT19MUEVOQklUKDMpDQorI2RlZmluZSBS VDE3MTFIX1JFR19CTUNJT19CR19FTkJJVCgyKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfVkJVU19E RVRfRU5CSVQoMSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0JNQ0lPX09TQ19FTkJJVCgwKQ0KKw0K Ky8qDQorICogUlQxNzExSF9SRUdfUlRfU1RBVFVTKDB4OTcpDQorICovDQorI2RlZmluZSBSVDE3 MTFIX1JFR19SQV9ERVRBQ0hCSVQoNSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX1ZCVVNfODBCSVQo MSkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX1JUX0lOVCgweDk4KQ0KKyAqLw0KKyNkZWZpbmUg UlQxNzExSF9SRUdfSU5UX1JBX0RFVEFDSEJJVCg1KQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfSU5U X1dBVENIRE9HQklUKDIpDQorI2RlZmluZSBSVDE3MTFIX1JFR19JTlRfVkJVU184MEJJVCgxKQ0K KyNkZWZpbmUgUlQxNzExSF9SRUdfSU5UX1dBS0VVUEJJVCgwKQ0KKw0KKy8qDQorICogUlQxNzEx SF9SRUdfUlRfTUFTSygweDk5KQ0KKyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfTV9SQV9ERVRB Q0hCSVQoNSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX01fV0FUQ0hET0dCSVQoMikNCisjZGVmaW5l IFJUMTcxMUhfUkVHX01fVkJVU184MEJJVCgxKQ0KKyNkZWZpbmUgUlQxNzExSF9SRUdfTV9XQUtF VVBCSVQoMCkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUX0VYVF9SQV9ERVRBQ0goMSA8PCAo MTYgKyA1KSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FMRVJUX0VYVF9WQlVTXzgwKDEgPDwgKDE2 ICsgMSkpDQorDQorLyoNCisgKiBSVDE3MTFIX1JFR19JRExFX0NUUkwoMHg5QikNCisgKi8NCisj ZGVmaW5lIFJUMTcxMUhfUkVHX0NLXzMwMEtfU0VMQklUKDcpDQorI2RlZmluZSBSVDE3MTFIX1JF R19TSElQUElOR19PRkZCSVQoNSkNCisjZGVmaW5lIFJUMTcxMUhfUkVHX0FVVE9JRExFX0VOQklU KDMpDQorDQorLyogdGltZW91dCA9ICh0b3V0KjIrMSkgKiA2LjRtcyAqLw0KKyNkZWZpbmUgUlQx NzExSF9SRUdfSURMRV9TRVQoY2szMDAsIHNoaXBfZGlzLCBhdXRvX2lkbGUsIHRvdXQpIFwNCiso KChjazMwMCkgPDwgNykgfCAoKHNoaXBfZGlzKSA8PCA1KSB8IFwNCisgKChhdXRvX2lkbGUpIDw8 IDMpIHwgKCh0b3V0KSAmIDB4MDcpKQ0KKw0KKy8qDQorICogUlQxNzExSF9SRUdfSU5UUlNUX0NU UkwoMHg5QykNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX0lOVFJTVF9FTkJJVCg3KQ0KKw0K Ky8qIHRpbWVvdXQgPSAodG91dCsxKSAqIDAuMnNlYyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdf SU5UUlNUX1NFVChlbiwgdG91dCkoKChlbikgPDwgNykgfCAoKHRvdXQpICYgMHgwMykpDQorDQor LyoNCisgKiBSVDE3MTFIX1JFR19XQVRDSERPR19DVFJMKDB4OUQpDQorICovDQorI2RlZmluZSBS VDE3MTFIX1JFR19XQVRDSERPR19FTkJJVCg3KQ0KKw0KKy8qIHRpbWVvdXQgPSAodG91dCsxKSAq IDAuNHNlYyAqLw0KKyNkZWZpbmUgUlQxNzExSF9SRUdfV0FUQ0hET0dfQ1RSTF9TRVQoZW4sIHRv dXQpKCgoZW4pIDw8IDcpIHwgKCh0b3V0KSAmIDB4MDcpKQ0KKw0KKy8qDQorICogUlQxNzExSF9S RUdfSTJDUlNUX0NUUkwoMHg5RSkNCisgKi8NCisjZGVmaW5lIFJUMTcxMUhfUkVHX0kyQ1JTVF9F TkJJVCg3KQ0KKw0KKy8qIHRpbWVvdXQgPSAodG91dCsxKSAqIDEyLjVtcyAqLw0KKyNkZWZpbmUg UlQxNzExSF9SRUdfSTJDUlNUX1NFVChlbiwgdG91dCkoKGVuIDw8IDcpIHwgKHRvdXQgJiAweDBG KSkNCisNCisvKg0KKyAqIFJUMTcxMUhfUkVHX0RSUF9EVVRZX0NUUkwoMHhBMykNCisgKi8NCisj ZGVmaW5lIFJUMTcxMUhfTE9XX1JQX0RVVFkoMTAwKS8qIDEwJSAqLw0KKyNkZWZpbmUgUlQxNzEx SF9OT1JNQUxfUlBfRFVUWSgzMzApLyogMzMlICovDQorDQorI2VuZGlmIC8qIF9fTElOVVhfUlQx NzExSF9IICovDQotLQ0KMS45LjENCg0KKioqKioqKioqKioqKiBFbWFpbCBDb25maWRlbnRpYWxp dHkgTm90aWNlICoqKioqKioqKioqKioqKioqKioqDQoNClRoZSBpbmZvcm1hdGlvbiBjb250YWlu ZWQgaW4gdGhpcyBlLW1haWwgbWVzc2FnZSAoaW5jbHVkaW5nIGFueSBhdHRhY2htZW50cykgbWF5 IGJlIGNvbmZpZGVudGlhbCwgcHJvcHJpZXRhcnksIHByaXZpbGVnZWQsIG9yIG90aGVyd2lzZSBl eGVtcHQgZnJvbSBkaXNjbG9zdXJlIHVuZGVyIGFwcGxpY2FibGUgbGF3cy4gSXQgaXMgaW50ZW5k ZWQgdG8gYmUgY29udmV5ZWQgb25seSB0byB0aGUgZGVzaWduYXRlZCByZWNpcGllbnQocykuIEFu eSB1c2UsIGRpc3NlbWluYXRpb24sIGRpc3RyaWJ1dGlvbiwgcHJpbnRpbmcsIHJldGFpbmluZyBv ciBjb3B5aW5nIG9mIHRoaXMgZS1tYWlsIChpbmNsdWRpbmcgaXRzIGF0dGFjaG1lbnRzKSBieSB1 bmludGVuZGVkIHJlY2lwaWVudChzKSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkIGFuZCBtYXkgYmUg dW5sYXdmdWwuIElmIHlvdSBhcmUgbm90IGFuIGludGVuZGVkIHJlY2lwaWVudCBvZiB0aGlzIGUt bWFpbCwgb3IgYmVsaWV2ZSB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZS1tYWlsIGluIGVy cm9yLCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgKGJ5IHJlcGx5aW5nIHRv IHRoaXMgZS1tYWlsKSwgZGVsZXRlIGFueSBhbmQgYWxsIGNvcGllcyBvZiB0aGlzIGUtbWFpbCAo aW5jbHVkaW5nIGFueSBhdHRhY2htZW50cykgZnJvbSB5b3VyIHN5c3RlbSwgYW5kIGRvIG5vdCBk aXNjbG9zZSB0aGUgY29udGVudCBvZiB0aGlzIGUtbWFpbCB0byBhbnkgb3RoZXIgcGVyc29uLiBU aGFuayB5b3UhDQo=