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 0D6DE1FF17C for ; Wed, 3 Sep 2025 10:49:31 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 095FB2E16B; Wed, 3 Sep 2025 10:49:46 +0200 (CEST) Date: Wed, 3 Sep 2025 10:49:11 +0200 From: Wolfgang Bumiller To: Dominik Csapak Message-ID: References: <20250828131832.4058422-1-d.csapak@proxmox.com> <20250828131832.4058422-4-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250828131832.4058422-4-d.csapak@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756889337096 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.074 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_MSPIKE_H2 0.001 Average reputation (+2) SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pdm-devel] [PATCH datacenter-manager v4 03/10] server: api: resources: add more complex filter syntax 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 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" T24gVGh1LCBBdWcgMjgsIDIwMjUgYXQgMDM6MTY6MDJQTSArMDIwMCwgRG9taW5payBDc2FwYWsg d3JvdGU6Cj4gYnkgdXNpbmcgdGhlIG5ldyBwZG0tc2VhcmNoIGNyYXRlIGZvciB0aGUgcmVzb3Vy Y2VzIGFwaSBjYWxsLgo+IAo+IFdlIGhhdmUgdG8gZG8gMyBmaWx0ZXIgcGFzc2VzOgo+ICogb25l IGZhc3QgcGFzcyBmb3IgcmVtb3RlcyBpZiB0aGUgZmlsdGVyIGFyZSBjb25zdHJ1Y3RlZCBpbiBh IHdheSB0aGF0Cj4gICBtdXN0IGZpbHRlciB0byAncmVtb3RlJyAoaW4gdGhpcyBjYXNlIHdlIGRv bid0IGhhdmUgdG8gbG9vayBhdC9yZXR1cm4KPiAgIHRoZSByZXNvdXJjZXMgYXQgYWxsLCBhbmQg Y2FuIHNraXAgcmVtb3RlcyB0aGF0IGRvbid0IG1hdGNoKQo+ICogYSBwYXNzIGZvciB0aGUgcmVz b3VyY2VzCj4gKiBhIHNlY29uZCBwYXNzIGZvciB0aGUgcmVtb3RlcyB0aGF0IGNoZWNrIGlmIHRo ZXkgbWF0Y2ggZm9yCj4gICByZW1vdGUvbm9uLXJlbW90ZSBtaXhlZCByZXN1bHRzCj4gCj4gU2ln bmVkLW9mZi1ieTogRG9taW5payBDc2FwYWsgPGQuY3NhcGFrQHByb3htb3guY29tPgo+IC0tLQo+ IGNoYW5nZXMgZnJvbSB2MzoKPiAqIHVzZSBzdGFydHNfd2l0aCBmb3IgZmlsdGVyaW5nIHR5cGUv c3RhdHVzCj4gIHNlcnZlci9DYXJnby50b21sICAgICAgICAgICB8ICAxICsKPiAgc2VydmVyL3Ny Yy9hcGkvcmVzb3VyY2VzLnJzIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLQo+ICAyIGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygt KQo+IAo+IGRpZmYgLS1naXQgYS9zZXJ2ZXIvQ2FyZ28udG9tbCBiL3NlcnZlci9DYXJnby50b21s Cj4gaW5kZXggMjRhMmU0MC4uYWRhN2M4MCAxMDA2NDQKPiAtLS0gYS9zZXJ2ZXIvQ2FyZ28udG9t bAo+ICsrKyBiL3NlcnZlci9DYXJnby50b21sCj4gQEAgLTc0LDYgKzc0LDcgQEAgcHJveG1veC1h Y21lLWFwaSA9IHsgd29ya3NwYWNlID0gdHJ1ZSwgZmVhdHVyZXMgPSBbICJpbXBsIiBdIH0KPiAg cGRtLWFwaS10eXBlcy53b3Jrc3BhY2UgPSB0cnVlCj4gIHBkbS1idWlsZGNmZy53b3Jrc3BhY2Ug PSB0cnVlCj4gIHBkbS1jb25maWcud29ya3NwYWNlID0gdHJ1ZQo+ICtwZG0tc2VhcmNoLndvcmtz cGFjZSA9IHRydWUKPiAgCj4gIHB2ZS1hcGktdHlwZXMgPSB7IHdvcmtzcGFjZSA9IHRydWUsIGZl YXR1cmVzID0gWyAiY2xpZW50IiBdIH0KPiAgcGJzLWFwaS10eXBlcy53b3Jrc3BhY2UgPSB0cnVl Cj4gZGlmZiAtLWdpdCBhL3NlcnZlci9zcmMvYXBpL3Jlc291cmNlcy5ycyBiL3NlcnZlci9zcmMv YXBpL3Jlc291cmNlcy5ycwo+IGluZGV4IGZiNjIxOGEuLjgxMTQ5NDQgMTAwNjQ0Cj4gLS0tIGEv c2VydmVyL3NyYy9hcGkvcmVzb3VyY2VzLnJzCj4gKysrIGIvc2VydmVyL3NyYy9hcGkvcmVzb3Vy Y2VzLnJzCj4gQEAgLTE1LDEyICsxNSwxMyBAQCB1c2UgcGRtX2FwaV90eXBlczo6c3Vic2NyaXB0 aW9uOjp7Cj4gICAgICBOb2RlU3Vic2NyaXB0aW9uSW5mbywgUmVtb3RlU3Vic2NyaXB0aW9uU3Rh dGUsIFJlbW90ZVN1YnNjcmlwdGlvbnMsIFN1YnNjcmlwdGlvbkxldmVsLAo+ICB9Owo+ICB1c2Ug cGRtX2FwaV90eXBlczo6e0F1dGhpZCwgUFJJVl9SRVNPVVJDRV9BVURJVH07Cj4gK3VzZSBwZG1f c2VhcmNoOjp7U2VhcmNoLCBTZWFyY2hUZXJtfTsKPiAgdXNlIHByb3htb3hfYWNjZXNzX2NvbnRy b2w6OkNhY2hlZFVzZXJJbmZvOwo+ICB1c2UgcHJveG1veF9yb3V0ZXI6OnsKPiAgICAgIGh0dHBf YmFpbCwgbGlzdF9zdWJkaXJzX2FwaV9tZXRob2QsIFBlcm1pc3Npb24sIFJvdXRlciwgUnBjRW52 aXJvbm1lbnQsIFN1YmRpck1hcCwKPiAgfTsKPiAgdXNlIHByb3htb3hfcnJkX2FwaV90eXBlczo6 UnJkVGltZWZyYW1lOwo+IC11c2UgcHJveG1veF9zY2hlbWE6OmFwaTsKPiArdXNlIHByb3htb3hf c2NoZW1hOjp7YXBpLCBwYXJzZV9ib29sZWFufTsKPiAgdXNlIHByb3htb3hfc29ydGFibGVfbWFj cm86OnNvcnRhYmxlOwo+ICB1c2UgcHJveG1veF9zdWJzY3JpcHRpb246OlN1YnNjcmlwdGlvblN0 YXR1czsKPiAgdXNlIHB2ZV9hcGlfdHlwZXM6OntDbHVzdGVyUmVzb3VyY2UsIENsdXN0ZXJSZXNv dXJjZVR5cGV9Owo+IEBAIC00NSw2ICs0Niw0NCBAQCBjb25zdCBTVUJESVJTOiBTdWJkaXJNYXAg PSAmc29ydGVkIShbCj4gICAgICApLAo+ICBdKTsKPiAgCj4gK2ZuIHJlc291cmNlX21hdGNoZXNf c2VhcmNoX3Rlcm0ocmVzb3VyY2U6ICZSZXNvdXJjZSwgdGVybTogJlNlYXJjaFRlcm0pIC0+IGJv b2wgewo+ICsgICAgbWF0Y2ggJnRlcm0uY2F0ZWdvcnkgewo+ICsgICAgICAgIFNvbWUoY2F0ZWdv cnkpID0+IG1hdGNoIGNhdGVnb3J5LmFzX3N0cigpIHsKPiArICAgICAgICAgICAgInR5cGUiID0+ IHJlc291cmNlLnJlc291cmNlX3R5cGUoKS5zdGFydHNfd2l0aCgmdGVybS52YWx1ZSksCj4gKyAg ICAgICAgICAgICJuYW1lIiA9PiByZXNvdXJjZS5uYW1lKCkuY29udGFpbnMoJnRlcm0udmFsdWUp LAoK4oaRIFRoZSBzdGFydHNfd2l0aCB2cyBjb250YWlucyBkZWNpc2lvbnMgYmFzZWQgb24gY2F0 ZWdvcnkgaGFwcGVuaW5nIGluCm11bHRpcGxlIHBsYWNlcyBtYWtlcyBtZSB0aGluayB0aGF0IG1h eWJlIC0gc2luY2Ugd2UgaGF2ZSBhIGZpeGVkIHNldCBvZgpjYXRlZ29yaWVzIGFueXdheSAtIHRo ZSBjYXRlZ29yeSBzaG91bGQgYmUgcGFyc2VkIG91dCBpbnRvIGFuIGBlbnVtYAp3aGljaCBjb250 YWlucyBhIGBtYXRjaGVzYCBtZXRob2Qgd2hpY2ggZGVjaWRlcyBob3cgdG8gZG8gdGhpcyBpbiBh CmNvbnNpc3RlbnQgd2F5LCBzdWNoIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIGRvaW5nIGRpZmZlcmVu dCBtYXRjaGVzIGluCmRpZmZlcmVudCBmdW5jdGlvbnM/CgpUaGUgYGZuIHJlbW90ZV9tYXRjaGVz X3NlYXJjaF90ZXJtYCBiZWxvdyBhbHNvIGhhcyB0byBjb3B5IHRoZSBzYW1lCmRpc3RpbmN0aW9u Li4uIFRoaXMgaXMgYSBtYWludGFpbmFiaWxpdHkgaGF6YXJkIHdoaWNoIHdpbGwgY2F1c2Ugc3Vi dGxlCmJ1Z3Mgd2l0aCB3ZWlyZCBzZWFyY2ggYmVoYXZpb3IuLi4KCj4gKyAgICAgICAgICAgICJp ZCIgPT4gcmVzb3VyY2UuaWQoKS5jb250YWlucygmdGVybS52YWx1ZSksCj4gKyAgICAgICAgICAg ICJzdGF0dXMiID0+IHJlc291cmNlLnN0YXR1cygpLnN0YXJ0c193aXRoKCZ0ZXJtLnZhbHVlKSwK PiArICAgICAgICAgICAgInRlbXBsYXRlIiA9PiBtYXRjaCByZXNvdXJjZSB7Cj4gKyAgICAgICAg ICAgICAgICBSZXNvdXJjZTo6UHZlUWVtdShQdmVRZW11UmVzb3VyY2UgeyB0ZW1wbGF0ZSwgLi4g fSwgLi4pCj4gKyAgICAgICAgICAgICAgICB8IFJlc291cmNlOjpQdmVMeGMoUHZlTHhjUmVzb3Vy Y2UgeyB0ZW1wbGF0ZSwgLi4gfSkgPT4gewo+ICsgICAgICAgICAgICAgICAgICAgIG1hdGNoIHBh cnNlX2Jvb2xlYW4oJnRlcm0udmFsdWUpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgT2so Ym9vbGVhbikgPT4gYm9vbGVhbiA9PSAqdGVtcGxhdGUsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIEVycihfKSA9PiBmYWxzZSwKPiArICAgICAgICAgICAgICAgICAgICB9CgrihpEgY291bGQg YmUgc2hvcnRlbmVkIHRvCiAgICBwYXJzZV9ib29sZWFuKCZ0ZXJtLnZhbHVlKS5pc19va19hbmQo fHZ8IHYgPT0gKnRlbXBsYXRlKQpvcgogICAgcGFyc2VfYm9vbGVhbigmdGVybS52YWx1ZSkub2so KSA9PSBTb21lKCp0ZW1wbGF0ZSkKCj4gKyAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAg ICAgICBfID0+IGZhbHNlLAo+ICsgICAgICAgICAgICB9LAo+ICsgICAgICAgICAgICAicmVtb3Rl IiA9PiB0cnVlLCAvLyB0aGlzIGhhcyB0byBiZSBjaGVja2VkIGJlZm9yZWhhbmQKCklmIHRoaXMg bW9kdWxlIGdldHMgbW9yZSBjb21wbGV4LCBmb3IgbWFpbnRhaW5hYmlsaXR5IC8gdG8gYXZvaWQg c3VidGxlCmJ1Z3Mgd2l0aCBzdWNoIGNvbmRpdGlvbnMsIGl0IG1heSBiZSB1c2VmdWwgdG8gaGF2 ZSB0aGlzIGZuIHJldHVybiBhbgpgT3B0aW9uPGJvb2w+YCB3aGVyZSB0aGlzIGNhc2UgcmV0dXJu cyBgTm9uZWAsIGFrYS4gImRvbid0IGtub3cgaG93IHRvCmNoZWNrIHRoaXMgdGVybSIgKG9yIHNv bWUgZW51bSBkZXNjcmliaW5nIHdoYXQgZXhhY3RseSBpdCBjYW5ub3QgY2hlY2ssCmRlcGVuZGlu ZyBvbiBob3cvd2hlcmUgd2UgZG8gdmVyaWZ5IHRoaXMpCgo+ICsgICAgICAgICAgICBfID0+IGZh bHNlLAo+ICsgICAgICAgIH0sCj4gKyAgICAgICAgTm9uZSA9PiByZXNvdXJjZS5uYW1lKCkuY29u dGFpbnMoJnRlcm0udmFsdWUpIHx8IHJlc291cmNlLmlkKCkuY29udGFpbnMoJnRlcm0udmFsdWUp LAo+ICsgICAgfQo+ICt9Cj4gKwo+ICtmbiByZW1vdGVfbWF0Y2hlc19zZWFyY2hfdGVybShyZW1v dGVfbmFtZTogJnN0ciwgb25saW5lOiBPcHRpb248Ym9vbD4sIHRlcm06ICZTZWFyY2hUZXJtKSAt PiBib29sIHsKPiArICAgIG1hdGNoIHRlcm0uY2F0ZWdvcnkuYXNfZGVyZWYoKSB7Cj4gKyAgICAg ICAgU29tZSgicmVtb3RlIiB8ICJuYW1lIiB8ICJpZCIpID0+IHJlbW90ZV9uYW1lLmNvbnRhaW5z KCZ0ZXJtLnZhbHVlKSwKPiArICAgICAgICBTb21lKCJ0eXBlIikgPT4gInJlbW90ZSIuc3RhcnRz X3dpdGgoJnRlcm0udmFsdWUpLAo+ICsgICAgICAgIFNvbWUoInN0YXR1cyIpID0+IG1hdGNoIG9u bGluZSB7Cj4gKyAgICAgICAgICAgIE5vbmUgPT4gdHJ1ZSwKPiArICAgICAgICAgICAgU29tZSh0 cnVlKSA9PiAib25saW5lIi5zdGFydHNfd2l0aCgmdGVybS52YWx1ZSksCj4gKyAgICAgICAgICAg IFNvbWUoZmFsc2UpID0+ICJvZmZsaW5lIi5zdGFydHNfd2l0aCgmdGVybS52YWx1ZSksCj4gKyAg ICAgICAgfSwKPiArICAgICAgICBOb25lID0+IHJlbW90ZV9uYW1lLmNvbnRhaW5zKCZ0ZXJtLnZh bHVlKSB8fCAicmVtb3RlIi5jb250YWlucygmdGVybS52YWx1ZSksCj4gKyAgICAgICAgU29tZShf KSA9PiBmYWxzZSwKPiArICAgIH0KPiArfQo+ICsKPiAgI1thcGkoCj4gICAgICAvLyBGSVhNRTo6 IHNlZSBsaXN0LWxpa2UgQVBJIGNhbGxzIGluIHJlc291cmNlIHJvdXRlcnMsIHdlIHByb2JhYmx5 IHdhbnQgbW9yZSBmaW5lLWdyYWluZWQKPiAgICAgIC8vIGNoZWNrcy4uCj4gQEAgLTEwNCw2ICsx NDMsMTAgQEAgcHViKGNyYXRlKSBhc3luYyBmbiBnZXRfcmVzb3VyY2VzX2ltcGwoCj4gICAgICBs ZXQgKHJlbW90ZXNfY29uZmlnLCBfKSA9IHBkbV9jb25maWc6OnJlbW90ZXM6OmNvbmZpZygpPzsK PiAgICAgIGxldCBtdXQgam9pbl9oYW5kbGVzID0gVmVjOjpuZXcoKTsKPiAgCj4gKyAgICBsZXQg ZmlsdGVycyA9IHNlYXJjaC5tYXAoU2VhcmNoOjpmcm9tKS51bndyYXBfb3JfZGVmYXVsdCgpOwo+ ICsKPiArICAgIGxldCByZW1vdGVzX29ubHkgPSBmaWx0ZXJzLmNhdGVnb3J5X3ZhbHVlX3JlcXVp cmVkKCJ0eXBlIiwgInJlbW90ZSIpOwo+ICsKPiAgICAgIGZvciAocmVtb3RlX25hbWUsIHJlbW90 ZSkgaW4gcmVtb3Rlc19jb25maWcgewo+ICAgICAgICAgIGlmIGxldCBTb21lKHJlZiBhdXRoX2lk KSA9IG9wdF9hdXRoX2lkIHsKPiAgICAgICAgICAgICAgbGV0IHJlbW90ZV9wcml2cyA9IHVzZXJf aW5mby5sb29rdXBfcHJpdnMoYXV0aF9pZCwgJlsicmVzb3VyY2UiLCAmcmVtb3RlX25hbWVdKTsK PiBAQCAtMTExLDEyICsxNTQsMjcgQEAgcHViKGNyYXRlKSBhc3luYyBmbiBnZXRfcmVzb3VyY2Vz X2ltcGwoCj4gICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiAgICAgICAgICAgICAgfQo+ICAg ICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgcmVtb3Rlc19vbmx5Cj4gKyAgICAgICAgICAgICYm ICFmaWx0ZXJzLm1hdGNoZXMofHRlcm18IHJlbW90ZV9tYXRjaGVzX3NlYXJjaF90ZXJtKCZyZW1v dGVfbmFtZSwgTm9uZSwgdGVybSkpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBjb250aW51 ZTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgbGV0IGZpbHRlciA9IGZpbHRlcnMuY2xvbmUoKTsK Cl4gQ291bGQgd3JhcCBmaWx0ZXJzIGluIGFuIGBBcmNgIHRvIG1ha2UgdGhpcyBjaGVhcC4KCj4g ICAgICAgICAgbGV0IGhhbmRsZSA9IHRva2lvOjpzcGF3bihhc3luYyBtb3ZlIHsKPiAtICAgICAg ICAgICAgbGV0IChyZXNvdXJjZXMsIGVycm9yKSA9IG1hdGNoIGdldF9yZXNvdXJjZXNfZm9yX3Jl bW90ZShyZW1vdGUsIG1heF9hZ2UpLmF3YWl0IHsKPiArICAgICAgICAgICAgbGV0IChtdXQgcmVz b3VyY2VzLCBlcnJvcikgPSBtYXRjaCBnZXRfcmVzb3VyY2VzX2Zvcl9yZW1vdGUocmVtb3RlLCBt YXhfYWdlKS5hd2FpdCB7Cj4gICAgICAgICAgICAgICAgICBPayhyZXNvdXJjZXMpID0+IChyZXNv dXJjZXMsIE5vbmUpLAo+ICAgICAgICAgICAgICAgICAgRXJyKGVycm9yKSA9PiAoVmVjOjpuZXco KSwgU29tZShlcnJvci50b19zdHJpbmcoKSkpLAo+ICAgICAgICAgICAgICB9Owo+ICAKPiArICAg ICAgICAgICAgaWYgcmVtb3Rlc19vbmx5IHsKPiArICAgICAgICAgICAgICAgIHJlc291cmNlcy5j bGVhcigpOwoKPiArICAgICAgICAgICAgfSBlbHNlIGlmICFmaWx0ZXIuaXNfZW1wdHkoKSB7Cj4g KyAgICAgICAgICAgICAgICByZXNvdXJjZXMucmV0YWluKHxyZXNvdXJjZXwgewo+ICsgICAgICAg ICAgICAgICAgICAgIGZpbHRlci5tYXRjaGVzKHxmaWx0ZXJ8IHJlc291cmNlX21hdGNoZXNfc2Vh cmNoX3Rlcm0ocmVzb3VyY2UsIGZpbHRlcikpCj4gKyAgICAgICAgICAgICAgICB9KTsKPiArICAg ICAgICAgICAgfQo+ICsKPiAgICAgICAgICAgICAgUmVtb3RlUmVzb3VyY2VzIHsKPiAgICAgICAg ICAgICAgICAgIHJlbW90ZTogcmVtb3RlX25hbWUsCj4gICAgICAgICAgICAgICAgICByZXNvdXJj ZXMsCj4gQEAgLTEzMiwxNyArMTkwLDE1IEBAIHB1YihjcmF0ZSkgYXN5bmMgZm4gZ2V0X3Jlc291 cmNlc19pbXBsKAo+ICAgICAgICAgIHJlbW90ZV9yZXNvdXJjZXMucHVzaChoYW5kbGUuYXdhaXQ/ KTsKPiAgICAgIH0KPiAgCj4gLSAgICBpZiBsZXQgU29tZShzZWFyY2gpID0gc2VhcmNoIHsKPiAt ICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgbW9yZSBjb21wbGV4IGZpbHRlciBzeW50YXgKPiAt ICAgICAgICByZW1vdGVfcmVzb3VyY2VzLnJldGFpbl9tdXQofHJlc3wgewo+IC0gICAgICAgICAg ICBpZiByZXMucmVtb3RlLmNvbnRhaW5zKCZzZWFyY2gpIHsKPiAtICAgICAgICAgICAgICAgIHRy dWUKPiAtICAgICAgICAgICAgfSBlbHNlIHsKPiAtICAgICAgICAgICAgICAgIHJlcy5yZXNvdXJj ZXMKPiAtICAgICAgICAgICAgICAgICAgICAucmV0YWluKHxyZXN8IHJlcy5pZCgpLmNvbnRhaW5z KCZzZWFyY2gpIHx8IHJlcy5uYW1lKCkuY29udGFpbnMoJnNlYXJjaCkpOwo+IC0gICAgICAgICAg ICAgICAgIXJlcy5yZXNvdXJjZXMuaXNfZW1wdHkoKQo+ICsgICAgaWYgIWZpbHRlcnMuaXNfZW1w dHkoKSB7Cj4gKyAgICAgICAgcmVtb3RlX3Jlc291cmNlcy5yZXRhaW4ofHJlc3wgewo+ICsgICAg ICAgICAgICBpZiAhcmVzLnJlc291cmNlcy5pc19lbXB0eSgpIHsKPiArICAgICAgICAgICAgICAg IHJldHVybiB0cnVlOwo+ICAgICAgICAgICAgICB9Cj4gLSAgICAgICAgfSk7Cj4gKyAgICAgICAg ICAgIGZpbHRlcnMubWF0Y2hlcyh8ZmlsdGVyfCB7Cj4gKyAgICAgICAgICAgICAgICByZW1vdGVf bWF0Y2hlc19zZWFyY2hfdGVybSgmcmVzLnJlbW90ZSwgU29tZShyZXMuZXJyb3IuaXNfbm9uZSgp KSwgZmlsdGVyKQo+ICsgICAgICAgICAgICB9KQo+ICsgICAgICAgIH0pCj4gICAgICB9Cj4gIAo+ ICAgICAgT2socmVtb3RlX3Jlc291cmNlcykKPiAtLSAKPiAyLjQ3LjIKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwZG0tZGV2ZWwgbWFpbGluZyBsaXN0 CnBkbS1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2Nn aS1iaW4vbWFpbG1hbi9saXN0aW5mby9wZG0tZGV2ZWwK