From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 5EF001FF187 for ; Fri, 2 Jan 2026 17:07:09 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A0A53E884; Fri, 2 Jan 2026 17:08:16 +0100 (CET) From: Samuel Rufinatscha To: pbs-devel@lists.proxmox.com Date: Fri, 2 Jan 2026 17:07:41 +0100 Message-ID: <20260102160750.285157-3-s.rufinatscha@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260102160750.285157-1-s.rufinatscha@proxmox.com> References: <20260102160750.285157-1-s.rufinatscha@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1767370060478 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.095 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 POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes 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: [pbs-devel] [PATCH proxmox-backup v3 2/4] pbs-config: cache verified API token secrets 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" Q3VycmVudGx5LCBldmVyeSB0b2tlbi1iYXNlZCBBUEkgcmVxdWVzdCByZWFkcyB0aGUgdG9rZW4u c2hhZG93IGZpbGUgYW5kCnJ1bnMgdGhlIGV4cGVuc2l2ZSBwYXNzd29yZCBoYXNoIHZlcmlmaWNh dGlvbiBmb3IgdGhlIGdpdmVuIHRva2VuCnNlY3JldC4gVGhpcyBzaG93cyB1cCBhcyBhIGhvdHNw b3QgaW4gL3N0YXR1cyBwcm9maWxpbmcgKHNlZQpidWcgIzcwMTcgWzFdKS4KClRoaXMgcGF0Y2gg aW50cm9kdWNlcyBhbiBpbi1tZW1vcnkgY2FjaGUgb2Ygc3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIHRv a2VuCnNlY3JldHMuIFN1YnNlcXVlbnQgcmVxdWVzdHMgZm9yIHRoZSBzYW1lIHRva2VuK3NlY3Jl dCBjb21iaW5hdGlvbiBvbmx5CnBlcmZvcm0gYSBjb21wYXJpc29uIHVzaW5nIG9wZW5zc2w6Om1l bWNtcDo6ZXEgYW5kIGF2b2lkIHJlLXJ1bm5pbmcgdGhlCnBhc3N3b3JkIGhhc2guIFRoZSBjYWNo ZSBpcyB1cGRhdGVkIHdoZW4gYSB0b2tlbiBzZWNyZXQgaXMgc2V0IGFuZApjbGVhcmVkIHdoZW4g YSB0b2tlbiBpcyBkZWxldGVkLiBOb3RlLCB0aGlzIGRvZXMgTk9UIGluY2x1ZGUgbWFudWFsCmNv bmZpZyBjaGFuZ2VzLCB3aGljaCB3aWxsIGJlIGNvdmVyZWQgaW4gYSBzdWJzZXF1ZW50IHBhdGNo LgoKVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHRoZSBzZXJpZXMgd2hpY2ggZml4ZXMgYnVnICM3MDE3 IFsxXS4KClsxXSBodHRwczovL2J1Z3ppbGxhLnByb3htb3guY29tL3Nob3dfYnVnLmNnaT9pZD03 MDE3CgpTaWduZWQtb2ZmLWJ5OiBTYW11ZWwgUnVmaW5hdHNjaGEgPHMucnVmaW5hdHNjaGFAcHJv eG1veC5jb20+Ci0tLQpDaGFuZ2VzIGZyb20gdjEgdG8gdjI6CgoqIFJlcGxhY2UgT25jZUNlbGwg d2l0aCBMYXp5TG9jaywgYW5kIHN0ZDo6c3luYzo6UndMb2NrIHdpdGgKcGFya2luZ19sb3Q6OlJ3 TG9jay4KKiBBZGQgQVBJX01VVEFUSU9OX0dFTkVSQVRJT04gYW5kIGd1YXJkIGNhY2hlIGluc2Vy dHMKdG8gcHJldmVudCDigJx6b21iaWUgaW5zZXJ0c+KAnSBhY3Jvc3MgY29uY3VycmVudCBzZXQv ZGVsZXRlLgoqIFJlZmFjdG9yIGNhY2hlIG9wZXJhdGlvbnMgaW50byBjYWNoZV90cnlfc2VjcmV0 X21hdGNoZXMsCmNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0LCBhbmQgY2VudHJhbGl6ZSB3cml0ZS1z aWRlIGJlaGF2aW9yIGluCmFwcGx5X2FwaV9tdXRhdGlvbi4KKiBTd2l0Y2ggZmFzdC1wYXRoIGNh Y2hlIGFjY2VzcyB0byB0cnlfcmVhZC90cnlfd3JpdGUgKGJlc3QtZWZmb3J0KS4KCkNoYW5nZXMg ZnJvbSB2MiB0byB2MzoKCiogUmVwbGFjZWQgcHJvY2Vzcy1sb2NhbCBjYWNoZSBpbnZhbGlkYXRp b24gKEF0b21pY1U2NApBUElfTVVUQVRJT05fR0VORVJBVElPTikgd2l0aCBhIGNyb3NzLXByb2Nl c3Mgc2hhcmVkIGdlbmVyYXRpb24gdmlhCkNvbmZpZ1ZlcnNpb25DYWNoZS4KKiBWYWxpZGF0ZSBz aGFyZWQgZ2VuZXJhdGlvbiBiZWZvcmUvYWZ0ZXIgdGhlIGNvbnN0YW50LXRpbWUgc2VjcmV0CmNv bXBhcmU7IG9ubHkgaW5zZXJ0IGludG8gY2FjaGUgaWYgdGhlIGdlbmVyYXRpb24gaXMgdW5jaGFu Z2VkLgoqIGludmFsaWRhdGVfY2FjaGVfc3RhdGUoKSBvbiBpbnNlcnQgaWYgc2hhcmVkIGdlbmVy YXRpb24gY2hhbmdlZC4KCiBDYXJnby50b21sICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog cGJzLWNvbmZpZy9DYXJnby50b21sICAgICAgICAgIHwgICAxICsKIHBicy1jb25maWcvc3JjL3Rv a2VuX3NoYWRvdy5ycyB8IDE1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDMg ZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1n aXQgYS9DYXJnby50b21sIGIvQ2FyZ28udG9tbAppbmRleCAxYWE1N2FlNS4uODIxYjYzYjcgMTAw NjQ0Ci0tLSBhL0NhcmdvLnRvbWwKKysrIGIvQ2FyZ28udG9tbApAQCAtMTQzLDYgKzE0Myw3IEBA IG5vbSA9ICI3IgogbnVtLXRyYWl0cyA9ICIwLjIiCiBvbmNlX2NlbGwgPSAiMS4zLjEiCiBvcGVu c3NsID0gIjAuMTAuNDAiCitwYXJraW5nX2xvdCA9ICIwLjEyIgogcGVyY2VudC1lbmNvZGluZyA9 ICIyLjEiCiBwaW4tcHJvamVjdC1saXRlID0gIjAuMiIKIHJlZ2V4ID0gIjEuNS41IgpkaWZmIC0t Z2l0IGEvcGJzLWNvbmZpZy9DYXJnby50b21sIGIvcGJzLWNvbmZpZy9DYXJnby50b21sCmluZGV4 IDc0YWZiM2M2Li5lYjgxY2UwMCAxMDA2NDQKLS0tIGEvcGJzLWNvbmZpZy9DYXJnby50b21sCisr KyBiL3Bicy1jb25maWcvQ2FyZ28udG9tbApAQCAtMTMsNiArMTMsNyBAQCBsaWJjLndvcmtzcGFj ZSA9IHRydWUKIG5peC53b3Jrc3BhY2UgPSB0cnVlCiBvbmNlX2NlbGwud29ya3NwYWNlID0gdHJ1 ZQogb3BlbnNzbC53b3Jrc3BhY2UgPSB0cnVlCitwYXJraW5nX2xvdC53b3Jrc3BhY2UgPSB0cnVl CiByZWdleC53b3Jrc3BhY2UgPSB0cnVlCiBzZXJkZS53b3Jrc3BhY2UgPSB0cnVlCiBzZXJkZV9q c29uLndvcmtzcGFjZSA9IHRydWUKZGlmZiAtLWdpdCBhL3Bicy1jb25maWcvc3JjL3Rva2VuX3No YWRvdy5ycyBiL3Bicy1jb25maWcvc3JjL3Rva2VuX3NoYWRvdy5ycwppbmRleCA2NDBmYWJiZi4u ZmE4NGFlZTUgMTAwNjQ0Ci0tLSBhL3Bicy1jb25maWcvc3JjL3Rva2VuX3NoYWRvdy5ycworKysg Yi9wYnMtY29uZmlnL3NyYy90b2tlbl9zaGFkb3cucnMKQEAgLTEsNiArMSw4IEBACiB1c2Ugc3Rk Ojpjb2xsZWN0aW9uczo6SGFzaE1hcDsKK3VzZSBzdGQ6OnN5bmM6OkxhenlMb2NrOwogCiB1c2Ug YW55aG93Ojp7YmFpbCwgZm9ybWF0X2VyciwgRXJyb3J9OwordXNlIHBhcmtpbmdfbG90OjpSd0xv Y2s7CiB1c2Ugc2VyZGU6OntEZXNlcmlhbGl6ZSwgU2VyaWFsaXplfTsKIHVzZSBzZXJkZV9qc29u Ojp7ZnJvbV92YWx1ZSwgVmFsdWV9OwogCkBAIC0xMyw2ICsxNSwxOCBAQCB1c2UgY3JhdGU6Ontv cGVuX2JhY2t1cF9sb2NrZmlsZSwgQmFja3VwTG9ja0d1YXJkfTsKIGNvbnN0IExPQ0tfRklMRTog JnN0ciA9IHBic19idWlsZGNmZzo6Y29uZmlnZGlyISgiL3Rva2VuLnNoYWRvdy5sb2NrIik7CiBj b25zdCBDT05GX0ZJTEU6ICZzdHIgPSBwYnNfYnVpbGRjZmc6OmNvbmZpZ2RpciEoIi90b2tlbi5z aGFkb3ciKTsKIAorLy8vIEdsb2JhbCBpbi1tZW1vcnkgY2FjaGUgZm9yIHN1Y2Nlc3NmdWxseSB2 ZXJpZmllZCBBUEkgdG9rZW4gc2VjcmV0cy4KKy8vLyBUaGUgY2FjaGUgc3RvcmVzIHBsYWluIHRl eHQgc2VjcmV0cyBmb3IgdG9rZW4gQXV0aGlkcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCisvLy8g dmVyaWZpZWQgYWdhaW5zdCB0aGUgaGFzaGVkIHZhbHVlcyBpbiBgdG9rZW4uc2hhZG93YC4gVGhp cyBhbGxvd3MgZm9yIGNoZWFwCisvLy8gc3Vic2VxdWVudCBhdXRoZW50aWNhdGlvbnMgZm9yIHRo ZSBzYW1lIHRva2VuK3NlY3JldCBjb21iaW5hdGlvbiwgYXZvaWRpbmcKKy8vLyByZWNvbXB1dGlu ZyB0aGUgcGFzc3dvcmQgaGFzaCBvbiBldmVyeSByZXF1ZXN0Lgorc3RhdGljIFRPS0VOX1NFQ1JF VF9DQUNIRTogTGF6eUxvY2s8UndMb2NrPEFwaVRva2VuU2VjcmV0Q2FjaGU+PiA9IExhenlMb2Nr OjpuZXcofHwgeworICAgIFJ3TG9jazo6bmV3KEFwaVRva2VuU2VjcmV0Q2FjaGUgeworICAgICAg ICBzZWNyZXRzOiBIYXNoTWFwOjpuZXcoKSwKKyAgICAgICAgc2hhcmVkX2dlbjogMCwKKyAgICB9 KQorfSk7CisKICNbZGVyaXZlKFNlcmlhbGl6ZSwgRGVzZXJpYWxpemUpXQogI1tzZXJkZShyZW5h bWVfYWxsID0gImtlYmFiLWNhc2UiKV0KIC8vLyBBcGlUb2tlbiBpZCAvIHNlY3JldCBwYWlyCkBA IC01NCw5ICs2OCwyNyBAQCBwdWIgZm4gdmVyaWZ5X3NlY3JldCh0b2tlbmlkOiAmQXV0aGlkLCBz ZWNyZXQ6ICZzdHIpIC0+IFJlc3VsdDwoKSwgRXJyb3I+IHsKICAgICAgICAgYmFpbCEoIm5vdCBh biBBUEkgdG9rZW4gSUQiKTsKICAgICB9CiAKKyAgICAvLyBGYXN0IHBhdGgKKyAgICBpZiBjYWNo ZV90cnlfc2VjcmV0X21hdGNoZXModG9rZW5pZCwgc2VjcmV0KSB7CisgICAgICAgIHJldHVybiBP aygoKSk7CisgICAgfQorCisgICAgLy8gU2xvdyBwYXRoCisgICAgLy8gRmlyc3QsIGNhcHR1cmUg dGhlIHNoYXJlZCBnZW5lcmF0aW9uIGJlZm9yZSBkb2luZyB0aGUgaGFzaCB2ZXJpZmljYXRpb24u CisgICAgbGV0IGdlbl9iZWZvcmUgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpOworCiAgICAg bGV0IGRhdGEgPSByZWFkX2ZpbGUoKT87CiAgICAgbWF0Y2ggZGF0YS5nZXQodG9rZW5pZCkgewot ICAgICAgICBTb21lKGhhc2hlZF9zZWNyZXQpID0+IHByb3htb3hfc3lzOjpjcnlwdDo6dmVyaWZ5 X2NyeXB0X3B3KHNlY3JldCwgaGFzaGVkX3NlY3JldCksCisgICAgICAgIFNvbWUoaGFzaGVkX3Nl Y3JldCkgPT4geworICAgICAgICAgICAgcHJveG1veF9zeXM6OmNyeXB0Ojp2ZXJpZnlfY3J5cHRf cHcoc2VjcmV0LCBoYXNoZWRfc2VjcmV0KT87CisKKyAgICAgICAgICAgIC8vIFRyeSB0byBjYWNo ZSBvbmx5IGlmIG5vdGhpbmcgY2hhbmdlZCB3aGlsZSB2ZXJpZnlpbmcgdGhlIHNlY3JldC4KKyAg ICAgICAgICAgIGlmIGxldCBTb21lKGdlbikgPSBnZW5fYmVmb3JlIHsKKyAgICAgICAgICAgICAg ICBjYWNoZV90cnlfaW5zZXJ0X3NlY3JldCh0b2tlbmlkLmNsb25lKCksIHNlY3JldC50b19vd25l ZCgpLCBnZW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBPaygoKSkKKyAgICAgICAg fQogICAgICAgICBOb25lID0+IGJhaWwhKCJpbnZhbGlkIEFQSSB0b2tlbiIpLAogICAgIH0KIH0K QEAgLTgyLDYgKzExNCw4IEBAIGZuIHNldF9zZWNyZXQodG9rZW5pZDogJkF1dGhpZCwgc2VjcmV0 OiAmc3RyKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CiAgICAgZGF0YS5pbnNlcnQodG9rZW5pZC5j bG9uZSgpLCBoYXNoZWRfc2VjcmV0KTsKICAgICB3cml0ZV9maWxlKGRhdGEpPzsKIAorICAgIGFw cGx5X2FwaV9tdXRhdGlvbih0b2tlbmlkLCBTb21lKHNlY3JldCkpOworCiAgICAgT2soKCkpCiB9 CiAKQEAgLTk3LDUgKzEzMSwxMjYgQEAgcHViIGZuIGRlbGV0ZV9zZWNyZXQodG9rZW5pZDogJkF1 dGhpZCkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewogICAgIGRhdGEucmVtb3ZlKHRva2VuaWQpOwog ICAgIHdyaXRlX2ZpbGUoZGF0YSk/OwogCisgICAgYXBwbHlfYXBpX211dGF0aW9uKHRva2VuaWQs IE5vbmUpOworCiAgICAgT2soKCkpCiB9CisKK3N0cnVjdCBBcGlUb2tlblNlY3JldENhY2hlIHsK KyAgICAvLy8gS2V5cyBhcmUgdG9rZW4gQXV0aGlkcywgdmFsdWVzIGFyZSB0aGUgY29ycmVzcG9u ZGluZyBwbGFpbiB0ZXh0IHNlY3JldHMuCisgICAgLy8vIEVudHJpZXMgYXJlIGFkZGVkIGFmdGVy IGEgc3VjY2Vzc2Z1bCBvbi1kaXNrIHZlcmlmaWNhdGlvbiBpbgorICAgIC8vLyBgdmVyaWZ5X3Nl Y3JldGAgb3Igd2hlbiBhIG5ldyB0b2tlbiBzZWNyZXQgaXMgZ2VuZXJhdGVkIGJ5CisgICAgLy8v IGBnZW5lcmF0ZV9hbmRfc2V0X3NlY3JldGAuIFVzZWQgdG8gYXZvaWQgcmVwZWF0ZWQKKyAgICAv Ly8gcGFzc3dvcmQtaGFzaCBjb21wdXRhdGlvbiBvbiBzdWJzZXF1ZW50IGF1dGhlbnRpY2F0aW9u cy4KKyAgICBzZWNyZXRzOiBIYXNoTWFwPEF1dGhpZCwgQ2FjaGVkU2VjcmV0PiwKKyAgICAvLy8g U2hhcmVkIGdlbmVyYXRpb24gdG8gZGV0ZWN0IG11dGF0aW9ucyBvZiB0aGUgdW5kZXJseWluZyB0 b2tlbi5zaGFkb3cgZmlsZS4KKyAgICBzaGFyZWRfZ2VuOiB1c2l6ZSwKK30KKworLy8vIENhY2hl ZCBzZWNyZXQuCitzdHJ1Y3QgQ2FjaGVkU2VjcmV0IHsKKyAgICBzZWNyZXQ6IFN0cmluZywKK30K KworZm4gY2FjaGVfdHJ5X2luc2VydF9zZWNyZXQodG9rZW5pZDogQXV0aGlkLCBzZWNyZXQ6IFN0 cmluZywgc2hhcmVkX2dlbl9iZWZvcmU6IHVzaXplKSB7CisgICAgbGV0IFNvbWUobXV0IGNhY2hl KSA9IFRPS0VOX1NFQ1JFVF9DQUNIRS50cnlfd3JpdGUoKSBlbHNlIHsKKyAgICAgICAgcmV0dXJu OworICAgIH07CisKKyAgICBsZXQgU29tZShzaGFyZWRfZ2VuX25vdykgPSB0b2tlbl9zaGFkb3df c2hhcmVkX2dlbigpIGVsc2UgeworICAgICAgICByZXR1cm47CisgICAgfTsKKworICAgIC8vIElm IHRoaXMgcHJvY2VzcyBtaXNzZWQgYSBnZW5lcmF0aW9uIGJ1bXAsIGl0cyBjYWNoZSBpcyBzdGFs ZS4KKyAgICBpZiBjYWNoZS5zaGFyZWRfZ2VuICE9IHNoYXJlZF9nZW5fbm93IHsKKyAgICAgICAg aW52YWxpZGF0ZV9jYWNoZV9zdGF0ZSgmbXV0IGNhY2hlKTsKKyAgICAgICAgY2FjaGUuc2hhcmVk X2dlbiA9IHNoYXJlZF9nZW5fbm93OworICAgIH0KKworICAgIC8vIElmIGEgbXV0YXRpb24gaGFw cGVuZWQgd2hpbGUgd2Ugd2VyZSB2ZXJpZnlpbmcgdGhlIHNlY3JldCwgZG8gbm90IGluc2VydC4K KyAgICBpZiBzaGFyZWRfZ2VuX25vdyA9PSBzaGFyZWRfZ2VuX2JlZm9yZSB7CisgICAgICAgIGNh Y2hlLnNlY3JldHMuaW5zZXJ0KHRva2VuaWQsIENhY2hlZFNlY3JldCB7IHNlY3JldCB9KTsKKyAg ICB9Cit9CisKKy8vIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiB0b2tlbiBzZWNyZXQgYWdhaW5z dCB0aGUgY2FjaGVkIHNlY3JldC4KKy8vIENoZWNrcyB0aGUgZ2VuZXJhdGlvbiBiZWZvcmUgYW5k IGFmdGVyIHRoZSBjb25zdGFudC10aW1lIGNvbXBhcmUgdG8gYXZvaWQgYQorLy8gVE9DVE9VIHdp bmRvdy4gSWYgYW5vdGhlciBwcm9jZXNzIHJvdGF0ZXMvZGVsZXRlcyBhIHRva2VuIHdoaWxlIHdl J3JlIHZhbGlkYXRpbmcKKy8vIHRoZSBjYWNoZWQgc2VjcmV0LCB0aGUgZ2VuZXJhdGlvbiB3aWxs IGNoYW5nZSwgYW5kIHdlCisvLyBtdXN0IG5vdCB0cnVzdCB0aGUgY2FjaGUgZm9yIHRoaXMgcmVx dWVzdC4KK2ZuIGNhY2hlX3RyeV9zZWNyZXRfbWF0Y2hlcyh0b2tlbmlkOiAmQXV0aGlkLCBzZWNy ZXQ6ICZzdHIpIC0+IGJvb2wgeworICAgIGxldCBTb21lKGNhY2hlKSA9IFRPS0VOX1NFQ1JFVF9D QUNIRS50cnlfcmVhZCgpIGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAg ICBsZXQgU29tZShlbnRyeSkgPSBjYWNoZS5zZWNyZXRzLmdldCh0b2tlbmlkKSBlbHNlIHsKKyAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBsZXQgY2FjaGVfZ2VuID0gY2FjaGUu c2hhcmVkX2dlbjsKKworICAgIGxldCBTb21lKGdlbjEpID0gdG9rZW5fc2hhZG93X3NoYXJlZF9n ZW4oKSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgaWYgZ2VuMSAh PSBjYWNoZV9nZW4geworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbGV0IGVx ID0gb3BlbnNzbDo6bWVtY21wOjplcShlbnRyeS5zZWNyZXQuYXNfYnl0ZXMoKSwgc2VjcmV0LmFz X2J5dGVzKCkpOworCisgICAgbGV0IFNvbWUoZ2VuMikgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dl bigpIGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGVxICYmIGdl bjIgPT0gY2FjaGVfZ2VuCit9CisKK2ZuIGFwcGx5X2FwaV9tdXRhdGlvbih0b2tlbmlkOiAmQXV0 aGlkLCBuZXdfc2VjcmV0OiBPcHRpb248JnN0cj4pIHsKKyAgICAvLyBTaWduYWwgY2FjaGUgaW52 YWxpZGF0aW9uIHRvIG90aGVyIHByb2Nlc3NlcyAoYmVzdC1lZmZvcnQpLgorICAgIGxldCBuZXdf c2hhcmVkX2dlbiA9IGJ1bXBfdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKTsKKworICAgIGxldCBt dXQgY2FjaGUgPSBUT0tFTl9TRUNSRVRfQ0FDSEUud3JpdGUoKTsKKworICAgIC8vIElmIHdlIGNh bm5vdCByZWFkL2J1bXAgdGhlIHNoYXJlZCBnZW5lcmF0aW9uLCB3ZSBjYW5ub3Qgc2FmZWx5IHRy dXN0IHRoZSBjYWNoZS4KKyAgICBsZXQgU29tZShnZW4pID0gbmV3X3NoYXJlZF9nZW4gZWxzZSB7 CisgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3RhdGUoJm11dCBjYWNoZSk7CisgICAgICAgIGNh Y2hlLnNoYXJlZF9nZW4gPSAwOworICAgICAgICByZXR1cm47CisgICAgfTsKKworICAgIC8vIFVw ZGF0ZSB0byB0aGUgcG9zdC1tdXRhdGlvbiBnZW5lcmF0aW9uLgorICAgIGNhY2hlLnNoYXJlZF9n ZW4gPSBnZW47CisKKyAgICAvLyBBcHBseSB0aGUgbmV3IG11dGF0aW9uLgorICAgIG1hdGNoIG5l d19zZWNyZXQgeworICAgICAgICBTb21lKHNlY3JldCkgPT4geworICAgICAgICAgICAgY2FjaGUu c2VjcmV0cy5pbnNlcnQoCisgICAgICAgICAgICAgICAgdG9rZW5pZC5jbG9uZSgpLAorICAgICAg ICAgICAgICAgIENhY2hlZFNlY3JldCB7CisgICAgICAgICAgICAgICAgICAgIHNlY3JldDogc2Vj cmV0LnRvX293bmVkKCksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICk7CisgICAg ICAgIH0KKyAgICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICBjYWNoZS5zZWNyZXRzLnJlbW92 ZSh0b2tlbmlkKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8vIEdldCB0aGUgY3VycmVudCBz aGFyZWQgZ2VuZXJhdGlvbi4KK2ZuIHRva2VuX3NoYWRvd19zaGFyZWRfZ2VuKCkgLT4gT3B0aW9u PHVzaXplPiB7CisgICAgY3JhdGU6OkNvbmZpZ1ZlcnNpb25DYWNoZTo6bmV3KCkKKyAgICAgICAg Lm9rKCkKKyAgICAgICAgLm1hcCh8Y3ZjfCBjdmMudG9rZW5fc2hhZG93X2dlbmVyYXRpb24oKSkK K30KKworLy8vIEJ1bXAgYW5kIHJldHVybiB0aGUgbmV3IHNoYXJlZCBnZW5lcmF0aW9uLgorZm4g YnVtcF90b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpIC0+IE9wdGlvbjx1c2l6ZT4geworICAgIGNy YXRlOjpDb25maWdWZXJzaW9uQ2FjaGU6Om5ldygpCisgICAgICAgIC5vaygpCisgICAgICAgIC5t YXAofGN2Y3wgY3ZjLmluY3JlYXNlX3Rva2VuX3NoYWRvd19nZW5lcmF0aW9uKCkgKyAxKQorfQor CisvLy8gSW52YWxpZGF0ZXMgdGhlIGNhY2hlIHN0YXRlIGFuZCBvbmx5IGtlZXBzIHRoZSBzaGFy ZWQgZ2VuZXJhdGlvbi4KK2ZuIGludmFsaWRhdGVfY2FjaGVfc3RhdGUoY2FjaGU6ICZtdXQgQXBp VG9rZW5TZWNyZXRDYWNoZSkgeworICAgIGNhY2hlLnNlY3JldHMuY2xlYXIoKTsKK30KLS0gCjIu NDcuMwoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpw YnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQpodHRwczov L2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wYnMtZGV2ZWwK