From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhao1, Wei" Subject: Re: [PATCH v3 1/2] net/i40e: queue region set and flush Date: Thu, 21 Sep 2017 06:48:42 +0000 Message-ID: References: <1505282644-40415-1-git-send-email-wei.zhao1@intel.com> <1505445188-70251-1-git-send-email-wei.zhao1@intel.com> <1505445188-70251-2-git-send-email-wei.zhao1@intel.com> <0508ed6a-4301-de07-7bb1-a74a5ff2a871@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 To: "Yigit, Ferruh" , "dev@dpdk.org" Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 2CA367D4E for ; Thu, 21 Sep 2017 08:48:48 +0200 (CEST) In-Reply-To: <0508ed6a-4301-de07-7bb1-a74a5ff2a871@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGksICBGZXJydWgNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZaWdp dCwgRmVycnVoDQo+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVtYmVyIDIwLCAyMDE3IDY6MzYgUE0N Cj4gVG86IFpoYW8xLCBXZWkgPHdlaS56aGFvMUBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmcNCj4g U3ViamVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIIHYzIDEvMl0gbmV0L2k0MGU6IHF1ZXVlIHJl Z2lvbiBzZXQgYW5kIGZsdXNoDQo+IA0KPiBPbiA5LzE1LzIwMTcgNDoxMyBBTSwgV2VpIFpoYW8g d3JvdGU6DQo+ID4gVGhpcyBmZWF0dXJlIGVuYWJsZSBxdWV1ZSByZWdpb25zIGNvbmZpZ3VyYXRp b24gZm9yIFJTUyBpbiBQRi9WRiwgc28NCj4gPiB0aGF0IGRpZmZlcmVudCB0cmFmZmljIGNsYXNz ZXMgb3IgZGlmZmVyZW50IHBhY2tldCBjbGFzc2lmaWNhdGlvbg0KPiA+IHR5cGVzIGNhbiBiZSBz ZXBhcmF0ZWQgdG8gZGlmZmVyZW50IHF1ZXVlcyBpbiBkaWZmZXJlbnQgcXVldWUNCj4gPiByZWdp b25zLlRoaXMgcGF0Y2ggY2FuIHNldCBxdWV1ZSByZWdpb24gcmFuZ2UsIGl0IGluY2x1ZGUgcXVl dWUgbnVtYmVyDQo+ID4gaW4gYSByZWdpb24gYW5kIHRoZSBpbmRleCBvZiBmaXJzdCBxdWV1ZS4N Cj4gDQo+IElzIGZvbGxvd2luZyBjb3JyZWN0Og0KPiBTbyBpbnN0ZWFkIG9mIGRpc3RyaWJ1dGlu ZyBwYWNrZXRzIHRvIHRoZSBtdWx0aXBsZSBxdWV1ZXMsIHRoaXMgd2lsbCBkaXN0cmlidXRlDQo+ IHBhY2tldHMgaW50byBxdWV1ZSByZXFpb25zIHdoaWNoIG1heSBjb25zaXN0cyBvZiBtdWx0aXBs ZSBxdWV1ZXMuDQo+IA0KPiBJZiBzbywgaXMgdGhlcmUgYSB3YXkgdG8gY29udHJvbCBob3cgcGFj a2V0cyBkaXN0cmlidXRlZCB3aXRoaW4gc2FtZSBxdWV1ZQ0KPiByZWdpb24gdG8gbXVsdGlwbGUg cXVldWVzPw0KPiANCj4gQW5kIGlzIHRoaXMgZmVhdHVyZSBvbmx5IHN1cHBvcnRlZCB3aXRoIFJT Uz8gQ2FuIGl0IGJlIHBhcnQgb2YgUlNTDQo+IGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBQTUQg c3BlY2lmaWMgQVBJPw0KPiANCj4gPiBUaGlzIHBhdGNoIGVuYWJsZSBtYXBwaW5nIGJldHdlZW4g ZGlmZmVyZW50IHByaW9yaXRpZXMgKFVQKSBhbmQNCj4gDQo+IFVzZXIgcHJpb3JpdGllcyAoVVAp DQo+IA0KPiA+IGRpZmZlcmVudCB0cmFmZmljIGNsYXNzZXMuSXQgYWxzbyBlbmFibGUgbWFwcGlu ZyBiZXR3ZWVuIGEgcmVnaW9uDQo+ID4gaW5kZXggYW5kIGEgc2VwY2lmaWMgZmxvd3R5cGUoUENU WVBFKS5JdCBhbHNvIHByb3ZpZGUgdGhlIHNvbHV0aW9uIG9mDQo+ID4gZmx1c2ggYWxsIGNvbmZp Z3VyYXRpb24gYWJvdXQgcXVldWUgcmVnaW9uIHRoZSBhYm92ZSBkZXNjcmliZWQuDQo+ID4NCj4g PiBTaWduZWQtb2ZmLWJ5OiBXZWkgWmhhbyA8d2VpLnpoYW8xQGludGVsLmNvbT4NCj4gPiAtLS0N Cj4gPiAgZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5jICAgICAgICAgICAgfCAgMTkgKy0N Cj4gPiAgZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5oICAgICAgICAgICAgfCAgMzAgKysN Cj4gPiAgZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUuYyAgICAgICAgICAgfCA0ODINCj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvcnRl X3BtZF9pNDBlLmggICAgICAgICAgIHwgIDM4ICsrKw0KPiA+ICBkcml2ZXJzL25ldC9pNDBlL3J0 ZV9wbWRfaTQwZV92ZXJzaW9uLm1hcCB8ICAgMSArDQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwgNTY2 IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pDQo+ID4NCj4gDQo+IDwuLi4+DQo+IA0KPiA+ ICtzdGF0aWMgaW50DQo+ID4gK2k0MGVfdnNpX3VwZGF0ZV9xdWV1ZV9yZWdpb25fbWFwcGluZyhz dHJ1Y3QgaTQwZV9odyAqaHcsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBpNDBlX3BmICpwZikNCj4g PiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gcGYt Pm1haW5fdnNpOw0KPiA+ICsJdWludDE2X3QgcXVldWVfb2Zmc2V0LCBic2YsIHRjX2luZGV4Ow0K PiA+ICsJc3RydWN0IGk0MGVfdnNpX2NvbnRleHQgY3R4dDsNCj4gPiArCXN0cnVjdCBpNDBlX2Fx Y192c2lfcHJvcGVydGllc19kYXRhICp2c2lfaW5mbzsNCj4gPiArCXN0cnVjdCBpNDBlX3F1ZXVl X3JlZ2lvbl9pbmZvICpyZWdpb25faW5mbyA9DQo+ID4gKwkJCQkmcGYtPnF1ZXVlX3JlZ2lvbjsN Cj4gPiArCXVpbnQzMl90IHJldCA9IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJaWYgKCFyZWdpb25f aW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgew0KPiA+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJ0 aGVyZSBpcyBubyB0aGF0IHJlZ2lvbiBpZCBiZWVuIHNldA0KPiBiZWZvcmUiKTsNCj4gDQo+IENh biB5b3UgcGxlYXNlIHJlLWNoZWNrIHRoZSBsb2cgbWVzc2FnZS4NCj4gDQo+ID4gKwkJcmV0dXJu IHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwltZW1zZXQoJmN0eHQsIDAsIHNpemVvZihzdHJ1 Y3QgaTQwZV92c2lfY29udGV4dCkpOw0KPiA+ICsNCj4gPiArCS8qIFVwZGF0ZSBRdWV1ZSBQYWly cyBNYXBwaW5nIGZvciBjdXJyZW50bHkgZW5hYmxlZCBVUHMgKi8NCj4gPiArCWN0eHQuc2VpZCA9 IHZzaS0+c2VpZDsNCj4gPiArCWN0eHQucGZfbnVtID0gaHctPnBmX2lkOw0KPiA+ICsJY3R4dC52 Zl9udW0gPSAwOw0KPiA+ICsJY3R4dC51cGxpbmtfc2VpZCA9IHZzaS0+dXBsaW5rX3NlaWQ7DQo+ ID4gKwljdHh0LmluZm8gPSB2c2ktPmluZm87DQo+ID4gKwl2c2lfaW5mbyA9ICZjdHh0LmluZm87 DQo+ID4gKw0KPiA+ICsJbWVtc2V0KHZzaV9pbmZvLT50Y19tYXBwaW5nLCAwLCBzaXplb2YodWlu dDE2X3QpICogOCk7DQo+ID4gKwltZW1zZXQodnNpX2luZm8tPnF1ZXVlX21hcHBpbmcsIDAsIHNp emVvZih1aW50MTZfdCkgKiAxNik7DQo+ID4gKw0KPiA+ICsJLyoqDQo+ID4gKwkgKiBDb25maWd1 cmUgcXVldWUgcmVnaW9uIGFuZCBxdWV1ZSBtYXBwaW5nIHBhcmFtZXRlcnMsDQo+ID4gKwkgKiBm b3IgZW5hYmxlZCBxdWV1ZSByZWdpb24sIGFsbG9jYXRlIHF1ZXVlcyB0byB0aGlzIHJlZ2lvbi4N Cj4gPiArCSAqLw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCByZWdpb25faW5mby0+cXVl dWVfcmVnaW9uX251bWJlcjsgaSsrKSB7DQo+ID4gKwkJdGNfaW5kZXggPSByZWdpb25faW5mby0+ cmVnaW9uW2ldLnJlZ2lvbl9pZDsNCj4gPiArCQlic2YgPSBydGVfYnNmMzIocmVnaW9uX2luZm8t PnJlZ2lvbltpXS5xdWV1ZV9udW0pOw0KPiA+ICsJCXF1ZXVlX29mZnNldCA9IHJlZ2lvbl9pbmZv LT5yZWdpb25baV0ucXVldWVfc3RhcnRfaW5kZXg7DQo+ID4gKwkJdnNpX2luZm8tPnRjX21hcHBp bmdbdGNfaW5kZXhdID0gcnRlX2NwdV90b19sZV8xNigNCj4gPiArCQkJKHF1ZXVlX29mZnNldCA8 PA0KPiBJNDBFX0FRX1ZTSV9UQ19RVUVfT0ZGU0VUX1NISUZUKSB8DQo+ID4gKwkJCQkoYnNmIDw8 DQo+IEk0MEVfQVFfVlNJX1RDX1FVRV9OVU1CRVJfU0hJRlQpKTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwkvKiBBc3NvY2lhdGUgcXVldWUgbnVtYmVyIHdpdGggVlNJLCBLZWVwIHZzaS0+bmJfcXBz IHVuY2hhbmdlZA0KPiAqLw0KPiA+ICsJaWYgKHZzaS0+dHlwZSA9PSBJNDBFX1ZTSV9TUklPVikg ew0KPiA+ICsJCXZzaV9pbmZvLT5tYXBwaW5nX2ZsYWdzIHw9DQo+ID4gKw0KPiAJcnRlX2NwdV90 b19sZV8xNihJNDBFX0FRX1ZTSV9RVUVfTUFQX05PTkNPTlRJRyk7DQo+ID4gKwkJZm9yIChpID0g MDsgaSA8IHZzaS0+bmJfcXBzOyBpKyspDQo+ID4gKwkJCXZzaV9pbmZvLT5xdWV1ZV9tYXBwaW5n W2ldID0NCj4gPiArCQkJCXJ0ZV9jcHVfdG9fbGVfMTYodnNpLT5iYXNlX3F1ZXVlICsgaSk7DQo+ ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXZzaV9pbmZvLT5tYXBwaW5nX2ZsYWdzIHw9DQo+ID4gKw0K PiAJcnRlX2NwdV90b19sZV8xNihJNDBFX0FRX1ZTSV9RVUVfTUFQX0NPTlRJRyk7DQo+ID4gKwkJ dnNpX2luZm8tPnF1ZXVlX21hcHBpbmdbMF0gPSBydGVfY3B1X3RvX2xlXzE2KHZzaS0NCj4gPmJh c2VfcXVldWUpOw0KPiA+ICsJfQ0KPiA+ICsJdnNpX2luZm8tPnZhbGlkX3NlY3Rpb25zIHw9DQo+ ID4gKw0KPiAJcnRlX2NwdV90b19sZV8xNihJNDBFX0FRX1ZTSV9QUk9QX1FVRVVFX01BUF9WQUxJ RCk7DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIHRoZSBWU0kgYWZ0ZXIgdXBkYXRpbmcgdGhlIFZT SSBxdWV1ZS1tYXBwaW5nDQo+IGluZm9ybWF0aW9uICovDQo+ID4gKwlyZXQgPSBpNDBlX2FxX3Vw ZGF0ZV92c2lfcGFyYW1zKGh3LCAmY3R4dCwgTlVMTCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4g KwkJUE1EX0lOSVRfTE9HKEVSUiwgIkZhaWxlZCB0byBjb25maWd1cmUgcXVldWUgcmVnaW9uICIN Cj4gPiArCQkJIm1hcHBpbmcgPSAlZCAiLCBody0+YXEuYXNxX2xhc3Rfc3RhdHVzKTsNCj4gDQo+ IFBsZWFzZSBkb24ndCBzcGxpdCBsb2cgbWVzc2FnZS4NCg0KSWYgSSBkbyBub3Qgc3BsaSBpdCAs IHRoZSBsaW5lIHdpbGwgaGFzIG1vcmUgODAgY2hhcmFjdGVyLCB0aGVyZSB3aWxsIGJlIHdhcm5p bmcgaW4gcGF0Y2ggY2hlY2sgbG9nIQ0KU28sIHdoaWNoIHdheSBkbyB5b3UgdGhpbmsgd2lsbCBi ZSBiZXR0ZXI/IFNwbGl0IG9yIHdhcm5pbmcgbG9nPw0KDQoNCj4gDQo+ID4gKwkJcmV0dXJuIHJl dDsNCj4gPiArCX0NCj4gPiArCS8qIHVwZGF0ZSB0aGUgbG9jYWwgVlNJIGluZm8gd2l0aCB1cGRh dGVkIHF1ZXVlIG1hcCAqLw0KPiA+ICsJKHZvaWQpcnRlX21lbWNweSgmdnNpLT5pbmZvLnRjX21h cHBpbmcsICZjdHh0LmluZm8udGNfbWFwcGluZywNCj4gPiArCQkJCQlzaXplb2YodnNpLT5pbmZv LnRjX21hcHBpbmcpKTsNCj4gPiArCSh2b2lkKXJ0ZV9tZW1jcHkoJnZzaS0+aW5mby5xdWV1ZV9t YXBwaW5nLA0KPiA+ICsJCQkmY3R4dC5pbmZvLnF1ZXVlX21hcHBpbmcsDQo+ID4gKwkJc2l6ZW9m KHZzaS0+aW5mby5xdWV1ZV9tYXBwaW5nKSk7DQo+IA0KPiBQbGVhc2Uga2VlcCBsaW5lIGFsbGln bm1lbnQgc2FtZSB3aXRoIGFib3ZlIGxpbmUuDQo+IA0KPiA+ICsJdnNpLT5pbmZvLm1hcHBpbmdf ZmxhZ3MgPSBjdHh0LmluZm8ubWFwcGluZ19mbGFnczsNCj4gPiArCXZzaS0+aW5mby52YWxpZF9z ZWN0aW9ucyA9IDA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2k0MGVfc2V0X3F1ZXVlX3JlZ2lvbihzdHJ1Y3QgaTQw ZV9wZiAqcGYsDQo+ID4gKwkJCQlzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mICpjb25m X3B0cikgew0KPiA+ICsJdWludDE2X3QgdGNfc2l6ZV90Yls3XSA9IHsxLCAyLCA0LCA4LCAxNiwg MzIsIDY0fTsNCj4gPiArCXVpbnQxNl90IGk7DQo+ID4gKwlzdHJ1Y3QgaTQwZV92c2kgKm1haW5f dnNpID0gcGYtPm1haW5fdnNpOw0KPiA+ICsJc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8g KmluZm8gPSAmcGYtPnF1ZXVlX3JlZ2lvbjsNCj4gPiArCXVpbnQzMl90IHJldCA9IC1FSU5WQUw7 DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IEk0MEVfUkVHSU9OX01BWF9JTkRFWDsgaSsr KQ0KPiA+ICsJCWlmIChjb25mX3B0ci0+cXVldWVfbnVtID09IHRjX3NpemVfdGJbaV0pDQo+ID4g KwkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWlmIChpID09IEk0MEVfUkVHSU9OX01BWF9JTkRFWCkg ew0KPiA+ICsJCXByaW50ZigiVGhlIHJlZ2lvbiBzaXplcyBzaG91bGQgYmUgYW55IG9mIHRoZSBm b2xsb3dpbmcgIg0KPiA+ICsJCSJ2YWx1ZXM6IDEsIDIsIDQsIDgsIDE2LCAzMiwgNjQgYXMgbG9u ZyBhcyB0aGUgIg0KPiA+ICsJCSJ0b3RhbCBudW1iZXIgb2YgcXVldWVzIGRvIG5vdCBleGNlZWQg dGhlIFZTSSBhbGxvY2F0aW9uIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlpZiAoY29uZl9wdHItPnJlZ2lvbl9pZCA+PSBJNDBFX1JFR0lPTl9NQVhfSU5ERVgp IHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAidGhlIHF1ZXVlIHJlZ2lvbiBtYXggaW5kZXgg aXMgNyIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKChj b25mX3B0ci0+cXVldWVfc3RhcnRfaW5kZXggKyBjb25mX3B0ci0+cXVldWVfbnVtKQ0KPiA+ICsJ CQkJCT4gbWFpbl92c2ktPm5iX3VzZWRfcXBzKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwg InRoZSBxdWV1ZSBpbmRleCBleGNlZWRzIHRoZSBWU0kNCj4gcmFuZ2UiKTsNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZvLT5xdWV1ZV9yZWdpb25fbnVt YmVyKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7 IGkrKykNCj4gPiArCQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPT0gaW5mby0+cmVnaW9uW2ld LnJlZ2lvbl9pZCkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlpZiAoKGkgPT0gaW5m by0+cXVldWVfcmVnaW9uX251bWJlcikgJiYNCj4gPiArCQkJKGkgPD0gSTQwRV9SRUdJT05fTUFY X0lOREVYKSkgew0KPiANCj4gDQo+IFBsZWFzZSB1c2Ugb25lIG1vcmUgbGV2ZWwgaW5kZW50YWlv biBoZXJlLCBhbmQgcGhhcmFudGVzaXMgbG9va3MgZXh0cmEgY2FuDQo+IHlvdSBwbGVhc2UgZG91 YmxlIGNoZWNrPw0KPiANCj4gPiArCQkJaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCA9IGNvbmZf cHRyLT5yZWdpb25faWQ7DQo+ID4gKwkJCWluZm8tPnJlZ2lvbltpXS5xdWV1ZV9udW0gPSBjb25m X3B0ci0+cXVldWVfbnVtOw0KPiA+ICsJCQlpbmZvLT5yZWdpb25baV0ucXVldWVfc3RhcnRfaW5k ZXggPQ0KPiA+ICsJCQkJY29uZl9wdHItPnF1ZXVlX3N0YXJ0X2luZGV4Ow0KPiA+ICsJCQlpbmZv LT5xdWV1ZV9yZWdpb25fbnVtYmVyKys7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJUE1EX0lO SVRfTE9HKEVSUiwgInF1ZXVlIHJlZ2lvbiBudW1iZXIgIg0KPiA+ICsJCQkJImV4Y2VlZHMgbWF4 bnVtIDggb3IgdGhlICINCj4gPiArCQkJCSJxdWV1ZSByZWdpb24gaWQgaGFzICINCj4gPiArCQkJ CSJiZWVuIHNldCBiZWZvcmUiKTsNCj4gDQo+IHBsZWFzZSBkb24ndCBzcGxpdCBsb2cgbWVzc2Fn ZS4NCg0KSWYgSSBkbyBub3Qgc3BsaSBpdCAsIHRoZSBsaW5lIHdpbGwgaGFzIG1vcmUgODAgY2hh cmFjdGVyLCB0aGVyZSB3aWxsIGJlIHdhcm5pbmcgaW4gcGF0Y2ggY2hlY2sgbG9nIQ0KDQo+IA0K PiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaW5m by0+cmVnaW9uWzBdLnJlZ2lvbl9pZCA9IGNvbmZfcHRyLT5yZWdpb25faWQ7DQo+ID4gKwkJaW5m by0+cmVnaW9uWzBdLnF1ZXVlX251bSA9IGNvbmZfcHRyLT5xdWV1ZV9udW07DQo+ID4gKwkJaW5m by0+cmVnaW9uWzBdLnF1ZXVlX3N0YXJ0X2luZGV4ID0NCj4gPiArCQkJY29uZl9wdHItPnF1ZXVl X3N0YXJ0X2luZGV4Ow0KPiA+ICsJCWluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIrKzsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dA0KPiA+ICtpNDBlX3NldF9yZWdpb25fZmxvd3R5cGVfcGYoc3RydWN0IGk0MGVfaHcgKmh3LA0K PiA+ICsJCXN0cnVjdCBpNDBlX3BmICpwZiwgc3RydWN0IHJ0ZV9pNDBlX3Jzc19yZWdpb25fY29u Zg0KPiAqY29uZl9wdHIpDQo+IA0KPiBXaGF0IGRvIHlvdSB0aGluayBzdGFydGluZyBhbGwgZnVu Y3Rpb25zLCBldmVuIHRoZXkgYXJlIHN0YXRpYywgd2l0aA0KPiAiaTQwZV9xdWV1ZV9yZWdpb25f IiBwcmVmaXg/DQo+IA0KPiA+ICt7DQo+ID4gKwl1aW50MzJfdCBwZnFmX2hyZWdpb247DQo+ID4g Kwl1aW50MzJfdCByZXQgPSAtRUlOVkFMOw0KPiA+ICsJc3RydWN0IGk0MGVfcXVldWVfcmVnaW9u X2luZm8gKmluZm8gPSAmcGYtPnF1ZXVlX3JlZ2lvbjsNCj4gPiArCXVpbnQxNl90IGksIGosIGlu ZGV4LCBmbG93dHlwZV9zZXQgPSAwOw0KPiA+ICsJdWludDE2X3QgcmVnaW9uX2luZGV4LCBmbG93 dHlwZV9pbmRleDsNCj4gPiArDQo+ID4gKwlpZiAoY29uZl9wdHItPnJlZ2lvbl9pZCA+IEk0MEVf UEZRRl9IUkVHSU9OX01BWF9JTkRFWCkgew0KPiA+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGUg cXVldWUgcmVnaW9uIG1heCBpbmRleCBpcyA3Iik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlpZiAoY29uZl9wdHItPmh3X2Zsb3d0eXBlID49IEk0MEVfRklMVEVS X1BDVFlQRV9NQVgpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAidGhlIGh3X2Zsb3d0eXBl IG9yIFBDVFlQRSBtYXggaW5kZXgNCj4gaXMgNjMiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4g KwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiAr CQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPT0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCkN Cj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdp b25fbnVtYmVyKSB7DQo+ID4gKwkJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGF0IHJlZ2lvbiBpZCBo YXMgbm90ICINCj4gPiArCQkJCSJiZWVuIHNldCBiZWZvcmUiKTsNCj4gPiArCQkJcmV0dXJuIHJl dDsNCj4gPiArCQl9DQo+ID4gKwkJcmVnaW9uX2luZGV4ID0gaTsNCj4gPiArDQo+ID4gKwkJZm9y IChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KPiA+ICsJCQlm b3IgKGogPSAwOyBqIDwgaW5mby0+cmVnaW9uW2ldLmZsb3d0eXBlX251bTsgaisrKSB7DQo+ID4g KwkJCQlpZiAoY29uZl9wdHItPmh3X2Zsb3d0eXBlID09DQo+ID4gKwkJCQkJaW5mby0+cmVnaW9u W2ldLmh3X2Zsb3d0eXBlW2pdKSB7DQo+ID4gKwkJCQkJZmxvd3R5cGVfc2V0ID0gMTsNCj4gPiAr CQkJCQlicmVhazsNCj4gPiArCQkJCX0NCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4g KwkJaWYgKGZsb3d0eXBlX3NldCkgew0KPiA+ICsJCQlQTURfSU5JVF9MT0coRVJSLCAidGhhdCBo d19mbG93dHlwZSAiDQo+ID4gKwkJCQkiaGFzIGJlZW4gc2V0IGJlZm9yZSIpOw0KPiANCj4gUGxl YXNlIGRvbid0IHNwbGl0IGxvZyBtZXNzYWdlcy4NCj4gDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ ID4gKwkJfQ0KPiA+ICsJCWZsb3d0eXBlX2luZGV4ID0gaW5mby0+cmVnaW9uW3JlZ2lvbl9pbmRl eF0uZmxvd3R5cGVfbnVtOw0KPiA+ICsJCWluZm8tPnJlZ2lvbltyZWdpb25faW5kZXhdLmh3X2Zs b3d0eXBlW2Zsb3d0eXBlX2luZGV4XSA9DQo+ID4gKwkJCQkJCWNvbmZfcHRyLT5od19mbG93dHlw ZTsNCj4gPiArCQlpbmZvLT5yZWdpb25bcmVnaW9uX2luZGV4XS5mbG93dHlwZV9udW0rKzsNCj4g PiArCX0gZWxzZSAgew0KPiA+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGVyZSBpcyBubyB0aGF0 IHJlZ2lvbiBpZCBiZWVuIHNldA0KPiBiZWZvcmUiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWluZGV4ID0gY29uZl9wdHItPmh3X2Zsb3d0eXBlID4+IDM7DQo+ ID4gKwlwZnFmX2hyZWdpb24gPSBpNDBlX3JlYWRfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSFJFR0lP TihpbmRleCkpOw0KPiA+ICsNCj4gPiArCWlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3 KSA9PSAwKSB7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IGNvbmZfcHRyLT5yZWdpb25faWQgPDwN Cj4gPiArCQkJCUk0MEVfUEZRRl9IUkVHSU9OX1JFR0lPTl8wX1NISUZUOw0KPiA+ICsJCXBmcWZf aHJlZ2lvbiB8PSAxIDw8DQo+IEk0MEVfUEZRRl9IUkVHSU9OX09WRVJSSURFX0VOQV8wX1NISUZU Ow0KPiA+ICsJfSBlbHNlIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSAxKSB7 DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IGNvbmZfcHRyLT5yZWdpb25faWQgPDwNCj4gPiArCQkJ CUk0MEVfUEZRRl9IUkVHSU9OX1JFR0lPTl8xX1NISUZUOw0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8 PSAxIDw8DQo+IEk0MEVfUEZRRl9IUkVHSU9OX09WRVJSSURFX0VOQV8xX1NISUZUOw0KPiA+ICsJ fSBlbHNlIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSAyKSB7DQo+ID4gKwkJ cGZxZl9ocmVnaW9uIHw9IGNvbmZfcHRyLT5yZWdpb25faWQgPDwNCj4gPiArCQkJCUk0MEVfUEZR Rl9IUkVHSU9OX1JFR0lPTl8yX1NISUZUOw0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8PSAxIDw8DQo+ IEk0MEVfUEZRRl9IUkVHSU9OX09WRVJSSURFX0VOQV8yX1NISUZUOw0KPiA+ICsJfSBlbHNlIGlm ICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSAzKSB7DQo+ID4gKwkJcGZxZl9ocmVn aW9uIHw9IGNvbmZfcHRyLT5yZWdpb25faWQgPDwNCj4gPiArCQkJCUk0MEVfUEZRRl9IUkVHSU9O X1JFR0lPTl8zX1NISUZUOw0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8PSAxIDw8DQo+IEk0MEVfUEZR Rl9IUkVHSU9OX09WRVJSSURFX0VOQV8zX1NISUZUOw0KPiA+ICsJfSBlbHNlIGlmICgoY29uZl9w dHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSA0KSB7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IGNv bmZfcHRyLT5yZWdpb25faWQgPDwNCj4gPiArCQkJCUk0MEVfUEZRRl9IUkVHSU9OX1JFR0lPTl80 X1NISUZUOw0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8PSAxIDw8DQo+IEk0MEVfUEZRRl9IUkVHSU9O X09WRVJSSURFX0VOQV80X1NISUZUOw0KPiA+ICsJfSBlbHNlIGlmICgoY29uZl9wdHItPmh3X2Zs b3d0eXBlICYgMHg3KSA9PSA1KSB7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IGNvbmZfcHRyLT5y ZWdpb25faWQgPDwNCj4gPiArCQkJCUk0MEVfUEZRRl9IUkVHSU9OX1JFR0lPTl81X1NISUZUOw0K PiA+ICsJCXBmcWZfaHJlZ2lvbiB8PSAxIDw8DQo+IEk0MEVfUEZRRl9IUkVHSU9OX09WRVJSSURF X0VOQV81X1NISUZUOw0KPiA+ICsJfSBlbHNlIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYg MHg3KSA9PSA2KSB7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IGNvbmZfcHRyLT5yZWdpb25faWQg PDwNCj4gPiArCQkJCUk0MEVfUEZRRl9IUkVHSU9OX1JFR0lPTl82X1NISUZUOw0KPiA+ICsJCXBm cWZfaHJlZ2lvbiB8PSAxIDw8DQo+IEk0MEVfUEZRRl9IUkVHSU9OX09WRVJSSURFX0VOQV82X1NI SUZUOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJl Z2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzdfU0hJRlQ7DQo+ ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVf RU5BXzdfU0hJRlQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaTQwZV93cml0ZV9yeF9jdGwoaHcs IEk0MEVfUEZRRl9IUkVHSU9OKGluZGV4KSwgcGZxZl9ocmVnaW9uKTsNCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtpNDBlX3NldF91 cF9yZWdpb24oc3RydWN0IGk0MGVfcGYgKnBmLA0KPiA+ICsJCQkJc3RydWN0IHJ0ZV9pNDBlX3Jz c19yZWdpb25fY29uZiAqY29uZl9wdHIpDQo+IA0KPiBUaGUgQVBJIG5hbWUgbG9va3MgbGlrZSAi c2V0dXAiIGJ1dCB0aGF0IHVwIHBhcnQgaXMgdXNlcl9wcmlvcml0eSwgY2FuIHlvdQ0KPiBwbGVh c2UgbG9uZyBmb3JtIGFnYWluc3QgInVwIj8NCj4gDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpNDBl X3F1ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ID4gKwl1aW50 MzJfdCByZXQgPSAtRUlOVkFMOw0KPiA+ICsJdWludDE2X3QgaSwgaiwgcmVnaW9uX2luZGV4LCB1 cF9zZXQgPSAwOw0KPiANCj4gU2FtZSBhYnJldmF0aW9uIGNvbW1lbnQgZm9yICJ1cHNldCIsIHBs ZWFzZSB1c2UgbG9uZyBmb3JtLg0KPiANCj4gPiArDQo+ID4gKwlpZiAoY29uZl9wdHItPnVzZXJf cHJpb3JpdHkgPg0KPiBJNDBFX1JFR0lPTl9VU0VSUFJJT1JJVFlfTUFYX0lOREVYKSB7DQo+ID4g KwkJUE1EX0lOSVRfTE9HKEVSUiwgInRoZSBxdWV1ZSByZWdpb24gbWF4IGluZGV4IGlzIDciKTsN Cj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChjb25mX3B0ci0+ cmVnaW9uX2lkID49IEk0MEVfUkVHSU9OX01BWF9JTkRFWCkgew0KPiA+ICsJCVBNRF9JTklUX0xP RyhFUlIsICJ0aGUgcmVnaW9uX2lkIG1heCBpbmRleCBpcyA3Iik7DQo+ID4gKwkJcmV0dXJuIHJl dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoaW5mby0+cXVldWVfcmVnaW9uX251bWJlcikg ew0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOyBpKysp DQo+ID4gKwkJCWlmIChjb25mX3B0ci0+cmVnaW9uX2lkID09IGluZm8tPnJlZ2lvbltpXS5yZWdp b25faWQpDQo+ID4gKwkJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJaWYgKGkgPT0gaW5mby0+cXVl dWVfcmVnaW9uX251bWJlcikgew0KPiA+ICsJCQlQTURfSU5JVF9MT0coRVJSLCAidGhhdCByZWdp b24gaWQgIg0KPiA+ICsJCQkJImhhcyBub3QgYmVlbiBzZXQgYmVmb3JlIik7DQo+ID4gKwkJCXJl dHVybiByZXQ7DQo+ID4gKwkJfQ0KPiA+ICsJCXJlZ2lvbl9pbmRleCA9IGk7DQo+ID4gKw0KPiA+ ICsJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOyBpKyspIHsNCj4g PiArCQkJZm9yIChqID0gMDsgaiA8DQo+ID4gKwkJCQlpbmZvLT5yZWdpb25baV0udXNlcl9wcmlv cml0eV9udW07IGorKykgew0KPiANCj4gUGxlYXNlIGJyZWFrIGxpbmUgYWZ0ZXIgIjsiDQo+IA0K PiA+ICsJCQkJaWYgKGluZm8tPnJlZ2lvbltpXS51c2VyX3ByaW9yaXR5W2pdID09DQo+ID4gKwkJ CQkJY29uZl9wdHItPnVzZXJfcHJpb3JpdHkpIHsNCj4gPiArCQkJCQl1cF9zZXQgPSAxOw0KPiA+ ICsJCQkJCWJyZWFrOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsNCj4g PiArCQlpZiAodXBfc2V0KSB7DQo+ID4gKwkJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGF0IHVzZXIg cHJpb3JpdHkgIg0KPiA+ICsJCQkJImhhcyBiZWVuIHNldCBiZWZvcmUiKTsNCj4gPiArCQkJcmV0 dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWogPSBpbmZvLT5yZWdpb25bcmVnaW9u X2luZGV4XS51c2VyX3ByaW9yaXR5X251bTsNCj4gPiArCQlpbmZvLT5yZWdpb25bcmVnaW9uX2lu ZGV4XS51c2VyX3ByaW9yaXR5W2pdID0NCj4gPiArCQkJCQkJY29uZl9wdHItPnVzZXJfcHJpb3Jp dHk7DQo+ID4gKwkJaW5mby0+cmVnaW9uW3JlZ2lvbl9pbmRleF0udXNlcl9wcmlvcml0eV9udW0r KzsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgInRoZXJlIGlzIG5v IHRoYXQgcmVnaW9uIGlkIGJlZW4gc2V0DQo+IGJlZm9yZSIpOw0KPiA+ICsJCXJldHVybiByZXQ7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQNCj4gPiAraTQwZV9xdWV1ZV9yZWdpb25fZGNiX2NvbmZpZ3VyZShzdHJ1Y3QgaTQw ZV9odyAqaHcsDQo+ID4gKwkJCQlzdHJ1Y3QgaTQwZV9wZiAqcGYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBpNDBlX2RjYnhfY29uZmlnIGRjYl9jZmdfbG9jYWw7DQo+ID4gKwlzdHJ1Y3QgaTQwZV9k Y2J4X2NvbmZpZyAqZGNiX2NmZzsNCj4gPiArCXN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZv ICppbmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ID4gKwlzdHJ1Y3QgaTQwZV9kY2J4X2NvbmZp ZyAqb2xkX2NmZyA9ICZody0+bG9jYWxfZGNieF9jb25maWc7DQo+ID4gKwl1aW50MzJfdCByZXQg PSAtRUlOVkFMOw0KPiANCj4gUGxlYXNlIHVzZSBzaWduZWQgdmFyaWFibGUsIHRoZXJlIGFyZSBt b3JlIGFib3ZlLg0KPiANCj4gPiArCXVpbnQxNl90IGksIGosIHByaW9faW5kZXgsIHJlZ2lvbl9p bmRleDsNCj4gPiArCXVpbnQ4X3QgdGNfbWFwLCB0Y19idywgYndfbGY7DQo+ID4gKw0KPiA+ICsJ aWYgKCFpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVS UiwgInRoZXJlIGlzIG5vIHRoYXQgcmVnaW9uIGlkIGJlZW4gc2V0DQo+IGJlZm9yZSIpOw0KPiA+ ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGNiX2NmZyA9ICZkY2JfY2Zn X2xvY2FsOw0KPiA+ICsJbWVtc2V0KGRjYl9jZmcsIDAsIHNpemVvZihzdHJ1Y3QgaTQwZV9kY2J4 X2NvbmZpZykpOw0KPiA+ICsNCj4gPiArCS8qIGFzc3VtZSBlYWNoIHRjIGhhcyB0aGUgc2FtZSBi dyAqLw0KPiA+ICsJdGNfYncgPSBJNDBFX01BWF9QRVJDRU5UIC8gaW5mby0+cXVldWVfcmVnaW9u X251bWJlcjsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVy OyBpKyspDQo+ID4gKwkJZGNiX2NmZy0+ZXRzY2ZnLnRjYnd0YWJsZVtpXSA9IHRjX2J3Ow0KPiA+ ICsJLyogdG8gZW5zdXJlIHRoZSBzdW0gb2YgdGNidyBpcyBlcXVhbCB0byAxMDAgKi8NCj4gPiAr CWJ3X2xmID0gSTQwRV9NQVhfUEVSQ0VOVCAlICBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOw0K PiA+ICsJZm9yIChpID0gMDsgaSA8IGJ3X2xmOyBpKyspDQo+ID4gKwkJZGNiX2NmZy0+ZXRzY2Zn LnRjYnd0YWJsZVtpXSsrOw0KPiA+ICsNCj4gPiArCS8qIGFzc3VtZSBlYWNoIHRjIGhhcyB0aGUg c2FtZSBUcmFuc21pc3Npb24gU2VsZWN0aW9uIEFsZ29yaXRobSAqLw0KPiA+ICsJZm9yIChpID0g MDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiArCQlkY2JfY2ZnLT5l dHNjZmcudHNhdGFibGVbaV0gPSBJNDBFX0lFRUVfVFNBX0VUUzsNCj4gPiArDQo+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsgaSsrKSB7DQo+ID4gKwkJZm9y IChqID0gMDsgaiA8IGluZm8tPnJlZ2lvbltpXS51c2VyX3ByaW9yaXR5X251bTsgaisrKSB7DQo+ ID4gKwkJCXByaW9faW5kZXggPSBpbmZvLT5yZWdpb25baV0udXNlcl9wcmlvcml0eVtqXTsNCj4g PiArCQkJcmVnaW9uX2luZGV4ID0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZDsNCj4gPiArCQkJ ZGNiX2NmZy0+ZXRzY2ZnLnByaW9yaXR5dGFibGVbcHJpb19pbmRleF0gPQ0KPiA+ICsJCQkJCQly ZWdpb25faW5kZXg7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEZXIG5lZWRz IG9uZSBBcHAgdG8gY29uZmlndXJlIEhXICovDQo+ID4gKwlkY2JfY2ZnLT5udW1hcHBzID0gSTQw RV9ERUZBVUxUX0RDQl9BUFBfTlVNOw0KPiA+ICsJZGNiX2NmZy0+YXBwWzBdLnNlbGVjdG9yID0g STQwRV9BUFBfU0VMX0VUSFRZUEU7DQo+ID4gKwlkY2JfY2ZnLT5hcHBbMF0ucHJpb3JpdHkgPSBJ NDBFX0RFRkFVTFRfRENCX0FQUF9QUklPOw0KPiA+ICsJZGNiX2NmZy0+YXBwWzBdLnByb3RvY29s aWQgPSBJNDBFX0FQUF9QUk9UT0lEX0ZDT0U7DQo+ID4gKw0KPiA+ICsJdGNfbWFwID0gUlRFX0xF TjJNQVNLKGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIsIHVpbnQ4X3QpOw0KPiA+ICsNCj4gPiAr CWRjYl9jZmctPnBmYy53aWxsaW5nID0gMDsNCj4gPiArCWRjYl9jZmctPnBmYy5wZmNjYXAgPSBJ NDBFX01BWF9UUkFGRklDX0NMQVNTOw0KPiA+ICsJZGNiX2NmZy0+cGZjLnBmY2VuYWJsZSA9IHRj X21hcDsNCj4gPiArDQo+ID4gKwkvKiBDb3B5IHRoZSBuZXcgY29uZmlnIHRvIHRoZSBjdXJyZW50 IGNvbmZpZyAqLw0KPiA+ICsJKm9sZF9jZmcgPSAqZGNiX2NmZzsNCj4gPiArCW9sZF9jZmctPmV0 c3JlYyA9IG9sZF9jZmctPmV0c2NmZzsNCj4gPiArCXJldCA9IGk0MGVfc2V0X2RjYl9jb25maWco aHcpOw0KPiA+ICsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAi U2V0IHF1ZXVlIHJlZ2lvbiBEQ0IgQ29uZmlnIGZhaWxlZCwNCj4gZXJyIg0KPiA+ICsJCQkiICVz IGFxX2VyciAlcyIsDQo+IA0KPiBQbGVhc2UgZG9uJ3Qgc3BsaXQgdGhlIGxvZyBtZXNzYWdlLg0K PiANCj4gPiArCQkJIGk0MGVfc3RhdF9zdHIoaHcsIHJldCksDQo+ID4gKwkJCSBpNDBlX2FxX3N0 cihodywgaHctPmFxLmFzcV9sYXN0X3N0YXR1cykpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQNCj4gPiAraTQwZV9xdWV1ZV9yZWdpb25fZGNiX2NvbmZpZ3VyZV9kZWZhdWx0KHN0cnVjdCBp NDBlX2h3ICpodykgew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXVpbnQzMl90IHJldCA9IC1F SU5WQUw7DQo+IA0KPiBQbGVhc2UgdXNlIHNpZ25lZCB2YXJpYWJsZSBoZXJlLg0KPiANCj4gPiAr DQo+ID4gKwltZW1zZXQoJmh3LT5sb2NhbF9kY2J4X2NvbmZpZywgMCwNCj4gPiArCXNpemVvZihz dHJ1Y3QgaTQwZV9kY2J4X2NvbmZpZykpOw0KPiANCj4gV3JvbmcgaW5kZW50YXRpb24uDQo+IA0K PiA+ICsJLyogc2V0IGRjYiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCWh3LT5sb2Nh bF9kY2J4X2NvbmZpZy5ldHNjZmcud2lsbGluZyA9IDA7DQo+ID4gKwlody0+bG9jYWxfZGNieF9j b25maWcuZXRzY2ZnLm1heHRjcyA9IDA7DQo+ID4gKwlody0+bG9jYWxfZGNieF9jb25maWcuZXRz Y2ZnLnRjYnd0YWJsZVswXSA9IDEwMDsNCj4gPiArCWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5ldHNj ZmcudHNhdGFibGVbMF0gPQ0KPiA+ICsJCQlJNDBFX0lFRUVfVFNBX0VUUzsNCj4gPiArCS8qIGFs bCBVUHMgbWFwcGluZyB0byByZWdpb24gMCAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IEk0MEVf TUFYX1VTRVJfUFJJT1JJVFk7IGkrKykNCj4gPiArCQlody0+bG9jYWxfZGNieF9jb25maWcuZXRz Y2ZnLnByaW9yaXR5dGFibGVbaV0gPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0 c3JlYyA9DQo+ID4gKwkJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZzsNCj4gPiArCWh3LT5s b2NhbF9kY2J4X2NvbmZpZy5wZmMud2lsbGluZyA9IDA7DQo+ID4gKwlody0+bG9jYWxfZGNieF9j b25maWcucGZjLnBmY2NhcCA9DQo+ID4gKwkJCUk0MEVfTUFYX1RSQUZGSUNfQ0xBU1M7DQo+ID4g KwkvKiBGVyBuZWVkcyBvbmUgQXBwIHRvIGNvbmZpZ3VyZSBIVyAqLw0KPiA+ICsJaHctPmxvY2Fs X2RjYnhfY29uZmlnLm51bWFwcHMgPSAxOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLmFw cFswXS5zZWxlY3RvciA9DQo+ID4gKwkJCUk0MEVfQVBQX1NFTF9FVEhUWVBFOw0KPiA+ICsJaHct PmxvY2FsX2RjYnhfY29uZmlnLmFwcFswXS5wcmlvcml0eSA9IDM7DQo+ID4gKwlody0+bG9jYWxf ZGNieF9jb25maWcuYXBwWzBdLnByb3RvY29saWQgPQ0KPiA+ICsJCQlJNDBFX0FQUF9QUk9UT0lE X0ZDT0U7DQo+ID4gKwlyZXQgPSBpNDBlX3NldF9kY2JfY29uZmlnKGh3KTsNCj4gPiArCWlmIChy ZXQpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLA0KPiA+ICsJCSJkZWZhdWx0IGRjYiBjb25m aWcgZmFpbHMuIGVyciA9ICVkLCBhcV9lcnIgPSAlZC4iLA0KPiA+ICsJCQlyZXQsIGh3LT5hcS5h c3FfbGFzdF9zdGF0dXMpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludA0KPiA+ICtpNDBlX2ZsdXNoX3Jl Z2lvbl9hbGxfY29uZihzdHJ1Y3QgaTQwZV9odyAqaHcsIHN0cnVjdCBpNDBlX3BmICpwZiwNCj4g PiArCQkJCXVpbnQxNl90IG9uKQ0KPiA+ICt7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ICsJc3Ry dWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gKmluZm8gPSAmcGYtPnF1ZXVlX3JlZ2lvbjsNCj4g PiArDQo+ID4gKwlpZiAob24pIHsNCj4gPiArCQlpNDBlX3ZzaV91cGRhdGVfcXVldWVfcmVnaW9u X21hcHBpbmcoaHcsIHBmKTsNCj4gPiArCQlpNDBlX3F1ZXVlX3JlZ2lvbl9kY2JfY29uZmlndXJl KGh3LCBwZik7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaW5mby0+ cXVldWVfcmVnaW9uX251bWJlciA9IDE7DQo+ID4gKwlpbmZvLT5yZWdpb25bMF0ucXVldWVfbnVt ID0gNjQ7DQo+ID4gKwlpbmZvLT5yZWdpb25bMF0ucXVldWVfc3RhcnRfaW5kZXggPSAwOw0KPiA+ ICsNCj4gPiArCWk0MGVfdnNpX3VwZGF0ZV9xdWV1ZV9yZWdpb25fbWFwcGluZyhodywgcGYpOw0K PiA+ICsJaTQwZV9xdWV1ZV9yZWdpb25fZGNiX2NvbmZpZ3VyZV9kZWZhdWx0KGh3KTsNCj4gPiAr DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgSTQwRV9QRlFGX0hSRUdJT05fTUFYX0lOREVYOyBpKysp DQo+ID4gKwkJaTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IUkVHSU9OKGkpLCAwKTsN Cj4gPiArDQo+ID4gKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpNDBlX3F1ZXVlX3Jl Z2lvbl9pbmZvKSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K2ludCBydGVfcG1kX2k0MGVfcXVldWVfcmVnaW9uX2NvbmYodWludDhfdCBwb3J0LA0KPiA+ICsJ CQlzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mICpjb25mX3B0cikgew0KPiA+ICsJc3Ry dWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRdOw0KPiANCj4geW91 IG5lZWQgdG8gdmVyaWZ5IHBvcnRfaWQsIHNpbmNlIHRoaXMgaXMgcHVibGljIEFQSSBub3cuIFBs ZWFzZSBjaGVjayBvdGhlcg0KPiBBUElzIGluIHRoaXMgZmlsZS4NCj4gDQo+ID4gKwlzdHJ1Y3Qg aTQwZV9wZiAqcGYgPSBJNDBFX0RFVl9QUklWQVRFX1RPX1BGKGRldi0+ZGF0YS0NCj4gPmRldl9w cml2YXRlKTsNCj4gPiArCXN0cnVjdCBpNDBlX2h3ICpodyA9IEk0MEVfREVWX1BSSVZBVEVfVE9f SFcoZGV2LT5kYXRhLQ0KPiA+ZGV2X3ByaXZhdGUpOw0KPiA+ICsJZW51bSBydGVfcG1kX2k0MGVf cXVldWVfcmVnaW9uX29wIG9wX3R5cGUgPSBjb25mX3B0ci0+b3A7DQo+ID4gKwl1aW50MzJfdCBy ZXQ7DQo+IA0KPiBUaGlzIHNob3VsZCBiZSBzaWduZWQgdmFyaWFibGUsIHNpbmNlIHlvdSBhcmUg dXNpbmcgaXQgZm9yIHJldHVybiBhbmQgYXNzaWduaW5nDQo+IG5lZ2F0aXZlIHZhbHVlcy4NCj4g DQo+ID4gKw0KPiA+ICsJaWYgKCFpc19pNDBlX3N1cHBvcnRlZChkZXYpKQ0KPiA+ICsJCXJldHVy biAtRU5PVFNVUDsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKG9wX3R5cGUpIHsNCj4gPiArCWNhc2Ug UlRFX1BNRF9JNDBFX1FVRVVFX1JFR0lPTl9TRVQ6DQo+ID4gKwkJcmV0ID0gaTQwZV9zZXRfcXVl dWVfcmVnaW9uKHBmLCBjb25mX3B0cik7DQo+ID4gKwkJYnJlYWs7DQo+IA0KPiBEb2VzIGl0IG1h a2Ugc2Vuc2UgdG8gYWRkIGFub3RoZXIgdHlwZSB0byBnZXQgdGhlIGN1cnJlbnQgcXVldWUgcmVn aW9uDQo+IGNvbmZpZz8NCj4gDQo+ID4gKwljYXNlIFJURV9QTURfSTQwRV9SRUdJT05fRkxPV1RZ UEVfUEZfU0VUOg0KPiA+ICsJCXJldCA9IGk0MGVfc2V0X3JlZ2lvbl9mbG93dHlwZV9wZihodywg cGYsIGNvbmZfcHRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgUlRFX1BNRF9JNDBFX1JF R0lPTl9GTE9XVFlQRV9WRl9TRVQ6DQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsNCj4gDQo+IFdpbGwg dGhpcyBiZSBpbXBsZW1lbnRlZCBsYXRlciwgb3Igbm90IGEgdmFsaWQgY2FzZSBhdCBhbGw/DQo+ IA0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfVVBfUkVHSU9OX1NFVDo+ ICsJCXJldCA9DQo+IGk0MGVfc2V0X3VwX3JlZ2lvbihwZiwgY29uZl9wdHIpOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PTjoNCj4gPiAr CQlyZXQgPSBpNDBlX2ZsdXNoX3JlZ2lvbl9hbGxfY29uZihodywgcGYsIDEpOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PRkY6DQo+ID4g KwkJcmV0ID0gaTQwZV9mbHVzaF9yZWdpb25fYWxsX2NvbmYoaHcsIHBmLCAwKTsNCj4gDQo+IENh biB5b3UgcGxlYXNlIGRlc2NyaWJlIHdoYXQgZmx1c2hfb24gYW5kIGZsdXNoX29mZiBhcmUsIHlv dSBjYW4gY29tbWVudA0KPiB0byBjb2RlIGlmIGFsc28uDQo+IA0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJUE1EX0RSVl9MT0coV0FSTklORywgIm9wIHR5cGUg KCVkKSBub3Qgc3VwcG9ydGVkIiwNCj4gPiArCQkJICAgIG9wX3R5cGUpOw0KPiANCj4gTGluZSBi cmVhayBub3QgcmVxdWlyZWQuDQo+IA0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJYnJl YWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJSTQwRV9XUklURV9GTFVTSChodyk7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9p NDBlL3J0ZV9wbWRfaTQwZS5oDQo+ID4gYi9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5o IGluZGV4IDE1NWI3ZTguLmExMzI5ZjQgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvaTQw ZS9ydGVfcG1kX2k0MGUuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBl LmgNCj4gPiBAQCAtOTEsNiArOTEsMjAgQEAgZW51bSBydGVfcG1kX2k0MGVfcGFja2FnZV9pbmZv IHsNCj4gPiAgCVJURV9QTURfSTQwRV9QS0dfSU5GT19NQVggPSAweEZGRkZGRkZGICB9Ow0KPiA+ DQo+ID4gKy8qKg0KPiA+ICsgKiAgT3B0aW9uIHR5cGVzIG9mIHF1ZXVlIHJlZ2lvbi4NCj4gPiAr ICovDQo+ID4gK2VudW0gcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lvbl9vcCB7DQo+ID4gKwlSVEVf UE1EX0k0MEVfUkVHSU9OX1VOREVGSU5FRCA9IDAsDQo+IA0KPiBObyBuZWVkIHRvIHNldCB0byB6 ZXJvLCBpdCBpcyBkZWZhdWx0IHZhbHVlLg0KPiANCj4gPiArCVJURV9QTURfSTQwRV9RVUVVRV9S RUdJT05fU0VULCAgICAgIC8qKjwgYWRkIHF1ZXVlIHJlZ2lvbg0KPiBzZXQqLw0KPiANCj4gSSB3 b3VsZCBzdWdnZXN0IHVzaW5nIHNhbWUgbmFtZXNwYWNlIGZvciB0aGUgZW51bSBpdGVzLCB0aGVy ZSBhcmUNCj4gIlJURV9QTURfSTQwRV9SRUdJT04iIGFuZCAiUlRFX1BNRF9JNDBFX1FVRVVFX1JF R0lPTiIuDQo+ICJSVEVfUE1EX0k0MEVfUVVFVUVfUkVHSU9OIiBsb29rcyBiZXR0ZXIuIE9yIGlm IGl0IG1ha2VzIHNlbnNlLA0KPiBwZXJoYXBzICJSVEVfUE1EX0k0MEVfUlNTX1FVRVVFX1JFR0lP TiI/IEJ1dCBwbGVhc2Ugc3RpY2sgd2l0aCBvbmUuDQo+IA0KPiA+ICsJUlRFX1BNRF9JNDBFX1JF R0lPTl9GTE9XVFlQRV9QRl9TRVQsICAgLyoqPCBhZGQgcGYgcmVnaW9uDQo+IHBjdHlwZSBzZXQg Ki8NCj4gPiArCVJURV9QTURfSTQwRV9SRUdJT05fRkxPV1RZUEVfVkZfU0VULCAgIC8qKjwgYWRk IHZmIHJlZ2lvbg0KPiBwY3R5cGUgc2V0ICovDQo+ID4gKwlSVEVfUE1EX0k0MEVfVVBfUkVHSU9O X1NFVCwgICAvKio8IGFkZCBxdWV1ZSByZWdpb24gcGN0eXBlDQo+IHNldCAqLw0KPiANCj4gaXMg dGhpcyBjb21tZW50IGNvcnJlY3QsIHRoaXMgdHlwZSBzaG91bGQgYmUgZm9yIHVzZXIgcHJpb3Jp dHkNCj4gDQo+ID4gKwlSVEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PTiwgICAvKio8IGZs dXNoIG9uIGFsbA0KPiBjb25maWd1cmF0aW9uICovDQo+ID4gKwlSVEVfUE1EX0k0MEVfUkVHSU9O X0FMTF9GTFVTSF9PRkYsICAgLyoqPCBmbHVzaCBvZmYgYWxsDQo+IGNvbmZpZ3VyYXRpb24gKi8N Cj4gPiArCVJURV9QTURfSTQwRV9RVUVVRV9SRUdJT05fT1BfTUFYDQo+ID4gK307DQo+ID4gKw0K PiA+ICAjZGVmaW5lIFJURV9QTURfSTQwRV9ERFBfTkFNRV9TSVpFIDMyDQo+ID4NCj4gPiAgLyoq DQo+ID4gQEAgLTE0Niw2ICsxNjAsMTggQEAgc3RydWN0IHJ0ZV9wbWRfaTQwZV9wdHlwZV9tYXBw aW5nIHsgIH07DQo+ID4NCj4gPiAgLyoqDQo+ID4gKyAqIFF1ZXVlIHJlZ2lvbiBpbmZvcm1hdGlv biBnZXQgZnJvbSBDTEkuDQo+IA0KPiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgZnJvbSBDTEksIGNh biBkcm9wIHRoYXQgcGFydA0KPiANCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfaTQwZV9yc3Nf cmVnaW9uX2NvbmYgew0KPiANCj4gVGhpcyBpcyBub3cgcHVibGljIHN0cnVjdCwgY2FuIHlvdSBw bGVhc2UgY29tbWVudCBpdGVtcy4NCj4gDQo+ID4gKwl1aW50OF90IHJlZ2lvbl9pZDsNCj4gPiAr CXVpbnQ4X3QgaHdfZmxvd3R5cGU7DQo+ID4gKwl1aW50OF90IHF1ZXVlX3N0YXJ0X2luZGV4Ow0K PiA+ICsJdWludDhfdCBxdWV1ZV9udW07DQo+ID4gKwl1aW50OF90IHVzZXJfcHJpb3JpdHk7DQo+ ID4gKwllbnVtIHJ0ZV9wbWRfaTQwZV9xdWV1ZV9yZWdpb25fb3AgIG9wOw0KPiANCj4gRXh0cmEg c3BhY2UgYmVmb3JlICJvcCINCj4gDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAgICog Tm90aWZ5IFZGIHdoZW4gUEYgbGluayBzdGF0dXMgY2hhbmdlcy4NCj4gPiAgICoNCj4gPiAgICog QHBhcmFtIHBvcnQNCj4gPiBAQCAtNjU3LDQgKzY4MywxNiBAQCBpbnQNCj4gcnRlX3BtZF9pNDBl X3B0eXBlX21hcHBpbmdfcmVwbGFjZSh1aW50OF90DQo+ID4gcG9ydCwgIGludCBydGVfcG1kX2k0 MGVfYWRkX3ZmX21hY19hZGRyKHVpbnQ4X3QgcG9ydCwgdWludDE2X3QgdmZfaWQsDQo+ID4gIAkJ CQkgc3RydWN0IGV0aGVyX2FkZHIgKm1hY19hZGRyKTsNCj4gPg0KPiA+ICsvKioNCj4gPiArICog R2V0IFJTUyBxdWV1ZSByZWdpb24gaW5mbyBmcm9tIENMSSBhbmQgZG8gY29uZmlndXJhdGlvbiBm b3INCj4gDQo+IEFnYWluIG5vdyB0aGlzIGlzIGFuIEFQSSwgbm90IGp1c3QgZm9yIHRlc3RwbWQs IHBsZWFzZSBkcm9wIENMSQ0KPiANCj4gPiArICogdGhhdCBwb3J0IGFzIHRoZSBjb21tYW5kIG90 aW9uIHR5cGUNCj4gDQo+IHMvb3Rpb24vb3B0aW9ucw0KPiANCj4gPiArICoNCj4gPiArICogQHBh cmFtIHBvcnQNCj4gPiArICogICAgcG9pbnRlciB0byBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIGRl dmljZQ0KPiANCj4gTm90IHBvaW50ZXIuDQo+IEFsc28gdGhpcyB3aWxsIGNvbmZsaWN0IHdpdGgg cGF0Y2ggdGhhdCB1cGRhdGVzIHBvcnQgc3RvcmFnZSB0byB1aW50MTZfdC4gQ2FuDQo+IHlvdSBw bGVhc2UgZm9sbG93IHRoZSBzdGF0dXMgb2YgdGhlIHBhdGNoLCBhbmQgaWYgdGhpcyBtZXJnZWQg YWZ0ZXIgdGhhdCBvbmUsDQo+IHBsZWFzZSBwaW5nIHRvIHJlbWluZCB0byB1cGRhdGUgdGhlIHN0 b3JhZ2UuDQo+IA0KPiA+ICsgKiBAcGFyYW0gY29uZl9wdHINCj4gPiArICogICAgcG9pbnRlciB0 byB0aGUgc3RydWN0IHRoYXQgY29udGFpbiBhbGwgdGhlDQo+ID4gKyAqICAgIHJlZ2lvbiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcnMNCj4gPiArICovDQo+ID4gK2ludCBydGVfcG1kX2k0MGVfcXVl dWVfcmVnaW9uX2NvbmYodWludDhfdCBwb3J0LA0KPiANCj4gQ2FuIHlvdSBwbGVhc2UgdXNlIHBv cnRfaWQgYXMgdmFyaWFibGUgbmFtZSB0byBiZSBjb25zaXN0ZW50Lg0KPiANCj4gPiArCQlzdHJ1 Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mICpjb25mX3B0cik7DQo+IA0KPiBjb25mX3B0ciB2 YXJpYWJsZSBuYW1lIGRvZXNuJ3Qgc2F5IG11Y2gsIGFsdGhvdWdoIGl0IGlzIE9LIGluIHRoaXMg Y29udGV4dC4gSQ0KPiB3b3VsZCBzdWdnZXN0IHNvbWV0aGluZyBsaWtlIHJzc19yZWdpb25fY29u Zg0KPiANCj4gPiAgI2VuZGlmIC8qIF9QTURfSTQwRV9IXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZV92ZXJzaW9uLm1hcA0KPiA+IGIvZHJpdmVycy9u ZXQvaTQwZS9ydGVfcG1kX2k0MGVfdmVyc2lvbi5tYXANCj4gPiBpbmRleCBlZjg4ODJiLi5jM2Vl MmRhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlX3ZlcnNp b24ubWFwDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGVfdmVyc2lvbi5t YXANCj4gPiBAQCAtNTAsNSArNTAsNiBAQCBEUERLXzE3LjExIHsNCj4gPiAgCWdsb2JhbDoNCj4g Pg0KPiA+ICAJcnRlX3BtZF9pNDBlX2FkZF92Zl9tYWNfYWRkcjsNCj4gPiArCXJ0ZV9wbWRfaTQw ZV9xdWV1ZV9yZWdpb25fY29uZjsNCj4gDQo+IFRoZSBmZWF0dXJlIGhhcyBiZWVuIG1lbnRpb24g YXMgInJzcyBxdWV1ZSByZWdpb24iIGFib3ZlIGEgZmV3IHBsYWNlcywgZG8NCj4geW91IHRoaW5r IHJ0ZV9wbWRfaTQwZV9yc3NfcXVldWVfcmVnaW9uX2NvbmYoKSBvcg0KPiBydGVfcG1kX2k0MGVf cXVldWVfcmVnaW9uX2NvbmYoKSBpcyBiZXR0ZXIgZm9yIEFQSSBuYW1lPw0KPiANCj4gPg0KPiA+ ICB9IERQREtfMTcuMDg7DQo+ID4NCg0K