From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=PwHjFL0r; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 7A9A15A0265 for ; Fri, 06 Mar 2026 11:41:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1772793683; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=nLB9eBso/v0XvjT/QCsAibFIIEriuDg9wxiNKTCy0mI=; b=PwHjFL0rIPsuLl86NIGejwQx/Ev88dk9bnhqZbYm/OE0BlPA6mKrDc/tTifedbMh1QRS15 ERCiDFNnTBCYfKBPnpo6doiXLWEFnXpGnHWm/xFGth7MiOL5rzYYaqYo+yEzAuM1JxtwsF o+wvwlMYeH63in32gmLEqEAEdYOh1wo= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-634-4hK0Vr_qNqG7Dhez_QIMvA-1; Fri, 06 Mar 2026 05:41:22 -0500 X-MC-Unique: 4hK0Vr_qNqG7Dhez_QIMvA-1 X-Mimecast-MFC-AGG-ID: 4hK0Vr_qNqG7Dhez_QIMvA_1772793681 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-439db9da59eso602359f8f.2 for ; Fri, 06 Mar 2026 02:41:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772793681; x=1773398481; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=nLB9eBso/v0XvjT/QCsAibFIIEriuDg9wxiNKTCy0mI=; b=blabrY2uQyBUn23TXoMI/GS+TBGtIraONT3ckytPr5+7lH2/7wpx7NoZxjxhaiwxkY uq5+oXMxitbKREi2Qo7pK36WiO+cAuxSG+7sTEe8bGz8SJQCFGL7mVLwkhAj44xmVeh5 sYHC1yaJyYuGc9zGPX0NWiBlO2XCGGwtFs+P/yRXOgrrFnFRbZS/omr2R+fja+33djjl 89eHoCBEffoRqXC3sqeXOBHgROf/c9ToZ08AgbBw5t00p+e+FXCWMNj5YbKHjWSRsLEk i2Iqx3G1HAVq5fNDkgRKoYHveZdwlQWb8CRk3zkRjVXhkPlvevDNqAc9hNu13Z33LuNZ kArg== X-Gm-Message-State: AOJu0YxTCrkEAi3fIdd1ZWyw23EuxxJDzlgCEcY6tLZ1cQrQr20awE7Z IiLQFRHXxJbbpsZIGnvqpBhL0LTIBXDiMLl+FOGMuQIq69wjdpyqIHCc+EiZqPB5zcMEQa1oUpi 8AQz+5EzE/mXvtkbFdVDj75RtMjKhKpr/3lVnBtOKTnQlNBO5EWVW9A== X-Gm-Gg: ATEYQzxcZ7HNDOZ/BRLpO0QftUwW7GLm83wT0aZQzXWYZk1kk7oxIaKc4zikc96POx2 WSqWnNNcU2FmS7n301pj01p58bVCNzMJQrIGAN0APXU3+f6HJdSCv8wYm4guXZXHtAhaReMyEHc jVT37h+lhNd5dttYuPG6p2pVI9m6qexu+WTuj72In/JO8pR9HMhqeUseESu0dJvagoh2EZ2skfX 1tzPQP3Pb4NqbrhWGEmAj/2oV14J6R9DRHV6Ijx54LsYmtR/Fmjo5jJSsyVhAd3mCHqxlohluSi XoW0qAVvO4cdJ+Lct9DhvqXzbwSfsgKtzM4mCJg0FRuD04P5Sui7oKIRf0v0f0UcUNlr/9o3jgu Ngj53JRoiMtOY8hDGEWGuObshjXkb88lpzg7UvvY8APzEBkZk03bSeT0wCfZ3aZYvOg== X-Received: by 2002:a05:600c:698d:b0:47e:e20e:bbb0 with SMTP id 5b1f17b1804b1-485269195f3mr28090695e9.6.1772793680602; Fri, 06 Mar 2026 02:41:20 -0800 (PST) X-Received: by 2002:a05:600c:698d:b0:47e:e20e:bbb0 with SMTP id 5b1f17b1804b1-485269195f3mr28090175e9.6.1772793679974; Fri, 06 Mar 2026 02:41:19 -0800 (PST) Received: from ?IPV6:2a01:e0a:e10:ef90:4326:a36e:a7cb:624b? ([2a01:e0a:e10:ef90:4326:a36e:a7cb:624b]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851fb4257csm170892705e9.15.2026.03.06.02.41.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 06 Mar 2026 02:41:19 -0800 (PST) Message-ID: <8dd07b62-b7d1-46c6-8378-da8e11d81a67@redhat.com> Date: Fri, 6 Mar 2026 11:41:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3] iov: Add iov_truncate() helper and use it in vu handlers From: Laurent Vivier To: Stefano Brivio References: <20260305125648.3720714-1-lvivier@redhat.com> <20260306083530.56648725@elisabeth> <20260306092504.54432a5f@elisabeth> <28c1ce99-b58a-48c7-9ab8-53bd8926809f@redhat.com> Autocrypt: addr=lvivier@redhat.com; keydata= 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 In-Reply-To: <28c1ce99-b58a-48c7-9ab8-53bd8926809f@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Mve-Z3CboLfHl-wkOw2o72dpIkQ4H7NjCaKRFvlUpcg_1772793681 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: EHI4KG6G7NBVUN6RBULGLQUAOZZCBHB2 X-Message-ID-Hash: EHI4KG6G7NBVUN6RBULGLQUAOZZCBHB2 X-MailFrom: lvivier@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top, David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: T24gMy82LzI2IDA5OjUxLCBMYXVyZW50IFZpdmllciB3cm90ZToNCj4gT24gMy82LzI2IDA5OjI1 LCBTdGVmYW5vIEJyaXZpbyB3cm90ZToNCj4+IE9uIEZyaSwgNiBNYXIgMjAyNiAwOToxNzozMiAr MDEwMA0KPj4gTGF1cmVudCBWaXZpZXIgPGx2aXZpZXJAcmVkaGF0LmNvbT4gd3JvdGU6DQo+Pg0K Pj4+IE9uIDMvNi8yNiAwODozNSwgU3RlZmFubyBCcml2aW8gd3JvdGU6DQo+Pj4+IE9uIFRodSzC oCA1IE1hciAyMDI2IDEzOjU2OjQ4ICswMTAwDQo+Pj4+IExhdXJlbnQgVml2aWVyIDxsdml2aWVy QHJlZGhhdC5jb20+IHdyb3RlOg0KPj4+Pj4gQWRkIGEgZ2VuZXJpYyBpb3ZfdHJ1bmNhdGUoKSBm dW5jdGlvbiB0aGF0IHRydW5jYXRlcyBhbiBJTyB2ZWN0b3IgdG8gYQ0KPj4+Pj4gZ2l2ZW4gbnVt YmVyIG9mIGJ5dGVzLCByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBpb3YgZW50cmllcyB0aGF0IGNv bnRhaW4NCj4+Pj4+IGRhdGEgYWZ0ZXIgdHJ1bmNhdGlvbi4NCj4+Pj4+DQo+Pj4+PiBVc2UgaXQg aW4gdWRwX3Z1X3NvY2tfcmVjdigpIGFuZCB0Y3BfdnVfc29ja19yZWN2KCkgdG8gcmVwbGFjZSB0 aGUNCj4+Pj4+IG9wZW4tY29kZWQgdHJ1bmNhdGlvbiBsb2dpYyB0aGF0IGFkanVzdGVkIGlvdiBl bnRyaWVzIGFmdGVyIHJlY3Ztc2coKS4NCj4+Pj4+IEFsc28gY29udmVydCB0aGUgZGlyZWN0IGlv dl9sZW4gYXNzaWdubWVudCBpbiB0Y3BfdnVfc2VuZF9mbGFnKCkgdG8gdXNlDQo+Pj4+PiBpb3Zf dHJ1bmNhdGUoKSBmb3IgY29uc2lzdGVuY3kuDQo+Pj4+Pg0KPj4+Pj4gU2lnbmVkLW9mZi1ieTog TGF1cmVudCBWaXZpZXIgPGx2aXZpZXJAcmVkaGF0LmNvbT4NCj4+Pj4+IC0tLQ0KPj4+Pj4NCj4+ Pj4+IE5vdGVzOg0KPj4+Pj4gwqDCoMKgwqDCoCB2MzogdXNlIGluIHRjcF92dV9zZW5kX2ZsYWco KSB0b28NCj4+Pj4+IMKgwqDCoMKgwqAgdjI6IHVzZSBpb3ZfdHJ1bmNhdGUoKSBpbiB1ZHBfdnVf c29ja19yZWN2KCkgdG9vDQo+Pj4+Pg0KPj4+Pj4gwqDCoCBpb3YuY8KgwqDCoCB8IDIyICsrKysr KysrKysrKysrKysrKysrKysNCj4+Pj4+IMKgwqAgaW92LmjCoMKgwqAgfMKgIDEgKw0KPj4+Pj4g wqDCoCB0Y3BfdnUuYyB8IDE0ICsrKy0tLS0tLS0tLS0tDQo+Pj4+PiDCoMKgIHVkcF92dS5jIHwg MTIgKysrLS0tLS0tLS0tDQo+Pj4+PiDCoMKgIDQgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9u cygrKSwgMjAgZGVsZXRpb25zKC0pDQo+Pj4+Pg0KPj4+Pj4gZGlmZiAtLWdpdCBhL2lvdi5jIGIv aW92LmMNCj4+Pj4+IGluZGV4IGFkNzI2ZGFhNGNkOC4uMzFhM2Y1YmMyOWU1IDEwMDY0NA0KPj4+ Pj4gLS0tIGEvaW92LmMNCj4+Pj4+ICsrKyBiL2lvdi5jDQo+Pj4+PiBAQCAtMTQ3LDYgKzE0Nywy OCBAQCBzaXplX3QgaW92X3NpemUoY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBpb3Zf Y250KQ0KPj4+Pj4gwqDCoMKgwqDCoMKgIHJldHVybiBsZW47DQo+Pj4+PiDCoMKgIH0NCj4+Pj4+ ICsvKioNCj4+Pj4+ICsgKiBpb3ZfdHJ1bmNhdGUoKSAtIFRydW5jYXRlIGFuIElPIHZlY3RvciB0 byBhIGdpdmVuIG51bWJlciBvZiBieXRlcw0KPj4+Pj4gKyAqIEBpb3Y6wqDCoMKgIElPIHZlY3Rv ciAobW9kaWZpZWQpDQo+Pj4+PiArICogQGlvdl9jbnQ6wqDCoMKgIE51bWJlciBvZiBlbnRyaWVz IGluIEBpb3YNCj4+Pj4+ICsgKiBAc2l6ZTrCoMKgwqAgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRv IGtlZXANCj4+Pj4+ICsgKg0KPj4+Pj4gKyAqIFJldHVybjogbnVtYmVyIG9mIGlvdiBlbnRyaWVz IHRoYXQgY29udGFpbiBkYXRhIGFmdGVyIHRydW5jYXRpb24NCj4+Pj4+ICsgKi8NCj4+Pj4+ICtz aXplX3QgaW92X3RydW5jYXRlKHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3QgaW92X2NudCwgc2l6 ZV90IHNpemUpDQo+Pj4+PiArew0KPj4+Pj4gK8KgwqDCoCBzaXplX3QgaSwgb2Zmc2V0Ow0KPj4+ Pj4gKw0KPj4+Pj4gK8KgwqDCoCBpID0gaW92X3NraXBfYnl0ZXMoaW92LCBpb3ZfY250LCBzaXpl LCAmb2Zmc2V0KTsNCj4+Pj4+ICsNCj4+Pj4+ICvCoMKgwqAgaWYgKGkgPCBpb3ZfY250KSB7DQo+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgaW92W2ldLmlvdl9sZW4gPSBvZmZzZXQ7DQo+Pj4+PiArwqDC oMKgwqDCoMKgwqAgaSArPSAhIW9mZnNldDsNCj4+Pj4+ICvCoMKgwqAgfQ0KPj4+Pj4gKw0KPj4+ Pj4gK8KgwqDCoCByZXR1cm4gaTsNCj4+Pj4+ICt9DQo+Pj4+PiArDQo+Pj4+PiDCoMKgIC8qKg0K Pj4+Pj4gwqDCoMKgICogaW92X3RhaWxfcHJ1bmUoKSAtIFJlbW92ZSBhbnkgdW5uZWVkZWQgYnVm ZmVycyBmcm9tIGFuIElPViB0YWlsDQo+Pj4+PiDCoMKgwqAgKiBAdGFpbDrCoMKgwqAgSU8gdmVj dG9yIHRhaWwgKG1vZGlmaWVkKQ0KPj4+Pj4gZGlmZiAtLWdpdCBhL2lvdi5oIGIvaW92LmgNCj4+ Pj4+IGluZGV4IGQxYWI5MWE5NGUyMi4uYjRlNTBiMGZjYTVhIDEwMDY0NA0KPj4+Pj4gLS0tIGEv aW92LmgNCj4+Pj4+ICsrKyBiL2lvdi5oDQo+Pj4+PiBAQCAtMjksNiArMjksNyBAQCBzaXplX3Qg aW92X2Zyb21fYnVmKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3QgaW92X2NudCwNCj4+ Pj4+IMKgwqAgc2l6ZV90IGlvdl90b19idWYoY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVf dCBpb3ZfY250LA0KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBvZmZzZXQs IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ5dGVzKTsNCj4+Pj4+IMKgwqAgc2l6ZV90IGlvdl9zaXplKGNv bnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3QgaW92X2NudCk7DQo+Pj4+PiArc2l6ZV90IGlv dl90cnVuY2F0ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IGlvdl9jbnQsIHNpemVfdCBzaXpl KTsNCj4+Pj4+IMKgwqAgLyoNCj4+Pj4+IMKgwqDCoCAqIERPQzogVGhlb3J5IG9mIE9wZXJhdGlv biwgc3RydWN0IGlvdl90YWlsDQo+Pj4+PiBkaWZmIC0tZ2l0IGEvdGNwX3Z1LmMgYi90Y3BfdnUu Yw0KPj4+Pj4gaW5kZXggODhiZTIzMmRjYTY2Li44Y2E0MTcwZjEzZjYgMTAwNjQ0DQo+Pj4+PiAt LS0gYS90Y3BfdnUuYw0KPj4+Pj4gKysrIGIvdGNwX3Z1LmMNCj4+Pj4+IEBAIC0xMzEsNyArMTMx LDcgQEAgaW50IHRjcF92dV9zZW5kX2ZsYWcoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRj cF90YXBfY29ubiANCj4+Pj4+ICpjb25uLCBpbnQgZmxhZ3MpDQo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4+Pj4gwqDCoMKgwqDCoMKgIH0NCj4+Pj4+IC3CoMKgwqAg ZmxhZ3NfZWxlbVswXS5pbl9zZ1swXS5pb3ZfbGVuID0gaGRybGVuICsgb3B0bGVuOw0KPj4+Pj4g K8KgwqDCoCBpb3ZfdHJ1bmNhdGUoJmZsYWdzX2lvdlswXSwgMSwgaGRybGVuICsgb3B0bGVuKTsN Cj4+Pj4+IMKgwqDCoMKgwqDCoCBwYXlsb2FkID0gSU9WX1RBSUwoZmxhZ3NfZWxlbVswXS5pbl9z ZywgMSwgaGRybGVuKTsNCj4+Pj4+IMKgwqDCoMKgwqDCoCBpZiAoZmxhZ3MgJiBLRUVQQUxJVkUp DQo+Pj4+PiBAQCAtMTkyLDkgKzE5Miw5IEBAIHN0YXRpYyBzc2l6ZV90IHRjcF92dV9zb2NrX3Jl Y3YoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IA0KPj4+Pj4gdnVfdmlydHEgKnZxLA0KPj4+ Pj4gwqDCoMKgwqDCoMKgIHN0cnVjdCBtc2doZHIgbWhfc29jayA9IHsgMCB9Ow0KPj4+Pj4gwqDC oMKgwqDCoMKgIHVpbnQxNl90IG1zcyA9IE1TU19HRVQoY29ubik7DQo+Pj4+PiDCoMKgwqDCoMKg wqAgaW50IHMgPSBjb25uLT5zb2NrOw0KPj4+Pj4gLcKgwqDCoCBzc2l6ZV90IHJldCwgbGVuOw0K Pj4+Pj4gwqDCoMKgwqDCoMKgIHNpemVfdCBoZHJsZW47DQo+Pj4+PiDCoMKgwqDCoMKgwqAgaW50 IGVsZW1fY250Ow0KPj4+Pj4gK8KgwqDCoCBzc2l6ZV90IHJldDsNCj4+Pj4+IMKgwqDCoMKgwqDC oCBpbnQgaTsNCj4+Pj4+IMKgwqDCoMKgwqDCoCAqaW92X2NudCA9IDA7DQo+Pj4+PiBAQCAtMjQ3 LDE1ICsyNDcsNyBAQCBzdGF0aWMgc3NpemVfdCB0Y3BfdnVfc29ja19yZWN2KGNvbnN0IHN0cnVj dCBjdHggKmMsIHN0cnVjdCANCj4+Pj4+IHZ1X3ZpcnRxICp2cSwNCj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldCAtPSBhbHJlYWR5X3NlbnQ7DQo+Pj4+PiDCoMKgwqDCoMKgwqAgLyogYWRq dXN0IGlvdiBudW1iZXIgYW5kIGxlbmd0aCBvZiB0aGUgbGFzdCBpb3YgKi8NCj4+Pj4+IC3CoMKg wqAgbGVuID0gcmV0Ow0KPj4+Pj4gLcKgwqDCoCBmb3IgKGkgPSAwOyBsZW4gJiYgaSA8IGVsZW1f Y250OyBpKyspIHsNCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW92ZWMgKmlvdiA9ICZl bGVtW2ldLmluX3NnWzBdOw0KPj4+Pj4gLQ0KPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChpb3Yt Pmlvdl9sZW4gPiAoc2l6ZV90KWxlbikNCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlv di0+aW92X2xlbiA9IGxlbjsNCj4+Pj4+IC0NCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBsZW4gLT0g aW92LT5pb3ZfbGVuOw0KPj4+Pj4gLcKgwqDCoCB9DQo+Pj4+PiArwqDCoMKgIGkgPSBpb3ZfdHJ1 bmNhdGUoJmlvdl92dVtESVNDQVJEX0lPVl9OVU1dLCBlbGVtX2NudCwgcmV0KTsNCj4+Pj4NCj4+ Pj4gSSBoYWQgYSBxdWljayBsb29rLCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgdGhpcyBvdXQuIFRo aXMgY2F1c2VzDQo+Pj4+IENvdmVyaXR5IFNjYW4gdG8gcmVwb3J0Og0KPj4+Pg0KPj4+PiAvaG9t ZS9zYnJpdmlvL3Bhc3N0L3RjcF92dS5jOjQ1NzozOg0KPj4+PiDCoMKgwqAgVHlwZTogT3ZlcmZs b3dlZCBjb25zdGFudCAoSU5URUdFUl9PVkVSRkxPVykNCj4+Pj4NCj4+Pj4gL2hvbWUvc2JyaXZp by9wYXNzdC90Y3BfdnUuYzozNTU6MjoNCj4+Pj4gwqDCoMKgIDEuIHBhdGg6IENvbmRpdGlvbiAi IXZ1X3F1ZXVlX2VuYWJsZWQodnEpIiwgdGFraW5nIGZhbHNlIGJyYW5jaC4NCj4+Pj4gL2hvbWUv c2JyaXZpby9wYXNzdC90Y3BfdnUuYzozNTU6MjoNCj4+Pj4gwqDCoMKgIDIuIHBhdGg6IENvbmRp dGlvbiAiIXZ1X3F1ZXVlX3N0YXJ0ZWQodnEpIiwgdGFraW5nIGZhbHNlIGJyYW5jaC4NCj4+Pj4g L2hvbWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzozNjI6MjoNCj4+Pj4gwqDCoMKgIDMuIHBhdGg6 IENvbmRpdGlvbiAiMFUgLyogKHVpbnQzMl90KTAgKi8gLSAodWludDMyX3QpYWxyZWFkeV9zZW50 IC0gMSA8IA0KPj4+PiAoMTY3NzcyMTZVIC8qIDEgPDwgMTYgKyA4ICovKSIsIHRha2luZyBmYWxz ZSBicmFuY2guDQo+Pj4+IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6Mzc0OjI6DQo+Pj4+ IMKgwqDCoCA0LiBwYXRoOiBDb25kaXRpb24gIiF3bmRfc2NhbGVkIiwgdGFraW5nIGZhbHNlIGJy YW5jaC4NCj4+Pj4gL2hvbWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzozNzQ6MjoNCj4+Pj4gwqDC oMKgIDUuIHBhdGg6IENvbmRpdGlvbiAiYWxyZWFkeV9zZW50ID49IHduZF9zY2FsZWQiLCB0YWtp bmcgZmFsc2UgYnJhbmNoLg0KPj4+PiAvaG9tZS9zYnJpdmlvL3Bhc3N0L3RjcF92dS5jOjM4ODoy Og0KPj4+PiDCoMKgwqAgNi4gcGF0aDogQ29uZGl0aW9uICJ2NiIsIHRha2luZyB0cnVlIGJyYW5j aC4NCj4+Pj4gL2hvbWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzozOTA6MjoNCj4+Pj4gwqDCoMKg IDcuIHBhdGg6IENvbmRpdGlvbiAibGVuIDwgMCIsIHRha2luZyBmYWxzZSBicmFuY2guDQo+Pj4+ IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6NDAyOjI6DQo+Pj4+IMKgwqDCoCA4LiBwYXRo OiBDb25kaXRpb24gIiFsZW4iLCB0YWtpbmcgZmFsc2UgYnJhbmNoLg0KPj4+PiAvaG9tZS9zYnJp dmlvL3Bhc3N0L3RjcF92dS5jOjQyNToyOg0KPj4+PiDCoMKgwqAgOS4gcGF0aDogQ29uZGl0aW9u ICJsb2dfdHJhY2UiLCB0YWtpbmcgdHJ1ZSBicmFuY2guDQo+Pj4+IC9ob21lL3Nicml2aW8vcGFz c3QvdGNwX3Z1LmM6NDI2OjI6DQo+Pj4+IMKgwqDCoCAxMC4gcGF0aDogQ29uZGl0aW9uICJsb2df dHJhY2UiLCB0YWtpbmcgdHJ1ZSBicmFuY2guDQo+Pj4+IC9ob21lL3Nicml2aW8vcGFzc3QvdGNw X3Z1LmM6NDM5OjI6DQo+Pj4+IMKgwqDCoCAxMS4gcGF0aDogQ29uZGl0aW9uICJ2NiIsIHRha2lu ZyB0cnVlIGJyYW5jaC4NCj4+Pj4gL2hvbWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzo0Mzk6MjoN Cj4+Pj4gwqDCoMKgIDEyLiBmdW5jdGlvbl9yZXR1cm46IEZ1bmN0aW9uICJ0Y3BfdnVfaGRybGVu KHY2KSIgcmV0dXJucyA4Ni4NCj4+Pj4gL2hvbWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzo0Mzk6 MjoNCj4+Pj4gwqDCoMKgIDEzLiBrbm93bl92YWx1ZV9hc3NpZ246ICJoZHJsZW4iID0gInRjcF92 dV9oZHJsZW4odjYpIiwgaXRzIHZhbHVlIGlzIG5vdyA4Ni4NCj4+Pj4gL2hvbWUvc2JyaXZpby9w YXNzdC90Y3BfdnUuYzo0NDA6MjoNCj4+Pj4gwqDCoMKgIDE0LiBwYXRoOiBDb25kaXRpb24gImkg PCBoZWFkX2NudCIsIHRha2luZyB0cnVlIGJyYW5jaC4NCj4+Pj4gL2hvbWUvc2JyaXZpby9wYXNz dC90Y3BfdnUuYzo0NDM6MzoNCj4+Pj4gwqDCoMKgIDE1LiBmdW5jdGlvbl9yZXR1cm46IEZ1bmN0 aW9uICJpb3Zfc2l6ZShpb3YsIGJ1Zl9jbnQpIiByZXR1cm5zIDAuDQo+Pj4+IC9ob21lL3Nicml2 aW8vcGFzc3QvdGNwX3Z1LmM6NDQzOjM6DQo+Pj4+IMKgwqDCoCAxNi4ga25vd25fdmFsdWVfYXNz aWduOiAiZGxlbiIgPSAiaW92X3NpemUoaW92LCBidWZfY250KSAtIGhkcmxlbiIsIGl0cyB2YWx1 ZSBpcyANCj4+Pj4gbm93IDE4NDQ2NzQ0MDczNzA5NTUxNTMwLg0KPj4+PiAvaG9tZS9zYnJpdmlv L3Bhc3N0L3RjcF92dS5jOjQ1MDozOg0KPj4+PiDCoMKgwqAgMTcuIHBhdGg6IENvbmRpdGlvbiAi cHJldmlvdXNfZGxlbiAhPSBkbGVuIiwgdGFraW5nIHRydWUgYnJhbmNoLg0KPj4+PiAvaG9tZS9z YnJpdmlvL3Bhc3N0L3RjcF92dS5jOjQ1NDozOg0KPj4+PiDCoMKgwqAgMTguIHBhdGg6IENvbmRp dGlvbiAiISpjLT5wY2FwIiwgdGFraW5nIGZhbHNlIGJyYW5jaC4NCj4+Pj4gL2hvbWUvc2JyaXZp by9wYXNzdC90Y3BfdnUuYzo0NTc6MzoNCj4+Pj4gwqDCoMKgIDE5LiBvdmVyZmxvd19jb25zdDog RXhwcmVzc2lvbiAiZGxlbiArIGhkcmxlbiIsIHdoZXJlICJkbGVuIiBpcyBrbm93biB0byBiZSBl cXVhbCANCj4+Pj4gdG8gLTg2LMKgIGFuZCAiaGRybGVuIiBpcyBrbm93biB0byBiZSBlcXVhbCB0 byA4NiwgdW5kZXJmbG93cyB0aGUgdHlwZSBvZiAiZGxlbiArIA0KPj4+PiBoZHJsZW4iLCB3aGlj aCBpcyB0eXBlICJ1bnNpZ25lZCBsb25nIi4NCj4+Pg0KPj4+IGlmIGlvdl9zaXplKGlvdiwgYnVm X2NudCkgPSAwIGFuZCBoZHJsZW4gPSA4NiAoYWxsIHVuc2lnbmVkKQ0KPj4+ICJkbGVuIiA9ICJp b3Zfc2l6ZShpb3YsIGJ1Zl9jbnQpIC0gaGRybGVuIiwgaXRzIHZhbHVlIGlzIG5vdyAxODQ0Njc0 NDA3MzcwOTU1MTUzMCAoc2VlDQo+Pj4gMTYuKSAoaS5lLiAtaGRybGVuLCB1bnNpZ25lZCAtODYp DQo+Pj4gc28gImRsZW4gKyBoZHJsZW4iIG92ZXJmbG93cyAoSSBndWVzcykuDQo+Pg0KPj4gSSB3 YXMgYWxzbyB0aGlua2luZyBpdCB3YXMgc29tZXRoaW5nIGxpa2UgdGhhdCBidXQ6DQo+Pg0KPj4+ DQo+Pj4gVHJ5Og0KPj4+IGRpZmYgLS1naXQgYS90Y3BfdnUuYyBiL3RjcF92dS5jDQo+Pj4gaW5k ZXggOGNhNDE3MGYxM2Y2Li43ODdlZTAwNGE2NmEgMTAwNjQ0DQo+Pj4gLS0tIGEvdGNwX3Z1LmMN Cj4+PiArKysgYi90Y3BfdnUuYw0KPj4+IEBAIC00NDAsNyArNDQwLDcgQEAgaW50IHRjcF92dV9k YXRhX2Zyb21fc29jayhjb25zdCBzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uIA0K Pj4+ICpjb25uKQ0KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwLCBwcmV2aW91c19k bGVuID0gLTEsIGNoZWNrID0gTlVMTDsgaSA8IGhlYWRfY250OyBpKyspIHsNCj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpb3ZlYyAqaW92ID0gJmVsZW1baGVh ZFtpXV0uaW5fc2dbMF07DQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQgYnVmX2NudCA9IGhlYWRbaSArIDFdIC0gaGVhZFtpXTsNCj4+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzc2l6ZV90IGRsZW4gPSBpb3Zfc2l6ZShpb3YsIGJ1Zl9jbnQpIC0gaGRy bGVuOw0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzaXplX3QgZGxlbiA9IChz c2l6ZV90KWlvdl9zaXplKGlvdiwgYnVmX2NudCkgLSBoZHJsZW47DQo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIHB1c2ggPSBpID09IGhlYWRfY250IC0gMTsNCj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfdCBsMmxlbjsNCj4+DQo+ PiAuLi5zdGlsbCBub3QgaGFwcHkgYmVjYXVzZSBvZiBob3cgd2UgdXNlIGRsZW4gbGF0ZXIgKEkg dGhpbms/KToNCj4+DQo+PiAvaG9tZS9zYnJpdmlvL3Bhc3N0L3RjcF92dS5jOjQ1NzozOg0KPj4g wqDCoCBUeXBlOiBPdmVyZmxvd2VkIGNvbnN0YW50IChJTlRFR0VSX09WRVJGTE9XKQ0KPj4NCj4+ IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6MzU1OjI6DQo+PiDCoMKgIDEuIHBhdGg6IENv bmRpdGlvbiAiIXZ1X3F1ZXVlX2VuYWJsZWQodnEpIiwgdGFraW5nIGZhbHNlIGJyYW5jaC4NCj4+ IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6MzU1OjI6DQo+PiDCoMKgIDIuIHBhdGg6IENv bmRpdGlvbiAiIXZ1X3F1ZXVlX3N0YXJ0ZWQodnEpIiwgdGFraW5nIGZhbHNlIGJyYW5jaC4NCj4+ IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6MzYyOjI6DQo+PiDCoMKgIDMuIHBhdGg6IENv bmRpdGlvbiAiMFUgLyogKHVpbnQzMl90KTAgKi8gLSAodWludDMyX3QpYWxyZWFkeV9zZW50IC0g MSA8ICgxNjc3NzIxNlUgLyogDQo+PiAxIDw8IDE2ICsgOCAqLykiLCB0YWtpbmcgZmFsc2UgYnJh bmNoLg0KPj4gL2hvbWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzozNzQ6MjoNCj4+IMKgwqAgNC4g cGF0aDogQ29uZGl0aW9uICIhd25kX3NjYWxlZCIsIHRha2luZyBmYWxzZSBicmFuY2guDQo+PiAv aG9tZS9zYnJpdmlvL3Bhc3N0L3RjcF92dS5jOjM3NDoyOg0KPj4gwqDCoCA1LiBwYXRoOiBDb25k aXRpb24gImFscmVhZHlfc2VudCA+PSB3bmRfc2NhbGVkIiwgdGFraW5nIGZhbHNlIGJyYW5jaC4N Cj4+IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6Mzg4OjI6DQo+PiDCoMKgIDYuIHBhdGg6 IENvbmRpdGlvbiAidjYiLCB0YWtpbmcgdHJ1ZSBicmFuY2guDQo+PiAvaG9tZS9zYnJpdmlvL3Bh c3N0L3RjcF92dS5jOjM5MDoyOg0KPj4gwqDCoCA3LiBwYXRoOiBDb25kaXRpb24gImxlbiA8IDAi LCB0YWtpbmcgZmFsc2UgYnJhbmNoLg0KPj4gL2hvbWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzo0 MDI6MjoNCj4+IMKgwqAgOC4gcGF0aDogQ29uZGl0aW9uICIhbGVuIiwgdGFraW5nIGZhbHNlIGJy YW5jaC4NCj4+IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6NDI1OjI6DQo+PiDCoMKgIDku IHBhdGg6IENvbmRpdGlvbiAibG9nX3RyYWNlIiwgdGFraW5nIHRydWUgYnJhbmNoLg0KPj4gL2hv bWUvc2JyaXZpby9wYXNzdC90Y3BfdnUuYzo0MjY6MjoNCj4+IMKgwqAgMTAuIHBhdGg6IENvbmRp dGlvbiAibG9nX3RyYWNlIiwgdGFraW5nIHRydWUgYnJhbmNoLg0KPj4gL2hvbWUvc2JyaXZpby9w YXNzdC90Y3BfdnUuYzo0Mzk6MjoNCj4+IMKgwqAgMTEuIHBhdGg6IENvbmRpdGlvbiAidjYiLCB0 YWtpbmcgdHJ1ZSBicmFuY2guDQo+PiAvaG9tZS9zYnJpdmlvL3Bhc3N0L3RjcF92dS5jOjQ0MDoy Og0KPj4gwqDCoCAxMi4gcGF0aDogQ29uZGl0aW9uICJpIDwgaGVhZF9jbnQiLCB0YWtpbmcgdHJ1 ZSBicmFuY2guDQo+PiAvaG9tZS9zYnJpdmlvL3Bhc3N0L3RjcF92dS5jOjQ0MzozOg0KPj4gwqDC oCAxMy4ga25vd25fdmFsdWVfYXNzaWduOiAiZGxlbiIgPSAiKHNzaXplX3QpaW92X3NpemUoaW92 LCBidWZfY250KSAtIGhkcmxlbiIsIGl0cyANCj4+IHZhbHVlIGlzIG5vdyAxODQ0Njc0NDA3Mzcw OTU1MTUzMC4NCj4+IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6NDUwOjM6DQo+PiDCoMKg IDE0LiBwYXRoOiBDb25kaXRpb24gInByZXZpb3VzX2RsZW4gIT0gZGxlbiIsIHRha2luZyB0cnVl IGJyYW5jaC4NCj4+IC9ob21lL3Nicml2aW8vcGFzc3QvdGNwX3Z1LmM6NDU0OjM6DQo+PiDCoMKg IDE1LiBwYXRoOiBDb25kaXRpb24gIiEqYy0+cGNhcCIsIHRha2luZyBmYWxzZSBicmFuY2guDQo+ PiAvaG9tZS9zYnJpdmlvL3Bhc3N0L3RjcF92dS5jOjQ1NzozOg0KPj4gwqDCoCAxNi4gb3ZlcmZs b3dfY29uc3Q6IEV4cHJlc3Npb24gImRsZW4gKyBoZHJsZW4iLCB3aGVyZSAiZGxlbiIgaXMga25v d24gdG8gYmUgZXF1YWwgdG8gDQo+PiAtODYswqAgYW5kICJoZHJsZW4iIGlzIGtub3duIHRvIGJl IGVxdWFsIHRvIDg2LCB1bmRlcmZsb3dzIHRoZSB0eXBlIG9mICJkbGVuICsgaGRybGVuIiwgDQo+ PiB3aGljaCBpcyB0eXBlICJ1bnNpZ25lZCBsb25nIi4NCj4+DQo+PiAvaG9tZS9zYnJpdmlvL3Bh c3N0L2NvbmYuYzoyMzczOjQ6DQo+PiDCoMKgIFR5cGU6IFVudHJ1c3RlZCB2YWx1ZSBhcyBhcmd1 bWVudCAoVEFJTlRFRF9TQ0FMQVIpDQo+Pg0KPiANCj4gQ291bGQgeW91IHRyeToNCj4gZGlmZiAt LWdpdCBhL3RjcF92dS5jIGIvdGNwX3Z1LmMNCj4gaW5kZXggOGNhNDE3MGYxM2Y2Li5mZDczNGU4 NTdiM2IgMTAwNjQ0DQo+IC0tLSBhL3RjcF92dS5jDQo+ICsrKyBiL3RjcF92dS5jDQo+IEBAIC00 NDAsMTAgKzQ0MCwxNCBAQCBpbnQgdGNwX3Z1X2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBj dHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gDQo+ICpjb25uKQ0KPiAgwqDCoMKgwqDCoMKgwqAg Zm9yIChpID0gMCwgcHJldmlvdXNfZGxlbiA9IC0xLCBjaGVjayA9IE5VTEw7IGkgPCBoZWFkX2Nu dDsgaSsrKSB7DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlvdmVj ICppb3YgPSAmZWxlbVtoZWFkW2ldXS5pbl9zZ1swXTsNCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpbnQgYnVmX2NudCA9IGhlYWRbaSArIDFdIC0gaGVhZFtpXTsNCj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NpemVfdCBkbGVuID0gaW92X3NpemUoaW92LCBidWZf Y250KSAtIGhkcmxlbjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV90IGZy YW1lX3NpemUgPSBpb3Zfc2l6ZShpb3YsIGJ1Zl9jbnQpOw0KPiAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJvb2wgcHVzaCA9IGkgPT0gaGVhZF9jbnQgLSAxOw0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzc2l6ZV90IGRsZW47DQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc2l6ZV90IGwybGVuOw0KPiANCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQVNTRVJUKGZyYW1lX3NpemUgPj0gaGRybGVuKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkbGVuID0gZnJhbWVfc2l6ZSAtIGhkcmxlbjsNCj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dV9zZXRfdm5ldGhkcihpb3YtPmlvdl9iYXNlLCBidWZf Y250KTsNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogVGhlIElQdjQg aGVhZGVyIGNoZWNrc3VtIHZhcmllcyBvbmx5IHdpdGggZGxlbiAqLw0KPiANCj4gQ292ZXJpdHkg bGlrZXMgIkFTU0VSVCgpIi4uLg0KDQpUaGlzIHNlZW1zIHRvIGZpeCB0aGUgcHJvYmxlbSBmb3Ig bWUuDQoNCkRvIHlvdSB3YW50IGEgc2VwYXJhdGUgcGF0Y2ggb3IgdG8gbWVyZ2Ugd2l0aCB0aGlz IG9uZT8NCg0KVGhhbmtzLA0KTGF1cmVudA0KDQo=