From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pdm-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 797891FF165 for <inbox@lore.proxmox.com>; Thu, 3 Jul 2025 10:05:38 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4602ADBF9; Thu, 3 Jul 2025 10:06:19 +0200 (CEST) Message-ID: <eb6cbbb0-fe4b-4c33-a044-aacab59c2c19@proxmox.com> Date: Thu, 3 Jul 2025 10:05:42 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Lukas Wagner <l.wagner@proxmox.com> To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com>, Dominik Csapak <d.csapak@proxmox.com> References: <20250512114144.118545-1-l.wagner@proxmox.com> <20250512114144.118545-2-l.wagner@proxmox.com> <1df410bd-badc-45db-8a9e-a1292d8532d5@proxmox.com> Content-Language: de-AT, en-US In-Reply-To: <1df410bd-badc-45db-8a9e-a1292d8532d5@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.250 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 POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.237 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 Subject: Re: [pdm-devel] [PATCH proxmox-datacenter-manager v5 1/6] remote tasks: implement improved cache for remote tasks X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion <pdm-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/> List-Post: <mailto:pdm-devel@lists.proxmox.com> List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com> T24gIDIwMjUtMDUtMTQgMTY6MDgsIERvbWluaWsgQ3NhcGFrIHdyb3RlOgo+IHlvdSB3cml0ZSBi ZWxvdyB0aGF0IHlvdSB1c2UgdGhlIG9sZGVzdCBhY3RpdmUgdGFzayBhcyBhIGN1dG9mZgo+IChp IGd1ZXNzIGluIGEgbGF0ZXIgcGF0Y2gpLCBidXQgdGhhdCBoYXMgbWF5YmUgc29tZSBiYWQgY29u c2VxdWVuY2VzOgo+IAo+IGlmIHRoZXJlIGlzIGEgbG9uZyBydW5uaW5nIHRhc2sgKGUuZy4gbXVs dGlwbGUgZGF5czsgbm90IHRoYXQgdW5jb21tb24KPiBmb3IgZS5nLiBwYnMpLCB3ZSdkIHJldmlz aXQgb2xkIHRhc2tzIG92ZXIgYW5kIG92ZXIgYWdhaW4gZm9yIHRoYXQKPiByZW1vdGUsIGhpdHRp bmcgdGhlIHRhc2sgYXJjaGl2ZSBvbiBkaXNrIGFnYWluIGV2ZXJ5IHRpbWUuCj4gCgpZZXMsIEkg dGhpbmsgeW91IGFyZSByaWdodCwgbXkgYXBwcm9hY2ggaXMgYSBiaXQgZmxhd2VkIGZvciB0YXNr cyBydW5uaW5nIGZvciBhIHZlcnkgbG9uZyB0aW1lLgpJIGNob3NlIHRoaXMgYXBwcm9hY2ggYmVj YXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBvdmVyYWxsIGZldGNoaW5nIG9mIGZpbmlzaGVkIGFuZCBw b2xsaW5nIG9mIHRyYWNrZWQKdGFza3MuIEJ1dCBub3cgd2l0aCB5b3VyIGlucHV0IGFuZCBzb21l IHRpbWUgcGFzc2VkIHNpbmNlIEkgaW1wbGVtZW50ZWQgdGhpcywgSSBjYW4gc2VlCndoeSB0aGlz IG1pZ2h0IGJlIHByb2JsZW1hdGljLgpJIGd1ZXNzIEknbGwgZ28gYmFjayB0byBwb2xsaW5nIHRy YWNrZWQgdGFza3MgaW5kaXZpZHVhbGx5LiBJIGp1c3Qgbm93IGR1ZyB0aHJvdWdoCnRoZSAvbm9k ZXMvPG5vZGU+L3Rhc2tzLzx1cGlkPi9zdGF0dXMgQVBJIGltcGxlbWVudGF0aW9uIGFuZCB3YXMg cGxlYXNlbnRseSBzdXByaXNlZApob3cgZWZmaWNpZW50IHRoYXQgZW5kcG9pbnQgaXMgLSBzbyBJ IGd1ZXNzIGl0IHNob3VsZCBiZSBubyBwcm9ibGVtIGF0IGFsbCB0bwprZWVwIGhpdHRpbmcgdGhh dCBvbmUgcmVwZWF0ZWRseSwgZXZlbiBpZiB0aGVyZSBpcyBhIGxhcmdlciBudW1iZXIgb2YgcnVu bmluZywgdHJhY2tlZCB0YXNrcyBmb3IgYQpzaW5nbGUgbm9kZS4KCj4gY291bGQgaXQgbWF5YmUg bWFrZSBtb3JlIHNlbnNlIHRvIGVpdGhlcjoKPiAqIGp1c3QgcmVxdWVzdCBmaW5pc2hlZCB0YXNr cyBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aCBydW5uaW5nCj4gwqAgdGFza3Mgd2UgZGlk IG5vdCB0cmFjawo+ICogdHJhY2sgdGhlIGFjdGl2ZSB0YXNrcyB0aGF0IGdvdCBzeW5jZWQsIG1h eWJlIHdpdGggYSBsb3dlcgo+IMKgIGludGVydmFsIHRoYW4gdGhlIG9uZXMgd2Ugc3RhcnRlZD8K PiAKPiBUaGlzIHdheSB3ZSBjYW4gYXZvaWQgaGl0dGluZyB0aGUgb24gZGlzayB0YXNrIGxpc3Qg KGV2ZW4gaWYKPiBpdCdzIGp1c3QgcmVhZCBjYWxscykgZm9yIHJlbW90ZXMgd2l0aCBsb25nIHJ1 bm5pbmcgdGFza3MuCj4gCj4gV2hhdCBkbyB5b3UgdGhpbms/Cj4gCgpJIHRoaW5rIGZvciBub3cg SSdkIHRlbmQgdG93YXJkcyB0aGUgZmlyc3Qgb3B0aW9uLCBvbmx5IHJlcXVlc3RpbmcgZmluaXNo ZWQgdGFza3MuClRoZSBzZWNvbmQgb25lLCB0cmFja2luZyAnZm9yZWlnbicgYWN0aXZlIHRhc2tz IHdpdGggc29tZSBpbnRlcm1lZGlhdGUgcG9sbGluZwppbnRlcnZhbCBjYW4gYWx3YXlzIGJlIGFk ZGVkIGxhdGVyLgoKPiAKPiBBbHNvIHNvbWUgY29tbWVudHMgaW5saW5lCj4gCj4gT24gNS8xMi8y NSAxMzo0MSwgTHVrYXMgV2FnbmVyIHdyb3RlOgo+PiBUaGlzIGNvbW1pdCBhZGRzIGEgbmV3IGlt cGxlbWVudGF0aW9uIGZvciBhIGNhY2hlIGZvciByZW1vdGUgdGFza3MsIG9uZQo+PiB0aGF0IHNo b3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBpbiBmb3IgcHJldHR5IG11 Y2ggYWxsCj4+IHVzZSBjYXNlcy4KPj4KPj4gSW4gZ2VuZXJhbCBzdG9yYWdlIHdvcmtzIHByZXR0 eSBzaW1pbGFyIHRvIHRoZSB0YXNrIGFyY2hpdmUgd2UgYWxyZWFkeQo+PiBoYXZlIGZvciAobG9j YWwpIFBETSB0YXNrcy4KPj4KPj4gcm9vdEBwZG0tZGV2Oi92YXIvY2FjaGUvcHJveG1veC1kYXRh Y2VudGVyLW1hbmFnZXIvcmVtb3RlLXRhc2tzIyBscyAtbAo+PiB0b3RhbCA0MAo+PiAtcnctci0t ci0tIDEgd3d3LWRhdGEgd3d3LWRhdGHCoMKgwqDCoCAwIE1hciAxMyAxMzoxOCBhY3RpdmUKPj4g LXJ3LXItLXItLSAxIHd3dy1kYXRhIHd3dy1kYXRhwqAgMTY3NiBNYXIgMTEgMTQ6NTEgYXJjaGl2 ZS4xNzQxMzU1NDYyCj4+IC1ydy1yLS1yLS0gMSB3d3ctZGF0YSB3d3ctZGF0YcKgwqDCoMKgIDAg TWFyIDExIDE0OjUxIGFyY2hpdmUuMTc0MTQ0MTg2Mgo+PiAtcnctci0tci0tIDEgd3d3LWRhdGEg d3d3LWRhdGHCoCAyNTM4IE1hciAxMSAxNDo1MSBhcmNoaXZlLjE3NDE1MjgyNjIKPj4gLXJ3LXIt LXItLSAxIHd3dy1kYXRhIHd3dy1kYXRhwqAgODQyOCBNYXIgMTEgMTU6MDcgYXJjaGl2ZS4xNzQx NjE0NjYyCj4+IC1ydy1yLS1yLS0gMSB3d3ctZGF0YSB3d3ctZGF0YSAxMTc0MCBNYXIgMTMgMTA6 MTggYXJjaGl2ZS4xNzQxNzAxMDYyCj4+IC1ydy1yLS1yLS0gMSB3d3ctZGF0YSB3d3ctZGF0YcKg IDMzNjQgTWFyIDEzIDEzOjE4IGFyY2hpdmUuMTc0MTc4ODI3MAo+PiAtcnctci0tci0tIDEgd3d3 LWRhdGEgd3d3LWRhdGHCoMKgIDI4NyBNYXIgMTMgMTM6MTggc3RhdGUKPj4KPj4gVGFza3MgYXJl IHN0b3JlZCBpbiB0aGUgJ2FjdGl2ZScgYW5kIG11bHRpcGxlICdhcmNoaXZlJyBmaWxlcy4gUnVu bmluZwo+PiB0YXNrcyBhcmUgcGxhY2VkIGludG8gdGhlICdhY3RpdmUnIGZpbGUsIHRhc2tzIHRo YXQgYXJlIGZpbmlzaGVkIGFyZQo+PiBwZXJzaXN0ZWQgaW50byBvbmUgb2YgdGhlIGFyY2hpdmUg ZmlsZXMuIFRoZSBhcmNoaXZlIGZpbGVzIGFyZSBzdWZmaXhlZAo+PiB3aXRoIGEgVU5JWCB0aW1l c3RhbXAgd2hpY2ggc2VydmVzIGFzIGEgbG93ZXItYm91bmQgZm9yIHN0YXJ0IHRpbWVzIGZvcgo+ PiB0YXNrcyBzdG9yZWQgaW4gdGhpcyBmaWxlLiBFbmNvZGluZyB0aGlzIGxvd2VyLWJvdW5kIGlu IHRoZSBmaWxlIG5hbWUKPj4gaW5zdGVhZCBvZiB1c2luZyBhIG1vcmUgdHJhZGl0aW9uYWwgaW5j cmVhc2luZyBmaWxlIGluZGV4ICguMSwgLjIsIC4zKQo+PiBnaXZlcyB1cyB0aGUgYmVuZWZpdCB0 aGF0IHdlIGNhbiBkZWNpZGUgaW4gd2hpY2ggZmlsZSBhIG5ld2x5IGFycml2ZWQKPj4gdGFza3Mg YmVsb25ncyBmcm9tIGEgc2luZ2xlIHJlYWRkaXIgY2FsbCwgd2l0aG91dCBldmVuIHJlYWRpbmcg dGhlIGZpbGUKPj4gaXRzZWxmLgo+Pgo+PiBUaGUgc2l6ZSBvZiB0aGUgZW50aXJlIGFyY2hpdmUg Y2FuIGJlIGNvbnRyb2xsZWQgYnkgZG9pbmcgZmlsZQo+PiAncm90YXRpb24nLCB3aGVyZSB0aGUg YXJjaGl2ZSBmaWxlIHdpdGggdGhlIG9sZGVzdCB0aW1lc3RhbXAgaXMgZGVsZXRlZAo+PiBhbmQg YSBuZXcgZmlsZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVzdGFtcCBpcyBhZGRlZC4gSWYgJ3JvdGF0 aW9uJwo+PiBoYXBwZW5zIGF0IGZpeGVkIGludGVydmFscyAoZS5nLiBvbmNlIGRhaWx5KSwgdGhp cyBnaXZlcyB1cyBhCj4+IGNvbmZpZ3VyYWJsZSBudW1iZXIgb2YgZGF5cyBvZiB0YXNrIGhpc3Rv cnkuIFRoZXJlIGlzIG5vIGRpcmVjdCBjYXAgZm9yCj4+IHRoZSB0b3RhbCBudW1iZXIgb2YgdGFz a3MsIGJ1dCB0aGlzIGNvdWxkIGJlIGVhc2lseSBhZGRlZCBieSBjaGVja2luZwo+PiB0aGUgc2l6 ZSBvZiB0aGUgbW9zdCByZWNlbnQgYXJjaGl2ZSBmaWxlIGFuZCBieSByb3RhdGluZyBlYXJseSBp ZiBhCj4+IHRocmVzaG9sZCBpcyBleGNlZWRlZC4KPj4KPj4gVGhlIGZvcm1hdCBpbnNpZGUgdGhl IGZpbGVzIGlzIGFsc28gc2ltaWxhciB0byB0aGUgbG9jYWwgdGFzayBhcmNoaXZlLAo+PiB3aXRo IG9uZSB0YXNrIGNvcnJlc3BvbmRpbmcgdG8gb25lIGxpbmUgaW4gdGhlIGZpbGUuIE9uZSBrZXkg ZGlmZmVyZW5jZQo+PiBpcyB0aGF0IGhlcmUgZWFjaCBsaW5lIGlzIGEgSlNPTiBvYmplY3QsIHRo YXQgaXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8KPj4gYWRkIGFkZGl0aW9uYWwgZGF0YSBsYXRlciwg aWYgbmVlZGVkLiBUaGUgSlNPTiBvYmplY3QgY29udGFpbnMgdGhlIHRhc2tzCj4+IFVQSUQsIHN0 YXR1cywgZW5kdGltZSBhbmQgc3RhcnR0aW1lICh0aGUgc3RhcnR0aW1lIGlzIHRlY2huaWNhbGx5 IGFsc28KPj4gZW5jb2RlZCBpbiB0aGUgVVBJRCwgYnV0IGhhdmluZyBpdCBhcyBhIHNlcGFyYXRl IHZhbHVlIHNpbXBsaWZpZWQgYQo+PiBjb3VwbGUgb2YgdGhpbmdzKSBFYWNoIGZpbGUgaXMgc29y dGVkIGJ5IHRoZSB0YXNrJ3Mgc3RhcnQgdGltZSwgdGhlCj4+IHlvdW5nZXN0IHRhc2sgY29taW5n IGZpcnN0Lgo+Pgo+PiBPbmUga2V5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIHRhc2sgY2FjaGUg YW5kIHRoZSBsb2NhbCB0YXNrIGFyY2hpdmUgaXMKPj4gdGhhdCB3ZSBuZWVkIHRvIGhhbmRsZSB0 YXNrcyBjb21pbmcgaW4gb3V0LW9mLW9yZGVyLCBlLmcuIGlmIHJlbW90ZXMKPj4gd2VyZSBub3Qg cmVhY2hhYmxlIGZvciBhIGNlcnRhaW4gdGltZS4gVG8gbWFpbnRhaW4gdGhlIG9yZGVyaW5nIGlu IHRoZQo+PiBmaWxlLCB3ZSBoYXZlIHRvIG1lcmdlIHRoZSBuZXdseSBhcnJpdmVkIHRhc2tzIGlu dG8gdGhlIGV4aXN0aW5nIHRhc2sKPj4gZmlsZS4gVGhpcyB3YXMgaW1wbGVtZW50ZWQgaW4gYSB3 YXkgdGhhdCBhdm9pZHMgcmVhZGluZyB0aGUgZW50aXJlIGZpbGUKPj4gaW50byBtZW1vcnkgYXQg b25jZSwgZXhwbG9pdGluZyB0aGUgZmFjdCB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUKPj4gZXhp c3RpbmcgZmlsZSBhcmUgYWxyZWFkeSBzb3J0ZWQuIFRoaXMgYWxsb3dzIHRvIGRvIGEgemlwcGVy L21lcmdlLXNvcnQKPj4gbGlrZSBhcHByb2FjaCAoc2VlIE1lcmdlVGFza0l0ZXJhdG9yIGZvciBk ZXRhaWxzKS4gVGhlIGV4aXN0aW5nIGZpbGUgaXMKPj4gb25seSByZWFkIGxpbmUtYnktbGluZSBh bmQgZmluYWxseSByZXBsYWNlZCBhdG9taWNhbGx5Lgo+Pgo+PiBUaGUgY2FjaGUgYWxzbyBoYXMg YSBzZXBhcmF0ZSBzdGF0ZSBmaWxlLCBjb250YWluaW5nIGFkZGl0aW9uYWwKPj4gaW5mb3JtYXRp b24sIGUuZy4gY3V0LW9mZiB0aW1lc3RhbXBzIGZvciB0aGUgcG9sbGluZyB0YXNrLiBTb21lIG9m IHRoZQo+PiBkYXRhIGluIHRoZSBzdGF0ZWZpbGUgaXMgdGVjaG5pY2FsbHkgYWxzbyBjb250YWlu ZWQgaW4gdGhlIGFyY2hpdmUKPj4gZmlsZXMsIGJ1dCByZWFkaW5nIHRoZSBzdGF0ZSBmaWxlIGlz IG11Y2ggZmFzdGVyLgo+Pgo+PiBUaGlzIGNvbW1pdCBhbHNvIGFkZHMgYW4gZWxhYm9yYXRlIHN1 aXRlIG9mIHVuaXQgdGVzdHMgZm9yIHRoaXMgbmV3Cj4+IGNhY2hlLiBXaGlsZSBhZGRpbmcgc29t ZSBhZGRpdGlvbmFsIHdvcmsgdXAgZnJvbnQsIHRoZXkgcGFpZCBvZmYKPj4gdGhlbXNlbHZlcyBk dXJpbmcgZGV2ZWxvcG1lbnQgcXVpdGUgcXVpY2tseSwgc2luY2UgdGhlIG92ZXJhbGwgYXBwcm9h Y2gKPj4gZm9yIHRoZSBjYWNoZSBjaGFuZ2VkIGEgY291cGxlIG9mIHRpbWVzLiBUaGUgdGVzdCBz dWl0ZSBnYXZlIG1lCj4+IGNvbmZpZGVuY2UgdGhhdCB0aGUgZGVzaWduIGNoYW5nZXMgZGlkbid0 IHNjcmV3IGFueXRoaW5nIHVwLCBjYXRjaGluZyBhCj4+IGNvdXBsZSBvZiBidWdzIGluIHRoZSBw cm9jZXNzLgo+Pgo+PiBGaW5hbGx5LCBzb21lIGNvbmNyZXRlIG51bWJlcnMgYWJvdXQgdGhlIHBl cmZvcm1hbmNlIGltcHJvdm1lbnRzLgo+PiBCZW5jaG1hcmtpbmcgd2FzIGRvbmUgdXNpbmcgdGhl ICdmYWtlLXJlbW90ZScgZmVhdHVyZS4gVGhlcmUgd2VyZSAxMDAKPj4gcmVtb3RlcywgMTAgUFZF IG5vZGVzIHBlciByZW1vdGUuIFRoZSB0YXNrIGNhY2hlIGNvbnRhaW5lZAo+PiBhYm91dCAxLjUg bWlsbGlvbiB0YXNrcy4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmVm b3JlwqDCoMKgwqDCoMKgwqDCoCBhZnRlcgo+PiBsaXN0IG9mIGFjdGl2ZSB0YXNrcyAoKik6wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB+MS4zc8KgwqDCoMKgwqDCoMKg wqAgfjMwMMK1cwo+PiBsaXN0IG9mIDUwMCB0YXNrcywgb2Zmc2V0IDAgKCoqKTrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfjEuM3PCoMKgwqDCoMKgwqDCoCB+MTQ1MMK1cwo+PiBsaXN0IG9mIDUw MCB0YXNrcywgb2Zmc2V0IDEgbWlsbGlvbiAoKioqKTrCoMKgwqAgfjEuM3PCoMKgwqDCoMKgwqDC oMKgIH4xNzVtcwo+PiBTaXplIG9uIGRpc2s6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB+NTAwTULCoMKgwqDCoMKgwqDCoCB+ MjAwTUIKPj4KPj4gKCopOsKgIFJlcXVlc3RlZCBieSB0aGUgVUkgZXZlcnkgM3MKPj4gKCoqKTog UmVxdWVzdGVkIGJ5IHRoZSBVSSB3aGVuIHZpc2l0aW5nIFJlbW90ZXMgPiBUYXNrcwo+PiAoKioq KTogRS5nLiB3aGVuIHNjcm9sbGluZyB0b3dhcmRzIHRoZSBib3R0b20gb2YgJ1JlbW90ZXMgPiBU YXNrcycKPj4KPj4gSW4gdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgdGhlIGFyY2hpdmUgZmlsZSB3 YXMgKmFsd2F5cyogZnVsbHkKPj4gZGVzZXJpYWxpemVkIGFuZCBsb2FkZWQgaW50byBSQU0sIHRo aXMgaXMgdGhlIHJlYXNvbiB3aHkgdGhlIHRpbWUgbmVlZGVkCj4+IGlzIHByZXR0eSBpZGVudGlh bCBmb3IgYWxsIHNjZW5hcmlvcy4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiByZWFkcyB0aGUKPj4g YXJjaGl2ZSBmaWxlcyBvbmx5IGxpbmUgYnkgbGluZSwgYW5kIG9ubHkgNTAwIHRhc2tzIHdlcmUg bG9hZGVkIGludG8gUkFNCj4+IGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBoaWdoZXIgdGhlIG9mZnNl dCwgdGhlIG1vcmUgYXJjaGl2ZSBsaW5lcy9maWxlcyB3ZQo+PiBoYXZlIHRvIHNjYW4sIHdoaWNo IGluY3JlYXNlcyB0aGUgdGltZSBuZWVkZWQgdG8gYWNjZXNzIHRoZSBkYXRhLiBUaGUKPj4gdGFz a3MgYXJlIHNvcnRlZCBkZXNjZW5kaW5nIGJ5IHN0YXJ0dGltZSwgYXMgYSByZXN1bHQgdGhlIHJl cXVlc3RzIGdldAo+PiBzbG93ZXIgdGhlIGZ1cnRoZXIgeW91IGdvIGJhY2sgaW4gaGlzdG9yeS4K Pj4KPj4gU2lnbmVkLW9mZi1ieTogTHVrYXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94LmNvbT4K Pj4gLS0tCj4+Cj4+IE5vdGVzOgo+PiDCoMKgwqDCoCBDaGFuZ2VzIHNpbmNlIHYzOgo+PiDCoMKg wqDCoMKgwqAgLSBJbmNsdWRlZCBiZW5jaG1hcmsgcmVzdWx0cyBpbiB0aGUgY29tbWl0IG1lc3Nh Z2UKPj4gwqDCoMKgwqDCoMKgIC0gRHJvcCBgcHViYCBmb3IgVGFza0NhY2hlOjp3cml0ZV9zdGF0 ZQo+PiDCoMKgwqDCoCDCoMKgwqDCoCBDaGFuZ2VzIHNpbmNlIHYyOgo+PiDCoMKgwqDCoMKgwqAg LSBJbmNvcnBvcmF0ZSBmZWVkYmFjayBmcm9tIFdvbGZhbmcgKHRoeCEpCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCAtIGVsaW1pbmF0ZSBvbmUgLmNsb25lKCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC0g Z2V0X3Rhc2tzX3dpdGhfbG9jazogZGlyZWN0bHkgY3JlYXRlIGl0ZXJhdG9yIG92ZXIgUGF0aEJ1 Zgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGluc3RlYWQgb2YgZmlyc3QgY3JlYXRpbmcgQXJj aGl2ZUZpbGUgdmVjIGFuZCB0aGUgbWFwcGluZwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLSBGaXhl ZCBUT0NUT1UgcmFjZSBjb25kaXRpb24gKGNoZWNrZWQgUGF0aDo6ZXhpc3RzIGluc3RlYWQgb2YK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cnlpbmcgdGhlIGFjdHVhbCBvcGVyYXRpb24gYW5k IHJlYWN0aW5nIHRvIEVycm9yS2luZDo6Tm90Rm91bmQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAt IGhhbmRsZSBlcnJvciB3aGVuIHJlcGxhY2luZyAnYWN0aXZlJyBmaWxlCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCAtIHVubGluayB0ZW1wIGZpbGUgd2hlbiByZXBsYWNpbmcgdGhlIGFyY2hpdmUgZmls ZSBkaWQgbm90IHdvcmsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC0gYXZvaWQgVVRGOCBkZWNvZGlu ZyB3aGVyZSBub3QgcmVhbGx5IG5lY2Vzc2FyeQo+PiDCoMKgwqDCoMKgwqAgLSBBZGRlZCBhIGNv dXBsZSBvZiAuY29udGV4dCgpLy53aXRoX2NvbnRleHQoKSBmb3IgYmV0dGVyIGVycm9yCj4+IMKg wqDCoMKgwqDCoMKgwqAgbWVzc2FnZXMKPj4gwqDCoMKgwqDCoMKgIC0gRXh0cmFjdGVkIHRoZSBm aWxlIG5hbWVzIGludG8gY29uc3RzCj4+IMKgwqDCoMKgwqDCoCAtIEZpeGVkIHNvbWUgY2xpcHB5 IGlzc3VlcyAoLmNsb25lKCkgZm9yIENyZWF0ZU9wdGlvbnMgLSB3aGVuCj4+IMKgwqDCoMKgwqDC oMKgwqAgdGhpcyBzZXJpZXMgd2FzIHdyaXR0ZW4sIENyZWF0ZU9wdGlvbnMgd2VyZSBub3QgQ29w eSB5ZXQpCj4+Cj4+IMKgIHNlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5yc8KgwqDCoMKgwqDC oMKgIHzCoMKgwqAgMiArCj4+IMKgIHNlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL3Rhc2tfY2FjaGUu cnMgfCAxMDIyICsrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgMiBmaWxlcyBjaGFuZ2Vk LCAxMDI0IGluc2VydGlvbnMoKykKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNlcnZlci9zcmMv cmVtb3RlX3Rhc2tzL3Rhc2tfY2FjaGUucnMKPj4KPj4gZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMv cmVtb3RlX3Rhc2tzL21vZC5ycyBiL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL21vZC5ycwo+PiBp bmRleCAyMzRmZmE3Ni4uN2M4ZTMxZWYgMTAwNjQ0Cj4+IC0tLSBhL3NlcnZlci9zcmMvcmVtb3Rl X3Rhc2tzL21vZC5ycwo+PiArKysgYi9zZXJ2ZXIvc3JjL3JlbW90ZV90YXNrcy9tb2QucnMKPj4g QEAgLTE4LDYgKzE4LDggQEAgdXNlIHRva2lvOjp0YXNrOjpKb2luSGFuZGxlOwo+PiDCoCDCoCB1 c2UgY3JhdGU6OnthcGk6OnB2ZSwgdGFza191dGlsc307Cj4+IMKgICttb2QgdGFza19jYWNoZTsK Pj4gKwo+PiDCoCAvLy8gR2V0IHRhc2tzIGZvciBhbGwgcmVtb3Rlcwo+PiDCoCAvLyBGSVhNRTog ZmlsdGVyIGZvciBwcml2aWxlZ2VzCj4+IMKgIHB1YiBhc3luYyBmbiBnZXRfdGFza3MobWF4X2Fn ZTogaTY0LCBmaWx0ZXJzOiBUYXNrRmlsdGVycykgLT4gUmVzdWx0PFZlYzxUYXNrTGlzdEl0ZW0+ LCBFcnJvcj4gewo+PiBkaWZmIC0tZ2l0IGEvc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvdGFza19j YWNoZS5ycyBiL3NlcnZlci9zcmMvcmVtb3RlX3Rhc2tzL3Rhc2tfY2FjaGUucnMKPj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAuLmY4ZGQ4MjFlCj4+IC0tLSAvZGV2L251 bGwKPj4gKysrIGIvc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvdGFza19jYWNoZS5ycwo+PiBAQCAt MCwwICsxLDEwMjIgQEAKPj4gKy8vISBUYXNrIGNhY2hlIGltcGxlbWVudGF0aW9uLCBiYXNlZCBv biByb3RhdGluZyBmaWxlcy4KPj4gKwo+PiArdXNlIHN0ZDo6ewo+PiArwqDCoMKgIGNtcDo6T3Jk ZXJpbmcsCj4+ICvCoMKgwqAgY29sbGVjdGlvbnM6OntIYXNoTWFwLCBIYXNoU2V0fSwKPj4gK8Kg wqDCoCBmczo6RmlsZSwKPj4gK8KgwqDCoCBpbzo6e0J1ZlJlYWQsIEJ1ZlJlYWRlciwgQnVmV3Jp dGVyLCBFcnJvcktpbmQsIExpbmVzLCBXcml0ZX0sCj4+ICvCoMKgwqAgaXRlcjo6UGVla2FibGUs Cj4+ICvCoMKgwqAgcGF0aDo6e1BhdGgsIFBhdGhCdWZ9LAo+PiArwqDCoMKgIHRpbWU6OkR1cmF0 aW9uLAo+PiArfTsKPj4gKwo+PiArdXNlIGFueWhvdzo6e0NvbnRleHQsIEVycm9yfTsKPj4gK3Vz ZSBwcm94bW94X3N5czo6ZnM6OkNyZWF0ZU9wdGlvbnM7Cj4+ICt1c2Ugc2VyZGU6OntEZXNlcmlh bGl6ZSwgU2VyaWFsaXplfTsKPj4gKwo+PiArdXNlIHBkbV9hcGlfdHlwZXM6OlJlbW90ZVVwaWQ7 Cj4+ICsKPj4gKy8vLyBGaWxlbmFtZSBmb3IgdGhlIGZpbGUgY29udGFpbmluZyBydW5uaW5nIHRh c2tzLgo+PiArY29uc3QgQUNUSVZFX0ZJTEVOQU1FOiAmc3RyID0gImFjdGl2ZSI7Cj4+ICsvLy8g RmlsZW5hbWUgcHJlZml4IGZvciBhcmNoaXZlIGZpbGVzLgo+PiArY29uc3QgQVJDSElWRV9GSUxF TkFNRV9QUkVGSVg6ICZzdHIgPSAiYXJjaGl2ZS4iOwo+PiArLy8vIEZpbGVuYW1lIGZvciB0aGUg c3RhdGUgZmlsZS4KPj4gK2NvbnN0IFNUQVRFX0ZJTEVOQU1FOiAmc3RyID0gInN0YXRlIjsKPj4g Ky8vLyBGaWxlbmFtZSBvZiB0aGUgYXJjaGl2ZSBsb2NrZmlsZS4KPj4gK2NvbnN0IExPQ0tGSUxF X0ZJTEVOQU1FOiAmc3RyID0gIi5sb2NrIjsKPj4gKwo+PiArLy8vIEl0ZW0gd2hpY2ggY2FuIGJl IHB1dCBpbnRvIHRoZSB0YXNrIGNhY2hlLgo+PiArI1tkZXJpdmUoQ2xvbmUsIERlYnVnLCBTZXJp YWxpemUsIERlc2VyaWFsaXplLCBIYXNoLCBQYXJ0aWFsRXEsIEVxKV0KPj4gK3B1YiBzdHJ1Y3Qg VGFza0NhY2hlSXRlbSB7Cj4+ICvCoMKgwqAgLy8vIFRoZSB0YXNrJ3MgVVBJRAo+PiArwqDCoMKg IHB1YiB1cGlkOiBSZW1vdGVVcGlkLAo+PiArwqDCoMKgIC8vLyBUaGUgdGltZSBhdCB3aGljaCB0 aGUgdGFzayB3YXMgc3RhcnRlZCAoc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaCkuCj4+ICvC oMKgwqAgLy8vIFRlY2huaWNhbGx5IHRoaXMgaXMgYWxzbyBjb250YWluZWQgd2l0aGluIHRoZSBV UElELCBkdXBsaWNhdGluZyBpdCBoZXJlCj4+ICvCoMKgwqAgLy8vIGFsbG93cyB1cyB0byBkaXJl Y3RseSBhY2Nlc3MgaXQgd2hlbiBzb3J0aW5nIGluIG5ldyB0YXNrcywgd2l0aG91dCBoYXZpbmcK Pj4gK8KgwqDCoCAvLy8gdG8gcGFyc2UgdGhlIFVQSUQuCj4+ICvCoMKgwqAgcHViIHN0YXJ0dGlt ZTogaTY0LAo+IAo+IGluc3RlYWQgb2Ygc2F2aW5nIHRoZSBzdGFydHRpbWUgaGVyZSwgY291bGRu J3Qgd2UgYWxzbyB1c2UgdGhlIHBhcnNlZAo+IFVQSUQgc3RydWN0ICsgcmVtb3RlIGluc3RlYWQ/ Cj4gCj4gbm90IHN1cmUgYWJvdXQgdGhlIG1lbW9yeSBpbXBsaWNhdGlvbnMsIGJ1dCB0aGVuIHdl IGNvdWxkIGF2b2lkIHRoaW5ncwo+IGxpa2UgeW91IGhhdmluZyB0byBwYXJ0aWFsbHkgbW92ZSB0 aGUgdXBpZCBvdXQgb2YgYSBzdHJ1Y3QgYW5kIGJhY2sgYWdhaW4KPiBmb3IgcmVtb3Zpbmcgb3V0 IG9mIGEgaGFzaHNldAo+IAo+ICh0aG91Z2ggaXQncyBhbHNvIGZpbmUgYXMgaXQgaXMgZm9yIG1l KQoKSSdkIHJhdGhlciBrZWVwIHRoaXMgYXMgaXMsIGFzIGl0IGtlZXBzIHRoZSBhcmNoaXZlIGZp bGVzIHNtYWxsZXIuCgo+IAo+PiArwqDCoMKgICNbc2VyZGUoc2tpcF9zZXJpYWxpemluZ19pZiA9 ICJPcHRpb246OmlzX25vbmUiKV0KPj4gK8KgwqDCoCAvLy8gVGhlIHRhc2sncyBzdGF0dXMuCj4+ ICvCoMKgwqAgcHViIHN0YXR1czogT3B0aW9uPFN0cmluZz4sCj4+ICvCoMKgwqAgI1tzZXJkZShz a2lwX3NlcmlhbGl6aW5nX2lmID0gIk9wdGlvbjo6aXNfbm9uZSIpXQo+PiArwqDCoMKgIC8vLyBU aGUgdGFzaydzIGVuZHRpbWUgKHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2gpLgo+PiArwqDC oMKgIHB1YiBlbmR0aW1lOiBPcHRpb248aTY0PiwKPj4gK30KPj4gKwo+PiArLy8vIFN0YXRlIG5l ZWRlZCBmb3IgdGFzayBwb2xsaW5nLgo+PiArI1tkZXJpdmUoU2VyaWFsaXplLCBEZXNlcmlhbGl6 ZSwgRGVmYXVsdCldCj4+ICsjW3NlcmRlKHJlbmFtZV9hbGwgPSAia2ViYWItY2FzZSIpXQo+PiAr cHViIHN0cnVjdCBTdGF0ZSB7Cj4+ICvCoMKgwqAgLy8vIE1hcCBvZiByZW1vdGUgLT4gbW9zdCBy ZWNlbnQgdGFzayBzdGFydHRpbWUgKFVOSVggZXBvY2gpIGluIHRoZSBhcmNoaXZlLgo+PiArwqDC oMKgIC8vLyBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgY3V0LW9mZiB3aGVuIHJlcXVlc3RpbmcgbmV3 IHRhc2sgZGF0YS4KPj4gK8KgwqDCoCBwdWIgbW9zdF9yZWNlbnRfYXJjaGl2ZV9zdGFydHRpbWU6 IEhhc2hNYXA8U3RyaW5nLCBpNjQ+LAo+PiArwqDCoMKgIC8vLyBPbGRlc3QgcnVubmluZyB0YXNr LiBVc2VmdWwgYXMgYW5vdGhlciBjdXQtb2ZmIGZvciBmZXRjaGluZyB0YXNrcy4KPj4gK8KgwqDC oCAvLy8gVGhlIHRpbWVzdGFtcCBpcyBiYXNlZCBvbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVw b2NoLgo+PiArwqDCoMKgIHB1YiBvbGRlc3RfYWN0aXZlX3Rhc2s6IEhhc2hNYXA8U3RyaW5nLCBp NjQ+LD4gK8KgwqDCoCAvLy8gVHJhY2tlZCB0YXNrcyBwZXIgcmVtb3RlLgo+PiArwqDCoMKgIHB1 YiB0cmFja2VkX3Rhc2tzOiBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxSZW1vdGVVcGlkPj4sCj4+ ICt9Cj4gCj4gd291bGRuJ3QgaXQgYmUgcG9zc2libGUgdG8ganVzdCBzYXZlIHRoZSBjdXRvZmYg dGltZT8KPiB3ZSBqdXN0IGhhdmUgdG8gZmlyc3QgaW5jcmVhdGUgdGhlIHRpbWUgZm9yIHRoZSBm aW5pc2hlZCB0YXNrcwo+IGFuZCBhZnRlcndhcmRzIHJlZHVjZSBpdCBhZ2FpbiBpZiB0aGVyZSBp cyBzdGlsbCBhbiBhY3RpdmUgdGFzaz8KPiAKPiBhbHNvIHdvdWxkIGl0IGJlIHBvc3NpYmxlIHRv IGNvbWJpbmUgdGggaGFzaG1hcHMgaW50byBvbmU/Cj4gZS5nLiBIYXNoTWFwPFN0cmluZywgKGk2 NCwgSGFzaFNldDxTdHJpbmc+KT4gPwo+IAo+IHRoYXQgd2F5IHdlIHdvdWxkIHJlZHVjZSB0aGUg bnVtYmVyIG9mIHRpbWVzIHdlIHNhdmUgdGhlIHJlbW90ZSBpbiB0aGUgZmlsZQo+IHdoaWNoIGNh biBhZGQgdXAgaWYgd2UgaGF2ZSBtYW55IHJlbW90ZXMgKGUuZy4gaHVuZHJlZHMpCj4gCj4gc28g aW5zdGVhZCBvZgo+IAo+IHsKPiDCoMKgwqDCoCJtb3N0LXJlY2VudC1hcmNoaXZlLXN0YXJ0dGlt ZSI6IHsKPiDCoMKgwqDCoMKgwqDCoCAicmVtb3RlLTEiOiAxMjMxMjMsCj4gwqDCoMKgwqDCoMKg wqAgInJlbW90ZS0yIjogMTIzMTIzLAo+IMKgwqDCoMKgfSwKPiDCoMKgwqDCoCAib2xkZXN0X2Fj dGl2ZV90YXNrIiA6IHsKPiDCoMKgwqDCoMKgwqDCoCAicmVtb3RlLTEiOiAyMzIzMjMsCj4gwqDC oMKgwqDCoMKgwqAgInJlbW90ZS0yIjogMjMyMzIzLAo+IMKgwqDCoMKgfSwKPiDCoMKgwqDCoCJ0 cmFja2VkLXRhc2tzIjogewo+IMKgwqDCoMKgwqDCoMKgICJyZW1vdGUtMSI6IFsKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICJyZW1vdGUtMSE8VVBJRDE+IiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICJyZW1vdGUtMSE8VVBJRDI+Igo+IMKgwqDCoMKgwqDCoMKgIF0KPiDCoMKgwqDCoH0KPiB9 Cj4gCj4gaXQgd291bGQgYmU6Cj4gCj4gewo+IMKgwqDCoMKgInN0YXRlIjogewo+IMKgwqDCoMKg wqDCoMKgICJyZW1vdGUtMSI6IFsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEyMzEyMywKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFsiPFVQSUQxPiIsICI8VVBJRDI+Il0KPiDCoMKgwqDCoMKg wqDCoCBdLAo+IMKgwqDCoMKgwqDCoMKgICJyZW1vdGUtMiI6IFsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDEyMzEyMywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFtdCj4gwqDCoMKgwqDCoMKg wqAgXQo+IMKgwqDCoMKgfQo+IH0KClNvbWUgb2YgeW91ciBwb2ludHMgd2lsbCBub3QgYmUgcmVs ZXZhbnQgYW55IG1vcmUgb25jZSBJIGNoYW5nZSB0aGUgcG9sbGluZyBhcHByb2FjaCBhcyBkZXNj cmliZWQgYWJvdmUsCmJ1dCBJJ2xsIHNlZSBpZiBJIGNhbiBtYWtlIHRoZSBzdGF0ZSBmaWxlIGEg Yml0IG1vcmUgJ2NvbXBhY3QnIHdpdGggdGhlIG5ldyBhcHByb2FjaC4KCj4gCj4+ICsKPj4gKy8v LyBDYWNoZSBmb3IgcmVtb3RlIHRhc2tzLgo+PiArI1tkZXJpdmUoQ2xvbmUpXQo+PiArcHViIHN0 cnVjdCBUYXNrQ2FjaGUgewo+PiArwqDCoMKgIC8vLyBQYXRoIHdoZXJlIHRoZSBjYWNoZSdzIGZp bGVzIHNob3VsZCBiZSBwbGFjZWQuCj4+ICvCoMKgwqAgYmFzZV9wYXRoOiBQYXRoQnVmLAo+PiAr wqDCoMKgIC8vLyBGaWxlIHBlcm1pc3Npb25zIGZvciB0aGUgY2FjaGUncyBmaWxlcy4KPj4gK8Kg wqDCoCBjcmVhdGVfb3B0aW9uczogQ3JlYXRlT3B0aW9ucywKPj4gK30KPj4gKwo+PiArLy8vIFRh c2tzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjYWNoZSB2aWEgW2BUYXNrQ2FjaGU6OmFk ZF90YXNrc2BdLgo+PiArcHViIHN0cnVjdCBBZGRUYXNrcyB7Cj4+ICvCoMKgwqAgLy8vIFVwZGF0 ZSB0aGUgcmVtb3RlJ3MgZW50cnkgaW4gdGhlIHN0YXRlZmlsZSB3aGljaCBjb250YWlucyB0aGUK Pj4gK8KgwqDCoCAvLy8gdGltZXN0YW1wIG9mIHRoZSBtb3N0IHJlY2VudCAqZmluaXNoZWQqIHRh c2sgZnJvbSB0aGUgdGFzayBhcmNoaXZlLgo+PiArwqDCoMKgIHB1YiB1cGRhdGVfbW9zdF9yZWNl bnRfYXJjaGl2ZV90aW1lc3RhbXA6IGJvb2wsCj4+ICvCoMKgwqAgLy8vIFRoZSB0YXNrcyB0byBh ZGQuCj4+ICvCoMKgwqAgcHViIHRhc2tzOiBWZWM8VGFza0NhY2hlSXRlbT4sCj4+ICt9Cj4+ICsK Pj4gKy8vLyBMb2NrIGZvciB0aGUgY2FjaGUuCj4+ICsjW2FsbG93KGRlYWRfY29kZSldCj4+ICtw dWIgc3RydWN0IFRhc2tDYWNoZUxvY2soRmlsZSk7Cj4+ICsKPj4gKy8vLyBXaGljaCB0YXNrcyB0 byBmZXRjaCBmcm9tIHRoZSBhcmNoaXZlLgo+PiArcHViIGVudW0gR2V0VGFza3Mgewo+PiArwqDC oMKgIC8vLyBHZXQgYWxsIHRhc2tzLCBmaW5pc2hlZCBhbmQgcnVubmluZy4KPj4gK8KgwqDCoCBB bGwsCj4+ICvCoMKgwqAgLy8vIE9ubHkgZ2V0IHJ1bm5pbmcgKGFjdGl2ZSkgdGFza3MuCj4+ICvC oMKgwqAgQWN0aXZlLAo+PiArwqDCoMKgICNbY2ZnKHRlc3QpXSAvLyBVc2VkIGJ5IHRlc3RzLCBt aWdodCBiZSB1c2VkIGJ5IHByb2R1Y3Rpb24gY29kZSBpbiB0aGUgZnV0dXJlCj4+ICvCoMKgwqAg Ly8vIE9ubHkgZ2V0IGZpbmlzaGVkIChhcmNoaXZlZCkgdGFza3MuCj4+ICvCoMKgwqAgQXJjaGl2 ZWQsCj4+ICt9Cj4+ICsKPj4gK2ltcGwgVGFza0NhY2hlIHsKPj4gK8KgwqDCoCAvLy8gQ3JlYXRl IGEgbmV3IHRhc2sgY2FjaGUgaW5zdGFuY2UuCj4+ICvCoMKgwqAgLy8vCj4+ICvCoMKgwqAgLy8v IFJlbWVtYmVyIHRvIGNhbGwgYGluaXRgIG9yIGBuZXdfZmlsZWAgdG8gY3JlYXRlIGluaXRpYWwg YXJjaGl2ZSBmaWxlcyBiZWZvcmUKPj4gK8KgwqDCoCAvLy8gYWRkaW5nIGFueSB0YXNrcy4KPiAK PiBOb3Qgc3VyZSBpZiB3ZSB1c2UgdGhpcyBraW5kIG9mIHBhdHRlcm4gc29tZXdoZXJlIGFscmVh ZHksIGJ1dCBpZiB5b3UgdXNlIGRpZmZlcmVudAo+IHR5cGVzIGZvciBkaWZmZXJlbnQgbWV0aG9k cz8KPiAKPiAKPiBlLmcuIGhhdmluZyBhIFRhc2tDYWNoZSBhbmQgYW4gV3JpdGFibGVUYXNrQ2Fj aGUgd2hlcmUgb25seSB0aGUgc2Vjb25kIGhhcwo+IGFkZF90YXNrcyBhbmQgeW91IGNhbiBvbmx5 IHJlYWNoIGl0IGJ5IHVzaW5nIGluaXQvbmV3X2ZpbGUgPwo+IAo+IHRoZW4gaXQgY2Fubm90IGhh cHBlbiB0aGF0IGFkZCBpcyBjYWxsZWQgZmFsc2VseQo+IAo+IFNhbWUgd2l0aCB0aGUgLmxvY2so KSBjYWxscwo+IAo+IElmIHRoZXJlIHdvdWxkIGJlIGEgTG9ja2VkVGFza0NhY2hlIHRoYXQgY2Fu IGRvIGV2ZXJ5dGhpbmcgdGhhdCB5b3UgY2FuIGRvIHdpdGggYSBsb2NrCj4gdGhlcmUgaXMgbm8g bmVlZCB0byBtYW51YWxseSBoYW5kbGUgdGhlIGxvY2sgYW55d2hlcmUgb3V0c2lkZSB0aGlzIG1v ZHVsZQo+IChwcm9iYWJseSBuZWVkcyB0d28gdmFyaWFudHMsIG9uZSBmb3IgcmVhZGluZyBhbmQg b25lIGZvciB3cml0aW5nKQo+IAoKTWlnaHQgYmUgYSBnb29kIGlkZWEsIHRoYW5rcy4gSSdkIHBy ZWZlciB0byBkbyB0aGF0IGluIGEgZm9sbG93LXVwIHNlcmllcyBvbmNlIHRoaXMgaXMgYXBwbGll ZCwgc2luY2UgdGhpcyBpcyBtb3N0bHkKYSBzdHlsaXN0aWMgY2hvaWNlLgoKPiAKPj4gK8KgwqDC oCBwdWIgZm4gbmV3PFA6IEFzUmVmPFBhdGg+PihwYXRoOiBQLCBjcmVhdGVfb3B0aW9uczogQ3Jl YXRlT3B0aW9ucykgLT4gUmVzdWx0PFNlbGYsIEVycm9yPiB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBP ayhTZWxmIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFzZV9wYXRoOiBwYXRoLmFzX3Jl ZigpLmludG8oKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3JlYXRlX29wdGlvbnMsCj4+ ICvCoMKgwqDCoMKgwqDCoCB9KQo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIC8vLyBDcmVh dGUgaW5pdGlhbCB0YXNrIGFyY2hpdmVzIHRoYXQgY2FuIGJlIGJhY2tmaWxsZWQgd2l0aCB0aGUK Pj4gK8KgwqDCoCAvLy8gcmVjZW50IHRhc2sgaGlzdG9yeSBmcm9tIGEgcmVtb3RlLgo+PiArwqDC oMKgIC8vLwo+PiArwqDCoMKgIC8vLyBUaGlzIGZ1bmN0aW9uIG9ubHkgaGFzIGFuIGVmZmVjdCBp ZiB0aGVyZSBhcmUgbm8gYXJjaGl2ZSBmaWxlcyB5ZXQuCj4+ICvCoMKgwqAgcHViIGZuIGluaXQo JnNlbGYsIG5vdzogaTY0LCBudW1iZXJfb2ZfZmlsZXM6IHU2NCwgcGVyaW9kX3Blcl9maWxlOiB1 NjQpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gK8KgwqDCoMKgwqDCoMKgIGxldCBfbG9jayA9 IHNlbGYubG9jayh0cnVlKS5jb250ZXh0KCJmYWlsZWQgdG8gbG9jayBhcmNoaXZlIik/Owo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiBzZWxmLmFyY2hpdmVfZmlsZXMoKT8uaXNfZW1wdHkoKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciBpIGluIDAuLm51bWJlcl9vZl9maWxlcyB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5uZXdfZmlsZShub3cgLSAo aSAqIHBlcmlvZF9wZXJfZmlsZSkgYXMgaTY0KT87Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgT2soKCkpCj4+ ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgLy8vIFN0YXJ0IGEgbmV3IGFyY2hpdmUgZmlsZSB3 aXRoIGEgZ2l2ZW4gdGltZXN0YW1wLgo+PiArwqDCoMKgIC8vLyBgbm93YCBpcyBzdXBwb3NlZCB0 byBiZSBhIFVOSVggdGltZXN0YW1wIChzZWNvbmRzKS4KPj4gK8KgwqDCoCBmbiBuZXdfZmlsZSgm c2VsZiwgbm93OiBpNjQpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPj4gK8KgwqDCoMKgwqDCoMKg IGxldCBuZXdfcGF0aCA9IHNlbGYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmJhc2VfcGF0 aAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuam9pbihmb3JtYXQhKCJ7QVJDSElWRV9GSUxF TkFNRV9QUkVGSVh9e25vd30iKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBsZXQgbXV0IGZpbGUgPSBG aWxlOjpjcmVhdGUoJm5ld19wYXRoKT87Cj4+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLmNyZWF0ZV9v cHRpb25zLmFwcGx5X3RvKCZtdXQgZmlsZSwgJm5ld19wYXRoKT87Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgIE9rKCgpKQo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIC8vLyBMb2NrIHRoZSBj YWNoZS4KPj4gK8KgwqDCoCBmbiBsb2NrKCZzZWxmLCBleGNsdXNpdmU6IGJvb2wpIC0+IFJlc3Vs dDxUYXNrQ2FjaGVMb2NrLCBFcnJvcj4gewo+PiArwqDCoMKgwqDCoMKgwqAgbGV0IGxvY2tmaWxl ID0gc2VsZi5iYXNlX3BhdGguam9pbihMT0NLRklMRV9GSUxFTkFNRSk7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgIGxldCBmZCA9IHByb3htb3hfc3lzOjpmczo6b3Blbl9maWxlX2xvY2tlZCgKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9ja2ZpbGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIER1cmF0aW9uOjpmcm9tX3NlY3MoMTUpLAo+IAo+IAo+IGp1c3QgZm9yIG15IGN1cmlvc2l0 eSAobm90IGEgY3JpdGlxdWUpOiBpcyB0aGVyZSBhIHNwZWNpYWwgcmVhc29uCj4gd2h5IHlvdSBz ZXQgdGhlIHRpbWVvdXQgbWFudWFsbHkgdG8gMTUgc2Vjb25kcyBpbnN0ZWFkIG9mIGxlYXZpbmcg aXQgdG8KPiB0aGUgZnVuY3Rpb24gdG8gdXNlIHRoZSBkZWZhdWx0Pwo+IAo+IHJlYXNvbiBmb3Ig bXkgcXVlc3Rpb24gaXM6IGlmIHlvdSBvZnRlbiByYW4gaW50byB0aW1lb3V0cyB3aXRoIGp1c3Qg MTAgc2Vjb25kcyAoYWZhaXIgdGhlIGRlZmF1bHQpLAo+IGNoYW5jZXMgYXJlIHVzZXJzIGluIHRo ZSB3aWxkIHdpbGwgcnVuIGludG8gaXQgd2l0aCAxNSBzZWNvbmRzIHRvbywgc28gd2UgbWlnaHQg d2FudCB0byBlaXRoZXIgdXNlCj4gYSAqbXVjaCogYmlnZ2VyIHRpbWVvdXQsIG9yIG1ha2UgaXQg c29tZWhvdyBjb25maWd1cmFibGUuCgpObyBnb29kIHJlYXNvbiBhY3R1YWxseSwgSSBtaWdodCBo YXZlIGNvcGllZCB0aGF0IGxpbmUgZnJvbSBzb21ld2hlcmUgYW5kIHRoZW4gZGlkbid0IGNoYW5n ZSBpdC4gQXQgbGVhc3QgSSBjYW5ub3QKcmVtZW1iZXIgYW55IHJlYXNvbiB3aHkgSSBjaG9zZSAx NSBzZWNvbmRzLiBJJ2xsIGNoYW5nZSBpdCB0byB0aGUgZGVmYXVsdC4gVGhhbmtzIQo+IAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleGNsdXNpdmUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNlbGYuY3JlYXRlX29wdGlvbnMsCj4+ICvCoMKgwqDCoMKgwqDCoCApPzsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqAgT2soVGFza0NhY2hlTG9jayhmZCkpCj4+ICvCoMKgwqAgfQo+PiArCj4+ ICvCoMKgwqAgLy8vIFJvdGF0ZSB0YXNrIGFyY2hpdmUgaWYgdGhlIHRoZSBuZXdlc3QgYXJjaGl2 ZSBmaWxlIGlzIG9sZGVyIHRoYW4gYHJvdGF0ZV9hZnRlcmAuCj4+ICvCoMKgwqAgLy8vCj4+ICvC oMKgwqAgLy8vIFRoZSBvbGRlc3QgYXJjaGl2ZSBmaWxlcyBhcmUgcmVtb3ZlZCBpZiB0aGUgdG90 YWwgbnVtYmVyIG9mIGFyY2hpdmUgZmlsZXMgZXhjZWVkcwo+PiArwqDCoMKgIC8vLyBgbWF4X2Zp bGVzYC4gYG5vd2AgaXMgc3VwcG9zZWQgdG8gYmUgYSBVTklYIHRpbWVzdGFtcCAoc2Vjb25kcyku Cj4+ICvCoMKgwqAgLy8vCj4+ICvCoMKgwqAgLy8vIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgYW4g ZXhjbHVzaXZlIGxvY2ssIGRvbid0IGNhbGwgaWYgeW91IGFscmVhZHkgaG9sZCBhIGxvY2suCj4+ ICvCoMKgwqAgcHViIGZuIHJvdGF0ZSgmc2VsZiwgbm93OiBpNjQsIHJvdGF0ZV9hZnRlcjogdTY0 LCBtYXhfZmlsZXM6IHU2NCkgLT4gUmVzdWx0PGJvb2wsIEVycm9yPiB7Cj4+ICvCoMKgwqDCoMKg wqDCoCBsZXQgX2xvY2sgPSBzZWxmLmxvY2sodHJ1ZSkuY29udGV4dCgiZmFpbGVkIHRvIGxvY2sg YXJjaGl2ZSIpPzsKPj4gK8KgwqDCoMKgwqDCoMKgIGxldCBtdXQgZGlkX3JvdGF0ZSA9IGZhbHNl Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBsZXQgbXV0IGJvdW5kcyA9IHNlbGYuYXJjaGl2ZV9m aWxlcygpPzsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgbWF0Y2ggYm91bmRzLmZpcnN0KCkgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTb21lKGJvdW5kKSA9PiB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgbm93ID4gYm91bmQuc3RhcnR0aW1lICYmIG5vdyAtIGJv dW5kLnN0YXJ0dGltZSA+IHJvdGF0ZV9hZnRlciBhcyBpNjQgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5uZXdfZmlsZShub3cpPzsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRpZF9yb3RhdGUgPSB0cnVlOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOb25lID0+IHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzZWxmLm5ld19maWxlKG5vdyk/Owo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGRpZF9yb3RhdGUgPSB0cnVlOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHdoaWxl IGJvdW5kcy5sZW4oKSA+PSBtYXhfZmlsZXMgYXMgdXNpemUgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvLyBVbndyYXAgaXMgc2FmZSBiZWNhdXNlIG9mIHRoZSBsZW5ndGggY2hlY2sgYWJv dmUKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGV0IHRvX3JlbW92ZSA9IGJvdW5kcy5wb3Ao KS51bndyYXAoKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RkOjpmczo6cmVtb3ZlX2Zp bGUoJnRvX3JlbW92ZS5maWxlKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC53 aXRoX2NvbnRleHQofHwgZm9ybWF0ISgiZmFpbGVkIHRvIHJlbW92ZSB7fSIsIHRvX3JlbW92ZS5m aWxlLmRpc3BsYXkoKSkpPzsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDC oMKgwqAgT2soZGlkX3JvdGF0ZSkKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvLy8gQWRk IG5ldyB0YXNrcyB0byB0aGUgdGFzayBhcmNoaXZlLgo+PiArwqDCoMKgIC8vLwo+PiArwqDCoMKg IC8vLyBSdW5uaW5nIHRhc2tzICh0YXNrcyB3aXRob3V0IGFuIGVuZHRpbWUpIGFyZSBwbGFjZWQg aW50byB0aGUgJ2FjdGl2ZScgZmlsZSBpbiB0aGUKPj4gK8KgwqDCoCAvLy8gdGFzayBjYWNoZSBi YXNlIGRpcmVjdG9yeS4gRmluaXNoZWQgdGFza3MgYXJlIHNvcnRlZCBpbnRvIGBhcmNoaXZlLjxz dGFydGltZT5gIGFyY2hpdmUKPj4gK8KgwqDCoCAvLy8gZmlsZXMsIHdoZXJlIGA8c3RhcnR0aW1l cz5gIGRlbm90ZXMgdGhlIGxvd2VzdCBwZXJtaXR0ZWQgc3RhcnQgdGltZSB0aW1lc3RhbXAgZm9y IGEgZ2l2ZW4KPj4gK8KgwqDCoCAvLy8gYXJjaGl2ZSBmaWxlLiBJZiBhIHRhc2sgd2hpY2ggd2Fz IGFkZGVkIGFzIHJ1bm5pbmcgcHJldmlvdXNseSBpcyBhZGRlZCBhZ2FpbiwgdGhpcyB0aW1lIGlu Cj4+ICvCoMKgwqAgLy8vIGEgZmluaXNoZWQgc3RhdGUsIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9t IHRoZSBgYWN0aXZlYCBmaWxlIGFuZCBhbHNvIHNvcnRlZCBpbnRvCj4+ICvCoMKgwqAgLy8vIG9u ZSBvZiB0aGUgYXJjaGl2ZSBmaWxlcy4KPj4gK8KgwqDCoCAvLy8gU2FtZSBnb2VzIGZvciB0aGUg bGlzdCBvZiB0cmFja2VkIHRhc2tzOyB0aGUgZW50cnkgaW4gdGhlIHN0YXRlIGZpbGUgd2lsbCBi ZSByZW1vdmVkLgo+PiArwqDCoMKgIC8vLwo+PiArwqDCoMKgIC8vLyBDcmFzaCBjb25zaXN0ZW5j eToKPj4gK8KgwqDCoCAvLy8KPj4gK8KgwqDCoCAvLy8gVGhlIHN0YXRlIGZpbGUsIHdoaWNoIGNv bnRhaW5zIHRoZSBjdXQtb2ZmIHRpbWVzdGFtcHMgZm9yIGZ1dHVyZSB0YXNrIGZldGNoaW5nLCBp cyB1cGRhdGVkIGF0IHRoZQo+PiArwqDCoMKgIC8vLyBlbmQgYWZ0ZXIgYWxsIHRhc2tzIGhhdmUg YmVlbiBhZGRlZCBpbnRvIHRoZSBhcmNoaXZlLiBBZGRpbmcgdGFza3MgaXMgYW4gaWRlbXBvdGVu dAo+PiArwqDCoMKgIC8vLyBvcGVyYXRpb247IGFkZGluZyB0aGUgKnNhbWUqIHRhc2sgbXVsdGlw bGUgdGltZXMgZG9lcyBub3QgbGVhZCB0byBkdXBsaWNhdGVkIGVudHJpZXMgaW4gdGhlCj4+ICvC oMKgwqAgLy8vIHRhc2sgYXJjaGl2ZS4gSW5kaXZpZHVhbCBhcmNoaXZlIGZpbGVzIGFyZSB1cGRh dGVkIGF0b21pY2FsbHksIGJ1dCBzaW5jZQo+PiArwqDCoMKgIC8vLyBhZGRpbmcgdGFza3MgY2Fu IGludm9sdmUgdXBkYXRpbmcgbXVsdGlwbGUgYXJjaGl2ZSBmaWxlcywgdGhlIGFyY2hpdmUgY291 bGQgZW5kIHVwCj4+ICvCoMKgwqAgLy8vIGluIGEgcGFydGlhbGx5LXVwZGF0ZWQsIGluY29uc2lz dGVudCBzdGF0ZSBpbiBjYXNlIG9mIGEgY3Jhc2guCj4+ICvCoMKgwqAgLy8vIEhvd2V2ZXIsIHNp bmNlIHRoZSBzdGF0ZSBmaWxlIHdpdGggdGhlIGN1dC1vZmYgdGltZXN0YW1wcyBpcyB1cGRhdGVk IGxhc3QsCj4+ICvCoMKgwqAgLy8vIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgYXJjaGl2ZSBzaG91 bGQgYmUgcmVzdG9yZWQgYXQgdGhlIG5leHQgdXBkYXRlIGN5Y2xlIG9mIHRoZSBhcmNoaXZlLgo+ PiArwqDCoMKgIHB1YiBmbiBhZGRfdGFza3MoJnNlbGYsIG11dCBhZGRlZDogSGFzaE1hcDxTdHJp bmcsIEFkZFRhc2tzPikgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+PiArwqDCoMKgwqDCoMKgwqAg bGV0IGxvY2sgPSBzZWxmLmxvY2sodHJ1ZSkuY29udGV4dCgiZmFpbGVkIHRvIGxvY2sgYXJjaGl2 ZSIpPzsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLy8gR2V0IGEgZmxhdCBgVmVjYCBvZiBhbGwg bmV3IHRhc2tzCj4+ICvCoMKgwqDCoMKgwqDCoCBsZXQgdGFza3M6IFZlYzxfPiA9IGFkZGVkCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5pdGVyX211dCgpCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC5mbGF0X21hcCh8KF8sIHRhc2tzKXwgc3RkOjptZW06OnRha2UoJm11dCB0YXNrcy50 YXNrcykpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5jb2xsZWN0KCk7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgIGxldCB1cGRhdGVfc3RhdGVfZm9yX3JlbW90ZTogSGFzaE1hcDxTdHJpbmcs IGJvb2w+ID0gYWRkZWQKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmludG9faXRlcigpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5tYXAofChyZW1vdGUsIGFkZF90YXNrcyl8IChyZW1v dGUsIGFkZF90YXNrcy51cGRhdGVfbW9zdF9yZWNlbnRfYXJjaGl2ZV90aW1lc3RhbXApKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuY29sbGVjdCgpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oCBsZXQgbXV0IHRhc2tfaXRlciA9IHNlbGYKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmdl dF90YXNrc193aXRoX2xvY2soR2V0VGFza3M6OkFjdGl2ZSwgbG9jaykKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLmNvbnRleHQoImZhaWxlZCB0byBjcmVhdGUgYXJjaGl2ZSBpdGVyYXRvciBm b3IgYWN0aXZlIHRhc2tzIik/Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBsZXQgbXV0IGFjdGl2 ZV90YXNrcyA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhhc2hTZXQ6OmZyb21faXRlcih0 YXNrX2l0ZXIuZmxhdF9tYXAofGFjdGl2ZV90YXNrfCBtYXRjaCBhY3RpdmVfdGFzayB7Cj4gCj4g aSB0aGluayB5b3Ugd2FudCB0byB1c2UgJ2ZpbHRlcl9tYXAnIGhlcmU/IGV2ZW4gdGhvdWdoIGl0 IHNlZW1zIHRvIGRvIHRoZSBzYW1lIHRoaW5nIGluCj4gdGhpcyBpbnN0YW5jZSwgaSB0aGluayAn ZmlsdGVyX21hcCcgYmV0dGVyIGV4cHJlc3NlcyB3aGF0IHlvdSB3YW50IHRvIGRvCgpUcnVlLCBm aWx0ZXJfbWFwIGlzIGEgYmV0dGVyIGZpdC4gVGhhbmtzIQoKPiAKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBPayh0YXNrKSA9PiBTb21lKCh0YXNrLnVwaWQsIHRhc2suc3RhcnR0 aW1lKSksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRXJyKGVycikgPT4gewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9nOjplcnJvciEoImZh aWxlZCB0byByZWFkIHRhc2sgY2FjaGUgZW50cnkgZnJvbSBhY3RpdmUgZmlsZToge2Vycn0iKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5vbmUKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0p KTsKPiAKPiBkb2VzIGl0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSB0aGF0IHlvdSBzYXZlIHRoZSBz dGFydHRpbWUgc2VwZXJhdGVseSBoZXJlPwo+IAo+IEZXSUNULCB0aGlzIG1ha2VzIHRoZSByZW1v dmUgY29kZSBsYXRlciBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLCBhbmQKPiB3b3VsZCBvbmx5IG5l ZWQgdG8gYmUgcGFyc2VkIGluIGB1cGRhdGVfb2xkZXN0X2FjdGl2ZWAuIFNpbmNlIGkgZG9uJ3Qg YXNzdW1lIHRvbyBtYW55IGNvbmN1cnJlbnQKPiBhY3RpdmUgdGFza3MgaW4gb25lIHNldCBvZiB1 cGRhdGVzLCBpIGRvbid0IHRoaW5rIHRoZSBwYXJzaW5nIHNob3VsZCBiZSB2ZXJ5IGJhZCBoZXJl Li4uCgpXZWxsLCB0aGUgcmF0aW9uYWxlIGZvciBoYXZpbmcgdGhlIHN0YXJ0aW1lIGluIFRhc2tD YWNoZUl0ZW0gYXMgYSBzZXBhcmF0ZSBmaWVsZCBzbyB0aGF0IEkgY2FuIHNvcnQgdGFza3MgaW4g dGhlIE1lcmdlVGFza0l0ZXJhdG9yIHdpdGhvdXQKcGFyc2luZyB0aGUgVVBJRC4KSSB0aGlzIGZ1 bmN0aW9uIGhlcmUsIEkgZGVzZXIgVGFza0NhY2hlSXRlbXMgYW5kIGdldCB0aGUgc3RhcnR0aW1l IGZyb20gdGhhdCwgSSBkb24ndCBzZWUgd2h5IEkgc2hvdWxkCmRpc2NhcmQgdGhlIGluZm8gSSBh bHJlYWR5IGhhdmUgdG8gcGFyc2UgaXQgYWdhaW4gZnJvbSB0aGUgVVBJRD8KQnV0IG1heWJlIHRo ZXJlIGlzIHNvbWUgbWlzdW5kZXJzdGFuZGluZyBoZXJlLgoKPiAKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqAgLy8gQ29uc3VtZSB0aGUgaXRlcmF0b3IgdG8gZ2V0IGJhY2sgdGhlIGxvY2suIFRoZSBs b2NrIGlzIGhlbGQKPj4gK8KgwqDCoMKgwqDCoMKgIC8vIHVudGlsIF9sb2NrIGlzIGZpbmFsbHkg ZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KPj4gK8KgwqDCoMKgwqDCoMKgIGxl dCBfbG9jayA9IHRhc2tfaXRlci5pbnRvX2xvY2soKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAg bGV0IG11dCBuZXdfZmluaXNoZWRfdGFza3MgPSBWZWM6Om5ldygpOwo+PiArCj4+ICvCoMKgwqDC oMKgwqDCoCBmb3IgdGFzayBpbiB0YXNrcyB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IHRhc2suZW5kdGltZS5pc19ub25lKCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGFjdGl2ZV90YXNrcy5pbnNlcnQoKHRhc2sudXBpZCwgdGFzay5zdGFydHRpbWUpKTsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBuZXdfZmluaXNoZWRfdGFza3MucHVzaCh0YXNrKTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCgoKLS0gCi0gTHVrYXMKCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGRtLWRldmVs IG1haWxpbmcgbGlzdApwZG0tZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5w cm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGRtLWRldmVsCg==