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 9F9421FF191 for ; Tue, 7 Oct 2025 12:15:17 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 6462815053; Tue, 7 Oct 2025 12:15:21 +0200 (CEST) Message-ID: <78cbd2ab-4c29-4c4d-8c7e-7a7060025611@proxmox.com> Date: Tue, 7 Oct 2025 12:15:15 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion , =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= References: <20251006104151.487202-1-c.ebner@proxmox.com> <20251006104151.487202-6-c.ebner@proxmox.com> <1759752528.phfr2pxqbx.astroid@yuna.none> Content-Language: en-US, de-DE From: Christian Ebner In-Reply-To: <1759752528.phfr2pxqbx.astroid@yuna.none> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1759832086480 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.357 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 5/7] 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" T24gMTAvNi8yNSAzOjE3IFBNLCBGYWJpYW4gR3LDvG5iaWNobGVyIHdyb3RlOgo+IE9uIE9jdG9i ZXIgNiwgMjAyNSAxMjo0MSBwbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+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+IEF2b2lkIHRoaXMgb3ZlcmhlYWQgZm9yIHJl Z3VsYXIgZGF0YXN0b3JlcyBieSBwYXNzaW5nIGFuZCBjaGVja2luZwo+PiB0aGUgYmFja2VuZCB0 eXBlIGZvciB0aGUgY2h1bmsgc3RvcmUuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBF Ym5lciA8Yy5lYm5lckBwcm94bW94LmNvbT4KPj4gLS0tCj4+ICAgcGJzLWRhdGFzdG9yZS9zcmMv Y2h1bmtfc3RvcmUucnMgfCA5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+PiAg IHBicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyAgIHwgMzIgKysrKysrKysrKysKPj4gICBz cmMvYXBpMi9iYWNrdXAvdXBsb2FkX2NodW5rLnJzICB8IDE3ICsrKystLQo+PiAgIHNyYy9hcGky L2NvbmZpZy9kYXRhc3RvcmUucnMgICAgIHwgIDIgKwo+PiAgIDQgZmlsZXMgY2hhbmdlZCwgMTMz IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvcGJzLWRh dGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMgYi9wYnMtZGF0YXN0b3JlL3NyYy9jaHVua19zdG9y ZS5ycwo+PiBpbmRleCA3NGZhNzlkYjEuLjIyZWZlNGEzMiAxMDA2NDQKPj4gLS0tIGEvcGJzLWRh dGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMKPj4gKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvY2h1 bmtfc3RvcmUucnMKPj4gQEAgLTcsNyArNyw3IEBAIHVzZSBzdGQ6OnRpbWU6OkR1cmF0aW9uOwo+ PiAgIHVzZSBhbnlob3c6OntiYWlsLCBmb3JtYXRfZXJyLCBDb250ZXh0LCBFcnJvcn07Cj4+ICAg dXNlIHRyYWNpbmc6OntpbmZvLCB3YXJufTsKPj4gICAKPj4gLXVzZSBwYnNfYXBpX3R5cGVzOjp7 RGF0YXN0b3JlRlN5bmNMZXZlbCwgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXN9Owo+PiArdXNlIHBi c19hcGlfdHlwZXM6OntEYXRhc3RvcmVCYWNrZW5kVHlwZSwgRGF0YXN0b3JlRlN5bmNMZXZlbCwg R2FyYmFnZUNvbGxlY3Rpb25TdGF0dXN9Owo+PiAgIHVzZSBwcm94bW94X2lvOjpSZWFkRXh0Owo+ PiAgIHVzZSBwcm94bW94X3MzX2NsaWVudDo6UzNDbGllbnQ7Cj4+ICAgdXNlIHByb3htb3hfc3lz Ojpmczo6e2NyZWF0ZV9kaXIsIGNyZWF0ZV9wYXRoLCBmaWxlX3R5cGVfZnJvbV9maWxlX3N0YXQs IENyZWF0ZU9wdGlvbnN9Owo+PiBAQCAtMjIsNiArMjIsMTAgQEAgdXNlIGNyYXRlOjpmaWxlX2Zv cm1hdHM6OnsKPj4gICB9Owo+PiAgIHVzZSBjcmF0ZTo6RGF0YUJsb2I7Cj4+ICAgCj4+ICsvLy8g RmlsZW5hbWUgZXh0ZW5zaW9uIGZvciBsb2NhbCBkYXRhc3RvcmUgY2FjaGUgbWFya2VyIGZpbGVz IGluZGljYXRpbmcKPj4gKy8vLyB0aGUgY2h1bmsgYmVpbmcgdXBsb2FkZWQgdG8gdGhlIGJhY2tl bmQKPj4gK3B1YihjcmF0ZSkgY29uc3QgQkFDS0VORF9VUExPQURfTUFSS0VSX0VYVDogJnN0ciA9 ICJiYWNrZW5kLXVwbG9hZCI7Cj4gCj4gSSB0aGluayB0aGlzIHBhcnQgaGVyZSBzaG91bGQgYmUg aW50ZXJuYWwgdG8gdGhlIGNodW5rIHN0b3JlCj4gCj4+ICsKPj4gICAvLy8gRmlsZSBzeXN0ZW0g YmFzZWQgY2h1bmsgc3RvcmUKPj4gICBwdWIgc3RydWN0IENodW5rU3RvcmUgewo+PiAgICAgICBu YW1lOiBTdHJpbmcsIC8vIHVzZWQgZm9yIGVycm9yIHJlcG9ydGluZwo+PiBAQCAtMzAsNiArMzQs NyBAQCBwdWIgc3RydWN0IENodW5rU3RvcmUgewo+PiAgICAgICBtdXRleDogTXV0ZXg8KCk+LAo+ PiAgICAgICBsb2NrZXI6IE9wdGlvbjxBcmM8TXV0ZXg8UHJvY2Vzc0xvY2tlcj4+PiwKPj4gICAg ICAgc3luY19sZXZlbDogRGF0YXN0b3JlRlN5bmNMZXZlbCwKPj4gKyAgICBkYXRhc3RvcmVfYmFj a2VuZF90eXBlOiBEYXRhc3RvcmVCYWNrZW5kVHlwZSwKPj4gICB9Cj4+ICAgCj4+ICAgLy8gVE9E Tzogd2hhdCBhYm91dCBzeXNjdGwgc2V0dGluZyB2bS52ZnNfY2FjaGVfcHJlc3N1cmUgKDAgLSAx MDApID8KPj4gQEAgLTc3LDYgKzgyLDcgQEAgaW1wbCBDaHVua1N0b3JlIHsKPj4gICAgICAgICAg ICAgICBtdXRleDogTXV0ZXg6Om5ldygoKSksCj4+ICAgICAgICAgICAgICAgbG9ja2VyOiBOb25l LAo+PiAgICAgICAgICAgICAgIHN5bmNfbGV2ZWw6IERlZmF1bHQ6OmRlZmF1bHQoKSwKPj4gKyAg ICAgICAgICAgIGRhdGFzdG9yZV9iYWNrZW5kX3R5cGU6IERhdGFzdG9yZUJhY2tlbmRUeXBlOjpk ZWZhdWx0KCksCj4+ICAgICAgICAgICB9Cj4+ICAgICAgIH0KPj4gICAKPj4gQEAgLTk3LDYgKzEw Myw3IEBAIGltcGwgQ2h1bmtTdG9yZSB7Cj4+ICAgICAgICAgICB1aWQ6IG5peDo6dW5pc3RkOjpV aWQsCj4+ICAgICAgICAgICBnaWQ6IG5peDo6dW5pc3RkOjpHaWQsCj4+ICAgICAgICAgICBzeW5j X2xldmVsOiBEYXRhc3RvcmVGU3luY0xldmVsLAo+PiArICAgICAgICBkYXRhc3RvcmVfYmFja2Vu ZF90eXBlOiBEYXRhc3RvcmVCYWNrZW5kVHlwZSwKPj4gICAgICAgKSAtPiBSZXN1bHQ8U2VsZiwg RXJyb3I+Cj4+ICAgICAgIHdoZXJlCj4+ICAgICAgICAgICBQOiBJbnRvPFBhdGhCdWY+LAo+PiBA QCAtMTUxLDcgKzE1OCw3IEBAIGltcGwgQ2h1bmtTdG9yZSB7Cj4+ICAgICAgICAgICAgICAgfQo+ PiAgICAgICAgICAgfQo+PiAgIAo+PiAtICAgICAgICBTZWxmOjpvcGVuKG5hbWUsIGJhc2UsIHN5 bmNfbGV2ZWwpCj4+ICsgICAgICAgIFNlbGY6Om9wZW4obmFtZSwgYmFzZSwgc3luY19sZXZlbCwg ZGF0YXN0b3JlX2JhY2tlbmRfdHlwZSkKPj4gICAgICAgfQo+PiAgIAo+PiAgICAgICBmbiBsb2Nr ZmlsZV9wYXRoPFA6IEludG88UGF0aEJ1Zj4+KGJhc2U6IFApIC0+IFBhdGhCdWYgewo+PiBAQCAt MTg1LDYgKzE5Miw3IEBAIGltcGwgQ2h1bmtTdG9yZSB7Cj4+ICAgICAgICAgICBuYW1lOiAmc3Ry LAo+PiAgICAgICAgICAgYmFzZTogUCwKPj4gICAgICAgICAgIHN5bmNfbGV2ZWw6IERhdGFzdG9y ZUZTeW5jTGV2ZWwsCj4+ICsgICAgICAgIGRhdGFzdG9yZV9iYWNrZW5kX3R5cGU6IERhdGFzdG9y ZUJhY2tlbmRUeXBlLAo+PiAgICAgICApIC0+IFJlc3VsdDxTZWxmLCBFcnJvcj4gewo+PiAgICAg ICAgICAgbGV0IGJhc2U6IFBhdGhCdWYgPSBiYXNlLmludG8oKTsKPj4gICAKPj4gQEAgLTIwMSw2 ICsyMDksNyBAQCBpbXBsIENodW5rU3RvcmUgewo+PiAgICAgICAgICAgICAgIGxvY2tlcjogU29t ZShsb2NrZXIpLAo+PiAgICAgICAgICAgICAgIG11dGV4OiBNdXRleDo6bmV3KCgpKSwKPj4gICAg ICAgICAgICAgICBzeW5jX2xldmVsLAo+PiArICAgICAgICAgICAgZGF0YXN0b3JlX2JhY2tlbmRf dHlwZSwKPj4gICAgICAgICAgIH0pCj4+ICAgICAgIH0KPj4gICAKPj4gQEAgLTU2Nyw2ICs1NzYs NDAgQEAgaW1wbCBDaHVua1N0b3JlIHsKPj4gICAgICAgICAgIE9rKCgpKQo+PiAgICAgICB9Cj4+ ICAgCj4+ICsgICAgcHViKGNyYXRlKSBmbiBpbnNlcnRfYmFja2VuZF91cGxvYWRfbWFya2VyKCZz ZWxmLCBkaWdlc3Q6ICZbdTg7IDMyXSkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+PiArICAgICAg ICBpZiBzZWxmLmRhdGFzdG9yZV9iYWNrZW5kX3R5cGUgPT0gRGF0YXN0b3JlQmFja2VuZFR5cGU6 OkZpbGVzeXN0ZW0gewo+PiArICAgICAgICAgICAgYmFpbCEoImNhbm5vdCBjcmVhdGUgYmFja2Vu ZCB1cGxvYWQgbWFya2VyLCBub3QgYSBjYWNoZSBzdG9yZSIpOwo+PiArICAgICAgICB9Cj4+ICsg ICAgICAgIGxldCAobWFya2VyX3BhdGgsIGRpZ2VzdF9zdHIpID0gc2VsZi5jaHVua19iYWNrZWRf dXBsb2FkX21hcmtlcl9wYXRoKGRpZ2VzdCk7Cj4+ICsKPj4gKyAgICAgICAgbGV0IF9sb2NrID0g c2VsZi5tdXRleC5sb2NrKCk7Cj4+ICsKPj4gKyAgICAgICAgc3RkOjpmczo6RmlsZTo6b3B0aW9u cygpCj4+ICsgICAgICAgICAgICAud3JpdGUodHJ1ZSkKPj4gKyAgICAgICAgICAgIC5jcmVhdGVf bmV3KHRydWUpCj4+ICsgICAgICAgICAgICAub3BlbigmbWFya2VyX3BhdGgpCj4+ICsgICAgICAg ICAgICAud2l0aF9jb250ZXh0KHx8IHsKPj4gKyAgICAgICAgICAgICAgICBmb3JtYXQhKCJmYWls ZWQgdG8gY3JlYXRlIGJhY2tlbmQgdXBsb2FkIG1hcmtlciBmb3IgY2h1bmsge2RpZ2VzdF9zdHJ9 IikKPiAKPiBBOiByZWZlcmVuY2UgZm9yIGNvbW1lbnQgZnVydGhlciBiZWxvdyBpbiB1cGxvYWRf Y2h1bmsKPiAKPj4gKyAgICAgICAgICAgIH0pPzsKPj4gKyAgICAgICAgT2soKCkpCj4+ICsgICAg fQo+PiArCj4+ICsgICAgcHViKGNyYXRlKSBmbiBjbGVhbnVwX2JhY2tlbmRfdXBsb2FkX21hcmtl cigmc2VsZiwgZGlnZXN0OiAmW3U4OyAzMl0pIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gKyAg ICAgICAgaWYgc2VsZi5kYXRhc3RvcmVfYmFja2VuZF90eXBlID09IERhdGFzdG9yZUJhY2tlbmRU eXBlOjpGaWxlc3lzdGVtIHsKPj4gKyAgICAgICAgICAgIGJhaWwhKCJjYW5ub3QgY2xlYW51cCBi YWNrZW5kIHVwbG9hZCBtYXJrZXIsIG5vdCBhIGNhY2hlIHN0b3JlIik7Cj4+ICsgICAgICAgIH0K Pj4gKyAgICAgICAgbGV0IChtYXJrZXJfcGF0aCwgX2RpZ2VzdF9zdHIpID0gc2VsZi5jaHVua19i YWNrZWRfdXBsb2FkX21hcmtlcl9wYXRoKGRpZ2VzdCk7Cj4+ICsKPj4gKyAgICAgICAgbGV0IF9s b2NrID0gc2VsZi5tdXRleC5sb2NrKCk7Cj4+ICsKPj4gKyAgICAgICAgaWYgbGV0IEVycihlcnIp ID0gc3RkOjpmczo6cmVtb3ZlX2ZpbGUobWFya2VyX3BhdGgpIHsKPj4gKyAgICAgICAgICAgIGlm IGVyci5raW5kKCkgIT0gc3RkOjppbzo6RXJyb3JLaW5kOjpOb3RGb3VuZCB7Cj4+ICsgICAgICAg ICAgICAgICAgYmFpbCEoImZhaWxlZCB0byBjbGVhbnVwIGJhY2tlbmQgdXBsb2FkIG1hcmtlcjog e2Vycn0iKTsKPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgfQo+PiArICAgICAgICBPaygo KSkKPj4gKyAgICB9Cj4+ICsKPiAKPiBhbmQgaW5zdGVhZCB3ZSBzaG91bGQgYWRkIGEgdGhpcmQg aGVscGVyIGhlcmUgdGhhdCBhbGxvd3MgdG8gcXVlcnkKPiB3aGV0aGVyIHRoZXJlIGV4aXN0cyBh IHBlbmRpbmcgdXBsb2FkIG1hcmtlciBmb3IgYSBjZXJ0YWluIGRpZ2VzdD8KPiAKPj4gICAgICAg cHViIGZuIGluc2VydF9jaHVuaygmc2VsZiwgY2h1bms6ICZEYXRhQmxvYiwgZGlnZXN0OiAmW3U4 OyAzMl0pIC0+IFJlc3VsdDwoYm9vbCwgdTY0KSwgRXJyb3I+IHsKPj4gICAgICAgICAgIC8vIHVu d3JhcDogb25seSBgTm9uZWAgaW4gdW5pdCB0ZXN0cwo+PiAgICAgICAgICAgYXNzZXJ0IShzZWxm LmxvY2tlci5pc19zb21lKCkpOwo+PiBAQCAtNjQ0LDYgKzY4NywxNiBAQCBpbXBsIENodW5rU3Rv cmUgewo+PiAgICAgICAgICAgICAgIGZvcm1hdF9lcnIhKCJpbnNlcnRpbmcgY2h1bmsgb24gc3Rv cmUgJ3tuYW1lfScgZmFpbGVkIGZvciB7ZGlnZXN0X3N0cn0gLSB7ZXJyfSIpCj4+ICAgICAgICAg ICB9KT87Cj4+ICAgCj4+ICsgICAgICAgIGlmIHNlbGYuZGF0YXN0b3JlX2JhY2tlbmRfdHlwZSAh PSBEYXRhc3RvcmVCYWNrZW5kVHlwZTo6RmlsZXN5c3RlbSB7Cj4+ICsgICAgICAgICAgICBpZiBs ZXQgRXJyKGVycikgPQo+PiArICAgICAgICAgICAgICAgIHN0ZDo6ZnM6OnJlbW92ZV9maWxlKGNo dW5rX3BhdGgud2l0aF9leHRlbnNpb24oQkFDS0VORF9VUExPQURfTUFSS0VSX0VYVCkpCj4+ICsg ICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgICAgaWYgZXJyLmtpbmQoKSAhPSBzdGQ6Omlv OjpFcnJvcktpbmQ6Ok5vdEZvdW5kIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgYmFpbCEoImZh aWxlZCB0byBjbGVhbnVwIGJhY2tlbmQgdXBsb2FkIG1hcmtlcjoge2Vycn0iKTsKPj4gKyAgICAg ICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4gKwo+PiAgICAg ICAgICAgaWYgc2VsZi5zeW5jX2xldmVsID09IERhdGFzdG9yZUZTeW5jTGV2ZWw6OkZpbGUgewo+ PiAgICAgICAgICAgICAgIC8vIGZzeW5jIGRpciBoYW5kbGUgdG8gcGVyc2lzdCB0aGUgdG1wIHJl bmFtZQo+PiAgICAgICAgICAgICAgIGxldCBkaXIgPSBzdGQ6OmZzOjpGaWxlOjpvcGVuKGNodW5r X2Rpcl9wYXRoKT87Cj4+IEBAIC02ODgsNiArNzQxLDE1IEBAIGltcGwgQ2h1bmtTdG9yZSB7Cj4+ ICAgICAgICAgICBPaygoKSkKPj4gICAgICAgfQo+PiAgIAo+PiArICAgIC8vLyBHZW5lcmF0ZSBm aWxlIHBhdGggZm9yIGJhY2tlbmQgdXBsb2FkIG1hcmtlciBvZiBnaXZlbiBjaHVuayBkaWdlc3Qu Cj4+ICsgICAgcHViKGNyYXRlKSBmbiBjaHVua19iYWNrZWRfdXBsb2FkX21hcmtlcl9wYXRoKCZz ZWxmLCBkaWdlc3Q6ICZbdTg7IDMyXSkgLT4gKFBhdGhCdWYsIFN0cmluZykgewo+PiArICAgICAg ICBsZXQgKGNodW5rX3BhdGgsIGRpZ2VzdF9zdHIpID0gc2VsZi5jaHVua19wYXRoKGRpZ2VzdCk7 Cj4+ICsgICAgICAgICgKPj4gKyAgICAgICAgICAgIGNodW5rX3BhdGgud2l0aF9leHRlbnNpb24o QkFDS0VORF9VUExPQURfTUFSS0VSX0VYVCksCj4+ICsgICAgICAgICAgICBkaWdlc3Rfc3RyLAo+ PiArICAgICAgICApCj4+ICsgICAgfQo+IAo+IHRoaXMgc2hvdWxkIGJlIGludGVybmFsIGFzIHdl bGwKPiAKPj4gKwo+PiAgICAgICBwdWIgZm4gcmVsYXRpdmVfcGF0aCgmc2VsZiwgcGF0aDogJlBh dGgpIC0+IFBhdGhCdWYgewo+PiAgICAgICAgICAgLy8gdW53cmFwOiBvbmx5IGBOb25lYCBpbiB1 bml0IHRlc3RzCj4+ICAgICAgICAgICBhc3NlcnQhKHNlbGYubG9ja2VyLmlzX3NvbWUoKSk7Cj4+ IEBAIC03NzMsMTQgKzgzNSwyNiBAQCBmbiB0ZXN0X2NodW5rX3N0b3JlMSgpIHsKPj4gICAKPj4g ICAgICAgaWYgbGV0IEVycihfZSkgPSBzdGQ6OmZzOjpyZW1vdmVfZGlyX2FsbCgiLnRlc3RkaXIi KSB7IC8qIGlnbm9yZSAqLyB9Cj4+ICAgCj4+IC0gICAgbGV0IGNodW5rX3N0b3JlID0gQ2h1bmtT dG9yZTo6b3BlbigidGVzdCIsICZwYXRoLCBEYXRhc3RvcmVGU3luY0xldmVsOjpOb25lKTsKPj4g KyAgICBsZXQgY2h1bmtfc3RvcmUgPSBDaHVua1N0b3JlOjpvcGVuKAo+PiArICAgICAgICAidGVz dCIsCj4+ICsgICAgICAgICZwYXRoLAo+PiArICAgICAgICBEYXRhc3RvcmVGU3luY0xldmVsOjpO b25lLAo+PiArICAgICAgICBEYXRhc3RvcmVCYWNrZW5kVHlwZTo6RmlsZXN5c3RlbSwKPj4gKyAg ICApOwo+PiAgICAgICBhc3NlcnQhKGNodW5rX3N0b3JlLmlzX2VycigpKTsKPj4gICAKPj4gICAg ICAgbGV0IHVzZXIgPSBuaXg6OnVuaXN0ZDo6VXNlcjo6ZnJvbV91aWQobml4Ojp1bmlzdGQ6OlVp ZDo6Y3VycmVudCgpKQo+PiAgICAgICAgICAgLnVud3JhcCgpCj4+ICAgICAgICAgICAudW53cmFw KCk7Cj4+IC0gICAgbGV0IGNodW5rX3N0b3JlID0KPj4gLSAgICAgICAgQ2h1bmtTdG9yZTo6Y3Jl YXRlKCJ0ZXN0IiwgJnBhdGgsIHVzZXIudWlkLCB1c2VyLmdpZCwgRGF0YXN0b3JlRlN5bmNMZXZl bDo6Tm9uZSkudW53cmFwKCk7Cj4+ICsgICAgbGV0IGNodW5rX3N0b3JlID0gQ2h1bmtTdG9yZTo6 Y3JlYXRlKAo+PiArICAgICAgICAidGVzdCIsCj4+ICsgICAgICAgICZwYXRoLAo+PiArICAgICAg ICB1c2VyLnVpZCwKPj4gKyAgICAgICAgdXNlci5naWQsCj4+ICsgICAgICAgIERhdGFzdG9yZUZT eW5jTGV2ZWw6Ok5vbmUsCj4+ICsgICAgICAgIERhdGFzdG9yZUJhY2tlbmRUeXBlOjpGaWxlc3lz dGVtLAo+PiArICAgICkKPj4gKyAgICAudW53cmFwKCk7Cj4+ICAgCj4+ICAgICAgIGxldCAoY2h1 bmssIGRpZ2VzdCkgPSBjcmF0ZTo6ZGF0YV9ibG9iOjpEYXRhQ2h1bmtCdWlsZGVyOjpuZXcoJlsw dTgsIDF1OF0pCj4+ICAgICAgICAgICAuYnVpbGQoKQo+PiBAQCAtNzkyLDggKzg2NiwxNCBAQCBm biB0ZXN0X2NodW5rX3N0b3JlMSgpIHsKPj4gICAgICAgbGV0IChleGlzdHMsIF8pID0gY2h1bmtf c3RvcmUuaW5zZXJ0X2NodW5rKCZjaHVuaywgJmRpZ2VzdCkudW53cmFwKCk7Cj4+ICAgICAgIGFz c2VydCEoZXhpc3RzKTsKPj4gICAKPj4gLSAgICBsZXQgY2h1bmtfc3RvcmUgPQo+PiAtICAgICAg ICBDaHVua1N0b3JlOjpjcmVhdGUoInRlc3QiLCAmcGF0aCwgdXNlci51aWQsIHVzZXIuZ2lkLCBE YXRhc3RvcmVGU3luY0xldmVsOjpOb25lKTsKPj4gKyAgICBsZXQgY2h1bmtfc3RvcmUgPSBDaHVu a1N0b3JlOjpjcmVhdGUoCj4+ICsgICAgICAgICJ0ZXN0IiwKPj4gKyAgICAgICAgJnBhdGgsCj4+ ICsgICAgICAgIHVzZXIudWlkLAo+PiArICAgICAgICB1c2VyLmdpZCwKPj4gKyAgICAgICAgRGF0 YXN0b3JlRlN5bmNMZXZlbDo6Tm9uZSwKPj4gKyAgICAgICAgRGF0YXN0b3JlQmFja2VuZFR5cGU6 OkZpbGVzeXN0ZW0sCj4+ICsgICAgKTsKPj4gICAgICAgYXNzZXJ0IShjaHVua19zdG9yZS5pc19l cnIoKSk7Cj4+ICAgCj4+ICAgICAgIGlmIGxldCBFcnIoX2UpID0gc3RkOjpmczo6cmVtb3ZlX2Rp cl9hbGwoIi50ZXN0ZGlyIikgeyAvKiBpZ25vcmUgKi8gfQo+PiBkaWZmIC0tZ2l0IGEvcGJzLWRh dGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJz Cj4+IGluZGV4IDRmNTVlYjlkYi4uNThmYjg2M2VjIDEwMDY0NAo+PiAtLS0gYS9wYnMtZGF0YXN0 b3JlL3NyYy9kYXRhc3RvcmUucnMKPj4gKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3Jl LnJzCj4+IEBAIC0zNDgsMTAgKzM0OCwxNCBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAg ICAgICAgICAgIERhdGFzdG9yZVR1bmluZzo6QVBJX1NDSEVNQQo+PiAgICAgICAgICAgICAgICAg ICAgICAgLnBhcnNlX3Byb3BlcnR5X3N0cmluZyhjb25maWcudHVuaW5nLmFzX2RlcmVmKCkudW53 cmFwX29yKCIiKSk/LAo+PiAgICAgICAgICAgICAgICk/Owo+PiArICAgICAgICAgICAgbGV0IGJh Y2tlbmRfY29uZmlnOiBEYXRhc3RvcmVCYWNrZW5kQ29uZmlnID0KPj4gKyAgICAgICAgICAgICAg ICBjb25maWcuYmFja2VuZC5hc19kZXJlZigpLnVud3JhcF9vcigiIikucGFyc2UoKT87Cj4+ICsg ICAgICAgICAgICBsZXQgYmFja2VuZF90eXBlID0gYmFja2VuZF9jb25maWcudHkudW53cmFwX29y X2RlZmF1bHQoKTsKPj4gICAgICAgICAgICAgICBBcmM6Om5ldyhDaHVua1N0b3JlOjpvcGVuKAo+ PiAgICAgICAgICAgICAgICAgICBuYW1lLAo+PiAgICAgICAgICAgICAgICAgICBjb25maWcuYWJz b2x1dGVfcGF0aCgpLAo+PiAgICAgICAgICAgICAgICAgICB0dW5pbmcuc3luY19sZXZlbC51bndy YXBfb3JfZGVmYXVsdCgpLAo+PiArICAgICAgICAgICAgICAgIGJhY2tlbmRfdHlwZSwKPj4gICAg ICAgICAgICAgICApPykKPj4gICAgICAgICAgIH07Cj4+ICAgCj4+IEBAIC00MzYsMTAgKzQ0MCwx NiBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICAgICAgRGF0YXN0b3JlVHVuaW5nOjpB UElfU0NIRU1BCj4+ICAgICAgICAgICAgICAgICAgIC5wYXJzZV9wcm9wZXJ0eV9zdHJpbmcoY29u ZmlnLnR1bmluZy5hc19kZXJlZigpLnVud3JhcF9vcigiIikpPywKPj4gICAgICAgICAgICk/Owo+ PiArICAgICAgICBsZXQgYmFja2VuZF9jb25maWc6IERhdGFzdG9yZUJhY2tlbmRDb25maWcgPSBz ZXJkZV9qc29uOjpmcm9tX3ZhbHVlKAo+PiArICAgICAgICAgICAgRGF0YXN0b3JlQmFja2VuZENv bmZpZzo6QVBJX1NDSEVNQQo+PiArICAgICAgICAgICAgICAgIC5wYXJzZV9wcm9wZXJ0eV9zdHJp bmcoY29uZmlnLmJhY2tlbmQuYXNfZGVyZWYoKS51bndyYXBfb3IoIiIpKT8sCj4+ICsgICAgICAg ICk/Owo+PiArICAgICAgICBsZXQgYmFja2VuZF90eXBlID0gYmFja2VuZF9jb25maWcudHkudW53 cmFwX29yX2RlZmF1bHQoKTsKPj4gICAgICAgICAgIGxldCBjaHVua19zdG9yZSA9IENodW5rU3Rv cmU6Om9wZW4oCj4+ICAgICAgICAgICAgICAgJm5hbWUsCj4+ICAgICAgICAgICAgICAgY29uZmln LmFic29sdXRlX3BhdGgoKSwKPj4gICAgICAgICAgICAgICB0dW5pbmcuc3luY19sZXZlbC51bndy YXBfb3JfZGVmYXVsdCgpLAo+PiArICAgICAgICAgICAgYmFja2VuZF90eXBlLAo+PiAgICAgICAg ICAgKT87Cj4+ICAgICAgICAgICBsZXQgaW5uZXIgPSBBcmM6Om5ldyhTZWxmOjp3aXRoX3N0b3Jl X2FuZF9jb25maWcoCj4+ICAgICAgICAgICAgICAgQXJjOjpuZXcoY2h1bmtfc3RvcmUpLAo+PiBA QCAtMTY2Myw2ICsxNjczLDE1IEBAIGltcGwgRGF0YVN0b3JlIHsKPj4gICAgICAgICAgICAgICAg ICAgICAgIGxldCBhdGltZSA9IG1hdGNoIHN0ZDo6ZnM6Om1ldGFkYXRhKCZjaHVua19wYXRoKSB7 Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgT2soc3RhdCkgPT4gc3RhdC5hY2Nlc3NlZCgp PywKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZXJyKSBpZiBlcnIua2luZCgpID09 IHN0ZDo6aW86OkVycm9yS2luZDo6Tm90Rm91bmQgPT4gewo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIHN0ZDo6ZnM6Om1ldGFkYXRhKAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaHVua19wYXRoCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAud2l0aF9leHRlbnNpb24oY3JhdGU6OmNodW5rX3N0b3JlOjpCQUNLRU5EX1VQTE9BRF9N QVJLRVJfRVhUKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLmlzX29rKCkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8hKCJrZWVwIGlu IHByb2dyZXNzIHt9IiwgY29udGVudC5rZXkpOwo+IAo+IHdoYXQgZG9lcyBga2VlcCBpbiBwcm9n cmVzc2AgbWVhbj8KPiAKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+IAo+IHRoaXMgc2hvdWxkIGNh bGwgdGhlIG5ldyBoZWxwZXIuCj4gCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v IEZpbGUgbm90IGZvdW5kLCBkZWxldGUgYnkgc2V0dGluZyBhdGltZSB0byB1bml4IGVwb2NoCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8hKCJOb3QgZm91bmQsIG1hcmsgZm9y IGRlbGV0aW9uOiB7fSIsIGNvbnRlbnQua2V5KTsKPj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3lzdGVtVGltZTo6VU5JWF9FUE9DSAo+PiBAQCAtMTg2Nyw2ICsxODg2LDE5IEBAIGlt cGwgRGF0YVN0b3JlIHsKPj4gICAgICAgICAgIHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuaW5zZXJ0 X2NodW5rKGNodW5rLCBkaWdlc3QpCj4+ICAgICAgIH0KPj4gICAKPj4gKyAgICAvLy8gSW5zZXJ0 cyB0aGUgbWFya2VyIGZpbGUgdG8gc2lnbmFsIGFuIGluIHByb2dyZXNzIHVwbG9hZCB0byB0aGUg YmFja2VuZAo+PiArICAgIC8vLwo+PiArICAgIC8vLyBUaGUgcHJlc2VuY2Ugb2YgdGhlIG1hcmtl ciBhdm9pZHMgYSByYWNlIGJldHdlZW4gaW5zZXJ0aW5nIHRoZSBjaHVuayBpbnRvIHRoZQo+PiAr ICAgIC8vLyBkYXRhc3RvcmUgYW5kIGNsZWFudXAgb2YgdGhlIGNodW5rIGJ5IGdhcmJhZ2UgY29s bGVjdGlvbi4KPj4gKyAgICBwdWIgZm4gaW5zZXJ0X2JhY2tlbmRfdXBsb2FkX21hcmtlcigmc2Vs ZiwgZGlnZXN0OiAmW3U4OyAzMl0pIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gKyAgICAgICAg c2VsZi5pbm5lci5jaHVua19zdG9yZS5pbnNlcnRfYmFja2VuZF91cGxvYWRfbWFya2VyKGRpZ2Vz dCkKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvLy8gUmVtb3ZlIHRoZSBtYXJrZXIgZmlsZSBzaWdu YWxpbmcgYW4gaW4tcHJvZ3Jlc3MgdXBsb2FkIHRvIHRoZSBiYWNrZW5kCj4+ICsgICAgcHViIGZu IGNsZWFudXBfYmFja2VuZF91cGxvYWRfbWFya2VyKCZzZWxmLCBkaWdlc3Q6ICZbdTg7IDMyXSkg LT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+PiArICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3Jl LmNsZWFudXBfYmFja2VuZF91cGxvYWRfbWFya2VyKGRpZ2VzdCkKPj4gKyAgICB9Cj4+ICsKPj4g ICAgICAgcHViIGZuIHN0YXRfY2h1bmsoJnNlbGYsIGRpZ2VzdDogJlt1ODsgMzJdKSAtPiBSZXN1 bHQ8c3RkOjpmczo6TWV0YWRhdGEsIEVycm9yPiB7Cj4+ICAgICAgICAgICBsZXQgKGNodW5rX3Bh dGgsIF9kaWdlc3Rfc3RyKSA9IHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuY2h1bmtfcGF0aChkaWdl c3QpOwo+PiAgICAgICAgICAgc3RkOjpmczo6bWV0YWRhdGEoY2h1bmtfcGF0aCkubWFwX2VycihF cnJvcjo6ZnJvbSkKPj4gZGlmZiAtLWdpdCBhL3NyYy9hcGkyL2JhY2t1cC91cGxvYWRfY2h1bmsu cnMgYi9zcmMvYXBpMi9iYWNrdXAvdXBsb2FkX2NodW5rLnJzCj4+IGluZGV4IDhkZDdlNGQ1Mi4u ZDRiMTg1MGViIDEwMDY0NAo+PiAtLS0gYS9zcmMvYXBpMi9iYWNrdXAvdXBsb2FkX2NodW5rLnJz Cj4+ICsrKyBiL3NyYy9hcGkyL2JhY2t1cC91cGxvYWRfY2h1bmsucnMKPj4gQEAgLTI1OSw2ICsy NTksNyBAQCBhc3luYyBmbiB1cGxvYWRfdG9fYmFja2VuZCgKPj4gICAgICAgICAgICAgICAgICAg ICAgIGRhdGEubGVuKCkKPj4gICAgICAgICAgICAgICAgICAgKTsKPj4gICAgICAgICAgICAgICB9 Cj4+ICsgICAgICAgICAgICBsZXQgZGF0YXN0b3JlID0gZW52LmRhdGFzdG9yZS5jbG9uZSgpOwo+ PiAgIAo+PiAgICAgICAgICAgICAgIGlmIGVudi5ub19jYWNoZSB7Cj4+ICAgICAgICAgICAgICAg ICAgIGxldCBvYmplY3Rfa2V5ID0gcGJzX2RhdGFzdG9yZTo6czM6Om9iamVjdF9rZXlfZnJvbV9k aWdlc3QoJmRpZ2VzdCk/Owo+PiBAQCAtMjcyLDExICsyNzMsMTEgQEAgYXN5bmMgZm4gdXBsb2Fk X3RvX2JhY2tlbmQoCj4+ICAgICAgICAgICAgICAgLy8gQXZvaWQgcmUtdXBsb2FkIHRvIFMzIGlm IHRoZSBjaHVuayBpcyBlaXRoZXIgcHJlc2VudCBpbiB0aGUgTFJVIGNhY2hlIG9yIHRoZSBjaHVu awo+PiAgICAgICAgICAgICAgIC8vIGZpbGUgZXhpc3RzIG9uIGZpbGVzeXN0ZW0uIFRoZSBsYXR0 ZXIgbWVhbnMgdGhhdCB0aGUgY2h1bmsgaGFzIGJlZW4gcHJlc2VudCBpbiB0aGUKPj4gICAgICAg ICAgICAgICAvLyBwYXN0IGFuIHdhcyBub3QgY2xlYW5lZCB1cCBieSBnYXJiYWdlIGNvbGxlY3Rp b24sIHNvIGNvbnRhaW5lZCBpbiB0aGUgUzMgb2JqZWN0IHN0b3JlLgo+PiAtICAgICAgICAgICAg aWYgZW52LmRhdGFzdG9yZS5jYWNoZV9jb250YWlucygmZGlnZXN0KSB7Cj4+ICsgICAgICAgICAg ICBpZiBkYXRhc3RvcmUuY2FjaGVfY29udGFpbnMoJmRpZ2VzdCkgewo+PiAgICAgICAgICAgICAg ICAgICB0cmFjaW5nOjppbmZvISgiU2tpcCB1cGxvYWQgb2YgY2FjaGVkIGNodW5rIHt9IiwgaGV4 OjplbmNvZGUoZGlnZXN0KSk7Cj4+ICAgICAgICAgICAgICAgICAgIHJldHVybiBPaygoZGlnZXN0 LCBzaXplLCBlbmNvZGVkX3NpemUsIHRydWUpKTsKPj4gICAgICAgICAgICAgICB9Cj4+IC0gICAg ICAgICAgICBpZiBsZXQgT2sodHJ1ZSkgPSBlbnYuZGF0YXN0b3JlLmNvbmRfdG91Y2hfY2h1bmso JmRpZ2VzdCwgZmFsc2UpIHsKPj4gKyAgICAgICAgICAgIGlmIGxldCBPayh0cnVlKSA9IGRhdGFz dG9yZS5jb25kX3RvdWNoX2NodW5rKCZkaWdlc3QsIGZhbHNlKSB7Cj4+ICAgICAgICAgICAgICAg ICAgIHRyYWNpbmc6OmluZm8hKAo+PiAgICAgICAgICAgICAgICAgICAgICAgIlNraXAgdXBsb2Fk IG9mIGFscmVhZHkgZW5jb3VudGVyZWQgY2h1bmsge30iLAo+PiAgICAgICAgICAgICAgICAgICAg ICAgaGV4OjplbmNvZGUoZGlnZXN0KQo+PiBAQCAtMjg0LDE4ICsyODUsMjQgQEAgYXN5bmMgZm4g dXBsb2FkX3RvX2JhY2tlbmQoCj4+ICAgICAgICAgICAgICAgICAgIHJldHVybiBPaygoZGlnZXN0 LCBzaXplLCBlbmNvZGVkX3NpemUsIHRydWUpKTsKPj4gICAgICAgICAgICAgICB9Cj4+ICAgCj4+ ICsgICAgICAgICAgICBkYXRhc3RvcmUuaW5zZXJ0X2JhY2tlbmRfdXBsb2FkX21hcmtlcigmZGln ZXN0KT87Cj4gCj4gd2hhdCBzdG9wcyB0d28gY29uY3VycmVudCB1cGxvYWRzIGZyb20gZW5kaW5n IHVwIGhlcmUgYW5kIG1ha2luZyB0aGlzCj4gcmV0dXJuIGFuIGVycm9yIGZvciB0aGUgc2Vjb25k IGNsaWVudCB0byBlbmQgdXAgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlCj4gbWFya2VyIGZpbGU/ IGluIEEsIHdlIG9ubHkgdGFrZSB0aGUgbXV0ZXggZm9yIGluc2VydGluZyB0aGUgbWFya2VyIGZp bGUKPiBpdHNlbGYuLgoKVGhpcyBpc3N1ZSBoZXJlIGlzIGFjdHVhbGx5IHJhdGhlciBwcm9ibGVt YXRpYy4uLiBPbmUgY291bGQgYmFja29mZiBhbmQgCmJ1c3kgd2FpdD8gT3IgbWF5YmUgdXNlIGFu IGlub3RpZnkgd2F0Y2ggb24gdGhlIGZpbGUgdG8gZ2V0IGluZm9ybWVkIAp3aGVuIHRoZSBjb25j dXJyZW50IHVwbG9hZCBpcyBmaW5pc2hlZC9mYWlsZWQgYW5kIGNsZWFuZWQgdXAgdGhlIHVwbG9h ZCAKbWFya2VyLiBPbmx5IGlzc3VlIHdpdGggdGhhdCBpcyBmb3IgY2FzZXMgd2hlcmUgdGhlcmUg aXMgYSBsaW5nZXJpbmcgCnVwbG9hZCBtYXJrZXIgd2hpY2ggd2lsbCBuZXZlciBnZXQgY2xlYW5l ZCB1cCBlLmcuIGJlY2F1c2Ugb2YgYSBjcmFzaC4uLgoKVGhlIGJldHRlciBvcHRpb24gaXMgcHJv YmFibHkgdG8gcmF0aGVyIG5vdCBmYWlsIG9uIGR1cGxpY2F0ZSBtYXJrZXIgCmNyZWF0aW9uLCBh bGxvd2luZyBjb25jdXJyZW50IHVwbG9hZHMgdG8gdGhlIHMzIGJhY2tlbmQgYW5kIHN5bmMgdXAg b24gCmluc2VydCwgbm90IGZhaWxpbmcgb24gbWFya2VyIHJlbW92YWwgaWYgdGhlIGNodW5rIGZp bGUgYWxyZWFkeSBleGlzdHMgCmJlY2F1c2UgaXQgaGFzIGJlZW4gaW5zZXJ0ZWQgYnkgdGhlIGNv bmN1cnJlbnQgdXBsb2FkLiBNdXN0IGRvIHNvbWUgbW9yZSAKcmVzZWFyY2ggb24gaG93IHRoZSBz MyBiYWNrZW5kIGhhbmRsZXMgc3VjaCBjb25jdXJyZW50IG9iamVjdCB1cGxvYWQgY2FzZXMuCgo+ IAo+IHRoZXJlJ3MgYSBzZWNvbmQgaXNzdWUgLSB3aGF0IGlmIHdlIGVuZCB1cCBjYWxsaW5nCj4g ZGF0YXN0b3JlLmluc2VydF9iYWNrZW5kX3VwbG9hZF9tYXJrZXIgaGVyZSwgaXQgYmxvY2tzIG9u IHRoZSBtdXRleCwKPiBiZWNhdXNlIGFub3RoZXIgaW5zZXJ0aW9uIGlzIGdvaW5nIG9uIHRoYXQg YWxyZWFkeSBob2xkcyBpdC4uCj4gCj4gdGhlbiB3ZSBlbmQgdXAgY3JlYXRpbmcgdGhlIG1hcmtl ciBmaWxlIGhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBjaHVuayBpcwo+IGFscmVhZHkgaW4gdGhlIGNo dW5rIHN0b3JlLi4KClRydWUsIGJ1dCB0aGlzIGlzIG5vdCBhcyBwcm9ibGVtYXRpYyBhcyBvbmUg Y2FuIHJlLWNoZWNraW5nIGlmIHRoZSBjaHVuayAKZmlsZSBleGlzdHMgYWZ0ZXIgYWNxdWlyaW5n IHRoZSBsb2NrIGJlZm9yZSB3cml0aW5nIHRoZSBtYXJrZXIgYW5kIHNob3J0IApjaXJjdWl0IHRo ZXJlLCBza2lwcGluZyB0aGUgcmUtdXBsb2FkIGFuZCByZS1pbnNlcnQuCgo+IAo+IG11dGV4ZXMg YXJlIG5vdCAoZ3VhcmFudGVlZCB0byBiZSkgZmFpciwgc28gd2UgY2FuIGhhdmUgdGhlIHNpdHVh dGlvbgo+IHRoYXQgdHdvIGJhY2t1cCBjbGllbnRzIGNvbmN1cnJlbnRseSBhdHRlbXB0IHRvIHVw bG9hZCB0aGUgc2FtZSBjaHVuaywKPiB3aXRoIG9uZSBvZiB0aGVtIHN1Y2NlZWRpbmcgYWNyb3Nz IHRoZSB3aG9sZQo+IAo+IC0gaW5zZXJ0IG1hcmtlcgo+IC0gdXBsb2FkIHRvIFMzCj4gLSBpbnNl cnQgY2h1bmsgYW5kIHJlbW92ZSBtYXJrZXIKPiAKPiBwcm9jZXNzLCB3aXRoIHRoZSBvdGhlciBv bmUgYmxvY2tlZCBvbiBvYnRhaW5pbmcgdGhlIG11dGV4IGZvciBpbnNlcnRpbmcKPiB0aGUgbWFy a2VyIGZpbGUgaWYgdGhlcmUgaXMgZW5vdWdoIGNvbnRlbnRpb24gb24gdGhlIGNodW5rIHN0b3Jl IGxvY2sKPiAKPj4gICAgICAgICAgICAgICB0cmFjaW5nOjppbmZvISgiVXBsb2FkIG9mIG5ldyBj aHVuayB7fSIsIGhleDo6ZW5jb2RlKGRpZ2VzdCkpOwo+PiAgICAgICAgICAgICAgIGxldCBvYmpl Y3Rfa2V5ID0gcGJzX2RhdGFzdG9yZTo6czM6Om9iamVjdF9rZXlfZnJvbV9kaWdlc3QoJmRpZ2Vz dCk/Owo+IAo+IChzaWRlIG5vdCAtIGlmIHRoaXMgZmFpbHMsIHRoZW4gdGhlIG1hcmtlciBmaWxl IGlzIGxlZnQgYXJvdW5kLi4pCgpNb3ZlZCB0aGUgczMga2V5IGNyZWF0aW9uIHRvIGJlIGJlZm9y ZSB0aGUgbWFya2VyIGluc2VydGlvbiwganVzdCBsaWtlIApmb3IgdGhlIG5vLWNhY2hlIGNhc2Us IHRoYW5rcy4KCj4+IC0gICAgICAgICAgICBsZXQgaXNfZHVwbGljYXRlID0gczNfY2xpZW50Cj4+ ICsgICAgICAgICAgICBsZXQgaXNfZHVwbGljYXRlID0gbWF0Y2ggczNfY2xpZW50Cj4+ICAgICAg ICAgICAgICAgICAgIC51cGxvYWRfbm9fcmVwbGFjZV93aXRoX3JldHJ5KG9iamVjdF9rZXksIGRh dGEuY2xvbmUoKSkKPj4gICAgICAgICAgICAgICAgICAgLmF3YWl0Cj4+IC0gICAgICAgICAgICAg ICAgLm1hcF9lcnIofGVycnwgZm9ybWF0X2VyciEoImZhaWxlZCB0byB1cGxvYWQgY2h1bmsgdG8g czMgYmFja2VuZCAtIHtlcnI6I30iKSk/Owo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAg ICAgICAgIE9rKGlzX2R1cGxpY2F0ZSkgPT4gaXNfZHVwbGljYXRlLAo+PiArICAgICAgICAgICAg ICAgIEVycihlcnIpID0+IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgZGF0YXN0b3JlLmNsZWFu dXBfYmFja2VuZF91cGxvYWRfbWFya2VyKCZkaWdlc3QpPzsKPj4gKyAgICAgICAgICAgICAgICAg ICAgYmFpbCEoImZhaWxlZCB0byB1cGxvYWQgY2h1bmsgdG8gczMgYmFja2VuZCAtIHtlcnI6I30i KTsKPj4gKyAgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICB9Owo+PiAgIAo+PiAgICAg ICAgICAgICAgIC8vIE9ubHkgaW5zZXJ0IHRoZSBjaHVuayBpbnRvIHRoZSBjYWNoZSBhZnRlciBp dCBoYXMgYmVlbiBzdWNjZXNzdWZ1bHkgdXBsb2FkZWQuCj4+ICAgICAgICAgICAgICAgLy8gQWx0 aG91Z2ggbGVzcyBwZXJmb3JtYW50IHRoYW4gZG9pbmcgdGhpcyBpbiBwYXJhbGxlbCwgaXQgaXMg cmVxdWlyZWQgZm9yIGNvbnNpc2VuY3kKPj4gICAgICAgICAgICAgICAvLyBzaW5jZSBjaHVua3Mg YXJlIGNvbnNpZGVyZWQgYXMgcHJlc2VudCBvbiB0aGUgYmFja2VuZCBpZiB0aGUgZmlsZSBleGlz dHMgaW4gdGhlIGxvY2FsCj4+ICAgICAgICAgICAgICAgLy8gY2FjaGUgc3RvcmUuCj4+IC0gICAg ICAgICAgICBsZXQgZGF0YXN0b3JlID0gZW52LmRhdGFzdG9yZS5jbG9uZSgpOwo+PiAgICAgICAg ICAgICAgIHRyYWNpbmc6OmluZm8hKCJDYWNoaW5nIG9mIGNodW5rIHt9IiwgaGV4OjplbmNvZGUo ZGlnZXN0KSk7Cj4+ICAgICAgICAgICAgICAgbGV0IF8gPSB0b2tpbzo6dGFzazo6c3Bhd25fYmxv Y2tpbmcobW92ZSB8fCB7Cj4+ICAgICAgICAgICAgICAgICAgIGxldCBjaHVuayA9IERhdGFCbG9i Ojpmcm9tX3JhdyhkYXRhLnRvX3ZlYygpKT87Cj4gCj4gYW5kIGRvd24gYmVsb3cgaGVyZSwgaWYg dGhlIGNodW5rIHdhcyBpbnNlcnRlZCBieSBzb21lYm9keSBlbHNlLCB0aGUKPiBjYWNoZV9pbnNl cnQgY2FsbCBvbiB0aGUgbmV4dCBsaW5lIGhlcmUgd2lsbCBlbmQgdXAgY2FsbGluZyBpbnNlcnRf Y2h1bmsKPiBvbiB0aGUgY2h1bmtfc3RvcmUsIHdoaWNoIHdvbid0IGNsZWFyIHRoZSBtYXJrZXIg dW5sZXNzIGl0IGFjdHVhbGx5Cj4gZnJlc2hseSBpbnNlcnRzIHRoZSBjaHVuaywgd2hpY2ggZG9l c24ndCBoYXBwZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuLgo+IAo+PiBkaWZmIC0tZ2l0IGEvc3Jj L2FwaTIvY29uZmlnL2RhdGFzdG9yZS5ycyBiL3NyYy9hcGkyL2NvbmZpZy9kYXRhc3RvcmUucnMK Pj4gaW5kZXggM2IwM2MwNDY2Li41NDFiZDBhMDQgMTAwNjQ0Cj4+IC0tLSBhL3NyYy9hcGkyL2Nv bmZpZy9kYXRhc3RvcmUucnMKPj4gKysrIGIvc3JjL2FwaTIvY29uZmlnL2RhdGFzdG9yZS5ycwo+ PiBAQCAtMTczLDYgKzE3Myw3IEBAIHB1YihjcmF0ZSkgZm4gZG9fY3JlYXRlX2RhdGFzdG9yZSgK Pj4gICAgICAgICAgICAgICAgICAgJmRhdGFzdG9yZS5uYW1lLAo+PiAgICAgICAgICAgICAgICAg ICAmcGF0aCwKPj4gICAgICAgICAgICAgICAgICAgdHVuaW5nLnN5bmNfbGV2ZWwudW53cmFwX29y X2RlZmF1bHQoKSwKPj4gKyAgICAgICAgICAgICAgICBiYWNrZW5kX3R5cGUsCj4+ICAgICAgICAg ICAgICAgKQo+PiAgICAgICAgICAgfSk/Cj4+ICAgICAgIH0gZWxzZSB7Cj4+IEBAIC0yMDQsNiAr MjA1LDcgQEAgcHViKGNyYXRlKSBmbiBkb19jcmVhdGVfZGF0YXN0b3JlKAo+PiAgICAgICAgICAg ICAgIGJhY2t1cF91c2VyLnVpZCwKPj4gICAgICAgICAgICAgICBiYWNrdXBfdXNlci5naWQsCj4+ ICAgICAgICAgICAgICAgdHVuaW5nLnN5bmNfbGV2ZWwudW53cmFwX29yX2RlZmF1bHQoKSwKPj4g KyAgICAgICAgICAgIGJhY2tlbmRfdHlwZSwKPj4gICAgICAgICAgICk/Cj4+ICAgICAgIH07Cj4+ ICAgCj4+IC0tIAo+PiAyLjQ3LjMKPj4KPj4KPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPj4gcGJzLWRldmVsIG1haWxpbmcgbGlzdAo+PiBwYnMt ZGV2ZWxAbGlzdHMucHJveG1veC5jb20KPj4gaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2kt YmluL21haWxtYW4vbGlzdGluZm8vcGJzLWRldmVsCj4+Cj4+Cj4+Cj4gCj4gCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBwYnMtZGV2ZWwgbWFpbGlu ZyBsaXN0Cj4gcGJzLWRldmVsQGxpc3RzLnByb3htb3guY29tCj4gaHR0cHM6Ly9saXN0cy5wcm94 bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGJzLWRldmVsCj4gCj4gCgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnBicy1kZXZlbCBtYWls aW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1v eC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3Bicy1kZXZlbAo=