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 v7 Date: Wed, 6 Feb 2019 15:53:14 +0000 Message-ID: References: <20190205215953.11754-1-Philip.Yang@amd.com> <15441d6d-e33c-230e-b14c-4bc5680ce391@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <15441d6d-e33c-230e-b14c-4bc5680ce391-Re5JQEeQqe8AvxtiuMwx3w@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: "Koenig, Christian" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" ID4+ICsgICAgLyogSWYgdXNlcnB0ciBhcmUgdXBkYXRlZCBhZnRlciBhbWRncHVfY3NfcGFyc2Vy X2JvcygpLCByZXN0YXJ0DQogPj4gY3MgKi8NCiA+PiAgICAgICBhbWRncHVfYm9fbGlzdF9mb3Jf ZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xpc3QpIHsNCiA+PiAgICAgICAgICAgc3RydWN0 IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsNCiA+PiAtICAgICAg ICBpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRtKSkgew0K ID4+IC0gICAgICAgICAgICByID0gLUVSRVNUQVJUU1lTOw0KID4+IC0gICAgICAgICAgICBnb3Rv IGVycm9yX2Fib3J0Ow0KID4+IC0gICAgICAgIH0NCiA+PiArICAgICAgICByIHw9ICFhbWRncHVf dHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOw0KID4NCiA+IEp1c3QgYWJv cnQgd2hlbiB5b3Ugc2VlIHRoZSBmaXJzdCBvbmUgd2l0aCBhIHByb2JsZW0gaGVyZS4NCiA+DQog PiBUaGVyZSBpcyBubyB2YWx1ZSBpbiBjaGVja2luZyBhbGwgb2YgdGhlbS4NCiA+DQpObywgYW1k Z3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lIGNhbGxzIGhtbV92bWFfcmFuZ2VfZG9uZSB0 byBzdG9wIA0KSE1NIHRyYWNrIGFuZCBmcmVlIHJhbmdlIHN0cnVjdHVyZSBtZW1vcnksIHRoaXMg bmVlZHMgZ28gdGhyb3VnaCBhbGwgDQp1c2VycHRyIEJPcy4NCg0KID4+ICsNCiA+PiArICAgIGlm IChyID09IC1FQUdBSU4pIHsNCiA+PiArICAgICAgICBpZiAoIS0tdHJpZXMpIHsNCiA+PiArICAg ICAgICAgICAgRFJNX0VSUk9SKCJQb3NzaWJsZSBkZWFkbG9jaz8gUmV0cnkgdG9vIG1hbnkgdGlt ZXNcbiIpOw0KID4+ICsgICAgICAgICAgICByZXR1cm4gLUVERUFETEs7DQogPj4gKyAgICAgICAg fQ0KID4+ICsgICAgICAgIGdvdG8gcmVzdGFydDsNCiA+PiArICAgIH0NCiA+PiArDQogPg0KID4g SSB3b3VsZCBzdGlsbCBzYXkgdG8gYmV0dGVyIGp1c3QgcmV0dXJuIHRvIHVzZXJzcGFjZSBoZXJl Lg0KID4NCiA+IEJlY2F1c2Ugb2YgdGhlIHdheSBITU0gd29ya3MgMTAgcmV0cmllcyBtaWdodCBu b3QgYmUgc3VmZmljaWVudCBhbnkgbW9yZS4NCiA+DQpZZXMsIGl0IGxvb2tzIGJldHRlciB0byBo YW5kbGUgcmV0cnkgZnJvbSB1c2VyIHNwYWNlLiBUaGUgZXh0cmEgc3lzIGNhbGwgDQpvdmVyaGVh ZCBjYW4gYmUgaWdub3JlZCBiZWNhdXNlIHRoaXMgZG9lcyBub3QgaGFwcGVuIGFsbCB0aGUgdGlt ZS4gSSANCndpbGwgc3VibWl0IG5ldyBwYXRjaCBmb3IgcmV2aWV3Lg0KDQpUaGFua3MsDQpQaGls aXANCg0KT24gMjAxOS0wMi0wNiA0OjIwIGEubS4sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6DQo+ IEFtIDA1LjAyLjE5IHVtIDIzOjAwIHNjaHJpZWIgWWFuZywgUGhpbGlwOg0KPj4gVXNlIEhNTSBo ZWxwZXIgZnVuY3Rpb24gaG1tX3ZtYV9mYXVsdCgpIHRvIGdldCBwaHlzaWNhbCBwYWdlcyBiYWNr aW5nDQo+PiB1c2VycHRyIGFuZCBzdGFydCBDUFUgcGFnZSB0YWJsZSB1cGRhdGUgdHJhY2sgb2Yg dGhvc2UgcGFnZXMuIFRoZW4gdXNlDQo+PiBobW1fdm1hX3JhbmdlX2RvbmUoKSB0byBjaGVjayBp ZiB0aG9zZSBwYWdlcyBhcmUgdXBkYXRlZCBiZWZvcmUNCj4+IGFtZGdwdV9jc19zdWJtaXQgZm9y IGdmeCBvciBiZWZvcmUgdXNlciBxdWV1ZXMgYXJlIHJlc3VtZWQgZm9yIGtmZC4NCj4+DQo+PiBJ ZiB1c2VycHRyIHBhZ2VzIGFyZSB1cGRhdGVkLCBmb3IgZ2Z4LCBhbWRncHVfY3NfaW9jdGwgd2ls bCByZXN0YXJ0DQo+PiBmcm9tIHNjcmF0Y2gsIGZvciBrZmQsIHJlc3RvcmUgd29ya2VyIGlzIHJl c2NoZWR1bGVkIHRvIHJldHJ5Lg0KPj4NCj4+IEhNTSBzaW1wbGlmeSB0aGUgQ1BVIHBhZ2UgdGFi bGUgY29uY3VycmVudCB1cGRhdGUgY2hlY2ssIHNvIHJlbW92ZQ0KPj4gZ3VwdGFza2xvY2ssIG1t dV9pbnZhbGlkYXRpb25zLCBsYXN0X3NldF9wYWdlcyBmaWVsZHMgZnJvbQ0KPj4gYW1kZ3B1X3R0 bV90dCBzdHJ1Y3QuDQo+Pg0KPj4gSE1NIGRvZXMgbm90IHBpbiB0aGUgcGFnZSAoaW5jcmVhc2Ug cGFnZSByZWYgY291bnQpLCBzbyByZW1vdmUgcmVsYXRlZA0KPj4gb3BlcmF0aW9ucyBsaWtlIHJl bGVhc2VfcGFnZXMoKSwgcHV0X3BhZ2UoKSwgbWFya19wYWdlX2RpcnR5KCkuDQo+Pg0KPj4gQ2hh bmdlLUlkOiBJMmU4YzBjNmYwZDhjMjFlNTU5NmEzMmQ3ZmM5MTc2Mjc3OGJjOWU2Nw0KPj4gU2ln bmVkLW9mZi1ieTogUGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFtZC5jb20+DQo+PiAtLS0NCj4+ IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaMKgwqDCoCB8wqDC oCAxIC0NCj4+IMKgIC4uLi9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5j wqAgfMKgIDk1ICsrKy0tLS0tLS0NCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9ib19saXN0LmjCoMKgIHzCoMKgIDIgKy0NCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9jcy5jwqDCoMKgwqDCoMKgwqAgfCAxNTggKysrKysrKy0tLS0tLS0tLQ0K Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jwqDCoMKgwqDCoMKg IHzCoCAxNCArLQ0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmPC oMKgwqDCoMKgwqDCoCB8wqAgMjUgKystDQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9hbWRncHVfbW4uaMKgwqDCoMKgwqDCoMKgIHzCoMKgIDQgKy0NCj4+IMKgIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uY8KgwqDCoMKgwqDCoCB8IDE3OCArKysrKysrLS0t LS0tLS0tLS0NCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaMKg wqDCoMKgwqDCoCB8wqDCoCAzICstDQo+PiDCoCA5IGZpbGVzIGNoYW5nZWQsIDE5OCBpbnNlcnRp b25zKCspLCAyODIgZGVsZXRpb25zKC0pDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCANCj4+IGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oDQo+PiBpbmRleCAwYjMxYTE4NTkwMjMuLjBlMTcxMWE3 NWI2OCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9h bWRrZmQuaA0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtm ZC5oDQo+PiBAQCAtNjEsNyArNjEsNiBAQCBzdHJ1Y3Qga2dkX21lbSB7DQo+PiDCoMKgwqDCoMKg IGF0b21pY190IGludmFsaWQ7DQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19p bmZvICpwcm9jZXNzX2luZm87DQo+PiAtwqDCoMKgIHN0cnVjdCBwYWdlICoqdXNlcl9wYWdlczsN Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9zeW5jIHN5bmM7DQo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jIA0KPj4gYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMNCj4+IGluZGV4 IGQ3YjEwZDc5ZjFkZS4uYWUyZDgzOGQzMWVhIDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZF9ncHV2bS5jDQo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMNCj4+IEBAIC01ODIsMjggKzU4 MiwxMiBAQCBzdGF0aWMgaW50IGluaXRfdXNlcl9wYWdlcyhzdHJ1Y3Qga2dkX21lbSAqbWVtLCAN Cj4+IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0 Ow0KPj4gwqDCoMKgwqDCoCB9DQo+PiAtwqDCoMKgIC8qIElmIG5vIHJlc3RvcmUgd29ya2VyIGlz IHJ1bm5pbmcgY29uY3VycmVudGx5LCB1c2VyX3BhZ2VzDQo+PiAtwqDCoMKgwqAgKiBzaG91bGQg bm90IGJlIGFsbG9jYXRlZA0KPj4gLcKgwqDCoMKgICovDQo+PiAtwqDCoMKgIFdBUk4obWVtLT51 c2VyX3BhZ2VzLCAiTGVha2luZyB1c2VyX3BhZ2VzIGFycmF5Iik7DQo+PiAtDQo+PiAtwqDCoMKg IG1lbS0+dXNlcl9wYWdlcyA9IGt2bWFsbG9jX2FycmF5KGJvLT50Ym8udHRtLT5udW1fcGFnZXMs DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZW9m KHN0cnVjdCBwYWdlICopLA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsNCj4+IC3CoMKgwqAgaWYgKCFtZW0t PnVzZXJfcGFnZXMpIHsNCj4+IC3CoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzOiBGYWlsZWQgdG8g YWxsb2NhdGUgcGFnZXMgYXJyYXlcbiIsIF9fZnVuY19fKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCBy ZXQgPSAtRU5PTUVNOw0KPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gdW5yZWdpc3Rlcl9vdXQ7DQo+ PiAtwqDCoMKgIH0NCj4+IC0NCj4+IC3CoMKgwqAgcmV0ID0gYW1kZ3B1X3R0bV90dF9nZXRfdXNl cl9wYWdlcyhiby0+dGJvLnR0bSwgbWVtLT51c2VyX3BhZ2VzKTsNCj4+ICvCoMKgwqAgcmV0ID0g YW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSwgYm8tPnRiby50dG0tPnBh Z2VzKTsNCj4+IMKgwqDCoMKgwqAgaWYgKHJldCkgew0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHBy X2VycigiJXM6IEZhaWxlZCB0byBnZXQgdXNlciBwYWdlczogJWRcbiIsIF9fZnVuY19fLCByZXQp Ow0KPj4gLcKgwqDCoMKgwqDCoMKgIGdvdG8gZnJlZV9vdXQ7DQo+PiArwqDCoMKgwqDCoMKgwqAg Z290byB1bnJlZ2lzdGVyX291dDsNCj4+IMKgwqDCoMKgwqAgfQ0KPj4gLcKgwqDCoCBhbWRncHVf dHRtX3R0X3NldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLCBtZW0tPnVzZXJfcGFnZXMpOw0KPj4g LQ0KPj4gwqDCoMKgwqDCoCByZXQgPSBhbWRncHVfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7DQo+PiDC oMKgwqDCoMKgIGlmIChyZXQpIHsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIiVzOiBG YWlsZWQgdG8gcmVzZXJ2ZSBCT1xuIiwgX19mdW5jX18pOw0KPj4gQEAgLTYxNiwxMSArNjAwLDcg QEAgc3RhdGljIGludCBpbml0X3VzZXJfcGFnZXMoc3RydWN0IGtnZF9tZW0gKm1lbSwgDQo+PiBz dHJ1Y3QgbW1fc3RydWN0ICptbSwNCj4+IMKgwqDCoMKgwqAgYW1kZ3B1X2JvX3VucmVzZXJ2ZShi byk7DQo+PiDCoCByZWxlYXNlX291dDoNCj4+IC3CoMKgwqAgaWYgKHJldCkNCj4+IC3CoMKgwqDC oMKgwqDCoCByZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8tPnRiby50dG0tPm51bV9w YWdlcyk7DQo+PiAtZnJlZV9vdXQ6DQo+PiAtwqDCoMKgIGt2ZnJlZShtZW0tPnVzZXJfcGFnZXMp Ow0KPj4gLcKgwqDCoCBtZW0tPnVzZXJfcGFnZXMgPSBOVUxMOw0KPj4gK8KgwqDCoCBhbWRncHVf dHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOw0KPj4gwqAgdW5yZWdpc3Rl cl9vdXQ6DQo+PiDCoMKgwqDCoMKgIGlmIChyZXQpDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYW1k Z3B1X21uX3VucmVnaXN0ZXIoYm8pOw0KPj4gQEAgLTY3OSw3ICs2NTksNiBAQCBzdGF0aWMgaW50 IHJlc2VydmVfYm9fYW5kX3ZtKHN0cnVjdCBrZ2RfbWVtICptZW0sDQo+PiDCoMKgwqDCoMKgIGN0 eC0+a2ZkX2JvLnByaW9yaXR5ID0gMDsNCj4+IMKgwqDCoMKgwqAgY3R4LT5rZmRfYm8udHYuYm8g PSAmYm8tPnRibzsNCj4+IMKgwqDCoMKgwqAgY3R4LT5rZmRfYm8udHYubnVtX3NoYXJlZCA9IDE7 DQo+PiAtwqDCoMKgIGN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOw0KPj4gwqDCoMKgwqDC oCBsaXN0X2FkZCgmY3R4LT5rZmRfYm8udHYuaGVhZCwgJmN0eC0+bGlzdCk7DQo+PiDCoMKgwqDC oMKgIGFtZGdwdV92bV9nZXRfcGRfYm8odm0sICZjdHgtPmxpc3QsICZjdHgtPnZtX3BkWzBdKTsN Cj4+IEBAIC03NDMsNyArNzIyLDYgQEAgc3RhdGljIGludCByZXNlcnZlX2JvX2FuZF9jb25kX3Zt cyhzdHJ1Y3Qga2dkX21lbSANCj4+ICptZW0sDQo+PiDCoMKgwqDCoMKgIGN0eC0+a2ZkX2JvLnBy aW9yaXR5ID0gMDsNCj4+IMKgwqDCoMKgwqAgY3R4LT5rZmRfYm8udHYuYm8gPSAmYm8tPnRibzsN Cj4+IMKgwqDCoMKgwqAgY3R4LT5rZmRfYm8udHYubnVtX3NoYXJlZCA9IDE7DQo+PiAtwqDCoMKg IGN0eC0+a2ZkX2JvLnVzZXJfcGFnZXMgPSBOVUxMOw0KPj4gwqDCoMKgwqDCoCBsaXN0X2FkZCgm Y3R4LT5rZmRfYm8udHYuaGVhZCwgJmN0eC0+bGlzdCk7DQo+PiDCoMKgwqDCoMKgIGkgPSAwOw0K Pj4gQEAgLTEzNzEsMTUgKzEzNDksNiBAQCBpbnQgYW1kZ3B1X2FtZGtmZF9ncHV2bV9mcmVlX21l bW9yeV9vZl9ncHUoDQo+PiDCoMKgwqDCoMKgIGxpc3RfZGVsKCZib19saXN0X2VudHJ5LT5oZWFk KTsNCj4+IMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZwcm9jZXNzX2luZm8tPmxvY2spOw0KPj4g LcKgwqDCoCAvKiBGcmVlIHVzZXIgcGFnZXMgaWYgbmVjZXNzYXJ5ICovDQo+PiAtwqDCoMKgIGlm IChtZW0tPnVzZXJfcGFnZXMpIHsNCj4+IC3CoMKgwqDCoMKgwqDCoCBwcl9kZWJ1ZygiJXM6IEZy ZWVpbmcgdXNlcl9wYWdlcyBhcnJheVxuIiwgX19mdW5jX18pOw0KPj4gLcKgwqDCoMKgwqDCoMKg IGlmIChtZW0tPnVzZXJfcGFnZXNbMF0pDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWxl YXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBtZW0tPmJvLT50Ym8udHRtLT5udW1fcGFnZXMpOw0KPj4gLcKgwqDCoMKg wqDCoMKgIGt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOw0KPj4gLcKgwqDCoCB9DQo+PiAtDQo+PiDC oMKgwqDCoMKgIHJldCA9IHJlc2VydmVfYm9fYW5kX2NvbmRfdm1zKG1lbSwgTlVMTCwgQk9fVk1f QUxMLCAmY3R4KTsNCj4+IMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KHJldCkpDQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+IEBAIC0xODU1LDI1ICsxODI0LDExIEBAIHN0YXRp YyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgDQo+PiBhbWRrZmRfcHJvY2Vz c19pbmZvICpwcm9jZXNzX2luZm8sDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYm8gPSBtZW0tPmJv Ow0KPj4gLcKgwqDCoMKgwqDCoMKgIGlmICghbWVtLT51c2VyX3BhZ2VzKSB7DQo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBtZW0tPnVzZXJfcGFnZXMgPQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBrdm1hbGxvY19hcnJheShiby0+dGJvLnR0bS0+bnVtX3BhZ2VzLA0KPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2Yo c3RydWN0IHBhZ2UgKiksDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsNCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmICghbWVtLT51c2VyX3BhZ2VzKSB7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHByX2VycigiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBwYWdlcyBhcnJheVxu IiwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1 bmNfXyk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVN Ow0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4gLcKgwqDCoMKgwqDCoMKgIH0gZWxz ZSBpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8tPnRiby50dG0tPm51bV9wYWdlcyk7DQo+ PiAtwqDCoMKgwqDCoMKgwqAgfQ0KPj4gLQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIEdldCB1 cGRhdGVkIHVzZXIgcGFnZXMgKi8NCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBhbWRncHVf dHRtX3R0X2dldF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLA0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtLT51c2VyX3BhZ2VzKTsNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJv LT50Ym8udHRtLT5wYWdlcyk7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkgew0KPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtLT51c2VyX3BhZ2VzWzBdID0gTlVMTDsNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvLT50Ym8udHRtLT5wYWdlc1swXSA9IE5VTEw7DQo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9pbmZvKCIlczogRmFpbGVkIHRvIGdldCB1c2Vy IHBhZ2VzOiAlZFxuIiwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19m dW5jX18sIHJldCk7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBQcmV0ZW5kIGl0 IHN1Y2NlZWRlZC4gSXQgd2lsbCBmYWlsIGxhdGVyDQo+PiBAQCAtMTg4MiwxMiArMTgzNyw2IEBA IHN0YXRpYyBpbnQgdXBkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgDQo+PiBhbWRrZmRf cHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8sDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICogc3RhbGxlZCB1c2VyIG1vZGUgcXVldWVzLg0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqLw0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+IC0NCj4+IC3CoMKgwqDCoMKg wqDCoCAvKiBNYXJrIHRoZSBCTyBhcyB2YWxpZCB1bmxlc3MgaXQgd2FzIGludmFsaWRhdGVkDQo+ PiAtwqDCoMKgwqDCoMKgwqDCoCAqIGFnYWluIGNvbmN1cnJlbnRseQ0KPj4gLcKgwqDCoMKgwqDC oMKgwqAgKi8NCj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoYXRvbWljX2NtcHhjaGcoJm1lbS0+aW52 YWxpZCwgaW52YWxpZCwgMCkgIT0gaW52YWxpZCkNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiAtRUFHQUlOOw0KPj4gwqDCoMKgwqDCoCB9DQo+PiDCoMKgwqDCoMKgIHJldHVybiAw Ow0KPj4gQEAgLTE5MTcsNyArMTg2Niw4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91 c2VyX3BhZ2VzKHN0cnVjdCANCj4+IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbykN Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJO RUwpOw0KPj4gwqDCoMKgwqDCoCBpZiAoIXBkX2JvX2xpc3RfZW50cmllcykgew0KPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHByX2VycigiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBQRCBCTyBsaXN0IGVu dHJpZXNcbiIsIA0KPj4gX19mdW5jX18pOw0KPj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5P TUVNOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FTk9NRU07DQo+PiArwqDCoMKgwqDCoMKg wqAgZ290byBvdXRfbm9fbWVtOw0KPj4gwqDCoMKgwqDCoCB9DQo+PiDCoMKgwqDCoMKgIElOSVRf TElTVF9IRUFEKCZyZXN2X2xpc3QpOw0KPj4gQEAgLTE5NDEsNyArMTg5MSw3IEBAIHN0YXRpYyBp bnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCANCj4+IGFtZGtmZF9wcm9jZXNz X2luZm8gKnByb2Nlc3NfaW5mbykNCj4+IMKgwqDCoMKgwqAgcmV0ID0gdHRtX2V1X3Jlc2VydmVf YnVmZmVycygmdGlja2V0LCAmcmVzdl9saXN0LCBmYWxzZSwgDQo+PiAmZHVwbGljYXRlcyk7DQo+ PiDCoMKgwqDCoMKgIFdBUk4oIWxpc3RfZW1wdHkoJmR1cGxpY2F0ZXMpLCAiRHVwbGljYXRlcyBz aG91bGQgYmUgZW1wdHkiKTsNCj4+IMKgwqDCoMKgwqAgaWYgKHJldCkNCj4+IC3CoMKgwqDCoMKg wqDCoCBnb3RvIG91dDsNCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dF9mcmVlOw0KPj4gwqDC oMKgwqDCoCBhbWRncHVfc3luY19jcmVhdGUoJnN5bmMpOw0KPj4gQEAgLTE5NjcsMTAgKzE5MTcs OCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgDQo+PiBh bWRrZmRfcHJvY2Vzc19pbmZvICpwcm9jZXNzX2luZm8pDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg Ym8gPSBtZW0tPmJvOw0KPj4gLcKgwqDCoMKgwqDCoMKgIC8qIENvcHkgcGFnZXMgYXJyYXkgYW5k IHZhbGlkYXRlIHRoZSBCTyBpZiB3ZSBnb3QgdXNlciBwYWdlcyAqLw0KPj4gLcKgwqDCoMKgwqDC oMKgIGlmIChtZW0tPnVzZXJfcGFnZXNbMF0pIHsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sDQo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtLT51c2Vy X3BhZ2VzKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBWYWxpZGF0ZSB0aGUgQk8gaWYgd2UgZ290 IHVzZXIgcGFnZXMgKi8NCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoYm8tPnRiby50dG0tPnBhZ2Vz WzBdKSB7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWRncHVfYm9fcGxhY2VtZW50 X2Zyb21fZG9tYWluKGJvLCBtZW0tPmRvbWFpbik7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4 KTsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsNCj4+IEBAIC0xOTc5 LDE2ICsxOTI3LDE2IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0 cnVjdCANCj4+IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbykNCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+PiAtwqDCoMKg wqDCoMKgwqAgLyogVmFsaWRhdGUgc3VjY2VlZGVkLCBub3cgdGhlIEJPIG93bnMgdGhlIHBhZ2Vz LCBmcmVlDQo+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIG91ciBjb3B5IG9mIHRoZSBwb2ludGVyIGFy cmF5LiBQdXQgdGhpcyBCTyBiYWNrIG9uDQo+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIHRoZSB1c2Vy cHRyX3ZhbGlkX2xpc3QuIElmIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZQ0KPj4gLcKgwqDCoMKgwqDC oMKgwqAgKiBpdCwgd2UgbmVlZCB0byBzdGFydCBmcm9tIHNjcmF0Y2guDQo+PiAtwqDCoMKgwqDC oMKgwqDCoCAqLw0KPj4gLcKgwqDCoMKgwqDCoMKgIGt2ZnJlZShtZW0tPnVzZXJfcGFnZXMpOw0K Pj4gLcKgwqDCoMKgwqDCoMKgIG1lbS0+dXNlcl9wYWdlcyA9IE5VTEw7DQo+PiDCoMKgwqDCoMKg wqDCoMKgwqAgbGlzdF9tb3ZlX3RhaWwoJm1lbS0+dmFsaWRhdGVfbGlzdC5oZWFkLA0KPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcHJvY2Vzc19pbmZvLT51c2Vy cHRyX3ZhbGlkX2xpc3QpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIC8qIFN0b3AgSE1NIHRyYWNrIHRo ZSB1c2VycHRyIHVwZGF0ZS4gV2UgZG9udCBjaGVjayB0aGUgcmV0dXJuDQo+PiArwqDCoMKgwqDC oMKgwqDCoCAqIHZhbHVlIGZvciBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSBiZWNh dXNlIHdlIHdpbGwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogcmVzY2hlZHVsZSB0aGUgcmVzdG9y ZSB3b3JrZXIgaWYgcHJvY2Vzc19pbmZvLT5ldmljdGVkX2Jvcw0KPj4gK8KgwqDCoMKgwqDCoMKg wqAgKiBpcyB1cGRhdGVkLg0KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8NCj4+ICvCoMKgwqDCoMKg wqDCoCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoYm8tPnRiby50dG0pOw0KPj4g Kw0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFVwZGF0ZSBtYXBwaW5nLiBJZiB0aGUgQk8gd2Fz IG5vdCB2YWxpZGF0ZWQNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICogKGJlY2F1c2Ugd2UgY291 bGRuJ3QgZ2V0IHVzZXIgcGFnZXMpLCB0aGlzIHdpbGwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg ICogY2xlYXIgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggd2lsbCByZXN1bHQgaW4NCj4+ IEBAIC0yMDIyLDggKzE5NzAsMTUgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9pbnZhbGlkX3VzZXJf cGFnZXMoc3RydWN0IA0KPj4gYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvKQ0KPj4g wqDCoMKgwqDCoCB0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmdGlja2V0LCAmcmVzdl9saXN0 KTsNCj4+IMKgwqDCoMKgwqAgYW1kZ3B1X3N5bmNfd2FpdCgmc3luYywgZmFsc2UpOw0KPj4gwqDC oMKgwqDCoCBhbWRncHVfc3luY19mcmVlKCZzeW5jKTsNCj4+IC1vdXQ6DQo+PiArb3V0X2ZyZWU6 DQo+PiDCoMKgwqDCoMKgIGtmcmVlKHBkX2JvX2xpc3RfZW50cmllcyk7DQo+PiArb3V0X25vX21l bToNCj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1lbSwgdG1wX21lbSwNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcHJvY2Vzc19pbmZvLT51c2VycHRy X2ludmFsX2xpc3QsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmFsaWRh dGVfbGlzdC5oZWFkKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgYm8gPSBtZW0tPmJvOw0KPj4gK8Kg wqDCoMKgwqDCoMKgIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0 bSk7DQo+PiArwqDCoMKgIH0NCj4+IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+IMKgIH0NCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5o IA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oDQo+PiBp bmRleCA3YzVmNWQxNjAxZTYuLmExMzBlNzY2Y2JkYiAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9ib19saXN0LmgNCj4+IEBAIC0zNiw3ICszNiw3IEBAIHN0 cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSB7DQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVf Ym9fdmHCoMKgwqDCoMKgwqDCoCAqYm9fdmE7DQo+PiDCoMKgwqDCoMKgIHVpbnQzMl90wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwcmlvcml0eTsNCj4+IMKgwqDCoMKgwqAgc3RydWN0IHBhZ2XCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICoqdXNlcl9wYWdlczsNCj4+IC3CoMKgwqAgaW50wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVzZXJfaW52YWxpZGF0ZWQ7DQo+PiArwqDCoMKgIGJvb2zC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXNlcl9pbnZhbGlkYXRlZDsNCj4+IMKgIH07 DQo+PiDCoCBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3Qgew0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfY3MuYw0KPj4gaW5kZXggNTJhNWU0ZmRjOTViLi43MGJkZjlmZjBiYWIg MTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYw0K Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMNCj4+IEBAIC01 Miw3ICs1Miw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3VzZXJfZmVuY2VfY2h1bmsoc3RydWN0 IA0KPj4gYW1kZ3B1X2NzX3BhcnNlciAqcCwNCj4+IMKgwqDCoMKgwqAgcC0+dWZfZW50cnkudHYu Ym8gPSAmYm8tPnRibzsNCj4+IMKgwqDCoMKgwqAgLyogT25lIGZvciBUVE0gYW5kIG9uZSBmb3Ig dGhlIENTIGpvYiAqLw0KPj4gwqDCoMKgwqDCoCBwLT51Zl9lbnRyeS50di5udW1fc2hhcmVkID0g MjsNCj4+IC3CoMKgwqAgcC0+dWZfZW50cnkudXNlcl9wYWdlcyA9IE5VTEw7DQo+PiDCoMKgwqDC oMKgIGRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsNCj4+IEBAIC01NDAsMTQgKzUz OSwxNCBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19saXN0X3ZhbGlkYXRlKHN0cnVjdCANCj4+IGFt ZGdwdV9jc19wYXJzZXIgKnAsDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHVzZXJtbSAmJiB1 c2VybW0gIT0gY3VycmVudC0+bW0pDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVQRVJNOw0KPj4gLcKgwqDCoMKgwqDCoMKgIC8qIENoZWNrIGlmIHdlIGhhdmUgdXNlciBw YWdlcyBhbmQgbm9ib2R5IGJvdW5kIHRoZSBCTyANCj4+IGFscmVhZHkgKi8NCj4+IC3CoMKgwqDC oMKgwqDCoCBpZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRt KSAmJg0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9iai0+dXNlcl9wYWdlcykgew0KPj4g K8KgwqDCoMKgwqDCoMKgIGlmIChhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoYm8tPnRiby50dG0p ICYmDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2JqLT51c2VyX2ludmFsaWRhdGVkICYm IGxvYmotPnVzZXJfcGFnZXMpIHsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdw dV9ib19wbGFjZW1lbnRfZnJvbV9kb21haW4oYm8sDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFNREdQVV9HRU1fRE9NQUlOX0NQ VSk7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0gdHRtX2JvX3ZhbGlkYXRlKCZi by0+dGJvLCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAocikNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHI7DQo+PiArDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWRncHVfdHRtX3R0X3Nl dF91c2VyX3BhZ2VzKGJvLT50Ym8udHRtLA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvYmotPnVzZXJfcGFnZXMpOw0KPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmluZGluZ191c2VycHRyID0gdHJ1ZTsNCj4+IEBA IC01NzgsNyArNTc3LDYgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3Qg DQo+PiBhbWRncHVfY3NfcGFyc2VyICpwLA0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2Jv ICpnZHM7DQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfYm8gKmd3czsNCj4+IMKgwqDCoMKg wqAgc3RydWN0IGFtZGdwdV9ibyAqb2E7DQo+PiAtwqDCoMKgIHVuc2lnbmVkIHRyaWVzID0gMTA7 DQo+PiDCoMKgwqDCoMKgIGludCByOw0KPj4gwqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmcC0+ dmFsaWRhdGVkKTsNCj4+IEBAIC02MTQsNzkgKzYxMiw0NSBAQCBzdGF0aWMgaW50IGFtZGdwdV9j c19wYXJzZXJfYm9zKHN0cnVjdCANCj4+IGFtZGdwdV9jc19wYXJzZXIgKnAsDQo+PiDCoMKgwqDC oMKgIGlmIChwLT51Zl9lbnRyeS50di5ibyAmJiANCj4+ICF0dG1fdG9fYW1kZ3B1X2JvKHAtPnVm X2VudHJ5LnR2LmJvKS0+cGFyZW50KQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGxpc3RfYWRkKCZw LT51Zl9lbnRyeS50di5oZWFkLCAmcC0+dmFsaWRhdGVkKTsNCj4+IC3CoMKgwqAgd2hpbGUgKDEp IHsNCj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIG5lZWRfcGFnZXM7DQo+PiAt DQo+PiAtwqDCoMKgwqDCoMKgwqAgciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnAtPnRpY2tl dCwgJnAtPnZhbGlkYXRlZCwgdHJ1ZSwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmZHVwbGljYXRlcyk7DQo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKHVu bGlrZWx5KHIgIT0gMCkpIHsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyICE9IC1F UkVTVEFSVFNZUykNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9S KCJ0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzIGZhaWxlZC5cbiIpOw0KPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZ290byBlcnJvcl9mcmVlX3BhZ2VzOw0KPj4gLcKgwqDCoMKgwqDCoMKgIH0NCj4+ IC0NCj4+IC3CoMKgwqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmbmVlZF9wYWdlcyk7DQo+PiAt wqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBw LT5ib19saXN0KSB7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2Jv ICpibyA9IHR0bV90b19hbWRncHVfYm8oZS0+dHYuYm8pOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChiby0+dGJv LnR0bSwNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZS0+dXNlcl9pbnZh bGlkYXRlZCkgJiYgZS0+dXNlcl9wYWdlcykgew0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBXZSBhY3F1aXJlZCBhIHBhZ2UgYXJyYXksIGJ1dCBzb21lYm9keQ0K Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogaW52YWxpZGF0ZWQgaXQuIEZy ZWUgaXQgYW5kIHRyeSBhZ2Fpbg0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICovDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlbGVhc2VfcGFnZXMoZS0+ dXNlcl9wYWdlcywNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAga3ZmcmVlKGUtPnVzZXJfcGFnZXMpOw0KPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBlLT51c2VyX3BhZ2VzID0gTlVMTDsNCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0NCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChhbWRncHVf dHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50dG0pICYmDQo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICFlLT51c2VyX3BhZ2VzKSB7DQo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGxpc3RfZGVsKCZlLT50di5oZWFkKTsNCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9hZGQoJmUtPnR2LmhlYWQsICZuZWVkX3BhZ2VzKTsN Cj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2JvX3VucmVz ZXJ2ZShibyk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+PiArwqDCoMKgIC8qIEdl dCB1c2VycHRyIGJhY2tpbmcgcGFnZXMuIElmIHBhZ2VzIGFyZSB1cGRhdGVkIGFmdGVyIHJlZ2lz dGVyZWQNCj4+ICvCoMKgwqDCoCAqIGluIGFtZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgpLCBhbWRn cHVfY3NfbGlzdF92YWxpZGF0ZSgpIHdpbGwgZG8NCj4+ICvCoMKgwqDCoCAqIGFtZGdwdV90dG1f YmFja2VuZF9iaW5kKCkgdG8gZmx1c2ggYW5kIGludmFsaWRhdGUgbmV3IHBhZ2VzDQo+PiArwqDC oMKgwqAgKi8NCj4+ICvCoMKgwqAgYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRy eShlLCBwLT5ib19saXN0KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9ibyAq Ym8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBib29s IHVzZXJwYWdlX2ludmFsaWRhdGVkID0gZmFsc2U7DQo+PiArwqDCoMKgwqDCoMKgwqAgaW50IGk7 DQo+PiArDQo+PiArwqDCoMKgwqDCoMKgwqAgZS0+dXNlcl9wYWdlcyA9IGt2bWFsbG9jX2FycmF5 KGJvLT50Ym8udHRtLT5udW1fcGFnZXMsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc2l6ZW9mKHN0cnVjdCBwYWdlICopLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsNCj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoIWUtPnVzZXJfcGFnZXMpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIERSTV9FUlJPUigiY2FsbG9jIGZhaWx1cmVcbiIpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTk9NRU07DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4gLcKgwqDC oMKgwqDCoMKgIGlmIChsaXN0X2VtcHR5KCZuZWVkX3BhZ2VzKSkNCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgIC8qIFVucmVzZXJ2ZSBl dmVyeXRoaW5nIGFnYWluLiAqLw0KPj4gLcKgwqDCoMKgwqDCoMKgIHR0bV9ldV9iYWNrb2ZmX3Jl c2VydmF0aW9uKCZwLT50aWNrZXQsICZwLT52YWxpZGF0ZWQpOw0KPj4gLQ0KPj4gLcKgwqDCoMKg wqDCoMKgIC8qIFdlIHRyaWVkIHRvbyBtYW55IHRpbWVzLCBqdXN0IGFib3J0ICovDQo+PiAtwqDC oMKgwqDCoMKgwqAgaWYgKCEtLXRyaWVzKSB7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ID0gLUVERUFETEs7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoImRlYWRs b2NrIGluICVzXG4iLCBfX2Z1bmNfXyk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3Rv IGVycm9yX2ZyZWVfcGFnZXM7DQo+PiArwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV90dG1fdHRf Z2V0X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sIGUtPnVzZXJfcGFnZXMpOw0KPj4gK8KgwqDCoMKg wqDCoMKgIGlmIChyKSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrdmZyZWUoZS0+dXNl cl9wYWdlcyk7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlLT51c2VyX3BhZ2VzID0gTlVM TDsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByOw0KPj4gwqDCoMKgwqDCoMKg wqDCoMKgIH0NCj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBGaWxsIHRoZSBwYWdlIGFycmF5cyBmb3Ig YWxsIHVzZXJwdHJzLiAqLw0KPj4gLcKgwqDCoMKgwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnko ZSwgJm5lZWRfcGFnZXMsIHR2LmhlYWQpIHsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCB0dG1fdHQgKnR0bSA9IGUtPnR2LmJvLT50dG07DQo+PiAtDQo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlLT51c2VyX3BhZ2VzID0ga3ZtYWxsb2NfYXJyYXkodHRtLT5udW1fcGFnZXMs DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc2l6ZW9mKHN0cnVjdCBwYWdlKiksDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8p Ow0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFlLT51c2VyX3BhZ2VzKSB7DQo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSAtRU5PTUVNOw0KPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoImNhbGxvYyBmYWlsdXJlIGluICVzXG4i LCBfX2Z1bmNfXyk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJy b3JfZnJlZV9wYWdlczsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+IC0NCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHR0 bSwgZS0+dXNlcl9wYWdlcyk7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocikgew0K Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoImFtZGdwdV90dG1f dHRfZ2V0X3VzZXJfcGFnZXMgZmFpbGVkLlxuIik7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGt2ZnJlZShlLT51c2VyX3BhZ2VzKTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZS0+dXNlcl9wYWdlcyA9IE5VTEw7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfZnJlZV9wYWdlczsNCj4+ICvCoMKgwqDCoMKgwqDCoCBm b3IgKGkgPSAwOyBpIDwgYm8tPnRiby50dG0tPm51bV9wYWdlczsgaSsrKSB7DQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZiAoYm8tPnRiby50dG0tPnBhZ2VzW2ldICE9IGUtPnVzZXJfcGFn ZXNbaV0pIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXNlcnBhZ2VfaW52 YWxpZGF0ZWQgPSB0cnVlOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB9DQo+PiArwqDCoMKgwqDCoMKgwqAgZS0+dXNlcl9pbnZhbGlkYXRlZCA9IHVzZXJwYWdlX2lu dmFsaWRhdGVkOw0KPj4gK8KgwqDCoCB9DQo+PiAtwqDCoMKgwqDCoMKgwqAgLyogQW5kIHRyeSBh Z2Fpbi4gKi8NCj4+IC3CoMKgwqDCoMKgwqDCoCBsaXN0X3NwbGljZSgmbmVlZF9wYWdlcywgJnAt PnZhbGlkYXRlZCk7DQo+PiArwqDCoMKgIHIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZwLT50 aWNrZXQsICZwLT52YWxpZGF0ZWQsIHRydWUsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZkdXBsaWNhdGVzKTsNCj4+ICvCoMKgwqAgaWYgKHVubGlrZWx5KHIgIT0g MCkpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAociAhPSAtRVJFU1RBUlRTWVMpDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoInR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMgZmFp bGVkLlxuIik7DQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7DQo+PiDCoMKgwqDCoMKgIH0N Cj4+IMKgwqDCoMKgwqAgYW1kZ3B1X2NzX2dldF90aHJlc2hvbGRfZm9yX21vdmVzKHAtPmFkZXYs IA0KPj4gJnAtPmJ5dGVzX21vdmVkX3RocmVzaG9sZCwNCj4+IEBAIC03NTUsMTcgKzcxOSw3IEBA IHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IA0KPj4gYW1kZ3B1X2NzX3Bh cnNlciAqcCwNCj4+IMKgIGVycm9yX3ZhbGlkYXRlOg0KPj4gwqDCoMKgwqDCoCBpZiAocikNCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmcC0+dGlja2V0 LCAmcC0+dmFsaWRhdGVkKTsNCj4+IC0NCj4+IC1lcnJvcl9mcmVlX3BhZ2VzOg0KPj4gLQ0KPj4g LcKgwqDCoCBhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUsIHAtPmJvX2xp c3QpIHsNCj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoIWUtPnVzZXJfcGFnZXMpDQo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoCByZWxl YXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsIGUtPnR2LmJvLT50dG0tPm51bV9wYWdlcyk7DQo+PiAt wqDCoMKgwqDCoMKgwqAga3ZmcmVlKGUtPnVzZXJfcGFnZXMpOw0KPj4gLcKgwqDCoCB9DQo+PiAt DQo+PiArb3V0Og0KPj4gwqDCoMKgwqDCoCByZXR1cm4gcjsNCj4+IMKgIH0NCj4+IEBAIC0xMjI0 LDggKzExNzgsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19zdWJtaXQoc3RydWN0IA0KPj4gYW1k Z3B1X2NzX3BhcnNlciAqcCwNCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9ib19saXN0X2Vu dHJ5ICplOw0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iOw0KPj4gwqDCoMKg wqDCoCB1aW50NjRfdCBzZXE7DQo+PiAtDQo+PiAtwqDCoMKgIGludCByOw0KPj4gK8KgwqDCoCBp bnQgciA9IDA7DQo+PiDCoMKgwqDCoMKgIGpvYiA9IHAtPmpvYjsNCj4+IMKgwqDCoMKgwqAgcC0+ am9iID0gTlVMTDsNCj4+IEBAIC0xMjM0LDE1ICsxMTg3LDIxIEBAIHN0YXRpYyBpbnQgYW1kZ3B1 X2NzX3N1Ym1pdChzdHJ1Y3QgDQo+PiBhbWRncHVfY3NfcGFyc2VyICpwLA0KPj4gwqDCoMKgwqDC oCBpZiAocikNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycm9yX3VubG9jazsNCj4+IC3C oMKgwqAgLyogTm8gbWVtb3J5IGFsbG9jYXRpb24gaXMgYWxsb3dlZCB3aGlsZSBob2xkaW5nIHRo ZSBtbiBsb2NrICovDQo+PiArwqDCoMKgIC8qIE5vIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsbG93 ZWQgd2hpbGUgaG9sZGluZyB0aGUgbW4gbG9jay4NCj4+ICvCoMKgwqDCoCAqIHAtPm1uIGlzIGhv bGQgdW50aWwgYW1kZ3B1X2NzX3N1Ym1pdCBpcyBmaW5pc2hlZCBhbmQgZmVuY2UgaXMgDQo+PiBh ZGRlZA0KPj4gK8KgwqDCoMKgICogdG8gQk9zLg0KPj4gK8KgwqDCoMKgICovDQo+PiDCoMKgwqDC oMKgIGFtZGdwdV9tbl9sb2NrKHAtPm1uKTsNCj4+ICsNCj4+ICvCoMKgwqAgLyogSWYgdXNlcnB0 ciBhcmUgdXBkYXRlZCBhZnRlciBhbWRncHVfY3NfcGFyc2VyX2JvcygpLCByZXN0YXJ0IA0KPj4g Y3MgKi8NCj4+IMKgwqDCoMKgwqAgYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRy eShlLCBwLT5ib19saXN0KSB7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9i byAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKGUtPnR2LmJvKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCBp ZiAoYW1kZ3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKGJvLT50Ym8udHRtKSkgew0KPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IC1FUkVTVEFSVFNZUzsNCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfYWJvcnQ7DQo+PiAtwqDCoMKgwqDCoMKgwqAgfQ0KPj4g K8KgwqDCoMKgwqDCoMKgIHIgfD0gIWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShi by0+dGJvLnR0bSk7DQo+IA0KPiBKdXN0IGFib3J0IHdoZW4geW91IHNlZSB0aGUgZmlyc3Qgb25l IHdpdGggYSBwcm9ibGVtIGhlcmUuDQo+IA0KPiBUaGVyZSBpcyBubyB2YWx1ZSBpbiBjaGVja2lu ZyBhbGwgb2YgdGhlbS4NCj4gDQo+PiArwqDCoMKgIH0NCj4+ICvCoMKgwqAgaWYgKHIpIHsNCj4+ ICvCoMKgwqDCoMKgwqDCoCByID0gLUVBR0FJTjsNCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVy cm9yX2Fib3J0Ow0KPj4gwqDCoMKgwqDCoCB9DQo+PiDCoMKgwqDCoMKgIGpvYi0+b3duZXIgPSBw LT5maWxwOw0KPj4gQEAgLTEyODksMTQgKzEyNDgsMjAgQEAgc3RhdGljIGludCBhbWRncHVfY3Nf c3VibWl0KHN0cnVjdCANCj4+IGFtZGdwdV9jc19wYXJzZXIgKnAsDQo+PiDCoCBpbnQgYW1kZ3B1 X2NzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCANCj4+ IGRybV9maWxlICpmaWxwKQ0KPj4gwqAgew0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+PiAtwqDCoMKgIHVuaW9uIGRybV9hbWRn cHVfY3MgKmNzID0gZGF0YTsNCj4+IC3CoMKgwqAgc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgcGFy c2VyID0ge307DQo+PiAtwqDCoMKgIGJvb2wgcmVzZXJ2ZWRfYnVmZmVycyA9IGZhbHNlOw0KPj4g K8KgwqDCoCB1bmlvbiBkcm1fYW1kZ3B1X2NzICpjczsNCj4+ICvCoMKgwqAgc3RydWN0IGFtZGdw dV9jc19wYXJzZXIgcGFyc2VyOw0KPj4gK8KgwqDCoCBib29sIHJlc2VydmVkX2J1ZmZlcnM7DQo+ PiArwqDCoMKgIGludCB0cmllcyA9IDEwOw0KPj4gwqDCoMKgwqDCoCBpbnQgaSwgcjsNCj4+IMKg wqDCoMKgwqAgaWYgKCFhZGV2LT5hY2NlbF93b3JraW5nKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiAtRUJVU1k7DQo+PiArcmVzdGFydDoNCj4+ICvCoMKgwqAgbWVtc2V0KCZwYXJzZXIs IDAsIHNpemVvZihwYXJzZXIpKTsNCj4+ICvCoMKgwqAgY3MgPSBkYXRhOw0KPj4gK8KgwqDCoCBy ZXNlcnZlZF9idWZmZXJzID0gZmFsc2U7DQo+PiArDQo+PiDCoMKgwqDCoMKgIHBhcnNlci5hZGV2 ID0gYWRldjsNCj4+IMKgwqDCoMKgwqAgcGFyc2VyLmZpbHAgPSBmaWxwOw0KPj4gQEAgLTEzMzgs NiArMTMwMywxNSBAQCBpbnQgYW1kZ3B1X2NzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IA0KPj4gdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxwKQ0KPj4gwqAgb3V0Og0KPj4g wqDCoMKgwqDCoCBhbWRncHVfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgciwgcmVzZXJ2ZWRfYnVm ZmVycyk7DQo+PiArDQo+PiArwqDCoMKgIGlmIChyID09IC1FQUdBSU4pIHsNCj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoIS0tdHJpZXMpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9F UlJPUigiUG9zc2libGUgZGVhZGxvY2s/IFJldHJ5IHRvbyBtYW55IHRpbWVzXG4iKTsNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRURFQURMSzsNCj4+ICvCoMKgwqDCoMKgwqDC oCB9DQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byByZXN0YXJ0Ow0KPj4gK8KgwqDCoCB9DQo+PiAr DQo+IA0KPiBJIHdvdWxkIHN0aWxsIHNheSB0byBiZXR0ZXIganVzdCByZXR1cm4gdG8gdXNlcnNw YWNlIGhlcmUuDQo+IA0KPiBCZWNhdXNlIG9mIHRoZSB3YXkgSE1NIHdvcmtzIDEwIHJldHJpZXMg bWlnaHQgbm90IGJlIHN1ZmZpY2llbnQgYW55IG1vcmUuDQo+IA0KPiBDaHJpc3RpYW4uDQo+IA0K Pj4gwqDCoMKgwqDCoCByZXR1cm4gcjsNCj4+IMKgIH0NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgDQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9nZW0uYw0KPj4gaW5kZXggZDIxZGQyZjM2OWRhLi41NTUyODVlMzI5 ZWQgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2Vt LmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYw0KPj4g QEAgLTMyOSwyNiArMzI5LDI0IEBAIGludCBhbWRncHVfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgDQo+PiAqZGV2LCB2b2lkICpkYXRhLA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKg IHIgPSBhbWRncHVfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHIpDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZyZWVfcGFnZXM7DQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIHVzZXJfcGFnZXNfZG9uZTsNCj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBhbWRncHVfYm9fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBBTURHUFVfR0VN X0RPTUFJTl9HVFQpOw0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSB0dG1fYm9fdmFsaWRhdGUo JmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBh bWRncHVfYm9fdW5yZXNlcnZlKGJvKTsNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocikNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZnJlZV9wYWdlczsNCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gdXNlcl9wYWdlc19kb25lOw0KPj4gwqDCoMKgwqDCoCB9DQo+PiDC oMKgwqDCoMKgIHIgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlscCwgZ29iaiwgJmhhbmRsZSk7 DQo+PiAtwqDCoMKgIC8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9s ZHMgaXQgbm93ICovDQo+PiAtwqDCoMKgIGRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2Jq KTsNCj4+IMKgwqDCoMKgwqAgaWYgKHIpDQo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHI7DQo+ PiArwqDCoMKgwqDCoMKgwqAgZ290byB1c2VyX3BhZ2VzX2RvbmU7DQo+PiDCoMKgwqDCoMKgIGFy Z3MtPmhhbmRsZSA9IGhhbmRsZTsNCj4+IC3CoMKgwqAgcmV0dXJuIDA7DQo+PiAtZnJlZV9wYWdl czoNCj4+IC3CoMKgwqAgcmVsZWFzZV9wYWdlcyhiby0+dGJvLnR0bS0+cGFnZXMsIGJvLT50Ym8u dHRtLT5udW1fcGFnZXMpOw0KPj4gK3VzZXJfcGFnZXNfZG9uZToNCj4+ICvCoMKgwqAgaWYgKGFy Z3MtPmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX1ZBTElEQVRFKQ0KPj4gK8KgwqDCoMKgwqDC oMKgIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7DQo+PiDC oCByZWxlYXNlX29iamVjdDoNCj4+IMKgwqDCoMKgwqAgZHJtX2dlbV9vYmplY3RfcHV0X3VubG9j a2VkKGdvYmopOw0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9tbi5jIA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYw0K Pj4gaW5kZXggZTM1Njg2N2QyMzA4Li5mYTI1MTYwMTZjNDMgMTAwNjQ0DQo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYw0KPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMNCj4+IEBAIC0yMjIsOCArMjIyLDYgQEAgc3RhdGlj IHZvaWQgYW1kZ3B1X21uX2ludmFsaWRhdGVfbm9kZShzdHJ1Y3QgDQo+PiBhbWRncHVfbW5fbm9k ZSAqbm9kZSwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRydWUsIGZhbHNlLCBNQVhf U0NIRURVTEVfVElNRU9VVCk7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIgPD0gMCkNCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiKCVsZCkgZmFpbGVkIHRvIHdh aXQgZm9yIHVzZXIgYm9cbiIsIHIpOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKgIGFtZGdwdV90 dG1fdHRfbWFya191c2VyX3BhZ2VzKGJvLT50Ym8udHRtKTsNCj4+IMKgwqDCoMKgwqAgfQ0KPj4g wqAgfQ0KPj4gQEAgLTUwNCwzICs1MDIsMjYgQEAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3Rlcihz dHJ1Y3QgYW1kZ3B1X2JvICpibykNCj4+IMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZhZGV2LT5t bl9sb2NrKTsNCj4+IMKgIH0NCj4+ICsvKiBmbGFncyB1c2VkIGJ5IEhNTSBpbnRlcm5hbCwgbm90 IHJlbGF0ZWQgdG8gQ1BVL0dQVSBQVEUgZmxhZ3MgKi8NCj4+ICtzdGF0aWMgY29uc3QgdWludDY0 X3QgaG1tX3JhbmdlX2ZsYWdzW0hNTV9QRk5fRkxBR19NQVhdID0gew0KPj4gK8KgwqDCoMKgwqDC oMKgICgxIDw8IDApLCAvKiBITU1fUEZOX1ZBTElEICovDQo+PiArwqDCoMKgwqDCoMKgwqAgKDEg PDwgMSksIC8qIEhNTV9QRk5fV1JJVEUgKi8NCj4+ICvCoMKgwqDCoMKgwqDCoCAwIC8qIEhNTV9Q Rk5fREVWSUNFX1BSSVZBVEUgKi8NCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCB1aW50 NjRfdCBobW1fcmFuZ2VfdmFsdWVzW0hNTV9QRk5fVkFMVUVfTUFYXSA9IHsNCj4+ICvCoMKgwqDC oMKgwqDCoCAweGZmZmZmZmZmZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLw0KPj4gK8Kg wqDCoMKgwqDCoMKgIDAsIC8qIEhNTV9QRk5fTk9ORSAqLw0KPj4gK8KgwqDCoMKgwqDCoMKgIDB4 ZmZmZmZmZmZmZmZmZmZmY1VMIC8qIEhNTV9QRk5fU1BFQ0lBTCAqLw0KPj4gK307DQo+PiArDQo+ PiArdm9pZCBhbWRncHVfaG1tX2luaXRfcmFuZ2Uoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpDQo+ PiArew0KPj4gK8KgwqDCoCBpZiAocmFuZ2UpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCByYW5nZS0+ ZmxhZ3MgPSBobW1fcmFuZ2VfZmxhZ3M7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmFuZ2UtPnZhbHVl cyA9IGhtbV9yYW5nZV92YWx1ZXM7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmFuZ2UtPnBmbl9zaGlm dCA9IFBBR0VfU0hJRlQ7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmFuZ2UtPnBmbnMgPSBOVUxMOw0K Pj4gK8KgwqDCoMKgwqDCoMKgIElOSVRfTElTVF9IRUFEKCZyYW5nZS0+bGlzdCk7DQo+PiArwqDC oMKgIH0NCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X21uLmggDQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5o DQo+PiBpbmRleCAwYTUxZmQwMDAyMWMuLjQ4MDNlMjE2ZTE3NCAxMDA2NDQNCj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oDQo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaA0KPj4gQEAgLTI1LDkgKzI1LDEwIEBADQo+PiDC oCAjZGVmaW5lIF9fQU1ER1BVX01OX0hfXw0KPj4gwqAgLyoNCj4+IC0gKiBNTVUgTm90aWZpZXIN Cj4+ICsgKiBITU0gbWlycm9yDQo+PiDCoMKgICovDQo+PiDCoCBzdHJ1Y3QgYW1kZ3B1X21uOw0K Pj4gK3N0cnVjdCBobW1fcmFuZ2U7DQo+PiDCoCBlbnVtIGFtZGdwdV9tbl90eXBlIHsNCj4+IMKg wqDCoMKgwqAgQU1ER1BVX01OX1RZUEVfR0ZYLA0KPj4gQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0 IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSANCj4+ICphZGV2 LA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGFtZGdwdV9tbl90 eXBlIHR5cGUpOw0KPj4gwqAgaW50IGFtZGdwdV9tbl9yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2Jv ICpibywgdW5zaWduZWQgbG9uZyBhZGRyKTsNCj4+IMKgIHZvaWQgYW1kZ3B1X21uX3VucmVnaXN0 ZXIoc3RydWN0IGFtZGdwdV9ibyAqYm8pOw0KPj4gK3ZvaWQgYW1kZ3B1X2htbV9pbml0X3Jhbmdl KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTsNCj4+IMKgICNlbHNlDQo+PiDCoCBzdGF0aWMgaW5s aW5lIHZvaWQgYW1kZ3B1X21uX2xvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pIHt9DQo+PiDCoCBz dGF0aWMgaW5saW5lIHZvaWQgYW1kZ3B1X21uX3VubG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikg e30NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRt LmMgDQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYw0KPj4gaW5k ZXggNzNlNzFlNjFkYzk5Li4xZTY3NTA0OGY3OTAgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV90dG0uYw0KPj4gQEAgLTQzLDYgKzQzLDcgQEANCj4+IMKgICNpbmNs dWRlIDxsaW51eC9wYWdlbWFwLmg+DQo+PiDCoCAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0K Pj4gwqAgI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2htbS5o Pg0KPj4gwqAgI2luY2x1ZGUgImFtZGdwdS5oIg0KPj4gwqAgI2luY2x1ZGUgImFtZGdwdV9vYmpl Y3QuaCINCj4+IMKgICNpbmNsdWRlICJhbWRncHVfdHJhY2UuaCINCj4+IEBAIC03MDUsOTggKzcw NiwxMDIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgDQo+PiBhbWRncHVfdHRtX2lvX21lbV9wZm4o c3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywNCj4+IMKgIC8qDQo+PiDCoMKgICogVFRNIGJh Y2tlbmQgZnVuY3Rpb25zLg0KPj4gwqDCoCAqLw0KPj4gLXN0cnVjdCBhbWRncHVfdHRtX2d1cF90 YXNrX2xpc3Qgew0KPj4gLcKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKgIGxpc3Q7DQo+PiAt wqDCoMKgIHN0cnVjdCB0YXNrX3N0cnVjdMKgwqDCoCAqdGFzazsNCj4+IC19Ow0KPj4gLQ0KPj4g wqAgc3RydWN0IGFtZGdwdV90dG1fdHQgew0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgdHRtX2RtYV90 dMKgwqDCoCB0dG07DQo+PiDCoMKgwqDCoMKgIHU2NMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2Zm c2V0Ow0KPj4gwqDCoMKgwqDCoCB1aW50NjRfdMKgwqDCoMKgwqDCoMKgIHVzZXJwdHI7DQo+PiDC oMKgwqDCoMKgIHN0cnVjdCB0YXNrX3N0cnVjdMKgwqDCoCAqdXNlcnRhc2s7DQo+PiDCoMKgwqDC oMKgIHVpbnQzMl90wqDCoMKgwqDCoMKgwqAgdXNlcmZsYWdzOw0KPj4gLcKgwqDCoCBzcGlubG9j a190wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VwdGFza2xvY2s7DQo+PiAtwqDCoMKgIHN0 cnVjdCBsaXN0X2hlYWTCoMKgwqDCoMKgwqDCoCBndXB0YXNrczsNCj4+IC3CoMKgwqAgYXRvbWlj X3TCoMKgwqDCoMKgwqDCoCBtbXVfaW52YWxpZGF0aW9uczsNCj4+IC3CoMKgwqAgdWludDMyX3TC oMKgwqDCoMKgwqDCoCBsYXN0X3NldF9wYWdlczsNCj4+ICvCoMKgwqAgc3RydWN0IGhtbV9yYW5n ZcKgwqDCoCByYW5nZTsNCj4+IMKgIH07DQo+PiDCoCAvKioNCj4+IC0gKiBhbWRncHVfdHRtX3R0 X2dldF91c2VyX3BhZ2VzIC0gUGluIHBhZ2VzIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGEgDQo+ PiBVU0VSUFRSDQo+PiAtICogcG9pbnRlciB0byBtZW1vcnkNCj4+ICsgKiBhbWRncHVfdHRtX3R0 X2dldF91c2VyX3BhZ2VzIC0gZ2V0IGRldmljZSBhY2Nlc3NpYmxlIHBhZ2VzIHRoYXQgDQo+PiBi YWNrIHVzZXINCj4+ICsgKiBtZW1vcnkgYW5kIHN0YXJ0IEhNTSB0cmFja2luZyBDUFUgcGFnZSB0 YWJsZSB1cGRhdGUNCj4+IMKgwqAgKg0KPj4gLSAqIENhbGxlZCBieSBhbWRncHVfZ2VtX3VzZXJw dHJfaW9jdGwoKSBhbmQgYW1kZ3B1X2NzX3BhcnNlcl9ib3MoKS4NCj4+IC0gKiBUaGlzIHByb3Zp ZGVzIGEgd3JhcHBlciBhcm91bmQgdGhlIGdldF91c2VyX3BhZ2VzKCkgY2FsbCB0byBwcm92aWRl DQo+PiAtICogZGV2aWNlIGFjY2Vzc2libGUgcGFnZXMgdGhhdCBiYWNrIHVzZXIgbWVtb3J5Lg0K Pj4gKyAqIENhbGxpbmcgZnVuY3Rpb24gbXVzdCBjYWxsIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9y YW5nZV9kb25lKCkgb25jZSANCj4+IGFuZCBvbmx5DQo+PiArICogb25jZSBhZnRlcndhcmRzIHRv IHN0b3AgSE1NIHRyYWNraW5nDQo+PiDCoMKgICovDQo+PiDCoCBpbnQgYW1kZ3B1X3R0bV90dF9n ZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlIA0KPj4gKipwYWdl cykNCj4+IMKgIHsNCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2 b2lkICopdHRtOw0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGd0dC0+dXNl cnRhc2stPm1tOw0KPj4gLcKgwqDCoCB1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOw0KPj4gLcKgwqDC oCB1bnNpZ25lZCBwaW5uZWQgPSAwOw0KPj4gLcKgwqDCoCBpbnQgcjsNCj4+ICvCoMKgwqAgdW5z aWduZWQgbG9uZyBlbmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0la RTsNCj4+ICvCoMKgwqAgc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UgPSAmZ3R0LT5yYW5nZTsNCj4+ ICvCoMKgwqAgaW50IHIgPSAwLCBpOw0KPj4gwqDCoMKgwqDCoCBpZiAoIW1tKSAvKiBIYXBwZW5z IGR1cmluZyBwcm9jZXNzIHNodXRkb3duICovDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FU1JDSDsNCj4+IC3CoMKgwqAgaWYgKCEoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VT RVJQVFJfUkVBRE9OTFkpKQ0KPj4gLcKgwqDCoMKgwqDCoMKgIGZsYWdzIHw9IEZPTExfV1JJVEU7 DQo+PiArwqDCoMKgIGFtZGdwdV9obW1faW5pdF9yYW5nZShyYW5nZSk7DQo+PiDCoMKgwqDCoMKg IGRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsNCj4+IC3CoMKgwqAgaWYgKGd0dC0+dXNlcmZsYWdz ICYgQU1ER1BVX0dFTV9VU0VSUFRSX0FOT05PTkxZKSB7DQo+PiAtwqDCoMKgwqDCoMKgwqAgLyoN Cj4+IC3CoMKgwqDCoMKgwqDCoMKgICogY2hlY2sgdGhhdCB3ZSBvbmx5IHVzZSBhbm9ueW1vdXMg bWVtb3J5IHRvIHByZXZlbnQgcHJvYmxlbXMNCj4+IC3CoMKgwqDCoMKgwqDCoMKgICogd2l0aCB3 cml0ZWJhY2sNCj4+IC3CoMKgwqDCoMKgwqDCoMKgICovDQo+PiAtwqDCoMKgwqDCoMKgwqAgdW5z aWduZWQgbG9uZyBlbmQgPSBndHQtPnVzZXJwdHIgKyB0dG0tPm51bV9wYWdlcyAqIFBBR0VfU0la RTsNCj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsNCj4+ICvC oMKgwqAgcmFuZ2UtPnZtYSA9IGZpbmRfdm1hKG1tLCBndHQtPnVzZXJwdHIpOw0KPj4gK8KgwqDC oCBpZiAoIXJhbmdlX2luX3ZtYShyYW5nZS0+dm1hLCBndHQtPnVzZXJwdHIsIGVuZCkpDQo+PiAr wqDCoMKgwqDCoMKgwqAgciA9IC1FRkFVTFQ7DQo+PiArwqDCoMKgIGVsc2UgaWYgKChndHQtPnVz ZXJmbGFncyAmIEFNREdQVV9HRU1fVVNFUlBUUl9BTk9OT05MWSkgJiYNCj4+ICvCoMKgwqDCoMKg wqDCoCByYW5nZS0+dm1hLT52bV9maWxlKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHIgPSAtRVBFUk07 DQo+PiArwqDCoMKgIGlmIChyKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Ow0KPj4gLcKg wqDCoMKgwqDCoMKgIHZtYSA9IGZpbmRfdm1hKG1tLCBndHQtPnVzZXJwdHIpOw0KPj4gLcKgwqDC oMKgwqDCoMKgIGlmICghdm1hIHx8IHZtYS0+dm1fZmlsZSB8fCB2bWEtPnZtX2VuZCA8IGVuZCkg ew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRVBFUk07DQo+PiAtwqDCoMKgwqDCoMKg wqAgfQ0KPj4gK8KgwqDCoCByYW5nZS0+cGZucyA9IGt2bWFsbG9jX2FycmF5KHR0bS0+bnVtX3Bh Z2VzLCBzaXplb2YodWludDY0X3QpLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7DQo+PiArwqDCoMKgIGlmIChyYW5nZS0+cGZucyA9PSBO VUxMKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgciA9IC1FTk9NRU07DQo+PiArwqDCoMKgwqDCoMKg wqAgZ290byBvdXQ7DQo+PiDCoMKgwqDCoMKgIH0NCj4+ICvCoMKgwqAgcmFuZ2UtPnN0YXJ0ID0g Z3R0LT51c2VycHRyOw0KPj4gK8KgwqDCoCByYW5nZS0+ZW5kID0gZW5kOw0KPj4gLcKgwqDCoCAv KiBsb29wIGVub3VnaCB0aW1lcyB1c2luZyBjb250aWd1b3VzIHBhZ2VzIG9mIG1lbW9yeSAqLw0K Pj4gLcKgwqDCoCBkbyB7DQo+PiAtwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbnVtX3BhZ2VzID0g dHRtLT5udW1fcGFnZXMgLSBwaW5uZWQ7DQo+PiAtwqDCoMKgwqDCoMKgwqAgdWludDY0X3QgdXNl cnB0ciA9IGd0dC0+dXNlcnB0ciArIHBpbm5lZCAqIFBBR0VfU0laRTsNCj4+IC3CoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgcGFnZSAqKnAgPSBwYWdlcyArIHBpbm5lZDsNCj4+IC3CoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgYW1kZ3B1X3R0bV9ndXBfdGFza19saXN0IGd1cHRhc2s7DQo+PiArwqDCoMKgIHJh bmdlLT5wZm5zWzBdID0gcmFuZ2UtPmZsYWdzW0hNTV9QRk5fVkFMSURdOw0KPj4gK8KgwqDCoCBy YW5nZS0+cGZuc1swXSB8PSBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHR0bSkgPw0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwIDogcmFuZ2UtPmZsYWdzW0hNTV9QRk5fV1JJ VEVdOw0KPj4gK8KgwqDCoCBmb3IgKGkgPSAxOyBpIDwgdHRtLT5udW1fcGFnZXM7IGkrKykNCj4+ ICvCoMKgwqDCoMKgwqDCoCByYW5nZS0+cGZuc1tpXSA9IHJhbmdlLT5wZm5zWzBdOw0KPj4gLcKg wqDCoMKgwqDCoMKgIGd1cHRhc2sudGFzayA9IGN1cnJlbnQ7DQo+PiAtwqDCoMKgwqDCoMKgwqAg c3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCBsaXN0X2Fk ZCgmZ3VwdGFzay5saXN0LCAmZ3R0LT5ndXB0YXNrcyk7DQo+PiAtwqDCoMKgwqDCoMKgwqAgc3Bp bl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOw0KPj4gK8KgwqDCoCAvKiBUaGlzIG1heSB0cmln Z2VyIHBhZ2UgdGFibGUgdXBkYXRlICovDQo+PiArwqDCoMKgIHIgPSBobW1fdm1hX2ZhdWx0KHJh bmdlLCB0cnVlKTsNCj4+ICvCoMKgwqAgaWYgKHIpDQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBv dXRfZnJlZV9wZm5zOw0KPj4gLcKgwqDCoMKgwqDCoMKgIGlmIChtbSA9PSBjdXJyZW50LT5tbSkN Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBnZXRfdXNlcl9wYWdlcyh1c2VycHRyLCBu dW1fcGFnZXMsIGZsYWdzLCBwLCBOVUxMKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCBlbHNlDQo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKGd0dC0+dXNl cnRhc2ssDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbW0sIHVz ZXJwdHIsIG51bV9wYWdlcywNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBmbGFncywgcCwgTlVMTCwgTlVMTCk7DQo+PiArwqDCoMKgIHVwX3JlYWQoJm1tLT5tbWFw X3NlbSk7DQo+PiAtwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsN Cj4+IC3CoMKgwqDCoMKgwqDCoCBsaXN0X2RlbCgmZ3VwdGFzay5saXN0KTsNCj4+IC3CoMKgwqDC oMKgwqDCoCBzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+PiArwqDCoMKgIGZvciAo aSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsrKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHBhZ2Vz W2ldID0gaG1tX3Bmbl90b19wYWdlKHJhbmdlLCByYW5nZS0+cGZuc1tpXSk7DQo+PiAtwqDCoMKg wqDCoMKgwqAgaWYgKHIgPCAwKQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byByZWxl YXNlX3BhZ2VzOw0KPj4gK8KgwqDCoCByZXR1cm4gMDsNCj4+IC3CoMKgwqDCoMKgwqDCoCBwaW5u ZWQgKz0gcjsNCj4+ICtvdXRfZnJlZV9wZm5zOg0KPj4gK8KgwqDCoCBrdmZyZWUocmFuZ2UtPnBm bnMpOw0KPj4gK8KgwqDCoCByYW5nZS0+cGZucyA9IE5VTEw7DQo+PiArb3V0Og0KPj4gK8KgwqDC oCB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOw0KPj4gK8KgwqDCoCByZXR1cm4gcjsNCj4+ICt9DQo+ PiAtwqDCoMKgIH0gd2hpbGUgKHBpbm5lZCA8IHR0bS0+bnVtX3BhZ2VzKTsNCj4+ICsvKioNCj4+ ICsgKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfcmFuZ2VfZG9uZSAtIHN0b3AgSE1NIHRyYWNrIHRo ZSBDUFUgcGFnZSANCj4+IHRhYmxlIGNoYW5nZQ0KPj4gKyAqIENoZWNrIGlmIHRoZSBwYWdlcyBi YWNraW5nIHRoaXMgdHRtIHJhbmdlIGhhdmUgYmVlbiBpbnZhbGlkYXRlZA0KPj4gKyAqDQo+PiAr ICogUmV0dXJuczogdHJ1ZSBpZiBwYWdlcyBhcmUgc3RpbGwgdmFsaWQNCj4+ICsgKi8NCj4+ICti b29sIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRtX3R0ICp0dG0p DQo+PiArew0KPj4gK8KgwqDCoCBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0 dG07DQo+PiArwqDCoMKgIGJvb2wgciA9IGZhbHNlOw0KPj4gLcKgwqDCoCB1cF9yZWFkKCZtbS0+ bW1hcF9zZW0pOw0KPj4gLcKgwqDCoCByZXR1cm4gMDsNCj4+ICvCoMKgwqAgaWYgKCFndHQgfHwg IWd0dC0+dXNlcnB0cikNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7DQo+PiArDQo+ PiArwqDCoMKgIFdBUk5fT05DRSghZ3R0LT5yYW5nZS5wZm5zLCAiTm8gdXNlciBwYWdlcyB0byBj aGVja1xuIik7DQo+PiArwqDCoMKgIGlmIChndHQtPnJhbmdlLnBmbnMpIHsNCj4+ICvCoMKgwqDC oMKgwqDCoCByID0gaG1tX3ZtYV9yYW5nZV9kb25lKCZndHQtPnJhbmdlKTsNCj4+ICvCoMKgwqDC oMKgwqDCoCBrdmZyZWUoZ3R0LT5yYW5nZS5wZm5zKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBndHQt PnJhbmdlLnBmbnMgPSBOVUxMOw0KPj4gK8KgwqDCoCB9DQo+PiAtcmVsZWFzZV9wYWdlczoNCj4+ IC3CoMKgwqAgcmVsZWFzZV9wYWdlcyhwYWdlcywgcGlubmVkKTsNCj4+IC3CoMKgwqAgdXBfcmVh ZCgmbW0tPm1tYXBfc2VtKTsNCj4+IMKgwqDCoMKgwqAgcmV0dXJuIHI7DQo+PiDCoCB9DQo+PiBA QCAtODA5LDE2ICs4MTQsMTAgQEAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3Ry dWN0IHR0bV90dCANCj4+ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpDQo+PiDCoMKgICovDQo+ PiDCoCB2b2lkIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRt LCBzdHJ1Y3QgcGFnZSANCj4+ICoqcGFnZXMpDQo+PiDCoCB7DQo+PiAtwqDCoMKgIHN0cnVjdCBh bWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsNCj4+IMKgwqDCoMKgwqAgdW5zaWduZWQg aTsNCj4+IC3CoMKgwqAgZ3R0LT5sYXN0X3NldF9wYWdlcyA9IGF0b21pY19yZWFkKCZndHQtPm1t dV9pbnZhbGlkYXRpb25zKTsNCj4+IC3CoMKgwqAgZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3Bh Z2VzOyArK2kpIHsNCj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAodHRtLT5wYWdlc1tpXSkNCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB1dF9wYWdlKHR0bS0+cGFnZXNbaV0pOw0KPj4gLQ0KPj4g K8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7ICsraSkNCj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB0dG0tPnBhZ2VzW2ldID0gcGFnZXMgPyBwYWdlc1tpXSA6IE5VTEw7DQo+PiAt wqDCoMKgIH0NCj4+IMKgIH0NCj4+IMKgIC8qKg0KPj4gQEAgLTkwMywxMCArOTAyLDExIEBAIHN0 YXRpYyB2b2lkIGFtZGdwdV90dG1fdHRfdW5waW5fdXNlcnB0cihzdHJ1Y3QgDQo+PiB0dG1fdHQg KnR0bSkNCj4+IMKgwqDCoMKgwqAgLyogdW5tYXAgdGhlIHBhZ2VzIG1hcHBlZCB0byB0aGUgZGV2 aWNlICovDQo+PiDCoMKgwqDCoMKgIGRtYV91bm1hcF9zZyhhZGV2LT5kZXYsIHR0bS0+c2ctPnNn bCwgdHRtLT5zZy0+bmVudHMsIGRpcmVjdGlvbik7DQo+PiAtwqDCoMKgIC8qIG1hcmsgdGhlIHBh Z2VzIGFzIGRpcnR5ICovDQo+PiAtwqDCoMKgIGFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2Vz KHR0bSk7DQo+PiAtDQo+PiDCoMKgwqDCoMKgIHNnX2ZyZWVfdGFibGUodHRtLT5zZyk7DQo+PiAr DQo+PiArwqDCoMKgIGlmIChndHQtPnJhbmdlLnBmbnMgJiYNCj4+ICvCoMKgwqDCoMKgwqDCoCB0 dG0tPnBhZ2VzWzBdID09IGhtbV9wZm5fdG9fcGFnZSgmZ3R0LT5yYW5nZSwgDQo+PiBndHQtPnJh bmdlLnBmbnNbMF0pKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIFdBUk5fT05DRSgxLCAiTWlzc2luZyBn ZXRfdXNlcl9wYWdlX2RvbmVcbiIpOw0KPj4gwqAgfQ0KPj4gwqAgaW50IGFtZGdwdV90dG1fZ2Fy dF9iaW5kKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4gQEAgLTEyNTYsMTEgKzEyNTYs NiBAQCBpbnQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0IA0KPj4gKnR0 bSwgdWludDY0X3QgYWRkciwNCj4+IMKgwqDCoMKgwqAgZ3R0LT51c2VydGFzayA9IGN1cnJlbnQt Pmdyb3VwX2xlYWRlcjsNCj4+IMKgwqDCoMKgwqAgZ2V0X3Rhc2tfc3RydWN0KGd0dC0+dXNlcnRh c2spOw0KPj4gLcKgwqDCoCBzcGluX2xvY2tfaW5pdCgmZ3R0LT5ndXB0YXNrbG9jayk7DQo+PiAt wqDCoMKgIElOSVRfTElTVF9IRUFEKCZndHQtPmd1cHRhc2tzKTsNCj4+IC3CoMKgwqAgYXRvbWlj X3NldCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucywgMCk7DQo+PiAtwqDCoMKgIGd0dC0+bGFzdF9z ZXRfcGFnZXMgPSAwOw0KPj4gLQ0KPj4gwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4+IMKgIH0NCj4+ IEBAIC0xMjg5LDcgKzEyODQsNiBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIo c3RydWN0IHR0bV90dCANCj4+ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsDQo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGVuZCkNCj4+IMKg IHsNCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRt Ow0KPj4gLcKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X3R0bV9ndXBfdGFza19saXN0ICplbnRyeTsNCj4+ IMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBzaXplOw0KPj4gwqDCoMKgwqDCoCBpZiAoZ3R0ID09 IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikNCj4+IEBAIC0xMzAyLDQ4ICsxMjk2LDIwIEBAIGJvb2wg YW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3QgDQo+PiB0dG1fdHQgKnR0bSwgdW5z aWduZWQgbG9uZyBzdGFydCwNCj4+IMKgwqDCoMKgwqAgaWYgKGd0dC0+dXNlcnB0ciA+IGVuZCB8 fCBndHQtPnVzZXJwdHIgKyBzaXplIDw9IHN0YXJ0KQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiBmYWxzZTsNCj4+IC3CoMKgwqAgLyogU2VhcmNoIHRoZSBsaXN0cyBvZiB0YXNrcyB0aGF0 IGhvbGQgdGhpcyBtYXBwaW5nIGFuZCBzZWUNCj4+IC3CoMKgwqDCoCAqIGlmIGN1cnJlbnQgaXMg b25lIG9mIHRoZW0uwqAgSWYgaXQgaXMgcmV0dXJuIGZhbHNlLg0KPj4gLcKgwqDCoMKgICovDQo+ PiAtwqDCoMKgIHNwaW5fbG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+PiAtwqDCoMKgIGxpc3Rf Zm9yX2VhY2hfZW50cnkoZW50cnksICZndHQtPmd1cHRhc2tzLCBsaXN0KSB7DQo+PiAtwqDCoMKg wqDCoMKgwqAgaWYgKGVudHJ5LT50YXNrID09IGN1cnJlbnQpIHsNCj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4+IC3CoMKgwqDCoMKgwqDCoCB9DQo+PiAtwqDC oMKgIH0NCj4+IC3CoMKgwqAgc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2spOw0KPj4gLQ0K Pj4gLcKgwqDCoCBhdG9taWNfaW5jKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsNCj4+IC0NCj4+ IMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7DQo+PiDCoCB9DQo+PiDCoCAvKioNCj4+IC0gKiBhbWRn cHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQgLSBIYXMgdGhlIHR0bV90dCBvYmplY3QgYmVl biANCj4+IGludmFsaWRhdGVkPw0KPj4gKyAqIGFtZGdwdV90dG1fdHRfaXNfdXNlcnB0ciAtIEhh dmUgdGhlIHBhZ2VzIGJhY2tpbmcgYnkgdXNlcnB0cj8NCj4+IMKgwqAgKi8NCj4+IC1ib29sIGFt ZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChzdHJ1Y3QgdHRtX3R0ICp0dG0sDQo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ICpsYXN0X2lu dmFsaWRhdGVkKQ0KPj4gLXsNCj4+IC3CoMKgwqAgc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9 ICh2b2lkICopdHRtOw0KPj4gLcKgwqDCoCBpbnQgcHJldl9pbnZhbGlkYXRlZCA9ICpsYXN0X2lu dmFsaWRhdGVkOw0KPj4gLQ0KPj4gLcKgwqDCoCAqbGFzdF9pbnZhbGlkYXRlZCA9IGF0b21pY19y ZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsNCj4+IC3CoMKgwqAgcmV0dXJuIHByZXZfaW52 YWxpZGF0ZWQgIT0gKmxhc3RfaW52YWxpZGF0ZWQ7DQo+PiAtfQ0KPj4gLQ0KPj4gLS8qKg0KPj4g LSAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyAtIEhhdmUgdGhlIHBhZ2VzIGJh Y2tpbmcgdGhpcyANCj4+IHR0bV90dCBvYmplY3QNCj4+IC0gKiBiZWVuIGludmFsaWRhdGVkIHNp bmNlIHRoZSBsYXN0IHRpbWUgdGhleSd2ZSBiZWVuIHNldD8NCj4+IC0gKi8NCj4+IC1ib29sIGFt ZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0pDQo+PiAr Ym9vbCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQ0KPj4gwqAg ew0KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07 DQo+PiDCoMKgwqDCoMKgIGlmIChndHQgPT0gTlVMTCB8fCAhZ3R0LT51c2VycHRyKQ0KPj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4+IC3CoMKgwqAgcmV0dXJuIGF0b21pY19y ZWFkKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKSAhPSBndHQtPmxhc3Rfc2V0X3BhZ2VzOw0KPj4g K8KgwqDCoCByZXR1cm4gdHJ1ZTsNCj4+IMKgIH0NCj4+IMKgIC8qKg0KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaCANCj4+IGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oDQo+PiBpbmRleCBiNWIyZDEwMWY3ZGIuLjg5 ODhjODdmZmY5ZCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV90dG0uaA0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0 bS5oDQo+PiBAQCAtMTAyLDYgKzEwMiw3IEBAIGludCBhbWRncHVfdHRtX2FsbG9jX2dhcnQoc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0IA0KPj4gKmJvKTsNCj4+IMKgIGludCBhbWRncHVfdHRtX3Jl Y292ZXJfZ2FydChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibyk7DQo+PiDCoCBpbnQgYW1k Z3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdl IA0KPj4gKipwYWdlcyk7DQo+PiArYm9vbCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2Rv bmUoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4+IMKgIHZvaWQgYW1kZ3B1X3R0bV90dF9zZXRfdXNl cl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlIA0KPj4gKipwYWdlcyk7DQo+ PiDCoCB2b2lkIGFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0 bSk7DQo+PiDCoCBpbnQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0 dG0sIHVpbnQ2NF90IGFkZHIsDQo+PiBAQCAtMTEyLDcgKzExMyw3IEBAIGJvb2wgYW1kZ3B1X3R0 bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0IA0KPj4gKnR0bSwgdW5zaWduZWQgbG9u ZyBzdGFydCwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2ln bmVkIGxvbmcgZW5kKTsNCj4+IMKgIGJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX2ludmFsaWRh dGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgKmxhc3RfaW52YWxpZGF0ZWQpOw0KPj4gLWJvb2wgYW1k Z3B1X3R0bV90dF91c2VycHRyX25lZWRzX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSk7DQo+PiAr Ym9vbCBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKTsNCj4+IMKg IGJvb2wgYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seShzdHJ1Y3QgdHRtX3R0ICp0dG0pOw0KPj4g wqAgdWludDY0X3QgYW1kZ3B1X3R0bV90dF9wZGVfZmxhZ3Moc3RydWN0IHR0bV90dCAqdHRtLCBz dHJ1Y3QgDQo+PiB0dG1fbWVtX3JlZyAqbWVtKTsNCj4+IMKgIHVpbnQ2NF90IGFtZGdwdV90dG1f dHRfcHRlX2ZsYWdzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgDQo+PiB0dG1f dHQgKnR0bSwNCj4gDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK