From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Shevchenko, Andriy" Subject: Re: [PATCH v5] platform:x86: add Intel P-Unit mailbox IPC driver Date: Fri, 18 Sep 2015 19:11:30 +0000 Message-ID: <1442603488.8361.114.camel@intel.com> References: <1442227672-102238-1-git-send-email-qipeng.zha@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com ([134.134.136.65]:17983 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752120AbbIRTLd (ORCPT ); Fri, 18 Sep 2015 15:11:33 -0400 In-Reply-To: <1442227672-102238-1-git-send-email-qipeng.zha@intel.com> Content-Language: en-US Content-ID: Sender: platform-driver-x86-owner@vger.kernel.org List-ID: To: "platform-driver-x86@vger.kernel.org" , "Zha, Qipeng" Cc: "dvhart@infradead.org" , "Westerberg, Mika" T24gTW9uLCAyMDE1LTA5LTE0IGF0IDE4OjQ3ICswODAwLCBRaXBlbmcgWmhhIHdyb3RlOg0KPiBU aGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciBQLVVuaXQgbWFpbGJveCBJUEMgb24gSW50 ZWwgDQo+IHBsYXRmb3Jtcy4NCj4gVGhlIGhlYXJ0IG9mIHRoZSBQLVVuaXQgaXMgdGhlIEZveHRv biBtaWNyb2NvbnRyb2xsZXIgYW5kIGl0cyANCj4gZmlybXdhcmUsDQo+IHdoaWNoIHByb3ZpZGUg bWFpbGJveCBpbnRlcmZhY2UgZm9yIHBvd2VyIG1hbmFnZW1lbnQgdXNhZ2UuDQo+IA0KPiBTaWdu ZWQtb2ZmLWJ5OiBRaXBlbmcgWmhhIDxxaXBlbmcuemhhQGludGVsLmNvbT4NCj4gDQoNClRoYW5r cyBmb3IgYW4gdXBkYXRlLiAgTXkgY29tbWVudHMgYmVsb3cuDQoNCj4gLS0tDQo+IGNoYW5nZSBp biB2NQ0KPiAgRml4IGNvbW1lbmQgc3R5bGUgaW4gaGVhZGVyIGZpbGU7DQo+ICBSZXBsYWNlIEVJ TlZBTCB3aXRoIEVOT0RFViBpbiBzdHViIGZ1bmN0aW9uczsNCj4gIFJlcGxhY2UgaXBjX2Vycl9z b3VyY2VzIGFycmF5IHdpdGggaXBjX2Vycl9zdHJpbmcgZnVuY3Rpb247DQo+ICBDb3JyZWN0IGNv bW1lbnRzOiAiaWYgaW52YWxpZCIgLT4gImlmIG5vdCB1c2VkIjsNCj4gIFByb3BhZ2F0ZSByZXR1 cm4gZXJyb3Igb2YgZGV2bV9yZXF1ZXN0X2lycS4NCj4gDQo+IGNoYW5nZSBpbiB2NA0KPiAgRml4 IHR3byBjb2RlIHN0eWxlIGlzc3VlczogbWFrZSAvKiBhcyBhIHdob2xlIGxpbmUgYW5kIHJlcGxh Y2UNCj4gInJldHVybiByZXQiIHdpdGggImdvdG8gb3V0IjsNCj4gIFJlcGxhY2UgLUVJTlZBTCB3 aXRoIC1FTlhJTyBmb3IgZmFpbHVyZXMgZHVlIHRvIHJlc291cmNlLg0KPiANCj4gY2hhbmdlIGlu IHYzDQo+ICBGaXggY29tcGlsZSBpc3N1ZSBpbiBpbnRlbF9wdW5pdF9pcGMuaCwgaXQgaGFwcGVu ZWQgd2hlbiBidWlsdC1pbg0KPiBhbmQgdGhlIGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkIGluIG90 aGVyIHNvdXJjZSBmaWxlLg0KPiANCj4gY2hhbmdlIGluIHYyDQo+ICBGaXggaXNzdWVzIGluIGNv ZGUgc3R5bGUgYW5kIGNvbW1lbnRzOw0KPiAgUmVtb3ZlICJkZWZhdWx0IHkiIGluIEtjb25maWc7 DQo+ICBSZW1vdmUgc29tZSBoZWFkZXIgZmlsZXM7DQo+ICBSZXBsYWNlIHJlcXVlc3RfbWVtX3Jl Z2lvbiB3aXRoIGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uLA0KPiBhbmQgc2FtZSBmb3IgcmVxdWVz dF9pcnE7DQo+ICBDaGFuZ2UgdG8gdXNlIHByZWZpeCBvZiBJUENfUFVOSVRfIHRvIGRlZmluZSBj b21tYW5kczsNCj4gLS0tDQo+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgNCArLQ0KPiAgYXJjaC94ODYvaW5jbHVkZS9hc20vaW50ZWxfcHVuaXRfaXBjLmggfCAx MDIgKysrKysrKysrKw0KPiAgZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyAgICAgICAgICAg fCAgIDYgKw0KPiAgZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUgICAgICAgICAgfCAgIDEg Kw0KPiAgZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcHVuaXRfaXBjLmMgfCAzNTMgDQo+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgNSBmaWxlcyBjaGFuZ2VkLCA0NjUg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gv eDg2L2luY2x1ZGUvYXNtL2ludGVsX3B1bml0X2lwYy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcHVuaXRfaXBjLmMNCj4gDQo+IGRpZmYgLS1naXQg YS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQo+IGluZGV4IDEzYWM4NjEuLmNmNzEzODcgMTAw NjQ0DQo+IC0tLSBhL01BSU5UQUlORVJTDQo+ICsrKyBiL01BSU5UQUlORVJTDQo+IEBAIC01MjA3 LDEyICs1MjA3LDE0IEBAIEY6CWluY2x1ZGUvdWFwaS9saW51eC9tZWkuaA0KPiAgRjoJZHJpdmVy cy9taXNjL21laS8qDQo+ICBGOglEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tZWkvKg0KPiAg DQo+IC1JTlRFTCBQTUMgSVBDIERSSVZFUg0KPiArSU5URUwgUE1DL1AtVW5pdCBJUEMgRFJJVkVS DQo+ICBNOglaaGEgUWlwZW5nPHFpcGVuZy56aGFAaW50ZWwuY29tPg0KPiAgTDoJcGxhdGZvcm0t ZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcNCj4gIFM6CU1haW50YWluZWQNCj4gIEY6CWRyaXZl cnMvcGxhdGZvcm0veDg2L2ludGVsX3BtY19pcGMuYw0KPiArRjoJZHJpdmVycy9wbGF0Zm9ybS94 ODYvaW50ZWxfcHVuaXRfaXBjLmMNCj4gIEY6CWFyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX3Bt Y19pcGMuaA0KPiArRjoJYXJjaC94ODYvaW5jbHVkZS9hc20vaW50ZWxfcHVuaXRfaXBjLmgNCj4g IA0KPiAgSU9DMyBFVEhFUk5FVCBEUklWRVINCj4gIE06CVJhbGYgQmFlY2hsZSA8cmFsZkBsaW51 eC1taXBzLm9yZz4NCj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX3B1 bml0X2lwYy5oIA0KPiBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ludGVsX3B1bml0X2lwYy5oDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjhjZDAwYmUNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pbnRlbF9wdW5pdF9pcGMuaA0K PiBAQCAtMCwwICsxLDEwMiBAQA0KPiArI2lmbmRlZiBfQVNNX1g4Nl9JTlRFTF9QVU5JVF9JUENf SF8NCj4gKyNkZWZpbmUgIF9BU01fWDg2X0lOVEVMX1BVTklUX0lQQ19IXw0KPiArDQo+ICsvKg0K PiArICogQ29tbWFuZHMgc3VwcG9ydGVkIG9uIENQVSBjb3JlLCBhcmUgaGFuZGxlZCBieSBkaWZm ZXJlbnQgYmFycywNCj4gKyAqIHVuaWZ5IHRoZXNlIGNvbW1hbmRzIHRvZ2V0aGVyIGhlcmUuDQo+ ICsgKi8NCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX0JBU0UJCQkweDAwDQo+ICsjZGVm aW5lIElQQ19QVU5JVF9HVERfQ01EX0JBU0UJCQkweDIwDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9J U1BEX0NNRF9CQVNFCQkJMHg0MA0KPiArDQo+ICsvKiBCSU9TID0+IFBjb2RlIGNvbW1hbmRzICov DQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX0NNRF9aRVJPCQkJKElQQ19QVU5JVF9CDQo+IElP U19DTURfQkFTRSArIDB4MDApDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX0NNRF9WUl9JTlRF UkZBQ0UJCShJUENfUFVOSVRfQg0KPiBJT1NfQ01EX0JBU0UgKyAweDAxKQ0KPiArI2RlZmluZSBJ UENfUFVOSVRfQklPU19DTURfUkVBRF9QQ1MJCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0Ug KyAweDAyKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19DTURfV1JJVEVfUENTCQkoSVBDX1BV TklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgwMykNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1Nf Q01EX1JFQURfUENVX0NPTkZJRwkoSVBDX1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgwNCkN Cj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX1dSSVRFX1BDVV9DT05GSUcJKElQQ19QVU5J VF9CSU9TX0NNRF8NCj4gQkFTRSArIDB4MDUpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX0NN RF9SRUFEX1BMMV9TRVRUSU5HCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgKyAweDA2KQ0K PiArI2RlZmluZSBJUENfUFVOSVRfQklPU19XUklURV9QTDFfU0VUVElORwkoSVBDX1BVTklUX0JJ T1NfQ01EXw0KPiBCQVNFICsgMHgwNykNCg0KV2h5IHRoaXMgb25lIGhhcyBubyBfQ01EXyBpbnNp ZGU/DQoNCkFjdHVhbGx5LCBuYW1lcyBsb29rcyB0b28gbG9uZywgaXMgaXQgcG9zc2libGUgdG8g c29tZWhvdyBtYWtlIHRoZW0NCnNob3J0ZXI/DQoNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1Nf Q01EX1RSSUdHRVJfVkREX1JBTQkoSVBDX1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgwOCkN Cj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX1JFQURfVEVMRV9JTkZPCShJUENfUFVOSVRf QklPU19DTURfDQo+IEJBU0UgKyAweDA5KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19DTURf UkVBRF9URUxFX1RSQUNFX0NUUkwJKElQQ19QVU5JVF9CDQo+IElPU19DTURfQkFTRSArIDB4MGEp DQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX0NNRF9XUklURV9URUxFX1RSQUNFX0NUUkwgXA0K PiArCQkJCQkJKElQQ19QVU5JVF9CSU9TX0NNRF8NCj4gQkFTRSArIDB4MGIpDQo+ICsjZGVmaW5l IElQQ19QVU5JVF9CSU9TX0NNRF9SRUFEX1RFTEVfRVZFTlRfQ1RSTAkoSVBDX1BVTklUX0INCj4g SU9TX0NNRF9CQVNFICsgMHgwYykNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX1dSSVRF X1RFTEVfRVZFTlRfQ1RSTCBcDQo+ICsJCQkJCQkoSVBDX1BVTklUX0JJT1NfQ01EXw0KPiBCQVNF ICsgMHgwZCkNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX1JFQURfVEVMRV9UUkFDRQko SVBDX1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgwZSkNCj4gKyNkZWZpbmUgSVBDX1BVTklU X0JJT1NfQ01EX1dSSVRFX1RFTEVfVFJBQ0UJKElQQ19QVU5JVF9CSU9TX0NNRF8NCj4gQkFTRSAr IDB4MGYpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9CSU9TX0NNRF9SRUFEX1RFTEVfRVZFTlQJKElQ Q19QVU5JVF9CSU9TX0NNRF8NCj4gQkFTRSArIDB4MTApDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9C SU9TX0NNRF9XUklURV9URUxFX0VWRU5UCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgKyAw eDExKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19DTURfUkVBRF9NT0RVTEVfVEVNUAkoSVBD X1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgxMikNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJ T1NfQ01EX1JFU0VSVkVECQkoSVBDX1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgxMykNCj4g KyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX1JFQURfVk9MVEFHRV9PVkVSCShJUENfUFVOSVRf QklPU19DTURfDQo+IEJBU0UgKyAweDE0KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19DTURf V1JJVEVfVk9MVEFHRV9PVkVSCShJUENfUFVOSVRfQklPU19DTURfDQo+IEJBU0UgKyAweDE1KQ0K PiArI2RlZmluZSBJUENfUFVOSVRfQklPU19DTURfUkVBRF9SQVRJT19PVkVSCShJUENfUFVOSVRf QklPU19DTURfDQo+IEJBU0UgKyAweDE2KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfQklPU19DTURf V1JJVEVfUkFUSU9fT1ZFUgkoSVBDX1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgxNykNCj4g KyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX1JFQURfVkZfR0xfQ1RSTAkoSVBDX1BVTklUX0JJ T1NfQ01EXw0KPiBCQVNFICsgMHgxOCkNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0JJT1NfQ01EX1dS SVRFX1ZGX0dMX0NUUkwJKElQQ19QVU5JVF9CSU9TX0NNRF8NCj4gQkFTRSArIDB4MTkpDQo+ICsj ZGVmaW5lIElQQ19QVU5JVF9CSU9TX0NNRF9SRUFEX0ZNX1NPQ19URU1QX1RIUkVTSCBcDQo+ICsJ CQkJCQkoSVBDX1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgxYSkNCj4gKyNkZWZpbmUgSVBD X1BVTklUX0JJT1NfQ01EX1dSSVRFX0ZNX1NPQ19URU1QX1RIUkVTSCBcDQo+ICsJCQkJCQkoSVBD X1BVTklUX0JJT1NfQ01EXw0KPiBCQVNFICsgMHgxYikNCj4gKw0KPiArLyogR1QgRHJpdmVyID0+ IFBjb2RlIGNvbW1hbmRzICovDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9HVERfQ01EX1pFUk8JCQko SVBDX1BVTklUX0dURF9DTURfQg0KPiBBU0UgKyAweDAwKQ0KPiArI2RlZmluZSBJUENfUFVOSVRf R1REX0NNRF9DT05GSUcJCShJUENfUFVOSVRfR1REX0NNRF9CDQo+IEFTRSArIDB4MDEpDQo+ICsj ZGVmaW5lIElQQ19QVU5JVF9HVERfQ01EX1JFQURfSUNDUF9MSUNfQ0RZTl9TQ0FMIFwNCj4gKwkJ CQkJCShJUENfUFVOSVRfR1REX0NNRF9CDQo+IEFTRSArIDB4MDIpDQo+ICsjZGVmaW5lIElQQ19Q VU5JVF9HVERfQ01EX1dSSVRFX0lDQ1BfTElDX0NEWU5fU0NBTCBcDQo+ICsJCQkJCQkoSVBDX1BV TklUX0dURF9DTURfQg0KPiBBU0UgKyAweDAzKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfR1REX0NN RF9HRVRfV01fVkFMCQkoSVBDX1BVTklUX0dURF9DTURfQg0KPiBBU0UgKyAweDA2KQ0KPiArI2Rl ZmluZSBJUENfUFVOSVRfR1REX0NNRF9XUklURV9DT05GSUdfV0lTSFJFUQkoSVBDX1BVTklUX0dU RF9DTURfQg0KPiBBU0UgKyAweDA3KQ0KPiArI2RlZmluZSBJUENfUFVOSVRfR1REX0NNRF9SRUFE X1JFUV9EVVRZX0NZQ0xFCShJUENfUFVOSVRfR1REX0NNRF9CDQo+IEFTRSArIDB4MTYpDQo+ICsj ZGVmaW5lIElQQ19QVU5JVF9HVERfQ01EX0RJU19WT0xfRlJFUV9DSEFOR0VfUkVRVUVTVCBcDQo+ ICsJCQkJCQkoSVBDX1BVTklUX0dURF9DTURfQg0KPiBBU0UgKyAweDE3KQ0KPiArI2RlZmluZSBJ UENfUFVOSVRfR1REX0NNRF9EWU5BX0RVVFlfQ1lDTEVfQ1RSTAkoSVBDX1BVTklUX0dURF9DTURf Qg0KPiBBU0UgKyAweDFhKQ0KPiArI2RlZmluZSBJUENfUFVOSVRfR1REX0NNRF9EWU5BX0RVVFlf Q1lDTEVfVFVOSU5HIFwNCj4gKwkJCQkJCShJUENfUFVOSVRfR1REX0NNRF9CDQo+IEFTRSArIDB4 MWMpDQo+ICsNCj4gKy8qIElTUCBEcml2ZXIgPT4gUGNvZGUgY29tbWFuZHMgKi8NCj4gKyNkZWZp bmUgSVBDX1BVTklUX0lTUERfQ01EX1pFUk8JCQkoSVBDX1BVTklUX0kNCj4gU1BEX0NNRF9CQVNF ICsgMHgwMCkNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0lTUERfQ01EX0NPTkZJRwkJKElQQ19QVU5J VF9JU1BEX0NNRF8NCj4gQkFTRSArIDB4MDEpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9JU1BEX0NN RF9HRVRfSVNQX0xUUl9WQUwJKElQQ19QVU5JVF9JU1BEX0NNRF8NCj4gQkFTRSArIDB4MDIpDQo+ ICsjZGVmaW5lIElQQ19QVU5JVF9JU1BEX0NNRF9BQ0NFU1NfSVVfRlJFUV9CT1VORFMgXA0KPiAr CQkJCQkJKElQQ19QVU5JVF9JU1BEX0NNRF8NCj4gQkFTRSArIDB4MDMpDQo+ICsjZGVmaW5lIElQ Q19QVU5JVF9JU1BEX0NNRF9SRUFEX0NEWU5fTEVWRUwJKElQQ19QVU5JVF9JU1BEX0NNRF8NCj4g QkFTRSArIDB4MDQpDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9JU1BEX0NNRF9XUklURV9DRFlOX0xF VkVMCShJUENfUFVOSVRfSVNQRF9DTURfDQo+IEJBU0UgKyAweDA1KQ0KPiArI2RlZmluZSBJUENf UFVOSVRfSVNQRF9DTURfTUFYCQkJKElQQ19QVU5JVF9JU1BEX0NNRF8NCj4gQkFTRSArIDB4MDYp DQo+ICsNCj4gKy8qIEVycm9yIGNvZGVzICovDQo+ICsjZGVmaW5lIElQQ19QVU5JVF9FUlJfU1VD Q0VTUwkJCTANCj4gKyNkZWZpbmUgSVBDX1BVTklUX0VSUl9JTlZBTElEX0NNRAkJMQ0KPiArI2Rl ZmluZSBJUENfUFVOSVRfRVJSX0lOVkFMSURfUEFSQU1FVEVSCQkyDQo+ICsjZGVmaW5lIElQQ19Q VU5JVF9FUlJfQ01EX1RJTUVPVVQJCTMNCj4gKyNkZWZpbmUgSVBDX1BVTklUX0VSUl9DTURfTE9D S0VECQk0DQo+ICsjZGVmaW5lIElQQ19QVU5JVF9FUlJfSU5WQUxJRF9WUl9JRAkJNQ0KPiArI2Rl ZmluZSBJUENfUFVOSVRfRVJSX1ZSX0VSUgkJCTYNCj4gKw0KPiArI2lmIElTX0VOQUJMRUQoQ09O RklHX0lOVEVMX1BVTklUX0lQQykNCj4gKw0KPiAraW50IGludGVsX3B1bml0X2lwY19zaW1wbGVf Y29tbWFuZChpbnQgY21kLCBpbnQgcGFyYTEsIGludCBwYXJhMik7DQo+ICtpbnQgaW50ZWxfcHVu aXRfaXBjX2NvbW1hbmQodTMyIGNtZCwgdTMyIHBhcmExLCB1MzIgcGFyYTIsIHUzMiAqaW4sIA0K PiB1MzIgKm91dCk7DQo+ICsNCj4gKyNlbHNlDQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50IGlu dGVsX3B1bml0X2lwY19zaW1wbGVfY29tbWFuZChpbnQgY21kLA0KPiArCQkJCQkJICBpbnQgcGFy YTEsIGludCANCj4gcGFyYTIpDQo+ICt7DQo+ICsJcmV0dXJuIC1FTk9ERVY7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbmxpbmUgaW50IGludGVsX3B1bml0X2lwY19jb21tYW5kKHUzMiBjbWQsIHUz MiBwYXJhMSwgdTMyIA0KPiBwYXJhMiwNCj4gKwkJCQkJICB1MzIgKmluLCB1MzIgKm91dCkNCj4g K3sNCj4gKwlyZXR1cm4gLUVOT0RFVjsNCj4gK30NCj4gKw0KPiArI2VuZGlmIC8qIENPTkZJR19J TlRFTF9QVU5JVF9JUEMgKi8NCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BsYXRmb3JtL3g4Ni9LY29uZmlnIA0KPiBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcN Cj4gaW5kZXggMzQ2ZjFmZC4uOTk0ODM2OSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9wbGF0Zm9y bS94ODYvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnDQo+IEBA IC04OTEsNCArODkxLDEwIEBAIGNvbmZpZyBJTlRFTF9QTUNfSVBDDQo+ICAJVGhlIFBNQyBpcyBh biBBUkMgcHJvY2Vzc29yIHdoaWNoIGRlZmluZXMgSVBDIGNvbW1hbmRzIGZvciANCj4gY29tbXVu aWNhdGlvbg0KPiAgCXdpdGggb3RoZXIgZW50aXRpZXMgaW4gdGhlIENQVS4NCj4gIA0KPiArY29u ZmlnIElOVEVMX1BVTklUX0lQQw0KPiArCXRyaXN0YXRlICJJbnRlbCBQLVVuaXQgSVBDIERyaXZl ciINCj4gKwktLS1oZWxwLS0tDQo+ICsJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZv ciBJbnRlbCBQLVVuaXQgTWFpbGJveCBJUEMgDQo+IG1lY2hhbmlzbSwNCj4gKwkgIHdoaWNoIGlz IHVzZWQgdG8gYnJpZGdlIHRoZSBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIGtlcm5lbCANCj4gYW5k IFAtVW5pdC4NCj4gKw0KPiAgZW5kaWYgIyBYODZfUExBVEZPUk1fREVWSUNFUw0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUgDQo+IGIvZHJpdmVycy9wbGF0Zm9y bS94ODYvTWFrZWZpbGUNCj4gaW5kZXggMTA1MTM3Mi4uZWVhNzY1ZiAxMDA2NDQNCj4gLS0tIGEv ZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94 ODYvTWFrZWZpbGUNCj4gQEAgLTU5LDMgKzU5LDQgQEAgb2JqLSQoQ09ORklHX0lOVEVMX1NNQVJU Q09OTkVDVCkJKz0gaW50ZWwNCj4gLXNtYXJ0Y29ubmVjdC5vDQo+ICBvYmotJChDT05GSUdfUFZQ QU5JQykgICAgICAgICAgICs9IHB2cGFuaWMubw0KPiAgb2JqLSQoQ09ORklHX0FMSUVOV0FSRV9X TUkpCSs9IGFsaWVud2FyZS13bWkubw0KPiAgb2JqLSQoQ09ORklHX0lOVEVMX1BNQ19JUEMpCSs9 IGludGVsX3BtY19pcGMubw0KPiArb2JqLSQoQ09ORklHX0lOVEVMX1BVTklUX0lQQykJKz0gaW50 ZWxfcHVuaXRfaXBjLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVs X3B1bml0X2lwYy5jIA0KPiBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3B1bml0X2lwYy5j DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjUyZWY5NzgNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9wdW5pdF9pcGMu Yw0KPiBAQCAtMCwwICsxLDM1MyBAQA0KPiArLyoNCj4gKyAqIERyaXZlciBmb3IgdGhlIEludGVs IFAtVW5pdCBNYWlsYm94IElQQyBtZWNoYW5pc20NCj4gKyAqDQo+ICsgKiAoQykgQ29weXJpZ2h0 IDIwMTUgSW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqDQo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIA0KPiBtb2RpZnkNCj4g KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzDQo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4NCj4gKyAqDQo+ICsgKiBUaGUgaGVhcnQgb2YgdGhlIFAtVW5pdCBpcyB0aGUgRm94dG9u IG1pY3JvY29udHJvbGxlciBhbmQgaXRzIA0KPiBmaXJtd2FyZSwNCj4gKyAqIHdoaWNoIHByb3Zp ZGUgbWFpbGJveCBpbnRlcmZhY2UgZm9yIHBvd2VyIG1hbmFnZW1lbnQgdXNhZ2UuDQo+ICsgKi8N Cj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Fj cGkuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Rl dmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGFzbS9pbnRlbF9wdW5pdF9pcGMu aD4NCj4gKw0KPiArLyogTWFpbGJveCByZWdpc3RlcnMgKi8NCj4gKyNkZWZpbmUgTUFJTEJPWF9E QVRBX0xPVwkJMHgwDQo+ICsjZGVmaW5lIE1BSUxCT1hfSU5URVJGQUNFCQkweDQNCj4gKyNkZWZp bmUJCUNNRF9SVU4JCQkoMSA8PCAzMSkNCj4gKyNkZWZpbmUJCUNNRF9FUlJDT0RFX01BU0sJMHhG Rg0KPiArI2RlZmluZQkJQ01EX1BBUkExX1NISUZUCQk4DQo+ICsjZGVmaW5lCQlDTURfUEFSQTJf U0hJRlQJCTE2DQo+ICsjZGVmaW5lCQlDTURfTUFTSwkJMHhGRg0KPiArI2RlZmluZSBNQUlMQk9Y X0RBVEFfSElHSAkJMHg4DQo+ICsNCj4gKyNkZWZpbmUgTUFJTEJPWF9SRUdJU1RFUl9TUEFDRQkJ MHgxMA0KPiArDQo+ICsjZGVmaW5lIENNRF9USU1FT1VUX1NFQ09ORFMJCTMNCj4gKw0KPiArLyog VGhyZWUgZXh0ZXJuYWwgbWFpbGJveCAqLw0KPiArZW51bSBtYWlsYm94X3R5cGUgew0KPiArCUJJ T1NfTUFJTEJPWCwNCj4gKwlHVERSSVZFUl9NQUlMQk9YLA0KPiArCUlTUERSSVZFUl9NQUlMQk9Y LA0KPiArCVJFU0VSVkVEX01BSUxCT1gsDQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgaW50ZWxfcHVu aXRfaXBjX2NvbnRyb2xsZXIgew0KPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQoN CkRvIG5vdCBzZWUgd2h5IHdlIG5lZWQgdG8gaGF2ZSBwb2ludGVyIHRvIHBkZXYuDQpQbGVhc2Ug Y2hhbmdlIHRvIHN0cnVjdCBkZXYgKmRldi4NCg0KPiArCXN0cnVjdCBtdXRleCBsb2NrOw0KPiAr CXZvaWQgX19pb21lbSAqYmFzZVtSRVNFUlZFRF9NQUlMQk9YXTsNCj4gKwlzdHJ1Y3QgY29tcGxl dGlvbiBjbWRfY29tcGxldGU7DQo+ICsJaW50IGlycTsNCj4gKw0KPiArCWludCBjbWQ7DQo+ICsJ ZW51bSBtYWlsYm94X3R5cGUgdHlwZTsNCj4gK30gaXBjZGV2Ow0KPiArDQoNCldoZXJlIGlzIHRo ZSBzdG9yYWdlIG9mIGlwY2RldiBzaW5nbGV0b24/DQoNCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGlw Y19yZWFkX3N0YXR1cyh2b2lkKQ0KPiArew0KPiArCXJldHVybiByZWFkbChpcGNkZXYuYmFzZVtp cGNkZXYudHlwZV0gKyBNQUlMQk9YX0lOVEVSRkFDRSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBpcGNfd3JpdGVfY21kKHUzMiBjbWQpDQo+ICt7DQo+ICsJd3JpdGVsKGNtZCwg aXBjZGV2LmJhc2VbaXBjZGV2LnR5cGVdICsgTUFJTEJPWF9JTlRFUkZBQ0UpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW5saW5lIHUzMiBpcGNfcmVhZF9kYXRhX2xvdyh2b2lkKQ0KPiArew0KPiAr CXJldHVybiByZWFkbChpcGNkZXYuYmFzZVtpcGNkZXYudHlwZV0gKyBNQUlMQk9YX0RBVEFfTE9X KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB1MzIgaXBjX3JlYWRfZGF0YV9oaWdoKHZv aWQpDQo+ICt7DQo+ICsJcmV0dXJuIHJlYWRsKGlwY2Rldi5iYXNlW2lwY2Rldi50eXBlXSArIE1B SUxCT1hfREFUQV9ISUdIKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGlwY193 cml0ZV9kYXRhX2xvdyh1MzIgZGF0YSkNCj4gK3sNCj4gKwl3cml0ZWwoZGF0YSwgaXBjZGV2LmJh c2VbaXBjZGV2LnR5cGVdICsgTUFJTEJPWF9EQVRBX0xPVyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBpcGNfd3JpdGVfZGF0YV9oaWdoKHUzMiBkYXRhKQ0KPiArew0KPiArCXdy aXRlbChkYXRhLCBpcGNkZXYuYmFzZVtpcGNkZXYudHlwZV0gKyBNQUlMQk9YX0RBVEFfSElHSCk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaW50ZWxfcHVuaXRfaXBjX3NlbmRfY29tbWFuZCh1 MzIgY21kKQ0KPiArew0KDQpTdXBwbHkgYSBwb2ludGVyIHRvIGlwY2RldiBhcyBhIHBhcmFtZXRl ciB0byB0aGlzIG9uZS4NCg0KPiArCWlwY2Rldi5jbWQgPSBjbWQ7DQo+ICsNCj4gKwljbWQgJj0g Q01EX01BU0s7DQo+ICsJaWYgKGNtZCA8IElQQ19QVU5JVF9CSU9TX0NNRF9CQVNFKQ0KPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gKwllbHNlIGlmIChjbWQgPCBJUENfUFVOSVRfR1REX0NNRF9CQVNF KQ0KPiArCQlpcGNkZXYudHlwZSA9IEJJT1NfTUFJTEJPWDsNCj4gKwllbHNlIGlmIChjbWQgPCBJ UENfUFVOSVRfSVNQRF9DTURfQkFTRSkgew0KPiArCQlpcGNkZXYudHlwZSA9IEdURFJJVkVSX01B SUxCT1g7DQo+ICsJCWlwY2Rldi5jbWQgLT0gSVBDX1BVTklUX0dURF9DTURfQkFTRTsNCj4gKwl9 IGVsc2UgaWYgKGNtZCA8IElQQ19QVU5JVF9JU1BEX0NNRF9NQVgpIHsNCj4gKwkJaXBjZGV2LnR5 cGUgPSBJU1BEUklWRVJfTUFJTEJPWDsNCj4gKwkJaXBjZGV2LmNtZCAtPSBJUENfUFVOSVRfSVNQ RF9DTURfQkFTRTsNCj4gKwl9IGVsc2UNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwly ZWluaXRfY29tcGxldGlvbigmaXBjZGV2LmNtZF9jb21wbGV0ZSk7DQo+ICsJaXBjX3dyaXRlX2Nt ZChpcGNkZXYuY21kKTsNCg0KU28sIHRoZSBhcHByb2FjaCBpcyBraW5kYSBzZXQgc29tZSBnbG9i YWwgdmFyaWFibGVzIGFuZCB1c2UgdGhlbSBvbmx5DQpmb3IgdGhpcyBvcGVyYXRpb24gYW5kIHJl YWRpbmcgc3RhdHVzIGJhY2suIEFzIEkgY2FuIHNlZSB0aGVyZSBpcyBubw0KZXhwb3J0ZWQgZnVu Y3Rpb24gdGhhdCBjYWxscyB3cml0ZV9jbWQgJiByZWFkX3N0YXR1cyBzZXBhcmF0ZWx5Lg0KDQpJ IHRoaW5rIGl0IG5lZWRzIHRvIGJlIHJlZmFjdG9yZWQuDQoNCj4gKw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgY2hhciAqaXBjX2Vycl9zdHJpbmcoaW50IGVycm9yKQ0KPiAr ew0KPiArCWlmIChlcnJvciA9PSBJUENfUFVOSVRfRVJSX1NVQ0NFU1MpDQo+ICsJCXJldHVybiAi bm8gZXJyb3IiOw0KPiArCWVsc2UgaWYgKGVycm9yID09IElQQ19QVU5JVF9FUlJfSU5WQUxJRF9D TUQpDQo+ICsJCXJldHVybiAiaW52YWxpZCBjb21tYW5kIjsNCj4gKwllbHNlIGlmIChlcnJvciA9 PSBJUENfUFVOSVRfRVJSX0lOVkFMSURfUEFSQU1FVEVSKQ0KPiArCQlyZXR1cm4gImludmFsaWQg cGFyYW1ldGVyIjsNCj4gKwllbHNlIGlmIChlcnJvciA9PSBJUENfUFVOSVRfRVJSX0NNRF9USU1F T1VUKQ0KPiArCQlyZXR1cm4gImNvbW1hbmQgdGltZW91dCI7DQo+ICsJZWxzZSBpZiAoZXJyb3Ig PT0gSVBDX1BVTklUX0VSUl9DTURfTE9DS0VEKQ0KPiArCQlyZXR1cm4gImNvbW1hbmQgbG9ja2Vk IjsNCj4gKwllbHNlIGlmIChlcnJvciA9PSBJUENfUFVOSVRfRVJSX0lOVkFMSURfVlJfSUQpDQo+ ICsJCXJldHVybiAiaW52YWxpZCB2ciBpZCI7DQo+ICsJZWxzZSBpZiAoZXJyb3IgPT0gSVBDX1BV TklUX0VSUl9WUl9FUlIpDQo+ICsJCXJldHVybiAidnIgZXJyb3IiOw0KPiArCWVsc2UNCj4gKwkJ cmV0dXJuICJ1bmtub3duIGVycm9yIjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpbnRlbF9w dW5pdF9pcGNfY2hlY2tfc3RhdHVzKHZvaWQpDQo+ICt7DQoNClBvaW50ZXIgdG8gaXBjZGV2IHNo b3VsZCBiZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIGZ1bmN0aW9uLg0KDQo+ICsJaW50IGxvb3Bz ID0gQ01EX1RJTUVPVVRfU0VDT05EUyAqIFVTRUNfUEVSX1NFQzsNCg0KU28sIHdoYXQgaXMgdGhl IHJlYXNvbmFibGUgdGltZSBmb3IgdGltZW91dD8gQW55IHJlZmVyZW5jZSB0bw0KZG9jdW1lbnRh dGlvbj8NCg0KPiArCWludCBlcnJjb2RlOw0KPiArCWludCBzdGF0dXM7DQo+ICsNCj4gKwlpZiAo aXBjZGV2LmlycSkgew0KPiArCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgNCj4g KwkJCQkmaXBjZGV2LmNtZF9jb21wbGV0ZSwNCj4gKwkJCQlDTURfVElNRU9VVF9TRUNPTkRTICog SFopKSB7DQo+ICsJCQlkZXZfZXJyKCZpcGNkZXYucGRldi0+ZGV2LA0KPiArCQkJCSJJUEMgdGlt ZWQgb3V0LCBJUENfQ01EPTB4JXhcbiIsIA0KPiBpcGNkZXYuY21kKTsNCj4gKwkJCXJldHVybiAt RVRJTUVET1VUOw0KPiArCQl9DQo+ICsJfSBlbHNlIHsNCj4gKwkJd2hpbGUgKChpcGNfcmVhZF9z dGF0dXMoKSAmIENNRF9SVU4pICYmIC0tbG9vcHMpDQo+ICsJCQl1ZGVsYXkoMSk7DQo+ICsJCWlm ICghbG9vcHMpIHsNCj4gKwkJCWRldl9lcnIoJmlwY2Rldi5wZGV2LT5kZXYsDQo+ICsJCQkJIklQ QyB0aW1lZCBvdXQsIElQQ19DTUQ9MHgleFxuIiwgDQo+IGlwY2Rldi5jbWQpOw0KPiArCQkJcmV0 dXJuIC1FVElNRURPVVQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlzdGF0dXMgPSBpcGNfcmVh ZF9zdGF0dXMoKTsNCj4gKwllcnJjb2RlID0gc3RhdHVzICYgQ01EX0VSUkNPREVfTUFTSzsNCj4g KwlpZiAoZXJyY29kZSkgew0KPiArCQlkZXZfZXJyKCZpcGNkZXYucGRldi0+ZGV2LA0KPiArCQkJ IklQQyBmYWlsZWQ6ICVzLCBJUENfU1RTPTB4JXgsIA0KPiBJUENfQ01EPTB4JXhcbiIsDQo+ICsJ CQlpcGNfZXJyX3N0cmluZyhlcnJjb2RlKSwgc3RhdHVzLCANCj4gaXBjZGV2LmNtZCk7DQo+ICsJ CXJldHVybiAtRUlPOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIGludGVsX3B1bml0X2lwY19zaW1wbGVfY29tbWFuZCgpIC0gU2ltcGxlIElQQyBj b21tYW5kDQo+ICsgKiBAY21kOglJUEMgY29tbWFuZCBjb2RlLg0KPiArICogQHBhcmExOglGaXJz dCA4Yml0IHBhcmFtZXRlciwgc2V0IDAgaWYgbm90IHVzZWQuDQo+ICsgKiBAcGFyYTI6CVNlY29u ZCA4Yml0IHBhcmFtZXRlciwgc2V0IDAgaWYgbm90IHVzZWQuDQo+ICsgKg0KPiArICogU2VuZCBh IElQQyBjb21tYW5kIHRvIFAtVW5pdCB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgdHJhbnNhY3Rpb24N Cj4gKyAqDQo+ICsgKiBSZXR1cm46CUlQQyBlcnJvciBjb2RlIG9yIDAgb24gc3VjY2Vzcy4NCj4g KyAqLw0KPiAraW50IGludGVsX3B1bml0X2lwY19zaW1wbGVfY29tbWFuZChpbnQgY21kLCBpbnQg cGFyYTEsIGludCBwYXJhMikNCj4gK3sNCg0KRG8gaGVyZSBzb21ldGhpbmcgbGlrZQ0KIHN0cnVj dCBpcGNkZXYgKmQgPSAmaXBjZGV2Ow0KYW5kIHVzZSBkIGluIHRoZSBmdW5jdGlvbi4NCg0KPiAr CWludCByZXQ7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZpcGNkZXYubG9jayk7DQo+ICsJcmV0ID0g aW50ZWxfcHVuaXRfaXBjX3NlbmRfY29tbWFuZChDTURfUlVOIHwNCj4gKwkJCQkJICAgcGFyYTIg PDwgQ01EX1BBUkEyX1NISUZUIA0KPiB8DQo+ICsJCQkJCSAgIHBhcmExIDw8IENNRF9QQVJBMV9T SElGVCANCj4gfCBjbWQpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gb3V0Ow0KPiArCXJldCA9 IGludGVsX3B1bml0X2lwY19jaGVja19zdGF0dXMoKTsNCj4gK291dDoNCj4gKwltdXRleF91bmxv Y2soJmlwY2Rldi5sb2NrKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJP TChpbnRlbF9wdW5pdF9pcGNfc2ltcGxlX2NvbW1hbmQpOw0KPiArDQo+ICsvKioNCj4gKyAqIGlu dGVsX3B1bml0X2lwY19jb21tYW5kKCkgLSBJUEMgY29tbWFuZCB3aXRoIGRhdGEgYW5kIHBvaW50 ZXJzDQo+ICsgKiBAY21kOglJUEMgY29tbWFuZCBjb2RlLg0KPiArICogQHBhcmExOglGaXJzdCA4 Yml0IHBhcmFtZXRlciwgc2V0IDAgaWYgbm90IHVzZWQuDQo+ICsgKiBAcGFyYTI6CVNlY29uZCA4 Yml0IHBhcmFtZXRlciwgc2V0IDAgaWYgbm90IHVzZWQuDQo+ICsgKiBAaW46CQlJbnB1dCBkYXRh LCAzMmJpdCBmb3IgQklPUyBjbWQsIHR3byAzMmJpdCANCj4gZm9yIEdURCBhbmQgSVNQRC4NCj4g KyAqIEBvdXQ6CU91dHB1dCBkYXRhLg0KPiArICoNCj4gKyAqIFNlbmQgYSBJUEMgY29tbWFuZCB0 byBQLVVuaXQgd2l0aCBkYXRhIHRyYW5zYWN0aW9uDQo+ICsgKg0KPiArICogUmV0dXJuOglJUEMg ZXJyb3IgY29kZSBvciAwIG9uIHN1Y2Nlc3MuDQo+ICsgKi8NCj4gK2ludCBpbnRlbF9wdW5pdF9p cGNfY29tbWFuZCh1MzIgY21kLCB1MzIgcGFyYTEsIHUzMiBwYXJhMiwgdTMyICppbiwgDQo+IHUz MiAqb3V0KQ0KPiArew0KDQpEaXR0by4NCg0KPiArCWludCByZXQ7DQo+ICsNCj4gKwltdXRleF9s b2NrKCZpcGNkZXYubG9jayk7DQoNClNvLCAgd2hvIHdpbGwgc2V0IHR5cGUgYW5kIG90aGVyIGZp ZWxkcyBiZWZvcmUgc2VuZGluZyBjb21tYW5kPw0KDQo+ICsJaXBjX3dyaXRlX2RhdGFfbG93KCpp bik7DQoNCj4gKwlpZiAoaXBjZGV2LnR5cGUgPT0gR1REUklWRVJfTUFJTEJPWCB8fA0KPiArCQkJ aXBjZGV2LnR5cGUgPT0gSVNQRFJJVkVSX01BSUxCT1gpIHsNCg0KDQo+ICsJCWluKys7DQo+ICsJ CWlwY193cml0ZV9kYXRhX2hpZ2goKmluKTsNCg0KKCorK2luKQ0KDQo+ICsJfQ0KPiArCXJldCA9 IGludGVsX3B1bml0X2lwY19zZW5kX2NvbW1hbmQoQ01EX1JVTiB8DQo+ICsJCQkJCSAgIHBhcmEy IDw8IENNRF9QQVJBMl9TSElGVCANCj4gfA0KPiArCQkJCQkgICBwYXJhMSA8PCBDTURfUEFSQTFf U0hJRlQgDQo+IHwgY21kKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIG91dDsNCj4gKwlyZXQg PSBpbnRlbF9wdW5pdF9pcGNfY2hlY2tfc3RhdHVzKCk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290 byBvdXQ7DQo+ICsJKm91dCA9IGlwY19yZWFkX2RhdGFfbG93KCk7DQo+ICsJaWYgKGlwY2Rldi50 eXBlID09IEdURFJJVkVSX01BSUxCT1ggfHwNCj4gKwkJCWlwY2Rldi50eXBlID09IElTUERSSVZF Ul9NQUlMQk9YKSB7DQo+ICsJCW91dCsrOw0KPiArCQkqb3V0ID0gaXBjX3JlYWRfZGF0YV9oaWdo KCk7DQoNCiorK291dCA9IA0KDQo+ICsJfQ0KPiArb3V0Og0KPiArCW11dGV4X3VubG9jaygmaXBj ZGV2LmxvY2spOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChp bnRlbF9wdW5pdF9pcGNfY29tbWFuZCk7DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRl bF9wdW5pdF9pb2MoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KPiArew0KPiArCWNvbXBsZXRlKCZp cGNkZXYuY21kX2NvbXBsZXRlKTsNCj4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgaW50ZWxfcHVuaXRfZ2V0X2JhcnMoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczAsICpyZXMxOw0KPiArCXZv aWQgX19pb21lbSAqYWRkcjsNCj4gKwlpbnQgc2l6ZTsNCj4gKw0KPiArCXJlczAgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KPiArCWlmICghcmVzMCkg ew0KPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGlvbWVtIA0KPiByZXNv dXJjZVxuIik7DQo+ICsJCXJldHVybiAtRU5YSU87DQo+ICsJfQ0KPiArCXNpemUgPSByZXNvdXJj ZV9zaXplKHJlczApOw0KPiArCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRl diwgcmVzMC0+c3RhcnQsDQo+ICsJCQkJICAgICBzaXplLCBwZGV2LT5uYW1lKSkgew0KPiArCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpb21lbSANCj4gcmVzb3VjZVxu Iik7DQo+ICsJCXJldHVybiAtRUJVU1k7DQo+ICsJfQ0KPiArDQo+ICsJcmVzMSA9IHBsYXRmb3Jt X2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7DQo+ICsJaWYgKCFyZXMxKSB7 DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgaW9tZW0gDQo+IHJlc291 cmNlMVxuIik7DQo+ICsJCXJldHVybiAtRU5YSU87DQo+ICsJfQ0KPiArCXNpemUgPSByZXNvdXJj ZV9zaXplKHJlczEpOw0KPiArCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRl diwgcmVzMS0+c3RhcnQsDQo+ICsJCQkJICAgICBzaXplLCBwZGV2LT5uYW1lKSkgew0KPiArCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpb21lbSANCj4gcmVzb3VjZTFc biIpOw0KPiArCQlyZXR1cm4gLUVCVVNZOw0KPiArCX0NCj4gKw0KPiArCWFkZHIgPSBpb3JlbWFw X25vY2FjaGUocmVzMC0+c3RhcnQsDQo+ICsJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShyZXMwKSAr IA0KPiByZXNvdXJjZV9zaXplKHJlczEpKTsNCg0KU28sIEknbSBub3Qgc3RpbGwgY29udmluY2Vk IGJ5IHRoaXMgYXBwcm9hY2guDQpDYW4geW91IHByb3ZpZGUgdGhlIGFjdHVhbCBjb250ZW50IG9m IHRoZSBiYXJzIGZyb20gdGhlIEhXPw0KDQpBbHNvIHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhbiBl eGNlcnB0IGZyb20gdGhlIFBVbml0IGRvY3VtZW50YXRpb24gdGhhdA0KZXhwbGFpbnMgcmVnaXN0 ZXIgbWFwcGluZyBhbmQgbWFpbGJveGVzLg0KDQo+ICsJaWYgKCFhZGRyKSB7DQo+ICsJCWRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGlwYyBiYXNlXG4iKTsNCj4gKwkJcmV0 dXJuICAtRU5PTUVNOw0KPiArCX0NCj4gKwlpcGNkZXYuYmFzZVtCSU9TX01BSUxCT1hdID0gYWRk cjsNCj4gKwlhZGRyICs9IE1BSUxCT1hfUkVHSVNURVJfU1BBQ0U7DQo+ICsJaXBjZGV2LmJhc2Vb R1REUklWRVJfTUFJTEJPWF0gPSBhZGRyOw0KPiArCWFkZHIgKz0gTUFJTEJPWF9SRUdJU1RFUl9T UEFDRTsNCj4gKwlpcGNkZXYuYmFzZVtJU1BEUklWRVJfTUFJTEJPWF0gPSBhZGRyOw0KPiArDQo+ ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaW50ZWxfcHVuaXRfaXBjX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJaW50IGlycSwgcmV0 Ow0KPiArDQo+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gKwlpZiAoaXJx IDwgMCkgew0KPiArCQlpcGNkZXYuaXJxID0gMDsNCj4gKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwg IkludmFsaWQgSVJRXG4iKTsNCg0KU28sIGlzIGl0IG5vdCBmYXRhbCBlcnJvcj8gRG8gd2UgaGF2 ZSBoYXJkd2FyZSBiZWhhdmVzIGxpa2UgaW4gYm90aA0KY2FzZXM/DQoNCj4gKwl9IGVsc2Ugew0K PiArCQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgDQo+IGludGVsX3B1 bml0X2lvYywNCj4gKwkJCQkgICAgICAgSVJRRl9OT19TVVNQRU5ELCANCj4gImludGVsX3B1bml0 X2lwYyIsDQo+ICsJCQkJICAgICAgICZpcGNkZXYpOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJCQlk ZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnE6IA0KPiAlZFxuIiwgaXJx KTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwkJaXBjZGV2LmlycSA9IGlycTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXQgPSBpbnRlbF9wdW5pdF9nZXRfYmFycyhwZGV2KTsNCj4gKwlpZiAo cmV0KQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCWlwY2Rldi5wZGV2ID0gcGRldjsNCj4gKwlt dXRleF9pbml0KCZpcGNkZXYubG9jayk7DQo+ICsJaW5pdF9jb21wbGV0aW9uKCZpcGNkZXYuY21k X2NvbXBsZXRlKTsNCj4gKw0KPiArb3V0Og0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgaW50ZWxfcHVuaXRfaXBjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQ0KPiArew0KDQpLZWVwIHBvaW50ZXIgdG8gaXBjZGV2IGFzIGEgcGxhdGZvcm0gZHJp dmVyIGRhdGEuDQoNCj4gKwlpb3VubWFwKGlwY2Rldi5iYXNlW0JJT1NfTUFJTEJPWF0pOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9k ZXZpY2VfaWQgcHVuaXRfaXBjX2FjcGlfaWRzW10gPSB7DQo+ICsJeyJJTlQzNEQ0IiwgMH0NCj4g K307DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGludGVsX3B1bml0X2lw Y19kcml2ZXIgPSB7DQo+ICsJLnByb2JlID0gaW50ZWxfcHVuaXRfaXBjX3Byb2JlLA0KPiArCS5y ZW1vdmUgPSBpbnRlbF9wdW5pdF9pcGNfcmVtb3ZlLA0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5u YW1lID0gImludGVsX3B1bml0X2lwYyIsDQo+ICsJCS5hY3BpX21hdGNoX3RhYmxlID0gQUNQSV9Q VFIocHVuaXRfaXBjX2FjcGlfaWRzKSwNCj4gKwl9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlu dCBfX2luaXQgaW50ZWxfcHVuaXRfaXBjX2luaXQodm9pZCkNCj4gK3sNCj4gKwlyZXR1cm4gcGxh dGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbnRlbF9wdW5pdF9pcGNfZHJpdmVyKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgX19leGl0IGludGVsX3B1bml0X2lwY19leGl0KHZvaWQpDQo+ICt7 DQo+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmludGVsX3B1bml0X2lwY19kcml2ZXIp Ow0KPiArfQ0KPiArDQo+ICtNT0RVTEVfQVVUSE9SKCJaaGEgUWlwZW5nIDxxaXBlbmcuemhhQGlu dGVsLmNvbT4iKTsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgUC1Vbml0IElQQyBkcml2 ZXIiKTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4gKw0KPiArLyogU29tZSBtb2R1 bGVzIGFyZSBkZXBlbmRlbnQgb24gdGhpcywgc28gaW5pdCBlYXJsaWVyICovDQo+ICtmc19pbml0 Y2FsbChpbnRlbF9wdW5pdF9pcGNfaW5pdCk7DQo+ICttb2R1bGVfZXhpdChpbnRlbF9wdW5pdF9p cGNfZXhpdCk7DQoNCi0tIA0KQW5keSBTaGV2Y2hlbmtvIDxhbmRyaXkuc2hldmNoZW5rb0BpbnRl bC5jb20+DQpJbnRlbCBGaW5sYW5kIE95Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbnRlbCBGaW5sYW5kIE95ClJl Z2lzdGVyZWQgQWRkcmVzczogUEwgMjgxLCAwMDE4MSBIZWxzaW5raSAKQnVzaW5lc3MgSWRlbnRp dHkgQ29kZTogMDM1NzYwNiAtIDQgCkRvbWljaWxlZCBpbiBIZWxzaW5raSAKClRoaXMgZS1tYWls IGFuZCBhbnkgYXR0YWNobWVudHMgbWF5IGNvbnRhaW4gY29uZmlkZW50aWFsIG1hdGVyaWFsIGZv cgp0aGUgc29sZSB1c2Ugb2YgdGhlIGludGVuZGVkIHJlY2lwaWVudChzKS4gQW55IHJldmlldyBv ciBkaXN0cmlidXRpb24KYnkgb3RoZXJzIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIElmIHlvdSBh cmUgbm90IHRoZSBpbnRlbmRlZApyZWNpcGllbnQsIHBsZWFzZSBjb250YWN0IHRoZSBzZW5kZXIg YW5kIGRlbGV0ZSBhbGwgY29waWVzLgo=