From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 14A4E1FF17A for ; Tue, 14 Oct 2025 16:57:51 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8A257887A; Tue, 14 Oct 2025 16:58:09 +0200 (CEST) Message-ID: <8350507e-10f0-4a5e-a1a2-31b0a8d8e328@proxmox.com> Date: Tue, 14 Oct 2025 16:57:32 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion , =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= References: <20251008152125.849216-1-c.ebner@proxmox.com> <20251008152125.849216-11-c.ebner@proxmox.com> <1760448465.h8v6n18v5i.astroid@yuna.none> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <1760448465.h8v6n18v5i.astroid@yuna.none> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1760453815934 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.358 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH proxmox-backup v2 10/12] api: chunk upload: fix race between chunk backend upload and insert X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" T24gMTAvMTQvMjUgMzo0NiBQTSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBPbiBPY3Rv YmVyIDgsIDIwMjUgNToyMSBwbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+PiBDaHVuayBhcmUg Zmlyc3QgdXBsb2FkZWQgdG8gdGhlIG9iamVjdCBzdG9yZSBmb3IgUzMgYmFja2VkCj4+IGRhdGFz dG9yZXMsIG9ubHkgdGhlbiBpbnNlcnRlZCBpbnRvIHRoZSBsb2NhbCBkYXRhc3RvcmUgY2FjaGUu Cj4+IEJ5IHRoaXMsIGl0IGlzIGFzc3VyZWQgdGhhdCB0aGUgY2h1bmsgaXMgb25seSBldmVyIGNv bnNpZGVyZWQgYXMKPj4gdmFsaWQgYWZ0ZXIgc3VjY2Vzc2Z1bCB1cGxvYWQuIEdhcmJhZ2UgY29s bGVjdGlvbiBkb2VzIGhvd2V2ZXIgcmVseQo+PiBvbiB0aGUgbG9jYWwgbWFya2VyIGZpbGUgdG8g YmUgcHJlc2VudCwgb25seSB0aGVuIGNvbnNpZGVyaW5nIHRoZSBjaHVuawo+PiBhcyBpbi11c2Uu IFdoaWxlIHRoaXMgbWFya2VyIGlzIGNyZWF0ZWQgaWYgbm90IHByZXNlbnQgZHVyaW5nIHBoYXNl IDEKPj4gb2YgZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGlzIG9ubHkgaGFwcGVucyBmb3IgY2h1bmtz IHdoaWNoIGFyZSBhbHJlYWR5Cj4+IHJlZmVyZW5jZWQgYnkgYSBjb21wbGV0ZSBpbmRleCBmaWxl Lgo+Pgo+PiBUaGVyZWZvcmUsIHRoZXJlIHJlbWFpbnMgYSByYWNlIHdpbmRvdyBiZXR3ZWVuIGdh cmJhZ2UgY29sbGVjdGlvbgo+PiBsaXN0aW5nIHRoZSBjaHVua3MgKHVwbG9hZCBjb21wbGV0ZWQp IGFuZCBsb29rdXAgb2YgdGhlIGxvY2FsIG1hcmtlcgo+PiBmaWxlIGJlaW5nIHByZXNlbnQgKGNo dW5rIGNhY2hlIGluc2VydCBhZnRlciB1cGxvYWQpLiBUaGlzIGNhbiBsZWFkIHRvCj4+IGNodW5r cyB3aGljaCBqdXN0IGZpbmlzaGVkIHVwbG9hZCwgYnV0IHdlcmUgbm90IHlldCBpbnNlcnRlZCBp bnRvIHRoZQo+PiBsb2NhbCBjYWNoZSBzdG9yZSB0byBiZSByZW1vdmVkIGFnYWluLgo+Pgo+PiBU byBjbG9zZSB0aGlzIHJhY2Ugd2luZG93LCBtYXJrIGNodW5rcyB3aGljaCBhcmUgY3VycmVudGx5 IGJlaW5nCj4+IHVwbG9hZGVkIHRvIHRoZSBiYWNrZW5kIGJ5IGFuIGFkZGl0aW9uYWwgbWFya2Vy IGZpbGUsIGNoZWNrZWQgYnkgdGhlCj4+IGdhcmJhZ2UgY29sbGVjdGlvbiBhcyB3ZWxsIGlmIHRo ZSByZWd1bGFyIG1hcmtlciBpcyBub3QgZm91bmQsIGFuZAo+PiBvbmx5IHJlbW92ZWQgYWZ0ZXIg c3VjY2Vzc2Z1bCBjaHVuayBpbnNlcnQuCj4+Cj4+IENvbmN1cnJlbnQgY2h1bmsgdXBsb2FkIGlz IHN0aWxsIHBvc3NpYmxlLCBvbmx5IGNyZWF0aW5nIHRoZSB1cGxvYWQKPj4gbWFya2VyIGZpbGUg aWYgbm90IGFscmVhZHkgcHJlc2VudC4gVGhlcmUgaXMgc3RpbGwgYSByYWNlIGJldHdlZW4gdGhl Cj4+IGNvbmN1cnJlbnQgdXBsb2FkcywgaG93ZXZlciBzaW5jZSB0aGV5IGVuY29kZSBmb3IgdGhl IHNhbWUgZGF0YQo+PiAoZXhjZXB0IGNvbXByZXNzaW9uIGxldmVsKSBib3RoIGFyZSB2YWxpZCwg ZXZlbiB3aGVuIHRoZSB3aW5uZXIgb2YKPj4gdGhlIGJhY2t1cCB1cGxvYWQgaXMgbm90IHRoZSB3 aW5uZXIgb2YgdGhlIGNodW5rIGluc2VydC4gSG93ZXZlciwgaWYKPj4gb25lIG9mIHRoZSBjb25j dXJyZW50IHVwbG9hZHMgZmFpbHMsIHRoZSBvdGhlciBvbmUgbXVzdCBmYWlsIGNodW5rCj4+IGlu c2VydGlvbiBhbmQgdGhlIGJhY2t1cCBqb2IgZmFpbCBhcyB3ZWxsLCBhcyB0aGVuIHRoZXJlIGlz IG5vCj4+IGd1YXJhbnRlZSB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiBjb3VsZCBub3QgaGF2ZSBj bGVhbmVkIHVwIHRoZSBjaHVuawo+PiBpbiB0aGUgbWVhbiB0aW1lLCBldmVuIGlmIHN1Y2ggYSBj b25zdGVsbGF0aW9uIGlzIHZlcnkgdW5saWtlbHkuCj4gCj4gSSBzdGlsbCB0aGluayB0aGlzIGlz IGJyaXR0bGUsIGFuZCBhbiBhcHByb2FjaCB0aGF0IGRvZXNuJ3QgcmVxdWlyZQo+IGhhdmluZyB0 aGUgbWFya2VyIGZpbGUgaW4gc3luYyB3aXRoIHRoZSB1cGxvYWQgc3RhdGUgaW4gYWxsIHRoZSBl ZGdlCj4gY2FzZXMgd291bGQgYmUgYmV0dGVyL2Vhc2llci4KPiAKPiBiYXNpY2FsbHkgd2hhdCB3 ZSB3YW50IHRvIGFjaGlldmUgaXMgdG8gaGF2ZSBHQyBhd2FyZSB0aGF0IGEgY2h1bmsKPiBleGlz dGluZyBvbiBTMywgYnV0IG5vdCBsb2NhbGx5IGlzIGNhdXNlZCBieSBhbiB1cGxvYWQgYmVpbmcg aW4KPiBwcm9ncmVzcy4gdGhpcyBpcyBhbG1vc3QgMToxIHRoZSBzYW1lIHNlbWFudGljcyB3ZSBo YXZlIGZvciAocmVndWxhcikKPiBjaHVua3MgYmVpbmcgaW4gdGhlIGNodW5rIHN0b3JlLCBidXQg bm90IHlldCByZWZlcmVuY2VkIGJ5IGFuIGluZGV4Cj4gKGJlY2F1c2UgYSBiYWNrdXAgd3JpdGVy IHNlc3Npb24gaXMgaW4gcHJvZ3Jlc3MpLiB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUKPiBzYW1lIG1l Y2hhbmlzbSB3aXRoIGEgc2xpZ2h0IGFkYXB0YXRpb246Cj4gCj4gLSBwcm90ZWN0IG1hcmtlciBm aWxlIGluc2VydGlvbi91cGRhdGVzL3JlbW92YWwgYnkgdGhlIGNodW5rIHN0b3JlIG11dGV4Cj4g ICAgKGp1c3QgbGlrZSB3ZSBkbyBmb3IgcmVndWxhciBjaHVuayBmaWxlcykKPiAtIHdoZW4gd2Ug c3RhcnQgYSBjaHVuayB1cGxvYWQsIHRvdWNoIChvciBjcmVhdGUpIHRoZSBtYXJrZXIgZmlsZSBm b3IKPiAgICB0aGF0IGNodW5rCj4gLSBpbiBHQywgY2hlY2sgdGhlIGF0aW1lIG9mIHRoZSBtYXJr ZXIgZmlsZSAtIGlmIGl0IGlzIGFmdGVyIHRoZSBHQwo+ICAgIGN1dG9mZiwgd2Uga25vdyB0aGlz IGNodW5rIGlzIHZhbGlkIGRlc3BpdGUgbWlzc2luZyBsb2NhbGx5LCBhbmQgd2UKPiAgICBtdXN0 IG5vdCByZW1vdmUgaXQuIGlmIHRoZSBhdGltZSBpcyBiZWZvcmUgdGhlIGN1dG9mZiwgdGhlbiBi eQo+ICAgIGRlZmluaXRpb24gdGhlIG1hcmtlciBmaWxlIGlzIGNydWZ0IGZyb20gYSBmYWlsZWQg dXBsb2FkL2JhY2t1cAo+ICAgIHdyaXRlciwgYW5kIHdlIGFyZSBhbGxvd2VkIHRvIHJlbW92ZSB0 aGUgY2h1bmsgYW5kIG1hcmtlciBmaWxlLgo+IC0gaW4gdGhlICJoYXBweSBwYXRoIiwgcmVtb3Zl IHRoZSBtYXJrZXIgZmlsZSBhZnRlciBpbnNlcnRpb24gaW50byB0aGUKPiAgICBjaHVuayBzdG9y ZSwgdG8gYXZvaWQgYWNjdW11bGF0aW5nIG1hcmtlciBmaWxlcwoKT2theSwgd2lsbCBzZWUgdG8g Z2V0IHRoaXMgaW1wbGVtZW50ZWQgYXMgc3VnZ2VzdGVkIHRoZW4uCgo+IAo+IEknbGwgZ2l2ZSB5 b3UgYW4gZXhhbXBsZSBiZWxvdyB3aGVyZSB0aGUgY3VycmVudCBhcHByb2FjaCBmYWlscy4uCj4g Cj4+IEF2b2lkIHRoaXMgb3ZlcmhlYWQgZm9yIHJlZ3VsYXIgZGF0YXN0b3JlcyBieSBwYXNzaW5n IGFuZCBjaGVja2luZwo+PiB0aGUgYmFja2VuZCB0eXBlIGZvciB0aGUgY2h1bmsgc3RvcmUuCj4+ Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBFYm5lciA8Yy5lYm5lckBwcm94bW94LmNvbT4K Pj4gLS0tCj4+ICAgcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMgICAgICAgICAgICAg IHwgMTM2ICsrKysrKysrKysrKysrKysrLQo+PiAgIHBicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9y ZS5ycyAgICAgICAgICAgICAgICB8ICAzMiArKysrKwo+PiAgIC4uLi9zcmMvbG9jYWxfZGF0YXN0 b3JlX2xydV9jYWNoZS5ycyAgICAgICAgICB8ICAgMyArLQo+PiAgIHNyYy9hcGkyL2JhY2t1cC91 cGxvYWRfY2h1bmsucnMgICAgICAgICAgICAgICB8ICAxOSArKy0KPj4gICBzcmMvYXBpMi9jb25m aWcvZGF0YXN0b3JlLnJzICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+PiAgIDUgZmlsZXMgY2hh bmdlZCwgMTc5IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0 IGEvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMgYi9wYnMtZGF0YXN0b3JlL3NyYy9j aHVua19zdG9yZS5ycwo+PiBpbmRleCA2NWQ3NGQ2OGUuLjViMWYzOTdiZCAxMDA2NDQKPj4gLS0t IGEvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMKPj4gKysrIGIvcGJzLWRhdGFzdG9y ZS9zcmMvY2h1bmtfc3RvcmUucnMKPj4gQEAgLTcsNyArNyw3IEBAIHVzZSBzdGQ6OnRpbWU6OkR1 cmF0aW9uOwo+PiAgIHVzZSBhbnlob3c6OntiYWlsLCBmb3JtYXRfZXJyLCBDb250ZXh0LCBFcnJv cn07Cj4+ICAgdXNlIHRyYWNpbmc6OntpbmZvLCB3YXJufTsKPj4gICAKPj4gLXVzZSBwYnNfYXBp X3R5cGVzOjp7RGF0YXN0b3JlRlN5bmNMZXZlbCwgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXN9Owo+ PiArdXNlIHBic19hcGlfdHlwZXM6OntEYXRhc3RvcmVCYWNrZW5kVHlwZSwgRGF0YXN0b3JlRlN5 bmNMZXZlbCwgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXN9Owo+PiAgIHVzZSBwcm94bW94X2lvOjpS ZWFkRXh0Owo+PiAgIHVzZSBwcm94bW94X3MzX2NsaWVudDo6UzNDbGllbnQ7Cj4+ICAgdXNlIHBy b3htb3hfc3lzOjpmczo6e2NyZWF0ZV9kaXIsIGNyZWF0ZV9wYXRoLCBmaWxlX3R5cGVfZnJvbV9m aWxlX3N0YXQsIENyZWF0ZU9wdGlvbnN9Owo+PiBAQCAtMjIsNiArMjIsMTAgQEAgdXNlIGNyYXRl OjpmaWxlX2Zvcm1hdHM6OnsKPj4gICB9Owo+PiAgIHVzZSBjcmF0ZTo6RGF0YUJsb2I7Cj4+ICAg Cj4+ICsvLy8gRmlsZW5hbWUgZXh0ZW5zaW9uIGZvciBsb2NhbCBkYXRhc3RvcmUgY2FjaGUgbWFy a2VyIGZpbGVzIGluZGljYXRpbmcKPj4gKy8vLyB0aGUgY2h1bmsgYmVpbmcgdXBsb2FkZWQgdG8g dGhlIGJhY2tlbmQKPj4gK2NvbnN0IEJBQ0tFTkRfVVBMT0FEX01BUktFUl9FWFQ6ICZzdHIgPSAi YmFja2VuZC11cGxvYWQiOwo+PiArCj4+ICAgLy8vIEZpbGUgc3lzdGVtIGJhc2VkIGNodW5rIHN0 b3JlCj4+ICAgcHViIHN0cnVjdCBDaHVua1N0b3JlIHsKPj4gICAgICAgbmFtZTogU3RyaW5nLCAv LyB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcKPj4gQEAgLTMwLDYgKzM0LDcgQEAgcHViIHN0cnVj dCBDaHVua1N0b3JlIHsKPj4gICAgICAgbXV0ZXg6IE11dGV4PCgpPiwKPj4gICAgICAgbG9ja2Vy OiBPcHRpb248QXJjPE11dGV4PFByb2Nlc3NMb2NrZXI+Pj4sCj4+ICAgICAgIHN5bmNfbGV2ZWw6 IERhdGFzdG9yZUZTeW5jTGV2ZWwsCj4+ICsgICAgZGF0YXN0b3JlX2JhY2tlbmRfdHlwZTogRGF0 YXN0b3JlQmFja2VuZFR5cGUsCj4+ICAgfQo+PiAgIAo+PiAgIC8vIFRPRE86IHdoYXQgYWJvdXQg c3lzY3RsIHNldHRpbmcgdm0udmZzX2NhY2hlX3ByZXNzdXJlICgwIC0gMTAwKSA/Cj4+IEBAIC03 Nyw2ICs4Miw3IEBAIGltcGwgQ2h1bmtTdG9yZSB7Cj4+ICAgICAgICAgICAgICAgbXV0ZXg6IE11 dGV4OjpuZXcoKCkpLAo+PiAgICAgICAgICAgICAgIGxvY2tlcjogTm9uZSwKPj4gICAgICAgICAg ICAgICBzeW5jX2xldmVsOiBEZWZhdWx0OjpkZWZhdWx0KCksCj4+ICsgICAgICAgICAgICBkYXRh c3RvcmVfYmFja2VuZF90eXBlOiBEYXRhc3RvcmVCYWNrZW5kVHlwZTo6ZGVmYXVsdCgpLAo+PiAg ICAgICAgICAgfQo+PiAgICAgICB9Cj4+ICAgCj4+IEBAIC05Nyw2ICsxMDMsNyBAQCBpbXBsIENo dW5rU3RvcmUgewo+PiAgICAgICAgICAgdWlkOiBuaXg6OnVuaXN0ZDo6VWlkLAo+PiAgICAgICAg ICAgZ2lkOiBuaXg6OnVuaXN0ZDo6R2lkLAo+PiAgICAgICAgICAgc3luY19sZXZlbDogRGF0YXN0 b3JlRlN5bmNMZXZlbCwKPj4gKyAgICAgICAgZGF0YXN0b3JlX2JhY2tlbmRfdHlwZTogRGF0YXN0 b3JlQmFja2VuZFR5cGUsCj4+ICAgICAgICkgLT4gUmVzdWx0PFNlbGYsIEVycm9yPgo+PiAgICAg ICB3aGVyZQo+PiAgICAgICAgICAgUDogSW50bzxQYXRoQnVmPiwKPj4gQEAgLTE1MSw3ICsxNTgs NyBAQCBpbXBsIENodW5rU3RvcmUgewo+PiAgICAgICAgICAgICAgIH0KPj4gICAgICAgICAgIH0K Pj4gICAKPj4gLSAgICAgICAgU2VsZjo6b3BlbihuYW1lLCBiYXNlLCBzeW5jX2xldmVsKQo+PiAr ICAgICAgICBTZWxmOjpvcGVuKG5hbWUsIGJhc2UsIHN5bmNfbGV2ZWwsIGRhdGFzdG9yZV9iYWNr ZW5kX3R5cGUpCj4+ICAgICAgIH0KPj4gICAKPj4gICAgICAgZm4gbG9ja2ZpbGVfcGF0aDxQOiBJ bnRvPFBhdGhCdWY+PihiYXNlOiBQKSAtPiBQYXRoQnVmIHsKPj4gQEAgLTE4NSw2ICsxOTIsNyBA QCBpbXBsIENodW5rU3RvcmUgewo+PiAgICAgICAgICAgbmFtZTogJnN0ciwKPj4gICAgICAgICAg IGJhc2U6IFAsCj4+ICAgICAgICAgICBzeW5jX2xldmVsOiBEYXRhc3RvcmVGU3luY0xldmVsLAo+ PiArICAgICAgICBkYXRhc3RvcmVfYmFja2VuZF90eXBlOiBEYXRhc3RvcmVCYWNrZW5kVHlwZSwK Pj4gICAgICAgKSAtPiBSZXN1bHQ8U2VsZiwgRXJyb3I+IHsKPj4gICAgICAgICAgIGxldCBiYXNl OiBQYXRoQnVmID0gYmFzZS5pbnRvKCk7Cj4+ICAgCj4+IEBAIC0yMDEsNiArMjA5LDcgQEAgaW1w bCBDaHVua1N0b3JlIHsKPj4gICAgICAgICAgICAgICBsb2NrZXI6IFNvbWUobG9ja2VyKSwKPj4g ICAgICAgICAgICAgICBtdXRleDogTXV0ZXg6Om5ldygoKSksCj4+ICAgICAgICAgICAgICAgc3lu Y19sZXZlbCwKPj4gKyAgICAgICAgICAgIGRhdGFzdG9yZV9iYWNrZW5kX3R5cGUsCj4+ICAgICAg ICAgICB9KQo+PiAgICAgICB9Cj4+ICAgCj4+IEBAIC01NTcsMTAgKzU2Niw5NiBAQCBpbXBsIENo dW5rU3RvcmUgewo+PiAgICAgICAgICAgT2soKCkpCj4+ICAgICAgIH0KPj4gICAKPj4gKyAgICAv LyBUcnkgdG8gaW5zZXJ0IGEgbmV3IGJhY2tlbmQgdXBsb2FkIG1hcmtlciwgc2lnbmFsaW5nIHRv IGdhcmJhZ2UgY29sbGVjdGlvbiB0aGF0IHRoZXJlIGlzIGFuCj4+ICsgICAgLy8gaW4tcHJvZ3Jl c3MgdXBsb2FkIGZvciB0aGlzIGNodW5rLgo+PiArICAgIC8vCj4+ICsgICAgLy8gUmV0dXJucyB0 cnVlIGlmIHRoZSBtYXJrZXIgd2FzIGNyZWF0ZWQgb3IgcHJlLWV4aXN0ZWQgKGNvbmN1cnJlbnQg dXBsb2FkKSwgcmV0dXJucyBmYWxzZQo+PiArICAgIC8vIGlmIHRoZSBjaHVuayBoYXMgYmVlbiBp bnNlcnRlZCBzaW5jZSwgdGhlIG1hcmtlciBmaWxlIG5vdCBiZWluZyBjcmVhdGVkIGFuZCB0aGUg dXBsb2FkCj4+ICsgICAgLy8gbXVzdCBiZSBhdm9pZGVkLgo+PiArICAgIHB1YihjcmF0ZSkgZm4g aW5zZXJ0X2JhY2tlbmRfdXBsb2FkX21hcmtlcigmc2VsZiwgZGlnZXN0OiAmW3U4OyAzMl0pIC0+ IFJlc3VsdDxib29sLCBFcnJvcj4gewo+PiArICAgICAgICBpZiBzZWxmLmRhdGFzdG9yZV9iYWNr ZW5kX3R5cGUgPT0gRGF0YXN0b3JlQmFja2VuZFR5cGU6OkZpbGVzeXN0ZW0gewo+PiArICAgICAg ICAgICAgYmFpbCEoImNhbm5vdCBjcmVhdGUgYmFja2VuZCB1cGxvYWQgbWFya2VyLCBub3QgYSBj YWNoZSBzdG9yZSIpOwo+PiArICAgICAgICB9Cj4+ICsgICAgICAgIGxldCAobWFya2VyX3BhdGgs IGRpZ2VzdF9zdHIpID0gc2VsZi5jaHVua19iYWNrZWRfdXBsb2FkX21hcmtlcl9wYXRoKGRpZ2Vz dCk7Cj4+ICsKPj4gKyAgICAgICAgbGV0IF9sb2NrID0gc2VsZi5tdXRleC5sb2NrKCk7Cj4+ICsK Pj4gKyAgICAgICAgaWYgc2VsZi5jb25kX3RvdWNoX2NodW5rKGRpZ2VzdCwgZmFsc2UpPyB7Cj4+ ICsgICAgICAgICAgICByZXR1cm4gT2soZmFsc2UpOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICAgaWYgbGV0IEVycihlcnIpID0gc3RkOjpmczo6RmlsZTo6b3B0aW9ucygpCj4+ICsgICAg ICAgICAgICAud3JpdGUodHJ1ZSkKPj4gKyAgICAgICAgICAgIC5jcmVhdGVfbmV3KHRydWUpCj4+ ICsgICAgICAgICAgICAub3BlbigmbWFya2VyX3BhdGgpCj4+ICsgICAgICAgIHsKPj4gKyAgICAg ICAgICAgIGlmIGVyci5raW5kKCkgIT0gc3RkOjppbzo6RXJyb3JLaW5kOjpBbHJlYWR5RXhpc3Rz IHsKPj4gKyAgICAgICAgICAgICAgICByZXR1cm4gRXJyKGVycikud2l0aF9jb250ZXh0KHx8IHsK Pj4gKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0ISgiZmFpbGVkIHRvIGNyZWF0ZSBiYWNrZW5k IHVwbG9hZCBtYXJrZXIgZm9yIGNodW5rIHtkaWdlc3Rfc3RyfSIpCj4+ICsgICAgICAgICAgICAg ICAgfSk7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgT2sodHJ1 ZSkKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBwdWIoY3JhdGUpIGZuIGNsZWFudXBfYmFja2VuZF91 cGxvYWRfbWFya2VyKCZzZWxmLCBkaWdlc3Q6ICZbdTg7IDMyXSkgLT4gUmVzdWx0PCgpLCBFcnJv cj4gewo+PiArICAgICAgICBpZiBzZWxmLmRhdGFzdG9yZV9iYWNrZW5kX3R5cGUgPT0gRGF0YXN0 b3JlQmFja2VuZFR5cGU6OkZpbGVzeXN0ZW0gewo+PiArICAgICAgICAgICAgYmFpbCEoImNhbm5v dCBjbGVhbnVwIGJhY2tlbmQgdXBsb2FkIG1hcmtlciwgbm90IGEgY2FjaGUgc3RvcmUiKTsKPj4g KyAgICAgICAgfQo+PiArICAgICAgICBsZXQgKG1hcmtlcl9wYXRoLCBfZGlnZXN0X3N0cikgPSBz ZWxmLmNodW5rX2JhY2tlZF91cGxvYWRfbWFya2VyX3BhdGgoZGlnZXN0KTsKPj4gKwo+PiArICAg ICAgICBsZXQgX2xvY2sgPSBzZWxmLm11dGV4LmxvY2soKTsKPj4gKwo+PiArICAgICAgICBpZiBs ZXQgRXJyKGVycikgPSBzdGQ6OmZzOjpyZW1vdmVfZmlsZShtYXJrZXJfcGF0aCkgewo+PiArICAg ICAgICAgICAgaWYgZXJyLmtpbmQoKSAhPSBzdGQ6OmlvOjpFcnJvcktpbmQ6Ok5vdEZvdW5kIHsK Pj4gKyAgICAgICAgICAgICAgICBiYWlsISgiZmFpbGVkIHRvIGNsZWFudXAgYmFja2VuZCB1cGxv YWQgbWFya2VyOiB7ZXJyfSIpOwo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICB9Cj4+ICsg ICAgICAgIE9rKCgpKQo+PiArICAgIH0KPj4gKwo+PiArICAgIHB1YihjcmF0ZSkgZm4gYmFja2Vu ZF91cGxvYWRfbWFya2VyX2V4aXN0cygmc2VsZiwgZGlnZXN0OiAmW3U4OyAzMl0pIC0+IFJlc3Vs dDxib29sLCBFcnJvcj4gewo+PiArICAgICAgICBsZXQgKG1hcmtlcl9wYXRoLCBfZGlnZXN0X3N0 cikgPSBzZWxmLmNodW5rX2JhY2tlZF91cGxvYWRfbWFya2VyX3BhdGgoZGlnZXN0KTsKPj4gKyAg ICAgICAgaWYgbGV0IEVycihlcnIpID0gc3RkOjpmczo6bWV0YWRhdGEobWFya2VyX3BhdGgpIHsK Pj4gKyAgICAgICAgICAgIGlmIGVyci5raW5kKCkgIT0gc3RkOjppbzo6RXJyb3JLaW5kOjpOb3RG b3VuZCB7Cj4+ICsgICAgICAgICAgICAgICAgYmFpbCEoImZhaWxlZCB0byBjaGVjayBiYWNrZW5k IHVwbG9hZCBtYXJrZXI6IHtlcnJ9Iik7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAg ICByZXR1cm4gT2soZmFsc2UpOwo+PiArICAgICAgICB9Cj4+ICsgICAgICAgIE9rKHRydWUpCj4+ ICsgICAgfQo+PiArCj4+ICAgICAgIHB1YiBmbiBpbnNlcnRfY2h1bmsoJnNlbGYsIGNodW5rOiAm RGF0YUJsb2IsIGRpZ2VzdDogJlt1ODsgMzJdKSAtPiBSZXN1bHQ8KGJvb2wsIHU2NCksIEVycm9y PiB7Cj4+ICAgICAgICAgICBzZWxmLmluc2VydF9jaHVua19pbXBsKGNodW5rLCBkaWdlc3QsIHxf LCBffCBPaygoKSkpCj4+ICAgICAgIH0KPj4gICAKPj4gKyAgICBwdWIgZm4gaW5zZXJ0X2NodW5r X2FuZF9yZW1vdmVfdXBsb2FkX21hcmtlcigKPj4gKyAgICAgICAgJnNlbGYsCj4+ICsgICAgICAg IGNodW5rOiAmRGF0YUJsb2IsCj4+ICsgICAgICAgIGRpZ2VzdDogJlt1ODsgMzJdLAo+PiArICAg ICkgLT4gUmVzdWx0PChib29sLCB1NjQpLCBFcnJvcj4gewo+PiArICAgICAgICBzZWxmLmluc2Vy dF9jaHVua19pbXBsKGNodW5rLCBkaWdlc3QsIHxkaWdlc3QsIHByZV9leGlzdGluZ3wgewo+PiAr ICAgICAgICAgICAgaWYgc2VsZi5kYXRhc3RvcmVfYmFja2VuZF90eXBlICE9IERhdGFzdG9yZUJh Y2tlbmRUeXBlOjpGaWxlc3lzdGVtIHsKPj4gKyAgICAgICAgICAgICAgICAvLyBNdXN0IGZhaWwg YXMgaWYgdGhlIG1hcmtlciBpcyBubyBsb25nZXIgcHJlc2VudCBidXQgdGhlIGNodW5rIGZpbGUg aXMgbm90Cj4+ICsgICAgICAgICAgICAgICAgLy8gcHJlc2VudCwgYXMgdGhpcyBpbmRpY2F0ZXMg dGhhdCBhIGNvbmN1cnJlbnQgdXBsb2FkIGZhaWxlZCwgbm8gZ3VhcmFudGVlIHRoYXQKPj4gKyAg ICAgICAgICAgICAgICAvLyBnYXJiYWdlIGNvbGxlY3Rpb24gZGlkIG5vdCBjbGVhbnVwIGNodW5r cyBpbiB0aGUgbWVhbiB0aW1lLgo+PiArICAgICAgICAgICAgICAgIGxldCAoY2h1bmtfcGF0aCwg ZGlnZXN0X3N0cikgPSBzZWxmLmNodW5rX3BhdGgoZGlnZXN0KTsKPj4gKyAgICAgICAgICAgICAg ICBpZiBsZXQgRXJyKGVycikgPQo+PiArICAgICAgICAgICAgICAgICAgICBzdGQ6OmZzOjpyZW1v dmVfZmlsZShjaHVua19wYXRoLndpdGhfZXh0ZW5zaW9uKEJBQ0tFTkRfVVBMT0FEX01BUktFUl9F WFQpKQo+PiArICAgICAgICAgICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgaWYgIShw cmVfZXhpc3RpbmcgJiYgZXJyLmtpbmQoKSA9PSBzdGQ6OmlvOjpFcnJvcktpbmQ6Ok5vdEZvdW5k KSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBiYWlsISgKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiY29uY3VycmVudCB1cGxvYWQgZmFpbGVkIG9uIHN0b3JlICd7fScgZm9y IHtkaWdlc3Rfc3RyfSAtIHtlcnJ9IiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLm5hbWUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICApCj4+ICsgICAgICAgICAgICAg ICAgICAgIH0KPj4gKyAgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICB9Cj4+ICsKPj4g KyAgICAgICAgICAgIE9rKCgpKQo+PiArICAgICAgICB9KQo+PiArICAgIH0KPj4gKwo+PiAgICAg ICBmbiBpbnNlcnRfY2h1bmtfaW1wbCgKPj4gICAgICAgICAgICZzZWxmLAo+PiAgICAgICAgICAg Y2h1bms6ICZEYXRhQmxvYiwKPj4gQEAgLTY5Miw2ICs3ODcsMTUgQEAgaW1wbCBDaHVua1N0b3Jl IHsKPj4gICAgICAgICAgIE9rKCgpKQo+PiAgICAgICB9Cj4+ICAgCj4+ICsgICAgLy8vIEdlbmVy YXRlIGZpbGUgcGF0aCBmb3IgYmFja2VuZCB1cGxvYWQgbWFya2VyIG9mIGdpdmVuIGNodW5rIGRp Z2VzdC4KPj4gKyAgICBmbiBjaHVua19iYWNrZWRfdXBsb2FkX21hcmtlcl9wYXRoKCZzZWxmLCBk aWdlc3Q6ICZbdTg7IDMyXSkgLT4gKFBhdGhCdWYsIFN0cmluZykgewo+PiArICAgICAgICBsZXQg KGNodW5rX3BhdGgsIGRpZ2VzdF9zdHIpID0gc2VsZi5jaHVua19wYXRoKGRpZ2VzdCk7Cj4+ICsg ICAgICAgICgKPj4gKyAgICAgICAgICAgIGNodW5rX3BhdGgud2l0aF9leHRlbnNpb24oQkFDS0VO RF9VUExPQURfTUFSS0VSX0VYVCksCj4+ICsgICAgICAgICAgICBkaWdlc3Rfc3RyLAo+PiArICAg ICAgICApCj4+ICsgICAgfQo+PiArCj4+ICAgICAgIHB1YiBmbiByZWxhdGl2ZV9wYXRoKCZzZWxm LCBwYXRoOiAmUGF0aCkgLT4gUGF0aEJ1ZiB7Cj4+ICAgICAgICAgICAvLyB1bndyYXA6IG9ubHkg YE5vbmVgIGluIHVuaXQgdGVzdHMKPj4gICAgICAgICAgIGFzc2VydCEoc2VsZi5sb2NrZXIuaXNf c29tZSgpKTsKPj4gQEAgLTc3NywxNCArODgxLDI2IEBAIGZuIHRlc3RfY2h1bmtfc3RvcmUxKCkg ewo+PiAgIAo+PiAgICAgICBpZiBsZXQgRXJyKF9lKSA9IHN0ZDo6ZnM6OnJlbW92ZV9kaXJfYWxs KCIudGVzdGRpciIpIHsgLyogaWdub3JlICovIH0KPj4gICAKPj4gLSAgICBsZXQgY2h1bmtfc3Rv cmUgPSBDaHVua1N0b3JlOjpvcGVuKCJ0ZXN0IiwgJnBhdGgsIERhdGFzdG9yZUZTeW5jTGV2ZWw6 Ok5vbmUpOwo+PiArICAgIGxldCBjaHVua19zdG9yZSA9IENodW5rU3RvcmU6Om9wZW4oCj4+ICsg ICAgICAgICJ0ZXN0IiwKPj4gKyAgICAgICAgJnBhdGgsCj4+ICsgICAgICAgIERhdGFzdG9yZUZT eW5jTGV2ZWw6Ok5vbmUsCj4+ICsgICAgICAgIERhdGFzdG9yZUJhY2tlbmRUeXBlOjpGaWxlc3lz dGVtLAo+PiArICAgICk7Cj4+ICAgICAgIGFzc2VydCEoY2h1bmtfc3RvcmUuaXNfZXJyKCkpOwo+ PiAgIAo+PiAgICAgICBsZXQgdXNlciA9IG5peDo6dW5pc3RkOjpVc2VyOjpmcm9tX3VpZChuaXg6 OnVuaXN0ZDo6VWlkOjpjdXJyZW50KCkpCj4+ICAgICAgICAgICAudW53cmFwKCkKPj4gICAgICAg ICAgIC51bndyYXAoKTsKPj4gLSAgICBsZXQgY2h1bmtfc3RvcmUgPQo+PiAtICAgICAgICBDaHVu a1N0b3JlOjpjcmVhdGUoInRlc3QiLCAmcGF0aCwgdXNlci51aWQsIHVzZXIuZ2lkLCBEYXRhc3Rv cmVGU3luY0xldmVsOjpOb25lKS51bndyYXAoKTsKPj4gKyAgICBsZXQgY2h1bmtfc3RvcmUgPSBD aHVua1N0b3JlOjpjcmVhdGUoCj4+ICsgICAgICAgICJ0ZXN0IiwKPj4gKyAgICAgICAgJnBhdGgs Cj4+ICsgICAgICAgIHVzZXIudWlkLAo+PiArICAgICAgICB1c2VyLmdpZCwKPj4gKyAgICAgICAg RGF0YXN0b3JlRlN5bmNMZXZlbDo6Tm9uZSwKPj4gKyAgICAgICAgRGF0YXN0b3JlQmFja2VuZFR5 cGU6OkZpbGVzeXN0ZW0sCj4+ICsgICAgKQo+PiArICAgIC51bndyYXAoKTsKPj4gICAKPj4gICAg ICAgbGV0IChjaHVuaywgZGlnZXN0KSA9IGNyYXRlOjpkYXRhX2Jsb2I6OkRhdGFDaHVua0J1aWxk ZXI6Om5ldygmWzB1OCwgMXU4XSkKPj4gICAgICAgICAgIC5idWlsZCgpCj4+IEBAIC03OTYsOCAr OTEyLDE0IEBAIGZuIHRlc3RfY2h1bmtfc3RvcmUxKCkgewo+PiAgICAgICBsZXQgKGV4aXN0cywg XykgPSBjaHVua19zdG9yZS5pbnNlcnRfY2h1bmsoJmNodW5rLCAmZGlnZXN0KS51bndyYXAoKTsK Pj4gICAgICAgYXNzZXJ0IShleGlzdHMpOwo+PiAgIAo+PiAtICAgIGxldCBjaHVua19zdG9yZSA9 Cj4+IC0gICAgICAgIENodW5rU3RvcmU6OmNyZWF0ZSgidGVzdCIsICZwYXRoLCB1c2VyLnVpZCwg dXNlci5naWQsIERhdGFzdG9yZUZTeW5jTGV2ZWw6Ok5vbmUpOwo+PiArICAgIGxldCBjaHVua19z dG9yZSA9IENodW5rU3RvcmU6OmNyZWF0ZSgKPj4gKyAgICAgICAgInRlc3QiLAo+PiArICAgICAg ICAmcGF0aCwKPj4gKyAgICAgICAgdXNlci51aWQsCj4+ICsgICAgICAgIHVzZXIuZ2lkLAo+PiAr ICAgICAgICBEYXRhc3RvcmVGU3luY0xldmVsOjpOb25lLAo+PiArICAgICAgICBEYXRhc3RvcmVC YWNrZW5kVHlwZTo6RmlsZXN5c3RlbSwKPj4gKyAgICApOwo+PiAgICAgICBhc3NlcnQhKGNodW5r X3N0b3JlLmlzX2VycigpKTsKPj4gICAKPj4gICAgICAgaWYgbGV0IEVycihfZSkgPSBzdGQ6OmZz OjpyZW1vdmVfZGlyX2FsbCgiLnRlc3RkaXIiKSB7IC8qIGlnbm9yZSAqLyB9Cj4+IGRpZmYgLS1n aXQgYS9wYnMtZGF0YXN0b3JlL3NyYy9kYXRhc3RvcmUucnMgYi9wYnMtZGF0YXN0b3JlL3NyYy9k YXRhc3RvcmUucnMKPj4gaW5kZXggYTZiMTdlM2MzLi5lNDBiNjg4M2IgMTAwNjQ0Cj4+IC0tLSBh L3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwo+PiArKysgYi9wYnMtZGF0YXN0b3JlL3Ny Yy9kYXRhc3RvcmUucnMKPj4gQEAgLTMzNiwxMCArMzM2LDE0IEBAIGltcGwgRGF0YVN0b3JlIHsK Pj4gICAgICAgICAgICAgICAgICAgRGF0YXN0b3JlVHVuaW5nOjpBUElfU0NIRU1BCj4+ICAgICAg ICAgICAgICAgICAgICAgICAucGFyc2VfcHJvcGVydHlfc3RyaW5nKGNvbmZpZy50dW5pbmcuYXNf ZGVyZWYoKS51bndyYXBfb3IoIiIpKT8sCj4+ICAgICAgICAgICAgICAgKT87Cj4+ICsgICAgICAg ICAgICBsZXQgYmFja2VuZF9jb25maWc6IERhdGFzdG9yZUJhY2tlbmRDb25maWcgPQo+PiArICAg ICAgICAgICAgICAgIGNvbmZpZy5iYWNrZW5kLmFzX2RlcmVmKCkudW53cmFwX29yKCIiKS5wYXJz ZSgpPzsKPj4gKyAgICAgICAgICAgIGxldCBiYWNrZW5kX3R5cGUgPSBiYWNrZW5kX2NvbmZpZy50 eS51bndyYXBfb3JfZGVmYXVsdCgpOwo+PiAgICAgICAgICAgICAgIEFyYzo6bmV3KENodW5rU3Rv cmU6Om9wZW4oCj4+ICAgICAgICAgICAgICAgICAgIG5hbWUsCj4+ICAgICAgICAgICAgICAgICAg IGNvbmZpZy5hYnNvbHV0ZV9wYXRoKCksCj4+ICAgICAgICAgICAgICAgICAgIHR1bmluZy5zeW5j X2xldmVsLnVud3JhcF9vcl9kZWZhdWx0KCksCj4+ICsgICAgICAgICAgICAgICAgYmFja2VuZF90 eXBlLAo+PiAgICAgICAgICAgICAgICk/KQo+PiAgICAgICAgICAgfTsKPj4gICAKPj4gQEAgLTQy NCwxMCArNDI4LDE2IEBAIGltcGwgRGF0YVN0b3JlIHsKPj4gICAgICAgICAgICAgICBEYXRhc3Rv cmVUdW5pbmc6OkFQSV9TQ0hFTUEKPj4gICAgICAgICAgICAgICAgICAgLnBhcnNlX3Byb3BlcnR5 X3N0cmluZyhjb25maWcudHVuaW5nLmFzX2RlcmVmKCkudW53cmFwX29yKCIiKSk/LAo+PiAgICAg ICAgICAgKT87Cj4+ICsgICAgICAgIGxldCBiYWNrZW5kX2NvbmZpZzogRGF0YXN0b3JlQmFja2Vu ZENvbmZpZyA9IHNlcmRlX2pzb246OmZyb21fdmFsdWUoCj4+ICsgICAgICAgICAgICBEYXRhc3Rv cmVCYWNrZW5kQ29uZmlnOjpBUElfU0NIRU1BCj4+ICsgICAgICAgICAgICAgICAgLnBhcnNlX3By b3BlcnR5X3N0cmluZyhjb25maWcuYmFja2VuZC5hc19kZXJlZigpLnVud3JhcF9vcigiIikpPywK Pj4gKyAgICAgICAgKT87Cj4+ICsgICAgICAgIGxldCBiYWNrZW5kX3R5cGUgPSBiYWNrZW5kX2Nv bmZpZy50eS51bndyYXBfb3JfZGVmYXVsdCgpOwo+PiAgICAgICAgICAgbGV0IGNodW5rX3N0b3Jl ID0gQ2h1bmtTdG9yZTo6b3BlbigKPj4gICAgICAgICAgICAgICAmbmFtZSwKPj4gICAgICAgICAg ICAgICBjb25maWcuYWJzb2x1dGVfcGF0aCgpLAo+PiAgICAgICAgICAgICAgIHR1bmluZy5zeW5j X2xldmVsLnVud3JhcF9vcl9kZWZhdWx0KCksCj4+ICsgICAgICAgICAgICBiYWNrZW5kX3R5cGUs Cj4+ICAgICAgICAgICApPzsKPj4gICAgICAgICAgIGxldCBpbm5lciA9IEFyYzo6bmV3KFNlbGY6 OndpdGhfc3RvcmVfYW5kX2NvbmZpZygKPj4gICAgICAgICAgICAgICBBcmM6Om5ldyhjaHVua19z dG9yZSksCj4+IEBAIC0xNjUxLDYgKzE2NjEsMTMgQEAgaW1wbCBEYXRhU3RvcmUgewo+PiAgICAg ICAgICAgICAgICAgICAgICAgbGV0IGF0aW1lID0gbWF0Y2ggc3RkOjpmczo6bWV0YWRhdGEoJmNo dW5rX3BhdGgpIHsKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICBPayhzdGF0KSA9PiBzdGF0 LmFjY2Vzc2VkKCk/LAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihlcnIpIGlmIGVy ci5raW5kKCkgPT0gc3RkOjppbzo6RXJyb3JLaW5kOjpOb3RGb3VuZCA9PiB7Cj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZgo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAuaW5uZXIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNodW5r X3N0b3JlCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5iYWNrZW5kX3VwbG9h ZF9tYXJrZXJfZXhpc3RzKCZkaWdlc3QpPwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBGaWxlIG5vdCBmb3VuZCwgZGVsZXRlIGJ5IHNldHRpbmcgYXRpbWUgdG8gdW5peCBlcG9j aAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvISgiTm90IGZvdW5kLCBtYXJr IGZvciBkZWxldGlvbjoge30iLCBjb250ZW50LmtleSk7Cj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN5c3RlbVRpbWU6OlVOSVhfRVBPQ0gKPj4gQEAgLTE4NTcsNiArMTg3NCwyMSBA QCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLmlu c2VydF9jaHVuayhjaHVuaywgZGlnZXN0KQo+PiAgICAgICB9Cj4+ICAgCj4+ICsgICAgLy8gVHJ5 IHRvIGluc2VydCBhIG5ldyBiYWNrZW5kIHVwbG9hZCBtYXJrZXIsIHNpZ25hbGluZyB0byBnYXJi YWdlIGNvbGxlY3Rpb24gdGhhdCB0aGVyZSBpcyBhbgo+PiArICAgIC8vIGluLXByb2dyZXNzIHVw bG9hZCBmb3IgdGhpcyBjaHVuay4KPj4gKyAgICAvLwo+PiArICAgIC8vIFJldHVybnMgdHJ1ZSBp ZiB0aGUgbWFya2VyIHdhcyBjcmVhdGVkIG9yIHByZS1leGlzdGVkIChjb25jdXJyZW50IHVwbG9h ZCksIHJldHVybnMgZmFsc2UKPj4gKyAgICAvLyBpZiB0aGUgY2h1bmsgaGFzIGJlZW4gaW5zZXJ0 ZWQgc2luY2UsIHRoZSBtYXJrZXIgZmlsZSBub3QgYmVpbmcgY3JlYXRlZCBhbmQgdGhlIHVwbG9h ZAo+PiArICAgIC8vIG11c3QgYmUgYXZvaWRlZC4KPj4gKyAgICBwdWIgZm4gaW5zZXJ0X2JhY2tl bmRfdXBsb2FkX21hcmtlcigmc2VsZiwgZGlnZXN0OiAmW3U4OyAzMl0pIC0+IFJlc3VsdDxib29s LCBFcnJvcj4gewo+PiArICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLmluc2VydF9iYWNr ZW5kX3VwbG9hZF9tYXJrZXIoZGlnZXN0KQo+PiArICAgIH0KPj4gKwo+PiArICAgIC8vLyBSZW1v dmUgdGhlIG1hcmtlciBmaWxlIHNpZ25hbGluZyBhbiBpbi1wcm9ncmVzcyB1cGxvYWQgdG8gdGhl IGJhY2tlbmQKPj4gKyAgICBwdWIgZm4gY2xlYW51cF9iYWNrZW5kX3VwbG9hZF9tYXJrZXIoJnNl bGYsIGRpZ2VzdDogJlt1ODsgMzJdKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4+ICsgICAgICAg IHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuY2xlYW51cF9iYWNrZW5kX3VwbG9hZF9tYXJrZXIoZGln ZXN0KQo+PiArICAgIH0KPj4gKwo+PiAgICAgICBwdWIgZm4gc3RhdF9jaHVuaygmc2VsZiwgZGln ZXN0OiAmW3U4OyAzMl0pIC0+IFJlc3VsdDxzdGQ6OmZzOjpNZXRhZGF0YSwgRXJyb3I+IHsKPj4g ICAgICAgICAgIGxldCAoY2h1bmtfcGF0aCwgX2RpZ2VzdF9zdHIpID0gc2VsZi5pbm5lci5jaHVu a19zdG9yZS5jaHVua19wYXRoKGRpZ2VzdCk7Cj4+ICAgICAgICAgICBzdGQ6OmZzOjptZXRhZGF0 YShjaHVua19wYXRoKS5tYXBfZXJyKEVycm9yOjpmcm9tKQo+PiBkaWZmIC0tZ2l0IGEvcGJzLWRh dGFzdG9yZS9zcmMvbG9jYWxfZGF0YXN0b3JlX2xydV9jYWNoZS5ycyBiL3Bicy1kYXRhc3RvcmUv c3JjL2xvY2FsX2RhdGFzdG9yZV9scnVfY2FjaGUucnMKPj4gaW5kZXggZmUzYjUxYTU1Li5jZGFk NzcwMzEgMTAwNjQ0Cj4+IC0tLSBhL3Bicy1kYXRhc3RvcmUvc3JjL2xvY2FsX2RhdGFzdG9yZV9s cnVfY2FjaGUucnMKPj4gKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvbG9jYWxfZGF0YXN0b3JlX2xy dV9jYWNoZS5ycwo+PiBAQCAtMzQsNyArMzQsOCBAQCBpbXBsIExvY2FsRGF0YXN0b3JlTHJ1Q2Fj aGUgewo+PiAgICAgICAvLy8KPj4gICAgICAgLy8vIEZhaWxzIGlmIHRoZSBjaHVuayBjYW5ub3Qg YmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5Lgo+PiAgICAgICBwdWIgZm4gaW5zZXJ0KCZzZWxmLCBk aWdlc3Q6ICZbdTg7IDMyXSwgY2h1bms6ICZEYXRhQmxvYikgLT4gUmVzdWx0PCgpLCBFcnJvcj4g ewo+PiAtICAgICAgICBzZWxmLnN0b3JlLmluc2VydF9jaHVuayhjaHVuaywgZGlnZXN0KT87Cj4+ ICsgICAgICAgIHNlbGYuc3RvcmUKPj4gKyAgICAgICAgICAgIC5pbnNlcnRfY2h1bmtfYW5kX3Jl bW92ZV91cGxvYWRfbWFya2VyKGNodW5rLCBkaWdlc3QpPzsKPj4gICAgICAgICAgIHNlbGYuY2Fj aGUKPj4gICAgICAgICAgICAgICAuaW5zZXJ0KCpkaWdlc3QsICgpLCB8ZGlnZXN0fCBzZWxmLnN0 b3JlLmNsZWFyX2NodW5rKCZkaWdlc3QpKQo+PiAgICAgICB9Cj4+IGRpZmYgLS1naXQgYS9zcmMv YXBpMi9iYWNrdXAvdXBsb2FkX2NodW5rLnJzIGIvc3JjL2FwaTIvYmFja3VwL3VwbG9hZF9jaHVu ay5ycwo+PiBpbmRleCA4ZGQ3ZTRkNTIuLjdkMWY4NjNlZCAxMDA2NDQKPj4gLS0tIGEvc3JjL2Fw aTIvYmFja3VwL3VwbG9hZF9jaHVuay5ycwo+PiArKysgYi9zcmMvYXBpMi9iYWNrdXAvdXBsb2Fk X2NodW5rLnJzCj4+IEBAIC0yNTksNiArMjU5LDcgQEAgYXN5bmMgZm4gdXBsb2FkX3RvX2JhY2tl bmQoCj4+ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmxlbigpCj4+ICAgICAgICAgICAgICAg ICAgICk7Cj4+ICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgbGV0IGRhdGFzdG9yZSA9 IGVudi5kYXRhc3RvcmUuY2xvbmUoKTsKPj4gICAKPj4gICAgICAgICAgICAgICBpZiBlbnYubm9f Y2FjaGUgewo+PiAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0X2tleSA9IHBic19kYXRhc3Rv cmU6OnMzOjpvYmplY3Rfa2V5X2Zyb21fZGlnZXN0KCZkaWdlc3QpPzsKPj4gQEAgLTI3MiwxMSAr MjczLDExIEBAIGFzeW5jIGZuIHVwbG9hZF90b19iYWNrZW5kKAo+PiAgICAgICAgICAgICAgIC8v IEF2b2lkIHJlLXVwbG9hZCB0byBTMyBpZiB0aGUgY2h1bmsgaXMgZWl0aGVyIHByZXNlbnQgaW4g dGhlIExSVSBjYWNoZSBvciB0aGUgY2h1bmsKPj4gICAgICAgICAgICAgICAvLyBmaWxlIGV4aXN0 cyBvbiBmaWxlc3lzdGVtLiBUaGUgbGF0dGVyIG1lYW5zIHRoYXQgdGhlIGNodW5rIGhhcyBiZWVu IHByZXNlbnQgaW4gdGhlCj4+ICAgICAgICAgICAgICAgLy8gcGFzdCBhbiB3YXMgbm90IGNsZWFu ZWQgdXAgYnkgZ2FyYmFnZSBjb2xsZWN0aW9uLCBzbyBjb250YWluZWQgaW4gdGhlIFMzIG9iamVj dCBzdG9yZS4KPj4gLSAgICAgICAgICAgIGlmIGVudi5kYXRhc3RvcmUuY2FjaGVfY29udGFpbnMo JmRpZ2VzdCkgewo+PiArICAgICAgICAgICAgaWYgZGF0YXN0b3JlLmNhY2hlX2NvbnRhaW5zKCZk aWdlc3QpIHsKPj4gICAgICAgICAgICAgICAgICAgdHJhY2luZzo6aW5mbyEoIlNraXAgdXBsb2Fk IG9mIGNhY2hlZCBjaHVuayB7fSIsIGhleDo6ZW5jb2RlKGRpZ2VzdCkpOwo+PiAgICAgICAgICAg ICAgICAgICByZXR1cm4gT2soKGRpZ2VzdCwgc2l6ZSwgZW5jb2RlZF9zaXplLCB0cnVlKSk7Cj4+ ICAgICAgICAgICAgICAgfQo+PiAtICAgICAgICAgICAgaWYgbGV0IE9rKHRydWUpID0gZW52LmRh dGFzdG9yZS5jb25kX3RvdWNoX2NodW5rKCZkaWdlc3QsIGZhbHNlKSB7Cj4+ICsgICAgICAgICAg ICBpZiBsZXQgT2sodHJ1ZSkgPSBkYXRhc3RvcmUuY29uZF90b3VjaF9jaHVuaygmZGlnZXN0LCBm YWxzZSkgewo+PiAgICAgICAgICAgICAgICAgICB0cmFjaW5nOjppbmZvISgKPj4gICAgICAgICAg ICAgICAgICAgICAgICJTa2lwIHVwbG9hZCBvZiBhbHJlYWR5IGVuY291bnRlcmVkIGNodW5rIHt9 IiwKPj4gICAgICAgICAgICAgICAgICAgICAgIGhleDo6ZW5jb2RlKGRpZ2VzdCkKPj4gQEAgLTI4 NiwxNiArMjg3LDI0IEBAIGFzeW5jIGZuIHVwbG9hZF90b19iYWNrZW5kKAo+PiAgIAo+PiAgICAg ICAgICAgICAgIHRyYWNpbmc6OmluZm8hKCJVcGxvYWQgb2YgbmV3IGNodW5rIHt9IiwgaGV4Ojpl bmNvZGUoZGlnZXN0KSk7Cj4+ICAgICAgICAgICAgICAgbGV0IG9iamVjdF9rZXkgPSBwYnNfZGF0 YXN0b3JlOjpzMzo6b2JqZWN0X2tleV9mcm9tX2RpZ2VzdCgmZGlnZXN0KT87Cj4+IC0gICAgICAg ICAgICBsZXQgaXNfZHVwbGljYXRlID0gczNfY2xpZW50Cj4+ICsgICAgICAgICAgICBpZiAhZGF0 YXN0b3JlLmluc2VydF9iYWNrZW5kX3VwbG9hZF9tYXJrZXIoJmRpZ2VzdCk/IHsKPj4gKyAgICAg ICAgICAgICAgICByZXR1cm4gT2soKGRpZ2VzdCwgc2l6ZSwgZW5jb2RlZF9zaXplLCB0cnVlKSk7 Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBsZXQgaXNfZHVwbGljYXRlID0gbWF0 Y2ggczNfY2xpZW50Cj4+ICAgICAgICAgICAgICAgICAgIC51cGxvYWRfbm9fcmVwbGFjZV93aXRo X3JldHJ5KG9iamVjdF9rZXksIGRhdGEuY2xvbmUoKSkKPiAKPiB3aGF0IGFyZSB0aGUgc2VtYW50 aWNzIG9mIHR3byBjb25jdXJyZW50IGNhbGxzIHRvIHRoaXMsIGlmIHRoZSBjaHVuawo+IGRvZXMg bm90IGV4aXN0IGJlZm9yZSBvbiB0aGUgUzMgc2lkZT8gZG9lcyB0aGUgc2Vjb25kIGNhbGwgcmV0 dXJuIGl0J3MgYQo+IGR1cGxpY2F0ZSBldmVuIGlmIHRoZSBmaXJzdCBvbmUgaXMgc3RpbGwgaW4g cHJvZ3Jlc3M/IGRvIGJvdGggaGFwcGVuIGFuZAo+IHRoZSByZXN1bHQgZG9lc24ndCB0ZWxsIHVz IHdoaWNoIGF0dGVtcHQgIndvbiI/IGRvZXMgb25lIG9mIHRoZW0gZXJyb3IKPiBvdXQ/IGlzIHRo aXMgaW1wbGVtZW50YXRpb24vYmFja2VuZCBzcGVjaWZpYywgb3Igc3BlY2lmaWVkPwpUaGlzIGRl cGVuZHM6CgpXaXRoIHRoZSBJZi1Ob25lLU1hdGNoIGhlYWRlciBzZXQsIHRoZSByZXF1ZXN0cyB3 aWxsIHJldHVybiB3aXRoIGEgCnN0YXR1cyBjb2RlIDQwOSBgQ29uZmxpY3RgIGFuZCBpdCBpcyBy ZXRyaWVkLgoKV2l0aG91dCB0aGUgaGVhZGVyIG9iamVjdHMgY2FuIG92ZXJ3cml0ZSBlYWNoIG90 aGVyLCBidXQgdGhlcmUgaXMgbm8gCmNsZWFyIHNwZWNpZmljYXRpb24gd2hpY2ggb25lIHdpbnMu CgpTZWUgCmh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL0FQ SV9QdXRPYmplY3QuaHRtbCNBUElfUHV0T2JqZWN0X1JlcXVlc3RTeW50YXgKClNlZSBhbHNvIApo dHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL3N0b3JhZ2UvYnVpbGRpbmctbXVsdGktd3JpdGVy LWFwcGxpY2F0aW9ucy1vbi1hbWF6b24tczMtdXNpbmctbmF0aXZlLWNvbnRyb2xzLwoKPiAKPj4g ICAgICAgICAgICAgICAgICAgLmF3YWl0Cj4+IC0gICAgICAgICAgICAgICAgLm1hcF9lcnIofGVy cnwgZm9ybWF0X2VyciEoImZhaWxlZCB0byB1cGxvYWQgY2h1bmsgdG8gczMgYmFja2VuZCAtIHtl cnI6I30iKSk/Owo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICAgIE9rKGlzX2R1 cGxpY2F0ZSkgPT4gaXNfZHVwbGljYXRlLAo+PiArICAgICAgICAgICAgICAgIEVycihlcnIpID0+ IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLmNsZWFudXBfYmFja2VuZF91cGxv YWRfbWFya2VyKCZkaWdlc3QpPzsKPiAKPiBzbyBpZiAtIGZvciBhbnkgcmVhc29uIC0gYSBjb25j dXJyZW50IHVwbG9hZCBmYWlscywgd2Ugd2lsbCBjbGVhbiB1cCB0aGUKPiBjaHVuayBtYXJrZXIg aGVyZSwgYW5kIGZhaWwgb3RoZXIgYmFja3VwIHNlc3Npb25zIHRoYXQgaGFwcGVuZWQgdG8KPiB1 cGxvYWQgdGhlIHNhbWUgY2h1bmsgZGlnZXN0IGluIHBhcmFsbGVsIChiZWNhdXNlIHRoZXkgd2ls bCBlbmNvdW50ZXIgYQo+IG1pc3NpbmcgcGVuZGluZyB1cGxvYWQgbWFya2VyIHdoZW4gYXR0ZW1w dGluZyB0byBpbnNlcnQgdGhlIGNodW5rIGludG8KPiB0aGUgY2h1bmsgc3RvcmUuLikKClllcywg dGhhdCB3YXMgdGhlIGxpbWl0YXRpb24gbWVudGlvbmVkIGluIHRoZSBjb21taXQgbWVzc2FnZS4K Cj4gCj4+ICsgICAgICAgICAgICAgICAgICAgIGJhaWwhKCJmYWlsZWQgdG8gdXBsb2FkIGNodW5r IHRvIHMzIGJhY2tlbmQgLSB7ZXJyOiN9Iik7Cj4+ICsgICAgICAgICAgICAgICAgfQo+PiArICAg ICAgICAgICAgfTsKPj4gICAKPj4gICAgICAgICAgICAgICAvLyBPbmx5IGluc2VydCB0aGUgY2h1 bmsgaW50byB0aGUgY2FjaGUgYWZ0ZXIgaXQgaGFzIGJlZW4gc3VjY2Vzc3VmdWx5IHVwbG9hZGVk Lgo+PiAgICAgICAgICAgICAgIC8vIEFsdGhvdWdoIGxlc3MgcGVyZm9ybWFudCB0aGFuIGRvaW5n IHRoaXMgaW4gcGFyYWxsZWwsIGl0IGlzIHJlcXVpcmVkIGZvciBjb25zaXNlbmN5Cj4+ICAgICAg ICAgICAgICAgLy8gc2luY2UgY2h1bmtzIGFyZSBjb25zaWRlcmVkIGFzIHByZXNlbnQgb24gdGhl IGJhY2tlbmQgaWYgdGhlIGZpbGUgZXhpc3RzIGluIHRoZSBsb2NhbAo+PiAgICAgICAgICAgICAg IC8vIGNhY2hlIHN0b3JlLgo+PiAtICAgICAgICAgICAgbGV0IGRhdGFzdG9yZSA9IGVudi5kYXRh c3RvcmUuY2xvbmUoKTsKPj4gICAgICAgICAgICAgICB0cmFjaW5nOjppbmZvISgiQ2FjaGluZyBv ZiBjaHVuayB7fSIsIGhleDo6ZW5jb2RlKGRpZ2VzdCkpOwo+PiAgICAgICAgICAgICAgIGxldCBf ID0gdG9raW86OnRhc2s6OnNwYXduX2Jsb2NraW5nKG1vdmUgfHwgewo+PiAgICAgICAgICAgICAg ICAgICBsZXQgY2h1bmsgPSBEYXRhQmxvYjo6ZnJvbV9yYXcoZGF0YS50b192ZWMoKSk/Owo+PiBk aWZmIC0tZ2l0IGEvc3JjL2FwaTIvY29uZmlnL2RhdGFzdG9yZS5ycyBiL3NyYy9hcGkyL2NvbmZp Zy9kYXRhc3RvcmUucnMKPj4gaW5kZXggM2IwM2MwNDY2Li41NDFiZDBhMDQgMTAwNjQ0Cj4+IC0t LSBhL3NyYy9hcGkyL2NvbmZpZy9kYXRhc3RvcmUucnMKPj4gKysrIGIvc3JjL2FwaTIvY29uZmln L2RhdGFzdG9yZS5ycwo+PiBAQCAtMTczLDYgKzE3Myw3IEBAIHB1YihjcmF0ZSkgZm4gZG9fY3Jl YXRlX2RhdGFzdG9yZSgKPj4gICAgICAgICAgICAgICAgICAgJmRhdGFzdG9yZS5uYW1lLAo+PiAg ICAgICAgICAgICAgICAgICAmcGF0aCwKPj4gICAgICAgICAgICAgICAgICAgdHVuaW5nLnN5bmNf bGV2ZWwudW53cmFwX29yX2RlZmF1bHQoKSwKPj4gKyAgICAgICAgICAgICAgICBiYWNrZW5kX3R5 cGUsCj4+ICAgICAgICAgICAgICAgKQo+PiAgICAgICAgICAgfSk/Cj4+ICAgICAgIH0gZWxzZSB7 Cj4+IEBAIC0yMDQsNiArMjA1LDcgQEAgcHViKGNyYXRlKSBmbiBkb19jcmVhdGVfZGF0YXN0b3Jl KAo+PiAgICAgICAgICAgICAgIGJhY2t1cF91c2VyLnVpZCwKPj4gICAgICAgICAgICAgICBiYWNr dXBfdXNlci5naWQsCj4+ICAgICAgICAgICAgICAgdHVuaW5nLnN5bmNfbGV2ZWwudW53cmFwX29y X2RlZmF1bHQoKSwKPj4gKyAgICAgICAgICAgIGJhY2tlbmRfdHlwZSwKPj4gICAgICAgICAgICk/ Cj4+ICAgICAgIH07Cj4+ICAgCj4+IC0tIAo+PiAyLjQ3LjMKPj4KPj4KPj4KPj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gcGJzLWRldmVsIG1haWxp bmcgbGlzdAo+PiBwYnMtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KPj4gaHR0cHM6Ly9saXN0cy5w cm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGJzLWRldmVsCj4+Cj4+Cj4+Cj4g Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBw YnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gcGJzLWRldmVsQGxpc3RzLnByb3htb3guY29tCj4gaHR0 cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGJzLWRldmVs Cj4gCj4gCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CnBicy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBz Oi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3Bicy1kZXZlbAo=