From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52153) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKk3k-0003Df-9l for qemu-devel@nongnu.org; Tue, 13 Jun 2017 07:32:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dKk3f-0004zQ-LW for qemu-devel@nongnu.org; Tue, 13 Jun 2017 07:32:32 -0400 Received: from out1.zte.com.cn ([202.103.147.172]:40131) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dKk3d-0004yf-A7 for qemu-devel@nongnu.org; Tue, 13 Jun 2017 07:32:27 -0400 Date: Tue, 13 Jun 2017 19:24:48 +0800 (CST) Message-ID: <201706131924483092713@zte.com.cn> References: 201706081716217079190@zte.com.cn, f13461ac-6123-3f28-d71f-ae277e8bbb0e@redhat.com Mime-Version: 1.0 From: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: [Qemu-devel] =?utf-8?b?562U5aSNOiBSZTog562U5aSNOiBSZTogW1BBVENI?= =?utf-8?q?v2_02/04=5D_colo-compare=3A_Process_pactkets_in_the_IOThread_of?= =?utf-8?q?the_primary?= List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: jasowang@redhat.com, zhang.zhanghailiang@huawei.com Cc: zhangchen.fnst@cn.fujitsu.com, lizhijian@cn.fujitsu.com, qemu-devel@nongnu.org, wang.guang55@zte.com.cn Pj5DaGFyLWZlLmMgZm9yIHN1cmUgd2hpY2ggbWVhbnMgZnJvbnRlbmQgb2YgY2hhcmRldi4NCg0K DQoNCg0KDQo+Pj4gVGhlc2UgQVBJIGNhbiBvbmx5IHdhdGNoIGV2ZW50cyBpbiB0aGUgcWVtdSBt YWluIHRocmVhZCwgbm90IGluIHRoZSANCg0KDQo+Pj4gSU9UaHJlYWQuDQoNCg0KPj4+DQoNCg0K Pj4+IEkgaGFkIHRvIHVzZSB0aGUgcWlvX2NoYW5uZWxfc29ja2V0X3NldF9haW9fZmRfaGFuZGxl ciBmdW5jdGlvbiB0bw0KDQoNCj4+Pg0KDQoNCj4+PiBtb25pdG9yIHRoZSBjaGFyIGV2ZW50IGlu IHRoZSBJT1RocmVhZCxzbyB0aGUgaW8gY2hhbm5lbCBpcyB1c2VkIGhlcg0KDQoNCj4+Pg0KDQoN Cg0KDQoNCj4+VGhlIHBvaW50IGlzIG5vdCB0b3VjaGluZyB0aGUgaW50ZXJuYWwgc3RydWN0dXJl IG9mIGNoYXJkZXYgbGlrZSBpb2MsIA0KDQoNCj4+aW5zdGVhZCBleHRlbmQgaXRzIGhlbHBlciBs aWtlIGUuZyBxZW11X2Nocl9mZV9zZXRfaGFuZGxlcnMoKSBhbmQgbGV0IGl0IA0KDQoNCj4+c2V0 IGFpbyBoYW5kbGVycywNCg0KDQoNCg0KDQo+Q3VycmVudGx5IGNoYXJhY3RlciBkZXZpY2VzIGFy ZSB0aWVkIHRvIHRoZSBHU291cmNlIEFQSS4gSG93ZXZlcixJJ2xsIHRyeSB0byBzdWJtaXQgYSBw YXRjaCBmaXJzdC4NCg0KDQoNCg0KDQpIaSBKYXNvbiwNCg0KDQoNCg0KDQoNCkkgaGF2ZSBpbnZl c3RpZ2F0ZWQgdGhlIGNoYW5nZSwgd2hpY2ggaW52b2x2ZXMgYSBncmVhdCBkZWFsLg0KDQoNCldl IGhhdmUgdG8gY29udmVydCB0aGUgdXNlciBvZiB0aG9zZSBBUElzICh0aGUgZXh0ZXJuYWwgQVBJ IGlzDQoNCg0KcWVtdV9jaHJfZmVfYWRkX3dhdGNoKSBmcm9tIEdTb3VyY2UvUUlPQ2hhbm5lbCB0 byBBaW9Db250ZXh0Lg0KDQoNCg0KDQoNCg0KQ2FuIHdlIGpvaW4gdGhpcyBzZXJpZXMgZmlyc3Q/ ICBhbmQgcmVwbGFjZSBHU291cmNlIHdpdGggQWlvQ29udGV4dCBpbiBhIGZ1dHVyZSBwYXRjaC4N Cg0KDQoNCg0KDQoNCj5UaGFua3MNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCuWOn+Wn i+mCruS7tg0KDQoNCg0K5Y+R5Lu25Lq677yaIDxqYXNvd2FuZ0ByZWRoYXQuY29tPg0K5pS25Lu2 5Lq677ya546L5YuHMTAxNzA1MzAgPHpoYW5nLnpoYW5naGFpbGlhbmdAaHVhd2VpLmNvbT4NCuaK hOmAgeS6uu+8miA8emhhbmdjaGVuLmZuc3RAY24uZnVqaXRzdS5jb20+IDxsaXpoaWppYW5AY24u ZnVqaXRzdS5jb20+IDxxZW11LWRldmVsQG5vbmdudS5vcmc+546L5bm/MTAxNjU5OTINCuaXpSDm nJ8g77yaMjAxN+W5tDA25pyIMDnml6UgMTI6MjANCuS4uyDpopgg77yaUmU6IOetlOWkjTogUmU6 IFtQQVRDSHYyIDAyLzA0XSBjb2xvLWNvbXBhcmU6IFByb2Nlc3MgcGFjdGtldHMgaW4gdGhlIElP VGhyZWFkIG9mdGhlIHByaW1hcnkNCg0KDQoNCg0KDQoNCg0KT24gMjAxN+W5tDA25pyIMDjml6Ug MTc6MTYsIHdhbmcueW9uZzE1NUB6dGUuY29tLmNuIHdyb3RlOg0KPg0KPiDvvJ7vvJ4gRnJvbTog V2FuZyBZb25nIO+8nHdhbmcueW9uZzE1NUB6dGUuY29tLmNu77yeDQo+DQo+IO+8nu+8ng0KPg0K PiDvvJ7vvJ4gUHJvY2VzcyBwYWN0a2V0cyBpbiB0aGUgSU9UaHJlYWQgd2hpY2ggYXJyaXZlZCBv dmVyIHRoZSBzb2NrZXQuDQo+DQo+IO+8nu+8niB3ZSB1c2UgcWlvX2NoYW5uZWxfc2V0X2Fpb19m ZF9oYW5kbGVyIHRvIHNldCB0aGUgaGFuZGxlcnMgb24gdGhlDQo+DQo+IO+8nu+8niBJT1RocmVh ZCBBaW9Db250ZXh0LnRoZW4gdGhlIHBhY2tldHMgZnJvbSB0aGUgcHJpbWFyeSBhbmQgdGhlIA0K PiBzZWNvbmRhcnkNCj4NCj4g77ye77yeIGFyZSBwcm9jZXNzZWQgaW4gdGhlIElPVGhyZWFkLg0K Pg0KPiDvvJ7vvJ4gRmluYWxseSByZW1vdmUgdGhlIGNvbG8tY29tcGFyZSB0aHJlYWQgdXNpbmcg dGhlIElPVGhyZWFkIGluc3RlYWQuDQo+DQo+IO+8nu+8ng0KPg0KPiDvvJ7vvJ4gU2lnbmVkLW9m Zi1ieTogV2FuZyBZb25n77ycd2FuZy55b25nMTU1QHp0ZS5jb20uY27vvJ4NCj4NCj4g77ye77ye IFNpZ25lZC1vZmYtYnk6IFdhbmcgR3VhbmfvvJx3YW5nLmd1YW5nNTVAenRlLmNvbS5jbu+8ng0K Pg0KPiDvvJ7vvJ4gLS0tDQo+DQo+IO+8nu+8niAgIG5ldC9jb2xvLWNvbXBhcmUuYyB8IDEzMyAN Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0N Cj4NCj4g77ye77yeICAgbmV0L2NvbG8uaCAgICAgICAgIHwgICAxICsNCj4NCj4g77ye77yeICAg MiBmaWxlcyBjaGFuZ2VkLCA5MSBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkNCj4NCj4g 77ye77yeDQo+DQo+IO+8nu+8niBkaWZmIC0tZ2l0IGEvbmV0L2NvbG8tY29tcGFyZS5jIGIvbmV0 L2NvbG8tY29tcGFyZS5jDQo+DQo+IO+8nu+8niBpbmRleCBiMDk0MmE0Li5lM2FmNzkxIDEwMDY0 NA0KPg0KPiDvvJ7vvJ4gLS0tIGEvbmV0L2NvbG8tY29tcGFyZS5jDQo+DQo+IO+8nu+8niArKysg Yi9uZXQvY29sby1jb21wYXJlLmMNCj4NCj4g77ye77yeIEBAIC0yOSw2ICsyOSw3IEBADQo+DQo+ IO+8nu+8niAgICNpbmNsdWRlICJxZW11L3NvY2tldHMuaCINCj4NCj4g77ye77yeICAgI2luY2x1 ZGUgInFhcGktdmlzaXQuaCINCj4NCj4g77ye77yeICAgI2luY2x1ZGUgIm5ldC9jb2xvLmgiDQo+ DQo+IO+8nu+8niArI2luY2x1ZGUgImlvL2NoYW5uZWwuaCINCj4NCj4g77ye77yeICAgI2luY2x1 ZGUgInN5c2VtdS9pb3RocmVhZC5oIg0KPg0KPiDvvJ7vvJ4NCj4NCj4g77ye77yeICAgI2RlZmlu ZSBUWVBFX0NPTE9fQ09NUEFSRSAiY29sby1jb21wYXJlIg0KPg0KPiDvvJ7vvJ4gQEAgLTgyLDEx ICs4Myw2IEBAIHR5cGVkZWYgc3RydWN0IENvbXBhcmVTdGF0ZSB7DQo+DQo+IO+8nu+8niAgICAg ICBHUXVldWUgY29ubl9saXN0DQo+DQo+IO+8nu+8niAgICAgICAvKiBoYXNodGFibGUgdG8gc2F2 ZSBjb25uZWN0aW9uICovDQo+DQo+IO+8nu+8niAgICAgICBHSGFzaFRhYmxlICpjb25uZWN0aW9u X3RyYWNrX3RhYmxlDQo+DQo+IO+8nu+8niAtICAgIC8qIGNvbXBhcmUgdGhyZWFkLCBhIHRocmVh ZCBmb3IgZWFjaCBOSUMgKi8NCj4NCj4g77ye77yeIC0gICAgUWVtdVRocmVhZCB0aHJlYWQNCj4N Cj4g77ye77yeIC0NCj4NCj4g77ye77yeIC0gICAgR01haW5Db250ZXh0ICp3b3JrZXJfY29udGV4 dA0KPg0KPiDvvJ7vvJ4gLSAgICBHTWFpbkxvb3AgKmNvbXBhcmVfbG9vcA0KPg0KPiDvvJ7vvJ4N Cj4NCj4g77ye77yeICAgICAgIC8qY29tcGFyZSBpb3RocmVhZCovDQo+DQo+IO+8nu+8niAgICAg ICBJT1RocmVhZCAqaW90aHJlYWQNCj4NCj4g77ye77yeIEBAIC05NSw2ICs5MSwxNCBAQCB0eXBl ZGVmIHN0cnVjdCBDb21wYXJlU3RhdGUgew0KPg0KPiDvvJ7vvJ4gICAgICAgUUVNVVRpbWVyICpw YWNrZXRfY2hlY2tfdGltZXINCj4NCj4g77ye77yeICAgfSBDb21wYXJlU3RhdGUNCj4NCj4g77ye 77yeDQo+DQo+IO+8nu+8niArdHlwZWRlZiBzdHJ1Y3Qgew0KPg0KPiDvvJ7vvJ4gKyAgICBDaGFy ZGV2IHBhcmVudA0KPg0KPiDvvJ7vvJ4gKyAgICBRSU9DaGFubmVsICppb2MgLypJL08gY2hhbm5l bCAqLw0KPg0KPg0KPiDvvJ5XZSBwcm9iYWJseSBkb24ndCB3YW50IHRvIG1hbmlwdWxhdGUgY2hh ciBiYWNrZW5kJ3MgaW50ZXJuYWwgaW8gDQo+IGNoYW5uZWwuDQo+DQo+IO+8nkFsbCBuZWVkIGhl cmUgaXMgdG8gYWNjZXNzIHRoZSBmcm9udGVuZCBBUEkgKGNoYXItZmUuYykgSSBiZWxpZXZlLCBh bmQNCj4NCj4g77yeaGlkZSB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24uDQo+DQo+IGNoYXIt ZmQuYyA/DQo+DQoNCkNoYXItZmUuYyBmb3Igc3VyZSB3aGljaCBtZWFucyBmcm9udGVuZCBvZiBj aGFyZGV2Lg0KDQo+IFRoZXNlIEFQSSBjYW4gb25seSB3YXRjaCBldmVudHMgaW4gdGhlIHFlbXUg bWFpbiB0aHJlYWQsIG5vdCBpbiB0aGUgDQo+IElPVGhyZWFkLg0KPg0KPiBJIGhhZCB0byB1c2Ug dGhlIHFpb19jaGFubmVsX3NvY2tldF9zZXRfYWlvX2ZkX2hhbmRsZXIgZnVuY3Rpb24gdG8NCj4N Cj4gbW9uaXRvciB0aGUgY2hhciBldmVudCBpbiB0aGUgSU9UaHJlYWQsc28gdGhlIGlvIGNoYW5u ZWwgaXMgdXNlZCBoZXINCj4NCg0KVGhlIHBvaW50IGlzIG5vdCB0b3VjaGluZyB0aGUgaW50ZXJu YWwgc3RydWN0dXJlIG9mIGNoYXJkZXYgbGlrZSBpb2MsIA0KaW5zdGVhZCBleHRlbmQgaXRzIGhl bHBlciBsaWtlIGUuZyBxZW11X2Nocl9mZV9zZXRfaGFuZGxlcnMoKSBhbmQgbGV0IGl0IA0Kc2V0 IGFpbyBoYW5kbGVycywNCg0KPiAt77yecWlvX2NoYW5uZWxfc29ja2V0X3NldF9haW9fZmRfaGFu ZGxlcg0KPg0KPiAgICAt77yeYWlvX3NldF9mZF9oYW5kbGVyDQo+DQo+DQo+IFRoYW5rcw0KPg0K Pg0KPiDvvJ7vvJ4gK30gQ29tcGFyZUNoYXJkZXYNCj4NCj4g77ye77yeICsNCj4NCj4g77ye77ye ICsjZGVmaW5lIENPTVBBUkVfQ0hBUkRFVihvYmopICAgICAgICAgXA0KPg0KPiDvvJ7vvJ4gKyAg ICBPQkpFQ1RfQ0hFQ0soQ29tcGFyZUNoYXJkZXYsIChvYmopLCBUWVBFX0NIQVJERVZfU09DS0VU KQ0KPg0KPiDvvJ7vvJ4gKw0KPg0KPiDvvJ7vvJ4gICB0eXBlZGVmIHN0cnVjdCBDb21wYXJlQ2xh c3Mgew0KPg0KPiDvvJ7vvJ4gICAgICAgT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzDQo+DQo+IO+8 nu+8niAgIH0gQ29tcGFyZUNsYXNzDQo+DQo+IO+8nu+8niBAQCAtMTA3LDYgKzExMSwxMiBAQCBl bnVtIHsNCj4NCj4g77ye77yeICAgc3RhdGljIGludCBjb21wYXJlX2Nocl9zZW5kKENoYXJCYWNr ZW5kICpvdXQsDQo+DQo+IO+8nu+8niAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90ICpidWYsDQo+DQo+IO+8nu+8niAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBzaXplKQ0KPg0KPiDvvJ7vvJ4gK3N0YXRpYyB2b2lkIGNvbXBhcmVfY2hyX3Nl dF9haW9fZmRfaGFuZGxlcnMoQ2hhckJhY2tlbmQgKmIsDQo+DQo+IO+8nu+8niArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlvQ29udGV4dCAqY3R4LA0KPg0KPiDvvJ7vvJ4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQ2FuUmVhZEhhbmRsZXIgKmZk X2Nhbl9yZWFkLA0KPg0KPiDvvJ7vvJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIElPUmVhZEhhbmRsZXIgKmZkX3JlYWQsDQo+DQo+IO+8nu+8niArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSU9FdmVudEhhbmRsZXIgKmZkX2V2ZW50LA0KPg0KPiDvvJ7v vJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSkNCj4N Cj4g77ye77yeDQo+DQo+IO+8nu+8niAgIHN0YXRpYyBnaW50IHNlcV9zb3J0ZXIoUGFja2V0ICph LCBQYWNrZXQgKmIsIGdwb2ludGVyIGRhdGEpDQo+DQo+IO+8nu+8niAgIHsNCj4NCj4g77ye77ye IEBAIC01MzQsNiArNTQ0LDMwIEBAIGVycjoNCj4NCj4g77ye77yeICAgICAgIHJldHVybiByZXQg 77ycIDAgPyByZXQgOiAtRUlPDQo+DQo+IO+8nu+8niAgIH0NCj4NCj4g77ye77yeDQo+DQo+IO+8 nu+8niArc3RhdGljIHZvaWQgY29tcGFyZV9jaHJfcmVhZCh2b2lkICpvcGFxdWUpDQo+DQo+IO+8 nu+8niArew0KPg0KPiDvvJ7vvJ4gKyAgICBDaGFyZGV2ICpjaHIgPSBvcGFxdWUNCj4NCj4g77ye 77yeICsgICAgdWludDhfdCBidWZbQ0hSX1JFQURfQlVGX0xFTl0NCj4NCj4g77ye77yeICsgICAg aW50IGxlbiwgc2l6ZQ0KPg0KPiDvvJ7vvJ4gKyAgICBpbnQgbWF4X3NpemUNCj4NCj4g77ye77ye ICsNCj4NCj4g77ye77yeICsgICAgbWF4X3NpemUgPSBxZW11X2Nocl9iZV9jYW5fd3JpdGUoY2hy KQ0KPg0KPiDvvJ7vvJ4gKyAgICBpZiAobWF4X3NpemUg77ycPSAwKSB7DQo+DQo+IO+8nu+8niAr ICAgICAgICByZXR1cm4NCj4NCj4g77ye77yeICsgICAgfQ0KPg0KPiDvvJ7vvJ4gKw0KPg0KPiDv vJ7vvJ4gKyAgICBsZW4gPSBzaXplb2YoYnVmKQ0KPg0KPiDvvJ7vvJ4gKyAgICBpZiAobGVuIO+8 niBtYXhfc2l6ZSkgew0KPg0KPiDvvJ7vvJ4gKyAgICAgICAgbGVuID0gbWF4X3NpemUNCj4NCj4g 77ye77yeICsgICAgfQ0KPg0KPiDvvJ7vvJ4gKyAgICBzaXplID0gQ0hBUkRFVl9HRVRfQ0xBU1Mo Y2hyKS3vvJ5jaHJfc3luY19yZWFkKGNociwgKHZvaWQgKilidWYsIA0KPiBsZW4pDQo+DQo+IO+8 nu+8niArICAgIGlmIChzaXplID09IDApIHsNCj4NCj4g77ye77yeICsgICAgICAgIHJldHVybg0K Pg0KPiDvvJ7vvJ4gKyAgICB9IGVsc2UgaWYgKHNpemUg77yeIDApIHsNCj4NCj4g77ye77yeICsg ICAgICAgIHFlbXVfY2hyX2JlX3dyaXRlKGNociwgYnVmLCBzaXplKQ0KPg0KPiDvvJ7vvJ4gKyAg ICB9DQo+DQo+IO+8nu+8niArfQ0KPg0KPiDvvJ7vvJ4gKw0KPg0KPiDvvJ7vvJ4gICBzdGF0aWMg aW50IGNvbXBhcmVfY2hyX2Nhbl9yZWFkKHZvaWQgKm9wYXF1ZSkNCj4NCj4g77ye77yeICAgew0K Pg0KPiDvvJ7vvJ4gICAgICAgcmV0dXJuIENPTVBBUkVfUkVBRF9MRU5fTUFYDQo+DQo+IO+8nu+8 niBAQCAtNTUwLDggKzU4NCw4IEBAIHN0YXRpYyB2b2lkIGNvbXBhcmVfcHJpX2Nocl9pbih2b2lk ICpvcGFxdWUsIA0KPiBjb25zdCB1aW50OF90ICpidWYsIGludCBzaXplKQ0KPg0KPiDvvJ7vvJ4N Cj4NCj4g77ye77yeICAgICAgIHJldCA9IG5ldF9maWxsX3JzdGF0ZSgmcy3vvJ5wcmlfcnMsIGJ1 Ziwgc2l6ZSkNCj4NCj4g77ye77yeICAgICAgIGlmIChyZXQgPT0gLTEpIHsNCj4NCj4g77ye77ye IC0gICAgICAgIHFlbXVfY2hyX2ZlX3NldF9oYW5kbGVycygmcy3vvJ5jaHJfcHJpX2luLCBOVUxM LCBOVUxMLCBOVUxMLA0KPg0KPiDvvJ7vvJ4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsIE5VTEwsIHRydWUpDQo+DQo+IO+8nu+8niArICBjb21wYXJlX2Nocl9zZXRfYWlv X2ZkX2hhbmRsZXJzKCZzLe+8nmNocl9wcmlfaW4sIHMt77yeY3R4LA0KPg0KPiDvvJ7vvJ4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp DQo+DQo+IO+8nu+8niAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJjb2xvLWNvbXBhcmUgcHJpbWFy eV9pbiBlcnJvciIpDQo+DQo+IO+8nu+8niAgICAgICB9DQo+DQo+IO+8nu+8niAgIH0NCj4NCj4g 77ye77yeIEBAIC01NjcsOCArNjAxLDggQEAgc3RhdGljIHZvaWQgY29tcGFyZV9zZWNfY2hyX2lu KHZvaWQgKm9wYXF1ZSwgDQo+IGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IHNpemUpDQo+DQo+IO+8 nu+8ng0KPg0KPiDvvJ7vvJ4gICAgICAgcmV0ID0gbmV0X2ZpbGxfcnN0YXRlKCZzLe+8nnNlY19y cywgYnVmLCBzaXplKQ0KPg0KPiDvvJ7vvJ4gICAgICAgaWYgKHJldCA9PSAtMSkgew0KPg0KPiDv vJ7vvJ4gLSAgICAgICAgcWVtdV9jaHJfZmVfc2V0X2hhbmRsZXJzKCZzLe+8nmNocl9zZWNfaW4s IE5VTEwsIE5VTEwsIE5VTEwsDQo+DQo+IO+8nu+8niAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgTlVMTCwgdHJ1ZSkNCj4NCj4g77ye77yeICsgIGNvbXBhcmVfY2hyX3Nl dF9haW9fZmRfaGFuZGxlcnMoJnMt77yeY2hyX3NlY19pbiwgcy3vvJ5jdHgsDQo+DQo+IO+8nu+8 niArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCkNCj4NCj4g77ye77yeICAgICAgICAgICBlcnJvcl9yZXBvcnQoImNvbG8tY29tcGFyZSBz ZWNvbmRhcnlfaW4gZXJyb3IiKQ0KPg0KPiDvvJ7vvJ4gICAgICAgfQ0KPg0KPiDvvJ7vvJ4gICB9 DQo+DQo+IO+8nu+8niBAQCAtNjA1LDM0ICs2MzksNTcgQEAgc3RhdGljIHZvaWQgDQo+IGNvbG9f Y29tcGFyZV90aW1lcl9kZWwoQ29tcGFyZVN0YXRlICpzKQ0KPg0KPiDvvJ7vvJ4gICAgICAgfQ0K Pg0KPiDvvJ7vvJ4gICB9DQo+DQo+IO+8nu+8ng0KPg0KPiDvvJ7vvJ4gLXN0YXRpYyB2b2lkICpj b2xvX2NvbXBhcmVfdGhyZWFkKHZvaWQgKm9wYXF1ZSkNCj4NCj4g77ye77yeIC17DQo+DQo+IO+8 nu+8niAtICAgIENvbXBhcmVTdGF0ZSAqcyA9IG9wYXF1ZQ0KPg0KPiDvvJ7vvJ4gLQ0KPg0KPiDv vJ7vvJ4gLSAgICBzLe+8nndvcmtlcl9jb250ZXh0ID0gZ19tYWluX2NvbnRleHRfbmV3KCkNCj4N Cj4g77ye77yeIC0NCj4NCj4g77ye77yeIC0gICAgcWVtdV9jaHJfZmVfc2V0X2hhbmRsZXJzKCZz Le+8nmNocl9wcmlfaW4sIGNvbXBhcmVfY2hyX2Nhbl9yZWFkLA0KPg0KPiDvvJ7vvJ4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9wcmlfY2hyX2luLCBOVUxMLCBzLCANCj4gcy3v vJ53b3JrZXJfY29udGV4dCwgdHJ1ZSkNCj4NCj4g77ye77yeIC0gICAgcWVtdV9jaHJfZmVfc2V0 X2hhbmRsZXJzKCZzLe+8nmNocl9zZWNfaW4sIGNvbXBhcmVfY2hyX2Nhbl9yZWFkLA0KPg0KPiDv vJ7vvJ4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9zZWNfY2hyX2luLCBOVUxM LCBzLCANCj4gcy3vvJ53b3JrZXJfY29udGV4dCwgdHJ1ZSkNCj4NCj4g77ye77yeIC0NCj4NCj4g 77ye77yeIC0gICAgcy3vvJ5jb21wYXJlX2xvb3AgPSBnX21haW5fbG9vcF9uZXcocy3vvJ53b3Jr ZXJfY29udGV4dCwgRkFMU0UpDQo+DQo+IO+8nu+8niAtDQo+DQo+IO+8nu+8niAtICAgIGdfbWFp bl9sb29wX3J1bihzLe+8nmNvbXBhcmVfbG9vcCkNCj4NCj4g77ye77yeIC0NCj4NCj4g77ye77ye IC0gICAgZ19tYWluX2xvb3BfdW5yZWYocy3vvJ5jb21wYXJlX2xvb3ApDQo+DQo+IO+8nu+8niAt ICAgIGdfbWFpbl9jb250ZXh0X3VucmVmKHMt77yed29ya2VyX2NvbnRleHQpDQo+DQo+IO+8nu+8 niAtICAgIHJldHVybiBOVUxMDQo+DQo+IO+8nu+8niAtfQ0KPg0KPiDvvJ7vvJ4NCj4NCj4g77ye 77yeICAgc3RhdGljIHZvaWQgY29sb19jb21wYXJlX2lvdGhyZWFkKENvbXBhcmVTdGF0ZSAqcykN Cj4NCj4g77ye77yeICAgew0KPg0KPiDvvJ7vvJ4gICAgICAgb2JqZWN0X3JlZihPQkpFQ1Qocy3v vJ5pb3RocmVhZCkpDQo+DQo+IO+8nu+8niAgICAgICBzLe+8nmN0eCA9IGlvdGhyZWFkX2dldF9h aW9fY29udGV4dChzLe+8nmlvdGhyZWFkKQ0KPg0KPiDvvJ7vvJ4NCj4NCj4g77ye77yeICsgICAg Y29tcGFyZV9jaHJfc2V0X2Fpb19mZF9oYW5kbGVycygmcy3vvJ5jaHJfcHJpX2luLCBzLe+8nmN0 eCwNCj4NCj4g77ye77yeICsgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVfY2hyX2Nhbl9yZWFk LA0KPg0KPiDvvJ7vvJ4gKyAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9wcmlfY2hyX2luLA0K Pg0KPiDvvJ7vvJ4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4NCj4g77ye77yeICsgICAg ICAgICAgICAgICAgICAgIHMpDQo+DQo+IO+8nu+8niArICAgIGNvbXBhcmVfY2hyX3NldF9haW9f ZmRfaGFuZGxlcnMoJnMt77yeY2hyX3NlY19pbiwgcy3vvJ5jdHgsDQo+DQo+IO+8nu+8niArICAg ICAgICAgICAgICAgICAgICBjb21wYXJlX2Nocl9jYW5fcmVhZCwNCj4NCj4g77ye77yeICsgICAg ICAgICAgICAgICAgICAgIGNvbXBhcmVfc2VjX2Nocl9pbiwNCj4NCj4g77ye77yeICsgICAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+DQo+IO+8nu+8niArICAgICAgICAgICAgICAgICAgICBzKQ0K Pg0KPiDvvJ7vvJ4gKw0KPg0KPiDvvJ7vvJ4gICAgICAgY29sb19jb21wYXJlX3RpbWVyX2luaXQo cykNCj4NCj4g77ye77yeICAgfQ0KPg0KPiDvvJ7vvJ4NCj4NCj4g77ye77yeICtzdGF0aWMgdm9p ZCBjb21wYXJlX2Nocl9zZXRfYWlvX2ZkX2hhbmRsZXJzKENoYXJCYWNrZW5kICpiLA0KPg0KPiDv vJ7vvJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpb0NvbnRleHQgKmN0 eCwNCj4NCj4g77ye77yeICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0Nh blJlYWRIYW5kbGVyICpmZF9jYW5fcmVhZCwNCj4NCj4g77ye77yeICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJT1JlYWRIYW5kbGVyICpmZF9yZWFkLA0KPg0KPiDvvJ7vvJ4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPRXZlbnRIYW5kbGVyICpmZF9l dmVudCwNCj4NCj4g77ye77yeICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpvcGFxdWUpDQo+DQo+IO+8nu+8niArew0KPg0KPiDvvJ7vvJ4gKyAgICBDb21wYXJlQ2hh cmRldiAqcw0KPg0KPiDvvJ7vvJ4gKw0KPg0KPiDvvJ7vvJ4gKyAgICBpZiAoIWIt77yeY2hyKSB7 DQo+DQo+IO+8nu+8niArICAgICAgICByZXR1cm4NCj4NCj4g77ye77yeICsgICAgfQ0KPg0KPiDv vJ7vvJ4gKyAgICBzID0gQ09NUEFSRV9DSEFSREVWKGIt77yeY2hyKQ0KPg0KPiDvvJ7vvJ4gKyAg ICBpZiAoIXMt77yeaW9jKSB7DQo+DQo+IO+8nu+8niArICAgICAgICByZXR1cm4NCj4NCj4g77ye 77yeICsgICAgfQ0KPg0KPg0KPiDvvJ5TbyB0aGlzIGlzIGhhY2t5LCB5b3UgY2FuIHJlZmVyIGhv dyB2aG9zdC11c2VyIHZhbGlkYXRlIHVkcCBzb2NrZXQgY2hhcg0KPg0KPiDvvJ5iYWNrZW5kLg0K Pg0KPiBJIHdpbGwgaW52ZXN0aWdhdGUuDQo+DQo+DQo+IFRoYW5rcw0KPg0KPg0KPiDvvJ7vvJ4g Kw0KPg0KPiDvvJ7vvJ4gKyAgICBiLe+8nmNocl9jYW5fcmVhZCA9IGZkX2Nhbl9yZWFkDQo+DQo+ IO+8nu+8niArICAgIGIt77yeY2hyX3JlYWQgPSBmZF9yZWFkDQo+DQo+IO+8nu+8niArICAgIGIt 77yeY2hyX2V2ZW50ID0gZmRfZXZlbnQNCj4NCj4g77ye77yeICsgICAgYi3vvJ5vcGFxdWUgPSBv cGFxdWUNCj4NCj4g77ye77yeICsgICAgcmVtb3ZlX2ZkX2luX3dhdGNoKGIt77yeY2hyKQ0KPg0K PiDvvJ7vvJ4gKw0KPg0KPiDvvJ7vvJ4gKyAgICBpZiAoYi3vvJ5jaHJfcmVhZCkgew0KPg0KPiDv vJ7vvJ4gKyAgICAgICAgcWlvX2NoYW5uZWxfc2V0X2Fpb19mZF9oYW5kbGVyKHMt77yeaW9jLCBj dHgsDQo+DQo+IO+8nu+8niArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJl X2Nocl9yZWFkLCBOVUxMLCBiLe+8nmNocikNCj4NCj4g77ye77yeICsgICAgfSBlbHNlIHsNCj4N Cj4g77ye77yeICsgICAgICAgIHFpb19jaGFubmVsX3NldF9haW9fZmRfaGFuZGxlcihzLe+8nmlv YywgY3R4LCBOVUxMLCBOVUxMLCANCj4gTlVMTCkNCj4NCj4NCj4g77yeU28gaW5zdGVhZCBvZiBk b2luZyBzdWNoIGhhY2ssIGhvdyBhYm91dCBwYXNzaW5nIGEgQWlvQ29udGV4dCAqIGluc3RlYWQN Cj4NCj4g77yeb2YgR01haW5Db250ZXh0ICogdG8gcWVtdV9jaHJfZmVfc2V0X2hhbmRsZXJzPw0K Pg0KPiBJT1RocmVhZCBBaW9Db250ZXh0IC3vvJ5HU291cmNlIC3vvJ4gR01haW5Db250ZXh0ICBp cyBOVUxMDQo+DQo+IGlmIHdlIHN0aWxsIHVzZSB0aGUgcWVtdV9jaHJfZmVfc2V0X2hhbmRsZXJz LCBpdCB3aWxsIHVzZSB0aGUgcWVtdSANCj4gbWFpbiB0aHJlYWQnIEdNYWluQ29udGV4dCwNCj4N Cj4gdGhlbiBpbyB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZCBpbiB0aGUgcWVtdSBtYWluIHRocmVh ZC4NCj4NCj4gc28gSSBlbmNhcHN1bGF0ZSBhIGZ1bmN0aW9uKGNvbXBhcmVfY2hyX3NldF9haW9f ZmRfaGFuZGxlcnMpIHRvIA0KPiBtb25pdG9yIGNoYXIgZmQgaW4gdGhlIElPVGhyZWFkLg0KPg0K Pg0KDQpBcyBhYm92ZSwgd2Ugc2hvdWxkIGRvIHRoaXMgaW5zaWRlIHFlbXUtZmUuYyBub3QgaGVy ZS4NCg0KVGhhbmtzDQoNCj4gVGhhbmtzDQo+DQo+DQo+IO+8nlRoYW5rcw0KPg0KPg0KPiDvvJ7v vJ4gKyAgICB9DQo+DQo+IO+8nu+8niArfQ0KPg0KPiDvvJ7vvJ4gKw0KPg0KPiDvvJ7vvJ4gICBz dGF0aWMgY2hhciAqY29tcGFyZV9nZXRfcHJpX2luZGV2KE9iamVjdCAqb2JqLCBFcnJvciAqKmVy cnApDQo+DQo+IO+8nu+8niAgIHsNCj4NCj4g77ye77yeICAgICAgIENvbXBhcmVTdGF0ZSAqcyA9 IENPTE9fQ09NUEFSRShvYmopDQo+DQo+IO+8nu+8niBAQCAtNzM2LDggKzc5Myw2IEBAIHN0YXRp YyB2b2lkIGNvbG9fY29tcGFyZV9jb21wbGV0ZShVc2VyQ3JlYXRhYmxlIA0KPiAqdWMsIEVycm9y ICoqZXJycCkNCj4NCj4g77ye77yeICAgew0KPg0KPiDvvJ7vvJ4gICAgICAgQ29tcGFyZVN0YXRl ICpzID0gQ09MT19DT01QQVJFKHVjKQ0KPg0KPiDvvJ7vvJ4gICAgICAgQ2hhcmRldiAqY2hyDQo+ DQo+IO+8nu+8niAtICAgIGNoYXIgdGhyZWFkX25hbWVbNjRdDQo+DQo+IO+8nu+8niAtICAgIHN0 YXRpYyBpbnQgY29tcGFyZV9pZA0KPg0KPiDvvJ7vvJ4NCj4NCj4g77ye77yeICAgICAgIGlmICgh cy3vvJ5wcmlfaW5kZXYgfHwgIXMt77yec2VjX2luZGV2IHx8ICFzLe+8nm91dGRldiB8fCANCj4g IXMt77yeaW90aHJlYWQpIHsNCj4NCj4g77ye77yeICAgICAgICAgICBlcnJvcl9zZXRnKGVycnAs ICJjb2xvIGNvbXBhcmUgbmVlZHMgJ3ByaW1hcnlfaW4nICwiDQo+DQo+IO+8nu+8niBAQCAtNzc2 LDEyICs4MzEsNiBAQCBzdGF0aWMgdm9pZCANCj4gY29sb19jb21wYXJlX2NvbXBsZXRlKFVzZXJD cmVhdGFibGUgKnVjLCBFcnJvciAqKmVycnApDQo+DQo+IO+8nu+8niBnX2ZyZWUsDQo+DQo+IO+8 nu+8niBjb25uZWN0aW9uX2Rlc3Ryb3kpDQo+DQo+IO+8nu+8ng0KPg0KPiDvvJ7vvJ4gLSAgICBz cHJpbnRmKHRocmVhZF9uYW1lLCAiY29sby1jb21wYXJlICVkIiwgY29tcGFyZV9pZCkNCj4NCj4g 77ye77yeIC0gICAgcWVtdV90aHJlYWRfY3JlYXRlKCZzLe+8nnRocmVhZCwgdGhyZWFkX25hbWUs DQo+DQo+IO+8nu+8niAtICAgICAgICAgICAgICAgICAgICAgICBjb2xvX2NvbXBhcmVfdGhyZWFk LCBzLA0KPg0KPiDvvJ7vvJ4gLSAgICAgICAgICAgICAgICAgICAgICAgUUVNVV9USFJFQURfSk9J TkFCTEUpDQo+DQo+IO+8nu+8niAtICAgIGNvbXBhcmVfaWQrKw0KPg0KPiDvvJ7vvJ4gLQ0KPg0K PiDvvJ7vvJ4gICAgICAgY29sb19jb21wYXJlX2lvdGhyZWFkKHMpDQo+DQo+IO+8nu+8ng0KPg0K PiDvvJ7vvJ4gICAgICAgcmV0dXJuDQo+DQo+IO+8nu+8niBAQCAtODM0LDE2ICs4ODMsMTQgQEAg c3RhdGljIHZvaWQgY29sb19jb21wYXJlX2ZpbmFsaXplKE9iamVjdCAqb2JqKQ0KPg0KPiDvvJ7v vJ4gICB7DQo+DQo+IO+8nu+8niAgICAgICBDb21wYXJlU3RhdGUgKnMgPSBDT0xPX0NPTVBBUkUo b2JqKQ0KPg0KPiDvvJ7vvJ4NCj4NCj4g77ye77yeIC0gICAgcWVtdV9jaHJfZmVfc2V0X2hhbmRs ZXJzKCZzLe+8nmNocl9wcmlfaW4sIE5VTEwsIE5VTEwsIE5VTEwsIA0KPiBOVUxMLA0KPg0KPiDv vJ7vvJ4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy3vvJ53b3JrZXJfY29udGV4dCwg dHJ1ZSkNCj4NCj4g77ye77yeIC0gICAgcWVtdV9jaHJfZmVfc2V0X2hhbmRsZXJzKCZzLe+8nmNo cl9zZWNfaW4sIE5VTEwsIE5VTEwsIE5VTEwsIA0KPiBOVUxMLA0KPg0KPiDvvJ7vvJ4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcy3vvJ53b3JrZXJfY29udGV4dCwgdHJ1ZSkNCj4NCj4g 77ye77yeICsgICAgY29tcGFyZV9jaHJfc2V0X2Fpb19mZF9oYW5kbGVycygmcy3vvJ5jaHJfcHJp X2luLCBzLe+8nmN0eCwNCj4NCj4g77ye77yeICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQ0KPg0KPiDvvJ7vvJ4gKyAgICBjb21wYXJl X2Nocl9zZXRfYWlvX2ZkX2hhbmRsZXJzKCZzLe+8nmNocl9zZWNfaW4sIHMt77yeY3R4LA0KPg0K PiDvvJ7vvJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwpDQo+DQo+IO+8nu+8niArDQo+DQo+IO+8nu+8niAgICAgICBxZW11X2Nocl9m ZV9kZWluaXQoJnMt77yeY2hyX291dCkNCj4NCj4g77ye77yeICAgICAgIGNvbG9fY29tcGFyZV90 aW1lcl9kZWwocykNCj4NCj4g77ye77yeDQo+DQo+IO+8nu+8niAtICAgIGdfbWFpbl9sb29wX3F1 aXQocy3vvJ5jb21wYXJlX2xvb3ApDQo+DQo+IO+8nu+8niAtICAgIHFlbXVfdGhyZWFkX2pvaW4o JnMt77yedGhyZWFkKQ0KPg0KPiDvvJ7vvJ4gLQ0KPg0KPiDvvJ7vvJ4gICAgICAgLyogUmVsZWFz ZSBhbGwgdW5oYW5kbGVkIHBhY2tldHMgYWZ0ZXIgY29tcGFyZSB0aGVhZCBleGl0ZWQgKi8NCj4N Cj4g77ye77yeICAgICAgIGdfcXVldWVfZm9yZWFjaCgmcy3vvJ5jb25uX2xpc3QsIGNvbG9fZmx1 c2hfcGFja2V0cywgcykNCj4NCj4g77ye77yeDQo+DQo+IO+8nu+8niBkaWZmIC0tZ2l0IGEvbmV0 L2NvbG8uaCBiL25ldC9jb2xvLmgNCj4NCj4g77ye77yeIGluZGV4IDdjNTI0ZjMuLjkzNmRlYTEg MTAwNjQ0DQo+DQo+IO+8nu+8niAtLS0gYS9uZXQvY29sby5oDQo+DQo+IO+8nu+8niArKysgYi9u ZXQvY29sby5oDQo+DQo+IO+8nu+8niBAQCAtODQsNSArODQsNiBAQCBDb25uZWN0aW9uICpjb25u ZWN0aW9uX2dldChHSGFzaFRhYmxlIA0KPiAqY29ubmVjdGlvbl90cmFja190YWJsZSwNCj4NCj4g 77ye77yeICAgdm9pZCBjb25uZWN0aW9uX2hhc2h0YWJsZV9yZXNldChHSGFzaFRhYmxlIA0KPiAq Y29ubmVjdGlvbl90cmFja190YWJsZSkNCj4NCj4g77ye77yeICAgUGFja2V0ICpwYWNrZXRfbmV3 KGNvbnN0IHZvaWQgKmRhdGEsIGludCBzaXplKQ0KPg0KPiDvvJ7vvJ4gICB2b2lkIHBhY2tldF9k ZXN0cm95KHZvaWQgKm9wYXF1ZSwgdm9pZCAqdXNlcl9kYXRhKQ0KPg0KPiDvvJ7vvJ4gK3ZvaWQg cmVtb3ZlX2ZkX2luX3dhdGNoKENoYXJkZXYgKmNocikNCj4NCj4g77ye77yeDQo+DQo+IO+8nu+8 niAgICNlbmRpZiAvKiBRRU1VX0NPTE9fUFJPWFlfSCAqLw0KPg0KPg0KPg0KPg0KPg0KPiDljp/l p4vpgq7ku7YNCj4gKuWPkeS7tuS6uu+8mirvvJxqYXNvd2FuZ0ByZWRoYXQuY29t77yeDQo+ICrm lLbku7bkurrvvJoq546L5YuHMTAxNzA1MzDvvJx6aGFuZy56aGFuZ2hhaWxpYW5nQGh1YXdlaS5j b23vvJ7vvJx6aGFuZ2NoZW4uZm5zdEBjbi5mdWppdHN1LmNvbe+8ng0KPiAq5oqE6YCB5Lq677ya Ku+8nGxpemhpamlhbkBjbi5mdWppdHN1LmNvbe+8nu+8nHFlbXUtZGV2ZWxAbm9uZ251Lm9yZ++8 nueOi+W5vzEwMTY1OTkyDQo+ICrml6Ug5pyfIO+8mioyMDE35bm0MDbmnIgwN+aXpSAxNjozNQ0K PiAq5Li7IOmimCDvvJoqKlJlOiBbUEFUQ0h2MiAwMi8wNF0gY29sby1jb21wYXJlOiBQcm9jZXNz IHBhY3RrZXRzIGluIHRoZSANCj4gSU9UaHJlYWQgb2Z0aGUgcHJpbWFyeSoNCj4NCj4NCj4NCj4N Cj4gT24gMjAxN+W5tDA25pyIMDXml6UgMTg6NDQsIFlvbmcgV2FuZyB3cm90ZToNCj4g77yeIEZy b206IFdhbmcgWW9uZyDvvJx3YW5nLnlvbmcxNTVAenRlLmNvbS5jbu+8ng0KPiDvvJ4NCj4g77ye IFByb2Nlc3MgcGFjdGtldHMgaW4gdGhlIElPVGhyZWFkIHdoaWNoIGFycml2ZWQgb3ZlciB0aGUg c29ja2V0Lg0KPiDvvJ4gd2UgdXNlIHFpb19jaGFubmVsX3NldF9haW9fZmRfaGFuZGxlciB0byBz ZXQgdGhlIGhhbmRsZXJzIG9uIHRoZQ0KPiDvvJ4gSU9UaHJlYWQgQWlvQ29udGV4dC50aGVuIHRo ZSBwYWNrZXRzIGZyb20gdGhlIHByaW1hcnkgYW5kIHRoZSBzZWNvbmRhcnkNCj4g77yeIGFyZSBw cm9jZXNzZWQgaW4gdGhlIElPVGhyZWFkLg0KPiDvvJ4gRmluYWxseSByZW1vdmUgdGhlIGNvbG8t Y29tcGFyZSB0aHJlYWQgdXNpbmcgdGhlIElPVGhyZWFkIGluc3RlYWQuDQo+IO+8ng0KPiDvvJ4g U2lnbmVkLW9mZi1ieTogV2FuZyBZb25n77ycd2FuZy55b25nMTU1QHp0ZS5jb20uY27vvJ4NCj4g 77yeIFNpZ25lZC1vZmYtYnk6IFdhbmcgR3VhbmfvvJx3YW5nLmd1YW5nNTVAenRlLmNvbS5jbu+8 ng0KPiDvvJ4gLS0tDQo+IO+8niAgIG5ldC9jb2xvLWNvbXBhcmUuYyB8IDEzMyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQ0KPiDvvJ4gICBuZXQv Y29sby5oICAgICAgICAgfCAgIDEgKw0KPiDvvJ4gICAyIGZpbGVzIGNoYW5nZWQsIDkxIGluc2Vy dGlvbnMoKyksIDQzIGRlbGV0aW9ucygtKQ0KPiDvvJ4NCj4g77yeIGRpZmYgLS1naXQgYS9uZXQv Y29sby1jb21wYXJlLmMgYi9uZXQvY29sby1jb21wYXJlLmMNCj4g77yeIGluZGV4IGIwOTQyYTQu LmUzYWY3OTEgMTAwNjQ0DQo+IO+8niAtLS0gYS9uZXQvY29sby1jb21wYXJlLmMNCj4g77yeICsr KyBiL25ldC9jb2xvLWNvbXBhcmUuYw0KPiDvvJ4gQEAgLTI5LDYgKzI5LDcgQEANCj4g77yeICAg I2luY2x1ZGUgInFlbXUvc29ja2V0cy5oIg0KPiDvvJ4gICAjaW5jbHVkZSAicWFwaS12aXNpdC5o Ig0KPiDvvJ4gICAjaW5jbHVkZSAibmV0L2NvbG8uaCINCj4g77yeICsjaW5jbHVkZSAiaW8vY2hh bm5lbC5oIg0KPiDvvJ4gICAjaW5jbHVkZSAic3lzZW11L2lvdGhyZWFkLmgiDQo+IO+8ng0KPiDv vJ4gICAjZGVmaW5lIFRZUEVfQ09MT19DT01QQVJFICJjb2xvLWNvbXBhcmUiDQo+IO+8niBAQCAt ODIsMTEgKzgzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29tcGFyZVN0YXRlIHsNCj4g77yeICAgICAg IEdRdWV1ZSBjb25uX2xpc3QNCj4g77yeICAgICAgIC8qIGhhc2h0YWJsZSB0byBzYXZlIGNvbm5l Y3Rpb24gKi8NCj4g77yeICAgICAgIEdIYXNoVGFibGUgKmNvbm5lY3Rpb25fdHJhY2tfdGFibGUN Cj4g77yeIC0gICAgLyogY29tcGFyZSB0aHJlYWQsIGEgdGhyZWFkIGZvciBlYWNoIE5JQyAqLw0K PiDvvJ4gLSAgICBRZW11VGhyZWFkIHRocmVhZA0KPiDvvJ4gLQ0KPiDvvJ4gLSAgICBHTWFpbkNv bnRleHQgKndvcmtlcl9jb250ZXh0DQo+IO+8niAtICAgIEdNYWluTG9vcCAqY29tcGFyZV9sb29w DQo+IO+8ng0KPiDvvJ4gICAgICAgLypjb21wYXJlIGlvdGhyZWFkKi8NCj4g77yeICAgICAgIElP VGhyZWFkICppb3RocmVhZA0KPiDvvJ4gQEAgLTk1LDYgKzkxLDE0IEBAIHR5cGVkZWYgc3RydWN0 IENvbXBhcmVTdGF0ZSB7DQo+IO+8niAgICAgICBRRU1VVGltZXIgKnBhY2tldF9jaGVja190aW1l cg0KPiDvvJ4gICB9IENvbXBhcmVTdGF0ZQ0KPiDvvJ4NCj4g77yeICt0eXBlZGVmIHN0cnVjdCB7 DQo+IO+8niArICAgIENoYXJkZXYgcGFyZW50DQo+IO+8niArICAgIFFJT0NoYW5uZWwgKmlvYyAv KkkvTyBjaGFubmVsICovDQo+DQo+IFdlIHByb2JhYmx5IGRvbid0IHdhbnQgdG8gbWFuaXB1bGF0 ZSBjaGFyIGJhY2tlbmQncyBpbnRlcm5hbCBpbyBjaGFubmVsLg0KPiBBbGwgbmVlZCBoZXJlIGlz IHRvIGFjY2VzcyB0aGUgZnJvbnRlbmQgQVBJIChjaGFyLWZlLmMpIEkgYmVsaWV2ZSwgYW5kDQo+ IGhpZGUgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uLg0KPg0KPiDvvJ4gK30gQ29tcGFyZUNo YXJkZXYNCj4g77yeICsNCj4g77yeICsjZGVmaW5lIENPTVBBUkVfQ0hBUkRFVihvYmopICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4g77yeICsgICAgT0JKRUNUX0NIRUNL KENvbXBhcmVDaGFyZGV2LCAob2JqKSwgVFlQRV9DSEFSREVWX1NPQ0tFVCkNCj4g77yeICsNCj4g 77yeICAgdHlwZWRlZiBzdHJ1Y3QgQ29tcGFyZUNsYXNzIHsNCj4g77yeICAgICAgIE9iamVjdENs YXNzIHBhcmVudF9jbGFzcw0KPiDvvJ4gICB9IENvbXBhcmVDbGFzcw0KPiDvvJ4gQEAgLTEwNyw2 ICsxMTEsMTIgQEAgZW51bSB7DQo+IO+8niAgIHN0YXRpYyBpbnQgY29tcGFyZV9jaHJfc2VuZChD aGFyQmFja2VuZCAqb3V0LA0KPiDvvJ4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCAqYnVmLA0KPiDvvJ4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3Qgc2l6ZSkNCj4g77yeICtzdGF0aWMgdm9pZCBjb21wYXJlX2Nocl9zZXRfYWlvX2ZkX2hh bmRsZXJzKENoYXJCYWNrZW5kICpiLA0KPiDvvJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFpb0NvbnRleHQgKmN0eCwNCj4g77yeICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJT0NhblJlYWRIYW5kbGVyICpmZF9jYW5fcmVhZCwNCj4g77yeICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT1JlYWRIYW5kbGVyICpmZF9yZWFkLA0K PiDvvJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPRXZlbnRIYW5kbGVy ICpmZF9ldmVudCwNCj4g77yeICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpvcGFxdWUpDQo+IO+8ng0KPiDvvJ4gICBzdGF0aWMgZ2ludCBzZXFfc29ydGVyKFBhY2tl dCAqYSwgUGFja2V0ICpiLCBncG9pbnRlciBkYXRhKQ0KPiDvvJ4gICB7DQo+IO+8niBAQCAtNTM0 LDYgKzU0NCwzMCBAQCBlcnI6DQo+IO+8niAgICAgICByZXR1cm4gcmV0IO+8nCAwID8gcmV0IDog LUVJTw0KPiDvvJ4gICB9DQo+IO+8ng0KPiDvvJ4gK3N0YXRpYyB2b2lkIGNvbXBhcmVfY2hyX3Jl YWQodm9pZCAqb3BhcXVlKQ0KPiDvvJ4gK3sNCj4g77yeICsgICAgQ2hhcmRldiAqY2hyID0gb3Bh cXVlDQo+IO+8niArICAgIHVpbnQ4X3QgYnVmW0NIUl9SRUFEX0JVRl9MRU5dDQo+IO+8niArICAg IGludCBsZW4sIHNpemUNCj4g77yeICsgICAgaW50IG1heF9zaXplDQo+IO+8niArDQo+IO+8niAr ICAgIG1heF9zaXplID0gcWVtdV9jaHJfYmVfY2FuX3dyaXRlKGNocikNCj4g77yeICsgICAgaWYg KG1heF9zaXplIO+8nD0gMCkgew0KPiDvvJ4gKyAgICAgICAgcmV0dXJuDQo+IO+8niArICAgIH0N Cj4g77yeICsNCj4g77yeICsgICAgbGVuID0gc2l6ZW9mKGJ1ZikNCj4g77yeICsgICAgaWYgKGxl biDvvJ4gbWF4X3NpemUpIHsNCj4g77yeICsgICAgICAgIGxlbiA9IG1heF9zaXplDQo+IO+8niAr ICAgIH0NCj4g77yeICsgICAgc2l6ZSA9IENIQVJERVZfR0VUX0NMQVNTKGNocikt77yeY2hyX3N5 bmNfcmVhZChjaHIsICh2b2lkICopYnVmLCBsZW4pDQo+IO+8niArICAgIGlmIChzaXplID09IDAp IHsNCj4g77yeICsgICAgICAgIHJldHVybg0KPiDvvJ4gKyAgICB9IGVsc2UgaWYgKHNpemUg77ye IDApIHsNCj4g77yeICsgICAgICAgIHFlbXVfY2hyX2JlX3dyaXRlKGNociwgYnVmLCBzaXplKQ0K PiDvvJ4gKyAgICB9DQo+IO+8niArfQ0KPiDvvJ4gKw0KPiDvvJ4gICBzdGF0aWMgaW50IGNvbXBh cmVfY2hyX2Nhbl9yZWFkKHZvaWQgKm9wYXF1ZSkNCj4g77yeICAgew0KPiDvvJ4gICAgICAgcmV0 dXJuIENPTVBBUkVfUkVBRF9MRU5fTUFYDQo+IO+8niBAQCAtNTUwLDggKzU4NCw4IEBAIHN0YXRp YyB2b2lkIGNvbXBhcmVfcHJpX2Nocl9pbih2b2lkICpvcGFxdWUsIGNvbnN0IHVpbnQ4X3QgKmJ1 ZiwgaW50IHNpemUpDQo+IO+8ng0KPiDvvJ4gICAgICAgcmV0ID0gbmV0X2ZpbGxfcnN0YXRlKCZz Le+8nnByaV9ycywgYnVmLCBzaXplKQ0KPiDvvJ4gICAgICAgaWYgKHJldCA9PSAtMSkgew0KPiDv vJ4gLSAgICAgICAgcWVtdV9jaHJfZmVfc2V0X2hhbmRsZXJzKCZzLe+8nmNocl9wcmlfaW4sIE5V TEwsIE5VTEwsIE5VTEwsDQo+IO+8niAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgTlVMTCwgdHJ1ZSkNCj4g77yeICsgICAgICAgIGNvbXBhcmVfY2hyX3NldF9haW9fZmRf aGFuZGxlcnMoJnMt77yeY2hyX3ByaV9pbiwgcy3vvJ5jdHgsDQo+IO+8niArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkNCj4g77yeICAg ICAgICAgICBlcnJvcl9yZXBvcnQoImNvbG8tY29tcGFyZSBwcmltYXJ5X2luIGVycm9yIikNCj4g 77yeICAgICAgIH0NCj4g77yeICAgfQ0KPiDvvJ4gQEAgLTU2Nyw4ICs2MDEsOCBAQCBzdGF0aWMg dm9pZCBjb21wYXJlX3NlY19jaHJfaW4odm9pZCAqb3BhcXVlLCBjb25zdCB1aW50OF90ICpidWYs IGludCBzaXplKQ0KPiDvvJ4NCj4g77yeICAgICAgIHJldCA9IG5ldF9maWxsX3JzdGF0ZSgmcy3v vJ5zZWNfcnMsIGJ1Ziwgc2l6ZSkNCj4g77yeICAgICAgIGlmIChyZXQgPT0gLTEpIHsNCj4g77ye IC0gICAgICAgIHFlbXVfY2hyX2ZlX3NldF9oYW5kbGVycygmcy3vvJ5jaHJfc2VjX2luLCBOVUxM LCBOVUxMLCBOVUxMLA0KPiDvvJ4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsIE5VTEwsIHRydWUpDQo+IO+8niArICAgICAgICBjb21wYXJlX2Nocl9zZXRfYWlvX2ZkX2hh bmRsZXJzKCZzLe+8nmNocl9zZWNfaW4sIHMt77yeY3R4LA0KPiDvvJ4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpDQo+IO+8niAgICAg ICAgICAgZXJyb3JfcmVwb3J0KCJjb2xvLWNvbXBhcmUgc2Vjb25kYXJ5X2luIGVycm9yIikNCj4g 77yeICAgICAgIH0NCj4g77yeICAgfQ0KPiDvvJ4gQEAgLTYwNSwzNCArNjM5LDU3IEBAIHN0YXRp YyB2b2lkIGNvbG9fY29tcGFyZV90aW1lcl9kZWwoQ29tcGFyZVN0YXRlICpzKQ0KPiDvvJ4gICAg ICAgfQ0KPiDvvJ4gICB9DQo+IO+8ng0KPiDvvJ4gLXN0YXRpYyB2b2lkICpjb2xvX2NvbXBhcmVf dGhyZWFkKHZvaWQgKm9wYXF1ZSkNCj4g77yeIC17DQo+IO+8niAtICAgIENvbXBhcmVTdGF0ZSAq cyA9IG9wYXF1ZQ0KPiDvvJ4gLQ0KPiDvvJ4gLSAgICBzLe+8nndvcmtlcl9jb250ZXh0ID0gZ19t YWluX2NvbnRleHRfbmV3KCkNCj4g77yeIC0NCj4g77yeIC0gICAgcWVtdV9jaHJfZmVfc2V0X2hh bmRsZXJzKCZzLe+8nmNocl9wcmlfaW4sIGNvbXBhcmVfY2hyX2Nhbl9yZWFkLA0KPiDvvJ4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9wcmlfY2hyX2luLCBOVUxMLCBzLCBzLe+8 nndvcmtlcl9jb250ZXh0LCB0cnVlKQ0KPiDvvJ4gLSAgICBxZW11X2Nocl9mZV9zZXRfaGFuZGxl cnMoJnMt77yeY2hyX3NlY19pbiwgY29tcGFyZV9jaHJfY2FuX3JlYWQsDQo+IO+8niAtICAgICAg ICAgICAgICAgICAgICAgICAgICBjb21wYXJlX3NlY19jaHJfaW4sIE5VTEwsIHMsIHMt77yed29y a2VyX2NvbnRleHQsIHRydWUpDQo+IO+8niAtDQo+IO+8niAtICAgIHMt77yeY29tcGFyZV9sb29w ID0gZ19tYWluX2xvb3BfbmV3KHMt77yed29ya2VyX2NvbnRleHQsIEZBTFNFKQ0KPiDvvJ4gLQ0K PiDvvJ4gLSAgICBnX21haW5fbG9vcF9ydW4ocy3vvJ5jb21wYXJlX2xvb3ApDQo+IO+8niAtDQo+ IO+8niAtICAgIGdfbWFpbl9sb29wX3VucmVmKHMt77yeY29tcGFyZV9sb29wKQ0KPiDvvJ4gLSAg ICBnX21haW5fY29udGV4dF91bnJlZihzLe+8nndvcmtlcl9jb250ZXh0KQ0KPiDvvJ4gLSAgICBy ZXR1cm4gTlVMTA0KPiDvvJ4gLX0NCj4g77yeDQo+IO+8niAgIHN0YXRpYyB2b2lkIGNvbG9fY29t cGFyZV9pb3RocmVhZChDb21wYXJlU3RhdGUgKnMpDQo+IO+8niAgIHsNCj4g77yeICAgICAgIG9i amVjdF9yZWYoT0JKRUNUKHMt77yeaW90aHJlYWQpKQ0KPiDvvJ4gICAgICAgcy3vvJ5jdHggPSBp b3RocmVhZF9nZXRfYWlvX2NvbnRleHQocy3vvJ5pb3RocmVhZCkNCj4g77yeDQo+IO+8niArICAg IGNvbXBhcmVfY2hyX3NldF9haW9fZmRfaGFuZGxlcnMoJnMt77yeY2hyX3ByaV9pbiwgcy3vvJ5j dHgsDQo+IO+8niArICAgICAgICAgICAgICAgICAgICBjb21wYXJlX2Nocl9jYW5fcmVhZCwNCj4g 77yeICsgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVfcHJpX2Nocl9pbiwNCj4g77yeICsgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+IO+8niArICAgICAgICAgICAgICAgICAgICBzKQ0KPiDv vJ4gKyAgICBjb21wYXJlX2Nocl9zZXRfYWlvX2ZkX2hhbmRsZXJzKCZzLe+8nmNocl9zZWNfaW4s IHMt77yeY3R4LA0KPiDvvJ4gKyAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9jaHJfY2FuX3Jl YWQsDQo+IO+8niArICAgICAgICAgICAgICAgICAgICBjb21wYXJlX3NlY19jaHJfaW4sDQo+IO+8 niArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiDvvJ4gKyAgICAgICAgICAgICAgICAgICAg cykNCj4g77yeICsNCj4g77yeICAgICAgIGNvbG9fY29tcGFyZV90aW1lcl9pbml0KHMpDQo+IO+8 niAgIH0NCj4g77yeDQo+IO+8niArc3RhdGljIHZvaWQgY29tcGFyZV9jaHJfc2V0X2Fpb19mZF9o YW5kbGVycyhDaGFyQmFja2VuZCAqYiwNCj4g77yeICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBaW9Db250ZXh0ICpjdHgsDQo+IO+8niArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU9DYW5SZWFkSGFuZGxlciAqZmRfY2FuX3JlYWQsDQo+IO+8niArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SZWFkSGFuZGxlciAqZmRfcmVhZCwN Cj4g77yeICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0V2ZW50SGFuZGxl ciAqZmRfZXZlbnQsDQo+IO+8niArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqb3BhcXVlKQ0KPiDvvJ4gK3sNCj4g77yeICsgICAgQ29tcGFyZUNoYXJkZXYgKnMNCj4g 77yeICsNCj4g77yeICsgICAgaWYgKCFiLe+8nmNocikgew0KPiDvvJ4gKyAgICAgICAgcmV0dXJu DQo+IO+8niArICAgIH0NCj4g77yeICsgICAgcyA9IENPTVBBUkVfQ0hBUkRFVihiLe+8nmNocikN Cj4g77yeICsgICAgaWYgKCFzLe+8nmlvYykgew0KPiDvvJ4gKyAgICAgICAgcmV0dXJuDQo+IO+8 niArICAgIH0NCj4NCj4gU28gdGhpcyBpcyBoYWNreSwgeW91IGNhbiByZWZlciBob3cgdmhvc3Qt dXNlciB2YWxpZGF0ZSB1ZHAgc29ja2V0IGNoYXINCj4gYmFja2VuZC4NCj4NCj4g77yeICsNCj4g 77yeICsgICAgYi3vvJ5jaHJfY2FuX3JlYWQgPSBmZF9jYW5fcmVhZA0KPiDvvJ4gKyAgICBiLe+8 nmNocl9yZWFkID0gZmRfcmVhZA0KPiDvvJ4gKyAgICBiLe+8nmNocl9ldmVudCA9IGZkX2V2ZW50 DQo+IO+8niArICAgIGIt77yeb3BhcXVlID0gb3BhcXVlDQo+IO+8niArICAgIHJlbW92ZV9mZF9p bl93YXRjaChiLe+8nmNocikNCj4g77yeICsNCj4g77yeICsgICAgaWYgKGIt77yeY2hyX3JlYWQp IHsNCj4g77yeICsgICAgICAgIHFpb19jaGFubmVsX3NldF9haW9fZmRfaGFuZGxlcihzLe+8nmlv YywgY3R4LA0KPiDvvJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZV9j aHJfcmVhZCwgTlVMTCwgYi3vvJ5jaHIpDQo+IO+8niArICAgIH0gZWxzZSB7DQo+IO+8niArICAg ICAgICBxaW9fY2hhbm5lbF9zZXRfYWlvX2ZkX2hhbmRsZXIocy3vvJ5pb2MsIGN0eCwgTlVMTCwg TlVMTCwgTlVMTCkNCj4NCj4gU28gaW5zdGVhZCBvZiBkb2luZyBzdWNoIGhhY2ssIGhvdyBhYm91 dCBwYXNzaW5nIGEgQWlvQ29udGV4dCAqIGluc3RlYWQNCj4gb2YgR01haW5Db250ZXh0ICogdG8g cWVtdV9jaHJfZmVfc2V0X2hhbmRsZXJzPw0KPg0KPiBUaGFua3MNCj4NCj4g77yeICsgICAgfQ0K PiDvvJ4gK30NCj4g77yeICsNCj4g77yeICAgc3RhdGljIGNoYXIgKmNvbXBhcmVfZ2V0X3ByaV9p bmRldihPYmplY3QgKm9iaiwgRXJyb3IgKiplcnJwKQ0KPiDvvJ4gICB7DQo+IO+8niAgICAgICBD b21wYXJlU3RhdGUgKnMgPSBDT0xPX0NPTVBBUkUob2JqKQ0KPiDvvJ4gQEAgLTczNiw4ICs3OTMs NiBAQCBzdGF0aWMgdm9pZCBjb2xvX2NvbXBhcmVfY29tcGxldGUoVXNlckNyZWF0YWJsZSAqdWMs IEVycm9yICoqZXJycCkNCj4g77yeICAgew0KPiDvvJ4gICAgICAgQ29tcGFyZVN0YXRlICpzID0g Q09MT19DT01QQVJFKHVjKQ0KPiDvvJ4gICAgICAgQ2hhcmRldiAqY2hyDQo+IO+8niAtICAgIGNo YXIgdGhyZWFkX25hbWVbNjRdDQo+IO+8niAtICAgIHN0YXRpYyBpbnQgY29tcGFyZV9pZA0KPiDv vJ4NCj4g77yeICAgICAgIGlmICghcy3vvJ5wcmlfaW5kZXYgfHwgIXMt77yec2VjX2luZGV2IHx8 ICFzLe+8nm91dGRldiB8fCAhcy3vvJ5pb3RocmVhZCkgew0KPiDvvJ4gICAgICAgICAgIGVycm9y X3NldGcoZXJycCwgImNvbG8gY29tcGFyZSBuZWVkcyAncHJpbWFyeV9pbicgLCINCj4g77yeIEBA IC03NzYsMTIgKzgzMSw2IEBAIHN0YXRpYyB2b2lkIGNvbG9fY29tcGFyZV9jb21wbGV0ZShVc2Vy Q3JlYXRhYmxlICp1YywgRXJyb3IgKiplcnJwKQ0KPiDvvJ4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX2ZyZWUsDQo+IO+8niAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rp b25fZGVzdHJveSkNCj4g77yeDQo+IO+8niAtICAgIHNwcmludGYodGhyZWFkX25hbWUsICJjb2xv LWNvbXBhcmUgJWQiLCBjb21wYXJlX2lkKQ0KPiDvvJ4gLSAgICBxZW11X3RocmVhZF9jcmVhdGUo JnMt77yedGhyZWFkLCB0aHJlYWRfbmFtZSwNCj4g77yeIC0gICAgICAgICAgICAgICAgICAgICAg IGNvbG9fY29tcGFyZV90aHJlYWQsIHMsDQo+IO+8niAtICAgICAgICAgICAgICAgICAgICAgICBR RU1VX1RIUkVBRF9KT0lOQUJMRSkNCj4g77yeIC0gICAgY29tcGFyZV9pZCsrDQo+IO+8niAtDQo+ IO+8niAgICAgICBjb2xvX2NvbXBhcmVfaW90aHJlYWQocykNCj4g77yeDQo+IO+8niAgICAgICBy ZXR1cm4NCj4g77yeIEBAIC04MzQsMTYgKzg4MywxNCBAQCBzdGF0aWMgdm9pZCBjb2xvX2NvbXBh cmVfZmluYWxpemUoT2JqZWN0ICpvYmopDQo+IO+8niAgIHsNCj4g77yeICAgICAgIENvbXBhcmVT dGF0ZSAqcyA9IENPTE9fQ09NUEFSRShvYmopDQo+IO+8ng0KPiDvvJ4gLSAgICBxZW11X2Nocl9m ZV9zZXRfaGFuZGxlcnMoJnMt77yeY2hyX3ByaV9pbiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwN Cj4g77yeIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMt77yed29ya2VyX2NvbnRleHQs IHRydWUpDQo+IO+8niAtICAgIHFlbXVfY2hyX2ZlX3NldF9oYW5kbGVycygmcy3vvJ5jaHJfc2Vj X2luLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLA0KPiDvvJ4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy3vvJ53b3JrZXJfY29udGV4dCwgdHJ1ZSkNCj4g77yeICsgICAgY29tcGFyZV9j aHJfc2V0X2Fpb19mZF9oYW5kbGVycygmcy3vvJ5jaHJfcHJpX2luLCBzLe+8nmN0eCwNCj4g77ye ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKQ0KPiDvvJ4gKyAgICBjb21wYXJlX2Nocl9zZXRfYWlvX2ZkX2hhbmRsZXJzKCZzLe+8nmNo cl9zZWNfaW4sIHMt77yeY3R4LA0KPiDvvJ4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpDQo+IO+8niArDQo+IO+8niAgICAgICBxZW11 X2Nocl9mZV9kZWluaXQoJnMt77yeY2hyX291dCkNCj4g77yeICAgICAgIGNvbG9fY29tcGFyZV90 aW1lcl9kZWwocykNCj4g77yeDQo+IO+8niAtICAgIGdfbWFpbl9sb29wX3F1aXQocy3vvJ5jb21w YXJlX2xvb3ApDQo+IO+8niAtICAgIHFlbXVfdGhyZWFkX2pvaW4oJnMt77yedGhyZWFkKQ0KPiDv vJ4gLQ0KPiDvvJ4gICAgICAgLyogUmVsZWFzZSBhbGwgdW5oYW5kbGVkIHBhY2tldHMgYWZ0ZXIg Y29tcGFyZSB0aGVhZCBleGl0ZWQgKi8NCj4g77yeICAgICAgIGdfcXVldWVfZm9yZWFjaCgmcy3v vJ5jb25uX2xpc3QsIGNvbG9fZmx1c2hfcGFja2V0cywgcykNCj4g77yeDQo+IO+8niBkaWZmIC0t Z2l0IGEvbmV0L2NvbG8uaCBiL25ldC9jb2xvLmgNCj4g77yeIGluZGV4IDdjNTI0ZjMuLjkzNmRl YTEgMTAwNjQ0DQo+IO+8niAtLS0gYS9uZXQvY29sby5oDQo+IO+8niArKysgYi9uZXQvY29sby5o DQo+IO+8niBAQCAtODQsNSArODQsNiBAQCBDb25uZWN0aW9uICpjb25uZWN0aW9uX2dldChHSGFz aFRhYmxlICpjb25uZWN0aW9uX3RyYWNrX3RhYmxlLA0KPiDvvJ4gICB2b2lkIGNvbm5lY3Rpb25f aGFzaHRhYmxlX3Jlc2V0KEdIYXNoVGFibGUgKmNvbm5lY3Rpb25fdHJhY2tfdGFibGUpDQo+IO+8 niAgIFBhY2tldCAqcGFja2V0X25ldyhjb25zdCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkNCj4g77ye ICAgdm9pZCBwYWNrZXRfZGVzdHJveSh2b2lkICpvcGFxdWUsIHZvaWQgKnVzZXJfZGF0YSkNCj4g 77yeICt2b2lkIHJlbW92ZV9mZF9pbl93YXRjaChDaGFyZGV2ICpjaHIpDQo+IO+8ng0KPiDvvJ4g ICAjZW5kaWYgLyogUUVNVV9DT0xPX1BST1hZX0ggKi8NCj4NCj4NCj4=