From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Russell, Kent" Subject: RE: [PATCH 4/5] drm/amdgpu: Add fan RPM setting via sysfs Date: Fri, 5 Oct 2018 15:55:22 +0000 Message-ID: References: <1538288279-11428-1-git-send-email-Rex.Zhu@amd.com> <1538288279-11428-4-git-send-email-Rex.Zhu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Zhu, Rex" , "Deucher, Alexander" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" VGhhbmtzLCBJIHVuZGVyc3RhbmQuIFRoaXMgdGhyZXcgb2ZmIG9uZSBvZiBvdXIgYXV0b21hdGVk IHRlc3RzIHRoYXQgc3VkZGVubHkgY291bGRuJ3QgcmVhZCB0aGUgdmFsdWUgb2YgdGhlIFJQTXMg YmVjYXVzZSB0aGUgZmFuIGNvbnRyb2wgd2Fzbid0IHNldCB0byBtYW51YWwgYXQgdGhlIHRpbWUu ICANCiANCiBLZW50IA0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogWmh1LCBS ZXggDQpTZW50OiBGcmlkYXksIE9jdG9iZXIgMDUsIDIwMTggMTE6NTMgQU0NClRvOiBSdXNzZWxs LCBLZW50IDxLZW50LlJ1c3NlbGxAYW1kLmNvbT47IERldWNoZXIsIEFsZXhhbmRlciA8QWxleGFu ZGVyLkRldWNoZXJAYW1kLmNvbT47IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQpTdWJq ZWN0OiBSRTogW1BBVENIIDQvNV0gZHJtL2FtZGdwdTogQWRkIGZhbiBSUE0gc2V0dGluZyB2aWEg c3lzZnMNCg0KSW4gb3JkZXIgdG8gZm9sbG93IHRoZSBzdGFuZGFyZCBzeXNmcyBpbnRlcmZhY2Vz IGZvciBod21vbjoNCg0KZmFuWzEtKl1fZW5hYmxlDQoJCUVuYWJsZSBvciBkaXNhYmxlIHRoZSBz ZW5zb3JzLg0KCQlXaGVuIGRpc2FibGVkIHRoZSBzZW5zb3IgcmVhZCB3aWxsIHJldHVybiAtRU5P REFUQS4NCgkJMTogRW5hYmxlDQoJCTA6IERpc2FibGUNCgkJUlcNCg0KV2hlbiBlbmFibGUsIHdl IHNldCB0aGUgZmFuIGNvbnRyb2wgbW9kZSB0byBNYW51YWwuDQpEaXNhYmxlLCB3ZSBzZXQgdGhl IGZhbiBjb250cm9sIG1vZGUgdG8gQXV0by4NCg0KUmVnYXJkcw0KUmV4DQoNCj4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUnVzc2VsbCwgS2VudA0KPiBTZW50OiBGcmlkYXks IE9jdG9iZXIgNSwgMjAxOCAxMDo0MCBQTQ0KPiBUbzogWmh1LCBSZXggPFJleC5aaHVAYW1kLmNv bT47IERldWNoZXIsIEFsZXhhbmRlciANCj4gPEFsZXhhbmRlci5EZXVjaGVyQGFtZC5jb20+OyBh bWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBTdWJqZWN0OiBSRTogW1BBVENIIDQvNV0g ZHJtL2FtZGdwdTogQWRkIGZhbiBSUE0gc2V0dGluZyB2aWEgc3lzZnMNCj4gDQo+IFNvcnJ5LCBJ IGp1c3Qgc2F3IHNvbWV0aGluZyB3aXRoIHRoaXMgYW5kIGhhZCBhIHF1ZXN0aW9uLiBXaHkgZG9l cyB0aGUgDQo+IGZhbiBjb250cm9sIGhhdmUgdG8gYmUgc2V0IHRvIG1hbnVhbCB0byByZWFkIHRo ZSBSUE1zPyAgSSB1bmRlcnN0YW5kIA0KPiB0aGF0IGl0IG5lZWRzIHRvIGJlIG1hbnVhbCB0byBz ZXQgdGhlIFJQTXMsIGJ1dCB3aHkgd291bGQgd2UgbmVlZCB0aGF0IA0KPiB0byByZWFkIHRoZSBj dXJyZW50IFJQTXM/DQo+IA0KPiAgS2VudA0KPiANCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gRnJvbTogYW1kLWdmeCA8YW1kLWdmeC1ib3VuY2VzQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zz4gT24gQmVoYWxmIE9mIA0KPiBaaHUsIFJleA0KPiBTZW50OiBNb25kYXksIE9jdG9iZXIgMDEs IDIwMTggOTozNCBBTQ0KPiBUbzogRGV1Y2hlciwgQWxleGFuZGVyIDxBbGV4YW5kZXIuRGV1Y2hl ckBhbWQuY29tPjsgYW1kLSANCj4gZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBTdWJqZWN0 OiBSRTogW1BBVENIIDQvNV0gZHJtL2FtZGdwdTogQWRkIGZhbiBSUE0gc2V0dGluZyB2aWEgc3lz ZnMNCj4gDQo+IA0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206 IERldWNoZXIsIEFsZXhhbmRlcg0KPiA+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAxLCAyMDE4IDk6 MTYgUE0NCj4gPiBUbzogWmh1LCBSZXggPFJleC5aaHVAYW1kLmNvbT47IGFtZC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnDQo+ID4gQ2M6IFpodSwgUmV4IDxSZXguWmh1QGFtZC5jb20+DQo+ID4g U3ViamVjdDogUkU6IFtQQVRDSCA0LzVdIGRybS9hbWRncHU6IEFkZCBmYW4gUlBNIHNldHRpbmcg dmlhIHN5c2ZzDQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBG cm9tOiBhbWQtZ2Z4IDxhbWQtZ2Z4LWJvdW5jZXNAbGlzdHMuZnJlZWRlc2t0b3Aub3JnPiBPbiBC ZWhhbGYgT2YgDQo+ID4gPiBSZXggWmh1DQo+ID4gPiBTZW50OiBTdW5kYXksIFNlcHRlbWJlciAz MCwgMjAxOCAyOjE4IEFNDQo+ID4gPiBUbzogYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcN Cj4gPiA+IENjOiBaaHUsIFJleCA8UmV4LlpodUBhbWQuY29tPg0KPiA+ID4gU3ViamVjdDogW1BB VENIIDQvNV0gZHJtL2FtZGdwdTogQWRkIGZhbiBSUE0gc2V0dGluZyB2aWEgc3lzZnMNCj4gPiA+ DQo+ID4gPiBBZGQgZmFuMV90YXJnZXQgZm9yIGdldC9zZXQgZmFuIHNwZWVkIGluIFJQTSB1bml0 IEFkZCANCj4gPiA+IGZhbjFfbWluL2ZhbjFfbWF4IGZvciBnZXQgbWluLCBtYXggZmFuIHNwZWVk IGluIFJQTSB1bml0IEFkZCANCj4gPiA+IGZhbjFfZW5hYmxlIHRvIGVuYWJsZS9kaXNhYmxlIHRo ZSBmYW4xIHNlbnNvcg0KPiA+ID4NCj4gPiA+IHYyOiBxdWVyeSB0aGUgbWluL21heCBycG0gZ3B1 IHN1cHBvcnQgaW5zdGFuZCBvZiBoYXJkY29kZS4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5 OiBSZXggWmh1IDxSZXguWmh1QGFtZC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ICBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHBtLmggICAgICAgIHwgICAzICsNCj4gPiA+ICBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYyAgICAgICAgIHwgMTkwDQo+ID4gPiAr KysrKysrKysrKysrKysrKysrKysrKystDQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNs dWRlL2tnZF9wcF9pbnRlcmZhY2UuaCB8ICAgMSArDQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jICB8ICAxOSArKysNCj4gPiA+ICA0IGZpbGVzIGNo YW5nZWQsIDIxMCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KPiA+ID4NCj4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHBtLmgNCj4gPiA+ IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RwbS5oDQo+ID4gPiBpbmRleCA0 MjU2OGFlLi5mOTcyY2QxIDEwMDY0NA0KPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2RwbS5oDQo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfZHBtLmgNCj4gPiA+IEBAIC0yNzgsNiArMjc4LDkgQEAgZW51bSBhbWRncHVfcGNp ZV9nZW4geyAgI2RlZmluZSANCj4gPiA+IGFtZGdwdV9kcG1fZ2V0X2Zhbl9zcGVlZF9ycG0oYWRl diwgcykgXA0KPiA+ID4gIAkJKChhZGV2KS0+cG93ZXJwbGF5LnBwX2Z1bmNzLQ0KPiA+ID4gPmdl dF9mYW5fc3BlZWRfcnBtKSgoYWRldiktPnBvd2VycGxheS5wcF9oYW5kbGUsIChzKSkNCj4gPiA+ DQo+ID4gPiArI2RlZmluZSBhbWRncHVfZHBtX3NldF9mYW5fc3BlZWRfcnBtKGFkZXYsIHMpIFwN Cj4gPiA+ICsNCj4gPiA+ICsoKGFkZXYpLT5wb3dlcnBsYXkucHBfZnVuY3MtPnNldF9mYW5fc3Bl ZWRfcnBtKSgoYWRldiktDQo+ID4gPiA+cG93ZXJwbGF5LnBwX2hhDQo+ID4gPiArbmRsZSwgKHMp KQ0KPiA+ID4gKw0KPiA+ID4gICNkZWZpbmUgYW1kZ3B1X2RwbV9nZXRfc2NsayhhZGV2LCBsKSBc DQo+ID4gPiAgCQkoKGFkZXYpLT5wb3dlcnBsYXkucHBfZnVuY3MtPmdldF9zY2xrKChhZGV2KS0N Cj4gPiA+ID5wb3dlcnBsYXkucHBfaGFuZGxlLCAobCkpKQ0KPiA+ID4NCj4gPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYw0KPiA+ID4gYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfcG0uYw0KPiA+ID4gaW5kZXggMThkOTg5ZS4u MWQ4NTcwNiAxMDA2NDQNCj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9wbS5jDQo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf cG0uYw0KPiA+ID4gQEAgLTExNzIsNiArMTE3MiwxMSBAQCBzdGF0aWMgc3NpemVfdCANCj4gPiA+ IGFtZGdwdV9od21vbl9nZXRfZmFuMV9pbnB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gPiAg CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4g PiAgCWludCBlcnI7DQo+ID4gPiAgCXUzMiBzcGVlZCA9IDA7DQo+ID4gPiArCXUzMiBwd21fbW9k ZTsNCj4gPiA+ICsNCj4gPiA+ICsJcHdtX21vZGUgPSBhbWRncHVfZHBtX2dldF9mYW5fY29udHJv bF9tb2RlKGFkZXYpOw0KPiA+ID4gKwlpZiAocHdtX21vZGUgIT0gQU1EX0ZBTl9DVFJMX01BTlVB TCkNCj4gPiA+ICsJCXJldHVybiAtRU5PREFUQTsNCj4gPiA+DQo+ID4gPiAgCS8qIENhbid0IGFk anVzdCBmYW4gd2hlbiB0aGUgY2FyZCBpcyBvZmYgKi8NCj4gPiA+ICAJaWYgICgoYWRldi0+Zmxh Z3MgJiBBTURfSVNfUFgpICYmIEBAIC0xMTg3LDYgKzExOTIsMTUzIEBAIHN0YXRpYyANCj4gPiA+ IHNzaXplX3QgYW1kZ3B1X2h3bW9uX2dldF9mYW4xX2lucHV0KHN0cnVjdCBkZXZpY2UgKmRldiwN Cj4gPiA+ICAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHNwZWVkKTsgIH0NCj4gPiA+DQo+ ID4gPiArc3RhdGljIHNzaXplX3QgYW1kZ3B1X2h3bW9uX2dldF9mYW4xX21pbihzdHJ1Y3QgZGV2 aWNlICpkZXYsDQo+ID4gPiArCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ ID4gPiArCQkJCQkgY2hhciAqYnVmKQ0KPiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiA+ICsJdTMyIG1pbl9ycG0g PSAwOw0KPiA+ID4gKwl1MzIgc2l6ZSA9IHNpemVvZihtaW5fcnBtKTsNCj4gPiA+ICsJaW50IHI7 DQo+ID4gPiArDQo+ID4gPiArCWlmICghYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzLT5yZWFkX3Nl bnNvcikNCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4gKw0KPiA+ID4gKwlyID0gYW1k Z3B1X2RwbV9yZWFkX3NlbnNvcihhZGV2LA0KPiA+ID4gQU1ER1BVX1BQX1NFTlNPUl9NSU5fRkFO X1JQTSwNCj4gPiA+ICsJCQkJICAgKHZvaWQgKikmbWluX3JwbSwgJnNpemUpOw0KPiA+ID4gKwlp ZiAocikNCj4gPiA+ICsJCXJldHVybiByOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gc25wcmlu dGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgbWluX3JwbSk7IH0NCj4gPiA+ICsNCj4gPiA+ICtz dGF0aWMgc3NpemVfdCBhbWRncHVfaHdtb25fZ2V0X2ZhbjFfbWF4KHN0cnVjdCBkZXZpY2UgKmRl diwNCj4gPiA+ICsJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiA+ICsJ CQkJCSBjaGFyICpidWYpDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ID4gKwl1MzIgbWF4X3JwbSA9IDA7DQo+ ID4gPiArCXUzMiBzaXplID0gc2l6ZW9mKG1heF9ycG0pOw0KPiA+ID4gKwlpbnQgcjsNCj4gPiA+ ICsNCj4gPiA+ICsJaWYgKCFhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPnJlYWRfc2Vuc29yKQ0K PiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArDQo+ID4gPiArCXIgPSBhbWRncHVfZHBt X3JlYWRfc2Vuc29yKGFkZXYsDQo+ID4gPiBBTURHUFVfUFBfU0VOU09SX01BWF9GQU5fUlBNLA0K PiA+ID4gKwkJCQkgICAodm9pZCAqKSZtYXhfcnBtLCAmc2l6ZSk7DQo+ID4gPiArCWlmIChyKQ0K PiA+ID4gKwkJcmV0dXJuIHI7DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiBzbnByaW50ZihidWYs IFBBR0VfU0laRSwgIiVkXG4iLCBtYXhfcnBtKTsgfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBz c2l6ZV90IGFtZGdwdV9od21vbl9nZXRfZmFuMV90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2LA0K PiA+ID4gKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ID4gPiArCQkJ CQkgICBjaGFyICpidWYpDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ID4gKwlpbnQgZXJyOw0KPiA+ID4gKwl1 MzIgcnBtID0gMDsNCj4gPiA+ICsJdTMyIHB3bV9tb2RlOw0KPiA+ID4gKw0KPiA+ID4gKwlwd21f bW9kZSA9IGFtZGdwdV9kcG1fZ2V0X2Zhbl9jb250cm9sX21vZGUoYWRldik7DQo+ID4gPiArCWlm IChwd21fbW9kZSAhPSBBTURfRkFOX0NUUkxfTUFOVUFMKQ0KPiA+ID4gKwkJcmV0dXJuIC1FTk9E QVRBOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBDYW4ndCBhZGp1c3QgZmFuIHdoZW4gdGhlIGNhcmQg aXMgb2ZmICovDQo+ID4gPiArCWlmICAoKGFkZXYtPmZsYWdzICYgQU1EX0lTX1BYKSAmJg0KPiA+ ID4gKwkgICAgIChhZGV2LT5kZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgIT0NCj4gPiA+IERSTV9T V0lUQ0hfUE9XRVJfT04pKQ0KPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArDQo+ID4g PiArCWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPmdldF9mYW5fc3BlZWRfcnBtKSB7DQo+ ID4gPiArCQllcnIgPSBhbWRncHVfZHBtX2dldF9mYW5fc3BlZWRfcnBtKGFkZXYsICZycG0pOw0K PiA+ID4gKwkJaWYgKGVycikNCj4gPiA+ICsJCQlyZXR1cm4gZXJyOw0KPiA+ID4gKwl9DQo+ID4g PiArDQo+ID4gPiArCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBycG0pOyB9DQo+ID4gPiAr DQo+ID4gPiArc3RhdGljIHNzaXplX3QgYW1kZ3B1X2h3bW9uX3NldF9mYW4xX3RhcmdldChzdHJ1 Y3QgZGV2aWNlICpkZXYsDQo+ID4gPiArCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsDQo+ID4gPiArCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIHsN Cj4gPiA+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsNCj4gPiA+ICsJaW50IGVycjsNCj4gPiA+ICsJdTMyIHZhbHVlOw0KPiA+ID4gKwl1MzIgcHdt X21vZGU7DQo+ID4gPiArDQo+ID4gPiArCXB3bV9tb2RlID0gYW1kZ3B1X2RwbV9nZXRfZmFuX2Nv bnRyb2xfbW9kZShhZGV2KTsNCj4gPiA+ICsJaWYgKHB3bV9tb2RlICE9IEFNRF9GQU5fQ1RSTF9N QU5VQUwpDQo+ID4gPiArCQlyZXR1cm4gLUVOT0RBVEE7DQo+ID4gPiArDQo+ID4gPiArCS8qIENh bid0IGFkanVzdCBmYW4gd2hlbiB0aGUgY2FyZCBpcyBvZmYgKi8NCj4gPiA+ICsJaWYgICgoYWRl di0+ZmxhZ3MgJiBBTURfSVNfUFgpICYmDQo+ID4gPiArCSAgICAgKGFkZXYtPmRkZXYtPnN3aXRj aF9wb3dlcl9zdGF0ZSAhPQ0KPiA+ID4gRFJNX1NXSVRDSF9QT1dFUl9PTikpDQo+ID4gPiArCQly ZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsNCj4gPiA+ICsJZXJyID0ga3N0cnRvdTMyKGJ1ZiwgMTAs ICZ2YWx1ZSk7DQo+ID4gPiArCWlmIChlcnIpDQo+ID4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ID4g Kw0KPiA+ID4gKwlpZiAoYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNzLT5zZXRfZmFuX3NwZWVkX3Jw bSkgew0KPiA+ID4gKwkJZXJyID0gYW1kZ3B1X2RwbV9zZXRfZmFuX3NwZWVkX3JwbShhZGV2LCB2 YWx1ZSk7DQo+ID4gPiArCQlpZiAoZXJyKQ0KPiA+ID4gKwkJCXJldHVybiBlcnI7DQo+ID4gPiAr CX0NCj4gPiA+ICsNCj4gPiA+ICsJcmV0dXJuIGNvdW50Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4g PiA+ICtzdGF0aWMgc3NpemVfdCBhbWRncHVfaHdtb25fZ2V0X2ZhbjFfZW5hYmxlKHN0cnVjdCBk ZXZpY2UgKmRldiwNCj4gPiA+ICsJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0 ciwNCj4gPiA+ICsJCQkJCSAgICBjaGFyICpidWYpDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ID4gKwl1MzIg cHdtX21vZGUgPSAwOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoIWFkZXYtPnBvd2VycGxheS5wcF9m dW5jcy0+Z2V0X2Zhbl9jb250cm9sX21vZGUpDQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g PiA+ICsNCj4gPiA+ICsJcHdtX21vZGUgPSBhbWRncHVfZHBtX2dldF9mYW5fY29udHJvbF9tb2Rl KGFkZXYpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcHdt X21vZGUgPT0gQU1EX0ZBTl9DVFJMX0FVVE8gPw0KPiA+ID4gMCA6IDEpOyB9DQo+ID4gPiArDQo+ ID4gPiArc3RhdGljIHNzaXplX3QgYW1kZ3B1X2h3bW9uX3NldF9mYW4xX2VuYWJsZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsDQo+ID4gPiArCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0 dHIsDQo+ID4gPiArCQkJCQkgICAgY29uc3QgY2hhciAqYnVmLA0KPiA+ID4gKwkJCQkJICAgIHNp emVfdCBjb3VudCkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gPiArCWludCBlcnI7DQo+ID4gPiArCWludCB2 YWx1ZTsNCj4gPiA+ICsJdTMyIHB3bV9tb2RlOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBDYW4ndCBh ZGp1c3QgZmFuIHdoZW4gdGhlIGNhcmQgaXMgb2ZmICovDQo+ID4gPiArCWlmICAoKGFkZXYtPmZs YWdzICYgQU1EX0lTX1BYKSAmJg0KPiA+ID4gKwkgICAgIChhZGV2LT5kZGV2LT5zd2l0Y2hfcG93 ZXJfc3RhdGUgIT0NCj4gPiA+IERSTV9TV0lUQ0hfUE9XRVJfT04pKQ0KPiA+ID4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gPiArDQo+ID4gPiArCWlmICghYWRldi0+cG93ZXJwbGF5LnBwX2Z1bmNz LT5zZXRfZmFuX2NvbnRyb2xfbW9kZSkNCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ID4g Kw0KPiA+ID4gKwllcnIgPSBrc3RydG9pbnQoYnVmLCAxMCwgJnZhbHVlKTsNCj4gPiA+ICsJaWYg KGVycikNCj4gPiA+ICsJCXJldHVybiBlcnI7DQo+ID4gPiArDQo+ID4gPiArCWlmICh2YWx1ZSA9 PSAwKQ0KPiA+ID4gKwkJcHdtX21vZGUgPSBBTURfRkFOX0NUUkxfQVVUTzsNCj4gPiA+ICsJZWxz ZSBpZiAodmFsdWUgPT0gMSkNCj4gPiA+ICsJCXB3bV9tb2RlID0gQU1EX0ZBTl9DVFJMX01BTlVB TDsNCj4gPiA+ICsJZWxzZQ0KPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gPiArDQo+ID4g PiArCWFtZGdwdV9kcG1fc2V0X2Zhbl9jb250cm9sX21vZGUoYWRldiwgcHdtX21vZGUpOw0KPiA+ ID4gKw0KPiA+ID4gKwlyZXR1cm4gY291bnQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gIHN0 YXRpYyBzc2l6ZV90IGFtZGdwdV9od21vbl9zaG93X3ZkZGdmeChzdHJ1Y3QgZGV2aWNlICpkZXYs DQo+ID4gPiAgCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiA+ICAJCQkJ CWNoYXIgKmJ1ZikNCj4gPiA+IEBAIC0xNDA2LDggKzE1NTgsMTYgQEAgc3RhdGljIHNzaXplX3Qg DQo+ID4gPiBhbWRncHVfaHdtb25fc2V0X3Bvd2VyX2NhcChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ ID4gPiAgICoNCj4gPiA+ICAgKiAtIHB3bTFfbWF4OiBwdWxzZSB3aWR0aCBtb2R1bGF0aW9uIGZh biBjb250cm9sIG1heGltdW0gbGV2ZWwgKDI1NSkNCj4gPiA+ICAgKg0KPiA+ID4gKyAqIC0gZmFu MV9taW46IGFuIG1pbmltdW0gdmFsdWUgVW5pdDogcmV2b2x1dGlvbi9taW4gKFJQTSkgKDApDQo+ ID4gPiArICoNCj4gPiA+ICsgKiAtIGZhbjFfbWF4OiBhbiBtYXhtdW0gdmFsdWUgVW5pdDogcmV2 b2x1dGlvbi9tYXggKFJQTSkgKDYwMDApDQo+ID4gPiArICoNCj4gPg0KPiA+IFRoZSBtaW4gYW5k IG1heCBtYXkgbm90IGFsd2F5cyBiZSAwIGFuZCA2MDAwOyBpdCBkZXBlbmRzIG9uIHRoZSANCj4g PiBib2FyZCBJSVJDLiAgUHJvYmFibHkgYmV0dGVyIHRvIGRyb3AgdGhlICgwKSBhbmQgKDYwMDAp Lg0KPiANCj4gSSBmb3Jnb3QgdG8gZHJvcCB0aGlzIGhhcmRjb2RlIHZhbHVlICBpbiBjb21tZW50 cy4NCj4gVGhhbmtzIGZvciBwb2ludGluZyBvdXQgdGhpcy4NCj4gV2lsbCBkcm9wIHRoZSB2YWx1 ZSBpbiBWMy4NCj4gDQo+IFJleA0KPiANCj4gPiBBbGV4DQo+ID4NCj4gPiA+ICAgKiAtIGZhbjFf aW5wdXQ6IGZhbiBzcGVlZCBpbiBSUE0NCj4gPiA+ICAgKg0KPiA+ID4gKyAqIC0gZmFuWzEtKl1f dGFyZ2V0OiBEZXNpcmVkIGZhbiBzcGVlZCBVbml0OiByZXZvbHV0aW9uL21pbiANCj4gPiA+ICsg KFJQTSkNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIC0gZmFuWzEtKl1fZW5hYmxlOiBFbmFibGUgb3Ig ZGlzYWJsZSB0aGUgc2Vuc29ycy4xOiBFbmFibGUgMDoNCj4gPiA+ICsgRGlzYWJsZQ0KPiA+ID4g KyAqDQo+ID4gPiAgICogWW91IGNhbiB1c2UgaHdtb24gdG9vbHMgbGlrZSBzZW5zb3JzIHRvIHZp ZXcgdGhpcyBpbmZvcm1hdGlvbiANCj4gPiA+IG9uIHlvdXIgc3lzdGVtLg0KPiA+ID4gICAqDQo+ ID4gPiAgICovDQo+ID4gPiBAQCAtMTQyMCw2ICsxNTgwLDEwIEBAIHN0YXRpYyBzc2l6ZV90IA0K PiA+ID4gYW1kZ3B1X2h3bW9uX3NldF9wb3dlcl9jYXAoc3RydWN0IGRldmljZSAqZGV2LCAgc3Rh dGljIA0KPiA+ID4gU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfbWluLCBTX0lSVUdPLA0KPiA+IGFt ZGdwdV9od21vbl9nZXRfcHdtMV9taW4sIE5VTEwsDQo+ID4gPiAwKTsgIHN0YXRpYyBTRU5TT1Jf REVWSUNFX0FUVFIocHdtMV9tYXgsIFNfSVJVR08sIA0KPiA+ID4gYW1kZ3B1X2h3bW9uX2dldF9w d20xX21heCwgTlVMTCwgMCk7ICBzdGF0aWMgDQo+ID4gPiBTRU5TT1JfREVWSUNFX0FUVFIoZmFu MV9pbnB1dCwgU19JUlVHTywNCj4gPiBhbWRncHVfaHdtb25fZ2V0X2ZhbjFfaW5wdXQsDQo+ID4g PiBOVUxMLCAwKTsNCj4gPiA+ICtzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfbWluLCBT X0lSVUdPLA0KPiA+ID4gYW1kZ3B1X2h3bW9uX2dldF9mYW4xX21pbiwNCj4gPiA+ICtOVUxMLCAw KTsgc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX21heCwgU19JUlVHTywgDQo+ID4gPiAr YW1kZ3B1X2h3bW9uX2dldF9mYW4xX21heCwgTlVMTCwgMCk7IHN0YXRpYyANCj4gPiA+ICtTRU5T T1JfREVWSUNFX0FUVFIoZmFuMV90YXJnZXQsIFNfSVJVR08gfCBTX0lXVVNSLCANCj4gPiA+ICth bWRncHVfaHdtb25fZ2V0X2ZhbjFfdGFyZ2V0LCBhbWRncHVfaHdtb25fc2V0X2ZhbjFfdGFyZ2V0 LA0KPiAwKTsNCj4gPiA+IHN0YXRpYw0KPiA+ID4gK1NFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2Vu YWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsIA0KPiA+ID4gK2FtZGdwdV9od21vbl9nZXRfZmFuMV9l bmFibGUsIGFtZGdwdV9od21vbl9zZXRfZmFuMV9lbmFibGUsDQo+ID4gPiAwKTsNCj4gPiA+ICBz dGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMF9pbnB1dCwgU19JUlVHTywgDQo+ID4gPiBhbWRn cHVfaHdtb25fc2hvd192ZGRnZngsIE5VTEwsIDApOyAgc3RhdGljIA0KPiA+ID4gU0VOU09SX0RF VklDRV9BVFRSKGluMF9sYWJlbCwgU19JUlVHTywNCj4gPiBhbWRncHVfaHdtb25fc2hvd192ZGRn ZnhfbGFiZWwsDQo+ID4gPiBOVUxMLCAwKTsgIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4x X2lucHV0LCBTX0lSVUdPLCANCj4gPiA+IGFtZGdwdV9od21vbl9zaG93X3ZkZG5iLCBOVUxMLCAw KTsgQEAgLTE0MzgsNiArMTYwMiwxMCBAQA0KPiBzdGF0aWMNCj4gPiA+IHNzaXplX3QgYW1kZ3B1 X2h3bW9uX3NldF9wb3dlcl9jYXAoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ID4gIAkmc2Vuc29y X2Rldl9hdHRyX3B3bTFfbWluLmRldl9hdHRyLmF0dHIsDQo+ID4gPiAgCSZzZW5zb3JfZGV2X2F0 dHJfcHdtMV9tYXguZGV2X2F0dHIuYXR0ciwNCj4gPiA+ICAJJnNlbnNvcl9kZXZfYXR0cl9mYW4x X2lucHV0LmRldl9hdHRyLmF0dHIsDQo+ID4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4u ZGV2X2F0dHIuYXR0ciwNCj4gPiA+ICsJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21heC5kZXZfYXR0 ci5hdHRyLA0KPiA+ID4gKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfdGFyZ2V0LmRldl9hdHRyLmF0 dHIsDQo+ID4gPiArCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9lbmFibGUuZGV2X2F0dHIuYXR0ciwN Cj4gPiA+ICAJJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIuYXR0ciwNCj4gPiA+ ICAJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbGFiZWwuZGV2X2F0dHIuYXR0ciwNCj4gPiA+ICAJJnNl bnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwNCj4gPiA+IEBAIC0xNDU2LDEz ICsxNjI0LDE2IEBAIHN0YXRpYyB1bW9kZV90DQo+ID4gaHdtb25fYXR0cmlidXRlc192aXNpYmxl KHN0cnVjdA0KPiA+ID4ga29iamVjdCAqa29iaiwNCj4gPiA+ICAJc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiA+ICAJdW1vZGVfdCBlZmZlY3Rp dmVfbW9kZSA9IGF0dHItPm1vZGU7DQo+ID4gPg0KPiA+ID4gLQ0KPiA+ID4gIAkvKiBTa2lwIGZh biBhdHRyaWJ1dGVzIGlmIGZhbiBpcyBub3QgcHJlc2VudCAqLw0KPiA+ID4gIAlpZiAoYWRldi0+ cG0ubm9fZmFuICYmIChhdHRyID09DQo+ID4gPiAmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0 dHIuYXR0ciB8fA0KPiA+ID4gIAkgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5h YmxlLmRldl9hdHRyLmF0dHIgfHwNCj4gPiA+ICAJICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0 cl9wd20xX21heC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4gPiAgCSAgICBhdHRyID09ICZzZW5zb3Jf ZGV2X2F0dHJfcHdtMV9taW4uZGV2X2F0dHIuYXR0ciB8fA0KPiA+ID4gLQkgICAgYXR0ciA9PSAm c2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0cikpDQo+ID4gPiArCSAgICBh dHRyID09ICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4g PiArCSAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciB8 fA0KPiA+ID4gKwkgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWF4LmRldl9hdHRy LmF0dHIgfHwNCj4gPiA+ICsJICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX3Rhcmdl dC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4gPiArCSAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJf ZmFuMV9lbmFibGUuZGV2X2F0dHIuYXR0cikpDQo+ID4gPiAgCQlyZXR1cm4gMDsNCj4gPiA+DQo+ ID4gPiAgCS8qIFNraXAgbGltaXQgYXR0cmlidXRlcyBpZiBEUE0gaXMgbm90IGVuYWJsZWQgKi8g QEAgLTE0NzIsNw0KPiA+ID4gKzE2NDMsMTIgQEAgc3RhdGljIHVtb2RlX3QgaHdtb25fYXR0cmli dXRlc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0DQo+ID4gKmtvYmosDQo+ID4gPiAgCSAgICAgYXR0 ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciB8fA0KPiA+ID4gIAkgICAg IGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyIHx8DQo+ ID4gPiAgCSAgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3B3bTFfbWF4LmRldl9hdHRyLmF0 dHIgfHwNCj4gPiA+IC0JICAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfcHdtMV9taW4uZGV2 X2F0dHIuYXR0cikpDQo+ID4gPiArCSAgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX3B3bTFf bWluLmRldl9hdHRyLmF0dHIgfHwNCj4gPiA+ICsJICAgICBhdHRyID09ICZzZW5zb3JfZGV2X2F0 dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4gPiArCSAgICAgYXR0ciA9PSAmc2Vu c29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIgfHwNCj4gPiA+ICsJICAgICBhdHRy ID09ICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9tYXguZGV2X2F0dHIuYXR0ciB8fA0KPiA+ID4gKwkg ICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX3RhcmdldC5kZXZfYXR0ci5hdHRyIHx8 DQo+ID4gPiArCSAgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZW5hYmxlLmRldl9h dHRyLmF0dHIpKQ0KPiA+ID4gIAkJcmV0dXJuIDA7DQo+ID4gPg0KPiA+ID4gIAkvKiBtYXNrIGZh biBhdHRyaWJ1dGVzIGlmIHdlIGhhdmUgbm8gYmluZGluZ3MgZm9yIHRoaXMgYXNpYyB0byANCj4g PiA+IGV4cG9zZSAqLyBAQCAtMTQ5NywxMCArMTY3MywxOCBAQCBzdGF0aWMgdW1vZGVfdCANCj4g PiA+IGh3bW9uX2F0dHJpYnV0ZXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwNCj4gPiA+ ICAJLyogaGlkZSBtYXgvbWluIHZhbHVlcyBpZiB3ZSBjYW4ndCBib3RoIHF1ZXJ5IGFuZCBtYW5h Z2UgdGhlIGZhbiAqLw0KPiA+ID4gIAlpZiAoKCFhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPnNl dF9mYW5fc3BlZWRfcGVyY2VudCAmJg0KPiA+ID4gIAkgICAgICFhZGV2LT5wb3dlcnBsYXkucHBf ZnVuY3MtPmdldF9mYW5fc3BlZWRfcGVyY2VudCkgJiYNCj4gPiA+ICsJICAgICAoIWFkZXYtPnBv d2VycGxheS5wcF9mdW5jcy0+c2V0X2Zhbl9zcGVlZF9ycG0gJiYNCj4gPiA+ICsJICAgICAhYWRl di0+cG93ZXJwbGF5LnBwX2Z1bmNzLT5nZXRfZmFuX3NwZWVkX3JwbSkgJiYNCj4gPiA+ICAJICAg IChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfcHdtMV9tYXguZGV2X2F0dHIuYXR0ciB8fA0KPiA+ ID4gIAkgICAgIGF0dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9wd20xX21pbi5kZXZfYXR0ci5hdHRy KSkNCj4gPiA+ICAJCXJldHVybiAwOw0KPiA+ID4NCj4gPiA+ICsJaWYgKCghYWRldi0+cG93ZXJw bGF5LnBwX2Z1bmNzLT5zZXRfZmFuX3NwZWVkX3JwbSAmJg0KPiA+ID4gKwkgICAgICFhZGV2LT5w b3dlcnBsYXkucHBfZnVuY3MtPmdldF9mYW5fc3BlZWRfcnBtKSAmJg0KPiA+ID4gKwkgICAgKGF0 dHIgPT0gJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21heC5kZXZfYXR0ci5hdHRyIHx8DQo+ID4gPiAr CSAgICAgYXR0ciA9PSAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIpKQ0K PiA+ID4gKwkJcmV0dXJuIDA7DQo+ID4gPiArDQo+ID4gPiAgCS8qIG9ubHkgQVBVcyBoYXZlIHZk ZG5iICovDQo+ID4gPiAgCWlmICghKGFkZXYtPmZsYWdzICYgQU1EX0lTX0FQVSkgJiYNCj4gPiA+ ICAJICAgIChhdHRyID09ICZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIg fHwgZGlmZiANCj4gPiA+IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9w cF9pbnRlcmZhY2UuaA0KPiA+ID4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUva2dkX3Bw X2ludGVyZmFjZS5oDQo+ID4gPiBpbmRleCA5NzAwMWE2Li45ODBlNjk2IDEwMDY0NA0KPiA+ID4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9wcF9pbnRlcmZhY2UuaA0KPiA+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9wcF9pbnRlcmZhY2UuaA0K PiA+ID4gQEAgLTIzMCw2ICsyMzAsNyBAQCBzdHJ1Y3QgYW1kX3BtX2Z1bmNzIHsNCj4gPiA+ICAJ ZW51bSBhbWRfZHBtX2ZvcmNlZF9sZXZlbCAoKmdldF9wZXJmb3JtYW5jZV9sZXZlbCkodm9pZA0K PiA+ICpoYW5kbGUpOw0KPiA+ID4gIAllbnVtIGFtZF9wbV9zdGF0ZV90eXBlICgqZ2V0X2N1cnJl bnRfcG93ZXJfc3RhdGUpKHZvaWQNCj4gPiAqaGFuZGxlKTsNCj4gPiA+ICAJaW50ICgqZ2V0X2Zh bl9zcGVlZF9ycG0pKHZvaWQgKmhhbmRsZSwgdWludDMyX3QgKnJwbSk7DQo+ID4gPiArCWludCAo KnNldF9mYW5fc3BlZWRfcnBtKSh2b2lkICpoYW5kbGUsIHVpbnQzMl90IHJwbSk7DQo+ID4gPiAg CWludCAoKmdldF9wcF9udW1fc3RhdGVzKSh2b2lkICpoYW5kbGUsIHN0cnVjdCBwcF9zdGF0ZXNf aW5mbyAqZGF0YSk7DQo+ID4gPiAgCWludCAoKmdldF9wcF90YWJsZSkodm9pZCAqaGFuZGxlLCBj aGFyICoqdGFibGUpOw0KPiA+ID4gIAlpbnQgKCpzZXRfcHBfdGFibGUpKHZvaWQgKmhhbmRsZSwg Y29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7IA0KPiA+ID4gZGlmZiAtLSBnaXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9hbWRfcG93ZXJwbGF5LmMNCj4gPiA+IGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvYW1kX3Bvd2VycGxheS5jDQo+ID4gPiBpbmRleCAwNTNj NDg1Li45ZDhmYTJlIDEwMDY0NA0KPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvYW1kX3Bvd2VycGxheS5jDQo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bv d2VycGxheS9hbWRfcG93ZXJwbGF5LmMNCj4gPiA+IEBAIC01NzYsNiArNTc2LDI0IEBAIHN0YXRp YyBpbnQgcHBfZHBtX2dldF9mYW5fc3BlZWRfcnBtKHZvaWQNCj4gPiAqaGFuZGxlLA0KPiA+ID4g dWludDMyX3QgKnJwbSkNCj4gPiA+ICAJcmV0dXJuIHJldDsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ ID4gK3N0YXRpYyBpbnQgcHBfZHBtX3NldF9mYW5fc3BlZWRfcnBtKHZvaWQgKmhhbmRsZSwgdWlu dDMyX3QgcnBtKSB7DQo+ID4gPiArCXN0cnVjdCBwcF9od21nciAqaHdtZ3IgPSBoYW5kbGU7DQo+ ID4gPiArCWludCByZXQgPSAwOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoIWh3bWdyIHx8ICFod21n ci0+cG1fZW4pDQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsNCj4gPiA+ICsJaWYg KGh3bWdyLT5od21ncl9mdW5jLT5zZXRfZmFuX3NwZWVkX3JwbSA9PSBOVUxMKSB7DQo+ID4gPiAr CQlwcl9pbmZvKCIlcyB3YXMgbm90IGltcGxlbWVudGVkLlxuIiwgX19mdW5jX18pOw0KPiA+ID4g KwkJcmV0dXJuIDA7DQo+ID4gPiArCX0NCj4gPiA+ICsJbXV0ZXhfbG9jaygmaHdtZ3ItPnNtdV9s b2NrKTsNCj4gPiA+ICsJcmV0ID0gaHdtZ3ItPmh3bWdyX2Z1bmMtPnNldF9mYW5fc3BlZWRfcnBt KGh3bWdyLCBycG0pOw0KPiA+ID4gKwltdXRleF91bmxvY2soJmh3bWdyLT5zbXVfbG9jayk7DQo+ ID4gPiArCXJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gIHN0YXRpYyBpbnQg cHBfZHBtX2dldF9wcF9udW1fc3RhdGVzKHZvaWQgKmhhbmRsZSwNCj4gPiA+ICAJCXN0cnVjdCBw cF9zdGF0ZXNfaW5mbyAqZGF0YSkNCj4gPiA+ICB7DQo+ID4gPiBAQCAtMTI5Nyw2ICsxMzE1LDcg QEAgc3RhdGljIGludCBwcF9lbmFibGVfbWdwdV9mYW5fYm9vc3Qodm9pZA0KPiA+ID4gKmhhbmRs ZSkNCj4gPiA+ICAJLnNldF9mYW5fc3BlZWRfcGVyY2VudCA9IHBwX2RwbV9zZXRfZmFuX3NwZWVk X3BlcmNlbnQsDQo+ID4gPiAgCS5nZXRfZmFuX3NwZWVkX3BlcmNlbnQgPSBwcF9kcG1fZ2V0X2Zh bl9zcGVlZF9wZXJjZW50LA0KPiA+ID4gIAkuZ2V0X2Zhbl9zcGVlZF9ycG0gPSBwcF9kcG1fZ2V0 X2Zhbl9zcGVlZF9ycG0sDQo+ID4gPiArCS5zZXRfZmFuX3NwZWVkX3JwbSA9IHBwX2RwbV9zZXRf ZmFuX3NwZWVkX3JwbSwNCj4gPiA+ICAJLmdldF9wcF9udW1fc3RhdGVzID0gcHBfZHBtX2dldF9w cF9udW1fc3RhdGVzLA0KPiA+ID4gIAkuZ2V0X3BwX3RhYmxlID0gcHBfZHBtX2dldF9wcF90YWJs ZSwNCj4gPiA+ICAJLnNldF9wcF90YWJsZSA9IHBwX2RwbV9zZXRfcHBfdGFibGUsDQo+ID4gPiAt LQ0KPiA+ID4gMS45LjENCj4gPiA+DQo+ID4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KPiA+ID4gYW1kLWdmeCBtYWlsaW5nIGxpc3QNCj4gPiA+IGFt ZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngNCj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QNCj4gYW1k LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2FtZC1nZngK