From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 53E391FF184 for ; Thu, 20 Nov 2025 12:06:45 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 32B193F8E; Thu, 20 Nov 2025 12:06:47 +0100 (CET) From: Stefan Hanreich To: pdm-devel@lists.proxmox.com Date: Thu, 20 Nov 2025 12:06:37 +0100 Message-ID: <20251120110641.120124-8-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251120110641.120124-1-s.hanreich@proxmox.com> References: <20251120110641.120124-1-s.hanreich@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.173 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 KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pdm-devel] [PATCH proxmox-datacenter-manager v3 4/5] ui: sdn: evpn: add vnet status panel X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" VGhpcyBwYW5lbCBzaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBNQUMtVlJGIG9mIGFuIEVWUE4gdm5l dC4gSXQgbGlzdHMKdGhlIG5laWdoYm9yIHRhYmxlIG9mIHRoZSB2bmV0IG9uIGEgZ2l2ZW4gbm9k ZSwgd2hpY2ggY2FuIGJlIHNlbGVjdGVkCnZpYSB0aGUgZHJvcGRvd24gaW4gdGhlIHBhbmVsLiBJ dCB3aWxsIGJlIHVzZWQgaW4gdGhlIHJlbW90ZSB0cmVlIGFuZAp0aGUgdnJmIHRyZWUgb2YgdGhl IEVWUE4gdmlldyB0byBkaXNwbGF5IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0CnRoZSBzZWxl Y3RlZCBFVlBOIHZuZXQuCgpTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gSGFucmVpY2ggPHMuaGFucmVp Y2hAcHJveG1veC5jb20+ClRlc3RlZC1ieTogSGFubmVzIETDvHJyIDxoLmR1ZXJyQHByb3htb3gu Y29tPgpSZXZpZXdlZC1ieTogTHVrYXMgV2FnbmVyIDxsLndhZ25lckBwcm94bW94LmNvbT4KLS0t CiB1aS9zcmMvc2RuL2V2cG4vbW9kLnJzICAgICAgICAgfCAgIDMgKwogdWkvc3JjL3Nkbi9ldnBu L3ZuZXRfc3RhdHVzLnJzIHwgMjUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCAyNTYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHVp L3NyYy9zZG4vZXZwbi92bmV0X3N0YXR1cy5ycwoKZGlmZiAtLWdpdCBhL3VpL3NyYy9zZG4vZXZw bi9tb2QucnMgYi91aS9zcmMvc2RuL2V2cG4vbW9kLnJzCmluZGV4IDZjOTE5YmEuLjMzMjBjMGYg MTAwNjQ0Ci0tLSBhL3VpL3NyYy9zZG4vZXZwbi9tb2QucnMKKysrIGIvdWkvc3JjL3Nkbi9ldnBu L21vZC5ycwpAQCAtMTYsNiArMTYsOSBAQCBwdWIgdXNlIGFkZF96b25lOjpBZGRab25lV2luZG93 OwogbW9kIHpvbmVfc3RhdHVzOwogcHViIHVzZSB6b25lX3N0YXR1czo6Wm9uZVN0YXR1c1RhYmxl OwogCittb2Qgdm5ldF9zdGF0dXM7CitwdWIgdXNlIHZuZXRfc3RhdHVzOjpWbmV0U3RhdHVzVGFi bGU7CisKICNbZGVyaXZlKENsb25lLCBDb3B5LCBEZWJ1ZywgUGFydGlhbEVxLCBFcSwgT3JkLCBQ YXJ0aWFsT3JkLCBIYXNoKV0KIHB1YiBzdHJ1Y3QgRXZwblJvdXRlVGFyZ2V0IHsKICAgICBhc246 IHUzMiwKZGlmZiAtLWdpdCBhL3VpL3NyYy9zZG4vZXZwbi92bmV0X3N0YXR1cy5ycyBiL3VpL3Ny Yy9zZG4vZXZwbi92bmV0X3N0YXR1cy5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi41OGFhOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdWkvc3JjL3Nkbi9ldnBuL3ZuZXRfc3Rh dHVzLnJzCkBAIC0wLDAgKzEsMjUzIEBACit1c2Ugc3RkOjpjbXA6Ok9yZGVyaW5nOwordXNlIHN0 ZDo6ZnV0dXJlOjpGdXR1cmU7Cit1c2Ugc3RkOjpwaW46OlBpbjsKK3VzZSBzdGQ6OnJjOjpSYzsK KwordXNlIGFueWhvdzo6e0NvbnRleHQsIEVycm9yfTsKKwordXNlIHByb3htb3hfeWV3X2NvbXA6 OntMb2FkYWJsZUNvbXBvbmVudCwgTG9hZGFibGVDb21wb25lbnRDb250ZXh0LCBMb2FkYWJsZUNv bXBvbmVudE1hc3Rlcn07Cit1c2UgcHd0Ojpwcm9wczo6RXh0cmFjdFByaW1hcnlLZXk7Cit1c2Ug eWV3Ojp2aXJ0dWFsX2RvbTo6e0tleSwgVkNvbXAsIFZOb2RlfTsKK3VzZSB5ZXc6OntBdHRyVmFs dWUsIFByb3BlcnRpZXN9OworCit1c2UgcGRtX2NsaWVudDo6dHlwZXM6OlNkblZuZXRNYWNWcmY7 Cit1c2UgcHd0Ojpwcm9wczo6eworICAgIENvbnRhaW5lckJ1aWxkZXIsIEV2ZW50U3Vic2NyaWJl ciwgRmllbGRCdWlsZGVyLCBXaWRnZXRCdWlsZGVyLCBXaWRnZXRTdHlsZUJ1aWxkZXIsCit9Owor dXNlIHB3dDo6c3RhdGU6OlN0b3JlOwordXNlIHB3dDo6dHI7Cit1c2UgcHd0Ojp3aWRnZXQ6OmRh dGFfdGFibGU6OntEYXRhVGFibGUsIERhdGFUYWJsZUNvbHVtbiwgRGF0YVRhYmxlSGVhZGVyfTsK K3VzZSBwd3Q6OndpZGdldDo6Zm9ybTo6Q29tYm9ib3g7Cit1c2UgcHd0Ojp3aWRnZXQ6OntlcnJv cl9tZXNzYWdlLCBCdXR0b24sIENvbHVtbiwgSW5wdXRQYW5lbCwgVG9vbGJhcn07CisKK3VzZSBj cmF0ZTo6cGRtX2NsaWVudDsKK3VzZSBjcmF0ZTo6c2RuOjpldnBuOjpOb2RlTGlzdDsKKworI1tk ZXJpdmUoQ2xvbmUsIFBhcnRpYWxFcSwgUHJvcGVydGllcywgRGVmYXVsdCldCitwdWIgc3RydWN0 IFZuZXRTdGF0dXNUYWJsZSB7CisgICAgcmVtb3RlOiBTdHJpbmcsCisgICAgdm5ldDogU3RyaW5n LAorICAgIG5vZGVzOiBPcHRpb248Tm9kZUxpc3Q+LAorfQorCitpbXBsIFZuZXRTdGF0dXNUYWJs ZSB7CisgICAgcHViIGZuIG5ldyhyZW1vdGU6IFN0cmluZywgdm5ldDogU3RyaW5nLCBub2Rlczog T3B0aW9uPE5vZGVMaXN0PikgLT4gU2VsZiB7CisgICAgICAgIHlldzo6cHJvcHMhKFNlbGYgewor ICAgICAgICAgICAgdm5ldCwKKyAgICAgICAgICAgIHJlbW90ZSwKKyAgICAgICAgICAgIG5vZGVz CisgICAgICAgIH0pCisgICAgfQorfQorCitpbXBsIEZyb208Vm5ldFN0YXR1c1RhYmxlPiBmb3Ig Vk5vZGUgeworICAgIGZuIGZyb20odmFsdWU6IFZuZXRTdGF0dXNUYWJsZSkgLT4gU2VsZiB7Cisg ICAgICAgIGxldCBjb21wID0gVkNvbXA6Om5ldzo6PExvYWRhYmxlQ29tcG9uZW50TWFzdGVyPFZu ZXRTdGF0dXNDb21wb25lbnQ+PihSYzo6bmV3KHZhbHVlKSwgTm9uZSk7CisgICAgICAgIFZOb2Rl Ojpmcm9tKGNvbXApCisgICAgfQorfQorCisjW2Rlcml2ZShDbG9uZSwgUGFydGlhbEVxKV0KKyNb cmVwcih0cmFuc3BhcmVudCldCitwdWIgc3RydWN0IE1hY1ZyZkVudHJ5KHB1YiBTZG5WbmV0TWFj VnJmKTsKKworaW1wbCBGcm9tPFNkblZuZXRNYWNWcmY+IGZvciBNYWNWcmZFbnRyeSB7CisgICAg Zm4gZnJvbSh2YWx1ZTogU2RuVm5ldE1hY1ZyZikgLT4gU2VsZiB7CisgICAgICAgIFNlbGYodmFs dWUpCisgICAgfQorfQorCitpbXBsIEV4dHJhY3RQcmltYXJ5S2V5IGZvciBNYWNWcmZFbnRyeSB7 CisgICAgZm4gZXh0cmFjdF9rZXkoJnNlbGYpIC0+IEtleSB7CisgICAgICAgIEtleTo6ZnJvbShz ZWxmLjAuaXAuYXNfc3RyKCkpCisgICAgfQorfQorCitmbiBkZWZhdWx0X3NvcnRlcihhOiAmTWFj VnJmRW50cnksIGI6ICZNYWNWcmZFbnRyeSkgLT4gT3JkZXJpbmcgeworICAgIGEuMC5pcC5jbXAo JmIuMC5pcCkKK30KKworc3RydWN0IFZuZXRTdGF0dXNDb21wb25lbnQgeworICAgIHN0b3JlOiBT dG9yZTxNYWNWcmZFbnRyeT4sCisgICAgY29sdW1uczogUmM8VmVjPERhdGFUYWJsZUhlYWRlcjxN YWNWcmZFbnRyeT4+PiwKKyAgICBub2RlczogT3B0aW9uPFJjPFZlYzxBdHRyVmFsdWU+Pj4sCisg ICAgc2VsZWN0ZWRfbm9kZTogT3B0aW9uPEF0dHJWYWx1ZT4sCisgICAgZXJyb3JfbXNnOiBPcHRp b248U3RyaW5nPiwKKyAgICB2cmZfbG9hZGluZzogYm9vbCwKK30KKworaW1wbCBWbmV0U3RhdHVz Q29tcG9uZW50IHsKKyAgICBmbiBjb2x1bW5zKCkgLT4gUmM8VmVjPERhdGFUYWJsZUhlYWRlcjxN YWNWcmZFbnRyeT4+PiB7CisgICAgICAgIFJjOjpuZXcodmVjIVsKKyAgICAgICAgICAgIERhdGFU YWJsZUNvbHVtbjo6bmV3KHRyISgiSVAgQWRkcmVzcyIpKQorICAgICAgICAgICAgICAgIC5nZXRf cHJvcGVydHkofGVudHJ5OiAmTWFjVnJmRW50cnl8ICZlbnRyeS4wLmlwKQorICAgICAgICAgICAg ICAgIC5pbnRvKCksCisgICAgICAgICAgICBEYXRhVGFibGVDb2x1bW46Om5ldyh0ciEoIk1BQyBB ZGRyZXNzIikpCisgICAgICAgICAgICAgICAgLmdldF9wcm9wZXJ0eSh8ZW50cnk6ICZNYWNWcmZF bnRyeXwgJmVudHJ5LjAubWFjKQorICAgICAgICAgICAgICAgIC5pbnRvKCksCisgICAgICAgICAg ICBEYXRhVGFibGVDb2x1bW46Om5ldyh0ciEoInZpYSIpKQorICAgICAgICAgICAgICAgIC5nZXRf cHJvcGVydHkofGVudHJ5OiAmTWFjVnJmRW50cnl8ICZlbnRyeS4wLm5leHRob3ApCisgICAgICAg ICAgICAgICAgLmludG8oKSwKKyAgICAgICAgXSkKKyAgICB9Cit9CisKKyNbZGVyaXZlKERlYnVn KV0KK2VudW0gVm5ldFN0YXR1c0NvbXBvbmVudE1zZyB7CisgICAgTm9kZVNlbGVjdGVkKE9wdGlv bjxTdHJpbmc+KSwKKyAgICBOb2RlTGlzdExvYWRlZChSYzxWZWM8QXR0clZhbHVlPj4pLAorICAg IFZuZXRTdGF0dXNMb2FkZWQoUmVzdWx0PFZlYzxTZG5WbmV0TWFjVnJmPiwgRXJyb3I+KSwKK30K KworaW1wbCBMb2FkYWJsZUNvbXBvbmVudCBmb3IgVm5ldFN0YXR1c0NvbXBvbmVudCB7CisgICAg dHlwZSBNZXNzYWdlID0gVm5ldFN0YXR1c0NvbXBvbmVudE1zZzsKKyAgICB0eXBlIFByb3BlcnRp ZXMgPSBWbmV0U3RhdHVzVGFibGU7CisgICAgdHlwZSBWaWV3U3RhdGUgPSAoKTsKKworICAgIGZu IGNyZWF0ZShfY3R4OiAmTG9hZGFibGVDb21wb25lbnRDb250ZXh0PFNlbGY+KSAtPiBTZWxmIHsK KyAgICAgICAgU2VsZiB7CisgICAgICAgICAgICBzdG9yZTogU3RvcmU6Om5ldygpLAorICAgICAg ICAgICAgY29sdW1uczogU2VsZjo6Y29sdW1ucygpLAorICAgICAgICAgICAgc2VsZWN0ZWRfbm9k ZTogTm9uZSwKKyAgICAgICAgICAgIG5vZGVzOiBEZWZhdWx0OjpkZWZhdWx0KCksCisgICAgICAg ICAgICBlcnJvcl9tc2c6IE5vbmUsCisgICAgICAgICAgICB2cmZfbG9hZGluZzogZmFsc2UsCisg ICAgICAgIH0KKyAgICB9CisKKyAgICBmbiBsb2FkKAorICAgICAgICAmc2VsZiwKKyAgICAgICAg Y3R4OiAmcHJveG1veF95ZXdfY29tcDo6TG9hZGFibGVDb21wb25lbnRDb250ZXh0PFNlbGY+LAor ICAgICkgLT4gUGluPEJveDxkeW4gRnV0dXJlPE91dHB1dCA9IFJlc3VsdDwoKSwgYW55aG93OjpF cnJvcj4+Pj4geworICAgICAgICBsZXQgbGluayA9IGN0eC5saW5rKCkuY2xvbmUoKTsKKyAgICAg ICAgbGV0IHByb3BzID0gY3R4LnByb3BzKCkuY2xvbmUoKTsKKworICAgICAgICBCb3g6OnBpbihh c3luYyBtb3ZlIHsKKyAgICAgICAgICAgIGxldCBub2RlX2xpc3QgPSBpZiBsZXQgU29tZShub2Rl cykgPSBwcm9wcy5ub2RlcyB7CisgICAgICAgICAgICAgICAgbm9kZXMuaXRlcigpLmNsb25lZCgp Lm1hcChBdHRyVmFsdWU6OmZyb20pLmNvbGxlY3QoKQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBwZG1fY2xpZW50KCkKKyAgICAgICAgICAgICAgICAgICAgLnB2ZV9saXN0 X25vZGVzKCZwcm9wcy5yZW1vdGUpCisgICAgICAgICAgICAgICAgICAgIC5hd2FpdD8KKyAgICAg ICAgICAgICAgICAgICAgLmludG9faXRlcigpCisgICAgICAgICAgICAgICAgICAgIC5tYXAofG5v ZGVfaW5kZXh8IEF0dHJWYWx1ZTo6ZnJvbShub2RlX2luZGV4Lm5vZGUpKQorICAgICAgICAgICAg ICAgICAgICAuY29sbGVjdCgpCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBsaW5rLnNl bmRfbWVzc2FnZShTZWxmOjpNZXNzYWdlOjpOb2RlTGlzdExvYWRlZChSYzo6bmV3KG5vZGVfbGlz dCkpKTsKKworICAgICAgICAgICAgT2soKCkpCisgICAgICAgIH0pCisgICAgfQorCisgICAgZm4g dXBkYXRlKCZtdXQgc2VsZiwgY3R4OiAmTG9hZGFibGVDb21wb25lbnRDb250ZXh0PFNlbGY+LCBt c2c6IFNlbGY6Ok1lc3NhZ2UpIC0+IGJvb2wgeworICAgICAgICBtYXRjaCBtc2cgeworICAgICAg ICAgICAgU2VsZjo6TWVzc2FnZTo6Tm9kZUxpc3RMb2FkZWQobm9kZV9saXN0KSA9PiB7CisgICAg ICAgICAgICAgICAgbGV0IHNlbGVjdGVkX25vZGUgPSBub2RlX2xpc3QuaXRlcigpLm5leHQoKS5j bG9uZWQoKTsKKworICAgICAgICAgICAgICAgIHNlbGYubm9kZXMgPSBTb21lKG5vZGVfbGlzdCk7 CisKKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShub2RlKSA9IHNlbGVjdGVkX25vZGUgewor ICAgICAgICAgICAgICAgICAgICBjdHgubGluaygpCisgICAgICAgICAgICAgICAgICAgICAgICAu c2VuZF9tZXNzYWdlKFNlbGY6Ok1lc3NhZ2U6Ok5vZGVTZWxlY3RlZChTb21lKG5vZGUudG9fc3Ry aW5nKCkpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg U2VsZjo6TWVzc2FnZTo6Tm9kZVNlbGVjdGVkKG5vZGVfbmFtZSkgPT4geworICAgICAgICAgICAg ICAgIGlmIGxldCBTb21lKG5vZGVfbmFtZSkgPSBub2RlX25hbWUgeworICAgICAgICAgICAgICAg ICAgICBzZWxmLnZyZl9sb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5z ZWxlY3RlZF9ub2RlID0gU29tZShub2RlX25hbWUuY2xvbmUoKS5pbnRvKCkpOworCisgICAgICAg ICAgICAgICAgICAgIGxldCBsaW5rID0gY3R4LmxpbmsoKS5jbG9uZSgpOworICAgICAgICAgICAg ICAgICAgICBsZXQgcHJvcHMgPSBjdHgucHJvcHMoKS5jbG9uZSgpOworCisgICAgICAgICAgICAg ICAgICAgIGN0eC5saW5rKCkuc3Bhd24oYXN5bmMgbW92ZSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBsZXQgc3RhdHVzX3Jlc3VsdCA9IHBkbV9jbGllbnQoKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC5wdmVfc2RuX3ZuZXRfZ2V0X21hY192cmYoJnByb3BzLnJlbW90ZSwgJm5vZGVf bmFtZSwgJnByb3BzLnZuZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF3YWl0Owor CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLnNlbmRfbWVzc2FnZShTZWxmOjpNZXNzYWdl OjpWbmV0U3RhdHVzTG9hZGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19y ZXN1bHQud2l0aF9jb250ZXh0KHx8ICJjb3VsZCBub3QgbG9hZCB2bmV0IHN0YXR1cyIudG9fc3Ry aW5nKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNlbGY6 Ok1lc3NhZ2U6OlZuZXRTdGF0dXNMb2FkZWQodm5ldF9zdGF0dXNfcmVzdWx0KSA9PiB7CisgICAg ICAgICAgICAgICAgc2VsZi52cmZfbG9hZGluZyA9IGZhbHNlOworCisgICAgICAgICAgICAgICAg bWF0Y2ggdm5ldF9zdGF0dXNfcmVzdWx0IHsKKyAgICAgICAgICAgICAgICAgICAgT2sodm5ldF9z dGF0dXMpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcmUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAud3JpdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IC5zZXRfZGF0YSh2bmV0X3N0YXR1cy5pbnRvX2l0ZXIoKS5tYXAoTWFjVnJmRW50cnk6OmZyb20p LmNvbGxlY3QoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcmUuc2V0X3Nv cnRlcihkZWZhdWx0X3NvcnRlcik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJy b3JfbXNnID0gTm9uZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBFcnIoZXJyb3IpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcmUud3Jp dGUoKS5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9tc2cgPSBT b21lKGZvcm1hdCEoIntlcnJvcjo/fSIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRydWUKKyAg ICB9CisKKyAgICBmbiBtYWluX3ZpZXcoJnNlbGYsIGN0eDogJnByb3htb3hfeWV3X2NvbXA6Okxv YWRhYmxlQ29tcG9uZW50Q29udGV4dDxTZWxmPikgLT4geWV3OjpIdG1sIHsKKyAgICAgICAgbGV0 IHNlbGVjdGVkX25vZGUgPSBzZWxmLnNlbGVjdGVkX25vZGUuY2xvbmUoKTsKKworICAgICAgICBs ZXQgdG9vbGJhciA9IFRvb2xiYXI6Om5ldygpCisgICAgICAgICAgICAuY2xhc3MoInB3dC13LTEw MCIpCisgICAgICAgICAgICAuY2xhc3MoInB3dC1vdmVyZmxvdy1oaWRkZW4iKQorICAgICAgICAg ICAgLmNsYXNzKCJwd3QtYm9yZGVyLWJvdHRvbSIpCisgICAgICAgICAgICAud2l0aF9jaGlsZCgK KyAgICAgICAgICAgICAgICBJbnB1dFBhbmVsOjpuZXcoKS53aXRoX2ZpZWxkKAorICAgICAgICAg ICAgICAgICAgICB0ciEoIk5vZGUiKSwKKyAgICAgICAgICAgICAgICAgICAgQ29tYm9ib3g6Om5l dygpCisgICAgICAgICAgICAgICAgICAgICAgICAubWluX3dpZHRoKDEwMCkKKyAgICAgICAgICAg ICAgICAgICAgICAgIC5yZXF1aXJlZCh0cnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgLnZh bHVlKHNlbGYuc2VsZWN0ZWRfbm9kZS5jbG9uZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg Lml0ZW1zKHNlbGYubm9kZXMuY2xvbmUoKS51bndyYXBfb3JfZGVmYXVsdCgpKQorICAgICAgICAg ICAgICAgICAgICAgICAgLm9uX2NoYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dHgubGluaygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsYmFjayh8bm9k ZXwgU2VsZjo6TWVzc2FnZTo6Tm9kZVNlbGVjdGVkKFNvbWUobm9kZSkpKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICkKKyAgICAg ICAgICAgIC53aXRoX2ZsZXhfc3BhY2VyKCkKKyAgICAgICAgICAgIC53aXRoX2NoaWxkKEJ1dHRv bjo6cmVmcmVzaChjdHgubG9hZGluZygpIHx8IHNlbGYudnJmX2xvYWRpbmcpLm9uY2xpY2soCisg ICAgICAgICAgICAgICAgY3R4LmxpbmsoKS5jYWxsYmFjayhtb3ZlIHxffCB7CisgICAgICAgICAg ICAgICAgICAgIFNlbGY6Ok1lc3NhZ2U6Ok5vZGVTZWxlY3RlZChzZWxlY3RlZF9ub2RlLmFzX3Jl ZigpLm1hcChUb1N0cmluZzo6dG9fc3RyaW5nKSkKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAg ICAgICAgICkpOworCisgICAgICAgIGxldCB0YWJsZSA9CisgICAgICAgICAgICBEYXRhVGFibGU6 Om5ldyhzZWxmLmNvbHVtbnMuY2xvbmUoKSwgc2VsZi5zdG9yZS5jbG9uZSgpKS5jbGFzcyhwd3Q6 OmNzczo6RmxleEZpdCk7CisKKyAgICAgICAgbGV0IG11dCBjb2x1bW4gPSBDb2x1bW46Om5ldygp CisgICAgICAgICAgICAuY2xhc3MocHd0Ojpjc3M6OkZsZXhGaXQpCisgICAgICAgICAgICAud2l0 aF9jaGlsZCh0b29sYmFyKQorICAgICAgICAgICAgLndpdGhfY2hpbGQodGFibGUpOworCisgICAg ICAgIGlmIGxldCBTb21lKG1zZykgPSAmc2VsZi5lcnJvcl9tc2cgeworICAgICAgICAgICAgY29s dW1uLmFkZF9jaGlsZChlcnJvcl9tZXNzYWdlKG1zZykpOworICAgICAgICB9CisKKyAgICAgICAg Y29sdW1uLmludG8oKQorICAgIH0KKworICAgIGZuIGNoYW5nZWQoCisgICAgICAgICZtdXQgc2Vs ZiwKKyAgICAgICAgY3R4OiAmTG9hZGFibGVDb21wb25lbnRDb250ZXh0PFNlbGY+LAorICAgICAg ICBfb2xkX3Byb3BzOiAmU2VsZjo6UHJvcGVydGllcywKKyAgICApIC0+IGJvb2wgeworICAgICAg ICBzZWxmLnNlbGVjdGVkX25vZGUgPSBOb25lOworICAgICAgICBzZWxmLm5vZGVzID0gTm9uZTsK KworICAgICAgICBjdHgubGluaygpLnNlbmRfcmVsb2FkKCk7CisKKyAgICAgICAgdHJ1ZQorICAg IH0KK30KLS0gCjIuNDcuMwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCnBkbS1kZXZlbCBtYWlsaW5nIGxpc3QKcGRtLWRldmVsQGxpc3RzLnByb3htb3gu Y29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3Bk bS1kZXZlbAo=