From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 48109F1F for ; Mon, 25 Sep 2017 09:41:03 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP; 25 Sep 2017 00:41:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,435,1500966000"; d="scan'208,217";a="1223269904" Received: from kmsmsx155.gar.corp.intel.com ([172.21.73.106]) by fmsmga002.fm.intel.com with ESMTP; 25 Sep 2017 00:40:59 -0700 Received: from pgsmsx110.gar.corp.intel.com (10.221.44.111) by KMSMSX155.gar.corp.intel.com (172.21.73.106) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 25 Sep 2017 15:40:58 +0800 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.203]) by PGSMSX110.gar.corp.intel.com ([169.254.13.249]) with mapi id 14.03.0319.002; Mon, 25 Sep 2017 15:40:57 +0800 From: "Zhao1, Wei" To: "Yigit, Ferruh" CC: "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v3 1/2] net/i40e: queue region set and flush Thread-Index: AQHTLdIoeqU7BZgiK0uTHIs5i75GdaK9FtqAgAgg2LA= Date: Mon, 25 Sep 2017 07:40:56 +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> In-Reply-To: <0508ed6a-4301-de07-7bb1-a74a5ff2a871@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [172.30.20.206] MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v3 1/2] net/i40e: queue region set and flush X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Sep 2017 07:41:05 -0000 SGksIEZlcnJ1aA0KDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KDQo+IEZyb206 IFlpZ2l0LCBGZXJydWgNCg0KPiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciAyMCwgMjAxNyA2 OjM2IFBNDQoNCj4gVG86IFpoYW8xLCBXZWkgPHdlaS56aGFvMUBpbnRlbC5jb20+OyBkZXZAZHBk ay5vcmcNCg0KPiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0ggdjMgMS8yXSBuZXQvaTQw ZTogcXVldWUgcmVnaW9uIHNldCBhbmQgZmx1c2gNCg0KPg0KDQo+IE9uIDkvMTUvMjAxNyA0OjEz IEFNLCBXZWkgWmhhbyB3cm90ZToNCg0KPiA+IFRoaXMgZmVhdHVyZSBlbmFibGUgcXVldWUgcmVn aW9ucyBjb25maWd1cmF0aW9uIGZvciBSU1MgaW4gUEYvVkYsIHNvDQoNCj4gPiB0aGF0IGRpZmZl cmVudCB0cmFmZmljIGNsYXNzZXMgb3IgZGlmZmVyZW50IHBhY2tldCBjbGFzc2lmaWNhdGlvbg0K DQo+ID4gdHlwZXMgY2FuIGJlIHNlcGFyYXRlZCB0byBkaWZmZXJlbnQgcXVldWVzIGluIGRpZmZl cmVudCBxdWV1ZQ0KDQo+ID4gcmVnaW9ucy5UaGlzIHBhdGNoIGNhbiBzZXQgcXVldWUgcmVnaW9u IHJhbmdlLCBpdCBpbmNsdWRlIHF1ZXVlIG51bWJlcg0KDQo+ID4gaW4gYSByZWdpb24gYW5kIHRo ZSBpbmRleCBvZiBmaXJzdCBxdWV1ZS4NCg0KPg0KDQo+IElzIGZvbGxvd2luZyBjb3JyZWN0Og0K DQo+IFNvIGluc3RlYWQgb2YgZGlzdHJpYnV0aW5nIHBhY2tldHMgdG8gdGhlIG11bHRpcGxlIHF1 ZXVlcywgdGhpcyB3aWxsIGRpc3RyaWJ1dGUNCg0KPiBwYWNrZXRzIGludG8gcXVldWUgcmVxaW9u cyB3aGljaCBtYXkgY29uc2lzdHMgb2YgbXVsdGlwbGUgcXVldWVzLg0KDQo+DQoNCj4gSWYgc28s IGlzIHRoZXJlIGEgd2F5IHRvIGNvbnRyb2wgaG93IHBhY2tldHMgZGlzdHJpYnV0ZWQgd2l0aGlu IHNhbWUgcXVldWUNCg0KPiByZWdpb24gdG8gbXVsdGlwbGUgcXVldWVzPw0KDQo+DQoNCg0KDQpk aXN0cmlidXRlZCB3aXRoaW4gc2FtZSBxdWV1ZSByZWdpb24gaXMgYmFzZWQgb24gYSByc3MgYWxn b3JpdGhtLCBpdCBpcyBpbXBsZW1lbnRlZCBieSBOSUMgc2VsZiwgc29mdHdhcmUgY2FuIG5vdCBj b250cm9sIGl0Lg0KDQoNCg0KDQoNCj4gQW5kIGlzIHRoaXMgZmVhdHVyZSBvbmx5IHN1cHBvcnRl ZCB3aXRoIFJTUz8gQ2FuIGl0IGJlIHBhcnQgb2YgUlNTDQoNCj4gY29uZmlndXJhdGlvbiBpbnN0 ZWFkIG9mIFBNRCBzcGVjaWZpYyBBUEk/DQoNCj4NCg0KDQoNClllcywgb25seSB2YWxpZCBhZnRl ciByc3MgZW5hYmxlLk1heSBiZSBpbiB0aGUgZmVhdHVyZSwgaW4gcnRlX2Zsb3cgbW9kZSwgd2Ug Y2FuIGNvbWJpbmUgdGhlbSB0b2dldGhlci4NCg0KDQoNCj4gPiBUaGlzIHBhdGNoIGVuYWJsZSBt YXBwaW5nIGJldHdlZW4gZGlmZmVyZW50IHByaW9yaXRpZXMgKFVQKSBhbmQNCg0KPg0KDQo+IFVz ZXIgcHJpb3JpdGllcyAoVVApDQoNCg0KDQpvSywgY2hhbmdlIGluIHY0DQoNCg0KDQo+DQoNCj4g PiBkaWZmZXJlbnQgdHJhZmZpYyBjbGFzc2VzLkl0IGFsc28gZW5hYmxlIG1hcHBpbmcgYmV0d2Vl biBhIHJlZ2lvbg0KDQo+ID4gaW5kZXggYW5kIGEgc2VwY2lmaWMgZmxvd3R5cGUoUENUWVBFKS5J dCBhbHNvIHByb3ZpZGUgdGhlIHNvbHV0aW9uIG9mDQoNCj4gPiBmbHVzaCBhbGwgY29uZmlndXJh dGlvbiBhYm91dCBxdWV1ZSByZWdpb24gdGhlIGFib3ZlIGRlc2NyaWJlZC4NCg0KPiA+DQoNCj4g PiBTaWduZWQtb2ZmLWJ5OiBXZWkgWmhhbyA8d2VpLnpoYW8xQGludGVsLmNvbTxtYWlsdG86d2Vp LnpoYW8xQGludGVsLmNvbT4+DQoNCj4gPiAtLS0NCg0KPiA+ICBkcml2ZXJzL25ldC9pNDBlL2k0 MGVfZXRoZGV2LmMgICAgICAgICAgICB8ICAxOSArLQ0KDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUv aTQwZV9ldGhkZXYuaCAgICAgICAgICAgIHwgIDMwICsrDQoNCj4gPiAgZHJpdmVycy9uZXQvaTQw ZS9ydGVfcG1kX2k0MGUuYyAgICAgICAgICAgfCA0ODINCg0KPiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCg0KPiA+ICBkcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5oICAgICAg ICAgICB8ICAzOCArKysNCg0KPiA+ICBkcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZV92ZXJz aW9uLm1hcCB8ICAgMSArDQoNCj4gPiAgNSBmaWxlcyBjaGFuZ2VkLCA1NjYgaW5zZXJ0aW9ucygr KSwgNCBkZWxldGlvbnMoLSkNCg0KPiA+DQoNCj4NCg0KPiA8Li4uPg0KDQo+DQoNCj4gPiArc3Rh dGljIGludA0KDQo+ID4gK2k0MGVfdnNpX3VwZGF0ZV9xdWV1ZV9yZWdpb25fbWFwcGluZyhzdHJ1 Y3QgaTQwZV9odyAqaHcsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgaTQwZV9wZiAqcGYpDQoNCj4gPiArew0KDQo+ID4gKyAgICAgIHVp bnQxNl90IGk7DQoNCj4gPiArICAgICAgc3RydWN0IGk0MGVfdnNpICp2c2kgPSBwZi0+bWFpbl92 c2k7DQoNCj4gPiArICAgICAgdWludDE2X3QgcXVldWVfb2Zmc2V0LCBic2YsIHRjX2luZGV4Ow0K DQo+ID4gKyAgICAgIHN0cnVjdCBpNDBlX3ZzaV9jb250ZXh0IGN0eHQ7DQoNCj4gPiArICAgICAg c3RydWN0IGk0MGVfYXFjX3ZzaV9wcm9wZXJ0aWVzX2RhdGEgKnZzaV9pbmZvOw0KDQo+ID4gKyAg ICAgIHN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICpyZWdpb25faW5mbyA9DQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBm LT5xdWV1ZV9yZWdpb247DQoNCj4gPiArICAgICAgdWludDMyX3QgcmV0ID0gLUVJTlZBTDsNCg0K PiA+ICsNCg0KPiA+ICsgICAgICBpZiAoIXJlZ2lvbl9pbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVy KSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIFBNRF9JTklUX0xPRyhFUlIsICJ0aGVy ZSBpcyBubyB0aGF0IHJlZ2lvbiBpZCBiZWVuIHNldA0KDQo+IGJlZm9yZSIpOw0KDQo+DQoNCj4g Q2FuIHlvdSBwbGVhc2UgcmUtY2hlY2sgdGhlIGxvZyBtZXNzYWdlLg0KDQoNCg0Kb0ssIGNoYW5n ZSBpbiB2NA0KDQoNCg0KPg0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Ow0KDQo+ID4gKyAgICAgIH0NCg0KPiA+ICsNCg0KPiA+ICsgICAgICBtZW1zZXQoJmN0eHQsIDAs IHNpemVvZihzdHJ1Y3QgaTQwZV92c2lfY29udGV4dCkpOw0KDQo+ID4gKw0KDQo+ID4gKyAgICAg IC8qIFVwZGF0ZSBRdWV1ZSBQYWlycyBNYXBwaW5nIGZvciBjdXJyZW50bHkgZW5hYmxlZCBVUHMg Ki8NCg0KPiA+ICsgICAgICBjdHh0LnNlaWQgPSB2c2ktPnNlaWQ7DQoNCj4gPiArICAgICAgY3R4 dC5wZl9udW0gPSBody0+cGZfaWQ7DQoNCj4gPiArICAgICAgY3R4dC52Zl9udW0gPSAwOw0KDQo+ ID4gKyAgICAgIGN0eHQudXBsaW5rX3NlaWQgPSB2c2ktPnVwbGlua19zZWlkOw0KDQo+ID4gKyAg ICAgIGN0eHQuaW5mbyA9IHZzaS0+aW5mbzsNCg0KPiA+ICsgICAgICB2c2lfaW5mbyA9ICZjdHh0 LmluZm87DQoNCj4gPiArDQoNCj4gPiArICAgICAgbWVtc2V0KHZzaV9pbmZvLT50Y19tYXBwaW5n LCAwLCBzaXplb2YodWludDE2X3QpICogOCk7DQoNCj4gPiArICAgICAgbWVtc2V0KHZzaV9pbmZv LT5xdWV1ZV9tYXBwaW5nLCAwLCBzaXplb2YodWludDE2X3QpICogMTYpOw0KDQo+ID4gKw0KDQo+ ID4gKyAgICAgIC8qKg0KDQo+ID4gKyAgICAgICogQ29uZmlndXJlIHF1ZXVlIHJlZ2lvbiBhbmQg cXVldWUgbWFwcGluZyBwYXJhbWV0ZXJzLA0KDQo+ID4gKyAgICAgICogZm9yIGVuYWJsZWQgcXVl dWUgcmVnaW9uLCBhbGxvY2F0ZSBxdWV1ZXMgdG8gdGhpcyByZWdpb24uDQoNCj4gPiArICAgICAg Ki8NCg0KPiA+ICsNCg0KPiA+ICsgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVnaW9uX2luZm8tPnF1 ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICB0 Y19pbmRleCA9IHJlZ2lvbl9pbmZvLT5yZWdpb25baV0ucmVnaW9uX2lkOw0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBic2YgPSBydGVfYnNmMzIocmVnaW9uX2luZm8tPnJlZ2lvbltpXS5x dWV1ZV9udW0pOw0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBxdWV1ZV9vZmZzZXQgPSBy ZWdpb25faW5mby0+cmVnaW9uW2ldLnF1ZXVlX3N0YXJ0X2luZGV4Ow0KDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICB2c2lfaW5mby0+dGNfbWFwcGluZ1t0Y19pbmRleF0gPSBydGVfY3B1X3Rv X2xlXzE2KA0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHF1 ZXVlX29mZnNldCA8PA0KDQo+IEk0MEVfQVFfVlNJX1RDX1FVRV9PRkZTRVRfU0hJRlQpIHwNCg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoYnNmIDw8DQoNCj4gSTQwRV9BUV9WU0lfVENfUVVFX05VTUJFUl9TSElGVCkpOw0KDQo+ID4g KyAgICAgIH0NCg0KPiA+ICsNCg0KPiA+ICsgICAgICAvKiBBc3NvY2lhdGUgcXVldWUgbnVtYmVy IHdpdGggVlNJLCBLZWVwIHZzaS0+bmJfcXBzIHVuY2hhbmdlZA0KDQo+ICovDQoNCj4gPiArICAg ICAgaWYgKHZzaS0+dHlwZSA9PSBJNDBFX1ZTSV9TUklPVikgew0KDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICB2c2lfaW5mby0+bWFwcGluZ19mbGFncyB8PQ0KDQo+ID4gKw0KDQo+ICAgICAg ICAgICAgIHJ0ZV9jcHVfdG9fbGVfMTYoSTQwRV9BUV9WU0lfUVVFX01BUF9OT05DT05USUcpOw0K DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdnNpLT5uYl9xcHM7 IGkrKykNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzaV9p bmZvLT5xdWV1ZV9tYXBwaW5nW2ldID0NCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGVfY3B1X3RvX2xlXzE2KHZzaS0+YmFzZV9x dWV1ZSArIGkpOw0KDQo+ID4gKyAgICAgIH0gZWxzZSB7DQoNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgIHZzaV9pbmZvLT5tYXBwaW5nX2ZsYWdzIHw9DQoNCj4gPiArDQoNCj4gICAgICAgICAg ICAgcnRlX2NwdV90b19sZV8xNihJNDBFX0FRX1ZTSV9RVUVfTUFQX0NPTlRJRyk7DQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgIHZzaV9pbmZvLT5xdWV1ZV9tYXBwaW5nWzBdID0gcnRlX2Nw dV90b19sZV8xNih2c2ktDQoNCj4gPmJhc2VfcXVldWUpOw0KDQo+ID4gKyAgICAgIH0NCg0KPiA+ ICsgICAgICB2c2lfaW5mby0+dmFsaWRfc2VjdGlvbnMgfD0NCg0KPiA+ICsNCg0KPiAgICAgICAg ICAgICBydGVfY3B1X3RvX2xlXzE2KEk0MEVfQVFfVlNJX1BST1BfUVVFVUVfTUFQX1ZBTElEKTsN Cg0KPiA+ICsNCg0KPiA+ICsgICAgICAvKiBVcGRhdGUgdGhlIFZTSSBhZnRlciB1cGRhdGluZyB0 aGUgVlNJIHF1ZXVlLW1hcHBpbmcNCg0KPiBpbmZvcm1hdGlvbiAqLw0KDQo+ID4gKyAgICAgIHJl dCA9IGk0MGVfYXFfdXBkYXRlX3ZzaV9wYXJhbXMoaHcsICZjdHh0LCBOVUxMKTsNCg0KPiA+ICsg ICAgICBpZiAocmV0KSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIFBNRF9JTklUX0xP RyhFUlIsICJGYWlsZWQgdG8gY29uZmlndXJlIHF1ZXVlIHJlZ2lvbiAiDQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFwcGluZyA9ICVkICIsIGh3LT5hcS5h c3FfbGFzdF9zdGF0dXMpOw0KDQo+DQoNCj4gUGxlYXNlIGRvbid0IHNwbGl0IGxvZyBtZXNzYWdl Lg0KDQoNCg0Kb0ssIGNoYW5nZSBpbiB2NA0KDQoNCg0KDQoNCj4NCg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsNCg0KPiA+ICsgICAgICB9DQoNCj4gPiArICAgICAgLyog dXBkYXRlIHRoZSBsb2NhbCBWU0kgaW5mbyB3aXRoIHVwZGF0ZWQgcXVldWUgbWFwICovDQoNCj4g PiArICAgICAgKHZvaWQpcnRlX21lbWNweSgmdnNpLT5pbmZvLnRjX21hcHBpbmcsICZjdHh0Lmlu Zm8udGNfbWFwcGluZywNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZzaS0+aW5mby50Y19t YXBwaW5nKSk7DQoNCj4gPiArICAgICAgKHZvaWQpcnRlX21lbWNweSgmdnNpLT5pbmZvLnF1ZXVl X21hcHBpbmcsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm Y3R4dC5pbmZvLnF1ZXVlX21hcHBpbmcsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHNp emVvZih2c2ktPmluZm8ucXVldWVfbWFwcGluZykpOw0KDQo+DQoNCj4gUGxlYXNlIGtlZXAgbGlu ZSBhbGxpZ25tZW50IHNhbWUgd2l0aCBhYm92ZSBsaW5lLg0KDQoNCg0Kb0ssIGNoYW5nZSBpbiB2 NCwgYnV0IGNhbiBub3QgdGhlIHNhbWUuDQoNCih2b2lkKXJ0ZV9tZW1jcHkoJnZzaS0+aW5mby5x dWV1ZV9tYXBwaW5nLCAmY3R4dC5pbmZvLnF1ZXVlX21hcHBpbmcsDQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2c2ktPmluZm8ucXVldWVf bWFwcGluZykpOw0KDQp3aWxsIG92ZXIgODAgbWF4bnVtYmVyLg0KDQoNCg0KPg0KDQo+ID4gKyAg ICAgIHZzaS0+aW5mby5tYXBwaW5nX2ZsYWdzID0gY3R4dC5pbmZvLm1hcHBpbmdfZmxhZ3M7DQoN Cj4gPiArICAgICAgdnNpLT5pbmZvLnZhbGlkX3NlY3Rpb25zID0gMDsNCg0KPiA+ICsNCg0KPiA+ ICsgICAgICByZXR1cm4gMDsNCg0KPiA+ICt9DQoNCj4gPiArDQoNCj4gPiArDQoNCj4gPiArc3Rh dGljIGludA0KDQo+ID4gK2k0MGVfc2V0X3F1ZXVlX3JlZ2lvbihzdHJ1Y3QgaTQwZV9wZiAqcGYs DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJ0ZV9pNDBlX3Jzc19yZWdpb25fY29uZiAqY29uZl9wdHIpIHsNCg0KPiA+ ICsgICAgICB1aW50MTZfdCB0Y19zaXplX3RiWzddID0gezEsIDIsIDQsIDgsIDE2LCAzMiwgNjR9 Ow0KDQo+ID4gKyAgICAgIHVpbnQxNl90IGk7DQoNCj4gPiArICAgICAgc3RydWN0IGk0MGVfdnNp ICptYWluX3ZzaSA9IHBmLT5tYWluX3ZzaTsNCg0KPiA+ICsgICAgICBzdHJ1Y3QgaTQwZV9xdWV1 ZV9yZWdpb25faW5mbyAqaW5mbyA9ICZwZi0+cXVldWVfcmVnaW9uOw0KDQo+ID4gKyAgICAgIHVp bnQzMl90IHJldCA9IC1FSU5WQUw7DQoNCj4gPiArDQoNCj4gPiArICAgICAgZm9yIChpID0gMDsg aSA8IEk0MEVfUkVHSU9OX01BWF9JTkRFWDsgaSsrKQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICBpZiAoY29uZl9wdHItPnF1ZXVlX251bSA9PSB0Y19zaXplX3RiW2ldKQ0KDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCj4gPiArDQoNCj4g PiArICAgICAgaWYgKGkgPT0gSTQwRV9SRUdJT05fTUFYX0lOREVYKSB7DQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiVGhlIHJlZ2lvbiBzaXplcyBzaG91bGQgYmUgYW55IG9m IHRoZSBmb2xsb3dpbmcgIg0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAidmFsdWVzOiAx LCAyLCA0LCA4LCAxNiwgMzIsIDY0IGFzIGxvbmcgYXMgdGhlICINCg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgInRvdGFsIG51bWJlciBvZiBxdWV1ZXMgZG8gbm90IGV4Y2VlZCB0aGUgVlNJ IGFsbG9jYXRpb24iKTsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsN Cg0KPiA+ICsgICAgICB9DQoNCj4gPiArDQoNCj4gPiArICAgICAgaWYgKGNvbmZfcHRyLT5yZWdp b25faWQgPj0gSTQwRV9SRUdJT05fTUFYX0lOREVYKSB7DQoNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgIFBNRF9JTklUX0xPRyhFUlIsICJ0aGUgcXVldWUgcmVnaW9uIG1heCBpbmRleCBpcyA3 Iik7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQoNCj4gPiArICAg ICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIGlmICgoY29uZl9wdHItPnF1ZXVlX3N0YXJ0X2lu ZGV4ICsgY29uZl9wdHItPnF1ZXVlX251bSkNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiBtYWluX3Zz aS0+bmJfdXNlZF9xcHMpIHsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgUE1EX0lOSVRf TE9HKEVSUiwgInRoZSBxdWV1ZSBpbmRleCBleGNlZWRzIHRoZSBWU0kNCg0KPiByYW5nZSIpOw0K DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KDQo+ID4gKyAgICAgIH0N Cg0KPiA+ICsNCg0KPiA+ICsgICAgICBpZiAoaW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgew0K DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVf cmVnaW9uX251bWJlcjsgaSsrKQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPT0gaW5mby0+cmVnaW9uW2ldLnJlZ2lv bl9pZCkNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg aWYgKChpID09IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIpICYmDQoNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA8PSBJNDBFX1JFR0lPTl9NQVhfSU5ERVgp KSB7DQoNCj4NCg0KPg0KDQo+IFBsZWFzZSB1c2Ugb25lIG1vcmUgbGV2ZWwgaW5kZW50YWlvbiBo ZXJlLCBhbmQgcGhhcmFudGVzaXMgbG9va3MgZXh0cmEgY2FuDQoNCj4geW91IHBsZWFzZSBkb3Vi bGUgY2hlY2s/DQoNCg0KDQpZb3UgbWVhbix5b3Ugd2FudCB0aGUgZm9sbG93aW5nIG1vZWRlID8N Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbmZvLT5xdWV1ZV9y ZWdpb25fbnVtYmVyKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmKGkgPD0gSTQwRV9SRUdJT05fTUFYX0lOREVYKSB7DQoNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N Cg0KPg0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+ cmVnaW9uW2ldLnJlZ2lvbl9pZCA9IGNvbmZfcHRyLT5yZWdpb25faWQ7DQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5yZWdpb25baV0ucXVldWVfbnVt ID0gY29uZl9wdHItPnF1ZXVlX251bTsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluZm8tPnJlZ2lvbltpXS5xdWV1ZV9zdGFydF9pbmRleCA9DQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u Zl9wdHItPnF1ZXVlX3N0YXJ0X2luZGV4Ow0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcisrOw0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUE1EX0lOSVRfTE9HKEVSUiwgInF1ZXVlIHJlZ2lvbiBudW1iZXIgIg0K DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJleGNlZWRzIG1heG51bSA4IG9yIHRoZSAiDQoNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInF1ZXVlIHJlZ2lvbiBpZCBoYXMg Ig0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJiZWVuIHNldCBiZWZvcmUiKTsNCg0KPg0KDQo+IHBsZWFzZSBkb24ndCBzcGxpdCBs b2cgbWVzc2FnZS4NCg0KDQoNCm9LLCBjaGFuZ2UgaW4gdjQNCg0KDQoNCj4NCg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQoNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgIH0NCg0KPiA+ICsgICAgICB9IGVsc2Ugew0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBpbmZvLT5yZWdpb25bMF0ucmVnaW9uX2lkID0gY29uZl9wdHItPnJl Z2lvbl9pZDsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgaW5mby0+cmVnaW9uWzBdLnF1 ZXVlX251bSA9IGNvbmZfcHRyLT5xdWV1ZV9udW07DQoNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgIGluZm8tPnJlZ2lvblswXS5xdWV1ZV9zdGFydF9pbmRleCA9DQoNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mX3B0ci0+cXVldWVfc3RhcnRfaW5kZXg7 DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIr KzsNCg0KPiA+ICsgICAgICB9DQoNCj4gPiArDQoNCj4gPiArICAgICAgcmV0dXJuIDA7DQoNCj4g PiArfQ0KDQo+ID4gKw0KDQo+ID4gK3N0YXRpYyBpbnQNCg0KPiA+ICtpNDBlX3NldF9yZWdpb25f Zmxvd3R5cGVfcGYoc3RydWN0IGk0MGVfaHcgKmh3LA0KDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaTQwZV9wZiAqcGYsIHN0cnVjdCBydGVfaTQwZV9yc3NfcmVnaW9uX2NvbmYN Cg0KPiAqY29uZl9wdHIpDQoNCj4NCg0KPiBXaGF0IGRvIHlvdSB0aGluayBzdGFydGluZyBhbGwg ZnVuY3Rpb25zLCBldmVuIHRoZXkgYXJlIHN0YXRpYywgd2l0aA0KDQo+ICJpNDBlX3F1ZXVlX3Jl Z2lvbl8iIHByZWZpeD8NCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 ID0gaTQwZV9zZXRfcXVldWVfcmVnaW9uKHBmLCBjb25mX3B0cik7DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICBjYXNlIFJURV9QTURf STQwRV9SRUdJT05fRkxPV1RZUEVfUEZfU0VUOg0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJldCA9IGk0MGVfc2V0X3JlZ2lvbl9mbG93dHlwZV9wZihodywgcGYsIGNvbmZfcHRy KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAg ICAgICAgIGNhc2UgUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9WRl9TRVQ6DQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgIGNhc2UgUlRFX1BN RF9JNDBFX1VQX1JFR0lPTl9TRVQ6DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0ID0gaTQwZV9zZXRfdXBfcmVnaW9uKHBmLCBjb25mX3B0cik7DQoNCg0KDQpJIGhhdmUgdXNl IHRoZSBmb3JtYXQgb2YgaTQwZV9zZXRfICBhcyBwcmVmaXg/DQoNCkJlY2F1c2UgbWFueSBzZXQg aXMgbm90IHJlbGF0ZWQgZGlyZWN0bHkgdG8gcXVldWUgcmVnaW9uLg0KDQoNCg0KPg0KDQo+ID4g K3sNCg0KPiA+ICsgICAgICB1aW50MzJfdCBwZnFmX2hyZWdpb247DQoNCj4gPiArICAgICAgdWlu dDMyX3QgcmV0ID0gLUVJTlZBTDsNCg0KPiA+ICsgICAgICBzdHJ1Y3QgaTQwZV9xdWV1ZV9yZWdp b25faW5mbyAqaW5mbyA9ICZwZi0+cXVldWVfcmVnaW9uOw0KDQo+ID4gKyAgICAgIHVpbnQxNl90 IGksIGosIGluZGV4LCBmbG93dHlwZV9zZXQgPSAwOw0KDQo+ID4gKyAgICAgIHVpbnQxNl90IHJl Z2lvbl9pbmRleCwgZmxvd3R5cGVfaW5kZXg7DQoNCj4gPiArDQoNCj4gPiArICAgICAgaWYgKGNv bmZfcHRyLT5yZWdpb25faWQgPiBJNDBFX1BGUUZfSFJFR0lPTl9NQVhfSU5ERVgpIHsNCg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgUE1EX0lOSVRfTE9HKEVSUiwgInRoZSBxdWV1ZSByZWdp b24gbWF4IGluZGV4IGlzIDciKTsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsNCg0KPiA+ICsgICAgICB9DQoNCj4gPiArDQoNCj4gPiArICAgICAgaWYgKGNvbmZfcHRy LT5od19mbG93dHlwZSA+PSBJNDBFX0ZJTFRFUl9QQ1RZUEVfTUFYKSB7DQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIFBNRF9JTklUX0xPRyhFUlIsICJ0aGUgaHdfZmxvd3R5cGUgb3IgUENU WVBFIG1heCBpbmRleA0KDQo+IGlzIDYzIik7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7DQoNCj4gPiArICAgICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIGlmIChp bmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOyBpKyspDQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZl9wdHItPnJlZ2lv bl9pZCA9PSBpbmZvLT5yZWdpb25baV0ucmVnaW9uX2lkKQ0KDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQo+ID4gKw0K DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdpb25f bnVtYmVyKSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ TURfSU5JVF9MT0coRVJSLCAidGhhdCByZWdpb24gaWQgaGFzIG5vdCAiDQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZW4gc2V0 IGJlZm9yZSIpOw0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHJldDsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgfQ0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICByZWdpb25faW5kZXggPSBpOw0KDQo+ID4gKw0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJl cjsgaSsrKSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGogPSAwOyBqIDwgaW5mby0+cmVnaW9uW2ldLmZsb3d0eXBlX251bTsgaisrKSB7DQoNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGNvbmZfcHRyLT5od19mbG93dHlwZSA9PQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5y ZWdpb25baV0uaHdfZmxvd3R5cGVbal0pIHsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvd3R5cGVf c2V0ID0gMTsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICB9DQoNCj4gPiArDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG93 dHlwZV9zZXQpIHsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBNRF9JTklUX0xPRyhFUlIsICJ0aGF0IGh3X2Zsb3d0eXBlICINCg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzIGJlZW4gc2V0 IGJlZm9yZSIpOw0KDQo+DQoNCj4gUGxlYXNlIGRvbid0IHNwbGl0IGxvZyBtZXNzYWdlcy4NCg0K DQoNCk9rLg0KDQoNCg0KDQoNCj4NCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiByZXQ7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIH0NCg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgZmxvd3R5cGVfaW5kZXggPSBpbmZvLT5yZWdpb25b cmVnaW9uX2luZGV4XS5mbG93dHlwZV9udW07DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAg IGluZm8tPnJlZ2lvbltyZWdpb25faW5kZXhdLmh3X2Zsb3d0eXBlW2Zsb3d0eXBlX2luZGV4XSA9 DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mX3B0ci0+aHdfZmxvd3R5 cGU7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnJlZ2lvbltyZWdpb25faW5k ZXhdLmZsb3d0eXBlX251bSsrOw0KDQo+ID4gKyAgICAgIH0gZWxzZSAgew0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBQTURfSU5JVF9MT0coRVJSLCAidGhlcmUgaXMgbm8gdGhhdCByZWdp b24gaWQgYmVlbiBzZXQNCg0KPiBiZWZvcmUiKTsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsNCg0KPiA+ICsgICAgICB9DQoNCj4gPiArDQoNCj4gPiArICAgICAgaW5k ZXggPSBjb25mX3B0ci0+aHdfZmxvd3R5cGUgPj4gMzsNCg0KPiA+ICsgICAgICBwZnFmX2hyZWdp b24gPSBpNDBlX3JlYWRfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSFJFR0lPTihpbmRleCkpOw0KDQo+ ID4gKw0KDQo+ID4gKyAgICAgIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSAw KSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSBjb25mX3B0 ci0+cmVnaW9uX2lkIDw8DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzBfU0hJRlQ7DQoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSAxIDw8DQoNCj4gSTQw RV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzBfU0hJRlQ7DQoNCj4gPiArICAgICAgfSBlbHNl IGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSAxKSB7DQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSBjb25mX3B0ci0+cmVnaW9uX2lkIDw8DQoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzFfU0hJRlQ7DQoNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSAxIDw8DQoNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZF UlJJREVfRU5BXzFfU0hJRlQ7DQoNCj4gPiArICAgICAgfSBlbHNlIGlmICgoY29uZl9wdHItPmh3 X2Zsb3d0eXBlICYgMHg3KSA9PSAyKSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBm cWZfaHJlZ2lvbiB8PSBjb25mX3B0ci0+cmVnaW9uX2lkIDw8DQoNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTQwRV9QRlFGX0hSRUdJ T05fUkVHSU9OXzJfU0hJRlQ7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZfaHJl Z2lvbiB8PSAxIDw8DQoNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzJfU0hJRlQ7 DQoNCj4gPiArICAgICAgfSBlbHNlIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9 PSAzKSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSBjb25m X3B0ci0+cmVnaW9uX2lkIDw8DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzNfU0hJRlQ7 DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSAxIDw8DQoNCj4g STQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzNfU0hJRlQ7DQoNCj4gPiArICAgICAgfSBl bHNlIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSA0KSB7DQoNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSBjb25mX3B0ci0+cmVnaW9uX2lkIDw8 DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzRfU0hJRlQ7DQoNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSAxIDw8DQoNCj4gSTQwRV9QRlFGX0hSRUdJT05f T1ZFUlJJREVfRU5BXzRfU0hJRlQ7DQoNCj4gPiArICAgICAgfSBlbHNlIGlmICgoY29uZl9wdHIt Pmh3X2Zsb3d0eXBlICYgMHg3KSA9PSA1KSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAg IHBmcWZfaHJlZ2lvbiB8PSBjb25mX3B0ci0+cmVnaW9uX2lkIDw8DQoNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTQwRV9QRlFGX0hS RUdJT05fUkVHSU9OXzVfU0hJRlQ7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZf aHJlZ2lvbiB8PSAxIDw8DQoNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzVfU0hJ RlQ7DQoNCj4gPiArICAgICAgfSBlbHNlIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3 KSA9PSA2KSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSBj b25mX3B0ci0+cmVnaW9uX2lkIDw8DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzZfU0hJ RlQ7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHBmcWZfaHJlZ2lvbiB8PSAxIDw8DQoN Cj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzZfU0hJRlQ7DQoNCj4gPiArICAgICAg fSBlbHNlIHsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgcGZxZl9ocmVnaW9uIHw9IGNv bmZfcHRyLT5yZWdpb25faWQgPDwNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJNDBFX1BGUUZfSFJFR0lPTl9SRUdJT05fN19TSElG VDsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgcGZxZl9ocmVnaW9uIHw9IDEgPDwNCg0K PiBJNDBFX1BGUUZfSFJFR0lPTl9PVkVSUklERV9FTkFfN19TSElGVDsNCg0KPiA+ICsgICAgICB9 DQoNCj4gPiArDQoNCj4gPiArICAgICAgaTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9I UkVHSU9OKGluZGV4KSwgcGZxZl9ocmVnaW9uKTsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICByZXR1 cm4gMDsNCg0KPiA+ICt9DQoNCj4gPiArDQoNCj4gPiArc3RhdGljIGludA0KDQo+ID4gK2k0MGVf c2V0X3VwX3JlZ2lvbihzdHJ1Y3QgaTQwZV9wZiAqcGYsDQoNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9pNDBlX3Jz c19yZWdpb25fY29uZiAqY29uZl9wdHIpDQoNCj4NCg0KPiBUaGUgQVBJIG5hbWUgbG9va3MgbGlr ZSAic2V0dXAiIGJ1dCB0aGF0IHVwIHBhcnQgaXMgdXNlcl9wcmlvcml0eSwgY2FuIHlvdQ0KDQo+ IHBsZWFzZSBsb25nIGZvcm0gYWdhaW5zdCAidXAiPw0KDQoNCg0KT2ssIEkgd2lsbCBjaGFuZ2Ug dG8g4oCcdXNlcl9wcmlvcml0eeKAnSBpbnN0ZWFkIG9mIOKAnHVw4oCdDQoNCg0KDQo+DQoNCj4g PiArew0KDQo+ID4gKyAgICAgIHN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0g JnBmLT5xdWV1ZV9yZWdpb247DQoNCj4gPiArICAgICAgdWludDMyX3QgcmV0ID0gLUVJTlZBTDsN Cg0KPiA+ICsgICAgICB1aW50MTZfdCBpLCBqLCByZWdpb25faW5kZXgsIHVwX3NldCA9IDA7DQoN Cj4NCg0KPiBTYW1lIGFicmV2YXRpb24gY29tbWVudCBmb3IgInVwc2V0IiwgcGxlYXNlIHVzZSBs b25nIGZvcm0uDQoNCj4NCg0KPiA+ICsNCg0KPiA+ICsgICAgICBpZiAoY29uZl9wdHItPnVzZXJf cHJpb3JpdHkgPg0KDQo+IEk0MEVfUkVHSU9OX1VTRVJQUklPUklUWV9NQVhfSU5ERVgpIHsNCg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgUE1EX0lOSVRfTE9HKEVSUiwgInRoZSBxdWV1ZSBy ZWdpb24gbWF4IGluZGV4IGlzIDciKTsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsNCg0KPiA+ICsgICAgICB9DQoNCj4gPiArDQoNCj4gPiArICAgICAgaWYgKGNvbmZf cHRyLT5yZWdpb25faWQgPj0gSTQwRV9SRUdJT05fTUFYX0lOREVYKSB7DQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIFBNRF9JTklUX0xPRyhFUlIsICJ0aGUgcmVnaW9uX2lkIG1heCBpbmRl eCBpcyA3Iik7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQoNCj4g PiArICAgICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIGlmIChpbmZvLT5xdWV1ZV9yZWdpb25f bnVtYmVyKSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBp bmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOyBpKyspDQoNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoY29uZl9wdHItPnJlZ2lvbl9pZCA9PSBpbmZvLT5yZWdp b25baV0ucmVnaW9uX2lkKQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQo+ID4gKw0KDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICBpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTURfSU5JVF9MT0coRVJSLCAi dGhhdCByZWdpb24gaWQgIg0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJoYXMgbm90IGJlZW4gc2V0IGJlZm9yZSIpOw0KDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgfQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBy ZWdpb25faW5kZXggPSBpOw0KDQo+ID4gKw0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsgaSsrKSB7DQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwNCg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbmZvLT5yZWdpb25baV0udXNlcl9wcmlvcml0eV9udW07IGorKykgew0KDQo+DQoNCj4gUGxl YXNlIGJyZWFrIGxpbmUgYWZ0ZXIgIjsiDQoNCg0KDQpPay4NCg0KDQoNCg0KDQo+DQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGluZm8tPnJlZ2lvbltpXS51c2VyX3ByaW9yaXR5W2pdID09DQoNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbmZfcHRyLT51c2VyX3ByaW9yaXR5KSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwX3NldCA9 IDE7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBpZiAodXBfc2V0KSB7 DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTURfSU5JVF9M T0coRVJSLCAidGhhdCB1c2VyIHByaW9yaXR5ICINCg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzIGJlZW4gc2V0IGJlZm9yZSIp Ow0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBqID0gaW5mby0+cmVnaW9uW3JlZ2lvbl9pbmRleF0udXNlcl9wcmlv cml0eV9udW07DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnJlZ2lvbltyZWdp b25faW5kZXhdLnVzZXJfcHJpb3JpdHlbal0gPQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uZl9wdHItPnVzZXJfcHJpb3JpdHk7DQoNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgIGluZm8tPnJlZ2lvbltyZWdpb25faW5kZXhdLnVzZXJfcHJpb3JpdHlfbnVtKys7DQoN Cj4gPiArICAgICAgfSBlbHNlIHsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgUE1EX0lO SVRfTE9HKEVSUiwgInRoZXJlIGlzIG5vIHRoYXQgcmVnaW9uIGlkIGJlZW4gc2V0DQoNCj4gYmVm b3JlIik7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQoNCj4gPiAr ICAgICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIHJldHVybiAwOw0KDQo+ID4gK30NCg0KPiA+ ICsNCg0KPiA+ICtzdGF0aWMgaW50DQoNCj4gPiAraTQwZV9xdWV1ZV9yZWdpb25fZGNiX2NvbmZp Z3VyZShzdHJ1Y3QgaTQwZV9odyAqaHcsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGk0MGVfcGYgKnBmKQ0KDQo+ID4g K3sNCg0KPiA+ICsgICAgICBzdHJ1Y3QgaTQwZV9kY2J4X2NvbmZpZyBkY2JfY2ZnX2xvY2FsOw0K DQo+ID4gKyAgICAgIHN0cnVjdCBpNDBlX2RjYnhfY29uZmlnICpkY2JfY2ZnOw0KDQo+ID4gKyAg ICAgIHN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1ZV9yZWdp b247DQoNCj4gPiArICAgICAgc3RydWN0IGk0MGVfZGNieF9jb25maWcgKm9sZF9jZmcgPSAmaHct PmxvY2FsX2RjYnhfY29uZmlnOw0KDQo+ID4gKyAgICAgIHVpbnQzMl90IHJldCA9IC1FSU5WQUw7 DQoNCj4NCg0KPiBQbGVhc2UgdXNlIHNpZ25lZCB2YXJpYWJsZSwgdGhlcmUgYXJlIG1vcmUgYWJv dmUuDQoNCg0KDQpPaw0KDQo+DQoNCj4gPiArICAgICAgdWludDE2X3QgaSwgaiwgcHJpb19pbmRl eCwgcmVnaW9uX2luZGV4Ow0KDQo+ID4gKyAgICAgIHVpbnQ4X3QgdGNfbWFwLCB0Y19idywgYndf bGY7DQoNCj4gPiArDQoNCj4gPiArICAgICAgaWYgKCFpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVy KSB7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIFBNRF9JTklUX0xPRyhFUlIsICJ0aGVy ZSBpcyBubyB0aGF0IHJlZ2lvbiBpZCBiZWVuIHNldA0KDQo+IGJlZm9yZSIpOw0KDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KDQo+ID4gKyAgICAgIH0NCg0KPiA+ICsN Cg0KPiA+ICsgICAgICBkY2JfY2ZnID0gJmRjYl9jZmdfbG9jYWw7DQoNCj4gPiArICAgICAgbWVt c2V0KGRjYl9jZmcsIDAsIHNpemVvZihzdHJ1Y3QgaTQwZV9kY2J4X2NvbmZpZykpOw0KDQo+ID4g Kw0KDQo+ID4gKyAgICAgIC8qIGFzc3VtZSBlYWNoIHRjIGhhcyB0aGUgc2FtZSBidyAqLw0KDQo+ ID4gKyAgICAgIHRjX2J3ID0gSTQwRV9NQVhfUEVSQ0VOVCAvIGluZm8tPnF1ZXVlX3JlZ2lvbl9u dW1iZXI7DQoNCj4gPiArICAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9u dW1iZXI7IGkrKykNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgZGNiX2NmZy0+ZXRzY2Zn LnRjYnd0YWJsZVtpXSA9IHRjX2J3Ow0KDQo+ID4gKyAgICAgIC8qIHRvIGVuc3VyZSB0aGUgc3Vt IG9mIHRjYncgaXMgZXF1YWwgdG8gMTAwICovDQoNCj4gPiArICAgICAgYndfbGYgPSBJNDBFX01B WF9QRVJDRU5UICUgIGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7DQoNCj4gPiArICAgICAgZm9y IChpID0gMDsgaSA8IGJ3X2xmOyBpKyspDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGRj Yl9jZmctPmV0c2NmZy50Y2J3dGFibGVbaV0rKzsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICAvKiBh c3N1bWUgZWFjaCB0YyBoYXMgdGhlIHNhbWUgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbiBBbGdvcml0 aG0gKi8NCg0KPiA+ICsgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251 bWJlcjsgaSsrKQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBkY2JfY2ZnLT5ldHNjZmcu dHNhdGFibGVbaV0gPSBJNDBFX0lFRUVfVFNBX0VUUzsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICBm b3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsgaSsrKSB7DQoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpbmZvLT5yZWdpb25baV0udXNl cl9wcmlvcml0eV9udW07IGorKykgew0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpb19pbmRleCA9IGluZm8tPnJlZ2lvbltpXS51c2VyX3ByaW9yaXR5W2pd Ow0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uX2lu ZGV4ID0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZDsNCg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRjYl9jZmctPmV0c2NmZy5wcmlvcml0eXRhYmxlW3ByaW9f aW5kZXhdID0NCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbl9pbmRl eDsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgfQ0KDQo+ID4gKyAgICAgIH0NCg0KPiA+ ICsNCg0KPiA+ICsgICAgICAvKiBGVyBuZWVkcyBvbmUgQXBwIHRvIGNvbmZpZ3VyZSBIVyAqLw0K DQo+ID4gKyAgICAgIGRjYl9jZmctPm51bWFwcHMgPSBJNDBFX0RFRkFVTFRfRENCX0FQUF9OVU07 DQoNCj4gPiArICAgICAgZGNiX2NmZy0+YXBwWzBdLnNlbGVjdG9yID0gSTQwRV9BUFBfU0VMX0VU SFRZUEU7DQoNCj4gPiArICAgICAgZGNiX2NmZy0+YXBwWzBdLnByaW9yaXR5ID0gSTQwRV9ERUZB VUxUX0RDQl9BUFBfUFJJTzsNCg0KPiA+ICsgICAgICBkY2JfY2ZnLT5hcHBbMF0ucHJvdG9jb2xp ZCA9IEk0MEVfQVBQX1BST1RPSURfRkNPRTsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICB0Y19tYXAg PSBSVEVfTEVOMk1BU0soaW5mby0+cXVldWVfcmVnaW9uX251bWJlciwgdWludDhfdCk7DQoNCj4g PiArDQoNCj4gPiArICAgICAgZGNiX2NmZy0+cGZjLndpbGxpbmcgPSAwOw0KDQo+ID4gKyAgICAg IGRjYl9jZmctPnBmYy5wZmNjYXAgPSBJNDBFX01BWF9UUkFGRklDX0NMQVNTOw0KDQo+ID4gKyAg ICAgIGRjYl9jZmctPnBmYy5wZmNlbmFibGUgPSB0Y19tYXA7DQoNCj4gPiArDQoNCj4gPiArICAg ICAgLyogQ29weSB0aGUgbmV3IGNvbmZpZyB0byB0aGUgY3VycmVudCBjb25maWcgKi8NCg0KPiA+ ICsgICAgICAqb2xkX2NmZyA9ICpkY2JfY2ZnOw0KDQo+ID4gKyAgICAgIG9sZF9jZmctPmV0c3Jl YyA9IG9sZF9jZmctPmV0c2NmZzsNCg0KPiA+ICsgICAgICByZXQgPSBpNDBlX3NldF9kY2JfY29u ZmlnKGh3KTsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICBpZiAocmV0KSB7DQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIFBNRF9JTklUX0xPRyhFUlIsICJTZXQgcXVldWUgcmVnaW9uIERDQiBD b25maWcgZmFpbGVkLA0KDQo+IGVyciINCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIgJXMgYXFfZXJyICVzIiwNCg0KPg0KDQo+IFBsZWFzZSBkb24ndCBzcGxp dCB0aGUgbG9nIG1lc3NhZ2UuDQoNCg0KDQpPaw0KDQoNCg0KPg0KDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaTQwZV9zdGF0X3N0cihodywgcmV0KSwNCg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk0MGVfYXFfc3RyKGh3LCBo dy0+YXEuYXNxX2xhc3Rfc3RhdHVzKSk7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7DQoNCj4gPiArICAgICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIHJldHVybiAw Ow0KDQo+ID4gK30NCg0KPiA+ICsNCg0KPiA+ICtzdGF0aWMgaW50DQoNCj4gPiAraTQwZV9xdWV1 ZV9yZWdpb25fZGNiX2NvbmZpZ3VyZV9kZWZhdWx0KHN0cnVjdCBpNDBlX2h3ICpodykgew0KDQo+ ID4gKyAgICAgIHVpbnQxNl90IGk7DQoNCj4gPiArICAgICAgdWludDMyX3QgcmV0ID0gLUVJTlZB TDsNCg0KPg0KDQo+IFBsZWFzZSB1c2Ugc2lnbmVkIHZhcmlhYmxlIGhlcmUuDQoNCg0KDQpPaw0K DQoNCg0KPg0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIG1lbXNldCgmaHctPmxvY2FsX2RjYnhfY29u ZmlnLCAwLA0KDQo+ID4gKyAgICAgIHNpemVvZihzdHJ1Y3QgaTQwZV9kY2J4X2NvbmZpZykpOw0K DQo+DQoNCj4gV3JvbmcgaW5kZW50YXRpb24uDQoNCj4NCg0KPiA+ICsgICAgICAvKiBzZXQgZGNi IGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLw0KDQo+ID4gKyAgICAgIGh3LT5sb2NhbF9kY2J4X2Nv bmZpZy5ldHNjZmcud2lsbGluZyA9IDA7DQoNCj4gPiArICAgICAgaHctPmxvY2FsX2RjYnhfY29u ZmlnLmV0c2NmZy5tYXh0Y3MgPSAwOw0KDQo+ID4gKyAgICAgIGh3LT5sb2NhbF9kY2J4X2NvbmZp Zy5ldHNjZmcudGNid3RhYmxlWzBdID0gMTAwOw0KDQo+ID4gKyAgICAgIGh3LT5sb2NhbF9kY2J4 X2NvbmZpZy5ldHNjZmcudHNhdGFibGVbMF0gPQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSTQwRV9JRUVFX1RTQV9FVFM7DQoNCj4gPiArICAgICAgLyogYWxs IFVQcyBtYXBwaW5nIHRvIHJlZ2lvbiAwICovDQoNCj4gPiArICAgICAgZm9yIChpID0gMDsgaSA8 IEk0MEVfTUFYX1VTRVJfUFJJT1JJVFk7IGkrKykNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZy5wcmlvcml0eXRhYmxlW2ldID0gMDsNCg0K PiA+ICsgICAgICBody0+bG9jYWxfZGNieF9jb25maWcuZXRzcmVjID0NCg0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZzsNCg0KPiA+ICsgICAg ICBody0+bG9jYWxfZGNieF9jb25maWcucGZjLndpbGxpbmcgPSAwOw0KDQo+ID4gKyAgICAgIGh3 LT5sb2NhbF9kY2J4X2NvbmZpZy5wZmMucGZjY2FwID0NCg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEk0MEVfTUFYX1RSQUZGSUNfQ0xBU1M7DQoNCj4gPiArICAg ICAgLyogRlcgbmVlZHMgb25lIEFwcCB0byBjb25maWd1cmUgSFcgKi8NCg0KPiA+ICsgICAgICBo dy0+bG9jYWxfZGNieF9jb25maWcubnVtYXBwcyA9IDE7DQoNCj4gPiArICAgICAgaHctPmxvY2Fs X2RjYnhfY29uZmlnLmFwcFswXS5zZWxlY3RvciA9DQoNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJNDBFX0FQUF9TRUxfRVRIVFlQRTsNCg0KPiA+ICsgICAgICBo dy0+bG9jYWxfZGNieF9jb25maWcuYXBwWzBdLnByaW9yaXR5ID0gMzsNCg0KPiA+ICsgICAgICBo dy0+bG9jYWxfZGNieF9jb25maWcuYXBwWzBdLnByb3RvY29saWQgPQ0KDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTQwRV9BUFBfUFJPVE9JRF9GQ09FOw0KDQo+ ID4gKyAgICAgIHJldCA9IGk0MGVfc2V0X2RjYl9jb25maWcoaHcpOw0KDQo+ID4gKyAgICAgIGlm IChyZXQpIHsNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgUE1EX0lOSVRfTE9HKEVSUiwN Cg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgZGNiIGNvbmZpZyBmYWlscy4g ZXJyID0gJWQsIGFxX2VyciA9ICVkLiIsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXQsIGh3LT5hcS5hc3FfbGFzdF9zdGF0dXMpOw0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KDQo+ID4gKyAgICAgIH0NCg0KPiA+ICsNCg0K PiA+ICsgICAgICByZXR1cm4gMDsNCg0KPiA+ICt9DQoNCj4gPiArDQoNCj4gPiAraW50DQoNCj4g PiAraTQwZV9mbHVzaF9yZWdpb25fYWxsX2NvbmYoc3RydWN0IGk0MGVfaHcgKmh3LCBzdHJ1Y3Qg aTQwZV9wZiAqcGYsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDE2X3Qgb24pDQoNCj4gPiArew0KDQo+ID4gKyAgICAgIHVp bnQxNl90IGk7DQoNCj4gPiArICAgICAgc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gKmlu Zm8gPSAmcGYtPnF1ZXVlX3JlZ2lvbjsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICBpZiAob24pIHsN Cg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgaTQwZV92c2lfdXBkYXRlX3F1ZXVlX3JlZ2lv bl9tYXBwaW5nKGh3LCBwZik7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGk0MGVfcXVl dWVfcmVnaW9uX2RjYl9jb25maWd1cmUoaHcsIHBmKTsNCg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIDA7DQoNCj4gPiArICAgICAgfQ0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIGlu Zm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIgPSAxOw0KDQo+ID4gKyAgICAgIGluZm8tPnJlZ2lvblsw XS5xdWV1ZV9udW0gPSA2NDsNCg0KPiA+ICsgICAgICBpbmZvLT5yZWdpb25bMF0ucXVldWVfc3Rh cnRfaW5kZXggPSAwOw0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIGk0MGVfdnNpX3VwZGF0ZV9xdWV1 ZV9yZWdpb25fbWFwcGluZyhodywgcGYpOw0KDQo+ID4gKyAgICAgIGk0MGVfcXVldWVfcmVnaW9u X2RjYl9jb25maWd1cmVfZGVmYXVsdChodyk7DQoNCj4gPiArDQoNCj4gPiArICAgICAgZm9yIChp ID0gMDsgaSA8IEk0MEVfUEZRRl9IUkVHSU9OX01BWF9JTkRFWDsgaSsrKQ0KDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBpNDBlX3dyaXRlX3J4X2N0bChodywgSTQwRV9QRlFGX0hSRUdJT04o aSksIDApOw0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3Ry dWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8pKTsNCg0KPiA+ICsNCg0KPiA+ICsgICAgICByZXR1 cm4gMDsNCg0KPiA+ICt9DQoNCj4gPiArDQoNCj4gPiAraW50IHJ0ZV9wbWRfaTQwZV9xdWV1ZV9y ZWdpb25fY29uZih1aW50OF90IHBvcnQsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mICpjb25mX3B0cikg ew0KDQo+ID4gKyAgICAgIHN0cnVjdCBydGVfZXRoX2RldiAqZGV2ID0gJnJ0ZV9ldGhfZGV2aWNl c1twb3J0XTsNCg0KPg0KDQo+IHlvdSBuZWVkIHRvIHZlcmlmeSBwb3J0X2lkLCBzaW5jZSB0aGlz IGlzIHB1YmxpYyBBUEkgbm93LiBQbGVhc2UgY2hlY2sgb3RoZXINCg0KPiBBUElzIGluIHRoaXMg ZmlsZS4NCg0KPg0KDQo+ID4gKyAgICAgIHN0cnVjdCBpNDBlX3BmICpwZiA9IEk0MEVfREVWX1BS SVZBVEVfVE9fUEYoZGV2LT5kYXRhLQ0KDQo+ID5kZXZfcHJpdmF0ZSk7DQoNCj4gPiArICAgICAg c3RydWN0IGk0MGVfaHcgKmh3ID0gSTQwRV9ERVZfUFJJVkFURV9UT19IVyhkZXYtPmRhdGEtDQoN Cj4gPmRldl9wcml2YXRlKTsNCg0KPiA+ICsgICAgICBlbnVtIHJ0ZV9wbWRfaTQwZV9xdWV1ZV9y ZWdpb25fb3Agb3BfdHlwZSA9IGNvbmZfcHRyLT5vcDsNCg0KPiA+ICsgICAgICB1aW50MzJfdCBy ZXQ7DQoNCj4NCg0KPiBUaGlzIHNob3VsZCBiZSBzaWduZWQgdmFyaWFibGUsIHNpbmNlIHlvdSBh cmUgdXNpbmcgaXQgZm9yIHJldHVybiBhbmQgYXNzaWduaW5nDQoNCj4gbmVnYXRpdmUgdmFsdWVz Lg0KDQo+DQoNCj4gPiArDQoNCj4gPiArICAgICAgaWYgKCFpc19pNDBlX3N1cHBvcnRlZChkZXYp KQ0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT1RTVVA7DQoNCj4gPiAr DQoNCj4gPiArICAgICAgc3dpdGNoIChvcF90eXBlKSB7DQoNCj4gPiArICAgICAgY2FzZSBSVEVf UE1EX0k0MEVfUVVFVUVfUkVHSU9OX1NFVDoNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg cmV0ID0gaTQwZV9zZXRfcXVldWVfcmVnaW9uKHBmLCBjb25mX3B0cik7DQoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KDQo+DQoNCj4gRG9lcyBpdCBtYWtlIHNlbnNlIHRvIGFk ZCBhbm90aGVyIHR5cGUgdG8gZ2V0IHRoZSBjdXJyZW50IHF1ZXVlIHJlZ2lvbg0KDQo+IGNvbmZp Zz8NCg0KPg0KDQo+ID4gKyAgICAgIGNhc2UgUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9Q Rl9TRVQ6DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGk0MGVfc2V0X3JlZ2lv bl9mbG93dHlwZV9wZihodywgcGYsIGNvbmZfcHRyKTsNCg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQoNCj4gPiArICAgICAgY2FzZSBSVEVfUE1EX0k0MEVfUkVHSU9OX0ZMT1dU WVBFX1ZGX1NFVDoNCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsN Cg0KPg0KDQo+IFdpbGwgdGhpcyBiZSBpbXBsZW1lbnRlZCBsYXRlciwgb3Igbm90IGEgdmFsaWQg Y2FzZSBhdCBhbGw/DQoNCj4NCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoN Cj4gPiArICAgICAgY2FzZSBSVEVfUE1EX0k0MEVfVVBfUkVHSU9OX1NFVDo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldCA9DQoNCj4gaTQwZV9zZXRfdXBfcmVnaW9uKHBmLCBjb25mX3B0 cik7DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQo+ID4gKyAgICAgIGNh c2UgUlRFX1BNRF9JNDBFX1JFR0lPTl9BTExfRkxVU0hfT046DQoNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgIHJldCA9IGk0MGVfZmx1c2hfcmVnaW9uX2FsbF9jb25mKGh3LCBwZiwgMSk7DQoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQo+ID4gKyAgICAgIGNhc2UgUlRF X1BNRF9JNDBFX1JFR0lPTl9BTExfRkxVU0hfT0ZGOg0KDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICByZXQgPSBpNDBlX2ZsdXNoX3JlZ2lvbl9hbGxfY29uZihodywgcGYsIDApOw0KDQo+DQoN Cj4gQ2FuIHlvdSBwbGVhc2UgZGVzY3JpYmUgd2hhdCBmbHVzaF9vbiBhbmQgZmx1c2hfb2ZmIGFy ZSwgeW91IGNhbiBjb21tZW50DQoNCj4gdG8gY29kZSBpZiBhbHNvLg0KDQo+DQoNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQo+ID4gKw0KDQo+ID4gKyAgICAgIGRlZmF1bHQ6 DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIFBNRF9EUlZfTE9HKFdBUk5JTkcsICJvcCB0 eXBlICglZCkgbm90IHN1cHBvcnRlZCIsDQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3BfdHlwZSk7DQoNCj4NCg0KPiBMaW5lIGJyZWFrIG5vdCByZXF1 aXJlZC4NCg0KDQoNCk9rLCBkZWxldGUgaW4gdjQNCg0KPg0KDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICByZXQgPSAtRUlOVkFMOw0KDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCg0KPiA+ICsgICAgICB9DQoNCj4gPiArDQoNCj4gPiArICAgICAgSTQwRV9XUklURV9GTFVT SChodyk7DQoNCj4gPiArDQoNCj4gPiArICAgICAgcmV0dXJuIHJldDsNCg0KPiA+ICt9DQoNCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUuaA0KDQo+ID4gYi9k cml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5oIGluZGV4IDE1NWI3ZTguLmExMzI5ZjQgMTAw NjQ0DQoNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5oDQoNCj4gPiAr KysgYi9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5oDQoNCj4gPiBAQCAtOTEsNiArOTEs MjAgQEAgZW51bSBydGVfcG1kX2k0MGVfcGFja2FnZV9pbmZvIHsNCg0KPiA+ICAgICAgICAgIFJU RV9QTURfSTQwRV9QS0dfSU5GT19NQVggPSAweEZGRkZGRkZGICB9Ow0KDQo+ID4NCg0KPiA+ICsv KioNCg0KPiA+ICsgKiAgT3B0aW9uIHR5cGVzIG9mIHF1ZXVlIHJlZ2lvbi4NCg0KPiA+ICsgKi8N Cg0KPiA+ICtlbnVtIHJ0ZV9wbWRfaTQwZV9xdWV1ZV9yZWdpb25fb3Agew0KDQo+ID4gKyAgICAg IFJURV9QTURfSTQwRV9SRUdJT05fVU5ERUZJTkVEID0gMCwNCg0KPg0KDQo+IE5vIG5lZWQgdG8g c2V0IHRvIHplcm8sIGl0IGlzIGRlZmF1bHQgdmFsdWUuDQoNCg0KDQoNCg0KT2sNCg0KDQoNCj4N Cg0KPiA+ICsgICAgICBSVEVfUE1EX0k0MEVfUVVFVUVfUkVHSU9OX1NFVCwgICAgICAvKio8IGFk ZCBxdWV1ZSByZWdpb24NCg0KPiBzZXQqLw0KDQo+DQoNCj4gSSB3b3VsZCBzdWdnZXN0IHVzaW5n IHNhbWUgbmFtZXNwYWNlIGZvciB0aGUgZW51bSBpdGVzLCB0aGVyZSBhcmUNCg0KPiAiUlRFX1BN RF9JNDBFX1JFR0lPTiIgYW5kICJSVEVfUE1EX0k0MEVfUVVFVUVfUkVHSU9OIi4NCg0KPiAiUlRF X1BNRF9JNDBFX1FVRVVFX1JFR0lPTiIgbG9va3MgYmV0dGVyLiBPciBpZiBpdCBtYWtlcyBzZW5z ZSwNCg0KPiBwZXJoYXBzICJSVEVfUE1EX0k0MEVfUlNTX1FVRVVFX1JFR0lPTiI/IEJ1dCBwbGVh c2Ugc3RpY2sgd2l0aCBvbmUuDQoNCj4NCg0KPiA+ICsgICAgICBSVEVfUE1EX0k0MEVfUkVHSU9O X0ZMT1dUWVBFX1BGX1NFVCwgICAvKio8IGFkZCBwZiByZWdpb24NCg0KPiBwY3R5cGUgc2V0ICov DQoNCj4gPiArICAgICAgUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9WRl9TRVQsICAgLyoq PCBhZGQgdmYgcmVnaW9uDQoNCj4gcGN0eXBlIHNldCAqLw0KDQo+ID4gKyAgICAgIFJURV9QTURf STQwRV9VUF9SRUdJT05fU0VULCAgIC8qKjwgYWRkIHF1ZXVlIHJlZ2lvbiBwY3R5cGUNCg0KPiBz ZXQgKi8NCg0KPg0KDQo+IGlzIHRoaXMgY29tbWVudCBjb3JyZWN0LCB0aGlzIHR5cGUgc2hvdWxk IGJlIGZvciB1c2VyIHByaW9yaXR5DQoNCg0KDQpPaywgZml4IGluIHY0DQoNCg0KDQo+DQoNCj4g PiArICAgICAgUlRFX1BNRF9JNDBFX1JFR0lPTl9BTExfRkxVU0hfT04sICAgLyoqPCBmbHVzaCBv biBhbGwNCg0KPiBjb25maWd1cmF0aW9uICovDQoNCj4gPiArICAgICAgUlRFX1BNRF9JNDBFX1JF R0lPTl9BTExfRkxVU0hfT0ZGLCAgIC8qKjwgZmx1c2ggb2ZmIGFsbA0KDQo+IGNvbmZpZ3VyYXRp b24gKi8NCg0KPiA+ICsgICAgICBSVEVfUE1EX0k0MEVfUVVFVUVfUkVHSU9OX09QX01BWA0KDQo+ ID4gK307DQoNCj4gPiArDQoNCj4gPiAgI2RlZmluZSBSVEVfUE1EX0k0MEVfRERQX05BTUVfU0la RSAzMg0KDQo+ID4NCg0KPiA+ICAvKioNCg0KPiA+IEBAIC0xNDYsNiArMTYwLDE4IEBAIHN0cnVj dCBydGVfcG1kX2k0MGVfcHR5cGVfbWFwcGluZyB7ICB9Ow0KDQo+ID4NCg0KPiA+ICAvKioNCg0K PiA+ICsgKiBRdWV1ZSByZWdpb24gaW5mb3JtYXRpb24gZ2V0IGZyb20gQ0xJLg0KDQo+DQoNCj4g SXQgZG9lc24ndCBuZWVkIHRvIGJlIGZyb20gQ0xJLCBjYW4gZHJvcCB0aGF0IHBhcnQNCg0KPg0K DQo+ID4gKyAqLw0KDQo+ID4gK3N0cnVjdCBydGVfaTQwZV9yc3NfcmVnaW9uX2NvbmYgew0KDQo+ DQoNCj4gVGhpcyBpcyBub3cgcHVibGljIHN0cnVjdCwgY2FuIHlvdSBwbGVhc2UgY29tbWVudCBp dGVtcy4NCg0KDQoNCk9rLiBBZGQgaW4gdjQNCg0KDQoNCj4NCg0KPiA+ICsgICAgICB1aW50OF90 IHJlZ2lvbl9pZDsNCg0KPiA+ICsgICAgICB1aW50OF90IGh3X2Zsb3d0eXBlOw0KDQo+ID4gKyAg ICAgIHVpbnQ4X3QgcXVldWVfc3RhcnRfaW5kZXg7DQoNCj4gPiArICAgICAgdWludDhfdCBxdWV1 ZV9udW07DQoNCj4gPiArICAgICAgdWludDhfdCB1c2VyX3ByaW9yaXR5Ow0KDQo+ID4gKyAgICAg IGVudW0gcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lvbl9vcCAgb3A7DQoNCj4NCg0KPiBFeHRyYSBz cGFjZSBiZWZvcmUgIm9wIg0KDQoNCg0KTWF5YmUsIEkgU0hPVUxEIGFkZCB1aW50OF90IHJhd1sz XSBiZWZvcmUg4oCcb3DigJ0NCg0KDQoNCg0KDQo+DQoNCj4gPiArfTsNCg0KPiA+ICsNCg0KPiA+ ICsvKioNCg0KPiA+ICAgKiBOb3RpZnkgVkYgd2hlbiBQRiBsaW5rIHN0YXR1cyBjaGFuZ2VzLg0K DQo+ID4gICAqDQoNCj4gPiAgICogQHBhcmFtIHBvcnQNCg0KPiA+IEBAIC02NTcsNCArNjgzLDE2 IEBAIGludA0KDQo+IHJ0ZV9wbWRfaTQwZV9wdHlwZV9tYXBwaW5nX3JlcGxhY2UodWludDhfdA0K DQo+ID4gcG9ydCwgIGludCBydGVfcG1kX2k0MGVfYWRkX3ZmX21hY19hZGRyKHVpbnQ4X3QgcG9y dCwgdWludDE2X3QgdmZfaWQsDQoNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aGVyX2FkZHIgKm1hY19hZGRyKTsN Cg0KPiA+DQoNCj4gPiArLyoqDQoNCj4gPiArICogR2V0IFJTUyBxdWV1ZSByZWdpb24gaW5mbyBm cm9tIENMSSBhbmQgZG8gY29uZmlndXJhdGlvbiBmb3INCg0KPg0KDQo+IEFnYWluIG5vdyB0aGlz IGlzIGFuIEFQSSwgbm90IGp1c3QgZm9yIHRlc3RwbWQsIHBsZWFzZSBkcm9wIENMSQ0KDQo+DQoN Cj4gPiArICogdGhhdCBwb3J0IGFzIHRoZSBjb21tYW5kIG90aW9uIHR5cGUNCg0KPg0KDQo+IHMv b3Rpb24vb3B0aW9ucw0KDQo+DQoNCj4gPiArICoNCg0KPiA+ICsgKiBAcGFyYW0gcG9ydA0KDQo+ ID4gKyAqICAgIHBvaW50ZXIgdG8gcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UNCg0KPg0K DQo+IE5vdCBwb2ludGVyLg0KDQo+IEFsc28gdGhpcyB3aWxsIGNvbmZsaWN0IHdpdGggcGF0Y2gg dGhhdCB1cGRhdGVzIHBvcnQgc3RvcmFnZSB0byB1aW50MTZfdC4gQ2FuDQoNCg0KDQpPaywgY2hh bmdlIGluIHY0DQoNCj4geW91IHBsZWFzZSBmb2xsb3cgdGhlIHN0YXR1cyBvZiB0aGUgcGF0Y2gs IGFuZCBpZiB0aGlzIG1lcmdlZCBhZnRlciB0aGF0IG9uZSwNCg0KPiBwbGVhc2UgcGluZyB0byBy ZW1pbmQgdG8gdXBkYXRlIHRoZSBzdG9yYWdlLg0KDQoNCg0KT2sg77yMSSB3aWxsIGNvbW1pdCBh IG5ldyB2NCB0byBmaXggdGhlc2UgLCB0aGVuIHJlbWluZCB5b3Ugb2YgdGhlIG5ldyB2ZXJzaW9u DQoNCg0KDQo+DQoNCj4gPiArICogQHBhcmFtIGNvbmZfcHRyDQoNCj4gPiArICogICAgcG9pbnRl ciB0byB0aGUgc3RydWN0IHRoYXQgY29udGFpbiBhbGwgdGhlDQoNCj4gPiArICogICAgcmVnaW9u IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycw0KDQo+ID4gKyAqLw0KDQo+ID4gK2ludCBydGVfcG1k X2k0MGVfcXVldWVfcmVnaW9uX2NvbmYodWludDhfdCBwb3J0LA0KDQo+DQoNCj4gQ2FuIHlvdSBw bGVhc2UgdXNlIHBvcnRfaWQgYXMgdmFyaWFibGUgbmFtZSB0byBiZSBjb25zaXN0ZW50Lg0KDQo+ DQoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfaTQwZV9yc3NfcmVnaW9u X2NvbmYgKmNvbmZfcHRyKTsNCg0KPg0KDQo+IGNvbmZfcHRyIHZhcmlhYmxlIG5hbWUgZG9lc24n dCBzYXkgbXVjaCwgYWx0aG91Z2ggaXQgaXMgT0sgaW4gdGhpcyBjb250ZXh0LiBJDQoNCj4gd291 bGQgc3VnZ2VzdCBzb21ldGhpbmcgbGlrZSByc3NfcmVnaW9uX2NvbmYNCg0KDQoNCk9rLg0KDQo+ DQoNCj4gPiAgI2VuZGlmIC8qIF9QTURfSTQwRV9IXyAqLw0KDQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlX3ZlcnNpb24ubWFwDQoNCj4gPiBiL2RyaXZlcnMv bmV0L2k0MGUvcnRlX3BtZF9pNDBlX3ZlcnNpb24ubWFwDQoNCj4gPiBpbmRleCBlZjg4ODJiLi5j M2VlMmRhIDEwMDY0NA0KDQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGVf dmVyc2lvbi5tYXANCg0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlX3Zl cnNpb24ubWFwDQoNCj4gPiBAQCAtNTAsNSArNTAsNiBAQCBEUERLXzE3LjExIHsNCg0KPiA+ICAg ICAgICAgIGdsb2JhbDoNCg0KPiA+DQoNCj4gPiAgICAgICAgICBydGVfcG1kX2k0MGVfYWRkX3Zm X21hY19hZGRyOw0KDQo+ID4gKyAgICAgIHJ0ZV9wbWRfaTQwZV9xdWV1ZV9yZWdpb25fY29uZjsN Cg0KPg0KDQo+IFRoZSBmZWF0dXJlIGhhcyBiZWVuIG1lbnRpb24gYXMgInJzcyBxdWV1ZSByZWdp b24iIGFib3ZlIGEgZmV3IHBsYWNlcywgZG8NCg0KPiB5b3UgdGhpbmsgcnRlX3BtZF9pNDBlX3Jz c19xdWV1ZV9yZWdpb25fY29uZigpIG9yDQoNCj4gcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lvbl9j b25mKCkgaXMgYmV0dGVyIGZvciBBUEkgbmFtZT8NCg0KDQoNCk9rLCBJIHdpbGwgY2hhbmdlIHRv IHJ0ZV9wbWRfaTQwZV9yc3NfcXVldWVfcmVnaW9uX2NvbmYNCg0KDQoNCj4NCg0KPiA+DQoNCj4g PiAgfSBEUERLXzE3LjA4Ow0KDQo+ID4NCg0KDQo=