From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 536801FF17C for <inbox@lore.proxmox.com>; Wed, 2 Apr 2025 18:31:49 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D20B91F2B5; Wed, 2 Apr 2025 18:31:36 +0200 (CEST) Mime-Version: 1.0 Date: Wed, 02 Apr 2025 18:31:31 +0200 Message-Id: <D8WAOTDV6ACB.1SUFA17DNXZP9@proxmox.com> To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com> From: "Max Carrara" <m.carrara@proxmox.com> X-Mailer: aerc 0.18.2-0-ge037c095a049 References: <20250326142059.261938-1-m.carrara@proxmox.com> <20250326142059.261938-2-m.carrara@proxmox.com> <1743421180.1phby3wrum.astroid@yuna.none> In-Reply-To: <1743421180.1phby3wrum.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.325 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 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. [common.pm, plugin.pm, pluginbase.pm, proxmox.com, dirplugin.pm, nfsplugin.pm, lvmplugin.pm] Subject: Re: [pve-devel] [PATCH v1 pve-storage 1/8] pluginbase: introduce PVE::Storage::PluginBase with doc scaffold X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> T24gTW9uIE1hciAzMSwgMjAyNSBhdCA1OjEzIFBNIENFU1QsIEZhYmlhbiBHcsO8bmJpY2hsZXIg d3JvdGU6Cj4gT24gTWFyY2ggMjYsIDIwMjUgMzoyMCBwbSwgTWF4IENhcnJhcmEgd3JvdGU6Cj4g PiBBZGQgUFZFOjpTdG9yYWdlOjpQbHVnaW5CYXNlLCB3aGljaCBkZWZpbmVzIHN0dWJzIGZvciBh bGwgbWV0aG9kcyB0aGF0Cj4gPiBzdG9yYWdlIHBsdWdpbnMgc2hvdWxkIGltcGxlbWVudCBpbiBv cmRlciB0byBjb25mb3JtIHRvIG91ciBwbHVnaW4KPiA+IEFQSS4gVGhpcyBtYWtlcyBpdCBtdWNo IGVhc2llciBmb3IgKHRoaXJkLXBhcnR5KSBkZXZlbG9wZXJzIHRvIHNlZQo+ID4gd2hpY2ggbWV0 aG9kcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQuCj4gPiAKPiA+IFBsdWdpbkJhc2UgaXMgaW5zZXJ0 ZWQgaW50byB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gYmV0d2Vlbgo+ID4gUFZFOjpTdG9yYWdlOjpQ bHVnaW4gYW5kIFBWRTo6U2VjdGlvbkNvbmZpZyBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlCj4gPiBQ bHVnaW4gbW9kdWxlIGluaGVyaXQgZnJvbSBTZWN0aW9uQ29uZmlnIGRpcmVjdGx5LiBUaGlzIGtl ZXBzIHRoZQo+ID4gaW5oZXJpdGFuY2UgY2hhaW4gbGluZWFyLCBhdm9pZGluZyBtdWx0aXBsZSBp bmhlcml0YW5jZS4KPiA+IAo+ID4gQWxzbyBwcm92aWRlIGEgc2NhZmZvbGQgZm9yIGRvY3VtZW50 YXRpb24uIFByZXNlcnZlIHByZS1leGlzdGluZwo+ID4gY29tbWVudHMgZm9yIGNvbnRleHQncyBz YWtlLgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBNYXggQ2FycmFyYSA8bS5jYXJyYXJhQHByb3ht b3guY29tPgo+ID4gLS0tCj4gPiAgc3JjL1BWRS9TdG9yYWdlL01ha2VmaWxlICAgICAgfCAgIDEg Kwo+ID4gIHNyYy9QVkUvU3RvcmFnZS9QbHVnaW4ucG0gICAgIHwgICAyICstCj4gPiAgc3JjL1BW RS9TdG9yYWdlL1BsdWdpbkJhc2UucG0gfCAzMjggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMzMwIGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL1BWRS9TdG9yYWdlL1BsdWdpbkJhc2Uu cG0KPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3NyYy9QVkUvU3RvcmFnZS9NYWtlZmlsZSBiL3NyYy9Q VkUvU3RvcmFnZS9NYWtlZmlsZQo+ID4gaW5kZXggY2UzZmQ2OC4uZjJjZGI2NiAxMDA2NDQKPiA+ IC0tLSBhL3NyYy9QVkUvU3RvcmFnZS9NYWtlZmlsZQo+ID4gKysrIGIvc3JjL1BWRS9TdG9yYWdl L01ha2VmaWxlCj4gPiBAQCAtMSw2ICsxLDcgQEAKPiA+ICBTT1VSQ0VTPSBcCj4gPiAgCUNvbW1v bi5wbSBcCj4gPiAgCVBsdWdpbi5wbSBcCj4gPiArCVBsdWdpbkJhc2UucG0gXAo+ID4gIAlEaXJQ bHVnaW4ucG0gXAo+ID4gIAlMVk1QbHVnaW4ucG0gXAo+ID4gIAlORlNQbHVnaW4ucG0gXAo+ID4g ZGlmZiAtLWdpdCBhL3NyYy9QVkUvU3RvcmFnZS9QbHVnaW4ucG0gYi9zcmMvUFZFL1N0b3JhZ2Uv UGx1Z2luLnBtCj4gPiBpbmRleCA2NWNmNDNmLi5kZjY4ODJhIDEwMDY0NAo+ID4gLS0tIGEvc3Jj L1BWRS9TdG9yYWdlL1BsdWdpbi5wbQo+ID4gKysrIGIvc3JjL1BWRS9TdG9yYWdlL1BsdWdpbi5w bQo+ID4gQEAgLTE5LDcgKzE5LDcgQEAgdXNlIFBWRTo6U3RvcmFnZTo6Q29tbW9uOwo+ID4gIAo+ ID4gIHVzZSBKU09OOwo+ID4gIAo+ID4gLXVzZSBiYXNlIHF3KFBWRTo6U2VjdGlvbkNvbmZpZyk7 Cj4gPiArdXNlIHBhcmVudCBxdyhQVkU6OlN0b3JhZ2U6OlBsdWdpbkJhc2UpOwo+ID4gIAo+ID4g IHVzZSBjb25zdGFudCBLTk9XTl9DT01QUkVTU0lPTl9GT1JNQVRTID0+ICAoJ2d6JywgJ2x6bycs ICd6c3QnLCAnYnoyJyk7Cj4gPiAgdXNlIGNvbnN0YW50IENPTVBSRVNTT1JfUkUgPT4gam9pbign fCcsIEtOT1dOX0NPTVBSRVNTSU9OX0ZPUk1BVFMpOwo+ID4gZGlmZiAtLWdpdCBhL3NyYy9QVkUv U3RvcmFnZS9QbHVnaW5CYXNlLnBtIGIvc3JjL1BWRS9TdG9yYWdlL1BsdWdpbkJhc2UucG0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5lNTZhYTcyCj4gPiAtLS0g L2Rldi9udWxsCj4gPiArKysgYi9zcmMvUFZFL1N0b3JhZ2UvUGx1Z2luQmFzZS5wbQo+ID4gQEAg LTAsMCArMSwzMjggQEAKPiA+ICs9aGVhZDEgTkFNRQo+ID4gKwo+ID4gK0M8UFZFOjpTdG9yYWdl OjpQbHVnaW5CYXNlPiAtIFN0b3JhZ2UgUGx1Z2luIEFQSSBJbnRlcmZhY2UKPiA+ICsKPiA+ICs9 aGVhZDEgREVTQ1JJUFRJT04KPiA+ICsKPiA+ICs9Y3V0Cj4gPiArCj4gPiArcGFja2FnZSBQVkU6 OlN0b3JhZ2U6OlBsdWdpbkJhc2U7Cj4gPiArCj4gPiArdXNlIHN0cmljdDsKPiA+ICt1c2Ugd2Fy bmluZ3M7Cj4gPiArCj4gPiArdXNlIENhcnAgcXcoY3JvYWspOwo+ID4gKwo+ID4gK3VzZSBwYXJl bnQgcXcoUFZFOjpTZWN0aW9uQ29uZmlnKTsKPiA+ICsKPiA+ICs9aGVhZDEgUExVR0lOIElOVEVS RkFDRSBNRVRIT0RTCj4gPiArCj4gPiArPWN1dAo+ID4gKwo+ID4gKz1oZWFkMiBQTFVHSU4gREVG SU5JVElPTgo+ID4gKwo+ID4gKz1jdXQKPiA+ICsKPiA+ICtzdWIgdHlwZSB7Cj4gPiArICAgIGNy b2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIg cHJvcGVydGllcyB7Cj4gPiArICAgIG15ICgkY2xhc3MpID0gQF87Cj4gPiArICAgIHJldHVybiAk Y2xhc3MtPlNVUEVSOjpwcm9wZXJ0aWVzKCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBvcHRpb25z IHsKPiA+ICsgICAgbXkgKCRjbGFzcykgPSBAXzsKPiA+ICsgICAgcmV0dXJuICRjbGFzcy0+U1VQ RVI6Om9wdGlvbnMoKTsKPiA+ICt9Cj4gPiArCj4gPiArc3ViIHBsdWdpbmRhdGEgewo+ID4gKyAg ICBteSAoJGNsYXNzKSA9IEBfOwo+ID4gKyAgICByZXR1cm4gJGNsYXNzLT5TVVBFUjo6cGx1Z2lu ZGF0YSgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIgcHJpdmF0ZSB7Cj4gPiArICAgIGNyb2FrICJp bXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICs9aGVhZDIgR0VO RVJBTAo+ID4gKwo+ID4gKz1jdXQKPiA+ICsKPiA+ICtzdWIgY2hlY2tfY29ubmVjdGlvbiB7Cj4g PiArICAgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZykgPSBAXzsKPiA+ICsKPiA+ICsgICAg cmV0dXJuIDE7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBhY3RpdmF0ZV9zdG9yYWdlIHsKPiA+ICsg ICAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2ZnLCAkY2FjaGUpID0gQF87Cj4gPiArICAgIGNy b2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIg ZGVhY3RpdmF0ZV9zdG9yYWdlIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2Zn LCAkY2FjaGUpID0gQF87Cj4gPiArCj4gPiArICAgIHJldHVybjsKPiA+ICt9Cj4gPiArCj4gPiAr c3ViIHN0YXR1cyB7Cj4gPiArICAgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJGNhY2hl KSA9IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ ICt9Cj4gPiArCj4gPiArc3ViIGNsdXN0ZXJfbG9ja19zdG9yYWdlIHsKPiA+ICsgICAgbXkgKCRj bGFzcywgJHN0b3JlaWQsICRzaGFyZWQsICR0aW1lb3V0LCAkZnVuYywgQHBhcmFtKSA9IEBfOwo+ ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ICt9Cj4gPiAr Cj4gPiArc3ViIHBhcnNlX3ZvbG5hbWUgewo+ID4gKyAgICBteSAoJGNsYXNzLCAkdm9sbmFtZSkg PSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAr fQo+ID4gKwo+ID4gK3N1YiBnZXRfc3ViZGlyIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHNjZmcs ICR2dHlwZSkgPSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3Nc biI7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBmaWxlc3lzdGVtX3BhdGggewo+ID4gKyAgICBteSAo JGNsYXNzLCAkc2NmZywgJHZvbG5hbWUsICRzbmFwbmFtZSkgPSBAXzsKPiA+ICsgICAgY3JvYWsg ImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBwYXRo IHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHNjZmcsICR2b2xuYW1lLCAkc3RvcmVpZCwgJHNuYXBu YW1lKSA9IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsK PiA+ICt9Cj4gPiArCj4gPiArc3ViIGZpbmRfZnJlZV9kaXNrbmFtZSB7Cj4gPiArICAgIG15ICgk Y2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZtaWQsICRmbXQsICRhZGRfZm10X3N1ZmZpeCkgPSBA XzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ ID4gKwo+ID4gKz1oZWFkMiBIT09LUwo+ID4gKwo+ID4gKz1jdXQKPiA+ICsKPiA+ICsjIGNhbGxl ZCBkdXJpbmcgYWRkaXRpb24gb2Ygc3RvcmFnZSAoYmVmb3JlIHRoZSBuZXcgc3RvcmFnZSBjb25m aWcgZ290IHdyaXR0ZW4pCj4KPiBjYWxsZWQgd2hlbiBhZGRpbmcgYSBzdG9yYWdlIGNvbmZpZyBl bnRyeSwgYmVmb3JlIHRoZSBuZXcgY29uZmlnIGdldHMgd3JpdHRlbgo+Cj4gPiArIyBkaWUgdG8g YWJvcnQgYWRkaXRpb24gaWYgdGhlcmUgYXJlIChncmF2ZSkgcHJvYmxlbXMKPiA+ICsjIE5PVEU6 IHJ1bnMgaW4gYSBzdG9yYWdlIGNvbmZpZyAqbG9ja2VkKiBjb250ZXh0Cj4gPiArc3ViIG9uX2Fk ZF9ob29rIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2ZnLCAlcGFyYW0pID0g QF87Cj4gPiArICAgIHJldHVybiB1bmRlZjsKPiA+ICt9Cj4gPiArCj4gPiArIyBjYWxsZWQgZHVy aW5nIHN0b3JhZ2UgY29uZmlndXJhdGlvbiB1cGRhdGUgKGJlZm9yZSB0aGUgdXBkYXRlZCBzdG9y YWdlIGNvbmZpZyBnb3Qgd3JpdHRlbikKPgo+IGNhbGxlZCB3aGVuIHVwZGF0aW5nIGEgc3RvcmFn ZSBjb25maWcgZW50cnksIGJlZm9yZSB0aGUgdXBkYXRlZCBjb25maWcKPiBnZXRzIHdyaXR0ZW4K Pgo+ID4gKyMgZGllIHRvIGFib3J0IHRoZSB1cGRhdGUgaWYgdGhlcmUgYXJlIChncmF2ZSkgcHJv YmxlbXMKPiA+ICsjIE5PVEU6IHJ1bnMgaW4gYSBzdG9yYWdlIGNvbmZpZyAqbG9ja2VkKiBjb250 ZXh0Cj4gPiArc3ViIG9uX3VwZGF0ZV9ob29rIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHN0b3Jl aWQsICRzY2ZnLCAlcGFyYW0pID0gQF87Cj4gPiArICAgIHJldHVybiB1bmRlZjsKPiA+ICt9Cj4g PiArCj4gPiArIyBjYWxsZWQgZHVyaW5nIGRlbGV0aW9uIG9mIHN0b3JhZ2UgKGJlZm9yZSB0aGUg bmV3IHN0b3JhZ2UgY29uZmlnIGdvdCB3cml0dGVuKQo+ID4gKyMgYW5kIGlmIHRoZSBhY3RpdmF0 ZSBjaGVjayBvbiBhZGRpdGlvbiBmYWlscywgdG8gY2xlYW51cCBhbGwgc3RvcmFnZSB0cmFjZXMK PiA+ICsjIHdoaWNoIG9uX2FkZF9ob29rIG1heSBoYXZlIGNyZWF0ZWQuCj4KPiBjYWxsZWQgd2hl biBkZWxldGluZyBhIHN0b3JhZ2UgY29uZmlnIGVudHJ5LCBiZWZvcmUgdGhlIG5ldyBzdG9yYWdl Cj4gY29uZmlnIGdldHMgd3JpdHRlbi4KPgo+IGFsc28gY2FsbGVkIGFzIHBhcnQgb2YgZXJyb3Ig aGFuZGxpbmcgd2hlbiB1bmRvaW5nIHRoZSBhZGRpdGlvbiBvZiBhIG5ldwo+IHN0b3JhZ2UgY29u ZmlnIGVudHJ5LgoKUmVnYXJkaW5nIHlvdXIgdGhyZWUgcmVzcG9uc2VzIGFib3ZlOiBUaGUgY29t bWVudHMgaGVyZSB3ZXJlIHByZXNlcnZlZApmcm9tIGA6OlBsdWdpbmAgZm9yIGNvbnRleHQncyBz YWtlLiBCdXQgdGJoLCBvbiBzZWNvbmQgdGhvdWdodCwgdGhleSBjYW4KcHJvYmFibHkganVzdCBi ZSByZW1vdmVkLCBhcyB0aGV5J2xsIGJlIHJlcGxhY2VkIGJ5IFBPRCBhbnl3YXlzLgoKPgo+ID4g KyMgZGllIHRvIGFib3J0IGRlbGV0aW9uIGlmIHRoZXJlIGFyZSAodmVyeSBncmF2ZSkgcHJvYmxl bXMKPiA+ICsjIE5PVEU6IHJ1bnMgaW4gYSBzdG9yYWdlIGNvbmZpZyAqbG9ja2VkKiBjb250ZXh0 Cj4gPiArc3ViIG9uX2RlbGV0ZV9ob29rIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHN0b3JlaWQs ICRzY2ZnKSA9IEBfOwo+ID4gKyAgICByZXR1cm4gdW5kZWY7Cj4gPiArfQo+ID4gKwo+ID4gKz1o ZWFkMiBJTUFHRSBPUEVSQVRJT05TCj4gPiArCj4KPiBzaG91bGQgdGhpcyBkZXNjcmliZSB3aGF0 IElNQUdFUyBhcmUgaW4gdGhlIGNvbnRleHQgb2YgUFZFPyBlbHNlIGFzIGEKPiBuZXdjb21lciB0 aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIElNQUdFIGhlcmUgYW5kIFZPTFVNRSBiZWxvdyBtaWdodCBu b3QKPiBiZSBjbGVhci4uCgpZZWFoLCB0aGF0J3MgYSBnb29kIGlkZWEuIE1heGltaWxpYW5vIGFu ZCBJIHdlcmUgYWxzbyB0aGlua2luZyBhYm91dAptYXliZSBhZGRpbmcgYSBHTE9TU0FSWSBzZWN0 aW9uIGF0IHRoZSBib3R0b20gb2YgdGhlIGZpbGUgd2hlcmUgY2VydGFpbgp0ZXJtcyBjb3VsZCBi ZSBleHBsYWluZWQgLyBkZWZpbmVkIGluIG1vcmUgZGV0YWlsIGluIGdlbmVyYWwuCldoYXQgZG8g eW91IHRoaW5rPwoKQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgYWxzbyBoYXZlIHRoZSB0b3AtbGV2 ZWwgZGVzY3JpcHRpb24gZGVmaW5lIHRoZQptb3N0IGJhc2ljIG9mIHRlcm1zLCBidXQgSSBkb24n dCB3YW50IHRvIGxvYWQgdGhlIGRvY3MgaGVyZSB3aXRoIHRvbwptdWNoIGluZm9ybWF0aW9uIHVw IGZyb250LgoKPgo+ID4gKz1jdXQKPiA+ICsKPiA+ICtzdWIgbGlzdF9pbWFnZXMgewo+ID4gKyAg ICBteSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNjZmcsICR2bWlkLCAkdm9sbGlzdCwgJGNhY2hlKSA9 IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ICt9 Cj4gPiArCj4gPiArc3ViIGNyZWF0ZV9iYXNlIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHN0b3Jl aWQsICRzY2ZnLCAkdm9sbmFtZSkgPSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBp biBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBjbG9uZV9pbWFnZSB7Cj4gPiAr ICAgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICR2bWlkLCAkc25hcCkg PSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAr fQo+ID4gKwo+ID4gK3N1YiBhbGxvY19pbWFnZSB7Cj4gPiArICAgIG15ICgkY2xhc3MsICRzdG9y ZWlkLCAkc2NmZywgJHZtaWQsICRmbXQsICRuYW1lLCAkc2l6ZSkgPSBAXzsKPiA+ICsgICAgY3Jv YWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBm cmVlX2ltYWdlIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2ZnLCAkdm9sbmFt ZSwgJGlzQmFzZSwgJGZvcm1hdCkgPSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBp biBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ID4gKwo+ID4gKz1oZWFkMiBWT0xVTUUgT1BFUkFUSU9O Uwo+Cj4gc2VlIGFib3ZlCj4KPiA+ICsKPiA+ICs9Y3V0Cj4gPiArCj4gPiArc3ViIGxpc3Rfdm9s dW1lcyB7Cj4gPiArICAgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZtaWQsICRjb250 ZW50X3R5cGVzKSA9IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFz c1xuIjsKPiA+ICt9Cj4gPiArCj4gPiArIyBSZXR1cm5zIHVuZGVmIGlmIHRoZSBhdHRyaWJ1dGUg aXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlIHZvbHVtZS4KPiA+ICsjIFNob3VsZCBkaWUgaWYgdGhl cmUgaXMgYW4gZXJyb3IgZmV0Y2hpbmcgdGhlIGF0dHJpYnV0ZS4KPiA+ICsjIFBvc3NpYmxlIGF0 dHJpYnV0ZXM6Cj4gPiArIyBub3RlcyAgICAgLSB1c2VyLXByb3ZpZGVkIGNvbW1lbnRzL25vdGVz Lgo+ID4gKyMgcHJvdGVjdGVkIC0gbm90IHRvIGJlIHJlbW92ZWQgYnkgZnJlZV9pbWFnZSwgYW5k IGZvciBiYWNrdXBzLCBpZ25vcmVkIHdoZW4gcHJ1bmluZy4KPiA+ICtzdWIgZ2V0X3ZvbHVtZV9h dHRyaWJ1dGUgewo+ID4gKyAgICBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1l LCAkYXR0cmlidXRlKSA9IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1j bGFzc1xuIjsKPiA+ICt9Cj4gPiArCj4gPiArIyBEaWVzIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90 IHN1cHBvcnRlZCBmb3IgdGhlIHZvbHVtZS4KPiA+ICtzdWIgdXBkYXRlX3ZvbHVtZV9hdHRyaWJ1 dGUgewo+ID4gKyAgICBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lLCAkYXR0 cmlidXRlLCAkdmFsdWUpID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3Vi LWNsYXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIgdm9sdW1lX3NpemVfaW5mbyB7Cj4gPiAr ICAgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICR0aW1lb3V0KSA9IEBf Owo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ICt9Cj4g PiArCj4gPiArc3ViIHZvbHVtZV9yZXNpemUgewo+ID4gKyAgICBteSAoJGNsYXNzLCAkc2NmZywg JHN0b3JlaWQsICR2b2xuYW1lLCAkc2l6ZSwgJHJ1bm5pbmcpID0gQF87Cj4gPiArICAgIGNyb2Fr ICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIgdm9s dW1lX3NuYXBzaG90IHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9s bmFtZSwgJHNuYXApID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNs YXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICsjIFJldHVybnMgYSBoYXNoIHdpdGggdGhlIHNuYXBz aG90IG5hbWVzIGFzIGtleXMgYW5kIHRoZSBmb2xsb3dpbmcgZGF0YToKPiA+ICsjIGlkICAgICAg ICAtIFVuaXF1ZSBpZCB0byBkaXN0aW5ndWlzaCBkaWZmZXJlbnQgc25hcHNob3RzIGV2ZW4gaWYg dGhlIGhhdmUgdGhlIHNhbWUgbmFtZS4KPiA+ICsjIHRpbWVzdGFtcCAtIENyZWF0aW9uIHRpbWUg b2YgdGhlIHNuYXBzaG90IChzZWNvbmRzIHNpbmNlIGVwb2NoKS4KPiA+ICsjIFJldHVybnMgYW4g ZW1wdHkgaGFzaCBpZiB0aGUgdm9sdW1lIGRvZXMgbm90IGV4aXN0Lgo+ID4gK3N1YiB2b2x1bWVf c25hcHNob3RfaW5mbyB7Cj4gPiArICAgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZv bG5hbWUpID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4i Owo+ID4gK30KPiA+ICsKPiA+ICsjIEFzc2VydHMgdGhhdCBhIHJvbGxiYWNrIHRvICRzbmFwIG9u ICR2b2xuYW1lIGlzIHBvc3NpYmxlLgo+ID4gKyMgSWYgY2VydGFpbiBzbmFwc2hvdHMgYXJlIHBy ZXZlbnRpbmcgdGhlIHJvbGxiYWNrIGFuZCAkYmxvY2tlcnMgaXMgYW4gYXJyYXkKPiA+ICsjIHJl ZmVyZW5jZSwgdGhlIHNuYXBzaG90IG5hbWVzIGNhbiBiZSBwdXNoZWQgb250byAkYmxvY2tlcnMg cHJpb3IgdG8gZHlpbmcuCj4gPiArc3ViIHZvbHVtZV9yb2xsYmFja19pc19wb3NzaWJsZSB7Cj4g PiArICAgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwLCAkYmxv Y2tlcnMpID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4i Owo+ID4gK30KPiA+ICsKPiA+ICtzdWIgdm9sdW1lX3NuYXBzaG90X3JvbGxiYWNrIHsKPiA+ICsg ICAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXApID0gQF87Cj4g PiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4gK30KPiA+ICsK PiA+ICtzdWIgdm9sdW1lX3NuYXBzaG90X2RlbGV0ZSB7Cj4gPiArICAgIG15ICgkY2xhc3MsICRz Y2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwLCAkcnVubmluZykgPSBAXzsKPiA+ICsgICAg Y3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ID4gKwo+ID4gK3N1 YiB2b2x1bWVfc25hcHNob3RfbmVlZHNfZnNmcmVlemUgewo+ID4gKyAgICBjcm9hayAiaW1wbGVt ZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ICt9Cj4gPiArCj4gPiArc3ViIHN0b3JhZ2VfY2Fu X3JlcGxpY2F0ZSB7Cj4gPiArICAgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJGZvcm1h dCkgPSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4g PiArfQo+ID4gKwo+ID4gK3N1YiB2b2x1bWVfaGFzX2ZlYXR1cmUgewo+ID4gKyAgICBteSAoJGNs YXNzLCAkc2NmZywgJGZlYXR1cmUsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXBuYW1lLCAkcnVu bmluZywgJG9wdHMpID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNs YXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIgbWFwX3ZvbHVtZSB7Cj4gPiArICAgIG15ICgk Y2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUsICRzbmFwbmFtZSkgPSBAXzsKPiA+ICsg ICAgY3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ID4gKwo+ID4g K3N1YiB1bm1hcF92b2x1bWUgewo+ID4gKyAgICBteSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNjZmcs ICR2b2xuYW1lLCAkc25hcG5hbWUpID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUg aW4gc3ViLWNsYXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIgYWN0aXZhdGVfdm9sdW1lIHsK PiA+ICsgICAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2ZnLCAkdm9sbmFtZSwgJHNuYXBuYW1l LCAkY2FjaGUpID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQgbWUgaW4gc3ViLWNsYXNz XG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIgZGVhY3RpdmF0ZV92b2x1bWUgewo+ID4gKyAgICBt eSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNjZmcsICR2b2xuYW1lLCAkc25hcG5hbWUsICRjYWNoZSkg PSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVudCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiAr fQo+ID4gKwo+ID4gK3N1YiByZW5hbWVfdm9sdW1lIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHNj ZmcsICRzdG9yZWlkLCAkc291cmNlX3ZvbG5hbWUsICR0YXJnZXRfdm1pZCwgJHRhcmdldF92b2xu YW1lKSA9IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsK PiA+ICt9Cj4gPiArCj4gPiArc3ViIHBydW5lX2JhY2t1cHMgewo+ID4gKyAgICBteSAoJGNsYXNz LCAkc2NmZywgJHN0b3JlaWQsICRrZWVwLCAkdm1pZCwgJHR5cGUsICRkcnlydW4sICRsb2dmdW5j KSA9IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ ICt9Cj4gPiArCj4gPiArPWhlYWQyIElNUE9SVFMgQU5EIEVYUE9SVFMKPiA+ICsKPiA+ICs9Y3V0 Cj4gPiArCj4gPiArIyBJbXBvcnQvRXhwb3J0IGludGVyZmFjZToKPiA+ICsjICAgQW55IHBhdGgg YmFzZWQgc3RvcmFnZSBpcyBhc3N1bWVkIHRvIHN1cHBvcnQgJ3JhdycgYW5kICd0YXInIHN0cmVh bXMsIHNvCj4gPiArIyAgIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyB3aWxsIHJldHVybiB0 aGlzIGlmICRzY2ZnLT57cGF0aH0gaXMgc2V0LAo+ID4gKyMgICBtaW1pY2tpbmcgdGhlIG9sZCBQ VkU6OlN0b3JhZ2U6OnN0b3JhZ2VfbWlncmF0ZSgpIGZ1bmN0aW9uLgo+ID4gKyMKPiA+ICsjIFBs dWdpbnMgbWF5IGZhbGwgYmFjayB0byBQVkU6OlN0b3JhZ2U6OlBsdWdpbjo6dm9sdW1lX3tleHBv cnQsaW1wb3J0fS4uLgo+ID4gKyMgICBmdW5jdGlvbnMgaW4gY2FzZSB0aGUgZm9ybWF0IGRvZXNu J3QgbWF0Y2ggdGhlaXIgc3BlY2lhbGl6ZWQKPiA+ICsjICAgaW1wbGVtZW50YXRpb25zIHRvIHJl dXNlIHRoZSByYXcvdGFyIGNvZGUuCj4gPiArIwo+ID4gKyMgRm9ybWF0IHNwZWNpZmljYXRpb246 Cj4gPiArIyAgIFRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgYWxsIHByZWZpeGVkIHdpdGggaW1h Z2UgaW5mb3JtYXRpb24gaW4gdGhlIGZvcm0KPiA+ICsjICAgb2YgYSA2NCBiaXQgbGl0dGxlIGVu ZGlhbiB1bnNpZ25lZCBpbnRlZ2VyIChwYWNrKCdRPCcpKSBpbiBvcmRlciB0byBiZSBhYmxlCj4g PiArIyAgIHRvIHByZWFsbG9jYXRlIHRoZSBpbWFnZSBvbiBzdG9yYWdlcyB3aGljaCByZXF1aXJl IGl0Lgo+ID4gKyMKPiA+ICsjICAgcmF3K3NpemU6IChpbWFnZSBmaWxlcyBvbmx5KQo+ID4gKyMg ICAgIEEgcmF3IGJpbmFyeSBkYXRhIHN0cmVhbSBzdWNoIGFzIHByb2R1Y2VkIHZpYSBgZGQgaWY9 VGhlSW1hZ2VGaWxlYC4KPiA+ICsjICAgcWNvdzIrc2l6ZSwgdm1kazogKGltYWdlIGZpbGVzIG9u bHkpCj4gPiArIyAgICAgQSByYXcgcWNvdzIvdm1kay8uLi4gZmlsZSBzdWNoIGFzIHByb2R1Y2Vk IHZpYSBgZGQgaWY9c29tZS5xY293MmAgZm9yCj4gPiArIyAgICAgZmlsZXMgd2hpY2ggYXJlIGFs cmVhZHkgaW4gcWNvdzIgZm9ybWF0LCBvciB2aWEgYHFlbXUtaW1nIGNvbnZlcnRgLgo+ID4gKyMg ICAgIE5vdGUgdGhhdCB0aGVzZSBmb3JtYXRzIGFyZSBvbmx5IHZhbGlkIHdpdGggJHdpdGhfc25h cHNob3RzIGJlaW5nIHRydWUuCj4gPiArIyAgIHRhcitzaXplOiAoc3Vidm9sdW1lcyBvbmx5KQo+ ID4gKyMgICAgIEEgR05VIHRhciBzdHJlYW0gY29udGFpbmluZyBqdXN0IHRoZSBpbm5lciBjb250 ZW50cyBvZiB0aGUgc3Vidm9sdW1lLgo+ID4gKyMgICAgIFRoaXMgZG9lcyBub3QgZGlzdGluZ3Vp c2ggYmV0d2VlbiB0aGUgY29udGVudHMgb2YgYSBwcml2aWxlZ2VkIG9yCj4gPiArIyAgICAgdW5w cml2aWxlZ2VkIGNvbnRhaW5lci4gSW4gb3RoZXIgd29yZHMsIHRoaXMgaXMgZnJvbSB0aGUgcm9v dCB1c2VyCj4gPiArIyAgICAgbmFtZXNwYWNlJ3MgcG9pbnQgb2YgdmlldyB3aXRoIG5vIHVpZC1t YXBwaW5nIGluIGVmZmVjdC4KPiA+ICsjICAgICBBcyBwcm9kdWNlZCB2aWEgYHRhciAtQyB2bS0x MDAtZGlzay0xLnN1YnZvbCAtY3BmIFRoZU91dHB1dEZpbGUuZGF0IC5gCj4gPiArCj4gPiArIyBF eHBvcnQgYSB2b2x1bWUgaW50byBhIGZpbGUgaGFuZGxlIGFzIGEgc3RyZWFtIG9mIGRlc2lyZWQg Zm9ybWF0Lgo+ID4gK3N1YiB2b2x1bWVfZXhwb3J0IHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHNj ZmcsICRzdG9yZWlkLCAkZmgsICR2b2xuYW1lLCAkZm9ybWF0LCAkc25hcHNob3QsICRiYXNlX3Nu YXBzaG90LCAkd2l0aF9zbmFwc2hvdHMpID0gQF87Cj4gPiArICAgIGNyb2FrICJpbXBsZW1lbnQg bWUgaW4gc3ViLWNsYXNzXG4iOwo+ID4gK30KPiA+ICsKPiA+ICtzdWIgdm9sdW1lX2V4cG9ydF9m b3JtYXRzIHsKPiA+ICsgICAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwg JHNuYXBzaG90LCAkYmFzZV9zbmFwc2hvdCwgJHdpdGhfc25hcHNob3RzKSA9IEBfOwo+ID4gKyAg ICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xuIjsKPiA+ICt9Cj4gPiArCj4gPiAr IyBJbXBvcnQgZGF0YSBmcm9tIGEgc3RyZWFtLCBjcmVhdGluZyBhIG5ldyBvciByZXBsYWNpbmcg b3IgYWRkaW5nIHRvIGFuIGV4aXN0aW5nIHZvbHVtZS4KPiA+ICtzdWIgdm9sdW1lX2ltcG9ydCB7 Cj4gPiArICAgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJGZoLCAkdm9sbmFtZSwgJGZv cm1hdCwgJHNuYXBzaG90LCAkYmFzZV9zbmFwc2hvdCwgJHdpdGhfc25hcHNob3RzLCAkYWxsb3df cmVuYW1lKSA9IEBfOwo+ID4gKyAgICBjcm9hayAiaW1wbGVtZW50IG1lIGluIHN1Yi1jbGFzc1xu IjsKPiA+ICt9Cj4gPiArCj4gPiArc3ViIHZvbHVtZV9pbXBvcnRfZm9ybWF0cyB7Cj4gPiArICAg IG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwc2hvdCwgJGJhc2Vf c25hcHNob3QsICR3aXRoX3NuYXBzaG90cykgPSBAXzsKPiA+ICsgICAgY3JvYWsgImltcGxlbWVu dCBtZSBpbiBzdWItY2xhc3NcbiI7Cj4gPiArfQo+ID4gKwo+ID4gKzE7Cj4gPiAtLSAKPiA+IDIu MzkuNQo+ID4gCj4gPiAKPiA+IAo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiA+IHB2ZS1kZXZlbCBtYWlsaW5nIGxpc3QKPiA+IHB2ZS1kZXZlbEBs aXN0cy5wcm94bW94LmNvbQo+ID4gaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21h aWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCj4gPiAKPiA+IAo+ID4gCj4KPgo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gcHZlLWRldmVsIG1haWxpbmcg bGlzdAo+IHB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQo+IGh0dHBzOi8vbGlzdHMucHJveG1v eC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAoKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUtZGV2ZWwgbWFpbGluZyBsaXN0 CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2Nn aS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK