From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 87E85A04C5; Fri, 4 Sep 2020 03:26:45 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1BB0FE07; Fri, 4 Sep 2020 03:26:45 +0200 (CEST) Received: from m1362.mail.163.com (m1362.mail.163.com [220.181.13.62]) by dpdk.org (Postfix) with ESMTP id 3ED03DE0 for ; Fri, 4 Sep 2020 03:26:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:MIME-Version:Message-ID; bh=oF31a JL977R3uAW10+H8TyWJ0hT3owF+mZn9sUPmhq8=; b=UyiPntzk/24Rwu6GlsvlI dguawew78LKon8wPefOnUAG4q7vJ2gWa23GPbqvdXIX4uT0INQHlReT+cIm5RtfZ 1dJHKQhFF6PmSymr6aZnYU2nibfVm4/DktrvCoRopDTHBpLwda7EdbX5kPph2ppX qqHj0U9AMUJnnJSFImb1NI= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr62 (Coremail) ; Fri, 4 Sep 2020 09:26:35 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Fri, 4 Sep 2020 09:26:35 +0800 (CST) From: yang_y_yi To: "Hu, Jiayu" Cc: "dev@dpdk.org" , "thomas@monjalon.net" , "yangyi01@inspur.com" X-Priority: 1 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <93b32da783ad4a609ea11b1cf14184a3@intel.com> References: <20200902092643.49924-1-yang_y_yi@163.com> <20200902092643.49924-2-yang_y_yi@163.com> <93b32da783ad4a609ea11b1cf14184a3@intel.com> X-CM-CTRLDATA: tPMLImZvb3Rlcl9odG09MjQ3ODY6NTY= MIME-Version: 1.0 Message-ID: <317af429.ec7.17456b8f3a1.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: PsGowAB3f3fLl1FfuztzAA--.15276W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/xtbB0gaVi1UMYl52AwABsb X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH V3 1/2] gro: add UDP GRO support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" QXQgMjAyMC0wOS0wMyAxNTo0Mjo0OCwgIkh1LCBKaWF5dSIgPGppYXl1Lmh1QGludGVsLmNvbT4g d3JvdGU6Cj5IaSBZaSwKPgo+U29tZSBjb21tZW50cyBhcmUgaW5saW5lLgo+Cj5JbiBhZGRpdGlv biwgaGF2ZSB5b3UgdGVzdGVkIFVEUCBHUk8gZnVuY3Rpb24gYW5kIG1lYXN1cmUgcGVyZm9ybWFu Y2U/CgpZZXMsIEkgdGVzdGVkIEdSTyBhbmQgR1NPIHRvZ2V0aGVyLiBUaGUgdGVzdCBjYXNlIGlz IFZNIHNlbmRzIDhLIFVEUCBwYWNrZXQgYnkgdmhvc3R1c2VyY2xpZW50LCBPVlMgRFBESyBHU09l ZCBpdCBhcyBzaXplIDE0NTAgcGFja2V0cywgc2VuZCB0aGVtIHRvIGFub3RoZXIgc2VydmVyIGJ5 IHZsYW4sIGFub3RoZXIgc2VydmVyIEdST2VkIHRoZW0sIHRoZW4gc2VuZCB0byBWTSBvbiBpdCBi eSB2aG9zdGRwZGt1c2VyY2xpZW50LiBTbyBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBpcyBjb250 cmlidXRlZCBieSBHU08gYW5kIEdSTy4gQnkgdGhlIHdheSwgbXkgVk0gY2FuJ3QgZG8gVUZPIChJ J20gbm90IHN1cmUgd2h5LCBteSBxZW11IGhhcyBzdXBwb3J0ZWQgaXQpLCBzbyBpdHMgTVRVIGlz IHNldCB0byA4OTUwLCBidXQgcmVjZWl2aW5nIHNpZGUgVk0gTVRVIGNhbiBiZSAxNDUwIG9yIDg5 NTAsIG15IGNhc2UgY29uc2lkZXJlZCBib3RoIHZsYW4gYW5kIHZ4bGFuLiBVRFAgcGVyZm9ybWFu Y2UgaXMgYWJvdXQgNkdicHMgKHdpdGggcGFja2V0IGxvc3MpIGZvciA4SyBVRFAsIGlmIG5vIEdT TyBhbmQgR1JPLCBpdCBjYW4ndCB3b3JrIGZvciBNVFUgMTQ1MCBjYXNlLCBidXQgVURQIHBlcmZv cm1hbmNlIGlzIGFib3V0IDNHYnBzIGlmIFVEUCBzaXplIGlzIDE0NTAuCgpxZW11LXN5c3RlbS14 ODZfNjQgLWVuYWJsZS1rdm0gLW5vZ3JhcGhpYyAtbSA0MDk2IC1jcHUgaG9zdCAtc21wIDJcCiAg ICAtb2JqZWN0IG1lbW9yeS1iYWNrZW5kLWZpbGUsaWQ9bWVtMCxzaXplPTRHLG1lbS1wYXRoPS9k ZXYvaHVnZXBhZ2VzLHNoYXJlPW9uIC1udW1hIG5vZGUsbWVtZGV2PW1lbTAgXAogICAgLWNoYXJk ZXYgc29ja2V0LGlkPWNoYXIxLHBhdGg9L3Zhci9ydW4vb3BlbnZzd2l0Y2gvZHBka3Zob3N0dXNl cmNsaWVudDEsc2VydmVyIFwKICAgIC1uZXRkZXYgdHlwZT12aG9zdC11c2VyLGlkPW15bmV0MSxj aGFyZGV2PWNoYXIxLHZob3N0Zm9yY2UscXVldWVzPTIgXAogICAgLWRldmljZSB2aXJ0aW8tbmV0 LXBjaSxob3N0X210dT0xNDUwLG1hYz01Mjo1NDowMDoxMjozNDo1NixuZXRkZXY9bXluZXQxLGNz dW09b24sZ3Vlc3RfY3N1bT1vbixndWVzdF9lY249b24sZ3Vlc3RfdHNvND1vbixndWVzdF90c282 PW9uLGdzbz1vbixob3N0X3Vmbz1vbixndWVzdF91Zm89b24sbXE9b24sdmVjdG9ycz02LHJ4X3F1 ZXVlX3NpemU9MTAyNCBcCiAgICAvaG9tZS9laXBhZG1pbi94ZW5pYWwtc2VydmVyLWNsb3VkaW1n LWFtZDY0LWRpc2sxLmltZwoKJCBxZW11LXN5c3RlbS14ODZfNjQgLXZlcnNpb24KUUVNVSBlbXVs YXRvciB2ZXJzaW9uIDIuMTEuMShEZWJpYW4gMToyLjExK2Rmc2ctMS40fnUxNi4wNCttY3AyKQpD b3B5cmlnaHQgKGMpIDIwMDMtMjAxNyBGYWJyaWNlIEJlbGxhcmQgYW5kIHRoZSBRRU1VIFByb2pl Y3QgZGV2ZWxvcGVycwoKT3RoZXIgY29tbWVudHMgaW5saW5lLCBwbGVhc2UgY2hlY2sgbW9yZS4K CkhlcmUgaXMgbXkgb3ZzIGRwZGsgcGF0Y2ggc2VyaWVzIGh0dHBzOi8vcGF0Y2h3b3JrLm96bGFi cy5vcmcvcHJvamVjdC9vcGVudnN3aXRjaC9saXN0Lz9zZXJpZXM9MTk0NjIxLCBidXQgaXQgZGVw ZW5kcyBvbiBHU08gYW5kIEdSTyBwYXRjaCBhbmQgdGhpcyBvbmUgc2VyaWVzIGh0dHBzOi8vcGF0 Y2h3b3JrLmRwZGsub3JnL2NvdmVyLzc1MDI5Lywgc28geW91IGhhZCBiZXR0ZXIgcmV2aWV3IHRo ZW0gdG9nZXRoZXIuCgo+Cj5UaGFua3MsCj5KaWF5dQo+Cj4+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tCj4+IEZyb206IHlhbmdfeV95aUAxNjMuY29tIDx5YW5nX3lfeWlAMTYzLmNvbT4KPj4g U2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgMiwgMjAyMCA1OjI3IFBNCj4+IFRvOiBkZXZAZHBk ay5vcmcKPj4gQ2M6IEh1LCBKaWF5dSA8amlheXUuaHVAaW50ZWwuY29tPjsgdGhvbWFzQG1vbmph bG9uLm5ldDsKPj4geWFuZ3lpMDFAaW5zcHVyLmNvbTsgeWFuZ195X3lpQDE2My5jb20KPj4gU3Vi amVjdDogW1BBVENIIFYzIDEvMl0gZ3JvOiBhZGQgVURQIEdSTyBzdXBwb3J0Cj4+IAo+PiBGcm9t OiBZaSBZYW5nIDx5YW5neWkwMUBpbnNwdXIuY29tPgo+PiAKPj4gVURQIEdSTyBjYW4gaGVscCBp bXByb3ZlIFZNLXRvLVZNIFVEUCBwZXJmb3JtYW5jZSB3aGVuCj4+IFZNIGlzIGVuYWJsZWQgVUZP IG9yIEdTTywgR1JPIG11c3QgYmUgc3VwcG9ydGVkIGlmIEdTTwo+PiBvciBVRk8gaXMgZW5hYmxl ZCwgb3RoZXJ3aXNlLCBwZXJmb3JtYW5jZSBnYWluIHdpbGwgYmUKPj4gaHVydC4KPj4gCj4+IFdp dGggdGhpcyBlbmFibGVkIGluIERQREssIE9WUyBEUERLIGNhbiBsZXZlcmFnZSBpdAo+PiB0byBp bXByb3ZlIFZNLXRvLVZNIFVEUCBwZXJmb3JtYW5jZSwgdGhpcyB3aWxsIG1ha2UKPj4gc3VyZSBJ UCBmcmFnbWVudHMgd2lsbCBiZSByZWFzc2VtYmxlZCBvbmNlIGl0IGlzCj4+IHJlY2VpdmVkIGZy b20gcGh5c2ljYWwgTklDLiBJdCBpcyB2ZXJ5IGhlbHBmdWwgaW4gT1ZTCj4+IERQREsgVkxBTiBU U08gY2FzZS4KPj4gCj4+IFNpZ25lZC1vZmYtYnk6IFlpIFlhbmcgPHlhbmd5aTAxQGluc3B1ci5j b20+Cj4+IC0tLQo+PiAKPj4gICMgaW5zdGFsbCB0aGlzIGhlYWRlciBmaWxlCj4+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX2dyby9ncm9fdWRwNC5jIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQu Ywo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5kNmJlZWNlCj4+IC0t LSAvZGV2L251bGwKPj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYwo+PiArc3RhdGlj IGlubGluZSB2b2lkCj4+ICt1cGRhdGVfaGVhZGVyKHN0cnVjdCBncm9fdWRwNF9pdGVtICppdGVt KQo+PiArewo+PiArCXN0cnVjdCBydGVfaXB2NF9oZHIgKmlwdjRfaGRyOwo+PiArCXN0cnVjdCBy dGVfbWJ1ZiAqcGt0ID0gaXRlbS0+Zmlyc3RzZWc7Cj4+ICsJdWludDE2X3QgZnJhZ19vZmZzZXQ7 Cj4+ICsKPj4gKwlpcHY0X2hkciA9IChzdHJ1Y3QgcnRlX2lwdjRfaGRyICopKHJ0ZV9wa3RtYnVm X210b2QocGt0LCBjaGFyICopICsKPj4gKwkJCXBrdC0+bDJfbGVuKTsKPj4gKwlpcHY0X2hkci0+ dG90YWxfbGVuZ3RoID0gcnRlX2NwdV90b19iZV8xNihwa3QtPnBrdF9sZW4gLQo+PiArCQkJcGt0 LT5sMl9sZW4pOwo+PiArCj4+ICsJLyogQ2xlYXIgTUYgYml0IGlmIGl0IGlzIGxhc3QgZnJhZ21l bnQgKi8KPj4gKwlpZiAoaXRlbS0+aXNfbGFzdF9mcmFnKSB7Cj4+ICsJCWZyYWdfb2Zmc2V0ID0g cnRlX2JlX3RvX2NwdV8xNihpcHY0X2hkci0+ZnJhZ21lbnRfb2Zmc2V0KTsKPj4gKwkJaXB2NF9o ZHItPmZyYWdtZW50X29mZnNldCA9Cj4+ICsJCQlydGVfY3B1X3RvX2JlXzE2KGZyYWdfb2Zmc2V0 ICYKPj4gflJURV9JUFY0X0hEUl9NRl9GTEFHKTsKPj4gKwl9Cj4KPkkgdGhpbmsgd2UgbmVlZCB0 byBjbGVhciBNRiBiaXQgYW5kIG9mZnNldCBib3RoLCBzaW5jZSBlaXRoZXIKPk1GIGJpdCBvciBv ZmZzZXQgaXMgbm9uLXplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIHBhY2tldCBpcyBhbiBJUAo+ZnJh Z21lbnQuIE9uY2UgdGhlIHBhY2tldCBpcyByZWFzc2VtYmxlZCBzdWNjZXNzZnVsbHksIHRoZSB0 d28KPmZpZWxkcyBzaG91bGQgYmUgemVyby4gWW91IGNhbiByZWZlcmVuY2UgSVAgZnJhZ21lbnQg bGlicmFyeSBpbgo+RFBESy4KCldoZW4gcmVhc3NlbWJsZSwgZmluYWwgcGFja2V0IHVzZWQgaGVh ZGVyIG9mIHRoZSBmaXJzdCBJUCBmcmFnbWVudCwgb2Zmc2V0IGhhcyBiZWVuIDAuIEJUVywgaXQg aXMgcG9zc2libGUgdG8gZG8gcGFydGlhbCByZWFzc2VtYmxlLCBpLmUuIHNvbWUgb25lcyBvZiBh bGwgdGhlIGZyYWdtZW50cyBhcmUgcmVhc3NlbWJsZWQsIGZpcnN0IHJlYXNzZW1ibGVkICBmcmFn bWVudCBpc24ndCB0aGUgZmlyc3Qgb25lIG9mIG9yaWdpbmFsIFVEUCBwYWNrZXQuIHNvIHdlIGNh bid0IHRvdWNoIG9mZnNldCBoZXJlLCBrZWVwIGFzIGl0IGlzIGlzIG9ubHkgb25lIGNob2ljZSBo ZXJlLgoKPgo+PiArfQo+PiArCj4+ICtpbnQzMl90Cj4+ICtncm9fdWRwNF9yZWFzc2VtYmxlKHN0 cnVjdCBydGVfbWJ1ZiAqcGt0LAo+PiArCQlzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0YmwsCj4+ICsJ CXVpbnQ2NF90IHN0YXJ0X3RpbWUpCj4+ICt7Cj4+ICsJc3RydWN0IHJ0ZV9ldGhlcl9oZHIgKmV0 aF9oZHI7Cj4+ICsJc3RydWN0IHJ0ZV9pcHY0X2hkciAqaXB2NF9oZHI7Cj4+ICsJdWludDE2X3Qg aXBfZGw7Cj4+ICsJdWludDE2X3QgaXBfaWQsIGhkcl9sZW47Cj4+ICsJdWludDE2X3QgZnJhZ19v ZmZzZXQgPSAwOwo+PiArCXVpbnQ4X3QgaXNfbGFzdF9mcmFnOwo+PiArCj4+ICsJc3RydWN0IHVk cDRfZmxvd19rZXkga2V5Owo+PiArCXVpbnQzMl90IGN1cl9pZHgsIHByZXZfaWR4LCBpdGVtX2lk eDsKPj4gKwl1aW50MzJfdCBpLCBtYXhfZmxvd19udW0sIHJlbWFpbmluZ19mbG93X251bTsKPj4g KwlpbnQgY21wOwo+PiArCXVpbnQ4X3QgZmluZDsKPj4gKwo+PiArCWV0aF9oZHIgPSBydGVfcGt0 bWJ1Zl9tdG9kKHBrdCwgc3RydWN0IHJ0ZV9ldGhlcl9oZHIgKik7Cj4+ICsJaXB2NF9oZHIgPSAo c3RydWN0IHJ0ZV9pcHY0X2hkciAqKSgoY2hhciAqKWV0aF9oZHIgKyBwa3QtPmwyX2xlbik7Cj4+ ICsJaGRyX2xlbiA9IHBrdC0+bDJfbGVuICsgcGt0LT5sM19sZW4gKyBwa3QtPmw0X2xlbjsKPj4g Kwo+PiArCS8qCj4+ICsJICogRG9uJ3QgcHJvY2VzcyBub24tZnJhZ21lbnQgcGFja2V0Lgo+PiAr CSAqLwo+PiArCWlmICghaXNfaXB2NF9mcmFnbWVudChpcHY0X2hkcikpCj4+ICsJCXJldHVybiAt MTsKPj4gKwo+PiArCS8qCj4+ICsJICogRG9uJ3QgcHJvY2VzcyB0aGUgcGFja2V0IHdob3NlIHBh eWxvYWQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvcgo+PiArCSAqIGVxdWFsIHRvIDAuCj4+ICsJICov Cj4+ICsJaWYgKHBrdC0+cGt0X2xlbiAtIGhkcl9sZW4gPD0gMCkKPj4gKwkJcmV0dXJuIC0xOwo+ Cj5JbnB1dCBwYWNrZXRzIGFyZSBJUCBmcmFnbWVudHMsIHNvIHRoZSBoZWFkZXIgbGVuZ3RoIHNo b3VsZG4ndCBpbmNsdWRlIGw0X2xlbi4KClllYWgsIHRoaXMgaXMgYSBtaXN0YWtlLCB3aWxsIGNo YW5nZSBpdCwgYnV0IGl0IGRpZCB3b3JrIGJlY2F1c2UgcGt0X2xlbiBpcyBhbHdheXMgZ3JlYXRl ciB0aGFuIGhkcl9sZW4gOi0pCgo+Cj4+ICsKPj4gKwlpcF9kbCA9IHJ0ZV9iZV90b19jcHVfMTYo aXB2NF9oZHItPnRvdGFsX2xlbmd0aCkgLSBwa3QtPmwzX2xlbjsKPj4gKwlpcF9pZCA9IHJ0ZV9i ZV90b19jcHVfMTYoaXB2NF9oZHItPnBhY2tldF9pZCk7Cj4+ICsJZnJhZ19vZmZzZXQgPSBydGVf YmVfdG9fY3B1XzE2KGlwdjRfaGRyLT5mcmFnbWVudF9vZmZzZXQpOwo+PiArCWlzX2xhc3RfZnJh ZyA9ICgoZnJhZ19vZmZzZXQgJiBSVEVfSVBWNF9IRFJfTUZfRkxBRykgPT0gMCkgPyAxIDogMDsK Pj4gKwlmcmFnX29mZnNldCA9ICh1aW50MTZfdCkoZnJhZ19vZmZzZXQgJiBSVEVfSVBWNF9IRFJf T0ZGU0VUX01BU0spCj4+IDw8IDM7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAr Cj4+ICt1aW50MTZfdAo+PiArZ3JvX3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goc3RydWN0IGdyb191 ZHA0X3RibCAqdGJsLAo+PiArCQl1aW50NjRfdCBmbHVzaF90aW1lc3RhbXAsCj4+ICsJCXN0cnVj dCBydGVfbWJ1ZiAqKm91dCwKPj4gKwkJdWludDE2X3QgbmJfb3V0KQo+PiArewo+PiArCXVpbnQx Nl90IGsgPSAwOwo+PiArCXVpbnQzMl90IGksIGo7Cj4+ICsJdWludDMyX3QgbWF4X2Zsb3dfbnVt ID0gdGJsLT5tYXhfZmxvd19udW07Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Zsb3df bnVtOyBpKyspIHsKPj4gKwkJaWYgKHVubGlrZWx5KHRibC0+Zmxvd19udW0gPT0gMCkpCj4+ICsJ CQlyZXR1cm4gazsKPj4gKwo+PiArCQlqID0gdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleDsKPj4g KwkJd2hpbGUgKGogIT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkgewo+PiArCQkJaWYgKHRibC0+aXRl bXNbal0uc3RhcnRfdGltZSA8PSBmbHVzaF90aW1lc3RhbXApIHsKPj4gKwkJCQlncm9fdWRwNF9t ZXJnZV9pdGVtcyh0YmwsIGopOwo+Cj5XaHkgbmVlZCB0byBtZXJnZSBwYWNrZXRzIGFnYWluIHdo ZW4gZmx1c2ggdGhlIHRhYmxlPwoKQmVjYXVzZSBvdnMgd2lsbCBtYWtlIHRoZW0gb3V0IG9mIG9y ZGVyLCBvbmx5IHRoZSBmaXJzdCBJUCBmcmFnbWVudCBpbmNsdWRlcyBVRFAgaGVhZGVyLCBvdGhl ciBJUCBmcmFnbWVudHMgZG9uJ3QgaW5jbHVkZSBVRFAgaGVhZGVyLCBPVlMgd2lsbCBzcGxpdCB0 aGVtIGludG8gdHdvIGZsb3dzLCBvdnMgc2VuZCBzaWRlIHNlbnQgb3V0IHRoZW0gb3V0IG9mIG9y ZGVyLCBzbyBvbiByZWNlaXZlIHNpZGUsIHRoZSByZXN1bHQgaXMgdGhlIGZpcnN0IHJlYXNzZW1i bGVkIElQIGZyYW1nbWVudCBpc24ndCB0aGUgZmlyc3QgSVAgZnJhZ21lbnQsIHNvIEkgY2FjaGUg dGhlbSBmaXJzdCwgcmVhc3NlbWJsZSB0aGVtIHdoZW4gZmx1c2ggdGhlbS4KCj4KPj4gKwkJCQlv dXRbaysrXSA9IHRibC0+aXRlbXNbal0uZmlyc3RzZWc7Cj4+ICsJCQkJaWYgKHRibC0+aXRlbXNb al0ubmJfbWVyZ2VkID4gMSkKPj4gKwkJCQkJdXBkYXRlX2hlYWRlcigmKHRibC0+aXRlbXNbal0p KTsKPj4gKwkJCQkvKgo+PiArCQkJCSAqIERlbGV0ZSB0aGUgcGFja2V0IGFuZCBnZXQgdGhlIG5l eHQKPj4gKwkJCQkgKiBwYWNrZXQgaW4gdGhlIGZsb3cuCj4+ICsJCQkJICovCj4+ICsJCQkJaiA9 IGRlbGV0ZV9pdGVtKHRibCwgaiwgSU5WQUxJRF9BUlJBWV9JTkRFWCk7Cj4+ICsJCQkJdGJsLT5m bG93c1tpXS5zdGFydF9pbmRleCA9IGo7Cj4+ICsJCQkJaWYgKGogPT0gSU5WQUxJRF9BUlJBWV9J TkRFWCkKPj4gKwkJCQkJdGJsLT5mbG93X251bS0tOwo+PiArCj4+ICsJCQkJaWYgKHVubGlrZWx5 KGsgPT0gbmJfb3V0KSkKPj4gKwkJCQkJcmV0dXJuIGs7Cj4+ICsJCQl9IGVsc2UKPj4gKwkJCQkv Kgo+PiArCQkJCSAqIFRoZSBsZWZ0IHBhY2tldHMgaW4gdGhpcyBmbG93IHdvbid0IGJlCj4+ICsJ CQkJICogdGltZW91dC4gR28gdG8gY2hlY2sgb3RoZXIgZmxvd3MuCj4+ICsJCQkJICovCj4+ICsJ CQkJYnJlYWs7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsJcmV0dXJuIGs7Cj4+ICt9Cj4+ICsKPj4gZGlm ZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmggYi9saWIvbGlicnRlX2dyby9ncm9f dWRwNC5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmUxMDAyYzYK Pj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9saWIvbGlicnRlX2dyby9ncm9fdWRwNC5oCj4+IEBA IC0wLDAgKzEsMjk0IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh dXNlCj4+ICsgKiBDb3B5cmlnaHQoYykgMjAyMCBJbnNwdXIgQ29ycG9yYXRpb24KPj4gKyAqLwo+ PiArCj4+ICsjaWZuZGVmIF9HUk9fVURQNF9IXwo+PiArI2RlZmluZSBfR1JPX1VEUDRfSF8KPj4g Kwo+PiArI2luY2x1ZGUgPHJ0ZV9pcC5oPgo+PiArI2luY2x1ZGUgPHJ0ZV91ZHAuaD4KPj4gKyNp bmNsdWRlIDxydGVfdnhsYW4uaD4KPgo+cnRlX3Z4bGFuLmggaXMgdXNlZCBpbiBWeExBTi9VRFAg R1JPLiBXZSBkb24ndCBuZWVkCj5pdCBpbiB0aGlzIHBhdGNoLgoKWWVzLCB3aWxsIG1vdmUgaXQg dG8gZ3JvX3Z4bGFuX3VkcDQuaAoKPgo+PiArCj4+ICtzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSB7Cj4+ ICsJLyoKPj4gKwkgKiBUaGUgZmlyc3QgTUJVRiBzZWdtZW50IG9mIHRoZSBwYWNrZXQuIElmIHRo ZSB2YWx1ZQo+PiArCSAqIGlzIE5VTEwsIGl0IG1lYW5zIHRoZSBpdGVtIGlzIGVtcHR5Lgo+PiAr CSAqLwo+PiArCXN0cnVjdCBydGVfbWJ1ZiAqZmlyc3RzZWc7Cj4+ICsJLyogVGhlIGxhc3QgTUJV RiBzZWdtZW50IG9mIHRoZSBwYWNrZXQgKi8KPj4gKwlzdHJ1Y3QgcnRlX21idWYgKmxhc3RzZWc7 Cj4+ICsJLyoKPj4gKwkgKiBUaGUgdGltZSB3aGVuIHRoZSBmaXJzdCBwYWNrZXQgaXMgaW5zZXJ0 ZWQgaW50byB0aGUgdGFibGUuCj4+ICsJICogVGhpcyB2YWx1ZSB3b24ndCBiZSB1cGRhdGVkLCBl dmVuIGlmIHRoZSBwYWNrZXQgaXMgbWVyZ2VkCj4+ICsJICogd2l0aCBvdGhlciBwYWNrZXRzLgo+ PiArCSAqLwo+PiArCXVpbnQ2NF90IHN0YXJ0X3RpbWU7Cj4+ICsJLyoKPj4gKwkgKiBuZXh0X3Br dF9pZHggaXMgdXNlZCB0byBjaGFpbiB0aGUgcGFja2V0cyB0aGF0Cj4+ICsJICogYXJlIGluIHRo ZSBzYW1lIGZsb3cgYnV0IGNhbid0IGJlIG1lcmdlZCB0b2dldGhlcgo+PiArCSAqIChlLmcuIGNh dXNlZCBieSBwYWNrZXQgcmVvcmRlcmluZykuCj4+ICsJICovCj4+ICsJdWludDMyX3QgbmV4dF9w a3RfaWR4Owo+PiArCS8qIG9mZnNldCBvZiBJUCBmcmFnbWVudCBwYWNrZXQgKi8KPj4gKwl1aW50 MTZfdCBmcmFnX29mZnNldDsKPj4gKwkvKiBpcyBsYXN0IElQIGZyYWdtZW50PyAqLwo+PiArCXVp bnQ4X3QgaXNfbGFzdF9mcmFnOwo+PiArCS8qIElQdjQgSUQgb2YgdGhlIHBhY2tldCAqLwo+PiAr CXVpbnQxNl90IGlwX2lkOwo+Cj5GcmFnbWVudHMgb2YgYSBVRFAgcGFja2V0IGhhdmUgdGhlIHNh bWUgSVAgSUQuIFdlIG9ubHkgbmVlZCB0byBtYXRjaAo+aXQgaW4gdWRwNF9mbG93X2tleSBzdHJ1 Y3R1cmUsIGFuZCBncm9fdWRwNF9pdGVtIGRvZXNuJ3QgbmVlZCBpdC4KCkkgbmVlZCB0byB1c2Ug dGhlc2UgaW5mbyB3aGVuIGZsdXNoIGFuZCByZWFzc2VtYmxlLgoKPgo+PiArCS8qIHRoZSBudW1i ZXIgb2YgbWVyZ2VkIHBhY2tldHMgKi8KPj4gKwl1aW50MTZfdCBuYl9tZXJnZWQ7Cj4+ICsJLyog SW5kaWNhdGUgaWYgSVB2NCBJRCBjYW4gYmUgaWdub3JlZCAqLwo+PiArCXVpbnQ4X3QgaXNfYXRv bWljOwo+Cj5JcyBpc19hdG9taWMgdXNlZD8KCnZ4bGFuIHVkcCBncm8gdXNlZCBpdC4KCj4KPj4g K307Cj4+ICsKPj4gKwo+PiArLyoKPj4gKyAqIENoZWNrIGlmIHR3byBVRFAvSVB2NCBwYWNrZXRz IGJlbG9uZyB0byB0aGUgc2FtZSBmbG93Lgo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIGludAo+ PiAraXNfc2FtZV91ZHA0X2Zsb3coc3RydWN0IHVkcDRfZmxvd19rZXkgazEsIHN0cnVjdCB1ZHA0 X2Zsb3dfa2V5IGsyKQo+PiArewo+PiArCXJldHVybiAocnRlX2lzX3NhbWVfZXRoZXJfYWRkcigm azEuZXRoX3NhZGRyLCAmazIuZXRoX3NhZGRyKSAmJgo+PiArCQkJcnRlX2lzX3NhbWVfZXRoZXJf YWRkcigmazEuZXRoX2RhZGRyLAo+PiAmazIuZXRoX2RhZGRyKSAmJgo+PiArCQkJKGsxLmlwX3Ny Y19hZGRyID09IGsyLmlwX3NyY19hZGRyKSAmJgo+PiArCQkJKGsxLmlwX2RzdF9hZGRyID09IGsy LmlwX2RzdF9hZGRyKSAmJgo+PiArCQkJKGsxLmlwX2lkID09IGsyLmlwX2lkKSk7Cj4+ICt9Cj4+ ICsKPj4gKy8qCj4+ICsgKiBNZXJnZSB0d28gVURQL0lQdjQgcGFja2V0cyB3aXRob3V0IHVwZGF0 aW5nIGNoZWNrc3Vtcy4KPj4gKyAqIElmIGNtcCBpcyBsYXJnZXIgdGhhbiAwLCBhcHBlbmQgdGhl IG5ldyBwYWNrZXQgdG8gdGhlCj4+ICsgKiBvcmlnaW5hbCBwYWNrZXQuIE90aGVyd2lzZSwgcHJl LXBlbmQgdGhlIG5ldyBwYWNrZXQgdG8KPj4gKyAqIHRoZSBvcmlnaW5hbCBwYWNrZXQuCj4+ICsg Ki8KPj4gK3N0YXRpYyBpbmxpbmUgaW50Cj4+ICttZXJnZV90d29fdWRwNF9wYWNrZXRzKHN0cnVj dCBncm9fdWRwNF9pdGVtICppdGVtLAo+PiArCQlzdHJ1Y3QgcnRlX21idWYgKnBrdCwKPj4gKwkJ aW50IGNtcCwKPj4gKwkJdWludDE2X3QgZnJhZ19vZmZzZXQsCj4+ICsJCXVpbnQ4X3QgaXNfbGFz dF9mcmFnLAo+PiArCQl1aW50MTZfdCBpcF9pZCwKPj4gKwkJdWludDE2X3QgbDJfb2Zmc2V0KQo+ PiArewo+PiArCXN0cnVjdCBydGVfbWJ1ZiAqcGt0X2hlYWQsICpwa3RfdGFpbCwgKmxhc3RzZWc7 Cj4+ICsJdWludDE2X3QgaGRyX2xlbiwgbDJfbGVuOwo+PiArCXVpbnQzMl90IGlwX2xlbjsKPj4g Kwo+PiArCWlmIChjbXAgPiAwKSB7Cj4+ICsJCXBrdF9oZWFkID0gaXRlbS0+Zmlyc3RzZWc7Cj4+ ICsJCXBrdF90YWlsID0gcGt0Owo+PiArCX0gZWxzZSB7Cj4+ICsJCXBrdF9oZWFkID0gcGt0Owo+ PiArCQlwa3RfdGFpbCA9IGl0ZW0tPmZpcnN0c2VnOwo+PiArCX0KPj4gKwo+PiArCS8qIGNoZWNr IGlmIHRoZSBJUHY0IHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXggdmFsdWUg Ki8KPj4gKwloZHJfbGVuID0gbDJfb2Zmc2V0ICsgcGt0X2hlYWQtPmwyX2xlbiArIHBrdF9oZWFk LT5sM19sZW47Cj4+ICsJbDJfbGVuID0gbDJfb2Zmc2V0ID4gMCA/IHBrdF9oZWFkLT5vdXRlcl9s Ml9sZW4gOiBwa3RfaGVhZC0+bDJfbGVuOwo+PiArCWlwX2xlbiA9IHBrdF9oZWFkLT5wa3RfbGVu IC0gbDJfbGVuCj4+ICsJCSArIHBrdF90YWlsLT5wa3RfbGVuIC0gaGRyX2xlbjsKPj4gKwlpZiAo dW5saWtlbHkoaXBfbGVuID4gTUFYX0lQVjRfUEtUX0xFTkdUSCkpCj4+ICsJCXJldHVybiAwOwo+ PiArCj4+ICsJLyogcmVtb3ZlIHRoZSBwYWNrZXQgaGVhZGVyIGZvciB0aGUgdGFpbCBwYWNrZXQg Ki8KPj4gKwlydGVfcGt0bWJ1Zl9hZGoocGt0X3RhaWwsIGhkcl9sZW4pOwo+PiArCj4+ICsJLyog Y2hhaW4gdHdvIHBhY2tldHMgdG9nZXRoZXIgKi8KPj4gKwlpZiAoY21wID4gMCkgewo+PiArCQlp dGVtLT5sYXN0c2VnLT5uZXh0ID0gcGt0Owo+PiArCQlpdGVtLT5sYXN0c2VnID0gcnRlX3BrdG1i dWZfbGFzdHNlZyhwa3QpOwo+PiArCQkvKiB1cGRhdGUgSVAgSUQgdG8gdGhlIGxhcmdlciB2YWx1 ZSAqLwo+PiArCQlpdGVtLT5pcF9pZCA9IGlwX2lkOwo+Cj5JUCBJRCBpcyB0aGUgc2FtZSBmb3Ig YWxsIGZyYWdtZW50cyBvZiBhIHBhY2tldC4gSSBkb24ndCB0aGluawo+d2UgbmVlZCB0byB1cGRh dGUgaXQuCgp2eGxhbiB1ZHAgZ3JvIHdpbGwgdXNlIGl0LCB0aGF0IGxldmVyYWdlZCBzYW1lIGZ1 bmN0aW9uLCBmb3Igb3V0ZXIgdWRwIHBhY2tldCwgaXAgaWQgaXMgZGlmZmVyZW50LgoKPgo+PiAr CX0gZWxzZSB7Cj4+ICsJCWxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2VnKHBrdCk7Cj4+ICsJ CWxhc3RzZWctPm5leHQgPSBpdGVtLT5maXJzdHNlZzsKPj4gKwkJaXRlbS0+Zmlyc3RzZWcgPSBw a3Q7Cj4+ICsJCS8qIHVwZGF0ZSBzZW50X3NlcSB0byB0aGUgc21hbGxlciB2YWx1ZSAqLwo+PiAr CQlpdGVtLT5mcmFnX29mZnNldCA9IGZyYWdfb2Zmc2V0Owo+PiArCQlpdGVtLT5pcF9pZCA9IGlw X2lkOwo+PiArCX0KPj4gKwlpdGVtLT5uYl9tZXJnZWQrKzsKPj4gKwlpZiAoaXNfbGFzdF9mcmFn KQo+PiArCQlpdGVtLT5pc19sYXN0X2ZyYWcgPSBpc19sYXN0X2ZyYWc7Cj4+ICsKPj4gKwkvKiB1 cGRhdGUgTUJVRiBtZXRhZGF0YSBmb3IgdGhlIG1lcmdlZCBwYWNrZXQgKi8KPj4gKwlwa3RfaGVh ZC0+bmJfc2VncyArPSBwa3RfdGFpbC0+bmJfc2VnczsKPj4gKwlwa3RfaGVhZC0+cGt0X2xlbiAr PSBwa3RfdGFpbC0+cGt0X2xlbjsKPj4gKwo+PiArCXJldHVybiAxOwo+PiArfQo+PiArCj4+ICsv Kgo+PiArICogQ2hlY2sgaWYgdHdvIFVEUC9JUHY0IHBhY2tldHMgYXJlIG5laWdoYm9ycy4KPj4g KyAqLwo+PiArc3RhdGljIGlubGluZSBpbnQKPj4gK3VkcF9jaGVja19uZWlnaGJvcihzdHJ1Y3Qg Z3JvX3VkcDRfaXRlbSAqaXRlbSwKPj4gKwkJdWludDE2X3QgZnJhZ19vZmZzZXQsCj4+ICsJCXVp bnQxNl90IGlwX2lkLAo+PiArCQl1aW50MTZfdCBpcF9kbCwKPj4gKwkJdWludDE2X3QgbDJfb2Zm c2V0KQo+PiArewo+PiArCXN0cnVjdCBydGVfbWJ1ZiAqcGt0X29yaWcgPSBpdGVtLT5maXJzdHNl ZzsKPj4gKwl1aW50MTZfdCBsZW47Cj4+ICsKPj4gKwkvKiBjaGVjayBpZiB0aGUgdHdvIHBhY2tl dHMgYXJlIG5laWdoYm9ycyAqLwo+PiArCWxlbiA9IHBrdF9vcmlnLT5wa3RfbGVuIC0gbDJfb2Zm c2V0IC0gcGt0X29yaWctPmwyX2xlbiAtCj4+ICsJCXBrdF9vcmlnLT5sM19sZW47Cj4+ICsJaWYg KChmcmFnX29mZnNldCA9PSBpdGVtLT5mcmFnX29mZnNldCArIGxlbikgJiYKPj4gKwkJKGlwX2lk ID09IGl0ZW0tPmlwX2lkKSkKPj4gKwkJLyogYXBwZW5kIHRoZSBuZXcgcGFja2V0ICovCj4+ICsJ CXJldHVybiAxOwo+PiArCWVsc2UgaWYgKChmcmFnX29mZnNldCArIGlwX2RsID09IGl0ZW0tPmZy YWdfb2Zmc2V0KSAmJgo+PiArCQkJKGlwX2lkID09IGl0ZW0tPmlwX2lkKSkKPgo+SXNfc2FtZV91 ZHA0X2Zsb3coKSBjaGVja3MgaXBfaWQuIE5vIG5lZWQgdG8gY2hlY2sgYWdhaW4uCgp2eGxhbiB1 ZHAgZ3JvIGxldmVyYWdlZCBpdCwgc28gbmVlZCB0byBjaGVjayBoZXJlLgoKPgo+PiArCQkvKiBw cmUtcGVuZCB0aGUgbmV3IHBhY2tldCAqLwo+PiArCQlyZXR1cm4gLTE7Cj4+ICsKPj4gKwlyZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQKPj4gK2lzX2lwdjRfZnJhZ21l bnQoY29uc3Qgc3RydWN0IHJ0ZV9pcHY0X2hkciAqaGRyKQo+PiArewo+PiArCXVpbnQxNl90IGZs YWdfb2Zmc2V0LCBpcF9mbGFnLCBpcF9vZnM7Cj4+ICsKPj4gKwlmbGFnX29mZnNldCA9IHJ0ZV9i ZV90b19jcHVfMTYoaGRyLT5mcmFnbWVudF9vZmZzZXQpOwo+PiArCWlwX29mcyA9ICh1aW50MTZf dCkoZmxhZ19vZmZzZXQgJiBSVEVfSVBWNF9IRFJfT0ZGU0VUX01BU0spOwo+PiArCWlwX2ZsYWcg PSAodWludDE2X3QpKGZsYWdfb2Zmc2V0ICYgUlRFX0lQVjRfSERSX01GX0ZMQUcpOwo+PiArCj4+ ICsJcmV0dXJuIGlwX2ZsYWcgIT0gMCB8fCBpcF9vZnMgICE9IDA7Cj4KPklmIERGIGJpdCBpcyBz ZXQsIHRoZSBwYWNrZXQgaXMgbm90IGZyYWdtZW50ZWQsIHdoaWNoIHNob3VsZG4ndCBiZSBwcm9j ZXNzZWQKPmJ5IFVEUCBHUk8uIFNvIHdlIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBERiBi aXQgaXMgbm90IHNldC4KCk5vLCB3ZSdyZSByZWFzc2VtYmxpbmcgaXQgYnV0IG5vdCBmcmFnbWVu dCBpdCwgd2UgbmVlZG4ndCBjaGVjayBERiBiaXQgYXQgYWxsLgoKPgo+PiArfQo+PiArI2VuZGlm Cj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2dyby9tZXNvbi5idWlsZCBiL2xpYi9saWJydGVf Z3JvL21lc29uLmJ1aWxkCj4+IGluZGV4IDUwMTY2OGMuLjBkMThkYzIgMTAwNjQ0Cj4+IC0tLSBh L2xpYi9saWJydGVfZ3JvL3J0ZV9ncm8uYwo+PiArKysgYi9saWIvbGlicnRlX2dyby9ydGVfZ3Jv LmMKPj4gQEAgLTksNiArOSw3IEBACj4+IAo+PiAgI2luY2x1ZGUgInJ0ZV9ncm8uaCIKPj4gICNp bmNsdWRlICJncm9fdGNwNC5oIgo+PiArI2luY2x1ZGUgImdyb191ZHA0LmgiCj4+ICAjaW5jbHVk ZSAiZ3JvX3Z4bGFuX3RjcDQuaCIKPj4gCj4+ICB0eXBlZGVmIHZvaWQgKigqZ3JvX3RibF9jcmVh dGVfZm4pKHVpbnQxNl90IHNvY2tldF9pZCwKPj4gQEAgLTE4LDE3ICsxOSwyMyBAQAo+PiAgdHlw ZWRlZiB1aW50MzJfdCAoKmdyb190YmxfcGt0X2NvdW50X2ZuKSh2b2lkICp0YmwpOwo+PiAKPj4g IHN0YXRpYyBncm9fdGJsX2NyZWF0ZV9mbiB0YmxfY3JlYXRlX2ZuW1JURV9HUk9fVFlQRV9NQVhf TlVNXSA9IHsKPj4gLQkJZ3JvX3RjcDRfdGJsX2NyZWF0ZSwgZ3JvX3Z4bGFuX3RjcDRfdGJsX2Ny ZWF0ZSwgTlVMTH07Cj4+ICsJCWdyb190Y3A0X3RibF9jcmVhdGUsIGdyb192eGxhbl90Y3A0X3Ri bF9jcmVhdGUsCj4+ICsJCWdyb191ZHA0X3RibF9jcmVhdGUsIE5VTEx9Owo+PiAgc3RhdGljIGdy b190YmxfZGVzdHJveV9mbiB0YmxfZGVzdHJveV9mbltSVEVfR1JPX1RZUEVfTUFYX05VTV0gPSB7 Cj4+ICAJCQlncm9fdGNwNF90YmxfZGVzdHJveSwgZ3JvX3Z4bGFuX3RjcDRfdGJsX2Rlc3Ryb3ks Cj4+ICsJCQlncm9fdWRwNF90YmxfZGVzdHJveSwKPj4gIAkJCU5VTEx9Owo+PiAgc3RhdGljIGdy b190YmxfcGt0X2NvdW50X2ZuIHRibF9wa3RfY291bnRfZm5bUlRFX0dST19UWVBFX01BWF9OVU1d ID0KPj4gewo+PiAgCQkJZ3JvX3RjcDRfdGJsX3BrdF9jb3VudCwKPj4gZ3JvX3Z4bGFuX3RjcDRf dGJsX3BrdF9jb3VudCwKPj4gKwkJCWdyb191ZHA0X3RibF9wa3RfY291bnQsCj4+ICAJCQlOVUxM fTsKPj4gCj4+ICAjZGVmaW5lIElTX0lQVjRfVENQX1BLVChwdHlwZSkgKFJURV9FVEhfSVNfSVBW NF9IRFIocHR5cGUpICYmIFwKPj4gIAkJKChwdHlwZSAmIFJURV9QVFlQRV9MNF9UQ1ApID09IFJU RV9QVFlQRV9MNF9UQ1ApKQo+PiAKPj4gKyNkZWZpbmUgSVNfSVBWNF9VRFBfUEtUKHB0eXBlKSAo UlRFX0VUSF9JU19JUFY0X0hEUihwdHlwZSkgJiYgXAo+PiArCQkoKHB0eXBlICYgUlRFX1BUWVBF X0w0X1VEUCkgPT0gUlRFX1BUWVBFX0w0X1VEUCkpCj4+ICsKPj4gICNkZWZpbmUgSVNfSVBWNF9W WExBTl9UQ1A0X1BLVChwdHlwZSkgKFJURV9FVEhfSVNfSVBWNF9IRFIocHR5cGUpCj4+ICYmIFwK Pj4gIAkJKChwdHlwZSAmIFJURV9QVFlQRV9MNF9VRFApID09IFJURV9QVFlQRV9MNF9VRFApICYm IFwKPj4gIAkJKChwdHlwZSAmIFJURV9QVFlQRV9UVU5ORUxfVlhMQU4pID09IFwKPj4gQEAgLTQw LDYgKzQ3LDcgQEAKPj4gIAkJICAgICBSVEVfUFRZUEVfSU5ORVJfTDNfSVBWNF9FWFQgfCBcCj4+ ICAJCSAgICAgUlRFX1BUWVBFX0lOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04pKSAhPSAwKSkKPj4g Cj4+ICsKPj4gIC8qCj4+ICAgKiBHUk8gY29udGV4dCBzdHJ1Y3R1cmUuIEl0IGtlZXBzIHRoZSB0 YWJsZSBzdHJ1Y3R1cmVzLCB3aGljaCBhcmUKPj4gICAqIHVzZWQgdG8gbWVyZ2UgcGFja2V0cywg Zm9yIGRpZmZlcmVudCBHUk8gdHlwZXMuIEJlZm9yZSB1c2luZwo+PiBAQCAtMTIzLDIwICsxMzEs MjYgQEAgc3RydWN0IGdyb19jdHggewo+PiAgCXN0cnVjdCBncm9fdGNwNF9mbG93IHRjcF9mbG93 c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ICAJc3RydWN0IGdyb190Y3A0X2l0ZW0g dGNwX2l0ZW1zW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXQo+PiA9IHt7MH0gfTsKPj4gCj4+ IC0JLyogQWxsb2NhdGUgYSByZWFzc2VtYmx5IHRhYmxlIGZvciBWWExBTiBHUk8gKi8KPj4gLQlz dHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRfdGJsIHZ4bGFuX3RibDsKPj4gLQlzdHJ1Y3QgZ3JvX3Z4bGFu X3RjcDRfZmxvdwo+PiB2eGxhbl9mbG93c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ IC0Jc3RydWN0IGdyb192eGxhbl90Y3A0X2l0ZW0KPj4gdnhsYW5faXRlbXNbUlRFX0dST19NQVhf QlVSU1RfSVRFTV9OVU1dID0gewo+PiAtCQl7ezB9LCAwLCAwfSB9Owo+PiArCS8qIGFsbG9jYXRl IGEgcmVhc3NlbWJseSB0YWJsZSBmb3IgVURQL0lQdjQgR1JPICovCj4+ICsJc3RydWN0IGdyb191 ZHA0X3RibCB1ZHBfdGJsOwo+PiArCXN0cnVjdCBncm9fdWRwNF9mbG93Cj4+IHVkcF9mbG93c1tS VEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV07Cj4+ICsJc3RydWN0IGdyb191ZHA0X2l0ZW0gdWRw X2l0ZW1zW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXQo+PiA9IHt7MH0gfTsKPj4gKwo+PiAr CS8qIEFsbG9jYXRlIGEgcmVhc3NlbWJseSB0YWJsZSBmb3IgVlhMQU4gVENQIEdSTyAqLwo+PiAr CXN0cnVjdCBncm9fdnhsYW5fdGNwNF90YmwgdnhsYW5fdGNwX3RibDsKPj4gKwlzdHJ1Y3QgZ3Jv X3Z4bGFuX3RjcDRfZmxvdwo+PiB2eGxhbl90Y3BfZmxvd3NbUlRFX0dST19NQVhfQlVSU1RfSVRF TV9OVU1dOwo+PiArCXN0cnVjdCBncm9fdnhsYW5fdGNwNF9pdGVtCj4+IHZ4bGFuX3RjcF9pdGVt c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV0KPj4gKwkJCT0ge3t7MH0sIDAsIDB9IH07Cj4K PlJlbmFtaW5nIHZ4bGFuX2l0ZW1zL19mbG93cyBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBwYXRj aCwgYXMgdGhpcyBwYXRjaCBqdXN0Cj5zdXBwb3J0cyBVRFAgR1JPLgoKT2ssIHdpbGwgbW92ZSBp dCB0byB2eGxhbiB1ZHAgZ3JvIHRvIGRvLgoKPgo+PiAKPj4gIAlzdHJ1Y3QgcnRlX21idWYgKnVu cHJvY2Vzc19wa3RzW25iX3BrdHNdOwo+PiAgCXVpbnQzMl90IGl0ZW1fbnVtOwo+PiAgCWludDMy X3QgcmV0Owo+PiAgCXVpbnQxNl90IGksIHVucHJvY2Vzc19udW0gPSAwLCBuYl9hZnRlcl9ncm8g PSBuYl9wa3RzOwo+PiAtCXVpbnQ4X3QgZG9fdGNwNF9ncm8gPSAwLCBkb192eGxhbl9ncm8gPSAw Owo+PiArCXVpbnQ4X3QgZG9fdGNwNF9ncm8gPSAwLCBkb192eGxhbl90Y3BfZ3JvID0gMCwgZG9f dWRwNF9ncm8gPSAwOwo+Cj5SZW5hbWluZyBkb192eGxhbl9ncm8gc2hvdWxkIGJlIGluIHRoZSBz ZWNvbmQgcGF0Y2guCgpPaywgd2lsbCBtb3ZlIGl0IHRvIHZ4bGFuIHVkcCBncm8gdG8gZG8uCgo+ Cj4+ICAKPj4gIAkvKiBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgKi8KPj4gQEAg LTE0NiwxNSArMTYwLDE1IEBAIHN0cnVjdCBncm9fY3R4IHsKPj4gCj4+ICAJaWYgKHBhcmFtLT5n cm9fdHlwZXMgJiBSVEVfR1JPX1RDUF9JUFY0KSB7Cj4+IEBAIC0xNzAsMTQgKzE4NCwyOSBAQCBz dHJ1Y3QgZ3JvX2N0eCB7Cj4+ICAJCWRvX3RjcDRfZ3JvID0gMTsKPj4gIAl9Cj4+ICsKPj4gCj4+ ICAJcmV0dXJuIG5iX2FmdGVyX2dybzsKPj4gQEAgLTIyNCwyOSArMjY5LDMzIEBAIHN0cnVjdCBn cm9fY3R4IHsKPj4gIHsKPj4gIAlzdHJ1Y3QgcnRlX21idWYgKnVucHJvY2Vzc19wa3RzW25iX3Br dHNdOwo+PiAgCXN0cnVjdCBncm9fY3R4ICpncm9fY3R4ID0gY3R4Owo+PiAtCXZvaWQgKnRjcF90 YmwsICp2eGxhbl90Ymw7Cj4+ICsJdm9pZCAqdGNwX3RibCwgKnVkcF90YmwsICp2eGxhbl90Y3Bf dGJsOwo+PiAgCXVpbnQ2NF90IGN1cnJlbnRfdGltZTsKPj4gIAl1aW50MTZfdCBpLCB1bnByb2Nl c3NfbnVtID0gMDsKPj4gLQl1aW50OF90IGRvX3RjcDRfZ3JvLCBkb192eGxhbl9ncm87Cj4+ICsJ dWludDhfdCBkb190Y3A0X2dybywgZG9fdnhsYW5fdGNwX2dybywgZG9fdWRwNF9ncm87Cj4+IAo+ PiAgCWlmICh1bmxpa2VseSgoZ3JvX2N0eC0+Z3JvX3R5cGVzICYgKFJURV9HUk9fSVBWNF9WWExB Tl9UQ1BfSVBWNAo+PiB8Cj4+IC0JCQkJCVJURV9HUk9fVENQX0lQVjQpKSA9PSAwKSkKPj4gKwkJ CQkJUlRFX0dST19UQ1BfSVBWNCB8Cj4+ICsJCQkJCVJURV9HUk9fVURQX0lQVjQpKSA9PSAwKSkK Pj4gIAkJcmV0dXJuIG5iX3BrdHM7Cj4+IAo+PiAgCXRjcF90YmwgPSBncm9fY3R4LT50YmxzW1JU RV9HUk9fVENQX0lQVjRfSU5ERVhdOwo+PiAtCXZ4bGFuX3RibCA9IGdyb19jdHgtPnRibHNbUlRF X0dST19JUFY0X1ZYTEFOX1RDUF9JUFY0X0lOREVYXTsKPj4gKwl2eGxhbl90Y3BfdGJsID0gZ3Jv X2N0eC0KPj4gPnRibHNbUlRFX0dST19JUFY0X1ZYTEFOX1RDUF9JUFY0X0lOREVYXTsKPj4gKwl1 ZHBfdGJsID0gZ3JvX2N0eC0+dGJsc1tSVEVfR1JPX1VEUF9JUFY0X0lOREVYXTsKPj4gCj4+ICAJ ZG9fdGNwNF9ncm8gPSAoZ3JvX2N0eC0+Z3JvX3R5cGVzICYgUlRFX0dST19UQ1BfSVBWNCkgPT0K Pj4gIAkJUlRFX0dST19UQ1BfSVBWNDsKPj4gLQlkb192eGxhbl9ncm8gPSAoZ3JvX2N0eC0+Z3Jv X3R5cGVzICYKPj4gUlRFX0dST19JUFY0X1ZYTEFOX1RDUF9JUFY0KSA9PQo+PiArCWRvX3Z4bGFu X3RjcF9ncm8gPSAoZ3JvX2N0eC0+Z3JvX3R5cGVzICYKPj4gUlRFX0dST19JUFY0X1ZYTEFOX1RD UF9JUFY0KSA9PQo+PiAgCQlSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQ7Cj4+ICsJZG9fdWRw NF9ncm8gPSAoZ3JvX2N0eC0+Z3JvX3R5cGVzICYgUlRFX0dST19VRFBfSVBWNCkgPT0KPj4gKwkJ UlRFX0dST19VRFBfSVBWNDsKPj4gCj4+ICAJY3VycmVudF90aW1lID0gcnRlX3JkdHNjKCk7Cj4+ IAo+PiAgCWZvciAoaSA9IDA7IGkgPCBuYl9wa3RzOyBpKyspIHsKPj4gIAkJaWYgKElTX0lQVjRf VlhMQU5fVENQNF9QS1QocGt0c1tpXS0+cGFja2V0X3R5cGUpICYmCj4+IC0JCQkJZG9fdnhsYW5f Z3JvKSB7Cj4+IC0JCQlpZiAoZ3JvX3Z4bGFuX3RjcDRfcmVhc3NlbWJsZShwa3RzW2ldLCB2eGxh bl90YmwsCj4+ICsJCQkJZG9fdnhsYW5fdGNwX2dybykgewo+PiArCQkJaWYgKGdyb192eGxhbl90 Y3A0X3JlYXNzZW1ibGUocGt0c1tpXSwgdnhsYW5fdGNwX3RibCwKPj4gIAkJCQkJCWN1cnJlbnRf dGltZSkgPCAwKQo+PiAgCQkJCXVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19udW0rK10gPSBwa3Rz W2ldOwo+PiAgCQl9IGVsc2UgaWYgKElTX0lQVjRfVENQX1BLVChwa3RzW2ldLT5wYWNrZXRfdHlw ZSkgJiYKPj4gQEAgLTI1NCw2ICszMDMsMTEgQEAgc3RydWN0IGdyb19jdHggewo+PiAgCQkJaWYg KGdyb190Y3A0X3JlYXNzZW1ibGUocGt0c1tpXSwgdGNwX3RibCwKPj4gIAkJCQkJCWN1cnJlbnRf dGltZSkgPCAwKQo+PiAgCQkJCXVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19udW0rK10gPSBwa3Rz W2ldOwo+PiArCQl9IGVsc2UgaWYgKElTX0lQVjRfVURQX1BLVChwa3RzW2ldLT5wYWNrZXRfdHlw ZSkgJiYKPj4gKwkJCQlkb191ZHA0X2dybykgewo+PiArCQkJaWYgKGdyb191ZHA0X3JlYXNzZW1i bGUocGt0c1tpXSwgdWRwX3RibCwKPj4gKwkJCQkJCWN1cnJlbnRfdGltZSkgPCAwKQo+PiArCQkJ CXVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19udW0rK10gPSBwa3RzW2ldOwo+PiAgCQl9IGVsc2UK Pj4gIAkJCXVucHJvY2Vzc19wa3RzW3VucHJvY2Vzc19udW0rK10gPSBwa3RzW2ldOwo+PiAgCX0K Pj4gQEAgLTI3NSw2ICszMjksNyBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ICAJc3RydWN0IGdyb19j dHggKmdyb19jdHggPSBjdHg7Cj4+ICAJdWludDY0X3QgZmx1c2hfdGltZXN0YW1wOwo+PiAgCXVp bnQxNl90IG51bSA9IDA7Cj4+ICsJdWludDE2X3QgbGVmdF9uYl9vdXQgPSBtYXhfbmJfb3V0Owo+ PiAKPj4gIAlncm9fdHlwZXMgPSBncm9fdHlwZXMgJiBncm9fY3R4LT5ncm9fdHlwZXM7Cj4+ICAJ Zmx1c2hfdGltZXN0YW1wID0gcnRlX3JkdHNjKCkgLSB0aW1lb3V0X2N5Y2xlczsKPj4gQEAgLTI4 Miw4ICszMzcsOCBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ICAJaWYgKGdyb190eXBlcyAmIFJURV9H Uk9fSVBWNF9WWExBTl9UQ1BfSVBWNCkgewo+PiAgCQludW0gPSBncm9fdnhsYW5fdGNwNF90Ymxf dGltZW91dF9mbHVzaChncm9fY3R4LT50YmxzWwo+PiAgCQkJCVJURV9HUk9fSVBWNF9WWExBTl9U Q1BfSVBWNF9JTkRFWF0sCj4+IC0JCQkJZmx1c2hfdGltZXN0YW1wLCBvdXQsIG1heF9uYl9vdXQp Owo+PiAtCQltYXhfbmJfb3V0IC09IG51bTsKPj4gKwkJCQlmbHVzaF90aW1lc3RhbXAsIG91dCwg bGVmdF9uYl9vdXQpOwo+PiArCQlsZWZ0X25iX291dCA9IG1heF9uYl9vdXQgLSBudW07Cj4+ICAJ fQo+PiAKPj4gIAkvKiBJZiBubyBhdmFpbGFibGUgc3BhY2UgaW4gJ291dCcsIHN0b3AgZmx1c2hp bmcuICovCj4+IEBAIC0yOTEsNyArMzQ2LDE3IEBAIHN0cnVjdCBncm9fY3R4IHsKPj4gIAkJbnVt ICs9IGdyb190Y3A0X3RibF90aW1lb3V0X2ZsdXNoKAo+PiAgCQkJCWdyb19jdHgtPnRibHNbUlRF X0dST19UQ1BfSVBWNF9JTkRFWF0sCj4+ICAJCQkJZmx1c2hfdGltZXN0YW1wLAo+PiAtCQkJCSZv dXRbbnVtXSwgbWF4X25iX291dCk7Cj4+ICsJCQkJJm91dFtudW1dLCBsZWZ0X25iX291dCk7Cj4+ ICsJCWxlZnRfbmJfb3V0ID0gbWF4X25iX291dCAtIG51bTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBJ ZiBubyBhdmFpbGFibGUgc3BhY2UgaW4gJ291dCcsIHN0b3AgZmx1c2hpbmcuICovCj4+ICsJaWYg KChncm9fdHlwZXMgJiBSVEVfR1JPX1VEUF9JUFY0KSAmJiBtYXhfbmJfb3V0ID4gMCkgewo+PiAr CQludW0gKz0gZ3JvX3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goCj4+ICsJCQkJZ3JvX2N0eC0+dGJs c1tSVEVfR1JPX1VEUF9JUFY0X0lOREVYXSwKPj4gKwkJCQlmbHVzaF90aW1lc3RhbXAsCj4+ICsJ CQkJJm91dFtudW1dLCBsZWZ0X25iX291dCk7Cj4+ICsJCWxlZnRfbmJfb3V0ID0gbWF4X25iX291 dCAtIG51bTsKPgo+RG9uJ3QgbmVlZCB0byB1cGRhdGUgbGVmdF9uYl9vdXQgaGVyZS4KClllcywg d2lsbCByZW1vdmUgaXQuCgo+Cj4+ICAJfQo+PiAKPj4gIAlyZXR1cm4gbnVtOwo+PiBkaWZmIC0t Z2l0IGEvbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5oIGIvbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5o Cj4+IGluZGV4IDhkNzgxYjUuLjQ3MGYzZWQgMTAwNjQ0Cj4+IC0tLSBhL2xpYi9saWJydGVfZ3Jv L3J0ZV9ncm8uaAo+PiArKysgYi9saWIvbGlicnRlX2dyby9ydGVfZ3JvLmgKPj4gQEAgLTMxLDcg KzMxLDEwIEBACj4+ICAvKio8IFRDUC9JUHY0IEdSTyBmbGFnICovCj4+ICAjZGVmaW5lIFJURV9H Uk9fSVBWNF9WWExBTl9UQ1BfSVBWNF9JTkRFWCAxCj4+ICAjZGVmaW5lIFJURV9HUk9fSVBWNF9W WExBTl9UQ1BfSVBWNCAoMVVMTCA8PAo+PiBSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjRfSU5E RVgpCj4+IC0vKio8IFZ4TEFOIEdSTyBmbGFnLiAqLwo+PiArLyoqPCBWeExBTiBUQ1AvSVB2NCBH Uk8gZmxhZy4gKi8KPj4gKyNkZWZpbmUgUlRFX0dST19VRFBfSVBWNF9JTkRFWCAyCj4+ICsjZGVm aW5lIFJURV9HUk9fVURQX0lQVjQgKDFVTEwgPDwgUlRFX0dST19VRFBfSVBWNF9JTkRFWCkKPj4g Ky8qKjwgVURQL0lQdjQgR1JPIGZsYWcgKi8KPj4gCj4+ICAvKioKPj4gICAqIFN0cnVjdHVyZSB1 c2VkIHRvIGNyZWF0ZSBHUk8gY29udGV4dCBvYmplY3RzIG9yIHVzZWQgdG8gcGFzcwo+PiAtLQo+ PiAxLjguMy4xCgoKCg==