From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-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 C2B551FF16E for <inbox@lore.proxmox.com>; Mon, 17 Mar 2025 14:44:15 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id DA84F4448; Mon, 17 Mar 2025 14:44:03 +0100 (CET) Message-ID: <3a9988eb-d50f-440f-816b-e8a8b7353e6c@proxmox.com> Date: Mon, 17 Mar 2025 14:43:58 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Lukas Wagner <l.wagner@proxmox.com> To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>, Alexander Zeidler <a.zeidler@proxmox.com> References: <20250313151734.258337-1-a.zeidler@proxmox.com> Content-Language: de-AT, en-US In-Reply-To: <20250313151734.258337-1-a.zeidler@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.009 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 Subject: Re: [pve-devel] [RFC proxmox] fix #6143: notify: allow overriding notification templates X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> VGhhbmtzIGEgbG90IGZvciB0aGlzIHBhdGNoLCBtdWNoIGFwcHJlY2lhdGVkIQoKT24gIDIwMjUt MDMtMTMgMTY6MTcsIEFsZXhhbmRlciBaZWlkbGVyIHdyb3RlOgo+IFByZXZpb3VzbHksIG5vdGlm aWNhdGlvbiB0ZW1wbGF0ZXMgY291bGQgYmUgbW9kaWZpZWQgYnkgdGhlIHVzZXIsIGJ1dAo+IHRo ZXNlIHdlcmUgb3ZlcndyaXR0ZW4gYWdhaW4gd2l0aCBpbnN0YWxsaW5nIG5ld2VyIHBhY2thZ2Ug dmVyc2lvbnMgb2YKPiBwdmUtbWFuYWdlciBhbmQgcHJveG1veC1iYWNrdXAuCj4gCj4gTm93IG92 ZXJyaWRlIHRlbXBsYXRlcyBjYW4gYmUgY3JlYXRlZCBjbHVzdGVyLXdpZGUgaW4gdGhlIHBhdGgK PiDigJwvZXRjL3twdmUscHJveG1veC1iYWNrdXB9L25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMve25h bWVzcGFjZX3igJ0sIHdoaWNoCj4gYXJlIHVzZWQgd2l0aCBwcmlvcml0eS4gVGhlIGZvbGRlciBz dHJ1Y3R1cmUgaGFzIHRvIGJlIGNyZWF0ZWQgYW5kCj4gcG9wdWxhdGVkIG1hbnVhbGx5IChlLmcu IC9ldGMvcHZlL25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMvZGVmYXVsdC8pLgo+IAo+IElmIG92ZXJy aWRlIHRlbXBsYXRlcyBhcmUgbm90IGV4aXN0aW5nIG9yIHRoZWlyIHJlbmRlcmluZyBmYWlscywg dGhlCj4gdmVuZG9yIHRlbXBsYXRlcyBpbgo+ICIvdXNyL3NoYXJlL3twdmUtbWFuYWdlcixwcm94 bW94LWJhY2t1cH0vdGVtcGxhdGVzL2RlZmF1bHQvIiBhcmUgdXNlZC4KPiAKPiBTZXF1ZW5jZTog W292ZXJyaWRlIGh0bWwgLT4gdmVuZG9yIGh0bWwgLT5dIG92ZXJyaWRlIHR4dCAtPiB2ZW5kb3Ig dHh0Cj4gCj4gQW4gZXJyb3IgaXMgb25seSByZXR1cm5lZCBpZiBub25lIG9mIHRoZSB0ZW1wbGF0 ZSBjYW5kaWRhdGVzIGNvdWxkIGJlCj4gdXNlZC4gVXNpbmcgYW4gb3ZlcnJpZGUgdGVtcGxhdGUg Z2V0cyBub3QgbG9nZ2VkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBaZWlkbGVyIDxh LnplaWRsZXJAcHJveG1veC5jb20+Cj4gLS0tCj4gCj4gUXVlc3Rpb25zOgo+IC0gSXMgdGhlcmUg YW55dGhpbmcgYWdhaW5zdCB0aGUgY2hvc2VuIG92ZXJyaWRlIHBhdGg/CgpJTU8gdGhleSBhcmUg ZmluZSwgYnV0IHNvbWVib2R5IGVsc2Ugc2hvdWxkIGRvdWJsZS1jaGVjay4KCj4gCj4gVXBjb21p bmcgKGZyb20gYnVnemlsbGEgcmVwb3J0KToKPiAtIEx1a2FzIFdhZ25lcjogRXhpc3RpbmcgdGVt cGxhdGVzL3ZhcmlhYmxlcy9oZWxwZXJzIGhhdmUgYmVlbgo+ICAgcmV2aWV3ZWQgdG8gbWFrZSBz dXJlIHRoYXQgdGhleSBhcmUgT0sgdG8gYmUgcHVibGljIEFQSQoKSSdsbCByZXZpc2l0IHRoZSBl eGlzdGluZyB0ZW1wbGF0ZXMgaW4gdGhlIG5leHQgZGF5cyBhbmQgc2VlIGlmIHRoZXJlIGlzIGFu eXRoaW5nCndlIHNob3VsZCBmaXggdXAgYmVmb3JlIGV4cG9zaW5nIHRoaXMgdG8gdGhlIHVzZXIu IFRoaXMgcGF0Y2gKc2hvdWxkIG5vdCBiZSBtZXJnZWQgdW50aWwgdGhlIGV4aXN0aW5nIHRlbXBs YXRlcyBoYXZlIGJlZW4gYXVkaXRlZC4KCj4gLSBUaGUgc3RlcHMgbmVlZGVkIHRvIG92ZXJyaWRl IHRoZSB0ZW1wbGF0ZSBhcmUgYWRkZWQgdG8gdGhlCj4gICBub3RpZmljYXRpb24gZG9jcwo+IC0g VGVtcGxhdGUgdmFyaWFibGVzIGFuZCBoZWxwZXJzIGFyZSBkb2N1bWVudGVkCj4gCj4gCj4gIHBy b3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21vZC5ycyAgfCAgIDMgKy0KPiAgcHJveG1veC1ub3Rp Znkvc3JjL2NvbnRleHQvcGJzLnJzICB8ICAgOSArKy0KPiAgcHJveG1veC1ub3RpZnkvc3JjL2Nv bnRleHQvcHZlLnJzICB8ICAxMCArKy0KPiAgcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvdGVz dC5ycyB8ICAgMSArCj4gIHByb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMgfCAxMjQg KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KPiAgNSBmaWxlcyBjaGFuZ2VkLCA5OSBpbnNl cnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3Rp Znkvc3JjL2NvbnRleHQvbW9kLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvbW9kLnJz Cj4gaW5kZXggYzBhNWExM2IuLmM0NjQ5ZDkxIDEwMDY0NAo+IC0tLSBhL3Byb3htb3gtbm90aWZ5 L3NyYy9jb250ZXh0L21vZC5ycwo+ICsrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L21v ZC5ycwo+IEBAIC0yNCwxMSArMjQsMTIgQEAgcHViIHRyYWl0IENvbnRleHQ6IFNlbmQgKyBTeW5j ICsgRGVidWcgewo+ICAgICAgZm4gaHR0cF9wcm94eV9jb25maWcoJnNlbGYpIC0+IE9wdGlvbjxT dHJpbmc+Owo+ICAgICAgLy8vIFJldHVybiBkZWZhdWx0IGNvbmZpZyBmb3IgYnVpbHQtaW4gdGFy Z2V0cy9tYXRjaGVycy4KPiAgICAgIGZuIGRlZmF1bHRfY29uZmlnKCZzZWxmKSAtPiAmJ3N0YXRp YyBzdHI7Cj4gLSAgICAvLy8gTG9va3VwIGEgdGVtcGxhdGUgaW4gYSBjZXJ0YWluIChvcHRpb25h bCkgbmFtZXNwYWNlCj4gKyAgICAvLy8gTG9va3VwIGEgdGVtcGxhdGUgKG9yIGl0cyBvdmVycmlk ZSkgaW4gYSBjZXJ0YWluIChvcHRpb25hbCkgbmFtZXNwYWNlCj4gICAgICBmbiBsb29rdXBfdGVt cGxhdGUoCj4gICAgICAgICAgJnNlbGYsCj4gICAgICAgICAgZmlsZW5hbWU6ICZzdHIsCj4gICAg ICAgICAgbmFtZXNwYWNlOiBPcHRpb248JnN0cj4sCj4gKyAgICAgICAgdXNlX292ZXJyaWRlOiBi b29sLAo+ICAgICAgKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPjsKPiAgfQo+ICAK PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzIGIvcHJveG1v eC1ub3RpZnkvc3JjL2NvbnRleHQvcGJzLnJzCj4gaW5kZXggZTgxMDZjNTcuLmRhNGQ5YmEwIDEw MDY0NAo+IC0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwo+ICsrKyBiL3By b3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Bicy5ycwo+IEBAIC0xMDksOCArMTA5LDE1IEBAIGlt cGwgQ29udGV4dCBmb3IgUEJTQ29udGV4dCB7Cj4gICAgICAgICAgJnNlbGYsCj4gICAgICAgICAg ZmlsZW5hbWU6ICZzdHIsCj4gICAgICAgICAgbmFtZXNwYWNlOiBPcHRpb248JnN0cj4sCj4gKyAg ICAgICAgdXNlX292ZXJyaWRlOiBib29sLAoKVGhlIGBUZW1wbGF0ZVNvdXJjZWAgdHlwZSBJIG1l bnRpb24gYmVsb3cgd291bGQgYWxzbyBiZSB1c2VkIGhlcmUKaW5zdGVhZCBvZiBhIGJvb2wKCj4g ICAgICApIC0+IFJlc3VsdDxPcHRpb248U3RyaW5nPiwgRXJyb3I+IHsKPiAtICAgICAgICBsZXQg cGF0aCA9IFBhdGg6Om5ldygiL3Vzci9zaGFyZS9wcm94bW94LWJhY2t1cC90ZW1wbGF0ZXMiKQo+ ICsgICAgICAgIGxldCBwYXRoID0gaWYgdXNlX292ZXJyaWRlIHsKPiArICAgICAgICAgICAgIi9l dGMvcHJveG1veC1iYWNrdXAvbm90aWZpY2F0aW9uLXRlbXBsYXRlcyIKPiArICAgICAgICB9IGVs c2Ugewo+ICsgICAgICAgICAgICAiL3Vzci9zaGFyZS9wcm94bW94LWJhY2t1cC90ZW1wbGF0ZXMi Cj4gKyAgICAgICAgfTsKPiArCj4gKyAgICAgICAgbGV0IHBhdGggPSBQYXRoOjpuZXcoJnBhdGgp Cj4gICAgICAgICAgICAgIC5qb2luKG5hbWVzcGFjZS51bndyYXBfb3IoImRlZmF1bHQiKSkKPiAg ICAgICAgICAgICAgLmpvaW4oZmlsZW5hbWUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvcHJveG1veC1u b3RpZnkvc3JjL2NvbnRleHQvcHZlLnJzIGIvcHJveG1veC1ub3RpZnkvc3JjL2NvbnRleHQvcHZl LnJzCj4gaW5kZXggZDQ5YWIyN2MuLjA1YjFiNWI3IDEwMDY0NAo+IC0tLSBhL3Byb3htb3gtbm90 aWZ5L3NyYy9jb250ZXh0L3B2ZS5ycwo+ICsrKyBiL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0 L3B2ZS5ycwo+IEBAIC01OCwxMCArNTgsMTggQEAgaW1wbCBDb250ZXh0IGZvciBQVkVDb250ZXh0 IHsKPiAgICAgICAgICAmc2VsZiwKPiAgICAgICAgICBmaWxlbmFtZTogJnN0ciwKPiAgICAgICAg ICBuYW1lc3BhY2U6IE9wdGlvbjwmc3RyPiwKPiArICAgICAgICB1c2Vfb3ZlcnJpZGU6IGJvb2ws Cj4gICAgICApIC0+IFJlc3VsdDxPcHRpb248U3RyaW5nPiwgRXJyb3I+IHsKPiAtICAgICAgICBs ZXQgcGF0aCA9IFBhdGg6Om5ldygiL3Vzci9zaGFyZS9wdmUtbWFuYWdlci90ZW1wbGF0ZXMiKQo+ ICsgICAgICAgIGxldCBwYXRoID0gaWYgdXNlX292ZXJyaWRlIHsKPiArICAgICAgICAgICAgIi9l dGMvcHZlL25vdGlmaWNhdGlvbi10ZW1wbGF0ZXMiCj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAg ICAgICAgICAgIi91c3Ivc2hhcmUvcHZlLW1hbmFnZXIvdGVtcGxhdGVzIgo+ICsgICAgICAgIH07 Cj4gKwo+ICsgICAgICAgIGxldCBwYXRoID0gUGF0aDo6bmV3KCZwYXRoKQo+ICAgICAgICAgICAg ICAuam9pbihuYW1lc3BhY2UudW53cmFwX29yKCJkZWZhdWx0IikpCj4gICAgICAgICAgICAgIC5q b2luKGZpbGVuYW1lKTsKPiArCj4gICAgICAgICAgbGV0IHRlbXBsYXRlX3N0cmluZyA9IHByb3ht b3hfc3lzOjpmczo6ZmlsZV9yZWFkX29wdGlvbmFsX3N0cmluZyhwYXRoKQo+ICAgICAgICAgICAg ICAubWFwX2Vycih8ZXJyfCBFcnJvcjo6R2VuZXJpYyhmb3JtYXQhKCJjb3VsZCBub3QgbG9hZCB0 ZW1wbGF0ZToge2Vycn0iKSkpPzsKPiAgICAgICAgICBPayh0ZW1wbGF0ZV9zdHJpbmcpCj4gZGlm ZiAtLWdpdCBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Rlc3QucnMgYi9wcm94bW94LW5v dGlmeS9zcmMvY29udGV4dC90ZXN0LnJzCj4gaW5kZXggNWRmMjVkMDUuLjZlZmQ4NGM1IDEwMDY0 NAo+IC0tLSBhL3Byb3htb3gtbm90aWZ5L3NyYy9jb250ZXh0L3Rlc3QucnMKPiArKysgYi9wcm94 bW94LW5vdGlmeS9zcmMvY29udGV4dC90ZXN0LnJzCj4gQEAgLTI5LDYgKzI5LDcgQEAgaW1wbCBD b250ZXh0IGZvciBUZXN0Q29udGV4dCB7Cj4gICAgICAgICAgJnNlbGYsCj4gICAgICAgICAgX2Zp bGVuYW1lOiAmc3RyLAo+ICAgICAgICAgIF9uYW1lc3BhY2U6IE9wdGlvbjwmc3RyPiwKPiArICAg ICAgICBfdXNlX292ZXJyaWRlOiBib29sLAo+ICAgICAgKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmlu Zz4sIEVycm9yPiB7Cj4gICAgICAgICAgT2soU29tZShTdHJpbmc6Om5ldygpKSkKPiAgICAgIH0K PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1ub3RpZnkvc3JjL3JlbmRlcmVyL21vZC5ycyBiL3Byb3ht b3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMKPiBpbmRleCBlMDU4ZWEyMi4uYWM1MTliZWUg MTAwNjQ0Cj4gLS0tIGEvcHJveG1veC1ub3RpZnkvc3JjL3JlbmRlcmVyL21vZC5ycwo+ICsrKyBi L3Byb3htb3gtbm90aWZ5L3NyYy9yZW5kZXJlci9tb2QucnMKPiBAQCAtMTkxLDcgKzE5MSw3IEBA IGltcGwgVmFsdWVSZW5kZXJGdW5jdGlvbiB7Cj4gIH0KPiAgCj4gIC8vLyBBdmFpbGFibGUgdGVt cGxhdGUgdHlwZXMKPiAtI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQo+ICsjW2Rlcml2ZShDb3B5LCBD bG9uZSwgUGFydGlhbEVxKV0KPiAgcHViIGVudW0gVGVtcGxhdGVUeXBlIHsKPiAgICAgIC8vLyBI VE1MIGJvZHkgdGVtcGxhdGUKPiAgICAgIEh0bWxCb2R5LAo+IEBAIC0yNTAsNzAgKzI1MCwxMDQg QEAgaW1wbCBCbG9ja1JlbmRlckZ1bmN0aW9ucyB7Cj4gIH0KPiAgCj4gIGZuIHJlbmRlcl90ZW1w bGF0ZV9pbXBsKAo+IC0gICAgdGVtcGxhdGU6ICZzdHIsCj4gICAgICBkYXRhOiAmVmFsdWUsCj4g ICAgICByZW5kZXJlcjogVGVtcGxhdGVUeXBlLAo+IC0pIC0+IFJlc3VsdDxTdHJpbmcsIEVycm9y PiB7Cj4gLSAgICBsZXQgbXV0IGhhbmRsZWJhcnMgPSBIYW5kbGViYXJzOjpuZXcoKTsKPiAtICAg IGhhbmRsZWJhcnMucmVnaXN0ZXJfZXNjYXBlX2ZuKHJlbmRlcmVyLmVzY2FwZV9mbigpKTsKPiAr ICAgIGZpbGVuYW1lOiAmc3RyLAo+ICsgICAgdXNlX292ZXJyaWRlOiBib29sLAo+ICsgICAgaHRt bF9mYWxsYmFjazogYm9vbCwKPiArKSAtPiBSZXN1bHQ8T3B0aW9uPFN0cmluZz4sIEVycm9yPiB7 Cj4gKyAgICBsZXQgdGVtcGxhdGVfc3RyaW5nID0gY29udGV4dDo6Y29udGV4dCgpLmxvb2t1cF90 ZW1wbGF0ZSgmZmlsZW5hbWUsIE5vbmUsIHVzZV9vdmVycmlkZSk/Owo+ICsKPiArICAgIGlmIGxl dCBTb21lKHRlbXBsYXRlX3N0cmluZykgPSB0ZW1wbGF0ZV9zdHJpbmcgewo+ICsgICAgICAgIGxl dCBtdXQgaGFuZGxlYmFycyA9IEhhbmRsZWJhcnM6Om5ldygpOwo+ICsgICAgICAgIGhhbmRsZWJh cnMucmVnaXN0ZXJfZXNjYXBlX2ZuKHJlbmRlcmVyLmVzY2FwZV9mbigpKTsKPiArCj4gKyAgICAg ICAgbGV0IGJsb2NrX3JlbmRlcl9mbnMgPSByZW5kZXJlci5ibG9ja19yZW5kZXJfZm5zKCk7Cj4g KyAgICAgICAgYmxvY2tfcmVuZGVyX2Zucy5yZWdpc3Rlcl9oZWxwZXJzKCZtdXQgaGFuZGxlYmFy cyk7Cj4gIAo+IC0gICAgbGV0IGJsb2NrX3JlbmRlcl9mbnMgPSByZW5kZXJlci5ibG9ja19yZW5k ZXJfZm5zKCk7Cj4gLSAgICBibG9ja19yZW5kZXJfZm5zLnJlZ2lzdGVyX2hlbHBlcnMoJm11dCBo YW5kbGViYXJzKTsKPiArICAgICAgICBWYWx1ZVJlbmRlckZ1bmN0aW9uOjpyZWdpc3Rlcl9oZWxw ZXJzKCZtdXQgaGFuZGxlYmFycyk7Cj4gKwo+ICsgICAgICAgIGhhbmRsZWJhcnMucmVnaXN0ZXJf aGVscGVyKAo+ICsgICAgICAgICAgICAicmVsYXRpdmUtcGVyY2VudGFnZSIsCj4gKyAgICAgICAg ICAgIEJveDo6bmV3KGhhbmRsZWJhcnNfcmVsYXRpdmVfcGVyY2VudGFnZV9oZWxwZXIpLAo+ICsg ICAgICAgICk7Cj4gIAo+IC0gICAgVmFsdWVSZW5kZXJGdW5jdGlvbjo6cmVnaXN0ZXJfaGVscGVy cygmbXV0IGhhbmRsZWJhcnMpOwo+ICsgICAgICAgIGxldCByZW5kZXJlZF90ZW1wbGF0ZSA9IGhh bmRsZWJhcnMKPiArICAgICAgICAgICAgLnJlbmRlcl90ZW1wbGF0ZSgmdGVtcGxhdGVfc3RyaW5n LCBkYXRhKQo+ICsgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBFcnJvcjo6UmVuZGVyRXJyb3Io ZXJyLmludG8oKSkpPzsKPiAgCj4gLSAgICBoYW5kbGViYXJzLnJlZ2lzdGVyX2hlbHBlcigKPiAt ICAgICAgICAicmVsYXRpdmUtcGVyY2VudGFnZSIsCj4gLSAgICAgICAgQm94OjpuZXcoaGFuZGxl YmFyc19yZWxhdGl2ZV9wZXJjZW50YWdlX2hlbHBlciksCj4gLSAgICApOwo+ICsgICAgICAgIGxl dCBtdXQgcmVuZGVyZWRfdGVtcGxhdGUgPSByZW5kZXJlci5wb3N0cHJvY2VzcyhyZW5kZXJlZF90 ZW1wbGF0ZSk7Cj4gIAo+IC0gICAgbGV0IHJlbmRlcmVkX3RlbXBsYXRlID0gaGFuZGxlYmFycwo+ IC0gICAgICAgIC5yZW5kZXJfdGVtcGxhdGUodGVtcGxhdGUsIGRhdGEpCj4gLSAgICAgICAgLm1h cF9lcnIofGVycnwgRXJyb3I6OlJlbmRlckVycm9yKGVyci5pbnRvKCkpKT87Cj4gKyAgICAgICAg aWYgaHRtbF9mYWxsYmFjayB7Cj4gKyAgICAgICAgICAgIHJlbmRlcmVkX3RlbXBsYXRlID0gZm9y bWF0ISgKPiArICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT48cHJlPnt9PC9wcmU+PC9ib2R5 PjwvaHRtbD4iLAo+ICsgICAgICAgICAgICAgICAgaGFuZGxlYmFyczo6aHRtbF9lc2NhcGUoJnJl bmRlcmVkX3RlbXBsYXRlKQo+ICsgICAgICAgICAgICApOwo+ICsgICAgICAgIH0KPiAgCj4gLSAg ICBPayhyZW5kZXJlZF90ZW1wbGF0ZSkKPiArICAgICAgICBPayhTb21lKHJlbmRlcmVkX3RlbXBs YXRlKSkKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgT2soTm9uZSkKPiArICAgIH0KPiAgfQo+ ICAKPiAgLy8vIFJlbmRlciBhIHRlbXBsYXRlIHN0cmluZy4KPiAgLy8vCj4gLS8vLyBUaGUgb3V0 cHV0IGZvcm1hdCBjYW4gYmUgY2hvc2VuIHZpYSB0aGUgYHJlbmRlcmVyYCBwYXJhbWV0ZXIgKHNl ZSBbVGVtcGxhdGVUeXBlXQo+IC0vLy8gZm9yIGF2YWlsYWJsZSBvcHRpb25zKS4KPiArLy8vIFRo ZSBvdXRwdXQgZm9ybWF0IGNhbiBiZSBjaG9zZW4gdmlhIHRoZSBgdHlgIHBhcmFtZXRlciAoc2Vl IFtUZW1wbGF0ZVR5cGVdCj4gKy8vLyBmb3IgYXZhaWxhYmxlIG9wdGlvbnMpLiBVc2UgYW4gb3Zl cnJpZGUgdGVtcGxhdGUgaWYgZXhpc3RpbmcgYW5kIHJlbmRlcmFibGUsCgpJIHRoaW5rIHRoZSBp bXBlcmF0aXZlIG1vb2Qvdm9pY2UgaXMgYSBiaXQgY29uZnVzaW5nIHRvIGRlc2NyaWJlIHRoZSBm dW5jdGlvbmFsaXR5IG9mIGEgZnVuY3Rpb24uCkl0IHJlYWRzIGxpa2UgeW91IGFyZSBnaXZpbmcg YSBjb21tYW5kIHRvIHRoZSByZWFkZXIuCgpIb3cgYWJvdXQgc29tZXRoaW5nIGxpa2U6CgoiVGhl IGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlbmRlciBhbiBvdmVycmlkZSB0ZW1wbGF0ZSBpZiBpdCBl eGlzdCBhbmQgaXMgcmVuZGVyYWJsZSwgb3RoZXJ3aXNlCml0IHVzZXMgdGhlIG9yaWdpbmFsIHRl bXBsYXRlLiBJZiB0aGUgW1RlbXBsYXRlVHlwZV0gaXMgYEh0bWxCb2R5YCBidXQgbm8gSFRNTCB0 ZW1wbGF0ZSBjb3VsZCBiZQpmb3VuZCBvciByZW5kZXJlZCwgaXQgZmFsbHMgYmFjayB0byB0aGUg cGxhaW50ZXh0IHRlbXBsYXRlLCBlbmNhcHN1bGF0aW5nIHRoZSBjb250ZW50IGluCmEgcHJlLWZv cm1hdHRlZCBIVE1MIGJsb2NrICg8cHJlPikuIgoKPiArLy8vIG90aGVyd2lzZSBmYWxsIGJhY2sg dG8gb3JpZ2luYWwgdGVtcGxhdGUuIElmIFtUZW1wbGF0ZVR5cGVdIGlzIGBIdG1sQm9keWAgYnV0 IG5vCj4gKy8vLyBIVE1MIHRlbXBsYXRlIGNvdWxkIGJlIHVzZWQsIGZhbGwgYmFjayB0byBwbGFp bnRleHQgdGVtcGxhdGVzIGFuZCBhZGQgdGhlIHRhZ3MKPiArLy8vIGA8aHRtbD48Ym9keT48cHJl PmAuCj4gIHB1YiBmbiByZW5kZXJfdGVtcGxhdGUoCj4gICAgICBtdXQgdHk6IFRlbXBsYXRlVHlw ZSwKPiAgICAgIHRlbXBsYXRlOiAmc3RyLAo+ICAgICAgZGF0YTogJlZhbHVlLAo+ICApIC0+IFJl c3VsdDxTdHJpbmcsIEVycm9yPiB7Cj4gLSAgICBsZXQgZmlsZW5hbWUgPSBmb3JtYXQhKCJ7dGVt cGxhdGV9LXtzdWZmaXh9Iiwgc3VmZml4ID0gdHkuZmlsZV9zdWZmaXgoKSk7Cj4gLQo+IC0gICAg bGV0IHRlbXBsYXRlX3N0cmluZyA9IGNvbnRleHQ6OmNvbnRleHQoKS5sb29rdXBfdGVtcGxhdGUo JmZpbGVuYW1lLCBOb25lKT87Cj4gLQo+IC0gICAgbGV0ICh0ZW1wbGF0ZV9zdHJpbmcsIGZhbGxi YWNrKSA9IG1hdGNoICh0ZW1wbGF0ZV9zdHJpbmcsIHR5KSB7Cj4gLSAgICAgICAgKE5vbmUsIFRl bXBsYXRlVHlwZTo6SHRtbEJvZHkpID0+IHsKPiAtICAgICAgICAgICAgdHkgPSBUZW1wbGF0ZVR5 cGU6OlBsYWludGV4dEJvZHk7Cj4gLSAgICAgICAgICAgIGxldCBwbGFpbnRleHRfZmlsZW5hbWUg PSBmb3JtYXQhKCJ7dGVtcGxhdGV9LXtzdWZmaXh9Iiwgc3VmZml4ID0gdHkuZmlsZV9zdWZmaXgo KSk7Cj4gLSAgICAgICAgICAgICgKPiAtICAgICAgICAgICAgICAgIGNvbnRleHQ6OmNvbnRleHQo KS5sb29rdXBfdGVtcGxhdGUoJnBsYWludGV4dF9maWxlbmFtZSwgTm9uZSk/LAo+IC0gICAgICAg ICAgICAgICAgdHJ1ZSwKPiAtICAgICAgICAgICAgKQo+ICsgICAgbGV0IG11dCB1c2Vfb3ZlcnJp ZGUgPSB0cnVlOwo+ICsgICAgbGV0IG11dCBodG1sX2ZhbGxiYWNrID0gZmFsc2U7Cj4gKwo+ICsg ICAgbG9vcCB7Cj4gKyAgICAgICAgbGV0IGZpbGVuYW1lID0gZm9ybWF0ISgie3RlbXBsYXRlfS17 c3VmZml4fSIsIHN1ZmZpeCA9IHR5LmZpbGVfc3VmZml4KCkpOwo+ICsgICAgICAgIGxldCByZXN1 bHQgPSByZW5kZXJfdGVtcGxhdGVfaW1wbChkYXRhLCB0eSwgJmZpbGVuYW1lLCB1c2Vfb3ZlcnJp ZGUsIGh0bWxfZmFsbGJhY2spOwo+ICsKPiArICAgICAgICBtYXRjaCByZXN1bHQgewo+ICsgICAg ICAgICAgICBPayhTb21lKHMpKSA9PiB7Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gT2socyk7 Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICAgICAgT2soTm9uZSkgPT4ge30KPiArICAgICAg ICAgICAgRXJyKGVycikgPT4gewo+ICsgICAgICAgICAgICAgICAgbGV0IHNvdXJjZSA9IGlmIHVz ZV9vdmVycmlkZSB7ICJvdmVycmlkZSIgfSBlbHNlIHsgInZlbmRvciIgfTsKPiArICAgICAgICAg ICAgICAgIHRyYWNpbmc6OmVycm9yISgiZmFpbGVkIHRvIHJlbmRlciB7c291cmNlfSB0ZW1wbGF0 ZSAne2ZpbGVuYW1lfSc6IHtlcnJ9Iik7Cj4gKyAgICAgICAgICAgIH0KPiAgICAgICAgICB9Cj4g LSAgICAgICAgKHRlbXBsYXRlX3N0cmluZywgXykgPT4gKHRlbXBsYXRlX3N0cmluZywgZmFsc2Up LAo+IC0gICAgfTsKPiAtCj4gLSAgICBsZXQgdGVtcGxhdGVfc3RyaW5nID0gdGVtcGxhdGVfc3Ry aW5nLm9rX29yKEVycm9yOjpHZW5lcmljKGZvcm1hdCEoCj4gLSAgICAgICAgImNvdWxkIG5vdCBs b2FkIHRlbXBsYXRlICd7dGVtcGxhdGV9JyIKPiAtICAgICkpKT87Cj4gIAo+IC0gICAgbGV0IG11 dCByZW5kZXJlZCA9IHJlbmRlcl90ZW1wbGF0ZV9pbXBsKCZ0ZW1wbGF0ZV9zdHJpbmcsIGRhdGEs IHR5KT87Cj4gLSAgICByZW5kZXJlZCA9IHR5LnBvc3Rwcm9jZXNzKHJlbmRlcmVkKTsKPiAtCj4g LSAgICBpZiBmYWxsYmFjayB7Cj4gLSAgICAgICAgcmVuZGVyZWQgPSBmb3JtYXQhKAo+IC0gICAg ICAgICAgICAiPGh0bWw+PGJvZHk+PHByZT57fTwvcHJlPjwvYm9keT48L2h0bWw+IiwKPiAtICAg ICAgICAgICAgaGFuZGxlYmFyczo6aHRtbF9lc2NhcGUoJnJlbmRlcmVkKQo+IC0gICAgICAgICk7 Cj4gKyAgICAgICAgbWF0Y2ggKHR5LCB1c2Vfb3ZlcnJpZGUpIHsKPiArICAgICAgICAgICAgKFRl bXBsYXRlVHlwZTo6SHRtbEJvZHksIHRydWUpID0+IHsKPiArICAgICAgICAgICAgICAgIHVzZV9v dmVycmlkZSA9IGZhbHNlOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIChUZW1wbGF0 ZVR5cGU6Okh0bWxCb2R5LCBmYWxzZSkgPT4gewo+ICsgICAgICAgICAgICAgICAgdHkgPSBUZW1w bGF0ZVR5cGU6OlBsYWludGV4dEJvZHk7Cj4gKyAgICAgICAgICAgICAgICB1c2Vfb3ZlcnJpZGUg PSB0cnVlOwo+ICsgICAgICAgICAgICAgICAgaHRtbF9mYWxsYmFjayA9IHRydWU7Cj4gKyAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6UGxhaW50ZXh0Qm9keSwgdHJ1 ZSkgPT4gewo+ICsgICAgICAgICAgICAgICAgdXNlX292ZXJyaWRlID0gZmFsc2U7Cj4gKyAgICAg ICAgICAgIH0KCkJ0dywgeW91IGNhbiBtYXRjaCBvbiBtdWx0aXBsZSB2YXJpYW50cyBhdCB0aGUg c2FtZSB0aW1lIHVzaW5nIHRoZSB8IG9wZXJhdG9yLgogICAgICAgICAgIChUZW1wbGF0ZVR5cGU6 Okh0bWxCb2R5IHwgVGVtcGxhdGVUeXBlOjpQbGFpbnRleHRCb2R5IHwgVGVtcGxhdGVUeXBlOjpT dWJqZWN0LCB0cnVlKSA9PiB7CiAgICAgICAgICAgICAgIHVzZV9vdmVycmlkZSA9IGZhbHNlOwog ICAgICAgICAgIH0KCkkgdGhpbmsgdGhpcyB3b3VsZCBiZSBuaWNlIHRvIHVzZSBpbiB0aGlzIGNh c2UsIHRoZXJlIGFyZSBhY3R1YWxseSBvbmx5CjMgZGlzdGluY3QgYm9kaWVzIG9mIHRoZSBtYXRj aCBhcm1zOgogIC0gc2V0dGluZyBvdmVycmlkZSB0byBmYWxzZQogIC0gYnJlYWtpbmcgZnJvbSB0 aGUgbG9vcAogIC0gc2V0dGluZyB0eSBmb3IgSFRNTC1mcm9tLXBsYWluIGZhbGxiYWNrLCByZXNl dHRpbmcgb3ZlcnJpZGUgdG8gdHJ1ZQoKPiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6UGxh aW50ZXh0Qm9keSwgZmFsc2UpID0+IHsKPiArICAgICAgICAgICAgICAgIC8vIHJldHVybiBlcnJv ciwgbm8gb3RoZXIgb3B0aW9ucwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAg ICAgIH0KPiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6U3ViamVjdCwgdHJ1ZSkgPT4gewo+ ICsgICAgICAgICAgICAgICAgdXNlX292ZXJyaWRlID0gZmFsc2U7Cj4gKyAgICAgICAgICAgIH0K PiArICAgICAgICAgICAgKFRlbXBsYXRlVHlwZTo6U3ViamVjdCwgZmFsc2UpID0+IGJyZWFrLAo+ ICsgICAgICAgIH0KPiAgICAgIH0KPiAgCj4gLSAgICBPayhyZW5kZXJlZCkKPiArICAgIEVycihF cnJvcjo6R2VuZXJpYygKPiArICAgICAgICAiZmFpbGVkIHRvIHJlbmRlciBub3RpZmljYXRpb24g dGVtcGxhdGUsIGFsbCB0ZW1wbGF0ZSBjYW5kaWRhdGVzIGFyZSBlcnJvbmVvdXMgb3IgbWlzc2lu ZyIKPiArICAgICAgICAgICAgLmludG8oKSwKPiArICAgICkpCj4gIH0KPiAgCj4gICNbY2ZnKHRl c3QpXQoKClRoZSBvbmx5IHRoaW5nIEkgZG9uJ3QgbGlrZSB0aGF0IG11Y2ggaXMgdGhlIHR3byBi b29sZWFuIHBhcmFtZXRlcnMgZm9yCmByZW5kZXJfdGVtcGxhdGVfaW1wbGAuLi4gSW4gdGhpcyBj YXNlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQKaW4gb25seSBvbmUgcGxhY2UgKGFuZCBp dCB3aWxsIHByb2JhYmx5IHN0YXkgdGhhdCB3YXkpIGl0IGlzIG5vdCB0aGF0CmJhZCwgYnV0IGJv b2xlYW4gcGFyYW1ldGVyIGFsd2F5cyBoYXZlIHRoZSBwcm9ibGVtIHRoYXQgdGhleSBjYW4gYmUg YQpiaXQgZGlmZmljdWx0IHRvIHVuZGVyc3RhbmQgKHlvdSBoYXZlIHRvIGxvb2sgYXQgdGhlIGRl ZmluaXRpb24gb2YgdGhlCmZ1bmN0aW9uIHRvIGdldCB0aGUgbWVhbmluZykgYW5kIGNhbiBiZSBl YXNpbHkgbWl4ZWQgdXAgKGUuZy4geW91IGNvdWxkIHN3aXRjaAp0aGUgb3JkZXIgb2YgYm90aCBw YXJhbWV0ZXJzOyB0aGlzIHdvdWxkIGJlIGhhcmQgdG8gc3BvdCBpbiBhIHJldmlldyBhbmQgdGhl CmNvbXBpbGVyIGFsc28gZG9lcyBub3QgaGVscCBhdCBhbGwgaW4gdGhpcyBjYXNlLgoKSSB0aGlu ayB3aGF0IHdlIGNvdWxkIGRvIGhlcmUgaXMgdGhlIGZvbGxvd2luZy4gSGF2ZSBhIAoKcHViIGVu dW0gVGVtcGxhdGVTb3VyY2UgewogICAgVmVuZG9yLAogICAgT3ZlcnJpZGUKfQoKYW5kIGNoYW5n ZSB0aGUgJ3VzZV9vdmVycmlkZScgcGFyYW1ldGVyIHRvIGEgJ3NvdXJjZScgcGFyYW1ldGVyLgpZ b3UgbWF5IHdhbnQgdG8gZGVyaXZlIGBEaXNwbGF5YCBmb3IgdGhlIGBUZW1wbGF0ZVNvdXJjZWAg ZW51bQpzbyB0aGF0IHlvdSBjYW4gdXNlIGluIHRoZSB0aGUgYHRyYWNpbmc6OmVycm9yIWAgc3Rh dGVtZW50LgoKQWxzbywgd2UgY291bGQgbWFrZSB0aGUgSFRNTC1mYWxsaW5nLWJhY2stdG8tcGxh aW50ZXh0IGNhc2UgYSBzZXBhcmF0ZQp2YXJpYW50IGluIGBUZW1wbGF0ZVR5cGVgIGUuZy4gVGVt cGxhdGVUeXBlOjpIdG1sRnJvbVBsYWludGV4dC4KSW4gdGhlIG1hdGNoIHN0YXRlbWVudCB5b3Ug Y2FuIHRoZW4ganVzdCBzZXQgdGhlIGB0eWAgYW5kIHNraXAKc2V0dGluZyBgaHRtbF9mYWxsYmFj a2AgYWxsdG9nZXRoZXIuIEFkZGluZyB0aGUgYDxodG1sPjxwcmU+YApzdHVmZiBjYW4gYmUgbW92 ZWQgdG8gdGhlIGBwb3N0cHJvY2Vzc2AgZnVuY3Rpb24sIHNpbWlsYXIKdG8gaG93IGBTdWJqZWN0 YCBpcyBhbHJlYWR5IHBvc3Rwcm9jZXNzZWQuCgoKLS0gCi0gTHVrYXMKCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcHZlLWRldmVsIG1haWxpbmcgbGlz dApwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9j Z2ktYmluL21haWxtYW4vbGlzdGluZm8vcHZlLWRldmVsCg==