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 B1A7A1FF184 for ; Thu, 20 Nov 2025 15:51:25 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D0820BB1D; Thu, 20 Nov 2025 15:51:31 +0100 (CET) From: Stefan Hanreich To: pbs-devel@lists.proxmox.com Date: Thu, 20 Nov 2025 15:50:10 +0100 Message-ID: <20251120145031.550340-3-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251120145031.550340-1-s.hanreich@proxmox.com> References: <20251120145031.550340-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 KAM_SHORT 0.001 Use of a URL Shortener for very short URL 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: [pbs-devel] [PATCH proxmox 2/5] proxmox-fixed-string: extract FixedString into own crate X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" QXMgYSBwcmVwYXJhdGlvbiBmb3IgdXNpbmcgRml4ZWRTdHJpbmcgaW4gcGJzLWFwaS10eXBlcywg ZXh0cmFjdCB0aGUKdHlwZSBpbnRvIGl0cyBvd24gY3JhdGUsIHNvIGl0IGNhbiBiZSBzaGFyZWQg YmV0d2VlbiBwYnMtYXBpLXR5cGVzIGFuZApwdmUtYXBpLXR5cGVzLiBUaGlzIGNvZGUgaXMgdGFr ZW4gZGlyZWN0bHkgZnJvbSB0aGUgcHZlLWFwaS10eXBlcwppbXBsZW1lbnRhdGlvbiB3aXRob3V0 IGFueSBmdW5jdGlvbmFsIGNoYW5nZXMuCgpTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gSGFucmVpY2gg PHMuaGFucmVpY2hAcHJveG1veC5jb20+Ci0tLQogQ2FyZ28udG9tbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogcHJveG1veC1maXhlZC1zdHJpbmcvQ2FyZ28udG9tbCAg ICAgICAgICAgfCAgMTQgKysKIHByb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9jaGFuZ2Vsb2cg ICAgIHwgICA1ICsKIHByb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9jb250cm9sICAgICAgIHwg IDM0ICsrKwogcHJveG1veC1maXhlZC1zdHJpbmcvZGViaWFuL2NvcHlyaWdodCAgICAgfCAgMTgg KysKIHByb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9kZWJjYXJnby50b21sIHwgICA3ICsKIHBy b3htb3gtZml4ZWQtc3RyaW5nL3NyYy9saWIucnMgICAgICAgICAgIHwgMjc0ICsrKysrKysrKysr KysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMzU0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBwcm94bW94LWZpeGVkLXN0cmluZy9DYXJnby50b21sCiBjcmVhdGUgbW9kZSAx MDA2NDQgcHJveG1veC1maXhlZC1zdHJpbmcvZGViaWFuL2NoYW5nZWxvZwogY3JlYXRlIG1vZGUg MTAwNjQ0IHByb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9jb250cm9sCiBjcmVhdGUgbW9kZSAx MDA2NDQgcHJveG1veC1maXhlZC1zdHJpbmcvZGViaWFuL2NvcHlyaWdodAogY3JlYXRlIG1vZGUg MTAwNjQ0IHByb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9kZWJjYXJnby50b21sCiBjcmVhdGUg bW9kZSAxMDA2NDQgcHJveG1veC1maXhlZC1zdHJpbmcvc3JjL2xpYi5ycwoKZGlmZiAtLWdpdCBh L0NhcmdvLnRvbWwgYi9DYXJnby50b21sCmluZGV4IGI0NjkxYTJkLi5jMDc3OTVmMyAxMDA2NDQK LS0tIGEvQ2FyZ28udG9tbAorKysgYi9DYXJnby50b21sCkBAIC0xNSw2ICsxNSw3IEBAIG1lbWJl cnMgPSBbCiAgICAgInByb3htb3gtY29uZmlnLWRpZ2VzdCIsCiAgICAgInByb3htb3gtZGFlbW9u IiwKICAgICAicHJveG1veC1kbnMtYXBpIiwKKyAgICAicHJveG1veC1maXhlZC1zdHJpbmciLAog ICAgICJwcm94bW94LWh0dHAiLAogICAgICJwcm94bW94LWh0dHAtZXJyb3IiLAogICAgICJwcm94 bW94LWh1bWFuLWJ5dGUiLApAQCAtMTQ4LDYgKzE0OSw3IEBAIHByb3htb3gtYXN5bmMgPSB7IHZl cnNpb24gPSAiMC41LjAiLCBwYXRoID0gInByb3htb3gtYXN5bmMiIH0KIHByb3htb3gtYmFzZTY0 ID0geyAgdmVyc2lvbiA9ICIxLjAuMCIsIHBhdGggPSAicHJveG1veC1iYXNlNjQiIH0KIHByb3ht b3gtY29tcHJlc3Npb24gPSB7IHZlcnNpb24gPSAiMS4wLjAiLCBwYXRoID0gInByb3htb3gtY29t cHJlc3Npb24iIH0KIHByb3htb3gtZGFlbW9uID0geyB2ZXJzaW9uID0gIjEuMC4wIiwgcGF0aCA9 ICJwcm94bW94LWRhZW1vbiIgfQorcHJveG1veC1maXhlZC1zdHJpbmcgPSB7IHZlcnNpb24gPSAi MC4xLjAiLCBwYXRoID0gInByb3htb3gtZml4ZWQtc3RyaW5nIiB9CiBwcm94bW94LWh0dHAgPSB7 IHZlcnNpb24gPSAiMS4wLjMiLCBwYXRoID0gInByb3htb3gtaHR0cCIgfQogcHJveG1veC1odHRw LWVycm9yID0geyB2ZXJzaW9uID0gIjEuMC4wIiwgcGF0aCA9ICJwcm94bW94LWh0dHAtZXJyb3Ii IH0KIHByb3htb3gtaHVtYW4tYnl0ZSA9IHsgdmVyc2lvbiA9ICIxLjAuMCIsIHBhdGggPSAicHJv eG1veC1odW1hbi1ieXRlIiB9CmRpZmYgLS1naXQgYS9wcm94bW94LWZpeGVkLXN0cmluZy9DYXJn by50b21sIGIvcHJveG1veC1maXhlZC1zdHJpbmcvQ2FyZ28udG9tbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMC4uMDEyNzNkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9wcm94bW94 LWZpeGVkLXN0cmluZy9DYXJnby50b21sCkBAIC0wLDAgKzEsMTQgQEAKK1twYWNrYWdlXQorbmFt ZSA9ICJwcm94bW94LWZpeGVkLXN0cmluZyIKK3ZlcnNpb24gPSAiMC4xLjAiCithdXRob3JzLndv cmtzcGFjZSA9IHRydWUKK2VkaXRpb24ud29ya3NwYWNlID0gdHJ1ZQorbGljZW5zZS53b3Jrc3Bh Y2UgPSB0cnVlCityZXBvc2l0b3J5LndvcmtzcGFjZSA9IHRydWUKK2hvbWVwYWdlLndvcmtzcGFj ZSA9IHRydWUKK2V4Y2x1ZGUud29ya3NwYWNlID0gdHJ1ZQorcnVzdC12ZXJzaW9uLndvcmtzcGFj ZSA9IHRydWUKKworW2RlcGVuZGVuY2llc10KK3NlcmRlLndvcmtzcGFjZSA9IHRydWUKK3NlcmRl X3BsYWluLndvcmtzcGFjZSA9IHRydWUKZGlmZiAtLWdpdCBhL3Byb3htb3gtZml4ZWQtc3RyaW5n L2RlYmlhbi9jaGFuZ2Vsb2cgYi9wcm94bW94LWZpeGVkLXN0cmluZy9kZWJpYW4vY2hhbmdlbG9n Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iYTFiNTZiNQotLS0gL2Rldi9u dWxsCisrKyBiL3Byb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9jaGFuZ2Vsb2cKQEAgLTAsMCAr MSw1IEBACitydXN0LXByb3htb3gtZml4ZWQtc3RyaW5nICgwLjEuMCkgdHJpeGllOyB1cmdlbmN5 PW1lZGl1bQorCisgICogSW5pdGlhbCByZWxlYXNlLgorCisgLS0gUHJveG1veCBTdXBwb3J0IFRl YW0gPHN1cHBvcnRAcHJveG1veC5jb20+ICBUaHUsIDIwIE5vdiAyMDI1IDEzOjA5OjE0ICswMTAw CmRpZmYgLS1naXQgYS9wcm94bW94LWZpeGVkLXN0cmluZy9kZWJpYW4vY29udHJvbCBiL3Byb3ht b3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi45OWE3NTRiNgotLS0gL2Rldi9udWxsCisrKyBiL3Byb3htb3gtZml4ZWQtc3Ry aW5nL2RlYmlhbi9jb250cm9sCkBAIC0wLDAgKzEsMzQgQEAKK1NvdXJjZTogcnVzdC1wcm94bW94 LWZpeGVkLXN0cmluZworU2VjdGlvbjogcnVzdAorUHJpb3JpdHk6IG9wdGlvbmFsCitCdWlsZC1E ZXBlbmRzOiBkZWJoZWxwZXItY29tcGF0ICg9IDEzKSwKKyBkaC1zZXF1ZW5jZS1jYXJnbworQnVp bGQtRGVwZW5kcy1BcmNoOiBjYXJnbzpuYXRpdmUgPCFub2NoZWNrPiwKKyBydXN0YzpuYXRpdmUg KD49IDEuODIpIDwhbm9jaGVjaz4sCisgbGlic3RkLXJ1c3QtZGV2IDwhbm9jaGVjaz4sCisgbGli cnVzdC1zZXJkZS0xK2RlZmF1bHQtZGV2IDwhbm9jaGVjaz4sCisgbGlicnVzdC1zZXJkZS1wbGFp bi0xK2RlZmF1bHQtZGV2IDwhbm9jaGVjaz4KK01haW50YWluZXI6IFByb3htb3ggU3VwcG9ydCBU ZWFtIDxzdXBwb3J0QHByb3htb3guY29tPgorU3RhbmRhcmRzLVZlcnNpb246IDQuNy4yCitWY3Mt R2l0OiBnaXQ6Ly9naXQucHJveG1veC5jb20vZ2l0L3Byb3htb3guZ2l0CitWY3MtQnJvd3Nlcjog aHR0cHM6Ly9naXQucHJveG1veC5jb20vP3A9cHJveG1veC5naXQKK0hvbWVwYWdlOiBodHRwczov L3Byb3htb3guY29tCitYLUNhcmdvLUNyYXRlOiBwcm94bW94LWZpeGVkLXN0cmluZworCitQYWNr YWdlOiBsaWJydXN0LXByb3htb3gtZml4ZWQtc3RyaW5nLWRldgorQXJjaGl0ZWN0dXJlOiBhbnkK K011bHRpLUFyY2g6IHNhbWUKK0RlcGVuZHM6CisgJHttaXNjOkRlcGVuZHN9LAorIGxpYnJ1c3Qt c2VyZGUtMStkZWZhdWx0LWRldiwKKyBsaWJydXN0LXNlcmRlLXBsYWluLTErZGVmYXVsdC1kZXYK K1Byb3ZpZGVzOgorIGxpYnJ1c3QtcHJveG1veC1maXhlZC1zdHJpbmcrZGVmYXVsdC1kZXYgKD0g JHtiaW5hcnk6VmVyc2lvbn0pLAorIGxpYnJ1c3QtcHJveG1veC1maXhlZC1zdHJpbmctMC1kZXYg KD0gJHtiaW5hcnk6VmVyc2lvbn0pLAorIGxpYnJ1c3QtcHJveG1veC1maXhlZC1zdHJpbmctMCtk ZWZhdWx0LWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSksCisgbGlicnVzdC1wcm94bW94LWZpeGVk LXN0cmluZy0wLjEtZGV2ICg9ICR7YmluYXJ5OlZlcnNpb259KSwKKyBsaWJydXN0LXByb3htb3gt Zml4ZWQtc3RyaW5nLTAuMStkZWZhdWx0LWRldiAoPSAke2JpbmFyeTpWZXJzaW9ufSksCisgbGli cnVzdC1wcm94bW94LWZpeGVkLXN0cmluZy0wLjEuMC1kZXYgKD0gJHtiaW5hcnk6VmVyc2lvbn0p LAorIGxpYnJ1c3QtcHJveG1veC1maXhlZC1zdHJpbmctMC4xLjArZGVmYXVsdC1kZXYgKD0gJHti aW5hcnk6VmVyc2lvbn0pCitEZXNjcmlwdGlvbjogUnVzdCBjcmF0ZSAicHJveG1veC1maXhlZC1z dHJpbmciIC0gUnVzdCBzb3VyY2UgY29kZQorIFNvdXJjZSBjb2RlIGZvciBEZWJpYW5pemVkIFJ1 c3QgY3JhdGUgInByb3htb3gtZml4ZWQtc3RyaW5nIgpkaWZmIC0tZ2l0IGEvcHJveG1veC1maXhl ZC1zdHJpbmcvZGViaWFuL2NvcHlyaWdodCBiL3Byb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9j b3B5cmlnaHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjFlYThhNTZiCi0t LSAvZGV2L251bGwKKysrIGIvcHJveG1veC1maXhlZC1zdHJpbmcvZGViaWFuL2NvcHlyaWdodApA QCAtMCwwICsxLDE4IEBACitGb3JtYXQ6IGh0dHBzOi8vd3d3LmRlYmlhbi5vcmcvZG9jL3BhY2th Z2luZy1tYW51YWxzL2NvcHlyaWdodC1mb3JtYXQvMS4wLworCitGaWxlczoKKyAqCitDb3B5cmln aHQ6IDIwMTkgLSAyMDI1IFByb3htb3ggU2VydmVyIFNvbHV0aW9ucyBHbWJIIDxzdXBwb3J0QHBy b3htb3guY29tPgorTGljZW5zZTogQUdQTC0zLjAtb3ItbGF0ZXIKKyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1 bmRlcgorIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgbGF0ZXIg dmVyc2lvbi4KKyAuCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MK KyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlCisgZGV0YWlscy4KKyAuCisgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFs b25nCisgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9wcm94bW94LWZpeGVkLXN0cmluZy9kZWJpYW4vZGVi Y2FyZ28udG9tbCBiL3Byb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9kZWJjYXJnby50b21sCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iNzg2NGNkYgotLS0gL2Rldi9udWxs CisrKyBiL3Byb3htb3gtZml4ZWQtc3RyaW5nL2RlYmlhbi9kZWJjYXJnby50b21sCkBAIC0wLDAg KzEsNyBAQAorb3ZlcmxheSA9ICIuIgorY3JhdGVfc3JjX3BhdGggPSAiLi4iCittYWludGFpbmVy ID0gIlByb3htb3ggU3VwcG9ydCBUZWFtIDxzdXBwb3J0QHByb3htb3guY29tPiIKKworW3NvdXJj ZV0KK3Zjc19naXQgPSAiZ2l0Oi8vZ2l0LnByb3htb3guY29tL2dpdC9wcm94bW94LmdpdCIKK3Zj c19icm93c2VyID0gImh0dHBzOi8vZ2l0LnByb3htb3guY29tLz9wPXByb3htb3guZ2l0IgpkaWZm IC0tZ2l0IGEvcHJveG1veC1maXhlZC1zdHJpbmcvc3JjL2xpYi5ycyBiL3Byb3htb3gtZml4ZWQt c3RyaW5nL3NyYy9saWIucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmU3 MGUxMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvcHJveG1veC1maXhlZC1zdHJpbmcvc3JjL2xpYi5y cwpAQCAtMCwwICsxLDI3NCBAQAordXNlIHN0ZDo6Ym9ycm93OjpCb3Jyb3c7Cit1c2Ugc3RkOjpj bXA6Ok9yZGVyaW5nOwordXNlIHN0ZDo6ZXJyb3I6OkVycm9yOwordXNlIHN0ZDo6Zm10OwordXNl IHN0ZDo6b3BzOjpEZXJlZjsKK3VzZSBzdGQ6OnN0cjo6RnJvbVN0cjsKKwordXNlIHNlcmRlOjp7 RGVzZXJpYWxpemUsIFNlcmlhbGl6ZX07CisKKy8vLyBFcnJvciB0eXBlIHVzZWQgYnkgY29uc3Ry dWN0b3JzIG9mIFtgRml4ZWRTdHJpbmdgXQorI1tkZXJpdmUoQ2xvbmUsIENvcHksIERlYnVnKV0K K3B1YiBzdHJ1Y3QgVG9vTG9uZ0Vycm9yOworCitpbXBsIEVycm9yIGZvciBUb29Mb25nRXJyb3Ig e30KKworaW1wbCBmbXQ6OkRpc3BsYXkgZm9yIFRvb0xvbmdFcnJvciB7CisgICAgZm4gZm10KCZz ZWxmLCBmOiAmbXV0IGZtdDo6Rm9ybWF0dGVyPCdfPikgLT4gUmVzdWx0PCgpLCBmbXQ6OkVycm9y PiB7CisgICAgICAgIGYud3JpdGVfc3RyKCJzdHJpbmcgaXMgbG9uZ2VyIHRoYW4gMjMgY2hhcmFj dGVycyIpCisgICAgfQorfQorCisvLy8gQW4gaW1tdXRhYmxlIHN0cmluZyB0eXBlIHdpdGggYSBt YXhpbXVtIHNpemUgb2YgMjMgYnl0ZXMuCisvLy8KKy8vLyBBZnRlciBjb25zdHJ1Y3Rpb24gaXQg aXMgZ3VhcmFudGVlZCB0aGF0IGl0cyBjb250ZW50cyBhcmU6CisvLy8gKiB2YWxpZCB1dGYtOAor Ly8vICogbm90IGxvbmdlciB0aGFuIDIzIGNoYXJhY3RlcnMKKy8vLworLy8vIEZpeGVkU3RyaW5n IGlzIGltbXV0YWJsZSwgdGhlcmVmb3JlIGl0IGlzIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhl IGludmFyaWFudHMgb25seSBhdAorLy8vIGNvbnN0cnVjdGlvbiB0aW1lIHRvIGd1YXJhbnRlZSB0 aGF0IHRoZXkgd2lsbCBhbHdheXMgaG9sZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUKKy8v LyBzdHJ1Y3QuCisjW2Rlcml2ZShDbG9uZSwgQ29weSldCitwdWIgc3RydWN0IEZpeGVkU3RyaW5n IHsKKyAgICBidWY6IFt1ODsgMjNdLAorICAgIGxlbjogdTgsCit9CisKK2ltcGwgRml4ZWRTdHJp bmcgeworICAgIC8vLyBDcmVhdGVzIGEgbmV3IEZpeGVkU3RyaW5nIGluc3RhbmNlIGZyb20gYSBz dHIgcmVmZXJlbmNlLgorICAgIC8vLworICAgIC8vLyAjIEVycm9ycworICAgIC8vLyBUaGlzIGZ1 bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVycm9yIGlmOgorICAgIC8vLyAqIFRoZSBwYXNzZWQgc3Ry aW5nIGlzIGxvbmdlciB0aGFuIDIzIGJ5dGVzCisgICAgcHViIGZuIG5ldyh2YWx1ZTogJnN0cikg LT4gUmVzdWx0PFNlbGYsIFRvb0xvbmdFcnJvcj4geworICAgICAgICBpZiB2YWx1ZS5sZW4oKSA+ IDIzIHsKKyAgICAgICAgICAgIHJldHVybiBFcnIoVG9vTG9uZ0Vycm9yKTsKKyAgICAgICAgfQor CisgICAgICAgIGxldCBtdXQgYnVmID0gWzA7IDIzXTsKKyAgICAgICAgYnVmWy4udmFsdWUubGVu KCldLmNvcHlfZnJvbV9zbGljZSh2YWx1ZS5hc19ieXRlcygpKTsKKworICAgICAgICBPayhTZWxm IHsKKyAgICAgICAgICAgIGJ1ZiwKKyAgICAgICAgICAgIC8vIFNBRkVUWTogc2VsZi5sZW4gaXMg YXQgbGVhc3QgMCBhbmQgYXQgbW9zdCAyMywgd2hpY2ggZml0cyBpbnRvIHU4CisgICAgICAgICAg ICBsZW46IHZhbHVlLmxlbigpIGFzIHU4LAorICAgICAgICB9KQorICAgIH0KKworICAgIC8vLyBS ZXR1cm5zIGEgc3RyIHJlZmVyZW5jZSB0byB0aGUgc3RvcmVkIGRhdGEKKyAgICAjW2lubGluZV0K KyAgICBwdWIgZm4gYXNfc3RyKCZzZWxmKSAtPiAmc3RyIHsKKyAgICAgICAgLy8gU0FGRVRZOiBz ZWxmLmJ1ZiBtdXN0IGJlIGEgdmFsaWQgdXRmLTggc3RyaW5nIGJ5IGNvbnN0cnVjdGlvbgorICAg ICAgICB1bnNhZmUgeyBzdHI6OmZyb21fdXRmOF91bmNoZWNrZWQoc2VsZi5hc19ieXRlcygpKSB9 CisgICAgfQorCisgICAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHNldCBieXRlcyBp biB0aGUgc3RvcmVkIGJ1ZmZlcgorICAgICNbaW5saW5lXQorICAgIHB1YiBmbiBhc19ieXRlcygm c2VsZikgLT4gJlt1OF0geworICAgICAgICAvLyBTQUZFVFk6IHNlbGYubGVuID49IDAgYW5kIHNl bGYubGVuIDw9IDIzIGJ5IGNvbnN0cnVjdGlvbgorICAgICAgICB1bnNhZmUgeyBzZWxmLmJ1Zi5n ZXRfdW5jaGVja2VkKC4uc2VsZi5sZW4gYXMgdXNpemUpIH0KKyAgICB9Cit9CisKK21hY3JvX3J1 bGVzISBmb3J3YXJkX2ltcGxfdG9fYnl0ZXMgeworICAgICgkKCR0cmFpdDppZGVudCB7JGZuOmlk ZW50IC0+ICRvdXQ6dHkgfSkrKSA9PiB7CisgICAgICAgICQoCisgICAgICAgICAgICBpbXBsICR0 cmFpdCBmb3IgRml4ZWRTdHJpbmcgeworICAgICAgICAgICAgICAgICNbaW5saW5lXQorICAgICAg ICAgICAgICAgIGZuICRmbigmc2VsZiwgb3RoZXI6ICZTZWxmKSAtPiAkb3V0IHsKKyAgICAgICAg ICAgICAgICAgICAgPFt1OF0gYXMgJHRyYWl0Pjo6JGZuKHNlbGYuYXNfYnl0ZXMoKSwgb3RoZXIu YXNfYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICkr CisgICAgfTsKK30KKworZm9yd2FyZF9pbXBsX3RvX2J5dGVzISB7CisgICAgUGFydGlhbEVxIHsg ZXEgLT4gYm9vbCB9CisgICAgUGFydGlhbE9yZCB7IHBhcnRpYWxfY21wIC0+IE9wdGlvbjxPcmRl cmluZz4gfQorICAgIE9yZCB7IGNtcCAtPiBPcmRlcmluZyB9Cit9CisKK21hY3JvX3J1bGVzISBm b3J3YXJkX2ltcGxfdG9fc3RyX2JpZGlyIHsKKyAgICAoJCgkdHJhaXQ6aWRlbnQgeyRmbjppZGVu dCAtPiAkb3V0OnR5IH0pKykgPT4geworICAgICAgICAkKAorICAgICAgICAgICAgaW1wbCAkdHJh aXQ8c3RyPiBmb3IgRml4ZWRTdHJpbmcgeworICAgICAgICAgICAgICAgICNbaW5saW5lXQorICAg ICAgICAgICAgICAgIGZuICRmbigmc2VsZiwgb3RoZXI6ICZzdHIpIC0+ICRvdXQgeworICAgICAg ICAgICAgICAgICAgICA8c3RyIGFzICR0cmFpdD46OiRmbihzZWxmLmFzX3N0cigpLCBvdGhlcikK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGltcGwgJHRy YWl0PEZpeGVkU3RyaW5nPiBmb3IgJnN0ciB7CisgICAgICAgICAgICAgICAgI1tpbmxpbmVdCisg ICAgICAgICAgICAgICAgZm4gJGZuKCZzZWxmLCBvdGhlcjogJkZpeGVkU3RyaW5nKSAtPiAkb3V0 IHsKKyAgICAgICAgICAgICAgICAgICAgPHN0ciBhcyAkdHJhaXQ+OjokZm4oc2VsZiwgb3RoZXIu YXNfc3RyKCkpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICApKwor ICAgIH07Cit9CisKK2ZvcndhcmRfaW1wbF90b19zdHJfYmlkaXIhIHsKKyAgICBQYXJ0aWFsRXEg eyBlcSAtPiBib29sIH0KKyAgICBQYXJ0aWFsT3JkIHsgcGFydGlhbF9jbXAgLT4gT3B0aW9uPE9y ZGVyaW5nPiB9Cit9CisKK2ltcGwgRXEgZm9yIEZpeGVkU3RyaW5nIHt9CisKK2ltcGwgZm10OjpE aXNwbGF5IGZvciBGaXhlZFN0cmluZyB7CisgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IGZtdDo6 Rm9ybWF0dGVyPCdfPikgLT4gUmVzdWx0PCgpLCBmbXQ6OkVycm9yPiB7CisgICAgICAgIGZtdDo6 RGlzcGxheTo6Zm10KHNlbGYuYXNfc3RyKCksIGYpCisgICAgfQorfQorCitpbXBsIGZtdDo6RGVi dWcgZm9yIEZpeGVkU3RyaW5nIHsKKyAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgZm10OjpGb3Jt YXR0ZXI8J18+KSAtPiBSZXN1bHQ8KCksIGZtdDo6RXJyb3I+IHsKKyAgICAgICAgZm10OjpEaXNw bGF5OjpmbXQoc2VsZi5hc19zdHIoKSwgZikKKyAgICB9Cit9CisKK2ltcGwgRGVyZWYgZm9yIEZp eGVkU3RyaW5nIHsKKyAgICB0eXBlIFRhcmdldCA9IHN0cjsKKworICAgIGZuIGRlcmVmKCZzZWxm KSAtPiAmc3RyIHsKKyAgICAgICAgc2VsZi5hc19zdHIoKQorICAgIH0KK30KKworaW1wbCBBc1Jl ZjxzdHI+IGZvciBGaXhlZFN0cmluZyB7CisgICAgZm4gYXNfcmVmKCZzZWxmKSAtPiAmc3RyIHsK KyAgICAgICAgc2VsZi5hc19zdHIoKQorICAgIH0KK30KKworaW1wbCBBc1JlZjxbdThdPiBmb3Ig Rml4ZWRTdHJpbmcgeworICAgIGZuIGFzX3JlZigmc2VsZikgLT4gJlt1OF0geworICAgICAgICBz ZWxmLmFzX2J5dGVzKCkKKyAgICB9Cit9CisKK2ltcGwgQm9ycm93PHN0cj4gZm9yIEZpeGVkU3Ry aW5nIHsKKyAgICBmbiBib3Jyb3coJnNlbGYpIC0+ICZzdHIgeworICAgICAgICBzZWxmLmFzX3N0 cigpCisgICAgfQorfQorCitpbXBsIFRyeUZyb208U3RyaW5nPiBmb3IgRml4ZWRTdHJpbmcgewor ICAgIHR5cGUgRXJyb3IgPSBUb29Mb25nRXJyb3I7CisKKyAgICBmbiB0cnlfZnJvbSh2YWx1ZTog U3RyaW5nKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJyb3I+IHsKKyAgICAgICAgRml4ZWRTdHJp bmc6Om5ldyh2YWx1ZS5hc19zdHIoKSkKKyAgICB9Cit9CisKK2ltcGwgRnJvbVN0ciBmb3IgRml4 ZWRTdHJpbmcgeworICAgIHR5cGUgRXJyID0gVG9vTG9uZ0Vycm9yOworCisgICAgZm4gZnJvbV9z dHIodmFsdWU6ICZzdHIpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKKyAgICAgICAgRml4 ZWRTdHJpbmc6Om5ldyh2YWx1ZSkKKyAgICB9Cit9CisKK2ltcGwgVHJ5RnJvbTwmc3RyPiBmb3Ig Rml4ZWRTdHJpbmcgeworICAgIHR5cGUgRXJyb3IgPSBUb29Mb25nRXJyb3I7CisKKyAgICBmbiB0 cnlfZnJvbSh2YWx1ZTogJnN0cikgLT4gUmVzdWx0PFNlbGYsIFNlbGY6OkVycm9yPiB7CisgICAg ICAgIEZpeGVkU3RyaW5nOjpuZXcodmFsdWUpCisgICAgfQorfQorCitpbXBsIFNlcmlhbGl6ZSBm b3IgRml4ZWRTdHJpbmcgeworICAgIGZuIHNlcmlhbGl6ZTxTPigmc2VsZiwgc2VyaWFsaXplcjog UykgLT4gUmVzdWx0PFM6Ok9rLCBTOjpFcnJvcj4KKyAgICB3aGVyZQorICAgICAgICBTOiBzZXJk ZTo6U2VyaWFsaXplciwKKyAgICB7CisgICAgICAgIHNlcmlhbGl6ZXIuc2VyaWFsaXplX3N0cihz ZWxmLmFzX3N0cigpKQorICAgIH0KK30KKworaW1wbDwnZGU+IERlc2VyaWFsaXplPCdkZT4gZm9y IEZpeGVkU3RyaW5nIHsKKyAgICBmbiBkZXNlcmlhbGl6ZTxEPihkZXNlcmlhbGl6ZXI6IEQpIC0+ IFJlc3VsdDxTZWxmLCBEOjpFcnJvcj4KKyAgICB3aGVyZQorICAgICAgICBEOiBzZXJkZTo6RGVz ZXJpYWxpemVyPCdkZT4sCisgICAgeworICAgICAgICBzdHJ1Y3QgRml4ZWRTdHJpbmdWaXNpdG9y OworCisgICAgICAgIGltcGw8J2RlPiBzZXJkZTo6ZGU6OlZpc2l0b3I8J2RlPiBmb3IgRml4ZWRT dHJpbmdWaXNpdG9yIHsKKyAgICAgICAgICAgIHR5cGUgVmFsdWUgPSBGaXhlZFN0cmluZzsKKwor ICAgICAgICAgICAgZm4gZXhwZWN0aW5nKCZzZWxmLCBmOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAt PiBzdGQ6OmZtdDo6UmVzdWx0IHsKKyAgICAgICAgICAgICAgICBmLndyaXRlX3N0cigiYSBzdHJp bmcgdGhhdCBpcyBhdCBtb3N0IDIzIGJ5dGVzIGxvbmciKQorICAgICAgICAgICAgfQorCisgICAg ICAgICAgICBmbiB2aXNpdF9zdHI8RT4oc2VsZiwgdjogJnN0cikgLT4gUmVzdWx0PFNlbGY6OlZh bHVlLCBFPgorICAgICAgICAgICAgd2hlcmUKKyAgICAgICAgICAgICAgICBFOiBzZXJkZTo6ZGU6 OkVycm9yLAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHYudHJ5X2ludG8oKS5tYXBf ZXJyKEU6OmN1c3RvbSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRlc2Vy aWFsaXplci5kZXNlcmlhbGl6ZV9zdHIoRml4ZWRTdHJpbmdWaXNpdG9yKQorICAgIH0KK30KKwor I1tjZmcodGVzdCldCittb2QgdGVzdHMgeworICAgIHVzZSBzdXBlcjo6KjsKKworICAgIHVzZSBz ZXJkZV9wbGFpbjsKKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2NvbnN0cnVjdCgpIHsKKyAg ICAgICAgbGV0IGZpeGVkX3N0cmluZyA9IEZpeGVkU3RyaW5nOjpuZXcoIiIpLmV4cGVjdCgiZW1w dHkgc3RyaW5nIGlzIHZhbGlkIik7CisgICAgICAgIGFzc2VydF9lcSEoIiIsIGZpeGVkX3N0cmlu Zyk7CisKKyAgICAgICAgbGV0IGZpeGVkX3N0cmluZyA9IEZpeGVkU3RyaW5nOjpuZXcoImEiKS5l eHBlY3QoInZhbGlkIHN0cmluZyIpOworICAgICAgICBhc3NlcnRfZXEhKCJhIiwgZml4ZWRfc3Ry aW5nKTsKKworICAgICAgICBsZXQgZml4ZWRfc3RyaW5nID0gRml4ZWRTdHJpbmc6Om5ldygi8J+M j/CfjI/wn4yP8J+Mj/CfjI8iKS5leHBlY3QoInZhbGlkIHN0cmluZyIpOworICAgICAgICBhc3Nl cnRfZXEhKCLwn4yP8J+Mj/CfjI/wn4yP8J+MjyIsIGZpeGVkX3N0cmluZyk7CisKKyAgICAgICAg bGV0IGZpeGVkX3N0cmluZyA9CisgICAgICAgICAgICBGaXhlZFN0cmluZzo6bmV3KCJhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYSIpLmV4cGVjdCgiMjMgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCIpOwor ICAgICAgICBhc3NlcnRfZXEhKCJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIsIGZpeGVkX3N0cmlu Zyk7CisKKyAgICAgICAgRml4ZWRTdHJpbmc6Om5ldygi8J+Mj/CfjI/wn4yP8J+Mj/CfjI/wn4yP IikuZXhwZWN0X2Vycigic3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIEZpeGVkU3RyaW5nOjpu ZXcoImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIpLmV4cGVjdF9lcnIoInN0cmluZyB0b28gbG9u ZyIpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3NlcmlhbGl6ZV9kZXNlcmlh bGl6ZSgpIHsKKyAgICAgICAgbGV0IHZhbGlkX3N0cmluZyA9ICJhYWFhYWFhYWFhYWFhYWFhYWFh YWFhYSI7CisKKyAgICAgICAgbGV0IGZpeGVkX3N0cmluZzogRml4ZWRTdHJpbmcgPQorICAgICAg ICAgICAgc2VyZGVfcGxhaW46OmZyb21fc3RyKCJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIpLmV4 cGVjdCgiZGVzZXJpYWxpemF0aW9uIHdvcmtzIik7CisgICAgICAgIGFzc2VydF9lcSEodmFsaWRf c3RyaW5nLCBmaXhlZF9zdHJpbmcpOworCisgICAgICAgIGxldCBzZXJpYWxpemVkX3N0cmluZyA9 CisgICAgICAgICAgICBzZXJkZV9wbGFpbjo6dG9fc3RyaW5nKCZmaXhlZF9zdHJpbmcpLmV4cGVj dCgiY2FuIGJlIHNlcmlhbGl6ZWQgaW50byBhIHN0cmluZyIpOworICAgICAgICBhc3NlcnRfZXEh KHZhbGlkX3N0cmluZywgc2VyaWFsaXplZF9zdHJpbmcpOworCisgICAgICAgIHNlcmRlX3BsYWlu Ojpmcm9tX3N0cjo6PEZpeGVkU3RyaW5nPigiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIikKKyAg ICAgICAgICAgIC5leHBlY3RfZXJyKCJjYW5ub3QgZGVzZXJpYWxpemUgc3RyaW5nIHRoYXQgaXMg dG9vIGxvbmciKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9vcmQoKSB7Cisg ICAgICAgIGxldCBmaXhlZF9zdHJpbmcgPSBGaXhlZFN0cmluZzo6bmV3KCJhYmMiKS5leHBlY3Qo InZhbGlkIHN0cmluZyIpOworCisgICAgICAgIGFzc2VydCEoZml4ZWRfc3RyaW5nID09IGZpeGVk X3N0cmluZyk7CisgICAgICAgIGFzc2VydCEoZml4ZWRfc3RyaW5nID49IGZpeGVkX3N0cmluZyk7 CisgICAgICAgIGFzc2VydCEoZml4ZWRfc3RyaW5nIDw9IGZpeGVkX3N0cmluZyk7CisKKyAgICAg ICAgYXNzZXJ0ISgiYWIiIDwgZml4ZWRfc3RyaW5nKTsKKyAgICAgICAgYXNzZXJ0ISgiYWJjIiA9 PSBmaXhlZF9zdHJpbmcpOworICAgICAgICBhc3NlcnQhKCJhYmNkIiA+IGZpeGVkX3N0cmluZyk7 CisKKyAgICAgICAgbGV0IGxhcmdlcl9maXhlZF9zdHJpbmcgPSBGaXhlZFN0cmluZzo6bmV3KCJh YmNkZSIpLmV4cGVjdCgidmFsaWQgc3RyaW5nIik7CisKKyAgICAgICAgYXNzZXJ0IShsYXJnZXJf Zml4ZWRfc3RyaW5nID4gZml4ZWRfc3RyaW5nKTsKKyAgICAgICAgYXNzZXJ0IShmaXhlZF9zdHJp bmcgPCBsYXJnZXJfZml4ZWRfc3RyaW5nKTsKKyAgICB9Cit9Ci0tIAoyLjQ3LjMKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpwYnMtZGV2ZWwgbWFpbGlu ZyBsaXN0CnBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3gu Y29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wYnMtZGV2ZWwK