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 256271FF163 for ; Thu, 24 Oct 2024 09:41:30 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 708B88EEA; Thu, 24 Oct 2024 09:42:08 +0200 (CEST) Date: Thu, 24 Oct 2024 09:42:00 +0200 (CEST) From: =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= To: "DERUMIER, Alexandre" , "pve-devel@lists.proxmox.com" Message-ID: <1438328354.1331.1729755720501@webmail.proxmox.com> In-Reply-To: References: <20240930113153.2896648-1-alexandre.derumier@groupe-cyllene.com> <723920338.717.1729678408238@webmail.proxmox.com> MIME-Version: 1.0 X-Priority: 3 Importance: Normal X-Mailer: Open-Xchange Mailer v7.10.6-Rev69 X-Originating-Client: open-xchange-appsuite X-SPAM-LEVEL: Spam detection results: 0 AWL -0.202 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. [lvmqcow2plugin.pm, lvmthinplugin.pm, cyllene.com, pbsplugin.pm, esxiplugin.pm, storage.pm, btrfsplugin.pm] URI_NOVOWEL 0.5 URI hostname has long non-vowel sequence Subject: Re: [pve-devel] [PATCH v2 pve-storage 2/2] add lvmqcow2 plugin: (lvm with external qcow2 snapshot) 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" Cj4gREVSVU1JRVIsIEFsZXhhbmRyZSA8YWxleGFuZHJlLmRlcnVtaWVyQGdyb3VwZS1jeWxsZW5l LmNvbT4gaGF0IGFtIDIzLjEwLjIwMjQgMTU6NDUgQ0VTVCBnZXNjaHJpZWJlbjoKPiAKPiAgCj4g Pj5JIGFtIG5vdCB5ZXQgY29udmluY2VkIHRoaXMgaXMgc29tZWhvdyBhIGdvb2QgaWRlYSwgYnV0 IG1heWJlIHlvdSBjYW4KPiA+PmNvbnZpbmNlIG1lIG90aGVyd2lzZSA7KQoKSSBtYXliZSBqdWRn ZWQgdGhpcyB0b28gcXVpY2tseSAtIEkgdGhvdWdodCB0aGlzIHdhcyBjb21iaW5pbmcgTFZNICsg YSBkaXItYmFzZWQgc3RvcmFnZSwgYnV0IHRoaXMgaXMgcHV0dGluZyB0aGUgcWNvdzIgb3Zlcmxh eXMgb24gTFZzLCB3aGljaCBJIG1pc3NlZCBvbiB0aGUgZmlyc3QgcGFzcyEKCj4gPj52YXJpYW50 IEE6IHRoaXMgaXMganVzdCB1c2VmdWwgZm9yIHZlcnkgc2hvcnQtbGl2ZWQgc25hcHNob3RzCj4g Pj52YXJpYW50IEI6IHRoZXNlIHNuYXBzaG90cyBhcmUgc3VwcG9zZWQgdG8gYmUgbG9uZy1saXZl ZAo+IAo+IENhbiB5b3UgZGVmaW5lZCAic2hvcnQgIi8gImxvbmciICA/IGFuZCB0aGUgZGlmZmVy ZW50IHVzZWNhc2UgPwo+Cj4gYmVjYXVzZSBmb3IgbWUsIGEgc25hcHNob3QgaXMgYSBzbmFwc2hv dC4gU29tZXRpbWUgSSB0YWtlIGEgc25hcHNob3QKPiBiZWZvcmUgZG9pbmcgc29tZSBjcml0aWNh bCBjaGFuZ2VzLCBidXQgSSBjYW4ndCBrbm93biBpZiBJIG5lZWQgdG8KPiByb2xsYmFjayBpbiBu ZXh0IDJoLCBvciBuZXh0IG1vbnRoLgoKeWVzLCB0aGlzIHdvdWxkIGJlIGFuIGV4YW1wbGUgb2Yg YSBzaG9ydC1saXZlZCBzbmFwc2hvdAogCj4gSSB0aGluayB0aGF0ICJsb25nLWxpdmVkIiB1c2Vj YXNlIGlzIGJhY2t1cCAoYnV0IHdlIGRvbid0IG5lZWQgaXQpLAo+IG9yIHJlcGxpY2F0aW9uICh0 aGlzIGNvdWxkIGFwcGx5IGhlcmUsIGlmIHdlIHdhbnQgdG8gYWRkIHJlcGxpY2F0aW9uCj4gZm9y IGRpc2FzdGVyIHJlY292ZXJ5KQoKYmFja3VwIHdvdWxkIGFsc28gYmUgc2hvcnQtbGl2ZWQgdXN1 YWxseSAodGhlIHNuYXBzaG90IGlzIGp1c3QgdG8gdGFrZSB0aGUgYmFja3VwLCBub3QgdG8ga2Vl cCBhIGJhY2t1cCkuIGxvbmctbGl2ZWQgdXN1YWxseSBpcyBzb21ldGhpbmcgbGlrZSAidGFrZSBk YWlseSBzbmFwc2hvdCBhbmQga2VlcCBmb3IgYSBmZXcgd2Vla3MgZm9yIGZpbGUgcmVjb3Zlcnki LCBpbiBhZGRpdGlvbiB0byByZWd1bGFyIGJhY2t1cHMuIG9yICJzbmFwc2hvdCBiZWNhdXNlIHdl IGp1c3QgaGFkIGFuIGluY2lkZW5jZSBhbmQgbWlnaHQgbmVlZCB0aGlzIGZvciBmb3JlbnNpY3Mg aW4gYSBmZXcgbW9udGhzIiAoY2FuIGFsc28gYmUgc29sdmVkIHdpdGggYmFja3Vwcywgb2YgY291 cnNlIDspKS4KCnRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGlzIC0gZm9yIHNo b3J0LWxpdmVkIHNuYXBzaG90cyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgcmVsYXRlZCB0byBz bmFwc2hvdHMgZXhpc3RpbmcgYXJlIG5vdCB0aGF0IGltcG9ydGFudC4gSSBjYW4gbGl2ZSB3aXRo IGEgZmV3IGhvdXJzIG9mIGRlZ3JhZGVkIHBlcmZvcm1hbmNlLCBpZiB0aGUgc25hcHNob3QgaXMg cGFydCBvZiBzb21lIGltcG9ydGFudCBwcm9jZXNzL3dvcmsgZmxvdy4gd2l0aCBsb25nLWxpdmVk IHNuYXBzaG90cyB0aGVyZSBpcyBhIHJlcXVpcmVtZW50IGZvciB0aGVtIHRvIG5vdCBodXJ0IHBl cmZvcm1hbmNlIGp1c3QgYnkgZXhpc3RpbmcsIGJlY2F1c2Ugb3RoZXJ3aXNlIHlvdSBjYW4ndCB1 c2UgdGhlbS4gdGhlcmUgaXMgYSBzZWNvbmQgcmVhc29uIHdoeSBsb25nLWxpdmVkIHNuYXBzaG90 cyBjYW4gYmUgaW1wb3NzaWJsZSAtIGlmIHlvdSBuZWVkIHRvIGRlY2lkZSB1cC1mcm9udCBob3cg ImJpZyIgdGhlIGRlbHRhIG9mIHRoYXQgc25hcHNob3QgY2FuIGdyb3cgYXQgbW9zdCwgdGhlbiBp biBQVkUgY29udGV4dCwgeW91IGFsd2F5cyBuZWVkIHRvIGFsbG9jYXRlIHRoZSBmdWxsIHZvbHVt ZSBzaXplIChyZWd1bGFyIHRoaWNrIExWTSBoYWQgYm90aCBpc3N1ZXMgLSBiYWQgcGVyZm9ybWFu Y2UsIGFuZCBuZXcgd3JpdGVzIGdvaW5nIGludG8gYSB0aGljayBzbmFwc2hvdCB2b2x1bWUpLgoK aWYgeW91IGNhbiBzdXBwb3J0IGxvbmctbGl2ZWQgc25hcHNob3RzLCB0aGVuIHlvdSBhdXRvbWF0 aWNhbGx5IGFsc28gc3VwcG9ydCBzaG9ydC1saXZlZCBzbmFwc2hvdHMuIHRoZSBvdGhlciBkaXJl Y3Rpb24gZG9lc24ndCBob2xkLiBzaW5jZSBQVkUgb25seSBoYXMgb25lIGtpbmQgb2Ygc25hcHNo b3RzLCB0aGV5IG5lZWQgdG8gYmUgdXNlZnVsIGZvciBsb25nLWxpdmVkIHNuYXBzaG90cy4KCj4g Pj5BIGlzIG5vdCBzb21ldGhpbmcgd2Ugd2FudC4gd2UgaW50ZW50aW9uYWxseSBkb24ndCBoYXZl IG5vbi10aGluIExWTQo+ID4+c25hcHNob3RzIGZvciBleGFtcGxlLgo+IAo+IEFGQUlLLCB3ZSBu ZXZlciBoYWQgaW1wbGVtZW50ZWQgaXQgYmVjYXVzZSBMVk0gc25hc3Bob3QgaXMgc2xvdyBhcwo+ IGhlbGwuKGFzIGEgbHZtIGV4dGVudCBhcmUgYXJvdW5kIDRNQiwgaWYgeW91IHdhbnQgNGsgb24g YSBzbmFwc2hvdCwgeW91Cj4gbmVlZCB0byByZXJlYWQgYW5kIHJld3JpdGUgdGhlIDRNQiwgIHNv IGFyb3VuZCAxMDAweCBvdmVyLQo+IGFtcGxpZmljYXRpb24gYW5kIHNsb3cgaW9wcykKCnNlZSBh Ym92ZSAtIHRoZXJlJ3MgdHdvIGlzc3Vlcywgb25lIGlzIHBlcmZvcm1hbmNlLCB0aGUgb3RoZXIg aXMgdGhhdCB5b3UgbmVlZCB0byBlaXRoZXIKLSBtYWtlIHRoZSBzbmFwc2hvdCBzbWFsbGVyIHRo YW4gdGhlIG9yaWdpbmFsIHZvbHVtZSAoYW5kIHJpc2sgcnVubmluZyBvdXQgb2Ygc3BhY2UpCi0g bWFrZSB0aGUgc25hcHNob3QgYXMgYmlnIGFzIHRoZSBvcmlnaW5hbCB2b2x1bWUgKGFuZCBibG93 IHVwIHNwYWNlIHJlcXVpcmVtZW50cykKCih0aGljaykgTFZNIHNuYXBzaG90cyBiYXNpY2FsbHkg YmFyZWx5IHdvcmsgZm9yIHRoZSAidGFrZSBhIGNvbnNpc3RlbnQgYmFja3VwIGR1cmluZyBxdWll dCBwZXJpb2RzIiB1c2UgY2FzZSwgYW5kIG5vdCBtdWNoIGVsc2UuCgo+IFRoaXMgaXMgcmVhbGx5 IHRoZSBtYWluIGJsb2NrZXIgZm9yIG15IGN1c3RvbWVycyBtaWdyYXRpbmcgZnJvbSB2bXdhcmUK PiAoYW5kIHRvIGJlIGhvbmVzdCBJIGhhdmUgc29tZSBvZiB0aGVtIGdvaW5nIHRvIG9yYWNsZSBv dmxtICh3aXRoCj4gb3ZpcnQpLCBiZWNhdXNlIG92aXJ0IHN1cHBvcnQgaXQgdGhpcyB3YXkpLiAK Cj4gPj5CIG9uY2UgSSBjcmVhdGUgYSBzaW5nbGUgc25hcHNob3QsIHRoZSAib3JpZ2luYWwiIHN0 b3JhZ2Ugb25seQo+ID4+Y29udGFpbnMgdGhlIGRhdGEgd3JpdHRlbiB1cCB0byB0aGF0IHBvaW50 LCBhbnl0aGluZyBlbHNlIGlzIHN0b3JlZAo+ID4+b24gdGhlICJzbmFwc2hvdCIgc3RvcmFnZS4g dGhpcyBtZWFucyBteSBzbmFwc2hvdCBzdG9yYWdlIG11c3QgYmUgYXQKPiA+PmxlYXN0IGFzIGZh c3QvZ29vZC9zaGFyZWQvLi4gYXMgbXkgb3JpZ2luYWwgc3RvcmFnZS4gaW4gdGhhdCBjYXNlLCBJ Cj4gPj5jYW4ganVzdCB1c2UgdGhlIHNuYXBzaG90IHN0b3JhZ2UgZGlyZWN0bHkgYW5kIGRpdGNo IHRoZSBvcmlnaW5hbAo+ID4+c3RvcmFnZT8KPiAKPiBTb3JyeSwgYnV0IEkgZG9uJ3QgdW5kZXJz dGFuZCB3aHkgeW91IGFyZSB0YWxraW5nIGFib3V0Cj4gb3JpZ2luYWwvc25hcHNob3Qgc3RvcmFn ZSA/IEkgbmV2ZXIgaGF2ZSB0aGlua2VkIHRvIHVzZSBhbm90aGVyIHN0b3JhZ2UKPiBmb3IgZXh0 ZXJuYWwgc25hcHNob3QuCj4gCj4gVGhlIHBhdGNoIGlzIHJlYWxseSB0byBhZGQgZXh0ZXJuYWwg c25hcHNob3Qgb24gc2FtZSBsdm0gc3RvcmFnZSwKPiB0aHJvdWdoIGx2bSBhZGRpdGlvbmFsIHZv bHVtZSwgYnV0IHdpdGggcWNvdzIgZm9ybWF0IHRvIGhhdmUgZ29vZAo+IHBlcmZvcm1hbmNlICh2 cyBzbG93IGx2bSBzbmFwc2hvdCkKCnNlZSBhYm92ZSAtIEkgbWlzcmVhZCBhbmQgYW5zd2VyZWQg dG9vIHF1aWNrbHkuCgpJIHRvb2sgYSBjbG9zZXIgbG9vayBhbmQgcmVwbGllZCBpbmxpbmUgYmVs b3cgd2l0aCBzb21lIGNvbW1lbnRzIC0gbXVjaCBvZiBpdCBtaW1pY3MgdGhlIGNvbW1lbnRzIGZv ciB0aGUgZGlyIHBsdWdpbi4uCgo+ID4gU2lnbmVkLW9mZi1ieTogQWxleGFuZHJlIERlcnVtaWVy IDxhbGV4YW5kcmUuZGVydW1pZXJAZ3JvdXBlLQo+ID4gY3lsbGVuZS5jb20+Cj4gPiAtLS0KPiA+ IMKgc3JjL1BWRS9TdG9yYWdlLnBtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKg IDIgKwo+ID4gwqBzcmMvUFZFL1N0b3JhZ2UvTHZtUWNvdzJQbHVnaW4ucG0gfCA0NjAKPiA+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gwqBzcmMvUFZFL1N0b3JhZ2UvTWFrZWZp bGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMyArLQo+ID4gwqAzIGZpbGVzIGNoYW5nZWQsIDQ2 NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvUFZFL1N0b3JhZ2UvTHZtUWNvdzJQbHVnaW4ucG0KPiA+IAo+ID4gZGlmZiAtLWdpdCBhL3Ny Yy9QVkUvU3RvcmFnZS5wbSBiL3NyYy9QVkUvU3RvcmFnZS5wbQo+ID4gaW5kZXggNTdiMjAzOC4u MTE5OTk4ZiAxMDA3NTUKPiA+IC0tLSBhL3NyYy9QVkUvU3RvcmFnZS5wbQo+ID4gKysrIGIvc3Jj L1BWRS9TdG9yYWdlLnBtCj4gPiBAQCAtMjgsNiArMjgsNyBAQCB1c2UgUFZFOjpTdG9yYWdlOjpQ bHVnaW47Cj4gPiDCoHVzZSBQVkU6OlN0b3JhZ2U6OkRpclBsdWdpbjsKPiA+IMKgdXNlIFBWRTo6 U3RvcmFnZTo6TFZNUGx1Z2luOwo+ID4gwqB1c2UgUFZFOjpTdG9yYWdlOjpMdm1UaGluUGx1Z2lu Owo+ID4gK3VzZSBQVkU6OlN0b3JhZ2U6Okx2bVFjb3cyUGx1Z2luOwo+ID4gwqB1c2UgUFZFOjpT dG9yYWdlOjpORlNQbHVnaW47Cj4gPiDCoHVzZSBQVkU6OlN0b3JhZ2U6OkNJRlNQbHVnaW47Cj4g PiDCoHVzZSBQVkU6OlN0b3JhZ2U6OklTQ1NJUGx1Z2luOwo+ID4gQEAgLTU0LDYgKzU1LDcgQEAg b3VyICRLTk9XTl9FWFBPUlRfRk9STUFUUyA9IFsncmF3K3NpemUnLAo+ID4gJ3RhcitzaXplJywg J3Fjb3cyK3NpemUnLCAndm1kaytzaXplJywKPiA+IMKgUFZFOjpTdG9yYWdlOjpEaXJQbHVnaW4t PnJlZ2lzdGVyKCk7Cj4gPiDCoFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luLT5yZWdpc3RlcigpOwo+ ID4gwqBQVkU6OlN0b3JhZ2U6Okx2bVRoaW5QbHVnaW4tPnJlZ2lzdGVyKCk7Cj4gPiArUFZFOjpT dG9yYWdlOjpMdm1RY293MlBsdWdpbi0+cmVnaXN0ZXIoKTsKPiA+IMKgUFZFOjpTdG9yYWdlOjpO RlNQbHVnaW4tPnJlZ2lzdGVyKCk7Cj4gPiDCoFBWRTo6U3RvcmFnZTo6Q0lGU1BsdWdpbi0+cmVn aXN0ZXIoKTsKPiA+IMKgUFZFOjpTdG9yYWdlOjpJU0NTSVBsdWdpbi0+cmVnaXN0ZXIoKTsKPiA+ IGRpZmYgLS1naXQgYS9zcmMvUFZFL1N0b3JhZ2UvTHZtUWNvdzJQbHVnaW4ucG0KPiA+IGIvc3Jj L1BWRS9TdG9yYWdlL0x2bVFjb3cyUGx1Z2luLnBtCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ ID4gaW5kZXggMDAwMDAwMC4uNjhjODY4Ngo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvc3Jj L1BWRS9TdG9yYWdlL0x2bVFjb3cyUGx1Z2luLnBtCj4gPiBAQCAtMCwwICsxLDQ2MCBAQAo+ID4g K3BhY2thZ2UgUFZFOjpTdG9yYWdlOjpMdm1RY293MlBsdWdpbjsKPiA+ICsKPiA+ICt1c2Ugc3Ry aWN0Owo+ID4gK3VzZSB3YXJuaW5nczsKPiA+ICsKPiA+ICt1c2UgSU86OkZpbGU7Cj4gPiArCj4g PiArdXNlIFBWRTo6VG9vbHMgcXcocnVuX2NvbW1hbmQgdHJpbSk7Cj4gPiArdXNlIFBWRTo6U3Rv cmFnZTo6UGx1Z2luOwo+ID4gK3VzZSBQVkU6OlN0b3JhZ2U6OkxWTVBsdWdpbjsKPiA+ICt1c2Ug UFZFOjpKU09OU2NoZW1hIHF3KGdldF9zdGFuZGFyZF9vcHRpb24pOwo+ID4gKwo+ID4gK3VzZSBi YXNlIHF3KFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luKTsKCmNvdWxkIHdlIGludGVncmF0ZSB0aGlz IGludG8gdGhlIExWTSBwbHVnaW4gaWYgd2UgaW1wbGVtZW50IGl0PyBiYXNpY2FsbHkgYWRkIHRo ZSAic25hcGV4dCIgb3B0aW9uLCB3aGljaCBpcyBmaXhlZCwgYW5kIGlmIGl0IGlzIHNldCwgZGlz YWxsb3cgcm9vdGRpcj8KCnByb2JhYmx5IHNuYXBleHQgc2hvdWxkIGFsc28gYmUgZml4ZWQgZm9y IGRpcigtYmFzZWQpIHN0b3JhZ2VzLCBzaW5jZSB0b2dnbGluZyBpdCB3aGVuIHNuYXBzaG90cyBl eGlzdCB3b3VsZCBicmVhayBhIHRvbiBvZiBzdHVmZj8KCj4gPiArCj4gPiArIyBDb25maWd1cmF0 aW9uCj4gPiArCj4gPiArc3ViIHR5cGUgewo+ID4gK8KgwqDCoCByZXR1cm4gJ2x2bXFjb3cyJzsK PiA+ICt9Cj4gPiArCj4gPiArc3ViIHBsdWdpbmRhdGEgewo+ID4gK8KgwqDCoCByZXR1cm4gewo+ ID4gKyAjY29udGFpbmVyIG5vdCB5ZXQgaW1wbGVtZW50ZWQgI25lZWQgdG8gaW1wbGVtZW50ZWQg ZG0tcWNvdzIKPiA+ICsgY29udGVudCA9PiBbIHtpbWFnZXMgPT4gMSwgcm9vdGRpciA9PiAxfSwg eyBpbWFnZXMgPT4gMSB9XSwKCnRoZW4gcm9vdGRpciBzaG91bGRuJ3QgYmUgbWVudGlvbmVkIGhl cmUgYXQgYWxsPyB0aGUgZmlyc3QgbWVtYmVyIGNvbnRhaW5zIHRoZSBwb3NzaWJsZSBjb250ZW50 IHR5cGVzLCB0aGUgc2Vjb25kIHRoZSBkZWZhdWx0IGlmIG5vIGV4cGxpY2l0IG9uZXMgYXJlIHNl dC4uCgo+ID4gK8KgwqDCoCB9Owo+ID4gK30KPiA+ICsKPiA+ICtzdWIgcHJvcGVydGllcyB7Cj4g PiArwqDCoMKgIHJldHVybiB7Cj4gPiArwqDCoMKgIH07Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBv cHRpb25zIHsKPiA+ICvCoMKgwqAgcmV0dXJuIHsKPiA+ICsgdmduYW1lID0+IHsgZml4ZWQgPT4g MSB9LAo+ID4gKyBub2RlcyA9PiB7IG9wdGlvbmFsID0+IDEgfSwKPiA+ICsgc2hhcmVkID0+IHsg b3B0aW9uYWwgPT4gMSB9LAo+ID4gKyBkaXNhYmxlID0+IHsgb3B0aW9uYWwgPT4gMSB9LAo+ID4g KyBzYWZlcmVtb3ZlID0+IHsgb3B0aW9uYWwgPT4gMSB9LAo+ID4gKyBzYWZlcmVtb3ZlX3Rocm91 Z2hwdXQgPT4geyBvcHRpb25hbCA9PiAxIH0sCj4gPiArIGNvbnRlbnQgPT4geyBvcHRpb25hbCA9 PiAxIH0sCj4gPiArIGJhc2UgPT4geyBmaXhlZCA9PiAxLCBvcHRpb25hbCA9PiAxIH0sCj4gPiAr IHRhZ2dlZF9vbmx5ID0+IHsgb3B0aW9uYWwgPT4gMSB9LAo+ID4gKyBid2xpbWl0ID0+IHsgb3B0 aW9uYWwgPT4gMSB9LAo+ID4gKyBzbmFwZXh0ID0+IHsgZml4ZWQgPT4gMSB9LAo+ID4gK8KgwqDC oCB9Owo+ID4gK30KPiA+ICsKPiA+ICsjIFN0b3JhZ2UgaW1wbGVtZW50YXRpb24KPiA+ICsKPiA+ ICtzdWIgcGFyc2Vfdm9sbmFtZSB7Cj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICR2b2xuYW1lKSA9 IEBfOwo+ID4gKwo+ID4gK8KgwqDCoCBQVkU6OlN0b3JhZ2U6OlBsdWdpbjo6cGFyc2VfbHZtX25h bWUoJHZvbG5hbWUpOwo+ID4gK8KgwqDCoCBteSAkZm9ybWF0ID0gJHZvbG5hbWUgPX4gbS9eKC4q KS1zbmFwLS8gPyAncWNvdzInIDogJ3Jhdyc7Cj4gPiArCj4gPiArwqDCoMKgIGlmICgkdm9sbmFt ZSA9fiBtL14oKHZtfGJhc2UpLShcZCspLVxTKykkLykgewo+ID4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAoJ2ltYWdlcycsICQxLCAkMywgdW5kZWYsIHVuZGVmLCAkMiBlcSAnYmFzZScsCj4gPiAk Zm9ybWF0KTsKPiA+ICvCoMKgwqAgfQoKSSB3b25kZXIgaWYgaGVyZSB3ZSBhbHNvIHdhbnQgdG8g a2VlcCB0aGUgdm9saWQvdm9sbmFtZSBsaWtlIGl0IGlzLCBidXQgbmFtZSB0aGUgTFZzIGZvciBz bmFwc2hvdHMgZGlmZmVyZW50bHk/Cgo+ID4gKwo+ID4gK8KgwqDCoCBkaWUgInVuYWJsZSB0byBw YXJzZSBsdm0gdm9sdW1lIG5hbWUgJyR2b2xuYW1lJ1xuIjsKPiA+ICt9Cj4gPiArCj4gPiArc3Vi IGZpbGVzeXN0ZW1fcGF0aCB7Cj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkdm9sbmFt ZSwgJHNuYXBuYW1lLCAkY3VycmVudF9zbmFwKSA9IEBfOwo+ID4gKwo+ID4gK8KgwqDCoCBteSAo JHZ0eXBlLCAkbmFtZSwgJHZtaWQpID0gJGNsYXNzLT5wYXJzZV92b2xuYW1lKCR2b2xuYW1lKTsK PiA+ICsKPiA+ICvCoMKgwqAgbXkgJHZnID0gJHNjZmctPnt2Z25hbWV9Owo+ID4gKwo+ID4gK8Kg wqDCoCBteSAkcGF0aCA9ICIvZGV2LyR2Zy8kbmFtZSI7Cj4gPiArCj4gPiArwqDCoMKgIGlmKCRz bmFwbmFtZSkgewo+ID4gKyAkcGF0aCA9IGdldF9zbmFwX3ZvbG5hbWUoJHBhdGgsICRzbmFwbmFt ZSk7Cj4gPiArwqDCoMKgIH0gZWxzaWYgKCRjdXJyZW50X3NuYXApIHsKPiA+ICsgJHBhdGggPSAk Y3VycmVudF9zbmFwLT57ZmlsZX07Cj4gPiArwqDCoMKgIH0KCnNlZSBjb21tZW50IGZvciB0aGUg ZGlyIHN0b3JhZ2UgOykKCj4gPiArCj4gPiArwqDCoMKgIHJldHVybiB3YW50YXJyYXkgPyAoJHBh dGgsICR2bWlkLCAkdnR5cGUpIDogJHBhdGg7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBjcmVhdGVf YmFzZSB7Cj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUp ID0gQF87Cj4gPiArCj4gPiArwqDCoMKgIG15ICR2ZyA9ICRzY2ZnLT57dmduYW1lfTsKCm5pdDog dGhpcyBjb3VsZCBtb3ZlIGJlbG93LCBjbG9zZXIgdG8gd2hlcmUgaXQgaXMgdXNlZC4uCgo+ID4g Kwo+ID4gK8KgwqDCoCBteSAoJHZ0eXBlLCAkbmFtZSwgJHZtaWQsICRiYXNlbmFtZSwgJGJhc2V2 bWlkLCAkaXNCYXNlKSA9Cj4gPiArwqDCoMKgwqDCoMKgwqAgJGNsYXNzLT5wYXJzZV92b2xuYW1l KCR2b2xuYW1lKTsKPiA+ICsKPiA+ICvCoMKgwqAgZGllICJjcmVhdGVfYmFzZSBub3QgcG9zc2li bGUgd2l0aCBiYXNlIGltYWdlXG4iIGlmICRpc0Jhc2U7Cj4gPiArCj4gPiArwqDCoMKgIGRpZSAi dW5hYmxlIHRvIGNyZWF0ZSBiYXNlIHZvbHVtZSAtIGZvdW5kIHNuYXBzaG90IiBpZiAkY2xhc3Mt Cj4gPiA+c25hcHNob3RfZXhpc3QoJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSk7Cj4gPiArCj4g PiArwqDCoMKgIG15ICRuZXduYW1lID0gJG5hbWU7Cj4gPiArwqDCoMKgICRuZXduYW1lID1+IHMv XnZtLS9iYXNlLS87Cj4gPiArCj4gPiArwqDCoMKgIG15ICRjbWQgPSBbJy9zYmluL2x2cmVuYW1l JywgJHZnLCAkdm9sbmFtZSwgJG5ld25hbWVdOwo+ID4gK8KgwqDCoCBydW5fY29tbWFuZCgkY21k LCBlcnJtc2cgPT4gImx2cmVuYW1lICckdmcvJHZvbG5hbWUnID0+Cj4gPiAnJHZnLyRuZXduYW1l JyBlcnJvciIpOwo+ID4gKwo+ID4gK8KgwqDCoCAjIHNldCBpbmFjdGl2ZSwgcmVhZC1vbmx5IGZs YWdzCj4gPiArwqDCoMKgICRjbWQgPSBbJy9zYmluL2x2Y2hhbmdlJywgJy1hbicsICctcHInLCAi JHZnLyRuZXduYW1lIl07Cj4gPiArwqDCoMKgIGV2YWwgeyBydW5fY29tbWFuZCgkY21kKTsgfTsK PiA+ICvCoMKgwqAgd2FybiAkQCBpZiAkQDsKPiA+ICsKPiA+ICvCoMKgwqAgbXkgJG5ld3ZvbG5h bWUgPSAkbmV3bmFtZTsKPiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJuICRuZXd2b2xuYW1lOwo+ID4g K30KPiA+ICsKPiA+ICtzdWIgY2xvbmVfaW1hZ2Ugewo+ID4gK8KgwqDCoCBteSAoJGNsYXNzLCAk c2NmZywgJHN0b3JlaWQsICR2b2xuYW1lLCAkdm1pZCwgJHNuYXApID0gQF87Cj4gPiArCj4gPiAr wqDCoMKgIGRpZSAiY2FuJ3QgY2xvbmUgaW1hZ2VzIGluIGx2bSBzdG9yYWdlXG4iOwo+ID4gK30K PiA+ICsKPiA+ICtzdWIgYWxsb2NfaW1hZ2Ugewo+ID4gK8KgwqDCoCBteSAoJGNsYXNzLCAkc3Rv cmVpZCwgJHNjZmcsICR2bWlkLCAkZm10LCAkbmFtZSwgJHNpemUpID0gQF87Cj4gPiArCj4gPiAr wqDCoMKgIGRpZSAidW5zdXBwb3J0ZWQgZm9ybWF0ICckZm10JyIgaWYgJGZtdCBuZSAncmF3JzsK CmhlcmUgSSBhbHNvIHdvbmRlciB3aGV0aGVyIGl0IHdvdWxkbid0IGJlICJlYXNpZXIiIHRvIG9u bHkgYWxsb2NhdGUgcWNvdzIgZm9ybWF0dGVkIExWcyAoYWxzbyBmb3IgdGhlIGluaXRpYWwgYWxs b2NhdGlvbik/CgpvdGhlcndpc2UsIHRoaXMgaXMgYmFzaWNhbGx5IGFsbG9jX2ltYWdlIGZyb20g dGhlIExWTVBsdWdpbiwganVzdCB3aXRoIHRoZSBleHRyYSB0YWdzIGFkZGVkLCB3aGljaCBjb3Vs ZCBhbHNvIGJlIGRvbmUgd2hlcmUgdGhlIHNuYXBzaG90cyBhcmUgaGFuZGxlZCBmdXJ0aGVyIGJl bG93Li4KCj4gPiArCj4gPiArwqDCoMKgIGRpZSAiaWxsZWdhbCBuYW1lICckbmFtZScgLSBzaG91 bGQgYmUgJ3ZtLSR2bWlkLSonXG4iCj4gPiArIGlmwqAgJG5hbWUgJiYgJG5hbWUgIX4gbS9edm0t JHZtaWQtLzsKPiA+ICsKPiA+ICvCoMKgwqAgbXkgJHZncyA9IFBWRTo6U3RvcmFnZTo6TFZNUGx1 Z2luOjpsdm1fdmdzKCk7Cj4gPiArCj4gPiArwqDCoMKgIG15ICR2ZyA9ICRzY2ZnLT57dmduYW1l fTsKPiA+ICsKPiA+ICvCoMKgwqAgZGllICJubyBzdWNoIHZvbHVtZSBncm91cCAnJHZnJ1xuIiBp ZiAhZGVmaW5lZCAoJHZncy0+eyR2Z30pOwo+ID4gKwo+ID4gK8KgwqDCoCBteSAkZnJlZSA9IGlu dCgkdmdzLT57JHZnfS0+e2ZyZWV9KTsKPiA+ICsKPiA+ICvCoMKgwqAgZGllICJub3QgZW5vdWdo IGZyZWUgc3BhY2UgKCRmcmVlIDwgJHNpemUpXG4iIGlmICRmcmVlIDwgJHNpemU7Cj4gPiArCj4g PiArwqDCoMKgICRuYW1lID0gJGNsYXNzLT5maW5kX2ZyZWVfZGlza25hbWUoJHN0b3JlaWQsICRz Y2ZnLCAkdm1pZCkKPiA+ICsgaWYgISRuYW1lOwo+ID4gKwo+ID4gK8KgwqDCoCBteSAkdGFncyA9 IFsicHZlLXZtLSR2bWlkIl07Cj4gPiArwqDCoMKgIGlmICgkbmFtZSA9fiBtL14oKCh2bXxiYXNl KS0oXGQrKS1kaXNrLShcZCspKSkoLXNuYXAtKC4qKSk/Lykgewo+ID4gK8KgwqDCoMKgwqDCoMKg IHB1c2ggQCR0YWdzLCAiXEBwdmUtJDEiOwo+ID4gK8KgwqDCoCB9CgpJIGRvbid0IGxpa2UgdGhp cyBwYXJ0IGZvciB0d28gcmVhc29uczoKCjEuIHdpdGhvdXQgdGhpcywgYWxsb2NfaW1hZ2UgaXMg aWRlbnRpY2FsIHRvIExWTVBsdWdpbidzIChzZWUgYWJvdmUvYmVsb3cpCjIuIHRoZSB3YXkgdGhl IHNuYXBzaG90IGlzIGVuY29kZWQgaW4gdGhlIHZvbG5hbWUgbWVhbnMgSSBjYW4gInB2ZXNtIGFs bG9jIiBzb21ldGhpbmcgd2l0aCBhIHNuYXBzaG90IHZvbG5hbWUgYW5kIGJyZWFrIHRoaW5ncy4u CgpJIHRoaW5rIHRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQ6Ci0gYWxsb2NfaW1hZ2Ugc2hvdWxk IGFsbG93IChvbmx5PykgcWNvdzIKLSBpdCBzaG91bGQgdXNlIGEgY3VzdG9tIGhlbHBlciBmb3Ig dGhlIGFjdHVhbCBsdmNyZWF0ZSwgYnV0IGJlIHJlc3RyaWN0ZWQgdG8gInByb3BlciIgdm9sdW1l IG5hbWVzCi0gaXQgc2hvdWxkIHVzZSBhbm90aGVyIGhlbHBlciBmb3IgdGhlIHFjb3cyIGZvcm1h dHRpbmcKLSB2b2x1bWVfc25hcHNob3Qgc2hvdWxkIHVzZSB0aGUgc2FtZSBoZWxwZXJzLCBidXQg Y2FsbCB0aGVtIHdpdGggYSBkaWZmZXJlbnQgTFYgbmFtZQoKdGhlIHNhbWUgYWxzbyBhcHBsaWVz IHRvIGZyZWVfaW1hZ2UsIGZvciBzaW1pbGFyIHJlYXNvbnMgKGRvbid0IGFsbG93IHRvIGNhbGwg ZnJlZV9pbWFnZSB3aXRoIGEgc25hcHNob3QgZGlyZWN0bHksIGJ1dCB1c2UgYSBjb21tb24gaGVs cGVyIGZvciBmcmVlX2ltYWdlIGFuZCB2b2x1bWVfc25hcHNob3RfZGVsZXRlKQoKPiA+ICsKPiA+ ICvCoMKgwqAgUFZFOjpTdG9yYWdlOjpMVk1QbHVnaW46Omx2Y3JlYXRlKCR2ZywgJG5hbWUsICRz aXplLCAkdGFncyk7Cj4gPiArCj4gPiArwqDCoMKgIHJldHVybiAkbmFtZTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3ViIHZvbHVtZV9zbmFwc2hvdF9pbmZvIHsKPiA+ICvCoMKgwqAgbXkgKCRjbGFzcywg JHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSkgPSBAXzsKPiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJu ICRjbGFzcy0+bGlzdF9zbmFwc2hvdHMoJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSk7Cgp3aHkg aGF2ZSB0d28gcHVibGljIHN1YnMgZm9yIHRoaXM/IHRoZSAkY3VycmVudF9vbmx5IHdvdWxkIG5v dCBiZSBuZWVkZWQgaWYgdGhlIHZvbHVtZSBpdHNlbGYgd291bGQgYWxzbyBiZSB0aGUgY3VycmVu dCBzbmFwc2hvdC4uCgo+ID4gK30KPiA+ICsKPiA+ICtzdWIgYWN0aXZhdGVfdm9sdW1lIHsKPiA+ ICvCoMKgwqAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2ZnLCAkdm9sbmFtZSwgJHNuYXBuYW1l LCAkY2FjaGUpID0gQF87Cj4gPiArCj4gPiArwqDCoMKgIG15ICRsdm1fYWN0aXZhdGVfbW9kZSA9 ICdleSc7Cj4gPiArwqDCoMKgIG15ICR0YWcgPSB1bmRlZjsKCiR0YWcgaXMgdW5kZWYKCj4gPiAr Cj4gPiArwqDCoMKgICNhY3RpdmF0ZSB2b2x1bWUgJiYgYWxsIHZvbHVtZXMgc25hcHNob3RzIGJ5 IHRhZwo+ID4gK8KgwqDCoCBpZigkdm9sbmFtZSA9fiBtL14oKCh2bXxiYXNlKS0oXGQrKS1kaXNr LShcZCspKSkoLXNuYXAtKC4qKSk/LykKPiA+IHsKPiA+ICsgJHRhZyA9ICJcQHB2ZS12bS0kNC1k aXNrLSQ1IjsKCmhlcmUgb25seSB0aGUgZGlzayBpdHNlbGYgaXMgcHV0IGludG8gdGhlIHRhZywg dGhlIG9wdGlvbmFsIHNuYXAgcGFydCBpc24ndC4uIGFuZCAkc25hcG5hbWUgaXMgaWdub3JlZCBh cyB3ZWxsCgo+ID4gK8KgwqDCoCB9CgphbmQgd2hhdCBpZiB0aGUgcmVnZXggZGlkbid0IG1hdGNo PwoKPiA+ICsKPiA+ICvCoMKgwqAgbXkgJGNtZCA9IFsnL3NiaW4vbHZjaGFuZ2UnLCAiLWEkbHZt X2FjdGl2YXRlX21vZGUiLCAkdGFnXTsKCnNvIHRoaXMgd2lsbCBvbmx5IGV2ZXIgYWN0aXZhdGUg dGhlICJtYWluIiB2b2x1bWU/Cgo+ID4gK8KgwqDCoCBydW5fY29tbWFuZCgkY21kLCBlcnJtc2cg PT4gImNhbid0IGFjdGl2YXRlIExWICckdGFnJyIpOwo+ID4gKwo+ID4gK8KgwqDCoCAkY21kID0g Wycvc2Jpbi9sdmNoYW5nZScsICctLXJlZnJlc2gnLCAkdGFnXTsKPiA+ICvCoMKgwqAgcnVuX2Nv bW1hbmQoJGNtZCwgZXJybXNnID0+ICJjYW4ndCByZWZyZXNoIExWICckdGFnJyBmb3IKPiA+IGFj dGl2YXRpb24iKTsKCnRoaXMgc2hvdWxkCi0gbm90IHVzZSAkdm9sbmFtZSB0byB0cmFuc2ZlciAk c25hcG5hbWUsIGJ1dCBwYXNzIGluIHRoZSB2b2xuYW1lIGNvbnRhaW5lZCBpbiB0aGUgdm9saWQK LSB1c2UgJHNuYXBuYW1lIDspCgo+ID4gK30KPiA+ICsKPiA+ICtzdWIgZGVhY3RpdmF0ZV92b2x1 bWUgewo+ID4gK8KgwqDCoCBteSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNjZmcsICR2b2xuYW1lLCAk c25hcG5hbWUsICRjYWNoZSkgPSBAXzsKPiA+ICsKPiA+ICvCoMKgwqAgbXkgJHRhZyA9IHVuZGVm Owo+ID4gK8KgwqDCoCAjZGVhY3RpdmF0ZSB2b2x1bWUgJiYgYWxsIHZvbHVtZXMgc25hc3Bob3Rz IGJ5IHRhZwo+ID4gK8KgwqDCoCBpZigkdm9sbmFtZSA9fiBtL14oKCh2bXxiYXNlKS0oXGQrKS1k aXNrLShcZCspKSkoLXNuYXAtKC4qKSk/LykKPiA+IHsKPiA+ICsgJHRhZyA9ICJcQHB2ZS12bS0k NC1kaXNrLSQ1IjsKPiA+ICvCoMKgwqAgfQoKc2FtZSBhcyBmb3IgYWN0aXZhdGVfdm9sdW1lIGFw cGxpZXMgaGVyZSBhcyB3ZWxsLi4KCj4gPiArCj4gPiArwqDCoMKgIG15ICRjbWQgPSBbJy9zYmlu L2x2Y2hhbmdlJywgJy1hbG4nLCAkdGFnXTsKPiA+ICvCoMKgwqAgcnVuX2NvbW1hbmQoJGNtZCwg ZXJybXNnID0+ICJjYW4ndCBkZWFjdGl2YXRlIExWICckdGFnJyIpOwo+ID4gK30KPiA+ICsKPiA+ ICtzdWIgdm9sdW1lX3Jlc2l6ZSB7Cj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3Rv cmVpZCwgJHZvbG5hbWUsICRzaXplLCAkcnVubmluZykgPSBAXzsKPiA+ICsKPiA+ICvCoMKgwqAg I3dlIHNob3VsZCByZXNpemUgdGhlIGJhc2UgaW1hZ2UgYW5kIHBhcmVudHMgc25hcHNob3RzLAo+ ID4gK8KgwqDCoCAjYnV0IGhvdyB0byBtYW5hZ2Ugcm9sbGJhY2sgPwo+ID4gKwo+ID4gK8KgwqDC oCBkaWUgImNhbid0IHJlc2l6ZSBpZiBzbmFzcGhvdHMgZXhpc3QiIGlmICRjbGFzcy0KPiA+ID5z bmFwc2hvdF9leGlzdCgkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lKTsKCkkgZG9uJ3QgdGhpbmsg cWVtdSByZXF1aXJlcyBiYWNraW5nIGZpbGUgYW5kIG92ZXJsYXkgc2l6ZXMgdG8gYWdyZWUgLSBq dXN0IHRoYXQgaWYgeW91IHdyaXRlIGJhY2sgKGNvbW1pdCkgdXAgdGhlIGNoYWluLCB5b3UgbWln aHQgbmVlZCB0byByZXNpemUgdGhlIGJhY2tpbmcgZmlsZSB0byBhY2NvbW1vZGF0ZSB0aGUgYWRk aXRpb25hbCBkYXRhL3NwYWNlLiBzbyByZXNpemluZyBzaG91bGQgYmUgZmluZSAoaW4gdGhlb3J5 IGF0IGxlYXN0KT8gYWxzbyBzZWUgdGhlIGRvY3MgZm9yIGBxZW11LWltZyBjb21taXRgLgoKPiA+ ICsKPiA+ICvCoMKgwqAgcmV0dXJuIDE7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiB2b2x1bWVfc25h cHNob3Qgewo+ID4gK8KgwqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1l LCAkc25hcCkgPSBAXzsKPiA+ICsKPiA+ICvCoMKgwqAgJGNsYXNzLT5hY3RpdmF0ZV92b2x1bWUo JHN0b3JlaWQsICRzY2ZnLCAkdm9sbmFtZSwgdW5kZWYsIHt9KTsKPiA+ICsKPiA+ICvCoMKgwqAg bXkgJGN1cnJlbnRfcGF0aCA9ICRjbGFzcy0+cGF0aCgkc2NmZywgJHZvbG5hbWUsICRzdG9yZWlk KTsKPiA+ICvCoMKgwqAgbXkgJGN1cnJlbnRfZm9ybWF0ID0KPiA+IChQVkU6OlN0b3JhZ2U6OlBs dWdpbjo6ZmlsZV9zaXplX2luZm8oJGN1cnJlbnRfcGF0aCkpWzFdOwo+ID4gK8KgwqDCoCBteSAk c25hcHBhdGggPSBnZXRfc25hcF92b2xuYW1lKCRjdXJyZW50X3BhdGgsICRzbmFwKTsKPiA+ICsK PiA+ICvCoMKgwqAgbXkgJHNuYXB2b2xuYW1lID0gZ2V0X3NuYXBfdm9sbmFtZSgkdm9sbmFtZSwg JHNuYXApOwo+ID4gK8KgwqDCoCAjYWxsb2NhdGUgbHZtIHNuYXBzaG90IHZvbHVtZQo+ID4gK8Kg wqDCoCBteSAoJHZ0eXBlLCAkbmFtZSwgJHZtaWQsICRiYXNlbmFtZSwgJGJhc2V2bWlkLCAkaXNC YXNlKSA9Cj4gPiArICRjbGFzcy0+cGFyc2Vfdm9sbmFtZSgkdm9sbmFtZSk7Cj4gPiArwqDCoMKg IG15ICRzaXplID0gJGNsYXNzLT52b2x1bWVfc2l6ZV9pbmZvKCRzY2ZnLCAkc3RvcmVpZCwgJHZv bG5hbWUsCj4gPiA1KTsKPiA+ICvCoMKgwqAgI2FkZCAxMDBNIGZvciBxY293MiBoZWFkZXJzCj4g PiArwqDCoMKgICRzaXplID0gaW50KCRzaXplLzEwMjQpICsgKDEwMCoxMDI0KTsKCmEgcG9pbnRl ciB3aGVyZSB0aGF0IDEwME0gY29tZXMgZnJvbSB3b3VsZCBiZSBuaWNlIDspCgo+ID4gKwo+ID4g K8KgwqDCoCAkY2xhc3MtPmFsbG9jX2ltYWdlKCRzdG9yZWlkLCAkc2NmZywgJHZtaWQsICdyYXcn LCAkc25hcHZvbG5hbWUsCj4gPiAkc2l6ZSk7CgpzbyB0aGlzIGNvdWxkIGluc3RlYWQgdXNlIHRo ZSByZWd1bGFyIGFsbG9jX2ltYWdlIGZyb20gc3RvY2sgTFZNLCBhbmQgdGhlbiBzZXQgdGhlIHRh Z3MgaGVyZSBpZiB3ZSB3YW50IHRvIGtlZXAgYWxsb2NfaW1hZ2UgYXMgcmF3LW9ubHkuLiB3aGlj aCBJIGRvbid0IHRoaW5rIHdlIHJlYWxseSB3YW50IDspCgo+ID4gKwo+ID4gK8KgwqDCoCAjIGNy ZWF0ZSB0aGUgcWNvdzIgZnMKPiA+ICvCoMKgwqAgZXZhbCB7Cj4gPiArwqDCoMKgwqDCoMKgwqAg bXkgJGNtZCA9IFsnL3Vzci9iaW4vcWVtdS1pbWcnLCAnY3JlYXRlJywgJy1iJywKPiA+ICRjdXJy ZW50X3BhdGgsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICctRics ICRjdXJyZW50X2Zvcm1hdCwgJy1mJywgJ3Fjb3cyJywgJHNuYXBwYXRoXTsKPiA+ICvCoMKgwqDC oMKgwqDCoCBteSAkb3B0aW9ucyA9ICJleHRlbmRlZF9sMj1vbiwiOwo+ID4gK8KgwqDCoMKgwqDC oMKgICRvcHRpb25zIC49Cj4gPiBQVkU6OlN0b3JhZ2U6OlBsdWdpbjo6cHJlYWxsb2NhdGlvbl9j bWRfb3B0aW9uKCRzY2ZnLCAncWNvdzInKTsKPiA+ICvCoMKgwqDCoMKgwqDCoCBwdXNoIEAkY21k LCAnLW8nLCAkb3B0aW9uczsKPiA+ICvCoMKgwqDCoMKgwqDCoCBydW5fY29tbWFuZCgkY21kKTsK PiA+ICvCoMKgwqAgfTsKCnNlZSBjb21tZW50IGZvciBhbGxvY19pbWFnZSBhYm92ZS4uCgo+ID4g K8KgwqDCoCBpZiAoJEApIHsKPiA+ICsgZXZhbCB7ICRjbGFzcy0+ZnJlZV9pbWFnZSgkc3RvcmVp ZCwgJHNjZmcsICRzbmFwdm9sbmFtZSwgMCkgfTsKCkkgZ3Vlc3MgdGhpcyBpcyBva2F5LCBidXQg aXQgd291bGQgcmVhZCBhIGJpdCBjbGVhbmVyIGlmIHRoaXMgd291bGQgY2FsbCB2b2x1bWVfc25h cHNob3RfZGVsZXRlLi4KCj4gPiArIHdhcm4gJEAgaWYgJEA7Cj4gPiArwqDCoMKgIH0KPiA+ICt9 Cj4gPiArCj4gPiArIyBBc3NlcnRzIHRoYXQgYSByb2xsYmFjayB0byAkc25hcCBvbiAkdm9sbmFt ZSBpcyBwb3NzaWJsZS4KPiA+ICsjIElmIGNlcnRhaW4gc25hcHNob3RzIGFyZSBwcmV2ZW50aW5n IHRoZSByb2xsYmFjayBhbmQgJGJsb2NrZXJzIGlzCj4gPiBhbiBhcnJheQo+ID4gKyMgcmVmZXJl bmNlLCB0aGUgc25hcHNob3QgbmFtZXMgY2FuIGJlIHB1c2hlZCBvbnRvICRibG9ja2VycyBwcmlv cgo+ID4gdG8gZHlpbmcuCj4gPiArc3ViIHZvbHVtZV9yb2xsYmFja19pc19wb3NzaWJsZSB7Cj4g PiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwLCAk YmxvY2tlcnMpID0gQF87Cj4gPiArCj4gPiArwqDCoMKgIG15ICRwYXRoID0gJGNsYXNzLT5maWxl c3lzdGVtX3BhdGgoJHNjZmcsICR2b2xuYW1lKTsKPiA+ICvCoMKgwqAgbXkgJHNuYXBwYXRoID0g Z2V0X3NuYXBfdm9sbmFtZSgkcGF0aCwgJHNuYXApOwo+ID4gK8KgwqDCoCBteSAkY3VycmVudHBh dGggPSAkY2xhc3MtPnBhdGgoJHNjZmcsICR2b2xuYW1lLCAkc3RvcmVpZCk7Cj4gPiArwqDCoMKg IHJldHVybiAxIGlmICRjdXJyZW50cGF0aCBlcSAkc25hcHBhdGg7Cj4gPiArCj4gPiArwqDCoMKg IGRpZSAiY2FuJ3Qgcm9sbGJhY2ssICckc25hcCcgaXMgbm90IG1vc3QgcmVjZW50IHNuYXBzaG90 IG9uCj4gPiAnJHZvbG5hbWUnXG4iOwo+ID4gKwo+ID4gK8KgwqDCoCByZXR1cm4gMTsKPiA+ICt9 CgpzYW1lIGNvbW1lbnRzIGFzIGZvciB0aGUgZGlyLWJhc2VkIHBhdGNoZXMgYXBwbHkgaGVyZSBh cyB3ZWxsIC0gaWYgYXQgYWxsIHBvc3NpYmxlLCBoYXZpbmcgYSAxOjEgbWFwcGluZyBvZiBzbmFw c2hvdCBuYW1lIHRvIExWIG5hbWUgd291bGQgYmUgZ3JlYXQuLiBvdGhlciB0aGFuIExWcyBub3Qg YmVpbmcgaGFyZGxpbmthYmxlLCBJIHRoaW5rIHRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5 IHRoZXJlIGFzIHdlbGwuLgoKPiA+ICsKPiA+ICtzdWIgdm9sdW1lX3NuYXBzaG90X3JvbGxiYWNr IHsKPiA+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNu YXApID0gQF87Cj4gPiArCj4gPiArwqDCoMKgICRjbGFzcy0+YWN0aXZhdGVfdm9sdW1lKCRzdG9y ZWlkLCAkc2NmZywgJHZvbG5hbWUsIHVuZGVmLCB7fSk7Cj4gPiArwqDCoMKgICNzaW1wbHkgZGVs ZXRlIHRoZSBjdXJyZW50IHNuYXBzaG90IGFuZCByZWNyZWF0ZSBpdAo+ID4gKwo+ID4gK8KgwqDC oCBteSAkc25hcHZvbG5hbWUgPSBnZXRfc25hcF92b2xuYW1lKCR2b2xuYW1lLCAkc25hcCk7Cj4g PiArCj4gPiArwqDCoMKgICRjbGFzcy0+ZnJlZV9pbWFnZSgkc3RvcmVpZCwgJHNjZmcsICRzbmFw dm9sbmFtZSwgMCk7Cj4gPiArwqDCoMKgICRjbGFzcy0+dm9sdW1lX3NuYXBzaG90KCRzY2ZnLCAk c3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3ViIHZvbHVtZV9z bmFwc2hvdF9kZWxldGUgewo+ID4gK8KgwqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQs ICR2b2xuYW1lLCAkc25hcCwgJHJ1bm5pbmcpID0gQF87Cj4gPiArCj4gPiArwqDCoMKgIHJldHVy biAxIGlmICRydW5uaW5nOwo+ID4gKwo+ID4gK8KgwqDCoCAkY2xhc3MtPmFjdGl2YXRlX3ZvbHVt ZSgkc3RvcmVpZCwgJHNjZmcsICR2b2xuYW1lLCB1bmRlZiwge30pOwo+ID4gKwo+ID4gK8KgwqDC oCBteSAkc25hcHNob3RzID0gJGNsYXNzLT52b2x1bWVfc25hcHNob3RfaW5mbygkc2NmZywgJHN0 b3JlaWQsCj4gPiAkdm9sbmFtZSk7Cj4gPiArwqDCoMKgIG15ICRzbmFwcGF0aCA9ICRzbmFwc2hv dHMtPnskc25hcH0tPntmaWxlfTsKPiA+ICvCoMKgwqAgaWYoISRzbmFwcGF0aCkgewo+ID4gKyB3 YXJuICIkc25hcCBhbHJlYWR5IGRlbGV0ZWQuIHNraXBcbiI7Cj4gPiArIHJldHVybjsKPiA+ICvC oMKgwqAgfQoKaG93IGNhbiB0aGlzIGhhcHBlbj8gdGhlIHNuYXBzaG90IGluZm8gaXMgZ2VuZXJh dGVkIGJ5IHF1ZXJ5aW5nIExWTSBmb3IgYSBsaXN0IG9mIExWcy4uCgo+ID4gKwo+ID4gK8KgwqDC oCBteSAkc25hcHZvbG5hbWUgPSAkc25hcHNob3RzLT57JHNuYXB9LT57dm9sbmFtZX07Cj4gPiAr wqDCoMKgIG15ICRwYXJlbnRzbmFwID0gJHNuYXBzaG90cy0+eyRzbmFwfS0+e3BhcmVudH07Cj4g PiArwqDCoMKgIG15ICRjaGlsZHNuYXAgPSAkc25hcHNob3RzLT57JHNuYXB9LT57Y2hpbGR9Owo+ ID4gK8KgwqDCoCBkaWUgImVycm9yOiBjYW4ndCBmaW5kIGEgcGFyZW50IGZvciB0aGlzIHNuYXBz aG90IiBpZgo+ID4gISRwYXJlbnRzbmFwOwoKYnV0IHRoZSBmaXJzdCBzbmFwc2hvdCBkb2Vzbid0 IGhhdmUgYSBwYXJlbnQ/Cgo+ID4gKwo+ID4gK8KgwqDCoCBteSAkcGFyZW50cGF0aCA9ICRzbmFw c2hvdHMtPnskcGFyZW50c25hcH0tPntmaWxlfTsKPiA+ICvCoMKgwqAgbXkgJHBhcmVudGZvcm1h dCA9ICRzbmFwc2hvdHMtPnskcGFyZW50c25hcH0tPnsnZm9ybWF0J30gaWYKPiA+ICRwYXJlbnRz bmFwOwo+ID4gK8KgwqDCoCBteSAkY2hpbGRwYXRoID0gJHNuYXBzaG90cy0+eyRjaGlsZHNuYXB9 LT57ZmlsZX0gaWYgJGNoaWxkc25hcDsKCnVubGVzcyBzb21lb25lIG1hbnVhbGx5IG1lc3NlZCB3 aXRoIHRoZSBzbmFwc2hvdCB0cmVlLCBpbiB0aGUgY3VycmVudCBzY2hlbWUgYW55ICJzbmFwc2hv dCIgaGFzIGEgY2hpbGQ/Cgo+ID4gK8KgwqDCoCBteSAkY2hpbGRmb3JtYXQgPSAkc25hcHNob3Rz LT57JGNoaWxkc25hcH0tPnsnZm9ybWF0J30gaWYKPiA+ICRjaGlsZHNuYXA7Cj4gPiArCj4gPiAr wqDCoMKgIHByaW50ICJtZXJnZSBzbmFwc2hvdCAkc25hcCB0byAkcGFyZW50c25hcFxuIjsKPiA+ ICvCoMKgwqAgbXkgJGNtZCA9IFsnL3Vzci9iaW4vcWVtdS1pbWcnLCAnY29tbWl0JywgJHNuYXBw YXRoXTsKPiA+ICvCoMKgwqAgcnVuX2NvbW1hbmQoJGNtZCk7Cj4gPiArCj4gPiArwqDCoMKgICNp ZiB3ZSBkZWxldGUgYW4gaW50ZXJtZWRpYXRlIHNuYXBzaG90LCB3ZSBuZWVkIHRvIGxpbmsgdXBw ZXIKPiA+IHNuYXBzaG90IHRvIGJhc2Ugc25hcHNob3QKPiA+ICvCoMKgwqAgaWYoJGNoaWxkcGF0 aCAmJiAtZSAkY2hpbGRwYXRoKSB7Cj4gPiArIGRpZSAibWlzc2luZyBwYXJlbnRzbmFwIHNuYXBz aG90IHRvIHJlYmFzZSBjaGlsZCAkY2hpbGRwYXRoXG4iIGlmCj4gPiAhJHBhcmVudHBhdGg7Cj4g PiArIHByaW50ICJsaW5rICRjaGlsZHNuYXAgdG8gJHBhcmVudHNuYXBcbiI7Cj4gPiArICRjbWQg PSBbJy91c3IvYmluL3FlbXUtaW1nJywgJ3JlYmFzZScsICctdScsICctYicsICRwYXJlbnRwYXRo LCAnLQo+ID4gRicsICRwYXJlbnRmb3JtYXQsICctZicsICRjaGlsZGZvcm1hdCwgJGNoaWxkcGF0 aF07Cj4gPiArIHJ1bl9jb21tYW5kKCRjbWQpOwo+ID4gK8KgwqDCoCB9CgpzYW1lIGhlcmUsIGNv bW1pdCArIHJlYmFzZSAtdSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgcmViYXNlID8KCj4gPiArCj4g PiArwqDCoMKgICNkZWxldGUgdGhlIHNuYXBzaG90Cj4gPiArwqDCoMKgICRjbGFzcy0+ZnJlZV9p bWFnZSgkc3RvcmVpZCwgJHNjZmcsICRzbmFwdm9sbmFtZSwgMCk7Cj4gPiArIAo+ID4gK8KgwqDC oCByZXR1cm47Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiB2b2x1bWVfaGFzX2ZlYXR1cmUgewo+ID4g K8KgwqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJGZlYXR1cmUsICRzdG9yZWlkLCAkdm9sbmFtZSwg JHNuYXBuYW1lLAo+ID4gJHJ1bm5pbmcpID0gQF87Cj4gPiArCj4gPiArwqDCoMKgIG15ICRmZWF0 dXJlcyA9IHsKPiA+ICsgc25hcHNob3QgPT4geyBjdXJyZW50ID0+IDEgfSwKPiA+ICsjIGNsb25l ID0+IHsgYmFzZSA9PiAxLCBzbmFwID0+IDF9LMKgwqAgI2Rvbid0IGFsbG93IHRvIGNsb25lIGFz IHdlCj4gPiBjYW4ndCBhY3RpdmF0ZSB0aGUgYmFzZSBiZXR3ZWVuIGRpZmZlcmVudCBob3N0ID8K CnRoYXQncyBvbmx5IHRydWUgZm9yIHNoYXJlZCBMVk0gdGhvdWdoLCBhbmQgdGhlIHJlc3Qgd291 bGQgYWxzbyB3b3JrIGZvciBsb2NhbCBMVk0/Cgo+ID4gKyB0ZW1wbGF0ZSA9PiB7IGN1cnJlbnQg PT4gMX0sCj4gPiArIGNvcHkgPT4geyBiYXNlID0+IDEsIGN1cnJlbnQgPT4gMSwgc25hcCA9PiAx fSwKPiA+ICsgc3BhcnNlaW5pdCA9PiB7IGJhc2UgPT4gMSwgY3VycmVudCA9PiAxfSwKPiA+ICsg cmVuYW1lID0+IHtjdXJyZW50ID0+IDF9LAo+ID4gK8KgwqDCoCB9Owo+ID4gKwo+ID4gK8KgwqDC oCBteSAoJHZ0eXBlLCAkbmFtZSwgJHZtaWQsICRiYXNlbmFtZSwgJGJhc2V2bWlkLCAkaXNCYXNl KSA9Cj4gPiArICRjbGFzcy0+cGFyc2Vfdm9sbmFtZSgkdm9sbmFtZSk7Cj4gPiArCj4gPiArwqDC oMKgIG15ICRrZXkgPSB1bmRlZjsKPiA+ICvCoMKgwqAgaWYoJHNuYXBuYW1lKXsKPiA+ICsgJGtl eSA9ICdzbmFwJzsKPiA+ICvCoMKgwqAgfWVsc2V7Cj4gPiArICRrZXkgPcKgICRpc0Jhc2UgPyAn YmFzZScgOiAnY3VycmVudCc7Cj4gPiArwqDCoMKgIH0KPiA+ICvCoMKgwqAgcmV0dXJuIDEgaWYg JGZlYXR1cmVzLT57JGZlYXR1cmV9LT57JGtleX07Cj4gPiArCj4gPiArwqDCoMKgIHJldHVybiB1 bmRlZjsKPiA+ICt9Cj4gPiArCj4gPiArc3ViIGdldF9zbmFwX3ZvbG5hbWUgewo+ID4gK8KgwqDC oCBteSAoJHBhdGgsICRzbmFwKSA9IEBfOwo+ID4gKwo+ID4gK8KgwqDCoCBteSAkYmFzZXBhdGgg PSAiIjsKPiA+ICvCoMKgwqAgbXkgJGJhc2Vmb3JtYXQgPSAiIjsKPiA+ICvCoMKgwqAgaWYgKCRw YXRoID1+IG0vXigoLiopKCh2bXxiYXNlKS0oXGQrKS1kaXNrLShcZCspKSkoLXNuYXAtKFthLXpB LQo+ID4gWjAtOV0rKSk/KFwuKHJhd3xxY293MikpPy8pIHsKPiA+ICvCoMKgwqDCoMKgwqDCoCAk YmFzZXBhdGggPSAkMTsKPiA+ICvCoMKgwqDCoMKgwqDCoCAkYmFzZWZvcm1hdCA9ICQ4Owo+ID4g K8KgwqDCoCB9Cj4gPiArwqDCoMKgIG15ICRzbmFwdm9sbmFtZSA9ICRiYXNlcGF0aC4iLXNuYXAt JHNuYXAucWNvdzIiOwo+ID4gK8KgwqDCoCByZXR1cm4gJHNuYXB2b2xuYW1lOwo+ID4gK30KPiA+ ICsKPiA+ICtzdWIgZ2V0X3NuYXBuYW1lX2Zyb21fcGF0aCB7Cj4gPiArwqDCoMKgIG15ICgkcGF0 aCkgPSBAXzsKPiA+ICsKPiA+ICvCoMKgwqAgaWYgKCRwYXRoID1+IG0vXigoLiopKCh2bXxiYXNl KS0oXGQrKS1kaXNrLShcZCspKSkoLXNuYXAtKFthLXpBLQo+ID4gWjAtOV0rKSk/KFwuKHJhd3xx Y293MikpPy8pIHsKPiA+ICvCoMKgwqDCoMKgwqDCoCBteSAkc25hcG5hbWUgPSAkNzsKPiA+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gJHNuYXBuYW1lOwo+ID4gK8KgwqDCoCB9Cj4gPiArwqDCoMKg IGRpZSAiY2FuJ3QgcGFyc2Ugc25hcG5hbWUgZnJvbSBwYXRoICRwYXRoIjsKPiA+ICt9Cj4gPiAr Cj4gPiArc3ViIGdldF9jdXJyZW50X3NuYXBzaG90IHsKPiA+ICvCoMKgwqAgbXkgKCRjbGFzcywg JHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSkgPSBAXzsKPiA+ICsKPiA+ICvCoMKgwqAgI2dldCBt b3JlIHJlY2VudCBjdGltZSB2b2x1bWUKPiA+ICvCoMKgwqAgcmV0dXJuICRjbGFzcy0+bGlzdF9z bmFwc2hvdHMoJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgMSk7Cj4gPiArfQo+ID4gK215ICRj aGVja190YWdzID0gc3ViIHsKPiA+ICvCoMKgwqAgbXkgKCR0YWdzKSA9IEBfOwo+ID4gKwo+ID4g K8KgwqDCoCByZXR1cm4gZGVmaW5lZCgkdGFncykgJiYgJHRhZ3MgPX4gLyhefCwpcHZlLXZtLVxk KygsfCQpLzsKPiA+ICt9Owo+ID4gKwo+ID4gK3N1YiBsaXN0X2ltYWdlcyB7Cj4gPiArwqDCoMKg IG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZtaWQsICR2b2xsaXN0LCAkY2FjaGUpID0g QF87Cj4gPiArCj4gPiArwqDCoMKgIG15ICR2Z25hbWUgPSAkc2NmZy0+e3ZnbmFtZX07Cj4gPiAr Cj4gPiArwqDCoMKgICRjYWNoZS0+e2x2c30gPSBQVkU6OlN0b3JhZ2U6OkxWTVBsdWdpbjo6bHZt X2xpc3Rfdm9sdW1lcygpIGlmCj4gPiAhJGNhY2hlLT57bHZzfTsKPiA+ICsKPiA+ICvCoMKgwqAg bXkgJHJlcyA9IFtdOwo+ID4gKwo+ID4gK8KgwqDCoCBpZiAobXkgJGRhdCA9ICRjYWNoZS0+e2x2 c30tPnskdmduYW1lfSkgewo+ID4gKwo+ID4gKyBmb3JlYWNoIG15ICR2b2xuYW1lIChrZXlzICUk ZGF0KSB7Cj4gPiArCj4gPiArIMKgwqDCoCBuZXh0IGlmICR2b2xuYW1lICF+IG0vXih2bXxiYXNl KS0oXGQrKS0vOwo+ID4gKyDCoMKgwqAgbXkgJG93bmVyID0gJDI7Cj4gPiArCj4gPiArIMKgwqDC oCBteSAkaW5mbyA9ICRkYXQtPnskdm9sbmFtZX07Cj4gPiArCj4gPiArIMKgwqDCoCBuZXh0IGlm ICRzY2ZnLT57dGFnZ2VkX29ubHl9ICYmICEmJGNoZWNrX3RhZ3MoJGluZm8tPnt0YWdzfSk7Cj4g PiArCj4gPiArIMKgwqDCoCAjIEFsbG93IG1pcnJvcmVkIGFuZCBSQUlEIExWcwo+ID4gKyDCoMKg wqAgbmV4dCBpZiAkaW5mby0+e2x2X3R5cGV9ICF+IG0vXlstbU1yUl0kLzsKPiA+ICsKPiA+ICsg wqDCoMKgIG15ICR2b2xpZCA9ICIkc3RvcmVpZDokdm9sbmFtZSI7Cj4gPiArCj4gPiArIMKgwqDC oCBpZiAoJHZvbGxpc3QpIHsKPiA+ICsgbXkgJGZvdW5kID0gZ3JlcCB7ICRfIGVxICR2b2xpZCB9 IEAkdm9sbGlzdDsKPiA+ICsgbmV4dCBpZiAhJGZvdW5kOwo+ID4gKyDCoMKgwqAgfSBlbHNlIHsK PiA+ICsgbmV4dCBpZiBkZWZpbmVkKCR2bWlkKSAmJiAoJG93bmVyIG5lICR2bWlkKTsKPiA+ICsg wqDCoMKgIH0KPiA+ICsKPiA+ICsgwqDCoMKgIHB1c2ggQCRyZXMsIHsKPiA+ICsgdm9saWQgPT4g JHZvbGlkLCBmb3JtYXQgPT4gJ3JhdycsIHNpemUgPT4gJGluZm8tPntsdl9zaXplfSwgdm1pZCA9 Pgo+ID4gJG93bmVyLAo+ID4gKyBjdGltZSA9PiAkaW5mby0+e2N0aW1lfSwKPiA+ICsgwqDCoMKg IH07CgpidXQgZG9lc24ndCB0aGlzIG5vdyBpbmNsdWRlIGFsbCBzbmFwc2hvdCBMVnMgYXMgd2Vs bD8gd2hpbGUgcHJldGVuZGluZyB0aGV5IGFyZSByYXc/Cgo+ID4gKyB9Cj4gPiArwqDCoMKgIH0K PiA+ICsKPiA+ICvCoMKgwqAgcmV0dXJuICRyZXM7Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBsaXN0 X3NuYXBzaG90cyB7Cj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZv bG5hbWUsICRjdXJyZW50X29ubHkpID0gQF87Cj4gPiArCj4gPiArwqDCoMKgIG15ICR2Z25hbWUg PSAkc2NmZy0+e3ZnbmFtZX07Cj4gPiArCj4gPiArwqDCoMKgIG15ICRiYXNldm9sbmFtZSA9ICR2 b2xuYW1lOwo+ID4gK8KgwqDCoCBteSAkbHZzID0gUFZFOjpTdG9yYWdlOjpMVk1QbHVnaW46Omx2 bV9saXN0X3ZvbHVtZXMoJHZnbmFtZSk7Cgp0aGlzCgo+ID4gKwo+ID4gK8KgwqDCoCBteSAkdmcg PSAkbHZzLT57JHZnbmFtZX07CgphbmQgdGhpcyBzZWVtIHRvIGJlIHVudXNlZD8KCj4gPiArCj4g PiArwqDCoMKgIG15ICgkdnR5cGUsICRuYW1lLCAkdm1pZCwgJGJhc2VuYW1lLCAkYmFzZXZtaWQs ICRpc0Jhc2UsCj4gPiAkZm9ybWF0KSA9ICRjbGFzcy0+cGFyc2Vfdm9sbmFtZSgkdm9sbmFtZSk7 Cj4gPiArwqDCoMKgIG15ICRzbmFwc2hvdHMgPSAkY2xhc3MtPmxpc3RfaW1hZ2VzKCRzdG9yZWlk LCAkc2NmZywgJHZtaWQpOwo+ID4gKwo+ID4gK8KgwqDCoCBteSAkaW5mbyA9IHt9Owo+ID4gK8Kg wqDCoCBmb3IgbXkgJHNuYXAgKEAkc25hcHNob3RzKSB7Cj4gPiArIG15ICRzbmFwX3ZvbGlkID0g JHNuYXAtPnt2b2xpZH07Cj4gPiArIG5leHQgaWYgKCRzbmFwX3ZvbGlkICF+IG0vJGJhc2V2b2xu YW1lLyk7CgpzYW1lIGlzc3VlIGFzIHdpdGggdGhlIGRpciBwYXRjaCAtIHRoaXMgYWxsb3dzIHBh cnRpYWwgbWF0Y2hpbmcgaWYgdHdvIHZvbHVtZXMgc2hhcmUgYSBuYW1lIHByZWZpeAoKPiA+ICsK PiA+ICsgbXkgJHNuYXBuYW1lID0gZ2V0X3NuYXBuYW1lX2Zyb21fcGF0aCgkc25hcF92b2xpZCk7 Cj4gPiArIG15ICh1bmRlZiwgJHNuYXBfdm9sbmFtZSkgPQo+ID4gUFZFOjpTdG9yYWdlOjpwYXJz ZV92b2x1bWVfaWQoJHNuYXBfdm9saWQpOwo+ID4gKyBteSAkc25hcGZpbGUgPSAkY2xhc3MtPmZp bGVzeXN0ZW1fcGF0aCgkc2NmZywgJHNuYXBfdm9sbmFtZSwKPiA+ICRzbmFwbmFtZSk7Cj4gPiAr ICRzbmFwbmFtZSA9ICdiYXNlJyBpZiAhJHNuYXBuYW1lOwo+ID4gKyAkaW5mby0+eyRzbmFwbmFt ZX0tPntmaWxlfSA9ICRzbmFwZmlsZTsKPiA+ICsgJGluZm8tPnskc25hcG5hbWV9LT57dm9sbmFt ZX0gPSAkc25hcF92b2xuYW1lOwo+ID4gKyAkaW5mby0+eyRzbmFwbmFtZX0tPnt2b2xpZH0gPSAk c25hcF92b2xpZDsKPiA+ICsgJGluZm8tPnskc25hcG5hbWV9LT57Y3RpbWV9ID0gJHNuYXAtPntj dGltZX07Cj4gPiArCj4gPiArIGlmICghJGN1cnJlbnRfb25seSkgewo+ID4gKyDCoMKgwqAgbXkg KHVuZGVmLCAkZm9ybWF0LCB1bmRlZiwgJHBhcmVudGZpbGUsIHVuZGVmKSA9Cj4gPiBQVkU6OlN0 b3JhZ2U6OlBsdWdpbjo6ZmlsZV9zaXplX2luZm8oJHNuYXBmaWxlKTsKPiA+ICsgwqDCoMKgIG5l eHQgaWYgISRwYXJlbnRmaWxlICYmICRzbmFwbmFtZSBuZSAnYmFzZSc7wqDCoCAjYmFkIHVubGlu a2VkCj4gPiBzbmFzcGhvdAo+ID4gKwo+ID4gKyDCoMKgwqAgbXkgJHBhcmVudG5hbWUgPSBnZXRf c25hcG5hbWVfZnJvbV9wYXRoKCRwYXJlbnRmaWxlKSBpZgo+ID4gJHBhcmVudGZpbGU7Cj4gPiAr IMKgwqDCoCAkcGFyZW50bmFtZSA9ICdiYXNlJyBpZiAhJHBhcmVudG5hbWUgJiYgJHBhcmVudGZp bGU7Cj4gPiArCj4gPiArIMKgwqDCoCAkaW5mby0+eyRzbmFwbmFtZX0tPnsnZm9ybWF0J30gPSAk Zm9ybWF0Owo+ID4gKyDCoMKgwqAgJGluZm8tPnskc25hcG5hbWV9LT57cGFyZW50fSA9ICRwYXJl bnRuYW1lIGlmICRwYXJlbnRuYW1lOwo+ID4gKyDCoMKgwqAgJGluZm8tPnskcGFyZW50bmFtZX0t PntjaGlsZH0gPSAkc25hcG5hbWUgaWYgJHBhcmVudG5hbWU7Cj4gPiArIH0KPiA+ICvCoMKgwqAg fQo+ID4gKwo+ID4gK8KgwqDCoCBteSBAc25hcHNob3RzX3NvcnRlZCA9IHNvcnQgeyAkaW5mby0+ eyRifXtjdGltZX0gPD0+ICRpbmZvLQo+ID4gPnskYX17Y3RpbWV9IH0ga2V5cyAlJGluZm87Cj4g PiArwqDCoMKgIG15ICRjdXJyZW50X3NuYXBuYW1lID0gJHNuYXBzaG90c19zb3J0ZWRbMF07Cj4g PiArwqDCoMKgIG15ICRjdXJyZW50X3NuYXBzaG90ID0gJGluZm8tPnskY3VycmVudF9zbmFwbmFt ZX07Cj4gPiArwqDCoMKgIHJldHVybiAkY3VycmVudF9zbmFwc2hvdCBpZiAkY3VycmVudF9vbmx5 OwoKdGhpcyAocmV0dXJuaW5nIHRvIGhhc2hlcyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUpIGlz IGVhc3kgdG8gbWlzcyBhbmQgZ2V0IHdyb25nLi4KCj4gPiArCj4gPiArwqDCoMKgICRpbmZvLT57 Y3VycmVudH0gPSB7ICUkY3VycmVudF9zbmFwc2hvdCB9OwoKZXNwZWNpYWxseSBpZiB0aGlzIGlz IGRvbmUgYW55d2F5LCBzbyB0aGUgY2FsbGVyIGNhbiBqdXN0IGxvb2sgYXQgdGhhdCBpZiB0aGV5 IG9ubHkgd2FudCB0aGUgY3VycmVudCBzbmFwc2hvdC4uCgo+ID4gK8KgwqDCoCByZXR1cm4gJGlu Zm87Cj4gPiArfQo+ID4gKwo+ID4gK3N1YiBzbmFwc2hvdF9leGlzdCB7Cj4gPiArwqDCoMKgIG15 ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUpID0gQF87Cj4gPiArCj4gPiArwqDC oMKgIG15ICRiYXNlcGF0aCA9ICRjbGFzcy0+ZmlsZXN5c3RlbV9wYXRoKCRzY2ZnLCAkdm9sbmFt ZSk7Cj4gPiArwqDCoMKgIG15ICRjdXJyZW50cGF0aCA9ICRjbGFzcy0+cGF0aCgkc2NmZywgJHZv bG5hbWUsICRzdG9yZWlkKTsKPiA+ICsKPiA+ICvCoMKgwqAgZGllICJjYW4ndCByZXNpemUgaWYg c25hc3Bob3RzIGV4aXN0IiBpZiAkY3VycmVudHBhdGggbmUKPiA+ICRiYXNlcGF0aDsKCkkgdGhp bmsgc29tZXRoaW5nIGhlcmUgaXMgd3JvbmcgOykKCj4gPiArCj4gPiArfQo+ID4gKzE7Cj4gPiBk aWZmIC0tZ2l0IGEvc3JjL1BWRS9TdG9yYWdlL01ha2VmaWxlIGIvc3JjL1BWRS9TdG9yYWdlL01h a2VmaWxlCj4gPiBpbmRleCBkNWNjOTQyLi4xYWY4YWFiIDEwMDY0NAo+ID4gLS0tIGEvc3JjL1BW RS9TdG9yYWdlL01ha2VmaWxlCj4gPiArKysgYi9zcmMvUFZFL1N0b3JhZ2UvTWFrZWZpbGUKPiA+ IEBAIC0xNCw3ICsxNCw4IEBAIFNPVVJDRVM9IFwKPiA+IMKgIFBCU1BsdWdpbi5wbSBcCj4gPiDC oCBCVFJGU1BsdWdpbi5wbSBcCj4gPiDCoCBMdm1UaGluUGx1Z2luLnBtIFwKPiA+IC0gRVNYaVBs dWdpbi5wbQo+ID4gKyBFU1hpUGx1Z2luLnBtIFwKPiA+ICsgTHZtUWNvdzJQbHVnaW4ucG0KPiA+ IMKgCj4gPiDCoC5QSE9OWTogaW5zdGFsbAo+ID4gwqBpbnN0YWxsOgo+ID4gLS0gCj4gPiAyLjM5 LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwdmUt ZGV2ZWwgbWFpbGluZyBsaXN0CnB2ZS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xp c3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wdmUtZGV2ZWwK