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: Mon, 25 Sep 2017 03:26:36 +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> <9BB6961774997848B5B42BEC655768F810E7BE31@SHSMSX103.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 To: "Wu, Jingjing" , "dev@dpdk.org" Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 19F222F7D for ; Mon, 25 Sep 2017 05:26:40 +0200 (CEST) In-Reply-To: <9BB6961774997848B5B42BEC655768F810E7BE31@SHSMSX103.ccr.corp.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" SGmjrCBqaW5namluZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFd1 LCBKaW5namluZw0KPiBTZW50OiBNb25kYXksIFNlcHRlbWJlciAyNSwgMjAxNyAxMjowMiBBTQ0K PiBUbzogWmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBD YzogWmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6IFtkcGRr LWRldl0gW1BBVENIIHYzIDEvMl0gbmV0L2k0MGU6IHF1ZXVlIHJlZ2lvbiBzZXQgYW5kIGZsdXNo DQo+IA0KPiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBk ZXYgW21haWx0bzpkZXYtYm91bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIFdlaSBaaGFvDQo+ ID4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMTUsIDIwMTcgMTE6MTMgQU0NCj4gPiBUbzogZGV2 QGRwZGsub3JnDQo+ID4gQ2M6IFpoYW8xLCBXZWkgPHdlaS56aGFvMUBpbnRlbC5jb20+DQo+ID4g U3ViamVjdDogW2RwZGstZGV2XSBbUEFUQ0ggdjMgMS8yXSBuZXQvaTQwZTogcXVldWUgcmVnaW9u IHNldCBhbmQNCj4gPiBmbHVzaA0KPiA+DQo+ID4gVGhpcyBmZWF0dXJlIGVuYWJsZSBxdWV1ZSBy ZWdpb25zIGNvbmZpZ3VyYXRpb24gZm9yIFJTUyBpbiBQRi9WRiwgc28NCj4gPiB0aGF0IGRpZmZl cmVudCB0cmFmZmljIGNsYXNzZXMgb3IgZGlmZmVyZW50IHBhY2tldCBjbGFzc2lmaWNhdGlvbg0K PiA+IHR5cGVzIGNhbiBiZSBzZXBhcmF0ZWQgdG8gZGlmZmVyZW50IHF1ZXVlcyBpbiBkaWZmZXJl bnQgcXVldWUNCj4gPiByZWdpb25zLlRoaXMgcGF0Y2ggY2FuIHNldCBxdWV1ZSByZWdpb24gcmFu Z2UsIGl0IGluY2x1ZGUgcXVldWUgbnVtYmVyDQo+ID4gaW4gYSByZWdpb24gYW5kIHRoZSBpbmRl eCBvZiBmaXJzdCBxdWV1ZS4NCj4gPiBUaGlzIHBhdGNoIGVuYWJsZSBtYXBwaW5nIGJldHdlZW4g ZGlmZmVyZW50IHByaW9yaXRpZXMgKFVQKSBhbmQNCj4gPiBkaWZmZXJlbnQgdHJhZmZpYyBjbGFz c2VzLkl0IGFsc28gZW5hYmxlIG1hcHBpbmcgYmV0d2VlbiBhIHJlZ2lvbg0KPiA+IGluZGV4IGFu ZCBhIHNlcGNpZmljIGZsb3d0eXBlKFBDVFlQRSkuSXQgYWxzbyBwcm92aWRlIHRoZSBzb2x1dGlv biBvZg0KPiA+IGZsdXNoIGFsbCBjb25maWd1cmF0aW9uIGFib3V0IHF1ZXVlIHJlZ2lvbiB0aGUg YWJvdmUgZGVzY3JpYmVkLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogV2VpIFpoYW8gPHdlaS56 aGFvMUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhk ZXYuYyAgICAgICAgICAgIHwgIDE5ICstDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhk ZXYuaCAgICAgICAgICAgIHwgIDMwICsrDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9p NDBlLmMgICAgICAgICAgIHwgNDgyDQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr DQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlLmggICAgICAgICAgIHwgIDM4ICsr Kw0KPiA+ICBkcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZV92ZXJzaW9uLm1hcCB8ICAgMSAr DQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwgNTY2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0p DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5jDQo+ ID4gYi9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMgaW5kZXggOGUwNTgwYy4uMTY2M2Zj MCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMNCj4gPiAr KysgYi9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMNCj4gPiBAQCAtMTM3LDEwICsxMzcs NiBAQA0KPiA+ICAjZGVmaW5lIEk0MEVfUFJUVFNZTl9UU1lOVFlQRSAgICAweDBlMDAwMDAwDQo+ ID4gICNkZWZpbmUgSTQwRV9DWUNMRUNPVU5URVJfTUFTSyAgIDB4ZmZmZmZmZmZmZmZmZmZmZlVM TA0KPiA+DQo+ID4gLSNkZWZpbmUgSTQwRV9NQVhfUEVSQ0VOVCAgICAgICAgICAgIDEwMA0KPiA+ IC0jZGVmaW5lIEk0MEVfREVGQVVMVF9EQ0JfQVBQX05VTSAgICAxDQo+ID4gLSNkZWZpbmUgSTQw RV9ERUZBVUxUX0RDQl9BUFBfUFJJTyAgIDMNCj4gPiAtDQo+ID4gIC8qKg0KPiA+ICAgKiBCZWxv dyBhcmUgdmFsdWVzIGZvciB3cml0aW5nIHVuLWV4cG9zZWQgcmVnaXN0ZXJzIHN1Z2dlc3RlZA0K PiA+ICAgKiBieSBzaWxpY29uIGV4cGVydHMNCj4gPiBAQCAtMTAzNCw2ICsxMDMwLDE1IEBAIGk0 MGVfaW5pdF9mZGlyX2ZpbHRlcl9saXN0KHN0cnVjdCBydGVfZXRoX2Rldg0KPiAqZGV2KQ0KPiA+ ICAJcmV0dXJuIHJldDsNCj4gPiAgfQ0KPiA+DQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK2k0MGVf aW5pdF9xdWV1ZV9yZWdpb25fY29uZihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgew0KPiA+ICsJ c3RydWN0IGk0MGVfcGYgKnBmID0gSTQwRV9ERVZfUFJJVkFURV9UT19QRihkZXYtPmRhdGEtDQo+ ID5kZXZfcHJpdmF0ZSk7DQo+ID4gKwlzdHJ1Y3QgaTQwZV9xdWV1ZV9yZWdpb25faW5mbyAqaW5m byA9ICZwZi0+cXVldWVfcmVnaW9uOw0KPiA+ICsNCj4gPiArCW1lbXNldChpbmZvLCAwLCBzaXpl b2Yoc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8pKTsgfQ0KPiA+ICsNCj4gPiAgc3RhdGlj IGludA0KPiA+ICBldGhfaTQwZV9kZXZfaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgIHsg QEAgLTEzMDksNiArMTMxNCw5IEBADQo+ID4gZXRoX2k0MGVfZGV2X2luaXQoc3RydWN0IHJ0ZV9l dGhfZGV2ICpkZXYpDQo+ID4gIAlpZiAocmV0IDwgMCkNCj4gPiAgCQlnb3RvIGVycl9pbml0X2Zk aXJfZmlsdGVyX2xpc3Q7DQo+ID4NCj4gPiArCS8qIGluaXRpYWxpemUgcXVldWUgcmVnaW9uIGNv bmZpZ3VyYXRpb24gKi8NCj4gPiArCWk0MGVfaW5pdF9xdWV1ZV9yZWdpb25fY29uZihkZXYpOw0K PiA+ICsNCj4gSWYgdGhpcyBmdW5jIGk0MGVfaW5pdF9xdWV1ZV9yZWdpb25fY29uZiBpcyBvbmx5 IGNhbGxlZCBoZXJlLCB0aGVuIGl0IGlzIE5vdA0KPiBuZWNlc3Nhcnk/IEJlY2F1c2UgYWxsIHRo ZSBwZiBzdHJ1Y3QgaGFzIGJlZW4gemVyb2VkIGF0IHByb2JlIHRpbWUuDQo+IA0KDQpJIGZpbmQg dGhhdCB0IHNob3VsZCBhbHNvIGJlIGNhbGxlZCBpbiBpNDBlX2ZsdXNoX3JlZ2lvbl9hbGxfY29u ZigpIHRvIHJlcGxhY2UgdGhlIGNvZGUgIiBtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBp NDBlX3F1ZXVlX3JlZ2lvbl9pbmZvKSk7ICINClNvLCBpbiB2NCBJIHdpbGwgY2hhbmdlIHRvIHRo YXQuIEFub3RoZXIgcmVhc29uIGlzIHRvIHNldCB6ZXJvIGFmdGVyIHJlc3RhcnQgcHJvY2VzcyBm cm9tIENMSSBjb21tYW5kICIgc3RhcnQgLXN0b3AgLXN0YXJ0Li4uLiINCg0KPiA+ICAJcmV0dXJu IDA7DQo+ID4NCj4gPiAgZXJyX2luaXRfZmRpcl9maWx0ZXJfbGlzdDoNCj4gPiBAQCAtMTQ2NCw2 ICsxNDcyLDkgQEAgZXRoX2k0MGVfZGV2X3VuaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikN Cj4gPiAgCS8qIFJlbW92ZSBhbGwgVHJhZmZpYyBNYW5hZ2VyIGNvbmZpZ3VyYXRpb24gKi8NCj4g PiAgCWk0MGVfdG1fY29uZl91bmluaXQoZGV2KTsNCj4gPg0KPiA+ICsJLyogUmVtb3ZlIGFsbCB0 aGUgcXVldWUgcmVnaW9uIGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCWk0MGVfZmx1c2hfcmVnaW9u X2FsbF9jb25mKGh3LCBwZiwgMCk7DQo+ID4gKw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmgNCj4gPiBi L2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaCBpbmRleCBhZDgwZjBmLi5kNjEyODg2IDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaA0KPiA+ICsrKyBi L2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaA0KPiA+IEBAIC0yNjAsNiArMjYwLDE2IEBA IGVudW0gaTQwZV9mbHhwbGRfbGF5ZXJfaWR4IHsgICNkZWZpbmUNCj4gPiBJNDBFX1FPU19CV19X RUlHSFRfTUlOIDENCj4gPiAgLyogVGhlIG1heCBiYW5kd2lkdGggd2VpZ2h0IGlzIDEyNy4gKi8g ICNkZWZpbmUNCj4gPiBJNDBFX1FPU19CV19XRUlHSFRfTUFYIDEyNw0KPiA+ICsvKiBUaGUgbWF4 IHF1ZXVlIHJlZ2lvbiBpbmRleCBpcyA3LiAqLyAjZGVmaW5lDQo+IEk0MEVfUkVHSU9OX01BWF9J TkRFWA0KPiA+ICs3DQo+ID4gKy8qIFRoZSBtYXggcXVldWUgcmVnaW9uIHVzZXJwcmlvcml0eSBp cyA3LiAqLyAjZGVmaW5lDQo+ID4gK0k0MEVfUkVHSU9OX1VTRVJQUklPUklUWV9NQVhfSU5ERVgg Nw0KPiBZb3UgY2FuIHJldXNlIEk0MEVfTUFYX1VTRVJfUFJJT1JJVFkuDQoNCk9rLCBjaGFuZ2Ug aW4gdjQNCg0KPiANCj4gPiArLyogVGhlIG1heCBwY3R5cGUgaW5kZXggaXMgNjMuICovDQo+ID4g KyNkZWZpbmUgSTQwRV9SRUdJT05fUENUWVBFX01BWF9JTkRFWCA2Mw0KPiA+ICsNCj4gWW91IGNh biB1c2UgSTQwRV9GSUxURVJfUENUWVBFX01BWA0KDQpPaywgY2hhbmdlIGluIHY0DQoNCj4gDQo+ ID4gKyNkZWZpbmUgSTQwRV9NQVhfUEVSQ0VOVCAgICAgICAgICAgIDEwMA0KPiA+ICsjZGVmaW5l IEk0MEVfREVGQVVMVF9EQ0JfQVBQX05VTSAgICAxDQo+ID4gKyNkZWZpbmUgSTQwRV9ERUZBVUxU X0RDQl9BUFBfUFJJTyAgIDMNCj4gPg0KPiA+ICAvKioNCj4gPiAgICogVGhlIG92ZXJoZWFkIGZy b20gTVRVIHRvIG1heCBmcmFtZSBzaXplLg0KPiA+IEBAIC01NDEsNiArNTUxLDIyIEBAIHN0cnVj dCBpNDBlX2V0aGVydHlwZV9ydWxlIHsNCj4gPiAgCXN0cnVjdCBydGVfaGFzaCAqaGFzaF90YWJs ZTsNCj4gPiAgfTsNCj4gPg0KPiA+ICsvKiBxdWV1ZSByZWdpb24gaW5mbyAqLw0KPiA+ICtzdHJ1 Y3QgaTQwZV9yZWdpb25faW5mbyB7DQo+ID4gKwl1aW50OF90IHJlZ2lvbl9pZDsNCj4gPiArCXVp bnQ4X3QgcXVldWVfc3RhcnRfaW5kZXg7DQo+ID4gKwl1aW50OF90IHF1ZXVlX251bTsNCj4gPiAr CXVpbnQ4X3QgdXNlcl9wcmlvcml0eV9udW07DQo+ID4gKwl1aW50OF90IHVzZXJfcHJpb3JpdHlb STQwRV9NQVhfVVNFUl9QUklPUklUWV07DQo+IFBsZWFzZSBjb21tZW50IHdoYXQgaXMgdGhlIG1l YW5pbmcgb2YgdGhpcyBhcnJheT8NCg0KT2ssIGNoYW5nZSBpbiB2NA0KDQo+IA0KPiA+ICsJdWlu dDhfdCBmbG93dHlwZV9udW07DQo+ID4gKwl1aW50OF90IGh3X2Zsb3d0eXBlW0k0MEVfRklMVEVS X1BDVFlQRV9NQVhdOw0KPiBUaGUgc2FtZSwgcGxlYXNlIGNvbW1lbnQgaXQuDQoNCk9rLCBjaGFu Z2UgaW4gdjQNCg0KPiANCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBpNDBlX3F1ZXVlX3Jl Z2lvbl9pbmZvIHsNCj4gPiArCXVpbnQxNl90IHF1ZXVlX3JlZ2lvbl9udW1iZXI7DQo+ID4gKwlz dHJ1Y3QgaTQwZV9yZWdpb25faW5mbyByZWdpb25bSTQwRV9SRUdJT05fTUFYX0lOREVYICsgMV07 IH07DQo+ID4gKw0KPiA+ICAvKiBUdW5uZWwgZmlsdGVyIG51bWJlciBIVyBzdXBwb3J0cyAqLyAg I2RlZmluZQ0KPiA+IEk0MEVfTUFYX1RVTk5FTF9GSUxURVJfTlVNIDQwMA0KPiA+DQo+ID4gQEAg LTc3Niw2ICs4MDIsNyBAQCBzdHJ1Y3QgaTQwZV9wZiB7DQo+ID4gIAlzdHJ1Y3QgaTQwZV9mZGly X2luZm8gZmRpcjsgLyogZmxvdyBkaXJlY3RvciBpbmZvICovDQo+ID4gIAlzdHJ1Y3QgaTQwZV9l dGhlcnR5cGVfcnVsZSBldGhlcnR5cGU7IC8qIEV0aGVydHlwZSBmaWx0ZXIgcnVsZSAqLw0KPiA+ ICAJc3RydWN0IGk0MGVfdHVubmVsX3J1bGUgdHVubmVsOyAvKiBUdW5uZWwgZmlsdGVyIHJ1bGUg Ki8NCj4gPiArCXN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvIHF1ZXVlX3JlZ2lvbjsgLyog cXVldWUgcmVnaW9uIGluZm8NCj4gKi8NCj4gPiAgCXN0cnVjdCBpNDBlX2ZjX2NvbmYgZmNfY29u ZjsgLyogRmxvdyBjb250cm9sIGNvbmYgKi8NCj4gPiAgCXN0cnVjdCBpNDBlX21pcnJvcl9ydWxl X2xpc3QgbWlycm9yX2xpc3Q7DQo+ID4gIAl1aW50MTZfdCBuYl9taXJyb3JfcnVsZTsgICAvKiBU aGUgbnVtYmVyIG9mIG1pcnJvciBydWxlcyAqLw0KPiA+IEBAIC0xMDAzLDYgKzEwMzAsOSBAQCB2 b2lkIGk0MGVfY2hlY2tfd3JpdGVfcmVnKHN0cnVjdCBpNDBlX2h3ICpodywNCj4gPiB1aW50MzJf dCBhZGRyLCB1aW50MzJfdCB2YWwpOyAgaW50IGk0MGVfdG1fb3BzX2dldChzdHJ1Y3QgcnRlX2V0 aF9kZXYNCj4gPiAqZGV2LCB2b2lkICpvcHMpOyAgdm9pZCBpNDBlX3RtX2NvbmZfaW5pdChzdHJ1 Y3QgcnRlX2V0aF9kZXYgKmRldik7DQo+ID4gdm9pZCBpNDBlX3RtX2NvbmZfdW5pbml0KHN0cnVj dCBydGVfZXRoX2RldiAqZGV2KTsNCj4gPiAraW50IGk0MGVfZmx1c2hfcmVnaW9uX2FsbF9jb25m KHN0cnVjdCBpNDBlX2h3ICpodywNCj4gPiArCQkJCXN0cnVjdCBpNDBlX3BmICpwZiwgdWludDE2 X3Qgb24pOw0KPiA+ICsNCj4gPg0KPiA+ICAjZGVmaW5lIEk0MEVfREVWX1RPX1BDSShldGhfZGV2 KSBcDQo+ID4gIAlSVEVfREVWX1RPX1BDSSgoZXRoX2RldiktPmRldmljZSkNCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUuYw0KPiA+IGIvZHJpdmVycy9uZXQv aTQwZS9ydGVfcG1kX2k0MGUuYyBpbmRleCBkNjlhNDcyLi45YTc1ZjIxIDEwMDY0NA0KPiA+IC0t LSBhL2RyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlLmMNCj4gPiArKysgYi9kcml2ZXJzL25l dC9pNDBlL3J0ZV9wbWRfaTQwZS5jDQo+ID4gQEAgLTM1LDYgKzM1LDcgQEANCj4gPiAgI2luY2x1 ZGUgPHJ0ZV90YWlscS5oPg0KPiA+DQo+ID4gICNpbmNsdWRlICJiYXNlL2k0MGVfcHJvdG90eXBl LmgiDQo+ID4gKyNpbmNsdWRlICJiYXNlL2k0MGVfZGNiLmgiDQo+ID4gICNpbmNsdWRlICJpNDBl X2V0aGRldi5oIg0KPiA+ICAjaW5jbHVkZSAiaTQwZV9wZi5oIg0KPiA+ICAjaW5jbHVkZSAiaTQw ZV9yeHR4LmgiDQo+ID4gQEAgLTIxNjEsMyArMjE2Miw0ODQgQEAgcnRlX3BtZF9pNDBlX2FkZF92 Zl9tYWNfYWRkcih1aW50OF90IHBvcnQsDQo+ID4gdWludDE2X3QgdmZfaWQsDQo+ID4NCj4gPiAg CXJldHVybiAwOw0KPiA+ICB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2k0MGVfdnNp X3VwZGF0ZV9xdWV1ZV9yZWdpb25fbWFwcGluZyhzdHJ1Y3QgaTQwZV9odyAqaHcsDQo+ID4gKwkJ CSAgICAgIHN0cnVjdCBpNDBlX3BmICpwZikNCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4g PiArCXN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gcGYtPm1haW5fdnNpOw0KPiA+ICsJdWludDE2X3Qg cXVldWVfb2Zmc2V0LCBic2YsIHRjX2luZGV4Ow0KPiA+ICsJc3RydWN0IGk0MGVfdnNpX2NvbnRl eHQgY3R4dDsNCj4gPiArCXN0cnVjdCBpNDBlX2FxY192c2lfcHJvcGVydGllc19kYXRhICp2c2lf aW5mbzsNCj4gPiArCXN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICpyZWdpb25faW5mbyA9 DQo+ID4gKwkJCQkmcGYtPnF1ZXVlX3JlZ2lvbjsNCj4gPiArCXVpbnQzMl90IHJldCA9IC1FSU5W QUw7DQo+ID4gKw0KPiA+ICsJaWYgKCFyZWdpb25faW5mby0+cXVldWVfcmVnaW9uX251bWJlcikg ew0KPiA+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGVyZSBpcyBubyB0aGF0IHJlZ2lvbiBpZCBi ZWVuIHNldA0KPiBiZWZvcmUiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCW1lbXNldCgmY3R4dCwgMCwgc2l6ZW9mKHN0cnVjdCBpNDBlX3ZzaV9jb250ZXh0KSk7 DQo+ID4gKw0KPiA+ICsJLyogVXBkYXRlIFF1ZXVlIFBhaXJzIE1hcHBpbmcgZm9yIGN1cnJlbnRs eSBlbmFibGVkIFVQcyAqLw0KPiA+ICsJY3R4dC5zZWlkID0gdnNpLT5zZWlkOw0KPiA+ICsJY3R4 dC5wZl9udW0gPSBody0+cGZfaWQ7DQo+ID4gKwljdHh0LnZmX251bSA9IDA7DQo+ID4gKwljdHh0 LnVwbGlua19zZWlkID0gdnNpLT51cGxpbmtfc2VpZDsNCj4gPiArCWN0eHQuaW5mbyA9IHZzaS0+ aW5mbzsNCj4gPiArCXZzaV9pbmZvID0gJmN0eHQuaW5mbzsNCj4gPiArDQo+IFBsZWFzZSB1c2Ug dGhlIHZzaV9pbmZvIHN0b3JlZCBpbiBpNDBlX3ZzaSB0byBhdm9pZCBtaXNzaW5nIHBhcmFtZXRl cnMuDQo+IA0KPiA+ICsJbWVtc2V0KHZzaV9pbmZvLT50Y19tYXBwaW5nLCAwLCBzaXplb2YodWlu dDE2X3QpICogOCk7DQo+ID4gKwltZW1zZXQodnNpX2luZm8tPnF1ZXVlX21hcHBpbmcsIDAsIHNp emVvZih1aW50MTZfdCkgKiAxNik7DQo+ID4gKw0KPiBDdHh0IGhhcyBiZWVuIHplcm9lZCwgbm8g bmVlZCB0byBtZW1zZXQgdGNfbWFwcGluZyBhbmQgcXVldWVfbWFwcGluZw0KPiBhZ2Fpbi4NCg0K T2ssIGNoYW5nZSBpbiB2NA0KDQo+ID4gKwkvKioNCj4gPiArCSAqIENvbmZpZ3VyZSBxdWV1ZSBy ZWdpb24gYW5kIHF1ZXVlIG1hcHBpbmcgcGFyYW1ldGVycywNCj4gPiArCSAqIGZvciBlbmFibGVk IHF1ZXVlIHJlZ2lvbiwgYWxsb2NhdGUgcXVldWVzIHRvIHRoaXMgcmVnaW9uLg0KPiA+ICsJICov DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHJlZ2lvbl9pbmZvLT5xdWV1ZV9yZWdpb25f bnVtYmVyOyBpKyspIHsNCj4gPiArCQl0Y19pbmRleCA9IHJlZ2lvbl9pbmZvLT5yZWdpb25baV0u cmVnaW9uX2lkOw0KPiA+ICsJCWJzZiA9IHJ0ZV9ic2YzMihyZWdpb25faW5mby0+cmVnaW9uW2ld LnF1ZXVlX251bSk7DQo+ID4gKwkJcXVldWVfb2Zmc2V0ID0gcmVnaW9uX2luZm8tPnJlZ2lvbltp XS5xdWV1ZV9zdGFydF9pbmRleDsNCj4gPiArCQl2c2lfaW5mby0+dGNfbWFwcGluZ1t0Y19pbmRl eF0gPSBydGVfY3B1X3RvX2xlXzE2KA0KPiA+ICsJCQkocXVldWVfb2Zmc2V0IDw8DQo+IEk0MEVf QVFfVlNJX1RDX1FVRV9PRkZTRVRfU0hJRlQpIHwNCj4gPiArCQkJCShic2YgPDwNCj4gSTQwRV9B UV9WU0lfVENfUVVFX05VTUJFUl9TSElGVCkpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEFz c29jaWF0ZSBxdWV1ZSBudW1iZXIgd2l0aCBWU0ksIEtlZXAgdnNpLT5uYl9xcHMgdW5jaGFuZ2Vk DQo+ICovDQo+ID4gKwlpZiAodnNpLT50eXBlID09IEk0MEVfVlNJX1NSSU9WKSB7DQo+IFZzaSBp cyBtYWluIHZzaSwgaXQgaXMgaW1wb3NzaWJsZSB0aGF0IHRoZSB0eXBlIHRvIGJlIFNSSU9WLiBJ ZiB5b3Ugd2FudCB0bw0KPiBjb25maWd1cmUgUXVldWUgbWFwcGluZyBvbiBzcmlvdiBWU0ksIHlv dSBuZWVkIHRvIHNjYW4gYWxsIHRoZSBTUklPViBWU0lzLg0KDQpPay4NCg0KPiANCj4gPiArCQl2 c2lfaW5mby0+bWFwcGluZ19mbGFncyB8PQ0KPiA+ICsNCj4gCXJ0ZV9jcHVfdG9fbGVfMTYoSTQw RV9BUV9WU0lfUVVFX01BUF9OT05DT05USUcpOw0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCB2c2kt Pm5iX3FwczsgaSsrKQ0KPiA+ICsJCQl2c2lfaW5mby0+cXVldWVfbWFwcGluZ1tpXSA9DQo+ID4g KwkJCQlydGVfY3B1X3RvX2xlXzE2KHZzaS0+YmFzZV9xdWV1ZSArIGkpOw0KPiA+ICsJfSBlbHNl IHsNCj4gPiArCQl2c2lfaW5mby0+bWFwcGluZ19mbGFncyB8PQ0KPiA+ICsNCj4gCXJ0ZV9jcHVf dG9fbGVfMTYoSTQwRV9BUV9WU0lfUVVFX01BUF9DT05USUcpOw0KPiA+ICsJCXZzaV9pbmZvLT5x dWV1ZV9tYXBwaW5nWzBdID0gcnRlX2NwdV90b19sZV8xNih2c2ktDQo+ID5iYXNlX3F1ZXVlKTsN Cj4gPiArCX0NCj4gPiArCXZzaV9pbmZvLT52YWxpZF9zZWN0aW9ucyB8PQ0KPiA+ICsNCj4gCXJ0 ZV9jcHVfdG9fbGVfMTYoSTQwRV9BUV9WU0lfUFJPUF9RVUVVRV9NQVBfVkFMSUQpOw0KPiA+ICsN Cj4gPiArCS8qIFVwZGF0ZSB0aGUgVlNJIGFmdGVyIHVwZGF0aW5nIHRoZSBWU0kgcXVldWUtbWFw cGluZw0KPiBpbmZvcm1hdGlvbiAqLw0KPiA+ICsJcmV0ID0gaTQwZV9hcV91cGRhdGVfdnNpX3Bh cmFtcyhodywgJmN0eHQsIE5VTEwpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCVBNRF9JTklU X0xPRyhFUlIsICJGYWlsZWQgdG8gY29uZmlndXJlIHF1ZXVlIHJlZ2lvbiAiDQo+IFBNRF9JTklU X0xPRyAgLT4gUE1EX0RSVl9MT0cNCj4gPiArCQkJIm1hcHBpbmcgPSAlZCAiLCBody0+YXEuYXNx X2xhc3Rfc3RhdHVzKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsJLyogdXBk YXRlIHRoZSBsb2NhbCBWU0kgaW5mbyB3aXRoIHVwZGF0ZWQgcXVldWUgbWFwICovDQo+ID4gKwko dm9pZClydGVfbWVtY3B5KCZ2c2ktPmluZm8udGNfbWFwcGluZywgJmN0eHQuaW5mby50Y19tYXBw aW5nLA0KPiA+ICsJCQkJCXNpemVvZih2c2ktPmluZm8udGNfbWFwcGluZykpOw0KPiA+ICsJKHZv aWQpcnRlX21lbWNweSgmdnNpLT5pbmZvLnF1ZXVlX21hcHBpbmcsDQo+ID4gKwkJCSZjdHh0Lmlu Zm8ucXVldWVfbWFwcGluZywNCj4gPiArCQlzaXplb2YodnNpLT5pbmZvLnF1ZXVlX21hcHBpbmcp KTsNCj4gPiArCXZzaS0+aW5mby5tYXBwaW5nX2ZsYWdzID0gY3R4dC5pbmZvLm1hcHBpbmdfZmxh Z3M7DQo+ID4gKwl2c2ktPmluZm8udmFsaWRfc2VjdGlvbnMgPSAwOw0KPiA+ICsNCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtpNDBl X3NldF9xdWV1ZV9yZWdpb24oc3RydWN0IGk0MGVfcGYgKnBmLA0KPiA+ICsJCQkJc3RydWN0IHJ0 ZV9pNDBlX3Jzc19yZWdpb25fY29uZiAqY29uZl9wdHIpIHsNCj4gPiArCXVpbnQxNl90IHRjX3Np emVfdGJbN10gPSB7MSwgMiwgNCwgOCwgMTYsIDMyLCA2NH07DQo+ID4gKwl1aW50MTZfdCBpOw0K PiA+ICsJc3RydWN0IGk0MGVfdnNpICptYWluX3ZzaSA9IHBmLT5tYWluX3ZzaTsNCj4gPiArCXN0 cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ ID4gKwl1aW50MzJfdCByZXQgPSAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkg PCBJNDBFX1JFR0lPTl9NQVhfSU5ERVg7IGkrKykNCj4gPiArCQlpZiAoY29uZl9wdHItPnF1ZXVl X251bSA9PSB0Y19zaXplX3RiW2ldKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ID4gKwlpZiAo aSA9PSBJNDBFX1JFR0lPTl9NQVhfSU5ERVgpIHsNCj4gPiArCQlwcmludGYoIlRoZSByZWdpb24g c2l6ZXMgc2hvdWxkIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nICINCj4gPiArCQkidmFsdWVzOiAx LCAyLCA0LCA4LCAxNiwgMzIsIDY0IGFzIGxvbmcgYXMgdGhlICINCj4gPiArCQkidG90YWwgbnVt YmVyIG9mIHF1ZXVlcyBkbyBub3QgZXhjZWVkIHRoZSBWU0kgYWxsb2NhdGlvbiIpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiBJZiB5b3UganVzdCB3YW50IHRvIGNoZWNr IGlmIHRoZSBxdWV1ZV9udW1lIGlzIG9uZSBvZiB7MSwgMiw0LDgsMTYsMzIsNjR9IFlvdQ0KPiBj YW4gdXNlDQo+IA0KPiBJZiAocnRlX2lzX3Bvd2VyX29mXzIocXVldWVfbnVtKSAmJiBxdWV1ZV9u dW0gPD0gNjQpDQo+IA0KPiANCj4gPiArCWlmIChjb25mX3B0ci0+cmVnaW9uX2lkID49IEk0MEVf UkVHSU9OX01BWF9JTkRFWCkgew0KPiA+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGUgcXVldWUg cmVnaW9uIG1heCBpbmRleCBpcyA3Iik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpZiAoKGNvbmZfcHRyLT5xdWV1ZV9zdGFydF9pbmRleCArIGNvbmZfcHRyLT5x dWV1ZV9udW0pDQo+ID4gKwkJCQkJPiBtYWluX3ZzaS0+bmJfdXNlZF9xcHMpIHsNCj4gPiArCQlQ TURfSU5JVF9MT0coRVJSLCAidGhlIHF1ZXVlIGluZGV4IGV4Y2VlZHMgdGhlIFZTSQ0KPiByYW5n ZSIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGluZm8t PnF1ZXVlX3JlZ2lvbl9udW1iZXIpIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVl dWVfcmVnaW9uX251bWJlcjsgaSsrKQ0KPiA+ICsJCQlpZiAoY29uZl9wdHItPnJlZ2lvbl9pZCA9 PSBpbmZvLT5yZWdpb25baV0ucmVnaW9uX2lkKQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKw0KPiA+ ICsJCWlmICgoaSA9PSBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSAmJg0KPiA+ICsJCQkoaSA8 PSBJNDBFX1JFR0lPTl9NQVhfSU5ERVgpKSB7DQo+IEl0IGlzIGltcG9zc2libGUgdGhhdCBpID4g STQwRV9SRUdJT05fTUFYX0lOREVYLCByaWdodD8NCj4gDQo+ID4gKwkJCWluZm8tPnJlZ2lvbltp XS5yZWdpb25faWQgPSBjb25mX3B0ci0+cmVnaW9uX2lkOw0KPiA+ICsJCQlpbmZvLT5yZWdpb25b aV0ucXVldWVfbnVtID0gY29uZl9wdHItPnF1ZXVlX251bTsNCj4gPiArCQkJaW5mby0+cmVnaW9u W2ldLnF1ZXVlX3N0YXJ0X2luZGV4ID0NCj4gPiArCQkJCWNvbmZfcHRyLT5xdWV1ZV9zdGFydF9p bmRleDsNCj4gPiArCQkJaW5mby0+cXVldWVfcmVnaW9uX251bWJlcisrOw0KPiA+ICsJCX0gZWxz ZSB7DQo+ID4gKwkJCVBNRF9JTklUX0xPRyhFUlIsICJxdWV1ZSByZWdpb24gbnVtYmVyICINCj4g PiArCQkJCSJleGNlZWRzIG1heG51bSA4IG9yIHRoZSAiDQo+ID4gKwkJCQkicXVldWUgcmVnaW9u IGlkIGhhcyAiDQo+ID4gKwkJCQkiYmVlbiBzZXQgYmVmb3JlIik7DQo+IERvZXMgaXQgbWVhbiB3 ZSBjYW4gbm90IGNoYW5nZSB0aGUgc2V0IG9mIG9uZSBxdWV1ZSByZWdpb24gd2hvc2UgaWQgaXMg c2V0DQo+IGJlZm9yZT8NCj4gDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJfQ0KPiA+ICsJ fSBlbHNlIHsNCj4gPiArCQlpbmZvLT5yZWdpb25bMF0ucmVnaW9uX2lkID0gY29uZl9wdHItPnJl Z2lvbl9pZDsNCj4gPiArCQlpbmZvLT5yZWdpb25bMF0ucXVldWVfbnVtID0gY29uZl9wdHItPnF1 ZXVlX251bTsNCj4gPiArCQlpbmZvLT5yZWdpb25bMF0ucXVldWVfc3RhcnRfaW5kZXggPQ0KPiA+ ICsJCQljb25mX3B0ci0+cXVldWVfc3RhcnRfaW5kZXg7DQo+ID4gKwkJaW5mby0+cXVldWVfcmVn aW9uX251bWJlcisrOw0KPiA+ICsJfQ0KPiBJIHRoaW5rIHRoaXMgcGFydCBvZiBjb2RlIGNhbiBi ZSByZWZpbmVkLg0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50DQo+ID4gK2k0MGVfc2V0X3JlZ2lvbl9mbG93dHlwZV9wZihzdHJ1Y3QgaTQwZV9o dyAqaHcsDQo+ID4gKwkJc3RydWN0IGk0MGVfcGYgKnBmLCBzdHJ1Y3QgcnRlX2k0MGVfcnNzX3Jl Z2lvbl9jb25mDQo+ICpjb25mX3B0cikgew0KPiA+ICsJdWludDMyX3QgcGZxZl9ocmVnaW9uOw0K PiA+ICsJdWludDMyX3QgcmV0ID0gLUVJTlZBTDsNCj4gPiArCXN0cnVjdCBpNDBlX3F1ZXVlX3Jl Z2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ID4gKwl1aW50MTZfdCBpLCBq LCBpbmRleCwgZmxvd3R5cGVfc2V0ID0gMDsNCj4gPiArCXVpbnQxNl90IHJlZ2lvbl9pbmRleCwg Zmxvd3R5cGVfaW5kZXg7DQo+ID4gKw0KPiA+ICsJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPiBJ NDBFX1BGUUZfSFJFR0lPTl9NQVhfSU5ERVgpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAi dGhlIHF1ZXVlIHJlZ2lvbiBtYXggaW5kZXggaXMgNyIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNvbmZfcHRyLT5od19mbG93dHlwZSA+PSBJNDBFX0ZJ TFRFUl9QQ1RZUEVfTUFYKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgInRoZSBod19mbG93 dHlwZSBvciBQQ1RZUEUgbWF4IGluZGV4DQo+IGlzIDYzIik7DQo+ID4gKwkJcmV0dXJuIHJldDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoaW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgew0K PiA+ICsJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOyBpKyspDQo+ ID4gKwkJCWlmIChjb25mX3B0ci0+cmVnaW9uX2lkID09IGluZm8tPnJlZ2lvbltpXS5yZWdpb25f aWQpDQo+ID4gKwkJCQlicmVhazsNCj4gPiArDQo+ID4gKwkJaWYgKGkgPT0gaW5mby0+cXVldWVf cmVnaW9uX251bWJlcikgew0KPiA+ICsJCQlQTURfSU5JVF9MT0coRVJSLCAidGhhdCByZWdpb24g aWQgaGFzIG5vdCAiDQo+ID4gKwkJCQkiYmVlbiBzZXQgYmVmb3JlIik7DQo+ID4gKwkJCXJldHVy biByZXQ7DQo+ID4gKwkJfQ0KPiBJZiBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyPT0wLCB0aGVu IGkgd291bGQgYmUgMC4gU28sIHRoZSBvdXRlciB3cmFwIGlmDQo+IChpbmZvLT5xdWV1ZV9yZWdp b25fbnVtYmVyKSB7fSBjYW4gYmUgb21pdC4gVGhlIHNhbWUgYXQgYWJvdmUgZnVuYywgSQ0KPiB0 aGluayB0aGlzIHBhcnQgb2YgY29kZSBjYW4gYmUgcmVmaW5lZC4NCg0KTGV0IG1lIGhhdmUgYSBs aXR0bGUgdGhpbmsgYWJvdXQgaXQuDQoNCj4gPiArCQlyZWdpb25faW5kZXggPSBpOw0KPiA+ICsN Cj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsgaSsrKSB7 DQo+ID4gKwkJCWZvciAoaiA9IDA7IGogPCBpbmZvLT5yZWdpb25baV0uZmxvd3R5cGVfbnVtOyBq KyspIHsNCj4gPiArCQkJCWlmIChjb25mX3B0ci0+aHdfZmxvd3R5cGUgPT0NCj4gPiArCQkJCQlp bmZvLT5yZWdpb25baV0uaHdfZmxvd3R5cGVbal0pIHsNCj4gPiArCQkJCQlmbG93dHlwZV9zZXQg PSAxOw0KPiA+ICsJCQkJCWJyZWFrOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0K PiA+ICsNCj4gPiArCQlpZiAoZmxvd3R5cGVfc2V0KSB7DQo+ID4gKwkJCVBNRF9JTklUX0xPRyhF UlIsICJ0aGF0IGh3X2Zsb3d0eXBlICINCj4gPiArCQkJCSJoYXMgYmVlbiBzZXQgYmVmb3JlIik7 DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+IElzIHRoYXQgcmlnaHQgdG8gcmV0dXJuIC1FSU5WQUwg d2hlbiBpdCBoYXMgYmVlbiBzZXQuIEFuZCBpdCBzZWVtcyBJbiB0aGlzDQo+IGZ1bmN0aW9uLCB0 aGUgZXJyb3IgY29kZSBpcyBvbmx5IC1FSU5WQUwsIGlmIHNvLCB3aHkgd2UgZGVmaW5lIHJldD8N Cg0KWWVzLCBpZiBpdCBoYXMgYmVlbiBzZXQgLCBJIHdpbGwgbm90IGRvIGEgc2Vjb25kIHRpbWUu IA0KT3RoZXIgY29kZSBhbHNvIHVzZSBydGUgYXMgdGhpcyB3YXkuDQogDQoNCj4gPiArCQl9DQo+ ID4gKwkJZmxvd3R5cGVfaW5kZXggPSBpbmZvLT5yZWdpb25bcmVnaW9uX2luZGV4XS5mbG93dHlw ZV9udW07DQo+ID4gKwkJaW5mby0+cmVnaW9uW3JlZ2lvbl9pbmRleF0uaHdfZmxvd3R5cGVbZmxv d3R5cGVfaW5kZXhdID0NCj4gPiArCQkJCQkJY29uZl9wdHItPmh3X2Zsb3d0eXBlOw0KPiA+ICsJ CWluZm8tPnJlZ2lvbltyZWdpb25faW5kZXhdLmZsb3d0eXBlX251bSsrOw0KPiA+ICsJfSBlbHNl ICB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgInRoZXJlIGlzIG5vIHRoYXQgcmVnaW9uIGlk IGJlZW4gc2V0DQo+IGJlZm9yZSIpOw0KPiANCj4gQWdhaW4sIHBsZWFzZSB1c2UgUE1EX0RSVl9M T0cuIEJlY2F1c2UgdGhlIGZ1bmMgaXMgbm90IGNhbGxlZCBhdA0KPiBpbml0aWFsaXphdGlvbiB0 aW1lLg0KDQoNCk9rLCBjaGFuZ2UgaW4gdjQNCg0KPiBQbGVhc2UgcmVwbGFjZSBpdCBpbiBhbGwg dGhlIHBhdGNoLg0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaW5k ZXggPSBjb25mX3B0ci0+aHdfZmxvd3R5cGUgPj4gMzsNCj4gPiArCXBmcWZfaHJlZ2lvbiA9IGk0 MGVfcmVhZF9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IUkVHSU9OKGluZGV4KSk7DQo+ID4gKw0KPiA+ ICsJaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDApIHsNCj4gPiArCQlwZnFm X2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hS RUdJT05fUkVHSU9OXzBfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQw RV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzBfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChj b25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDEpIHsNCj4gPiArCQlwZnFmX2hyZWdpb24g fD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVH SU9OXzFfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hS RUdJT05fT1ZFUlJJREVfRU5BXzFfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+ aHdfZmxvd3R5cGUgJiAweDcpID09IDIpIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9w dHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzJfU0hJ RlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZF UlJJREVfRU5BXzJfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5 cGUgJiAweDcpID09IDMpIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lv bl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzNfU0hJRlQ7DQo+ID4g KwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5B XzNfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcp ID09IDQpIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0K PiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzRfU0hJRlQ7DQo+ID4gKwkJcGZxZl9o cmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzRfU0hJRlQ7 DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDUpIHsN Cj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJ STQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzVfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9 IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzVfU0hJRlQ7DQo+ID4gKwl9 IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDYpIHsNCj4gPiArCQlw ZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFG X0hSRUdJT05fUkVHSU9OXzZfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4g STQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzZfU0hJRlQ7DQo+IFdoYXQgaXMgdGhlIChj b25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDEvMi8zLzQvNS82IG1lYW5pbmdzPw0KPiBQ bGVhc2UgYXZvaWQgY29kaW5nIHdpdGggaW50ZWdlciBudW1iZXIuIENhbiBub3QgdW5kZXJzdGFu ZCB0aGUNCj4gcmVsYXRpb25zaGlwIHdpdGggZmxvdyB0eXBlLg0KPiBBbmQgdGhlIGh3X2Zsb3d0 eXBlIGlzIEFQSSB0byB1c2VycywgeW91IG5lZWQgdG8gbWFrZSBpdCBjbGVhciBlbm91Z2guDQoN Ck5vIHByYWN0aWNhbCBtZWFuaW5nLCBqdXN0IGZpbmQgcG9zaXRpb24gZm9yIHRoYXQgcGN0eXBl LCBiZWNhdXNlIDggdHlwZSBwY3R5cGUgcmV1c2Ugb25lIHJlZ2lzdGVyLg0KV2Ugc3VwcG9ydCA2 NCB0eXBlcyBvZiB0aGVtLg0KDQo+IA0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlwZnFmX2hyZWdp b24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05f UkVHSU9OXzdfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFG X0hSRUdJT05fT1ZFUlJJREVfRU5BXzdfU0hJRlQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaTQw ZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IUkVHSU9OKGluZGV4KSwgcGZxZl9ocmVnaW9u KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dA0KPiA+ICtpNDBlX3NldF91cF9yZWdpb24oc3RydWN0IGk0MGVfcGYgKnBmLA0KPiA+ICsJCQkJ c3RydWN0IHJ0ZV9pNDBlX3Jzc19yZWdpb25fY29uZiAqY29uZl9wdHIpIHsNCj4gPiArCXN0cnVj dCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ID4g Kwl1aW50MzJfdCByZXQgPSAtRUlOVkFMOw0KPiA+ICsJdWludDE2X3QgaSwgaiwgcmVnaW9uX2lu ZGV4LCB1cF9zZXQgPSAwOw0KPiA+ICsNCj4gPiArCWlmIChjb25mX3B0ci0+dXNlcl9wcmlvcml0 eSA+DQo+IEk0MEVfUkVHSU9OX1VTRVJQUklPUklUWV9NQVhfSU5ERVgpIHsNCj4gPiArCQlQTURf SU5JVF9MT0coRVJSLCAidGhlIHF1ZXVlIHJlZ2lvbiBtYXggaW5kZXggaXMgNyIpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNvbmZfcHRyLT5yZWdpb25f aWQgPj0gSTQwRV9SRUdJT05fTUFYX0lOREVYKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwg InRoZSByZWdpb25faWQgbWF4IGluZGV4IGlzIDciKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4g KwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiAr CQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPT0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCkN Cj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdp b25fbnVtYmVyKSB7DQo+ID4gKwkJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGF0IHJlZ2lvbiBpZCAi DQo+ID4gKwkJCQkiaGFzIG5vdCBiZWVuIHNldCBiZWZvcmUiKTsNCj4gPiArCQkJcmV0dXJuIHJl dDsNCj4gPiArCQl9DQo+ID4gKwkJcmVnaW9uX2luZGV4ID0gaTsNCj4gPiArDQo+ID4gKwkJZm9y IChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KPiA+ICsJCQlm b3IgKGogPSAwOyBqIDwNCj4gPiArCQkJCWluZm8tPnJlZ2lvbltpXS51c2VyX3ByaW9yaXR5X251 bTsgaisrKSB7DQo+ID4gKwkJCQlpZiAoaW5mby0+cmVnaW9uW2ldLnVzZXJfcHJpb3JpdHlbal0g PT0NCj4gPiArCQkJCQljb25mX3B0ci0+dXNlcl9wcmlvcml0eSkgew0KPiA+ICsJCQkJCXVwX3Nl dCA9IDE7DQo+ID4gKwkJCQkJYnJlYWs7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCX0NCj4gPiArCQl9 DQo+ID4gKw0KPiA+ICsJCWlmICh1cF9zZXQpIHsNCj4gPiArCQkJUE1EX0lOSVRfTE9HKEVSUiwg InRoYXQgdXNlciBwcmlvcml0eSAiDQo+ID4gKwkJCQkiaGFzIGJlZW4gc2V0IGJlZm9yZSIpOw0K PiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaiA9IGluZm8tPnJl Z2lvbltyZWdpb25faW5kZXhdLnVzZXJfcHJpb3JpdHlfbnVtOw0KPiA+ICsJCWluZm8tPnJlZ2lv bltyZWdpb25faW5kZXhdLnVzZXJfcHJpb3JpdHlbal0gPQ0KPiA+ICsJCQkJCQljb25mX3B0ci0+ dXNlcl9wcmlvcml0eTsNCj4gPiArCQlpbmZvLT5yZWdpb25bcmVnaW9uX2luZGV4XS51c2VyX3By aW9yaXR5X251bSsrOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAi dGhlcmUgaXMgbm8gdGhhdCByZWdpb24gaWQgYmVlbiBzZXQNCj4gYmVmb3JlIik7DQo+ID4gKwkJ cmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtpNDBlX3F1ZXVlX3JlZ2lvbl9kY2JfY29uZmlndXJl KHN0cnVjdCBpNDBlX2h3ICpodywNCj4gPiArCQkJCXN0cnVjdCBpNDBlX3BmICpwZikNCj4gPiAr ew0KPiA+ICsJc3RydWN0IGk0MGVfZGNieF9jb25maWcgZGNiX2NmZ19sb2NhbDsNCj4gPiArCXN0 cnVjdCBpNDBlX2RjYnhfY29uZmlnICpkY2JfY2ZnOw0KPiA+ICsJc3RydWN0IGk0MGVfcXVldWVf cmVnaW9uX2luZm8gKmluZm8gPSAmcGYtPnF1ZXVlX3JlZ2lvbjsNCj4gPiArCXN0cnVjdCBpNDBl X2RjYnhfY29uZmlnICpvbGRfY2ZnID0gJmh3LT5sb2NhbF9kY2J4X2NvbmZpZzsNCj4gPiArCXVp bnQzMl90IHJldCA9IC1FSU5WQUw7DQo+ID4gKwl1aW50MTZfdCBpLCBqLCBwcmlvX2luZGV4LCBy ZWdpb25faW5kZXg7DQo+ID4gKwl1aW50OF90IHRjX21hcCwgdGNfYncsIGJ3X2xmOw0KPiA+ICsN Cj4gPiArCWlmICghaW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgew0KPiA+ICsJCVBNRF9JTklU X0xPRyhFUlIsICJ0aGVyZSBpcyBubyB0aGF0IHJlZ2lvbiBpZCBiZWVuIHNldA0KPiBiZWZvcmUi KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWRjYl9jZmcgPSAm ZGNiX2NmZ19sb2NhbDsNCj4gPiArCW1lbXNldChkY2JfY2ZnLCAwLCBzaXplb2Yoc3RydWN0IGk0 MGVfZGNieF9jb25maWcpKTsNCj4gPiArDQo+ID4gKwkvKiBhc3N1bWUgZWFjaCB0YyBoYXMgdGhl IHNhbWUgYncgKi8NCj4gPiArCXRjX2J3ID0gSTQwRV9NQVhfUEVSQ0VOVCAvIGluZm8tPnF1ZXVl X3JlZ2lvbl9udW1iZXI7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9u X251bWJlcjsgaSsrKQ0KPiA+ICsJCWRjYl9jZmctPmV0c2NmZy50Y2J3dGFibGVbaV0gPSB0Y19i dzsNCj4gPiArCS8qIHRvIGVuc3VyZSB0aGUgc3VtIG9mIHRjYncgaXMgZXF1YWwgdG8gMTAwICov DQo+ID4gKwlid19sZiA9IEk0MEVfTUFYX1BFUkNFTlQgJSAgaW5mby0+cXVldWVfcmVnaW9uX251 bWJlcjsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBid19sZjsgaSsrKQ0KPiA+ICsJCWRjYl9jZmct PmV0c2NmZy50Y2J3dGFibGVbaV0rKzsNCj4gPiArDQo+ID4gKwkvKiBhc3N1bWUgZWFjaCB0YyBo YXMgdGhlIHNhbWUgVHJhbnNtaXNzaW9uIFNlbGVjdGlvbiBBbGdvcml0aG0gKi8NCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOyBpKyspDQo+ID4gKwkJZGNi X2NmZy0+ZXRzY2ZnLnRzYXRhYmxlW2ldID0gSTQwRV9JRUVFX1RTQV9FVFM7DQo+ID4gKw0KPiA+ ICsJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KPiA+ ICsJCWZvciAoaiA9IDA7IGogPCBpbmZvLT5yZWdpb25baV0udXNlcl9wcmlvcml0eV9udW07IGor Kykgew0KPiA+ICsJCQlwcmlvX2luZGV4ID0gaW5mby0+cmVnaW9uW2ldLnVzZXJfcHJpb3JpdHlb al07DQo+ID4gKwkJCXJlZ2lvbl9pbmRleCA9IGluZm8tPnJlZ2lvbltpXS5yZWdpb25faWQ7DQo+ ID4gKwkJCWRjYl9jZmctPmV0c2NmZy5wcmlvcml0eXRhYmxlW3ByaW9faW5kZXhdID0NCj4gPiAr CQkJCQkJcmVnaW9uX2luZGV4Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBG VyBuZWVkcyBvbmUgQXBwIHRvIGNvbmZpZ3VyZSBIVyAqLw0KPiA+ICsJZGNiX2NmZy0+bnVtYXBw cyA9IEk0MEVfREVGQVVMVF9EQ0JfQVBQX05VTTsNCj4gPiArCWRjYl9jZmctPmFwcFswXS5zZWxl Y3RvciA9IEk0MEVfQVBQX1NFTF9FVEhUWVBFOw0KPiA+ICsJZGNiX2NmZy0+YXBwWzBdLnByaW9y aXR5ID0gSTQwRV9ERUZBVUxUX0RDQl9BUFBfUFJJTzsNCj4gPiArCWRjYl9jZmctPmFwcFswXS5w cm90b2NvbGlkID0gSTQwRV9BUFBfUFJPVE9JRF9GQ09FOw0KPiA+ICsNCj4gPiArCXRjX21hcCA9 IFJURV9MRU4yTUFTSyhpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyLCB1aW50OF90KTsNCj4gPiAr DQo+ID4gKwlkY2JfY2ZnLT5wZmMud2lsbGluZyA9IDA7DQo+ID4gKwlkY2JfY2ZnLT5wZmMucGZj Y2FwID0gSTQwRV9NQVhfVFJBRkZJQ19DTEFTUzsNCj4gPiArCWRjYl9jZmctPnBmYy5wZmNlbmFi bGUgPSB0Y19tYXA7DQo+ID4gKw0KPiA+ICsJLyogQ29weSB0aGUgbmV3IGNvbmZpZyB0byB0aGUg Y3VycmVudCBjb25maWcgKi8NCj4gPiArCSpvbGRfY2ZnID0gKmRjYl9jZmc7DQo+ID4gKwlvbGRf Y2ZnLT5ldHNyZWMgPSBvbGRfY2ZnLT5ldHNjZmc7DQo+ID4gKwlyZXQgPSBpNDBlX3NldF9kY2Jf Y29uZmlnKGh3KTsNCj4gPiArDQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9H KEVSUiwgIlNldCBxdWV1ZSByZWdpb24gRENCIENvbmZpZyBmYWlsZWQsDQo+IGVyciINCj4gPiAr CQkJIiAlcyBhcV9lcnIgJXMiLA0KPiA+ICsJCQkgaTQwZV9zdGF0X3N0cihodywgcmV0KSwNCj4g PiArCQkJIGk0MGVfYXFfc3RyKGh3LCBody0+YXEuYXNxX2xhc3Rfc3RhdHVzKSk7DQo+ID4gKwkJ cmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtpNDBlX3F1ZXVlX3JlZ2lvbl9kY2JfY29uZmlndXJl X2RlZmF1bHQoc3RydWN0IGk0MGVfaHcgKmh3KQ0KPiANCj4gQ2FuIGk0MGVfZGNiX2luaXRfY29u ZmlndXJlIGRvIHdoYXQgdGhpcyBmdW5jIGRpZCBoZXJlPw0KDQpJdCBzZWVtcyBvaywgY2hhbmdl IGluIHY0Lg0KIA0KPiANCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXVpbnQzMl90 IHJldCA9IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KCZody0+bG9jYWxfZGNieF9jb25m aWcsIDAsDQo+ID4gKwlzaXplb2Yoc3RydWN0IGk0MGVfZGNieF9jb25maWcpKTsNCj4gPiArCS8q IHNldCBkY2IgZGVmYXVsdCBjb25maWd1cmF0aW9uICovDQo+ID4gKwlody0+bG9jYWxfZGNieF9j b25maWcuZXRzY2ZnLndpbGxpbmcgPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0 c2NmZy5tYXh0Y3MgPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZy50Y2J3 dGFibGVbMF0gPSAxMDA7DQo+ID4gKwlody0+bG9jYWxfZGNieF9jb25maWcuZXRzY2ZnLnRzYXRh YmxlWzBdID0NCj4gPiArCQkJSTQwRV9JRUVFX1RTQV9FVFM7DQo+ID4gKwkvKiBhbGwgVVBzIG1h cHBpbmcgdG8gcmVnaW9uIDAgKi8NCj4gPiArCWZvciAoaSA9IDA7IGkgPCBJNDBFX01BWF9VU0VS X1BSSU9SSVRZOyBpKyspDQo+ID4gKwkJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZy5wcmlv cml0eXRhYmxlW2ldID0gMDsNCj4gPiArCWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5ldHNyZWMgPQ0K PiA+ICsJCWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5ldHNjZmc7DQo+ID4gKwlody0+bG9jYWxfZGNi eF9jb25maWcucGZjLndpbGxpbmcgPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLnBm Yy5wZmNjYXAgPQ0KPiA+ICsJCQlJNDBFX01BWF9UUkFGRklDX0NMQVNTOw0KPiA+ICsJLyogRlcg bmVlZHMgb25lIEFwcCB0byBjb25maWd1cmUgSFcgKi8NCj4gPiArCWh3LT5sb2NhbF9kY2J4X2Nv bmZpZy5udW1hcHBzID0gMTsNCj4gPiArCWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5hcHBbMF0uc2Vs ZWN0b3IgPQ0KPiA+ICsJCQlJNDBFX0FQUF9TRUxfRVRIVFlQRTsNCj4gPiArCWh3LT5sb2NhbF9k Y2J4X2NvbmZpZy5hcHBbMF0ucHJpb3JpdHkgPSAzOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29u ZmlnLmFwcFswXS5wcm90b2NvbGlkID0NCj4gPiArCQkJSTQwRV9BUFBfUFJPVE9JRF9GQ09FOw0K PiA+ICsJcmV0ID0gaTQwZV9zZXRfZGNiX2NvbmZpZyhodyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwNCj4gPiArCQkiZGVmYXVsdCBkY2IgY29uZmlnIGZhaWxz LiBlcnIgPSAlZCwgYXFfZXJyID0gJWQuIiwNCj4gPiArCQkJcmV0LCBody0+YXEuYXNxX2xhc3Rf c3RhdHVzKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4gPiAraTQwZV9mbHVzaF9yZWdpb25fYWxs X2NvbmYoc3RydWN0IGk0MGVfaHcgKmh3LCBzdHJ1Y3QgaTQwZV9wZiAqcGYsDQo+ID4gKwkJCQl1 aW50MTZfdCBvbikNCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXN0cnVjdCBpNDBl X3F1ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ID4gKw0KPiA+ ICsJaWYgKG9uKSB7DQo+ID4gKwkJaTQwZV92c2lfdXBkYXRlX3F1ZXVlX3JlZ2lvbl9tYXBwaW5n KGh3LCBwZik7DQo+ID4gKwkJaTQwZV9xdWV1ZV9yZWdpb25fZGNiX2NvbmZpZ3VyZShodywgcGYp Ow0KPiBEb24ndCBjaGVjayBhbGwgdGhlIHJldHVybiBjb2RlPw0KDQo+IA0KPiA+ICsJCXJldHVy biAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIgPSAx Ow0KPiA+ICsJaW5mby0+cmVnaW9uWzBdLnF1ZXVlX251bSA9IDY0Ow0KPiA+ICsJaW5mby0+cmVn aW9uWzBdLnF1ZXVlX3N0YXJ0X2luZGV4ID0gMDsNCj4gPiArDQo+ID4gKwlpNDBlX3ZzaV91cGRh dGVfcXVldWVfcmVnaW9uX21hcHBpbmcoaHcsIHBmKTsNCj4gPiArCWk0MGVfcXVldWVfcmVnaW9u X2RjYl9jb25maWd1cmVfZGVmYXVsdChodyk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8 IEk0MEVfUEZRRl9IUkVHSU9OX01BWF9JTkRFWDsgaSsrKQ0KPiA+ICsJCWk0MGVfd3JpdGVfcnhf Y3RsKGh3LCBJNDBFX1BGUUZfSFJFR0lPTihpKSwgMCk7DQo+ID4gKwltZW1zZXQoaW5mbywgMCwg c2l6ZW9mKHN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvKSk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBydGVfcG1kX2k0MGVfcXVldWVfcmVnaW9u X2NvbmYodWludDhfdCBwb3J0LA0KPiA+ICsJCQlzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9j b25mICpjb25mX3B0cikgew0KPiA+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPSAmcnRlX2V0 aF9kZXZpY2VzW3BvcnRdOw0KPiA+ICsJc3RydWN0IGk0MGVfcGYgKnBmID0gSTQwRV9ERVZfUFJJ VkFURV9UT19QRihkZXYtPmRhdGEtDQo+ID5kZXZfcHJpdmF0ZSk7DQo+ID4gKwlzdHJ1Y3QgaTQw ZV9odyAqaHcgPSBJNDBFX0RFVl9QUklWQVRFX1RPX0hXKGRldi0+ZGF0YS0NCj4gPmRldl9wcml2 YXRlKTsNCj4gPiArCWVudW0gcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lvbl9vcCBvcF90eXBlID0g Y29uZl9wdHItPm9wOw0KPiA+ICsJdWludDMyX3QgcmV0Ow0KPiA+ICsNCj4gPiArCWlmICghaXNf aTQwZV9zdXBwb3J0ZWQoZGV2KSkNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVA7DQo+ID4gKw0KPiA+ ICsJc3dpdGNoIChvcF90eXBlKSB7DQo+ID4gKwljYXNlIFJURV9QTURfSTQwRV9RVUVVRV9SRUdJ T05fU0VUOg0KPiA+ICsJCXJldCA9IGk0MGVfc2V0X3F1ZXVlX3JlZ2lvbihwZiwgY29uZl9wdHIp Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUkVHSU9OX0ZMT1dUWVBF X1BGX1NFVDoNCj4gPiArCQlyZXQgPSBpNDBlX3NldF9yZWdpb25fZmxvd3R5cGVfcGYoaHcsIHBm LCBjb25mX3B0cik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFJURV9QTURfSTQwRV9SRUdJ T05fRkxPV1RZUEVfVkZfU0VUOg0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwkJYnJlYWs7 DQo+IElmIGl0IGlzIG5vdCBzdXBwb3J0ZWQsIHdoeSB0byBkZWZpbmUgdGhpcyBvcD8NCj4gDQo+ ID4gKwljYXNlIFJURV9QTURfSTQwRV9VUF9SRUdJT05fU0VUOg0KPiA+ICsJCXJldCA9IGk0MGVf c2V0X3VwX3JlZ2lvbihwZiwgY29uZl9wdHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBS VEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PTjoNCj4gPiArCQlyZXQgPSBpNDBlX2ZsdXNo X3JlZ2lvbl9hbGxfY29uZihodywgcGYsIDEpOw0KPiA+ICsJCWJyZWFrOw0KPiBXaGF0IGlzIHRo ZSBGTFVTSCBvbiBtZWFuaW5nPyBDb21taXQgYWxsIGNvbmZpZ3VyZSB0byBIVz8NCj4gSWYgc28s IHdoYXQgbWFrZXMgbWUgY29uZnVzZWQgdGhhdDoNCj4gUlRFX1BNRF9JNDBFX1FVRVVFX1JFR0lP Tl9TRVQgb25seSB0b3VjaCB0aGUgc29mdHdhcmUgc3RvcmVkIGluDQo+IGRyaXZlci4NCj4gQnV0 IFJURV9QTURfSTQwRV9SRUdJT05fRkxPV1RZUEVfUEZfU0VUIHNldCB0aGUNCj4gSTQwRV9QRlFG X0hSRUdJT04gcmVnaXN0ZXIuDQo+IFRob3NlIGJlaGF2aW9ycyBhcmUgbm90IGNvbnNpc3QuDQo+ IA0KPiBBbmQgRkxVU0ggT0ZGIG1lYW5zIGRlbGV0ZSBhbGw/DQo+IA0KPiBZb3UgbmVlZCB0byBh ZGQgbW9yZSBjb21tZW50cy4NCg0KSSB3aWxsIGFkZCBtb3JlIGNvbW1lbnQgaW4gZnVuY3Rpb24g Y29tbWVudC4NCkFMTCBjb25maWcgZnJvbSBDTEkgYXQgZmlyc3Qgd2lsbCBvbmx5IGtlZXAgaW4g RFBESyBzb2Z0d2FyZSBzdG9yZWQgaW4gZHJpdmVyLCBvbmx5IGFmdGVyICIgRkxVU0hfT04gIiwg aXQgY29tbWl0IGFsbCBjb25maWd1cmUgdG8gSFcuDQpCZWNhdXNlIEkgaGF2ZSB0byBzZXQgaGFy ZHdhcmUgY29uZmlnIGF0IGEgdGltZSwgc28gSSBoYXZlIHRvIHJlY29yZCBhbGwgQ0xJIGNvbW1h bmQgYXQgZmlyc3QuDQoiIEZMVVNIX09GRiAiIGlzIGp1c3QgY2xlYW4gYWxsIGNvbmZpZ3VyYXRp b24gYWJvdXQgcXVldWUgcmVnaW9uICBqdXN0IG5vdywgYW5kIHJlc3RvcmUgYWxsIHRvIERQREsg aTQwZSBkcml2ZXIgZGVmYXVsdCBjb25maWcgd2hlbiBzdGFydCB1cC4NClRoZSBmb2xsb3dpbmcg aXMgbXkgdGVzdCBwcm9jZXNzIGluIENMSTogDQoNCi4veDg2XzY0LW5hdGl2ZS1saW51eGFwcC1n Y2MvYXBwL3Rlc3RwbWQgLWMgMWZmZmYgLW4gNCAtLSAtaSAtLW5iLWNvcmVzPTggIC0tcnhxPTgg LS10eHE9OCAtLXBvcnQtdG9wb2xvZ3k9Y2hhaW5lZCBzZXQgZndkIHJ4b25seSBwb3J0IGNvbmZp ZyBhbGwgcnNzIGFsbCBxdWV1ZS1yZWdpb24gc2V0IHBvcnQgMCByZWdpb25faWQgMCBxdWV1ZV9z dGFydF9pbmRleCAyIHF1ZXVlX251bSAyIHF1ZXVlLXJlZ2lvbiBzZXQgcG9ydCAwIHJlZ2lvbl9p ZCAxIHF1ZXVlX3N0YXJ0X2luZGV4IDQgcXVldWVfbnVtIDIgcXVldWUtcmVnaW9uIHNldCBwZiBw b3J0IDAgcmVnaW9uX2lkIDAgZmxvd3R5cGUgMzEgcXVldWUtcmVnaW9uIHNldCBwZiBwb3J0IDAg cmVnaW9uX2lkIDEgZmxvd3R5cGUgMzMgcXVldWUtcmVnaW9uIHNldCBwZiBwb3J0IDAgcmVnaW9u X2lkIDEgZmxvd3R5cGUgMzQgcXVldWUtcmVnaW9uIHNldCBwb3J0IDAgVVAgMSByZWdpb25faWQg MCBxdWV1ZS1yZWdpb24gc2V0IHBvcnQgMCBVUCAzIHJlZ2lvbl9pZCAxIHF1ZXVlLXJlZ2lvbiBm bHVzaCBvbiAgcG9ydCAwIHN0YXJ0IHNldCB2ZXJib3NlIDEgc2VuZHAoW0V0aGVyKGRzdD0iM0M6 RkQ6RkU6OUY6NzA6QjgiLCBzcmM9IjUyOjAwOjAwOjAwOjAwOjAwIikvRG90MVEocHJpbz0zKS9J UChzcmM9IjEwLjAuMC4xIixkc3Q9IjE5Mi4xNjguMC4yIikvVENQKGRwb3J0PTgwLCBzcG9ydD04 MCApLygiWCIqNDgpXSwgaWZhY2U9ImVuczVmMiIsIGNvdW50PTEwKSBzZW5kcChbRXRoZXIoZHN0 PSIzQzpGRDpGRTo5Rjo3MDpCOCIsIHNyYz0iNTI6MDA6MDA6MDA6MDA6MDAiKS9JUChzcmM9IjEw LjAuMC4xIixkc3Q9IjE5Mi4xNjguMC4yIikvU0NUUChkcG9ydD04MCwgc3BvcnQ9ODAgKS8oIlgi KjQ4KV0sIGlmYWNlPSJlbnM1ZjIiLCBjb3VudD0xMCkgc2VuZHAoW0V0aGVyKGRzdD0iM0M6RkQ6 RkU6OUY6NzA6QjgiLCBzcmM9IjUyOjAwOjAwOjAwOjAwOjAwIikvSVAoc3JjPSIxMC4wLjAuMSIs ZHN0PSIxOTIuMTY4LjAuMiIpL1VEUChkcG9ydD04MCwgc3BvcnQ9ODAgKS8oIlgiKjQ4KV0sIGlm YWNlPSJlbnM1ZjIiLCBjb3VudD0xMCkNCg0KDQo+IA0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVf UkVHSU9OX0FMTF9GTFVTSF9PRkY6DQo+ID4gKwkJcmV0ID0gaTQwZV9mbHVzaF9yZWdpb25fYWxs X2NvbmYoaHcsIHBmLCAwKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwlkZWZhdWx0Og0K PiA+ICsJCVBNRF9EUlZfTE9HKFdBUk5JTkcsICJvcCB0eXBlICglZCkgbm90IHN1cHBvcnRlZCIs DQo+ID4gKwkJCSAgICBvcF90eXBlKTsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCUk0MEVfV1JJVEVfRkxVU0goaHcpOw0KPiA+ICsN Cj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv aTQwZS9ydGVfcG1kX2k0MGUuaA0KPiA+IGIvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUu aCBpbmRleCAxNTViN2U4Li5hMTMyOWY0IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0 MGUvcnRlX3BtZF9pNDBlLmgNCj4gPiArKysgYi9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQw ZS5oDQo+ID4gQEAgLTkxLDYgKzkxLDIwIEBAIGVudW0gcnRlX3BtZF9pNDBlX3BhY2thZ2VfaW5m byB7DQo+ID4gIAlSVEVfUE1EX0k0MEVfUEtHX0lORk9fTUFYID0gMHhGRkZGRkZGRiAgfTsNCj4g Pg0KPiA+ICsvKioNCj4gPiArICogIE9wdGlvbiB0eXBlcyBvZiBxdWV1ZSByZWdpb24uDQo+ID4g KyAqLw0KPiA+ICtlbnVtIHJ0ZV9wbWRfaTQwZV9xdWV1ZV9yZWdpb25fb3Agew0KPiA+ICsJUlRF X1BNRF9JNDBFX1JFR0lPTl9VTkRFRklORUQgPSAwLA0KPiA+ICsJUlRFX1BNRF9JNDBFX1FVRVVF X1JFR0lPTl9TRVQsICAgICAgLyoqPCBhZGQgcXVldWUgcmVnaW9uDQo+IHNldCovDQo+ID4gKwlS VEVfUE1EX0k0MEVfUkVHSU9OX0ZMT1dUWVBFX1BGX1NFVCwgICAvKio8IGFkZCBwZiByZWdpb24N Cj4gcGN0eXBlIHNldCAqLw0KPiA+ICsJUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9WRl9T RVQsICAgLyoqPCBhZGQgdmYgcmVnaW9uDQo+IHBjdHlwZSBzZXQgKi8NCj4gPiArCVJURV9QTURf STQwRV9VUF9SRUdJT05fU0VULCAgIC8qKjwgYWRkIHF1ZXVlIHJlZ2lvbiBwY3R5cGUNCj4gc2V0 ICovDQo+ID4gKwlSVEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PTiwgICAvKio8IGZsdXNo IG9uIGFsbA0KPiBjb25maWd1cmF0aW9uICovDQo+ID4gKwlSVEVfUE1EX0k0MEVfUkVHSU9OX0FM TF9GTFVTSF9PRkYsICAgLyoqPCBmbHVzaCBvZmYgYWxsDQo+IGNvbmZpZ3VyYXRpb24gKi8NCj4g PiArCVJURV9QTURfSTQwRV9RVUVVRV9SRUdJT05fT1BfTUFYDQo+ID4gK307DQo+ID4gKw0KPiA+ ICAjZGVmaW5lIFJURV9QTURfSTQwRV9ERFBfTkFNRV9TSVpFIDMyDQo+ID4NCj4gPiAgLyoqDQo+ ID4gQEAgLTE0Niw2ICsxNjAsMTggQEAgc3RydWN0IHJ0ZV9wbWRfaTQwZV9wdHlwZV9tYXBwaW5n IHsgIH07DQo+ID4NCj4gPiAgLyoqDQo+ID4gKyAqIFF1ZXVlIHJlZ2lvbiBpbmZvcm1hdGlvbiBn ZXQgZnJvbSBDTEkuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9j b25mIHsNCj4gPiArCXVpbnQ4X3QgcmVnaW9uX2lkOw0KPiA+ICsJdWludDhfdCBod19mbG93dHlw ZTsNCj4gPiArCXVpbnQ4X3QgcXVldWVfc3RhcnRfaW5kZXg7DQo+ID4gKwl1aW50OF90IHF1ZXVl X251bTsNCj4gPiArCXVpbnQ4X3QgdXNlcl9wcmlvcml0eTsNCj4gPiArCWVudW0gcnRlX3BtZF9p NDBlX3F1ZXVlX3JlZ2lvbl9vcCAgb3A7IH07DQo+IFRoaXMgaXMgQVBJIHN0cnVjdCwgeW91IG5l ZWQgdG8gY29tbWVudCB0aGVtIGluIGRldGFpbA0KDQpPaywgY2hhbmdlIGluIHY0DQoNCj4gDQo+ IFRoYW5rcw0KPiBKaW5namluZw0K