From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pbs-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 2C68C1FF16F for <inbox@lore.proxmox.com>; Tue, 15 Apr 2025 14:51:23 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AD4907F4E; Tue, 15 Apr 2025 14:51:21 +0200 (CEST) Message-ID: <574477eb-b29a-44d3-91de-e69b69c20607@proxmox.com> Date: Tue, 15 Apr 2025 14:50:46 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com>, =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com> References: <20250415105416.215805-1-c.ebner@proxmox.com> <1744715646.ixpklno696.astroid@yuna.none> Content-Language: en-US, de-DE From: Christian Ebner <c.ebner@proxmox.com> In-Reply-To: <1744715646.ixpklno696.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.372 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_ASCII_DIVIDERS 0.8 Email that uses ascii formatting dividers and possible spam tricks KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [proxmox.com, datastore.rs] Subject: Re: [pbs-devel] [PATCH v2 proxmox-backup] garbage collection: fix rare race in chunk marking phase X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com> T24gNC8xNS8yNSAxMzo0MiwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiBPbiBBcHJpbCAx NSwgMjAyNSAxMjo1NCBwbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+PiBEdXJpbmcgcGhhc2Ug MSBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gcmVmZXJlbmNlZCBjaHVua3MgYXJlIG1hcmtlZCBhcwo+ PiBpbiB1c2UgYnkgaXRlcmF0aW5nIG92ZXIgYWxsIGluZGV4IGZpbGVzIGFuZCB1cGRhdGluZyB0 aGUgYXRpbWUgb24KPj4gdGhlIGNodW5rcyByZWZlcmVuY2VkIGJ5IHRoZXNlLgo+Pgo+PiBJbiBh biBlZGdlIGNhc2UgZm9yIGxvbmcgcnVubmluZyBnYXJiYWdlIGNvbGxlY3Rpb24gam9icywgd2hl cmUgYQo+PiBuZXdseSBhZGRlZCBzbmFwc2hvdCAoY3JlYXRlZCBhZnRlciB0aGUgc3RhcnQgb2Yg R0MpIHJldXNlZCBrbm93bgo+PiBjaHVua3MgZnJvbSBhIHByZXZpb3VzIHNuYXBzaG90LCBidXQg dGhlIHByZXZpb3VzIHNuYXBzaG90IGluZGV4Cj4+IHJlZmVyZW5jaW5nIHRoZW0gZGlzYXBwZWFy ZWQgYmVmb3JlIHRoZSBtYXJraW5nIHBoYXNlIGNvdWxkIHJlYWNoCj4+IHRoYXQgaW5kZXggKGUu Zy4gcHJ1bmVkIGJlY2F1c2Ugb25seSAxIHNuYXBzaG90IHRvIGJlIGtlcHQgYnkKPj4gcmV0ZW50 aW9uIHNldHRpbmcpLCBrbm93biBjaHVua3MgZnJvbSB0aGF0IHByZXZpb3VzIGluZGV4IGZpbGUg bWlnaHQKPj4gbm90IGJlIG1hcmtlZCAoZ2l2ZW4gdGhhdCBieSBub25lIG9mIHRoZSBvdGhlciBp bmRleCBmaWxlcyBpdCB3YXMKPj4gbWFya2VkKS4KPj4KPj4gU2luY2UgY29tbWl0IDc0MzYxZGE4 ICgiZ2FyYmFnZSBjb2xsZWN0aW9uOiBnZW5lcmF0ZSBpbmRleCBmaWxlIGxpc3QKPj4gdmlhIGRh dGFzdG9yZSBpdGVyYXRvcnMiKSB0aGlzIGlzIGV2ZW4gbGVzcyBsaWtlbHkgYXMgbm93IHRoZQo+ PiBpdGVyYXRpb24gcmVhZHMgYWxzbyBpbmRleCBmaWxlcyBhZGRlZCBkdXJpbmcgcGhhc2UgMSwg YW5kCj4+IHRoZXJlZm9yZSBlaXRoZXIgdGhlIG5ldyBvciB0aGUgcHJldmlvdXMgaW5kZXggZmls ZSB3aWxsIGFjY291bnQgZm9yCj4+IHRoZXNlIGNodW5rcyAodGhlIHByZXZpb3VzIGJhY2t1cCBz bmFwc2hvdCBjYW4gb25seSBiZSBwcnVuZGVkIGFmdGVyCj4+IHRoZSBuZXcgb25lIGZpbmlzaGVk LCBzaW5jZSBsb2NrZWQpLiBUaGVyZSByZW1haW5zIGhvd2V2ZXIgYSBzbWFsbAo+PiByYWNlIHdp bmRvdyBiZXR3ZWVuIHRoZSByZWFkaW5nIG9mIHRoZSBzbmFwc2hvdHMgaW4gdGhlIGJhY2t1cCBn cm91cAo+PiBhbmQgdGhlIHJlYWRpbmcgb2YgdGhlIGFjdHVhbCBpbmRleCBmaWxlcyBmb3IgbWFy a2luZy4KPj4KPj4gRml4IHRoaXMgcmFjZSBieToKPj4gMS4gQ2hlY2tpbmcgaWYgdGhlIGxhc3Qg c25hcHNob3Qgb2YgYSBncm91cCBkaXNhcHBlYXJlZCBhbmQgaWYgc28KPj4gMi4gZ2VuZXJhdGUg dGhlIGxpc3QgYWdhaW4sIGxvb2tpbmcgZm9yIG5ldyBpbmRleCBmaWxlcyBwcmV2aW91c2x5Cj4+ ICAgICBub3QgYWNjb3VudGVkIGZvcgo+PiAzLiBUbyBhdm9pZCBwb3NzaWJsZSBlbmRsZXNzIGxv b3BpbmcsIGxvY2sgdGhlIGdyb3VwIGlmIHRoZSBzbmFwc2hvdAo+PiAgICAgbGlzdCBjaGFuZ2Vk IGV2ZW4gYWZ0ZXIgdGhlIDEwdGggdGltZSAod2hpY2ggd2lsbCBsZWFkIHRvCj4+ICAgICBjb25j dXJyZW50IG9wZXJhdGlvbnMgdG8gdGhpcyBncm91cCBmYWlsaW5nKS4KPj4KPj4gU2lnbmVkLW9m Zi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVyQHByb3htb3guY29tPgo+PiAtLS0KPj4gY2hh bmdlcyBzaW5jZSB2ZXJzaW9uIDE6Cj4+IC0gcmViYXNlZCBvbnRvIGN1cnJlbnQgbWFzdGVyCj4+ Cj4+ICAgcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIHwgMTEwICsrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLQo+PiAgIDEgZmlsZSBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCsp LCAzNiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3Bicy1kYXRhc3RvcmUvc3JjL2Rh dGFzdG9yZS5ycyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwo+PiBpbmRleCBhYTM4 ZTJhYzEuLjc4OGRiZjIxMiAxMDA2NDQKPj4gLS0tIGEvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0 b3JlLnJzCj4+ICsrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwo+PiBAQCAtMTE0 Myw0NyArMTE0Myw4NSBAQCBpbXBsIERhdGFTdG9yZSB7Cj4+ICAgICAgICAgICAgICAgbGV0IG5h bWVzcGFjZSA9IG5hbWVzcGFjZS5jb250ZXh0KCJpdGVyYXRpbmcgbmFtZXNwYWNlcyBmYWlsZWQi KT87Cj4+ICAgICAgICAgICAgICAgZm9yIGdyb3VwIGluIGFyY19zZWxmLml0ZXJfYmFja3VwX2dy b3VwcyhuYW1lc3BhY2UpPyB7Cj4+ICAgICAgICAgICAgICAgICAgIGxldCBncm91cCA9IGdyb3Vw LmNvbnRleHQoIml0ZXJhdGluZyBiYWNrdXAgZ3JvdXBzIGZhaWxlZCIpPzsKPiAKPiBwcmUtZXhp c3RpbmcvdW5yZWxhdGVkIC0gd2hhdCBpZiB0aGUgZ3JvdXAgZ290IHBydW5lZCBhdCB0aGUgcmln aHQKPiBtb21lbnQgaGVyZT8gc2hvdWxkIHdlIG1heWJlIHJlY2hlY2sgdGhhdCBpdCBleGlzdHMg YW5kIGlnbm9yZSB0aGUgZXJyb3IKPiBpbiB0aGF0IGNhc2U/CgpIbW0sIHRoYXQncyByaWdodC4u LiBTYW1lIHByb2JhYmx5IGFwcGxpZXMgdG8gdGhlIG5hbWVzcGFjZSBpdGVyYXRpb24gCmFib3Zl IGFzIHdlbGwuLi4KQnV0IEknbSBub3Qgc3VyZSB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGdyb3Vw IGV4aXN0cyBhbmQgaWdub3JlPyBXaGF0J3MgCnlvdXIgcmVhc29uaW5nIGhlcmU/IEFzIGZhciBh cyBJIHNlZSB0aGUgd2hvbGUgc3RhdGUgb2YgdGhlIGl0ZXJhdG9yIApib2lscyBkb3duIHRvIHRo ZSByZWFkZGlyX3IoKSBjYWxscyBpbiBuaXg6OmRpcjo6SXRlcjo6bmV4dCgpLCBidXQgbm90IApz dXJlIHdoYXQgc3RhdGUgb25lIGlzIGxvb2tpbmcgYXQgYXQgdGhhdCBtb21lbnQuCgo+IAo+PiAt ICAgICAgICAgICAgICAgIGxldCBtdXQgc25hcHNob3RzID0gZ3JvdXAubGlzdF9iYWNrdXBzKCku Y29udGV4dCgibGlzdGluZyBzbmFwc2hvdHMgZmFpbGVkIik/Owo+PiAtICAgICAgICAgICAgICAg IC8vIFNvcnQgYnkgc25hcHNob3QgdGltZXN0YW1wIHRvIGl0ZXJhdGUgb3ZlciBjb25zZWN1dGl2 ZSBzbmFwc2hvdHMgZm9yIGVhY2ggaW1hZ2UuCj4+IC0gICAgICAgICAgICAgICAgQmFja3VwSW5m bzo6c29ydF9saXN0KCZtdXQgc25hcHNob3RzLCB0cnVlKTsKPj4gLSAgICAgICAgICAgICAgICBm b3Igc25hcHNob3QgaW4gc25hcHNob3RzIHsKPj4gLSAgICAgICAgICAgICAgICAgICAgZm9yIGZp bGUgaW4gc25hcHNob3QuZmlsZXMgewo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vy LmNoZWNrX2Fib3J0KCk/Owo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmZhaWxf b25fc2h1dGRvd24oKT87Cj4+IC0KPj4gLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtdXQg cGF0aCA9IHNuYXBzaG90LmJhY2t1cF9kaXIuZnVsbF9wYXRoKCk7Cj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICBwYXRoLnB1c2goZmlsZSk7Cj4+IC0KPj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIGxldCBpbmRleCA9IG1hdGNoIHNlbGYub3Blbl9pbmRleF9yZWFkZXIoJnBhdGgpPyB7Cj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5kZXgsCj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiB7Cj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVucHJvY2Vzc2VkX2luZGV4X2xpc3QucmVtb3ZlKCZwYXRoKTsKPj4g Kwo+PiArICAgICAgICAgICAgICAgIC8vIEF2b2lkIHJhY2UgYmV0d2VlbiBsaXN0aW5nL21hcmtp bmcgb2Ygc25hcHNob3RzIGJ5IEdDIGFuZCBwcnVuaW5nIHRoZSBsYXN0Cj4+ICsgICAgICAgICAg ICAgICAgLy8gc25hcHNob3QgaW4gdGhlIGdyb3VwLCBmb2xsb3dpbmcgYSBuZXcgc25hcHNob3Qg Y3JlYXRpb24uIE90aGVyd2lzZSBrbm93biBjaHVua3MKPj4gKyAgICAgICAgICAgICAgICAvLyBt aWdodCBvbmx5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIG5ldyBzbmFwc2hvdCwgc28gaXQgbXVzdCBi ZSByZWFkIGFzIHdlbGwuCj4+ICsgICAgICAgICAgICAgICAgbGV0IG11dCByZXRyeV9jb3VudGVy ID0gMDsKPj4gKyAgICAgICAgICAgICAgICBsZXQgbXV0IHByb2Nlc3NlZF9ncm91cF9pbmRpY2Vz ID0gSGFzaFNldDo6bmV3KCk7Cj4+ICsgICAgICAgICAgICAgICAgbGV0IG11dCBuZWVkc19yZXRy eTsKPiAKPiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdGhpcyB2YXJpYWJsZSAoc2VlIGJlbG93KQoK QWNrZWQKCj4gCj4+ICsgICAgICAgICAgICAgICAgbG9vcCB7Cj4+ICsgICAgICAgICAgICAgICAg ICAgIG5lZWRzX3JldHJ5ID0gZmFsc2U7Cj4+ICsgICAgICAgICAgICAgICAgICAgIGxldCBfbG9j ayA9IGlmIHJldHJ5X2NvdW50ZXIgPT0gMTAgewo+PiArICAgICAgICAgICAgICAgICAgICAgICAg Ly8gTGFzdCByZXNvcnQsIGV4Y2x1c2l2ZWx5IGxvY2sgdGhlIGJhY2t1cCBncm91cCB0byBtYWtl IHN1cmUgbm8gbmV3Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNrdXBzIGNhbiBi ZSB3cml0dGVuLiBUaGlzIHdpbGwgb25seSB0cmlnZ2VyIGlmIG5vbmUgb2YgdGhlIHByZXZpb3Vz Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWVzIGNvbnZlcmdlZCBzdWNjZXNz ZnVsbHksIHdoaWNoIGlzIHZlcnkgdW5saWtlbHkuCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICBTb21lKGdyb3VwLmxvY2soKSkKPiAKPiB0aGlzIHNob3VsZCBjaGVjayB0aGUgcmVzdWx0PyB0 aGlzIHdvdWxkIGFsc28gZmFpbCBpZiBhIGJhY2t1cCBpcwo+IGN1cnJlbnRseSBnb2luZyBvbiAo dmVyeSBsaWtlbHkgaWYgd2UgZW5kIHVwIGhlcmU/KSBhbmQgYWJvcnQgdGhlIEdDCj4gdGhlbiwg YnV0IHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gbG9jayBhIGdyb3VwIHdpdGggYSB0aW1lb3V0IGF0 IHRoZQo+IG1vbWVudC4uIGJ1dCBtYXliZSB3ZSBjYW4gd2FpdCBhbmQgc2VlIGlmIHVzZXJzIGFj dHVhbGx5IHJ1biBpbnRvIHRoYXQsCj4gd2UgY2FuIGFsd2F5cyBleHRlbmQgdGhlIGxvY2tpbmcg aW50ZXJmYWNlIHRoZW4uLgoKVHJ1ZSwgYnV0IHNpbmNlIHRoaXMgaXMgdmVyeSB1bmxpa2VseSB0 byBoYXBwZW4sIEkgd291bGQgb3B0IHRvIGZhaWwgYW5kIAphZGQgYW4gZXJyb3IgY29udGV4dCBo ZXJlIHNvIHRoaXMgY2FuIGVhc2lseSBiZSB0cmFjZWQgYmFjayB0byB0aGlzIGNvZGUgCnBhdGgu Cgo+IAo+IHdlIHNob3VsZCBwcm9iYWJseSBhbHNvIGFib3J0IGlmIHdlIGV2ZXIgaGl0IGEgcmV0 cnlfY291bnRlciA+IDEwLCBzaW5jZQo+IHRoYXQgd291bGQgbWVhbiB3ZSBtaXNzZWQgc29tZSBi dWcgYW5kIHRoaXMgY291bGQgbG9vcCBmb3JldmVyLi4KCkFoIHllcywgZ29vZCBwb2ludCEgV2ls bCBhZGQgYSBiYWlsIGZvciB0aGF0IGNhc2UuCgo+IAo+PiArICAgICAgICAgICAgICAgICAgICB9 IGVsc2Ugewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgTm9uZQo+PiArICAgICAgICAgICAg ICAgICAgICB9Owo+PiArCj4+ICsgICAgICAgICAgICAgICAgICAgIGxldCBtdXQgc25hcHNob3Rz ID0gZ3JvdXAubGlzdF9iYWNrdXBzKCkuY29udGV4dCgibGlzdGluZyBzbmFwc2hvdHMgZmFpbGVk Iik/Owo+IAo+IHNhbWUgcXVlc3Rpb24gYXMgYWJvdmUgYXBwbGllcyBoZXJlIGFzIHdlbGwgLSB3 aGF0IGlmIHRoZSB3aG9sZSBncm91cCB2YW5pc2hlZD8KCkFja2VkLCBtdXN0IGNoZWNrCgo+IAo+ PiArICAgICAgICAgICAgICAgICAgICBsZXQgc25hcHNob3RfY291bnQgPSBzbmFwc2hvdHMubGVu KCk7Cj4+ICsgICAgICAgICAgICAgICAgICAgIC8vIFNvcnQgYnkgc25hcHNob3QgdGltZXN0YW1w IHRvIGl0ZXJhdGUgb3ZlciBjb25zZWN1dGl2ZSBzbmFwc2hvdHMgZm9yIGVhY2ggc25hcHNob3Qu Cj4gCj4gdGhpcyBjb21tZW50IG1ha2VzIG5vIHNlbnNlIDspCj4gCj4gLy8gaXRlcmF0ZSBvdmVy IHNvcnRlZCBzbmFwc2hvdHMgdG8gYmVuZWZpdCBmcm9tIGNodW5rIGNhY2hpbmcKPiAKPiBvciBz b21ldGhpbmcgbGlrZSB0aGlzPyBpZiB3ZSB3YW50IHRvIGtlZXAgdGhlIGNvbW1lbnQgYXQgYWxs Li4KCnllYWgsIGluY29ycmVjdGx5IGFkYXB0ZWQgdGhlIHByZS1leGlzdGluZyBvbmUgaGVyZSwg YnV0IHRoaXMgZG9lcyBub3QgCmdpdmUgbXVjaCBpbnNpZ2h0LCBzbyBsZXRzIGRyb3AgaXQuCgo+ IAo+PiArICAgICAgICAgICAgICAgICAgICBCYWNrdXBJbmZvOjpzb3J0X2xpc3QoJm11dCBzbmFw c2hvdHMsIHRydWUpOwo+PiArICAgICAgICAgICAgICAgICAgICBmb3IgKGNvdW50LCBzbmFwc2hv dCkgaW4gc25hcHNob3RzLmludG9faXRlcigpLmVudW1lcmF0ZSgpIHsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGZvciBmaWxlIGluIHNuYXBzaG90LmZpbGVzIHsKPiAKPiBzbmFwc2hvdC5m aWxlcyBhbHNvIGluY2x1ZGVzIGJsb2JzLCBzaG91bGQgd2UgZmlsdGVyIHRoZW0gaGVyZSB0byBh dm9pZAo+IHByb2JsZW1zIGlmIHdlIGFkYXB0IGJlbG93IHRvIGhhbmRsZSBwYXJ0aWFsL29uZ29p bmcgcHJ1bmluZz8KClllcywgbWlnaHQgYmUgYmV0dGVyIHRvIGV4Y2x1ZGUgdGhlc2UgYXQgdGhp cyBwb2ludCBhbHJlYWR5LgoKPiAKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr ZXIuY2hlY2tfYWJvcnQoKT87Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vy LmZhaWxfb25fc2h1dGRvd24oKT87Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsZXQgbXV0IHBhdGggPSBzbmFwc2hvdC5iYWNrdXBfZGlyLmZ1bGxfcGF0aCgpOwo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgucHVzaChmaWxlKTsKPj4gKwo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIHJlcHJvY2Vzc2luZyBvZiBhbHJlYWR5IHNl ZW4gaW5kZXggZmlsZXMgb24gcmV0cnkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiByZXRyeV9jb3VudGVyID4gMCAmJiBwcm9jZXNzZWRfZ3JvdXBfaW5kaWNlcy5jb250YWlucygm cGF0aCkgewo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPj4gLSAgICAgICAgICAgICAgICAgICAg ICAgIH07Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluZGV4X21hcmtfdXNlZF9j aHVua3MoCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsCj4+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnBhdGgsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm11dCBjaHVua19scnVfY2FjaGUsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhdHVzLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlciwKPj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICk/Owo+PiAtCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAhdW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpIHsKPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbmZvISgiRW5jb3VudGVyZWQgbmV3IGluZGV4IGZpbGUgJ3twYXRo Oj99JywgaW5jcmVtZW50IHRvdGFsIGluZGV4IGZpbGUgY291bnQiKTsKPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbmRleF9jb3VudCArPSAxOwo+PiAtICAgICAgICAgICAgICAgICAg ICAgICAgfQo+PiAgIAo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2Ug PSAocHJvY2Vzc2VkX2luZGV4X2ZpbGVzICsgMSkgKiAxMDAgLyBpbmRleF9jb3VudDsKPj4gLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIHBlcmNlbnRhZ2UgPiBsYXN0X3BlcmNlbnRhZ2Ugewo+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8hKAo+PiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAibWFya2VkIHtwZXJjZW50YWdlfSUgKHt9IG9mIHtpbmRleF9jb3Vu dH0gaW5kZXggZmlsZXMpIiwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv Y2Vzc2VkX2luZGV4X2ZpbGVzICsgMSwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Owo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfcGVyY2VudGFnZSA9IHBlcmNl bnRhZ2U7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gbWF0Y2gg c2VsZi5vcGVuX2luZGV4X3JlYWRlcigmcGF0aCk/IHsKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5kZXgsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5vbmUgPT4gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgY291bnQgKyAxID09IHNuYXBzaG90X2NvdW50Cj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNuYXBzaG90LmJhY2t1cF9kaXIuZnVsbF9wYXRo KCkuZXhpc3RzKCkKPiAKPiB3aGF0IGlmIHRoZSBzbmFwc2hvdCBkaXIgc3RpbGwgZXhpc3RzLCBi dXQgdGhlIGluZGV4IGRvZXNuJ3Q/IHdvdWxkbid0Cj4gdGhhdCBhbHNvIGJlIHByb2JsZW1hdGlj PyBJIHRoaW5rIHdlIHNob3VsZCBwcm9iYWJseSBzdGFydCB0aGUgbG9vcCBvdmVyCj4gYXMgc29v biBhcyBzb21ldGhpbmcgdW5leHBlY3RlZCBpcyBnb2luZyBvbiB3aXRoIHRoZSBsYXN0IHNuYXBz aG90IG9mCj4gdGhlIGdyb3VwLi4KCkFncmVlZCwgcHJ1bmluZyBzaG91bGQgcmVtb3ZlIHRoZSBk aXJlY3RvcnkgYXMgYSB3aG9sZSBidXQgbGV0J3MgYmUgCmNvbnNlcnZhdGl2ZSBoZXJlIHRvIGNv dmVyIGluY29uc2lzdGVudCBzdGF0ZXMgYXMgd2VsbC4KCj4gCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmVlZHNfcmV0cnkgPSB0cnVlOwo+IAo+IHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkg dGltZSB3ZSBzZXQgaXQgdG8gdHJ1ZSwgYW5kIGF0IHRoaXMgcG9pbnQgd2UKPiBjb3VsZCBqdXN0 IHN0YXJ0IGFub3RoZXIgaXRlcmF0aW9uIG9mIHRoZSBvdXRlciBsb29wIHZpYSBsYWJlbGVkCj4g Y29udGludWU/CgpBaCwgeWVzIHRoYXQncyBpbmRlZWQgYmV0dGVyLCB0aHghCgo+IAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpOwo+ IAo+IHRoaXMgY291bGQgbW92ZSBhYm92ZSB0aGUgaWYgdGhlbgoKQWNrZWQKCj4gCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07 Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1 bmtzKAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZtdXQgY2h1bmtfbHJ1X2NhY2hlLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdGF0dXMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdvcmtlciwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApPzsKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRfZ3JvdXBfaW5kaWNlcy5pbnNlcnQocGF0aC5j bG9uZSgpKTsKPj4gKwo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICF1bnByb2Nl c3NlZF9pbmRleF9saXN0LnJlbW92ZSgmcGF0aCkgewo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbmZvISgiRW5jb3VudGVyZWQgbmV3IGluZGV4IGZpbGUgJ3twYXRoOj99Jywg aW5jcmVtZW50IHRvdGFsIGluZGV4IGZpbGUgY291bnQiKTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5kZXhfY291bnQgKz0gMTsKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2Vu dGFnZSA9IChwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxKSAqIDEwMCAvIGluZGV4X2NvdW50Owo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBlcmNlbnRhZ2UgPiBsYXN0X3BlcmNl bnRhZ2Ugewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvISgKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJrZWQge3BlcmNlbnRhZ2V9JSAo e30gb2Yge2luZGV4X2NvdW50fSBpbmRleCBmaWxlcykiLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkX2luZGV4X2ZpbGVzICsgMSwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkX2lu ZGV4X2ZpbGVzICs9IDE7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkX2luZGV4X2ZpbGVzICs9IDE7Cj4+ICAgICAgICAg ICAgICAgICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZHNfcmV0 cnkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlfY291bnRlciArPSAxOwo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ICsgICAgICAgICAgICAgICAgICAg IH0KPiAKPiB0aGlzIHdob2xlIHRoaW5nIGhlcmUgY2FuIGdvIGF3YXkgdGhlbi4uCgpBY2tlZAoK PiAKPj4gKwo+PiArICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gICAgICAgICAgICAgICAg ICAgfQo+PiAgICAgICAgICAgICAgIH0KPj4gICAgICAgICAgIH0KPj4gLS0gCj4+IDIuMzkuNQo+ Pgo+Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+PiBwYnMtZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IHBicy1kZXZlbEBsaXN0cy5wcm94bW94LmNv bQo+PiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9w YnMtZGV2ZWwKPj4KPj4KPj4KPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IHBicy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBwYnMtZGV2ZWxAbGlz dHMucHJveG1veC5jb20KPiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1h bi9saXN0aW5mby9wYnMtZGV2ZWwKPiAKPiAKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KcGJzLWRldmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlz dHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4v bGlzdGluZm8vcGJzLWRldmVsCg==