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 2F9621FF165 for <inbox@lore.proxmox.com>; Wed, 12 Feb 2025 16:58:22 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 28E961A65A; Wed, 12 Feb 2025 16:58:19 +0100 (CET) Date: Wed, 12 Feb 2025 16:57:37 +0100 From: Wolfgang Bumiller <w.bumiller@proxmox.com> To: Lukas Wagner <l.wagner@proxmox.com> Message-ID: <zoz5qzeqf7znlkgwldvkqwdqqey66mwnlnuwklmc4onjpayoll@wb5wcq3gesh4> References: <20250211120541.163621-1-l.wagner@proxmox.com> <20250211120541.163621-8-l.wagner@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250211120541.163621-8-l.wagner@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.081 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. [mod.rs, proxmox-datacenter-api.rs, section.id] Subject: Re: [pdm-devel] [PATCH proxmox-datacenter-manager 07/25] metric collection: rework metric poll task 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> Cc: 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> TG9va3MgZ29vZC4KT25lIGltcHJvdmVtZW50L2ZvbGxvdy11cCBzdWdnZXN0aW9uIChKb2luU2V0 KSwgc29tZSBuaXRwaWNraW5nICYKcG90ZW50aWFsIHJlZmFjdG9yaW5nIHJlcXVlc3RzLi4uCgpP biBUdWUsIEZlYiAxMSwgMjAyNSBhdCAwMTowNToyM1BNICswMTAwLCBMdWthcyBXYWduZXIgd3Jv dGU6Cj4gTWV0cmljIGNvbGxlY3Rpb24gaXMgbW9zdGx5IGxpbWl0ZWQgYnkgbmV0d29yayBsYXRl bmN5LCBub3QgZGlzayBJTyBvcgo+IENQVS4gVGhpcyBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSBn ZXQgc2lnbmlmaWNhbnQgc3BlZWR1cHMgYnkgcG9sbGluZwo+IHJlbW90ZXMgY29uY3VycmVudGx5 IGJ5IHNwYXduaW5nIHRva2lvIHdvcmtlcnMuCj4gCj4gVG8gYXZvaWQgbG9hZC9JTyBzcGlrZXMs IHdlIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCBjb25uZWN0aW9ucwo+IHVzaW5nIGEg c2VtYXBob3JlLgo+IAo+IEVhY2ggY29uY3VycmVudCB0YXNrIHdoaWNoIGZldGNoZXMgYSBzaW5n bGUgcmVtb3RlIHdhaXRzIGEgcmFuZG9tIGFtb3VudAo+IG9mIHRpbWUgYmVmb3JlIGFjdHVhbGx5 IGNvbm5lY3RpbmcgdG8gdGhlIHJlbW90ZS4gVGhlIHVwcGVyIGFuZCBsb3dlcgo+IGJvdW5kcyBm b3IgdGhpcyByYW5kb20gZGVsYXkgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIG1ldHJpYyBjb2xs ZWN0aW9uCj4gc2V0dGluZ3MuIFRoZSBtYWluIGFpbSBvZiB0aGlzIG1lY2hhbmlzbSBpcyB0byBy ZWR1Y2UgbG9hZCBzcGlrZXMuCj4gCj4gRnVydGhlcm1vcmUsIGVhY2ggdGltZSB3aGVuIHRoZSBt YWluIGNvbGxlY3Rpb24gaW50ZXJ2YWwgdGltZXIKPiBmaXJlcywgYSByYW5kb20gZGVsYXkgaXMg aW50cm9kdWNlZCBiZWZvcmUgYWN0dWFsbHkgc3RhcnRpbmcgdGhlCj4gY29sbGVjdGlvbiBwcm9j ZXNzLgo+IFRoaXMgaXMgdXNlZnVsIGR1ZSB0byBob3cgd2Ugc2V0IHVwIHRoZSB0aW1lcjsgd2Ug Y29uZmlndXJlCj4gaXQgdG8gZmlndXJlIGF0IGFsaWduZWQgcG9pbnRzIGluIHRpbWUuIEZvciBp bnN0YW5jZSwgaWYgdGhlCj4gY29sbGVjdGlvbiBpbnRlcnZhbCBpcyBzZXQgdG8gNjBzLCB0aGUg dGltZXIgZmlyZXMgYXQKPiBtaW51dGUgYm91bmRhcmllcy4gVXNpbmcgdGhpcyByYW5kb20gb2Zm c2V0LCB3ZSBjYW4gYXZvaWQKPiB0cmlnZ2VyaW5nIGF0IHRoZSBzYW1lIHRpbWUgYXMgb3RoZXIg dGltZXJzIChjcm9uLCBzeXN0ZW1kKS4KPiAKPiBGdXJ0aGVybW9yZSwgd2UgYWRkIGEgbWVjaGFu aXNtIHRvIHRyaWdnZXIgbWV0cmljIGNvbGxlY3Rpb24gbWFudWFsbHkuCj4gVGhpcyBpcyBhY2hp ZXZlIGJ5IHVzaW5nIGB0b2tpbzo6c2VsZWN0IWAgb24gYm90aCwgdGhlIHRpbWVyJ3MgYHRpY2tg Cj4gbWV0aG9kIGFuZCB0aGUgYHJlY3ZgIG1ldGhvZCBvZiBhbiBgbXBzY2Agd2hpY2ggaXMgdXNl ZCB0byBzZW5kIGNvbnRyb2wKPiBtZXNzYWdlcyB0byB0aGUgbWV0cmljIGNvbGxlY3Rpb24gdGFz ay4KPiAKPiBGb3IgYmV0dGVyIGNvZGUgc3RydWN0dXJlLCB0aGUgY29sbGVjdGlvbiB0YXNrIGlz IHNwbGl0IGludG8gYSBzZXBhcmF0ZQo+IG1vZHVsZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBMdWth cyBXYWduZXIgPGwud2FnbmVyQHByb3htb3guY29tPgo+IC0tLQo+ICBDYXJnby50b21sICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBzZXJ2ZXIvQ2FyZ28udG9t bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBzZXJ2ZXIvc3JjL2Jpbi9w cm94bW94LWRhdGFjZW50ZXItYXBpLnJzICAgICAgfCAgIDIgKy0KPiAgLi4uL3NyYy9tZXRyaWNf Y29sbGVjdGlvbi9jb2xsZWN0aW9uX3Rhc2sucnMgIHwgMzE3ICsrKysrKysrKysrKysrKysrKwo+ ICBzZXJ2ZXIvc3JjL21ldHJpY19jb2xsZWN0aW9uL21vZC5ycyAgICAgICAgICAgfCAxMjggKysr LS0tLQo+ICA1IGZpbGVzIGNoYW5nZWQsIDM2NiBpbnNlcnRpb25zKCspLCA4MyBkZWxldGlvbnMo LSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNlcnZlci9zcmMvbWV0cmljX2NvbGxlY3Rpb24vY29s bGVjdGlvbl90YXNrLnJzCj4gCj4gZGlmZiAtLWdpdCBhL0NhcmdvLnRvbWwgYi9DYXJnby50b21s Cj4gaW5kZXggNGYzYjFkMC4uN2RkNjBhNSAxMDA2NDQKPiAtLS0gYS9DYXJnby50b21sCj4gKysr IGIvQ2FyZ28udG9tbAo+IEBAIC0xMDgsNiArMTA4LDcgQEAgb25jZV9jZWxsID0gIjEuMy4xIgo+ ICBvcGVuc3NsID0gIjAuMTAuNDAiCj4gIHBlcmNlbnQtZW5jb2RpbmcgPSAiMi4xIgo+ICBwaW4t cHJvamVjdC1saXRlID0gIjAuMiIKPiArcmFuZCA9ICIwLjgiCj4gIHJlZ2V4ID0gIjEuNS41Igo+ ICBzZXJkZSA9IHsgdmVyc2lvbiA9ICIxLjAiLCBmZWF0dXJlcyA9IFsiZGVyaXZlIl0gfQo+ICBz ZXJkZV9jYm9yID0gIjAuMTEuMSIKPiBkaWZmIC0tZ2l0IGEvc2VydmVyL0NhcmdvLnRvbWwgYi9z ZXJ2ZXIvQ2FyZ28udG9tbAo+IGluZGV4IDdiMDA1OGUuLmM4MzA4ZjIgMTAwNjQ0Cj4gLS0tIGEv c2VydmVyL0NhcmdvLnRvbWwKPiArKysgYi9zZXJ2ZXIvQ2FyZ28udG9tbAo+IEBAIC0yNCw2ICsy NCw3IEBAIG5peC53b3Jrc3BhY2UgPSB0cnVlCj4gIG9uY2VfY2VsbC53b3Jrc3BhY2UgPSB0cnVl Cj4gIG9wZW5zc2wud29ya3NwYWNlID0gdHJ1ZQo+ICBwZXJjZW50LWVuY29kaW5nLndvcmtzcGFj ZSA9IHRydWUKPiArcmFuZC53b3Jrc3BhY2UgPSB0cnVlCj4gIHNlcmRlLndvcmtzcGFjZSA9IHRy dWUKPiAgc2VyZGVfanNvbi53b3Jrc3BhY2UgPSB0cnVlCj4gIHN5c2xvZy53b3Jrc3BhY2UgPSB0 cnVlCj4gZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvYmluL3Byb3htb3gtZGF0YWNlbnRlci1hcGku cnMgYi9zZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFjZW50ZXItYXBpLnJzCj4gaW5kZXggYTc5 MDk0ZC4uNmU4NWU1MiAxMDA2NDQKPiAtLS0gYS9zZXJ2ZXIvc3JjL2Jpbi9wcm94bW94LWRhdGFj ZW50ZXItYXBpLnJzCj4gKysrIGIvc2VydmVyL3NyYy9iaW4vcHJveG1veC1kYXRhY2VudGVyLWFw aS5ycwo+IEBAIC0yODYsNyArMjg2LDcgQEAgYXN5bmMgZm4gcnVuKGRlYnVnOiBib29sKSAtPiBS ZXN1bHQ8KCksIEVycm9yPiB7Cj4gICAgICB9KTsKPiAgCj4gICAgICBzdGFydF90YXNrX3NjaGVk dWxlcigpOwo+IC0gICAgbWV0cmljX2NvbGxlY3Rpb246OnN0YXJ0X3Rhc2soKTsKPiArICAgIG1l dHJpY19jb2xsZWN0aW9uOjpzdGFydF90YXNrKCk/Owo+ICAgICAgcmVzb3VyY2VfY2FjaGU6OnN0 YXJ0X3Rhc2soKTsKPiAgCj4gICAgICBzZXJ2ZXIuYXdhaXQ/Owo+IGRpZmYgLS1naXQgYS9zZXJ2 ZXIvc3JjL21ldHJpY19jb2xsZWN0aW9uL2NvbGxlY3Rpb25fdGFzay5ycyBiL3NlcnZlci9zcmMv bWV0cmljX2NvbGxlY3Rpb24vY29sbGVjdGlvbl90YXNrLnJzCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi44NDIwMDM5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3NlcnZl ci9zcmMvbWV0cmljX2NvbGxlY3Rpb24vY29sbGVjdGlvbl90YXNrLnJzCj4gQEAgLTAsMCArMSwz MTcgQEAKPiArdXNlIHN0ZDo6e2NvbGxlY3Rpb25zOjpIYXNoTWFwLCBzeW5jOjpBcmMsIHRpbWU6 OkR1cmF0aW9ufTsKPiArCj4gK3VzZSBhbnlob3c6OkVycm9yOwo+ICt1c2UgcmFuZDo6Um5nOwo+ ICt1c2UgdG9raW86OnsKPiArICAgIHN5bmM6OnsKPiArICAgICAgICBtcHNjOjp7UmVjZWl2ZXIs IFNlbmRlcn0sCj4gKyAgICAgICAgT3duZWRTZW1hcGhvcmVQZXJtaXQsIFNlbWFwaG9yZSwKPiAr ICAgIH0sCj4gKyAgICB0aW1lOjpJbnRlcnZhbCwKPiArfTsKPiArCj4gK3VzZSBwcm94bW94X3Nl Y3Rpb25fY29uZmlnOjp0eXBlZDo6U2VjdGlvbkNvbmZpZ0RhdGE7Cj4gKwo+ICt1c2UgcGRtX2Fw aV90eXBlczo6ewo+ICsgICAgcmVtb3Rlczo6e1JlbW90ZSwgUmVtb3RlVHlwZX0sCj4gKyAgICBD b2xsZWN0aW9uU2V0dGluZ3MsCj4gK307Cj4gK3VzZSBwZG1fY29uZmlnOjptZXRyaWNfY29sbGVj dGlvbjo6Q09MTEVDVElPTl9TRVRUSU5HU19UWVBFOwo+ICsKPiArdXNlIGNyYXRlOjp7Y29ubmVj dGlvbiwgdGFza191dGlsc307Cj4gKwo+ICt1c2Ugc3VwZXI6OnJyZF90YXNrOjpScmRTdG9yZVJl cXVlc3Q7Cj4gKwo+ICsvLy8gQ29udHJvbCBtZXNzYWdlcyBmb3IgdGhlIG1ldHJpYyBjb2xsZWN0 aW9uIHRhc2suCj4gK3B1YihzdXBlcikgZW51bSBDb250cm9sTXNnIHsKPiArICAgIENvbGxlY3RT aW5nbGVSZW1vdGUoU3RyaW5nKSwKPiArICAgIENvbGxlY3RBbGxSZW1vdGVzLAo+ICt9Cj4gKwo+ ICsvLy8gVGFzayB3aGljaCBwZXJpb2RpY2FsbHkgY29sbGVjdHMgbWV0cmljcyBmcm9tIGFsbCBy ZW1vdGVzIGFuZCBzdG9yZXMKPiArLy8vIHRoZW0gaW4gdGhlIGxvY2FsIG1ldHJpY3MgZGF0YWJh c2UuCj4gK3B1YihzdXBlcikgc3RydWN0IE1ldHJpY0NvbGxlY3Rpb25UYXNrIHsKPiArICAgIG1v c3RfcmVjZW50X3RpbWVzdGFtcHM6IEhhc2hNYXA8U3RyaW5nLCBpNjQ+LAo+ICsgICAgc2V0dGlu Z3M6IENvbGxlY3Rpb25TZXR0aW5ncywKPiArICAgIG1ldHJpY19kYXRhX3R4OiBTZW5kZXI8UnJk U3RvcmVSZXF1ZXN0PiwKPiArICAgIGNvbnRyb2xfbWVzc2FnZV9yeDogUmVjZWl2ZXI8Q29udHJv bE1zZz4sCj4gK30KPiArCj4gK2ltcGwgTWV0cmljQ29sbGVjdGlvblRhc2sgewo+ICsgICAgLy8v IENyZWF0ZSBhIG5ldyBtZXRyaWMgY29sbGVjdGlvbiB0YXNrLgo+ICsgICAgcHViKHN1cGVyKSBm biBuZXcoCj4gKyAgICAgICAgbWV0cmljX2RhdGFfdHg6IFNlbmRlcjxScmRTdG9yZVJlcXVlc3Q+ LAo+ICsgICAgICAgIGNvbnRyb2xfbWVzc2FnZV9yeDogUmVjZWl2ZXI8Q29udHJvbE1zZz4sCj4g KyAgICApIC0+IFJlc3VsdDxTZWxmLCBFcnJvcj4gewo+ICsgICAgICAgIGxldCBzZXR0aW5ncyA9 IFNlbGY6OmdldF9zZXR0aW5nc19vcl9kZWZhdWx0KCk7Cj4gKwo+ICsgICAgICAgIE9rKFNlbGYg ewo+ICsgICAgICAgICAgICBtb3N0X3JlY2VudF90aW1lc3RhbXBzOiBIYXNoTWFwOjpuZXcoKSwK PiArICAgICAgICAgICAgc2V0dGluZ3MsCj4gKyAgICAgICAgICAgIG1ldHJpY19kYXRhX3R4LAo+ ICsgICAgICAgICAgICBjb250cm9sX21lc3NhZ2VfcngsCj4gKyAgICAgICAgfSkKPiArICAgIH0K PiArCj4gKyAgICAvLy8gUnVuIHRoZSBtZXRyaWMgY29sbGVjdGlvbiB0YXNrLgo+ICsgICAgLy8v Cj4gKyAgICAvLy8gVGhpcyBmdW5jdGlvbiBkb2VzIG5ldmVyIHJldHVybi4KPiArICAgICNbdHJh Y2luZzo6aW5zdHJ1bWVudChza2lwX2FsbCwgbmFtZSA9ICJtZXRyaWNfY29sbGVjdGlvbl90YXNr IildCj4gKyAgICBwdWIoc3VwZXIpIGFzeW5jIGZuIHJ1bigmbXV0IHNlbGYpIHsKPiArICAgICAg ICBsZXQgbXV0IHRpbWVyID0gU2VsZjo6c2V0dXBfdGltZXIoc2VsZi5zZXR0aW5ncy5jb2xsZWN0 aW9uX2ludGVydmFsX29yX2RlZmF1bHQoKSk7Cj4gKwo+ICsgICAgICAgIGxvZzo6ZGVidWchKAo+ ICsgICAgICAgICAgICAibWV0cmljIGNvbGxlY3Rpb24gc3RhcnRpbmcgdXAuIGNvbGxlY3Rpb24g aW50ZXJ2YWwgc2V0IHRvIHt9IHNlY29uZHMiLAoKXiBuaXQ6IHVzaW5nIHB1bmN0dWF0aW9uIGlu IHRoZSBtaWRkbGUgYnV0IGNvbnRpbnVpbmcgaW4gbG93ZXIgY2FzZSBhbmQKbm90IGVuZGluZyB3 aXRoIHB1bmN0dWF0aW9uIPCfpKoKCj4gKyAgICAgICAgICAgIHNlbGYuc2V0dGluZ3MuY29sbGVj dGlvbl9pbnRlcnZhbF9vcl9kZWZhdWx0KCkKPiArICAgICAgICApOwo+ICsKPiArICAgICAgICBs b29wIHsKPiArICAgICAgICAgICAgbGV0IG9sZF9zZXR0aW5ncyA9IHNlbGYuc2V0dGluZ3MuY2xv bmUoKTsKPiArICAgICAgICAgICAgdG9raW86OnNlbGVjdCEgewo+ICsgICAgICAgICAgICAgICAg XyA9IHRpbWVyLnRpY2soKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgLy8gUmVsb2FkIHNl dHRpbmdzIGluIGNhc2UgdGhleSBoYXZlIGNoYW5nZWQgaW4gdGhlIG1lYW53aGlsZQo+ICsgICAg ICAgICAgICAgICAgICAgIHNlbGYuc2V0dGluZ3MgPSBTZWxmOjpnZXRfc2V0dGluZ3Nfb3JfZGVm YXVsdCgpOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICBsb2c6OmRlYnVnISgic3RhcnRpbmcg bWV0cmljIGNvbGxlY3Rpb24gZnJvbSBhbGwgcmVtb3RlcyAtIHRyaWdnZXJlZCBieSB0aW1lciIp OwoKTm90IHN1cmUgaWYgaXQncyB3b3J0aCBtb3ZpbmcgdGhpcyBpbnRvIGEgYHNlbGYub25fdGlj aygpYCBidXQuLi4KCj4gKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zbGVlcF9mb3JfcmFuZG9t X2ludGVydmFsX29mZnNldCgpLmF3YWl0Owo+ICsKPiArICAgICAgICAgICAgICAgICAgICBpZiBs ZXQgU29tZShyZW1vdGVzKSA9IFNlbGY6OmxvYWRfcmVtb3RlX2NvbmZpZygpIHsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgbGV0IHRvX2ZldGNoID0gcmVtb3Rlcy5vcmRlci5hc19zbGljZSgp Owo+ICsgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZldGNoX3JlbW90ZXMoJnJlbW90ZXMs IHRvX2ZldGNoKS5hd2FpdDsKPiArICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAg ICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICAgdmFsID0gc2VsZi5jb250cm9sX21lc3NhZ2Vf cngucmVjdigpID0+IHsKPiArICAgICAgICAgICAgICAgICAgICAvLyBSZWxvYWQgc2V0dGluZ3Mg aW4gY2FzZSB0aGV5IGhhdmUgY2hhbmdlZCBpbiB0aGUgbWVhbndoaWxlCj4gKyAgICAgICAgICAg ICAgICAgICAgc2VsZi5zZXR0aW5ncyA9IFNlbGY6OmdldF9zZXR0aW5nc19vcl9kZWZhdWx0KCk7 Cj4gKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdmFsIHsKCi4uLmJ1dCBJIHRoaW5rIHRoaXMg cGFydCBzaG91bGQgYmUgZmFjdG9yZWQgb3V0IGludG8gYQpgc2VsZi5oYW5kbGVfY29udHJvbF9t ZXNzYWdlKG1zZykuYXdhaXRgCgpJdCBnZXRzIGluZGVudGVkIHF1aXRlIGRlZXBseSBhbmQgaXQg anVzdCBtYWtlcyBzZW5zZSBJTU8gOikKCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUo Q29udHJvbE1zZzo6Q29sbGVjdFNpbmdsZVJlbW90ZShyZW1vdGUpKSA9PiB7Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShyZW1vdGVzKSA9IFNlbGY6OmxvYWRfcmVt b3RlX2NvbmZpZygpIHsKCl4gQWxzbyB0aGlzLi4uCgo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxvZzo6ZGVidWchKCJzdGFydGluZyBtZXRyaWMgY29sbGVjdGlvbiBmb3IgcmVt b3RlICd7cmVtb3RlfSctIHRyaWdnZXJlZCBieSBjb250cm9sIG1lc3NhZ2UiKTsKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZldGNoX3JlbW90ZXMoJnJlbW90ZXMsICZb cmVtb3RlXSkuYXdhaXQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICAgICAgU29tZShDb250 cm9sTXNnOjpDb2xsZWN0QWxsUmVtb3RlcykgPT4gewo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgbGV0IFNvbWUocmVtb3RlcykgPSBTZWxmOjpsb2FkX3JlbW90ZV9jb25maWcoKSB7 CgouLi4gaXMgdGhlIHNhbWUgYXMgdGhpcywgc28gaWYgdGhpcyBpcyBmYWN0b3JlZCBvdXQgaW50 byBhIHNlcGFyYXRlCmZ1bmN0aW9uLCBpdCBjb3VsZCBqdXN0IGVhcmx5LW91dCB2aWEgYSBsZXQt ZWxzZSB0aGVyZSwgYXMgd2UgZG9uJ3QgbmVlZAp0byBjYWxsIGl0IHdoZW4gYHZhbGAgaXMgYE5v bmVgLCBhbmQgdGhlbiBpdCdzIHF1aXRlIGNvbXBhY3QuCgo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvZzo6ZGVidWchKCJzdGFydGluZyBtZXRyaWMgY29sbGVjdGlvbiBmcm9t IGFsbCByZW1vdGVzIC0gdHJpZ2dlcmVkIGJ5IGNvbnRyb2wgbWVzc2FnZSIpOwo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmV0Y2hfcmVtb3RlcygmcmVtb3RlcywgJnJl bW90ZXMub3JkZXIpLmF3YWl0Owo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgIF8gPT4g e30sCj4gKyAgICAgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAg ICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBsZXQgaW50ZXJ2YWwgPSBzZWxmLnNldHRpbmdz LmNvbGxlY3Rpb25faW50ZXJ2YWxfb3JfZGVmYXVsdCgpOwo+ICsKPiArICAgICAgICAgICAgaWYg b2xkX3NldHRpbmdzLmNvbGxlY3Rpb25faW50ZXJ2YWxfb3JfZGVmYXVsdCgpICE9IGludGVydmFs IHsKPiArICAgICAgICAgICAgICAgIGxvZzo6aW5mbyEoCj4gKyAgICAgICAgICAgICAgICAgICAg Im1ldHJpYyBjb2xsZWN0aW9uIGludGVydmFsIGNoYW5nZWQgdG8ge30gc2Vjb25kcywgcmVsb2Fk aW5nIHRpbWVyIiwKPiArICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbAo+ICsgICAgICAgICAg ICAgICAgKTsKPiArICAgICAgICAgICAgICAgIHRpbWVyID0gU2VsZjo6c2V0dXBfdGltZXIoaW50 ZXJ2YWwpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAg IGFzeW5jIGZuIHNsZWVwX2Zvcl9yYW5kb21faW50ZXJ2YWxfb2Zmc2V0KCZzZWxmKSB7Cj4gKyAg ICAgICAgbGV0IG11dCBtaW4gPSBzZWxmLnNldHRpbmdzLm1pbl9pbnRlcnZhbF9vZmZzZXRfb3Jf ZGVmYXVsdCgpOwo+ICsgICAgICAgIGxldCBtYXggPSBzZWxmLnNldHRpbmdzLm1heF9pbnRlcnZh bF9vZmZzZXRfb3JfZGVmYXVsdCgpOwo+ICsKPiArICAgICAgICBpZiBtaW4gPiBtYXggewo+ICsg ICAgICAgICAgICBsb2c6Ondhcm4hKAo+ICsgICAgICAgICAgICAgICAgIm1pbi1pbnRlcnZhbC1v ZmZzZXQgaXMgbGFyZ2VyIHRoYW4gbWF4LWludGVydmFsLW9mZnNldCAoe21pbn0gPiB7bWF4fSkg LSBcCj4gKyAgICAgICAgICAgICAgICBjYXBwaW5nIGl0IHRvIG1heC1pbnRlcnZhbC1vZmZzZXQg KHttYXh9KSIKPiArICAgICAgICAgICAgKTsKPiArICAgICAgICAgICAgbWluID0gbWF4Owo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgbGV0IGppdHRlciA9IHsKPiArICAgICAgICAgICAgbGV0 IG11dCBybmcgPSByYW5kOjp0aHJlYWRfcm5nKCk7Cj4gKyAgICAgICAgICAgIHJuZy5nZW5fcmFu Z2UobWluLi49bWF4KQo+ICsgICAgICAgIH07Cj4gKyAgICAgICAgdG9raW86OnRpbWU6OnNsZWVw KER1cmF0aW9uOjpmcm9tX3NlY3Moaml0dGVyKSkuYXdhaXQ7Cj4gKyAgICB9Cj4gKwoK4oaRIGFu ZCDihpMgYXJlIGNyeWluZyBvdXQgZm9yIGEgY29tbW9uIGZuIHdpdGggdGhlIHZhcmlhYmxlIG5h bWUsIG1pbiBhbmQKbWF4IGFzIHBhcmFtZXRlcnMgOy0pCgo+ICsgICAgYXN5bmMgZm4gc2xlZXBf Zm9yX3JhbmRvbV9jb25uZWN0aW9uX2RlbGF5KHNldHRpbmdzOiAmQ29sbGVjdGlvblNldHRpbmdz KSB7Cj4gKyAgICAgICAgbGV0IG11dCBtaW4gPSBzZXR0aW5ncy5taW5fY29ubmVjdGlvbl9kZWxh eV9vcl9kZWZhdWx0KCk7Cj4gKyAgICAgICAgbGV0IG1heCA9IHNldHRpbmdzLm1heF9jb25uZWN0 aW9uX2RlbGF5X29yX2RlZmF1bHQoKTsKPiArCj4gKyAgICAgICAgaWYgbWluID4gbWF4IHsKPiAr ICAgICAgICAgICAgbG9nOjp3YXJuISgKPiArICAgICAgICAgICAgICAgICJtaW4tY29sbGVjdGlv bi1kZWxheSBpcyBsYXJnZXIgdGhhbiBtYXgtY29sbGVjdGlvbi1kZWxheSAoe21pbn0gPiB7bWF4 fSkgLSBcCj4gKyAgICAgICAgICAgICAgICBjYXBwaW5nIGl0IHRvIG1heC1jb2xsZWN0aW9uLWRl bGF5ICh7bWF4fSkiCj4gKyAgICAgICAgICAgICk7Cj4gKyAgICAgICAgICAgIG1pbiA9IG1heDsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGxldCBqaXR0ZXIgPSB7Cj4gKyAgICAgICAgICAg IGxldCBtdXQgcm5nID0gcmFuZDo6dGhyZWFkX3JuZygpOwo+ICsgICAgICAgICAgICBybmcuZ2Vu X3JhbmdlKG1pbi4uPW1heCkKPiArICAgICAgICB9Owo+ICsKPiArICAgICAgICB0b2tpbzo6dGlt ZTo6c2xlZXAoRHVyYXRpb246OmZyb21fbWlsbGlzKGppdHRlcikpLmF3YWl0Owo+ICsgICAgfQo+ ICsKPiArICAgIGZuIGdldF9zZXR0aW5nc19vcl9kZWZhdWx0KCkgLT4gQ29sbGVjdGlvblNldHRp bmdzIHsKPiArICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0IG9kZCwgYnV0IG5vdCBz dXJlIGlmIHRoZXJlIGlzIGEgbXVjaCBuaWNlcgo+ICsgICAgICAgIC8vIHdheSB0byBkbyBpdC4g V2Ugd2FudCB0byBmYWxsIGJhY2sgdG8gZGVmYXVsdHMgaWYKPiArICAgICAgICAvLyAgIC0gdGhl IGNvbmZpZyBmaWxlIGRvZXMgbm90IGV4aXN0IChubyBlcnJvcnMgbG9nZ2VkKQo+ICsgICAgICAg IC8vICAgLSBpZiBzZWN0aW9uIHR5cGUgaXMgd3Jvbmcgb3IgdGhlIGNvbmZpZyBmYWlsZWQgdG8g cGFyc2UgKGxvZyBlcnJvcnMpCgpJdCBnZXRzIGEgYml0IHNob3J0ZXIgYW5kIGlmIHRoZSBgX2lt cGxgIHJldHVybnMgYSByZXN1bHQrb3B0aW9uLgpUaGUgbWF0Y2ggYmVsb3cgY2FuIGp1c3QgYHJl dHVybiBzZXR0aW5nc2AgaW4gdGhlIGZpcnN0IGNhc2UsIGFuZCBoYXZlCmFuIGBPayhOb25lKSA9 PiAoKSxgLCB0aGUgYEVycmAgb25seSBoYXMgdGhlIGxvZyBsaW5lIGFuZCB0aGUgZGVmYXVsdCBp cwptb3ZlZCB0byBhZnRlciB0aGUgbWF0Y2guCgpBbHRlcm5hdGl2ZWx5IGEgYGRlZmF1bHQoKWAg aGVscGVyIGNvdWxkIGFsc28gc2hvcnRlbiBpdAooYE9rKGRlZmF1bHQoKSlgIGluIHRoZSBgX2lt cGxgIGFuZApgZ2V0X3NldHRpbmdzX2ltcGwoKS51bndyYXBfb3JfZWxlc2UofGVycnwgeyBsb2co ZXJyKTsgZGVmYXVsdCgpIH0pYCBpcwphbHNvIHNob3J0ZXIgOi0pCgo+ICsKPiArICAgICAgICBm biBnZXRfc2V0dGluZ3NfaW1wbCgpIC0+IFJlc3VsdDxDb2xsZWN0aW9uU2V0dGluZ3MsIEVycm9y PiB7Cj4gKyAgICAgICAgICAgIGxldCAoY29uZmlnLCBfKSA9IHBkbV9jb25maWc6Om1ldHJpY19j b2xsZWN0aW9uOjpjb25maWcoKT87Cj4gKwo+ICsgICAgICAgICAgICBsZXQgYWxsX3NlY3Rpb25z OiBWZWM8Q29sbGVjdGlvblNldHRpbmdzPiA9Cj4gKyAgICAgICAgICAgICAgICBjb25maWcuY29u dmVydF90b190eXBlZF9hcnJheShDT0xMRUNUSU9OX1NFVFRJTkdTX1RZUEUpPzsKPiArCj4gKyAg ICAgICAgICAgIGZvciBzZWN0aW9uIGluIGFsbF9zZWN0aW9ucyB7Cj4gKyAgICAgICAgICAgICAg ICBpZiBzZWN0aW9uLmlkID09ICJkZWZhdWx0IiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIE9rKHNlY3Rpb24pOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4g Kwo+ICsgICAgICAgICAgICBPayhDb2xsZWN0aW9uU2V0dGluZ3Mgewo+ICsgICAgICAgICAgICAg ICAgaWQ6ICJkZWZhdWx0Ii5pbnRvKCksCj4gKyAgICAgICAgICAgICAgICAuLkRlZmF1bHQ6OmRl ZmF1bHQoKQo+ICsgICAgICAgICAgICB9KQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgbWF0 Y2ggZ2V0X3NldHRpbmdzX2ltcGwoKSB7Cj4gKyAgICAgICAgICAgIE9rKHNldHRpbmdzKSA9PiBz ZXR0aW5ncywKPiArICAgICAgICAgICAgRXJyKGVycikgPT4gewo+ICsgICAgICAgICAgICAgICAg bG9nOjplcnJvciEoImNvdWxkIG5vdCByZWFkIG1ldHJpYyBjb2xsZWN0aW9uIHNldHRpbmdzOiB7 ZXJyfSAtIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0IGNvbmZpZyIpOwo+ICsKPiArICAgICAgICAg ICAgICAgIENvbGxlY3Rpb25TZXR0aW5ncyB7Cj4gKyAgICAgICAgICAgICAgICAgICAgaWQ6ICJk ZWZhdWx0Ii5pbnRvKCksCj4gKyAgICAgICAgICAgICAgICAgICAgLi5EZWZhdWx0OjpkZWZhdWx0 KCkKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiAr ICAgIH0KPiArCj4gKyAgICAvLy8gU2V0IHVwIGEgW2B0b2tpbzo6dGltZTo6SW50ZXJ2YWxgXSBp bnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBpbnRlcnZhbC4KPiArICAgIC8vLyBUaGUgdGltZXIg d2lsbCBiZSBhbGlnbmVkLCBlLmcuIGFuIGludGVydmFsIG9mIGA2MGAgd2lsbCBsZXQgdGhlIHRp bWVyCj4gKyAgICAvLy8gZmlyZSBhdCBtaW51dGUgYm91bmRhcmllcy4KPiArICAgIGZuIHNldHVw X3RpbWVyKGludGVydmFsOiB1NjQpIC0+IEludGVydmFsIHsKPiArICAgICAgICBsZXQgbXV0IHRp bWVyID0gdG9raW86OnRpbWU6OmludGVydmFsKER1cmF0aW9uOjpmcm9tX3NlY3MoaW50ZXJ2YWwp KTsKPiArICAgICAgICBsZXQgZmlyc3RfcnVuID0gdGFza191dGlsczo6bmV4dF9hbGlnbmVkX2lu c3RhbnQoaW50ZXJ2YWwpLmludG8oKTsKPiArICAgICAgICB0aW1lci5yZXNldF9hdChmaXJzdF9y dW4pOwo+ICsKPiArICAgICAgICB0aW1lcgo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBDb252ZW5p ZW5jZSBoZWxwZXIgdG8gbG9hZCBgcmVtb3RlLmNmZ2AsIGxvZ2dpbmcgdGhlIGVycm9yCj4gKyAg ICAvLy8gYW5kIHJldHVybmluZyBgTm9uZWAgaWYgdGhlIGNvbmZpZyBjb3VsZCBub3QgYmUgcmVh ZC4KPiArICAgIGZuIGxvYWRfcmVtb3RlX2NvbmZpZygpIC0+IE9wdGlvbjxTZWN0aW9uQ29uZmln RGF0YTxSZW1vdGU+PiB7Cj4gKyAgICAgICAgbWF0Y2ggcGRtX2NvbmZpZzo6cmVtb3Rlczo6Y29u ZmlnKCkgewo+ICsgICAgICAgICAgICBPaygocmVtb3RlcywgXykpID0+IFNvbWUocmVtb3Rlcyks Cj4gKyAgICAgICAgICAgIEVycihlKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICBsb2c6OmVycm9y ISgiZmFpbGVkIHRvIGNvbGxlY3QgbWV0cmljcywgY291bGQgbm90IHJlYWQgcmVtb3Rlcy5jZmc6 IHtlfSIpOwo+ICsgICAgICAgICAgICAgICAgTm9uZQo+ICsgICAgICAgICAgICB9Cj4gKyAgICAg ICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8vLyBGZXRjaCBtZXRyaWMgZGF0YSBmcm9tIGEgcHJv dmlkZWQgbGlzdCBvZiByZW1vdGVzIGNvbmN1cnJlbnRseS4KPiArICAgIC8vLyBUaGUgbWF4aW11 bSBudW1iZXIgb2YgY29uY3VycmVudCBjb25uZWN0aW9ucyBpcyBkZXRlcm1pbmVkIGJ5Cj4gKyAg ICAvLy8gYG1heF9jb25jdXJyZW50X2Nvbm5lY3Rpb25zYCBpbiB0aGUgW2BDb2xsZWN0aW9uU2V0 dGluZ3NgXQo+ICsgICAgLy8vIGluc3RhbmNlIGluIGBzZWxmYC4KPiArICAgIGFzeW5jIGZuIGZl dGNoX3JlbW90ZXMoCj4gKyAgICAgICAgJm11dCBzZWxmLAo+ICsgICAgICAgIGNvbmZpZzogJlNl Y3Rpb25Db25maWdEYXRhPFJlbW90ZT4sCj4gKyAgICAgICAgcmVtb3Rlc190b19mZXRjaDogJltT dHJpbmddLAo+ICsgICAgKSB7Cj4gKyAgICAgICAgbGV0IHNlbWFwaG9yZSA9IEFyYzo6bmV3KFNl bWFwaG9yZTo6bmV3KAo+ICsgICAgICAgICAgICBzZWxmLnNldHRpbmdzLm1heF9jb25jdXJyZW50 X2Nvbm5lY3Rpb25zX29yX2RlZmF1bHQoKSwKPiArICAgICAgICApKTsKPiArICAgICAgICBsZXQg bXV0IGhhbmRsZXMgPSBWZWM6Om5ldygpOwoKTm90IHN1cmUgaG93ICJyb2J1c3QiIHRoZSBzcGF3 bmluZyBpcyB3cnQuIG9yZGVyaW5nIC0gYW5kIHRoaXMgZG9lc24ndApuZWVkIHRvIGhhcHBlbiBp biB0aGlzIHBhdGNoICh1bmxlc3MgaXQncyBlYXN5KSwgYnV0IGEgZm9sbG93LXVwIGNvdWxkCnBy b2JhYmx5IGNoYW5nZSB0aGlzIGludG8gYSB0b2tpbyBgSm9pblNldGAsIHRoYXQgd2F5IHRoZSBh d2FpdC1sb29wCmJlbG93IGNhbiB1c2UgYC5qb2luX25leHQoKWAsIHNvIHRoYXQgZm9yIGV4YW1w bGUgaWYgYW4gZWFybHkgdGFzawpoYXBwZW5zIHRvIGVuZCB1cCBmaW5pc2hpbmcgbGFzdCwgdGhl IGxvb3Agc3RpbGwgY29sbGVjdHMgdGhlIHJlbWFpbmluZwpsb2dzIGluIGEgbW9yZSAidGVtcG9y YWxseSBhY2N1cmF0ZSIgd2F5Li4uCgo+ICsKPiArICAgICAgICBmb3IgcmVtb3RlX25hbWUgaW4g cmVtb3Rlc190b19mZXRjaCB7Cj4gKyAgICAgICAgICAgIGxldCBzdGFydF90aW1lID0gKnNlbGYu bW9zdF9yZWNlbnRfdGltZXN0YW1wcy5nZXQocmVtb3RlX25hbWUpLnVud3JhcF9vcigmMCk7Cj4g Kwo+ICsgICAgICAgICAgICAvLyB1bndyYXAgaXMgb2theSBoZXJlLCBhY3F1aXJlXyogd2lsbCBv bmx5IGZhaWwgaWYgYGNsb3NlYCBoYXMgYmVlbgo+ICsgICAgICAgICAgICAvLyBjYWxsZWQgb24g dGhlIHNlbWFwaG9yZS4KPiArICAgICAgICAgICAgbGV0IHBlcm1pdCA9IHNlbWFwaG9yZS5jbG9u ZSgpLmFjcXVpcmVfb3duZWQoKS5hd2FpdC51bndyYXAoKTsKCl4gTml0OiB3aGVyZSBwb3NzaWJs ZSwgSSBwcmVmZXIgYEFyYzo6Y2xvbmUoJnB0cilgIGp1c3QgZm9yIHRoZSBzYWtlIG9mCm5vdCBh Y2NpZGVudGFsbHkgYC5jbG9uZSgpYGluZyBzb21ldGhpbmcgbGFyZ2UgYWZ0ZXIgbGF0ZXIgYSBy ZWZhY3Rvcgp3aGVyZSB0aGUgY2xvbmVzIGFyZW4ndCBpbiB0aGUgcGF0Y2ggY29udGV4dCBsaW5l cy4KCj4gKwo+ICsgICAgICAgICAgICBpZiBsZXQgU29tZShyZW1vdGUpID0gY29uZmlnLmdldChy ZW1vdGVfbmFtZSkuY2xvbmVkKCkgewo+ICsgICAgICAgICAgICAgICAgbG9nOjpkZWJ1ZyEoImZl dGNoaW5nIHJlbW90ZSAne30nIiwgcmVtb3RlLmlkKTsKPiArICAgICAgICAgICAgICAgIGxldCBo YW5kbGUgPSB0b2tpbzo6c3Bhd24oU2VsZjo6ZmV0Y2hfc2luZ2xlX3JlbW90ZSgKPiArICAgICAg ICAgICAgICAgICAgICBzZWxmLnNldHRpbmdzLmNsb25lKCksCj4gKyAgICAgICAgICAgICAgICAg ICAgcmVtb3RlLAo+ICsgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUsCj4gKyAgICAgICAg ICAgICAgICAgICAgc2VsZi5tZXRyaWNfZGF0YV90eC5jbG9uZSgpLAo+ICsgICAgICAgICAgICAg ICAgICAgIHBlcm1pdCwKPiArICAgICAgICAgICAgICAgICkpOwo+ICsKPiArICAgICAgICAgICAg ICAgIGhhbmRsZXMucHVzaCgocmVtb3RlX25hbWUuY2xvbmUoKSwgaGFuZGxlKSk7Cj4gKyAgICAg ICAgICAgIH0KPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGZvciAocmVtb3RlX25hbWUsIGhh bmRsZSkgaW4gaGFuZGxlcyB7Cj4gKyAgICAgICAgICAgIGxldCByZXMgPSBoYW5kbGUuYXdhaXQ7 Cj4gKwo+ICsgICAgICAgICAgICBtYXRjaCByZXMgewo+ICsgICAgICAgICAgICAgICAgT2soT2so dHMpKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tb3N0X3JlY2VudF90aW1lc3Rh bXBzCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIC5pbnNlcnQocmVtb3RlX25hbWUudG9fc3Ry aW5nKCksIHRzKTsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgICAgIE9rKEVy cihlcnIpKSA9PiBsb2c6OmVycm9yISgiZmFpbGVkIHRvIGNvbGxlY3QgbWV0cmljcyBmb3Ige3Jl bW90ZV9uYW1lfToge2Vycn0iKSwKPiArICAgICAgICAgICAgICAgIEVycihlcnIpID0+IHsKPiAr ICAgICAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgKPiArICAgICAgICAgICAgICAgICAgICAg ICAgImpvaW4gZXJyb3IgZm9yIG1ldHJpYyBjb2xsZWN0aW9uIHRhc2sgZm9yIHJlbW90ZSB7cmVt b3RlX25hbWV9OiB7ZXJyfSIKPiArICAgICAgICAgICAgICAgICAgICApCj4gKyAgICAgICAgICAg ICAgICB9Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAg Ly8vIEZldGNoIGEgc2luZ2xlIHJlbW90ZS4KPiArICAgICNbdHJhY2luZzo6aW5zdHJ1bWVudChz a2lwX2FsbCwgZmllbGRzKHJlbW90ZSA9IHJlbW90ZS5pZCksIG5hbWUgPSAibWV0cmljX2NvbGxl Y3Rpb25fdGFzayIpXQo+ICsgICAgYXN5bmMgZm4gZmV0Y2hfc2luZ2xlX3JlbW90ZSgKPiArICAg ICAgICBzZXR0aW5nczogQ29sbGVjdGlvblNldHRpbmdzLAo+ICsgICAgICAgIHJlbW90ZTogUmVt b3RlLAo+ICsgICAgICAgIHN0YXJ0X3RpbWU6IGk2NCwKPiArICAgICAgICBzZW5kZXI6IFNlbmRl cjxScmRTdG9yZVJlcXVlc3Q+LAo+ICsgICAgICAgIF9wZXJtaXQ6IE93bmVkU2VtYXBob3JlUGVy bWl0LAo+ICsgICAgKSAtPiBSZXN1bHQ8aTY0LCBFcnJvcj4gewo+ICsgICAgICAgIFNlbGY6OnNs ZWVwX2Zvcl9yYW5kb21fY29ubmVjdGlvbl9kZWxheSgmc2V0dGluZ3MpLmF3YWl0Owo+ICsKPiAr ICAgICAgICBsZXQgbW9zdF9yZWNlbnRfdGltZXN0YW1wID0gbWF0Y2ggcmVtb3RlLnR5IHsKPiAr ICAgICAgICAgICAgUmVtb3RlVHlwZTo6UHZlID0+IHsKPiArICAgICAgICAgICAgICAgIGxldCBj bGllbnQgPSBjb25uZWN0aW9uOjptYWtlX3B2ZV9jbGllbnQoJnJlbW90ZSk/Owo+ICsgICAgICAg ICAgICAgICAgbGV0IG1ldHJpY3MgPSBjbGllbnQKPiArICAgICAgICAgICAgICAgICAgICAuY2x1 c3Rlcl9tZXRyaWNzX2V4cG9ydChTb21lKHRydWUpLCBTb21lKGZhbHNlKSwgU29tZShzdGFydF90 aW1lKSkKPiArICAgICAgICAgICAgICAgICAgICAuYXdhaXQ/Owo+ICsKPiArICAgICAgICAgICAg ICAgIGxldCBtb3N0X3JlY2VudCA9IG1ldHJpY3MuZGF0YS5pdGVyKCkuZm9sZCgwLCB8YWNjLCB4 fCBhY2MubWF4KHgudGltZXN0YW1wKSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgc2VuZGVyCj4g KyAgICAgICAgICAgICAgICAgICAgLnNlbmQoUnJkU3RvcmVSZXF1ZXN0OjpQdmUgewo+ICsgICAg ICAgICAgICAgICAgICAgICAgICByZW1vdGU6IHJlbW90ZS5pZC5jbG9uZSgpLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICBtZXRyaWNzLAo+ICsgICAgICAgICAgICAgICAgICAgIH0pCj4gKyAg ICAgICAgICAgICAgICAgICAgLmF3YWl0PzsKPiArCj4gKyAgICAgICAgICAgICAgICBtb3N0X3Jl Y2VudAo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIFJlbW90ZVR5cGU6OlBicyA9PiB7 Cj4gKyAgICAgICAgICAgICAgICBsZXQgY2xpZW50ID0gY29ubmVjdGlvbjo6bWFrZV9wYnNfY2xp ZW50KCZyZW1vdGUpPzsKPiArICAgICAgICAgICAgICAgIGxldCBtZXRyaWNzID0gY2xpZW50Lm1l dHJpY3MoU29tZSh0cnVlKSwgU29tZShzdGFydF90aW1lKSkuYXdhaXQ/Owo+ICsKPiArICAgICAg ICAgICAgICAgIGxldCBtb3N0X3JlY2VudCA9IG1ldHJpY3MuZGF0YS5pdGVyKCkuZm9sZCgwLCB8 YWNjLCB4fCBhY2MubWF4KHgudGltZXN0YW1wKSk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgc2Vu ZGVyCj4gKyAgICAgICAgICAgICAgICAgICAgLnNlbmQoUnJkU3RvcmVSZXF1ZXN0OjpQYnMgewo+ ICsgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGU6IHJlbW90ZS5pZC5jbG9uZSgpLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLAo+ICsgICAgICAgICAgICAgICAgICAgIH0p Cj4gKyAgICAgICAgICAgICAgICAgICAgLmF3YWl0PzsKPiArCj4gKyAgICAgICAgICAgICAgICBt b3N0X3JlY2VudAo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfTsKPiArCj4gKyAgICAgICAg T2sobW9zdF9yZWNlbnRfdGltZXN0YW1wKQo+ICsgICAgfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL3Nl cnZlci9zcmMvbWV0cmljX2NvbGxlY3Rpb24vbW9kLnJzIGIvc2VydmVyL3NyYy9tZXRyaWNfY29s bGVjdGlvbi9tb2QucnMKPiBpbmRleCAwNmFkZTVmLi4wYWI2Njc4IDEwMDY0NAo+IC0tLSBhL3Nl cnZlci9zcmMvbWV0cmljX2NvbGxlY3Rpb24vbW9kLnJzCj4gKysrIGIvc2VydmVyL3NyYy9tZXRy aWNfY29sbGVjdGlvbi9tb2QucnMKPiBAQCAtMSwyMCArMSwxNyBAQAo+IC11c2Ugc3RkOjpjb2xs ZWN0aW9uczo6SGFzaE1hcDsKPiAgdXNlIHN0ZDo6cGluOjpwaW47Cj4gK3VzZSBzdGQ6OnN5bmM6 Ok9uY2VMb2NrOwo+ICAKPiAtdXNlIGFueWhvdzo6RXJyb3I7Cj4gK3VzZSBhbnlob3c6OntiYWls LCBFcnJvcn07Cj4gIHVzZSB0b2tpbzo6c3luYzo6bXBzYzo6e3NlbGYsIFNlbmRlcn07Cj4gIAo+ IC11c2UgcGRtX2FwaV90eXBlczo6cmVtb3Rlczo6UmVtb3RlVHlwZTsKPiAtCj4gLXVzZSBjcmF0 ZTo6e2Nvbm5lY3Rpb24sIHRhc2tfdXRpbHN9Owo+IC0KPiArbW9kIGNvbGxlY3Rpb25fdGFzazsK PiAgcHViIG1vZCBycmRfY2FjaGU7Cj4gIG1vZCBycmRfdGFzazsKPiAgcHViIG1vZCB0b3BfZW50 aXRpZXM7Cj4gIAo+IC11c2UgcnJkX3Rhc2s6OlJyZFN0b3JlUmVxdWVzdDsKPiArdXNlIGNvbGxl Y3Rpb25fdGFzazo6e0NvbnRyb2xNc2csIE1ldHJpY0NvbGxlY3Rpb25UYXNrfTsKPiAgCj4gLWNv bnN0IENPTExFQ1RJT05fSU5URVJWQUw6IHU2NCA9IDYwOwo+ICtzdGF0aWMgQ09OVFJPTF9NRVNT QUdFX1RYOiBPbmNlTG9jazxTZW5kZXI8Q29udHJvbE1zZz4+ID0gT25jZUxvY2s6Om5ldygpOwo+ ICAKPiAgLy8vIEluaXRpYWxpemUgdGhlIFJSRCBjYWNoZQo+ICBwdWIgZm4gaW5pdCgpIC0+IFJl c3VsdDwoKSwgRXJyb3I+IHsKPiBAQCAtMjQsODkgKzIxLDU2IEBAIHB1YiBmbiBpbml0KCkgLT4g UmVzdWx0PCgpLCBFcnJvcj4gewo+ICB9Cj4gIAo+ICAvLy8gU3RhcnQgdGhlIG1ldHJpYyBjb2xs ZWN0aW9uIHRhc2suCj4gLXB1YiBmbiBzdGFydF90YXNrKCkgewo+IC0gICAgbGV0ICh0eCwgcngp ID0gbXBzYzo6Y2hhbm5lbCgxMjgpOwo+ICtwdWIgZm4gc3RhcnRfdGFzaygpIC0+IFJlc3VsdDwo KSwgRXJyb3I+IHsKPiArICAgIGxldCAobWV0cmljX2RhdGFfdHgsIG1ldHJpY19kYXRhX3J4KSA9 IG1wc2M6OmNoYW5uZWwoMTI4KTsKPiArCj4gKyAgICBsZXQgKHRyaWdnZXJfY29sbGVjdGlvbl90 eCwgdHJpZ2dlcl9jb2xsZWN0aW9uX3J4KSA9IG1wc2M6OmNoYW5uZWwoMTI4KTsKPiArICAgIGlm IENPTlRST0xfTUVTU0FHRV9UWC5zZXQodHJpZ2dlcl9jb2xsZWN0aW9uX3R4KS5pc19lcnIoKSB7 Cj4gKyAgICAgICAgYmFpbCEoImNvbnRyb2wgbWVzc2FnZSBzZW5kZXIgYWxyZWFkIHNldCIpOwo+ ICsgICAgfQo+ICAKPiAgICAgIHRva2lvOjpzcGF3bihhc3luYyBtb3ZlIHsKPiAtICAgICAgICBs ZXQgdGFza19zY2hlZHVsZXIgPSBwaW4hKG1ldHJpY19jb2xsZWN0aW9uX3Rhc2sodHgpKTsKPiAr ICAgICAgICBsZXQgbWV0cmljX2NvbGxlY3Rpb25fdGFza19mdXR1cmUgPSBwaW4hKGFzeW5jIG1v dmUgewo+ICsgICAgICAgICAgICBsZXQgbXV0IHRhc2sgPQo+ICsgICAgICAgICAgICAgICAgTWV0 cmljQ29sbGVjdGlvblRhc2s6Om5ldyhtZXRyaWNfZGF0YV90eCwgdHJpZ2dlcl9jb2xsZWN0aW9u X3J4KS51bndyYXAoKTsKPiArICAgICAgICAgICAgdGFzay5ydW4oKS5hd2FpdDsKCl4gbml0OiBj b3VsZCBkcm9wIHRoZSBsZXQgYmluZGluZyAodGhlbiBpdCBJTU8gbGluZXdyYXBzIGEgYml0IG5p Y2VyLAp0b28pCgo+ICsgICAgICAgIH0pOwo+ICsKPiAgICAgICAgICBsZXQgYWJvcnRfZnV0dXJl ID0gcGluIShwcm94bW94X2RhZW1vbjo6c2h1dGRvd25fZnV0dXJlKCkpOwo+IC0gICAgICAgIGZ1 dHVyZXM6OmZ1dHVyZTo6c2VsZWN0KHRhc2tfc2NoZWR1bGVyLCBhYm9ydF9mdXR1cmUpLmF3YWl0 Owo+ICsgICAgICAgIGZ1dHVyZXM6OmZ1dHVyZTo6c2VsZWN0KG1ldHJpY19jb2xsZWN0aW9uX3Rh c2tfZnV0dXJlLCBhYm9ydF9mdXR1cmUpLmF3YWl0Owo+ICAgICAgfSk7Cj4gIAo+ICAgICAgdG9r aW86OnNwYXduKGFzeW5jIG1vdmUgewo+IC0gICAgICAgIGxldCB0YXNrX3NjaGVkdWxlciA9IHBp biEocnJkX3Rhc2s6OnN0b3JlX2luX3JyZF90YXNrKHJ4KSk7Cj4gKyAgICAgICAgbGV0IHJyZF90 YXNrX2Z1dHVyZSA9IHBpbiEocnJkX3Rhc2s6OnN0b3JlX2luX3JyZF90YXNrKG1ldHJpY19kYXRh X3J4KSk7Cj4gICAgICAgICAgbGV0IGFib3J0X2Z1dHVyZSA9IHBpbiEocHJveG1veF9kYWVtb246 OnNodXRkb3duX2Z1dHVyZSgpKTsKPiAtICAgICAgICBmdXR1cmVzOjpmdXR1cmU6OnNlbGVjdCh0 YXNrX3NjaGVkdWxlciwgYWJvcnRfZnV0dXJlKS5hd2FpdDsKPiArICAgICAgICBmdXR1cmVzOjpm dXR1cmU6OnNlbGVjdChycmRfdGFza19mdXR1cmUsIGFib3J0X2Z1dHVyZSkuYXdhaXQ7Cj4gICAg ICB9KTsKPiArCj4gKyAgICBPaygoKSkKPiAgfQo+ICAKPiAtYXN5bmMgZm4gbWV0cmljX2NvbGxl Y3Rpb25fdGFzayhzZW5kZXI6IFNlbmRlcjxScmRTdG9yZVJlcXVlc3Q+KSAtPiBSZXN1bHQ8KCks IEVycm9yPiB7Cj4gLSAgICBsZXQgbXV0IG1vc3RfcmVjZW50X3RpbWVzdGFtcHM6IEhhc2hNYXA8 U3RyaW5nLCBpNjQ+ID0gSGFzaE1hcDo6bmV3KCk7Cj4gLQo+IC0gICAgbG9vcCB7Cj4gLSAgICAg ICAgbGV0IGRlbGF5X3RhcmdldCA9IHRhc2tfdXRpbHM6Om5leHRfYWxpZ25lZF9pbnN0YW50KENP TExFQ1RJT05fSU5URVJWQUwpOwo+IC0gICAgICAgIHRva2lvOjp0aW1lOjpzbGVlcF91bnRpbCh0 b2tpbzo6dGltZTo6SW5zdGFudDo6ZnJvbV9zdGQoZGVsYXlfdGFyZ2V0KSkuYXdhaXQ7Cj4gLQo+ IC0gICAgICAgIGxldCByZW1vdGVzID0gbWF0Y2ggcGRtX2NvbmZpZzo6cmVtb3Rlczo6Y29uZmln KCkgewo+IC0gICAgICAgICAgICBPaygocmVtb3RlcywgXykpID0+IHJlbW90ZXMsCj4gLSAgICAg ICAgICAgIEVycihlKSA9PiB7Cj4gLSAgICAgICAgICAgICAgICBsb2c6OmVycm9yISgiZmFpbGVk IHRvIGNvbGxlY3QgbWV0cmljcywgY291bGQgbm90IHJlYWQgcmVtb3Rlcy5jZmc6IHtlfSIpOwo+ IC0gICAgICAgICAgICAgICAgY29udGludWU7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9 Owo+IC0KPiAtICAgICAgICBmb3IgKHJlbW90ZV9uYW1lLCByZW1vdGUpIGluICZyZW1vdGVzLnNl Y3Rpb25zIHsKPiAtICAgICAgICAgICAgbGV0IHN0YXJ0X3RpbWUgPSAqbW9zdF9yZWNlbnRfdGlt ZXN0YW1wcy5nZXQocmVtb3RlX25hbWUpLnVud3JhcF9vcigmMCk7Cj4gLSAgICAgICAgICAgIGxl dCByZW1vdGVfbmFtZV9jbG9uZSA9IHJlbW90ZV9uYW1lLmNsb25lKCk7Cj4gLQo+IC0gICAgICAg ICAgICBsZXQgcmVzID0gYXN5bmMgewo+IC0gICAgICAgICAgICAgICAgbGV0IG1vc3RfcmVjZW50 X3RpbWVzdGFtcCA9IG1hdGNoIHJlbW90ZS50eSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgUmVt b3RlVHlwZTo6UHZlID0+IHsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsaWVudCA9 IGNvbm5lY3Rpb246Om1ha2VfcHZlX2NsaWVudChyZW1vdGUpPzsKPiAtICAgICAgICAgICAgICAg ICAgICAgICAgbGV0IG1ldHJpY3MgPSBjbGllbnQKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC5jbHVzdGVyX21ldHJpY3NfZXhwb3J0KFNvbWUodHJ1ZSksIFNvbWUoZmFsc2UpLCBTb21l KHN0YXJ0X3RpbWUpKQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF3YWl0PzsKPiAt Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtb3N0X3JlY2VudCA9Cj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLmRhdGEuaXRlcigpLmZvbGQoMCwgfGFjYywgeHwg YWNjLm1heCh4LnRpbWVzdGFtcCkpOwo+IC0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgc2Vu ZGVyCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2VuZChScmRTdG9yZVJlcXVlc3Q6 OlB2ZSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlOiByZW1vdGVf bmFtZV9jbG9uZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLAo+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC5hd2FpdD87Cj4gLQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBPazo6PGk2NCwg RXJyb3I+KG1vc3RfcmVjZW50KQo+IC0gICAgICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAg ICAgICAgICAgICBSZW1vdGVUeXBlOjpQYnMgPT4gewo+IC0gICAgICAgICAgICAgICAgICAgICAg ICBsZXQgY2xpZW50ID0gY29ubmVjdGlvbjo6bWFrZV9wYnNfY2xpZW50KHJlbW90ZSk/Owo+IC0g ICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWV0cmljcyA9IGNsaWVudC5tZXRyaWNzKFNvbWUo dHJ1ZSksIFNvbWUoc3RhcnRfdGltZSkpLmF3YWl0PzsKPiAtCj4gLSAgICAgICAgICAgICAgICAg ICAgICAgIGxldCBtb3N0X3JlY2VudCA9Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZXRyaWNzLmRhdGEuaXRlcigpLmZvbGQoMCwgfGFjYywgeHwgYWNjLm1heCh4LnRpbWVzdGFtcCkp Owo+IC0KPiAtICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyCj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAuc2VuZChScmRTdG9yZVJlcXVlc3Q6OlBicyB7Cj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVtb3RlOiByZW1vdGVfbmFtZV9jbG9uZSwKPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLAo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSkKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hd2FpdD87Cj4gLQo+ IC0gICAgICAgICAgICAgICAgICAgICAgICBPazo6PGk2NCwgRXJyb3I+KG1vc3RfcmVjZW50KQo+ IC0gICAgICAgICAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgICAgIH0/Owo+IC0KPiAtICAg ICAgICAgICAgICAgIE9rOjo8aTY0LCBFcnJvcj4obW9zdF9yZWNlbnRfdGltZXN0YW1wKQo+IC0g ICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgIC5hd2FpdDsKPiAtCj4gLSAgICAgICAgICAgIG1h dGNoIHJlcyB7Cj4gLSAgICAgICAgICAgICAgICBPayh0cykgPT4gewo+IC0gICAgICAgICAgICAg ICAgICAgIG1vc3RfcmVjZW50X3RpbWVzdGFtcHMuaW5zZXJ0KHJlbW90ZV9uYW1lLnRvX3N0cmlu ZygpLCB0cyk7Cj4gLSAgICAgICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgICAgICBFcnIoZXJy KSA9PiBsb2c6OmVycm9yISgiZmFpbGVkIHRvIGNvbGxlY3QgbWV0cmljcyBmb3Ige3JlbW90ZV9u YW1lfToge2Vycn0iKSwKPiAtICAgICAgICAgICAgfQo+IC0gICAgICAgIH0KPiArLy8vIFNjaGVk dWxlIG1ldHJpYyBjb2xsZWN0aW9uIGZvciBhIGdpdmVuIHJlbW90ZSBhcyBzb29uIGFzIHBvc3Np YmxlLgo+ICsvLy8KPiArLy8vIEhhcyBubyBlZmZlY3QgaWYgdGhlIHR4IGVuZCBvZiB0aGUgY2hh bm5lbCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0Lgo+ICsvLy8gUmV0dXJucyBhbiBlcnJv ciBpZiB0aGUgbXBzYyBjaGFubmVsIGhhcyBiZWVuIGNsb3NlZCBhbHJlYWR5Lgo+ICtwdWIgYXN5 bmMgZm4gdHJpZ2dlcl9tZXRyaWNfY29sbGVjdGlvbl9mb3JfcmVtb3RlKHJlbW90ZTogJnN0cikg LT4gUmVzdWx0PCgpLCBFcnJvcj4gewo+ICsgICAgaWYgbGV0IFNvbWUoc2VuZGVyKSA9IENPTlRS T0xfTUVTU0FHRV9UWC5nZXQoKSB7CgpeIG5pdDogVGhpcyBpcyB0aGUgbm9ybWFsIGNhc2UgKGdp dmVuIHRoYXQgYENPTlRST0xfTUVTU0FHRV9UWGAgZ2V0cwppbml0aWFsaXplZCBpbiBgc3Rhcmtf dGFzaygpYCBvbiBzdGFydHVwLCBzbyBJTU8gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZQpjb3VsZCBh bHJlYWR5IGJlIGBTdHJpbmdgIHRvIGFsbG93IHRoZSBjYWxsZXIgdG8gbW92ZSBpdCAob3IgYGlt cGwKSW50bzxTdHJpbmc+YCBmb3IgdGhpcyB0byBiZSBpbXBsaWNpdCkgLSBib3RoIGNhbGxlcnMg Y291bGQgY3VycmVudGx5Cm1vdmUgaXQgOy0pCgo+ICsgICAgICAgIHNlbmRlcgo+ICsgICAgICAg ICAgICAuc2VuZChDb250cm9sTXNnOjpDb2xsZWN0U2luZ2xlUmVtb3RlKHJlbW90ZS5pbnRvKCkp KQo+ICsgICAgICAgICAgICAuYXdhaXQ/Owo+ICAgICAgfQo+ICsKPiArICAgIE9rKCgpKQo+ICt9 Cj4gKwo+ICsvLy8gU2NoZWR1bGUgbWV0cmljIGNvbGxlY3Rpb24gZm9yIGFsbCByZW1vdGVzIGFz IHNvb24gYXMgcG9zc2libGUuCj4gKy8vLwo+ICsvLy8gSGFzIG5vIGVmZmVjdCBpZiB0aGUgdHgg ZW5kIG9mIHRoZSBjaGFubmVsIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuCj4gKy8vLyBS ZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBtcHNjIGNoYW5uZWwgaGFzIGJlZW4gY2xvc2VkIGFscmVh ZHkuCj4gK3B1YiBhc3luYyBmbiB0cmlnZ2VyX21ldHJpY19jb2xsZWN0aW9uKCkgLT4gUmVzdWx0 PCgpLCBFcnJvcj4gewo+ICsgICAgaWYgbGV0IFNvbWUoc2VuZGVyKSA9IENPTlRST0xfTUVTU0FH RV9UWC5nZXQoKSB7Cj4gKyAgICAgICAgc2VuZGVyLnNlbmQoQ29udHJvbE1zZzo6Q29sbGVjdEFs bFJlbW90ZXMpLmF3YWl0PzsKPiArICAgIH0KPiArCj4gKyAgICBPaygoKSkKPiAgfQo+IC0tIAo+ IDIuMzkuNQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CnBkbS1kZXZlbCBtYWlsaW5nIGxpc3QKcGRtLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBz Oi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3BkbS1kZXZlbAo=