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 68BD71FF15C for ; Fri, 14 Nov 2025 10:32:41 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7ADF0BBBB; Fri, 14 Nov 2025 10:33:34 +0100 (CET) MIME-Version: 1.0 In-Reply-To: References: <20250814112659.2584520-1-d.csapak@proxmox.com> <176310914957.64802.13109309341568645230@yuna.proxmox.com> From: Fabian =?utf-8?q?Gr=C3=BCnbichler?= To: Dominik Csapak , pve-devel@lists.proxmox.com Date: Fri, 14 Nov 2025 10:32:50 +0100 Message-ID: <176311277090.161537.17167193408053318170@yuna.proxmox.com> User-Agent: alot/0.0.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1763112753363 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.045 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_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [metricserver.pm] Subject: Re: [pve-devel] [PATCH manager v2] api: implement node-independent bulk actions X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" UXVvdGluZyBEb21pbmlrIENzYXBhayAoMjAyNS0xMS0xNCAxMDoxNjoyMCkKPiB0aGFua3MgZm9y IHRoZSByZXZpZXchCj4gCj4ganVzdCBhIGZldyBxdWVzdGlvbnMgaW5saW5lCj4gCj4gT24gMTEv MTQvMjUgOTozMiBBTSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiA+IFF1b3RpbmcgRG9t aW5payBDc2FwYWsgKDIwMjUtMDgtMTQgMTM6MjY6NTkpCj4gW3NuaXBdCj4gPj4gK3N1YiBjcmVh dGVfY2xpZW50IHsKPiA+PiArICAgIG15ICgkYXV0aHVzZXIsICRyZXF1ZXN0X3RpbWVvdXQpID0g QF87Cj4gPj4gKyAgICBteSAoJHVzZXIsIHVuZGVmKSA9IFBWRTo6QWNjZXNzQ29udHJvbDo6c3Bs aXRfdG9rZW5pZCgkYXV0aHVzZXIsIDEpOwo+ID4+ICsKPiA+PiArICAgICMgVE9ETzogSG93IHRv IGhhbmRsZSBUb2tlbnM/Cj4gPiAKPiA+IG5vdCBsaWtlIGJlbG93IGZvciBzdXJlIDspIHdlJ2Qg bmVlZCB0byBtYWtlIGl0IHF1ZXJpYWJsZSB1c2luZyB0aGUKPiA+IFJQQ0Vudmlyb25tZW50IChh bmQgc3RvcmUgaXQgdGhlcmUpIEkgZ3Vlc3M/IG1heWJlIG9wdC1pbiBzbyB0aGUgc3RvcmluZyBv bmx5Cj4gPiBoYXBwZW5zIGZvciBjZXJ0YWluIEFQSSBoYW5kbGVycyAoZS5nLiwgdGhlc2Ugb25l cyBoZXJlIGZvciBhIHN0YXJ0KT8KPiA+IAo+ID4gdGhpcyBiYXNpY2FsbHkgZXNjYWxhdGVzIGZy b20gdGhlIHRva2VuIHRvIGEgdGlja2V0IG9mIHRoZSB1c2VyLCB3aGljaCBpcyBhCj4gPiBub2dv IGV2ZW4gaWYgeW91IGR1cGxpY2F0ZSB0aGUgY3VycmVudCBzZXQgb2YgcHJpdmlsZWdlIGNoZWNr cyBoZXJlLCBhcyB0aGF0IGlzCj4gPiBqdXN0IHdhaXRpbmcgdG8gZ2V0IG91dCBvZiBzeW5jCj4g Cj4gSnVzdCB0byBjbGFyaWZ5OiB3aGF0J3MgdGhlIHdvcnN0IHRoYXQgY291bGQgaGFwcGVuIHdp dGggdGhpcz8KPiAKPiB0aGUgQVBJIGNhbGwgY2hlY2tzIGlmIHRoZSB0b2tlbiBoYXMgdGhlIGNv cnJlY3QgcGVybWlzc2lvbnMgZm9yIGFsbCAKPiByZXNvdXJjZXMsIGFuZCB0aGUgdXNlciBjYW4n dCBoYXZlIGxlc3MgcGVybWlzc2lvbnMgYXQgdGhhdCBwb2ludC4KPiBTbyAndXBncmFkaW5nJyB0 aGUgdG9rZW4gdG8gYSBmdWxsIHVzZXIgdGlja2V0IGZvciB0aGUgY29udGV4dAo+IG9mIHRoZXNl IGNoYW5nZXMgZG9lcyBub3QgaW5oZXJlbnRseSBicmVhayBhbnl0aGluZz8KPiAoRXhjZXB0IEkn bSBtaXNzaW5nIHNvbWV0aGluZz8pCgp0aGUgaXNzdWUgaXMgdGhhdCAidGhlIGNvcnJlY3QgcGVy bWlzc2lvbnMiIGlzIG9ubHkgdmFsaWQgbm93LiBpdCdzIHBvdGVudGlhbGx5Cm5vdCB2YWxpZCBp ZiBvbmUgb2YgdGhlIGNhbGxlZCBlbmRwb2ludHMgaXMgY2hhbmdlZCBpbiB0aGUgZnV0dXJlLiBh bmQgaWYgdGhhdApoYXBwZW5zLCB0aGlzIGlzIG5vdyBzdWRkZW5seSBhIChwcm9iYWJseSBzbWFs bCEpIHByaXZpbGVnZSBlc2NhbGF0aW9uIHRvIGFsbG93CnRoZSB0b2tlbiB0byBjYWxsIHRoZSBl bmRwb2ludCBhcyB0aGUgdXNlci4KCj4gVGhlcmUgaXMgYSBUT0NUT1UgaXNzdWUgb2YgY291cnNl LCBidXQgSU1ITyBpdCB3b3VsZCBub3QgdGhhdCBiaWcKPiBvZiBhIGRlYWwgc2luY2UgdGhpcyBj YW4gb25seSBoYXBwZW4gaWYgdGhlIHBlcm1pc3Npb25zIGNoYW5nZQo+IGR1cmluZyB0aGUgcnVu bmluZyB0YXNrLCBhbmQgb25lIGNvdWxkIGFyZ3VlIHRoYXQgdGhlIHRva2VuCj4gaGFkIHBlcm1p c3Npb24gdG8gZG8gdGhlc2UgY2hhbmdlcyB3aGVuIHN0YXJ0aW5nIHRoZSBhcGkgY2FsbCwKPiBz byBpdCBzaG91bGQgYmUgYWJsZSB0byBmaW5pc2ggaXQuCgp0aGF0IGFzIHdlbGwsIGJ1dCB5ZWFo LCB0aGlzIGlzIGhvdyB3ZSBub3JtYWxseSBoYW5kbGUgc3VjaCB0aGluZ3Mgd2l0aGluIGFuCmVu ZHBvaW50IGhhbmRsZXIuCgo+IEkgbW9kZWxlZCB0aGlzIGFmdGVyIHdlIGRvIHRoZSBtZXRyaWNz IGV4cG9ydCBhcGkgY2FsbAo+IGluIFBWRS9BUEkyL0NsdXN0ZXIvTWV0cmljU2VydmVyLnBtIHdo ZXJlIHdlIGRvIHRoZSBzYW1lCj4gKG9yIHNpbWlsYXIpLCBzbyB3ZSBwcm9iYWJseSBzaG91bGQg Y2hhbmdlIGl0IHRoZXJlIGFzIHdlbGwgdGhlbj8KCnllcwoKPiBBbnl3YXksIEknbGwgc2VlIHRo YXQgd2UgZXh0ZW5kIHRoZSBycGNlbnYgdG8gYmUgYWJsZSB0byBkbyB0aGF0LAo+IGJ1dCBob3cg c2hvdWxkIHdlIG1hcmsgdGhlIGFwaSBjYWxsPyBpbiBhIHNwZWNpYWwgd2F5IGxpa2Ugd2UgZG8K PiB3aXRoICdwcm90ZWN0ZWQnID8gKHNvIGUuZy4gJyJzYXZlLXRva2VuLWluZm8iID0+IDEsJyBp biB0aGUgYXBpCj4gY2FsbCAod2l0aCBhIGJldHRlciBuYW1lIG9mYykpCgpzZWUgVGhvbWFzIHJl cGx5LiBJIHRoaW5rIHRoYXQgYXBwcm9hY2ggaXMgc2Vuc2libGUsIGdpdmVuIHRoYXQgd2UgZG9u J3QgaGF2ZQp0b28gbWFueSBvZiB0aGVzZSBjYWxscyB0aGF0IGRvICJtYW51YWwiIHByb3h5aW5n LgoKPiA+IAo+ID4+ICsgICAgbXkgJHRpY2tldCA9IFBWRTo6QWNjZXNzQ29udHJvbDo6YXNzZW1i bGVfdGlja2V0KCR1c2VyIHx8ICRhdXRodXNlcik7Cj4gPj4gKyAgICBteSAkY3NyZl90b2tlbiA9 IFBWRTo6QWNjZXNzQ29udHJvbDo6YXNzZW1ibGVfY3NyZl9wcmV2ZW50aW9uX3Rva2VuKCR1c2Vy IHx8ICRhdXRodXNlcik7Cj4gPj4gKwo+ID4+ICsgICAgbXkgJG5vZGUgPSBQVkU6OklOb3RpZnk6 Om5vZGVuYW1lKCk7Cj4gPj4gKyAgICBteSAkZmluZ2VycHJpbnQgPSBQVkU6OkNsdXN0ZXI6Omdl dF9ub2RlX2ZpbmdlcnByaW50KCRub2RlKTsKPiA+PiArCj4gPj4gKyAgICBteSAkY29ubl9hcmdz ID0gewo+ID4+ICsgICAgICAgIHByb3RvY29sID0+ICdodHRwcycsCj4gPj4gKyAgICAgICAgaG9z dCA9PiAnbG9jYWxob3N0JywgIyBhbHdheXMgY2FsbCB0aGUgYXBpIGxvY2FsbHksIGxldCBwdmVw cm94eSBoYW5kbGUgdGhlIHByb3h5aW5nCj4gPj4gKyAgICAgICAgcG9ydCA9PiA4MDA2LAo+ID4+ ICsgICAgICAgIHRpY2tldCA9PiAkdGlja2V0LAo+ID4+ICsgICAgICAgIHRpbWVvdXQgPT4gJHJl cXVlc3RfdGltZW91dCAvLyAyNSwgIyBkZWZhdWx0IHNsaWdodGx5IHNob3J0ZXIgdGhhbiB0aGUg cHJveHktPmRhZW1vbiB0aW1lb3V0Cj4gPj4gKyAgICAgICAgY2FjaGVkX2ZpbmdlcnByaW50cyA9 PiB7Cj4gPj4gKyAgICAgICAgICAgICRmaW5nZXJwcmludCA9PiAxLAo+ID4+ICsgICAgICAgIH0s Cj4gPj4gKyAgICB9Owo+ID4+ICsKPiA+PiArICAgIG15ICRhcGlfY2xpZW50ID0gUFZFOjpBUElD bGllbnQ6OkxXUC0+bmV3KCRjb25uX2FyZ3MtPiUqKTsKPiA+PiArICAgIGlmIChkZWZpbmVkKCRj c3JmX3Rva2VuKSkgewo+ID4+ICsgICAgICAgICRhcGlfY2xpZW50LT51cGRhdGVfY3NyZnRva2Vu KCRjc3JmX3Rva2VuKTsKPiA+PiArICAgIH0KPiA+PiArCj4gPj4gKyAgICByZXR1cm4gJGFwaV9j bGllbnQ7Cj4gPiAKPiA+IHRoaXMgY2xpZW50IGRvZXNuJ3QgYXV0b21hdGljYWxseSByZWZyZXNo IHRoZSB0aWNrZXQgYmVmb3JlIGl0IGV4cGlyZXMsIHNvCj4gPiBiaWdnZXIgc2V0cyBvZiBidWxr IGFjdGlvbnMgdGhhdCB0YWtlIG1vcmUgdGhhbiAyaCB3aWxsIGFsd2F5cyBmYWlsLi4KPiA+IAo+ IAo+IHRydWUsIHNvIGknZCBhYnN0cmFjdCBhd2F5IGEgJ21ha2VfcmVxdWVzdCcgZnVuY3Rpb24g dGhhdCBjaGVja3MKPiBpZiB3ZSBzaG91bGQgcmVuZXcgdGhlIHRpY2tldCBhbmQgYWx3YXlzIHVz ZSB0aGF0PwoKeWVhaCwgaW4gdGhpcyBjYXNlIGl0IHdvdWxkbid0IGV2ZW4gaGVscCB0byBpbXBs ZW1lbnQgYSByZWxvZ2luIGluIHRoZSBjbGllbnQsCnNpbmNlIHdlIGRvbid0IGRvIGEgbG9naW4g aW4gdGhlIGZpcnN0IHBsYWNlIDspCgpjaGVja2luZyB0aGUgdGlja2V0IGxpZmV0aW1lIHdpdGgg c29tZSBzbGFjayBpcyBwcm9iYWJseSBnb29kIGVub3VnaC4KCj4gPj4gK30KPiA+PiArCj4gPj4g KyMgc3RhcnRzIGFuZCBhd2FpdHMgYSB0YXNrIGZvciBlYWNoIGd1ZXN0IGdpdmVuIHZpYSAkc3Rh cnRsaXN0Lgo+ID4+ICsjCj4gPj4gKyMgdGFrZXMgYSB2bSBsaXN0IGluIHRoZSBmb3JtIG9mCj4g Pj4gKyMgewo+ID4+ICsjICAgICAwID0+IHsKPiA+PiArIyAgICAgICAgIDEwMCA9PiB7IC4uIGd1 ZXN0IGluZm8gLi59LAo+ID4+ICsjICAgICAgICAgMTAxID0+IHsgLi4gZ3Vlc3QgaW5mbyAuLn0s Cj4gPj4gKyMgICAgIH0sCj4gPj4gKyMgICAgIDEgPT4gewo+ID4+ICsjICAgICAgICAgMTAyID0+ IHsgLi4gZ3Vlc3QgaW5mbyAuLn0sCj4gPj4gKyMgICAgICAgICAxMDMgPT4geyAuLiBndWVzdCBp bmZvIC4ufSwKPiA+PiArIyAgICAgfSwKPiA+PiArIyB9Cj4gPj4gKyMKPiA+PiArIyBtYXhfd29y a2VyczogaG93IG1hbnkgcGFyYWxsZWwgdGFza3Mgc2hvdWxkIGJlIHN0YXJ0ZWQuCj4gPj4gKyMg c3RhcnRfdGFzazogYSBzdWIgdGhhdCByZXR1cm5zIGVpdGVyIGEgdXBpZCBvciAxICh1bmRlZiBt ZWFucyBmYWlsdXJlKQo+ID4+ICsjIGNoZWNrX3Rhc2s6IGlmIHN0YXJ0X3Rhc2sgcmV0dXJuZWQg YSB1cGlkLCB3aWxsIHdhaXQgZm9yIHRoYXQgdG8gZmluaXNoIGFuZAo+ID4+ICsjICAgIGNhbGwg Y2hlY2tfdGFzayB3aXRoIHRoZSByZXN1bHRpbmcgdGFzayBzdGF0dXMKPiA+PiArc3ViIGhhbmRs ZV90YXNrX2ZvcmVhY2hfZ3Vlc3Qgewo+ID4+ICsgICAgbXkgKCRzdGFydGxpc3QsICRtYXhfd29y a2VycywgJHN0YXJ0X3Rhc2ssICRjaGVja190YXNrKSA9IEBfOwo+ID4+ICsKPiA+PiArICAgIG15 ICRycGNlbnYgPSBQVkU6OlJQQ0Vudmlyb25tZW50OjpnZXQoKTsKPiA+PiArICAgIG15ICRhdXRo dXNlciA9ICRycGNlbnYtPmdldF91c2VyKCk7Cj4gPj4gKyAgICBteSAkYXBpX2NsaWVudCA9IGNy ZWF0ZV9jbGllbnQoJGF1dGh1c2VyKTsKPiA+PiArCj4gPj4gKyAgICBteSAkZmFpbGVkID0gW107 Cj4gPj4gKyAgICBmb3IgbXkgJG9yZGVyIChzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAkc3RhcnRs aXN0LT4lKikgewo+ID4+ICsgICAgICAgIG15ICR2bWxpc3QgPSAkc3RhcnRsaXN0LT57JG9yZGVy fTsKPiA+PiArICAgICAgICBteSAkd29ya2VycyA9IHt9Owo+ID4+ICsKPiA+PiArICAgICAgICBm b3IgbXkgJHZtaWQgKHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICR2bWxpc3QtPiUqKSB7Cj4gPj4g Kwo+ID4+ICsgICAgICAgICAgICAjIHdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIHNsb3QgaXMgZnJl ZQo+ID4+ICsgICAgICAgICAgICB3aGlsZSAoc2NhbGFyKGtleXMoJHdvcmtlcnMtPiUqKSkgPj0g JG1heF93b3JrZXJzKSB7Cj4gPj4gKyAgICAgICAgICAgICAgICBmb3IgbXkgJHVwaWQgKGtleXMo JHdvcmtlcnMtPiUqKSkgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgIG15ICR3b3JrZXIgPSAk d29ya2Vycy0+eyR1cGlkfTsKPiA+PiArICAgICAgICAgICAgICAgICAgICBteSAkbm9kZSA9ICR3 b3JrZXItPntndWVzdH0tPntub2RlfTsKPiA+PiArCj4gPj4gKyAgICAgICAgICAgICAgICAgICAg bXkgJHRhc2sgPSBldmFsIHsgJGFwaV9jbGllbnQtPmdldCgiL25vZGVzLyRub2RlL3Rhc2tzLyR1 cGlkL3N0YXR1cyIpIH07Cj4gPiAKPiA+IHRoaXMgY291bGQgZWFzaWx5IGZhaWwgZm9yIHJlYXNv bnMgb3RoZXIgdGhhbiB0aGUgdGFzayBoYXZpbmcgZXhpdGVkPyBzaG91bGQgd2UKPiA+IG1heWJl IHJldHJ5IGEgZmV3IHRpbWVzIHRvIGF2b2lkIGFjY2lkZW50cywgYmVmb3JlIGdpdmluZyB1cD8K PiA+IAo+IAo+IHllcCwgaSdkIGluY2x1ZGUgc3VjaCBmdW5jdGlvbmFsaXR5IChvcHQtaW4ganVz dCBmb3IgdGhlc2UgY2FsbHMpIGluIHRoZSAKPiAnbWFrZV9yZXF1ZXN0JyBhYnN0cmFjdGlvbj8K CnllYWgsIHRoYXQgd291bGQgd29yay4KCj4gCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgaWYg KG15ICRlcnIgPSAkQCkgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICBwdXNoICRmYWls ZWQtPkAqLCAkd29ya2VyLT57dm1pZH07Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAkY2hlY2tfdGFzay0+KCRhcGlfY2xpZW50LCAkd29ya2VyLT57dm1pZH0sICR3b3JrZXIt PntndWVzdH0sIDEsIHVuZGVmKTsKPiA+PiArCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAg IGRlbGV0ZSAkd29ya2Vycy0+eyR1cGlkfTsKPiA+PiArICAgICAgICAgICAgICAgICAgICB9IGVs c2lmICgkdGFzay0+e3N0YXR1c30gbmUgJ3J1bm5pbmcnKSB7Cj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIG15ICRpc19lcnJvciA9IFBWRTo6VG9vbHM6OnVwaWRfc3RhdHVzX2lzX2Vycm9y KCR0YXNrLT57ZXhpdHN0YXR1c30pOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICBwdXNo ICRmYWlsZWQtPkAqLCAkd29ya2VyLT57dm1pZH0gaWYgJGlzX2Vycm9yOwo+ID4+ICsKPiA+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgJGNoZWNrX3Rhc2stPigKPiA+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICRhcGlfY2xpZW50LCAkd29ya2VyLT57dm1pZH0sICR3b3JrZXItPntn dWVzdH0sICRpc19lcnJvciwgJHRhc2ssCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICk7 Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJHdvcmtlcnMtPnsk dXBpZH07Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ID4+ICsgICAgICAgICAgICAgICAg fQo+ID4+ICsgICAgICAgICAgICAgICAgc2xlZXAoMSk7ICMgSG93IG11Y2g/Cj4gPj4gKyAgICAg ICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgIG15ICRndWVzdCA9ICR2bWxpc3QtPnsk dm1pZH07Cj4gPj4gKyAgICAgICAgICAgIG15ICR1cGlkID0gZXZhbCB7ICRzdGFydF90YXNrLT4o JGFwaV9jbGllbnQsICR2bWlkLCAkZ3Vlc3QpIH07Cj4gPj4gKyAgICAgICAgICAgIHdhcm4gJEAg aWYgJEA7Cj4gPiAKPiA+IEE6IGhlcmUgd2UgdXNlIHdhcm4gKHNlZSBmdXJ0aGVyIHNpbWlsYXIg bml0cyBiZWxvdykKPiAKPiB0cnVlLCBpJ2xsIHVzZSBsb2dfd2FybiBmb3IgdGhvc2UKPiAKPiA+ IAo+IAo+IFtzbmlwXQo+ID4+ICsgICAgY29kZSA9PiBzdWIgewo+ID4+ICsgICAgICAgIG15ICgk cGFyYW0pID0gQF87Cj4gPj4gKwo+ID4+ICsgICAgICAgIG15ICRycGNlbnYgPSBQVkU6OlJQQ0Vu dmlyb25tZW50OjpnZXQoKTsKPiA+PiArICAgICAgICBteSAkYXV0aHVzZXIgPSAkcnBjZW52LT5n ZXRfdXNlcigpOwo+ID4+ICsKPiA+PiArICAgICAgICBteSAoJHZtbGlzdCwgJHZtbGlzdF9zdHJp bmcpID0gZXh0cmFjdF92bWxpc3QoJHBhcmFtKTsKPiA+PiArCj4gPj4gKyAgICAgICAgY2hlY2tf Z3Vlc3RfcGVybWlzc2lvbnMoJHJwY2VudiwgJGF1dGh1c2VyLCAkdm1saXN0LCBbJ1ZNLlBvd2Vy TWdtdCddKTsKPiA+PiArCj4gPj4gKyAgICAgICAgaWYgKCRwYXJhbS0+eyd0by1kaXNrJ30pIHsK PiA+PiArICAgICAgICAgICAgY2hlY2tfZ3Vlc3RfcGVybWlzc2lvbnMoJHJwY2VudiwgJGF1dGh1 c2VyLCAkdm1saXN0LCBbJ1ZNLkNvbmZpZy5EaXNrJ10pOwo+ID4+ICsgICAgICAgIH0KPiA+PiAr Cj4gPj4gKyAgICAgICAgaWYgKG15ICRzdGF0ZXN0b3JhZ2UgPSAkcGFyYW0tPntzdGF0ZXN0b3Jh Z2V9KSB7Cj4gPj4gKyAgICAgICAgICAgICRycGNlbnYtPmNoZWNrKCRhdXRodXNlciwgIi9zdG9y YWdlLyRzdGF0ZXN0b3JhZ2UiLCBbJ0RhdGFzdG9yZS5BbGxvY2F0ZVNwYWNlJ10pOwo+ID4+ICsg ICAgICAgIH0gZWxzZSB7Cj4gPj4gKyAgICAgICAgICAgICMgc3RvcmFnZSBhY2Nlc3MgbXVzdCBi ZSBkb25lIGluIHN0YXJ0IHRhc2sKPiA+PiArICAgICAgICB9Cj4gPiAKPiA+IHRoaXMgaWYgc2hv dWxkIGJlIG5lc3RlZCBpbiB0aGUgb3RoZXIgaWY/Cj4gCj4gd2UgY291bGQsIGJ1dCBzaW5jZSAn c3RhdGVzdG9yYWdlJyByZXF1aXJlcyAndG8tZGlzaycgaW4gdGhlIGFwaSBhbnl3YXksCj4gc28g Y2hhbmdpbmcgdGhpcyB3b3VsZCBqdXN0IGluY3JlYXNlIGluZGVudGF0aW9uPwo+IAo+IGkgY291 bGQgcHV0IGl0IGludCBoZSBpZiwgYnV0IHRoZSBhcGkgYWxyZWFkeSBkb2VzIHRoYXQgZm9yIHVz CgpoZXJlIGl0IG1ha2VzIG5vIGRpZmZlcmVuY2Ugb3RoZXIgdGhhbiBiZWluZyBoYXJkZXIgdG8g cGFyc2UKCj4gCj4gPiAKPiA+PiArCj4gPj4gKyAgICAgICAgbXkgJGNvZGUgPSBzdWIgewo+ID4+ ICsgICAgICAgICAgICBteSAkc3RhcnRsaXN0ID0KPiA+PiArICAgICAgICAgICAgICAgIFBWRTo6 QVBJMjo6Tm9kZXM6Ok5vZGVpbmZvOjpnZXRfc3RhcnRfc3RvcF9saXN0KHVuZGVmLCB1bmRlZiwg JHZtbGlzdF9zdHJpbmcpOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgcHJpbnRfc3RhcnRfYWN0 aW9uKCR2bWxpc3QsICJTdXNwZW5kaW5nIik7Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAjIHJl dmVyc2Ugb3JkZXIgZm9yIHN1c3BlbmQKPiA+PiArICAgICAgICAgICAgZm9yIG15ICRvcmRlciAo a2V5cyAkc3RhcnRsaXN0LT4lKikgewo+ID4+ICsgICAgICAgICAgICAgICAgbXkgJGxpc3QgPSBk ZWxldGUgJHN0YXJ0bGlzdC0+eyRvcmRlcn07Cj4gPj4gKyAgICAgICAgICAgICAgICAkb3JkZXIg PSAkb3JkZXIgKiAtMTsKPiA+PiArICAgICAgICAgICAgICAgICRzdGFydGxpc3QtPnskb3JkZXJ9 ID0gJGxpc3Q7Cj4gPj4gKyAgICAgICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgIG15 ICRzdGFydF90YXNrID0gc3ViIHsKPiA+PiArICAgICAgICAgICAgICAgIG15ICgkYXBpX2NsaWVu dCwgJHZtaWQsICRndWVzdCkgPSBAXzsKPiA+PiArICAgICAgICAgICAgICAgIG15ICRub2RlID0g JGd1ZXN0LT57bm9kZX07Cj4gPj4gKwo+ID4+ICsgICAgICAgICAgICAgICAgaWYgKCRndWVzdC0+ e3R5cGV9IG5lICdxZW11Jykgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgIGxvZ193YXJuKCJz a2lwcGluZyAkdm1pZCwgb25seSBWTXMgY2FuIGJlIHN1c3BlbmRlZCIpOwo+ID4+ICsgICAgICAg ICAgICAgICAgICAgIHJldHVybiAxOwo+ID4+ICsgICAgICAgICAgICAgICAgfQo+ID4+ICsKPiA+ PiArICAgICAgICAgICAgICAgIGlmICghJHBhcmFtLT57c3RhdGVzdG9yYWdlfSkgewo+ID4gCj4g PiB0aGlzIHNob3VsZCBhZ2FpbiBiZSBuZXN0ZWQgaW5zaWRlIGEgY2hlY2sgZm9yIHRvLWRpc2sg YmVpbmcgc2V0Cj4gCj4gYWdhaW4sIHNhbWUgYXJndW1lbnQgYXMgYWJvdmUKPiA+IAo+ID4+ICsg ICAgICAgICAgICAgICAgICAgIG15ICRjb25mID0gUFZFOjpRZW11Q29uZmlnLT5sb2FkX2NvbmZp Zygkdm1pZCwgJG5vZGUpOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgIG15ICRzdG9yZWNmZyA9 IFBWRTo6U3RvcmFnZTo6Y29uZmlnKCk7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgbXkgJHN0 YXRlc3RvcmFnZSA9IFBWRTo6UWVtdVNlcnZlcjo6ZmluZF92bXN0YXRlX3N0b3JhZ2UoJGNvbmYs ICRzdG9yZWNmZyk7Cj4gPiAKPiA+IHRoaXMgZG9lcyBub3QgZXhpc3QsIGl0J3MgaW4gUWVtdUNv bmZpZwo+IAo+IGFoIHllcywgdGhpcyB3YXMgbW92ZWQgYmV0d2VlZW4gbXkgdjEgYW5kIHYyIElJ UkMgYW5kIGkgZm9yZ290IHRvIGNoYW5nZSBpdAo+IAo+ID4gCj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgJHJwY2Vudi0+Y2hlY2soCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICRhdXRo dXNlciwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgIi9zdG9yYWdlLyRzdGF0ZXN0b3Jh Z2UiLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICBbJ0RhdGFzdG9yZS5BbGxvY2F0ZVNw YWNlJ10sCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgKTsKCmJ1dCBoZXJlIHdlIGFjdHVhbGx5 IGRvIGEgcGVybWlzc2lvbiBjaGVjayBpZiBuZWl0aGVyIHRvLWRpc2sgbm9yIHN0YXRlc3RvcmFn ZSBpcyBzZXQsIHdoaWNoIGlzIHdyb25nLi4KCj4gPj4gKyAgICAgICAgICAgICAgICB9Cj4gPj4g Kwo+ID4+ICsgICAgICAgICAgICAgICAgbXkgJHN0YXR1cyA9Cj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgZXZhbCB7ICRhcGlfY2xpZW50LT5nZXQoIi9ub2Rlcy8kbm9kZS9xZW11LyR2bWlkL3N0 YXR1cy9jdXJyZW50IikgfTsKPiA+PiArICAgICAgICAgICAgICAgIGlmIChkZWZpbmVkKCRzdGF0 dXMpICYmICRzdGF0dXMtPntzdGF0dXN9IG5lICdydW5uaW5nJykgewo+ID4+ICsgICAgICAgICAg ICAgICAgICAgIHByaW50IFNUREVSUiAiU2tpcHBpbmcgVk0gJHZtaWQsIG5vdCBydW5uaW5nLlxu IjsKPiA+PiArICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKPiA+PiArICAgICAgICAgICAg ICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgICAgICBteSAkcGFyYW1zID0ge307Cj4gPj4g KyAgICAgICAgICAgICAgICAkcGFyYW1zLT57J3RvZGlzayd9ID0gJHBhcmFtLT57J3RvLWRpc2sn fSAvLyAwOwo+ID4+ICsgICAgICAgICAgICAgICAgJHBhcmFtcy0+e3N0YXRlc3RvcmFnZX0gPSAk cGFyYW0tPntzdGF0ZXN0b3JhZ2V9Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgaWYgZGVmaW5l ZCgkcGFyYW0tPntzdGF0ZXN0b3JhZ2V9KTsKPiA+IAo+ID4gc3RhdGVzdG9yYWdlIG9ubHkgbWFr ZXMgc2Vuc2UgaWYgeW91IHNldCB0by1kaXNrLCBzbyBpdCBzaG91bGQgYmUgb3JkZXJlZCBsaWtl Cj4gPiB0aGF0IGhlcmUgYXMgd2VsbC4uCj4gCj4gYWdhaW4gc2FtZSBhcmd1bWVudCBhcyBhYm92 ZQo+IAo+IGlmIHlvdSBpbnNpc3QsIGknbGwgY2hhbmdlIGl0LCBidXQgSU1ITyBpdCBqdXN0IGlu Y3JlYXNlcyB0aGUgCj4gaW5kZW50YXRpb24gbGV2ZWwgZm9yIG5vdCBtdWNoIGdhaW4KCmhlcmUg aXQncyBvbmx5IGEgcmVhZGFiaWxpdHkgaXNzdWUgSSdkIHNheSwgYXMgbG9uZyBhcyB0aGUgYWN0 dWFsIGNhbGxlZCBBUEkKZW5kcG9pbnQgY29udGludWVzIHRvIGlnbm9yZSBzdGF0ZXN0b3JhZ2Ug aWYgdG9kaXNrIGlzIG5vdCBzZXQvZW5hYmxlZAoKPiA+PiArICAgICAgICAgICAgICAgICRwYXJh bXMtPnsndG9kaXNrJ30gPSAkcGFyYW0tPnsndG8tZGlzayd9IC8vIDA7Cj4gPj4gKyAgICAgICAg ICAgICAgICAkcGFyYW1zLT57c3RhdGVzdG9yYWdlfSA9ICRwYXJhbS0+e3N0YXRlc3RvcmFnZX0K PiA+PiArICAgICAgICAgICAgICAgICAgICBpZiBkZWZpbmVkKCRwYXJhbS0+e3N0YXRlc3RvcmFn ZX0pOwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2 ZS1kZXZlbCBtYWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8v bGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=