From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=quarantine dis=none) header.from=redhat.com Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id 076CB5A0265 for ; Mon, 09 Nov 2026 16:08:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1794236879; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to: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=7kGqjyjk0a2b4pMArY45WLCk3mzlUiGuZm4GgEC4Xgc=; b=XCXJxBPpoSXkNVy71utXfdUF1TgQbpKIvJu9NQCabiwjDPJ8Jw8Q4qYQm2SS+k9rBhR5of LXHWGAUV0kv3bOwA5gAW8Q5z6GsjJq1qQ1B2JpRbvbcJzg4U8prD6IXJUKkMUJYHQd/pUY o2nJo8faor2i5VGNAoGt9zTyPDzHbIk= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-471-GCqvT8k_MpOrUHmjwQGOUA-1; Mon, 09 Nov 2026 10:07:58 -0500 X-MC-Unique: GCqvT8k_MpOrUHmjwQGOUA-1 X-Mimecast-MFC-AGG-ID: GCqvT8k_MpOrUHmjwQGOUA_1794236877 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-4923b9fdd43so945657f8f.3 for ; Mon, 09 Nov 2026 07:07:58 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794236877; x=1794841677; h=content-transfer-encoding:content-type:in-reply-to:autocrypt:from :content-language:references:to:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7kGqjyjk0a2b4pMArY45WLCk3mzlUiGuZm4GgEC4Xgc=; b=0iPT9qJCG5Rm3JD5ItVKiVkCrcKp+P9gRvD5t6pGd20INWlYkQ0y6DG5uEpy1SB1a7 X2HmZsuZF8ccMBKjIEPW7n6A3VQilEeptgOfC21BHD71jJiVSCLlsOwlwjzGkR+qSNJa jWW3qJ8UNHPeYSGa0UB4W1xRSJYBIqfbxT3irmSqz0pvMq+K+QbLzWDMpMqVZOO6vBaS tmc65cUKyTpHkn/Ey5LzTnooP93FbUFFM9ErRe/STdqwa55bT7JZ65w0y9zJJtb3TNpF HNl7A2hJj6HgWOPuMn1Eggt5YRv0FEcAydS6njMbyb/12ABed7DJk7KrIvCKL3oHZeax dBiw== X-Forwarded-Encrypted: i=1; AL+hErHshAY4wisF6vLCGDzsdXkiEN7vRS6GstvRGYMSHCr9wfW4QZ8ssdvKlxze1yRGTzm+HuW0RUtHCMI=@passt.top X-Gm-Message-State: APuU4Z9VqhWBj82I48P33hUFbKQDTdDxptJLvUMGBB8RCJ1TQ5VjEyRH CQZ/Dv0g6eDZl1M1bMDmx/TJs9YRtDClRLcuWrPJsc85QJ70DN1wUilwrYysgKPX+cI9I6f2bJ/ //xELVxqoQlJf/4zQnp6Rw4bR553bYeAskCIpf1d5ZPfiBaFLZoizxQ== X-Gm-Gg: AYBFou0dxsHLUhnPmrcRliLiI5lSoNGnkp0R78kqG5rB7xiqXdtF2sTFO8BlW6G1PDr Dv6EGWmUiUsVHwtzKI6gecaHTEU4aCOB5YrsagFJPkcIXT5M55cCQoITIHN1CF5/8VrxaUxM1KN 5v1avyLnEJOPVd8E95ZCxZ+vhcuialuzlisD0zWUq+KnEqs5dMjJ9p5loMt5NrzSxpcBBueQ9Lr l6wKUl9IBYY+g9QoVwjA6SWqBDA3nxb+/h1J5b/pwmtYexRs0dFSb2yFy6zBFnPEf6DZhPx/bT4 OLUL0dR9RVE4IiFwiv0NmNTVL0Ia9z3oOKY1lccfY7aB+yG68tcGEHetcqWQHgZRigziRra0yfy FLoR6iCXic0EuUMRKQQYNpl1VkUz21RVFx09kyexd8IcgCCbabRRX69JVKrRcrdzKrgedtQLznH OqcNiVVJWDbonhf4w= X-Received: by 2002:a05:6000:3101:b0:48c:6cdd:ba89 with SMTP id ffacd0b85a97d-49584e3e3f1mr9289007f8f.36.1794236876983; Mon, 09 Nov 2026 07:07:56 -0800 (PST) X-Received: by 2002:a05:6000:3101:b0:48c:6cdd:ba89 with SMTP id ffacd0b85a97d-49584e3e3f1mr9288923f8f.36.1794236876380; Mon, 09 Nov 2026 07:07:56 -0800 (PST) Received: from ?IPV6:2a01:e0a:e10:ef90:e9e7:d9a0:a4eb:dc4b? ([2a01:e0a:e10:ef90:e9e7:d9a0:a4eb:dc4b]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-495b90701c7sm13144335f8f.10.2026.11.09.07.07.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 09 Nov 2026 07:07:55 -0800 (PST) Message-ID: <272a495f-ec45-4812-8d0b-45189d1cb106@redhat.com> Date: Mon, 9 Nov 2026 16:07:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 3/7] virtio: Add the pasta vhost-net interface and implementation To: aerosouund , passt-dev@passt.top References: <20261016204940.33190-1-aerosound161@gmail.com> <20261016204940.33190-4-aerosound161@gmail.com> From: Laurent Vivier Autocrypt: addr=lvivier@redhat.com; keydata= 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 In-Reply-To: <20261016204940.33190-4-aerosound161@gmail.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: NIo34OhILKp5FE0sSthdBt_Y58ymALe6dnXCSLE2WWo_1794236877 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: AIOP7SNU2JB3PZAAEBZ6RXYKD7CTWKRP X-Message-ID-Hash: AIOP7SNU2JB3PZAAEBZ6RXYKD7CTWKRP 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 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: T24gMTAvMTYvMjYgMjI6NDksIGFlcm9zb3V1bmQgd3JvdGU6DQo+IEZyb206IEFtbWFyIFlhc3Nl ciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCj4gDQo+IEFkZCB2aG9zdC5jIGFuZCB2aG9zdC5o IHdoaWNoIGRlZmluZSB0aGUgYXBpIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3INCj4gcGFzdGEgdmhv c3QgYWNjZWxlcmF0aW9uDQo+IA0KPiAtIHZxX3N0YXRlL3Zob3N0X3ZxX3N0YXRlW106IG91ciBv d24gdmlldyBvZiBlYWNoIHZpcnRxdWV1ZSwgd2hpY2ggdGhlDQo+ICAgIGtlcm5lbCBkb2Vzbid0 IHRyYWNrIGZvciB1czogZGVzY3JpcHRvcnMgcmVhZHkgdG8gaGFuZCBiYWNrLCBob3cgZmFyDQo+ ICAgIHdlJ3ZlIHJlYWQgdGhlIHVzZWQgcmluZywgYW5kIHRoZSBuZXh0IGRlc2NyaXB0b3IgdG8g YWxsb2NhdGUNCj4gLSB2cmluZ19kZXNjLCB2cmluZ19hdmFpbF9hbGwsIHZyaW5nX3VzZWRfYWxs LCB2aG9zdF9tZW1vcnk6IHRoZSByaW5ncw0KPiAgICBhbmQgdGhlIHJlZ2lvbiB0YWJsZSBzaGFy ZWQgd2l0aCB0aGUga2VybmVsDQo+IC0gdmhvc3Rfc2V0dXBfbmV0OiBvcGVuIC9kZXYvdmhvc3Qt bmV0IGFuZCBuZWdvdGlhdGUgVklSVElPX0ZfVkVSU0lPTl8xDQo+ICAgIGFuZCBWSE9TVF9ORVRf Rl9WSVJUSU9fTkVUX0hEUi4gRmFpbHVyZSBpcyBmYXRhbCBvbmx5IGlmDQo+ICAgIC0tdmhvc3Qt a2VybmVsIGlzIHNldCB0byAnb24nLg0KPiAtIHZob3N0X3NldHVwX2V2ZW50ZmRzOiBjcmVhdGUs IHJlZ2lzdGVyIGFuZCB3YXRjaCB0aGUgY2FsbCwga2ljayBhbmQNCj4gICAgZXJyb3IgZXZlbnRm ZHMgZm9yIG9uZSBxdWV1ZQ0KPiAtIHZob3N0X3NldHVwX21lbW9yeV90YWJsZTogcmVnaXN0ZXIg dGhlIGJ1ZmZlcnMgdGhlIGtlcm5lbCBtYXkgdG91Y2guDQo+ICAgIHBhc3RhIGhhcyBubyBndWVz dCwgc28gZWFjaCByZWdpb24gbWFwcyBndWVzdF9waHlzX2FkZHIgb250byB0aGUNCj4gICAgaWRl bnRpY2FsIHVzZXJzcGFjZV9hZGRyLCBtYWtpbmcgR1BBIHRyYW5zbGF0aW9uIGFuIGlkZW50aXR5 IG1hcHBpbmcuDQo+ICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgKl9yZWdpc3Rlcl9tZW1vcnlf cmVnaW9ucyBmdW5jdGlvbnMgY3JlYXRlZCBwZXINCj4gICAgcHJvdG9jb2wgYW5kIGZvciBnZW5l cmFsIHB1cnBvc2UgYnVmZmVycy4NCj4gLSB2aG9zdF9zZXRfdnJpbmc6IHB1Ymxpc2ggYSB2cmlu ZydzIGFkZHJlc3NlcywgYmluZCB0aGUgdGFwIGZkIGFzIGl0cw0KPiAgICBiYWNrZW5kIGFuZCBs YXkgb3V0IGl0cyBkZXNjcmlwdG9ycw0KPiAtIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZiwg dmhvc3Rfa2ljazogaGFuZCBjb25zdW1lZCBkZXNjcmlwdG9ycyBiYWNrDQo+ICAgIGFuZCBub3Rp ZnkgdGhlIGtlcm5lbCB1bmxlc3MgaXQgc2F5cyBpdCdzIGFscmVhZHkgcG9sbGluZw0KPiANCj4g U2lnbmVkLW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5jb20+DQo+IFNp Z25lZC1vZmYtYnk6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4NCj4gLS0t DQo+ICAgTWFrZWZpbGUgIHwgICAyICstDQo+ICAgdGNwX2J1Zi5jIHwgIDIyICsrKy0NCj4gICB0 Y3BfYnVmLmggfCAgIDQgKw0KPiAgIHVkcC5jICAgICB8ICAyMCArKysrDQo+ICAgdWRwLmggICAg IHwgICAzICsNCj4gICB1dGlsLmMgICAgfCAgMTggKysrKw0KPiAgIHV0aWwuaCAgICB8ICAgMiAr DQo+ICAgdmhvc3QuYyAgIHwgMjk1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKw0KPiAgIHZob3N0LmggICB8ICA5MSArKysrKysrKysrKysrKysr Kw0KPiAgIDkgZmlsZXMgY2hhbmdlZCwgNDU1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p DQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHZob3N0LmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg dmhvc3QuaA0KPiANCi4uLg0KPiBkaWZmIC0tZ2l0IGEvdmhvc3QuYyBiL3Zob3N0LmMNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uYTY5YzRiNQ0KPiAtLS0gL2Rldi9u dWxsDQo+ICsrKyBiL3Zob3N0LmMNCi4uLg0KPiArLyoqDQo+ICsgKiB2aG9zdF9zZXRfdnJpbmco KSAtIFJlZ2lzdGVyIGEgdnJpbmcncyBhZGRyZXNzZXMgYW5kIGJpbmQgaXRzIGJhY2tlbmQNCj4g KyAqIEBjOgkJRXhlY3V0aW9uIGNvbnRleHQ7IGMtPnZob3N0LmZkIG11c3QgYWxyZWFkeSBiZSBz ZXQNCj4gKyAqIEBxdWV1ZV9pZHg6CUluZGV4IG9mIHRoZSBxdWV1ZSAodnJpbmcpIHRvIGNvbmZp Z3VyZQ0KPiArICogQHRhcF9mZDoJVGFwIGZkIHRvIGJpbmQgYXMgdGhpcyBxdWV1ZSdzIGJhY2tl bmQNCj4gKyAqLw0KPiArdm9pZCB2aG9zdF9zZXRfdnJpbmcoc3RydWN0IGN0eCAqYywgaW50IHF1 ZXVlX2lkeCwgaW50IHRhcF9mZCkNCj4gK3sNCj4gKwlpbnQgdmhvc3RfZmQgPSBjLT52aG9zdC5m ZDsNCj4gKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfYWRkciBhZGRyID0gew0KPiArCQkuaW5kZXggPSBx dWV1ZV9pZHgsDQo+ICsJCS5kZXNjX3VzZXJfYWRkciA9ICh1bnNpZ25lZCBsb25nKXZyaW5nX2Rl c2NbcXVldWVfaWR4XSwNCj4gKwkJLmF2YWlsX3VzZXJfYWRkciA9ICh1bnNpZ25lZCBsb25nKSZ2 cmluZ19hdmFpbF9hbGxbcXVldWVfaWR4XSwNCj4gKwkJLnVzZWRfdXNlcl9hZGRyID0gKHVuc2ln bmVkIGxvbmcpJnZyaW5nX3VzZWRfYWxsW3F1ZXVlX2lkeF0sDQo+ICsJCS5sb2dfZ3Vlc3RfYWRk ciA9ICh1bnNpZ25lZCBsb25nKSZ2cmluZ191c2VkX2FsbFtxdWV1ZV9pZHhdLA0KDQpJIHRoaW5r IGl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgdWludHB0cl90IGZvciB0aGUgY2FzdHMuDQoNCj4g Kwl9Ow0KPiArCXN0cnVjdCB2aG9zdF92cmluZ19maWxlIGZpbGUgPSB7DQo+ICsJCS5pbmRleCA9 IHF1ZXVlX2lkeCwNCj4gKwkJLmZkID0gdGFwX2ZkLA0KPiArCX07DQo+ICsJdW5zaWduZWQgaW50 IGk7DQo+ICsJaW50IHJjOw0KPiArDQo+ICsJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VU X1ZSSU5HX0FERFIsICZhZGRyKTsNCj4gKwlpZiAocmMgPCAwKQ0KPiArCQlkaWVfcGVycm9yKCJW SE9TVF9TRVRfVlJJTkdfQUREUiBpb2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwNCj4gKwkJCSAgIHF1 ZXVlX2lkeCk7DQo+ICsNCj4gKwlpZiAocXVldWVfaWR4ID09IFZIT1NUX0FWQUlMX1FfSURYKSB7 DQoNCg0KVkhPU1RfQVZBSUxfUV9JRFggKDApIGlzIG5vdCByZWFsbHkgbWVhbmluZ2Z1bCwgYW5k IGlmIGluIHRoZSBmdXR1cmUgd2Ugd2FudCB0byBzdXBwb3J0IA0KbXVsdGlxdWV1ZSB3ZSBzaG91 bGQgdXNlIHNvbWV0aGluZyBsaWtlIFZIT1NUX1VTRVJfSVNfUVVFVUVfUlgocXVldWVfaWR4KQ0K DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBWSE9TVF9OREVTQ1M7ICsraSkgew0KPiArCQkJdnJpbmdf ZGVzY1tWSE9TVF9BVkFJTF9RX0lEWF1baV0uYWRkciA9DQo+ICsJCQkJKHVpbnRwdHJfdClwa3Rf YnVmICsgaSAqIFZIT1NUX0RFU0NfQllURVM7DQo+ICsJCQl2cmluZ19kZXNjW1ZIT1NUX0FWQUlM X1FfSURYXVtpXS5sZW4gPSBWSE9TVF9ERVNDX0JZVEVTOw0KPiArCQkJdnJpbmdfZGVzY1tWSE9T VF9BVkFJTF9RX0lEWF1baV0uZmxhZ3MgPQ0KPiArCQkJCVZSSU5HX0RFU0NfRl9XUklURTsNCj4g KwkJfQ0KPiArDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBWSE9TVF9OREVTQ1M7ICsraSkNCj4gKwkJ CXZyaW5nX2F2YWlsX2FsbFtWSE9TVF9BVkFJTF9RX0lEWF0ucmluZ1tpXSA9DQo+ICsJCQkJaHRv bGUxNihpKTsNCj4gKw0KPiArCQl2aG9zdF9yeF9kZXNjcmlwdG9yX2hhbmRvZmYoYyk7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKHF1ZXVlX2lkeCA9PSBWSE9TVF9VU0VEX1FfSURYKSB7DQoNCnNvbWV0 aGluZyBsaWtlIFZIT1NUX1VTRVJfSVNfUVVFVUVfVFgocXVldWVfaWR4KSwgcGVyaGFwcyB3ZSBj YW4gcmVuYW1lIHRoZW0gDQpWSE9TVF9JU19RVUVVRV9UWCgpL1ZIT1NUX0lTX1FVRVVFX1JYKCku DQoNClBsZWFzZSBhZGQgYSBjb21tZW50IGV4cGxhaW5pbmcgLmFkZHIgYW5kIC5sZW4gd2lsbCBi ZSBzZXQgaW4gdGFwX3NlbmRfZnJhbWVzX3Zob3N0KCkNCg0KPiArCQlmb3IgKGkgPSAwOyBpIDwg KFZIT1NUX05ERVNDUyAtIDEpOyArK2kpDQo+ICsJCQl2cmluZ19kZXNjW1ZIT1NUX1VTRURfUV9J RFhdW2ldLm5leHQgPSBpICsgMTsNCj4gKwl9DQo+ICsNCj4gKwlyYyA9IGlvY3RsKHZob3N0X2Zk LCBWSE9TVF9ORVRfU0VUX0JBQ0tFTkQsICZmaWxlKTsNCj4gKwlpZiAocmMgPCAwKQ0KPiArCQlk aWVfcGVycm9yKCJWSE9TVF9ORVRfU0VUX0JBQ0tFTkQgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIs DQo+ICsJCQkgICBxdWV1ZV9pZHgpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHZob3N0X3J4 X2Rlc2NyaXB0b3JfaGFuZG9mZigpIC0gQW5ub3VuY2UgZnJlZWQgZnJvbS1ndWVzdCBkZXNjcmlw dG9ycw0KPiArICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KPiArICoNCj4gKyAqIEJ1bXBzIGF2 YWlsLmlkeCBieSB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIGluDQo+ICsg KiB2aG9zdF92cV9zdGF0ZVtWSE9TVF9BVkFJTF9RX0lEWF0ubnVtX2ZyZWUgKGZyb20gcHJpb3IN Cj4gKyAqIGNvbnN1bWVfb25lX3J4X2Rlc2NyaXB0b3IoKSBjYWxscyksDQo+ICsgKiB0aGVuIHJl c2V0cyB0aGUgY291bnRlciB0byB6ZXJvLiBUaGUga2VybmVsIHdpbGwgc2VlIHRoZSBuZXcNCj4g KyAqIGF2YWlsLmlkeCBhbmQgY29uc3VtZSB0aGUgZnJlc2hseS1hdmFpbGFibGUgZGVzY3JpcHRv cnMuDQo+ICsgKi8NCj4gK3ZvaWQgdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKHN0cnVjdCBj dHggKmMpDQoNCnBlcmhhcHMgeW91IGNhbiBhZGQgcXVldWVfaWR4IGluIHRoZSBwYXJhbWV0ZXJz Lg0KDQo+ICt7DQo+ICsJc21wX3dtYigpOw0KPiArDQo+ICsJaWYgKCF2aG9zdF92cV9zdGF0ZVtW SE9TVF9BVkFJTF9RX0lEWF0ubnVtX2ZyZWUpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCXZyaW5n X2F2YWlsX2FsbFtWSE9TVF9BVkFJTF9RX0lEWF0uaWR4ICs9DQo+ICsJCXZob3N0X3ZxX3N0YXRl W1ZIT1NUX0FWQUlMX1FfSURYXS5udW1fZnJlZTsNCj4gKwl2aG9zdF92cV9zdGF0ZVtWSE9TVF9B VkFJTF9RX0lEWF0ubnVtX2ZyZWUgPSAwOw0KPiArCXZob3N0X2tpY2soJnZyaW5nX3VzZWRfYWxs W1ZIT1NUX0FWQUlMX1FfSURYXSwNCj4gKwkJICAgYy0+dmhvc3QudnFbVkhPU1RfQVZBSUxfUV9J RFhdLmtpY2tfZmQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHZob3N0X2tpY2soKSAtIE5v dGlmeSB0aGUga2VybmVsIHRoYXQgbmV3IGRlc2NyaXB0b3JzIGFyZSBhdmFpbGFibGUNCj4gKyAq IEB1c2VkOglVc2VkIHJpbmcgb2YgdGhlIHF1ZXVlIHdlJ3JlIGFubm91bmNpbmcgb24sIGNoZWNr ZWQgdG8gc2VlDQo+ICsgKgkJd2hldGhlciB0aGUga2VybmVsJ3MgdmlydGlvIHRocmVhZCBpcyBh bHJlYWR5IHJlYWRpbmcNCj4gKyAqCQlkZXNjcmlwdG9ycyBhbmQgZG9lc24ndCB3YW50IHRvIGJl IG5vdGlmaWVkDQo+ICsgKiBAa2lja19mZDoJS2ljayBldmVudGZkIG9mIHRoYXQgc2FtZSBxdWV1 ZQ0KPiArICovDQo+ICt2b2lkIHZob3N0X2tpY2soc3RydWN0IHZyaW5nX3VzZWRfcGFzdGEgKnVz ZWQsIGludCBraWNrX2ZkKQ0KPiArew0KPiArCS8qIEVuc3VyZSB0aGF0IHRoZSByZWFkIG9mIHVz ZWQtPmZsYWdzIGRvZXNuJ3QgZ2V0IHJlb3JkZXJlZCB0byBiZQ0KPiArCSAqIGFib3ZlIHRoZSBh dmFpbC5pZHggdXBkYXRlDQo+ICsJICovDQo+ICsJc21wX21iKCk7DQo+ICsNCj4gKwlpZiAoISh1 c2VkLT5mbGFncyAmIFZSSU5HX1VTRURfRl9OT19OT1RJRlkpKQ0KPiArCQlldmVudGZkX3dyaXRl KGtpY2tfZmQsIDEpOw0KPiArfQ0KDQo=