From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Philip" Subject: Re: [PATCH 3/3] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v6 Date: Mon, 14 Jan 2019 15:33:44 +0000 Message-ID: <1997fd69-942a-bcbe-0de4-d359061f12a6@amd.com> References: <20190110170228.10917-1-Philip.Yang@amd.com> <20190110170228.10917-3-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190110170228.10917-3-Philip.Yang-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US Content-ID: 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: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" UGluZyBDaHJpc3RpYW4sIGFueSBjb21tZW50cyBmb3IgdGhlIEdFTSBhbmQgQ1MgcGFydCBjaGFu Z2VzPw0KDQpUaGFua3MuIFBoaWxpcA0KDQpPbiAyMDE5LTAxLTEwIDEyOjAyIHAubS4sIFlhbmcs IFBoaWxpcCB3cm90ZToNCj4gVXNlIEhNTSBoZWxwZXIgZnVuY3Rpb24gaG1tX3ZtYV9mYXVsdCgp IHRvIGdldCBwaHlzaWNhbCBwYWdlcyBiYWNraW5nDQo+IHVzZXJwdHIgYW5kIHN0YXJ0IENQVSBw YWdlIHRhYmxlIHVwZGF0ZSB0cmFjayBvZiB0aG9zZSBwYWdlcy4gVGhlbiB1c2UNCj4gaG1tX3Zt YV9yYW5nZV9kb25lKCkgdG8gY2hlY2sgaWYgdGhvc2UgcGFnZXMgYXJlIHVwZGF0ZWQgYmVmb3Jl DQo+IGFtZGdwdV9jc19zdWJtaXQgZm9yIGdmeCBvciBiZWZvcmUgdXNlciBxdWV1ZXMgYXJlIHJl c3VtZWQgZm9yIGtmZC4NCj4gDQo+IElmIHVzZXJwdHIgcGFnZXMgYXJlIHVwZGF0ZWQsIGZvciBn ZngsIGFtZGdwdV9jc19pb2N0bCB3aWxsIHJlc3RhcnQNCj4gZnJvbSBzY3JhdGNoLCBmb3Iga2Zk LCByZXN0b3JlIHdvcmtlciBpcyByZXNjaGVkdWxlZCB0byByZXRyeS4NCj4gDQo+IEhNTSBzaW1w bGlmeSB0aGUgQ1BVIHBhZ2UgdGFibGUgY29uY3VycmVudCB1cGRhdGUgY2hlY2ssIHNvIHJlbW92 ZQ0KPiBndXB0YXNrbG9jaywgbW11X2ludmFsaWRhdGlvbnMsIGxhc3Rfc2V0X3BhZ2VzIGZpZWxk cyBmcm9tDQo+IGFtZGdwdV90dG1fdHQgc3RydWN0Lg0KPiANCj4gSE1NIGRvZXMgbm90IHBpbiB0 aGUgcGFnZSAoaW5jcmVhc2UgcGFnZSByZWYgY291bnQpLCBzbyByZW1vdmUgcmVsYXRlZA0KPiBv cGVyYXRpb25zIGxpa2UgcmVsZWFzZV9wYWdlcygpLCBwdXRfcGFnZSgpLCBtYXJrX3BhZ2VfZGly dHkoKS4NCj4gDQo+IENoYW5nZS1JZDogSTJlOGMwYzZmMGQ4YzIxZTU1OTZhMzJkN2ZjOTE3NjI3 NzhiYzllNjcNCj4gU2lnbmVkLW9mZi1ieTogUGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFtZC5j b20+DQo+IC0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQu aCAgICB8ICAgMSAtDQo+ICAgLi4uL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dw dXZtLmMgIHwgIDk1ICsrKy0tLS0tLS0NCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfYm9fbGlzdC5oICAgfCAgIDIgKy0NCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfY3MuYyAgICAgICAgfCAxNTggKysrKysrKy0tLS0tLS0tLQ0KPiAgIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyAgICAgICB8ICAxNCArLQ0KPiAgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jICAgICAgICB8ICAyNSArKy0NCj4gICBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaCAgICAgICAgfCAgIDQgKy0NCj4g ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgICAgICAgfCAxNzMgKysr KysrKystLS0tLS0tLS0tDQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0 bS5oICAgICAgIHwgICAzICstDQo+ICAgOSBmaWxlcyBjaGFuZ2VkLCAxOTggaW5zZXJ0aW9ucygr KSwgMjc3IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9hbWRrZmQuaA0KPiBpbmRleCAwYjMxYTE4NTkwMjMuLjBlMTcxMWE3NWI2OCAxMDA2NDQN Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oDQo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaA0KPiBAQCAtNjEs NyArNjEsNiBAQCBzdHJ1Y3Qga2dkX21lbSB7DQo+ICAgDQo+ICAgCWF0b21pY190IGludmFsaWQ7 DQo+ICAgCXN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm87DQo+IC0Jc3Ry dWN0IHBhZ2UgKip1c2VyX3BhZ2VzOw0KPiAgIA0KPiAgIAlzdHJ1Y3QgYW1kZ3B1X3N5bmMgc3lu YzsNCj4gICANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9hbWRrZmRfZ3B1dm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRr ZmRfZ3B1dm0uYw0KPiBpbmRleCBkN2IxMGQ3OWYxZGUuLmFlMmQ4MzhkMzFlYSAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jDQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYw0K PiBAQCAtNTgyLDI4ICs1ODIsMTIgQEAgc3RhdGljIGludCBpbml0X3VzZXJfcGFnZXMoc3RydWN0 IGtnZF9tZW0gKm1lbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sDQo+ICAgCQlnb3RvIG91dDsNCj4g ICAJfQ0KPiAgIA0KPiAtCS8qIElmIG5vIHJlc3RvcmUgd29ya2VyIGlzIHJ1bm5pbmcgY29uY3Vy cmVudGx5LCB1c2VyX3BhZ2VzDQo+IC0JICogc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQNCj4gLQkg Ki8NCj4gLQlXQVJOKG1lbS0+dXNlcl9wYWdlcywgIkxlYWtpbmcgdXNlcl9wYWdlcyBhcnJheSIp Ow0KPiAtDQo+IC0JbWVtLT51c2VyX3BhZ2VzID0ga3ZtYWxsb2NfYXJyYXkoYm8tPnRiby50dG0t Pm51bV9wYWdlcywNCj4gLQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBwYWdlICopLA0KPiAtCQkJCQkg ICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7DQo+IC0JaWYgKCFtZW0tPnVzZXJfcGFnZXMpIHsN Cj4gLQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHBhZ2VzIGFycmF5XG4iLCBfX2Z1 bmNfXyk7DQo+IC0JCXJldCA9IC1FTk9NRU07DQo+IC0JCWdvdG8gdW5yZWdpc3Rlcl9vdXQ7DQo+ IC0JfQ0KPiAtDQo+IC0JcmV0ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhiby0+dGJv LnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsNCj4gKwlyZXQgPSBhbWRncHVfdHRtX3R0X2dldF91c2Vy X3BhZ2VzKGJvLT50Ym8udHRtLCBiby0+dGJvLnR0bS0+cGFnZXMpOw0KPiAgIAlpZiAocmV0KSB7 DQo+ICAgCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IHVzZXIgcGFnZXM6ICVkXG4iLCBfX2Z1 bmNfXywgcmV0KTsNCj4gLQkJZ290byBmcmVlX291dDsNCj4gKwkJZ290byB1bnJlZ2lzdGVyX291 dDsNCj4gICAJfQ0KPiAgIA0KPiAtCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoYm8tPnRi by50dG0sIG1lbS0+dXNlcl9wYWdlcyk7DQo+IC0NCj4gICAJcmV0ID0gYW1kZ3B1X2JvX3Jlc2Vy dmUoYm8sIHRydWUpOw0KPiAgIAlpZiAocmV0KSB7DQo+ICAgCQlwcl9lcnIoIiVzOiBGYWlsZWQg dG8gcmVzZXJ2ZSBCT1xuIiwgX19mdW5jX18pOw0KPiBAQCAtNjE2LDExICs2MDAsNyBAQCBzdGF0 aWMgaW50IGluaXRfdXNlcl9wYWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCBzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwNCj4gICAJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7DQo+ICAgDQo+ICAgcmVsZWFz ZV9vdXQ6DQo+IC0JaWYgKHJldCkNCj4gLQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMs IGJvLT50Ym8udHRtLT5udW1fcGFnZXMpOw0KPiAtZnJlZV9vdXQ6DQo+IC0Ja3ZmcmVlKG1lbS0+ dXNlcl9wYWdlcyk7DQo+IC0JbWVtLT51c2VyX3BhZ2VzID0gTlVMTDsNCj4gKwlhbWRncHVfdHRt X3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOw0KPiAgIHVucmVnaXN0ZXJfb3V0 Og0KPiAgIAlpZiAocmV0KQ0KPiAgIAkJYW1kZ3B1X21uX3VucmVnaXN0ZXIoYm8pOw0KPiBAQCAt Njc5LDcgKzY1OSw2IEBAIHN0YXRpYyBpbnQgcmVzZXJ2ZV9ib19hbmRfdm0oc3RydWN0IGtnZF9t ZW0gKm1lbSwNCj4gICAJY3R4LT5rZmRfYm8ucHJpb3JpdHkgPSAwOw0KPiAgIAljdHgtPmtmZF9i by50di5ibyA9ICZiby0+dGJvOw0KPiAgIAljdHgtPmtmZF9iby50di5udW1fc2hhcmVkID0gMTsN Cj4gLQljdHgtPmtmZF9iby51c2VyX3BhZ2VzID0gTlVMTDsNCj4gICAJbGlzdF9hZGQoJmN0eC0+ a2ZkX2JvLnR2LmhlYWQsICZjdHgtPmxpc3QpOw0KPiAgIA0KPiAgIAlhbWRncHVfdm1fZ2V0X3Bk X2JvKHZtLCAmY3R4LT5saXN0LCAmY3R4LT52bV9wZFswXSk7DQo+IEBAIC03NDMsNyArNzIyLDYg QEAgc3RhdGljIGludCByZXNlcnZlX2JvX2FuZF9jb25kX3ZtcyhzdHJ1Y3Qga2dkX21lbSAqbWVt LA0KPiAgIAljdHgtPmtmZF9iby5wcmlvcml0eSA9IDA7DQo+ICAgCWN0eC0+a2ZkX2JvLnR2LmJv ID0gJmJvLT50Ym87DQo+ICAgCWN0eC0+a2ZkX2JvLnR2Lm51bV9zaGFyZWQgPSAxOw0KPiAtCWN0 eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOw0KPiAgIAlsaXN0X2FkZCgmY3R4LT5rZmRfYm8u dHYuaGVhZCwgJmN0eC0+bGlzdCk7DQo+ICAgDQo+ICAgCWkgPSAwOw0KPiBAQCAtMTM3MSwxNSAr MTM0OSw2IEBAIGludCBhbWRncHVfYW1ka2ZkX2dwdXZtX2ZyZWVfbWVtb3J5X29mX2dwdSgNCj4g ICAJbGlzdF9kZWwoJmJvX2xpc3RfZW50cnktPmhlYWQpOw0KPiAgIAltdXRleF91bmxvY2soJnBy b2Nlc3NfaW5mby0+bG9jayk7DQo+ICAgDQo+IC0JLyogRnJlZSB1c2VyIHBhZ2VzIGlmIG5lY2Vz c2FyeSAqLw0KPiAtCWlmIChtZW0tPnVzZXJfcGFnZXMpIHsNCj4gLQkJcHJfZGVidWcoIiVzOiBG cmVlaW5nIHVzZXJfcGFnZXMgYXJyYXlcbiIsIF9fZnVuY19fKTsNCj4gLQkJaWYgKG1lbS0+dXNl cl9wYWdlc1swXSkNCj4gLQkJCXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLA0KPiAtCQkJ CQltZW0tPmJvLT50Ym8udHRtLT5udW1fcGFnZXMpOw0KPiAtCQlrdmZyZWUobWVtLT51c2VyX3Bh Z2VzKTsNCj4gLQl9DQo+IC0NCj4gICAJcmV0ID0gcmVzZXJ2ZV9ib19hbmRfY29uZF92bXMobWVt LCBOVUxMLCBCT19WTV9BTEwsICZjdHgpOw0KPiAgIAlpZiAodW5saWtlbHkocmV0KSkNCj4gICAJ CXJldHVybiByZXQ7DQo+IEBAIC0xODU1LDI1ICsxODI0LDExIEBAIHN0YXRpYyBpbnQgdXBkYXRl X2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19p bmZvLA0KPiAgIA0KPiAgIAkJYm8gPSBtZW0tPmJvOw0KPiAgIA0KPiAtCQlpZiAoIW1lbS0+dXNl cl9wYWdlcykgew0KPiAtCQkJbWVtLT51c2VyX3BhZ2VzID0NCj4gLQkJCQlrdm1hbGxvY19hcnJh eShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLA0KPiAtCQkJCQkJIHNpemVvZihzdHJ1Y3QgcGFnZSAq KSwNCj4gLQkJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7DQo+IC0JCQlpZiAoIW1lbS0+ dXNlcl9wYWdlcykgew0KPiAtCQkJCXByX2VycigiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYWdl cyBhcnJheVxuIiwNCj4gLQkJCQkgICAgICAgX19mdW5jX18pOw0KPiAtCQkJCXJldHVybiAtRU5P TUVNOw0KPiAtCQkJfQ0KPiAtCQl9IGVsc2UgaWYgKG1lbS0+dXNlcl9wYWdlc1swXSkgew0KPiAt CQkJcmVsZWFzZV9wYWdlcyhtZW0tPnVzZXJfcGFnZXMsIGJvLT50Ym8udHRtLT5udW1fcGFnZXMp Ow0KPiAtCQl9DQo+IC0NCj4gICAJCS8qIEdldCB1cGRhdGVkIHVzZXIgcGFnZXMgKi8NCj4gICAJ CXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sDQo+IC0JCQkJ CQkgICBtZW0tPnVzZXJfcGFnZXMpOw0KPiArCQkJCQkJICAgYm8tPnRiby50dG0tPnBhZ2VzKTsN Cj4gICAJCWlmIChyZXQpIHsNCj4gLQkJCW1lbS0+dXNlcl9wYWdlc1swXSA9IE5VTEw7DQo+ICsJ CQliby0+dGJvLnR0bS0+cGFnZXNbMF0gPSBOVUxMOw0KPiAgIAkJCXByX2luZm8oIiVzOiBGYWls ZWQgdG8gZ2V0IHVzZXIgcGFnZXM6ICVkXG4iLA0KPiAgIAkJCQlfX2Z1bmNfXywgcmV0KTsNCj4g ICAJCQkvKiBQcmV0ZW5kIGl0IHN1Y2NlZWRlZC4gSXQgd2lsbCBmYWlsIGxhdGVyDQo+IEBAIC0x ODgyLDEyICsxODM3LDYgQEAgc3RhdGljIGludCB1cGRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0 cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8sDQo+ICAgCQkJICogc3RhbGxl ZCB1c2VyIG1vZGUgcXVldWVzLg0KPiAgIAkJCSAqLw0KPiAgIAkJfQ0KPiAtDQo+IC0JCS8qIE1h cmsgdGhlIEJPIGFzIHZhbGlkIHVubGVzcyBpdCB3YXMgaW52YWxpZGF0ZWQNCj4gLQkJICogYWdh aW4gY29uY3VycmVudGx5DQo+IC0JCSAqLw0KPiAtCQlpZiAoYXRvbWljX2NtcHhjaGcoJm1lbS0+ aW52YWxpZCwgaW52YWxpZCwgMCkgIT0gaW52YWxpZCkNCj4gLQkJCXJldHVybiAtRUFHQUlOOw0K PiAgIAl9DQo+ICAgDQo+ICAgCXJldHVybiAwOw0KPiBAQCAtMTkxNyw3ICsxODY2LDggQEAgc3Rh dGljIGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNz X2luZm8gKnByb2Nlc3NfaW5mbykNCj4gICAJCQkJICAgICBHRlBfS0VSTkVMKTsNCj4gICAJaWYg KCFwZF9ib19saXN0X2VudHJpZXMpIHsNCj4gICAJCXByX2VycigiJXM6IEZhaWxlZCB0byBhbGxv Y2F0ZSBQRCBCTyBsaXN0IGVudHJpZXNcbiIsIF9fZnVuY19fKTsNCj4gLQkJcmV0dXJuIC1FTk9N RU07DQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ICsJCWdvdG8gb3V0X25vX21lbTsNCj4gICAJfQ0K PiAgIA0KPiAgIAlJTklUX0xJU1RfSEVBRCgmcmVzdl9saXN0KTsNCj4gQEAgLTE5NDEsNyArMTg5 MSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRr ZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8pDQo+ICAgCXJldCA9IHR0bV9ldV9yZXNlcnZl X2J1ZmZlcnMoJnRpY2tldCwgJnJlc3ZfbGlzdCwgZmFsc2UsICZkdXBsaWNhdGVzKTsNCj4gICAJ V0FSTighbGlzdF9lbXB0eSgmZHVwbGljYXRlcyksICJEdXBsaWNhdGVzIHNob3VsZCBiZSBlbXB0 eSIpOw0KPiAgIAlpZiAocmV0KQ0KPiAtCQlnb3RvIG91dDsNCj4gKwkJZ290byBvdXRfZnJlZTsN Cj4gICANCj4gICAJYW1kZ3B1X3N5bmNfY3JlYXRlKCZzeW5jKTsNCj4gICANCj4gQEAgLTE5Njcs MTAgKzE5MTcsOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1 Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQ0KPiAgIA0KPiAgIAkJYm8gPSBt ZW0tPmJvOw0KPiAgIA0KPiAtCQkvKiBDb3B5IHBhZ2VzIGFycmF5IGFuZCB2YWxpZGF0ZSB0aGUg Qk8gaWYgd2UgZ290IHVzZXIgcGFnZXMgKi8NCj4gLQkJaWYgKG1lbS0+dXNlcl9wYWdlc1swXSkg ew0KPiAtCQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwNCj4gLQkJ CQkJCSAgICAgbWVtLT51c2VyX3BhZ2VzKTsNCj4gKwkJLyogVmFsaWRhdGUgdGhlIEJPIGlmIHdl IGdvdCB1c2VyIHBhZ2VzICovDQo+ICsJCWlmIChiby0+dGJvLnR0bS0+cGFnZXNbMF0pIHsNCj4g ICAJCQlhbWRncHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBtZW0tPmRvbWFpbik7DQo+ ICAgCQkJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+dGJvLCAmYm8tPnBsYWNlbWVudCwgJmN0 eCk7DQo+ICAgCQkJaWYgKHJldCkgew0KPiBAQCAtMTk3OSwxNiArMTkyNywxNiBAQCBzdGF0aWMg aW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5m byAqcHJvY2Vzc19pbmZvKQ0KPiAgIAkJCX0NCj4gICAJCX0NCj4gICANCj4gLQkJLyogVmFsaWRh dGUgc3VjY2VlZGVkLCBub3cgdGhlIEJPIG93bnMgdGhlIHBhZ2VzLCBmcmVlDQo+IC0JCSAqIG91 ciBjb3B5IG9mIHRoZSBwb2ludGVyIGFycmF5LiBQdXQgdGhpcyBCTyBiYWNrIG9uDQo+IC0JCSAq IHRoZSB1c2VycHRyX3ZhbGlkX2xpc3QuIElmIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZQ0KPiAtCQkg KiBpdCwgd2UgbmVlZCB0byBzdGFydCBmcm9tIHNjcmF0Y2guDQo+IC0JCSAqLw0KPiAtCQlrdmZy ZWUobWVtLT51c2VyX3BhZ2VzKTsNCj4gLQkJbWVtLT51c2VyX3BhZ2VzID0gTlVMTDsNCj4gICAJ CWxpc3RfbW92ZV90YWlsKCZtZW0tPnZhbGlkYXRlX2xpc3QuaGVhZCwNCj4gICAJCQkgICAgICAg JnByb2Nlc3NfaW5mby0+dXNlcnB0cl92YWxpZF9saXN0KTsNCj4gICANCj4gKwkJLyogU3RvcCBI TU0gdHJhY2sgdGhlIHVzZXJwdHIgdXBkYXRlLiBXZSBkb250IGNoZWNrIHRoZSByZXR1cm4NCj4g KwkJICogdmFsdWUgZm9yIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGUgdXBkYXRlIGJlY2F1c2Ug d2Ugd2lsbA0KPiArCQkgKiByZXNjaGVkdWxlIHRoZSByZXN0b3JlIHdvcmtlciBpZiBwcm9jZXNz X2luZm8tPmV2aWN0ZWRfYm9zDQo+ICsJCSAqIGlzIHVwZGF0ZWQuDQo+ICsJCSAqLw0KPiArCQlh bWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOw0KPiArDQo+ICAg CQkvKiBVcGRhdGUgbWFwcGluZy4gSWYgdGhlIEJPIHdhcyBub3QgdmFsaWRhdGVkDQo+ICAgCQkg KiAoYmVjYXVzZSB3ZSBjb3VsZG4ndCBnZXQgdXNlciBwYWdlcyksIHRoaXMgd2lsbA0KPiAgIAkJ ICogY2xlYXIgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggd2lsbCByZXN1bHQgaW4NCj4g QEAgLTIwMjIsOCArMTk3MCwxNSBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9w YWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQ0KPiAgIAl0dG1f ZXVfYmFja29mZl9yZXNlcnZhdGlvbigmdGlja2V0LCAmcmVzdl9saXN0KTsNCj4gICAJYW1kZ3B1 X3N5bmNfd2FpdCgmc3luYywgZmFsc2UpOw0KPiAgIAlhbWRncHVfc3luY19mcmVlKCZzeW5jKTsN Cj4gLW91dDoNCj4gK291dF9mcmVlOg0KPiAgIAlrZnJlZShwZF9ib19saXN0X2VudHJpZXMpOw0K PiArb3V0X25vX21lbToNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWVtLCB0bXBfbWVt LA0KPiArCQkJCSAmcHJvY2Vzc19pbmZvLT51c2VycHRyX2ludmFsX2xpc3QsDQo+ICsJCQkJIHZh bGlkYXRlX2xpc3QuaGVhZCkgew0KPiArCQlibyA9IG1lbS0+Ym87DQo+ICsJCWFtZGdwdV90dG1f dHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7DQo+ICsJfQ0KPiAgIA0KPiAgIAly ZXR1cm4gcmV0Ow0KPiAgIH0NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9ib19saXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf Ym9fbGlzdC5oDQo+IGluZGV4IDdjNWY1ZDE2MDFlNi4uYTEzMGU3NjZjYmRiIDEwMDY0NA0KPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oDQo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgNCj4gQEAgLTM2LDcg KzM2LDcgQEAgc3RydWN0IGFtZGdwdV9ib19saXN0X2VudHJ5IHsNCj4gICAJc3RydWN0IGFtZGdw dV9ib192YQkJKmJvX3ZhOw0KPiAgIAl1aW50MzJfdAkJCXByaW9yaXR5Ow0KPiAgIAlzdHJ1Y3Qg cGFnZQkJCSoqdXNlcl9wYWdlczsNCj4gLQlpbnQJCQkJdXNlcl9pbnZhbGlkYXRlZDsNCj4gKwli b29sCQkJCXVzZXJfaW52YWxpZGF0ZWQ7DQo+ICAgfTsNCj4gICANCj4gICBzdHJ1Y3QgYW1kZ3B1 X2JvX2xpc3Qgew0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYw0KPiBpbmRl eCAxYzQ5YjgyNjZkNjkuLjQ1MWExZmFiMTdkNiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2NzLmMNCj4gQEAgLTUyLDcgKzUyLDYgQEAgc3RhdGljIGludCBhbWRncHVf Y3NfdXNlcl9mZW5jZV9jaHVuayhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwNCj4gICAJcC0+ dWZfZW50cnkudHYuYm8gPSAmYm8tPnRibzsNCj4gICAJLyogT25lIGZvciBUVE0gYW5kIG9uZSBm b3IgdGhlIENTIGpvYiAqLw0KPiAgIAlwLT51Zl9lbnRyeS50di5udW1fc2hhcmVkID0gMjsNCj4g LQlwLT51Zl9lbnRyeS51c2VyX3BhZ2VzID0gTlVMTDsNCj4gICANCj4gICAJZHJtX2dlbV9vYmpl Y3RfcHV0X3VubG9ja2VkKGdvYmopOw0KPiAgIA0KPiBAQCAtNTM5LDE0ICs1MzgsMTQgQEAgc3Rh dGljIGludCBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAq cCwNCj4gICAJCWlmICh1c2VybW0gJiYgdXNlcm1tICE9IGN1cnJlbnQtPm1tKQ0KPiAgIAkJCXJl dHVybiAtRVBFUk07DQo+ICAgDQo+IC0JCS8qIENoZWNrIGlmIHdlIGhhdmUgdXNlciBwYWdlcyBh bmQgbm9ib2R5IGJvdW5kIHRoZSBCTyBhbHJlYWR5ICovDQo+IC0JCWlmIChhbWRncHVfdHRtX3R0 X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50dG0pICYmDQo+IC0JCSAgICBsb2JqLT51c2Vy X3BhZ2VzKSB7DQo+ICsJCWlmIChhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoYm8tPnRiby50dG0p ICYmDQo+ICsJCSAgICBsb2JqLT51c2VyX2ludmFsaWRhdGVkICYmIGxvYmotPnVzZXJfcGFnZXMp IHsNCj4gICAJCQlhbWRncHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLA0KPiAgIAkJCQkJ CQlBTURHUFVfR0VNX0RPTUFJTl9DUFUpOw0KPiAgIAkJCXIgPSB0dG1fYm9fdmFsaWRhdGUoJmJv LT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsNCj4gICAJCQlpZiAocikNCj4gICAJCQkJcmV0 dXJuIHI7DQo+ICsNCj4gICAJCQlhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKGJvLT50Ym8u dHRtLA0KPiAgIAkJCQkJCSAgICAgbG9iai0+dXNlcl9wYWdlcyk7DQo+ICAgCQkJYmluZGluZ191 c2VycHRyID0gdHJ1ZTsNCj4gQEAgLTU3Nyw3ICs1NzYsNiBAQCBzdGF0aWMgaW50IGFtZGdwdV9j c19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLA0KPiAgIAlzdHJ1Y3QgYW1k Z3B1X2JvICpnZHM7DQo+ICAgCXN0cnVjdCBhbWRncHVfYm8gKmd3czsNCj4gICAJc3RydWN0IGFt ZGdwdV9ibyAqb2E7DQo+IC0JdW5zaWduZWQgdHJpZXMgPSAxMDsNCj4gICAJaW50IHI7DQo+ICAg DQo+ICAgCUlOSVRfTElTVF9IRUFEKCZwLT52YWxpZGF0ZWQpOw0KPiBAQCAtNjEzLDc5ICs2MTEs NDUgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3Bh cnNlciAqcCwNCj4gICAJaWYgKHAtPnVmX2VudHJ5LnR2LmJvICYmICF0dG1fdG9fYW1kZ3B1X2Jv KHAtPnVmX2VudHJ5LnR2LmJvKS0+cGFyZW50KQ0KPiAgIAkJbGlzdF9hZGQoJnAtPnVmX2VudHJ5 LnR2LmhlYWQsICZwLT52YWxpZGF0ZWQpOw0KPiAgIA0KPiAtCXdoaWxlICgxKSB7DQo+IC0JCXN0 cnVjdCBsaXN0X2hlYWQgbmVlZF9wYWdlczsNCj4gLQ0KPiAtCQlyID0gdHRtX2V1X3Jlc2VydmVf YnVmZmVycygmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkLCB0cnVlLA0KPiAtCQkJCQkgICAmZHVw bGljYXRlcyk7DQo+IC0JCWlmICh1bmxpa2VseShyICE9IDApKSB7DQo+IC0JCQlpZiAociAhPSAt RVJFU1RBUlRTWVMpDQo+IC0JCQkJRFJNX0VSUk9SKCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZh aWxlZC5cbiIpOw0KPiAtCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOw0KPiAtCQl9DQo+IC0NCj4g LQkJSU5JVF9MSVNUX0hFQUQoJm5lZWRfcGFnZXMpOw0KPiAtCQlhbWRncHVfYm9fbGlzdF9mb3Jf ZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsNCj4gLQkJCXN0cnVjdCBhbWRncHVf Ym8gKmJvID0gdHRtX3RvX2FtZGdwdV9ibyhlLT50di5ibyk7DQo+IC0NCj4gLQkJCWlmIChhbWRn cHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQoYm8tPnRiby50dG0sDQo+IC0JCQkJICZlLT51 c2VyX2ludmFsaWRhdGVkKSAmJiBlLT51c2VyX3BhZ2VzKSB7DQo+IC0NCj4gLQkJCQkvKiBXZSBh Y3F1aXJlZCBhIHBhZ2UgYXJyYXksIGJ1dCBzb21lYm9keQ0KPiAtCQkJCSAqIGludmFsaWRhdGVk IGl0LiBGcmVlIGl0IGFuZCB0cnkgYWdhaW4NCj4gLQkJCQkgKi8NCj4gLQkJCQlyZWxlYXNlX3Bh Z2VzKGUtPnVzZXJfcGFnZXMsDQo+IC0JCQkJCSAgICAgIGJvLT50Ym8udHRtLT5udW1fcGFnZXMp Ow0KPiAtCQkJCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsNCj4gLQkJCQllLT51c2VyX3BhZ2VzID0g TlVMTDsNCj4gLQkJCX0NCj4gLQ0KPiAtCQkJaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVk c19wYWdlcyhiby0+dGJvLnR0bSkgJiYNCj4gLQkJCSAgICAhZS0+dXNlcl9wYWdlcykgew0KPiAt CQkJCWxpc3RfZGVsKCZlLT50di5oZWFkKTsNCj4gLQkJCQlsaXN0X2FkZCgmZS0+dHYuaGVhZCwg Jm5lZWRfcGFnZXMpOw0KPiAtDQo+IC0JCQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7DQo+IC0J CQl9DQo+ICsJLyogR2V0IHVzZXJwdHIgYmFja2luZyBwYWdlcy4gSWYgcGFnZXMgYXJlIHVwZGF0 ZWQgYWZ0ZXIgcmVnaXN0ZXJlZA0KPiArCSAqIGluIGFtZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgp LCBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZSgpIHdpbGwgZG8NCj4gKwkgKiBhbWRncHVfdHRtX2Jh Y2tlbmRfYmluZCgpIHRvIGZsdXNoIGFuZCBpbnZhbGlkYXRlIG5ldyBwYWdlcw0KPiArCSAqLw0K PiArCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkg ew0KPiArCQlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8p Ow0KPiArCQlib29sIHVzZXJwYWdlX2ludmFsaWRhdGVkID0gZmFsc2U7DQo+ICsJCWludCBpOw0K PiArDQo+ICsJCWUtPnVzZXJfcGFnZXMgPSBrdm1hbGxvY19hcnJheShiby0+dGJvLnR0bS0+bnVt X3BhZ2VzLA0KPiArCQkJCQlzaXplb2Yoc3RydWN0IHBhZ2UgKiksDQo+ICsJCQkJCUdGUF9LRVJO RUwgfCBfX0dGUF9aRVJPKTsNCj4gKwkJaWYgKCFlLT51c2VyX3BhZ2VzKSB7DQo+ICsJCQlEUk1f RVJST1IoImNhbGxvYyBmYWlsdXJlXG4iKTsNCj4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiAgIAkJ fQ0KPiAgIA0KPiAtCQlpZiAobGlzdF9lbXB0eSgmbmVlZF9wYWdlcykpDQo+IC0JCQlicmVhazsN Cj4gLQ0KPiAtCQkvKiBVbnJlc2VydmUgZXZlcnl0aGluZyBhZ2Fpbi4gKi8NCj4gLQkJdHRtX2V1 X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnAtPnRpY2tldCwgJnAtPnZhbGlkYXRlZCk7DQo+IC0NCj4g LQkJLyogV2UgdHJpZWQgdG9vIG1hbnkgdGltZXMsIGp1c3QgYWJvcnQgKi8NCj4gLQkJaWYgKCEt LXRyaWVzKSB7DQo+IC0JCQlyID0gLUVERUFETEs7DQo+IC0JCQlEUk1fRVJST1IoImRlYWRsb2Nr IGluICVzXG4iLCBfX2Z1bmNfXyk7DQo+IC0JCQlnb3RvIGVycm9yX2ZyZWVfcGFnZXM7DQo+ICsJ CXIgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBlLT51c2VyX3Bh Z2VzKTsNCj4gKwkJaWYgKHIpIHsNCj4gKwkJCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsNCj4gKwkJ CWUtPnVzZXJfcGFnZXMgPSBOVUxMOw0KPiArCQkJcmV0dXJuIHI7DQo+ICAgCQl9DQo+ICAgDQo+ IC0JCS8qIEZpbGwgdGhlIHBhZ2UgYXJyYXlzIGZvciBhbGwgdXNlcnB0cnMuICovDQo+IC0JCWxp c3RfZm9yX2VhY2hfZW50cnkoZSwgJm5lZWRfcGFnZXMsIHR2LmhlYWQpIHsNCj4gLQkJCXN0cnVj dCB0dG1fdHQgKnR0bSA9IGUtPnR2LmJvLT50dG07DQo+IC0NCj4gLQkJCWUtPnVzZXJfcGFnZXMg PSBrdm1hbGxvY19hcnJheSh0dG0tPm51bV9wYWdlcywNCj4gLQkJCQkJCQkgc2l6ZW9mKHN0cnVj dCBwYWdlKiksDQo+IC0JCQkJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsNCj4gLQkJCWlm ICghZS0+dXNlcl9wYWdlcykgew0KPiAtCQkJCXIgPSAtRU5PTUVNOw0KPiAtCQkJCURSTV9FUlJP UigiY2FsbG9jIGZhaWx1cmUgaW4gJXNcbiIsIF9fZnVuY19fKTsNCj4gLQkJCQlnb3RvIGVycm9y X2ZyZWVfcGFnZXM7DQo+IC0JCQl9DQo+IC0NCj4gLQkJCXIgPSBhbWRncHVfdHRtX3R0X2dldF91 c2VyX3BhZ2VzKHR0bSwgZS0+dXNlcl9wYWdlcyk7DQo+IC0JCQlpZiAocikgew0KPiAtCQkJCURS TV9FUlJPUigiYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyBmYWlsZWQuXG4iKTsNCj4gLQkJ CQlrdmZyZWUoZS0+dXNlcl9wYWdlcyk7DQo+IC0JCQkJZS0+dXNlcl9wYWdlcyA9IE5VTEw7DQo+ IC0JCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgYm8tPnRi by50dG0tPm51bV9wYWdlczsgaSsrKSB7DQo+ICsJCQlpZiAoYm8tPnRiby50dG0tPnBhZ2VzW2ld ICE9IGUtPnVzZXJfcGFnZXNbaV0pIHsNCj4gKwkJCQl1c2VycGFnZV9pbnZhbGlkYXRlZCA9IHRy dWU7DQo+ICsJCQkJYnJlYWs7DQo+ICAgCQkJfQ0KPiAgIAkJfQ0KPiArCQllLT51c2VyX2ludmFs aWRhdGVkID0gdXNlcnBhZ2VfaW52YWxpZGF0ZWQ7DQo+ICsJfQ0KPiAgIA0KPiAtCQkvKiBBbmQg dHJ5IGFnYWluLiAqLw0KPiAtCQlsaXN0X3NwbGljZSgmbmVlZF9wYWdlcywgJnAtPnZhbGlkYXRl ZCk7DQo+ICsJciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnAtPnRpY2tldCwgJnAtPnZhbGlk YXRlZCwgdHJ1ZSwNCj4gKwkJCQkgICAmZHVwbGljYXRlcyk7DQo+ICsJaWYgKHVubGlrZWx5KHIg IT0gMCkpIHsNCj4gKwkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKQ0KPiArCQkJRFJNX0VSUk9SKCJ0 dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZhaWxlZC5cbiIpOw0KPiArCQlnb3RvIG91dDsNCj4gICAJ fQ0KPiAgIA0KPiAgIAlhbWRncHVfY3NfZ2V0X3RocmVzaG9sZF9mb3JfbW92ZXMocC0+YWRldiwg JnAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCwNCj4gQEAgLTc1NCwxNyArNzE4LDcgQEAgc3RhdGlj IGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwNCj4g ICBlcnJvcl92YWxpZGF0ZToNCj4gICAJaWYgKHIpDQo+ICAgCQl0dG1fZXVfYmFja29mZl9yZXNl cnZhdGlvbigmcC0+dGlja2V0LCAmcC0+dmFsaWRhdGVkKTsNCj4gLQ0KPiAtZXJyb3JfZnJlZV9w YWdlczoNCj4gLQ0KPiAtCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwg cC0+Ym9fbGlzdCkgew0KPiAtCQlpZiAoIWUtPnVzZXJfcGFnZXMpDQo+IC0JCQljb250aW51ZTsN Cj4gLQ0KPiAtCQlyZWxlYXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsIGUtPnR2LmJvLT50dG0tPm51 bV9wYWdlcyk7DQo+IC0JCWt2ZnJlZShlLT51c2VyX3BhZ2VzKTsNCj4gLQl9DQo+IC0NCj4gK291 dDoNCj4gICAJcmV0dXJuIHI7DQo+ICAgfQ0KPiAgIA0KPiBAQCAtMTIxMyw4ICsxMTY3LDcgQEAg c3RhdGljIGludCBhbWRncHVfY3Nfc3VibWl0KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLA0K PiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7DQo+ICAgCXN0cnVjdCBhbWRncHVf am9iICpqb2I7DQo+ICAgCXVpbnQ2NF90IHNlcTsNCj4gLQ0KPiAtCWludCByOw0KPiArCWludCBy ID0gMDsNCj4gICANCj4gICAJam9iID0gcC0+am9iOw0KPiAgIAlwLT5qb2IgPSBOVUxMOw0KPiBA QCAtMTIyMywxNSArMTE3NiwyMSBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0 IGFtZGdwdV9jc19wYXJzZXIgKnAsDQo+ICAgCWlmIChyKQ0KPiAgIAkJZ290byBlcnJvcl91bmxv Y2s7DQo+ICAgDQo+IC0JLyogTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgYWxsb3dlZCB3aGlsZSBo b2xkaW5nIHRoZSBtbiBsb2NrICovDQo+ICsJLyogTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgYWxs b3dlZCB3aGlsZSBob2xkaW5nIHRoZSBtbiBsb2NrLg0KPiArCSAqIHAtPm1uIGlzIGhvbGQgdW50 aWwgYW1kZ3B1X2NzX3N1Ym1pdCBpcyBmaW5pc2hlZCBhbmQgZmVuY2UgaXMgYWRkZWQNCj4gKwkg KiB0byBCT3MuDQo+ICsJICovDQo+ICAgCWFtZGdwdV9tbl9sb2NrKHAtPm1uKTsNCj4gKw0KPiAr CS8qIElmIHVzZXJwdHIgYXJlIHVwZGF0ZWQgYWZ0ZXIgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKSwg cmVzdGFydCBjcyAqLw0KPiAgIAlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5 KGUsIHAtPmJvX2xpc3QpIHsNCj4gICAJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gdHRtX3RvX2Ft ZGdwdV9ibyhlLT50di5ibyk7DQo+ICAgDQo+IC0JCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJf bmVlZHNfcGFnZXMoYm8tPnRiby50dG0pKSB7DQo+IC0JCQlyID0gLUVSRVNUQVJUU1lTOw0KPiAt CQkJZ290byBlcnJvcl9hYm9ydDsNCj4gLQkJfQ0KPiArCQlyIHw9ICFhbWRncHVfdHRtX3R0X2dl dF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOw0KPiArCX0NCj4gKwlpZiAocikgew0KPiAr CQlyID0gLUVSRVNUQVJUU1lTOw0KPiArCQlnb3RvIGVycm9yX2Fib3J0Ow0KPiAgIAl9DQo+ICAg DQo+ICAgCWpvYi0+b3duZXIgPSBwLT5maWxwOw0KPiBAQCAtMTI3OCwxNCArMTIzNywyMCBAQCBz dGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsDQo+ ICAgaW50IGFtZGdwdV9jc19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApDQo+ICAgew0KPiAgIAlzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+IC0JdW5pb24gZHJtX2FtZGdwdV9jcyAqY3Mg PSBkYXRhOw0KPiAtCXN0cnVjdCBhbWRncHVfY3NfcGFyc2VyIHBhcnNlciA9IHt9Ow0KPiAtCWJv b2wgcmVzZXJ2ZWRfYnVmZmVycyA9IGZhbHNlOw0KPiArCXVuaW9uIGRybV9hbWRncHVfY3MgKmNz Ow0KPiArCXN0cnVjdCBhbWRncHVfY3NfcGFyc2VyIHBhcnNlcjsNCj4gKwlib29sIHJlc2VydmVk X2J1ZmZlcnM7DQo+ICsJaW50IHRyaWVzID0gMTA7DQo+ICAgCWludCBpLCByOw0KPiAgIA0KPiAg IAlpZiAoIWFkZXYtPmFjY2VsX3dvcmtpbmcpDQo+ICAgCQlyZXR1cm4gLUVCVVNZOw0KPiAgIA0K PiArcmVzdGFydDoNCj4gKwltZW1zZXQoJnBhcnNlciwgMCwgc2l6ZW9mKHBhcnNlcikpOw0KPiAr CWNzID0gZGF0YTsNCj4gKwlyZXNlcnZlZF9idWZmZXJzID0gZmFsc2U7DQo+ICsNCj4gICAJcGFy c2VyLmFkZXYgPSBhZGV2Ow0KPiAgIAlwYXJzZXIuZmlscCA9IGZpbHA7DQo+ICAgDQo+IEBAIC0x MzI3LDYgKzEyOTIsMTUgQEAgaW50IGFtZGdwdV9jc19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApDQo+ICAgDQo+ICAgb3V0Og0K PiAgIAlhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgciwgcmVzZXJ2ZWRfYnVmZmVycyk7 DQo+ICsNCj4gKwlpZiAociA9PSAtRVJFU1RBUlRTWVMpIHsNCj4gKwkJaWYgKCEtLXRyaWVzKSB7 DQo+ICsJCQlEUk1fRVJST1IoIlBvc3NpYmxlIGRlYWRsb2NrPyBSZXRyeSB0b28gbWFueSB0aW1l c1xuIik7DQo+ICsJCQlyZXR1cm4gLUVERUFETEs7DQo+ICsJCX0NCj4gKwkJZ290byByZXN0YXJ0 Ow0KPiArCX0NCj4gKw0KPiAgIAlyZXR1cm4gcjsNCj4gICB9DQo+ICAgDQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMNCj4gaW5kZXggZjRmMDAyMTc1NDZlLi45MjAyNTk5 M2JmYjEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9n ZW0uYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMNCj4g QEAgLTMzNiwyNiArMzM2LDI0IEBAIGludCBhbWRncHVfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwNCj4gICANCj4gICAJCXIgPSBhbWRncHVfYm9f cmVzZXJ2ZShibywgdHJ1ZSk7DQo+ICAgCQlpZiAocikNCj4gLQkJCWdvdG8gZnJlZV9wYWdlczsN Cj4gKwkJCWdvdG8gdXNlcl9wYWdlc19kb25lOw0KPiAgIA0KPiAgIAkJYW1kZ3B1X2JvX3BsYWNl bWVudF9mcm9tX2RvbWFpbihibywgQU1ER1BVX0dFTV9ET01BSU5fR1RUKTsNCj4gICAJCXIgPSB0 dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsNCj4gICAJCWFt ZGdwdV9ib191bnJlc2VydmUoYm8pOw0KPiAgIAkJaWYgKHIpDQo+IC0JCQlnb3RvIGZyZWVfcGFn ZXM7DQo+ICsJCQlnb3RvIHVzZXJfcGFnZXNfZG9uZTsNCj4gICAJfQ0KPiAgIA0KPiAgIAlyID0g ZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbHAsIGdvYmosICZoYW5kbGUpOw0KPiAtCS8qIGRyb3Ag cmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICovDQo+IC0JZHJt X2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdvYmopOw0KPiAgIAlpZiAocikNCj4gLQkJcmV0dXJu IHI7DQo+ICsJCWdvdG8gdXNlcl9wYWdlc19kb25lOw0KPiAgIA0KPiAgIAlhcmdzLT5oYW5kbGUg PSBoYW5kbGU7DQo+IC0JcmV0dXJuIDA7DQo+ICAgDQo+IC1mcmVlX3BhZ2VzOg0KPiAtCXJlbGVh c2VfcGFnZXMoYm8tPnRiby50dG0tPnBhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsNCj4g K3VzZXJfcGFnZXNfZG9uZToNCj4gKwlpZiAoYXJncy0+ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQ VFJfVkFMSURBVEUpDQo+ICsJCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+ dGJvLnR0bSk7DQo+ICAgDQo+ICAgcmVsZWFzZV9vYmplY3Q6DQo+ICAgCWRybV9nZW1fb2JqZWN0 X3B1dF91bmxvY2tlZChnb2JqKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9tbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21u LmMNCj4gaW5kZXggNWQ1MThkMmJiOWJlLi45ZDQwZjMwMDFmM2MgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jDQo+IEBAIC0yMjksOCArMjI5LDYgQEAgc3RhdGlj IHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21uX25vZGUgKm5v ZGUsDQo+ICAgCQkJdHJ1ZSwgZmFsc2UsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsNCj4gICAJCWlm IChyIDw9IDApDQo+ICAgCQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNl ciBib1xuIiwgcik7DQo+IC0NCj4gLQkJYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZXMoYm8t PnRiby50dG0pOw0KPiAgIAl9DQo+ICAgfQ0KPiAgIA0KPiBAQCAtNTEzLDMgKzUxMSwyNiBAQCB2 b2lkIGFtZGdwdV9tbl91bnJlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJvKQ0KPiAgIAltdXRl eF91bmxvY2soJmFkZXYtPm1uX2xvY2spOw0KPiAgIH0NCj4gICANCj4gKy8qIGZsYWdzIHVzZWQg YnkgSE1NIGludGVybmFsLCBub3QgcmVsYXRlZCB0byBDUFUvR1BVIFBURSBmbGFncyAqLw0KPiAr c3RhdGljIGNvbnN0IHVpbnQ2NF90IGhtbV9yYW5nZV9mbGFnc1tITU1fUEZOX0ZMQUdfTUFYXSA9 IHsNCj4gKwkJKDEgPDwgMCksIC8qIEhNTV9QRk5fVkFMSUQgKi8NCj4gKwkJKDEgPDwgMSksIC8q IEhNTV9QRk5fV1JJVEUgKi8NCj4gKwkJMCAvKiBITU1fUEZOX0RFVklDRV9QUklWQVRFICovDQo+ ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3JhbmdlX3ZhbHVlc1tITU1f UEZOX1ZBTFVFX01BWF0gPSB7DQo+ICsJCTB4ZmZmZmZmZmZmZmZmZmZmZVVMLCAvKiBITU1fUEZO X0VSUk9SICovDQo+ICsJCTAsIC8qIEhNTV9QRk5fTk9ORSAqLw0KPiArCQkweGZmZmZmZmZmZmZm ZmZmZmNVTCAvKiBITU1fUEZOX1NQRUNJQUwgKi8NCj4gK307DQo+ICsNCj4gK3ZvaWQgYW1kZ3B1 X2htbV9pbml0X3JhbmdlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQ0KPiArew0KPiArCWlmIChy YW5nZSkgew0KPiArCQlyYW5nZS0+ZmxhZ3MgPSBobW1fcmFuZ2VfZmxhZ3M7DQo+ICsJCXJhbmdl LT52YWx1ZXMgPSBobW1fcmFuZ2VfdmFsdWVzOw0KPiArCQlyYW5nZS0+cGZuX3NoaWZ0ID0gUEFH RV9TSElGVDsNCj4gKwkJcmFuZ2UtPnBmbnMgPSBOVUxMOw0KPiArCQlJTklUX0xJU1RfSEVBRCgm cmFuZ2UtPmxpc3QpOw0KPiArCX0NCj4gK30NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X21uLmgNCj4gaW5kZXggMGE1MWZkMDAwMjFjLi40ODAzZTIxNmUxNzQgMTAwNjQ0DQo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oDQo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oDQo+IEBAIC0yNSw5ICsyNSwxMCBAQA0K PiAgICNkZWZpbmUgX19BTURHUFVfTU5fSF9fDQo+ICAgDQo+ICAgLyoNCj4gLSAqIE1NVSBOb3Rp Zmllcg0KPiArICogSE1NIG1pcnJvcg0KPiAgICAqLw0KPiAgIHN0cnVjdCBhbWRncHVfbW47DQo+ ICtzdHJ1Y3QgaG1tX3JhbmdlOw0KPiAgIA0KPiAgIGVudW0gYW1kZ3B1X21uX3R5cGUgew0KPiAg IAlBTURHUFVfTU5fVFlQRV9HRlgsDQo+IEBAIC00MSw2ICs0Miw3IEBAIHN0cnVjdCBhbWRncHVf bW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+ICAgCQkJCWVu dW0gYW1kZ3B1X21uX3R5cGUgdHlwZSk7DQo+ICAgaW50IGFtZGdwdV9tbl9yZWdpc3RlcihzdHJ1 Y3QgYW1kZ3B1X2JvICpibywgdW5zaWduZWQgbG9uZyBhZGRyKTsNCj4gICB2b2lkIGFtZGdwdV9t bl91bnJlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJvKTsNCj4gK3ZvaWQgYW1kZ3B1X2htbV9p bml0X3JhbmdlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsNCj4gICAjZWxzZQ0KPiAgIHN0YXRp YyBpbmxpbmUgdm9pZCBhbWRncHVfbW5fbG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikge30NCj4g ICBzdGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21uX3VubG9jayhzdHJ1Y3QgYW1kZ3B1X21uICpt bikge30NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90 dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYw0KPiBpbmRleCBj OTFlYzMxMDFkMDAuLjNkMDc0ZjRiMDJmNCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV90dG0uYw0KPiBAQCAtNDMsNiArNDMsNyBAQA0KPiAgICNpbmNsdWRlIDxsaW51 eC9wYWdlbWFwLmg+DQo+ICAgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4NCj4gICAjaW5jbHVk ZSA8bGludXgvaW9tbXUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9obW0uaD4NCj4gICAjaW5jbHVk ZSAiYW1kZ3B1LmgiDQo+ICAgI2luY2x1ZGUgImFtZGdwdV9vYmplY3QuaCINCj4gICAjaW5jbHVk ZSAiYW1kZ3B1X3RyYWNlLmgiDQo+IEBAIC03MDUsMTEgKzcwNiw2IEBAIHN0YXRpYyB1bnNpZ25l ZCBsb25nIGFtZGdwdV90dG1faW9fbWVtX3BmbihzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv LA0KPiAgIC8qDQo+ICAgICogVFRNIGJhY2tlbmQgZnVuY3Rpb25zLg0KPiAgICAqLw0KPiAtc3Ry dWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCB7DQo+IC0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0 Ow0KPiAtCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsNCj4gLX07DQo+IC0NCj4gICBzdHJ1Y3Qg YW1kZ3B1X3R0bV90dCB7DQo+ICAgCXN0cnVjdCB0dG1fZG1hX3R0CXR0bTsNCj4gICAJdTY0CQkJ b2Zmc2V0Ow0KPiBAQCAtNzE4LDg1ICs3MTQsOTYgQEAgc3RydWN0IGFtZGdwdV90dG1fdHQgew0K PiAgIAl1aW50MzJfdAkJdXNlcmZsYWdzOw0KPiAgIAlzcGlubG9ja190ICAgICAgICAgICAgICBn dXB0YXNrbG9jazsNCj4gICAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgZ3VwdGFza3M7DQo+IC0J YXRvbWljX3QJCW1tdV9pbnZhbGlkYXRpb25zOw0KPiAtCXVpbnQzMl90CQlsYXN0X3NldF9wYWdl czsNCj4gKwlzdHJ1Y3QgaG1tX3JhbmdlCXJhbmdlOw0KPiAgIH07DQo+ICAgDQo+ICAgLyoqDQo+ IC0gKiBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzIC0gUGluIHBhZ2VzIG9mIG1lbW9yeSBw b2ludGVkIHRvIGJ5IGEgVVNFUlBUUg0KPiAtICogcG9pbnRlciB0byBtZW1vcnkNCj4gKyAqIGFt ZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMgLSBnZXQgZGV2aWNlIGFjY2Vzc2libGUgcGFnZXMg dGhhdCBiYWNrIHVzZXINCj4gKyAqIG1lbW9yeSBhbmQgc3RhcnQgSE1NIHRyYWNraW5nIENQVSBw YWdlIHRhYmxlIHVwZGF0ZQ0KPiAgICAqDQo+IC0gKiBDYWxsZWQgYnkgYW1kZ3B1X2dlbV91c2Vy cHRyX2lvY3RsKCkgYW5kIGFtZGdwdV9jc19wYXJzZXJfYm9zKCkuDQo+IC0gKiBUaGlzIHByb3Zp ZGVzIGEgd3JhcHBlciBhcm91bmQgdGhlIGdldF91c2VyX3BhZ2VzKCkgY2FsbCB0byBwcm92aWRl DQo+IC0gKiBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlciBtZW1vcnkuDQo+ ICsgKiBDYWxsaW5nIGZ1bmN0aW9uIG11c3QgY2FsbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfcmFu Z2VfZG9uZSgpIG9uY2UgYW5kIG9ubHkNCj4gKyAqIG9uY2UgYWZ0ZXJ3YXJkcyB0byBzdG9wIEhN TSB0cmFja2luZw0KPiAgICAqLw0KPiAgIGludCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2Vz KHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykNCj4gICB7DQo+ICAgCXN0 cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsNCj4gICAJc3RydWN0IG1tX3N0 cnVjdCAqbW0gPSBndHQtPnVzZXJ0YXNrLT5tbTsNCj4gLQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAw Ow0KPiAtCXVuc2lnbmVkIHBpbm5lZCA9IDA7DQo+IC0JaW50IHI7DQo+ICsJdW5zaWduZWQgbG9u ZyBlbmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRTsNCj4gKwlz dHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSA9ICZndHQtPnJhbmdlOw0KPiArCWludCByID0gMCwgaTsN Cj4gICANCj4gICAJaWYgKCFtbSkgLyogSGFwcGVucyBkdXJpbmcgcHJvY2VzcyBzaHV0ZG93biAq Lw0KPiAgIAkJcmV0dXJuIC1FU1JDSDsNCj4gICANCj4gLQlpZiAoIShndHQtPnVzZXJmbGFncyAm IEFNREdQVV9HRU1fVVNFUlBUUl9SRUFET05MWSkpDQo+IC0JCWZsYWdzIHw9IEZPTExfV1JJVEU7 DQo+ICsJYW1kZ3B1X2htbV9pbml0X3JhbmdlKHJhbmdlKTsNCj4gICANCj4gICAJZG93bl9yZWFk KCZtbS0+bW1hcF9zZW0pOw0KPiAgIA0KPiAtCWlmIChndHQtPnVzZXJmbGFncyAmIEFNREdQVV9H RU1fVVNFUlBUUl9BTk9OT05MWSkgew0KPiAtCQkvKg0KPiAtCQkgKiBjaGVjayB0aGF0IHdlIG9u bHkgdXNlIGFub255bW91cyBtZW1vcnkgdG8gcHJldmVudCBwcm9ibGVtcw0KPiAtCQkgKiB3aXRo IHdyaXRlYmFjaw0KPiAtCQkgKi8NCj4gLQkJdW5zaWduZWQgbG9uZyBlbmQgPSBndHQtPnVzZXJw dHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0laRTsNCj4gLQkJc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWE7DQo+ICsJcmFuZ2UtPnZtYSA9IGZpbmRfdm1hKG1tLCBndHQtPnVzZXJwdHIpOw0K PiArCWlmICghcmFuZ2VfaW5fdm1hKHJhbmdlLT52bWEsIGd0dC0+dXNlcnB0ciwgZW5kKSkNCj4g KwkJciA9IC1FRkFVTFQ7DQo+ICsJZWxzZSBpZiAoKGd0dC0+dXNlcmZsYWdzICYgQU1ER1BVX0dF TV9VU0VSUFRSX0FOT05PTkxZKSAmJg0KPiArCQlyYW5nZS0+dm1hLT52bV9maWxlKQ0KPiArCQly ID0gLUVQRVJNOw0KPiArCWlmIChyKQ0KPiArCQlnb3RvIG91dDsNCj4gICANCj4gLQkJdm1hID0g ZmluZF92bWEobW0sIGd0dC0+dXNlcnB0cik7DQo+IC0JCWlmICghdm1hIHx8IHZtYS0+dm1fZmls ZSB8fCB2bWEtPnZtX2VuZCA8IGVuZCkgew0KPiAtCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsN Cj4gLQkJCXJldHVybiAtRVBFUk07DQo+IC0JCX0NCj4gKwlyYW5nZS0+cGZucyA9IGt2bWFsbG9j X2FycmF5KHR0bS0+bnVtX3BhZ2VzLCBzaXplb2YodWludDY0X3QpLA0KPiArCQkJCSAgICAgR0ZQ X0tFUk5FTCk7DQo+ICsJaWYgKHJhbmdlLT5wZm5zID09IE5VTEwpIHsNCj4gKwkJciA9IC1FTk9N RU07DQo+ICsJCWdvdG8gb3V0Ow0KPiAgIAl9DQo+ICsJcmFuZ2UtPnN0YXJ0ID0gZ3R0LT51c2Vy cHRyOw0KPiArCXJhbmdlLT5lbmQgPSBlbmQ7DQo+ICAgDQo+IC0JLyogbG9vcCBlbm91Z2ggdGlt ZXMgdXNpbmcgY29udGlndW91cyBwYWdlcyBvZiBtZW1vcnkgKi8NCj4gLQlkbyB7DQo+IC0JCXVu c2lnbmVkIG51bV9wYWdlcyA9IHR0bS0+bnVtX3BhZ2VzIC0gcGlubmVkOw0KPiAtCQl1aW50NjRf dCB1c2VycHRyID0gZ3R0LT51c2VycHRyICsgcGlubmVkICogUEFHRV9TSVpFOw0KPiAtCQlzdHJ1 Y3QgcGFnZSAqKnAgPSBwYWdlcyArIHBpbm5lZDsNCj4gLQkJc3RydWN0IGFtZGdwdV90dG1fZ3Vw X3Rhc2tfbGlzdCBndXB0YXNrOw0KPiArCXJhbmdlLT5wZm5zWzBdID0gcmFuZ2UtPmZsYWdzW0hN TV9QRk5fVkFMSURdOw0KPiArCXJhbmdlLT5wZm5zWzBdIHw9IGFtZGdwdV90dG1fdHRfaXNfcmVh ZG9ubHkodHRtKSA/DQo+ICsJCQkJMCA6IHJhbmdlLT5mbGFnc1tITU1fUEZOX1dSSVRFXTsNCj4g Kwlmb3IgKGkgPSAxOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykNCj4gKwkJcmFuZ2UtPnBmbnNb aV0gPSByYW5nZS0+cGZuc1swXTsNCj4gICANCj4gLQkJZ3VwdGFzay50YXNrID0gY3VycmVudDsN Cj4gLQkJc3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4gLQkJbGlzdF9hZGQoJmd1cHRh c2subGlzdCwgJmd0dC0+Z3VwdGFza3MpOw0KPiAtCQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNr bG9jayk7DQo+ICsJLyogVGhpcyBtYXkgdHJpZ2dlciBwYWdlIHRhYmxlIHVwZGF0ZSAqLw0KPiAr CXIgPSBobW1fdm1hX2ZhdWx0KHJhbmdlLCB0cnVlKTsNCj4gKwlpZiAocikNCj4gKwkJZ290byBv dXRfZnJlZV9wZm5zOw0KPiAgIA0KPiAtCQlpZiAobW0gPT0gY3VycmVudC0+bW0pDQo+IC0JCQly ID0gZ2V0X3VzZXJfcGFnZXModXNlcnB0ciwgbnVtX3BhZ2VzLCBmbGFncywgcCwgTlVMTCk7DQo+ IC0JCWVsc2UNCj4gLQkJCXIgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUoZ3R0LT51c2VydGFzaywN Cj4gLQkJCQkJbW0sIHVzZXJwdHIsIG51bV9wYWdlcywNCj4gLQkJCQkJZmxhZ3MsIHAsIE5VTEws IE5VTEwpOw0KPiArCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQo+ICAgDQo+IC0JCXNwaW5fbG9j aygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+IC0JCWxpc3RfZGVsKCZndXB0YXNrLmxpc3QpOw0KPiAt CQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+ICsJZm9yIChpID0gMDsgaSA8IHR0 bS0+bnVtX3BhZ2VzOyBpKyspDQo+ICsJCXBhZ2VzW2ldID0gaG1tX3Bmbl90b19wYWdlKHJhbmdl LCByYW5nZS0+cGZuc1tpXSk7DQo+ICAgDQo+IC0JCWlmIChyIDwgMCkNCj4gLQkJCWdvdG8gcmVs ZWFzZV9wYWdlczsNCj4gKwlyZXR1cm4gMDsNCj4gICANCj4gLQkJcGlubmVkICs9IHI7DQo+ICtv dXRfZnJlZV9wZm5zOg0KPiArCWt2ZnJlZShyYW5nZS0+cGZucyk7DQo+ICsJcmFuZ2UtPnBmbnMg PSBOVUxMOw0KPiArb3V0Og0KPiArCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQo+ICsJcmV0dXJu IHI7DQo+ICt9DQo+ICAgDQo+IC0JfSB3aGlsZSAocGlubmVkIDwgdHRtLT5udW1fcGFnZXMpOw0K PiArLyoqDQo+ICsgKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfcmFuZ2VfZG9uZSAtIHN0b3AgSE1N IHRyYWNrIHRoZSBDUFUgcGFnZSB0YWJsZSBjaGFuZ2UNCj4gKyAqIENoZWNrIGlmIHRoZSBwYWdl cyBiYWNraW5nIHRoaXMgdHRtIHJhbmdlIGhhdmUgYmVlbiBpbnZhbGlkYXRlZA0KPiArICoNCj4g KyAqIFJldHVybnM6IHRydWUgaWYgcGFnZXMgYXJlIHN0aWxsIHZhbGlkDQo+ICsgKi8NCj4gK2Jv b2wgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0cnVjdCB0dG1fdHQgKnR0bSkN Cj4gK3sNCj4gKwlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07DQo+ICsJ Ym9vbCByID0gZmFsc2U7DQo+ICAgDQo+IC0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsNCj4gLQly ZXR1cm4gMDsNCj4gKwlpZiAoIWd0dCB8fCAhZ3R0LT51c2VycHRyKQ0KPiArCQlyZXR1cm4gZmFs c2U7DQo+ICsNCj4gKwlXQVJOX09OQ0UoIWd0dC0+cmFuZ2UucGZucywgIk5vIHVzZXIgcGFnZXMg dG8gY2hlY2tcbiIpOw0KPiArCWlmIChndHQtPnJhbmdlLnBmbnMpIHsNCj4gKwkJciA9IGhtbV92 bWFfcmFuZ2VfZG9uZSgmZ3R0LT5yYW5nZSk7DQo+ICsJCWt2ZnJlZShndHQtPnJhbmdlLnBmbnMp Ow0KPiArCQlndHQtPnJhbmdlLnBmbnMgPSBOVUxMOw0KPiArCX0NCj4gICANCj4gLXJlbGVhc2Vf cGFnZXM6DQo+IC0JcmVsZWFzZV9wYWdlcyhwYWdlcywgcGlubmVkKTsNCj4gLQl1cF9yZWFkKCZt bS0+bW1hcF9zZW0pOw0KPiAgIAlyZXR1cm4gcjsNCj4gICB9DQo+ICAgDQo+IEBAIC04MDksMTYg KzgxNiwxMCBAQCBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0 ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpDQo+ICAgICovDQo+ICAgdm9pZCBhbWRncHVfdHRt X3R0X3NldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdl cykNCj4gICB7DQo+IC0Jc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOw0K PiAgIAl1bnNpZ25lZCBpOw0KPiAgIA0KPiAtCWd0dC0+bGFzdF9zZXRfcGFnZXMgPSBhdG9taWNf cmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7DQo+IC0JZm9yIChpID0gMDsgaSA8IHR0bS0+ bnVtX3BhZ2VzOyArK2kpIHsNCj4gLQkJaWYgKHR0bS0+cGFnZXNbaV0pDQo+IC0JCQlwdXRfcGFn ZSh0dG0tPnBhZ2VzW2ldKTsNCj4gLQ0KPiArCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdl czsgKytpKQ0KPiAgIAkJdHRtLT5wYWdlc1tpXSA9IHBhZ2VzID8gcGFnZXNbaV0gOiBOVUxMOw0K PiAtCX0NCj4gICB9DQo+ICAgDQo+ICAgLyoqDQo+IEBAIC05MDMsMTAgKzkwNCwxMSBAQCBzdGF0 aWMgdm9pZCBhbWRncHVfdHRtX3R0X3VucGluX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQ0K PiAgIAkvKiB1bm1hcCB0aGUgcGFnZXMgbWFwcGVkIHRvIHRoZSBkZXZpY2UgKi8NCj4gICAJZG1h X3VubWFwX3NnKGFkZXYtPmRldiwgdHRtLT5zZy0+c2dsLCB0dG0tPnNnLT5uZW50cywgZGlyZWN0 aW9uKTsNCj4gICANCj4gLQkvKiBtYXJrIHRoZSBwYWdlcyBhcyBkaXJ0eSAqLw0KPiAtCWFtZGdw dV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHR0bSk7DQo+IC0NCj4gICAJc2dfZnJlZV90YWJsZSh0 dG0tPnNnKTsNCj4gKw0KPiArCWlmIChndHQtPnJhbmdlLnBmbnMgJiYNCj4gKwkgICAgdHRtLT5w YWdlc1swXSA9PSBobW1fcGZuX3RvX3BhZ2UoJmd0dC0+cmFuZ2UsIGd0dC0+cmFuZ2UucGZuc1sw XSkpDQo+ICsJCVdBUk5fT05DRSgxLCAiTWlzc2luZyBnZXRfdXNlcl9wYWdlX2RvbmVcbiIpOw0K PiAgIH0NCj4gICANCj4gICBpbnQgYW1kZ3B1X3R0bV9nYXJ0X2JpbmQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsDQo+IEBAIC0xMjU4LDggKzEyNjAsNiBAQCBpbnQgYW1kZ3B1X3R0bV90dF9z ZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVpbnQ2NF90IGFkZHIsDQo+ICAgDQo+ICAg CXNwaW5fbG9ja19pbml0KCZndHQtPmd1cHRhc2tsb2NrKTsNCj4gICAJSU5JVF9MSVNUX0hFQUQo Jmd0dC0+Z3VwdGFza3MpOw0KPiAtCWF0b21pY19zZXQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMs IDApOw0KPiAtCWd0dC0+bGFzdF9zZXRfcGFnZXMgPSAwOw0KPiAgIA0KPiAgIAlyZXR1cm4gMDsN Cj4gICB9DQo+IEBAIC0xMjg5LDcgKzEyODksNiBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0 X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LA0KPiAgIAkJ CQkgIHVuc2lnbmVkIGxvbmcgZW5kKQ0KPiAgIHsNCj4gICAJc3RydWN0IGFtZGdwdV90dG1fdHQg Kmd0dCA9ICh2b2lkICopdHRtOw0KPiAtCXN0cnVjdCBhbWRncHVfdHRtX2d1cF90YXNrX2xpc3Qg KmVudHJ5Ow0KPiAgIAl1bnNpZ25lZCBsb25nIHNpemU7DQo+ICAgDQo+ICAgCWlmIChndHQgPT0g TlVMTCB8fCAhZ3R0LT51c2VycHRyKQ0KPiBAQCAtMTMwMiw0OCArMTMwMSwyMCBAQCBib29sIGFt ZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBs b25nIHN0YXJ0LA0KPiAgIAlpZiAoZ3R0LT51c2VycHRyID4gZW5kIHx8IGd0dC0+dXNlcnB0ciAr IHNpemUgPD0gc3RhcnQpDQo+ICAgCQlyZXR1cm4gZmFsc2U7DQo+ICAgDQo+IC0JLyogU2VhcmNo IHRoZSBsaXN0cyBvZiB0YXNrcyB0aGF0IGhvbGQgdGhpcyBtYXBwaW5nIGFuZCBzZWUNCj4gLQkg KiBpZiBjdXJyZW50IGlzIG9uZSBvZiB0aGVtLiAgSWYgaXQgaXMgcmV0dXJuIGZhbHNlLg0KPiAt CSAqLw0KPiAtCXNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+IC0JbGlzdF9mb3JfZWFj aF9lbnRyeShlbnRyeSwgJmd0dC0+Z3VwdGFza3MsIGxpc3QpIHsNCj4gLQkJaWYgKGVudHJ5LT50 YXNrID09IGN1cnJlbnQpIHsNCj4gLQkJCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsN Cj4gLQkJCXJldHVybiBmYWxzZTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQlzcGluX3VubG9jaygmZ3R0 LT5ndXB0YXNrbG9jayk7DQo+IC0NCj4gLQlhdG9taWNfaW5jKCZndHQtPm1tdV9pbnZhbGlkYXRp b25zKTsNCj4gLQ0KPiAgIAlyZXR1cm4gdHJ1ZTsNCj4gICB9DQo+ICAgDQo+ICAgLyoqDQo+IC0g KiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQgLSBIYXMgdGhlIHR0bV90dCBvYmpl Y3QgYmVlbiBpbnZhbGlkYXRlZD8NCj4gLSAqLw0KPiAtYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJw dHJfaW52YWxpZGF0ZWQoc3RydWN0IHR0bV90dCAqdHRtLA0KPiAtCQkJCSAgICAgICBpbnQgKmxh c3RfaW52YWxpZGF0ZWQpDQo+IC17DQo+IC0Jc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2 b2lkICopdHRtOw0KPiAtCWludCBwcmV2X2ludmFsaWRhdGVkID0gKmxhc3RfaW52YWxpZGF0ZWQ7 DQo+IC0NCj4gLQkqbGFzdF9pbnZhbGlkYXRlZCA9IGF0b21pY19yZWFkKCZndHQtPm1tdV9pbnZh bGlkYXRpb25zKTsNCj4gLQlyZXR1cm4gcHJldl9pbnZhbGlkYXRlZCAhPSAqbGFzdF9pbnZhbGlk YXRlZDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVl ZHNfcGFnZXMgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5nIHRoaXMgdHRtX3R0IG9iamVjdA0KPiAt ICogYmVlbiBpbnZhbGlkYXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZXkndmUgYmVlbiBzZXQ/ DQo+ICsgKiBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5n IGJ5IHVzZXJwdHI/DQo+ICAgICovDQo+IC1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVk c19wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pDQo+ICtib29sIGFtZGdwdV90dG1fdHRfaXNfdXNl cnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pDQo+ICAgew0KPiAgIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90 dCAqZ3R0ID0gKHZvaWQgKil0dG07DQo+ICAgDQo+ICAgCWlmIChndHQgPT0gTlVMTCB8fCAhZ3R0 LT51c2VycHRyKQ0KPiAgIAkJcmV0dXJuIGZhbHNlOw0KPiAgIA0KPiAtCXJldHVybiBhdG9taWNf cmVhZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucykgIT0gZ3R0LT5sYXN0X3NldF9wYWdlczsNCj4g KwlyZXR1cm4gdHJ1ZTsNCj4gICB9DQo+ICAgDQo+ICAgLyoqDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdHRtLmgNCj4gaW5kZXggYjViMmQxMDFmN2RiLi44OTg4Yzg3ZmZmOWQg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaA0K PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgNCj4gQEAgLTEw Miw2ICsxMDIsNyBAQCBpbnQgYW1kZ3B1X3R0bV9hbGxvY19nYXJ0KHN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqYm8pOw0KPiAgIGludCBhbWRncHVfdHRtX3JlY292ZXJfZ2FydChzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgKnRibyk7DQo+ICAgDQo+ICAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3Vz ZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsNCj4gK2Jv b2wgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lKHN0cnVjdCB0dG1fdHQgKnR0bSk7 DQo+ICAgdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0 bSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7DQo+ICAgdm9pZCBhbWRncHVfdHRtX3R0X21hcmtfdXNl cl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pOw0KPiAgIGludCBhbWRncHVfdHRtX3R0X3NldF91 c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0X3QgYWRkciwNCj4gQEAgLTExMiw3ICsx MTMsNyBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAq dHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LA0KPiAgIAkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kKTsN Cj4gICBib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChzdHJ1Y3QgdHRtX3R0 ICp0dG0sDQo+ICAgCQkJCSAgICAgICBpbnQgKmxhc3RfaW52YWxpZGF0ZWQpOw0KPiAtYm9vbCBh bWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4g K2Jvb2wgYW1kZ3B1X3R0bV90dF9pc191c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSk7DQo+ICAg Ym9vbCBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHN0cnVjdCB0dG1fdHQgKnR0bSk7DQo+ICAg dWludDY0X3QgYW1kZ3B1X3R0bV90dF9wZGVfZmxhZ3Moc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1 Y3QgdHRtX21lbV9yZWcgKm1lbSk7DQo+ICAgdWludDY0X3QgYW1kZ3B1X3R0bV90dF9wdGVfZmxh Z3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCB0dG1fdHQgKnR0bSwNCj4gDQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1h aWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK