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 [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id B11641FF189 for <inbox@lore.proxmox.com>; Fri, 21 Mar 2025 14:39:17 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D94D71EAC9; Fri, 21 Mar 2025 14:39:16 +0100 (CET) Mime-Version: 1.0 Date: Fri, 21 Mar 2025 14:39:11 +0100 Message-Id: <D8LZIBKALH9J.21W4E7ZF9LL4R@proxmox.com> To: "Proxmox Datacenter Manager development discussion" <pdm-devel@lists.proxmox.com>, "Lukas Wagner" <l.wagner@proxmox.com> From: "Max Carrara" <m.carrara@proxmox.com> X-Mailer: aerc 0.18.2-0-ge037c095a049 References: <20250314141225.240768-1-l.wagner@proxmox.com> <20250314141225.240768-6-l.wagner@proxmox.com> <9947a9f1-bd50-4ae5-90d9-203dff5b0cb7@proxmox.com> In-Reply-To: <9947a9f1-bd50-4ae5-90d9-203dff5b0cb7@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.077 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.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. [proxmox.com, mod.rs, proxmox-datacenter-api.rs, qemu.rs, lxc.rs] Subject: Re: [pdm-devel] [PATCH proxmox-datacenter-manager 5/8] remote tasks: add background task for task polling, use new task cache 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> T24gVGh1IE1hciAyMCwgMjAyNSBhdCA2OjM5IFBNIENFVCwgVGhvbWFzIExhbXByZWNodCB3cm90 ZToKPiBBbSAxNC4wMy4yNSB1bSAxNToxMiBzY2hyaWViIEx1a2FzIFdhZ25lcjoKPiA+IFRoaXMg Y29tbWl0cyBjaGFuZ2VzIHRoZSByZW1vdGUgdGFzayBtb2R1bGUgYXMgZm9sbG93czoKPiA+IAo+ ID4gLSBBZGQgYSBuZXcgYmFja2dyb3VuZCB0YXNrIGZvciByZWd1bGFyIHBvbGxpbmcgb2YgdGFz ayBkYXRhCj4gPiBJbnN0ZWFkIG9mIHRyaWdnZXJpbmcgZmV0Y2hpbmcgb2YgdGFzayBkYXRhIGZy b20gdGhlIGBnZXRfdGFza3NgIGZ1bmN0aW9uLAo+ID4gd2hpY2ggaXMgdXN1YWxseSBjYWxsZWQg YnkgYW4gQVBJIGhhbmRsZXIsIHdlIG1vdmUgdGhlIGZldGNoaW5nIHRvIGEKPiA+IG5ldyBiYWNr Z3JvdW5kIHRhc2suIFRoZSB0YXNrIGZldGNoZXMgdGhlIGxhdGVzdCB0YXNrcyBmcm9tIGFsbCBy ZW1vdGVzCj4gPiBhbmQgc3RvcmVzIHRoZW0gaW4gdGhlIHRhc2sgY2FjaGUgaW4gcmVndWxhciBp bnRlcnZhbHMgKDEwIG1pbnV0ZXMpLgo+ID4gVGhlIGBnZXRfdGFza3NgIGZ1bmN0aW9uIGl0c2Vs ZiBvbmx5IHJlYWRzIGZyb20gdGhlIGNhY2hlLgo+ID4gVGhlIG1haW4gcmF0aW9uYWxlIGZvciB0 aGlzIGNoYW5nZSBpcyB0aGF0IGZvciBsYXJnZSBzZXR1cHMsIGZldGNoaW5nCj4gPiB0YXNrcyBm cm9tIGFsbCByZW1vdGVzIGNhbiB0YWtlIGEgKmxvbmcqIHRpbWUgKGUuZy4gaHVuZHJlZHMgb2Yg cmVtb3RlcywKPiA+IGVhY2ggd2l0aCBhID4xMDBtcyBjb25uZWN0aW9uIC0gYWRkcyB1cCB0byBt aW51dGVzIHF1aWNrbHkpLgo+ID4gSWYgd2UgZG8gdGhpcyBmcm9tIHdpdGhpbiBgZ2V0X3Rhc2tz YCwgdGhlIEFQSSBoYW5kbGVyIGNhbGxpbmcgdGhlCj4gPiBmdW5jdGlvbiBpcyBhbHNvIGJsb2Nr ZWQgZm9yIHRoZSBlbnRpcmUgdGltZS4KPiA+IFRoZSBgZ2V0X3Rhc2tzYCBBUEkgaXMgY2FsbGVk IGV2ZXJ5IGNvdXBsZSBvZiBzZWNvbmRzIGJ5IHRoZSBVSSB0aGUgZ2V0Cj4gPiBhIGxpc3Qgb2Yg cnVubmluZyByZW1vdGUgdGFza3MsIHNvIHRoaXMgKm11c3QqIGJlIHF1aWNrLgo+ID4gCj4gPiAt IFRyYWNrZWQgdGFza3MgYXJlIGFsc28gcG9sbGVkIGluIHRoZSBzYW1lIGJhY2tncm91bmQgdGFz aywgYnV0IHdpdGgKPiA+IGEgc2hvcnQgcG9sbGluZyBkZWxheSAoMTAgc2Vjb25kcykuIEluc3Rl YWQgb2YgcG9sbGluZyB0aGUgc3RhdHVzIHNwZWNpZmljCj4gPiB0cmFja2VkIHRhc2sgVVBJRCwg d2Ugc2ltcGx5IGZldGNoICphbGwqIHRhc2tzIHNpbmNlIHRoZSB0cmFja2VkIHRhc2sgc3RhcnRl ZC4KPiA+IFdoaWxlIHRoaXMgaW5jcmVhc2VkIHRoZSBhbW91bnQgb2YgdHJhbnNtaXR0ZWQgZGF0 YSBhIGJpdCBmb3IgdHJhY2tlZCB0YXNrcwo+ID4gdGhhdCBydW4gZm9yIGEgdmVyeSBsb25nIHRp bWUsIHRoaXMgbmV3IGFwcHJvYWNoIG1ha2UgdGhlIHdob2xlCj4gPiB0YXNrIHRyYWNraW5nIGZ1 bmN0aW9uYWxpdHkgbXVjaCBtb3JlIGVsZWdhbnQ7IGl0IGludGVncmF0ZXMgYmV0dGVyIHdpdGgK PiA+IHRoZSAncmVndWxhcicgdGFzayBmZXRjaGluZyB3aGljaCBoYXBwZW5zIGluIGxvbmcgaW50 ZXJ2YWxzLgo+ID4gCj4gPiAtIFRhc2tzIGFyZSBub3cgc3RvcmVkIGluIHRoZSBuZXcgaW1wcm92 ZWQgdGFzayBjYWNoZSBpbXBsZW1lbnRhdGlvbi4KPiA+IFRoaXMgc2hvdWxkIG1ha2UgcmV0cmll dmluZyB0YXNrcyBtdWNoIHF1aWNrZXIgYW5kIGF2b2lkcwo+ID4gdW5uZWVkZWQgZGlzayBJTy4K Pgo+IFRoZSBoaWdoZXIgbGV2ZWwgZGVzY3JpcHRpb24gcmVhZHMgZ29vZCB0byBtZSBhbmQgSSBw bGFuIHRvIHRha2UgYSBjbG9zZXIKPiBsb29rLCBidXQgd2hpbGUgYXBwbHlpbmcgdGhpcyDigJMg d2l0aCBhIHRyaXZpYWwgbWVyZ2UgY29uZmxpY3QgaW4gdXNlCj4gc3RhdGVtZW50cyByZXNvbHZl ZCBkdWUgdG8gV29sZmdhbmcncyBjbGllbnQgc2VyaWVzIGJlaW5nIGFwcGxpZWQgZWFybGllciDi gJMKPiBzb21lIHNtYWxsZXIgdGhpbmdzIHN0dWNrIGEgYml0IG91dCB0byBtZSB3aGVuIHNraW1t aW5nIGdpdCBsb2csIGEgZmV3Cj4gYXJlIHJhdGhlciBpbiB0aGUgYmlrZSBzaGVkIGFyZWEgdGhv dWdoLCBzZWUgYmVsb3cuCj4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTHVrYXMgV2FnbmVyIDxs LndhZ25lckBwcm94bW94LmNvbT4KPiA+IFJldmlld2VkLWJ5OiBNYXggQ2FycmFyYSA8bS5jYXJy YXJhQHByb3htb3guY29tPgo+Cj4gV2hpbGUgSSBjZXJ0YWlubHkgZW5jb3VyYWdlIHdvcmtpbmcg dG9nZXRoZXIgSSdtIG5vdCBhIHJlYWxseSBodWdlIGZhbgo+IG9mIGJsaW5kIHJldmlldyAodGFn cykgd2hlcmUgb25lIGNhbm5vdCBzZWUgYW55IHJldmlldyBjb21tZW50cyBhdCBhbGwsCj4gaXQn cyBhIGxvc3MgaW4gaW5mb3JtYXRpb24gYW5kIGNhbiBhbHNvIHJlc3VsdCBpbiBzb21lIGluY3Jl YXNlZCBvdmVyaGVhZC4KCkZhaXIgcG9pbnQhIEluIHRoYXQgY2FzZSwgbGV0IG1lIHByb3ZpZGUg c29tZSBtb3JlIGNvbnRleHQgaGVyZTsgaXQncwpub3RoaW5nIHJlYWxseSB0aGF0IG1ham9yOgoK SSBtb3N0bHkgcG9pbnRlZCBvdXQgY2FzZXMgd2hlcmUgYGNvbnN0YHMgd291bGQgYmUgYmVuZWZp Y2lhbCBpbnN0ZWFkIG9mCmhhdmluZyBhIG1hZ2ljIG51bWJlciBmbG9hdGluZyBhcm91bmQgYW5k IGFsc28gc3VnZ2VzdGVkIHRoZSB1c2Ugb2YgYQp0eXBlIGFsaWFzIGZvciB1bml4IHRpbWVzdGFt cHM7IHRoZSBsYXR0ZXIgd2FzIG91dCBvZiBzY29wZSBmb3IgdGhpcwpzZXJpZXMgdGhvdWdoIChh bmQgbW9zdGx5IGJpa2VzaGVkZGluZyBhbnl3YXlzKS4gQWxzbyBwb2ludGVkIG91dCBhIHR5cG8K aGVyZSBhbmQgdGhlcmUgaW4gZG9jc3RyaW5ncyBhbmQgc3VnZ2VzdGVkIGJyZWFraW5nIHVwIHRo ZSBvcmlnaW5hbApgVGFza0NhY2hlOjphZGRfdGFza3NgIG1ldGhvZCAoc2VlIHBhdGNoIDA0LCB0 aGUgb25lIHlvdSBzZWUgdGhlcmUgaXMKdGhlIHNsaW1tZWQtZG93biB2ZXJzaW9uKS4KClRoYXQn cyBwcmV0dHkgbXVjaCBpdDsgZXZlcnl0aGluZyBlbHNlIHNlZW1lZCBxdWl0ZSBmaW5lIHRvIG1l LgoKPgo+ID4gLS0tCj4gPiAgc2VydmVyL3NyYy9hcGkvcHZlL2x4Yy5ycyAgICAgICAgICAgICAg ICB8ICAxMCArLQo+ID4gIHNlcnZlci9zcmMvYXBpL3B2ZS9tb2QucnMgICAgICAgICAgICAgICAg fCAgIDQgKy0KPiA+ICBzZXJ2ZXIvc3JjL2FwaS9wdmUvcWVtdS5ycyAgICAgICAgICAgICAgIHwg ICA2ICstCj4gPiAgc2VydmVyL3NyYy9hcGkvcmVtb3RlX3Rhc2tzLnJzICAgICAgICAgICB8ICAx MSArLQo+ID4gIHNlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNlbnRlci1hcGkucnMgfCAgIDMg Ky0KPiA+ICBzZXJ2ZXIvc3JjL3JlbW90ZV90YXNrcy9tb2QucnMgICAgICAgICAgIHwgNzg4ICsr KysrKysrKysrLS0tLS0tLS0tLS0tCj4gPiAgNiBmaWxlcyBjaGFuZ2VkLCAzODggaW5zZXJ0aW9u cygrKSwgNDM0IGRlbGV0aW9ucygtKQo+ID4gCj4KPiA+IGRpZmYgLS1naXQgYS9zZXJ2ZXIvc3Jj L3JlbW90ZV90YXNrcy9tb2QucnMgYi9zZXJ2ZXIvc3JjL3JlbW90ZV90YXNrcy9tb2QucnMKPiA+ IGluZGV4IDIwNjJmMmI3Li40OGQ1NDY5NCAxMDA2NDQKPiA+IC0tLSBhL3NlcnZlci9zcmMvcmVt b3RlX3Rhc2tzL21vZC5ycwo+ID4gKysrIGIvc2VydmVyL3NyYy9yZW1vdGVfdGFza3MvbW9kLnJz Cj4gPiBAQCAtMSw2NSArMSwxMDYgQEAKPiA+IC11c2Ugc3RkOjp7Cj4gPiAtICAgIGNvbGxlY3Rp b25zOjp7SGFzaE1hcCwgSGFzaFNldH0sCj4gPiAtICAgIGZzOjpGaWxlLAo+ID4gLSAgICBwYXRo Ojp7UGF0aCwgUGF0aEJ1Zn0sCj4gPiAtICAgIHN5bmM6OntMYXp5TG9jaywgUndMb2NrfSwKPiA+ IC0gICAgdGltZTo6RHVyYXRpb24sCj4gPiAtfTsKPiA+ICt1c2Ugc3RkOjp7Y29sbGVjdGlvbnM6 Okhhc2hNYXAsIHBhdGg6OlBhdGgsIHN5bmM6OkFyYywgdGltZTo6RHVyYXRpb259Owo+ID4gIAo+ ID4gLXVzZSBhbnlob3c6OkVycm9yOwo+ID4gK3VzZSBhbnlob3c6Ontmb3JtYXRfZXJyLCBFcnJv cn07Cj4gPiArdXNlIG5peDo6c3lzOjpzdGF0OjpNb2RlOwo+ID4gIHVzZSBwZG1fYXBpX3R5cGVz Ojp7Cj4gPiAgICAgIHJlbW90ZXM6OntSZW1vdGUsIFJlbW90ZVR5cGV9LAo+ID4gICAgICBSZW1v dGVVcGlkLCBUYXNrRmlsdGVycywgVGFza0xpc3RJdGVtLCBUYXNrU3RhdGVUeXBlLAo+ID4gIH07 Cj4gPiAgdXNlIHByb3htb3hfc3lzOjpmczo6Q3JlYXRlT3B0aW9uczsKPiA+ICB1c2UgcHZlX2Fw aV90eXBlczo6e0xpc3RUYXNrcywgTGlzdFRhc2tzUmVzcG9uc2UsIExpc3RUYXNrc1NvdXJjZSwg UHZlVXBpZH07Cj4gPiAtdXNlIHNlcmRlOjp7RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07Cj4gPiAt dXNlIHRva2lvOjp0YXNrOjpKb2luSGFuZGxlOwo+ID4gK3VzZSB0YXNrX2NhY2hlOjp7QWRkVGFz a3MsIEdldFRhc2tzLCBTdGF0ZSwgVGFza0NhY2hlLCBUYXNrQ2FjaGVJdGVtfTsKPiA+ICt1c2Ug dG9raW86OntzeW5jOjpTZW1hcGhvcmUsIHRhc2s6OkpvaW5TZXR9Owo+ID4gIAo+ID4gIHVzZSBj cmF0ZTo6e2FwaTo6cHZlLCB0YXNrX3V0aWxzfTsKPiA+ICAKPiA+ICBtb2QgdGFza19jYWNoZTsK PiA+ICAKPiA+ICtjb25zdCBSRU1PVEVfVEFTS1NfRElSOiAmc3RyID0gY29uY2F0IShwZG1fYnVp bGRjZmc6OlBETV9DQUNIRV9ESVJfTSEoKSwgIi9yZW1vdGUtdGFza3MiKTsKPiA+ICsKPiA+ICtj b25zdCBTRUNPTkRTX1BFUl9NSU5VVEU6IHU2NCA9IDYwOwo+ID4gK2NvbnN0IE1JTlVURVNfUEVS X0hPVVI6IHU2NCA9IDYwOwo+IFdoaWxlIHRlY2huaWNhbGx5IGNvcnJlY3QgdGhpcyByZWFkcyBs aWtlIGEgcmF0ZSBhbmQgbWFrZXMgaXQgSU1PIGEgYml0Cj4gaGFyZGVyIHRvIHRlbGwgd2hhdCBp cyBtZWFudCBpbiBiZWxvdyBjYWxjdWxhdGlvbnMuCj4KPiBJJ2QgZWl0aGVyIHVzZSBEdXJhdGlv biBmcm9tIHN0ZCwgbGlrZSBlLmcuIER1cmF0aW9uOjpmcm9tX21pbnMoMTApLmFzX3NlY3MoKQo+ IGFuZCBEdXJhdGlvbjo6ZnJvbV9ob3VycygxKS5hc19zZWNzKCkgcmVzcGVjdGl2ZWx5IGZvciBS RUdVTEFSX1JFRlJFU0hfUyBhbmQKPiBDSEVDS19ST1RBVEVfUyBiZWxvdyBvciBqdXN0IDYwIGFu ZCAzNjAwLCB0aG9zZSB2YWx1ZXMgYXJlIHByZXR0eSBtdWNoIGdlbmVyYWwKPiBrbm93bGVkZ2Us IHdoaWNoIG1pZ2h0IGJlIGEgcGFydCBvZiB0aGUgY29uZnVzaW9uIHBvdGVudGlhbCBJIHNlZSBp biB5b3VyCj4gdmFyaWFudCwgYXMgSSBiYXNpY2FsbHkgZXhwZWN0IHRoYXQgdGhpcyBoYXMgdG8g YmUgc29tZXRoaW5nIG1vcmUgZWxhYm9yYXRlIG9yCj4gd2h5ICB3b3VsZCBpdCBnbyBmb3IgdGhp cyBzZWVtaW5nbHkgY29tcGxleCB2YXJpYW50Lgo+IFRoYXQgc2FpZCwgdXNpbmcgd2hhdCB0aGUg c3RkIGxpYiBhbHJlYWR5IHByb3ZpZGVzIGlzIHRvdGFsbHkgZmluZSBoZXJlLgo+Cj4gPiArCj4g PiArLy8vIFRpY2sgcmF0ZSBmb3IgdGhlIHJlbW90ZSB0YXNrIGZldGNoaW5nIHRhc2suCj4gPiAr Ly8vIFRoaXMgaXMgYWxzbyB0aGUgcmF0ZSBhdCB3aGljaCB3ZSBjaGVjayBvbiB0cmFja2VkIHRh c2tzLgo+ID4gK2NvbnN0IFRJQ0tfUkFURV9TOiB1NjQgPSAxMDsKPiA+ICsKPiA+ICsvLy8gSW50 ZXJ2YWwgaW4gc2Vjb25kcyBhdCB3aGljaCB0byBmZXRjaCB0aGUgbmV3ZXN0IHRhc2tzIGZyb20g cmVtb3RlcyAoaWYgdGhlcmUgaXMgbm8gdHJhY2tlZAo+ID4gKy8vLyB0YXNrIGZvciB0aGlzIHJl bW90ZSkuCj4gPiArY29uc3QgUkVHVUxBUl9SRUZSRVNIX1M6IHU2NCA9IDEwICogU0VDT05EU19Q RVJfTUlOVVRFOwo+IElNTyBpdCBoYXMgc29tZSB0aW55IHZhbHVlIHRvIGVuY29kZSBpZiBpdCdz IGEgcGVyaW9kIG9yIGEgcmF0ZSBpbiB0aGUKPiBuYW1lLCB3aGlsZSBJIGRvIG5vdCBzZWUgbXVj aCBiZW5lZml0IGluIGhhdmluZyAicmVndWxhciIgaW4gdGhlcmUgKGFsYmVpdAo+IEkgY2FuIHNl ZSB3aGVyZSB5b3UgY29tZSBmcm9tIHRvIHVzZSB0aGF0IGluIHRoZSBuYW1lKS4KPgo+IGNvbnN0 IFRBU0tfUkVGUkVTSF9QRVJJT0RfUzogdTY0ID0gRHVyYXRpb246OmZyb21fbWlucygxMCkuYXNf c2VjcygpOwo+Cj4gb3IgCj4KPiBjb25zdCBUQVNLX1JFRlJFU0hfUEVSSU9EX1M6IHU2NCA9IDYw Owo+Cj4gb3IgaWYgSSdtIGFscmVhZHkgYmlrZSBzaGVkZGluZyBzL1JFRlJFU0gvUE9MTC8gdG8g YmUgc2xpZ2h0bHkgc2hvcnRlcjoKPgo+IGNvbnN0IFRBU0tfUE9MTF9QRVJJT0RfUzogdTY0ID0g NjA7Cj4KPgo+ID4gKy8vLyBOdW1iZXIgb2YgY3ljbGVzIHVudGlsIGEgcmVndWxhciByZWZyZXNo Lgo+ID4gK2NvbnN0IFJFR1VMQVJfUkVGUkVTSF9DWUNMRVM6IHU2NCA9IFJFR1VMQVJfUkVGUkVT SF9TIC8gVElDS19SQVRFX1M7Cj4gPiArCj4gPiArLy8vIENoZWNrIGlmIHdlIHdhbnQgdG8gcm90 YXRlIG9uY2UgZXZlcnkgaG91ci4KPiA+ICtjb25zdCBDSEVDS19ST1RBVEVfUzogdTY0ID0gU0VD T05EU19QRVJfTUlOVVRFICogTUlOVVRFU19QRVJfSE9VUjsKPiA+ICsvLy8gTnVtYmVyIG9mIGN5 Y2xlcyBiZWZvcmUgd2Ugd2FudCB0byBjaGVjayBpZiB3ZSBzaG91bGQgcm90YXRlIHRoZSB0YXNr IGFyY2hpdmVzLgo+ID4gK2NvbnN0IENIRUNLX1JPVEFURV9DWUNMRVM6IHU2NCA9IENIRUNLX1JP VEFURV9TIC8gVElDS19SQVRFX1M7Cj4gPiArCj4gPiArLy8vIFJvdGF0ZSBvbmNlIHRoZSBtb3N0 IHJlY2VudCBhcmNoaXZlIGZpbGUgaXMgYXQgbGVhc3QgMjQgaG91ciBvbGQuCj4gPiArY29uc3Qg Uk9UQVRFX0FGVEVSX1M6IHU2NCA9IDI0ICogTUlOVVRFU19QRVJfSE9VUiAqIFNFQ09ORFNfUEVS X01JTlVURTsKPiBXaHkgbm8gSE9VUlNfUEVSX0RBWT8gO1AKPgo+ID4gKwo+ID4gKy8vLyBLZWVw IDcgZGF5cyB3b3J0aCBvZiB0YXNrcy4KPiA+ICtjb25zdCBLRUVQX09MRF9GSUxFUzogdTY0ID0g NzsKPiA+ICsKPiA+ICsvLy8gTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBjb25uZWN0aW9u cyBwZXIgcmVtb3RlLgo+ID4gK2NvbnN0IENPTk5FQ1RJT05TX1BFUl9QVkVfUkVNT1RFOiB1c2l6 ZSA9IDU7Cj4gPiArLy8vIE1heGltdW0gbnVtYmVyIG9mIHRvdGFsIGNvbmN1cnJlbnQgY29ubmVj dGlvbnMuIGBDT05ORUNUSU9OU19QRVJfUkVNT1RFYCBpcyB0YWtlbiBpbnRvCj4gPiArLy8vIGNv bnNpZGVyYXRpb24gd2hlbiBhY2NvdW50aW5nIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbm5l Y3Rpb25zLgo+ID4gKy8vLyBGb3IgaW5zdGFuY2UsIGlmIGBNQVhfQ09OTkVDVElPTlNgIGlzIDIw IGFuZCBgQ09OTkVDVElPTlNfUEVSX1JFTU9URWAgaXMgNSwgd2UgY2FuIGNvbm5lY3QKPiA+ICsv Ly8gdG8gNCBQVkUgcmVtb3RlcyBpbiBwYXJhbGxlbC4KPiA+ICtjb25zdCBNQVhfQ09OTkVDVElP TlM6IHVzaXplID0gMjA7Cj4gPiArCj4gPiArLy8vIE1heGltdW0gbnVtYmVyIG9mIHRhc2tzIHRv IGZldGNoIGZyb20gYSBzaW5nbGUgcmVtb3RlIGluIG9uZSBBUEkgY2FsbC4KPiA+ICtjb25zdCBN QVhfVEFTS1NfVE9fRkVUQ0g6IHU2NCA9IDUwMDA7Cj4gPiArCj4KPiA+ICsKPiA+ICsvLy8gVGFz ayB3aGljaCBoYW5kbGVzIGZldGNoaW5nIHJlbW90ZSB0YXNrcyBhbmQgdGFzayBhcmNoaXZlIHJv dGF0aW9uLgo+ID4gKy8vLyBUaGlzIGZ1bmN0aW9uIG5ldmVyIHJldHVybnMuCj4gPiArYXN5bmMg Zm4gcmVtb3RlX3Rhc2tfZmV0Y2hpbmdfdGFzaygpIC0+ICEgewo+ID4gKyAgICBsZXQgbXV0IGN5 Y2xlID0gMHU2NDsKPiA+ICsgICAgbGV0IG11dCBpbnRlcnZhbCA9IHRva2lvOjp0aW1lOjppbnRl cnZhbChEdXJhdGlvbjo6ZnJvbV9zZWNzKFRJQ0tfUkFURV9TKSk7Cj4gPiArICAgIGludGVydmFs LnJlc2V0X2F0KHRhc2tfdXRpbHM6Om5leHRfYWxpZ25lZF9pbnN0YW50KFRJQ0tfUkFURV9TKS5p bnRvKCkpOwo+ID4gKwo+ID4gKyAgICAvLyBXZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCBjYXRj aGluZyB1cCB0byBtaXNzZWQgdGljaywgd2UganVzdCB3YW50Cj4gPiArICAgIC8vIGEgc3RlYWR5 IHRpY2sgcmF0ZS4KPiA+ICsgICAgaW50ZXJ2YWwuc2V0X21pc3NlZF90aWNrX2JlaGF2aW9yKHRv a2lvOjp0aW1lOjpNaXNzZWRUaWNrQmVoYXZpb3I6OlNraXApOwo+ID4gKwo+ID4gKyAgICBpZiBs ZXQgRXJyKGVycikgPSBpbml0X2NhY2hlKCkuYXdhaXQgewo+ID4gKyAgICAgICAgbG9nOjplcnJv ciEoImVycm9yIHdoZW4gaW5pdGlhbGl6ZWQgdGFzayBjYWNoZToge2Vycn0iKTsKPiA+ICsgICAg fQo+ID4gKwo+ID4gKyAgICBsb29wIHsKPiA+ICsgICAgICAgIGludGVydmFsLnRpY2soKS5hd2Fp dDsKPiA+ICsgICAgICAgIGlmIGxldCBFcnIoZXJyKSA9IGRvX3RpY2soY3ljbGUpLmF3YWl0IHsK PiA+ICsgICAgICAgICAgICBsb2c6OmVycm9yISgiZXJyb3Igd2hlbiBmZXRjaGluZyByZW1vdGUg dGFza3M6IHtlcnJ9Iik7Cj4gPiArICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAvLyBBdCBh IHJhdGUgb2Ygb25lIHRpY2sgZXZlcnkgMTBzIHdlIHdyYXAgYXJvdW5kIGluICpvbmx5KiA1IHRy aWxsaW9uIHllYXJzLAo+ID4gKyAgICAgICAgLy8gYmV0dGVyIGJlIHNhZmUgYW5kIHVzZSAud3Jh cHBpbmdfYWRkKDEpIDopCj4gPiArICAgICAgICBjeWNsZSA9IGN5Y2xlLndyYXBwaW5nX2FkZCgx KTsKPiA+ICsgICAgfQo+ID4gK30KPiA+ICsKPiA+ICsvLy8gSW5pdGlhbGl6ZSB0aGUgcmVtb3Rl IHRhc2sgY2FjaGUgd2l0aCBpbml0aWFsIGFyY2hpdmUgZmlsZXMsIGluIGNhc2UgdGhlcmUgYXJl IG5vdAo+ID4gKy8vLyBhbnkgYXJjaGl2ZSBmaWxlcyB5ZXQuCj4gPiArLy8vCj4gPiArLy8vIENy ZWF0ZXMgYEtFRVBfT0xEX0ZJTEVTYCBhcmNoaXZlIGZpbGVzLCB3aXRoIGVhY2ggYXJjaGl2ZSBm aWxlJ3MgY3V0LW9mZiB0aW1lCj4gPiArLy8vIHNwYWNlZCBgUk9UQVRFX0FGVEVSX1NgIHNlY29u ZHMgYXBhcnQuCj4gPiArLy8vIFRoaXMgYWxsb3dzIHVzIHRvIGltbWVkaWF0ZWx5IGJhY2tmaWxs IHJlbW90ZSB0YXNrIGhpc3Rvcnkgd2hlbiBzZXR0aW5nIHVwIGEgbmV3IFBETSBpbnN0YW5jZQo+ ID4gKy8vLyB3aXRob3V0IGFueSBwcmlvciB0YXNrIGFyY2hpdmUgcm90YXRpb24uCj4gPiArYXN5 bmMgZm4gaW5pdF9jYWNoZSgpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKPiA+ICsgICAgdG9raW86 OnRhc2s6OnNwYXduX2Jsb2NraW5nKHx8IHsKPiA+ICsgICAgICAgIGxldCBjYWNoZSA9IGdldF9j YWNoZSgpPzsKPiA+ICsgICAgICAgIGNhY2hlLmluaXQocHJveG1veF90aW1lOjplcG9jaF9pNjQo KSwgS0VFUF9PTERfRklMRVMsIFJPVEFURV9BRlRFUl9TKT87Cj4gPiArICAgICAgICBPaygoKSkK PiA+ICsgICAgfSkKPiA+ICsgICAgLmF3YWl0Pwo+ID4gK30KPiA+ICsKPiA+ICsvLy8gSGFuZGxl IGEgc2luZ2xlIHRpbWVyIHRpY2suCj4gPiArLy8vIFdpbGwgaGFuZGxlIGFyY2hpdmUgZmlsZSBy b3RhdGlvbiwgcG9sbGluZyBvZiB0cmFja2VkIHRhc2tzIGFuZCBmZXRjaGluZyBvciByZW1vdGUg dGFza3MuCj4gPiArYXN5bmMgZm4gZG9fdGljayhjeWNsZTogdTY0KSAtPiBSZXN1bHQ8KCksIEVy cm9yPiB7Cj4gPiArICAgIGxldCBjYWNoZSA9IGdldF9jYWNoZSgpPzsKPiA+ICsKPiA+ICsgICAg aWYgc2hvdWxkX2NoZWNrX2Zvcl9jYWNoZV9yb3RhdGlvbihjeWNsZSkgewo+ID4gKyAgICAgICAg bG9nOjpkZWJ1ZyEoImNoZWNraW5nIGlmIHJlbW90ZSB0YXNrIGFyY2hpdmUgc2hvdWxkIGJlIHJv dGF0ZWQiKTsKPiA+ICsgICAgICAgIGlmIHJvdGF0ZV9jYWNoZShjYWNoZS5jbG9uZSgpKS5hd2Fp dD8gewo+ID4gKyAgICAgICAgICAgIGxvZzo6aW5mbyEoInJvdGF0ZWQgcmVtb3RlIHRhc2sgYXJj aGl2ZSIpOwo+ID4gKyAgICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGxldCBzdGF0 ZSA9IGNhY2hlLnJlYWRfc3RhdGUoKTsKPiA+ICsKPiA+ICsgICAgbGV0IG11dCBhbGxfdGFza3Mg PSBIYXNoTWFwOjpuZXcoKTsKPiA+ICsKPiA+ICsgICAgbGV0IHNlbWFwaG9yZSA9IEFyYzo6bmV3 KFNlbWFwaG9yZTo6bmV3KE1BWF9DT05ORUNUSU9OUykpOwo+Cj4gVGFsa2luZyBuYW1lcyB3b3Vs ZCBiZSBuaWNlLCB3ZSBnb3QgYSByYXRoZXIgZ2VuZXJpY2FsbHkgbmFtZWQgc2VtYXBob3JlCj4g dmFyaWFibGUgdHdpY2UgaW4gdGhpcyBtb2R1bGUsIG1heWJlIHVzZSAocmVzcGVjdGl2ZWx5KToK Pgo+IHRvdGFsX2Nvbm5lY3Rpb25fc2VtYXBob3JlIG9yIHRvdGFsX2Nvbm5lY3Rpb25fbGltaXQK PiBwZXJfcmVtb3RlX3NlbWFwaG9yZSBvciBwZXJfcmVtb3RlX2xpbWl0Cj4KPiA+ICsgICAgbGV0 IG11dCBqb2luX3NldCA9IEpvaW5TZXQ6Om5ldygpOwo+ID4gKwo+ID4gKyAgICBsZXQgcmVtb3Rl cyA9IHJlbW90ZXNfdG9fY2hlY2soY3ljbGUsICZzdGF0ZSkuYXdhaXQ/Owo+ID4gKyAgICBmb3Ig cmVtb3RlIGluIHJlbW90ZXMgewo+ID4gKyAgICAgICAgbGV0IHNpbmNlID0gZ2V0X2N1dG9mZl90 aW1lc3RhbXAoJnJlbW90ZSwgJnN0YXRlKTsKPiA+ICsKPiA+ICsgICAgICAgIGxldCBwZXJtaXQg PSBpZiByZW1vdGUudHkgPT0gUmVtb3RlVHlwZTo6UHZlIHsKPiA+ICsgICAgICAgICAgICAvLyBB Y3F1aXJlIG11bHRpcGxlIHBlcm1pdHMsIGZvciBQVkUgcmVtb3RlcyB3ZSB3YW50Cj4gPiArICAg ICAgICAgICAgLy8gdG8gbXVsdGlwbGUgbm9kZXMgaW4gcGFyYWxsZWwuCj4gPiArICAgICAgICAg ICAgLy8KPiA+ICsgICAgICAgICAgICAvLyBgLnVud3JhcCgpYCBpcyBzYWZlLCB3ZSBuZXZlciBj bG9zZSB0aGUgc2VtYXBob3JlLgo+ID4gKyAgICAgICAgICAgIEFyYzo6Y2xvbmUoJnNlbWFwaG9y ZSkKPiA+ICsgICAgICAgICAgICAgICAgLmFjcXVpcmVfbWFueV9vd25lZChDT05ORUNUSU9OU19Q RVJfUFZFX1JFTU9URSBhcyB1MzIpCj4gPiArICAgICAgICAgICAgICAgIC5hd2FpdAo+ID4gKyAg ICAgICAgICAgICAgICAudW53cmFwKCkKPiA+ICsgICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAg ICAgICAgLy8gRm9yIFBCUyByZW1vdGVzIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBvdXRnb2luZyBj b25uZWN0aW9uCj4gPiArICAgICAgICAgICAgLy8KPiA+ICsgICAgICAgICAgICAvLyBgLnVud3Jh cCgpYCBpcyBzYWZlLCB3ZSBuZXZlciBjbG9zZSB0aGUgc2VtYXBob3JlLgo+ID4gKyAgICAgICAg ICAgIEFyYzo6Y2xvbmUoJnNlbWFwaG9yZSkuYWNxdWlyZV9vd25lZCgpLmF3YWl0LnVud3JhcCgp Cj4gPiArICAgICAgICB9Owo+ID4gKwo+ID4gKyAgICAgICAgam9pbl9zZXQuc3Bhd24oYXN5bmMg bW92ZSB7Cj4gPiArICAgICAgICAgICAgbG9nOjpkZWJ1ZyEoImZldGNoaW5nIHJlbW90ZSB0YXNr cyBmb3IgJ3t9JyBzaW5jZSB7c2luY2V9IiwgcmVtb3RlLmlkKTsKPiA+ICsgICAgICAgICAgICBs ZXQgdGFza3MgPSBmZXRjaF90YXNrcygmcmVtb3RlLCBzaW5jZSkuYXdhaXQubWFwX2Vycih8ZXJy fCB7Cj4gPiArICAgICAgICAgICAgICAgIGZvcm1hdF9lcnIhKCJjb3VsZCBub3QgZmV0Y2ggdGFz a3MgZnJvbSByZW1vdGUgJ3t9Jzoge2Vycn0iLCByZW1vdGUuaWQpCj4gPiArICAgICAgICAgICAg fSk7Cj4gPiArCj4gPiArICAgICAgICAgICAgZHJvcChwZXJtaXQpOwo+ID4gKyAgICAgICAgICAg IHRhc2tzCj4gPiArICAgICAgICB9KTsKPiA+ICsgICAgfQo+ID4gKwo+ID4gKyAgICB3aGlsZSBs ZXQgU29tZShyZXMpID0gam9pbl9zZXQuam9pbl9uZXh0KCkuYXdhaXQgewo+ID4gKyAgICAgICAg bWF0Y2ggcmVzIHsKPiA+ICsgICAgICAgICAgICBPayhPaygocmVtb3RlLCByZXF1ZXN0KSkpID0+ IHsKPiA+ICsgICAgICAgICAgICAgICAgYWxsX3Rhc2tzLmluc2VydChyZW1vdGUsIHJlcXVlc3Qp Owo+ID4gKyAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICBPayhFcnIoZXJyKSkgPT4gbG9n OjplcnJvciEoIntlcnJ9IiksCj4gPiArICAgICAgICAgICAgRXJyKGVycikgPT4gbG9nOjplcnJv ciEoImNvdWxkIG5vdCBqb2luIHRhc2sgZmV0Y2hpbmcgZnV0dXJlOiB7ZXJyfSIpLAo+ID4gKyAg ICAgICAgfQo+ID4gKyAgICB9Cj4gPiArCj4gPiArICAgIGlmICFhbGxfdGFza3MuaXNfZW1wdHko KSB7Cj4gPiArICAgICAgICBzYXZlX3Rhc2tzKGNhY2hlLCBhbGxfdGFza3MpLmF3YWl0PzsKPiA+ ICsgICAgfQo+ID4gKwo+ID4gKyAgICBPaygoKSkKPiA+ICt9Cj4gPiArCj4gPiArLy8vIFJldHVy biBsaXN0IG9mIHJlbW90ZXMgdGhhdCBhcmUgdG8gYmUgcG9sbGVkIGluIHRoaXMgY3ljbGUuCj4K PiBzb21lIGhpZ2hlciBsZXZlbCBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgbWVhbnMgYW5kIHdo YXQgdGhlIHJhdGlvbmFsZSBpcwo+IHdvdWxkIGJlIG5pY2UgaGVyZS4KPgo+ID4gK2FzeW5jIGZu IHJlbW90ZXNfdG9fY2hlY2soY3ljbGU6IHU2NCwgc3RhdGU6ICZTdGF0ZSkgLT4gUmVzdWx0PFZl YzxSZW1vdGU+LCBFcnJvcj4gewo+ID4gKyAgICBsZXQgKGNvbmZpZywgXykgPSB0b2tpbzo6dGFz azo6c3Bhd25fYmxvY2tpbmcocGRtX2NvbmZpZzo6cmVtb3Rlczo6Y29uZmlnKS5hd2FpdD8/Owo+ ID4gKwo+ID4gKyAgICBsZXQgYWxsID0gY3ljbGUgJSBSRUdVTEFSX1JFRlJFU0hfQ1lDTEVTID09 IDA7Cj4gPiArCj4gPiArICAgIGlmIGFsbCB7Cj4gPiArICAgICAgICBPayhjb25maWcuc2VjdGlv bnMuaW50b192YWx1ZXMoKS5jb2xsZWN0KCkpCj4gPiArICAgIH0gZWxzZSB7Cj4gPiArICAgICAg ICBPayhjb25maWcKPiA+ICsgICAgICAgICAgICAuc2VjdGlvbnMKPiA+ICsgICAgICAgICAgICAu aW50b19pdGVyKCkKPiA+ICsgICAgICAgICAgICAuZmlsdGVyX21hcCh8KG5hbWUsIHJlbW90ZSl8 IHsKPiA+ICsgICAgICAgICAgICAgICAgaWYgbGV0IFNvbWUodHJhY2tlZCkgPSBzdGF0ZS50cmFj a2VkX3Rhc2tzLmdldCgmbmFtZSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgaWYgIXRyYWNr ZWQuaXNfZW1wdHkoKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgU29tZShyZW1vdGUp Cj4gPiArICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgIE5vbmUKPiA+ICsgICAgICAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAg ICAgfSBlbHNlIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIE5vbmUKPiA+ICsgICAgICAgICAg ICAgICAgfQo+ID4gKyAgICAgICAgICAgIH0pCj4gPiArICAgICAgICAgICAgLmNvbGxlY3QoKSkK PiA+ICsgICAgfQo+ID4gK30KPgo+ID4gIC8vLyBGZXRjaCB0YXNrcyAoYWN0aXZlIGFuZCBmaW5p c2hlZCkgZnJvbSBhIHJlbW90ZQo+ID4gLWFzeW5jIGZuIGZldGNoX3Rhc2tzKHJlbW90ZTogJlJl bW90ZSkgLT4gUmVzdWx0PFZlYzxUYXNrTGlzdEl0ZW0+LCBFcnJvcj4gewo+ID4gKy8vLyBgc2lu Y2VgIGlzIGEgVU5JWCB0aW1lc3RhbXAgKHNlY29uZHMpLgo+ID4gK2FzeW5jIGZuIGZldGNoX3Rh c2tzKHJlbW90ZTogJlJlbW90ZSwgc2luY2U6IGk2NCkgLT4gUmVzdWx0PChTdHJpbmcsIEFkZFRh c2tzKSwgRXJyb3I+IHsKPiA+ICAgICAgbGV0IG11dCB0YXNrcyA9IFZlYzo6bmV3KCk7Cj4gPiAg Cj4gPiArICAgIGxldCBtdXQgYWxsX3N1Y2Nlc3NmdWwgPSB0cnVlOwo+ID4gKwo+ID4gICAgICBt YXRjaCByZW1vdGUudHkgewo+ID4gICAgICAgICAgUmVtb3RlVHlwZTo6UHZlID0+IHsKPiA+ICsg ICAgICAgICAgICBsZXQgc2VtYXBob3JlID0gQXJjOjpuZXcoU2VtYXBob3JlOjpuZXcoQ09OTkVD VElPTlNfUEVSX1BWRV9SRU1PVEUpKTsKPiA+ICsgICAgICAgICAgICBsZXQgbXV0IGpvaW5fc2V0 ID0gSm9pblNldDo6bmV3KCk7Cj4gPiArCj4gPiAgICAgICAgICAgICAgbGV0IGNsaWVudCA9IHB2 ZTo6Y29ubmVjdChyZW1vdGUpPzsKPiA+ICAKPiA+ICAgICAgICAgICAgICAvLyBOKzEgcmVxdWVz dHMgLSB3ZSBjb3VsZCB1c2UgL2NsdXN0ZXIvdGFza3MsIGJ1dCB0aGF0IG9uZQo+Cj4gYnR3LiBh cyBJIHNlZSBpdCBmcm9tIHRoZSBjb250ZXh0LCByZS1ldmFsdWF0aW5nIHRoZSBsaW1pdCBvZiB0 aGUgYnJvYWRjYXN0ZWQKPiB0YXNrcyB3b3VsZCBiZSBkZWZpbml0aXZlbHkgYW4gb3B0aW9uIHRv bywgb24gcmVtb3RlcyB3aXRoIG1vcmUgdGhhbiBhIGhhbmRmdWwKPiBvZiBub2RlcyB0aGF0IG1p Z2h0IGJlIHF1aXRlIGEgYml0IGNoZWFwZXIgYW5kIGhhcyBzb21lIGJlbmVmaXRzIG91dHNpZGUg b2YgdGhlCj4gUERNIHVzZSBjYXNlLiBBdCBsZWFzdCBzb21lIHF1aWNrIGV4cGVyaW1lbnRhdGlv biBhYm91dCBhY3R1YWwgaW1wYWN0IG9mIGFuCj4gaW5jcmVhc2UgdGhlcmUgd291bGQgYmUgd2Fy cmFudGVkLCBhbGJlaXQgb3V0IG9mIHNjb3BlIG9mIHRoaXMgc2VyaWVzIGFzIGNoZWNraW5nCj4g c2VwYXJhdGVseSBpcyBhbHJlYWR5IHRoZSBzdGF0dXMgcXVvLgo+Cj4gPiBAQCAtMTM0LDE2ICsz NzcsNTMgQEAgYXN5bmMgZm4gZmV0Y2hfdGFza3MocmVtb3RlOiAmUmVtb3RlKSAtPiBSZXN1bHQ8 VmVjPFRhc2tMaXN0SXRlbT4sIEVycm9yPiB7Cj4gPiAgICAgICAgICAgICAgICAgIGxldCBwYXJh bXMgPSBMaXN0VGFza3Mgewo+ID4gICAgICAgICAgICAgICAgICAgICAgLy8gSW5jbHVkZSBydW5u aW5nIHRhc2tzCj4gPiAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IFNvbWUoTGlzdFRhc2tz U291cmNlOjpBbGwpLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSG93IG11Y2gg dGFzayBoaXN0b3J5IGRvIHdlIHdhbnQ/IFJpZ2h0IG5vdyB3ZSBqdXN0IGhhcmQtY29kZSBpdAo+ ID4gLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gNyBkYXlzLgo+ID4gLSAgICAgICAgICAgICAg ICAgICAgc2luY2U6IFNvbWUocHJveG1veF90aW1lOjplcG9jaF9pNjQoKSAtIDcgKiAyNCAqIDYw ICogNjApLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgc2luY2U6IFNvbWUoc2luY2UpLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgLy8gSWYgYGxpbWl0YCBpcyBub3QgcHJvdmlkZWQsIHdlIG9u bHkgcmVjZWl2ZSA1MCB0YXNrcwo+ID4gKyAgICAgICAgICAgICAgICAgICAgbGltaXQ6IFNvbWUo TUFYX1RBU0tTX1RPX0ZFVENIKSwKPiA+ICAgICAgICAgICAgICAgICAgICAgIC4uRGVmYXVsdDo6 ZGVmYXVsdCgpCj4gPiAgICAgICAgICAgICAgICAgIH07Cj4gPiAgCj4gPiAtICAgICAgICAgICAg ICAgIGxldCBsaXN0ID0gY2xpZW50LmdldF90YXNrX2xpc3QoJm5vZGUubm9kZSwgcGFyYW1zKS5h d2FpdD87Cj4gPiAtICAgICAgICAgICAgICAgIGxldCBtYXBwZWQgPSBtYXBfdGFza3MobGlzdCwg JnJlbW90ZS5pZCk/Owo+ID4gKyAgICAgICAgICAgICAgICBsZXQgcGVybWl0ID0gQXJjOjpjbG9u ZSgmc2VtYXBob3JlKS5hY3F1aXJlX293bmVkKCkuYXdhaXQudW53cmFwKCk7Cj4gPiAgCj4gPiAt ICAgICAgICAgICAgICAgIHRhc2tzLmV4dGVuZChtYXBwZWQpOwo+ID4gKyAgICAgICAgICAgICAg ICBsZXQgciA9IHJlbW90ZS5jbG9uZSgpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICBqb2lu X3NldC5zcGF3bihhc3luYyBtb3ZlIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGxldCBjbGll bnQgPSBwdmU6OmNvbm5lY3QoJnIpPzsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGxldCB0YXNr X2xpc3QgPQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAuZ2V0X3Rhc2tfbGlzdCgmbm9kZS5ub2RlLCBwYXJhbXMpCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hd2FpdAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmb3JtYXRfZXJyISgicmVtb3RlICd7fScsIG5vZGUgJ3t9Jzoge2Vycn0iLCBy LmlkLCBub2RlLm5vZGUpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pPzsKPiA+ ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgIGRyb3AocGVybWl0KTsKPiA+ICsKPiA+ICsgICAg ICAgICAgICAgICAgICAgIE9rOjo8VmVjPF8+LCBFcnJvcj4odGFza19saXN0KQo+ID4gKyAgICAg ICAgICAgICAgICB9KTsKPiA+ICsgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAgICAgICAg d2hpbGUgbGV0IFNvbWUocmVzKSA9IGpvaW5fc2V0LmpvaW5fbmV4dCgpLmF3YWl0IHsKPiA+ICsg ICAgICAgICAgICAgICAgbWF0Y2ggcmVzIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgIE9rKE9r KGxpc3QpKSA9PiB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1hcHBlZCA9IGxp c3QuaW50b19pdGVyKCkuZmlsdGVyX21hcCh8dGFza3wgewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXRjaCBtYXBfcHZlX3Rhc2sodGFzaywgJnJlbW90ZS5pZCkgewo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2sodGFzaykgPT4gU29tZSh0YXNrKSwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihlcnIpID0+IHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiY291bGQgbm90IG1h cCB0YXNrIGRhdGEsIHNraXBwaW5nOiB7ZXJyfSIpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5vbmUKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIH0pOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tzLmV4 dGVuZChtYXBwZWQpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgT2soRXJyKGVycikpID0+IHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBh bGxfc3VjY2Vzc2Z1bCA9IGZhbHNlOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZzo6 ZXJyb3IhKCJjb3VsZCBub3QgZmV0Y2ggdGFza3M6IHtlcnI6P30iKTsKPiA+ICsgICAgICAgICAg ICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgICAgICAgIEVycihlcnIpID0+IHJldHVybiBF cnIoZXJyLmludG8oKSksCj4gPiArICAgICAgICAgICAgICAgIH0KPiA+ICAgICAgICAgICAgICB9 Cj4gPiAgICAgICAgICB9Cj4gPiAgICAgICAgICBSZW1vdGVUeXBlOjpQYnMgPT4gewo+Cj4gPiAr Ly8vIENoZWNrIGlmIHdlIGFyZSBkdWUgZm9yIGNoZWNraW5nIGZvciBjYWNoZSByb3RhdGlvbi4K PiA+ICtmbiBzaG91bGRfY2hlY2tfZm9yX2NhY2hlX3JvdGF0aW9uKGN5Y2xlOiB1NjQpIC0+IGJv b2wgewo+ID4gKyAgICBjeWNsZSAlIENIRUNLX1JPVEFURV9DWUNMRVMgPT0gMAo+Cj4gVGhpcyBi YXNpY2FsbHkgZGVwZW5kcyBvbiB0aGUgZm4gZ2V0dGluZyBjYWxsZWQgaW5pdGlhbGx5IHdpdGgg Y3ljbGUKPiBiZWluZyBzdGlsbCB6ZXJlbywgYXMgb3RoZXJld2lzZSB3ZSB3b3VsZCBuZXZlciBy b3RhdGUgaWYgYSBQRE0gZ2V0cwo+IHJlc3RhcnRlZC9yZWJvb3RlZCBkYWlseSBvciBtb3JlIG9m dGVuLCB3aGljaCBjYW4gYmUgYSBwb3NzaWJpbGl0eSBmb3IKPiB1c2UgY2FzZXMgd2hlcmUgb25l IGp1c3QgaGFzIHRoZSBQRE0gcnVubmluZyBkdXJpbmcgdGhlaXIgd29ya3RpbWUsCj4gd2hpY2gg aXMgc2VsZG9tbHkgbG9uZ2VyIHRoYW4gYSBkYXkuCj4KPiBJLmUuLCBpdCB3b3JrcyBmaW5lIGFz IGlzLCBidXQgSSdkIGxpa2UgdG8gc2VlIHRoYXQgaW52YXJpYW50IHN0YXRlCj4gYSBiaXQgZXhw bGljaXRseSBzb21ld2hlcmUuCj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gcGRtLWRldmVsIG1haWxpbmcgbGlzdAo+IHBkbS1kZXZlbEBsaXN0 cy5wcm94bW94LmNvbQo+IGh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFu L2xpc3RpbmZvL3BkbS1kZXZlbAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpwZG0tZGV2ZWwgbWFpbGluZyBsaXN0CnBkbS1kZXZlbEBsaXN0cy5wcm94 bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5m by9wZG0tZGV2ZWwK