From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id D9BE91FF141 for ; Fri, 16 Jan 2026 16:33:02 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 776E81C18B; Fri, 16 Jan 2026 16:33:08 +0100 (CET) Message-ID: <0be759dd-2254-4ae9-a326-6716a3bbbad8@proxmox.com> Date: Fri, 16 Jan 2026 16:33:03 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= , Proxmox Backup Server development discussion References: <20260102160750.285157-1-s.rufinatscha@proxmox.com> <20260102160750.285157-3-s.rufinatscha@proxmox.com> <1768385575.9kaf9dmuhn.astroid@yuna.none> <13d6a203-415d-45ff-b4bb-149903d08f94@proxmox.com> <176857735749.137827.7483218182007589047@yuna.proxmox.com> Content-Language: en-US From: Samuel Rufinatscha In-Reply-To: <176857735749.137827.7483218182007589047@yuna.proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.287 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 POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes 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 v3 2/4] pbs-config: cache verified API token secrets 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" T24gMS8xNi8yNiA0OjI4IFBNLCBGYWJpYW4gR3LDvG5iaWNobGVyIHdyb3RlOgo+IFF1b3Rpbmcg U2FtdWVsIFJ1ZmluYXRzY2hhICgyMDI2LTAxLTE2IDE2OjEzOjE3KQo+PiBPbiAxLzE0LzI2IDEx OjQ0IEFNLCBGYWJpYW4gR3LDvG5iaWNobGVyIHdyb3RlOgo+Pj4gT24gSmFudWFyeSAyLCAyMDI2 IDU6MDcgcG0sIFNhbXVlbCBSdWZpbmF0c2NoYSB3cm90ZToKPj4+PiBDdXJyZW50bHksIGV2ZXJ5 IHRva2VuLWJhc2VkIEFQSSByZXF1ZXN0IHJlYWRzIHRoZSB0b2tlbi5zaGFkb3cgZmlsZSBhbmQK Pj4+PiBydW5zIHRoZSBleHBlbnNpdmUgcGFzc3dvcmQgaGFzaCB2ZXJpZmljYXRpb24gZm9yIHRo ZSBnaXZlbiB0b2tlbgo+Pj4+IHNlY3JldC4gVGhpcyBzaG93cyB1cCBhcyBhIGhvdHNwb3QgaW4g L3N0YXR1cyBwcm9maWxpbmcgKHNlZQo+Pj4+IGJ1ZyAjNzAxNyBbMV0pLgo+Pj4+Cj4+Pj4gVGhp cyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGluLW1lbW9yeSBjYWNoZSBvZiBzdWNjZXNzZnVsbHkgdmVy aWZpZWQgdG9rZW4KPj4+PiBzZWNyZXRzLiBTdWJzZXF1ZW50IHJlcXVlc3RzIGZvciB0aGUgc2Ft ZSB0b2tlbitzZWNyZXQgY29tYmluYXRpb24gb25seQo+Pj4+IHBlcmZvcm0gYSBjb21wYXJpc29u IHVzaW5nIG9wZW5zc2w6Om1lbWNtcDo6ZXEgYW5kIGF2b2lkIHJlLXJ1bm5pbmcgdGhlCj4+Pj4g cGFzc3dvcmQgaGFzaC4gVGhlIGNhY2hlIGlzIHVwZGF0ZWQgd2hlbiBhIHRva2VuIHNlY3JldCBp cyBzZXQgYW5kCj4+Pj4gY2xlYXJlZCB3aGVuIGEgdG9rZW4gaXMgZGVsZXRlZC4gTm90ZSwgdGhp cyBkb2VzIE5PVCBpbmNsdWRlIG1hbnVhbAo+Pj4+IGNvbmZpZyBjaGFuZ2VzLCB3aGljaCB3aWxs IGJlIGNvdmVyZWQgaW4gYSBzdWJzZXF1ZW50IHBhdGNoLgo+Pj4+Cj4+Pj4gVGhpcyBwYXRjaCBp cyBwYXJ0IG9mIHRoZSBzZXJpZXMgd2hpY2ggZml4ZXMgYnVnICM3MDE3IFsxXS4KPj4+Pgo+Pj4+ IFsxXSBodHRwczovL2J1Z3ppbGxhLnByb3htb3guY29tL3Nob3dfYnVnLmNnaT9pZD03MDE3Cj4+ Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBTYW11ZWwgUnVmaW5hdHNjaGEgPHMucnVmaW5hdHNjaGFA cHJveG1veC5jb20+Cj4+Pj4gLS0tCj4+Pj4gQ2hhbmdlcyBmcm9tIHYxIHRvIHYyOgo+Pj4+Cj4+ Pj4gKiBSZXBsYWNlIE9uY2VDZWxsIHdpdGggTGF6eUxvY2ssIGFuZCBzdGQ6OnN5bmM6OlJ3TG9j ayB3aXRoCj4+Pj4gcGFya2luZ19sb3Q6OlJ3TG9jay4KPj4+PiAqIEFkZCBBUElfTVVUQVRJT05f R0VORVJBVElPTiBhbmQgZ3VhcmQgY2FjaGUgaW5zZXJ0cwo+Pj4+IHRvIHByZXZlbnQg4oCcem9t YmllIGluc2VydHPigJ0gYWNyb3NzIGNvbmN1cnJlbnQgc2V0L2RlbGV0ZS4KPj4+PiAqIFJlZmFj dG9yIGNhY2hlIG9wZXJhdGlvbnMgaW50byBjYWNoZV90cnlfc2VjcmV0X21hdGNoZXMsCj4+Pj4g Y2FjaGVfdHJ5X2luc2VydF9zZWNyZXQsIGFuZCBjZW50cmFsaXplIHdyaXRlLXNpZGUgYmVoYXZp b3IgaW4KPj4+PiBhcHBseV9hcGlfbXV0YXRpb24uCj4+Pj4gKiBTd2l0Y2ggZmFzdC1wYXRoIGNh Y2hlIGFjY2VzcyB0byB0cnlfcmVhZC90cnlfd3JpdGUgKGJlc3QtZWZmb3J0KS4KPj4+Pgo+Pj4+ IENoYW5nZXMgZnJvbSB2MiB0byB2MzoKPj4+Pgo+Pj4+ICogUmVwbGFjZWQgcHJvY2Vzcy1sb2Nh bCBjYWNoZSBpbnZhbGlkYXRpb24gKEF0b21pY1U2NAo+Pj4+IEFQSV9NVVRBVElPTl9HRU5FUkFU SU9OKSB3aXRoIGEgY3Jvc3MtcHJvY2VzcyBzaGFyZWQgZ2VuZXJhdGlvbiB2aWEKPj4+PiBDb25m aWdWZXJzaW9uQ2FjaGUuCj4+Pj4gKiBWYWxpZGF0ZSBzaGFyZWQgZ2VuZXJhdGlvbiBiZWZvcmUv YWZ0ZXIgdGhlIGNvbnN0YW50LXRpbWUgc2VjcmV0Cj4+Pj4gY29tcGFyZTsgb25seSBpbnNlcnQg aW50byBjYWNoZSBpZiB0aGUgZ2VuZXJhdGlvbiBpcyB1bmNoYW5nZWQuCj4+Pj4gKiBpbnZhbGlk YXRlX2NhY2hlX3N0YXRlKCkgb24gaW5zZXJ0IGlmIHNoYXJlZCBnZW5lcmF0aW9uIGNoYW5nZWQu Cj4+Pj4KPj4+PiAgICBDYXJnby50b21sICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+Pj4+ ICAgIHBicy1jb25maWcvQ2FyZ28udG9tbCAgICAgICAgICB8ICAgMSArCj4+Pj4gICAgcGJzLWNv bmZpZy9zcmMvdG9rZW5fc2hhZG93LnJzIHwgMTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLQo+Pj4+ICAgIDMgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKPj4+Pgo+Pj4+IGRpZmYgLS1naXQgYS9DYXJnby50b21sIGIvQ2FyZ28udG9tbAo+ Pj4+IGluZGV4IDFhYTU3YWU1Li44MjFiNjNiNyAxMDA2NDQKPj4+PiAtLS0gYS9DYXJnby50b21s Cj4+Pj4gKysrIGIvQ2FyZ28udG9tbAo+Pj4+IEBAIC0xNDMsNiArMTQzLDcgQEAgbm9tID0gIjci Cj4+Pj4gICAgbnVtLXRyYWl0cyA9ICIwLjIiCj4+Pj4gICAgb25jZV9jZWxsID0gIjEuMy4xIgo+ Pj4+ICAgIG9wZW5zc2wgPSAiMC4xMC40MCIKPj4+PiArcGFya2luZ19sb3QgPSAiMC4xMiIKPj4+ PiAgICBwZXJjZW50LWVuY29kaW5nID0gIjIuMSIKPj4+PiAgICBwaW4tcHJvamVjdC1saXRlID0g IjAuMiIKPj4+PiAgICByZWdleCA9ICIxLjUuNSIKPj4+PiBkaWZmIC0tZ2l0IGEvcGJzLWNvbmZp Zy9DYXJnby50b21sIGIvcGJzLWNvbmZpZy9DYXJnby50b21sCj4+Pj4gaW5kZXggNzRhZmIzYzYu LmViODFjZTAwIDEwMDY0NAo+Pj4+IC0tLSBhL3Bicy1jb25maWcvQ2FyZ28udG9tbAo+Pj4+ICsr KyBiL3Bicy1jb25maWcvQ2FyZ28udG9tbAo+Pj4+IEBAIC0xMyw2ICsxMyw3IEBAIGxpYmMud29y a3NwYWNlID0gdHJ1ZQo+Pj4+ICAgIG5peC53b3Jrc3BhY2UgPSB0cnVlCj4+Pj4gICAgb25jZV9j ZWxsLndvcmtzcGFjZSA9IHRydWUKPj4+PiAgICBvcGVuc3NsLndvcmtzcGFjZSA9IHRydWUKPj4+ PiArcGFya2luZ19sb3Qud29ya3NwYWNlID0gdHJ1ZQo+Pj4+ICAgIHJlZ2V4LndvcmtzcGFjZSA9 IHRydWUKPj4+PiAgICBzZXJkZS53b3Jrc3BhY2UgPSB0cnVlCj4+Pj4gICAgc2VyZGVfanNvbi53 b3Jrc3BhY2UgPSB0cnVlCj4+Pj4gZGlmZiAtLWdpdCBhL3Bicy1jb25maWcvc3JjL3Rva2VuX3No YWRvdy5ycyBiL3Bicy1jb25maWcvc3JjL3Rva2VuX3NoYWRvdy5ycwo+Pj4+IGluZGV4IDY0MGZh YmJmLi5mYTg0YWVlNSAxMDA2NDQKPj4+PiAtLS0gYS9wYnMtY29uZmlnL3NyYy90b2tlbl9zaGFk b3cucnMKPj4+PiArKysgYi9wYnMtY29uZmlnL3NyYy90b2tlbl9zaGFkb3cucnMKPj4+PiBAQCAt MSw2ICsxLDggQEAKPj4+PiAgICB1c2Ugc3RkOjpjb2xsZWN0aW9uczo6SGFzaE1hcDsKPj4+PiAr dXNlIHN0ZDo6c3luYzo6TGF6eUxvY2s7Cj4+Pj4gICAgCj4+Pj4gICAgdXNlIGFueWhvdzo6e2Jh aWwsIGZvcm1hdF9lcnIsIEVycm9yfTsKPj4+PiArdXNlIHBhcmtpbmdfbG90OjpSd0xvY2s7Cj4+ Pj4gICAgdXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07Cj4+Pj4gICAgdXNlIHNl cmRlX2pzb246Ontmcm9tX3ZhbHVlLCBWYWx1ZX07Cj4+Pj4gICAgCj4+Pj4gQEAgLTEzLDYgKzE1 LDE4IEBAIHVzZSBjcmF0ZTo6e29wZW5fYmFja3VwX2xvY2tmaWxlLCBCYWNrdXBMb2NrR3VhcmR9 Owo+Pj4+ICAgIGNvbnN0IExPQ0tfRklMRTogJnN0ciA9IHBic19idWlsZGNmZzo6Y29uZmlnZGly ISgiL3Rva2VuLnNoYWRvdy5sb2NrIik7Cj4+Pj4gICAgY29uc3QgQ09ORl9GSUxFOiAmc3RyID0g cGJzX2J1aWxkY2ZnOjpjb25maWdkaXIhKCIvdG9rZW4uc2hhZG93Iik7Cj4+Pj4gICAgCj4+Pj4g Ky8vLyBHbG9iYWwgaW4tbWVtb3J5IGNhY2hlIGZvciBzdWNjZXNzZnVsbHkgdmVyaWZpZWQgQVBJ IHRva2VuIHNlY3JldHMuCj4+Pj4gKy8vLyBUaGUgY2FjaGUgc3RvcmVzIHBsYWluIHRleHQgc2Vj cmV0cyBmb3IgdG9rZW4gQXV0aGlkcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCj4+Pj4gKy8vLyB2 ZXJpZmllZCBhZ2FpbnN0IHRoZSBoYXNoZWQgdmFsdWVzIGluIGB0b2tlbi5zaGFkb3dgLiBUaGlz IGFsbG93cyBmb3IgY2hlYXAKPj4+PiArLy8vIHN1YnNlcXVlbnQgYXV0aGVudGljYXRpb25zIGZv ciB0aGUgc2FtZSB0b2tlbitzZWNyZXQgY29tYmluYXRpb24sIGF2b2lkaW5nCj4+Pj4gKy8vLyBy ZWNvbXB1dGluZyB0aGUgcGFzc3dvcmQgaGFzaCBvbiBldmVyeSByZXF1ZXN0Lgo+Pj4+ICtzdGF0 aWMgVE9LRU5fU0VDUkVUX0NBQ0hFOiBMYXp5TG9jazxSd0xvY2s8QXBpVG9rZW5TZWNyZXRDYWNo ZT4+ID0gTGF6eUxvY2s6Om5ldyh8fCB7Cj4+Pj4gKyAgICBSd0xvY2s6Om5ldyhBcGlUb2tlblNl Y3JldENhY2hlIHsKPj4+PiArICAgICAgICBzZWNyZXRzOiBIYXNoTWFwOjpuZXcoKSwKPj4+PiAr ICAgICAgICBzaGFyZWRfZ2VuOiAwLAo+Pj4+ICsgICAgfSkKPj4+PiArfSk7Cj4+Pj4gKwo+Pj4+ ICAgICNbZGVyaXZlKFNlcmlhbGl6ZSwgRGVzZXJpYWxpemUpXQo+Pj4+ICAgICNbc2VyZGUocmVu YW1lX2FsbCA9ICJrZWJhYi1jYXNlIildCj4+Pj4gICAgLy8vIEFwaVRva2VuIGlkIC8gc2VjcmV0 IHBhaXIKPj4+PiBAQCAtNTQsOSArNjgsMjcgQEAgcHViIGZuIHZlcmlmeV9zZWNyZXQodG9rZW5p ZDogJkF1dGhpZCwgc2VjcmV0OiAmc3RyKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4+Pj4gICAg ICAgICAgICBiYWlsISgibm90IGFuIEFQSSB0b2tlbiBJRCIpOwo+Pj4+ICAgICAgICB9Cj4+Pj4g ICAgCj4+Pj4gKyAgICAvLyBGYXN0IHBhdGgKPj4+PiArICAgIGlmIGNhY2hlX3RyeV9zZWNyZXRf bWF0Y2hlcyh0b2tlbmlkLCBzZWNyZXQpIHsKPj4+PiArICAgICAgICByZXR1cm4gT2soKCkpOwo+ Pj4+ICsgICAgfQo+Pj4+ICsKPj4+PiArICAgIC8vIFNsb3cgcGF0aAo+Pj4+ICsgICAgLy8gRmly c3QsIGNhcHR1cmUgdGhlIHNoYXJlZCBnZW5lcmF0aW9uIGJlZm9yZSBkb2luZyB0aGUgaGFzaCB2 ZXJpZmljYXRpb24uCj4+Pj4gKyAgICBsZXQgZ2VuX2JlZm9yZSA9IHRva2VuX3NoYWRvd19zaGFy ZWRfZ2VuKCk7Cj4+Pj4gKwo+Pj4+ICAgICAgICBsZXQgZGF0YSA9IHJlYWRfZmlsZSgpPzsKPj4+ PiAgICAgICAgbWF0Y2ggZGF0YS5nZXQodG9rZW5pZCkgewo+Pj4+IC0gICAgICAgIFNvbWUoaGFz aGVkX3NlY3JldCkgPT4gcHJveG1veF9zeXM6OmNyeXB0Ojp2ZXJpZnlfY3J5cHRfcHcoc2VjcmV0 LCBoYXNoZWRfc2VjcmV0KSwKPj4+PiArICAgICAgICBTb21lKGhhc2hlZF9zZWNyZXQpID0+IHsK Pj4+PiArICAgICAgICAgICAgcHJveG1veF9zeXM6OmNyeXB0Ojp2ZXJpZnlfY3J5cHRfcHcoc2Vj cmV0LCBoYXNoZWRfc2VjcmV0KT87Cj4+Pj4gKwo+Pj4+ICsgICAgICAgICAgICAvLyBUcnkgdG8g Y2FjaGUgb25seSBpZiBub3RoaW5nIGNoYW5nZWQgd2hpbGUgdmVyaWZ5aW5nIHRoZSBzZWNyZXQu Cj4+Pj4gKyAgICAgICAgICAgIGlmIGxldCBTb21lKGdlbikgPSBnZW5fYmVmb3JlIHsKPj4+PiAr ICAgICAgICAgICAgICAgIGNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0KHRva2VuaWQuY2xvbmUoKSwg c2VjcmV0LnRvX293bmVkKCksIGdlbik7Cj4+Pj4gKyAgICAgICAgICAgIH0KPj4+PiArCj4+Pj4g KyAgICAgICAgICAgIE9rKCgpKQo+Pj4+ICsgICAgICAgIH0KPj4+PiAgICAgICAgICAgIE5vbmUg PT4gYmFpbCEoImludmFsaWQgQVBJIHRva2VuIiksCj4+Pj4gICAgICAgIH0KPj4+PiAgICB9Cj4+ Pj4gQEAgLTgyLDYgKzExNCw4IEBAIGZuIHNldF9zZWNyZXQodG9rZW5pZDogJkF1dGhpZCwgc2Vj cmV0OiAmc3RyKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7Cj4+Pj4gICAgICAgIGRhdGEuaW5zZXJ0 KHRva2VuaWQuY2xvbmUoKSwgaGFzaGVkX3NlY3JldCk7Cj4+Pj4gICAgICAgIHdyaXRlX2ZpbGUo ZGF0YSk/Owo+Pj4+ICAgIAo+Pj4+ICsgICAgYXBwbHlfYXBpX211dGF0aW9uKHRva2VuaWQsIFNv bWUoc2VjcmV0KSk7Cj4+Pj4gKwo+Pj4+ICAgICAgICBPaygoKSkKPj4+PiAgICB9Cj4+Pj4gICAg Cj4+Pj4gQEAgLTk3LDUgKzEzMSwxMjYgQEAgcHViIGZuIGRlbGV0ZV9zZWNyZXQodG9rZW5pZDog JkF1dGhpZCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+Pj4+ICAgICAgICBkYXRhLnJlbW92ZSh0 b2tlbmlkKTsKPj4+PiAgICAgICAgd3JpdGVfZmlsZShkYXRhKT87Cj4+Pj4gICAgCj4+Pj4gKyAg ICBhcHBseV9hcGlfbXV0YXRpb24odG9rZW5pZCwgTm9uZSk7Cj4+Pj4gKwo+Pj4+ICAgICAgICBP aygoKSkKPj4+PiAgICB9Cj4+Pj4gKwo+Pj4+ICtzdHJ1Y3QgQXBpVG9rZW5TZWNyZXRDYWNoZSB7 Cj4+Pj4gKyAgICAvLy8gS2V5cyBhcmUgdG9rZW4gQXV0aGlkcywgdmFsdWVzIGFyZSB0aGUgY29y cmVzcG9uZGluZyBwbGFpbiB0ZXh0IHNlY3JldHMuCj4+Pj4gKyAgICAvLy8gRW50cmllcyBhcmUg YWRkZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9uLWRpc2sgdmVyaWZpY2F0aW9uIGluCj4+Pj4gKyAg ICAvLy8gYHZlcmlmeV9zZWNyZXRgIG9yIHdoZW4gYSBuZXcgdG9rZW4gc2VjcmV0IGlzIGdlbmVy YXRlZCBieQo+Pj4+ICsgICAgLy8vIGBnZW5lcmF0ZV9hbmRfc2V0X3NlY3JldGAuIFVzZWQgdG8g YXZvaWQgcmVwZWF0ZWQKPj4+PiArICAgIC8vLyBwYXNzd29yZC1oYXNoIGNvbXB1dGF0aW9uIG9u IHN1YnNlcXVlbnQgYXV0aGVudGljYXRpb25zLgo+Pj4+ICsgICAgc2VjcmV0czogSGFzaE1hcDxB dXRoaWQsIENhY2hlZFNlY3JldD4sCj4+Pj4gKyAgICAvLy8gU2hhcmVkIGdlbmVyYXRpb24gdG8g ZGV0ZWN0IG11dGF0aW9ucyBvZiB0aGUgdW5kZXJseWluZyB0b2tlbi5zaGFkb3cgZmlsZS4KPj4+ PiArICAgIHNoYXJlZF9nZW46IHVzaXplLAo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvLy8gQ2FjaGVk IHNlY3JldC4KPj4+PiArc3RydWN0IENhY2hlZFNlY3JldCB7Cj4+Pj4gKyAgICBzZWNyZXQ6IFN0 cmluZywKPj4+PiArfQo+Pj4+ICsKPj4+PiArZm4gY2FjaGVfdHJ5X2luc2VydF9zZWNyZXQodG9r ZW5pZDogQXV0aGlkLCBzZWNyZXQ6IFN0cmluZywgc2hhcmVkX2dlbl9iZWZvcmU6IHVzaXplKSB7 Cj4+Pj4gKyAgICBsZXQgU29tZShtdXQgY2FjaGUpID0gVE9LRU5fU0VDUkVUX0NBQ0hFLnRyeV93 cml0ZSgpIGVsc2Ugewo+Pj4+ICsgICAgICAgIHJldHVybjsKPj4+PiArICAgIH07Cj4+Pj4gKwo+ Pj4+ICsgICAgbGV0IFNvbWUoc2hhcmVkX2dlbl9ub3cpID0gdG9rZW5fc2hhZG93X3NoYXJlZF9n ZW4oKSBlbHNlIHsKPj4+PiArICAgICAgICByZXR1cm47Cj4+Pj4gKyAgICB9Owo+Pj4+ICsKPj4+ PiArICAgIC8vIElmIHRoaXMgcHJvY2VzcyBtaXNzZWQgYSBnZW5lcmF0aW9uIGJ1bXAsIGl0cyBj YWNoZSBpcyBzdGFsZS4KPj4+PiArICAgIGlmIGNhY2hlLnNoYXJlZF9nZW4gIT0gc2hhcmVkX2dl bl9ub3cgewo+Pj4+ICsgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3RhdGUoJm11dCBjYWNoZSk7 Cj4+Pj4gKyAgICAgICAgY2FjaGUuc2hhcmVkX2dlbiA9IHNoYXJlZF9nZW5fbm93Owo+Pj4+ICsg ICAgfQo+Pj4+ICsKPj4+PiArICAgIC8vIElmIGEgbXV0YXRpb24gaGFwcGVuZWQgd2hpbGUgd2Ug d2VyZSB2ZXJpZnlpbmcgdGhlIHNlY3JldCwgZG8gbm90IGluc2VydC4KPj4+PiArICAgIGlmIHNo YXJlZF9nZW5fbm93ID09IHNoYXJlZF9nZW5fYmVmb3JlIHsKPj4+PiArICAgICAgICBjYWNoZS5z ZWNyZXRzLmluc2VydCh0b2tlbmlkLCBDYWNoZWRTZWNyZXQgeyBzZWNyZXQgfSk7Cj4+Pj4gKyAg ICB9Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8vIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiB0b2tl biBzZWNyZXQgYWdhaW5zdCB0aGUgY2FjaGVkIHNlY3JldC4KPj4+PiArLy8gQ2hlY2tzIHRoZSBn ZW5lcmF0aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNvbnN0YW50LXRpbWUgY29tcGFyZSB0byBh dm9pZCBhCj4+Pj4gKy8vIFRPQ1RPVSB3aW5kb3cuIElmIGFub3RoZXIgcHJvY2VzcyByb3RhdGVz L2RlbGV0ZXMgYSB0b2tlbiB3aGlsZSB3ZSdyZSB2YWxpZGF0aW5nCj4+Pj4gKy8vIHRoZSBjYWNo ZWQgc2VjcmV0LCB0aGUgZ2VuZXJhdGlvbiB3aWxsIGNoYW5nZSwgYW5kIHdlCj4+Pj4gKy8vIG11 c3Qgbm90IHRydXN0IHRoZSBjYWNoZSBmb3IgdGhpcyByZXF1ZXN0Lgo+Pj4+ICtmbiBjYWNoZV90 cnlfc2VjcmV0X21hdGNoZXModG9rZW5pZDogJkF1dGhpZCwgc2VjcmV0OiAmc3RyKSAtPiBib29s IHsKPj4+PiArICAgIGxldCBTb21lKGNhY2hlKSA9IFRPS0VOX1NFQ1JFVF9DQUNIRS50cnlfcmVh ZCgpIGVsc2Ugewo+Pj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4+PiArICAgIH07Cj4+Pj4g KyAgICBsZXQgU29tZShlbnRyeSkgPSBjYWNoZS5zZWNyZXRzLmdldCh0b2tlbmlkKSBlbHNlIHsK Pj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+Pj4gKyAgICB9Owo+Pj4+ICsKPj4+PiArICAg IGxldCBjYWNoZV9nZW4gPSBjYWNoZS5zaGFyZWRfZ2VuOwo+Pj4+ICsKPj4+PiArICAgIGxldCBT b21lKGdlbjEpID0gdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKSBlbHNlIHsKPj4+PiArICAgICAg ICByZXR1cm4gZmFsc2U7Cj4+Pj4gKyAgICB9Owo+Pj4+ICsgICAgaWYgZ2VuMSAhPSBjYWNoZV9n ZW4gewo+Pj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4+PiArICAgIH0KPj4+PiArCj4+Pj4g KyAgICBsZXQgZXEgPSBvcGVuc3NsOjptZW1jbXA6OmVxKGVudHJ5LnNlY3JldC5hc19ieXRlcygp LCBzZWNyZXQuYXNfYnl0ZXMoKSk7Cj4+Pgo+Pj4gc2hvdWxkIHdlIGludmFsaWRhdGUgdGhlIGNh Y2hlIGhlcmUgZm9yIHRoaXMgcGFydGljdWxhciBhdXRoaWQgaW4gY2FzZQo+Pj4gb2YgYSBtaXNt YXRjaCwgdG8gYXZvaWQgbWFraW5nIGJydXRlIGZvcmNpbmcgdG9vIGVhc3kvY2hlYXA/Cj4+Pgo+ Pgo+PiBXZSBhcmUgbm90IGRvaW5nIGEgY2hlYXAgcmVqZWN0LCBpbiBtaXNtYXRjaCB3ZSBkbyBz dGlsbCBmYWxsIHRocm91Z2ggdG8KPj4gdmVyaWZ5X2NyeXB0X3B3KCkuIEV2aWN0aW5nIG9uIG1p c21hdGNoIGNvdWxkIGhvd2V2ZXIgZW5hYmxlIGNhY2hlCj4+IHRocmFzaGluZyB3aGVyZSB3cm9u ZyBzZWNyZXRzIGZvciBhIGtub3duIHRva2VuaWQgd291bGQgZXZpY3QgY2FjaGVkCj4+IGVudHJp ZXMuIFNvIEkgdGhpbmsgd2Ugc2hvdWxkIG5vdCBpbnZhbGlkYXRlIGhlcmUgb24gbWlzbWF0Y2gu Cj4+Cj4+Pj4gKyAgICBsZXQgU29tZShnZW4yKSA9IHRva2VuX3NoYWRvd19zaGFyZWRfZ2VuKCkg ZWxzZSB7Cj4+Pj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4+ICsgICAgfTsKPj4+PiArCj4+ Pj4gKyAgICBlcSAmJiBnZW4yID09IGNhY2hlX2dlbgo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtmbiBh cHBseV9hcGlfbXV0YXRpb24odG9rZW5pZDogJkF1dGhpZCwgbmV3X3NlY3JldDogT3B0aW9uPCZz dHI+KSB7Cj4+Pj4gKyAgICAvLyBTaWduYWwgY2FjaGUgaW52YWxpZGF0aW9uIHRvIG90aGVyIHBy b2Nlc3NlcyAoYmVzdC1lZmZvcnQpLgo+Pj4+ICsgICAgbGV0IG5ld19zaGFyZWRfZ2VuID0gYnVt cF90b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpOwo+Pj4+ICsKPj4+PiArICAgIGxldCBtdXQgY2Fj aGUgPSBUT0tFTl9TRUNSRVRfQ0FDSEUud3JpdGUoKTsKPj4+PiArCj4+Pj4gKyAgICAvLyBJZiB3 ZSBjYW5ub3QgcmVhZC9idW1wIHRoZSBzaGFyZWQgZ2VuZXJhdGlvbiwgd2UgY2Fubm90IHNhZmVs eSB0cnVzdCB0aGUgY2FjaGUuCj4+Pj4gKyAgICBsZXQgU29tZShnZW4pID0gbmV3X3NoYXJlZF9n ZW4gZWxzZSB7Cj4+Pj4gKyAgICAgICAgaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZSgmbXV0IGNhY2hl KTsKPj4+PiArICAgICAgICBjYWNoZS5zaGFyZWRfZ2VuID0gMDsKPj4+PiArICAgICAgICByZXR1 cm47Cj4+Pj4gKyAgICB9Owo+Pj4+ICsKPj4+PiArICAgIC8vIFVwZGF0ZSB0byB0aGUgcG9zdC1t dXRhdGlvbiBnZW5lcmF0aW9uLgo+Pj4+ICsgICAgY2FjaGUuc2hhcmVkX2dlbiA9IGdlbjsKPj4+ PiArCj4+Pj4gKyAgICAvLyBBcHBseSB0aGUgbmV3IG11dGF0aW9uLgo+Pj4+ICsgICAgbWF0Y2gg bmV3X3NlY3JldCB7Cj4+Pj4gKyAgICAgICAgU29tZShzZWNyZXQpID0+IHsKPj4+PiArICAgICAg ICAgICAgY2FjaGUuc2VjcmV0cy5pbnNlcnQoCj4+Pj4gKyAgICAgICAgICAgICAgICB0b2tlbmlk LmNsb25lKCksCj4+Pj4gKyAgICAgICAgICAgICAgICBDYWNoZWRTZWNyZXQgewo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgIHNlY3JldDogc2VjcmV0LnRvX293bmVkKCksCj4+Pj4gKyAgICAgICAg ICAgICAgICB9LAo+Pj4+ICsgICAgICAgICAgICApOwo+Pj4+ICsgICAgICAgIH0KPj4+PiArICAg ICAgICBOb25lID0+IHsKPj4+PiArICAgICAgICAgICAgY2FjaGUuc2VjcmV0cy5yZW1vdmUodG9r ZW5pZCk7Cj4+Pj4gKyAgICAgICAgfQo+Pj4+ICsgICAgfQo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsv Ly8gR2V0IHRoZSBjdXJyZW50IHNoYXJlZCBnZW5lcmF0aW9uLgo+Pj4+ICtmbiB0b2tlbl9zaGFk b3dfc2hhcmVkX2dlbigpIC0+IE9wdGlvbjx1c2l6ZT4gewo+Pj4+ICsgICAgY3JhdGU6OkNvbmZp Z1ZlcnNpb25DYWNoZTo6bmV3KCkKPj4+PiArICAgICAgICAub2soKQo+Pj4+ICsgICAgICAgIC5t YXAofGN2Y3wgY3ZjLnRva2VuX3NoYWRvd19nZW5lcmF0aW9uKCkpCj4+Pj4gK30KPj4+PiArCj4+ Pj4gKy8vLyBCdW1wIGFuZCByZXR1cm4gdGhlIG5ldyBzaGFyZWQgZ2VuZXJhdGlvbi4KPj4+PiAr Zm4gYnVtcF90b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpIC0+IE9wdGlvbjx1c2l6ZT4gewo+Pj4+ ICsgICAgY3JhdGU6OkNvbmZpZ1ZlcnNpb25DYWNoZTo6bmV3KCkKPj4+PiArICAgICAgICAub2so KQo+Pj4+ICsgICAgICAgIC5tYXAofGN2Y3wgY3ZjLmluY3JlYXNlX3Rva2VuX3NoYWRvd19nZW5l cmF0aW9uKCkgKyAxKQo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvLy8gSW52YWxpZGF0ZXMgdGhlIGNh Y2hlIHN0YXRlIGFuZCBvbmx5IGtlZXBzIHRoZSBzaGFyZWQgZ2VuZXJhdGlvbi4KPj4+Cj4+PiBi b3RoIGNhbGxzIHRvIHRoaXMgYWN0dWFsbHkgc2V0IHRoZSBjYWNoZWQgZ2VuZXJhdGlvbiB0byBz b21lIHZhbHVlCj4+PiByaWdodCBhZnRlciwgc28gbWF5YmUgdGhpcyBzaG91bGQgdGFrZSBhIGdl bmVyYXRpb24gZGlyZWN0bHkgYW5kIHNldCBpdD8KPj4+Cj4+Cj4+IHBhdGNoIDMvNCBkb2VzbuKA mXQgYWx3YXlzIHVwZGF0ZSB0aGUgZ2VuIG9uIGNhY2hlIGludmFsaWRhdGlvbgo+PiAoc2hhZG93 X210aW1lX2xlbigpIGVycm9yIGJyYW5jaCBpbiBhcHBseV9hcGlfbXV0YXRpb24pIGJ1dCBtb3N0 IG90aGVyCj4+IGNhbGwgc2l0ZXMgZG8uIEFncmVlZCB0aGlzIGNhbiBiZSByZWZhY3RvcmVkLCBt YXliZToKPiAKPiB0aGF0IG9uZSBzZXRzIHRoZSBnZW5lcmF0aW9uIGJlZm9yZSAocG90ZW50aWFs bHkpIGludmFsaWRhdGluZyB0aGUgY2FjaGUKPiB0aG91Z2gsIHNvIHdlIGNvdWxkIHVuY29uZGl0 aW9uYWxseSByZXNldCB0aGUgZ2VuZXJhdGlvbiB0byB0aGF0IHZhbHVlIHdoZW4KPiBpbnZhbGlk YXRpbmcuLiB3ZSBzaG91bGQgbWF5YmUgYWxzbyByZS1vcmRlciB0aGUgbG9jayBhbmQgYnVtcCB0 aGVyZT8KPgoKR29vZCBwb2ludCwgSSB3aWxsIGNoZWNrIHRoaXMhIHRoYW5rcyBGYWJpYW4hIDop Cgo+Pgo+PiBmbiBpbnZhbGlkYXRlX2NhY2hlX3N0YXRlKGNhY2hlOiAmbXV0IEFwaVRva2VuU2Vj cmV0Q2FjaGUpIHsKPj4gICAgICAgY2FjaGUuc2VjcmV0cy5jbGVhcigpOwo+PiAgICAgICAvLyBj bGVhciBvdGhlciBjYWNoZSBmaWVsZHMgKG10aW1lL2xlbi9sYXN0X2NoZWNrZWQpIGFzIG5lZWRl ZAo+PiB9Cj4+Cj4+IGZuIGludmFsaWRhdGVfY2FjaGVfc3RhdGVfYW5kX3NldF9nZW4oY2FjaGU6 ICZtdXQgQXBpVG9rZW5TZWNyZXRDYWNoZSwKPj4gZ2VuOiB1c2l6ZSkgewo+PiAgICAgICBpbnZh bGlkYXRlX2NhY2hlX3N0YXRlKGNhY2hlKTsKPj4gICAgICAgY2FjaGUuc2hhcmVkX2dlbiA9IGdl bjsKPj4gfQo+Pgo+PiBXZSBjb3VsZCBhbHNvIGRvIGEgc2luZ2xlIGhlbHBlciB3aXRoIE9wdGlv bjx1c2l6ZT4gYnV0IHR3byBoZWxwZXJzIG1ha2UKPj4gdGhlIGNhbGwgc2l0ZXMgbW9yZSBleHBs aWNpdC4KPj4KPj4+PiArZm4gaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZShjYWNoZTogJm11dCBBcGlU b2tlblNlY3JldENhY2hlKSB7Cj4+Pj4gKyAgICBjYWNoZS5zZWNyZXRzLmNsZWFyKCk7Cj4+Pj4g K30KPj4+PiAtLSAKPj4+PiAyLjQ3LjMKPj4+Pgo+Pj4+Cj4+Pj4KPj4+PiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+Pj4+IHBicy1kZXZlbCBtYWlsaW5n IGxpc3QKPj4+PiBwYnMtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KPj4+PiBodHRwczovL2xpc3Rz LnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wYnMtZGV2ZWwKPj4+Pgo+Pj4K Pj4+Cj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ Pj4gcGJzLWRldmVsIG1haWxpbmcgbGlzdAo+Pj4gcGJzLWRldmVsQGxpc3RzLnByb3htb3guY29t Cj4+PiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9w YnMtZGV2ZWwKPj4KPj4KCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlzdHMucHJveG1veC5j b20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGJz LWRldmVsCg==