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 3F6111FF17C for ; Wed, 3 Sep 2025 10:14:43 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A36E82C983; Wed, 3 Sep 2025 10:14:56 +0200 (CEST) Message-ID: Date: Wed, 3 Sep 2025 10:14:50 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Beta To: Wolfgang Bumiller References: <20250828131832.4058422-1-d.csapak@proxmox.com> <20250828131832.4058422-3-d.csapak@proxmox.com> <5zrkhdsc4sw2jsqlqrn7ijbj2oyav6bcpa7f42ybawwrv6zu4a@kjhewrghg7xa> Content-Language: en-US From: Dominik Csapak In-Reply-To: <5zrkhdsc4sw2jsqlqrn7ijbj2oyav6bcpa7f42ybawwrv6zu4a@kjhewrghg7xa> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756887275520 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.020 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) 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: [pdm-devel] [PATCH datacenter-manager v4 02/10] lib: add pdm-search crate 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" CgpPbiA5LzIvMjUgNTozMiBQTSwgV29sZmdhbmcgQnVtaWxsZXIgd3JvdGU6Cj4gT24gVGh1LCBB dWcgMjgsIDIwMjUgYXQgMDM6MTY6MDFQTSArMDIwMCwgRG9taW5payBDc2FwYWsgd3JvdGU6Cj4+ IEludHJvZHVjZSBhIG5ldyBjcmVhdGUgZm9yIHNlYXJjaCAmIGZpbHRlciByZWxhdGVkIGNvZGUu IEl0IGN1cnJlbnRseQo+PiBpbmNsdWRlcyBiYXNpYyBwYXJzaW5nICYgdGVzdGluZyBvZiBzZWFy Y2ggdGVybXMuIEludGVuZGVkIHRvIGJlIHVzZWQgb24KPj4gc29tZSBBUEkgY2FsbHMgdGhhdCBh bGxvdyBmb3IgbW9yZSBjb21wbGV4IGZpbHRlcnMsIHN1Y2ggYXMgdGhlCj4+IHJlc291cmNlcyBB UEkuCj4+Cj4+IENvbnRhaW5zIGEgYFNlYXJjaFRlcm1gIGFuZCBhIGBTZWFyY2hgIHN0cnVjdC4g VGhlIGZvcm1lciByZXByZXNlbnRzCj4+IGEgc2luZ2xlIHRlcm0gdG8gc2VhcmNoIGZvciwgd2l0 aCBhbiBvcHRpb25hbCBjYXRlZ29yeSBhbmQgaWYgaXQncwo+PiBvcHRpb25hbCBvciBub3QuIFRo ZSBsYXR0ZXIgcmVwcmVzZW50cyBhIGZ1bGwgc2VhcmNoIHdpdGggbXVsdGlwbGUKPj4gdGVybXMu Cj4+Cj4+IFNob3J0IHN5bnRheCBzdW1tYXJ5Ogo+PiAnc29tZXRleHQnICA6IG5vcm1hbCBzZWFy Y2ggdGVybQo+PiAnK3NvbWV0ZXh0JyA6IHJlcXVpcmVkIHNlYXJjaCB0ZXJtCj4+ICdjYXQ6dGV4 dCcgIDogbG9va3MgZm9yICd0ZXh0JyBpbiB0aGUgY2F0ZWdvcnkgJ2NhdCcKPj4KPj4gcmVxdWly ZWQgdGVybXMgaGF2ZSB0byBleGlzdCBpbiB0aGUgcmVzdWx0aW5nIG1hdGNoLCB3aGlsZSBvcHRp b25hbAo+PiBvbmVzIGFyZSBPUidkIChzbyBhdCBsZWFzdCBvbmUgb3B0aW9uYWwgbWF0Y2ggbXVz dCBleGlzdCkKPiAKPiBeIFdvdWxkIGJlIGdvb2QgdG8gY2xhcmlmeSB0aGF0IChhbmQgZml4IGlm IG5vdCkgaWYgKm5vKiBvcHRpb25hbCBvbmUKPiBtYXRjaGVzICpidXQqIHRoZXJlICphcmUqIG1h dGNoaW5nIHJlcXVpcmVkIG9uZXMsIGl0J3MgYWxzbyBhIHBvc2l0aXZlCj4gbWF0Y2guLi4KCm5v IHRoYXQncyB3cm9uZz8KCmlmIG5vIG9wdGlvbmFsIG9uZXMgaGF2ZSB0byBtYXRjaCB0aGV5IGRv bid0IGluZmx1ZW5jZSB0aGUgcmVzdWx0IGF0IGFsbD8KCnJlcXVpcmVkIHRlcm1zIG11c3QgYWxs IG1hdGNoLCBhbmQgYXQgbGVhc3Qgb25lIGZyb20gdGhlIHNldCBvcHRpb25hbCBvbmVzCgpmb3Ig ZXhhbXBsZToKCmkgc2VhcmNoIGZvcgoKK2ZvbyB0eXBlOnFlbXUgdHlwZTpseGMKCmZvbyBpcyBy ZXF1aXJlZCwgdHlwZTpxZW11IGFuZCB0eXBlOmx4YyBvcHRpb25hbAoKaWYgb25lIHRoaW5nIHdv dWxkIG1hdGNoIGZvbyBidXQgbm90IHR5cGU6cWVtdSBhbmQgbm90IHR5cGU6bHhjIGl0IApzaG91 bGQgbm90IGFwcGVhciBpbiB0aGUgcmVzdWx0IGxpc3QsIGJlY2F1c2Ugb3RoZXJ3aXNlCmkgY291 bGQgaGF2ZSB3cml0dGVuCgorZm9vCgphbmQgYWNoaWV2ZSB0aGUgc2FtZSByZXN1bHQKCmJ1dCBp IHdhbnRlZCBldmVyeXRoaW5nIHdpdGggImZvbyIgaW4gaXQgdGhhdCBpcyBmcm9tIHR5cGUgInFl bXUiIG9yICJseGMiCgpkb2VzIHRoYXQgbWFrZSBzZW5zZT8KCk1heWJlIGkgaGF2ZSB0byBkZXNj cmliZSBpdCBiZXR0ZXIgaW4gdGhlIGNvbW1pdCBtZXNzYWdlPwoKPiAKPj4KPj4gVGhpcyBpcyBs b29zZWx5IGluc3BpcmVkIGJ5IHZhcmlvdXMgc2VhcmNoIHN5bnRheGVzLCBlLmcuIHRoZSBvbmUg ZnJvbQo+PiBnaXRsYWJbMF0gb3IgcXVlcnktZHNsIGZyb20gZWxhc3RpY1sxXQo+Pgo+PiBbMV0g aHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vdXNlci9zZWFyY2gvYWR2YW5jZWRfc2VhcmNoLwo+PiBb Ml0gaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9kb2NzL3JlZmVyZW5jZS9xdWVyeS1sYW5ndWFnZXMv cXVlcnktZHNsL3F1ZXJ5LWRzbC1zaW1wbGUtcXVlcnktc3RyaW5nLXF1ZXJ5Cj4+Cj4+IFNpZ25l ZC1vZmYtYnk6IERvbWluaWsgQ3NhcGFrIDxkLmNzYXBha0Bwcm94bW94LmNvbT4KPj4gLS0tCj4+ IGNoYW5nZXMgZnJvbSB2MzoKPj4gKiBhZGQgbWlzc2luZyBkb2MgY29tbWVudHMKPj4gKiBtb3Jl IHRlc3RzCj4+Cj4+ICAgQ2FyZ28udG9tbCAgICAgICAgICAgICAgICB8ICAgMiArCj4+ICAgbGli L3BkbS1zZWFyY2gvQ2FyZ28udG9tbCB8ICAxMiArKwo+PiAgIGxpYi9wZG0tc2VhcmNoL3NyYy9s aWIucnMgfCAzMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICAz IGZpbGVzIGNoYW5nZWQsIDM1MyBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYi9wZG0tc2VhcmNoL0NhcmdvLnRvbWwKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3Bk bS1zZWFyY2gvc3JjL2xpYi5ycwo+Pgo+PiBkaWZmIC0tZ2l0IGEvQ2FyZ28udG9tbCBiL0Nhcmdv LnRvbWwKPj4gaW5kZXggZjA3NzMzZC4uYWUyODE2YSAxMDA2NDQKPj4gLS0tIGEvQ2FyZ28udG9t bAo+PiArKysgYi9DYXJnby50b21sCj4+IEBAIC0xOSw2ICsxOSw3IEBAIG1lbWJlcnMgPSBbCj4+ ICAgICAgICJsaWIvcGRtLWFwaS10eXBlcyIsCj4+ICAgICAgICJsaWIvcGRtLWNsaWVudCIsCj4+ ICAgICAgICJsaWIvcGRtLWNvbmZpZyIsCj4+ICsgICAgImxpYi9wZG0tc2VhcmNoIiwKPj4gICAg ICAgImxpYi9wZG0tdWktc2hhcmVkIiwKPj4gICAKPj4gICAgICAgImNsaS9jbGllbnQiLAo+PiBA QCAtODYsNiArODcsNyBAQCBwZG0tYXBpLXR5cGVzID0geyBwYXRoID0gImxpYi9wZG0tYXBpLXR5 cGVzIiB9Cj4+ICAgcGRtLWJ1aWxkY2ZnID0geyBwYXRoID0gImxpYi9wZG0tYnVpbGRjZmciIH0K Pj4gICBwZG0tY29uZmlnID0geyBwYXRoID0gImxpYi9wZG0tY29uZmlnIiB9Cj4+ICAgcGRtLWNs aWVudCA9IHsgdmVyc2lvbiA9ICIwLjIiLCBwYXRoID0gImxpYi9wZG0tY2xpZW50IiB9Cj4+ICtw ZG0tc2VhcmNoID0geyB2ZXJzaW9uID0gIjAuMiIsIHBhdGggPSAibGliL3BkbS1zZWFyY2giIH0K Pj4gICBwZG0tdWktc2hhcmVkID0geyB2ZXJzaW9uID0gIjAuMiIsIHBhdGggPSAibGliL3BkbS11 aS1zaGFyZWQiIH0KPj4gICBwcm94bW94LWZpZG8yID0geyBwYXRoID0gImNsaS9wcm94bW94LWZp ZG8yIiB9Cj4+ICAgCj4+IGRpZmYgLS1naXQgYS9saWIvcGRtLXNlYXJjaC9DYXJnby50b21sIGIv bGliL3BkbS1zZWFyY2gvQ2FyZ28udG9tbAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi41ZjUxZTc1Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvbGliL3BkbS1zZWFy Y2gvQ2FyZ28udG9tbAo+PiBAQCAtMCwwICsxLDEyIEBACj4+ICtbcGFja2FnZV0KPj4gK25hbWUg PSAicGRtLXNlYXJjaCIKPj4gK2Rlc2NyaXB0aW9uID0gIlByb3htb3ggRGF0YWNlbnRlciBNYW5h Z2VyIHNoYXJlZCB1aSBtb2R1bGVzIgo+PiAraG9tZXBhZ2UgPSAiaHR0cHM6Ly93d3cucHJveG1v eC5jb20iCj4+ICsKPj4gK3ZlcnNpb24ud29ya3NwYWNlID0gdHJ1ZQo+PiArZWRpdGlvbi53b3Jr c3BhY2UgPSB0cnVlCj4+ICtsaWNlbnNlLndvcmtzcGFjZSA9IHRydWUKPj4gK3JlcG9zaXRvcnku d29ya3NwYWNlID0gdHJ1ZQo+PiArCj4+ICtbZGVwZW5kZW5jaWVzXQo+PiArYW55aG93Lndvcmtz cGFjZSA9IHRydWUKPj4gZGlmZiAtLWdpdCBhL2xpYi9wZG0tc2VhcmNoL3NyYy9saWIucnMgYi9s aWIvcGRtLXNlYXJjaC9zcmMvbGliLnJzCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4 IDAwMDAwMDAuLjQ4NTQxNjYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9saWIvcGRtLXNlYXJj aC9zcmMvbGliLnJzCj4+IEBAIC0wLDAgKzEsMzM5IEBACj4+ICsvLyEgQWJzdHJhY3Rpb24gb3Zl ciBhIFtgU2VhcmNoYF0gdGhhdCBjb250YWlucyBtdWx0aXBsZSBbYFNlYXJjaFRlcm1gXXMuCj4+ ICsvLyEKPj4gKy8vISBQcm92aWRlcyBtZXRob2RzIHRvIGZpbHRlciBhbiBpdGVtIG92ZXIgYSBj b21iaW5hdGlvbiBvZiBzdWNoIHRlcm1zIGFuZAo+PiArLy8hIGNvbnN0cnVjdCB0aGVtIGZyb20g dGV4dCwgYW5kIHNlcmlhbGl6ZSB0aGVtIGJhY2sgdG8gdGV4dC4KPj4gK3VzZSBzdGQ6OnN0cjo6 RnJvbVN0cjsKPiAKPiDihpEgeW91IG5ldmVyIHVzZSBhbnkgb2YgaXRzIG1ldGhvZHMsIGZvciB0 aGUgc2luZ2xlIHRyYWl0IGltcGxlbWVudGF0aW9uCj4gaXQncyBmaW5lIHRvIGp1c3QgYGltcGwg c3RkOjpzdHI6OkZyb21TdHJgIGJlbG93Cj4gCj4gT1RPSCB5b3UgZG8gaW1wbGVtZW50IGBEaXNw bGF5YCB0d2ljZSB3aXRob3V0IGltcG9ydGluZyBpdCAod2hpY2ggaXMKPiBmaW5lLCBkb24ndCBi dXQgaW1wb3J0aW5nIGp1c3QgYHN0ZDo6Zm10YCB3aWxsIHNob3J0ZW4gaXQgYWxsLi4uKQo+IAoK cmlnaHQsIGknbGwgZG8gYHVzZSBzdGQ6OmZtdGAgYW5kIGBmbXQ6OkRpc3BsYXlgIGV0Yy4KCj4g Cj4+ICsKPj4gK3VzZSBhbnlob3c6OmJhaWw7Cj4+ICsKPj4gKyNbZGVyaXZlKENsb25lKV0KPj4g K3B1YiBzdHJ1Y3QgU2VhcmNoIHsKPj4gKyAgICByZXF1aXJlZF90ZXJtczogVmVjPFNlYXJjaFRl cm0+LAo+PiArICAgIG9wdGlvbmFsX3Rlcm1zOiBWZWM8U2VhcmNoVGVybT4sCj4gCj4g4oaRIElu IHRoZW9yeSAtIGlzIHBhcnRpdGlvbmluZyB0aGVtIHZlcnkgdXNlZnVsLCBvciB3b3VsZCBpdCBi ZSBhIGJldHRlcgo+IFVYIGlmIHdlIGtlcHQgdGhlbSBpbiBhIHNpbmdsZSB2ZWMgc3VjaCB0aGF0 IGAucGFyc2UoKS50b19zdHJpbmcoKWAKPiBkb2Vzbid0IHJlb3JkZXIgdGhlbT8KPiAKCm1obW0u IGkgaGF2ZSB0byB0aGluayBhYm91dCB0aGF0LCBidXQgc2luY2Ugd2UgbWlnaHQKd2FudCB0byBm aWx0ZXIgYSBsYXJnZSBhbW91bnQgb2YgcmVzb3VyY2UsIGhhdmluZyBpdCBwcmUtcGFydGl0aW9u ZWQKY2FuIHNwZWVkIHVwIHRoZSBtYXRjaGluZwoKd2UgY291bGQgc2F2ZSBib3RoLCBvcmlnaW5h bCBvcmRlciBhbmQgcGFydGl0aW9uZWQgdmFsdWVzCgpzaW5jZSBtb3N0IG9mIHRoZSB0aW1lIGEg c2luZ2xlIHNlYXJjaCB3b24ndCBjb250YWluIHRoYXQgbWFueSB0ZXJtcwoKKGkgZ3Vlc3MgMTAt MjAgYXQgbWF4KSBzbyB0aGUgbGl0dGxlIGV4dHJhIHdhc3RlZCBzcGFjZQpjb3VsZCBiZSBhIGdv b2QgdHJhZGVvZmYgZm9yIGtlZXBpbmcgdGhlIG9yZGVyCgpPVE9ILCB3ZSBkb24ndCBjdXJyZW50 bHkgcGFyc2UgYW5kIGRpc3BsYXkgaXQgYWdhaW4KCndlIHBhcnNlIGl0IGZvciB1c2VyIGlucHV0 LCBhbmQgZGlzcGxheSBpdCBmb3IgYXV0byBnZW5lcmF0ZWQKc2VhcmNoZXMsIGluIGJvdGggY2Fz ZXMgaXQgZG9lcyBub3QgcmVhbGx5IG1hdHRlciBpZgp3ZSBoYXZlIHRoZSBvcmlnaW5hbCBvcmRl ciBvciBub3QuLi4uCgo+PiArfQo+PiArCj4+ICtpbXBsIERlZmF1bHQgZm9yIFNlYXJjaCB7Cj4g Cj4gQSBkZXJpdmUgc2hvdWxkIHdvcmsgaGVyZQo+IAo+PiArICAgIGZuIGRlZmF1bHQoKSAtPiBT ZWxmIHsKPj4gKyAgICAgICAgU2VsZjo6bmV3KCkKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK2lt cGwgRnJvbUl0ZXJhdG9yPFNlYXJjaFRlcm0+IGZvciBTZWFyY2ggewo+PiArICAgIGZuIGZyb21f aXRlcjxUOiBJbnRvSXRlcmF0b3I8SXRlbSA9IFNlYXJjaFRlcm0+PihpdGVyOiBUKSAtPiBTZWxm IHsKPj4gKyAgICAgICAgbGV0IChvcHRpb25hbF90ZXJtcywgcmVxdWlyZWRfdGVybXMpID0gaXRl ci5pbnRvX2l0ZXIoKS5wYXJ0aXRpb24ofHRlcm18IHRlcm0ub3B0aW9uYWwpOwo+PiArCj4+ICsg ICAgICAgIFNlbGYgewo+PiArICAgICAgICAgICAgcmVxdWlyZWRfdGVybXMsCj4+ICsgICAgICAg ICAgICBvcHRpb25hbF90ZXJtcywKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gK30KPj4gKwo+ PiAraW1wbDxTOiBBc1JlZjxzdHI+PiBGcm9tPFM+IGZvciBTZWFyY2ggewo+PiArICAgIGZuIGZy b20odmFsdWU6IFMpIC0+IFNlbGYgewo+PiArICAgICAgICB2YWx1ZQo+PiArICAgICAgICAgICAg LmFzX3JlZigpCj4+ICsgICAgICAgICAgICAuc3BsaXRfd2hpdGVzcGFjZSgpCj4+ICsgICAgICAg ICAgICAuZmlsdGVyX21hcCh8dGVybXwgdGVybS5wYXJzZSgpLm9rKCkpCj4gCj4gTWF5YmUgYWRk IGEgbm90ZSBoZXJlIHdoeSB3ZSBkbyB0aGlzLCBhcyB0aGlzIGlzIHF1aXRlIHBhaW5mdWwgdG8g cmVhZC4KPiBXZSB0aHJvdyBhd2F5IGVycm9ycyBiZWNhdXNlIHdlIGV4cGVjdCB1c2VycyB0byBw cm9kdWNlIHRoZW0/IDstKQoKeWVzLCBiYXNpY2FsbHkKCmlmIGEgdXNlciBlbnRlcnMgc29tZXRo aW5nIHdlIGNhbm5vdCBzdXJlIHdoYXQgd2UncmUgc2VhcmNoaW5nIGZvcgp0aGVyZSBpcyBjdXJy ZW50bHkgb25seSB0d28gY2FzZXMgd2hlcmUgdGhhdCBjYW4gaGFwcGVuOgoKdGhlIHN0cmluZyAn OmEnOyB3YXMgaXQgbWVhbnQgd2l0aCBhbiBlbXB0eSBjYXRlZ29yeSBhbmQKdGhlIHZhbHVlICJh Iiwgb3IgdGhlIGxpdGVyYWwgc3RyaW5nICc6YScKCnRoZSBvdGhlciBlcnJvciBjYXNlIGlzIHdo ZW4gdGhlIHRlcm0gd291bGQgYmUgZW1wdHkKKiBhIHNpbmdsZSAnKycgLT4gY291bGQgYWdhaW4g aW50ZXJwcmV0IGxpdGVyYWxseQoqIGFuIGVtcHR5IHN0cmluZyAnJyAtPiBzaG91bGQgbm90IGJl IHBvc3NpYmxlIGZyb20gdGhlIHVzZXIgc2lkZQogICBzaW5jZSB3ZSBzcGxpdCBvbiB3aGl0ZXNw YWNlCgppIGNvdWxkIGFkYXB0IGl0IHRvIHRha2UgdGhhdCBhcyBhIGxpdGVyYWwgdGVybSB0aG91 Z2ggYW5kIGltcGxlbWVudApGcm9tPEFzUmVmPHN0cj4+IGluc3RlYWQgb2YgRnJvbVN0cgoKPiAK Pj4gKyAgICAgICAgICAgIC5jb2xsZWN0KCkKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK2ltcGwg U2VhcmNoIHsKPj4gKyAgICAvLy8gQ3JlYXRlIGEgbmV3IGVtcHR5IFtgU2VhcmNoYF0KPj4gKyAg ICBwdWIgZm4gbmV3KCkgLT4gU2VsZiB7Cj4+ICsgICAgICAgIFNlbGY6OndpdGhfdGVybXMoVmVj OjpuZXcoKSkKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvLy8gUmV0dXJucyB0cnVlIGlmIG5vIFtg U2VhcmNoVGVybWBdIGV4aXN0Cj4+ICsgICAgcHViIGZuIGlzX2VtcHR5KCZzZWxmKSAtPiBib29s IHsKPj4gKyAgICAgICAgc2VsZi5yZXF1aXJlZF90ZXJtcy5pc19lbXB0eSgpICYmIHNlbGYub3B0 aW9uYWxfdGVybXMuaXNfZW1wdHkoKQo+PiArICAgIH0KPj4gKwo+PiArICAgIC8vLyBDcmVhdGUg YSBuZXcgW2BTZWFyY2hgXSB3aXRoIHRoZSBnaXZlbiBbYFNlYXJjaFRlcm1gXXMKPj4gKyAgICBw dWIgZm4gd2l0aF90ZXJtcyh0ZXJtczogVmVjPFNlYXJjaFRlcm0+KSAtPiBTZWxmIHsKPiAKPiAo Cj4gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIGBGcm9tSXRlcmF0b3JgLCB0aGlzIGNvdWxkIGJlCj4g Cj4gICAgICBwdWIgZm4gd2l0aF90ZXJtczxJPih0ZXJtczogSSkgLT4gU2VsZgo+ICAgICAgd2hl cmUKPiAgICAgICAgICBJOiBJbnRvSXRlcmF0b3I8SXRlbSA9IFNlYXJjaFRlcm0+Owo+ICkKCnRy dWUKCj4gCj4+ICsgICAgICAgIHRlcm1zLmludG9faXRlcigpLmNvbGxlY3QoKQo+PiArICAgIH0K Pj4gKwo+PiArICAgIC8vLyBUZXN0IGlmIHRoZSBnaXZlbiBgRm4oJlNlYXJjaFRlcm0pIC0+IGJv b2xgIGZvciBhbGwgW2BTZWFyY2hUZXJtYF0gY29uZmlndXJlZCBtYXRjaGVzCj4+ICsgICAgLy8v Cj4+ICsgICAgLy8vIFJldHVybnMgdHJ1ZSBpZiBpdCBtYXRjaGVzIGNvbnNpZGVyaW5nIHRoZSBj b25zdHJhaW50czoKPj4gKyAgICAvLy8gaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMsIHJldHVybnMg dHJ1ZQo+PiArICAgIHB1YiBmbiBtYXRjaGVzPEY6IEZuKCZTZWFyY2hUZXJtKSAtPiBib29sPigm c2VsZiwgbWF0Y2hlczogRikgLT4gYm9vbCB7Cj4+ICsgICAgICAgIGlmIHNlbGYuaXNfZW1wdHko KSB7Cj4+ICsgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsg ICAgICAgIGlmIHNlbGYucmVxdWlyZWRfdGVybXMuaXRlcigpLm1hcCgmbWF0Y2hlcykuYW55KHxm fCAhZikgewo+PiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+PiArICAgICAgICB9Cj4+ICsK Pj4gKyAgICAgICAgaWYgIXNlbGYub3B0aW9uYWxfdGVybXMuaXNfZW1wdHkoKSAmJiBzZWxmLm9w dGlvbmFsX3Rlcm1zLml0ZXIoKS5tYXAoJm1hdGNoZXMpLmFsbCh8ZnwgIWYpIHsKPj4gKyAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIHRydWUK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb21iaW5hdGlv biBvZiBbYFNlYXJjaFRlcm1gXXMgcmVxdWlyZSB0aGF0IHRoaXMgY2F0ZWdvcnkgdmFsdWUgbXVz dCBiZQo+PiArICAgIC8vLyB0cnVlLiBVc2VmdWwgdG8gZmluZCBvdXQgaWYgc29tZSBjb25kaXRp b24gaXMgcmVxdWlyZWQgKGUuZy4gdHlwZSA9PSAncmVtb3RlJykKPj4gKyAgICBwdWIgZm4gY2F0 ZWdvcnlfdmFsdWVfcmVxdWlyZWQoJnNlbGYsIGNhdGVnb3J5OiAmc3RyLCB2YWx1ZTogJnN0cikg LT4gYm9vbCB7Cj4+ICsgICAgICAgIGZvciB0ZXJtIGluICZzZWxmLnJlcXVpcmVkX3Rlcm1zIHsK Pj4gKyAgICAgICAgICAgIGlmIHRlcm0uY2F0ZWdvcnkuYXNfZGVyZWYoKSA9PSBTb21lKGNhdGVn b3J5KSAmJiB2YWx1ZS5jb250YWlucygmdGVybS52YWx1ZSkgewo+IAo+IFdoeSBkb2VzIHRoaXMg dXNlIGAuY29udGFpbnMoKWAgYnV0IHRoZSBsb29wIG92ZXIgb3B0aW9uYWwgb25lcyB1c2VzCj4g YD09YD8KCmdvb2QgcG9pbnQKCnRoaXMgcHJvYmFibHkgZG9lcyBub3QgYmVsb25nIGhlcmUgYXQg YWxsLCBidXQgYXMgYSBoZWxwZXIgaW4gdGhlIGFwaQp3aGVyZSB3ZSBzZWFyY2gKCndlIG9ubHkg dXNlIGZvciAnZmFzdCBza2lwcGluZycgc29tZSBpbmZvcyB0aGVyZSB3aGVuIHdlIGtub3cgd2Ug b25seQpsb29rIGZvciByZW1vdGVzCgppJ2QgbGVhdmUgaXQgb3V0IGhlcmUgYW5kIG1ha2UgYSBz cGVjaWFsIGNoZWNrIGluIHRoZSBhcGkuIHdlIGNhbiBzdGlsbAppbnRyb2R1Y2UgaXQgaWYgd2Ug bmVlZCBpdCBzb21ld2hlcmUgZWxzZSB0b28KCj4gCj4+ICsgICAgICAgICAgICAgICAgcmV0dXJu IHRydWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBs ZXQgbXV0IG9wdGlvbmFsX2NvdW50ID0gMDsKPj4gKwo+PiArICAgICAgICBmb3IgdGVybSBpbiAm c2VsZi5vcHRpb25hbF90ZXJtcyB7Cj4+ICsgICAgICAgICAgICBpZiB0ZXJtLmNhdGVnb3J5LmFz X2RlcmVmKCkgPT0gU29tZShjYXRlZ29yeSkgJiYgdGVybS52YWx1ZSA9PSB2YWx1ZSB7Cj4+ICsg ICAgICAgICAgICAgICAgb3B0aW9uYWxfY291bnQgKz0gMTsKPj4gKyAgICAgICAgICAgIH0KPj4g KyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIHNlbGYucmVxdWlyZWRfdGVybXMuaXNfZW1wdHko KQo+PiArICAgICAgICAgICAgJiYgc2VsZi5vcHRpb25hbF90ZXJtcy5sZW4oKSA9PSBvcHRpb25h bF9jb3VudAo+PiArICAgICAgICAgICAgJiYgb3B0aW9uYWxfY291bnQgPiAwCj4+ICsgICAgfQo+ PiArfQo+PiArCj4+ICtpbXBsIHN0ZDo6Zm10OjpEaXNwbGF5IGZvciBTZWFyY2ggewo+PiArICAg IGZuIGZtdCgmc2VsZiwgZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gc3RkOjpm bXQ6OlJlc3VsdCB7Cj4+ICsgICAgICAgIGZvciAoY291bnQsIHRlcm0pIGluIHNlbGYucmVxdWly ZWRfdGVybXMuaXRlcigpLmVudW1lcmF0ZSgpIHsKPj4gKyAgICAgICAgICAgIGlmIGNvdW50ICE9 IDAgewo+PiArICAgICAgICAgICAgICAgIHdyaXRlIShmLCAiICIpPzsKPj4gKyAgICAgICAgICAg IH0KPj4gKwo+PiArICAgICAgICAgICAgd3JpdGUhKGYsICJ7dGVybX0iKT87Cj4+ICsgICAgICAg IH0KPiAKPiBwZXJzb25hbCBvcGluaW9uOiBlbnVtZXJhdGUoKSB0byBvbmx5IGhhbmRsZSB0aGUg Zmlyc3QgZWxlbWVudAo+IGRpZmZlcmVudGx5IHNlZW1zIGEgYml0IG11Y2gsIGlmIHlvdSBjb25z aWRlciB0aGF0IGl0IGtlZXBzIGEgY291bnRlciwKPiB5b3UgY291bGQga2VlcCBhICJzZXBhcmF0 b3IiIGluc3RlYWQgd2hpY2ggeW91IGp1c3QgdXBkYXRlIG9uY2U6Cj4gCj4gICAgICBsZXQgbXV0 IHNlcCA9ICIiOwo+ICAgICAgZm9yIHRlcm0gaW4gJnNlbGYucmVxdWlyZWRfdGVybXMgewo+ICAg ICAgICAgIHdyaXRlIShmLCAie3NlcH17dGVybX0iKT87Cj4gICAgICAgICAgc2VwID0gIiAiOwo+ ICAgICAgfQo+IAp5ZXMgbWFrZXMgc2Vuc2UKCj4+ICsKPj4gKyAgICAgICAgaWYgIXNlbGYucmVx dWlyZWRfdGVybXMuaXNfZW1wdHkoKSAmJiAhc2VsZi5vcHRpb25hbF90ZXJtcy5pc19lbXB0eSgp IHsKPj4gKyAgICAgICAgICAgIHdyaXRlIShmLCAiICIpPzsKPj4gKyAgICAgICAgfQo+IAo+IOKG kSBUaGlzIGNvdWxkIHRoZW4gYmUgc2tpcHBlZCBlbnRpcmVseSBhbmQgd2UgY2FuIHJldXNlIGBz ZXBgIGluc2lkZSB0aGUKPiBsb3dlciBsb29wIHRoZSBzYW1lIHdheSAtIGlmIG5vIHByZXZpb3Vz IHRleHQgd2FzIHRoZXJlLCB0aGUgZmlyc3QKPiBlbGVtZW50IHdpbGwgc3RpbGwgYmUgdXNpbmcg YW4gZW1wdHkgc3RyaW5nIGZvciBgc2VwYCBiZWZvcmUgdXBkYXRpbmcgaXQKPiB0byBiZSBgIiAi YCBmb3IgdGhlIHJlbWFpbmluZyBlbGVtZW50cy4uLgo+IAo+IFRoZW4gdGhlIGVudGlyZSBpbXBs ZW1lbnRhdGlvbiBpcyBqdXN0Ogo+ICAgICAgbGV0IG11dCBzZXAgPSAiIjsKPiAgICAgIGZvciB0 ZXJtIGluICZzZWxmLnJlcXVpcmVkX3Rlcm1zIHsKPiAgICAgICAgICB3cml0ZSEoZiwgIntzZXB9 e3Rlcm19Iik/Owo+ICAgICAgICAgIHNlcCA9ICIgIjsKPiAgICAgIH0KPiAgICAgIGZvciB0ZXJt IGluICZzZWxmLm9wdGlvbmFsX3Rlcm1zIHsKPiAgICAgICAgICB3cml0ZSEoZiwgIntzZXB9e3Rl cm19Iik/Owo+ICAgICAgICAgIHNlcCA9ICIgIjsKPiAgICAgIH0KPiAKPiBvZiBpZiB5b3UncmUg ZmVlbGluZyBmYW5jeToKPiAKPiAgICAgIGxldCBtdXQgc2VwID0gIiI7Cj4gICAgICBmb3IgdGVy bSBpbiBzZWxmLnJlcXVpcmVkX3Rlcm1zLml0ZXIoKS5jaGFpbihzZWxmLm9wdGlvbmFsX3Rlcm1z Lml0ZXIoKSkgewo+ICAgICAgICAgIHdyaXRlIShmLCAie3NlcH17dGVybX0iKT87Cj4gICAgICAg ICAgc2VwID0gIiAiOwo+ICAgICAgfQo+IAoKdGhhbmtzIGknbGwgc2VlIHRvIGludGVncmF0ZSB0 YWh0Cgo+PiArCj4+ICsgICAgICAgIGZvciAoY291bnQsIHRlcm0pIGluIHNlbGYub3B0aW9uYWxf dGVybXMuaXRlcigpLmVudW1lcmF0ZSgpIHsKPj4gKyAgICAgICAgICAgIGlmIGNvdW50ICE9IDAg ewo+PiArICAgICAgICAgICAgICAgIHdyaXRlIShmLCAiICIpPzsKPj4gKyAgICAgICAgICAgIH0K Pj4gKwo+PiArICAgICAgICAgICAgd3JpdGUhKGYsICJ7dGVybX0iKT87Cj4+ICsgICAgICAgIH0K Pj4gKwo+PiArICAgICAgICBPaygoKSkKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gKyNbZGVyaXZl KERlYnVnLCBDbG9uZSwgUGFydGlhbEVxKV0KPj4gK3B1YiBzdHJ1Y3QgU2VhcmNoVGVybSB7Cj4+ ICsgICAgb3B0aW9uYWw6IGJvb2wsCj4+ICsgICAgcHViIHZhbHVlOiBTdHJpbmcsCj4+ICsgICAg cHViIGNhdGVnb3J5OiBPcHRpb248U3RyaW5nPiwKPj4gK30KPj4gKwo+PiAraW1wbCBTZWFyY2hU ZXJtIHsKPj4gKyAgICAvLy8gQ3JlYXRlcyBhIG5ldyBbYFNlYXJjaFRlcm1gXS4KPj4gKyAgICBw dWIgZm4gbmV3PFM6IEludG88U3RyaW5nPj4odGVybTogUykgLT4gU2VsZiB7Cj4gCj4g4oaRIHVz ZSBgSW50bzxTdHJpbmc+YCwgYFRvU3RyaW5nYCB3aWxsIGNhdXNlIGFuIHVubmVjZXNzYXJ5IGNs b25lIHdoZW4KPiBwYXNzaW5nIGFuIGFscmVhZHkgb3duZWQgYFN0cmluZ2AgYXMgaXQgaXMgaW1w bGVtZW50ZWQgdmlhIGBEaXNwbGF5YC4KPiAKPj4gKyAgICAgICAgU2VsZiB7Cj4+ICsgICAgICAg ICAgICB2YWx1ZTogdGVybS50b19zdHJpbmcoKSwKPj4gKyAgICAgICAgICAgIG9wdGlvbmFsOiBm YWxzZSwKPj4gKyAgICAgICAgICAgIGNhdGVnb3J5OiBOb25lLAo+PiArICAgICAgICB9Cj4+ICsg ICAgfQo+PiArCj4+ICsgICAgLy8vIEJ1aWxkZXIgc3R5bGUgbWV0aG9kIHRvIHNldCB0aGUgY2F0 ZWdvcnkKPj4gKyAgICBwdWIgZm4gY2F0ZWdvcnk8UzogVG9TdHJpbmc+KG11dCBzZWxmLCBjYXRl Z29yeTogT3B0aW9uPFM+KSAtPiBTZWxmIHsKPj4gKyAgICAgICAgc2VsZi5jYXRlZ29yeSA9IGNh dGVnb3J5Lm1hcCh8c3wgcy50b19zdHJpbmcoKSk7Cj4+ICsgICAgICAgIHNlbGYKPj4gKyAgICB9 Cj4+ICsKPj4gKyAgICAvLy8gQnVpbGRlciBzdHlsZSBtZXRob2QgdG8gbWFyayB0aGlzIFtgU2Vh cmNoVGVybWBdIGFzIG9wdGlvbmFsCj4+ICsgICAgcHViIGZuIG9wdGlvbmFsKG11dCBzZWxmLCBv cHRpb25hbDogYm9vbCkgLT4gU2VsZiB7Cj4+ICsgICAgICAgIHNlbGYub3B0aW9uYWwgPSBvcHRp b25hbDsKPj4gKyAgICAgICAgc2VsZgo+PiArICAgIH0KPj4gK30KPj4gKwo+PiAraW1wbCBGcm9t U3RyIGZvciBTZWFyY2hUZXJtIHsKPj4gKyAgICB0eXBlIEVyciA9IGFueWhvdzo6RXJyb3I7Cj4+ ICsKPj4gKyAgICBmbiBmcm9tX3N0cihzOiAmc3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJy PiB7Cj4gCj4g4oaRIHVzZTogKG11dCB0ZXJtOiAmc3RyKQo+IAo+PiArICAgICAgICBsZXQgbXV0 IG9wdGlvbmFsID0gdHJ1ZTsKPj4gKyAgICAgICAgbGV0IG11dCB0ZXJtOiBTdHJpbmcgPSBzLmlu dG8oKTsKPiAKPiDihpEgc2tpcCB0aGUgcHJlbWF0dXJlIGFsbG9jYXRpb24gOy0pCj4gCj4+ICsg ICAgICAgIGlmIHRlcm0uc3RhcnRzX3dpdGgoIisiKSB7Cj4+ICsgICAgICAgICAgICBvcHRpb25h bCA9IGZhbHNlOwo+PiArICAgICAgICAgICAgdGVybS5yZW1vdmUoMCk7Cj4+ICsgICAgICAgIH0K PiAKPiDihpEKPiAgICAgIGlmIGxldCBTb21lKHJlc3QpID0gdGVybS5zdHJpcF9wcmVmaXgoIisi KSB7Cj4gICAgICAgICAgdGVybSA9IHJlc3Q7Cj4gICAgICAgICAgb3B0aW9uYWwgPSBmYWxzZTsK PiAgICAgIH0KPiAKPj4gKwo+PiArICAgICAgICBsZXQgKHRlcm0sIGNhdGVnb3J5KSA9IGlmIGxl dCBTb21lKGlkeCkgPSB0ZXJtLmZpbmQoIjoiKSB7Cj4+ICsgICAgICAgICAgICBsZXQgbXV0IHJl YWxfdGVybSA9IHRlcm0uc3BsaXRfb2ZmKGlkeCk7Cj4+ICsgICAgICAgICAgICByZWFsX3Rlcm0u cmVtb3ZlKDApOyAvLyByZW1vdmUgJzonCj4gCj4g4oaRIDIgZXhwZW5zaXZlIGF2b2lkYWJsZSBv cHMsIHNlZSBiZWxvdwo+IAo+PiArICAgICAgICAgICAgKHJlYWxfdGVybSwgU29tZSh0ZXJtKSkK Pj4gKyAgICAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgICh0ZXJtLCBOb25lKQo+PiArICAg ICAgICB9Owo+IAo+IOKGkQo+ICAgICAgbGV0IGNhdGVnb3J5Owo+ICAgICAgKHRlcm0sIGNhdGVn b3J5KSA9IG1hdGNoIHRlcm0uc3BsaXRfb25jZSgnOicpIHsKPiAgICAgICAgICBTb21lKChjYXRl Z29yeSwgdGVybSkpID0+ICh0ZXJtLCBTb21lKGNhdGVnb3J5KSksCj4gICAgICAgICAgTm9uZSA9 PiAodGVybSwgTm9uZSksCj4gICAgICB9Cj4gCj4+ICsKPj4gKyAgICAgICAgaWYgdGVybS5pc19l bXB0eSgpIHsKPj4gKyAgICAgICAgICAgIGJhaWwhKCJ0ZXJtIGNhbm5vdCBiZSBlbXB0eSIpOwo+ PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgaWYgY2F0ZWdvcnkgPT0gU29tZSgiIi5pbnRv KCkpIHsKPiAKPiDihpEgQ2FuIGF2b2lkIHRoaXMgKGFsc28sIGBTdHJpbmc6Om5ldygpYCB3b3Vs ZCBiZSBjaGVhcGVyKSB2aWE6Cj4gCj4gICAgICBpZiBjYXRlZ29yeS5pc19zb21lX2FuZChzdHI6 OmlzX2VtcHR5KSB7Cj4gCj4gCj4+ICsgICAgICAgICAgICBiYWlsISgiY2F0ZWdvcnkgY2Fubm90 IGJlIGVtcHR5Iik7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBPayhTZWFyY2hUZXJt OjpuZXcodGVybSkub3B0aW9uYWwob3B0aW9uYWwpLmNhdGVnb3J5KGNhdGVnb3J5KSkKPj4gKyAg ICB9Cj4+ICt9Cj4+ICsKPj4gK2ltcGwgc3RkOjpmbXQ6OkRpc3BsYXkgZm9yIFNlYXJjaFRlcm0g ewo+PiArICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBzdGQ6OmZtdDo6Rm9ybWF0dGVyPCdfPikg LT4gc3RkOjpmbXQ6OlJlc3VsdCB7Cj4+ICsgICAgICAgIGlmICFzZWxmLm9wdGlvbmFsIHsKPj4g KyAgICAgICAgICAgIGYud3JpdGVfc3RyKCIrIik/Owo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICAgaWYgbGV0IFNvbWUoY2F0KSA9ICZzZWxmLmNhdGVnb3J5IHsKPj4gKyAgICAgICAgICAg IGYud3JpdGVfc3RyKGNhdCk/Owo+PiArICAgICAgICAgICAgZi53cml0ZV9zdHIoIjoiKT87Cj4+ ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICBmLndyaXRlX3N0cigmc2VsZi52YWx1ZSkKPj4g KyAgICB9Cj4+ICt9Cj4+ICsKPj4gKyNbY2ZnKHRlc3QpXQo+PiArbW9kIHRlc3RzIHsKPj4gKyAg ICB1c2UgY3JhdGU6OntTZWFyY2gsIFNlYXJjaFRlcm19Owo+PiArCj4+ICsgICAgI1t0ZXN0XQo+ PiArICAgIGZuIHBhcnNlX3Rlc3Rfc2ltcGxlX2ZpbHRlcigpIHsKPj4gKyAgICAgICAgYXNzZXJ0 X2VxISgKPj4gKyAgICAgICAgICAgICJmb28iLnBhcnNlOjo8U2VhcmNoVGVybT4oKS51bndyYXAo KSwKPj4gKyAgICAgICAgICAgIFNlYXJjaFRlcm06Om5ldygiZm9vIikub3B0aW9uYWwodHJ1ZSks Cj4+ICsgICAgICAgICk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgI1t0ZXN0XQo+PiArICAgIGZu IHBhcnNlX3Rlc3RfcmVxdWlyZXNfZmlsdGVyKCkgewo+PiArICAgICAgICBhc3NlcnRfZXEhKAo+ PiArICAgICAgICAgICAgIitmb28iLnBhcnNlOjo8U2VhcmNoVGVybT4oKS51bndyYXAoKSwKPj4g KyAgICAgICAgICAgIFNlYXJjaFRlcm06Om5ldygiZm9vIiksCj4+ICsgICAgICAgICk7Cj4+ICsg ICAgfQo+PiArCj4+ICsgICAgI1t0ZXN0XQo+PiArICAgIGZuIHBhcnNlX3Rlc3RfY2F0ZWdvcnlf ZmlsdGVyKCkgewo+PiArICAgICAgICBhc3NlcnRfZXEhKAo+PiArICAgICAgICAgICAgImZvbzpi YXIiLnBhcnNlOjo8U2VhcmNoVGVybT4oKS51bndyYXAoKSwKPj4gKyAgICAgICAgICAgIFNlYXJj aFRlcm06Om5ldygiYmFyIikub3B0aW9uYWwodHJ1ZSkuY2F0ZWdvcnkoU29tZSgiZm9vIikpCj4+ ICsgICAgICAgICk7Cj4+ICsgICAgICAgIGFzc2VydF9lcSEoCj4+ICsgICAgICAgICAgICAiK2Zv bzpiYXIiLnBhcnNlOjo8U2VhcmNoVGVybT4oKS51bndyYXAoKSwKPj4gKyAgICAgICAgICAgIFNl YXJjaFRlcm06Om5ldygiYmFyIikuY2F0ZWdvcnkoU29tZSgiZm9vIikpCj4+ICsgICAgICAgICk7 Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgI1t0ZXN0XQo+PiArICAgIGZuIHBhcnNlX3Rlc3RfaW52 YWxpZF9maWx0ZXIoKSB7Cj4+ICsgICAgICAgIGFzc2VydCEoIjpiYXIiLnBhcnNlOjo8U2VhcmNo VGVybT4oKS5pc19lcnIoKSk7Cj4+ICsgICAgICAgIGFzc2VydCEoIitjYXQ6Ii5wYXJzZTo6PFNl YXJjaFRlcm0+KCkuaXNfZXJyKCkpOwo+PiArICAgICAgICBhc3NlcnQhKCIrIi5wYXJzZTo6PFNl YXJjaFRlcm0+KCkuaXNfZXJyKCkpOwo+PiArICAgICAgICBhc3NlcnQhKCI6Ii5wYXJzZTo6PFNl YXJjaFRlcm0+KCkuaXNfZXJyKCkpOwo+PiArICAgIH0KPj4gKwo+PiArICAgICNbdGVzdF0KPj4g KyAgICBmbiBtYXRjaF90ZXN0cygpIHsKPj4gKyAgICAgICAgbGV0IHNlYXJjaCA9IFNlYXJjaDo6 ZnJvbV9pdGVyKHZlYyFbCj4+ICsgICAgICAgICAgICBTZWFyY2hUZXJtOjpuZXcoInJlcXVpcmVk MSIpLm9wdGlvbmFsKGZhbHNlKSwKPj4gKyAgICAgICAgICAgIFNlYXJjaFRlcm06Om5ldygicmVx dWlyZWQyIikub3B0aW9uYWwoZmFsc2UpLAo+PiArICAgICAgICAgICAgU2VhcmNoVGVybTo6bmV3 KCJvcHRpb25hbDEiKS5vcHRpb25hbCh0cnVlKSwKPj4gKyAgICAgICAgICAgIFNlYXJjaFRlcm06 Om5ldygib3B0aW9uYWwyIikub3B0aW9uYWwodHJ1ZSksCj4+ICsgICAgICAgIF0pOwo+PiArCj4+ ICsgICAgICAgIC8vIGVhY2ggY2FzZSBjb250YWlucyByZXN1bHRzIGZvcgo+PiArICAgICAgICAv LyByZXF1aXJlZDEsIHJlcXVpcmVkMiwgb3B0aW9uYWwxLCBvcHRpb25hbDIKPj4gKyAgICAgICAg Ly8gYW5kIGlmIGl0IHNob3VsZCBtYXRjaCBvciBub3QKPj4gKyAgICAgICAgbGV0IGNhc2VzID0g Wwo+PiArICAgICAgICAgICAgKCh0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSksIHRydWUpLAo+PiAr ICAgICAgICAgICAgKCh0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSksIHRydWUpLAo+PiArICAgICAg ICAgICAgKCh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKSwgdHJ1ZSksCj4+ICsgICAgICAgICAgICAo KHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSksIGZhbHNlKSwKPj4gKyAgICAgICAgICAgICgodHJ1 ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSksIGZhbHNlKSwKPj4gKyAgICAgICAgICAgICgoZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpLCBmYWxzZSksCj4+ICsgICAgICAgICAgICAoKGZhbHNlLCB0 cnVlLCBmYWxzZSwgZmFsc2UpLCBmYWxzZSksCj4+ICsgICAgICAgICAgICAoKGZhbHNlLCBmYWxz ZSwgdHJ1ZSwgdHJ1ZSksIGZhbHNlKSwKPj4gKyAgICAgICAgICAgICgoZmFsc2UsIHRydWUsIHRy dWUsIHRydWUpLCBmYWxzZSksCj4+ICsgICAgICAgICAgICAoKHRydWUsIGZhbHNlLCB0cnVlLCB0 cnVlKSwgZmFsc2UpLAo+PiArICAgICAgICAgICAgKCh0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2Up LCBmYWxzZSksCj4+ICsgICAgICAgICAgICAoKGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSksIGZh bHNlKSwKPj4gKyAgICAgICAgICAgICgoZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSksIGZhbHNl KSwKPj4gKyAgICAgICAgICAgICgodHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKSwgZmFsc2UpLAo+ PiArICAgICAgICAgICAgKChmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUpLCBmYWxzZSksCj4+ICsg ICAgICAgICAgICAoKGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUpLCBmYWxzZSksCj4+ICsgICAg ICAgIF07Cj4+ICsgICAgICAgIGZvciAoaW5wdXQsIGV4cGVjdGVkKSBpbiBjYXNlcyB7Cj4+ICsg ICAgICAgICAgICBhc3NlcnQhKAo+PiArICAgICAgICAgICAgICAgIHNlYXJjaC5tYXRjaGVzKHx0 ZXJtfCB7Cj4+ICsgICAgICAgICAgICAgICAgICAgIG1hdGNoIHRlcm0udmFsdWUuYXNfc3RyKCkg ewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkMSIgPT4gaW5wdXQuMCwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZDIiID0+IGlucHV0LjEsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwxIiA9PiBpbnB1dC4yLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIm9wdGlvbmFsMiIgPT4gaW5wdXQuMywKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgIF8gPT4gdW5yZWFjaGFibGUhKCksCj4+ICsgICAgICAgICAgICAgICAgICAgIH0K Pj4gKyAgICAgICAgICAgICAgICB9KSA9PSBleHBlY3RlZAo+PiArICAgICAgICAgICAgKQo+PiAr ICAgICAgICB9Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgI1t0ZXN0XQo+PiArICAgIGZuIGNhdGVn b3J5X3ZhbHVlX3JlcXVpcmVkKCkgewo+PiArICAgICAgICBsZXQgc2VhcmNoOiBTZWFyY2ggPSBT ZWFyY2g6OmZyb21faXRlcih2ZWMhW1NlYXJjaFRlcm06Om5ldygiZm9vIildKTsKPj4gKyAgICAg ICAgYXNzZXJ0ISghc2VhcmNoLmNhdGVnb3J5X3ZhbHVlX3JlcXVpcmVkKCJiYXIiLCAiYmF6Iikp Owo+PiArCj4+ICsgICAgICAgIGxldCBzZWFyY2g6IFNlYXJjaCA9IFNlYXJjaDo6ZnJvbV9pdGVy KHZlYyFbU2VhcmNoVGVybTo6bmV3KCJmb28iKS5vcHRpb25hbCh0cnVlKV0pOwo+PiArICAgICAg ICBhc3NlcnQhKCFzZWFyY2guY2F0ZWdvcnlfdmFsdWVfcmVxdWlyZWQoImJhciIsICJiYXoiKSk7 Cj4+ICsKPj4gKyAgICAgICAgbGV0IHNlYXJjaDogU2VhcmNoID0gU2VhcmNoOjpmcm9tX2l0ZXIo dmVjIVtTZWFyY2hUZXJtOjpuZXcoImZvbyIpLmNhdGVnb3J5KFNvbWUoImJhciIpKV0pOwo+PiAr ICAgICAgICBhc3NlcnQhKCFzZWFyY2guY2F0ZWdvcnlfdmFsdWVfcmVxdWlyZWQoImJhciIsICJi YXoiKSk7Cj4+ICsKPj4gKyAgICAgICAgbGV0IHNlYXJjaDogU2VhcmNoID0gU2VhcmNoOjpmcm9t X2l0ZXIodmVjIVtTZWFyY2hUZXJtOjpuZXcoImJheiIpLmNhdGVnb3J5KFNvbWUoImJhciIpKV0p Owo+PiArICAgICAgICBhc3NlcnQhKHNlYXJjaC5jYXRlZ29yeV92YWx1ZV9yZXF1aXJlZCgiYmFy IiwgImJheiIpKTsKPj4gKwo+PiArICAgICAgICBsZXQgc2VhcmNoOiBTZWFyY2ggPSBTZWFyY2g6 OmZyb21faXRlcih2ZWMhW1NlYXJjaFRlcm06Om5ldygiZm9vIikKPj4gKyAgICAgICAgICAgIC5v cHRpb25hbCh0cnVlKQo+PiArICAgICAgICAgICAgLmNhdGVnb3J5KFNvbWUoImJhciIpKV0pOwo+ PiArICAgICAgICBhc3NlcnQhKCFzZWFyY2guY2F0ZWdvcnlfdmFsdWVfcmVxdWlyZWQoImJhciIs ICJiYXoiKSk7Cj4+ICsKPj4gKyAgICAgICAgbGV0IHNlYXJjaDogU2VhcmNoID0gU2VhcmNoOjpm cm9tX2l0ZXIodmVjIVtTZWFyY2hUZXJtOjpuZXcoImJheiIpCj4+ICsgICAgICAgICAgICAub3B0 aW9uYWwodHJ1ZSkKPj4gKyAgICAgICAgICAgIC5jYXRlZ29yeShTb21lKCJiYXIiKSldKTsKPj4g KyAgICAgICAgYXNzZXJ0IShzZWFyY2guY2F0ZWdvcnlfdmFsdWVfcmVxdWlyZWQoImJhciIsICJi YXoiKSk7Cj4+ICsKPj4gKyAgICAgICAgbGV0IHNlYXJjaDogU2VhcmNoID0gU2VhcmNoOjpmcm9t X2l0ZXIodmVjIVsKPj4gKyAgICAgICAgICAgIFNlYXJjaFRlcm06Om5ldygiYmF6Iikub3B0aW9u YWwodHJ1ZSkuY2F0ZWdvcnkoU29tZSgiYmFyIikpLAo+PiArICAgICAgICAgICAgU2VhcmNoVGVy bTo6bmV3KCJmb28iKS5vcHRpb25hbCh0cnVlKSwKPj4gKyAgICAgICAgXSk7Cj4+ICsgICAgICAg IGFzc2VydCEoIXNlYXJjaC5jYXRlZ29yeV92YWx1ZV9yZXF1aXJlZCgiYmFyIiwgImJheiIpKTsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICAjW3Rlc3RdCj4+ICsgICAgZm4gdGVzdF9kaXNwbGF5KCkg ewo+PiArICAgICAgICBsZXQgdGVybSA9IFNlYXJjaFRlcm06Om5ldygiZm9vIik7Cj4+ICsgICAg ICAgIGFzc2VydF9lcSEoIitmb28iLCAmdGVybS50b19zdHJpbmcoKSk7Cj4+ICsKPj4gKyAgICAg ICAgbGV0IHRlcm0gPSBTZWFyY2hUZXJtOjpuZXcoImZvbyIpLm9wdGlvbmFsKHRydWUpOwo+PiAr ICAgICAgICBhc3NlcnRfZXEhKCJmb28iLCAmdGVybS50b19zdHJpbmcoKSk7Cj4+ICsKPj4gKyAg ICAgICAgbGV0IHRlcm0gPSBTZWFyY2hUZXJtOjpuZXcoImZvbyIpLm9wdGlvbmFsKGZhbHNlKTsK Pj4gKyAgICAgICAgYXNzZXJ0X2VxISgiK2ZvbyIsICZ0ZXJtLnRvX3N0cmluZygpKTsKPj4gKwo+ PiArICAgICAgICBsZXQgdGVybSA9IFNlYXJjaFRlcm06Om5ldygiZm9vIikuY2F0ZWdvcnkoU29t ZSgiYmFyIikpOwo+PiArICAgICAgICBhc3NlcnRfZXEhKCIrYmFyOmZvbyIsICZ0ZXJtLnRvX3N0 cmluZygpKTsKPj4gKwo+PiArICAgICAgICBsZXQgdGVybSA9IFNlYXJjaFRlcm06Om5ldygiZm9v Iikub3B0aW9uYWwodHJ1ZSkuY2F0ZWdvcnkoU29tZSgiYmFyIikpOwo+PiArICAgICAgICBhc3Nl cnRfZXEhKCJiYXI6Zm9vIiwgJnRlcm0udG9fc3RyaW5nKCkpOwo+PiArCj4+ICsgICAgICAgIGxl dCB0ZXJtID0gU2VhcmNoVGVybTo6bmV3KCJmb28iKS5vcHRpb25hbChmYWxzZSkuY2F0ZWdvcnko U29tZSgiYmFyIikpOwo+PiArICAgICAgICBhc3NlcnRfZXEhKCIrYmFyOmZvbyIsICZ0ZXJtLnRv X3N0cmluZygpKTsKPj4gKyAgICB9Cj4+ICt9Cj4+IC0tIAo+PiAyLjQ3LjIKCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGRtLWRldmVsIG1haWxpbmcg bGlzdApwZG0tZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNv bS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGRtLWRldmVsCg==