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 B63711FF185 for ; Mon, 21 Jul 2025 18:44:44 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 20E4B16464; Mon, 21 Jul 2025 18:45:41 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 21 Jul 2025 18:44:43 +0200 Message-ID: <20250721164507.1045869-26-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250721164507.1045869-1-c.ebner@proxmox.com> References: <20250721164507.1045869-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1753116309501 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.046 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 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 v10 22/46] datastore: implement garbage collection for s3 backend 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" SW1wbGVtZW50cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGZvciBkYXRhc3RvcmVzIGJhY2tlZCBi eSBhbiBzMwpvYmplY3Qgc3RvcmUuClRha2UgYWR2YW50YWdlIG9mIHRoZSBsb2NhbCBkYXRhc3Rv cmUgYnkgcGxhY2luZyBtYXJrZXIgZmlsZXMgaW4gdGhlCmNodW5rIHN0b3JlIGR1cmluZyBwaGFz ZSAxIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHVwZGF0aW5nIHRoZWlyCmF0aW1lIGlmIGFs cmVhZHkgcHJlc2VudC4KVGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgbWFraW5nIGV4cGVuc2l2ZSBB UEkgY2FsbHMgdG8gdXBkYXRlIG9iamVjdAptZXRhZGF0YSwgd2hpY2ggd291bGQgb25seSBiZSBw b3NzaWJsZSB2aWEgYSBjb3B5IG9iamVjdCBvcGVyYXRpb24uCgpUaGUgcGhhc2UgMiBpcyBpbXBs ZW1lbnRlZCBieSBmZXRjaGluZyBhIGxpc3Qgb2YgYWxsIHRoZSBjaHVua3MgdmlhCnRoZSBMaXN0 T2JqZWN0c1YyIEFQSSBjYWxsLCBmaWx0ZXJlZCBieSB0aGUgY2h1bmsgZm9sZGVyIHByZWZpeC4K VGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIHBlcmZvcm1lZCBpbiBiYXRjaGVzIG9mIDEwMDAgb2Jq ZWN0cywgZ2l2ZW4KYnkgdGhlIEFQSXMgcmVzcG9uc2UgbGltaXRzLgpGb3IgZWFjaCBvYmplY3Qg a2V5LCBsb29rdXAgdGhlIG1hcmtlciBmaWxlIGFuZCBkZWNpZGUgYmFzZWQgb24gdGhlCm1hcmtl ciBleGlzdGVuY2UgYW5kIGl0J3MgYXRpbWUgaWYgdGhlIGNodW5rIG9iamVjdCBuZWVkcyB0byBi ZQpyZW1vdmVkLiBEZWxldGlvbiBoYXBwZW5zIHZpYSB0aGUgZGVsZXRlIG9iamVjdHMgb3BlcmF0 aW9uLCBhbGxvd2luZwp0byBkZWxldGUgbXVsdGlwbGUgY2h1bmtzIGJ5IGEgc2luZ2xlIHJlcXVl c3QuCgpUaGlzIGFsbG93cyB0byBlZmZpY2llbnRseSBsb29rdXAgY2h1bmtzIHdoaWNoIGFyZSBu b3QgaW4gdXNlCmFueW1vcmUgd2hpbGUgYmVpbmcgcGVyZm9ybWFudCBhbmQgY29zdCBlZmZlY3Rp dmUuCgpCYXNlbGluZSBydW50aW1lIHBlcmZvcm1hbmNlIHRlc3RzOgotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKMyBnYXJiYWdlIGNvbGxlY3Rpb24gcnVucyB3ZXJlIHBlcmZv cm1lZCB3aXRoIGhvdCBmaWxlc3lzdGVtIGNhY2hlcwooYnkgYWRkaXRpb25hbCBHQyBydW4gYmVm b3JlIHRoZSB0ZXN0IHJ1bnMpLiBUaGUgUEJTIGluc3RhbmNlIHdhcwp2aXJ0dWFsaXplZCwgdGhl IHNhbWUgdmlydHVhbGl6ZWQgZGlzayB1c2luZyBaRlMgZm9yIGFsbCB0aGUgbG9jYWwKY2FjaGUg c3RvcmVzOgoKQWxsIGRhdGFzdG9yZXMgY29udGFpbmVkIHRoZSBzYW1lIGVuY3J5cHRlZCBkYXRh LCB3aXRoIHRoZSBmb2xsb3dpbmcKY29udGVudCBzdGF0aXN0aWNzOgpPcmlnaW5hbCBkYXRhIHVz YWdlOiAyNjkuNjg1IEdpQgpPbi1EaXNrIHVzYWdlOiA5LjAxOCBHaUIgKDMuMzQlKQpPbi1EaXNr IGNodW5rczogNjQ3NwpEZWR1cGxpY2F0aW9uIGZhY3RvcjogMjkuOTAKQXZlcmFnZSBjaHVuayBz aXplOiAxLjQyNiBNaUIKClRoZSByZXN1dGx0cyBkZW1vbnN0cmF0ZSB0aGUgb3ZlcmhlYWQgY2F1 c2VkIGJ5IHRoZSBhZGRpdGlvbmFsCkxpc3RPYmplY3RWMiBBUEkgY2FsbHMgYW5kIHRoZWlyIHBy b2Nlc3NpbmcsIGJ1dCBkZXBlbmRpbmcgb24gdGhlCm9iamVjdCBzdG9yZSBiYWNrZW5kLgoKQXZl cmFnZSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVudGltZToKTG9jYWwgZGF0YXN0b3JlOiAgICAgICAg ICAgICAoMi4wNCDCsSAwLjAxKSBzCkxvY2FsIFJBRE9TIGdhdGV3YXkgKFNxdWlkKTogKDMuMDUg wrEgMC4wMSkgcwpBV1MgUzM6ICAgICAgICAgICAgICAgICAgICAgICgzLjA1IMKxIDAuMDEpIHMK Q2xvdWRmbGFyZSBSMjogICAgICAgICAgICAgICAoNi43MSDCsSAwLjU4KSBzCgpBZnRlciBwcnVu aW5nIG9mIGFsbCBkYXRhc3RvcmUgY29udGVudHMgKHRoZXJlZm9yZSBpbmNsdWRpbmcKRGVsZXRl T2JqZWN0cyByZXF1ZXN0cyk6CkxvY2FsIGRhdGFzdG9yZTogICAgICAgICAgICAgIDMuMDQgcwpM b2NhbCBSQURPUyBnYXRld2F5IChTcXVpZCk6IDE0LjA4IHMKQVdTIFMzOiAgICAgICAgICAgICAg ICAgICAgICAxMy4wNiBzCkNsb3VkZmxhcmUgUjI6ICAgICAgICAgICAgICAgNzguMjEgcwoKU2ln bmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVyQHByb3htb3guY29tPgotLS0KY2hh bmdlcyBzaW5jZSB2ZXJzaW9uIDk6Ci0gbm8gY2hhbmdlcwoKIHBicy1kYXRhc3RvcmUvc3JjL2No dW5rX3N0b3JlLnJzIHwgICA0ICsKIHBicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyAgIHwg MjUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjMw IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Bicy1kYXRhc3Rv cmUvc3JjL2NodW5rX3N0b3JlLnJzIGIvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMK aW5kZXggOGMxOTVkZjU0Li45NWYwMGU4ZDUgMTAwNjQ0Ci0tLSBhL3Bicy1kYXRhc3RvcmUvc3Jj L2NodW5rX3N0b3JlLnJzCisrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2NodW5rX3N0b3JlLnJzCkBA IC0zNTMsNiArMzUzLDEwIEBAIGltcGwgQ2h1bmtTdG9yZSB7CiAgICAgICAgIFByb2Nlc3NMb2Nr ZXI6Om9sZGVzdF9zaGFyZWRfbG9jayhzZWxmLmxvY2tlci5jbG9uZSgpLnVud3JhcCgpKQogICAg IH0KIAorICAgIHB1YiBmbiBtdXRleCgmc2VsZikgLT4gJnN0ZDo6c3luYzo6TXV0ZXg8KCk+IHsK KyAgICAgICAgJnNlbGYubXV0ZXgKKyAgICB9CisKICAgICBwdWIgZm4gc3dlZXBfdW51c2VkX2No dW5rcygKICAgICAgICAgJnNlbGYsCiAgICAgICAgIG9sZGVzdF93cml0ZXI6IGk2NCwKZGlmZiAt LWdpdCBhL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycyBiL3Bicy1kYXRhc3RvcmUvc3Jj L2RhdGFzdG9yZS5ycwppbmRleCA4YmRkYWZkNWQuLmM4YzA4MDEwZCAxMDA2NDQKLS0tIGEvcGJz LWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCisrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFz dG9yZS5ycwpAQCAtNCw3ICs0LDcgQEAgdXNlIHN0ZDo6b3M6OnVuaXg6OmZmaTo6T3NTdHJFeHQ7 CiB1c2Ugc3RkOjpvczo6dW5peDo6aW86OkFzUmF3RmQ7CiB1c2Ugc3RkOjpwYXRoOjp7UGF0aCwg UGF0aEJ1Zn07CiB1c2Ugc3RkOjpzeW5jOjp7QXJjLCBMYXp5TG9jaywgTXV0ZXh9OwotdXNlIHN0 ZDo6dGltZTo6RHVyYXRpb247Cit1c2Ugc3RkOjp0aW1lOjp7RHVyYXRpb24sIFN5c3RlbVRpbWV9 OwogCiB1c2UgYW55aG93Ojp7YmFpbCwgZm9ybWF0X2VyciwgQ29udGV4dCwgRXJyb3J9OwogdXNl IGh0dHBfYm9keV91dGlsOjpCb2R5RXh0OwpAQCAtMTQsNyArMTQsNyBAQCB1c2UgdHJhY2luZzo6 e2luZm8sIHdhcm59OwogCiB1c2UgcHJveG1veF9odW1hbl9ieXRlOjpIdW1hbkJ5dGU7CiB1c2Ug cHJveG1veF9zM19jbGllbnQ6OnsKLSAgICBTM0NsaWVudCwgUzNDbGllbnRDb25maWcsIFMzQ2xp ZW50T3B0aW9ucywgUzNDbGllbnRTZWNyZXRzQ29uZmlnLCBTM1BhdGhQcmVmaXgsCisgICAgUzND bGllbnQsIFMzQ2xpZW50Q29uZmlnLCBTM0NsaWVudE9wdGlvbnMsIFMzQ2xpZW50U2VjcmV0c0Nv bmZpZywgUzNPYmplY3RLZXksIFMzUGF0aFByZWZpeCwKIH07CiB1c2UgcHJveG1veF9zY2hlbWE6 OkFwaVR5cGU7CiAKQEAgLTEyMTYsNiArMTIxNiw3IEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAg ICAgY2h1bmtfbHJ1X2NhY2hlOiAmbXV0IE9wdGlvbjxMcnVDYWNoZTxbdTg7IDMyXSwgKCk+PiwK ICAgICAgICAgc3RhdHVzOiAmbXV0IEdhcmJhZ2VDb2xsZWN0aW9uU3RhdHVzLAogICAgICAgICB3 b3JrZXI6ICZkeW4gV29ya2VyVGFza0NvbnRleHQsCisgICAgICAgIHMzX2NsaWVudDogT3B0aW9u PEFyYzxTM0NsaWVudD4+LAogICAgICkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewogICAgICAgICBz dGF0dXMuaW5kZXhfZmlsZV9jb3VudCArPSAxOwogICAgICAgICBzdGF0dXMuaW5kZXhfZGF0YV9i eXRlcyArPSBpbmRleC5pbmRleF9ieXRlcygpOwpAQCAtMTIzOCwyMSArMTIzOSw0MSBAQCBpbXBs IERhdGFTdG9yZSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAg ICAgICBpZiAhc2VsZi5pbm5lci5jaHVua19zdG9yZS5jb25kX3RvdWNoX2NodW5rKGRpZ2VzdCwg ZmFsc2UpPyB7Ci0gICAgICAgICAgICAgICAgbGV0IGhleCA9IGhleDo6ZW5jb2RlKGRpZ2VzdCk7 Ci0gICAgICAgICAgICAgICAgd2FybiEoCi0gICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nOiB1 bmFibGUgdG8gYWNjZXNzIG5vbi1leGlzdGVudCBjaHVuayB7aGV4fSwgcmVxdWlyZWQgYnkge2Zp bGVfbmFtZTo/fSIKLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgICAgLy8gdG91 Y2ggYW55IGNvcnJlc3BvbmRpbmcgLmJhZCBmaWxlcyB0byBrZWVwIHRoZW0gYXJvdW5kLCBtZWFu aW5nIGlmIGEgY2h1bmsgaXMKLSAgICAgICAgICAgICAgICAvLyByZXdyaXR0ZW4gY29ycmVjdGx5 IHRoZXkgd2lsbCBiZSByZW1vdmVkIGF1dG9tYXRpY2FsbHksIGFzIHdlbGwgYXMgaWYgbm8gaW5k ZXgKLSAgICAgICAgICAgICAgICAvLyBmaWxlIHJlcXVpcmVzIHRoZSBjaHVuayBhbnltb3JlICh3 b24ndCBnZXQgdG8gdGhpcyBsb29wIHRoZW4pCi0gICAgICAgICAgICAgICAgZm9yIGkgaW4gMC4u PTkgewotICAgICAgICAgICAgICAgICAgICBsZXQgYmFkX2V4dCA9IGZvcm1hdCEoInt9LmJhZCIs IGkpOwotICAgICAgICAgICAgICAgICAgICBsZXQgbXV0IGJhZF9wYXRoID0gUGF0aEJ1Zjo6bmV3 KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoLnB1c2goc2VsZi5jaHVua19wYXRoKGRp Z2VzdCkuMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoLnNldF9leHRlbnNpb24oYmFk X2V4dCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuY29uZF90 b3VjaF9wYXRoKCZiYWRfcGF0aCwgZmFsc2UpPzsKKyAgICAgICAgICAgIG1hdGNoIHMzX2NsaWVu dCB7CisgICAgICAgICAgICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZp bGVzeXN0ZW0gYmFja2VuZAorICAgICAgICAgICAgICAgICAgICBpZiAhc2VsZi5pbm5lci5jaHVu a19zdG9yZS5jb25kX3RvdWNoX2NodW5rKGRpZ2VzdCwgZmFsc2UpPyB7CisgICAgICAgICAgICAg ICAgICAgICAgICBsZXQgaGV4ID0gaGV4OjplbmNvZGUoZGlnZXN0KTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHdhcm4hKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nOiB1 bmFibGUgdG8gYWNjZXNzIG5vbi1leGlzdGVudCBjaHVuayB7aGV4fSwgcmVxdWlyZWQgYnkge2Zp bGVfbmFtZTo/fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAg ICAgICAgICAgIC8vIHRvdWNoIGFueSBjb3JyZXNwb25kaW5nIC5iYWQgZmlsZXMgdG8ga2VlcCB0 aGVtIGFyb3VuZCwgbWVhbmluZyBpZiBhIGNodW5rIGlzCisgICAgICAgICAgICAgICAgICAgICAg ICAvLyByZXdyaXR0ZW4gY29ycmVjdGx5IHRoZXkgd2lsbCBiZSByZW1vdmVkIGF1dG9tYXRpY2Fs bHksIGFzIHdlbGwgYXMgaWYgbm8gaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZp bGUgcmVxdWlyZXMgdGhlIGNodW5rIGFueW1vcmUgKHdvbid0IGdldCB0byB0aGlzIGxvb3AgdGhl bikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIDAuLj05IHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsZXQgYmFkX2V4dCA9IGZvcm1hdCEoInt9LmJhZCIsIGkpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtdXQgYmFkX3BhdGggPSBQYXRoQnVmOjpuZXco KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRfcGF0aC5wdXNoKHNlbGYuY2h1bmtf cGF0aChkaWdlc3QpLjApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoLnNl dF9leHRlbnNpb24oYmFkX2V4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5p bm5lci5jaHVua19zdG9yZS5jb25kX3RvdWNoX3BhdGgoJmJhZF9wYXRoLCBmYWxzZSk/OworICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIFNvbWUocmVmIF9zM19jbGllbnQpID0+IHsKKyAgICAg ICAgICAgICAgICAgICAgLy8gVXBkYXRlIGF0aW1lIG9uIGxvY2FsIGNhY2hlIG1hcmtlciBmaWxl cy4KKyAgICAgICAgICAgICAgICAgICAgaWYgIXNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuY29uZF90 b3VjaF9jaHVuayhkaWdlc3QsIGZhbHNlKT8geworICAgICAgICAgICAgICAgICAgICAgICAgbGV0 IChjaHVua19wYXRoLCBfZGlnZXN0KSA9IHNlbGYuY2h1bmtfcGF0aChkaWdlc3QpOworICAgICAg ICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGVtcHR5IGZpbGUgYXMgbWFya2VyIHRvIHRlbGwg R0MgcGhhc2UyIHRoYXQgdGhpcyBpcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBjaHVu ayBzdGlsbCBpbi11c2UsIHNvIHRvIGtlZXAgaW4gdGhlIFMzIG9iamVjdCBzdG9yZS4KKyAgICAg ICAgICAgICAgICAgICAgICAgIHN0ZDo6ZnM6OkZpbGU6Om9wdGlvbnMoKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC53cml0ZSh0cnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IC5jcmVhdGVfbmV3KHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9wZW4oJmNo dW5rX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhfY29udGV4dCh8fCB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCEoImZhaWxlZCB0byBjcmVh dGUgbWFya2VyIGZvciBjaHVuayB7fSIsIGhleDo6ZW5jb2RlKGRpZ2VzdCkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSk/OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjY0LDYgKzEyODUsNyBAQCBp bXBsIERhdGFTdG9yZSB7CiAgICAgICAgIHN0YXR1czogJm11dCBHYXJiYWdlQ29sbGVjdGlvblN0 YXR1cywKICAgICAgICAgd29ya2VyOiAmZHluIFdvcmtlclRhc2tDb250ZXh0LAogICAgICAgICBj YWNoZV9jYXBhY2l0eTogdXNpemUsCisgICAgICAgIHMzX2NsaWVudDogT3B0aW9uPEFyYzxTM0Ns aWVudD4+LAogICAgICkgLT4gUmVzdWx0PCgpLCBFcnJvcj4gewogICAgICAgICAvLyBJdGVyYXRl IHR3aWNlIG92ZXIgdGhlIGRhdGFzdG9yZSB0byBmZXRjaCBpbmRleCBmaWxlcywgZXZlbiBpZiB0 aGlzIGNvbWVzIHdpdGggYW4KICAgICAgICAgLy8gYWRkaXRpb25hbCBydW50aW1lIGNvc3Q6CkBA IC0xMzU3LDYgKzEzNzksNyBAQCBpbXBsIERhdGFTdG9yZSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZtdXQgY2h1bmtfbHJ1X2NhY2hlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtl ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczNfY2xpZW50LmFzX3JlZigpLmNs b25lZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/OwogCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgIXVucHJvY2Vzc2VkX2luZGV4X2xpc3QucmVtb3ZlKCZwYXRoKSB7 CkBAIC0xMzkxLDcgKzE0MTQsMTQgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwotICAgICAg ICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1bmtzKGluZGV4LCAmcGF0aCwgJm11dCBjaHVu a19scnVfY2FjaGUsIHN0YXR1cywgd29ya2VyKT87CisgICAgICAgICAgICBzZWxmLmluZGV4X21h cmtfdXNlZF9jaHVua3MoCisgICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAg JnBhdGgsCisgICAgICAgICAgICAgICAgJm11dCBjaHVua19scnVfY2FjaGUsCisgICAgICAgICAg ICAgICAgc3RhdHVzLAorICAgICAgICAgICAgICAgIHdvcmtlciwKKyAgICAgICAgICAgICAgICBz M19jbGllbnQuYXNfcmVmKCkuY2xvbmVkKCksCisgICAgICAgICAgICApPzsKICAgICAgICAgICAg IHdhcm4hKCJNYXJrZWQgY2h1bmtzIGZvciB1bmV4cGVjdGVkIGluZGV4IGZpbGUgYXQgJ3twYXRo Oj99JyIpOwogICAgICAgICB9CiAgICAgICAgIGlmIHN0cmFuZ2VfcGF0aHNfY291bnQgPiAwIHsK QEAgLTE0OTAsMTggKzE1MjAsMTA0IEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAgICAgICAgICAg ICAxMDI0ICogMTAyNAogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgaW5mbyEoIlN0YXJ0 IEdDIHBoYXNlMSAobWFyayB1c2VkIGNodW5rcykiKTsKKyAgICAgICAgICAgIGxldCBzM19jbGll bnQgPSBtYXRjaCBzZWxmLmJhY2tlbmQoKT8geworICAgICAgICAgICAgICAgIERhdGFzdG9yZUJh Y2tlbmQ6OkZpbGVzeXN0ZW0gPT4gTm9uZSwKKyAgICAgICAgICAgICAgICBEYXRhc3RvcmVCYWNr ZW5kOjpTMyhzM19jbGllbnQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgcHJveG1veF9hc3lu Yzo6cnVudGltZTo6YmxvY2tfb24oczNfY2xpZW50LmhlYWRfYnVja2V0KCkpCisgICAgICAgICAg ICAgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIHJlYWNoIGJ1Y2tldCIpPzsKKyAgICAg ICAgICAgICAgICAgICAgU29tZShzM19jbGllbnQpCisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfTsKIAotICAgICAgICAgICAgc2VsZi5tYXJrX3VzZWRfY2h1bmtzKCZtdXQgZ2Nfc3Rh dHVzLCB3b3JrZXIsIGdjX2NhY2hlX2NhcGFjaXR5KQotICAgICAgICAgICAgICAgIC5jb250ZXh0 KCJtYXJraW5nIHVzZWQgY2h1bmtzIGZhaWxlZCIpPzsKKyAgICAgICAgICAgIGluZm8hKCJTdGFy dCBHQyBwaGFzZTEgKG1hcmsgdXNlZCBjaHVua3MpIik7CiAKLSAgICAgICAgICAgIGluZm8hKCJT dGFydCBHQyBwaGFzZTIgKHN3ZWVwIHVudXNlZCBjaHVua3MpIik7Ci0gICAgICAgICAgICBzZWxm LmlubmVyLmNodW5rX3N0b3JlLnN3ZWVwX3VudXNlZF9jaHVua3MoCi0gICAgICAgICAgICAgICAg b2xkZXN0X3dyaXRlciwKLSAgICAgICAgICAgICAgICBtaW5fYXRpbWUsCisgICAgICAgICAgICBz ZWxmLm1hcmtfdXNlZF9jaHVua3MoCiAgICAgICAgICAgICAgICAgJm11dCBnY19zdGF0dXMsCiAg ICAgICAgICAgICAgICAgd29ya2VyLAotICAgICAgICAgICAgKT87CisgICAgICAgICAgICAgICAg Z2NfY2FjaGVfY2FwYWNpdHksCisgICAgICAgICAgICAgICAgczNfY2xpZW50LmFzX3JlZigpLmNs b25lZCgpLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgLmNvbnRleHQoIm1hcmtpbmcgdXNl ZCBjaHVua3MgZmFpbGVkIik/OworCisgICAgICAgICAgICBpbmZvISgiU3RhcnQgR0MgcGhhc2Uy IChzd2VlcCB1bnVzZWQgY2h1bmtzKSIpOworCisgICAgICAgICAgICBpZiBsZXQgU29tZShyZWYg czNfY2xpZW50KSA9IHMzX2NsaWVudCB7CisgICAgICAgICAgICAgICAgbGV0IG11dCBjaHVua19j b3VudCA9IDA7CisgICAgICAgICAgICAgICAgbGV0IHByZWZpeCA9IFMzUGF0aFByZWZpeDo6U29t ZSgiLmNodW5rcy8iLnRvX3N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAvLyBPcGVyYXRlcyBp biBiYXRjaGVzIG9mIDEwMDAgb2JqZWN0cyBtYXggcGVyIHJlcXVlc3QKKyAgICAgICAgICAgICAg ICBsZXQgbXV0IGxpc3RfYnVja2V0X3Jlc3VsdCA9CisgICAgICAgICAgICAgICAgICAgIHByb3ht b3hfYXN5bmM6OnJ1bnRpbWU6OmJsb2NrX29uKHMzX2NsaWVudC5saXN0X29iamVjdHNfdjIoJnBy ZWZpeCwgTm9uZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRv IGxpc3QgY2h1bmsgaW4gczMgb2JqZWN0IHN0b3JlIik/OworCisgICAgICAgICAgICAgICAgbGV0 IG11dCBkZWxldGVfbGlzdCA9IFZlYzo6d2l0aF9jYXBhY2l0eSgxMDAwKTsKKyAgICAgICAgICAg ICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2sgPSBzZWxmLmlubmVyLmNo dW5rX3N0b3JlLm11dGV4KCkubG9jaygpLnVud3JhcCgpOworCisgICAgICAgICAgICAgICAgICAg IGZvciBjb250ZW50IGluIGxpc3RfYnVja2V0X3Jlc3VsdC5jb250ZW50cyB7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiBzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcmtf Y2h1bmtfZm9yX29iamVjdF9rZXkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj b250ZW50LmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5zaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fYXRpbWUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9sZGVzdF93cml0ZXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZtdXQgZGVsZXRlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZtdXQgZ2Nfc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ISgiZmFpbGVkIHRvIG1hcmsgY2h1bmsgZm9yIG9i amVjdCBrZXkge30iLCBjb250ZW50LmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 KT8KKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaHVua19jb3VudCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgIWRlbGV0ZV9saXN0LmlzX2Vt cHR5KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlbGV0ZV9vYmplY3RzX3Jlc3Vs dCA9IHByb3htb3hfYXN5bmM6OnJ1bnRpbWU6OmJsb2NrX29uKAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHMzX2NsaWVudC5kZWxldGVfb2JqZWN0cygmZGVsZXRlX2xpc3QpLAorICAgICAg ICAgICAgICAgICAgICAgICAgKT87CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZXQgU29t ZShfZXJyKSA9IGRlbGV0ZV9vYmplY3RzX3Jlc3VsdC5lcnJvciB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmFpbCEoImZhaWxlZCB0byBkZWxldGUgc29tZSBvYmplY3RzIik7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVfbGlz dC5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg ZHJvcChsb2NrKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIG5leHQgYmF0Y2gg b2YgY2h1bmtzIGlmIHRoZXJlIGlzIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgaWYgbGlzdF9i dWNrZXRfcmVzdWx0LmlzX3RydW5jYXRlZCB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0 X2J1Y2tldF9yZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3htb3hfYXN5 bmM6OnJ1bnRpbWU6OmJsb2NrX29uKHMzX2NsaWVudC5saXN0X29iamVjdHNfdjIoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpc3RfYnVja2V0X3Jlc3VsdC5uZXh0X2NvbnRpbnVhdGlvbl90b2tlbi5hc19k ZXJlZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpPzsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZm8h KCJwcm9jZXNzZWQge2NodW5rX2NvdW50fSB0b3RhbCBjaHVua3MiKTsKKworICAgICAgICAgICAg ICAgIC8vIFBoYXNlIDIgR0Mgb2YgRmlsZXN5c3RlbSBiYWNrZWQgc3RvcmFnZSBpcyBwaGFzZSAz IGZvciBTMyBiYWNrZWQgR0MKKyAgICAgICAgICAgICAgICBpbmZvISgiU3RhcnQgR0MgcGhhc2Uz IChzd2VlcCB1bnVzZWQgY2h1bmsgbWFya2VycykiKTsKKworICAgICAgICAgICAgICAgIGxldCBt dXQgdG1wX2djX3N0YXR1cyA9IEdhcmJhZ2VDb2xsZWN0aW9uU3RhdHVzIHsKKyAgICAgICAgICAg ICAgICAgICAgdXBpZDogU29tZSh1cGlkLnRvX3N0cmluZygpKSwKKyAgICAgICAgICAgICAgICAg ICAgLi5EZWZhdWx0OjpkZWZhdWx0KCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg ICAgIHNlbGYuaW5uZXIuY2h1bmtfc3RvcmUuc3dlZXBfdW51c2VkX2NodW5rcygKKyAgICAgICAg ICAgICAgICAgICAgb2xkZXN0X3dyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgbWluX2F0aW1l LAorICAgICAgICAgICAgICAgICAgICAmbXV0IHRtcF9nY19zdGF0dXMsCisgICAgICAgICAgICAg ICAgICAgIHdvcmtlciwKKyAgICAgICAgICAgICAgICApPzsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgc2VsZi5pbm5lci5jaHVua19zdG9yZS5zd2VlcF91bnVzZWRfY2h1 bmtzKAorICAgICAgICAgICAgICAgICAgICBvbGRlc3Rfd3JpdGVyLAorICAgICAgICAgICAgICAg ICAgICBtaW5fYXRpbWUsCisgICAgICAgICAgICAgICAgICAgICZtdXQgZ2Nfc3RhdHVzLAorICAg ICAgICAgICAgICAgICAgICB3b3JrZXIsCisgICAgICAgICAgICAgICAgKT87CisgICAgICAgICAg ICB9CiAKICAgICAgICAgICAgIGlmIGxldCBTb21lKGNhY2hlX3N0YXRzKSA9ICZnY19zdGF0dXMu Y2FjaGVfc3RhdHMgewogICAgICAgICAgICAgICAgIGxldCB0b3RhbF9jYWNoZV9jb3VudHMgPSBj YWNoZV9zdGF0cy5oaXRzICsgY2FjaGVfc3RhdHMubWlzc2VzOwpAQCAtMTU4OCw2ICsxNzA0LDkw IEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAgICAgT2soKCkpCiAgICAgfQogCisgICAgLy8gTWFy ayB0aGUgY2h1bmsgbWFya2VyIGluIHRoZSBsb2NhbCBjYWNoZSBzdG9yZSBmb3IgdGhlIGdpdmVu IG9iamVjdCBrZXkgYXMgaW4gdXNlCisgICAgLy8gYnkgdXBkYXRpbmcgaXQncyBhdGltZS4KKyAg ICAvLyBSZXR1cm5zIE9rKHRydWUpIGlmIHRoZSBjaHVuayB3YXMgdXBkYXRlZCBhbmQgT2soZmFs c2UpIGlmIHRoZSBvYmplY3Qgd2FzIG5vdCBhIGNodW5rLgorICAgIGZuIG1hcmtfY2h1bmtfZm9y X29iamVjdF9rZXkoCisgICAgICAgICZzZWxmLAorICAgICAgICBvYmplY3Rfa2V5OiAmUzNPYmpl Y3RLZXksCisgICAgICAgIHNpemU6IHU2NCwKKyAgICAgICAgbWluX2F0aW1lOiBpNjQsCisgICAg ICAgIG9sZGVzdF93cml0ZXI6IGk2NCwKKyAgICAgICAgZGVsZXRlX2xpc3Q6ICZtdXQgVmVjPFMz T2JqZWN0S2V5PiwKKyAgICAgICAgZ2Nfc3RhdHVzOiAmbXV0IEdhcmJhZ2VDb2xsZWN0aW9uU3Rh dHVzLAorICAgICkgLT4gUmVzdWx0PGJvb2wsIEVycm9yPiB7CisgICAgICAgIGxldCBjaHVua19w YXRoID0gbWF0Y2ggc2VsZi5jaHVua19wYXRoX2Zyb21fb2JqZWN0X2tleSgmb2JqZWN0X2tleSkg eworICAgICAgICAgICAgU29tZShwYXRoKSA9PiBwYXRoLAorICAgICAgICAgICAgTm9uZSA9PiBy ZXR1cm4gT2soZmFsc2UpLAorICAgICAgICB9OworCisgICAgICAgIC8vIENoZWNrIGxvY2FsIG1h cmtlcnMgKGNyZWF0ZWQgb3IgYXRpbWUgdXBkYXRlZCBkdXJpbmcgcGhhc2UxKSBhbmQKKyAgICAg ICAgLy8ga2VlcCBvciBkZWxldGUgY2h1bmsgYmFzZWQgb24gdGhhdC4KKyAgICAgICAgbGV0IGF0 aW1lID0gbWF0Y2ggc3RkOjpmczo6bWV0YWRhdGEoJmNodW5rX3BhdGgpIHsKKyAgICAgICAgICAg IE9rKHN0YXQpID0+IHN0YXQuYWNjZXNzZWQoKT8sCisgICAgICAgICAgICBFcnIoZXJyKSBpZiBl cnIua2luZCgpID09IHN0ZDo6aW86OkVycm9yS2luZDo6Tm90Rm91bmQgPT4geworICAgICAgICAg ICAgICAgIC8vIEZpbGUgbm90IGZvdW5kLCBkZWxldGUgYnkgc2V0dGluZyBhdGltZSB0byB1bml4 IGVwb2NoCisgICAgICAgICAgICAgICAgaW5mbyEoIk5vdCBmb3VuZCwgbWFyayBmb3IgZGVsZXRp b246IHtvYmplY3Rfa2V5fSIpOworICAgICAgICAgICAgICAgIFN5c3RlbVRpbWU6OlVOSVhfRVBP Q0gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVycihlcnIpID0+IHJldHVybiBFcnIoZXJy LmludG8oKSksCisgICAgICAgIH07CisgICAgICAgIGxldCBhdGltZSA9IGF0aW1lLmR1cmF0aW9u X3NpbmNlKFN5c3RlbVRpbWU6OlVOSVhfRVBPQ0gpPy5hc19zZWNzKCkgYXMgaTY0OworCisgICAg ICAgIGxldCBiYWQgPSBjaHVua19wYXRoLmFzX3BhdGgoKS5lbmRzX3dpdGgoIi5iYWQiKTsKKwor ICAgICAgICBpZiBhdGltZSA8IG1pbl9hdGltZSB7CisgICAgICAgICAgICBkZWxldGVfbGlzdC5w dXNoKG9iamVjdF9rZXkuY2xvbmUoKSk7CisgICAgICAgICAgICBpZiBiYWQgeworICAgICAgICAg ICAgICAgIGdjX3N0YXR1cy5yZW1vdmVkX2JhZCArPSAxOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBnY19zdGF0dXMucmVtb3ZlZF9jaHVua3MgKz0gMTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGdjX3N0YXR1cy5yZW1vdmVkX2J5dGVzICs9IHNpemU7CisgICAg ICAgIH0gZWxzZSBpZiBhdGltZSA8IG9sZGVzdF93cml0ZXIgeworICAgICAgICAgICAgaWYgYmFk IHsKKyAgICAgICAgICAgICAgICBnY19zdGF0dXMuc3RpbGxfYmFkICs9IDE7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdjX3N0YXR1cy5wZW5kaW5nX2NodW5rcyArPSAx OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2Nfc3RhdHVzLnBlbmRpbmdfYnl0ZXMgKz0g c2l6ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICFiYWQgeworICAgICAgICAg ICAgICAgIGdjX3N0YXR1cy5kaXNrX2NodW5rcyArPSAxOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZ2Nfc3RhdHVzLmRpc2tfYnl0ZXMgKz0gc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAg IE9rKHRydWUpCisgICAgfQorCisgICAgLy8gQ2hlY2sgYW5kIGdlbmVyYXRlIGEgY2h1bmsgcGF0 aCBmcm9tIGdpdmVuIG9iamVjdCBrZXkKKyAgICBmbiBjaHVua19wYXRoX2Zyb21fb2JqZWN0X2tl eSgmc2VsZiwgb2JqZWN0X2tleTogJlMzT2JqZWN0S2V5KSAtPiBPcHRpb248UGF0aEJ1Zj4gewor ICAgICAgICAvLyBDaGVjayBvYmplY3QgaXMgYWN0dWFsbHkgYSBjaHVuaworICAgICAgICBsZXQg ZGlnZXN0ID0gbWF0Y2ggUGF0aDo6bmV3Ojo8c3RyPihvYmplY3Rfa2V5KS5maWxlX25hbWUoKSB7 CisgICAgICAgICAgICBTb21lKGZpbGVfbmFtZSkgPT4gZmlsZV9uYW1lLAorICAgICAgICAgICAg Ly8gc2hvdWxkIG5ldmVyIGJlIHRoZSBjYXNlIGFzIG9iamVjdHMgd2lsbCBoYXZlIGEgZmlsZW5h bWUKKyAgICAgICAgICAgIE5vbmUgPT4gcmV0dXJuIE5vbmUsCisgICAgICAgIH07CisgICAgICAg IGxldCBieXRlcyA9IGRpZ2VzdC5hc19ieXRlcygpOworICAgICAgICBpZiBieXRlcy5sZW4oKSAh PSA2NCAmJiBieXRlcy5sZW4oKSAhPSA2NCArICIuMC5iYWQiLmxlbigpIHsKKyAgICAgICAgICAg IHJldHVybiBOb25lOworICAgICAgICB9CisgICAgICAgIGlmICFieXRlcy5pdGVyKCkudGFrZSg2 NCkuYWxsKHU4Ojppc19hc2NpaV9oZXhkaWdpdCkgeworICAgICAgICAgICAgcmV0dXJuIE5vbmU7 CisgICAgICAgIH0KKworICAgICAgICAvLyBTYWZlIHNpbmNlIGNvbnRhaW5zIHZhbGlkIGFzY2lp IGhleGRpZ2l0cyBvbmx5IGFzIGNoZWNrZWQgYWJvdmUuCisgICAgICAgIGxldCBkaWdlc3Rfc3Ry ID0gZGlnZXN0LnRvX3N0cmluZ19sb3NzeSgpOworICAgICAgICBsZXQgaGV4ZGlnaXRfcHJlZml4 ID0gdW5zYWZlIHsgZGlnZXN0X3N0ci5nZXRfdW5jaGVja2VkKDAuLjQpIH07CisgICAgICAgIGxl dCBtdXQgY2h1bmtfcGF0aCA9IHNlbGYuYmFzZV9wYXRoKCk7CisgICAgICAgIGNodW5rX3BhdGgu cHVzaCgiLmNodW5rcyIpOworICAgICAgICBjaHVua19wYXRoLnB1c2goaGV4ZGlnaXRfcHJlZml4 KTsKKyAgICAgICAgY2h1bmtfcGF0aC5wdXNoKGRpZ2VzdCk7CisKKyAgICAgICAgU29tZShjaHVu a19wYXRoKQorICAgIH0KKwogICAgIHB1YiBmbiB0cnlfc2hhcmVkX2NodW5rX3N0b3JlX2xvY2so JnNlbGYpIC0+IFJlc3VsdDxQcm9jZXNzTG9ja1NoYXJlZEd1YXJkLCBFcnJvcj4gewogICAgICAg ICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLnRyeV9zaGFyZWRfbG9jaygpCiAgICAgfQotLSAKMi40 Ny4yCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnBi cy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8v bGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3Bicy1kZXZlbAo=