From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Grodzovsky, Andrey" Subject: Re: [PATCH v5 1/2] drm/sched: Refactor ring mirror list handling. Date: Fri, 21 Dec 2018 20:36:22 +0000 Message-ID: References: <1545333815-29870-1-git-send-email-andrey.grodzovsky@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Koenig, Christian" , "dri-devel@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" , "eric@anholt.net" , "etnaviv@lists.freedesktop.org" Cc: "Liu, Monk" List-Id: dri-devel@lists.freedesktop.org DQoNCk9uIDEyLzIxLzIwMTggMDE6MzcgUE0sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6DQo+IEFt IDIwLjEyLjE4IHVtIDIwOjIzIHNjaHJpZWIgQW5kcmV5IEdyb2R6b3Zza3k6DQo+PiBEZWNhdXBs ZSBzY2hlZCB0aHJlYWRzIHN0b3AgYW5kIHN0YXJ0IGFuZCByaW5nIG1pcnJvcg0KPj4gbGlzdCBo YW5kbGluZyBmcm9tIHRoZSBwb2xpY3kgb2Ygd2hhdCB0byBkbyBhYm91dCB0aGUNCj4+IGd1aWx0 eSBqb2JzLg0KPj4gV2hlbiBzdG9wcHBpbmcgdGhlIHNjaGVkIHRocmVhZCBhbmQgZGV0YWNoaW5n IHNjaGVkIGZlbmNlcw0KPj4gZnJvbSBub24gc2lnbmFsZWQgSFcgZmVuZXMgd2FpdCBmb3IgYWxs IHNpZ25hbGVkIEhXIGZlbmNlcw0KPj4gdG8gY29tcGxldGUgYmVmb3JlIHJlcnVubmluZyB0aGUg am9icy4NCj4+DQo+PiB2MjogRml4IHJlc3VibWlzc2lvbiBvZiBndWlsdHkgam9iIGludG8gSFcg YWZ0ZXIgcmVmYWN0b3JpbmcuDQo+Pg0KPj4gdjQ6DQo+PiBGdWxsIHJlc3RhcnQgZm9yIGFsbCB0 aGUgam9icywgbm90IG9ubHkgZnJvbSBndWlsdHkgcmluZy4NCj4+IEV4dHJhY3Qga2FybWEgaW5j cmVhc2UgaW50byBzdGFuZGFsb25lIGZ1bmN0aW9uLg0KPj4NCj4+IHY1Og0KPj4gUmV3b3JrIHdh aXRpbmcgZm9yIHNpZ25hbGVkIGpvYnMgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBqb2INCj4+IHN0 cnVjdCBpdHNlbGYgYXMgdGhvc2UgbWlnaHQgYWxyZWFkeSBiZSBmcmVlZCBmb3Igbm9uICdndWls dHknDQo+PiBqb2IncyBzY2hlZHVsZXJzLg0KPj4gRXhwb3NlIGthcm1hIGluY3JlYXNlIHRvIGRy aXZlcnMuDQo+Pg0KPj4gU3VnZ2VzdGVkLWJ5OiBDaHJpc3RpYW4gS29lbmlnIDxDaHJpc3RpYW4u S29lbmlnQGFtZC5jb20+DQo+PiBTaWduZWQtb2ZmLWJ5OiBBbmRyZXkgR3JvZHpvdnNreSA8YW5k cmV5Lmdyb2R6b3Zza3lAYW1kLmNvbT4NCj4+IC0tLQ0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jIHzCoCAxOCArLS0NCj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9ldG5hdml2L2V0bmF2aXZfc2NoZWQuY8KgwqDCoCB8wqAgMTEgKy0NCj4+IMKgIGRyaXZlcnMv Z3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jwqDCoMKgwqAgfCAxODggDQo+PiArKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLQ0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2No ZWQuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDEyICstDQo+PiDCoCBpbmNsdWRlL2RybS9n cHVfc2NoZWR1bGVyLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDEwICstDQo+ PiDCoCA1IGZpbGVzIGNoYW5nZWQsIDE1MSBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkN Cj4+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rl dmljZS5jIA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMN Cj4+IGluZGV4IDhhMDc4ZjQuLmE0YmQyZDMgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYw0KPj4gQEAgLTMyOTgsMTIgKzMyOTgsMTAgQEAgc3Rh dGljIGludCANCj4+IGFtZGdwdV9kZXZpY2VfcHJlX2FzaWNfcmVzZXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFyaW5nIHx8ICFyaW5nLT5z Y2hlZC50aHJlYWQpDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsNCj4+ IMKgIC3CoMKgwqDCoMKgwqDCoCBrdGhyZWFkX3BhcmsocmluZy0+c2NoZWQudGhyZWFkKTsNCj4+ ICvCoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfc3RvcCgmcmluZy0+c2NoZWQsIGpvYiA/ICZqb2It PmJhc2UgOiBOVUxMKTsNCj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBpZiAoam9iICYmIGpvYi0+YmFz ZS5zY2hlZCAhPSAmcmluZy0+c2NoZWQpDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250 aW51ZTsNCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfaHdfam9iX3Jlc2V0KCZy aW5nLT5zY2hlZCwgam9iID8gJmpvYi0+YmFzZSA6IE5VTEwpOw0KPj4gK8KgwqDCoMKgwqDCoMKg IGlmKGpvYikNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9pbmNyZWFzZV9r YXJtYSgmam9iLT5iYXNlKTsNCj4NCj4gU2luY2Ugd2UgZHJvcHBlZCB0aGUgImpvYiAmJiBqb2It PmJhc2Uuc2NoZWQgIT0gJnJpbmctPnNjaGVkIiBjaGVjayANCj4gYWJvdmUgdGhpcyB3aWxsIG5v dyBpbmNyZWFzZSB0aGUgam9icyBrYXJtYSBtdWx0aXBsZSB0aW1lcy4NCj4NCj4gTWF5YmUganVz dCBtb3ZlIHRoYXQgb3V0c2lkZSBvZiB0aGUgbG9vcC4NCj4NCj4+IMKgIMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBhZnRlciBhbGwgaHcgam9icyBhcmUgcmVzZXQsIGh3IGZlbmNlIGlzIG1lYW5pbmds ZXNzLCANCj4+IHNvIGZvcmNlX2NvbXBsZXRpb24gKi8NCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBh bWRncHVfZmVuY2VfZHJpdmVyX2ZvcmNlX2NvbXBsZXRpb24ocmluZyk7DQo+PiBAQCAtMzQ1NCwx NCArMzQ1MiwxMCBAQCBzdGF0aWMgdm9pZCANCj4+IGFtZGdwdV9kZXZpY2VfcG9zdF9hc2ljX3Jl c2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlm ICghcmluZyB8fCAhcmluZy0+c2NoZWQudGhyZWFkKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29udGludWU7DQo+PiDCoCAtwqDCoMKgwqDCoMKgwqAgLyogb25seSBuZWVkIHJlY292 ZXJ5IHNjaGVkIG9mIHRoZSBnaXZlbiBqb2IncyByaW5nDQo+PiAtwqDCoMKgwqDCoMKgwqDCoCAq IG9yIGFsbCByaW5ncyAoaW4gdGhlIGNhc2UgQGpvYiBpcyBOVUxMKQ0KPj4gLcKgwqDCoMKgwqDC oMKgwqAgKiBhZnRlciBhYm92ZSBhbWRncHVfcmVzZXQgYWNjb21wbGlzaGVkDQo+PiAtwqDCoMKg wqDCoMKgwqDCoCAqLw0KPj4gLcKgwqDCoMKgwqDCoMKgIGlmICgoIWpvYiB8fCBqb2ItPmJhc2Uu c2NoZWQgPT0gJnJpbmctPnNjaGVkKSAmJiANCj4+ICFhZGV2LT5hc2ljX3Jlc2V0X3JlcykNCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9qb2JfcmVjb3ZlcnkoJnJpbmctPnNj aGVkKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWFkZXYtPmFzaWNfcmVzZXRfcmVzKQ0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX3Jlc3VibWl0X2pvYnMoJnJpbmctPnNj aGVkKTsNCj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBrdGhyZWFkX3VucGFyayhyaW5nLT5zY2hlZC50 aHJlYWQpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9zdGFydCgmcmluZy0+c2NoZWQs ICFhZGV2LT5hc2ljX3Jlc2V0X3Jlcyk7DQo+PiDCoMKgwqDCoMKgIH0NCj4+IMKgIMKgwqDCoMKg wqAgaWYgKCFhbWRncHVfZGV2aWNlX2hhc19kY19zdXBwb3J0KGFkZXYpKSB7DQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9zY2hlZC5jIA0KPj4gYi9kcml2 ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X3NjaGVkLmMNCj4+IGluZGV4IDQ5YTY3NjMuLjZm MTI2OGYgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X3Nj aGVkLmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfc2NoZWQuYw0K Pj4gQEAgLTEwOSwxNiArMTA5LDE5IEBAIHN0YXRpYyB2b2lkIGV0bmF2aXZfc2NoZWRfdGltZWRv dXRfam9iKHN0cnVjdCANCj4+IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikNCj4+IMKgwqDCoMKg wqAgfQ0KPj4gwqAgwqDCoMKgwqDCoCAvKiBibG9jayBzY2hlZHVsZXIgKi8NCj4+IC3CoMKgwqAg a3RocmVhZF9wYXJrKGdwdS0+c2NoZWQudGhyZWFkKTsNCj4+IC3CoMKgwqAgZHJtX3NjaGVkX2h3 X2pvYl9yZXNldCgmZ3B1LT5zY2hlZCwgc2NoZWRfam9iKTsNCj4+ICvCoMKgwqAgZHJtX3NjaGVk X3N0b3AoJmdwdS0+c2NoZWQsIHNjaGVkX2pvYik7DQo+PiArDQo+PiArwqDCoMKgIGlmKHNjaGVk X2pvYikNCj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfaW5jcmVhc2Vfa2FybWEoc2NoZWRf am9iKTsNCj4+IMKgIMKgwqDCoMKgwqAgLyogZ2V0IHRoZSBHUFUgYmFjayBpbnRvIHRoZSBpbml0 IHN0YXRlICovDQo+PiDCoMKgwqDCoMKgIGV0bmF2aXZfY29yZV9kdW1wKGdwdSk7DQo+PiDCoMKg wqDCoMKgIGV0bmF2aXZfZ3B1X3JlY292ZXJfaGFuZyhncHUpOw0KPj4gwqAgK8KgwqDCoCBkcm1f c2NoZWRfcmVzdWJtaXRfam9icygmZ3B1LT5zY2hlZCk7DQo+PiArDQo+PiDCoMKgwqDCoMKgIC8q IHJlc3RhcnQgc2NoZWR1bGVyIGFmdGVyIEdQVSBpcyB1c2FibGUgYWdhaW4gKi8NCj4+IC3CoMKg wqAgZHJtX3NjaGVkX2pvYl9yZWNvdmVyeSgmZ3B1LT5zY2hlZCk7DQo+PiAtwqDCoMKgIGt0aHJl YWRfdW5wYXJrKGdwdS0+c2NoZWQudGhyZWFkKTsNCj4+ICvCoMKgwqAgZHJtX3NjaGVkX3N0YXJ0 KCZncHUtPnNjaGVkLCB0cnVlKTsNCj4+IMKgIH0NCj4+IMKgIMKgIHN0YXRpYyB2b2lkIGV0bmF2 aXZfc2NoZWRfZnJlZV9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKnNjaGVkX2pvYikNCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYyANCj4+IGIv ZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmMNCj4+IGluZGV4IGRiYjY5MDYu LmI1YzViZWUgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVk X21haW4uYw0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmMN Cj4+IEBAIC02MCw4ICs2MCw2IEBADQo+PiDCoCDCoCBzdGF0aWMgdm9pZCBkcm1fc2NoZWRfcHJv Y2Vzc19qb2Ioc3RydWN0IGRtYV9mZW5jZSAqZiwgc3RydWN0IA0KPj4gZG1hX2ZlbmNlX2NiICpj Yik7DQo+PiDCoCAtc3RhdGljIHZvaWQgZHJtX3NjaGVkX2V4cGVsX2pvYl91bmxvY2tlZChzdHJ1 Y3QgZHJtX3NjaGVkX2pvYiANCj4+ICpzX2pvYik7DQo+PiAtDQo+PiDCoCAvKioNCj4+IMKgwqAg KiBkcm1fc2NoZWRfcnFfaW5pdCAtIGluaXRpYWxpemUgYSBnaXZlbiBydW4gcXVldWUgc3RydWN0 DQo+PiDCoMKgICoNCj4+IEBAIC0zMzUsNiArMzMzLDQyIEBAIHN0YXRpYyB2b2lkIGRybV9zY2hl ZF9qb2JfdGltZWRvdXQoc3RydWN0IA0KPj4gd29ya19zdHJ1Y3QgKndvcmspDQo+PiDCoMKgwqDC oMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkLT5qb2JfbGlzdF9sb2NrLCBmbGFncyk7 DQo+PiDCoCB9DQo+DQo+IEtlcm5lbCBkb2MgaGVyZSB3b3VsZCBiZSBuaWNlIHRvIGhhdmUuDQo+ DQo+PiArdm9pZCBkcm1fc2NoZWRfaW5jcmVhc2Vfa2FybWEoc3RydWN0IGRybV9zY2hlZF9qb2Ig KmJhZCkNCj4+ICt7DQo+PiArwqDCoMKgIGludCBpOw0KPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3Nj aGVkX2VudGl0eSAqdG1wOw0KPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqZW50 aXR5Ow0KPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkID0gYmFkLT5z Y2hlZDsNCj4+ICsNCj4+ICvCoMKgwqAgLyogZG9uJ3QgaW5jcmVhc2UgQGJhZCdzIGthcm1hIGlm IGl0J3MgZnJvbSBLRVJORUwgUlEsDQo+PiArwqDCoMKgwqAgKiBiZWNhdXNlIHNvbWV0aW1lcyBH UFUgaGFuZyB3b3VsZCBjYXVzZSBrZXJuZWwgam9icyAobGlrZSBWTSANCj4+IHVwZGF0aW5nIGpv YnMpDQo+PiArwqDCoMKgwqAgKiBjb3JydXB0IGJ1dCBrZWVwIGluIG1pbmQgdGhhdCBrZXJuZWwg am9icyBhbHdheXMgY29uc2lkZXJlZCANCj4+IGdvb2QuDQo+PiArwqDCoMKgwqAgKi8NCj4+ICvC oMKgwqAgaWYgKGJhZC0+c19wcmlvcml0eSAhPSBEUk1fU0NIRURfUFJJT1JJVFlfS0VSTkVMKSB7 DQo+PiArwqDCoMKgwqDCoMKgwqAgYXRvbWljX2luYygmYmFkLT5rYXJtYSk7DQo+PiArwqDCoMKg wqDCoMKgwqAgZm9yIChpID0gRFJNX1NDSEVEX1BSSU9SSVRZX01JTjsgaSA8IERSTV9TQ0hFRF9Q UklPUklUWV9LRVJORUw7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGkrKykgew0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zY2hlZF9ycSAqcnEgPSAmc2NoZWQt PnNjaGVkX3JxW2ldOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2Nr KCZycS0+bG9jayk7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoZW50aXR5LCB0bXAsICZycS0+ZW50aXRpZXMsIA0KPj4gbGlzdCkgew0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYmFkLT5zX2ZlbmNlLT5zY2hlZHVsZWQu Y29udGV4dCA9PQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVu dGl0eS0+ZmVuY2VfY29udGV4dCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChhdG9taWNfcmVhZCgmYmFkLT5rYXJtYSkgPg0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFkLT5zY2hlZC0+aGFuZ19saW1p dCkNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChlbnRpdHktPmd1aWx0eSkNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXRvbWljX3NldChlbnRpdHktPmd1aWx0eSwgMSk7DQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0N Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZycS0+bG9jayk7DQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoJmVudGl0eS0+bGlzdCAhPSAmcnEtPmVudGl0aWVz KQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+ICvCoMKgwqDC oMKgwqDCoCB9DQo+PiArwqDCoMKgIH0NCj4+ICt9DQo+PiArRVhQT1JUX1NZTUJPTChkcm1fc2No ZWRfaW5jcmVhc2Vfa2FybWEpOw0KPj4gKw0KPj4gwqAgLyoqDQo+PiDCoMKgICogZHJtX3NjaGVk X2h3X2pvYl9yZXNldCAtIHN0b3AgdGhlIHNjaGVkdWxlciBpZiBpdCBjb250YWlucyB0aGUgDQo+ PiBiYWQgam9iDQo+PiDCoMKgICoNCj4+IEBAIC0zNDIsMTMgKzM3NiwyMiBAQCBzdGF0aWMgdm9p ZCBkcm1fc2NoZWRfam9iX3RpbWVkb3V0KHN0cnVjdCANCj4+IHdvcmtfc3RydWN0ICp3b3JrKQ0K Pj4gwqDCoCAqIEBiYWQ6IGJhZCBzY2hlZHVsZXIgam9iDQo+PiDCoMKgICoNCj4+IMKgwqAgKi8N Cj4+IC12b2lkIGRybV9zY2hlZF9od19qb2JfcmVzZXQoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVy ICpzY2hlZCwgc3RydWN0IA0KPj4gZHJtX3NjaGVkX2pvYiAqYmFkKQ0KPj4gK3ZvaWQgZHJtX3Nj aGVkX3N0b3Aoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hlZCwgc3RydWN0IA0KPj4gZHJt X3NjaGVkX2pvYiAqYmFkKQ0KPj4gwqAgew0KPj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX3NjaGVkX2pv YiAqc19qb2I7DQo+PiAtwqDCoMKgIHN0cnVjdCBkcm1fc2NoZWRfZW50aXR5ICplbnRpdHksICp0 bXA7DQo+PiArwqDCoMKgIHN0cnVjdCBkcm1fc2NoZWRfam9iICpzX2pvYiwgKmxhc3Rfam9iOw0K Pj4gwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gLcKgwqDCoCBpbnQgaTsNCj4+ ICvCoMKgwqAgc3RydWN0IGRtYV9mZW5jZSAqd2FpdF9mZW5jZSA9wqAgTlVMTDsNCj4+ICvCoMKg wqAgaW50IHI7DQo+PiArDQo+PiArwqDCoMKgIGt0aHJlYWRfcGFyayhzY2hlZC0+dGhyZWFkKTsN Cj4+IMKgICvCoMKgwqAgLyoNCj4+ICvCoMKgwqDCoCAqIFZlcmlmeSBhbGwgdGhlIHNpZ25hbGVk IGpvYnMgaW4gbWlycm9yIGxpc3QgYXJlIHJlbW92ZWQgZnJvbSANCj4+IHRoZSByaW5nDQo+PiAr wqDCoMKgwqAgKiBieSB3YWl0aW5nIGZvciB0aGVpciByZXNwZWN0aXZlIHNjaGVkdWxlciBmZW5j ZXMgdG8gc2lnbmFsLg0KPj4gK8KgwqDCoMKgICogQ29udGludWFsbHnCoCByZXBlYXQgdHJhdmVy c2luZyB0aGUgcmluZyBtaXJyb3IgbGlzdCB1bnRpbCBubyANCj4+IG1vcmUgc2lnbmFsZWQNCj4+ ICvCoMKgwqDCoCAqIGZlbmNlcyBhcmUgZm91bmQNCj4+ICvCoMKgwqDCoCAqLw0KPj4gK3JldHJ5 X3dhaXQ6DQo+PiDCoMKgwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZC0+am9iX2xpc3Rf bG9jaywgZmxhZ3MpOw0KPj4gwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uo c19qb2IsICZzY2hlZC0+cmluZ19taXJyb3JfbGlzdCwgDQo+PiBub2RlKSB7DQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKHNfam9iLT5zX2ZlbmNlLT5wYXJlbnQgJiYNCj4+IEBAIC0zNTcsMzUg KzQwMCw0NSBAQCB2b2lkIGRybV9zY2hlZF9od19qb2JfcmVzZXQoc3RydWN0IA0KPj4gZHJtX2dw dV9zY2hlZHVsZXIgKnNjaGVkLCBzdHJ1Y3QgZHJtX3NjaGVkX2pvDQo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KHNfam9iLT5zX2ZlbmNlLT5wYXJlbnQpOw0KPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc19qb2ItPnNfZmVuY2UtPnBhcmVudCA9IE5VTEw7 DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdG9taWNfZGVjKCZzY2hlZC0+aHdfcnFf Y291bnQpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7DQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHdhaXRfZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KCZzX2pvYi0+c19mZW5jZS0+Zmlu aXNoZWQpOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsYXN0X2pvYiA9IHNfam9iOw0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB9DQo+PiDCoMKgwqDCoMKgIH0NCj4+IC3CoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm c2NoZWQtPmpvYl9saXN0X2xvY2ssIGZsYWdzKTsNCj4+IMKgIC3CoMKgwqAgaWYgKGJhZCAmJiBi YWQtPnNfcHJpb3JpdHkgIT0gRFJNX1NDSEVEX1BSSU9SSVRZX0tFUk5FTCkgew0KPj4gLcKgwqDC oMKgwqDCoMKgIGF0b21pY19pbmMoJmJhZC0+a2FybWEpOw0KPj4gLcKgwqDCoMKgwqDCoMKgIC8q IGRvbid0IGluY3JlYXNlIEBiYWQncyBrYXJtYSBpZiBpdCdzIGZyb20gS0VSTkVMIFJRLA0KPj4g LcKgwqDCoMKgwqDCoMKgwqAgKiBiZWN1YXNlIHNvbWV0aW1lcyBHUFUgaGFuZyB3b3VsZCBjYXVz ZSBrZXJuZWwgam9icyAobGlrZSANCj4+IFZNIHVwZGF0aW5nIGpvYnMpDQo+PiAtwqDCoMKgwqDC oMKgwqDCoCAqIGNvcnJ1cHQgYnV0IGtlZXAgaW4gbWluZCB0aGF0IGtlcm5lbCBqb2JzIGFsd2F5 cyANCj4+IGNvbnNpZGVyZWQgZ29vZC4NCj4+IC3CoMKgwqDCoMKgwqDCoMKgICovDQo+PiAtwqDC oMKgwqDCoMKgwqAgZm9yIChpID0gRFJNX1NDSEVEX1BSSU9SSVRZX01JTjsgaSA8IA0KPj4gRFJN X1NDSEVEX1BSSU9SSVRZX0tFUk5FTDsgaSsrICkgew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9zY2hlZF9ycSAqcnEgPSAmc2NoZWQtPnNjaGVkX3JxW2ldOw0KPj4gK8Kg wqDCoCAvKiBObyBzaWduYWxlZCBqb2JzIGluIHRoZSByaW5nLCBpdHMgc2FmZSB0byBwcm9jZWVk IHRvIEFTSUMgDQo+PiByZXNldCAqLw0KPj4gK8KgwqDCoCBpZiAoIXdhaXRfZmVuY2UpIHsNCj4+ ICvCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZC0+am9iX2xpc3Rf bG9jaywgZmxhZ3MpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZG9uZTsNCj4+ICvCoMKgwqAg fQ0KPj4gwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZycS0+bG9jayk7DQo+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50aXR5 LCB0bXAsICZycS0+ZW50aXRpZXMsIA0KPj4gbGlzdCkgew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoYmFkLT5zX2ZlbmNlLT5zY2hlZHVsZWQuY29udGV4dCA9PSANCj4+ IGVudGl0eS0+ZmVuY2VfY29udGV4dCkgew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChhdG9taWNfcmVhZCgmYmFkLT5rYXJtYSkgPiANCj4+IGJhZC0+c2No ZWQtPmhhbmdfbGltaXQpDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoZW50aXR5LT5ndWlsdHkpDQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF0b21pY19zZXQoZW50aXR5LT5ndWls dHksIDEpOw0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Ow0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB9DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGluX3VubG9jaygmcnEt PmxvY2spOw0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCZlbnRpdHktPmxpc3QgIT0g JnJxLT5lbnRpdGllcykNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7 DQo+PiArwqDCoMKgIC8qIFJlc3RvcmUgcmVtb3ZlZCBjYiBzaW5jZSByZW1vdmluZyBhZ2FpbiBh bHJlYWR5IHJlbW92ZWQgY2IgaXMgDQo+PiB1bmRlZmluZWQgKi8NCj4+ICvCoMKgwqAgbGlzdF9m b3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNfam9iLCAmc2NoZWQtPnJpbmdfbWlycm9yX2xpc3QsIA0K Pj4gbm9kZSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmKHNfam9iID09IGxhc3Rfam9iKQ0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+DQo+IE5lZWQgdG8gZG91YmxlIGNoZWNr IGFmdGVyIHRoZSBob2xpZGF5cywgYnV0IHlvdSBzaG91bGQgYmUgYWJsZSB0byB1c2UgDQo+IGxp c3RfZm9yX2VhY2hfZW50cnlfY29udGludWUgaGVyZS4NCg0KSSB0aGluayBpdCBzaG91bGQgd29y ayAtIGtpbmQgb2YgdHJhdmVyc2luZyBiYWNrIG9uIGFsbCB0aGUgam9icyB3ZSBqdXN0IA0KcmVt b3ZlZCB0aGVpciBjYWxsYmFja3MuDQoNCkFuZHJleQ0KDQo+DQo+PiArDQo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKHNfam9iLT5zX2ZlbmNlLT5wYXJlbnQpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHIgPSBkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKHNfam9iLT5zX2ZlbmNlLT5wYXJlbnQs DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmc19qb2ItPnNfZmVuY2UtPmNiLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX3Byb2Nlc3Nfam9iKTsNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBEUk1fRVJST1IoImZlbmNlIHJlc3RvcmUgY2FsbGJhY2sgZmFpbGVkICglZClcbiIsDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcik7DQo+DQo+IFdoZW4geW91IGZhaWwgdG8gYWRkIHRoZSBj YWxsYmFjayB0aGlzIG1lYW5zIHRoYXQgeW91IG5lZWQgdG8gY2FsbCANCj4gY2FsbCBkcm1fc2No ZWRfcHJvY2Vzc19qb2IgbWFudWFsbHkgaGVyZS4NCj4NCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9 DQo+PiDCoMKgwqDCoMKgIH0NCj4+ICvCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2No ZWQtPmpvYl9saXN0X2xvY2ssIGZsYWdzKTsNCj4+ICsNCj4+ICvCoMKgwqAgZG1hX2ZlbmNlX3dh aXQod2FpdF9mZW5jZSwgZmFsc2UpOw0KPj4gK8KgwqDCoCBkbWFfZmVuY2VfcHV0KHdhaXRfZmVu Y2UpOw0KPj4gK8KgwqDCoCB3YWl0X2ZlbmNlID0gTlVMTDsNCj4+ICsNCj4+ICvCoMKgwqAgZ290 byByZXRyeV93YWl0Ow0KPj4gKw0KPj4gK2RvbmU6DQo+PiArwqDCoMKgIHJldHVybjsNCj4NCj4g RHJvcCB0aGUgZG9uZTogbGFiZWwgYW5kIHJldHVybiBkaXJlY3RseSBhYm92ZS4NCj4NCj4gQXBh cnQgZnJvbSBhbGwgdGhvc2Ugbml0IHBpY2tzIHRoYXQgc3RhcnRzIHRvIGxvb2sgbGlrZSBpdCBz aG91bGQgd29yaywNCj4gQ2hyaXN0aWFuLg0KPg0KPj4gwqAgfQ0KPj4gLUVYUE9SVF9TWU1CT0wo ZHJtX3NjaGVkX2h3X2pvYl9yZXNldCk7DQo+PiArRVhQT1JUX1NZTUJPTChkcm1fc2NoZWRfc3Rv cCk7DQo+PiDCoCDCoCAvKioNCj4+IMKgwqAgKiBkcm1fc2NoZWRfam9iX3JlY292ZXJ5IC0gcmVj b3ZlciBqb2JzIGFmdGVyIGEgcmVzZXQNCj4+IEBAIC0zOTMsMzMgKzQ0NiwyMSBAQCBFWFBPUlRf U1lNQk9MKGRybV9zY2hlZF9od19qb2JfcmVzZXQpOw0KPj4gwqDCoCAqIEBzY2hlZDogc2NoZWR1 bGVyIGluc3RhbmNlDQo+PiDCoMKgICoNCj4+IMKgwqAgKi8NCj4+IC12b2lkIGRybV9zY2hlZF9q b2JfcmVjb3Zlcnkoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hlZCkNCj4+ICt2b2lkIGRy bV9zY2hlZF9zdGFydChzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkLCBib29sIA0KPj4g ZnVsbF9yZWNvdmVyeSkNCj4+IMKgIHsNCj4+IMKgwqDCoMKgwqAgc3RydWN0IGRybV9zY2hlZF9q b2IgKnNfam9iLCAqdG1wOw0KPj4gLcKgwqDCoCBib29sIGZvdW5kX2d1aWx0eSA9IGZhbHNlOw0K Pj4gwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gwqDCoMKgwqDCoCBpbnQgcjsN Cj4+IMKgICvCoMKgwqAgaWYgKCFmdWxsX3JlY292ZXJ5KQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGdv dG8gdW5wYXJrOw0KPj4gKw0KPj4gwqDCoMKgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWQt PmpvYl9saXN0X2xvY2ssIGZsYWdzKTsNCj4+IMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHNfam9iLCB0bXAsICZzY2hlZC0+cmluZ19taXJyb3JfbGlzdCwgDQo+PiBub2RlKSB7 DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zY2hlZF9mZW5jZSAqc19mZW5jZSA9 IHNfam9iLT5zX2ZlbmNlOw0KPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlOw0KPj4gLcKgwqDCoMKgwqDCoMKgIHVpbnQ2NF90IGd1aWx0eV9jb250ZXh0Ow0KPj4gLQ0K Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICghZm91bmRfZ3VpbHR5ICYmIGF0b21pY19yZWFkKCZzX2pv Yi0+a2FybWEpID4gDQo+PiBzY2hlZC0+aGFuZ19saW1pdCkgew0KPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZm91bmRfZ3VpbHR5ID0gdHJ1ZTsNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGd1aWx0eV9jb250ZXh0ID0gc19qb2ItPnNfZmVuY2UtPnNjaGVkdWxlZC5jb250ZXh0Ow0KPj4g LcKgwqDCoMKgwqDCoMKgIH0NCj4+IC0NCj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoZm91bmRfZ3Vp bHR5ICYmIHNfam9iLT5zX2ZlbmNlLT5zY2hlZHVsZWQuY29udGV4dCA9PSANCj4+IGd1aWx0eV9j b250ZXh0KQ0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3NldF9lcnJvcigm c19mZW5jZS0+ZmluaXNoZWQsIC1FQ0FOQ0VMRUQpOw0KPj4gLQ0KPj4gLcKgwqDCoMKgwqDCoMKg IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkLT5qb2JfbGlzdF9sb2NrLCBmbGFncyk7DQo+ PiAtwqDCoMKgwqDCoMKgwqAgZmVuY2UgPSBzY2hlZC0+b3BzLT5ydW5fam9iKHNfam9iKTsNCj4+ IC3CoMKgwqDCoMKgwqDCoCBhdG9taWNfaW5jKCZzY2hlZC0+aHdfcnFfY291bnQpOw0KPj4gK8Kg wqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlID0gc19qb2ItPnNfZmVuY2UtPnBh cmVudDsNCj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZmVuY2UpIHsNCj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNfZmVuY2UtPnBhcmVudCA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOw0K Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGRtYV9mZW5jZV9hZGRfY2FsbGJhY2so ZmVuY2UsICZzX2ZlbmNlLT5jYiwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9wcm9jZXNzX2pvYik7DQo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAociA9PSAtRU5PRU5UKQ0KPj4gQEAgLTQyNywxOCAr NDY4LDQ3IEBAIHZvaWQgZHJtX3NjaGVkX2pvYl9yZWNvdmVyeShzdHJ1Y3QgDQo+PiBkcm1fZ3B1 X3NjaGVkdWxlciAqc2NoZWQpDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlm IChyKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoImZl bmNlIGFkZCBjYWxsYmFjayBmYWlsZWQgKCVkKVxuIiwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcik7DQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkbWFfZmVuY2VfcHV0KGZlbmNlKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCB9IGVsc2Ugew0KPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNfZmVuY2UtPmZpbmlzaGVkLmVycm9yIDwgMCkN Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX2V4cGVsX2pvYl91 bmxvY2tlZChzX2pvYik7DQo+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlDQo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfcHJvY2Vzc19qb2IoTlVMTCwgJnNfZmVuY2UtPmNi KTsNCj4+IC3CoMKgwqDCoMKgwqDCoCB9DQo+PiAtwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2NrX2ly cXNhdmUoJnNjaGVkLT5qb2JfbGlzdF9sb2NrLCBmbGFncyk7DQo+PiDCoMKgwqDCoMKgIH0NCj4+ ICsNCj4+IMKgwqDCoMKgwqAgZHJtX3NjaGVkX3N0YXJ0X3RpbWVvdXQoc2NoZWQpOw0KPj4gwqDC oMKgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZC0+am9iX2xpc3RfbG9jaywgZmxh Z3MpOw0KPj4gKw0KPj4gK3VucGFyazoNCj4+ICvCoMKgwqAga3RocmVhZF91bnBhcmsoc2NoZWQt PnRocmVhZCk7DQo+PiArfQ0KPj4gK0VYUE9SVF9TWU1CT0woZHJtX3NjaGVkX3N0YXJ0KTsNCj4+ ICsNCj4+ICsvKioNCj4+ICsgKiBkcm1fc2NoZWRfcmVzdWJtaXRfam9icyAtIGhlbHBlciB0byBy ZWx1bmNoIGpvYiBmcm9tIG1pcnJvciByaW5nIA0KPj4gbGlzdA0KPj4gKyAqDQo+PiArICogQHNj aGVkOiBzY2hlZHVsZXIgaW5zdGFuY2UNCj4+ICsgKg0KPj4gKyAqLw0KPj4gK3ZvaWQgZHJtX3Nj aGVkX3Jlc3VibWl0X2pvYnMoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hlZCkNCj4+ICt7 DQo+PiArwqDCoMKgIHN0cnVjdCBkcm1fc2NoZWRfam9iICpzX2pvYiwgKnRtcDsNCj4+ICvCoMKg wqAgdWludDY0X3QgZ3VpbHR5X2NvbnRleHQ7DQo+PiArwqDCoMKgIGJvb2wgZm91bmRfZ3VpbHR5 ID0gZmFsc2U7DQo+PiArDQo+PiArwqDCoMKgIC8qVE9ETyBETyB3ZSBuZWVkIHNwaW5sb2NrIGhl cmUgPyAqLw0KPj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc19qb2IsIHRtcCwg JnNjaGVkLT5yaW5nX21pcnJvcl9saXN0LCANCj4+IG5vZGUpIHsNCj4+ICvCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZHJtX3NjaGVkX2ZlbmNlICpzX2ZlbmNlID0gc19qb2ItPnNfZmVuY2U7DQo+PiAr DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFmb3VuZF9ndWlsdHkgJiYgYXRvbWljX3JlYWQoJnNf am9iLT5rYXJtYSkgPiANCj4+IHNjaGVkLT5oYW5nX2xpbWl0KSB7DQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBmb3VuZF9ndWlsdHkgPSB0cnVlOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ3VpbHR5X2NvbnRleHQgPSBzX2pvYi0+c19mZW5jZS0+c2NoZWR1bGVkLmNvbnRleHQ7DQo+ PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmb3VuZF9n dWlsdHkgJiYgc19qb2ItPnNfZmVuY2UtPnNjaGVkdWxlZC5jb250ZXh0ID09IA0KPj4gZ3VpbHR5 X2NvbnRleHQpDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vfc2V0X2Vycm9y KCZzX2ZlbmNlLT5maW5pc2hlZCwgLUVDQU5DRUxFRCk7DQo+PiArDQo+PiArwqDCoMKgwqDCoMKg wqAgc19qb2ItPnNfZmVuY2UtPnBhcmVudCA9IHNjaGVkLT5vcHMtPnJ1bl9qb2Ioc19qb2IpOw0K Pj4gK8KgwqDCoMKgwqDCoMKgIGF0b21pY19pbmMoJnNjaGVkLT5od19ycV9jb3VudCk7DQo+PiAr wqDCoMKgIH0NCj4+IMKgIH0NCj4+IC1FWFBPUlRfU1lNQk9MKGRybV9zY2hlZF9qb2JfcmVjb3Zl cnkpOw0KPj4gK0VYUE9SVF9TWU1CT0woZHJtX3NjaGVkX3Jlc3VibWl0X2pvYnMpOw0KPj4gwqAg wqAgLyoqDQo+PiDCoMKgICogZHJtX3NjaGVkX2pvYl9pbml0IC0gaW5pdCBhIHNjaGVkdWxlciBq b2INCj4+IEBAIC02MzQsMjYgKzcwNCwxNCBAQCBzdGF0aWMgaW50IGRybV9zY2hlZF9tYWluKHZv aWQgKnBhcmFtKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJS T1IoImZlbmNlIGFkZCBjYWxsYmFjayBmYWlsZWQgKCVkKVxuIiwNCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcik7DQo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KGZlbmNlKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCB9IGVs c2Ugew0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNfZmVuY2UtPmZpbmlzaGVkLmVy cm9yIDwgMCkNCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX2V4 cGVsX2pvYl91bmxvY2tlZChzY2hlZF9qb2IpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZQ0K Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX3Byb2Nlc3Nfam9iKE5VTEws ICZzX2ZlbmNlLT5jYik7DQo+PiAtwqDCoMKgwqDCoMKgwqAgfQ0KPj4gwqAgwqDCoMKgwqDCoMKg wqDCoMKgIHdha2VfdXAoJnNjaGVkLT5qb2Jfc2NoZWR1bGVkKTsNCj4+IMKgwqDCoMKgwqAgfQ0K Pj4gwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4+IMKgIH0NCj4+IMKgIC1zdGF0aWMgdm9pZCBkcm1f c2NoZWRfZXhwZWxfam9iX3VubG9ja2VkKHN0cnVjdCBkcm1fc2NoZWRfam9iICpzX2pvYikNCj4+ IC17DQo+PiAtwqDCoMKgIHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQgPSBzX2pvYi0+ c2NoZWQ7DQo+PiAtDQo+PiAtwqDCoMKgIHNwaW5fbG9jaygmc2NoZWQtPmpvYl9saXN0X2xvY2sp Ow0KPj4gLcKgwqDCoCBsaXN0X2RlbF9pbml0KCZzX2pvYi0+bm9kZSk7DQo+PiAtwqDCoMKgIHNw aW5fdW5sb2NrKCZzY2hlZC0+am9iX2xpc3RfbG9jayk7DQo+PiAtfQ0KPj4gLQ0KPj4gwqAgLyoq DQo+PiDCoMKgICogZHJtX3NjaGVkX2luaXQgLSBJbml0IGEgZ3B1IHNjaGVkdWxlciBpbnN0YW5j ZQ0KPj4gwqDCoCAqDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2No ZWQuYyANCj4+IGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2NoZWQuYw0KPj4gaW5kZXggNDQ1 YjJlZi4uZjc2ZDllZCAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3Nj aGVkLmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMNCj4+IEBAIC0x NzgsMTggKzE3OCwyMiBAQCB2M2Rfam9iX3RpbWVkb3V0KHN0cnVjdCBkcm1fc2NoZWRfam9iICpz Y2hlZF9qb2IpDQo+PiDCoMKgwqDCoMKgIGZvciAocSA9IDA7IHEgPCBWM0RfTUFYX1FVRVVFUzsg cSsrKSB7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpz Y2hlZCA9ICZ2M2QtPnF1ZXVlW3FdLnNjaGVkOw0KPj4gwqAgLcKgwqDCoMKgwqDCoMKgIGt0aHJl YWRfcGFyayhzY2hlZC0+dGhyZWFkKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfaHdf am9iX3Jlc2V0KHNjaGVkLCAoc2NoZWRfam9iLT5zY2hlZCA9PSBzY2hlZCA/DQo+PiArwqDCoMKg wqDCoMKgwqAgZHJtX3NjaGVkX3N0b3Aoc2NoZWQsIChzY2hlZF9qb2ItPnNjaGVkID09IHNjaGVk ID8NCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNjaGVkX2pvYiA6IE5VTEwpKTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZihz Y2hlZF9qb2IpDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfaW5jcmVhc2Vf a2FybWEoc2NoZWRfam9iKTsNCj4+IMKgwqDCoMKgwqAgfQ0KPj4gwqAgwqDCoMKgwqDCoCAvKiBn ZXQgdGhlIEdQVSBiYWNrIGludG8gdGhlIGluaXQgc3RhdGUgKi8NCj4+IMKgwqDCoMKgwqAgdjNk X3Jlc2V0KHYzZCk7DQo+PiDCoCArwqDCoMKgIGZvciAocSA9IDA7IHEgPCBWM0RfTUFYX1FVRVVF UzsgcSsrKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9yZXN1Ym1pdF9qb2JzKHNjaGVk X2pvYi0+c2NoZWQpOw0KPj4gKw0KPj4gwqDCoMKgwqDCoCAvKiBVbmJsb2NrIHNjaGVkdWxlcnMg YW5kIHJlc3RhcnQgdGhlaXIgam9icy4gKi8NCj4+IMKgwqDCoMKgwqAgZm9yIChxID0gMDsgcSA8 IFYzRF9NQVhfUVVFVUVTOyBxKyspIHsNCj4+IC3CoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfam9i X3JlY292ZXJ5KCZ2M2QtPnF1ZXVlW3FdLnNjaGVkKTsNCj4+IC3CoMKgwqDCoMKgwqDCoCBrdGhy ZWFkX3VucGFyayh2M2QtPnF1ZXVlW3FdLnNjaGVkLnRocmVhZCk7DQo+PiArwqDCoMKgwqDCoMKg wqAgZHJtX3NjaGVkX3N0YXJ0KCZ2M2QtPnF1ZXVlW3FdLnNjaGVkLCB0cnVlKTsNCj4+IMKgwqDC oMKgwqAgfQ0KPj4gwqAgwqDCoMKgwqDCoCBtdXRleF91bmxvY2soJnYzZC0+cmVzZXRfbG9jayk7 DQo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZ3B1X3NjaGVkdWxlci5oIGIvaW5jbHVkZS9k cm0vZ3B1X3NjaGVkdWxlci5oDQo+PiBpbmRleCA0N2UxOTc5Li41YWIyZDk3IDEwMDY0NA0KPj4g LS0tIGEvaW5jbHVkZS9kcm0vZ3B1X3NjaGVkdWxlci5oDQo+PiArKysgYi9pbmNsdWRlL2RybS9n cHVfc2NoZWR1bGVyLmgNCj4+IEBAIC0xNzUsNiArMTc1LDcgQEAgc3RydWN0IGRybV9zY2hlZF9m ZW5jZSAqdG9fZHJtX3NjaGVkX2ZlbmNlKHN0cnVjdCANCj4+IGRtYV9mZW5jZSAqZik7DQo+PiDC oMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZpbmlzaGVkIHRvIHJlbW92ZSB0aGUg am9iIGZyb20gdGhlDQo+PiDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEBkcm1f Z3B1X3NjaGVkdWxlci5yaW5nX21pcnJvcl9saXN0Lg0KPj4gwqDCoCAqIEBub2RlOiB1c2VkIHRv IGFwcGVuZCB0aGlzIHN0cnVjdCB0byB0aGUgDQo+PiBAZHJtX2dwdV9zY2hlZHVsZXIucmluZ19t aXJyb3JfbGlzdC4NCj4+ICsgKiBAZmluaXNoX25vZGU6IHVzZWQgaW4gYSBsaXN0IHRvIHdhaXQg b24gYmVmb3JlIHJlc2V0dGluZyB0aGUgDQo+PiBzY2hlZHVsZXINCj4+IMKgwqAgKiBAaWQ6IGEg dW5pcXVlIGlkIGFzc2lnbmVkIHRvIGVhY2ggam9iIHNjaGVkdWxlZCBvbiB0aGUgc2NoZWR1bGVy Lg0KPj4gwqDCoCAqIEBrYXJtYTogaW5jcmVtZW50IG9uIGV2ZXJ5IGhhbmcgY2F1c2VkIGJ5IHRo aXMgam9iLiBJZiB0aGlzIA0KPj4gZXhjZWVkcyB0aGUgaGFuZw0KPj4gwqDCoCAqwqDCoMKgwqDC oMKgwqDCoCBsaW1pdCBvZiB0aGUgc2NoZWR1bGVyIHRoZW4gdGhlIGpvYiBpcyBtYXJrZWQgZ3Vp bHR5IGFuZCANCj4+IHdpbGwgbm90DQo+PiBAQCAtMTkzLDYgKzE5NCw3IEBAIHN0cnVjdCBkcm1f c2NoZWRfam9iIHsNCj4+IMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZV9jYsKgwqDCoMKgwqDC oMKgIGZpbmlzaF9jYjsNCj4+IMKgwqDCoMKgwqAgc3RydWN0IHdvcmtfc3RydWN0wqDCoMKgwqDC oMKgwqAgZmluaXNoX3dvcms7DQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWTCoMKgwqDC oMKgwqDCoCBub2RlOw0KPj4gK8KgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKgwqDCoMKgwqAg ZmluaXNoX25vZGU7DQo+PiDCoMKgwqDCoMKgIHVpbnQ2NF90wqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZDsNCj4+IMKgwqDCoMKgwqAgYXRvbWljX3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGthcm1h Ow0KPj4gwqDCoMKgwqDCoCBlbnVtIGRybV9zY2hlZF9wcmlvcml0ecKgwqDCoMKgwqDCoMKgIHNf cHJpb3JpdHk7DQo+PiBAQCAtMjk4LDkgKzMwMCwxMSBAQCBpbnQgZHJtX3NjaGVkX2pvYl9pbml0 KHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IsDQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB2b2lkICpvd25lcik7DQo+PiDCoCB2b2lkIGRybV9zY2hlZF9qb2JfY2xlYW51cChz dHJ1Y3QgZHJtX3NjaGVkX2pvYiAqam9iKTsNCj4+IMKgIHZvaWQgZHJtX3NjaGVkX3dha2V1cChz dHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkKTsNCj4+IC12b2lkIGRybV9zY2hlZF9od19q b2JfcmVzZXQoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hlZCwNCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYik7DQo+PiAtdm9p ZCBkcm1fc2NoZWRfam9iX3JlY292ZXJ5KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQp Ow0KPj4gK3ZvaWQgZHJtX3NjaGVkX3N0b3Aoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hl ZCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2Ip Ow0KPj4gK3ZvaWQgZHJtX3NjaGVkX3N0YXJ0KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2No ZWQsIGJvb2wgDQo+PiBmdWxsX3JlY292ZXJ5KTsNCj4+ICt2b2lkIGRybV9zY2hlZF9yZXN1Ym1p dF9qb2JzKHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQpOw0KPj4gK3ZvaWQgZHJtX3Nj aGVkX2luY3JlYXNlX2thcm1hKHN0cnVjdCBkcm1fc2NoZWRfam9iICpiYWQpOw0KPj4gwqAgYm9v bCBkcm1fc2NoZWRfZGVwZW5kZW5jeV9vcHRpbWl6ZWQoc3RydWN0IGRtYV9mZW5jZSogZmVuY2Us DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRy bV9zY2hlZF9lbnRpdHkgKmVudGl0eSk7DQo+PiDCoCB2b2lkIGRybV9zY2hlZF9mYXVsdChzdHJ1 Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkKTsNCj4NCj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QNCj4gYW1k LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=