From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pbs-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9])
	by lore.proxmox.com (Postfix) with ESMTPS id BFC8C1FF16E
	for <inbox@lore.proxmox.com>; Mon, 17 Mar 2025 16:43:25 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id D244B7D2E;
	Mon, 17 Mar 2025 16:43:15 +0100 (CET)
Message-ID: <3536d161-85b1-4367-bf8f-609ff3ddde0d@proxmox.com>
Date: Mon, 17 Mar 2025 16:43:11 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com>,
 =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
References: <20250310111634.162156-1-c.ebner@proxmox.com>
 <20250310111634.162156-5-c.ebner@proxmox.com>
 <1742220037.vm4jzkcn3x.astroid@yuna.none>
Content-Language: en-US, de-DE
From: Christian Ebner <c.ebner@proxmox.com>
In-Reply-To: <1742220037.vm4jzkcn3x.astroid@yuna.none>
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.369 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 v2 proxmox-backup 4/4] fix #5331: garbage
 collection: avoid multiple chunk atime updates
X-BeenThere: pbs-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox Backup Server development discussion
 <pbs-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/>
List-Post: <mailto:pbs-devel@lists.proxmox.com>
List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, 
 <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox Backup Server development discussion
 <pbs-devel@lists.proxmox.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: pbs-devel-bounces@lists.proxmox.com
Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com>

T24gMy8xNy8yNSAxNTo1NSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBPbiBNYXJjaCAx
MCwgMjAyNSAxMjoxNiBwbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+PiBSZWR1Y2UgdGhlIG51
bWJlciBvZiBhdGltZSB1cGRhdGVzIG9uIHRoZSBzYW1lIGNodW5rIGJ5IGxvZ2ljYWxseQo+PiBp
dGVyYXRpbmcgb3ZlciBpbWFnZSBpbmRleCBmaWxlcywgZm9sbG93aW5nIHRoZSBpbmNyZW1lbnRh
bCBiYWNrdXAKPj4gbG9naWMuIEJ5IGluc2VydGluZyBwYXRocyBmb3IgZW5jb3VudGVyZWQgaW1h
Z2VzIGR1cmluZwo+PiBgbGlzdF9pbWFnZXNgIHVzaW5nIHRoZSBHcm91cGVkSW1hZ2VMaXN0IHN0
cnVjdHVyZSwgdGhlIGl0ZXJhdGlvbgo+PiBoYXBwZW5zIG5vdyBmb3IgdGhlIHNhbWUgaW1hZ2Ug
ZmlsZW5hbWVzIGluIHRoZSBzYW1lIGltYWdlIG5hbWVzcGFjZQo+PiBhbmQgZ3JvdXAgaW4gYSBv
cmRlciBiYXNlZCBvbiB0aGUgc25hcHNob3QgdGltZXN0YW1wLiBGb3IgZWFjaCBpbWFnZSwKPj4g
a2VlcCB0cmFjayBvZiB0aGUgZW5jb3VudGVyZWQgY2h1bmsgZGlnZXN0cywgYW5kIHJlbWVtYmVy
IHRoZXNlIGFzCj4+IHNlZW4gZm9yIHRoZSBuZXh0IHNuYXBzaG90LiBDaHVua3Mgd2hpY2ggaGF2
ZSBiZWVuIGVuY291bnRlcmVkIGluIHRoZQo+PiBwcmV2aW91cyBpbWFnZSBpbmRleCwgYnV0IGFy
ZSBub3QgcHJlc2VudCBhbnltb3JlIGFyZSByZW1vdmVkIGZyb20KPj4gdGhlIGxpc3QgYWZ0ZXIg
ZWFjaCBpbWFnZSwgaW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBmb290cHJpbnQuCj4+Cj4+IEZp
eGVzOiBodHRwczovL2J1Z3ppbGxhLnByb3htb3guY29tL3Nob3dfYnVnLmNnaT9pZD01MzMxCj4+
IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBFYm5lciA8Yy5lYm5lckBwcm94bW94LmNvbT4KPiAK
PiB0ZWNobmljYWxseSB0aGlzIGNvdWxkIGJlIHNwbGl0IGludG8gdHdvIHBhcnRzIC0gb25lIGZv
ciB0aGUgaXRlcmF0aW5nCj4gY2hhbmdlLCBvbmUgZm9yIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6
YXRpb24/IHdpdGggdGhlIGxhdHRlciBwYXJ0IG1heWJlCj4gYmVpbmcgY29tYmluZWQgd2l0aCBw
YXRjaCMzIGFuZCB0aGUgb3JkZXIgc3dpdGNoZWQgYXJvdW5kPyA7KQoKT2theSwgd2lsbCByZW9y
Z2FuaXplIHRoZSBwYXRjaGVzIGFjY29yZGluZ2x5LgoKPiAKPj4gLS0tCj4+IGNoYW5nZXMgc2lu
Y2UgdmVyc2lvbiAxOgo+PiAtIFVzZSBwcmUtZXhpc3RpbmcgZGF0YXN0b3JlIGl0ZXJhdG9yIGhl
bHBlcnMsIGZvbGxvd2luZyB0aGUgbG9naWMgb3RoZXIKPj4gICAgZGF0YXN0b3JlIG9wZXJhdGlv
bnMgdGFrZS4KPj4gLSBDaHVua3MgYXJlIG5vdyByZW1lbWJlcmVkIGZvciBhbGwgYXJjaGl2ZXMg
cGVyIHNuYXBzaG90LCBub3QganVzdCBhCj4+ICAgIHNpbmdsZSBhcmNoaXZlIHBlciBzbmFwc2hv
dCBhcyBwcmV2aW91c2x5LCB0aGlzIG1pbWljcyBtb3JlIGNsb3NlbHkKPj4gICAgdGhlIGJhY2t1
cCBiZWhhdmlvdXIuCj4+Cj4+ICAgcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIHwgMTE3
ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+PiAgIDEgZmlsZSBjaGFuZ2VkLCA4
NCBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3Bicy1k
YXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5y
cwo+PiBpbmRleCBmZGJiMzNhOTguLmE4MDM0M2Q5YiAxMDA2NDQKPj4gLS0tIGEvcGJzLWRhdGFz
dG9yZS9zcmMvZGF0YXN0b3JlLnJzCj4+ICsrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9y
ZS5ycwo+PiBAQCAtMjUsNyArMjUsNyBAQCB1c2UgcGJzX2FwaV90eXBlczo6ewo+PiAgICAgICBN
YWludGVuYW5jZU1vZGUsIE1haW50ZW5hbmNlVHlwZSwgT3BlcmF0aW9uLCBVUElELAo+PiAgIH07
Cj4+ICAgCj4+IC11c2UgY3JhdGU6OmJhY2t1cF9pbmZvOjp7QmFja3VwRGlyLCBCYWNrdXBHcm91
cH07Cj4+ICt1c2UgY3JhdGU6OmJhY2t1cF9pbmZvOjp7QmFja3VwRGlyLCBCYWNrdXBHcm91cCwg
QmFja3VwSW5mb307Cj4+ICAgdXNlIGNyYXRlOjpjaHVua19zdG9yZTo6Q2h1bmtTdG9yZTsKPj4g
ICB1c2UgY3JhdGU6OmR5bmFtaWNfaW5kZXg6OntEeW5hbWljSW5kZXhSZWFkZXIsIER5bmFtaWNJ
bmRleFdyaXRlcn07Cj4+ICAgdXNlIGNyYXRlOjpmaXhlZF9pbmRleDo6e0ZpeGVkSW5kZXhSZWFk
ZXIsIEZpeGVkSW5kZXhXcml0ZXJ9Owo+PiBAQCAtOTcwLDEwICs5NzAsMTAgQEAgaW1wbCBEYXRh
U3RvcmUgewo+PiAgICAgICAgICAgTGlzdEdyb3Vwczo6bmV3KEFyYzo6Y2xvbmUoc2VsZiksIG5z
KT8uY29sbGVjdCgpCj4+ICAgICAgIH0KPj4gICAKPj4gLSAgICBmbiBsaXN0X2ltYWdlcygmc2Vs
ZikgLT4gUmVzdWx0PFZlYzxQYXRoQnVmPiwgRXJyb3I+IHsKPj4gKyAgICBmbiBsaXN0X2ltYWdl
cygmc2VsZikgLT4gUmVzdWx0PEhhc2hTZXQ8UGF0aEJ1Zj4sIEVycm9yPiB7Cj4+ICAgICAgICAg
ICBsZXQgYmFzZSA9IHNlbGYuYmFzZV9wYXRoKCk7Cj4+ICAgCj4+IC0gICAgICAgIGxldCBtdXQg
bGlzdCA9IHZlYyFbXTsKPj4gKyAgICAgICAgbGV0IG11dCBsaXN0ID0gSGFzaFNldDo6bmV3KCk7
Cj4+ICAgCj4+ICAgICAgICAgICB1c2Ugd2Fsa2Rpcjo6V2Fsa0RpcjsKPj4gICAKPj4gQEAgLTEw
MjEsNyArMTAyMSw3IEBAIGltcGwgRGF0YVN0b3JlIHsKPj4gICAgICAgICAgICAgICAgICAgaWYg
YXJjaGl2ZV90eXBlID09IEFyY2hpdmVUeXBlOjpGaXhlZEluZGV4Cj4+ICAgICAgICAgICAgICAg
ICAgICAgICB8fCBhcmNoaXZlX3R5cGUgPT0gQXJjaGl2ZVR5cGU6OkR5bmFtaWNJbmRleAo+PiAg
ICAgICAgICAgICAgICAgICB7Cj4+IC0gICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaChwYXRo
KTsKPj4gKyAgICAgICAgICAgICAgICAgICAgbGlzdC5pbnNlcnQocGF0aCk7Cj4+ICAgICAgICAg
ICAgICAgICAgIH0KPj4gICAgICAgICAgICAgICB9Cj4+ICAgICAgICAgICB9Cj4+IEBAIC0xMDcx
LDYgKzEwNzEsNyBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICAmc2VsZiwKPj4gICAg
ICAgICAgIGluZGV4OiBCb3g8ZHluIEluZGV4RmlsZT4sCj4+ICAgICAgICAgICBmaWxlX25hbWU6
ICZQYXRoLCAvLyBvbmx5IHVzZWQgZm9yIGVycm9yIHJlcG9ydGluZwo+PiArICAgICAgICB0b3Vj
aGVkX2NodW5rczogJm11dCBUb3VjaGVkQ2h1bmtzLAo+PiAgICAgICAgICAgc3RhdHVzOiAmbXV0
IEdhcmJhZ2VDb2xsZWN0aW9uU3RhdHVzLAo+PiAgICAgICAgICAgd29ya2VyOiAmZHluIFdvcmtl
clRhc2tDb250ZXh0LAo+PiAgICAgICApIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gQEAgLTEw
ODEsNiArMTA4MiwxMiBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICAgICAgd29ya2Vy
LmNoZWNrX2Fib3J0KCk/Owo+PiAgICAgICAgICAgICAgIHdvcmtlci5mYWlsX29uX3NodXRkb3du
KCk/Owo+PiAgICAgICAgICAgICAgIGxldCBkaWdlc3QgPSBpbmRleC5pbmRleF9kaWdlc3QocG9z
KS51bndyYXAoKTsKPj4gKwo+PiArICAgICAgICAgICAgLy8gQXZvaWQgbXVsdGlwbGUgZXhwZW5z
aXZlIGF0aW1lIHVwZGF0ZXMgYnkgdXRpbWVuc2F0Cj4+ICsgICAgICAgICAgICBpZiB0b3VjaGVk
X2NodW5rcy5pbnNlcnQoKmRpZ2VzdCkgewo+PiArICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+
PiArICAgICAgICAgICAgfQo+PiArCj4+ICAgICAgICAgICAgICAgaWYgIXNlbGYuaW5uZXIuY2h1
bmtfc3RvcmUuY29uZF90b3VjaF9jaHVuayhkaWdlc3QsIGZhbHNlKT8gewo+PiAgICAgICAgICAg
ICAgICAgICBsZXQgaGV4ID0gaGV4OjplbmNvZGUoZGlnZXN0KTsKPj4gICAgICAgICAgICAgICAg
ICAgd2FybiEoCj4+IEBAIC0xMTA3LDQzICsxMTE0LDg3IEBAIGltcGwgRGF0YVN0b3JlIHsKPj4g
ICAgICAgICAgIHN0YXR1czogJm11dCBHYXJiYWdlQ29sbGVjdGlvblN0YXR1cywKPj4gICAgICAg
ICAgIHdvcmtlcjogJmR5biBXb3JrZXJUYXNrQ29udGV4dCwKPj4gICAgICAgKSAtPiBSZXN1bHQ8
KCksIEVycm9yPiB7Cj4+IC0gICAgICAgIGxldCBpbWFnZV9saXN0ID0gc2VsZi5saXN0X2ltYWdl
cygpPzsKPj4gLSAgICAgICAgbGV0IGltYWdlX2NvdW50ID0gaW1hZ2VfbGlzdC5sZW4oKTsKPj4g
LQo+PiArICAgICAgICAvLyBJdGVyYXRlIHR3aWNlIG92ZXIgdGhlIGRhdGFzdG9yZSB0byBmZXRj
aCBpbWFnZXMsIGV2ZW4gaWYgdGhpcyBjb21lcyB3aXRoIGFuIGFkZGl0aW9uYWwKPj4gKyAgICAg
ICAgLy8gcnVudGltZSBjb3N0Ogo+PiArICAgICAgICAvLyAtIEZpcnN0IGl0ZXJhdGlvbiB0byBm
aW5kIGFsbCBpbmRleCBmaWxlcywgbm8gbWF0dGVyIGlmIHRoZXkgYXJlIGluIGEgbG9jYXRpb24g
ZXhwZWN0ZWQKPj4gKyAgICAgICAgLy8gICBieSB0aGUgZGF0YXN0b3JlJ3MgaGllcmFyY2h5Cj4+
ICsgICAgICAgIC8vIC0gSXRlcmF0ZSB1c2luZyB0aGUgZGF0YXN0b3JlJ3MgaGVscGVycywgc28g
dGhlIG5hbWVzcGFjZXMsIGdyb3VwcyBhbmQgc25hcHNob3RzIGFyZQo+PiArICAgICAgICAvLyAg
IGxvb2tlZCB1cCBnaXZlbiB0aGUgZXhwZWN0ZWQgaGllcmFyY2h5IGFuZCBpdGVyYXRvciBsb2dp
Ywo+PiArICAgICAgICAvLwo+PiArICAgICAgICAvLyBCeSB0aGlzIGl0IGlzIGFzc3VyZWQgdGhh
dCBhbGwgaW5kZXggZmlsZXMgYXJlIHVzZWQsIGV2ZW4gaWYgdGhleSB3b3VsZCBub3QgaGF2ZSBi
ZWVuCj4+ICsgICAgICAgIC8vIHNlZW4gYnkgdGhlIHJlZ3VsYXIgbG9naWMgYW5kIHRoZSB1c2Vy
IGlzIGluZm9ybWVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVuIGFib3V0Cj4+ICsgICAg
ICAgIC8vIHRoZSBkZXRlY3RlZCBpbmRleCBmaWxlcyBub3QgZm9sbG93aW5nIHRoZSBpdGVyYXRv
cnMgbG9naWMuCj4+ICsKPj4gKyAgICAgICAgbGV0IG11dCB1bnByb2Nlc3NlZF9pbWFnZV9saXN0
ID0gc2VsZi5saXN0X2ltYWdlcygpPzsKPj4gKyAgICAgICAgbGV0IGltYWdlX2NvdW50ID0gdW5w
cm9jZXNzZWRfaW1hZ2VfbGlzdC5sZW4oKTsKPj4gKwo+PiArICAgICAgICAvLyBPcHRpbWl6ZSBm
b3IgYXZvaWRpbmcgdXBkYXRlcyBvZiBjaHVua3MgYXRpbWUgaW4gc2FtZSBncm91cCBmb3IgY29u
c2VjdXRpdmUKPj4gKyAgICAgICAgLy8gc25hcHNob3RzIG11bHRpcGxlIHRpbWVzLgo+PiArICAg
ICAgICBsZXQgbXV0IHRvdWNoZWRfY2h1bmtzID0gVG91Y2hlZENodW5rczo6bmV3KCk7Cj4+ICsg
ICAgICAgIGxldCBtdXQgcHJvY2Vzc2VkX2ltYWdlcyA9IDA7Cj4+ICAgICAgICAgICBsZXQgbXV0
IGxhc3RfcGVyY2VudGFnZTogdXNpemUgPSAwOwo+PiAgIAo+PiAtICAgICAgICBsZXQgbXV0IHN0
cmFuZ2VfcGF0aHNfY291bnQ6IHU2NCA9IDA7Cj4+IC0KPj4gLSAgICAgICAgZm9yIChpLCBpbWcp
IGluIGltYWdlX2xpc3QuaW50b19pdGVyKCkuZW51bWVyYXRlKCkgewo+PiAtICAgICAgICAgICAg
d29ya2VyLmNoZWNrX2Fib3J0KCk/Owo+PiAtICAgICAgICAgICAgd29ya2VyLmZhaWxfb25fc2h1
dGRvd24oKT87Cj4+IC0KPj4gLSAgICAgICAgICAgIGlmIGxldCBTb21lKGJhY2t1cF9kaXJfcGF0
aCkgPSBpbWcucGFyZW50KCkgewo+PiAtICAgICAgICAgICAgICAgIGxldCBiYWNrdXBfZGlyX3Bh
dGggPSBiYWNrdXBfZGlyX3BhdGguc3RyaXBfcHJlZml4KHNlbGYuYmFzZV9wYXRoKCkpPzsKPj4g
LSAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShiYWNrdXBfZGlyX3N0cikgPSBiYWNrdXBfZGly
X3BhdGgudG9fc3RyKCkgewo+PiAtICAgICAgICAgICAgICAgICAgICBpZiBwYnNfYXBpX3R5cGVz
OjpwYXJzZV9uc19hbmRfc25hcHNob3QoYmFja3VwX2Rpcl9zdHIpLmlzX2VycigpIHsKPj4gLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmFuZ2VfcGF0aHNfY291bnQgKz0gMTsKPj4gKyAgICAg
ICAgbGV0IGFyY19zZWxmID0gQXJjOjpuZXcoc2VsZi5jbG9uZSgpKTsKPj4gKyAgICAgICAgZm9y
IG5hbWVzcGFjZSBpbiBhcmNfc2VsZgo+PiArICAgICAgICAgICAgLnJlY3Vyc2l2ZV9pdGVyX2Jh
Y2t1cF9ucyhCYWNrdXBOYW1lc3BhY2U6OnJvb3QoKSkKPj4gKyAgICAgICAgICAgIC5jb250ZXh0
KCJjcmVhdGluZyBuYW1lc3BhY2UgaXRlcmF0b3IgZmFpbGVkIik/Cj4+ICsgICAgICAgIHsKPj4g
KyAgICAgICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3BhY2UuY29udGV4dCgiaXRlcmF0aW5n
IG5hbWVzcGFjZXMgZmFpbGVkIik/Owo+PiArICAgICAgICAgICAgZm9yIGdyb3VwIGluIGFyY19z
ZWxmLml0ZXJfYmFja3VwX2dyb3VwcyhuYW1lc3BhY2UpPyB7Cj4+ICsgICAgICAgICAgICAgICAg
bGV0IGdyb3VwID0gZ3JvdXAuY29udGV4dCgiaXRlcmF0aW5nIGJhY2t1cCBncm91cHMgZmFpbGVk
Iik/Owo+PiArICAgICAgICAgICAgICAgIGxldCBtdXQgc25hcHNob3RzID0gZ3JvdXAubGlzdF9i
YWNrdXBzKCkuY29udGV4dCgibGlzdGluZyBzbmFwc2hvdHMgZmFpbGVkIik/Owo+PiArICAgICAg
ICAgICAgICAgIC8vIFNvcnQgYnkgc25hcHNob3QgdGltZXN0YW1wIHRvIGl0ZXJhdGUgb3ZlciBj
b25zZWN1dGl2ZSBzbmFwc2hvdHMgZm9yIGVhY2ggaW1hZ2UuCj4+ICsgICAgICAgICAgICAgICAg
QmFja3VwSW5mbzo6c29ydF9saXN0KCZtdXQgc25hcHNob3RzLCB0cnVlKTsKPj4gKyAgICAgICAg
ICAgICAgICBmb3Igc25hcHNob3QgaW4gc25hcHNob3RzIHsKPj4gKyAgICAgICAgICAgICAgICAg
ICAgZm9yIGZpbGUgaW4gc25hcHNob3QuZmlsZXMgewo+PiArICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya2VyLmNoZWNrX2Fib3J0KCk/Owo+PiArICAgICAgICAgICAgICAgICAgICAgICAgd29y
a2VyLmZhaWxfb25fc2h1dGRvd24oKT87Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg
IGxldCBtdXQgcGF0aCA9IHNuYXBzaG90LmJhY2t1cF9kaXIuZnVsbF9wYXRoKCk7Cj4+ICsgICAg
ICAgICAgICAgICAgICAgICAgICBwYXRoLnB1c2goZmlsZSk7Cj4+ICsKPj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxldCBpbmRleCA9IG1hdGNoIHNlbGYub3Blbl9pbmRleF9yZWFkZXIoJnBh
dGgpPyB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5k
ZXgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBjb250aW51ZSwKPj4g
KyAgICAgICAgICAgICAgICAgICAgICAgIH07Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmluZGV4X21hcmtfdXNlZF9jaHVua3MoCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsCj4+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm11dCB0b3VjaGVkX2NodW5rcywKPj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya2VyLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgKT87Cj4+ICsKPj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc2VkX2ltYWdlX2xpc3QucmVtb3ZlKCZwYXRoKTsK
Pj4gKwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAocHJvY2Vz
c2VkX2ltYWdlcyArIDEpICogMTAwIC8gaW1hZ2VfY291bnQ7Cj4+ICsgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBwZXJjZW50YWdlID4gbGFzdF9wZXJjZW50YWdlIHsKPj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvISgKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIm1hcmtlZCB7cGVyY2VudGFnZX0lICh7fSBvZiB7aW1hZ2VfY291bnR9IGluZGV4IGZpbGVz
KSIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9pbWFnZXMg
KyAxLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cj4+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKPj4gKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9p
bWFnZXMgKz0gMTsKPj4gICAgICAgICAgICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgICAg
ICAgICAgdG91Y2hlZF9jaHVua3MucmVzZXQoKTsKPj4gICAgICAgICAgICAgICAgICAgfQo+PiAg
ICAgICAgICAgICAgIH0KPj4gLQo+PiAtICAgICAgICAgICAgaWYgbGV0IFNvbWUoaW5kZXgpID0g
c2VsZi5vcGVuX2luZGV4X3JlYWRlcigmaW1nKT8gewo+PiAtICAgICAgICAgICAgICAgIHNlbGYu
aW5kZXhfbWFya191c2VkX2NodW5rcyhpbmRleCwgJmltZywgc3RhdHVzLCB3b3JrZXIpPzsKPj4g
LSAgICAgICAgICAgIH0KPj4gLQo+PiAtICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSAoaSAr
IDEpICogMTAwIC8gaW1hZ2VfY291bnQ7Cj4+IC0gICAgICAgICAgICBpZiBwZXJjZW50YWdlID4g
bGFzdF9wZXJjZW50YWdlIHsKPj4gLSAgICAgICAgICAgICAgICBpbmZvISgKPj4gLSAgICAgICAg
ICAgICAgICAgICAgIm1hcmtlZCB7cGVyY2VudGFnZX0lICh7fSBvZiB7aW1hZ2VfY291bnR9IGlu
ZGV4IGZpbGVzKSIsCj4+IC0gICAgICAgICAgICAgICAgICAgIGkgKyAxLAo+PiAtICAgICAgICAg
ICAgICAgICk7Cj4+IC0gICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFn
ZTsKPj4gLSAgICAgICAgICAgIH0KPj4gICAgICAgICAgIH0KPj4gICAKPj4gKyAgICAgICAgbGV0
IHN0cmFuZ2VfcGF0aHNfY291bnQgPSB1bnByb2Nlc3NlZF9pbWFnZV9saXN0LmxlbigpOwo+PiAg
ICAgICAgICAgaWYgc3RyYW5nZV9wYXRoc19jb3VudCA+IDAgewo+PiAtICAgICAgICAgICAgaW5m
byEoCj4+IC0gICAgICAgICAgICAgICAgImZvdW5kIChhbmQgbWFya2VkKSB7c3RyYW5nZV9wYXRo
c19jb3VudH0gaW5kZXggZmlsZXMgb3V0c2lkZSBvZiBleHBlY3RlZCBkaXJlY3Rvcnkgc2NoZW1l
Igo+PiArICAgICAgICAgICAgd2FybiEoImZvdW5kIHtzdHJhbmdlX3BhdGhzX2NvdW50fSBpbmRl
eCBmaWxlcyBvdXRzaWRlIG9mIGV4cGVjdGVkIGRpcmVjdG9yeSBzY2hlbWUiKTsKPj4gKyAgICAg
ICAgfQo+PiArICAgICAgICBmb3IgcGF0aCBpbiB1bnByb2Nlc3NlZF9pbWFnZV9saXN0IHsKPj4g
KyAgICAgICAgICAgIGxldCBpbmRleCA9IG1hdGNoIHNlbGYub3Blbl9pbmRleF9yZWFkZXIoJnBh
dGgpPyB7Cj4+ICsgICAgICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5kZXgsCj4+ICsgICAg
ICAgICAgICAgICAgTm9uZSA9PiBjb250aW51ZSwKPj4gKyAgICAgICAgICAgIH07Cj4+ICsgICAg
ICAgICAgICBzZWxmLmluZGV4X21hcmtfdXNlZF9jaHVua3MoaW5kZXgsICZwYXRoLCAmbXV0IHRv
dWNoZWRfY2h1bmtzLCBzdGF0dXMsIHdvcmtlcik/Owo+PiArICAgICAgICAgICAgd2FybiEoCj4+
ICsgICAgICAgICAgICAgICAgIk1hcmtlZCBjaHVua3MgZm9yIHVuZXhwZWN0ZWQgaW5kZXggZmls
ZSBhdCAne30nIiwKPj4gKyAgICAgICAgICAgICAgICBwYXRoLnRvX3N0cmluZ19sb3NzeSgpCj4+
ICAgICAgICAgICAgICAgKTsKPj4gICAgICAgICAgIH0KPj4gICAKPj4gLS0gCj4+IDIuMzkuNQo+
Pgo+Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xwo+PiBwYnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IHBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNv
bQo+PiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9w
YnMtZGV2ZWwKPj4KPj4KPj4KPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwo+IHBicy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBwYnMtZGV2ZWxAbGlz
dHMucHJveG1veC5jb20KPiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1h
bi9saXN0aW5mby9wYnMtZGV2ZWwKPiAKPiAKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlz
dHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4v
bGlzdGluZm8vcGJzLWRldmVsCg==