From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=none dis=none) header.from=gmail.com Received: from [10.157.41.19] (unknown [105.199.60.18]) by passt.top (Postfix) with ESMTP id 8C41B5A0269 for ; Fri, 16 Oct 2026 22:55:45 +0200 (CEST) X-FEAS-Client-IP: 10.157.41.19 Received: by Ammars-Air.localdomain (Postfix, from userid 501) id F0A9B1564EF3; Fri, 16 Oct 2026 23:49:40 +0300 (EEST) From: aerosouund To: aerosound161@gmail.com, passt-dev@passt.top Subject: [PATCH v2 3/7] virtio: Add the pasta vhost-net interface and implementation Date: Fri, 16 Oct 2026 23:49:36 +0300 Message-Id: <20261016204940.33190-4-aerosound161@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20261016204940.33190-1-aerosound161@gmail.com> References: <20261016204940.33190-1-aerosound161@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: WC6BNT3FFVDY5W7QJAZX2AOSBSRGET7J X-Message-ID-Hash: WC6BNT3FFVDY5W7QJAZX2AOSBSRGET7J X-MailFrom: ammaryasser@Ammars-Air.localdomain 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: RnJvbTogQW1tYXIgWWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KDQpBZGQgdmhvc3Qu YyBhbmQgdmhvc3QuaCB3aGljaCBkZWZpbmUgdGhlIGFwaSBhbmQgaW1wbGVtZW50YXRpb24gZm9y DQpwYXN0YSB2aG9zdCBhY2NlbGVyYXRpb24NCg0KLSB2cV9zdGF0ZS92aG9zdF92cV9zdGF0ZVtd OiBvdXIgb3duIHZpZXcgb2YgZWFjaCB2aXJ0cXVldWUsIHdoaWNoIHRoZQ0KICBrZXJuZWwgZG9l c24ndCB0cmFjayBmb3IgdXM6IGRlc2NyaXB0b3JzIHJlYWR5IHRvIGhhbmQgYmFjaywgaG93IGZh cg0KICB3ZSd2ZSByZWFkIHRoZSB1c2VkIHJpbmcsIGFuZCB0aGUgbmV4dCBkZXNjcmlwdG9yIHRv IGFsbG9jYXRlDQotIHZyaW5nX2Rlc2MsIHZyaW5nX2F2YWlsX2FsbCwgdnJpbmdfdXNlZF9hbGws IHZob3N0X21lbW9yeTogdGhlIHJpbmdzDQogIGFuZCB0aGUgcmVnaW9uIHRhYmxlIHNoYXJlZCB3 aXRoIHRoZSBrZXJuZWwNCi0gdmhvc3Rfc2V0dXBfbmV0OiBvcGVuIC9kZXYvdmhvc3QtbmV0IGFu ZCBuZWdvdGlhdGUgVklSVElPX0ZfVkVSU0lPTl8xDQogIGFuZCBWSE9TVF9ORVRfRl9WSVJUSU9f TkVUX0hEUi4gRmFpbHVyZSBpcyBmYXRhbCBvbmx5IGlmDQogIC0tdmhvc3Qta2VybmVsIGlzIHNl dCB0byAnb24nLg0KLSB2aG9zdF9zZXR1cF9ldmVudGZkczogY3JlYXRlLCByZWdpc3RlciBhbmQg d2F0Y2ggdGhlIGNhbGwsIGtpY2sgYW5kDQogIGVycm9yIGV2ZW50ZmRzIGZvciBvbmUgcXVldWUN Ci0gdmhvc3Rfc2V0dXBfbWVtb3J5X3RhYmxlOiByZWdpc3RlciB0aGUgYnVmZmVycyB0aGUga2Vy bmVsIG1heSB0b3VjaC4NCiAgcGFzdGEgaGFzIG5vIGd1ZXN0LCBzbyBlYWNoIHJlZ2lvbiBtYXBz IGd1ZXN0X3BoeXNfYWRkciBvbnRvIHRoZQ0KICBpZGVudGljYWwgdXNlcnNwYWNlX2FkZHIsIG1h a2luZyBHUEEgdHJhbnNsYXRpb24gYW4gaWRlbnRpdHkgbWFwcGluZy4NCiAgVGhpcyBmdW5jdGlv biB1c2VzIHRoZSAqX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zIGZ1bmN0aW9ucyBjcmVhdGVkIHBl cg0KICBwcm90b2NvbCBhbmQgZm9yIGdlbmVyYWwgcHVycG9zZSBidWZmZXJzLg0KLSB2aG9zdF9z ZXRfdnJpbmc6IHB1Ymxpc2ggYSB2cmluZydzIGFkZHJlc3NlcywgYmluZCB0aGUgdGFwIGZkIGFz IGl0cw0KICBiYWNrZW5kIGFuZCBsYXkgb3V0IGl0cyBkZXNjcmlwdG9ycw0KLSB2aG9zdF9yeF9k ZXNjcmlwdG9yX2hhbmRvZmYsIHZob3N0X2tpY2s6IGhhbmQgY29uc3VtZWQgZGVzY3JpcHRvcnMg YmFjaw0KICBhbmQgbm90aWZ5IHRoZSBrZXJuZWwgdW5sZXNzIGl0IHNheXMgaXQncyBhbHJlYWR5 IHBvbGxpbmcNCg0KU2lnbmVkLW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhh dC5jb20+DQpTaWduZWQtb2ZmLWJ5OiBBbW1hciBZYXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5j b20+DQotLS0NCiBNYWtlZmlsZSAgfCAgIDIgKy0NCiB0Y3BfYnVmLmMgfCAgMjIgKysrLQ0KIHRj cF9idWYuaCB8ICAgNCArDQogdWRwLmMgICAgIHwgIDIwICsrKysNCiB1ZHAuaCAgICAgfCAgIDMg Kw0KIHV0aWwuYyAgICB8ICAxOCArKysrDQogdXRpbC5oICAgIHwgICAyICsNCiB2aG9zdC5jICAg fCAyOTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrDQogdmhvc3QuaCAgIHwgIDkxICsrKysrKysrKysrKysrKysrDQogOSBmaWxlcyBjaGFuZ2Vk LCA0NTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkNCiBjcmVhdGUgbW9kZSAxMDA2NDQg dmhvc3QuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB2aG9zdC5oDQoNCmRpZmYgLS1naXQgYS9NYWtl ZmlsZSBiL01ha2VmaWxlDQppbmRleCBmNmM4N2IxLi42ZjExZTRiIDEwMDY0NA0KLS0tIGEvTWFr ZWZpbGUNCisrKyBiL01ha2VmaWxlDQpAQCAtMzgsNyArMzgsNyBAQCBQQVNTVF9TUkNTID0gYXJj aC5jIGFycC5jIGJpdG1hcC5jIGNoZWNrc3VtLmMgY29uZi5jIGRoY3AuYyBkaGNwdjYuYyBcDQog CWlzb2xhdGlvbi5jIGxpbmVyZWFkLmMgbG9nLmMgbWxkLmMgbmRwLmMgbmV0bGluay5jIG1pZ3Jh dGUuYyBwYWNrZXQuYyBcDQogCXBhcnNlLmMgcGFzc3QuYyBwYXN0YS5jIHBjYXAuYyBwaWYuYyBy ZXBhaXIuYyBzZXJpYWxpc2UuYyB0YXAuYyB0Y3AuYyBcDQogCXRjcF9idWYuYyB0Y3Bfc3BsaWNl LmMgdGNwX3Z1LmMgdWRwLmMgdWRwX2Zsb3cuYyB1ZHBfdnUuYyB1dGlsLmMgXA0KLQl2aG9zdF91 c2VyLmMgdmlydGlvLmMgdnVfY29tbW9uLmMNCisJdmhvc3QuYyB2aG9zdF91c2VyLmMgdmlydGlv LmMgdnVfY29tbW9uLmMNCiBQQVNTVF9SRVBBSVJfU1JDUyA9IHBhc3N0LXJlcGFpci5jDQogUEVT VE9fU1JDUyA9IHBlc3RvLmMgYml0bWFwLmMgZndkX3J1bGUuYyBpbmFueS5jIGlwLmMgbGluZXJl YWQuYyBwYXJzZS5jIFwNCiAJc2VyaWFsaXNlLmMNCmRpZmYgLS1naXQgYS90Y3BfYnVmLmMgYi90 Y3BfYnVmLmMNCmluZGV4IDcyYzQ1NDEuLmRkODAzODQgMTAwNjQ0DQotLS0gYS90Y3BfYnVmLmMN CisrKyBiL3RjcF9idWYuYw0KQEAgLTMxLDEyICszMSwxNCBAQA0KICNpbmNsdWRlICJpbmFueS5o Ig0KICNpbmNsdWRlICJ0Y3BfY29ubi5oIg0KICNpbmNsdWRlICJ0Y3BfaW50ZXJuYWwuaCINCi0j aW5jbHVkZSAidGNwX2J1Zi5oIg0KKyNpbmNsdWRlICJ2aG9zdC5oIg0KDQogI2RlZmluZSBUQ1Bf RlJBTUVTX01FTQkJCTEyOA0KICNkZWZpbmUgVENQX0ZSQU1FUwkJCQkJCQkgICBcDQogCShjLT5t b2RlID09IE1PREVfUEFTVEEgPyAxIDogVENQX0ZSQU1FU19NRU0pDQoNCisjZGVmaW5lIFRDUF9O UkVHSU9OUyA1DQorDQogLyogU3RhdGljIGJ1ZmZlcnMgKi8NCg0KIC8qIEV0aGVybmV0IGhlYWRl ciBmb3IgSVB2NCBhbmQgSVB2NiBmcmFtZXMgKi8NCkBAIC03NSw2ICs3NywyNCBAQCB2b2lkIHRj cF91cGRhdGVfbDJfYnVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV0aF9kKQ0KIAkJZXRoX3VwZGF0 ZV9tYWMoJnRjcF9ldGhfaGRyW2ldLCBldGhfZCwgTlVMTCk7DQogfQ0KDQorLyoqDQorICogdGNw X3JlZ2lzdGVyX21lbW9yeV9yZWdpb24oKSAtIFJlZ2lzdGVyIHRoZSBUQ1Agc3BlY2lmaWMgYnVm ZmVycyBpbnRvIGEgbWVtb3J5DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIGtlcm5lbC4NCisgKiBAdmhvc3RfbWVt OiBUaGUgbWVtb3J5IHN0cnVjdCB0byByZWdpc3RlciByZWdpb25zIGludG8NCisgKiBAbGFzdF9p ZHg6ICBUaGUgbGFzdCBpbmRleCBhdCB3aGljaCBtZW1vcnkgcmVnaW9uIGhhcyBiZWVuIHBsYWNl ZA0KKyAqLw0KK3ZvaWQgdGNwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKHVuaW9uIHZob3N0X21l bW9yeV91ICp2aG9zdF9tZW0sIHNpemVfdCAqbGFzdF9pZHgpIHsNCisJaWYgKCgqbGFzdF9pZHgg KyBUQ1BfTlJFR0lPTlMpID4gTl9WSE9TVF9SRUdJT05TKQ0KKwkJZGllKCJ0Y3A6IG1lbW9yeSBy ZWdpb24gb3ZlcmZsb3cuIG1heGltdW0gaXMgJWQsIGdvdCAlenUiLA0KKwkJICAgIE5fVkhPU1Rf UkVHSU9OUywgKmxhc3RfaWR4ICsgVENQX05SRUdJT05TKTsNCisNCisgICAJdmhvc3RfbWVtLT5t ZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odGNwX3BheWxv YWRfdGFwX2hkcik7DQorCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBW SE9TVF9NRU1PUllfUkVHSU9OKHRjcDRfcGF5bG9hZF9pcCk7DQorCXZob3N0X21lbS0+bWVtLnJl Z2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHRjcDZfcGF5bG9hZF9p cCk7DQorCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1P UllfUkVHSU9OKHRjcF9wYXlsb2FkKTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3Rf aWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odGNwX2V0aF9oZHIpOw0KK30NCisNCiAvKioN CiAgKiB0Y3Bfc29ja19pb3ZfaW5pdCgpIC0gSW5pdGlhbGlzZSBzY2F0dGVyLWdhdGhlciBMMiBi dWZmZXJzIGZvciBJUHY0IHNvY2tldHMNCiAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQpkaWZm IC0tZ2l0IGEvdGNwX2J1Zi5oIGIvdGNwX2J1Zi5oDQppbmRleCA1ZDMxY2VhLi41ZTM0MWVkIDEw MDY0NA0KLS0tIGEvdGNwX2J1Zi5oDQorKysgYi90Y3BfYnVmLmgNCkBAIC02LDExICs2LDE1IEBA DQogI2lmbmRlZiBUQ1BfQlVGX0gNCiAjZGVmaW5lIFRDUF9CVUZfSA0KDQordW5pb24gdmhvc3Rf bWVtb3J5X3U7DQorc3RydWN0IHRjcF90YXBfY29ubjsNCisNCiB2b2lkIHRjcF9zb2NrX2lvdl9p bml0KGNvbnN0IHN0cnVjdCBjdHggKmMpOw0KIHZvaWQgdGNwX3BheWxvYWRfZmx1c2goY29uc3Qg c3RydWN0IGN0eCAqYywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpOw0KIGludCB0Y3BfYnVm X2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4g KmNvbm4sDQogCQkJICAgdWludDMyX3QgYWxyZWFkeV9zZW50LCBjb25zdCBzdHJ1Y3QgdGltZXNw ZWMgKm5vdyk7DQogaW50IHRjcF9idWZfc2VuZF9mbGFnKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0 cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sIGludCBmbGFncywNCiAJCSAgICAgIGNvbnN0IHN0cnVj dCB0aW1lc3BlYyAqbm93KTsNCit2b2lkIHRjcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucyh1bmlv biB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3RfaWR4KTsNCg0KICNlbmRp ZiAgLypUQ1BfQlVGX0ggKi8NCmRpZmYgLS1naXQgYS91ZHAuYyBiL3VkcC5jDQppbmRleCA1MDVl NTU0Li5hNDM1NWExIDEwMDY0NA0KLS0tIGEvdWRwLmMNCisrKyBiL3VkcC5jDQpAQCAtMTE4LDYg KzExOCw3IEBADQogI2luY2x1ZGUgInVkcF9pbnRlcm5hbC5oIg0KICNpbmNsdWRlICJ1ZHBfdnUu aCINCiAjaW5jbHVkZSAiZXBvbGxfY3RsLmgiDQorI2luY2x1ZGUgInZob3N0LmgiDQoNCiAjZGVm aW5lIFVEUF9NQVhfRlJBTUVTCQkzMiAgLyogbWF4ICMgb2YgZnJhbWVzIHRvIHJlY2VpdmUgYXQg b25jZSAqLw0KDQpAQCAtMTI4LDYgKzEyOSw4IEBADQogI2RlZmluZSBVRFBfVElNRU9VVF9ERUZB VUxUCQkzMAkvKiBzICovDQogI2RlZmluZSBVRFBfVElNRU9VVF9TVFJFQU1fREVGQVVMVAkxMjAJ LyogcyAqLw0KDQorI2RlZmluZSBVRFBfTlJFR0lPTlMgNQ0KKw0KIC8qIE1heGltdW0gVURQIGRh dGEgdG8gYmUgcmV0dXJuZWQgaW4gSUNNUCBtZXNzYWdlcyAqLw0KICNkZWZpbmUgSUNNUDRfTUFY X0RMRU4gOA0KICNkZWZpbmUgSUNNUDZfTUFYX0RMRU4gKElQVjZfTUlOX01UVQkJCVwNCkBAIC00 NDgsNiArNDUxLDIzIEBAIHN0YXRpYyB2b2lkIHVkcF9zZW5kX3RhcF9pY21wNChjb25zdCBzdHJ1 Y3QgY3R4ICpjLA0KIAl0YXBfaWNtcDRfc2VuZChjLCBzYWRkciwgZWFkZHIsICZtc2csIHRhcF9v bWFjLCBtc2dsZW4pOw0KIH0NCg0KKy8qKg0KKyAqIHVkcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9u KCkgLSBSZWdpc3RlciB0aGUgVURQIHNwZWNpZmljIGJ1ZmZlcnMgaW50byBhIG1lbW9yeQ0KKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc28gaXQgY2FuIGJlIHNoYXJl ZCB3aXRoIHRoZSBrZXJuZWwuDQorICogQHZob3N0X21lbTogVGhlIG1lbW9yeSBzdHJ1Y3QgdG8g cmVnaXN0ZXIgcmVnaW9ucyBpbnRvDQorICogQGxhc3RfaWR4OiAgVGhlIGxhc3QgaW5kZXggYXQg d2hpY2ggbWVtb3J5IHJlZ2lvbiBoYXMgYmVlbiBwbGFjZWQNCisgKi8NCit2b2lkIHVkcF9yZWdp c3Rlcl9tZW1vcnlfcmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXpl X3QgKmxhc3RfaWR4KSB7DQorCWlmICgoKmxhc3RfaWR4ICsgVURQX05SRUdJT05TKSA+IE5fVkhP U1RfUkVHSU9OUykNCisJCWRpZSgidWRwOiBtZW1vcnkgcmVnaW9uIG92ZXJmbG93LiBtYXhpbXVt IGlzICVkLCBnb3QgJXp1IiwNCisJCSAgICBOX1ZIT1NUX1JFR0lPTlMsICpsYXN0X2lkeCArIFVE UF9OUkVHSU9OUyk7DQorDQorICAgCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkr K10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHVkcF9wYXlsb2FkKTsNCisJdmhvc3RfbWVtLT5tZW0u cmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odWRwX2V0aF9oZHIp Ow0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZ X1JFR0lPTih1ZHBfaW92X3JlY3YpOw0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9p ZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1ZHBfbWhfcmVjdik7DQorCXZob3N0X21lbS0+ bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHVkcF9tZXRh KTsNCit9DQoNCiAvKioNCiAgKiB1ZHBfc2VuZF90YXBfaWNtcDYoKSAtIENvbnN0cnVjdCBhbmQg c2VuZCBJQ01QdjYgdG8gbG9jYWwgcGVlcg0KZGlmZiAtLWdpdCBhL3VkcC5oIGIvdWRwLmgNCmlu ZGV4IGI1MDI4M2UuLmViZjFhNGUgMTAwNjQ0DQotLS0gYS91ZHAuaA0KKysrIGIvdWRwLmgNCkBA IC0xMSw2ICsxMSw4IEBADQoNCiAjaW5jbHVkZSAiZndkLmgiDQoNCit1bmlvbiB2aG9zdF9tZW1v cnlfdTsNCisNCiB2b2lkIHVkcF9saXN0ZW5fc29ja19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHgg KmMsIHVuaW9uIGVwb2xsX3JlZiByZWYsDQogCQkJICAgICB1aW50MzJfdCBldmVudHMsIGNvbnN0 IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCiB2b2lkIHVkcF9zb2NrX2hhbmRsZXIoY29uc3Qgc3Ry dWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZiwNCkBAIC0yMSw2ICsyMyw3IEBAIGludCB1 ZHBfdGFwX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdWludDhfdCBwaWYsDQogCQkgICAg Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpOw0KIGludCB1ZHBfaW5pdChzdHJ1Y3QgY3R4ICpj KTsNCiB2b2lkIHVkcF91cGRhdGVfbDJfYnVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV0aF9kKTsN Cit2b2lkIHVkcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlfdSAq dmhvc3RfbWVtLCBzaXplX3QgKmxhc3RfaWR4KTsNCg0KIC8qKg0KICAqIHN0cnVjdCB1ZHBfY3R4 IC0gRXhlY3V0aW9uIGNvbnRleHQgZm9yIFVEUA0KZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwu Yw0KaW5kZXggZmYxZjE5Zi4uY2FmZTBlYyAxMDA2NDQNCi0tLSBhL3V0aWwuYw0KKysrIGIvdXRp bC5jDQpAQCAtMzMsMTAgKzMzLDEzIEBADQogI2luY2x1ZGUgImxvZy5oIg0KICNpbmNsdWRlICJw Y2FwLmgiDQogI2luY2x1ZGUgInNlcmlhbGlzZS5oIg0KKyNpbmNsdWRlICJ2aG9zdC5oIg0KICNp ZmRlZiBIQVNfR0VUUkFORE9NDQogI2luY2x1ZGUgPHN5cy9yYW5kb20uaD4NCiAjZW5kaWYNCg0K KyNkZWZpbmUgR0VORVJBTF9OUkVHSU9OUyAyDQorDQogLyogWmVyby1maWxsZWQgYnVmZmVyIHRv IHBhZCA4MDIuMyBmcmFtZXMsIHVwIHRvIDYwIChFVEhfWkxFTikgYnl0ZXMgKi8NCiB1aW50OF90 IGV0aF9wYWRbRVRIX1pMRU5dID0geyAwIH07DQoNCkBAIC00NTMsNiArNDU2LDIxIEBAIGludCBv cGVuX2luX25zKGNvbnN0IHN0cnVjdCBjdHggKmMsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFn cykNCiAJcmV0dXJuIGFyZy5mZDsNCiB9DQoNCisvKioNCisgKiBnZW5lcmFsX3JlZ2lzdGVyX21l bW9yeV9yZWdpb24oKSAtIFJlZ2lzdGVyIHRoZSBnZW5lcmFsIChub24gcHJvdG9jb2wgc3BlY2lm aWMpIGJ1ZmZlcnMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8g YSBtZW1vcnkgc3RydWN0IHNvIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUga2VybmVsLg0KKyAq IEB2aG9zdF9tZW06IFRoZSBtZW1vcnkgc3RydWN0IHRvIHJlZ2lzdGVyIHJlZ2lvbnMgaW50bw0K KyAqIEBsYXN0X2lkeDogIFRoZSBsYXN0IGluZGV4IGF0IHdoaWNoIG1lbW9yeSByZWdpb24gaGFz IGJlZW4gcGxhY2VkDQorICovDQordm9pZCBnZW5lcmFsX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25z KHVuaW9uIHZob3N0X21lbW9yeV91ICp2aG9zdF9tZW0sIHNpemVfdCAqbGFzdF9pZHgpIHsNCisJ aWYgKCgqbGFzdF9pZHggKyBHRU5FUkFMX05SRUdJT05TKSA+IE5fVkhPU1RfUkVHSU9OUykNCisJ CWRpZSgiZ2VuZXJhbDogbWVtb3J5IHJlZ2lvbiBvdmVyZmxvdy4gbWF4aW11bSBpcyAlZCwgZ290 ICV6dSIsDQorCQkgICAgTl9WSE9TVF9SRUdJT05TLCAqbGFzdF9pZHggKyBHRU5FUkFMX05SRUdJ T05TKTsNCisNCisgICAJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZI T1NUX01FTU9SWV9SRUdJT04ocGt0X2J1Zik7DQorCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCps YXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKGV0aF9wYWQpOw0KK30NCisNCiAvKioN CiAgKiBwaWRmaWxlX3dyaXRlKCkgLSBXcml0ZSBQSUQgdG8gZmlsZSwgaWYgcmVxdWVzdGVkIHRv IGRvIHNvLCBhbmQgY2xvc2UgaXQNCiAgKiBAZmQ6CQlPcGVuIFBJRCBmaWxlIGRlc2NyaXB0b3Is IGNsb3NlZCBvbiBleGl0LCAtMSB0byBza2lwIHdyaXRpbmcgaXQNCmRpZmYgLS1naXQgYS91dGls LmggYi91dGlsLmgNCmluZGV4IGVjMmQ5YWMuLjExZjY4NzcgMTAwNjQ0DQotLS0gYS91dGlsLmgN CisrKyBiL3V0aWwuaA0KQEAgLTE0NSw2ICsxNDUsNyBAQCBpbnQgZG9fY2xvbmUoaW50ICgqZm4p KHZvaWQgKiksIGNoYXIgKnN0YWNrX2FyZWEsIHNpemVfdCBzdGFja19zaXplLCBpbnQgZmxhZ3Ms DQoNCiBzdHJ1Y3QgY3R4Ow0KIHVuaW9uIHNvY2thZGRyX2luYW55Ow0KK3VuaW9uIHZob3N0X21l bW9yeV91Ow0KDQogaW50IHNvY2tfbDQoY29uc3Qgc3RydWN0IGN0eCAqYywgZW51bSBlcG9sbF90 eXBlIHR5cGUsDQogCSAgICBjb25zdCB1bmlvbiBzb2NrYWRkcl9pbmFueSAqc2EsIGNvbnN0IGNo YXIgKmlmbmFtZSk7DQpAQCAtMTcwLDYgKzE3MSw3IEBAIGludCB3cml0ZV9yZW1haW5kZXIoaW50 IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IGlvdmNudCwNCiBpbnQgcmVhZF9y ZW1haW5kZXIoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IGNudCwgc2l6 ZV90IHNraXApOw0KIGJvb2wgc25wcmludGZfY2hlY2soY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwg Y29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOw0KIGxvbmcgY2xhbXBlZF9zY2FsZShsb25nIHgsIGxv bmcgeSwgbG9uZyBsbywgbG9uZyBoaSwgbG9uZyBmKTsNCit2b2lkIGdlbmVyYWxfcmVnaXN0ZXJf bWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICps YXN0X2lkeCk7DQoNCiAvKioNCiAgKiBhZl9uYW1lKCkgLSBSZXR1cm4gbmFtZSBvZiBhbiBhZGRy ZXNzIGZhbWlseQ0KZGlmZiAtLWdpdCBhL3Zob3N0LmMgYi92aG9zdC5jDQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYTY5YzRiNQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvdmhv c3QuYw0KQEAgLTAsMCArMSwyOTUgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vci1sYXRlcg0KKy8qIENvcHlyaWdodCBSZWQgSGF0DQorICogQXV0aG9yOiBBbW1hciBZ YXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5jb20+DQorICoNCisgKiB2aG9zdC5jIC0gdmhvc3Qt bmV0ICh2aG9zdC1rZXJuZWwpIGFjY2VsZXJhdGlvbiBmb3IgcGFzdGEgbW9kZQ0KKyAqLw0KKw0K KyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpbmNsdWRlIDxmY250bC5oPg0KKyNpbmNsdWRlIDxpbnR0 eXBlcy5oPg0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2lu Y2x1ZGUgPHVuaXN0ZC5oPg0KKyNpbmNsdWRlIDxzeXMvZXZlbnRmZC5oPg0KKyNpbmNsdWRlIDxz eXMvaW9jdGwuaD4NCisNCisjaW5jbHVkZSAidXRpbC5oIg0KKyNpbmNsdWRlICJwYXNzdC5oIg0K KyNpbmNsdWRlICJ2aG9zdC5oIg0KKyNpbmNsdWRlICJlcG9sbF9jdGwuaCINCisjaW5jbHVkZSAi dWRwLmgiDQorI2luY2x1ZGUgInRjcF9idWYuaCINCisNCitzdHJ1Y3QgdnFfc3RhdGUgdmhvc3Rf dnFfc3RhdGVbMl07DQorDQorc3RydWN0IHZyaW5nX2Rlc2NfcGFzdGEgdnJpbmdfZGVzY1syXVtW SE9TVF9OREVTQ1NdDQorCQkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOw0K Kw0KK3N0cnVjdCB2cmluZ19hdmFpbF9wYXN0YSB2cmluZ19hdmFpbF9hbGxbMl0NCisJCQkJX19h dHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpKSk7DQorc3RydWN0IHZyaW5nX3VzZWRfcGFz dGEgdnJpbmdfdXNlZF9hbGxbMl0NCisJCQkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJ WkUpKSk7DQorDQordW5pb24gdmhvc3RfbWVtb3J5X3Ugdmhvc3RfbWVtb3J5ID0gew0KKwkubWVt ID0gew0KKwkJLm5yZWdpb25zID0gTl9WSE9TVF9SRUdJT05TLA0KKwl9LA0KK307DQorDQorLyoq DQorICogdmhvc3Rfc2V0dXBfbmV0KCkgLSBPcGVuIGFuZCBuZWdvdGlhdGUgZmVhdHVyZXMgb24g L2Rldi92aG9zdC1uZXQNCisgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBh bmQgYy0+dmhvc3QuZmVhdHVyZXMgYXJlIHNldA0KKyAqCQlvbiBzdWNjZXNzLCBhbmQgbGVmdCB1 bnRvdWNoZWQgb24gZmFpbHVyZQ0KKyAqDQorICogRmFpbHVyZSBoZXJlIG1lYW5zIHZob3N0LW5l dCBpc24ndCB1c2FibGUsIG5vdCB0aGF0IHBhc3RhIGNhbid0IHJ1bjogdGhlDQorICogY2FsbGVy IGZhbGxzIGJhY2sgdG8gcGxhaW4gdGFwIG9wZXJhdGlvbiB1bmxlc3MgYWNjZWxlcmF0aW9uIHdh cyByZXF1aXJlZC4NCisgKiBUaGF0J3Mgd2h5IG5vdGhpbmcgaW4gaGVyZSBpcyBmYXRhbC4NCisg Kg0KKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBpZiB2aG9zdC1uZXQgaXMgdW5hdmFpbGFi bGUgb3IgdW51c2FibGUNCisgKi8NCitpbnQgdmhvc3Rfc2V0dXBfbmV0KHN0cnVjdCBjdHggKmMp DQorew0KKwljb25zdCB1aW50NjRfdCByZXFfZmVhdHVyZXMgPSAoMVVMTCA8PCBWSVJUSU9fRl9W RVJTSU9OXzEpIHwNCisJCQkJICAgICAgKDFVTEwgPDwgVkhPU1RfTkVUX0ZfVklSVElPX05FVF9I RFIpOw0KKwl1aW50NjRfdCBmZWF0dXJlczsNCisJaW50IHZob3N0X2ZkOw0KKw0KKwl2aG9zdF9m ZCA9IG9wZW4oIi9kZXYvdmhvc3QtbmV0IiwgT19SRFdSIHwgT19OT05CTE9DSyB8IE9fQ0xPRVhF Qyk7DQorCWlmICh2aG9zdF9mZCA8IDApIHsNCisJCWRlYnVnX3BlcnJvcigiQ291bGRuJ3Qgb3Bl biAvZGV2L3Zob3N0LW5ldCIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCWlmIChpb2N0bCh2 aG9zdF9mZCwgVkhPU1RfU0VUX09XTkVSLCBOVUxMKSA8IDApIHsNCisJCWRlYnVnX3BlcnJvcigi VkhPU1RfU0VUX09XTkVSIGlvY3RsIGZhaWxlZCIpOw0KKwkJZ290byBjbG9zZV9mZDsNCisJfQ0K Kw0KKwlpZiAoaW9jdGwodmhvc3RfZmQsIFZIT1NUX0dFVF9GRUFUVVJFUywgJmZlYXR1cmVzKSA8 IDApIHsNCisJCWRlYnVnX3BlcnJvcigiVkhPU1RfR0VUX0ZFQVRVUkVTIGlvY3RsIGZhaWxlZCIp Ow0KKwkJZ290byBjbG9zZV9mZDsNCisJfQ0KKw0KKwlpZiAoKGZlYXR1cmVzICYgcmVxX2ZlYXR1 cmVzKSAhPSByZXFfZmVhdHVyZXMpIHsNCisJCWRlYnVnKCJ2aG9zdC1uZXQgaXMgbWlzc2luZyBm ZWF0dXJlczogMHglMDE2IiBQUkl4NjQsDQorCQkgICAgICByZXFfZmVhdHVyZXMgJiB+ZmVhdHVy ZXMpOw0KKwkJZ290byBjbG9zZV9mZDsNCisJfQ0KKw0KKwlmZWF0dXJlcyA9IHJlcV9mZWF0dXJl czsNCisJaWYgKGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfRkVBVFVSRVMsICZmZWF0dXJlcykg PCAwKSB7DQorCQlkZWJ1Z19wZXJyb3IoIlZIT1NUX1NFVF9GRUFUVVJFUyBpb2N0bCBmYWlsZWQi KTsNCisJCWdvdG8gY2xvc2VfZmQ7DQorCX0NCisNCisJYy0+dmhvc3QuZmVhdHVyZXMgPSBmZWF0 dXJlczsNCisJYy0+dmhvc3QuZmQgPSB2aG9zdF9mZDsNCisNCisJcmV0dXJuIDA7DQorDQorY2xv c2VfZmQ6DQorCWNsb3NlKHZob3N0X2ZkKTsNCisNCisJcmV0dXJuIC0xOw0KK30NCisNCisvKioN CisgKiB2aG9zdF9zZXR1cF9ldmVudGZkcygpIC0gU2V0IHVwIG9uZSBxdWV1ZSdzIGV2ZW50ZmRz IGFuZCByaW5nIHNpemUNCisgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBt dXN0IGFscmVhZHkgYmUgc2V0DQorICogQHF1ZXVlX2lkeDoJSW5kZXggb2YgdGhlIHF1ZXVlICh2 cmluZykgdG8gY29uZmlndXJlDQorICoNCisgKi8NCit2b2lkIHZob3N0X3NldHVwX2V2ZW50ZmRz KHN0cnVjdCBjdHggKmMsIGludCBxdWV1ZV9pZHgpDQorew0KKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdf ZmlsZSB2cmluZ19maWxlID0geyAuaW5kZXggPSBxdWV1ZV9pZHggfTsNCisJc3RydWN0IHZob3N0 X3ZyaW5nX3N0YXRlIHN0YXRlID0geyAuaW5kZXggPSBxdWV1ZV9pZHggfTsNCisJdW5pb24gZXBv bGxfcmVmIHJlZiA9IHsgMCB9Ow0KKwlpbnQgdmhvc3RfZmQgPSBjLT52aG9zdC5mZDsNCisJaW50 IHJjOw0KKw0KKwlzdGF0ZS5udW0gPSBWSE9TVF9OREVTQ1M7DQorCXJlZi5xdWV1ZSA9IHF1ZXVl X2lkeDsNCisNCisJdnJpbmdfZmlsZS5mZCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJMT0NLIHwgRUZE X0NMT0VYRUMpOw0KKwlpZiAodnJpbmdfZmlsZS5mZCA8IDApDQorCQlkaWVfcGVycm9yKCJGYWls ZWQgdG8gY3JlYXRlIHZob3N0IGNhbGwgZXZlbnRmZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVl X2lkeCk7DQorCXJlZi5mZCA9IHZyaW5nX2ZpbGUuZmQ7DQorDQorCXJjID0gaW9jdGwodmhvc3Rf ZmQsIFZIT1NUX1NFVF9WUklOR19DQUxMLCAmdnJpbmdfZmlsZSk7DQorCWlmIChyYyA8IDApDQor CQlkaWVfcGVycm9yKCJWSE9TVF9TRVRfVlJJTkdfQ0FMTCBpb2N0bCBmYWlsZWQsIHF1ZXVlICVk IiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKw0KKwlyZWYudHlwZSA9IEVQT0xMX1RZUEVfVkhPU1Rf Q0FMTDsNCisJcmMgPSBlcG9sbF9hZGQoYy0+ZXBvbGxmZCwgRVBPTExJTiwgcmVmKTsNCisJaWYg KHJjIDwgMCkNCisJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byB3YXRjaCB2aG9zdCBjYWxsIGV2ZW50 ZmQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKwljLT52aG9zdC52cVtxdWV1ZV9p ZHhdLmNhbGxfZmQgPSB2cmluZ19maWxlLmZkOw0KKw0KKwl2cmluZ19maWxlLmZkID0gZXZlbnRm ZCgwLCBFRkRfTk9OQkxPQ0sgfCBFRkRfQ0xPRVhFQyk7DQorCWlmICh2cmluZ19maWxlLmZkIDwg MCkNCisJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgdmhvc3QgZXJyb3IgZXZlbnRmZCwg cXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCXJjID0gaW9jdGwodmhvc3RfZmQs IFZIT1NUX1NFVF9WUklOR19FUlIsICZ2cmluZ19maWxlKTsNCisJaWYgKHJjIDwgMCkNCisJCWRp ZV9wZXJyb3IoIlZIT1NUX1NFVF9WUklOR19FUlIgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQor CQkJICAgcXVldWVfaWR4KTsNCisNCisJcmVmLnR5cGUgPSBFUE9MTF9UWVBFX1ZIT1NUX0VSUk9S Ow0KKwlyZWYuZmQgPSB2cmluZ19maWxlLmZkOw0KKwlyYyA9IGVwb2xsX2FkZChjLT5lcG9sbGZk LCBFUE9MTElOLCByZWYpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiRmFpbGVkIHRv IHdhdGNoIHZob3N0IGVycm9yIGV2ZW50ZmQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgp Ow0KKwljLT52aG9zdC52cVtxdWV1ZV9pZHhdLmVycl9mZCA9IHZyaW5nX2ZpbGUuZmQ7DQorDQor CXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9WUklOR19OVU0sICZzdGF0ZSk7DQorCWlm IChyYyA8IDApDQorCQlkaWVfcGVycm9yKCJWSE9TVF9TRVRfVlJJTkdfTlVNIGlvY3RsIGZhaWxl ZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCXZyaW5nX2ZpbGUuZmQgPSBl dmVudGZkKDAsIEVGRF9OT05CTE9DSyB8IEVGRF9DTE9FWEVDKTsNCisJaWYgKHZyaW5nX2ZpbGUu ZmQgPCAwKQ0KKwkJZGllX3BlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSB2aG9zdCBraWNrIGV2ZW50 ZmQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKw0KKwlyYyA9IGlvY3RsKHZob3N0 X2ZkLCBWSE9TVF9TRVRfVlJJTkdfS0lDSywgJnZyaW5nX2ZpbGUpOw0KKwlpZiAocmMgPCAwKQ0K KwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX0tJQ0sgaW9jdGwgZmFpbGVkLCBxdWV1ZSAl ZCIsDQorCQkJICAgcXVldWVfaWR4KTsNCisNCisJYy0+dmhvc3QudnFbcXVldWVfaWR4XS5raWNr X2ZkID0gdnJpbmdfZmlsZS5mZDsNCisNCisJdmhvc3RfdnFfc3RhdGVbcXVldWVfaWR4XS5udW1f ZnJlZSA9IFZIT1NUX05ERVNDUzsNCit9DQorDQorLyoqDQorICogdmhvc3Rfc2V0dXBfbWVtb3J5 X3RhYmxlKCkgLSBSZWdpc3RlciB0aGUgR1BBL0hWQSB0cmFuc2xhdGlvbiB0YWJsZQ0KKyAqIEBj OgkJRXhlY3V0aW9uIGNvbnRleHQ7IGMtPnZob3N0LmZkIG11c3QgYWxyZWFkeSBiZSBzZXQNCisg Kg0KKyAqIHZob3N0LW5ldCByZWFkcyB0aGUgYWRkcmVzc2VzIHdlIHB1dCBpbiBkZXNjcmlwdG9y cyBhcyBndWVzdCBwaHlzaWNhbA0KKyAqIGFkZHJlc3NlcywgYW5kIHRyYW5zbGF0ZXMgdGhlbSB0 aHJvdWdoIHRoaXMgdGFibGUgYmVmb3JlIHRvdWNoaW5nIHRoZQ0KKyAqIG1lbW9yeSB0aGV5IHJl ZmVyIHRvLiBwYXN0YSBoYXMgbm8gZ3Vlc3QgYW5kIG5vIHNlY29uZCBhZGRyZXNzIHNwYWNlOg0K KyAqIHRoZSBhZGRyZXNzZXMgd2UgcHV0IHRoZXJlIGFyZSBvdXIgb3duIHZpcnR1YWwgYWRkcmVz c2VzLiBFdmVyeSByZWdpb24NCisgKiBiZWxvdyB0aGVyZWZvcmUgc2V0cyBndWVzdF9waHlzX2Fk ZHIgZXF1YWwgdG8gdXNlcnNwYWNlX2FkZHIsIHNvIHRoYXQNCisgKiBHUEEgPT0gSFZBIGFuZCB0 aGUgdHJhbnNsYXRpb24gaXMgYW4gaWRlbnRpdHkgbWFwcGluZy4NCisgKg0KKyAqIFJldHVybjog MCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciB3aXRoIGVycm5vIHNldA0KKyAqLw0KK2ludCB2aG9z dF9zZXR1cF9tZW1vcnlfdGFibGUoc3RydWN0IGN0eCAqYykgew0KKwlzaXplX3QgcmVnaW9uX2lk eCA9IDA7DQorDQorCS8qIGdlbmVyYWwgcHVycG9zZSBidWZmZXJzICovDQorCWdlbmVyYWxfcmVn aXN0ZXJfbWVtb3J5X3JlZ2lvbnMoJnZob3N0X21lbW9yeSwgJnJlZ2lvbl9pZHgpOw0KKw0KKwkv KiB0Y3Agc3BlY2lmaWMgYnVmZmVycyAqLw0KKwl0Y3BfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnMo JnZob3N0X21lbW9yeSwgJnJlZ2lvbl9pZHgpOw0KKw0KKwkvKiB1ZHAgc3BlY2lmaWMgYnVmZmVy cyAqLw0KKwl1ZHBfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnMoJnZob3N0X21lbW9yeSwgJnJlZ2lv bl9pZHgpOw0KKw0KKwl2aG9zdF9tZW1vcnkubWVtLm5yZWdpb25zID0gcmVnaW9uX2lkeDsNCisN CisJcmV0dXJuIGlvY3RsKGMtPnZob3N0LmZkLCBWSE9TVF9TRVRfTUVNX1RBQkxFLCAmdmhvc3Rf bWVtb3J5Lm1lbSk7DQorfQ0KKw0KKy8qKg0KKyAqIHZob3N0X3NldF92cmluZygpIC0gUmVnaXN0 ZXIgYSB2cmluZydzIGFkZHJlc3NlcyBhbmQgYmluZCBpdHMgYmFja2VuZA0KKyAqIEBjOgkJRXhl Y3V0aW9uIGNvbnRleHQ7IGMtPnZob3N0LmZkIG11c3QgYWxyZWFkeSBiZSBzZXQNCisgKiBAcXVl dWVfaWR4OglJbmRleCBvZiB0aGUgcXVldWUgKHZyaW5nKSB0byBjb25maWd1cmUNCisgKiBAdGFw X2ZkOglUYXAgZmQgdG8gYmluZCBhcyB0aGlzIHF1ZXVlJ3MgYmFja2VuZA0KKyAqLw0KK3ZvaWQg dmhvc3Rfc2V0X3ZyaW5nKHN0cnVjdCBjdHggKmMsIGludCBxdWV1ZV9pZHgsIGludCB0YXBfZmQp DQorew0KKwlpbnQgdmhvc3RfZmQgPSBjLT52aG9zdC5mZDsNCisJc3RydWN0IHZob3N0X3ZyaW5n X2FkZHIgYWRkciA9IHsNCisJCS5pbmRleCA9IHF1ZXVlX2lkeCwNCisJCS5kZXNjX3VzZXJfYWRk ciA9ICh1bnNpZ25lZCBsb25nKXZyaW5nX2Rlc2NbcXVldWVfaWR4XSwNCisJCS5hdmFpbF91c2Vy X2FkZHIgPSAodW5zaWduZWQgbG9uZykmdnJpbmdfYXZhaWxfYWxsW3F1ZXVlX2lkeF0sDQorCQku dXNlZF91c2VyX2FkZHIgPSAodW5zaWduZWQgbG9uZykmdnJpbmdfdXNlZF9hbGxbcXVldWVfaWR4 XSwNCisJCS5sb2dfZ3Vlc3RfYWRkciA9ICh1bnNpZ25lZCBsb25nKSZ2cmluZ191c2VkX2FsbFtx dWV1ZV9pZHhdLA0KKwl9Ow0KKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBmaWxlID0gew0KKwkJ LmluZGV4ID0gcXVldWVfaWR4LA0KKwkJLmZkID0gdGFwX2ZkLA0KKwl9Ow0KKwl1bnNpZ25lZCBp bnQgaTsNCisJaW50IHJjOw0KKw0KKwlyYyA9IGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfVlJJ TkdfQUREUiwgJmFkZHIpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiVkhPU1RfU0VU X1ZSSU5HX0FERFIgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQorCQkJICAgcXVldWVfaWR4KTsN CisNCisJaWYgKHF1ZXVlX2lkeCA9PSBWSE9TVF9BVkFJTF9RX0lEWCkgew0KKwkJZm9yIChpID0g MDsgaSA8IFZIT1NUX05ERVNDUzsgKytpKSB7DQorCQkJdnJpbmdfZGVzY1tWSE9TVF9BVkFJTF9R X0lEWF1baV0uYWRkciA9DQorCQkJCSh1aW50cHRyX3QpcGt0X2J1ZiArIGkgKiBWSE9TVF9ERVND X0JZVEVTOw0KKwkJCXZyaW5nX2Rlc2NbVkhPU1RfQVZBSUxfUV9JRFhdW2ldLmxlbiA9IFZIT1NU X0RFU0NfQllURVM7DQorCQkJdnJpbmdfZGVzY1tWSE9TVF9BVkFJTF9RX0lEWF1baV0uZmxhZ3Mg PQ0KKwkJCQlWUklOR19ERVNDX0ZfV1JJVEU7DQorCQl9DQorDQorCQlmb3IgKGkgPSAwOyBpIDwg VkhPU1RfTkRFU0NTOyArK2kpDQorCQkJdnJpbmdfYXZhaWxfYWxsW1ZIT1NUX0FWQUlMX1FfSURY XS5yaW5nW2ldID0NCisJCQkJaHRvbGUxNihpKTsNCisNCisJCXZob3N0X3J4X2Rlc2NyaXB0b3Jf aGFuZG9mZihjKTsNCisJfQ0KKw0KKwlpZiAocXVldWVfaWR4ID09IFZIT1NUX1VTRURfUV9JRFgp IHsNCisJCWZvciAoaSA9IDA7IGkgPCAoVkhPU1RfTkRFU0NTIC0gMSk7ICsraSkNCisJCQl2cmlu Z19kZXNjW1ZIT1NUX1VTRURfUV9JRFhdW2ldLm5leHQgPSBpICsgMTsNCisJfQ0KKw0KKwlyYyA9 IGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9ORVRfU0VUX0JBQ0tFTkQsICZmaWxlKTsNCisJaWYgKHJj IDwgMCkNCisJCWRpZV9wZXJyb3IoIlZIT1NUX05FVF9TRVRfQkFDS0VORCBpb2N0bCBmYWlsZWQs IHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KK30NCisNCisvKioNCisgKiB2aG9zdF9y eF9kZXNjcmlwdG9yX2hhbmRvZmYoKSAtIEFubm91bmNlIGZyZWVkIGZyb20tZ3Vlc3QgZGVzY3Jp cHRvcnMNCisgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQorICoNCisgKiBCdW1wcyBhdmFpbC5p ZHggYnkgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyBhY2N1bXVsYXRlZCBpbg0KKyAqIHZob3N0 X3ZxX3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURYXS5udW1fZnJlZSAoZnJvbSBwcmlvcg0KKyAqIGNv bnN1bWVfb25lX3J4X2Rlc2NyaXB0b3IoKSBjYWxscyksDQorICogdGhlbiByZXNldHMgdGhlIGNv dW50ZXIgdG8gemVyby4gVGhlIGtlcm5lbCB3aWxsIHNlZSB0aGUgbmV3DQorICogYXZhaWwuaWR4 IGFuZCBjb25zdW1lIHRoZSBmcmVzaGx5LWF2YWlsYWJsZSBkZXNjcmlwdG9ycy4NCisgKi8NCit2 b2lkIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZihzdHJ1Y3QgY3R4ICpjKQ0KK3sNCisJc21w X3dtYigpOw0KKw0KKwlpZiAoIXZob3N0X3ZxX3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURYXS5udW1f ZnJlZSkNCisJCXJldHVybjsNCisNCisJdnJpbmdfYXZhaWxfYWxsW1ZIT1NUX0FWQUlMX1FfSURY XS5pZHggKz0NCisJCXZob3N0X3ZxX3N0YXRlW1ZIT1NUX0FWQUlMX1FfSURYXS5udW1fZnJlZTsN CisJdmhvc3RfdnFfc3RhdGVbVkhPU1RfQVZBSUxfUV9JRFhdLm51bV9mcmVlID0gMDsNCisJdmhv c3Rfa2ljaygmdnJpbmdfdXNlZF9hbGxbVkhPU1RfQVZBSUxfUV9JRFhdLA0KKwkJICAgYy0+dmhv c3QudnFbVkhPU1RfQVZBSUxfUV9JRFhdLmtpY2tfZmQpOw0KK30NCisNCisvKioNCisgKiB2aG9z dF9raWNrKCkgLSBOb3RpZnkgdGhlIGtlcm5lbCB0aGF0IG5ldyBkZXNjcmlwdG9ycyBhcmUgYXZh aWxhYmxlDQorICogQHVzZWQ6CVVzZWQgcmluZyBvZiB0aGUgcXVldWUgd2UncmUgYW5ub3VuY2lu ZyBvbiwgY2hlY2tlZCB0byBzZWUNCisgKgkJd2hldGhlciB0aGUga2VybmVsJ3MgdmlydGlvIHRo cmVhZCBpcyBhbHJlYWR5IHJlYWRpbmcNCisgKgkJZGVzY3JpcHRvcnMgYW5kIGRvZXNuJ3Qgd2Fu dCB0byBiZSBub3RpZmllZA0KKyAqIEBraWNrX2ZkOglLaWNrIGV2ZW50ZmQgb2YgdGhhdCBzYW1l IHF1ZXVlDQorICovDQordm9pZCB2aG9zdF9raWNrKHN0cnVjdCB2cmluZ191c2VkX3Bhc3RhICp1 c2VkLCBpbnQga2lja19mZCkNCit7DQorCS8qIEVuc3VyZSB0aGF0IHRoZSByZWFkIG9mIHVzZWQt PmZsYWdzIGRvZXNuJ3QgZ2V0IHJlb3JkZXJlZCB0byBiZQ0KKwkgKiBhYm92ZSB0aGUgYXZhaWwu aWR4IHVwZGF0ZQ0KKwkgKi8NCisJc21wX21iKCk7DQorDQorCWlmICghKHVzZWQtPmZsYWdzICYg VlJJTkdfVVNFRF9GX05PX05PVElGWSkpDQorCQlldmVudGZkX3dyaXRlKGtpY2tfZmQsIDEpOw0K K30NCmRpZmYgLS1naXQgYS92aG9zdC5oIGIvdmhvc3QuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAuLmJkNTU1ZjkNCi0tLSAvZGV2L251bGwNCisrKyBiL3Zob3N0LmgNCkBA IC0wLDAgKzEsOTEgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1s YXRlcg0KKyAqIENvcHlyaWdodCBSZWQgSGF0DQorICogQXV0aG9yOiBBbW1hciBZYXNzZXIgPGFl cm9zb3VuZDE2MUBnbWFpbC5jb20+DQorICoNCisgKiB2aG9zdC5oIC0gdmhvc3QtbmV0ICh2aG9z dC1rZXJuZWwpIGFjY2VsZXJhdGlvbiBmb3IgcGFzdGEgbW9kZQ0KKyAqLw0KKw0KKyNpZm5kZWYg VkhPU1RfSA0KKyNkZWZpbmUgVkhPU1RfSA0KKw0KKyNpbmNsdWRlIDxhc3NlcnQuaD4NCisjaW5j bHVkZSA8c3RkZGVmLmg+DQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKw0KKyNpbmNsdWRlIDxsaW51 eC92aG9zdC5oPg0KKyNpbmNsdWRlIDxsaW51eC92aG9zdF90eXBlcy5oPg0KKyNpbmNsdWRlIDxs aW51eC92aXJ0aW9fY29uZmlnLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4NCisj aW5jbHVkZSA8bGludXgvdmlydGlvX3JpbmcuaD4NCisNCisjaW5jbHVkZSAicGFzc3QuaCINCisN CisjZGVmaW5lIFZIT1NUX0FWQUlMX1FfSURYIDANCisjZGVmaW5lIFZIT1NUX1VTRURfUV9JRFgg MQ0KKw0KKy8qKg0KKyAqIHN0cnVjdCB2cV9zdGF0ZSAtIFBlci12aXJ0cXVldWUgbG9jYWwgZGVz Y3JpcHRvciB0cmFja2luZw0KKyAqIEBudW1fZnJlZToJCU51bWJlciBvZiBkZXNjcmlwdG9ycyBy ZWFkeSB0byBiZSBhbm5vdW5jZWQgdG8gdGhlDQorICoJCQlrZXJuZWwgdmlhIHZob3N0X3J4X2Rl c2NyaXB0b3JfaGFuZG9mZigpDQorICogQGxhc3RfdXNlZF9pZHg6CU51bWJlciBvZiB1c2VkLXJp bmcgZW50cmllcyBjb25zdW1lZCBzbyBmYXI7DQorICoJCQlsYWdnaW5nIHJlYWQgY3Vyc29yIHZz LiB2cmluZ191c2VkLT5pZHggKHRoZQ0KKyAqCQkJa2VybmVsJ3Mgd3JpdGUgY3Vyc29yKQ0KKyAq Lw0KK2V4dGVybiBzdHJ1Y3QgdnFfc3RhdGUgew0KKwl1aW50MTZfdCBudW1fZnJlZTsNCisJdWlu dDE2X3QgbGFzdF91c2VkX2lkeDsNCisJdWludDE2X3QgbmV4dF9mcmVlOw0KK30gdmhvc3RfdnFf c3RhdGVbMl07DQorDQorc3RydWN0IHZyaW5nX2Rlc2NfcGFzdGEgew0KKwlfX3ZpcnRpbzY0IGFk ZHI7DQorCV9fdmlydGlvMzIgbGVuOw0KKwlfX3ZpcnRpbzE2IGZsYWdzOw0KKwlfX3ZpcnRpbzE2 IG5leHQ7DQorfTsNCisNCitleHRlcm4gc3RydWN0IHZyaW5nX2Rlc2NfcGFzdGEgdnJpbmdfZGVz Y1syXVtWSE9TVF9OREVTQ1NdOw0KKw0KK3N0cnVjdCB2cmluZ19hdmFpbF9wYXN0YSB7DQorCV9f dmlydGlvMTYgZmxhZ3M7DQorCV9fdmlydGlvMTYgaWR4Ow0KKwlfX3ZpcnRpbzE2IHJpbmdbVkhP U1RfTkRFU0NTXTsNCit9Ow0KK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB2cmluZ19hdmFp bF9wYXN0YSkgPT0NCisJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX2F2YWlsLCByaW5nW1ZI T1NUX05ERVNDU10pLA0KKwkgICAgICAidnJpbmdfYXZhaWxfcGFzdGEgZG9lc24ndCBtYXRjaCB0 aGUga2VybmVsIGF2YWlsIHJpbmcgbGF5b3V0Iik7DQorZXh0ZXJuIHN0cnVjdCB2cmluZ19hdmFp bF9wYXN0YSB2cmluZ19hdmFpbF9hbGxbMl07DQorDQorc3RydWN0IHZyaW5nX3VzZWRfcGFzdGEg ew0KKwlfX3ZpcnRpbzE2IGZsYWdzOw0KKwlfX3ZpcnRpbzE2IGlkeDsNCisJdnJpbmdfdXNlZF9l bGVtX3QgcmluZ1tWSE9TVF9OREVTQ1NdOw0KK307DQorc3RhdGljX2Fzc2VydChzaXplb2Yoc3Ry dWN0IHZyaW5nX3VzZWRfcGFzdGEpID09DQorCSAgICAgIG9mZnNldG9mKHN0cnVjdCB2cmluZ191 c2VkLCByaW5nW1ZIT1NUX05ERVNDU10pLA0KKwkgICAgICAidnJpbmdfdXNlZF9wYXN0YSBkb2Vz bid0IG1hdGNoIHRoZSBrZXJuZWwgdXNlZCByaW5nIGxheW91dCIpOw0KK2V4dGVybiBzdHJ1Y3Qg dnJpbmdfdXNlZF9wYXN0YSB2cmluZ191c2VkX2FsbFsyXTsNCisNCisjZGVmaW5lIE5fVkhPU1Rf UkVHSU9OUyAxMg0KK3VuaW9uIHZob3N0X21lbW9yeV91IHsNCisJc3RydWN0IHZob3N0X21lbW9y eSBtZW07DQorCWNoYXIgYnVmW29mZnNldG9mKHN0cnVjdCB2aG9zdF9tZW1vcnksIHJlZ2lvbnNb Tl9WSE9TVF9SRUdJT05TXSldOw0KK307DQorZXh0ZXJuIHVuaW9uIHZob3N0X21lbW9yeV91IHZo b3N0X21lbW9yeTsNCisNCisjZGVmaW5lIFZIT1NUX01FTU9SWV9SRUdJT05fUFRSKGFkZHIsIHNp emUpIFwNCisgICAgKHN0cnVjdCB2aG9zdF9tZW1vcnlfcmVnaW9uKSB7IFwNCisgICAgICAgIC5n dWVzdF9waHlzX2FkZHIgPSAodWludHB0cl90KWFkZHIsIFwNCisgICAgICAgIC5tZW1vcnlfc2l6 ZSA9IHNpemUsIFwNCisgICAgICAgIC51c2Vyc3BhY2VfYWRkciAgPSAodWludHB0cl90KWFkZHIs IFwNCisgICAgfQ0KKyNkZWZpbmUgVkhPU1RfTUVNT1JZX1JFR0lPTihidWYpIFZIT1NUX01FTU9S WV9SRUdJT05fUFRSKCZidWYsIHNpemVvZihidWYpKQ0KKw0KK3ZvaWQgdmhvc3Rfc2V0X3ZyaW5n KHN0cnVjdCBjdHggKmMsIGludCBxdWV1ZV9pZHgsIGludCB0YXBfZmQpOw0KK2ludCB2aG9zdF9z ZXR1cF9tZW1vcnlfdGFibGUoc3RydWN0IGN0eCAqYyk7DQoraW50IHZob3N0X3NldHVwX25ldChz dHJ1Y3QgY3R4ICpjKTsNCit2b2lkIHZob3N0X3NldHVwX2V2ZW50ZmRzKHN0cnVjdCBjdHggKmMs IGludCBxdWV1ZV9pZHgpOw0KK3ZvaWQgdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKHN0cnVj dCBjdHggKmMpOw0KK3ZvaWQgdmhvc3Rfa2ljayhzdHJ1Y3QgdnJpbmdfdXNlZF9wYXN0YSAqdXNl ZCwgaW50IGtpY2tfZmQpOw0KKw0KKyNlbmRpZiAvKiBWSE9TVF9IICovDQotLQ0KMi4zOS41IChB cHBsZSBHaXQtMTU0KQ0KDQoNCg==