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 4E8121FF38F
	for <inbox@lore.proxmox.com>; Tue,  4 Jun 2024 15:58:52 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id D5FDA13641;
	Tue,  4 Jun 2024 15:59:21 +0200 (CEST)
Message-ID: <c026a078-14ac-4c66-8f05-dbc101ff564e@proxmox.com>
Date: Tue, 4 Jun 2024 15:58:47 +0200
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: <20240528094303.309806-1-c.ebner@proxmox.com>
 <20240528094303.309806-49-c.ebner@proxmox.com>
 <1717493343.bps2geb0tc.astroid@yuna.none>
Content-Language: en-US, de-DE
From: Christian Ebner <c.ebner@proxmox.com>
In-Reply-To: <1717493343.bps2geb0tc.astroid@yuna.none>
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.372 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
 T_SCC_BODY_TEXT_LINE    -0.01 -
 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See
 http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more
 information. [create.rs, mod.rs, proxmox.com]
Subject: Re: [pbs-devel] [PATCH v8 proxmox-backup 48/69] pxar: caching: add
 look-ahead cache
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>

T24gNi80LzI0IDExOjM1LCBGYWJpYW4gR3LDvG5iaWNobGVyIHdyb3RlOgo+IE9uIE1heSAyOCwg
MjAyNCAxMTo0MiBhbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+PiBBZGQgYSBsb29rYWhlYWQg
Y2FjaGUgYW5kIHRoZSBuZWNjZXNzYXJ5IHR5cGVzIHRvIHN0b3JlIHRoZSByZXF1aXJlZAo+PiBk
YXRhIGFuZCBrZWVwIHRyYWNrIG9mIGRpcmVjdG9yeSBib3VuZGFyaWVzIHdoaWxlIHRyYXZlcnNp
bmcgdGhlCj4+IGZpbGVzeXN0ZW0gdHJlZSwgaW4gb3JkZXIgdG8gcG9zdHBvbmUgYSBkZWNpc2lv
biBpZiB0byByZXVzZSBvcgo+PiByZWVuY29kZSBhIGdpdmVuIHJlZ3VsYXIgZmlsZSB3aXRoIHVu
Y2hhbmdlZCBtZXRhZGF0YS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxj
LmVibmVyQHByb3htb3guY29tPgo+PiAtLS0KPj4gY2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDc6Cj4+
IC0gbm8gY2hhbmdlcwo+Pgo+PiBjaGFuZ2VzIHNpbmNlIHZlcnNpb24gNjoKPj4gLSBhZGQgUHhh
ckxvb2thaGVhZENhY2hlIGFuZCByZWZhY3RvciBzb21lIG9mIHRoZSBsb2dpYyB0byBiZSBjb250
YWluZWQKPj4gICAgd2l0aGluIHRoaXMgcGF0Y2gKPj4KPj4gICBwYnMtY2xpZW50L3NyYy9weGFy
L2NyZWF0ZS5ycyAgICAgICAgICAgfCAgIDIgKy0KPj4gICBwYnMtY2xpZW50L3NyYy9weGFyL2xv
b2tfYWhlYWRfY2FjaGUucnMgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAgcGJz
LWNsaWVudC9zcmMvcHhhci9tb2QucnMgICAgICAgICAgICAgIHwgICAxICsKPj4gICAzIGZpbGVz
IGNoYW5nZWQsIDE2NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+ICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHBicy1jbGllbnQvc3JjL3B4YXIvbG9va19haGVhZF9jYWNoZS5ycwo+Pgo+PiBk
aWZmIC0tZ2l0IGEvcGJzLWNsaWVudC9zcmMvcHhhci9jcmVhdGUucnMgYi9wYnMtY2xpZW50L3Ny
Yy9weGFyL2NyZWF0ZS5ycwo+PiBpbmRleCBhYzg4MjdiYjIuLjYxMjdhYTg4ZiAxMDA2NDQKPj4g
LS0tIGEvcGJzLWNsaWVudC9zcmMvcHhhci9jcmVhdGUucnMKPj4gKysrIGIvcGJzLWNsaWVudC9z
cmMvcHhhci9jcmVhdGUucnMKPj4gQEAgLTEzMSw3ICsxMzEsNyBAQCBpbXBsIGZtdDo6RGlzcGxh
eSBmb3IgQXJjaGl2ZUVycm9yIHsKPj4gICB9Cj4+ICAgCj4+ICAgI1tkZXJpdmUoRXEsIFBhcnRp
YWxFcSwgSGFzaCldCj4+IC1zdHJ1Y3QgSGFyZExpbmtJbmZvIHsKPj4gK3B1YihjcmF0ZSkgc3Ry
dWN0IEhhcmRMaW5rSW5mbyB7Cj4+ICAgICAgIHN0X2RldjogdTY0LAo+PiAgICAgICBzdF9pbm86
IHU2NCwKPj4gICB9Cj4+IGRpZmYgLS1naXQgYS9wYnMtY2xpZW50L3NyYy9weGFyL2xvb2tfYWhl
YWRfY2FjaGUucnMgYi9wYnMtY2xpZW50L3NyYy9weGFyL2xvb2tfYWhlYWRfY2FjaGUucnMKPj4g
bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwLi41Mzk1ODYyNzEKPj4gLS0t
IC9kZXYvbnVsbAo+PiArKysgYi9wYnMtY2xpZW50L3NyYy9weGFyL2xvb2tfYWhlYWRfY2FjaGUu
cnMKPj4gQEAgLTAsMCArMSwxNjUgQEAKPj4gK3VzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoU2V0
Owo+PiArdXNlIHN0ZDo6ZmZpOjpDU3RyaW5nOwo+PiArdXNlIHN0ZDo6b3BzOjpSYW5nZTsKPj4g
K3VzZSBzdGQ6Om9zOjp1bml4Ojppbzo6T3duZWRGZDsKPj4gK3VzZSBzdGQ6OnBhdGg6OlBhdGhC
dWY7Cj4+ICsKPj4gK3VzZSBuaXg6OnN5czo6c3RhdDo6RmlsZVN0YXQ7Cj4+ICsKPj4gK3VzZSBw
eGFyOjplbmNvZGVyOjpQYXlsb2FkT2Zmc2V0Owo+PiArdXNlIHB4YXI6Ok1ldGFkYXRhOwo+PiAr
Cj4+ICt1c2Ugc3VwZXI6OmNyZWF0ZTo6KjsKPj4gKwo+PiArY29uc3QgREVGQVVMVF9DQUNIRV9T
SVpFOiB1c2l6ZSA9IDUxMjsKPj4gKwo+PiArcHViKGNyYXRlKSBzdHJ1Y3QgQ2FjaGVFbnRyeURh
dGEgewo+PiArICAgIHB1YihjcmF0ZSkgZmQ6IE93bmVkRmQsCj4+ICsgICAgcHViKGNyYXRlKSBj
X2ZpbGVfbmFtZTogQ1N0cmluZywKPj4gKyAgICBwdWIoY3JhdGUpIHN0YXQ6IEZpbGVTdGF0LAo+
PiArICAgIHB1YihjcmF0ZSkgbWV0YWRhdGE6IE1ldGFkYXRhLAo+PiArICAgIHB1YihjcmF0ZSkg
cGF5bG9hZF9vZmZzZXQ6IFBheWxvYWRPZmZzZXQsCj4+ICt9Cj4+ICsKPj4gK3B1YihjcmF0ZSkg
ZW51bSBDYWNoZUVudHJ5IHsKPj4gKyAgICBSZWdFbnRyeShDYWNoZUVudHJ5RGF0YSksCj4+ICsg
ICAgRGlyRW50cnkoQ2FjaGVFbnRyeURhdGEpLAo+PiArICAgIERpckVuZCwKPj4gK30KPj4gKwo+
PiArcHViKGNyYXRlKSBzdHJ1Y3QgUHhhckxvb2thaGVhZENhY2hlIHsKPj4gKyAgICAvLyBDdXJy
ZW50IHN0YXRlIG9mIHRoZSBjYWNoZQo+PiArICAgIGVuYWJsZWQ6IGJvb2wsCj4+ICsgICAgLy8g
Q2FjaGVkIGVudHJpZXMKPj4gKyAgICBlbnRyaWVzOiBWZWM8Q2FjaGVFbnRyeT4sCj4+ICsgICAg
Ly8gRW50cmllcyBlbmNvdW50ZXJlZCBoYXZpbmcgbW9yZSB0aGFuIG9uZSBsaW5rIGdpdmVuIGJ5
IHN0YXQKPj4gKyAgICBoYXJkbGlua3M6IEhhc2hTZXQ8SGFyZExpbmtJbmZvPiwKPj4gKyAgICAv
LyBQYXlsb2FkIHJhbmdlIGNvdmVyZWQgYnkgdGhlIGN1cnJlbnRseSBjYWNoZWQgZW50cmllcwo+
PiArICAgIHJhbmdlOiBSYW5nZTx1NjQ+LAo+PiArICAgIC8vIFBvc3NpYmxlIGhlbGQgYmFjayBs
YXN0IGNodW5rIGZyb20gbGFzdCBmbHVzaCwgdXNlZCBmb3IgcG9zc2libGUgY2h1bmsgY29udGlu
dWF0aW9uCj4+ICsgICAgbGFzdF9jaHVuazogT3B0aW9uPFJldXNhYmxlRHluYW1pY0VudHJ5PiwK
Pj4gKyAgICAvLyBQYXRoIHdoZW4gc3RhcnRlZCBjYWNoaW5nCj4+ICsgICAgc3RhcnRfcGF0aDog
UGF0aEJ1ZiwKPj4gKyAgICAvLyBOdW1iZXIgb2YgZW50cmllcyB3aXRoIGZpbGUgZGVzY3JpcHRv
cnMKPj4gKyAgICBmZF9lbnRyaWVzOiB1c2l6ZSwKPj4gKyAgICAvLyBNYXggbnVtYmVyIG9mIGVu
dHJpZXMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzCj4+ICsgICAgY2FjaGVfc2l6ZTogdXNpemUsCj4+
ICt9Cj4+ICsKPj4gK2ltcGwgUHhhckxvb2thaGVhZENhY2hlIHsKPj4gKyAgICBwdWIoY3JhdGUp
IGZuIG5ldyhzaXplOiBPcHRpb248dXNpemU+KSAtPiBTZWxmIHsKPj4gKyAgICAgICAgU2VsZiB7
Cj4+ICsgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKPj4gKyAgICAgICAgICAgIGVudHJpZXM6
IFZlYzo6bmV3KCksCj4+ICsgICAgICAgICAgICBoYXJkbGlua3M6IEhhc2hTZXQ6Om5ldygpLAo+
PiArICAgICAgICAgICAgcmFuZ2U6IDAuLjAsCj4+ICsgICAgICAgICAgICBsYXN0X2NodW5rOiBO
b25lLAo+PiArICAgICAgICAgICAgc3RhcnRfcGF0aDogUGF0aEJ1Zjo6bmV3KCksCj4+ICsgICAg
ICAgICAgICBmZF9lbnRyaWVzOiAwLAo+PiArICAgICAgICAgICAgY2FjaGVfc2l6ZTogc2l6ZS51
bndyYXBfb3IoREVGQVVMVF9DQUNIRV9TSVpFKSwKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4g
Kwo+PiArICAgIHB1YihjcmF0ZSkgZm4gaXNfZnVsbCgmc2VsZikgLT4gYm9vbCB7Cj4+ICsgICAg
ICAgIHNlbGYuZmRfZW50cmllcyA+PSBzZWxmLmNhY2hlX3NpemUKPj4gKyAgICB9Cj4+ICsKPj4g
KyAgICBwdWIoY3JhdGUpIGZuIGNhY2hpbmdfZW5hYmxlZCgmc2VsZikgLT4gYm9vbCB7Cj4+ICsg
ICAgICAgIHNlbGYuZW5hYmxlZAo+PiArICAgIH0KPj4gKwo+PiArICAgIHB1YihjcmF0ZSkgZm4g
aW5zZXJ0KAo+IAo+IDIgb3V0IG9mIDMgY2FsbHMgdG8gdGhpcyBhcmUgcHJlY2VkZWQgYnkgdGhl
IHNhbWUgY2FsbCB0bwo+IHVwZGF0ZV9zdGFydF9wYXRoLi4gd2UgY291bGQganVzdCBhZGQgdGhl
IHBhdGggYXMgcGFyYW1ldGVyIGhlcmUsIGFuZAo+IGlubGluZSB0aGF0IGNhbGwgYW5kIGRyb3Ag
dXBkYXRlX3N0YXJ0X3BhdGggYWx0b2dldGhlciBBRkFJQ1Q/CgpPa2F5LCBJIGFkZGVkIHRoaXMg
YXMgcGFyYW1ldGVyIGFuZCBtb3ZlZCB0aGUgd2hvbGUgc2V0IGlmIG5vdCBlbmFibGVkLCAKdG9n
ZXRoZXIgd2l0aCB0aGUgcmVxdWlyZWQgcG9wIGlmIG5vdCBhIGRpcmVjdG9yeSB0byBiZSBpbnNp
ZGUgdGhpcyAKZnVuY3Rpb24uCgo+IAo+PiArICAgICAgICAmbXV0IHNlbGYsCj4+ICsgICAgICAg
IGZkOiBPd25lZEZkLAo+PiArICAgICAgICBjX2ZpbGVfbmFtZTogQ1N0cmluZywKPj4gKyAgICAg
ICAgc3RhdDogRmlsZVN0YXQsCj4+ICsgICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSwKPj4gKyAg
ICAgICAgcGF5bG9hZF9vZmZzZXQ6IFBheWxvYWRPZmZzZXQsCj4+ICsgICAgKSB7Cj4+ICsgICAg
ICAgIHNlbGYuZW5hYmxlZCA9IHRydWU7Cj4+ICsgICAgICAgIHNlbGYuZmRfZW50cmllcyArPSAx
Owo+PiArICAgICAgICBpZiBtZXRhZGF0YS5pc19kaXIoKSB7Cj4+ICsgICAgICAgICAgICBzZWxm
LmVudHJpZXMucHVzaChDYWNoZUVudHJ5OjpEaXJFbnRyeShDYWNoZUVudHJ5RGF0YSB7Cj4+ICsg
ICAgICAgICAgICAgICAgZmQsCj4+ICsgICAgICAgICAgICAgICAgY19maWxlX25hbWUsCj4+ICsg
ICAgICAgICAgICAgICAgc3RhdCwKPj4gKyAgICAgICAgICAgICAgICBtZXRhZGF0YSwKPj4gKyAg
ICAgICAgICAgICAgICBwYXlsb2FkX29mZnNldCwKPj4gKyAgICAgICAgICAgIH0pKQo+PiArICAg
ICAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgc2VsZi5lbnRyaWVzLnB1c2goQ2FjaGVFbnRy
eTo6UmVnRW50cnkoQ2FjaGVFbnRyeURhdGEgewo+PiArICAgICAgICAgICAgICAgIGZkLAo+PiAr
ICAgICAgICAgICAgICAgIGNfZmlsZV9uYW1lLAo+PiArICAgICAgICAgICAgICAgIHN0YXQsCj4+
ICsgICAgICAgICAgICAgICAgbWV0YWRhdGEsCj4+ICsgICAgICAgICAgICAgICAgcGF5bG9hZF9v
ZmZzZXQsCj4+ICsgICAgICAgICAgICB9KSkKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+
PiArICAgIHB1YihjcmF0ZSkgZm4gaW5zZXJ0X2Rpcl9lbmQoJm11dCBzZWxmKSB7Cj4+ICsgICAg
ICAgIHNlbGYuZW50cmllcy5wdXNoKENhY2hlRW50cnk6OkRpckVuZCk7Cj4+ICsgICAgfQo+PiAr
Cj4+ICsgICAgcHViKGNyYXRlKSBmbiB0YWtlX2FuZF9yZXNldCgmbXV0IHNlbGYpIC0+IFZlYzxD
YWNoZUVudHJ5PiB7Cj4+ICsgICAgICAgIHNlbGYuZmRfZW50cmllcyA9IDA7Cj4+ICsgICAgICAg
IHNlbGYuZW5hYmxlZCA9IGZhbHNlOwo+PiArICAgICAgICBzZWxmLnN0YXJ0X3BhdGguY2xlYXIo
KTsKPiAKPiBzdGFydF9wYXRoIGlzIGNsZWFyZWQgaGVyZSwgYW5kIHRha2VfYW5kX3Jlc2V0IGlz
IGNhbGxlZAo+IAo+PiArICAgICAgICBzZWxmLmNsZWFyX3JhbmdlKCk7Cj4+ICsgICAgICAgIHN0
ZDo6bWVtOjp0YWtlKCZtdXQgc2VsZi5lbnRyaWVzKQo+PiArICAgIH0KPj4gKwo+PiArICAgIHB1
YihjcmF0ZSkgZm4gdXBkYXRlX3N0YXJ0X3BhdGgoJm11dCBzZWxmLCBwYXRoOiBQYXRoQnVmKSB7
Cj4+ICsgICAgICAgIHNlbGYuc3RhcnRfcGF0aCA9IHBhdGg7Cj4+ICsgICAgfQo+PiArCj4+ICsg
ICAgcHViKGNyYXRlKSBmbiBzdGFydF9wYXRoKCZzZWxmKSAtPiAmUGF0aEJ1ZiB7Cj4+ICsgICAg
ICAgICZzZWxmLnN0YXJ0X3BhdGgKPiAKPiByaWdodCBhZnRlciB0aGUgb25seSBjYWxsIHRvIHRo
aXMuLgo+IAo+IHNvIHRha2VfYW5kX3Jlc2V0IGNvdWxkIGp1c3QgdGFrZSB0aGUgcGF0aCBhcyB3
ZWxsIGFuZCByZXR1cm4gaXQsIGFuZCB3ZQo+IGNhbiBkcm9wIHRoaXMgb25lIGhlcmU/CgphZ3Jl
ZWQsIHJlbW92ZWQgdGhpcyBhbmQgcmV0dXJuIGl0IHZpYSB0YWtlX2FuZF9yZXNldCBpbnN0ZWFk
Cgo+IAo+PiArICAgIH0KPj4gKwo+PiArICAgIHB1YihjcmF0ZSkgZm4gY29udGFpbnNfaGFyZGxp
bmsoJnNlbGYsIGluZm86ICZIYXJkTGlua0luZm8pIC0+IGJvb2wgewo+PiArICAgICAgICBzZWxm
LmhhcmRsaW5rcy5jb250YWlucyhpbmZvKQo+PiArICAgIH0KPj4gKwo+PiArICAgIHB1YihjcmF0
ZSkgZm4gaW5zZXJ0X2hhcmRsaW5rKCZtdXQgc2VsZiwgaW5mbzogSGFyZExpbmtJbmZvKSAtPiBi
b29sIHsKPj4gKyAgICAgICAgc2VsZi5oYXJkbGlua3MuaW5zZXJ0KGluZm8pCj4+ICsgICAgfQo+
PiArCj4+ICsgICAgcHViKGNyYXRlKSBmbiByYW5nZSgmc2VsZikgLT4gJlJhbmdlPHU2ND4gewo+
PiArICAgICAgICAmc2VsZi5yYW5nZQo+PiArICAgIH0KPj4gKwo+PiArICAgIHB1YihjcmF0ZSkg
Zm4gdXBkYXRlX3JhbmdlKCZtdXQgc2VsZiwgcmFuZ2U6IFJhbmdlPHU2ND4pIHsKPj4gKyAgICAg
ICAgc2VsZi5yYW5nZSA9IHJhbmdlOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHB1YihjcmF0ZSkg
Zm4gY2xlYXJfcmFuZ2UoJm11dCBzZWxmKSB7Cj4+ICsgICAgICAgIC8vIGtlZXAgZW5kIGZvciBw
b3NzaWJsZSBjb250aW51YXRpb24gaWYgY2FjaGUgaGFzIGJlZW4gY2xlYXJlZCBiZWNhdXNlCj4+
ICsgICAgICAgIC8vIGl0IHdhcyBmdWxsLCBidXQgZnVydGhlciBjYWNoaW5nIHdvdWxkIGJlIGZp
bmUKPj4gKyAgICAgICAgc2VsZi5yYW5nZSA9IHNlbGYucmFuZ2UuZW5kLi5zZWxmLnJhbmdlLmVu
ZAo+PiArICAgIH0KPiAKPiBkYW5nZXJvdXMgbmFtZS4uIGNsZWFyIHRvIG1lIGFsd2F5cyBpbXBs
aWVzIHJlbW92aW5nIGV2ZXJ5dGhpbmcuLgo+IGVzcGVjaWFsbHkgc2luY2UgdGhlcmUgaXMgbm8g
ZG9jIGNvbW1lbnQgb24gaXQgdGhhdCBnaXZlcyBtZSBzdWNoCj4gaW1wb3J0YW50IGluZm9ybWF0
aW9uIGF0IHRoZSBjYWxsIHNpdGUuCj4gCj4gYnV1dXV0LCB0aGFua2Z1bGx5IHRoaXMgaXMgb25s
eSBjYWxsZWQgb25jZSwgYW5kIHRoYXQgY2FsbCBpcyBhIGZldwo+IGxpbmVzIGFib3ZlIGluIHRh
a2VfYW5kX3Jlc2V0LCBzbyBtYXliZSB3ZSBjYW4ganVzdCBpbmxpbmUgaXQgZm9yIG5vdwo+IGFu
ZCBub3QgZXhwb3NlIHRoaXMgdG8gYWNjaWRlbnRzPwoKUmVtb3ZlZCB0aGlzIGFzIHdlbGwgYnkg
aW5saW5pbmcgYXMgc3VnZ2VzdGVkLgoKPiAKPj4gKwo+PiArICAgIHB1YihjcmF0ZSkgZm4gdHJ5
X2V4dGVuZF9yYW5nZSgmbXV0IHNlbGYsIHJhbmdlOiBSYW5nZTx1NjQ+KSAtPiBib29sIHsKPj4g
KyAgICAgICAgaWYgc2VsZi5yYW5nZS5lbmQgPT0gMCB7Cj4+ICsgICAgICAgICAgICAvLyBpbml0
aWFsaXplIGZpcnN0IHJhbmdlIHRvIHN0YXJ0IGFuZCBlbmQgd2l0aCBzdGFydCBvZiBuZXcgcmFu
Z2UKPj4gKyAgICAgICAgICAgIHNlbGYucmFuZ2Uuc3RhcnQgPSByYW5nZS5zdGFydDsKPj4gKyAg
ICAgICAgICAgIHNlbGYucmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQ7Cj4+ICsgICAgICAgIH0KPj4g
Kwo+PiArICAgICAgICAvLyByYW5nZSBjb250aW51ZWQsIHVwZGF0ZSBlbmQKPj4gKyAgICAgICAg
aWYgc2VsZi5yYW5nZS5lbmQgPT0gcmFuZ2Uuc3RhcnQgewo+PiArICAgICAgICAgICAgc2VsZi5y
YW5nZS5lbmQgPSByYW5nZS5lbmQ7Cj4+ICsgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4gKyAg
ICAgICAgfQo+PiArCj4+ICsgICAgICAgIGZhbHNlCj4+ICsgICAgfQo+PiArCj4+ICsgICAgcHVi
KGNyYXRlKSBmbiB0YWtlX2xhc3RfY2h1bmsoJm11dCBzZWxmKSAtPiBPcHRpb248UmV1c2FibGVE
eW5hbWljRW50cnk+IHsKPj4gKyAgICAgICAgc2VsZi5sYXN0X2NodW5rLnRha2UoKQo+PiArICAg
IH0KPj4gKwo+PiArICAgIHB1YihjcmF0ZSkgZm4gdXBkYXRlX2xhc3RfY2h1bmsoJm11dCBzZWxm
LCBjaHVuazogT3B0aW9uPFJldXNhYmxlRHluYW1pY0VudHJ5Pikgewo+PiArICAgICAgICBzZWxm
Lmxhc3RfY2h1bmsgPSBjaHVuazsKPj4gKyAgICB9Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9wYnMt
Y2xpZW50L3NyYy9weGFyL21vZC5ycyBiL3Bicy1jbGllbnQvc3JjL3B4YXIvbW9kLnJzCj4+IGlu
ZGV4IDUyNDhhMTk1Ni4uMzM0NzU5ZGY2IDEwMDY0NAo+PiAtLS0gYS9wYnMtY2xpZW50L3NyYy9w
eGFyL21vZC5ycwo+PiArKysgYi9wYnMtY2xpZW50L3NyYy9weGFyL21vZC5ycwo+PiBAQCAtNTAs
NiArNTAsNyBAQAo+PiAgIHB1YihjcmF0ZSkgbW9kIGNyZWF0ZTsKPj4gICBwdWIoY3JhdGUpIG1v
ZCBkaXJfc3RhY2s7Cj4+ICAgcHViKGNyYXRlKSBtb2QgZXh0cmFjdDsKPj4gK3B1YihjcmF0ZSkg
bW9kIGxvb2tfYWhlYWRfY2FjaGU7Cj4+ICAgcHViKGNyYXRlKSBtb2QgbWV0YWRhdGE7Cj4+ICAg
cHViKGNyYXRlKSBtb2QgdG9vbHM7Cj4+ICAgCj4+IC0tIAo+PiAyLjM5LjIKPj4KPj4KPj4KPj4g
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gcGJzLWRl
dmVsIG1haWxpbmcgbGlzdAo+PiBwYnMtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KPj4gaHR0cHM6
Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGJzLWRldmVsCj4+
Cj4+Cj4+Cj4gCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KPiBwYnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gcGJzLWRldmVsQGxpc3RzLnByb3htb3gu
Y29tCj4gaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8v
cGJzLWRldmVsCj4gCj4gCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCnBicy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnByb3htb3gu
Y29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3Bi
cy1kZXZlbAo=