From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([209.51.188.92]:47044) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hH2XI-00036r-GA for qemu-devel@nongnu.org; Thu, 18 Apr 2019 04:36:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hH2XE-00053W-Pj for qemu-devel@nongnu.org; Thu, 18 Apr 2019 04:36:48 -0400 From: Vladimir Sementsov-Ogievskiy Date: Thu, 18 Apr 2019 08:36:40 +0000 Message-ID: <3af8ea71-0149-0778-7b29-59b122c96d8e@virtuozzo.com> References: <20190410202033.28617-1-mreitz@redhat.com> <20190410202033.28617-3-mreitz@redhat.com> <5a335159-8a98-5c60-657d-920e1eb81065@virtuozzo.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v4 02/11] block: Filtered children access functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Max Reitz , "qemu-block@nongnu.org" Cc: Kevin Wolf , "qemu-devel@nongnu.org" MTcuMDQuMjAxOSAxOToyMiwgTWF4IFJlaXR6IHdyb3RlOg0KPiBPbiAxNi4wNC4xOSAxMjowMiwg VmxhZGltaXIgU2VtZW50c292LU9naWV2c2tpeSB3cm90ZToNCj4+IDEwLjA0LjIwMTkgMjM6MjAs IE1heCBSZWl0eiB3cm90ZToNCj4+PiBXaGF0IGJzLT5maWxlIGFuZCBicy0+YmFja2luZyBtZWFu IGRlcGVuZHMgb24gdGhlIG5vZGUuICBGb3IgZmlsdGVyDQo+Pj4gbm9kZXMsIGJvdGggc2lnbmlm eSBhIG5vZGUgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVjZWl2ZSBhbGwgUi9XDQo+Pj4gYWNjZXNz ZXMuICBGb3IgZm9ybWF0IG5vZGVzLCBicy0+ZmlsZSBjb250YWlucyBtZXRhZGF0YSBhbmQgZGF0 YSwgYW5kDQo+Pj4gYnMtPmJhY2tpbmcgd2lsbCBub3QgcmVjZWl2ZSB3cml0ZXMgLS0gaW5zdGVh ZCwgd3JpdGVzIGFyZSBDT1dlZCB0bw0KPj4+IGJzLT5maWxlLiAgVXN1YWxseS4NCj4+Pg0KPj4+ IEluIGFueSBjYXNlLCBpdCBpcyBub3QgdHJpdmlhbCB0byBndWVzcyB3aGF0IGEgY2hpbGQgbWVh bnMgZXhhY3RseSB3aXRoDQo+Pj4gb3VyIGN1cnJlbnRseSBsaW1pdGVkIGZvcm0gb2YgZXhwcmVz c2lvbi4gIEl0IGlzIGJldHRlciB0byBpbnRyb2R1Y2UNCj4+PiBzb21lIGZ1bmN0aW9ucyB0aGF0 IGFjdHVhbGx5IGd1YXJhbnRlZSBhIG1lYW5pbmc6DQo+Pj4NCj4+PiAtIGJkcnZfZmlsdGVyZWRf Y293X2NoaWxkKCkgd2lsbCByZXR1cm4gdGhlIGNoaWxkIHRoYXQgcmVjZWl2ZXMgcmVxdWVzdHMN Cj4+PiAgICAgZmlsdGVyZWQgdGhyb3VnaCBDT1cuICBUaGF0IGlzLCByZWFkcyBtYXkgb3IgbWF5 IG5vdCBiZSBmb3J3YXJkZWQNCj4+PiAgICAgKGRlcGVuZGluZyBvbiB0aGUgb3ZlcmxheSdzIGFs bG9jYXRpb24gc3RhdHVzKSwgYnV0IHdyaXRlcyBuZXZlciBnbyB0bw0KPj4+ICAgICB0aGlzIGNo aWxkLg0KPj4+DQo+Pj4gLSBiZHJ2X2ZpbHRlcmVkX3J3X2NoaWxkKCkgd2lsbCByZXR1cm4gdGhl IGNoaWxkIHRoYXQgcmVjZWl2ZXMgcmVxdWVzdHMNCj4+PiAgICAgZmlsdGVyZWQgdGhyb3VnaCBz b21lIHZlcnkgcGxhaW4gcHJvY2Vzcy4gIFJlYWRzIGFuZCB3cml0ZXMgaXNzdWVkIHRvDQo+Pj4g ICAgIHRoZSBwYXJlbnQgd2lsbCBnbyB0byB0aGUgY2hpbGQgYXMgd2VsbCAoYWx0aG91Z2ggdGlt aW5nLCBldGMuIG1heSBiZQ0KPj4+ICAgICBtb2RpZmllZCkuDQo+Pj4NCj4+PiAtIEFsbCBkcml2 ZXJzIGJ1dCBxdW9ydW0gKGJ1dCBxdW9ydW0gaXMgcHJldHR5IG9wYXF1ZSB0byB0aGUgZ2VuZXJh bA0KPj4+ICAgICBibG9jayBsYXllciBhbnl3YXkpIGFsd2F5cyBvbmx5IGhhdmUgb25lIG9mIHRo ZXNlIGNoaWxkcmVuOiBBbGwgcmVhZA0KPj4+ICAgICByZXF1ZXN0cyBtdXN0IGJlIHNlcnZlZCBm cm9tIHRoZSBmaWx0ZXJlZF9yd19jaGlsZCAoaWYgaXQgZXhpc3RzKSwgc28NCj4+PiAgICAgaWYg dGhlcmUgd2FzIGEgZmlsdGVyZWRfY293X2NoaWxkIGluIGFkZGl0aW9uLCBpdCB3b3VsZCBub3Qg cmVjZWl2ZQ0KPj4+ICAgICBhbnkgcmVxdWVzdHMgYXQgYWxsLg0KPj4+ICAgICAoVGhlIGNsb3Nl c3QgaGVyZSBpcyBtaXJyb3IsIHdoZXJlIGFsbCByZXF1ZXN0cyBhcmUgcGFzc2VkIG9uIHRvIHRo ZQ0KPj4+ICAgICBzb3VyY2UsIGJ1dCB3aXRoIHdyaXRlLWJsb2NraW5nLCB3cml0ZSByZXF1ZXN0 cyBhcmUgIkNPV2VkIiB0byB0aGUNCj4+PiAgICAgdGFyZ2V0LiAgQnV0IHRoYXQganVzdCBtZWFu cyB0aGF0IHRoZSB0YXJnZXQgaXMgYSBzcGVjaWFsIGNoaWxkIHRoYXQNCj4+PiAgICAgY2Fubm90 IGJlIGludHJvc3BlY3RlZCBieSB0aGUgZ2VuZXJpYyBibG9jayBsYXllciBmdW5jdGlvbnMsIGFu ZCB0aGF0DQo+Pj4gICAgIHNvdXJjZSBpcyBhIGZpbHRlcmVkX3J3X2NoaWxkLikNCj4+PiAgICAg VGhlcmVmb3JlLCB3ZSBjYW4gYWxzbyBhZGQgYmRydl9maWx0ZXJlZF9jaGlsZCgpIHdoaWNoIHJl dHVybnMgdGhhdA0KPj4+ICAgICBvbmUgY2hpbGQgKG9yIE5VTEwsIGlmIHRoZXJlIGlzIG5vIGZp bHRlcmVkIGNoaWxkKS4NCj4+Pg0KPj4+IEFsc28sIG1hbnkgcGxhY2VzIGluIHRoZSBjdXJyZW50 IGJsb2NrIGxheWVyIHNob3VsZCBiZSBza2lwcGluZyBmaWx0ZXJzDQo+Pj4gKGFsbCBmaWx0ZXJz IG9yIGp1c3QgdGhlIG9uZXMgYWRkZWQgaW1wbGljaXRseSwgaXQgZGVwZW5kcykgd2hlbiBnb2lu Zw0KPj4+IHRocm91Z2ggYSBibG9jayBub2RlIGNoYWluLiAgVGhleSBkbyBub3QgZG8gdGhhdCBj dXJyZW50bHksIGJ1dCB0aGlzDQo+Pj4gcGF0Y2ggbWFrZXMgdGhlbS4NCj4+Pg0KPj4+IE9uZSBl eGFtcGxlIGZvciB0aGlzIGlzIHFlbXUtaW1nIG1hcCwgd2hpY2ggc2hvdWxkIHNraXAgZmlsdGVy cyBhbmQgb25seQ0KPj4+IGxvb2sgYXQgdGhlIENPVyBlbGVtZW50cyBpbiB0aGUgZ3JhcGguICBU aGUgY2hhbmdlIHRvIGlvdGVzdCAyMDQncw0KPj4+IHJlZmVyZW5jZSBvdXRwdXQgc2hvd3MgaG93 IHVzaW5nIGJsa2RlYnVnIG9uIHRvcCBvZiBhIENPVyBub2RlIHVzZWQgdG8NCj4+PiBtYWtlIHFl bXUtaW1nIG1hcCBkaXNyZWdhcmQgdGhlIHJlc3Qgb2YgdGhlIGJhY2tpbmcgY2hhaW4sIGJ1dCB3 aXRoIHRoaXMNCj4+PiBwYXRjaCwgdGhlIGFsbG9jYXRpb24gaW4gdGhlIGJhc2UgaW1hZ2UgaXMg cmVwb3J0ZWQgY29ycmVjdGx5Lg0KPj4+DQo+Pj4gRnVydGhlcm1vcmUsIGEgbm90ZSBzaG91bGQg YmUgbWFkZSB0aGF0IHNvbWV0aW1lcyB3ZSBkbyB3YW50IHRvIGFjY2Vzcw0KPj4+IGJzLT5iYWNr aW5nIGRpcmVjdGx5LiAgVGhpcyBpcyB3aGVuZXZlciB0aGUgb3BlcmF0aW9uIGluIHF1ZXN0aW9u IGlzIG5vdA0KPj4+IGFib3V0IGFjY2Vzc2luZyB0aGUgQ09XIGNoaWxkLCBidXQgdGhlICJiYWNr aW5nIiBjaGlsZCwgYmUgaXQgQ09XIG9yDQo+Pj4gbm90LiAgVGhpcyBpcyB0aGUgY2FzZSBpbiBm dW5jdGlvbnMgc3VjaCBhcyBiZHJ2X29wZW5fYmFja2luZ19maWxlKCkgb3INCj4+PiB3aGVuZXZl ciB3ZSBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgc3BlY2lhbCBiZWhhdmlvciBvZiBAYmFja2luZyBh cyBhDQo+Pj4gYmxvY2tkZXYgb3B0aW9uLCB3aGljaCBpcyB0aGF0IGl0IGRvZXMgbm90IGRlZmF1 bHQgdG8gbnVsbCBsaWtlIGFsbA0KPj4+IG90aGVyIGNoaWxkIHJlZmVyZW5jZXMgZG8uDQo+Pj4N Cj4+PiBGaW5hbGx5LCB0aGUgcXVlcnkgZnVuY3Rpb25zIChxdWVyeS1ibG9jayBhbmQgcXVlcnkt bmFtZWQtYmxvY2stbm9kZXMpDQo+Pj4gYXJlIG1vZGlmaWVkIHRvIHJldHVybiBhbnkgZmlsdGVy ZWQgY2hpbGQgdW5kZXIgImJhY2tpbmciLCBub3QganVzdA0KPj4+IGJzLT5iYWNraW5nIG9yIENP VyBjaGlsZHJlbi4gIFRoaXMgaXMgc28gdGhhdCBmaWx0ZXJzIGRvIG5vdCBpbnRlcnJ1cHQNCj4+ PiB0aGUgcmVwb3J0ZWQgYmFja2luZyBjaGFpbi4gIFRoaXMgY2hhbmdlcyB0aGUgb3V0cHV0IG9m IGlvdGVzdCAxODQsIGFzDQo+Pj4gdGhlIHRocm90dGxlZCBub2RlIG5vdyBhcHBlYXJzIGFzIGEg YmFja2luZyBjaGlsZC4NCj4+Pg0KPj4+IFNpZ25lZC1vZmYtYnk6IE1heCBSZWl0eiA8bXJlaXR6 QHJlZGhhdC5jb20+DQo+Pj4gLS0tDQo+Pj4gICAgcWFwaS9ibG9jay1jb3JlLmpzb24gICAgICAg ICAgIHwgICA0ICsNCj4+PiAgICBpbmNsdWRlL2Jsb2NrL2Jsb2NrLmggICAgICAgICAgfCAgIDEg Kw0KPj4+ICAgIGluY2x1ZGUvYmxvY2svYmxvY2tfaW50LmggICAgICB8ICA0MCArKysrKy0tDQo+ Pj4gICAgYmxvY2suYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEwICsrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLQ0KPj4+ICAgIGJsb2NrL2JhY2t1cC5jICAgICAgICAgICAgICAg ICB8ICAgOCArLQ0KPj4+ICAgIGJsb2NrL2Jsb2NrLWJhY2tlbmQuYyAgICAgICAgICB8ICAxNiAr Ky0NCj4+PiAgICBibG9jay9jb21taXQuYyAgICAgICAgICAgICAgICAgfCAgMzMgKysrLS0tDQo+ Pj4gICAgYmxvY2svaW8uYyAgICAgICAgICAgICAgICAgICAgIHwgIDQ1ICsrKystLS0NCj4+PiAg ICBibG9jay9taXJyb3IuYyAgICAgICAgICAgICAgICAgfCAgMjEgKystLQ0KPj4+ICAgIGJsb2Nr L3FhcGkuYyAgICAgICAgICAgICAgICAgICB8ICAzMCArKystLQ0KPj4+ICAgIGJsb2NrL3N0cmVh bS5jICAgICAgICAgICAgICAgICB8ICAxMyArLQ0KPj4+ICAgIGJsb2NrZGV2LmMgICAgICAgICAg ICAgICAgICAgICB8ICA4OCArKysrKysrKysrKy0tLQ0KPj4+ICAgIG1pZ3JhdGlvbi9ibG9jay1k aXJ0eS1iaXRtYXAuYyB8ICAgNCArLQ0KPj4+ICAgIG5iZC9zZXJ2ZXIuYyAgICAgICAgICAgICAg ICAgICB8ICAgNiArLQ0KPj4+ICAgIHFlbXUtaW1nLmMgICAgICAgICAgICAgICAgICAgICB8ICAy OSArKy0tLQ0KPj4+ICAgIHRlc3RzL3FlbXUtaW90ZXN0cy8xODQub3V0ICAgICB8ICAgNyArLQ0K Pj4+ICAgIHRlc3RzL3FlbXUtaW90ZXN0cy8yMDQub3V0ICAgICB8ICAgMSArDQo+Pj4gICAgMTcg ZmlsZXMgY2hhbmdlZCwgNDExIGluc2VydGlvbnMoKyksIDE0NSBkZWxldGlvbnMoLSkNCj4+DQo+ PiByZWFsbHkgaHVnZS4uLiBkaWRuJ3QgeW91IGNvbnNpZGVyIGNvbnZlcnNpb24gZmlsZS1ieS1m aWxlPw0KPiANCj4gRnJhbmtseSwgbm8sIEkganVzdCBkaWRu4oCZdCBjb25zaWRlciBpdC4NCj4g DQo+IEhtLiAgSSBkb27igJl0IGtub3csIDMwLXBhdGNoIHNlcmllcyBhbHdheXMgbG9vayBzbyBm cmlnaHRlbmluZy4NCj4gDQo+Pj4gZGlmZiAtLWdpdCBhL2Jsb2NrLmMgYi9ibG9jay5jDQo+Pj4g aW5kZXggMTY2MTViYzg3Ni4uZThmNmZlYmRhMCAxMDA2NDQNCj4+PiAtLS0gYS9ibG9jay5jDQo+ Pj4gKysrIGIvYmxvY2suYw0KPj4NCj4+IFsuLl0NCj4+DQo+Pj4gICAgDQo+Pj4gQEAgLTM0Njcs MTQgKzM0NjksMTcgQEAgc3RhdGljIGludCBiZHJ2X3Jlb3Blbl9wYXJzZV9iYWNraW5nKEJEUlZS ZW9wZW5TdGF0ZSAqcmVvcGVuX3N0YXRlLA0KPj4+ICAgICAgICAvKg0KPj4+ICAgICAgICAgKiBG aW5kIHRoZSAiYWN0dWFsIiBiYWNraW5nIGZpbGUgYnkgc2tpcHBpbmcgYWxsIGxpbmtzIHRoYXQg cG9pbnQNCj4+PiAgICAgICAgICogdG8gYW4gaW1wbGljaXQgbm9kZSwgaWYgYW55IChlLmcuIGEg Y29tbWl0IGZpbHRlciBub2RlKS4NCj4+PiArICAgICAqIFdlIGNhbm5vdCB1c2UgYW55IG9mIHRo ZSBiZHJ2X3NraXBfKigpIGZ1bmN0aW9ucyBoZXJlIGJlY2F1c2UNCj4+PiArICAgICAqIHRob3Nl IHJldHVybiB0aGUgZmlyc3QgZXhwbGljaXQgbm9kZSwgd2hpbGUgd2UgYXJlIGxvb2tpbmcgZm9y DQo+Pj4gKyAgICAgKiBpdHMgb3ZlcmxheSBoZXJlLg0KPj4+ICAgICAgICAgKi8NCj4+PiAgICAg ICAgb3ZlcmxheV9icyA9IGJzOw0KPj4+IC0gICAgd2hpbGUgKGJhY2tpbmdfYnMob3ZlcmxheV9i cykgJiYgYmFja2luZ19icyhvdmVybGF5X2JzKS0+aW1wbGljaXQpIHsNCj4+PiAtICAgICAgICBv dmVybGF5X2JzID0gYmFja2luZ19icyhvdmVybGF5X2JzKTsNCj4+PiArICAgIHdoaWxlIChvdmVy bGF5X2JzLT5iYWNraW5nICYmIGJkcnZfZmlsdGVyZWRfYnMob3ZlcmxheV9icyktPmltcGxpY2l0 KSB7DQo+Pg0KPj4gU28sIHlvdSBkb24ndCB3YW50IHRvIHNraXAgaW1wbGljaXQgZmlsdGVycyB3 aXRoICdmaWxlJyBjaGlsZD8gVGhlbiwgd2h5IG5vdCB0byB1c2UNCj4+IGNoaWxkX2JzKG92ZXJs YXlfYnMtPmJhY2tpbmcpLCBsaWtlIGluIGZvbGxvd2luZyBpZiBjb25kaXRpb24/DQo+IA0KPiBJ IHRoaW5rIGl0IHdhcyBhbiBhcnRpZmFjdCBvZiB3cml0aW5nIHRoZSBwYXRjaC4gIEkgc3RhcnRl ZCB3aXRoDQo+IGJkcnZfZmlsdGVyZWRfYnMoKSBhbmQgdGhlbiByZWFsaXplZCB0aGlzIGRlcGVu ZHMgb24gLT5iYWNraW5nLA0KPiBhY3R1YWxseS4gIFRoZXJlIHdhcyBubyBmdW5jdGlvbmFsIGRp ZmZlcmVuY2Ugc28gSSBsZWZ0IGl0IGFzIGl0IHdhcy4NCj4gDQo+IEJ1dCB5b3XigJlyZSByaWdo dCwgaXQgaXMgbW9yZSBjbGVhciB0byB1c2UgY2hpbGRfYnMob3ZlcmxheV9icy0+YmFja2luZykN Cj4gaXNudGVhZC4NCj4gDQo+PiBDb3VsZCB3ZSBpbnN0ZWFkIG1ha2UgYmFja2luZy1iYXNlZCBm aWx0ZXJzIGVxdWFsIHRvIGZpbGUtYmFzZWQsIHRvIG1ha2UgaXQgcG9zc2libGUNCj4+IHRvIHVz ZSBmaWxlLWJhc2VkIGZpbHRlcnMgaW4gYmFja2luZy1jaGFpbiByZWxhdGVkIHNjZW5hcmlvcyAo bGlrZSB1cGNvbWluZyBjb3B5LW9uLXJlYWQNCj4+IGZpbHRlciBmb3Igc3RyZWFtKT8gU28sIHRv IGV4cGFuZCBiYWNraW5nLWNoYWluIGNvbmNlcHQgdG8gaW5jbHVkZSBmaWx0ZXJzIHdpdGggZmls ZSBjaGlsZD8NCj4gDQo+IElmIEkgdW5kZXJzdGFuZCB5b3UgY29ycmVjdGx5LCB0aGF04oCZcyBi YXNpY2FsbHkgdGhlIHB1cnBvc2Ugb2YgdGhpcw0KPiBzZXJpZXMgYW5kIGVzcGVjaWFsbHkgdGhp cyBwYXRjaCBoZXJlLiAgQXMgZmFyIGFzIGl0IGlzIHBvc3NpYmxlIGFuZA0KPiByZWFzb25hYmxl LCBJIHdhbnQgZmlsdGVycyB0aGF0IHVzZSBicy0+YmFja2luZyBhbmQgYnMtPmZpbGUgYmVoYXZl IHRoZQ0KPiBzYW1lLg0KPiANCj4gSG93ZXZlciwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoaXMg aXMgbm90IHBvc3NpYmxlIGFuZA0KPiBiZHJ2X3Jlb3Blbl9wYXJzZV9iYWNraW5nKCkgaXMgb25l IHN1Y2ggY2FzZS4gIGJzLT5iYWNraW5nIGFuZCBicy0+ZmlsZQ0KPiBjb3JyZXNwb25kIHRvIFFB UEkgbmFtZXMsIG5hbWVseSAnYmFja2luZycgYW5kICdmaWxlJy4gIElmIHRoYXQNCj4gZGlzdGlu Y3Rpb24gd2FzIGFscmVhZHkgdmlzaWJsZSB0byB0aGUgdXNlciwgd2UgY2Fubm90IGNoYW5nZSBp dCBub3cuDQo+IA0KPiBXZSBkZWZpbml0ZWx5IGNhbm5vdCBtYWtlIGZpbGUtYmFzZWQgZmlsdGVy cyB1c2UgYnMtPmJhY2tpbmcgbm93IGJlY2F1c2UNCj4geW91IGNhbiBjcmVhdGUgdGhlbSBvdmVy IFFBUEkgYW5kIHRoZXkgdXNlICdmaWxlJyBhcyB0aGVpciBjaGlsZCBuYW1lLg0KPiBDYW4gd2Ug bWFrZSBiYWNraW5nLWJhc2VkIGZpbHRlcnMgdXNlIGJzLT5maWxlPyAgU2VlbXMgbW9yZSBsaWtl bHksDQo+IGJlY2F1c2UgYWxsIG9mIHRoZW0gYXJlIGltcGxpY2l0IG5vZGVzLCBzbyB0aGUgdXNl ciB1c3VhbGx5IGRvZXNu4oCZdCBzZWUNCj4gdGhlbS4gIEJ1dCB1c3VhbGx5IGlzbuKAmXQgYWx3 YXlzOyB0aGV5IGRvIGJlY29tZSB1c2VyLXZpc2libGUgb25jZSB0aGUNCj4gdXNlciBzcGVjaWZp ZXMgYSBub2RlLW5hbWUgZm9yIG1pcnJvciBvciBjb21taXQuDQo+IA0KPiBJIGZvdW5kIGl0IG1v cmUgcmVhc29uYWJsZSB0byBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9ucyB0aGF0IGV4cGxpY2l0bHkN Cj4gZXhwcmVzcyB3aGF0IGtpbmQgb2YgY2hpbGQgdGhleSBleHBlY3QgYW5kIHRoZW4gYXBwbHkg dGhlbSBldmVyeXdoZXJlIGFzDQo+IEkgc2F3IGZpdCwgaW5zdGVhZCBvZiBtYWtpbmcgdGhlIG1p cnJvci9jb21taXQgZmlsdGVyIGRyaXZlcnMgdXNlDQo+IGJzLT5maWxlIGFuZCBob3BlIGl0IHdv cmtzOyBub3QgbGVhc3QgYmVjYXVzZSBJ4oCZZCBzdGlsbCBoYXZlIHRvIGdvDQo+IHRocm91Z2gg dGhlIHdob2xlIGJsb2NrIGxheWVyIGFuZCBjaGVjayBldmVyeSBpbnN0YW5jZSBvZiBicy0+YmFj a2luZyB0bw0KPiBzZWUgd2hldGhlciBpdCByZWFsbHkgbmVlZHMgYnMtPmJhY2tpbmcgb3Igd2hl dGhlciBpdCBzaG91bGQgdXNlIGVpdGhlcg0KPiBvZiBicy0+YmFja2luZyBvciBicy0+ZmlsZS4N Cj4gDQo+Pj4gKyAgICAgICAgb3ZlcmxheV9icyA9IGJkcnZfZmlsdGVyZWRfYnMob3ZlcmxheV9i cyk7DQo+Pj4gICAgICAgIH0NCj4+PiAgICANCj4+PiAgICAgICAgLyogSWYgd2Ugd2FudCB0byBy ZXBsYWNlIHRoZSBiYWNraW5nIGZpbGUgd2UgbmVlZCBzb21lIGV4dHJhIGNoZWNrcyAqLw0KPj4+ IC0gICAgaWYgKG5ld19iYWNraW5nX2JzICE9IGJhY2tpbmdfYnMob3ZlcmxheV9icykpIHsNCj4+ PiArICAgIGlmIChuZXdfYmFja2luZ19icyAhPSBjaGlsZF9icyhvdmVybGF5X2JzLT5iYWNraW5n KSkgeyA+ICAgICAgICAgICAvKiBDaGVjayBmb3IgaW1wbGljaXQgbm9kZXMgYmV0d2VlbiBicyBh bmQgaXRzIGJhY2tpbmcgZmlsZSAqLw0KPj4+ICAgICAgICAgICAgaWYgKGJzICE9IG92ZXJsYXlf YnMpIHsNCj4+PiAgICAgICAgICAgICAgICBlcnJvcl9zZXRnKGVycnAsICJDYW5ub3QgY2hhbmdl IGJhY2tpbmcgbGluayBpZiAnJXMnIGhhcyAiDQo+Pg0KPj4gWy4uXQ0KPj4NCj4+PiBAQCAtNDIw Myw4ICs0MjA4LDggQEAgaW50IGJkcnZfY2hhbmdlX2JhY2tpbmdfZmlsZShCbG9ja0RyaXZlclN0 YXRlICpicywNCj4+PiAgICBCbG9ja0RyaXZlclN0YXRlICpiZHJ2X2ZpbmRfb3ZlcmxheShCbG9j a0RyaXZlclN0YXRlICphY3RpdmUsDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQmxvY2tEcml2ZXJTdGF0ZSAqYnMpDQo+Pj4gICAgew0KPj4+IC0gICAgd2hpbGUg KGFjdGl2ZSAmJiBicyAhPSBiYWNraW5nX2JzKGFjdGl2ZSkpIHsNCj4+PiAtICAgICAgICBhY3Rp dmUgPSBiYWNraW5nX2JzKGFjdGl2ZSk7DQo+Pj4gKyAgICB3aGlsZSAoYWN0aXZlICYmIGJzICE9 IGJkcnZfZmlsdGVyZWRfYnMoYWN0aXZlKSkgew0KPj4NCj4+IGhtbSBhbmQgaGVyZSB5b3UgYWN0 dWFsbHkgc3VwcG9ydCBiYWNraW5nLWNoYWluIHdpdGggZmlsZS1jaGlsZC1iYXNlZCBmaWx0ZXJz IGluIGl0Li4NCj4gDQo+IFllcywgYmVjYXVzZSB0aGlzIGlzIG5vdCBhYm91dCB0aGUgUUFQSSAn YmFja2luZycgbGluay4gIFRoaXMgZnVuY3Rpb24NCj4gc2hvdWxkIGNvbnRpbnVlIHRvIHdvcmsg ZXZlbiBpZiB0aGVyZSBhcmUgZmlsdGVycyBpbiB0aGUgYmFja2luZyBjaGFpbi4NCj4gDQo+Pj4g KyAgICAgICAgYWN0aXZlID0gYmRydl9maWx0ZXJlZF9icyhhY3RpdmUpOw0KPj4+ICAgICAgICB9 DQo+Pj4gICAgDQo+Pj4gICAgICAgIHJldHVybiBhY3RpdmU7DQo+Pj4gQEAgLTQyMjYsMTEgKzQy MzEsMTEgQEAgYm9vbCBiZHJ2X2lzX2JhY2tpbmdfY2hhaW5fZnJvemVuKEJsb2NrRHJpdmVyU3Rh dGUgKmJzLCBCbG9ja0RyaXZlclN0YXRlICpiYXNlLA0KPj4+ICAgIHsNCj4+PiAgICAgICAgQmxv Y2tEcml2ZXJTdGF0ZSAqaTsNCj4+PiAgICANCj4+PiAtICAgIGZvciAoaSA9IGJzOyBpICE9IGJh c2U7IGkgPSBiYWNraW5nX2JzKGkpKSB7DQo+Pj4gKyAgICBmb3IgKGkgPSBiczsgaSAhPSBiYXNl OyBpID0gY2hpbGRfYnMoaS0+YmFja2luZykpIHsNCj4+DQo+PiBhbmQgaGVyZSBkb24ndC4uDQo+ IA0KPiBZZXMsIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBhYm91dCB0aGUgUUFQSSAnYmFja2lu ZycgbGluay4NCg0KV2h5PyBXaGF0IGlzIGJhZCBpZiB3ZSBqdXN0IHRyZWF0IGJhY2tpbmcgYW5k IGZpbGUgY2hpbGQgZXF1YWxseSBmb3IgZmlsdGVycz8gU29tZQ0Kc2NlbmFyaW9zIHdpbGwgc3Rh cnQgdG8gd29yayB3aGljaCBkaWRuJ3QsIGJ1dCBuZWl0aGVyIHNob3VsZCBiZSBkYW1hZ2VkIEkg dGhpbmsuLg0KDQpJIG1lYW4sIGlmIHdlIGRlY2xhcmUgZm9yIHVzZXJzIHRoYXQgImJhY2tpbmcg Y2hhaW4iIG1heSBpbmNsdWRlIGZpbGUgY2hpbGQgb2YNCmZpbHRlciBub2Rlcywgd2hhdCB3aWxs IGJyZWFrPw0KDQo+IA0KPj4+ICAgICAgICAgICAgaWYgKGktPmJhY2tpbmcgJiYgaS0+YmFja2lu Zy0+ZnJvemVuKSB7DQo+Pj4gICAgICAgICAgICAgICAgZXJyb3Jfc2V0ZyhlcnJwLCAiQ2Fubm90 IGNoYW5nZSAnJXMnIGxpbmsgZnJvbSAnJXMnIHRvICclcyciLA0KPj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgaS0+YmFja2luZy0+bmFtZSwgaS0+bm9kZV9uYW1lLA0KPj4+IC0gICAgICAg ICAgICAgICAgICAgICAgIGJhY2tpbmdfYnMoaSktPm5vZGVfbmFtZSk7DQo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgaS0+YmFja2luZy0+YnMtPm5vZGVfbmFtZSk7DQo+Pj4gICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7DQo+Pj4gICAgICAgICAgICB9DQo+Pj4gICAgICAgIH0NCj4+DQo+ PiBbLi5dDQo+Pg0KPj4+ICtzdGF0aWMgQmxvY2tEcml2ZXJTdGF0ZSAqYmRydl9za2lwX2ZpbHRl cnMoQmxvY2tEcml2ZXJTdGF0ZSAqYnMsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIHN0b3Bfb25fZXhwbGljaXRfZmlsdGVyKQ0KPj4+ICt7DQo+ Pj4gKyAgICBCZHJ2Q2hpbGQgKmZpbHRlcmVkOw0KPj4+ICsNCj4+PiArICAgIGlmICghYnMpIHsN Cj4+PiArICAgICAgICByZXR1cm4gTlVMTDsNCj4+PiArICAgIH0NCj4+PiArDQo+Pj4gKyAgICB3 aGlsZSAoIShzdG9wX29uX2V4cGxpY2l0X2ZpbHRlciAmJiAhYnMtPmltcGxpY2l0KSkgew0KPj4N Cj4+IHlvdSBtYXkgc2F2ZSBzb21lIGNoYXJhY3RlcnMgYW5kIGV4dHJhIG9wZXJhdG9ycyBieQ0K Pj4NCj4+IGJvb2wgc2tpcF9leHBsaWNpdA0KPj4gLi4uDQo+PiB3aGlsZSAoc2tpcF9leHBsaWNp dCB8fCBicy0+aW1wbGljaXQpIHsNCj4gDQo+IEJ1dCBpcyBpdCByZWFsbHkgc2ltcGxlcj8NCg0K aG1tLCBJIHRob3VnaHQgeWVzPyBBbnl3YXksIEknbSBPSyB3aXRoIGVpdGhlciB2YXJpYW50Lg0K DQo+IA0KPj4+ICsgICAgICAgIGZpbHRlcmVkID0gYmRydl9maWx0ZXJlZF9yd19jaGlsZChicyk7 DQo+Pj4gKyAgICAgICAgaWYgKCFmaWx0ZXJlZCkgew0KPj4+ICsgICAgICAgICAgICBicmVhazsN Cj4+PiArICAgICAgICB9DQo+Pj4gKyAgICAgICAgYnMgPSBmaWx0ZXJlZC0+YnM7DQo+Pj4gKyAg ICB9DQo+Pj4gKyAgICAvKg0KPj4+ICsgICAgICogTm90ZSB0aGF0IHRoaXMgdHJlYXRzIG5vZGVz IHdpdGggYnMtPmRydiA9PSBOVUxMIGFzIG5vdCBiZWluZw0KPj4+ICsgICAgICogUi9XIGZpbHRl cnMgKGJzLT5kcnYgPT0gTlVMTCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgc29tZXRoaW5nDQo+Pj4g KyAgICAgKiBlbHNlIGFueXdheSkuDQo+Pj4gKyAgICAgKiBUaGUgYWR2YW50YWdlIG9mIHRoaXMg YmVoYXZpb3IgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgdGh1cw0KPj4+ICsgICAgICogYWx3 YXlzIHJldHVybiBhIG5vbi1OVUxMIHZhbHVlIChnaXZlbiBhIG5vbi1OVUxMIEBicykuDQo+Pj4g KyAgICAgKi8NCj4+PiArDQo+Pj4gKyAgICByZXR1cm4gYnM7DQo+Pj4gK30NCj4+PiArDQo+Pj4g Ky8qDQo+Pj4gKyAqIFJldHVybiB0aGUgZmlyc3QgQkRTIHRoYXQgaGFzIG5vdCBiZWVuIGFkZGVk IGltcGxpY2l0bHkgb3IgdGhhdA0KPj4+ICsgKiBkb2VzIG5vdCBoYXZlIGFuIFJXLWZpbHRlcmVk IGNoaWxkIGRvd24gdGhlIGNoYWluIHN0YXJ0aW5nIGZyb20gQGJzDQo+Pj4gKyAqIChpbmNsdWRp bmcgQGJzIGl0c2VsZikuDQo+Pj4gKyAqLw0KPj4+ICtCbG9ja0RyaXZlclN0YXRlICpiZHJ2X3Nr aXBfaW1wbGljaXRfZmlsdGVycyhCbG9ja0RyaXZlclN0YXRlICpicykNCj4+PiArew0KPj4+ICsg ICAgcmV0dXJuIGJkcnZfc2tpcF9maWx0ZXJzKGJzLCB0cnVlKTsNCj4+PiArfQ0KPj4+ICsNCj4+ PiArLyoNCj4+PiArICogUmV0dXJuIHRoZSBmaXJzdCBCRFMgdGhhdCBkb2VzIG5vdCBoYXZlIGFu IFJXLWZpbHRlcmVkIGNoaWxkIGRvd24NCj4+PiArICogdGhlIGNoYWluIHN0YXJ0aW5nIGZyb20g QGJzIChpbmNsdWRpbmcgQGJzIGl0c2VsZikuDQo+Pj4gKyAqLw0KPj4+ICtCbG9ja0RyaXZlclN0 YXRlICpiZHJ2X3NraXBfcndfZmlsdGVycyhCbG9ja0RyaXZlclN0YXRlICpicykNCj4+PiArew0K Pj4+ICsgICAgcmV0dXJuIGJkcnZfc2tpcF9maWx0ZXJzKGJzLCBmYWxzZSk7DQo+Pj4gK30NCj4+ PiArDQo+Pj4gKy8qDQo+Pj4gKyAqIEZvciBhIGJhY2tpbmcgY2hhaW4sIHJldHVybiB0aGUgZmly c3Qgbm9uLWZpbHRlciBiYWNraW5nIGltYWdlLg0KPj4NCj4+IG9yIHNlY29uZCwgaWYgd2Ugc3Rh cnQgZnJvbSBmaWx0ZXINCj4gDQo+IEhtLCBpbiBhIHNlbnNlLiAgTWF5YmU6DQo+IA0KPj4gRm9y IGEgYmFja2luZyBjaGFpbiwgcmV0dXJuIHRoZSBmaXJzdCBub24tZmlsdGVyIGJhY2tpbmcgaW1h Z2Ugb2YgdGhlDQo+PiBmaXJzdCBub24tZmlsdGVyIGltYWdlLg0KPiANCj4gPw0KPiANCg0KWWVz LCB0aGlzIHNvdW5kcyBnb29kIGZvciBtZS4NCg0KDQotLSANCkJlc3QgcmVnYXJkcywNClZsYWRp bWlyDQo=