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 D0E3B1FF38E for ; Tue, 11 Jun 2024 12:46:07 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id ED063352F8; Tue, 11 Jun 2024 12:46:43 +0200 (CEST) Date: Tue, 11 Jun 2024 12:46:02 +0200 From: Fabian =?iso-8859-1?q?Gr=FCnbichler?= To: Proxmox VE development discussion References: <20240604092850.126083-1-m.carrara@proxmox.com> <20240604092850.126083-2-m.carrara@proxmox.com> In-Reply-To: <20240604092850.126083-2-m.carrara@proxmox.com> MIME-Version: 1.0 User-Agent: astroid/0.16.0 (https://github.com/astroidmail/astroid) Message-Id: <1718097397.xns8i448v3.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.057 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 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 - Subject: Re: [pve-devel] [PATCH v1 pve-common 1/3] section config: document package and its methods with POD 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" T24gSnVuZSA0LCAyMDI0IDExOjI4IGFtLCBNYXggQ2FycmFyYSB3cm90ZToKPiBBcGFydCBmcm9t IHRoZSBvYnZpb3VzIGJlbmVmaXRzIHRoYXQgZG9jdW1lbnRhdGlvbiBoYXMsIHRoaXMgYWxzbwo+ IGFsbG93cyBMU1BzIHRvIHByb3ZpZGUgZG9jc3RyaW5ncyBlLmcuIHZpYSAndGV4dERvY3VtZW50 L2hvdmVyJyBbMF0uCj4gCj4gVGVzdGVkIHdpdGggUGVybCBOYXZpZ2F0b3IgWzFdLgo+IAo+IFsw XTogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9z cGVjaWZpY2F0aW9ucy9sc3AvMy4xNy9zcGVjaWZpY2F0aW9uLyN0ZXh0RG9jdW1lbnRfaG92ZXIK PiBbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ic2Nhbi9QZXJsTmF2aWdhdG9yCj4gCj4gU2lnbmVk LW9mZi1ieTogTWF4IENhcnJhcmEgPG0uY2FycmFyYUBwcm94bW94LmNvbT4KPiAtLS0KPiAgc3Jj L1BWRS9TZWN0aW9uQ29uZmlnLnBtIHwgNzM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgNjcyIGluc2VydGlvbnMoKyksIDY1IGRlbGV0 aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9zcmMvUFZFL1NlY3Rpb25Db25maWcucG0gYi9zcmMv UFZFL1NlY3Rpb25Db25maWcucG0KPiBpbmRleCBhMThlOWQ4Li45OWVlMzQ4IDEwMDY0NAo+IC0t LSBhL3NyYy9QVkUvU2VjdGlvbkNvbmZpZy5wbQo+ICsrKyBiL3NyYy9QVkUvU2VjdGlvbkNvbmZp Zy5wbQo+IEBAIC0xMCw2NSArMTAsMTAyIEBAIHVzZSBQVkU6OkV4Y2VwdGlvbiBxdyhyYWlzZV9w YXJhbV9leGMpOwo+ICB1c2UgUFZFOjpKU09OU2NoZW1hIHF3KGdldF9zdGFuZGFyZF9vcHRpb24p Owo+ICB1c2UgUFZFOjpUb29sczsKPiAgCj4gLSMgVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGEgd2F5 IHRvIGhhdmUgbXVsdGlwbGUgKG9mdGVuIHNpbWlsYXIpIHR5cGVzIG9mIGVudHJpZXMKPiAtIyBp biB0aGUgc2FtZSBjb25maWcgZmlsZSwgZWFjaCBpbiBpdHMgb3duIHNlY3Rpb24sIHRodXMgIlNl Y3Rpb24gQ29uZmlnIi4KPiAtIwo+IC0jIFRoZSBpbnRlbmRlZCBzdHJ1Y3R1cmUgaXMgdG8gaGF2 ZSBhIHNpbmdsZSAnYmFzZScgcGx1Z2luIHRoYXQgaW5oZXJpdHMgZnJvbQo+IC0jIHRoaXMgY2xh c3MgYW5kIHByb3ZpZGVzIG1lYW5pbmdmdWwgZGVmYXVsdHMgaW4gaXRzICckZGVmYXVsdERhdGEn LCBlLmcuIGEKPiAtIyBkZWZhdWx0IGxpc3Qgb2YgdGhlIGNvcmUgcHJvcGVydGllcyBpbiBpdHMg cHJvcGVydHlMaXN0IChtb3N0IG9mdGVuIG9ubHkgJ2lkJwo+IC0jIGFuZCAndHlwZScpCj4gLSMK PiAtIyBFYWNoICdyZWFsJyBwbHVnaW4gdGhlbiBoYXMgaXQncyBvd24gcGFja2FnZSB0aGF0IHNo b3VsZCBpbmhlcml0IGZyb20gdGhlCj4gLSMgJ2Jhc2UnIHBsdWdpbiBhbmQgcmV0dXJucyBpdCdz IHNwZWNpZmljIHByb3BlcnRpZXMgaW4gdGhlICdwcm9wZXJ0aWVzJyBtZXRob2QsCj4gLSMgaXRz IHR5cGUgaW4gdGhlICd0eXBlJyBtZXRob2QgYW5kIGFsbCB0aGUga25vd24gb3B0aW9ucywgZnJv bSBib3RoIHBhcmVudCBhbmQKPiAtIyBpdHNlbGYsIGluIHRoZSAnb3B0aW9ucycgbWV0aG9kLgo+ IC0jIFRoZSBvcHRpb25zIG1ldGhvZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGRlZmluZSBpZiBhIHBy b3BlcnR5IGlzICdvcHRpb25hbCcgb3IKPiAtIyAnZml4ZWQnIChvbmx5IHNldHRhYmxlIG9uIGNv bmZpZyBlbnRpdHktY3JlYXRpb24pLCBmb3IgZXhhbXBsZToKPiAtIwo+IC0jIGBgYGAKPiAtIyBz dWIgb3B0aW9ucyB7Cj4gLSMgICAgIHJldHVybiB7Cj4gLSMgICAgICAgICAnc29tZS1vcHRpb25h bC1wcm9wZXJ0eScgPT4geyBvcHRpb25hbCA9PiAxIH0sCj4gLSMgICAgICAgICAnYS1maXhlZC1w cm9wZXJ0eScgPT4geyBmaXhlZCA9PiAxIH0sCj4gLSMgICAgICAgICAnYS1yZXF1aXJlZC1idXQt bm90LWZpeGVkLXByb3BlcnR5JyA9PiB7fSwKPiAtIyAgICAgfTsKPiAtIyB9Cj4gLSMgYGBgCj4g LSMKPiAtIyAnZml4ZWQnIG9wdGlvbnMgY2FuIGJlIHNldCBvbiBjcmVhdGUsIGJ1dCBub3QgY2hh bmdlZCBhZnRlcndhcmRzLgo+IC0jCj4gLSMgVG8gYWN0dWFsbHkgdXNlIGl0LCB5b3UgaGF2ZSB0 byBmaXJzdCByZWdpc3RlciBhbGwgdGhlIHBsdWdpbnMgYW5kIHRoZW4gaW5pdAo+IC0jIHRoZSAn YmFzZScgcGx1Z2luLCBsaWtlIHNvOgo+IC0jCj4gLSMgYGBgCj4gLSMgdXNlIFBWRTo6RHVtbXk6 OlBsdWdpbjE7Cj4gLSMgdXNlIFBWRTo6RHVtbXk6OlBsdWdpbjI7Cj4gLSMgdXNlIFBWRTo6RHVt bXk6OkJhc2VQbHVnaW47Cj4gLSMKPiAtIyBQVkU6OkR1bW15OjpQbHVnaW4xLT5yZWdpc3Rlcigp Owo+IC0jIFBWRTo6RHVtbXk6OlBsdWdpbjItPnJlZ2lzdGVyKCk7Cj4gLSMgUFZFOjpEdW1teTo6 QmFzZVBsdWdpbi0+aW5pdCgpOwo+IC0jIGBgYAo+IC0jCj4gLSMgVGhlcmUgYXJlIHR3byBtb2Rl cyBmb3IgaG93IHByb3BlcnRpZXMgYXJlIGV4cG9zZWQsIHRoZSBkZWZhdWx0ICd1bmlmaWVkJwo+ IC0jIG1vZGUgYW5kIHRoZSAnaXNvbGF0ZWQnIG1vZGUuCj4gLSMgSW4gdGhlIGRlZmF1bHQgdW5p ZmllZCBtb2RlLCB0aGVyZSBpcyBvbmx5IGEgZ2xvYmFsIGxpc3Qgb2YgcHJvcGVydGllcwo+IC0j IHdoaWNoIHRoZSBwbHVnaW5zIGNhbiB1c2UsIHNvIHlvdSBjYW5ub3QgZGVmaW5lIHRoZSBzYW1l IHByb3BlcnR5IG5hbWUgdHdpY2UKPiAtIyBpbiBkaWZmZXJlbnQgcGx1Z2lucy4gVGhlIHJlYXNv biBmb3IgdGhpcyBpcyB0byBmb3JjZSB0aGUgdXNlIG9mIGlkZW50aWNhbAo+IC0jIHByb3BlcnRp ZXMgZm9yIG11bHRpcGxlIHBsdWdpbnMuCj4gLSMKPiAtIyBUaGUgc2Vjb25kIHdheSBpcyB0byB1 c2UgdGhlICdpc29sYXRlZCcgbW9kZSwgd2hpY2ggY2FuIGJlIGFjaGlldmVkIGJ5Cj4gLSMgY2Fs bGluZyBpbml0IHdpdGggYDFgIGFzIGl0cyBwYXJhbWV0ZXIgbGlrZSB0aGlzOgo+IC0jCj4gLSMg YGBgCj4gLSMgUFZFOjpEdW1teTo6QmFzZVBsdWdpbi0+aW5pdChwcm9wZXJ0eV9pc29sYXRpb24g PT4gMSk7Cj4gLSMgYGBgCj4gLSMKPiAtIyBXaXRoIHRoaXMsIGVhY2ggcGx1Z2luIGdldCdzIHRo ZWlyIG93biBpc29sYXRlZCBsaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggaXQKPiAtIyBjYW4gdXNl LiBOb3RlIHRoYXQgaW4gdGhpcyBtb2RlLCB5b3Ugb25seSBoYXZlIHRvIHNwZWNpZnkgdGhlIHBy b3BlcnR5IGluIHRoZQo+IC0jIG9wdGlvbnMgbWV0aG9kIHdoZW4gaXQgaXMgZWl0aGVyICdmaXhl ZCcgb3IgY29tZXMgZnJvbSB0aGUgZ2xvYmFsIGxpc3Qgb2YKPiAtIyBwcm9wZXJ0aWVzLiBBbGwg bG9jYWxseSBkZWZpbmVkIG9uZXMgZ2V0IGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIHNjaGVt YQo+IC0jIGZvciB0aGF0IHBsdWdpbi4KPiArPXBvZAo+ICsKPiArPWhlYWQxIE5BTUUKPiArCj4g K1NlY3Rpb25Db25maWcKPiArCj4gKz1oZWFkMSBERVNDUklQVElPTgo+ICsKPiArVGhpcyBwYWNr YWdlIHByb3ZpZGVzIGEgd2F5IHRvIGhhdmUgbXVsdGlwbGUgKG9mdGVuIHNpbWlsYXIpIHR5cGVz IG9mIGVudHJpZXMKPiAraW4gdGhlIHNhbWUgY29uZmlnIGZpbGUsIGVhY2ggaW4gaXRzIG93biBz ZWN0aW9uLCB0aHVzIEk8U2VjdGlvbiBDb25maWc+Lgo+ICsKPiArVW5kZXIgdGhlIGhvb2QsIHRo aXMgcGFja2FnZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYW5kIG1hbmFnZXMgYSBtYXRjaGluZwo+ ICtJPEpTT05TY2hlbWE+IGZvciBvbmUncyBwbHVnaW4gYXJjaGl0ZWN0dXJlIHRoYXQgaXMgdXNl ZCB0byByZXByZXNlbnQgZGF0YQo+ICt0aGF0IGlzIHJlYWQgZnJvbSBhbmQgd3JpdHRlbiB0byB0 aGUgY29uZmlnIGZpbGUuCgp0aGlzIHNlbnRlbmNlIGlzIHRvbyBsb25nIGFuZCBoYXJkIHRvIHBh cnNlLgoKRm9yIGVhY2ggU2VjdGlvbkNvbmZpZy1iYXNlZCBjb25maWcgZmlsZSwgYSBJPEpTT05T Y2hlbWE+IGlzIGRlcml2ZWQKYXV0b21hdGljYWxseS4gVGhpcyBzY2hlbWEgY2FuIGJlIHVzZWQg dG8gaW1wbGVtZW50IENSVUQgb3BlcmF0aW9ucyBmb3IKdGhlIGNvbmZpZyBkYXRhLgoKb3Igc29t ZXRoaW5nIGxpa2UgdGhhdD8KCj4gKwo+ICtXaGVyZSB0aGlzIGNvbmZpZyBmaWxlIGlzIGxvY2F0 ZWQsIGFzIHdlbGwgYXMgaXRzIHBlcm1pc3Npb25zIGFuZCBvdGhlciByZWxhdGVkCj4gK3RoaW5n cywgaXMgdXAgdG8gdGhlIHBsdWdpbiBhdXRob3IgYW5kIGlzIG5vdCBoYW5kbGVkIGJ5IEM8UFZF OjpTZWN0aW9uQ29uZmlnPgo+ICthdCBhbGwuCgppdCdzIG5vdCByZWFsbHkgdXAgdG8gdGhlIHBs dWdpbiBhdXRob3I/IGl0J3MgdXAgdG8gdGhlIGF1dGhvciBvZiB0aGUKY29kZSB1c2luZyBTZWN0 aW9uQ29uZmlnLCB3aGljaCBtaWdodCBiZSBzb21lb25lIGVsc2UgZW50aXJlbHkuIHRoZQpwbHVn aW4gYXV0aG9yIG1pZ2h0IGJlIHNvbWUgdGhpcmQgcGFydHkuLgoKPiArCj4gKz1oZWFkMSBVU0FH RQo+ICsKPiArVGhlIGludGVuZGVkIHN0cnVjdHVyZSBpcyB0byBoYXZlIGEgc2luZ2xlIEk8YmFz ZSBwbHVnaW4+IHRoYXQgaW5oZXJpdHMgZnJvbQo+ICt0aGlzIGNsYXNzIGFuZCBwcm92aWRlcyBt ZWFuaW5nZnVsIGRlZmF1bHRzIGluIGl0cyBDPCRkZWZhdWx0RGF0YT4sIHN1Y2ggYXMgYQoKcy9p bmhlcml0cyBmcm9tIHRoaXMgY2xhc3MvdXNlcyB0aGUgU2VjdGlvbkNvbmZpZyBtb2R1bGUgYXMg YmFzZSBtb2R1bGUKCmluIFBlcmwsIGEgY2xhc3MgaXMgYSBwZXJsIHN0cnVjdHVyZSB0aGF0IGhh cyBiZWVuIGJsZXNzZWQuIHdoaWxlIHRoZQpjb2RlIGhlcmUgdXNlcyAnJGNsYXNzJywgaXQncyBu b3QgcmVhbGx5IG9uZS4KCj4gK2RlZmF1bHQgbGlzdCBvZiBjb3JlIEM8UFZFOjpKU09OU2NoZW1h PiBJPHByb3BlcnRpZXM+LiBUaGUgSTxiYXNlIHBsdWdpbj4gaXMKPiArdGh1cyB2ZXJ5IHNpbWls YXIgdG8gYW4gSTxhYnN0cmFjdCBjbGFzcz4uCj4gKwo+ICtFYWNoIEk8Y2hpbGQgcGx1Z2luPiBp cyB0aGVuIGRlZmluZWQgaW4gaXRzIG93biBwYWNrYWdlIHRoYXQgc2hvdWxkIGluaGVyaXQKPiAr ZnJvbSB0aGUgSTxiYXNlIHBsdWdpbj4gYW5kIGRlZmluZXMgd2hpY2ggSTxwcm9wZXJ0aWVzPiBp dCBpdHNlbGYgcHJvdmlkZXMgYW5kCj4gK3VzZXMsIGFzIHdlbGwgYXMgd2hpY2ggSTxwcm9wZXJ0 aWVzPiBpdCB1c2VzIGZyb20gdGhlIEk8YmFzZSBwbHVnaW4+Lgo+ICsKPiArVGhlIG1ldGhvZHMg dGhhdCBuZWVkIHRvIGJlIGltcGxlbWVudGVkIGFyZSBhbm5vdGF0ZWQgaW4gdGhlIEw8L01FVEhP RFM+IHNlY3Rpb24KPiArYmVsb3cuCj4gKwo+ICsgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAKPiAr ICAgICAgICAgICAgICDilIIgIFNlY3Rpb25Db25maWcgIOKUgiAgICAgICAgICAKPiArICAgICAg ICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDi lIDilIDilJggICAgICAgICAgCj4gKyAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAg ICAgICAgICAgIAo+ICsgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAg ICAKPiArICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgCj4gKyAg ICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSQICAgICAgICAgIAo+ICsgICAgICAgICAgICAgIOKUgiAgICBCYXNlUGx1Z2lu ICAg4pSCICAgICAgICAgIAo+ICsgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAKPiArICAgICAgICAg ICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgCj4gKyAgICAgICAgICAgICDilIzi lIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDi lJAgICAgICAgICAKPiArICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICDilIIgICAg ICAgICAKPiArICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUkCDilIzilIDilIDilIDilIDilIDilIDilIDilIDilrzilIDilIDilIDilIDi lIDilIDilIDilIDilJAKPiArICAgIOKUgkNvbmNyZXRlUGx1Z2luRm9v4pSCIOKUgkNvbmNyZXRl UGx1Z2luQmFy4pSCCj4gKyAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilJgg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSYCgpsb3RzIG9mIHRyYWlsaW5nIHdoaXRlc3BhY2UgdGhlcmUu LgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy0+IENvbmNyZXRlUGx1Z2luRm9vClNl Y3Rpb25Db25maWcgLT4gQmFzZVBsdWdpbiAtWAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcLT4gQ29uY3JldGVQbHVnaW5CYXIKCndvdWxkIHNob3cgdGhlIHNhbWUgaW5mbyBJTUhPLCBi dXQgSSBkb24ndCBjYXJlIG11Y2ggZWl0aGVyIHdheSA6LVAKCj4gKwo+ICs9aGVhZDIgUkVHSVNU RVJJTkcgUExVR0lOUwo+ICsKPiArSW4gb3JkZXIgdG8gYWN0dWFsbHkgYmUgYWJsZSB0byB1c2Ug cGx1Z2lucywgdGhleSBtdXN0IGZpcnN0IGJlIEk8cmVnaXN0ZXJlZD4KPiArYW5kIHRoZW4gSTxp bml0aWFsaXplZD4gdmlhIHRoZSAiYmFzZSIgcGx1Z2luOgo+ICsKPiArICAgIHVzZSBQVkU6OkV4 YW1wbGU6OkJhc2VQbHVnaW47Cj4gKyAgICB1c2UgUFZFOjpFeGFtcGxlOjpQbHVnaW5BOwo+ICsg ICAgdXNlIFBWRTo6RXhhbXBsZTo6UGx1Z2luQjsKPiArCj4gKyAgICBQVkU6OkV4YW1wbGU6OlBs dWdpbkEtPnJlZ2lzdGVyKCk7Cj4gKyAgICBQVkU6OkV4YW1wbGU6OlBsdWdpbkItPnJlZ2lzdGVy KCk7Cj4gKyAgICBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmluaXQoKTsKPiArCj4gKz1oZWFk MiBNT0RFUwo+ICsKPiArVGhlcmUgYXJlIHR3byBtb2RlcyBmb3IgaG93IEk8cHJvcGVydGllcz4g YXJlIGV4cG9zZWQuCj4gKwo+ICs9aGVhZDMgdW5pZmllZCBtb2RlIChkZWZhdWx0KQo+ICsKPiAr SW4gdGhpcyBtb2RlIHRoZXJlIGlzIG9ubHkgYSBnbG9iYWwgbGlzdCBvZiBJPHByb3BlcnRpZXM+ IHdoaWNoIHRoZSBjaGlsZAo+ICtwbHVnaW5zIGNhbiB1c2UuIFRoaXMgaGFzIHRoZSBjb25zZXF1 ZW5jZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGRlZmluZSB0aGUKPiArc2FtZSBwcm9wZXJ0 eSBuYW1lIG1vcmUgdGhhbiBvbmNlIGluIGRpZmZlcmVudCBwbHVnaW5zLgo+ICsKPiArVGhlIHJl YXNvbiBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgaXMgdG8gZW5zdXJlIHRoYXQgcHJvcGVydGllcyB3 aXRoIHRoZSBzYW1lCj4gK25hbWUgZG9uJ3QgYmVoYXZlIGluIGRpZmZlcmVudCB3YXlzLCBvciBp biBvdGhlciB3b3JkcywgdG8gZW5mb3JjZSB0aGUgdXNlIG9mCj4gK2lkZW50aWNhbCBwcm9wZXJ0 aWVzIGZvciBtdWx0aXBsZSBwbHVnaW5zLgo+ICsKPiArPWhlYWQzIGlzb2xhdGVkIG1vZGUKPiAr Cj4gK1RoaXMgbW9kZSBjYW4gYmUgdXNlZCBieSBjYWxsaW5nIEM8aW5pdD4gd2l0aCBhbiBhZGRp dGlvbmFsIHBhcmFtZXRlcjoKPiArCj4gKyAgICBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmlu aXQocHJvcGVydHlfaXNvbGF0aW9uID0+IDEpOwo+ICsKPiArV2l0aCB0aGlzIG1vZGUgZWFjaCBJ PGNoaWxkIHBsdWdpbj4gZ2V0cyBpdHMgb3duIGlzb2xhdGVkIGxpc3Qgb2YgSTxwcm9wZXJ0aWVz PiwKPiArb3IgaW4gb3RoZXIgd29yZHMsIGEgZnVsbHkgaXNvbGF0ZWQgc2NoZW1hIG5hbWVzcGFj ZS4gTm9ybWFsbHkgb25lIHdhbnRzIHRvIHVzZQo+ICtDPG9uZU9mPiBzY2hlbWFzIHdoZW4gZW5h YmxpbmcgaXNvbGF0aW9uLgo+ICsKPiArTm90ZSB0aGF0IGluIHRoaXMgbW9kZSBpdCdzIG9ubHkg bmVjZXNzYXJ5IHRvIHNwZWNpZnkgYSBJPHByb3BlcnR5PiBpbiB0aGUKPiArQzxvcHRpb25zPiBt ZXRob2Qgd2hlbiBpdCdzIGVpdGhlciBDPGZpeGVkPiBvciBzdGVtcyBmcm9tIHRoZSBnbG9iYWwg bGlzdCBvZgoKaW4gdGhlICpyZXR1cm4gdmFsdWUgb2YgdGhlKgoKPiArSTxwcm9wZXJ0aWVzPi4K PiArCj4gK0FsbCBsb2NhbGx5IGRlZmluZWQgSTxwcm9wZXJ0aWVzPiBvZiBhIEk8Y2hpbGQgcGx1 Z2luPiBhcmUgYXV0b21hdGljYWxseSBhZGRlZAo+ICt0byBpdHMgc2NoZW1hLgo+ICsKPiArPWhl YWQyIE1FVEhPRFMKPiArCj4gKz1jdXQKPiAgCj4gIG15ICRkZWZhdWx0RGF0YSA9IHsKPiAgICAg IG9wdGlvbnMgPT4ge30sCj4gQEAgLTc3LDExICsxMTQsODUgQEAgbXkgJGRlZmF1bHREYXRhID0g ewo+ICAgICAgcHJvcGVydHlMaXN0ID0+IHt9LAo+ICB9Owo+ICAKPiArPXBvZAo+ICsKPiArPWhl YWQzIHByaXZhdGUKPiArCj4gK0I8UkVRVUlSRUQ6PiBNdXN0IGJlIGltcGxlbWVudGVkIGluIHRo ZSBJPGJhc2UgcGx1Z2luPi4KPiArCj4gKyAgICAkZGF0YSA9IFBWRTo6RXhhbXBsZTo6UGx1Z2lu LT5wcml2YXRlKCkKPiArICAgICRkYXRhID0gJGNsYXNzLT5wcml2YXRlKCkKPiArCj4gK0dldHRl ciBmb3IgQzxTZWN0aW9uQ29uZmlnPi1yZWxhdGVkIHByaXZhdGUgZGF0YS4KPiArCj4gK01vc3Qg Y29tbW9ubHkgdGhpcyBpcyB1c2VkIHRvIHNpbXBseSByZXRyaWV2ZSB0aGUgZGVmYXVsdCBJPHBy b3BlcnR5PiBsaXN0IG9mCj4gK29uZSdzIHBsdWdpbiBhcmNoaXRlY3R1cmUsIGZvciBleGFtcGxl Ogo+ICsKPiArICAgIHVzZSBQVkU6OkpTT05TY2hlbWEgcXcoZ2V0X3N0YW5kYXJkX29wdGlvbik7 Cj4gKwo+ICsgICAgdXNlIGJhc2UgcXcoUFZFOjpTZWN0aW9uQ29uZmlnKTsKPiArCj4gKyAgICAj IFsuLi5dCj4gKwo+ICsgICAgbXkgJGRlZmF1bHREYXRhID0gewo+ICsJcHJvcGVydHlMaXN0ID0+ IHsKPiArCSAgICB0eXBlID0+IHsKPiArCQlkZXNjcmlwdGlvbiA9PiAiVHlwZSBvZiBwbHVnaW4u Igo+ICsJICAgIH0sCj4gKwkgICAgbm9kZXMgPT4gZ2V0X3N0YW5kYXJkX29wdGlvbigncHZlLW5v ZGUtbGlzdCcsIHsKPiArCQlkZXNjcmlwdGlvbiA9PiAiTGlzdCBvZiBub2RlcyBmb3Igd2hpY2gg dGhlIHBsdWdpbiBhcHBsaWVzLiIsCj4gKwkJb3B0aW9uYWwgPT4gMSwKPiArCSAgICB9KSwKPiAr CSAgICBkaXNhYmxlID0+IHsKPiArCQlkZXNjcmlwdGlvbiA9PiAiRmxhZyB0byBkaXNhYmxlIHRo ZSBwbHVnaW4uIiwKPiArCQl0eXBlID0+ICdib29sZWFuJywKPiArCQlvcHRpb25hbCA9PiAxLAo+ ICsJICAgIH0sCj4gKwkgICAgJ21heC1mb28tcmF0ZScgPT4gewo+ICsJCWRlc2NyaXB0aW9uID0+ ICJNYXhpbXVtICdmb28nIHJhdGUgb2YgdGhlIHBsdWdpbi4gVXNlICctMScgZm9yIHVubGltaXRl ZC4iLAo+ICsJCXR5cGUgPT4gJ2ludGVnZXInLAo+ICsJCW1pbmltdW0gPT4gLTEsCj4gKwkJZGVm YXVsdCA9PiA0MiwKPiArCQlvcHRpb25hbCA9PiAxLAo+ICsJICAgIH0sCj4gKwkgICAgIyBbLi4u XQo+ICsJfSwKPiArICAgIH07Cj4gKwo+ICsgICAgc3ViIHByaXZhdGUgewo+ICsJcmV0dXJuICRk ZWZhdWx0RGF0YTsKPiArICAgIH0KPiArCj4gKz1jdXQKPiArCgp0aGlzIGlzIG5vdCByZWFsbHkg ZXhwbGFpbmluZyB3aGF0IHRoaXMgc3ViIGRvZXMuLiB3aGlsZSB5ZXMsIGl0J3MKaW1wbGVtZW50 ZWQgaW4gdGhlIGJhc2UgcGx1Z2luIGFuZCByZXR1cm5zIHRoZSBkZWZhdWx0IGRhdGEgdGhlcmUs IHRoaXMKaXMgYWN0dWFsbHkgdGhlIGdldHRlciBmb3IgdGhlIGludGVybmFsIHN0YXRlIG9mIHRo ZSB3aG9sZQpTZWN0aW9uQ29uZmlnLi4KCj4gIHN1YiBwcml2YXRlIHsKPiAgICAgIGRpZSAib3Zl cndyaXRlIG1lIjsKPiAgICAgIHJldHVybiAkZGVmYXVsdERhdGE7Cj4gIH0KPiAgCj4gKz1wb2QK PiArCj4gKz1oZWFkMyByZWdpc3Rlcgo+ICsKPiArICAgIFBWRTo6RXhhbXBsZTo6UGx1Z2luLT5y ZWdpc3RlcigpCj4gKwo+ICtVc2VkIHRvIHJlZ2lzdGVyIEk8Y2hpbGQgcGx1Z2lucz4uCj4gKwo+ ICtUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBvbiBlYWNoIGNoaWxkIHBsdWdpbiBiZWZvcmUg STxpbml0aWFsaXppbmc+IHRoZSBiYXNlCj4gK3BsdWdpbi4KPiArCgphbmQgd2hhdCBkb2VzIGl0 IGRvPyA6KQoKPiArRm9yIGV4YW1wbGU6Cj4gKwo+ICsgICAgdXNlIFBWRTo6RXhhbXBsZTo6QmFz ZVBsdWdpbjsKPiArICAgIHVzZSBQVkU6OkV4YW1wbGU6OlBsdWdpbkE7Cj4gKyAgICB1c2UgUFZF OjpFeGFtcGxlOjpQbHVnaW5COwo+ICsKPiArICAgIFBWRTo6RXhhbXBsZTo6UGx1Z2luQS0+cmVn aXN0ZXIoKTsKPiArICAgIFBWRTo6RXhhbXBsZTo6UGx1Z2luQi0+cmVnaXN0ZXIoKTsKPiArICAg IFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+aW5pdCgpOwo+ICsKPiArPWN1dAo+ICsKPiAgc3Vi IHJlZ2lzdGVyIHsKPiAgICAgIG15ICgkY2xhc3MpID0gQF87Cj4gIAo+IEBAIC05NiwyMiArMjA3 LDEyNyBAQCBzdWIgcmVnaXN0ZXIgewo+ICAgICAgJHBkYXRhLT57cGx1Z2luc30tPnskdHlwZX0g PSAkY2xhc3M7Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyB0eXBlCj4gKwo+ICtCPFJF UVVJUkVEOj4gTXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBJPGNoaWxkIHBsdWdpbnM+LgoKb24gZmFj dCwgdGhpcyBtdXN0IGJlIGltcGxlbWVudGVkIGluICplYWNoKiBjaGlsZCBwbHVnaW4gKGEgZGlm ZmVyZW5jZQp0aGF0IG1hdHRlcnMgOykpCgo+ICsKPiArICAgICR0eXBlID0gUFZFOjpFeGFtcGxl OjpQbHVnaW4tPnR5cGUoKQo+ICsgICAgJHR5cGUgPSAkY2xhc3MtPnR5cGUoKQo+ICsKPiArUmV0 dXJucyB0aGUgSTx0eXBlPiBvZiBhIEk8Y2hpbGQgcGx1Z2luPiwgd2hpY2ggaXMgYSBJPHVuaXF1 ZT4gc3RyaW5nLiBUaGlzIGlzCj4gK3VzZWQgdG8gaWRlbnRpZnkgdGhlIEk8Y2hpbGQgcGx1Z2lu Pi4KPiArCj4gK1Nob3VsZCBiZSBvdmVycmlkZGVuIG9uIEk8Y2hpbGQgcGx1Z2lucz46Cgpubywg aXQgbXVzdCA7KQoKPiArCj4gKyAgICBzdWIgdHlwZSB7Cj4gKwlyZXR1cm4gImZvbyI7Cj4gKyAg ICB9Cj4gKwo+ICs9Y3V0Cj4gKwo+ICBzdWIgdHlwZSB7Cj4gICAgICBkaWUgIm92ZXJ3cml0ZSBt ZSI7Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBwcm9wZXJ0aWVzCj4gKwo+ICtCPFJF UVVJUkVEOj4gTXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBJPGNoaWxkIHBsdWdpbnM+LgoKbm90IHRl Y2huaWNhbGx5IHRydWUgKG9yIHJhdGhlciwgYWx3YXlzIHRydWUpPyBpdCBpcyBpbXBsZW1lbnRl ZCBpbiBhbGwKcGx1Z2lucyBzaW5jZSBpdCBpcyBpbXBsZW1lbnRlZCBiZWxvdy4uIGFuZCBpdCdz IGZpbmUgdG8gbm90IG92ZXJyaWRlIGl0CmluIGEgc3BlY2lmaWMgcGx1Z2luIGlmIHRoYXQgaXMg bm90IG5lY2Vzc2FyeS4uCgo+ICsKPiArICAgICRwcm9wcyA9IFBWRTo6RXhhbXBsZTo6UGx1Z2lu LT5wcm9wZXJ0aWVzKCkKPiArICAgICRwcm9wcyA9ICRjbGFzcy0+cHJvcGVydGllcygpCj4gKwo+ ICtSZXR1cm5zIHRoZSBJPHByb3BlcnRpZXM+IHNwZWNpZmljIHRvIGEgSTxjaGlsZCBwbHVnaW4+ IGFzIGEgaGFzaC4KCnRoaXMgYWxzbyBkb2Vzbid0IHJlYWxseSBleHBsYWluIHdoYXQgdGhpcyBp cyB1c2VkIGZvciBJTUhPLi4gdGhpcyBpcwp1c2VkIHRvICpyZWdpc3RlciogcHJvcGVydGllcyBm b3IgdXNlIGluIHRoaXMgb3Igb3RoZXIgcGx1Z2luJ3MKYG9wdGlvbnMoKWAgcmV0dXJuIHZhbHVl LiBkZXBlbmRpbmcgb24gdGhlIGlzb2xhdGlvbiBtb2RlLCBvZiBjb3Vyc2UuCgo+ICsKPiArICAg IHN1YiBwcm9wZXJ0aWVzKCkgewo+ICsJcmV0dXJuIHsKPiArCSAgICBwYXRoID0+IHsKPiArCQlk ZXNjcmlwdGlvbiA9PiAiUGF0aCB1c2VkIHRvIHJldHJpZXZlIGEgJ2ZvbycuIiwKPiArCQl0eXBl ID0+ICdzdHJpbmcnLAo+ICsJCWZvcm1hdCA9PiAnc29tZS1jdXN0b20tZm9ybWF0LWhhbmRsZXIt Zm9yLXBhdGhzJywKPiArCSAgICB9LAo+ICsJICAgIGlzX2JhciA9IHsKPiArCQlkZXNjcmlwdGlv biA9PiAiV2hldGhlciB0aGUgJ2ZvbycgaXMgJ2Jhcicgb3Igbm90LiIsCj4gKwkJdHlwZSA9PiAn Ym9vbGVhbicsCj4gKwkgICAgfSwKPiArCSAgICBid2xpbWl0ID0+IGdldF9zdGFuZGFyZF9vcHRp b24oJ2J3bGltaXQnKSwKPiArCX07Cj4gKyAgICB9Cj4gKwo+ICs9Y3V0Cj4gKwo+ICBzdWIgcHJv cGVydGllcyB7Cj4gICAgICByZXR1cm4ge307Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFk MyBvcHRpb25zCj4gKwo+ICtCPFJFUVVJUkVEOj4gTXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBJPGNo aWxkIHBsdWdpbnM+LgoKYWdhaW4sIHRoaXMgaXMgbm90IHJlYWxseSB0cnVlLi4gZXNwZWNpYWxs eSBpbiB0aGUgY2FzZSBvZiBwcm9wZXJ0eQppc29sYXRpb24sIGl0J3MgZmluZSB0byBsZWF2ZSB0 aGlzIGJsYW5rLCBzaW5jZSB0aGUgcHJvcGVydGllcyBhcmUgdXNlZAp0byBpbml0aWFsaXplIHRo ZSBvcHRpb25zLi4KCj4gKwo+ICsgICAgJG9wdHMgPSBQVkU6OkV4YW1wbGU6OlBsdWdpbi0+b3B0 aW9ucygpCj4gKyAgICAkb3B0cyA9ICRjbGFzcy0+b3B0aW9ucygpCj4gKwo+ICtUaGlzIG1ldGhv ZCBpcyB1c2VkIHRvIHNwZWNpZnkgd2hpY2ggSTxwcm9wZXJ0aWVzPiBhcmUgYWN0dWFsbHkgY29u ZmlndXJlZCBmb3IKCmNvbmZpZ3VyZWQ/IGFsbG93ZWQvdXNlZCBmaXRzIGJldHRlciBJTUhPCgo+ ICthIGdpdmVuIEk8Y2hpbGQgcGx1Z2luPi4gTW9yZSBwcmVjaXNlbHksIG9ubHkgdGhlIEk8cHJv cGVydGllcz4gdGhhdCBhcmUKPiArY29udGFpbmVkIGluIHRoZSBoYXNoIHRoaXMgbWV0aG9kIHJl dHVybnMgY2FuIGJlIHVzZWQuCgp3cm9uZywgc2VlIGFib3ZlLi4KCj4gKwo+ICtBZGRpdGlvbmFs bHksIGl0IGFsc28gYWxsb3dzIHRvIGRlY2xhcmUgd2hldGhlciBhIHByb3BlcnR5IGlzIEM8b3B0 aW9uYWw+IG9yCj4gK0M8Zml4ZWQ+LgoKb3B0aW9uYWwgY2FuIGFsc28gYmUgc2V0IHZpYSB0aGUg cHJvcGVydHkgaXRzZWxmLCBpbiBjYXNlIG9mIGlzb2xhdGVkCnByb3BlcnRpZXMuCgo+ICsKPiAr ICAgIHN1YiBvcHRpb25zIHsKPiArCXJldHVybiB7Cj4gKwkgICAgJ3NvbWUtb3B0aW9uYWwtcHJv cGVydHknID0+IHsgb3B0aW9uYWwgPT4gMSB9LAo+ICsJICAgICdhLWZpeGVkLXByb3BlcnR5JyA9 PiB7IGZpeGVkID0+IDEgfSwKPiArCSAgICAnYS1yZXF1aXJlZC1idXQtbm90LWZpeGVkLXByb3Bl cnR5JyA9PiB7fSwKPiArCX07Cj4gKyAgICB9Cj4gKwo+ICtDPG9wdGlvbmFsPiBJPHByb3BlcnRp ZXM+IGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgc2V0Lgo+ICsKPiArQzxmaXhlZD4gSTxwcm9wZXJ0 aWVzPiBtYXkgb25seSBiZSBzZXQgb24gY3JlYXRpb24gb2YgdGhlIGNvbmZpZyBlbnRpdHkuCj4g Kwo+ICs9Y3V0Cj4gKwo+ICBzdWIgb3B0aW9ucyB7Cj4gICAgICByZXR1cm4ge307Cj4gIH0KPiAg Cj4gKz1wb2QKPiArCj4gKz1oZWFkMyBwbHVnaW5kYXRhCj4gKwo+ICtCPE9QVElPTkFMOj4gQ2Fu IGJlIGltcGxlbWVudGVkIGluIEk8Y2hpbGQgcGx1Z2lucz4uCj4gKwo+ICsgICAgJHBsdWdpbmRh dGEgPSBQVkU6OkV4YW1wbGU6OlBsdWdpbi0+cGx1Z2luZGF0YSgpCj4gKyAgICAkcGx1Z2luZGF0 YSA9ICRjbGFzcy0+cGx1Z2luZGF0YSgpCj4gKwo+ICtUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHBs dWdpbiBhdXRob3JzIHRvIHByb3ZpZGUgYW55IGtpbmQgb2YgZGF0YSBzcGVjaWZpYyB0bwo+ICt0 aGVpciBwbHVnaW4gaW1wbGVtZW50YXRpb24gYW5kIGlzIG90aGVyd2lzZSBub3QgdG91Y2hlZCBi eSBDPFNlY3Rpb25Db25maWc+Lgo+ICsKPiArVGhpcyBtb3N0bHkgZXhpc3RzIGZvciBjb252ZW5p ZW5jZSBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgo+ICsKPiArPWN1dAo+ICsK PiAgc3ViIHBsdWdpbmRhdGEgewo+ICAgICAgcmV0dXJuIHt9Owo+ICB9Cj4gIAo+ICs9cG9kCj4g Kwo+ICs9aGVhZDMgaGFzX2lzb2xhdGVkX3Byb3BlcnRpZXMKPiArCj4gKyAgICAkaXNfaXNvbGF0 ZWQgPSBQVkU6OkV4YW1wbGU6OlBsdWdpbi0+aGFzX2lzb2xhdGVkX3Byb3BlcnRpZXMoKQo+ICsg ICAgJGlzX2lzb2xhdGVkID0gJGNsYXNzLT5oYXNfaXNvbGF0ZWRfcHJvcGVydGllcygpCj4gKwo+ ICtDaGVja3Mgd2hldGhlciB0aGUgcGx1Z2luIGhhcyBpc29sYXRlZCBJPHByb3BlcnRpZXM+IChy dW5zIGluIGlzb2xhdGVkIG1vZGUpLgo+ICsKPiArPWN1dAo+ICsKPiAgc3ViIGhhc19pc29sYXRl ZF9wcm9wZXJ0aWVzIHsKPiAgICAgIG15ICgkY2xhc3MpID0gQF87Cj4gIAo+IEBAIC0xNjgsNiAr Mzg0LDM0IEBAIG15IHN1YiBhZGRfcHJvcGVydHkgewo+ICAgICAgfQo+ICB9Owo+ICAKPiArPXBv ZAo+ICsKPiArPWhlYWQzIGNyZWF0ZVNjaGVtYQo+ICsKPiArICAgICRzY2hlbWEgPSBQVkU6OkV4 YW1wbGU6OlBsdWdpbi0+KCRza2lwX3R5cGUsICRiYXNlKQo+ICsgICAgJHNjaGVtYSA9ICRjbGFz cy0+KCRza2lwX3R5cGUsICRiYXNlKQo+ICsKPiArUmV0dXJucyB0aGUgQzxQVkU6OkpTT05TY2hl bWE+IHVzZWQgZm9yIEk8Y3JlYXRpbmc+IGluc3RhbmNlcyBvZiBhCj4gK0k8Y2hpbGQgcGx1Z2lu Pi4KCiJpbnN0YW5jZXMgb2YgYSBjaGlsZCBwbHVnaW4iIHNvdW5kcyBjb25mdXNpbmcuIGNvbmZp ZyBlbnRyaWVzIGRlZmluZWQKYnkgYSBjaGlsZCBwbHVnaW4/Cgo+ICsKPiArVGhpcyBzY2hlbWEg bWF5IHRoZW4gYmUgdXNlZCBhcyBkZXNpcmVkLCBmb3IgZXhhbXBsZSBhcyB0aGUgZGVmaW5pdGlv biBvZgo+ICtwYXJhbWV0ZXJzIG9mIGFuIEFQSSBoYW5kbGVyIChDPFBPU1Q+KS4KPiArCj4gKz1v dmVyCj4gKwo+ICs9aXRlbSBDPCRza2lwX3R5cGU+IChvcHRpb25hbCkKPiArCj4gK0NhbiBiZSBz ZXQgdG8gQzwxPiBpZiB0aGVyZSdzIGEgSTxwcm9wZXJ0eT4gbmFtZWQgInR5cGUiIGluIHRoZSBs aXN0IG9mCj4gK2RlZmF1bHQgSTxwcm9wZXJ0aWVzPiB0aGF0IHNob3VsZCBiZSBleGNsdWRlZCBm cm9tIHRoZSBnZW5lcmF0ZWQgc2NoZW1hLgoKY2FuIGJlIGRlc2NyaWJlZCBpbiBtdWNoIHNpbXBs ZXIgdGVybXM6CgpTZXQgdG8gJzEnIHRvIG5vdCBhZGQgJ3R5cGUnIHByb3BlcnR5IHRvIHNjaGVt YS4KCj4gKwo+ICs9aXRlbSBDPCRiYXNlPiAob3B0aW9uYWwpCj4gKwo+ICtUaGUgSTxwcm9wZXJ0 aWVzPiB0byB1c2UgcGVyIGRlZmF1bHQuCgpubywgdGhpcyBkZWZpbmVzIHRoZSBzY2hlbWEgb2Yg YWRkaXRpb25hbCBwcm9wZXJ0aWVzIG5vdCBkZXJpdmVkIGZyb20KdGhlIHBsdWdpbiBkZWZpbml0 aW9uLgoKPiArCj4gKz1iYWNrCj4gKwo+ICs9Y3V0Cj4gKwo+ICBzdWIgY3JlYXRlU2NoZW1hIHsK PiAgICAgIG15ICgkY2xhc3MsICRza2lwX3R5cGUsICRiYXNlKSA9IEBfOwo+ICAKPiBAQCAtMjQy LDYgKzQ4NiwxOCBAQCBzdWIgY3JlYXRlU2NoZW1hIHsKPiAgICAgIH07Cj4gIH0KPiAgCj4gKz1w b2QKPiArCj4gKz1oZWFkMyB1cGRhdGVTY2hlbWEKPiArCj4gK1JldHVybnMgdGhlIEM8UFZFOjpK U09OU2NoZW1hPiB1c2VkIGZvciBJPHVwZGF0aW5nPiBpbnN0YW5jZXMgb2YgYQo+ICtJPGNoaWxk IHBsdWdpbj4uCgpzYW1lIGFzIGFib3ZlLi4KCj4gKwo+ICtUaGlzIHNjaGVtYSBtYXkgdGhlbiBi ZSB1c2VkIGFzIGRlc2lyZWQsIGZvciBleGFtcGxlIGFzIHRoZSBkZWZpbml0aW9uIG9mCj4gK3Bh cmFtZXRlcnMgb2YgYW4gQVBJIGhhbmRsZXIgKEM8UFVUPikuCj4gKwo+ICs9Y3V0Cgp3aGF0IGFi b3V0IHRoZSBwYXJhbWV0ZXJzIGhlcmU/IDspCgo+ICsKPiAgc3ViIHVwZGF0ZVNjaGVtYSB7Cj4g ICAgICBteSAoJGNsYXNzLCAkc2luZ2xlX2NsYXNzLCAkYmFzZSkgPSBAXzsKPiAgCj4gQEAgLTMy NiwxMiArNTgyLDIyIEBAIHN1YiB1cGRhdGVTY2hlbWEgewo+ICAgICAgfTsKPiAgfQo+ICAKPiAt IyB0aGUgJXBhcmFtIGhhc2ggY29udHJvbHMgc29tZSBiZWhhdmlvciBvZiB0aGUgc2VjdGlvbiBj b25maWcsIGN1cnJlbnRseSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlCj4gLSMgdW5kZXJzdG9v ZDoKPiAtIwo+IC0jIC0gcHJvcGVydHlfaXNvbGF0aW9uOiBpZiBzZXQsIGVhY2ggY2hpbGQtcGx1 Z2luIGhhcyBhIGZ1bGx5IGlzb2xhdGVkIHByb3BlcnR5IChzY2hlbWEpIG5hbWVzcGFjZS4KPiAt IyAgIEJ5IGRlZmF1bHQgdGhpcyBpcyBvZmYsIG1lYW5pbmcgYWxsIGNoaWxkLXBsdWdpbnMgc2hh cmUgdGhlIHNjaGVtYSBvZiBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUKPiAtIyAgIG5hbWUuIE5v cm1hbGx5IG9uZSB3YW50cyB0byB1c2Ugb25lT2Ygc2NoZW1hJ3Mgd2hlbiBlbmFibGluZyBpc29s YXRpb24uCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBpbml0Cj4gKwo+ICsgICAgJGJhc2VfcGx1Z2lu LT5pbml0KCk7Cj4gKyAgICAkYmFzZV9wbHVnaW4tPmluaXQocHJvcGVydHlfaXNvbGF0aW9uID0+ IDEpOwo+ICsKPiArVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIGFsbCBJPGNoaWxk IHBsdWdpbnM+IHRoYXQgaGF2ZSBiZWVuCj4gK0k8cmVnaXN0ZXJlZD4gYmVmb3JlaGFuZC4KCm5v dCByZWFsbHkuLiBpdCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIFNlY3Rpb25Db25maWcgaXRz ZWxmIHVzaW5nIHRoZQpyZWdpc3RlcmVkIHBsdWdpbnMuLgoKPiArCj4gK09wdGlvbmFsbHksIGl0 IGlzIGFsc28gcG9zc2libGUgdG8gcGFzcyBDPHByb3BlcnR5X2lzb2xhdGlvbj4gYXMgcGFyYW1l dGVyIGluCj4gK29yZGVyIHRvIGFjdGl2YXRlIEk8aXNvbGF0ZWQgbW9kZT4uIFNlZSBMPC9NT0RF Uz4gaW4gdGhlIHBhY2thZ2UtbGV2ZWwKPiArZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1h dGlvbi4KCnRoaXMgYWN0dWFsbHkgaXMgd29yc2UgdGhlbiB0aGUgb2xkIHZhcmlhbnQgc2luY2Ug dGhlIGluZm9ybWF0aW9uICpob3cKdG8gc2V0KiBpdCBpcyBsb3N0IGhlcmUuLgoKPiArCj4gKz1j dXQKPiArCj4gIHN1YiBpbml0IHsKPiAgICAgIG15ICgkY2xhc3MsICVwYXJhbSkgPSBAXzsKPiAg Cj4gQEAgLTM5Miw2ICs2NTgsMTggQEAgc3ViIGluaXQgewo+ICAgICAgJHByb3BlcnR5TGlzdC0+ e3R5cGV9LT57ZW51bX0gPSBbc29ydCBrZXlzICUkcGx1Z2luc107Cj4gIH0KPiAgCj4gKz1wb2QK PiArCj4gKz1oZWFkMyBsb29rdXAKPiArCj4gKyAgICAkcGx1Z2luID0gUFZFOjpFeGFtcGxlOjpC YXNlUGx1Z2luLT5sb29rdXAoJHR5cGUpCj4gKyAgICAkcGx1Z2luID0gJGNsYXNzLT5sb29rdXAo JHR5cGUpCj4gKwo+ICtSZXR1cm5zIHRoZSBJPGNoaWxkIHBsdWdpbj4gY29ycmVzcG9uZGluZyB0 byB0aGUgZ2l2ZW4gQzx0eXBlPiBvciBkaWVzIGlmIGl0Cj4gK2Nhbm5vdCBiZSBmb3VuZC4KPiAr Cj4gKz1jdXQKPiArCj4gIHN1YiBsb29rdXAgewo+ICAgICAgbXkgKCRjbGFzcywgJHR5cGUpID0g QF87Cj4gIAo+IEBAIC00MDUsNiArNjgzLDE3IEBAIHN1YiBsb29rdXAgewo+ICAgICAgcmV0dXJu ICRwbHVnaW47Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBsb29rdXBfdHlwZXMKPiAr Cj4gKyAgICAkdHlwZXMgPSBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmxvb2t1cF90eXBlcygp Cj4gKyAgICAkdHlwZXMgPSAkY2xhc3MtPmxvb2t1cF90eXBlcygpCj4gKwo+ICtSZXR1cm5zIGEg bGlzdCBvZiBhbGwgSTxjaGlsZCBwbHVnaW5zJz4gQzx0eXBlPnMuCgpJPGNoaWxkIHBsdWdpbj4g Qzx0eXBlPnMgPwoKPiArCj4gKz1jdXQKPiArCj4gIHN1YiBsb29rdXBfdHlwZXMgewo+ICAgICAg bXkgKCRjbGFzcykgPSBAXzsKPiAgCj4gQEAgLTQxMywxOCArNzAyLDY2IEBAIHN1YiBsb29rdXBf dHlwZXMgewo+ICAgICAgcmV0dXJuIFsgc29ydCBrZXlzICV7JHBkYXRhLT57cGx1Z2luc319IF07 Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBkZWNvZGVfdmFsdWUKPiArCj4gK0I8T1BU SU9OQUw6PiBDYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIEk8YmFzZSBwbHVnaW4+Lgo+ICsKPiAr ICAgICRkZWNvZGVkX3ZhbHVlID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5kZWNvZGVfdmFs dWUoJHR5cGUsICRrZXksICR2YWx1ZSkKPiArICAgICRkZWNvZGVkX3ZhbHVlID0gJGNsYXNzLT4o JHR5cGUsICRrZXksICR2YWx1ZSkKPiArCj4gK0NhbGxlZCBkdXJpbmcgQzxjaGVja19jb25maWc+ IGluIG9yZGVyIHRvIGNvbnZlcnQgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIHJlYWQKPiArZnJvbSBh IEM8U2VjdGlvbkNvbmZpZz4gZmlsZSB3aGljaCBoYXZlIGJlZW4gSTxlbmNvZGVkPiBiZWZvcmVo YW5kIGJ5Cj4gK0M8ZW5jb2RlX3ZhbHVlPi4KPiArCj4gK0RvZXMgbm90aGluZyB0byBDPCR2YWx1 ZT4gYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBJPGJhc2UgcGx1Z2lu Pgo+ICtpbiBvcmRlciB0byBpbXBsZW1lbnQgY3VzdG9tIGNvbnZlcnNpb24gYmVoYXZpb3IuCj4g Kwo+ICs9Y3V0CgpkZXNjcmlwdGlvbiB3aGF0IHR5cGUva2V5L3ZhbHVlIGFyZSB3b3VsZCBiZSBu aWNlPyBhbHNvLCBzb21lIGV4YW1wbGU/Cgo+ICsKPiAgc3ViIGRlY29kZV92YWx1ZSB7Cj4gICAg ICBteSAoJGNsYXNzLCAkdHlwZSwgJGtleSwgJHZhbHVlKSA9IEBfOwo+ICAKPiAgICAgIHJldHVy biAkdmFsdWU7Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBlbmNvZGVfdmFsdWUKPiAr Cj4gK0I8T1BUSU9OQUw6PiBDYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIEk8YmFzZSBwbHVnaW4+ Lgo+ICsKPiArICAgICRlbmNvZGVkX3ZhbHVlID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5l bmNvZGVfdmFsdWUoJHR5cGUsICRrZXksICR2YWx1ZSkKPiArICAgICRlbmNvZGVkX3ZhbHVlID0g JGNsYXNzLT4oJHR5cGUsICRrZXksICR2YWx1ZSkKPiArCj4gK0NhbGxlZCBkdXJpbmcgQzx3cml0 ZV9jb25maWc+IGluIG9yZGVyIHRvIGNvbnZlcnQgdmFsdWVzIGludG8gYSBzZXJpYWxpemFibGUK PiArZm9ybWF0Lgo+ICsKPiArRG9lcyBub3RoaW5nIHRvIEM8JHZhbHVlPiBieSBkZWZhdWx0LCBi dXQgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIEk8YmFzZSBwbHVnaW4+Cj4gK2luIG9yZGVyIHRv IGltcGxlbWVudCBjdXN0b20gY29udmVyc2lvbiBiZWhhdmlvci4gVXN1YWxseSBvbmUgc2hvdWxk IGFsc28KPiArb3ZlcnJpZGUgQzxkZWNvZGVfdmFsdWU+IGluIGEgbWF0Y2hpbmcgbWFubmVyLgo+ ICsKPiArPWN1dAoKc2FtZSBoZXJlCgo+ICsKPiAgc3ViIGVuY29kZV92YWx1ZSB7Cj4gICAgICBt eSAoJGNsYXNzLCAkdHlwZSwgJGtleSwgJHZhbHVlKSA9IEBfOwo+ICAKPiAgICAgIHJldHVybiAk dmFsdWU7Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBjaGVja192YWx1ZQo+ICsKPiAr ICAgICRjaGVja2VkX3ZhbHVlID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5jaGVja192YWx1 ZSgkdHlwZSwgJGtleSwgJHZhbHVlLCAkc3RvcmVpZCwgJHNraXBTY2hlbWFDaGVjaykKPiArICAg ICRjaGVja2VkX3ZhbHVlID0gJGNsYXNzLT5jaGVja192YWx1ZSgkdHlwZSwgJGtleSwgJHZhbHVl LCAkc3RvcmVpZCwgJHNraXBTY2hlbWFDaGVjaykKPiArCj4gK1VzZWQgaW50ZXJuYWxseSB0byBj aGVjayBpZiB2YXJpb3VzIGludmFyaWFudHMgYXJlIHVwaGVsZC4gSXQncyBiZXN0IHRvIG5vdAo+ ICtvdmVycmlkZSB0aGlzLgoKc2hvdWxkIHdlIG1ha2UgaXQgaW50ZXJuYWwgdGhlbj8KCj4gKwo+ ICs9Y3V0Cj4gKwo+ICBzdWIgY2hlY2tfdmFsdWUgewo+ICAgICAgbXkgKCRjbGFzcywgJHR5cGUs ICRrZXksICR2YWx1ZSwgJHN0b3JlaWQsICRza2lwU2NoZW1hQ2hlY2spID0gQF87Cj4gIAo+IEBA IC00NzMsNiArODEwLDQ2IEBAIHN1YiBjaGVja192YWx1ZSB7Cj4gICAgICByZXR1cm4gJHZhbHVl Owo+ICB9Cj4gIAo+ICs9cG9kCj4gKwo+ICs9aGVhZDMgcGFyc2Vfc2VjdGlvbl9oZWFkZXIKPiAr Cj4gK0I8T1BUSU9OQUw6PiBDYW4gYmUgSTxleHRlbmRlZD4gaW4gdGhlIEk8YmFzZSBwbHVnaW4+ Lgo+ICsKPiArICAgICgkdHlwZSwgJHNlY3Rpb25JZCwgJGVycm1zZywgJGNvbmZpZykgPSBQVkU6 OkV4YW1wbGU6OkJhc2VQbHVnaW4tPnBhcnNlX3NlY3Rpb25faGVhZGVyKCRsaW5lKQo+ICsgICAg KCR0eXBlLCAkc2VjdGlvbklkLCAkZXJybXNnLCAkY29uZmlnKSA9ICRjbGFzcy0+cGFyc2Vfc2Vj dGlvbl9oZWFkZXIoJGxpbmUpCj4gKwo+ICtQYXJzZXMgdGhlIGhlYWRlciBvZiBhIHNlY3Rpb24g YW5kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgc2VjdGlvbidzCj4gK0M8dHlwZT4s IElEIGFuZCBvcHRpb25hbGx5IGFuIGVycm9yIG1lc3NhZ2UgYXMgd2VsbCBhcyBhZGRpdGlvbmFs IGNvbmZpZwo+ICthdHRyaWJ1dGVzLgo+ICsKPiArQ2FuIGJlIG92ZXJyaWRlbiBvbiB0aGUgSTxi YXNlIHBsdWdpbj4gaW4gb3JkZXIgdG8gcHJvdmlkZSBjdXN0b20gbG9naWMgZm9yCj4gK2hhbmRs aW5nIHRoZSBoZWFkZXIsIGUuZy4gaWYgdGhlIHNlY3Rpb24gSURzIG5lZWQgdG8gYmUgcGFyc2Vk IG9yIHZhbGlkYXRlZCBpbgo+ICthIGNlcnRhaW4gd2F5Lgo+ICsKPiArTm90ZSB0aGF0IHRoZSBz ZWN0aW9uIEI8TVVTVD4gaW5pdGlhbGx5IGJlIHBhcnNlZCB3aXRoIHRoZSByZWdleCB1c2VkIGJ5 IHRoZQo+ICtvcmlnaW5hbCBtZXRob2Qgd2hlbiBvdmVycmlkaW5nIGluIG9yZGVyIHRvIGd1YXJh bnRlZSBjb21wYXRpYmlsaXR5LgoKd2h5PyB0aGF0J3Mgbm90IHRydWUgYXQgYWxsLCBhbmQgYWxz byBub3QgdHJ1ZSBmb3Igb3VyIGNvZGUgdXNpbmcgdGhpcwooZS5nLiwgc2VlIFBWRTo6TWFwcGlu Zzo6VVNCLCB3aGVyZSB0aGUgdHlwZSBpcyBlbmNvZGVkIGluIHRoZSBmaWxlCm5hbWUsIGFuZCB0 aGUgc2VjdGlvbiBoZWFkZXIganVzdCBjb25zaXN0cyBvZiB0aGUgaWQgZm9sbG93ZWQgYnkgYQpu ZXdsaW5lKS4KCj4gK0ZvciBleGFtcGxlOgo+ICsKPiArICAgIHN1YiBwYXJzZV9zZWN0aW9uX2hl YWRlciB7Cj4gKwlteSAoJGNsYXNzLCAkbGluZSkgPSBAXzsKPiArCj4gKwlpZiAoJGxpbmUgPX4g bS9eKFxTKTpccyooXFMrKVxzKiQvKSB7Cj4gKwkgICAgbXkgKCR0eXBlLCAkc2VjdGlvbklkKSA9 ICgkMSwgJDIpOwo+ICsKPiArCSAgICBteSAkZXJybXNnID0gdW5kZWY7Cj4gKwkgICAgZXZhbCB7 IGNoZWNrX3NlY3Rpb25faWRfaXNfdmFsaWQoJHNlY3Rpb25JZCk7IH07Cj4gKwkgICAgJGVycm1z ZyA9ICRAIGlmICRAOwo+ICsKPiArCSAgICBteSAkY29uZmlnID0gcGFyc2VfZXh0cmFfc3R1ZmZf ZnJvbV9zZWN0aW9uX2lkKCRzZWN0aW9uSWQpOwo+ICsKPiArCSAgICByZXR1cm4gKCR0eXBlLCAk c2VjdGlvbklkLCAkZXJybXNnLCAkY29uZmlnKTsKPiArCX0KPiArCXJldHVybiB1bmRlZjsKPiAr ICAgIH0KPiArCj4gKz1jdXQKPiArCj4gIHN1YiBwYXJzZV9zZWN0aW9uX2hlYWRlciB7Cj4gICAg ICBteSAoJGNsYXNzLCAkbGluZSkgPSBAXzsKPiAgCj4gQEAgLTQ4NSwxMiArODYyLDQwIEBAIHN1 YiBwYXJzZV9zZWN0aW9uX2hlYWRlciB7Cj4gICAgICByZXR1cm4gdW5kZWY7Cj4gIH0KPiAgCj4g Kz1wb2QKPiArCj4gKz1oZWFkMyBmb3JtYXRfc2VjdGlvbl9oZWFkZXIKPiArCj4gK0I8T1BUSU9O QUw6PiBDYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgSTxiYXNlIHBsdWdpbj4uCj4gKwo+ICsgICAg JGhlYWRlciA9IFBWRTo6RXhhbXBsZTo6QmFzZVBsdWdpbi0+Zm9ybWF0X3NlY3Rpb25faGVhZGVy KCR0eXBlLCAkc2VjdGlvbklkLCAkc2NmZywgJGRvbmVfaGFzaCkKPiArICAgICRoZWFkZXIgPSAk Y2xhc3MtPmZvcm1hdF9zZWN0aW9uX2hlYWRlcigkdHlwZSwgJHNlY3Rpb25JZCwgJHNjZmcsICRk b25lX2hhc2gpCj4gKwo+ICtGb3JtYXRzIHRoZSBoZWFkZXIgb2YgYSBzZWN0aW9uLiBTaW1wbHkg QzwiJHR5cGU6ICRzZWN0aW9uSWRcbiI+IGJ5IGRlZmF1bHQuCj4gKwo+ICtOb3RlIHRoYXQgd2hl biBvdmVycmlkaW5nIHRoaXMsIHRoZSBoZWFkZXIgQjxNVVNUPiBlbmQgd2l0aCBhIG5ld2xpbmUg KEM8XG4+KS4KPiArT25lIGFsc28gbWlnaHQgd2FudCB0byBhZGQgYSBtYXRjaGluZyBvdmVycmlk ZSBmb3IgQzxwYXJzZV9zZWN0aW9uX2hlYWRlcj4uCj4gKwo+ICs9Y3V0Cj4gKwo+ICBzdWIgZm9y bWF0X3NlY3Rpb25faGVhZGVyIHsKPiAgICAgIG15ICgkY2xhc3MsICR0eXBlLCAkc2VjdGlvbklk LCAkc2NmZywgJGRvbmVfaGFzaCkgPSBAXzsKPiAgCj4gICAgICByZXR1cm4gIiR0eXBlOiAkc2Vj dGlvbklkXG4iOwo+ICB9Cj4gIAo+ICs9cG9kCj4gKwo+ICs9aGVhZDMgZ2V0X3Byb3BlcnR5X3Nj aGVtYQo+ICsKPiArICAgICRzY2hlbWEgPSBQVkU6OkV4YW1wbGU6OkJhc2VQbHVnaW4tPmdldF9w cm9wZXJ0eV9zY2hlbWEoJHR5cGUsICRrZXkpCj4gKyAgICAkc2NoZW1hID0gJGNsYXNzLT5nZXRf cHJvcGVydHlfc2NoZW1hKCR0eXBlLCAka2V5KQo+ICsKPiArUmV0dXJucyB0aGUgc2NoZW1hIG9m IGEgSTxwcm9wZXJ0eT4gb2YgYSBJPGNoaWxkIHBsdWdpbj4gdGhhdCBpcyBkZW5vdGVkIHZpYQo+ ICtpdHMgQzwkdHlwZT4uCgpSZXR1cm5zIHRoZSBzY2hlbWEgb2YgdGhlIHByb3BlcnR5ICcka2V5 JyBvZiB0aGUgcGx1Z2luIGZvciAnJHR5cGUnLgoKPiArCj4gKz1jdXQKPiArCj4gIHN1YiBnZXRf cHJvcGVydHlfc2NoZW1hIHsKPiAgICAgIG15ICgkY2xhc3MsICR0eXBlLCAka2V5KSA9IEBfOwo+ ICAKPiBAQCAtNTA2LDYgKzkxMSwxMDYgQEAgc3ViIGdldF9wcm9wZXJ0eV9zY2hlbWEgewo+ICAg ICAgcmV0dXJuICRzY2hlbWE7Cj4gIH0KPiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBwYXJzZV9j b25maWcKPiArCj4gKyAgICAkY29uZmlnID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5wYXJz ZV9jb25maWcoJGZpbGVuYW1lLCAkcmF3LCAkYWxsb3dfdW5rbm93bikKPiArICAgICRjb25maWcg PSAkY2xhc3MtPnBhcnNlX2NvbmZpZygkZmlsZW5hbWUsICRyYXcsICRhbGxvd191bmtub3duKQo+ ICsKPiArUGFyc2VzIHRoZSBjb250ZW50cyBvZiBhIEM8U2VjdGlvbkNvbmZpZz4gZmlsZSBhbmQg cmV0dXJucyBhIGNvbXBsZXggbmVzdGVkCj4gK2hhc2ggd2hpY2ggbm90IG9ubHkgY29udGFpbnMg dGhlIHBhcnNlZCBkYXRhLCBidXQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0Cj4gK29uZSBt YXkgb3IgbWF5IG5vdCBmaW5kIHVzZWZ1bC4gTW9yZSBiZWxvdy4KCnRoYXQgY29tbWVudCBhYm91 dCB1c2VmdWxuZXNzIHNlcnZlcyBubyBwdXJwb3NlLgoKUGFyc2VzIHRoZSBjb250ZW50cyBvZiBh IGZpbGUgYXMgU2VjdGlvbkNvbmZpZywgcmV0dXJuaW5nIHRoZSBwYXJzZWQKZGF0YSBhbm5vdGF0 ZWQgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIChzZWUgYmVsb3cpLgoKPiArCj4gKz1vdmVy Cj4gKwo+ICs9aXRlbSBDPCRmaWxlbmFtZT4KPiArCj4gK1RoZSBuYW1lIG9mIHRoZSBmaWxlIHdo b3NlIGNvbnRlbnQgaXMgc3RvcmVkIGluIEM8JHJhdz4uCgp0aGlzIGlzIGp1c3QgdXNlZCBmb3Ig ZXJyb3IgbWVzc2FnZXMvd2FybmluZ3MsIHNvIGl0IGNhbiBhbHNvIGJlCnNvbWV0aGluZyBlbHNl IDspCgo+ICsKPiArPWl0ZW0gQzwkcmF3Pgo+ICsKPiArVGhlIHJhdyBjb250ZW50IG9mIEM8JGZp bGVuYW1lPi4KPiArCj4gKz1pdGVtIEM8JGFsbG93X3Vua25vd24+Cj4gKwo+ICtXaGV0aGVyIHRv IGFsbG93IHBhcnNpbmcgdW5rbm93biBJPHR5cGVzPi4KPiArCj4gKz1iYWNrCj4gKwo+ICtUaGUg cmV0dXJuZWQgaGFzaCBpcyBzdHJ1Y3R1cmVkIGFzIGZvbGxvd3M6Cj4gKwo+ICsgICAgewo+ICsJ aWRzID0+IHsKPiArCSAgICBmb28gPT4gewo+ICsJCWtleSA9PiB2YWx1ZSwKPiArCQkuLi4KPiAr CSAgICB9LAo+ICsJICAgIGJhciA9PiB7Cj4gKwkJa2V5ID0+IHZhbHVlLAo+ICsJCS4uLgo+ICsJ ICAgIH0sCj4gKwl9LAo+ICsJb3JkZXIgPT4gewo+ICsJICAgIGZvbyA9PiAxLAo+ICsJICAgIGJh ciA9PiAyLAo+ICsJfSwKPiArCWRpZ2VzdCA9PiAiNWY1NTEzZjg4MjJmZGJlNTE0NWFmMzNiNjRk OGQ5NzBkY2Y5NWM2ZSIsCj4gKwllcnJvcnMgPT4gKAo+ICsJICAgIHsKPiArCQljb250ZXh0ID0+ IC4uLiwKPiArCQlzZWN0aW9uID0+ICJzZWN0aW9uIElEIiwKPiArCQlrZXkgPT4gInNvbWVfa2V5 IiwKPiArCQllcnIgPT4gImVycm9yIG1lc3NhZ2UiLAo+ICsJICAgIH0sCj4gKwkgICAgLi4uCj4g KwkpLAo+ICsgICAgfQo+ICsKPiArPW92ZXIKPiArCj4gKz1pdGVtIEM8aWRzPgo+ICsKPiArRWFj aCBzZWN0aW9uJ3MgcGFyc2VkIGNvbmZpZ3VyYXRpb24gdmFsdWVzLCBvciBtb3JlIHByZWNpc2Vs eSwgdGhlIEk8c2VjdGlvbgo+ICtpZGVudGlmaWVycz4gYW5kIHRoZWlyIGFzc29jaWF0ZWQgY29u ZmlndXJhdGlvbiBvcHRpb25zIGFzIHJldHVybmVkIGJ5Cj4gK0M8Y2hlY2tfY29uZmlnPi4KCkVh Y2ggc2VjdGlvbidzIHBhcnNlZCBkYXRhICh2aWEgY2hlY2tfY29uZmlnKSwgaW5kZXhlZCBieSB0 aGUgc2VjdGlvbgpJRC4KCj4gKwo+ICs9aXRlbSBDPG9yZGVyPgo+ICsKPiArVGhlIG9yZGVyIGlu IHdoaWNoIHRoZSBzZWN0aW9ucyBpbiBDPGlkcz4gd2VyZSBwYXJzZWQuCgpub3Qgb25seSBwYXJz ZWQsIGJ1dCBmb3VuZCBpbiB0aGUgY29uZmlnIGZpbGUuCgo+ICsKPiArPWl0ZW0gQzxkaWdlc3Q+ Cj4gKwo+ICtBIFNIQTEgaGV4IGRpZ2VzdCBvZiB0aGUgY29udGVudHMgaW4gQzwkcmF3Pi4KCnRo ZSBwdXJwb3NlIHdvdWxkIGJlIGdvb2QgdG8gYWRkIGhlcmUgOykKCj4gKwo+ICs9aXRlbSBDPGVy cm9ycz4gKG9wdGlvbmFsKQo+ICsKPiArQW4gb3B0aW9uYWwgbGlzdCBvZiBlcnJvciBoYXNoZXMs IHdoZXJlIGVhY2ggaGFzaCBjb250YWlucyB0aGUgZm9sbG93aW5nIGtleXM6Cj4gKwo+ICs9b3Zl ciAyCj4gKwo+ICs9aXRlbSBDPGNvbnRleHQ+Cj4gKwo+ICtJbiB3aGljaCBmaWxlIGFuZCBpbiB3 aGljaCBsaW5lIHRoZSBlcnJvciB3YXMgZW5jb3VudGVyZWQuCj4gKwo+ICs9aXRlbSBDPHNlY3Rp b24+Cj4gKwo+ICtJbiB3aGljaCBzZWN0aW9uIHRoZSBlcnJvciB3YXMgZW5jb3VudGVyZWQuCj4g Kwo+ICs9aXRlbSBDPGtleT4KPiArCj4gK1doaWNoIEk8cHJvcGVydHk+IHRoZSBlcnJvciBjb3Jy ZXNwb25kcyB0by4KPiArCj4gKz1pdGVtIEM8ZXJyPgo+ICsKPiArVGhlIGVycm9yLgo+ICsKPiAr PWJhY2sKPiArCj4gKz1iYWNrCj4gKwo+ICs9Y3V0Cj4gKwo+ICBzdWIgcGFyc2VfY29uZmlnIHsK PiAgICAgIG15ICgkY2xhc3MsICRmaWxlbmFtZSwgJHJhdywgJGFsbG93X3Vua25vd24pID0gQF87 Cj4gIAo+IEBAIC02NDIsNiArMTE0NywyMyBAQCBzdWIgcGFyc2VfY29uZmlnIHsKPiAgICAgIHJl dHVybiAkY2ZnOwo+ICB9Cj4gIAo+ICs9cG9kCj4gKwo+ICs9aGVhZDMgY2hlY2tfY29uZmlnCj4g Kwo+ICsgICAgJHNldHRpbmdzID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5jaGVja19jb25m aWcoJHNlY3Rpb25JZCwgJGNvbmZpZywgJGNyZWF0ZSwgJHNraXBTY2hlbWFDaGVjaykKPiArICAg ICRzZXR0aW5ncyA9ICRjbGFzcy0+Y2hlY2tfY29uZmlnKCRzZWN0aW9uSWQsICRjb25maWcsICRj cmVhdGUsICRza2lwU2NoZW1hQ2hlY2spCj4gKwo+ICtEb2VzIG5vdCBqdXN0IGNoZWNrIHdoZXRo ZXIgYSBzZWN0aW9uJ3MgY29uZmlndXJhdGlvbiBpcyB2YWxpZCwgZGVzcGl0ZSBpdHMKPiArbmFt ZSwgYnV0IGFsc28gY2FsbHMgQzxkZWNvZGVfdmFsdWU+IChhbW9uZyBvdGhlciB0aGluZ3MpIGlu dGVybmFsbHkuCj4gKwo+ICtSZXR1cm5zIGEgaGFzaCB3aGljaCBjb250YWlucyBhbGwgSTxwcm9w ZXJ0aWVzPiBmb3IgdGhlIGdpdmVuIEM8JHNlY3Rpb25JZD4uCj4gK0luIG90aGVyIHdvcmRzLCBh bGwgY29uZmlndXJlZCBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBwcm92aWRlZCBzZWN0aW9uLgo+ ICsKPiArSXQncyBiZXN0IHRvIG5vdCBvdmVycmlkZSB0aGlzLgoKdGhhdCdzIG5vdCB0cnVlLCB0 aGlzIGlzIGFjdHVhbGx5IG9rYXkgdG8gb3ZlcnJpZGUgaWYgeW91IG5lZWQKYWRkaXRpb25hbCBj aGVja3MgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgaW4gdGhlIHNjaGVtYS4geW91IGRvIGhhdmUg dG8KYmUgYXdhcmUgb2YgdGhlIGRlY29kZV92YWx1ZSBwYXJ0Li4gc29tZSBvZiB0aGF0IGNhbiBh bHNvIGJlIGV4cHJlc3NlZAp2aWEgaG9va3MgdGhvdWdoLgoKPiArCj4gKz1jdXQKPiArCj4gIHN1 YiBjaGVja19jb25maWcgewo+ICAgICAgbXkgKCRjbGFzcywgJHNlY3Rpb25JZCwgJGNvbmZpZywg JGNyZWF0ZSwgJHNraXBTY2hlbWFDaGVjaykgPSBAXzsKPiAgCj4gQEAgLTcwMCw2ICsxMjIyLDUy IEBAIG15ICRmb3JtYXRfY29uZmlnX2xpbmUgPSBzdWIgewo+ICAgICAgfQo+ICB9Owo+ICAKPiAr PXBvZAo+ICsKPiArPWhlYWQzIHdyaXRlX2NvbmZpZwo+ICsKPiArICAgICRvdXRwdXQgPSBQVkU6 OkV4YW1wbGU6OkJhc2VQbHVnaW4tPndyaXRlX2NvbmZpZygkZmlsZW5hbWUsICRjZmcsICRhbGxv d191bmtub3duKQo+ICsgICAgJG91dHB1dCA9ICRjbGFzcy0+d3JpdGVfY29uZmlnKCRmaWxlbmFt ZSwgJGNmZywgJGFsbG93X3Vua25vd24pCj4gKwo+ICtHZW5lcmF0ZXMgdGhlIG91dHB1dCB0aGF0 IHNob3VsZCBiZSB3cml0dGVuIHRvIHRoZSBDPFNlY3Rpb25Db25maWc+IGZpbGUuCj4gKwo+ICs9 b3Zlcgo+ICsKPiArPWl0ZW0gQzwkZmlsZW5hbWU+ICh1bnVzZWQpCj4gKwo+ICtUaGUgbmFtZSBv ZiB0aGUgZmlsZSB0byB3aGljaCB0aGUgZ2VuZXJhdGVkIG91dHB1dCB3aWxsIGJlIHdyaXR0ZW4g dG8uCj4gK1RoaXMgcGFyYW1ldGVyIGlzIGN1cnJlbnRseSB1bnVzZWQgYW5kIGhhcyBubyBlZmZl Y3QuCj4gKwo+ICs9aXRlbSBDPCRjZmc+Cj4gKwo+ICtUaGUgaGFzaCB0aGF0IHJlcHJlc2VudHMg dGhlIGVudGlyZSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4uCj4gK1RoaXMg aGFzaCBpcyBleHBlY3RlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0Ogo+ICsKPiArICAg IHsKPiArCWlkcyA9PiB7Cj4gKwkgICAgZm9vID0+IHsKPiArCQlrZXkgPT4gdmFsdWUsCj4gKwkJ Li4uCj4gKwkgICAgfSwKPiArCSAgICBiYXIgPT4gewo+ICsJCWtleSA9PiB2YWx1ZSwKPiArCQku Li4KPiArCSAgICB9LAo+ICsJfSwKPiArCW9yZGVyID0+IHsKPiArCSAgICBmb28gPT4gMSwKPiAr CSAgICBiYXIgPT4gMiwKPiArCX0sCj4gKyAgICB9Cgphbnkgb3RoZXIgdG9wLWxldmVsIGtleXMg d2lsbCBiZSBpZ25vcmVkIChpdCdzIG9rYXkgdG8gcGFzcyBpbiBgZGlnZXN0YAphcyB3ZWxsLCBm b3IgZXhhbXBsZSkuCgo+ICsKPiArPWl0ZW0gQzwkYWxsb3dfdW5rbm93bj4KPiArCj4gK1doZXRo ZXIgdG8gYWxsb3cgd3JpdGluZyBzZWN0aW9ucyB3aXRoIGFuIHVua25vd24gQzx0eXBlPi4KPiAr Cj4gKz1iYWNrCj4gKwo+ICs9Y3V0Cj4gKwo+ICBzdWIgd3JpdGVfY29uZmlnIHsKPiAgICAgIG15 ICgkY2xhc3MsICRmaWxlbmFtZSwgJGNmZywgJGFsbG93X3Vua25vd24pID0gQF87Cj4gIAo+IEBA IC03OTgsNiArMTM2Niw0NSBAQCBzdWIgYXNzZXJ0X2lmX21vZGlmaWVkIHsKPiAgICAgIFBWRTo6 VG9vbHM6OmFzc2VydF9pZl9tb2RpZmllZCgkY2ZnLT57ZGlnZXN0fSwgJGRpZ2VzdCk7Cj4gIH0K PiAgCj4gKz1wb2QKPiArCj4gKz1oZWFkMyBkZWxldGVfZnJvbV9jb25maWcKPiArCj4gKyAgICAk Y29uZmlnID0gUFZFOjpFeGFtcGxlOjpCYXNlUGx1Z2luLT5kZWxldGVfZnJvbV9jb25maWcoJGNv bmZpZywgJG9wdGlvbl9zY2hlbWEsICRuZXdfb3B0aW9ucywgJHRvX2RlbGV0ZSkKPiArICAgICRj b25maWcgPSAkY2xhc3MtPmRlbGV0ZV9mcm9tX2NvbmZpZygkY29uZmlnLCAkb3B0aW9uX3NjaGVt YSwgJG5ld19vcHRpb25zLCAkdG9fZGVsZXRlKQo+ICsKPiArQ29udmVuaWVuY2UgbWV0aG9kIHRv IGRlbGV0ZSBrZXkgZnJvbSBhIGhhc2ggb2YgY29uZmlndXJlZCBJPHByb3BlcnRpZXM+IHdoaWNo Cj4gK3BlcmZvcm1zIG5lY2Vzc2FyeSBjaGVja3MgYmVmb3JlaGFuZC4KCnRoaXMgd2hvbGUgcGFy dCBoZXJlIGlzIHZlcnkgY29uZnVzaW5nLCBhbmQgYWxzbywgdGhpcyBpcyBub3QgZXZlbiBwYXJ0 Cm9mIHRoZSBwbHVnaW4gaW50ZXJmYWNlIGF0IGFsbCwgaXQncyBqdXN0IGEgY29udmVuaWVuY2Ug aGVscGVyIG9wZXJhdGluZwpvbiBhIHNpbmdsZSBzZWN0aW9uJ3MgY29uZmlnIGRhdGEuLgoKd2hh dCBpdCBkb2VzIGlzIGRlbGV0ZSBmcm9tICRjb25maWcgaWYgYWxsb3dlZCAobm90IHJlcXVpcmVk IG9yIGZpeGVkIG9yCnNldCBpdCBpbiB0aGUgc2FtZSBnbykuCgo+ICsKPiArTm90ZTogVGhlIHBh c3NlZCBDPCRjb25maWc+IGlzIG1vZGlmaWVkIGluIHBsYWNlIGFuZCBhbHNvIHJldHVybmVkLgo+ ICsKPiArPW92ZXIKPiArCj4gKz1pdGVtIEM8JGNvbmZpZz4KPiArCj4gK1RoZSBzZWN0aW9uJ3Mg Y29uZmlndXJhdGlvbiB0aGF0IHRoZSBnaXZlbiBJPHByb3BlcnRpZXM+IGluIEM8JHRvX2RlbGV0 ZT4gc2hvdWxkCj4gK2JlIGRlbGV0ZWQgZnJvbS4KPiArCj4gKz1pdGVtIEM8JG9wdGlvbl9zY2hl bWE+Cj4gKwo+ICtUaGUgc2NoZW1hIG9mIHRoZSBJPHByb3BlcnRpZXM+IGFzc29jaWF0ZWQgd2l0 aCBDPCRjb25maWc+LiBTZWUgdGhlIEM8b3B0aW9ucz4KPiArbWV0aG9kLgo+ICsKPiArPWl0ZW0g QzwkbmV3X29wdGlvbnM+Cj4gKwo+ICtUaGUgSTxwcm9wZXJ0aWVzPiB3aGljaCBhcmUgdG8gYmUg YWRkZWQgdG8gQzwkY29uZmlnPi4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kCj4gK2RvZXNuJ3QgYWRk IGFueSBJPHByb3BlcnRpZXM+IGl0c2VsZjsgdGhpcyBpcyB0byBwcm9oaWJpdCBzaW11bHRhbmVv dXNseQo+ICtzZXR0aW5nIGFuZCBkZWxldGluZyB0aGUgc2FtZSBJPHByb3BlcnR5Pi4KPiArCj4g Kz1pdGVtIEM8JHRvX2RlbGV0ZT4KPiArCj4gK0EgcmVmZXJlbmNlIHRvIGFuIGFycmF5IGNvbnRh aW5pbmcgdGhlIG5hbWVzIG9mIHRoZSBJPHByb3BlcnRpZXM+IHRvIGRlbGV0ZQo+ICtmcm9tIEM8 JGNvbmZpZz4uCj4gKwo+ICs9YmFjawo+ICsKPiArPWN1dAo+ICsKPiAgc3ViIGRlbGV0ZV9mcm9t X2NvbmZpZyB7Cj4gICAgICBteSAoJGNvbmZpZywgJG9wdGlvbl9zY2hlbWEsICRuZXdfb3B0aW9u cywgJHRvX2RlbGV0ZSkgPSBAXzsKPiAgCj4gLS0gCj4gMi4zOS4yCj4gCj4gCj4gCj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBwdmUtZGV2ZWwgbWFp bGluZyBsaXN0Cj4gcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCj4gaHR0cHM6Ly9saXN0cy5w cm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCj4gCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHZlLWRldmVsIG1haWxp bmcgbGlzdApwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94 LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCg==