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 48049A04B1; Wed, 9 Sep 2020 09:25:18 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 196E41BF8E; Wed, 9 Sep 2020 09:25:17 +0200 (CEST) Received: from m1388.mail.163.com (m1388.mail.163.com [220.181.13.88]) by dpdk.org (Postfix) with ESMTP id 7EC6E1B9B7 for ; Wed, 9 Sep 2020 09:25:14 +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=GpiA0 ejY15M849FFm/LDfYFoc7f4/I4y4/Yjqikb/OQ=; b=CYa+I+SaQ4VxlJ2hWflqj iTSGnPL2U/ZSDHAsi0HRuiZm9Ht1B7D6+M6UYVcgLLaHO7Uoek+RjUWdBvFqkkD9 FsiTRt4NnDsAUX1Za2X7my/EsYCaI5c4pIf6DFEYIUiueM2p2RZrT141Cr7jYZcp vC5FKrDeDlbMj27obof3LE= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr88 (Coremail) ; Wed, 9 Sep 2020 15:25:10 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Wed, 9 Sep 2020 15:25:10 +0800 (CST) From: yang_y_yi To: "Jiayu Hu" Cc: thomas@monjalon.net, dev@dpdk.org, 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: <20200908020516.GA68491@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> References: <20200904083740.71272-1-yang_y_yi@163.com> <20200904083740.71272-2-yang_y_yi@163.com> <20200908020516.GA68491@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> X-CM-CTRLDATA: 0WhPomZvb3Rlcl9odG09MzY0ODQ6NTY= MIME-Version: 1.0 Message-ID: <3d73e64d.45c4.17471c10896.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: WMGowAAXQMNWg1hfQCF2AA--.16070W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/xtbBEACai1UMTnVd7AACsQ 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 v4 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" CgpBdCAyMDIwLTA5LTA4IDEwOjA1OjE2LCAiSmlheXUgSHUiIDxqaWF5dS5odUBpbnRlbC5jb20+ IHdyb3RlOgo+U29tZSBjb21tZW50cyBhcmUgaW5saW5lLgoKVGhhbmtzLCByZXBsaWVzIGlubGlu ZS4KCj4KPlRoYW5rcywKPkppYXl1Cj4KPk9uIEZyaSwgU2VwIDA0LCAyMDIwIGF0IDA0OjM3OjM5 UE0gKzA4MDAsIHlhbmdfeV95aUAxNjMuY29tIHdyb3RlOgo+PiBGcm9tOiBZaSBZYW5nIDx5YW5n eWkwMUBpbnNwdXIuY29tPgo+PiAKPj4gVURQIEdSTyBjYW4gaGVscCBpbXByb3ZlIFZNLXRvLVZN IFVEUCBwZXJmb3JtYW5jZSB3aGVuCj4+IFZNIGlzIGVuYWJsZWQgVUZPIG9yIEdTTywgR1JPIG11 c3QgYmUgc3VwcG9ydGVkIGlmIEdTTwo+PiBvciBVRk8gaXMgZW5hYmxlZCwgb3RoZXJ3aXNlLCBw ZXJmb3JtYW5jZSBnYWluIHdpbGwgYmUKPj4gaHVydC4KPj4gCj4+IFdpdGggdGhpcyBlbmFibGVk IGluIERQREssIE9WUyBEUERLIGNhbiBsZXZlcmFnZSBpdAo+PiB0byBpbXByb3ZlIFZNLXRvLVZN IFVEUCBwZXJmb3JtYW5jZSwgdGhpcyB3aWxsIG1ha2UKPj4gc3VyZSBJUCBmcmFnbWVudHMgd2ls bCBiZSByZWFzc2VtYmxlZCBvbmNlIGl0IGlzCj4+IHJlY2VpdmVkIGZyb20gcGh5c2ljYWwgTklD LiBJdCBpcyB2ZXJ5IGhlbHBmdWwgaW4gT1ZTCj4+IERQREsgVkxBTiBUU08gY2FzZS4KPj4gCj4+ IFNpZ25lZC1vZmYtYnk6IFlpIFlhbmcgPHlhbmd5aTAxQGluc3B1ci5jb20+Cj4+IC0tLQo+PiAg bGliL2xpYnJ0ZV9ncm8vTWFrZWZpbGUgICAgfCAgIDEgKwo+PiAgbGliL2xpYnJ0ZV9ncm8vZ3Jv X3VkcDQuYyAgfCA0MzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4+ICBsaWIvbGlicnRlX2dyby9ncm9fdWRwNC5oICB8IDI4MSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+PiAgbGliL2xpYnJ0ZV9ncm8vbWVzb24uYnVpbGQgfCAgIDIgKy0KPj4g IGxpYi9saWJydGVfZ3JvL3J0ZV9ncm8uYyAgIHwgIDkzICsrKysrKysrLS0KPj4gIGxpYi9saWJy dGVfZ3JvL3J0ZV9ncm8uaCAgIHwgICA1ICstCj4+ICA2IGZpbGVzIGNoYW5nZWQsIDc5NiBpbnNl cnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGli cnRlX2dyby9ncm9fdWRwNC5jCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9ncm8v Z3JvX3VkcDQuaAo+PiAKPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL01ha2VmaWxlIGIv bGliL2xpYnJ0ZV9ncm8vTWFrZWZpbGUKPj4gaW5kZXggZTg0ODY4Ny4uNDFlYzI5ZSAxMDA2NDQK Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vTWFrZWZpbGUKPj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8v TWFrZWZpbGUKPj4gQEAgLTE1LDYgKzE1LDcgQEAgRVhQT1JUX01BUCA6PSBydGVfZ3JvX3ZlcnNp b24ubWFwCj4+ICAjIHNvdXJjZSBmaWxlcwo+PiAgU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX0dS TykgKz0gcnRlX2dyby5jCj4+ICBTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfR1JPKSArPSBncm9f dGNwNC5jCj4+ICtTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfR1JPKSArPSBncm9fdWRwNC5jCj4+ ICBTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfR1JPKSArPSBncm9fdnhsYW5fdGNwNC5jCj4+ICAK Pj4gICMgaW5zdGFsbCB0aGlzIGhlYWRlciBmaWxlCj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRl X2dyby9ncm9fdWRwNC5jIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYwo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4yNTU4NGZkCj4+IC0tLSAvZGV2L251bGwKPj4g KysrIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYwo+PiBAQCAtMCwwICsxLDQzMCBAQAo+PiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQo+PiArICogQ29weXJpZ2h0 KGMpIDIwMjAgSW5zcHVyIENvcnBvcmF0aW9uCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPHJ0 ZV9tYWxsb2MuaD4KPj4gKyNpbmNsdWRlIDxydGVfbWJ1Zi5oPgo+PiArI2luY2x1ZGUgPHJ0ZV9j eWNsZXMuaD4KPj4gKyNpbmNsdWRlIDxydGVfZXRoZGV2Lmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJn cm9fdWRwNC5oIgo+PiArCj4+ICt2b2lkICoKPj4gK2dyb191ZHA0X3RibF9jcmVhdGUodWludDE2 X3Qgc29ja2V0X2lkLAo+PiArCQl1aW50MTZfdCBtYXhfZmxvd19udW0sCj4+ICsJCXVpbnQxNl90 IG1heF9pdGVtX3Blcl9mbG93KQo+PiArewo+PiArCXN0cnVjdCBncm9fdWRwNF90YmwgKnRibDsK Pj4gKwlzaXplX3Qgc2l6ZTsKPj4gKwl1aW50MzJfdCBlbnRyaWVzX251bSwgaTsKPj4gKwo+PiAr CWVudHJpZXNfbnVtID0gbWF4X2Zsb3dfbnVtICogbWF4X2l0ZW1fcGVyX2Zsb3c7Cj4+ICsJZW50 cmllc19udW0gPSBSVEVfTUlOKGVudHJpZXNfbnVtLCBHUk9fVURQNF9UQkxfTUFYX0lURU1fTlVN KTsKPj4gKwo+PiArCWlmIChlbnRyaWVzX251bSA9PSAwKQo+PiArCQlyZXR1cm4gTlVMTDsKPj4g Kwo+PiArCXRibCA9IHJ0ZV96bWFsbG9jX3NvY2tldChfX2Z1bmNfXywKPj4gKwkJCXNpemVvZihz dHJ1Y3QgZ3JvX3VkcDRfdGJsKSwKPj4gKwkJCVJURV9DQUNIRV9MSU5FX1NJWkUsCj4+ICsJCQlz b2NrZXRfaWQpOwo+PiArCWlmICh0YmwgPT0gTlVMTCkKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsK Pj4gKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBncm9fdWRwNF9pdGVtKSAqIGVudHJpZXNfbnVtOwo+ PiArCXRibC0+aXRlbXMgPSBydGVfem1hbGxvY19zb2NrZXQoX19mdW5jX18sCj4+ICsJCQlzaXpl LAo+PiArCQkJUlRFX0NBQ0hFX0xJTkVfU0laRSwKPj4gKwkJCXNvY2tldF9pZCk7Cj4+ICsJaWYg KHRibC0+aXRlbXMgPT0gTlVMTCkgewo+PiArCQlydGVfZnJlZSh0YmwpOwo+PiArCQlyZXR1cm4g TlVMTDsKPj4gKwl9Cj4+ICsJdGJsLT5tYXhfaXRlbV9udW0gPSBlbnRyaWVzX251bTsKPj4gKwo+ PiArCXNpemUgPSBzaXplb2Yoc3RydWN0IGdyb191ZHA0X2Zsb3cpICogZW50cmllc19udW07Cj4+ ICsJdGJsLT5mbG93cyA9IHJ0ZV96bWFsbG9jX3NvY2tldChfX2Z1bmNfXywKPj4gKwkJCXNpemUs Cj4+ICsJCQlSVEVfQ0FDSEVfTElORV9TSVpFLAo+PiArCQkJc29ja2V0X2lkKTsKPj4gKwlpZiAo dGJsLT5mbG93cyA9PSBOVUxMKSB7Cj4+ICsJCXJ0ZV9mcmVlKHRibC0+aXRlbXMpOwo+PiArCQly dGVfZnJlZSh0YmwpOwo+PiArCQlyZXR1cm4gTlVMTDsKPj4gKwl9Cj4+ICsJLyogSU5WQUxJRF9B UlJBWV9JTkRFWCBpbmRpY2F0ZXMgYW4gZW1wdHkgZmxvdyAqLwo+PiArCWZvciAoaSA9IDA7IGkg PCBlbnRyaWVzX251bTsgaSsrKQo+PiArCQl0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4ID0gSU5W QUxJRF9BUlJBWV9JTkRFWDsKPj4gKwl0YmwtPm1heF9mbG93X251bSA9IGVudHJpZXNfbnVtOwo+ PiArCj4+ICsJcmV0dXJuIHRibDsKPj4gK30KPj4gKwo+PiArdm9pZAo+PiArZ3JvX3VkcDRfdGJs X2Rlc3Ryb3kodm9pZCAqdGJsKQo+PiArewo+PiArCXN0cnVjdCBncm9fdWRwNF90YmwgKnVkcF90 YmwgPSB0Ymw7Cj4+ICsKPj4gKwlpZiAodWRwX3RibCkgewo+PiArCQlydGVfZnJlZSh1ZHBfdGJs LT5pdGVtcyk7Cj4+ICsJCXJ0ZV9mcmVlKHVkcF90YmwtPmZsb3dzKTsKPj4gKwl9Cj4+ICsJcnRl X2ZyZWUodWRwX3RibCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKPj4g K2ZpbmRfYW5fZW1wdHlfaXRlbShzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0YmwpCj4+ICt7Cj4+ICsJ dWludDMyX3QgaTsKPj4gKwl1aW50MzJfdCBtYXhfaXRlbV9udW0gPSB0YmwtPm1heF9pdGVtX251 bTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBtYXhfaXRlbV9udW07IGkrKykKPj4gKwkJaWYg KHRibC0+aXRlbXNbaV0uZmlyc3RzZWcgPT0gTlVMTCkKPj4gKwkJCXJldHVybiBpOwo+PiArCXJl dHVybiBJTlZBTElEX0FSUkFZX0lOREVYOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHVp bnQzMl90Cj4+ICtmaW5kX2FuX2VtcHR5X2Zsb3coc3RydWN0IGdyb191ZHA0X3RibCAqdGJsKQo+ PiArewo+PiArCXVpbnQzMl90IGk7Cj4+ICsJdWludDMyX3QgbWF4X2Zsb3dfbnVtID0gdGJsLT5t YXhfZmxvd19udW07Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Zsb3dfbnVtOyBpKysp Cj4+ICsJCWlmICh0YmwtPmZsb3dzW2ldLnN0YXJ0X2luZGV4ID09IElOVkFMSURfQVJSQVlfSU5E RVgpCj4+ICsJCQlyZXR1cm4gaTsKPj4gKwlyZXR1cm4gSU5WQUxJRF9BUlJBWV9JTkRFWDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGlubGluZSB1aW50MzJfdAo+PiAraW5zZXJ0X25ld19pdGVtKHN0 cnVjdCBncm9fdWRwNF90YmwgKnRibCwKPj4gKwkJc3RydWN0IHJ0ZV9tYnVmICpwa3QsCj4+ICsJ CXVpbnQ2NF90IHN0YXJ0X3RpbWUsCj4+ICsJCXVpbnQzMl90IHByZXZfaWR4LAo+PiArCQl1aW50 MTZfdCBmcmFnX29mZnNldCwKPj4gKwkJdWludDhfdCBpc19sYXN0X2ZyYWcpCj4+ICt7Cj4+ICsJ dWludDMyX3QgaXRlbV9pZHg7Cj4+ICsKPj4gKwlpdGVtX2lkeCA9IGZpbmRfYW5fZW1wdHlfaXRl bSh0YmwpOwo+PiArCWlmIChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQo+PiArCQly ZXR1cm4gSU5WQUxJRF9BUlJBWV9JTkRFWDsKPj4gKwo+PiArCXRibC0+aXRlbXNbaXRlbV9pZHhd LmZpcnN0c2VnID0gcGt0Owo+PiArCXRibC0+aXRlbXNbaXRlbV9pZHhdLmxhc3RzZWcgPSBydGVf cGt0bWJ1Zl9sYXN0c2VnKHBrdCk7Cj4+ICsJdGJsLT5pdGVtc1tpdGVtX2lkeF0uc3RhcnRfdGlt ZSA9IHN0YXJ0X3RpbWU7Cj4+ICsJdGJsLT5pdGVtc1tpdGVtX2lkeF0ubmV4dF9wa3RfaWR4ID0g SU5WQUxJRF9BUlJBWV9JTkRFWDsKPj4gKwl0YmwtPml0ZW1zW2l0ZW1faWR4XS5mcmFnX29mZnNl dCA9IGZyYWdfb2Zmc2V0Owo+PiArCXRibC0+aXRlbXNbaXRlbV9pZHhdLmlzX2xhc3RfZnJhZyA9 IGlzX2xhc3RfZnJhZzsKPj4gKwl0YmwtPml0ZW1zW2l0ZW1faWR4XS5uYl9tZXJnZWQgPSAxOwo+ PiArCXRibC0+aXRlbV9udW0rKzsKPj4gKwo+PiArCS8qIGlmIHRoZSBwcmV2aW91cyBwYWNrZXQg ZXhpc3RzLCBjaGFpbiB0aGVtIHRvZ2V0aGVyLiAqLwo+PiArCWlmIChwcmV2X2lkeCAhPSBJTlZB TElEX0FSUkFZX0lOREVYKSB7Cj4+ICsJCXRibC0+aXRlbXNbaXRlbV9pZHhdLm5leHRfcGt0X2lk eCA9Cj4+ICsJCQl0YmwtPml0ZW1zW3ByZXZfaWR4XS5uZXh0X3BrdF9pZHg7Cj4+ICsJCXRibC0+ aXRlbXNbcHJldl9pZHhdLm5leHRfcGt0X2lkeCA9IGl0ZW1faWR4Owo+PiArCX0KPj4gKwo+PiAr CXJldHVybiBpdGVtX2lkeDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB1aW50MzJfdAo+ PiArZGVsZXRlX2l0ZW0oc3RydWN0IGdyb191ZHA0X3RibCAqdGJsLCB1aW50MzJfdCBpdGVtX2lk eCwKPj4gKwkJdWludDMyX3QgcHJldl9pdGVtX2lkeCkKPj4gK3sKPj4gKwl1aW50MzJfdCBuZXh0 X2lkeCA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLm5leHRfcGt0X2lkeDsKPj4gKwo+PiArCS8qIE5V TEwgaW5kaWNhdGVzIGFuIGVtcHR5IGl0ZW0gKi8KPj4gKwl0YmwtPml0ZW1zW2l0ZW1faWR4XS5m aXJzdHNlZyA9IE5VTEw7Cj4+ICsJdGJsLT5pdGVtX251bS0tOwo+PiArCWlmIChwcmV2X2l0ZW1f aWR4ICE9IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+ICsJCXRibC0+aXRlbXNbcHJldl9pdGVtX2lk eF0ubmV4dF9wa3RfaWR4ID0gbmV4dF9pZHg7Cj4+ICsKPj4gKwlyZXR1cm4gbmV4dF9pZHg7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKPj4gK2luc2VydF9uZXdfZmxvdyhz dHJ1Y3QgZ3JvX3VkcDRfdGJsICp0YmwsCj4+ICsJCXN0cnVjdCB1ZHA0X2Zsb3dfa2V5ICpzcmMs Cj4+ICsJCXVpbnQzMl90IGl0ZW1faWR4KQo+PiArewo+PiArCXN0cnVjdCB1ZHA0X2Zsb3dfa2V5 ICpkc3Q7Cj4+ICsJdWludDMyX3QgZmxvd19pZHg7Cj4+ICsKPj4gKwlmbG93X2lkeCA9IGZpbmRf YW5fZW1wdHlfZmxvdyh0YmwpOwo+PiArCWlmICh1bmxpa2VseShmbG93X2lkeCA9PSBJTlZBTElE X0FSUkFZX0lOREVYKSkKPj4gKwkJcmV0dXJuIElOVkFMSURfQVJSQVlfSU5ERVg7Cj4+ICsKPj4g Kwlkc3QgPSAmKHRibC0+Zmxvd3NbZmxvd19pZHhdLmtleSk7Cj4+ICsKPj4gKwlydGVfZXRoZXJf YWRkcl9jb3B5KCYoc3JjLT5ldGhfc2FkZHIpLCAmKGRzdC0+ZXRoX3NhZGRyKSk7Cj4+ICsJcnRl X2V0aGVyX2FkZHJfY29weSgmKHNyYy0+ZXRoX2RhZGRyKSwgJihkc3QtPmV0aF9kYWRkcikpOwo+ PiArCWRzdC0+aXBfc3JjX2FkZHIgPSBzcmMtPmlwX3NyY19hZGRyOwo+PiArCWRzdC0+aXBfZHN0 X2FkZHIgPSBzcmMtPmlwX2RzdF9hZGRyOwo+PiArCWRzdC0+aXBfaWQgPSBzcmMtPmlwX2lkOwo+ PiArCWRzdC0+aXBfaWQgPSBzcmMtPmlwX2lkOwo+Cj5EdXBsaWNhdGVkIGNvZGUuCgpUaGFua3Ms IGdvb2QgY2F0Y2gsIHdpbGwgcmVtb3ZlIGl0LgoKPgo+PiArCj4+ICsJdGJsLT5mbG93c1tmbG93 X2lkeF0uc3RhcnRfaW5kZXggPSBpdGVtX2lkeDsKPj4gKwl0YmwtPmZsb3dfbnVtKys7Cj4+ICsK Pj4gKwlyZXR1cm4gZmxvd19pZHg7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiB1cGRhdGUgdGhl IHBhY2tldCBsZW5ndGggZm9yIHRoZSBmbHVzaGVkIHBhY2tldC4KPj4gKyAqLwo+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 ICYgflJURV9JUFY0X0hEUl9NRl9GTEFHKTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK2ludDMyX3QK Pj4gK2dyb191ZHA0X3JlYXNzZW1ibGUoc3RydWN0IHJ0ZV9tYnVmICpwa3QsCj4+ICsJCXN0cnVj dCBncm9fdWRwNF90YmwgKnRibCwKPj4gKwkJdWludDY0X3Qgc3RhcnRfdGltZSkKPj4gK3sKPj4g KwlzdHJ1Y3QgcnRlX2V0aGVyX2hkciAqZXRoX2hkcjsKPj4gKwlzdHJ1Y3QgcnRlX2lwdjRfaGRy ICppcHY0X2hkcjsKPj4gKwl1aW50MTZfdCBpcF9kbDsKPj4gKwl1aW50MTZfdCBpcF9pZCwgaGRy X2xlbjsKPj4gKwl1aW50MTZfdCBmcmFnX29mZnNldCA9IDA7Cj4+ICsJdWludDhfdCBpc19sYXN0 X2ZyYWc7Cj4+ICsKPj4gKwlzdHJ1Y3QgdWRwNF9mbG93X2tleSBrZXk7Cj4+ICsJdWludDMyX3Qg Y3VyX2lkeCwgcHJldl9pZHgsIGl0ZW1faWR4Owo+PiArCXVpbnQzMl90IGksIG1heF9mbG93X251 bSwgcmVtYWluaW5nX2Zsb3dfbnVtOwo+PiArCWludCBjbXA7Cj4+ICsJdWludDhfdCBmaW5kOwo+ PiArCj4+ICsJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3QgcnRlX2V0aGVy X2hkciAqKTsKPj4gKwlpcHY0X2hkciA9IChzdHJ1Y3QgcnRlX2lwdjRfaGRyICopKChjaGFyICop ZXRoX2hkciArIHBrdC0+bDJfbGVuKTsKPj4gKwloZHJfbGVuID0gcGt0LT5sMl9sZW4gKyBwa3Qt PmwzX2xlbjsKPj4gKwo+PiArCS8qCj4+ICsJICogRG9uJ3QgcHJvY2VzcyBub24tZnJhZ21lbnQg cGFja2V0Lgo+PiArCSAqLwo+PiArCWlmICghaXNfaXB2NF9mcmFnbWVudChpcHY0X2hkcikpCj4+ ICsJCXJldHVybiAtMTsKPj4gKwo+PiArCS8qCj4+ICsJICogRG9uJ3QgcHJvY2VzcyB0aGUgcGFj a2V0IHdob3NlIHBheWxvYWQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvcgo+PiArCSAqIGVxdWFsIHRv IDAuCj4+ICsJICovCj4+ICsJaWYgKHBrdC0+cGt0X2xlbiAtIGhkcl9sZW4gPD0gMCkKPj4gKwkJ cmV0dXJuIC0xOwo+Cj5JZiBpbnB1dCBwYWNrZXRzIGFyZSBtYWxpY2lvdXMsIHdob3NlIG1idWYt PnBrdF9sZW4gaXMgc21hbGxlciB0aGFuCj4obWJ1Zi0+bDJfbGVuK21idWYtPmwzX2xlbiksIHRo ZSBhYm92ZSBjaGVjayB3b3RuJ3Qgd29yayBjb3JyZWN0bHksCj5hcyBpdHMgdmFsdWUgaXMgdWlu dDE2X3QsIHdoaWNoIGlzIGFsd2F5cyBwb3NpdGl2ZS4KCkkgdHJpZWQgdGhlIGJlbG93IGNvZGUu CgokIGNhdCBhLmMKI2luY2x1ZGUgCiNpbmNsdWRlIAoKaW50IG1haW4oKQp7CiAgICB1aW50MTZf dCBhID0gMTA7CiAgICB1aW50MTZfdCBiID0gODsKCiAgICBpZiAoKGIgLSBhKSA8IDApIHsKICAg ICAgICBwcmludGYoIiV1IDwgJXVcbiIsIGIgLCBhKTsKICAgIH0KfQokIGdjYyBhLmMKJCAuL2Eu b3V0CjggPCAxMAokCgpJdCB3b3Jrcywgc28gSSB0aGluayBpdCBpcyBvaywgbmVydmVydGhlbGVz cywgSSdsbCBjaGFuZ2UgaXQgdG8gdGhlIGJlbG93IHRvIGF2b2lkIHlvdXIgY29uY2Vybi4KCmlm IChwa3QtPnBrdF9sZW4gPD0gaGRyX2xlbikKCj4KPj4gKwo+PiArCWlwX2RsID0gcnRlX2JlX3Rv X2NwdV8xNihpcHY0X2hkci0+dG90YWxfbGVuZ3RoKSAtIHBrdC0+bDNfbGVuOwo+Cj5TYW1lIGFz IGFib3ZlLgoKSSB0aGluayAiaWYgKHBrdC0+cGt0X2xlbiA8PSBoZHJfbGVuKSIgY2FuIGVuc3Vy ZSBpcF9kbCB3aWxsIGJlIHBvc2l0aXZlLCBJIGNhbiBhZGQgb25lIG1vcmUKY29uZGl0aW9uIGNo ZWNrIGhlcmUgaWYgeW91IHdhbnQKCmlmIChydGVfYmVfdG9fY3B1XzE2KGlwdjRfaGRyLT50b3Rh bF9sZW5ndGgpIDw9IGwzX2xlbikKICAgICAgICByZXR1cm4gLTE7CgpCdXQgSSB0aGluayBpdCBp cyB1bm5lY2Vzc2FyeSBoZXJlIGZvciBhIGxpdHRsZSBiaXQgcGVyZm9ybWFuY2UgYXMgeW91J3Jl IGNhcmluZy4KCj4KPj4gKwlpcF9pZCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPnBhY2tl dF9pZCk7Cj4+ICsJZnJhZ19vZmZzZXQgPSBydGVfYmVfdG9fY3B1XzE2KGlwdjRfaGRyLT5mcmFn bWVudF9vZmZzZXQpOwo+PiArCWlzX2xhc3RfZnJhZyA9ICgoZnJhZ19vZmZzZXQgJiBSVEVfSVBW NF9IRFJfTUZfRkxBRykgPT0gMCkgPyAxIDogMDsKPj4gKwlmcmFnX29mZnNldCA9ICh1aW50MTZf dCkoZnJhZ19vZmZzZXQgJiBSVEVfSVBWNF9IRFJfT0ZGU0VUX01BU0spIDw8IDM7Cj4+ICsKPj4g KwlydGVfZXRoZXJfYWRkcl9jb3B5KCYoZXRoX2hkci0+c19hZGRyKSwgJihrZXkuZXRoX3NhZGRy KSk7Cj4+ICsJcnRlX2V0aGVyX2FkZHJfY29weSgmKGV0aF9oZHItPmRfYWRkciksICYoa2V5LmV0 aF9kYWRkcikpOwo+PiArCWtleS5pcF9zcmNfYWRkciA9IGlwdjRfaGRyLT5zcmNfYWRkcjsKPj4g KwlrZXkuaXBfZHN0X2FkZHIgPSBpcHY0X2hkci0+ZHN0X2FkZHI7Cj4+ICsJa2V5LmlwX2lkID0g aXBfaWQ7Cj4+ICsKPj4gKwkvKiBTZWFyY2ggZm9yIGEgbWF0Y2hlZCBmbG93LiAqLwo+PiArCW1h eF9mbG93X251bSA9IHRibC0+bWF4X2Zsb3dfbnVtOwo+PiArCXJlbWFpbmluZ19mbG93X251bSA9 IHRibC0+Zmxvd19udW07Cj4+ICsJZmluZCA9IDA7Cj4+ICsJZm9yIChpID0gMDsgaSA8IG1heF9m bG93X251bSAmJiByZW1haW5pbmdfZmxvd19udW07IGkrKykgewo+PiArCQlpZiAodGJsLT5mbG93 c1tpXS5zdGFydF9pbmRleCAhPSBJTlZBTElEX0FSUkFZX0lOREVYKSB7Cj4+ICsJCQlpZiAoaXNf c2FtZV91ZHA0X2Zsb3codGJsLT5mbG93c1tpXS5rZXksIGtleSkpIHsKPj4gKwkJCQlmaW5kID0g MTsKPj4gKwkJCQlicmVhazsKPj4gKwkJCX0KPj4gKwkJCXJlbWFpbmluZ19mbG93X251bS0tOwo+ PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJLyoKPj4gKwkgKiBGYWlsIHRvIGZpbmQgYSBtYXRjaGVk IGZsb3cuIEluc2VydCBhIG5ldyBmbG93IGFuZCBzdG9yZSB0aGUKPj4gKwkgKiBwYWNrZXQgaW50 byB0aGUgZmxvdy4KPj4gKwkgKi8KPj4gKwlpZiAoZmluZCA9PSAwKSB7Cj4+ICsJCWl0ZW1faWR4 ID0gaW5zZXJ0X25ld19pdGVtKHRibCwgcGt0LCBzdGFydF90aW1lLAo+PiArCQkJCUlOVkFMSURf QVJSQVlfSU5ERVgsIGZyYWdfb2Zmc2V0LAo+PiArCQkJCWlzX2xhc3RfZnJhZyk7Cj4+ICsJCWlm IChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQo+PiArCQkJcmV0dXJuIC0xOwo+Cj5B ZGRpbmcgdW5saWtlbHkgaGVyZSBjb3VsZCBnZXQgYmV0dGVyIHBlcmZvcm1hbmNlLCBJTU8uCgpO byBwcm9ibGVtLgoKPgo+PiArCQlpZiAoaW5zZXJ0X25ld19mbG93KHRibCwgJmtleSwgaXRlbV9p ZHgpID09Cj4+ICsJCQkJSU5WQUxJRF9BUlJBWV9JTkRFWCkgewo+PiArCQkJLyoKPj4gKwkJCSAq IEZhaWwgdG8gaW5zZXJ0IGEgbmV3IGZsb3csIHNvIGRlbGV0ZSB0aGUKPj4gKwkJCSAqIHN0b3Jl ZCBwYWNrZXQuCj4+ICsJCQkgKi8KPj4gKwkJCWRlbGV0ZV9pdGVtKHRibCwgaXRlbV9pZHgsIElO VkFMSURfQVJSQVlfSU5ERVgpOwo+PiArCQkJcmV0dXJuIC0xOwo+PiArCQl9Cj4+ICsJCXJldHVy biAwOwo+PiArCX0KPj4gKwo+PiArCS8qCj4+ICsJICogQ2hlY2sgYWxsIHBhY2tldHMgaW4gdGhl IGZsb3cgYW5kIHRyeSB0byBmaW5kIGEgbmVpZ2hib3IgZm9yCj4+ICsJICogdGhlIGlucHV0IHBh Y2tldC4KPj4gKwkgKi8KPj4gKwljdXJfaWR4ID0gdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleDsK Pj4gKwlwcmV2X2lkeCA9IGN1cl9pZHg7Cj4+ICsJZG8gewo+PiArCQljbXAgPSB1ZHBfY2hlY2tf bmVpZ2hib3IoJih0YmwtPml0ZW1zW2N1cl9pZHhdKSwKPj4gKwkJCQlmcmFnX29mZnNldCwgaXBf ZGwsIDApOwo+PiArCQlpZiAoY21wKSB7Cj4+ICsJCQlpZiAobWVyZ2VfdHdvX3VkcDRfcGFja2V0 cygmKHRibC0+aXRlbXNbY3VyX2lkeF0pLAo+PiArCQkJCQkJcGt0LCBjbXAsIGZyYWdfb2Zmc2V0 LAo+PiArCQkJCQkJaXNfbGFzdF9mcmFnLCAwKSkKPj4gKwkJCQlyZXR1cm4gMTsKPj4gKwkJCS8q Cj4+ICsJCQkgKiBGYWlsIHRvIG1lcmdlIHRoZSB0d28gcGFja2V0cywgYXMgdGhlIHBhY2tldAo+ PiArCQkJICogbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IHZhbHVlLiBTdG9yZQo+PiAr CQkJICogdGhlIHBhY2tldCBpbnRvIHRoZSBmbG93Lgo+PiArCQkJICovCj4+ICsJCQlpZiAoaW5z ZXJ0X25ld19pdGVtKHRibCwgcGt0LCBzdGFydF90aW1lLCBwcmV2X2lkeCwKPj4gKwkJCQkJCWZy YWdfb2Zmc2V0LCBpc19sYXN0X2ZyYWcpID09Cj4+ICsJCQkJCUlOVkFMSURfQVJSQVlfSU5ERVgp Cj4+ICsJCQkJcmV0dXJuIC0xOwo+PiArCQkJcmV0dXJuIDA7Cj4+ICsJCX0KPj4gKwo+PiArCQkv KiBFbnN1cmUgaW5zZXJ0ZWQgaXRlbXMgYXJlIG9yZGVyZWQgYnkgZnJhZ19vZmZzZXQgKi8KPj4g KwkJaWYgKGZyYWdfb2Zmc2V0Cj4+ICsJCQk8IHRibC0+aXRlbXNbY3VyX2lkeF0uZnJhZ19vZmZz ZXQpIHsKPj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ICsKPj4gKwkJcHJldl9pZHggPSBjdXJfaWR4 Owo+PiArCQljdXJfaWR4ID0gdGJsLT5pdGVtc1tjdXJfaWR4XS5uZXh0X3BrdF9pZHg7Cj4+ICsJ fSB3aGlsZSAoY3VyX2lkeCAhPSBJTlZBTElEX0FSUkFZX0lOREVYKTsKPj4gKwo+PiArCS8qIEZh aWwgdG8gZmluZCBhIG5laWdoYm9yLCBzbyBzdG9yZSB0aGUgcGFja2V0IGludG8gdGhlIGZsb3cu ICovCj4+ICsJaWYgKGN1cl9pZHggPT0gdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleCkgewo+PiAr CQkvKiBJbnNlcnQgaXQgYmVmb3JlIHRoZSBmaXJzdCBwYWNrZXQgb2YgdGhlIGZsb3cgKi8KPj4g KwkJaXRlbV9pZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJsLCBwa3QsIHN0YXJ0X3RpbWUsCj4+ICsJ CQkJSU5WQUxJRF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCj4+ICsJCQkJaXNfbGFzdF9mcmFn KTsKPj4gKwkJaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+ICsJCQlyZXR1 cm4gLTE7Cj4+ICsJCXRibC0+aXRlbXNbaXRlbV9pZHhdLm5leHRfcGt0X2lkeCA9IGN1cl9pZHg7 Cj4+ICsJCXRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBpdGVtX2lkeDsKPj4gKwl9IGVsc2Ug ewo+PiArCQlpZiAoaW5zZXJ0X25ld19pdGVtKHRibCwgcGt0LCBzdGFydF90aW1lLCBwcmV2X2lk eCwKPj4gKwkJCQlmcmFnX29mZnNldCwgaXNfbGFzdF9mcmFnKQo+PiArCQkJPT0gSU5WQUxJRF9B UlJBWV9JTkRFWCkKPj4gKwkJCXJldHVybiAtMTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludAo+PiArZ3JvX3VkcDRfbWVyZ2VfaXRlbXMoc3RydWN0 IGdyb191ZHA0X3RibCAqdGJsLAo+PiArCQkJICAgdWludDMyX3Qgc3RhcnRfaWR4KQo+PiArewo+ PiArCXVpbnQxNl90IGZyYWdfb2Zmc2V0Owo+PiArCXVpbnQ4X3QgaXNfbGFzdF9mcmFnOwo+PiAr CWludDE2X3QgaXBfZGw7Cj4+ICsJc3RydWN0IHJ0ZV9tYnVmICpwa3Q7Cj4+ICsJaW50IGNtcDsK Pj4gKwl1aW50MzJfdCBpdGVtX2lkeDsKPj4gKwl1aW50MTZfdCBoZHJfbGVuOwo+PiArCj4+ICsJ aXRlbV9pZHggPSB0YmwtPml0ZW1zW3N0YXJ0X2lkeF0ubmV4dF9wa3RfaWR4Owo+PiArCXdoaWxl IChpdGVtX2lkeCAhPSBJTlZBTElEX0FSUkFZX0lOREVYKSB7Cj4+ICsJCXBrdCA9IHRibC0+aXRl bXNbaXRlbV9pZHhdLmZpcnN0c2VnOwo+PiArCQloZHJfbGVuID0gcGt0LT5vdXRlcl9sMl9sZW4g KyBwa3QtPm91dGVyX2wzX2xlbiArIHBrdC0+bDJfbGVuICsKPj4gKwkJCXBrdC0+bDNfbGVuOwo+ Cj5Gb3Igbm9uLXR1bm5lbCBwYWNrZXRzLCBtYnVmLT5vdXRlcl9sMy9sMl9sZW4gYXJlIG5vdCBn dWFyYW50ZWVkIDAuCj5JIHRoaW5rIGl0J3MgYmV0dGVyIHRvIHBhc3Mgb3V0ZXIgaGVhZGVyIGxl bmd0aCBhcyBhIHBhcmFtZXRlciBvZgo+Z3JvX3VkcDRfbWVyZ2VfaXRlbSgpLCBsaWtlIHVkcF9j aGVja19uZWlnaGJvcigpLgoKRm9yIHVkcCBHUk8sIHdlIGNhbiByZW1vdmUgb3V0ZXJfbDMvbDJf bGVuLCB0aGV5IGFyZSBub25zZW5zZS4KCj4KPj4gKwkJaXBfZGwgPSBwa3QtPnBrdF9sZW4gLSBo ZHJfbGVuOwo+PiArCQlmcmFnX29mZnNldCA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLmZyYWdfb2Zm c2V0Owo+PiArCQlpc19sYXN0X2ZyYWcgPSB0YmwtPml0ZW1zW2l0ZW1faWR4XS5pc19sYXN0X2Zy YWc7Cj4+ICsJCWNtcCA9IHVkcF9jaGVja19uZWlnaGJvcigmKHRibC0+aXRlbXNbc3RhcnRfaWR4 XSksCj4+ICsJCQkJCWZyYWdfb2Zmc2V0LCBpcF9kbCwgMCk7Cj4+ICsJCWlmIChjbXApIHsKPj4g KwkJCWlmIChtZXJnZV90d29fdWRwNF9wYWNrZXRzKAo+PiArCQkJCQkmKHRibC0+aXRlbXNbc3Rh cnRfaWR4XSksCj4+ICsJCQkJCXBrdCwgY21wLCBmcmFnX29mZnNldCwKPj4gKwkJCQkJaXNfbGFz dF9mcmFnLCAwKSkgewo+PiArCQkJCWl0ZW1faWR4ID0gZGVsZXRlX2l0ZW0odGJsLCBpdGVtX2lk eCwKPj4gKwkJCQkJCQlJTlZBTElEX0FSUkFZX0lOREVYKTsKPj4gKwkJCQl0YmwtPml0ZW1zW3N0 YXJ0X2lkeF0ubmV4dF9wa3RfaWR4Cj4+ICsJCQkJCT0gaXRlbV9pZHg7Cj4+ICsJCQl9IGVsc2Ug ewo+PiArCQkJCXJldHVybiAwOwo+PiArCQkJfQo+PiArCQl9IGVsc2Ugewo+PiArCQkJcmV0dXJu IDA7Cj4+ICsJCX0KPgo+QSBzaW5nbGUgbGluZSBkb2Vzbid0IG5lZWQgYnJhY2VzLgoKR290IGl0 LCB3aWxsIHJlbW92ZSB7IH0KCj4KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4g Kwo+PiArdWludDE2X3QKPj4gK2dyb191ZHA0X3RibF90aW1lb3V0X2ZsdXNoKHN0cnVjdCBncm9f dWRwNF90YmwgKnRibCwKPj4gKwkJdWludDY0X3QgZmx1c2hfdGltZXN0YW1wLAo+PiArCQlzdHJ1 Y3QgcnRlX21idWYgKipvdXQsCj4+ICsJCXVpbnQxNl90IG5iX291dCkKPj4gK3sKPj4gKwl1aW50 MTZfdCBrID0gMDsKPj4gKwl1aW50MzJfdCBpLCBqOwo+PiArCXVpbnQzMl90IG1heF9mbG93X251 bSA9IHRibC0+bWF4X2Zsb3dfbnVtOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IG1heF9mbG93 X251bTsgaSsrKSB7Cj4+ICsJCWlmICh1bmxpa2VseSh0YmwtPmZsb3dfbnVtID09IDApKQo+PiAr CQkJcmV0dXJuIGs7Cj4+ICsKPj4gKwkJaiA9IHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXg7Cj4+ ICsJCXdoaWxlIChqICE9IElOVkFMSURfQVJSQVlfSU5ERVgpIHsKPj4gKwkJCWlmICh0YmwtPml0 ZW1zW2pdLnN0YXJ0X3RpbWUgPD0gZmx1c2hfdGltZXN0YW1wKSB7Cj4+ICsJCQkJZ3JvX3VkcDRf bWVyZ2VfaXRlbXModGJsLCBqKTsKPj4gKwkJCQlvdXRbaysrXSA9IHRibC0+aXRlbXNbal0uZmly c3RzZWc7Cj4+ICsJCQkJaWYgKHRibC0+aXRlbXNbal0ubmJfbWVyZ2VkID4gMSkKPj4gKwkJCQkJ dXBkYXRlX2hlYWRlcigmKHRibC0+aXRlbXNbal0pKTsKPj4gKwkJCQkvKgo+PiArCQkJCSAqIERl bGV0ZSB0aGUgcGFja2V0IGFuZCBnZXQgdGhlIG5leHQKPj4gKwkJCQkgKiBwYWNrZXQgaW4gdGhl IGZsb3cuCj4+ICsJCQkJICovCj4+ICsJCQkJaiA9IGRlbGV0ZV9pdGVtKHRibCwgaiwgSU5WQUxJ RF9BUlJBWV9JTkRFWCk7Cj4+ICsJCQkJdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleCA9IGo7Cj4+ ICsJCQkJaWYgKGogPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4gKwkJCQkJdGJsLT5mbG93X251 bS0tOwo+PiArCj4+ICsJCQkJaWYgKHVubGlrZWx5KGsgPT0gbmJfb3V0KSkKPj4gKwkJCQkJcmV0 dXJuIGs7Cj4+ICsJCQl9IGVsc2UKPj4gKwkJCQkvKgo+PiArCQkJCSAqIFRoZSBsZWZ0IHBhY2tl dHMgaW4gdGhpcyBmbG93IHdvbid0IGJlCj4+ICsJCQkJICogdGltZW91dC4gR28gdG8gY2hlY2sg b3RoZXIgZmxvd3MuCj4+ICsJCQkJICovCj4+ICsJCQkJYnJlYWs7Cj4+ICsJCX0KPj4gKwl9Cj4+ ICsJcmV0dXJuIGs7Cj4+ICt9Cj4+ICsKPj4gK3VpbnQzMl90Cj4+ICtncm9fdWRwNF90YmxfcGt0 X2NvdW50KHZvaWQgKnRibCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZ3JvX3VkcDRfdGJsICpncm9fdGJs ID0gdGJsOwo+PiArCj4+ICsJaWYgKGdyb190YmwpCj4+ICsJCXJldHVybiBncm9fdGJsLT5pdGVt X251bTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0 ZV9ncm8vZ3JvX3VkcDQuaCBiL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmgKPj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uYmM2N2ViMQo+PiAtLS0gL2Rldi9udWxsCj4+ ICsrKyBiL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmgKPj4gQEAgLTAsMCArMSwyODEgQEAKPj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKPj4gKyAqIENvcHlyaWdo dChjKSAyMDIwIEluc3B1ciBDb3Jwb3JhdGlvbgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX0dS T19VRFA0X0hfCj4+ICsjZGVmaW5lIF9HUk9fVURQNF9IXwo+PiArCj4+ICsjaW5jbHVkZSA8cnRl X2lwLmg+Cj4+ICsjaW5jbHVkZSA8cnRlX3VkcC5oPgo+PiArCj4+ICsjZGVmaW5lIElOVkFMSURf QVJSQVlfSU5ERVggMHhmZmZmZmZmZlVMCj4+ICsjZGVmaW5lIEdST19VRFA0X1RCTF9NQVhfSVRF TV9OVU0gKDEwMjRVTCAqIDEwMjRVTCkKPj4gKwo+PiArLyoKPj4gKyAqIFRoZSBtYXggbGVuZ3Ro IG9mIGEgSVB2NCBwYWNrZXQsIHdoaWNoIGluY2x1ZGVzIHRoZSBsZW5ndGggb2YgdGhlIEwzCj4+ ICsgKiBoZWFkZXIsIHRoZSBMNCBoZWFkZXIgYW5kIHRoZSBkYXRhIHBheWxvYWQuCj4+ICsgKi8K Pj4gKyNkZWZpbmUgTUFYX0lQVjRfUEtUX0xFTkdUSCBVSU5UMTZfTUFYCj4+ICsKPj4gKy8qIEhl YWRlciBmaWVsZHMgcmVwcmVzZW50aW5nIGEgVURQL0lQdjQgZmxvdyAqLwo+PiArc3RydWN0IHVk cDRfZmxvd19rZXkgewo+PiArCXN0cnVjdCBydGVfZXRoZXJfYWRkciBldGhfc2FkZHI7Cj4+ICsJ c3RydWN0IHJ0ZV9ldGhlcl9hZGRyIGV0aF9kYWRkcjsKPj4gKwl1aW50MzJfdCBpcF9zcmNfYWRk cjsKPj4gKwl1aW50MzJfdCBpcF9kc3RfYWRkcjsKPj4gKwo+PiArCS8qIElQIGZyYWdtZW50IGZv ciBVRFAgZG9lcyBub3QgY29udGFpbiBVRFAgaGVhZGVyCj4+ICsJICogZXhjZXB0IHRoZSBmaXJz dCBvbmUuIEJ1dCBJUCBJRCBtdXN0IGJlIHNhbWUuCj4+ICsJICovCj4+ICsJdWludDE2X3QgaXBf aWQ7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZ3JvX3VkcDRfZmxvdyB7Cj4+ICsJc3RydWN0IHVk cDRfZmxvd19rZXkga2V5Owo+PiArCS8qCj4+ICsJICogVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBw YWNrZXQgaW4gdGhlIGZsb3cuCj4+ICsJICogSU5WQUxJRF9BUlJBWV9JTkRFWCBpbmRpY2F0ZXMg YW4gZW1wdHkgZmxvdy4KPj4gKwkgKi8KPj4gKwl1aW50MzJfdCBzdGFydF9pbmRleDsKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBncm9fdWRwNF9pdGVtIHsKPj4gKwkvKgo+PiArCSAqIFRoZSBmaXJz dCBNQlVGIHNlZ21lbnQgb2YgdGhlIHBhY2tldC4gSWYgdGhlIHZhbHVlCj4+ICsJICogaXMgTlVM TCwgaXQgbWVhbnMgdGhlIGl0ZW0gaXMgZW1wdHkuCj4+ICsJICovCj4+ICsJc3RydWN0IHJ0ZV9t YnVmICpmaXJzdHNlZzsKPj4gKwkvKiBUaGUgbGFzdCBNQlVGIHNlZ21lbnQgb2YgdGhlIHBhY2tl dCAqLwo+PiArCXN0cnVjdCBydGVfbWJ1ZiAqbGFzdHNlZzsKPj4gKwkvKgo+PiArCSAqIFRoZSB0 aW1lIHdoZW4gdGhlIGZpcnN0IHBhY2tldCBpcyBpbnNlcnRlZCBpbnRvIHRoZSB0YWJsZS4KPj4g KwkgKiBUaGlzIHZhbHVlIHdvbid0IGJlIHVwZGF0ZWQsIGV2ZW4gaWYgdGhlIHBhY2tldCBpcyBt ZXJnZWQKPj4gKwkgKiB3aXRoIG90aGVyIHBhY2tldHMuCj4+ICsJICovCj4+ICsJdWludDY0X3Qg c3RhcnRfdGltZTsKPj4gKwkvKgo+PiArCSAqIG5leHRfcGt0X2lkeCBpcyB1c2VkIHRvIGNoYWlu IHRoZSBwYWNrZXRzIHRoYXQKPj4gKwkgKiBhcmUgaW4gdGhlIHNhbWUgZmxvdyBidXQgY2FuJ3Qg YmUgbWVyZ2VkIHRvZ2V0aGVyCj4+ICsJICogKGUuZy4gY2F1c2VkIGJ5IHBhY2tldCByZW9yZGVy aW5nKS4KPj4gKwkgKi8KPj4gKwl1aW50MzJfdCBuZXh0X3BrdF9pZHg7Cj4+ICsJLyogb2Zmc2V0 IG9mIElQIGZyYWdtZW50IHBhY2tldCAqLwo+PiArCXVpbnQxNl90IGZyYWdfb2Zmc2V0Owo+PiAr CS8qIGlzIGxhc3QgSVAgZnJhZ21lbnQ/ICovCj4+ICsJdWludDhfdCBpc19sYXN0X2ZyYWc7Cj4+ ICsJLyogdGhlIG51bWJlciBvZiBtZXJnZWQgcGFja2V0cyAqLwo+PiArCXVpbnQxNl90IG5iX21l cmdlZDsKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBVRFAvSVB2NCByZWFzc2VtYmx5IHRhYmxl IHN0cnVjdHVyZS4KPj4gKyAqLwo+PiArc3RydWN0IGdyb191ZHA0X3RibCB7Cj4+ICsJLyogaXRl bSBhcnJheSAqLwo+PiArCXN0cnVjdCBncm9fdWRwNF9pdGVtICppdGVtczsKPj4gKwkvKiBmbG93 IGFycmF5ICovCj4+ICsJc3RydWN0IGdyb191ZHA0X2Zsb3cgKmZsb3dzOwo+PiArCS8qIGN1cnJl bnQgaXRlbSBudW1iZXIgKi8KPj4gKwl1aW50MzJfdCBpdGVtX251bTsKPj4gKwkvKiBjdXJyZW50 IGZsb3cgbnVtICovCj4+ICsJdWludDMyX3QgZmxvd19udW07Cj4+ICsJLyogaXRlbSBhcnJheSBz aXplICovCj4+ICsJdWludDMyX3QgbWF4X2l0ZW1fbnVtOwo+PiArCS8qIGZsb3cgYXJyYXkgc2l6 ZSAqLwo+PiArCXVpbnQzMl90IG1heF9mbG93X251bTsKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiAr ICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgVURQL0lQdjQgcmVhc3NlbWJseSB0YWJsZS4KPj4g KyAqCj4+ICsgKiBAcGFyYW0gc29ja2V0X2lkCj4+ICsgKiAgU29ja2V0IGluZGV4IGZvciBhbGxv Y2F0aW5nIHRoZSBVRFAvSVB2NCByZWFzc2VtYmxlIHRhYmxlCj4+ICsgKiBAcGFyYW0gbWF4X2Zs b3dfbnVtCj4+ICsgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZsb3dzIGluIHRoZSBVRFAvSVB2 NCBHUk8gdGFibGUKPj4gKyAqIEBwYXJhbSBtYXhfaXRlbV9wZXJfZmxvdwo+PiArICogIFRoZSBt YXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHBlciBmbG93Cj4+ICsgKgo+PiArICogQHJldHVybgo+ PiArICogIC0gUmV0dXJuIHRoZSB0YWJsZSBwb2ludGVyIG9uIHN1Y2Nlc3MuCj4+ICsgKiAgLSBS ZXR1cm4gTlVMTCBvbiBmYWlsdXJlLgo+PiArICovCj4+ICt2b2lkICpncm9fdWRwNF90YmxfY3Jl YXRlKHVpbnQxNl90IHNvY2tldF9pZCwKPj4gKwkJdWludDE2X3QgbWF4X2Zsb3dfbnVtLAo+PiAr CQl1aW50MTZfdCBtYXhfaXRlbV9wZXJfZmxvdyk7Cj4+ICsKPj4gKy8qKgo+PiArICogVGhpcyBm dW5jdGlvbiBkZXN0cm95cyBhIFVEUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUuCj4+ICsgKgo+PiAr ICogQHBhcmFtIHRibAo+PiArICogIFBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlIFVEUC9JUHY0IHJl YXNzZW1ibHkgdGFibGUuCj4+ICsgKi8KPj4gK3ZvaWQgZ3JvX3VkcDRfdGJsX2Rlc3Ryb3kodm9p ZCAqdGJsKTsKPj4gKwo+PiArLyoqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIG1lcmdlcyBhIFVEUC9J UHY0IHBhY2tldC4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGlm IHRoZSBwYWNrZXQgaGFzIGNvcnJlY3QgY2hlY2tzdW1zIGFuZAo+PiArICogZG9lcyBub3QgcmUt Y2FsY3VsYXRlIGNoZWNrc3VtcyBmb3IgdGhlIG1lcmdlZCBwYWNrZXQuIEl0IHJldHVybnMgdGhl Cj4+ICsgKiBwYWNrZXQgaWYgaXQgaXNuJ3QgVURQIGZyYWdtZW50IG9yIHRoZXJlIGlzIG5vIGF2 YWlsYWJsZSBzcGFjZSBpbgo+PiArICogdGhlIHRhYmxlLgo+PiArICoKPj4gKyAqIEBwYXJhbSBw a3QKPj4gKyAqICBQYWNrZXQgdG8gcmVhc3NlbWJsZQo+PiArICogQHBhcmFtIHRibAo+PiArICog IFBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlIFVEUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUKPj4gKyAq IEBzdGFydF90aW1lCj4+ICsgKiAgVGhlIHRpbWUgd2hlbiB0aGUgcGFja2V0IGlzIGluc2VydGVk IGludG8gdGhlIHRhYmxlCj4+ICsgKgo+PiArICogQHJldHVybgo+PiArICogIC0gUmV0dXJuIGEg cG9zaXRpdmUgdmFsdWUgaWYgdGhlIHBhY2tldCBpcyBtZXJnZWQuCj4+ICsgKiAgLSBSZXR1cm4g emVybyBpZiB0aGUgcGFja2V0IGlzbid0IG1lcmdlZCBidXQgc3RvcmVkIGluIHRoZSB0YWJsZS4K Pj4gKyAqICAtIFJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMg b3Igbm8gYXZhaWxhYmxlCj4+ICsgKiAgICBzcGFjZSBpbiB0aGUgdGFibGUuCj4+ICsgKi8KPj4g K2ludDMyX3QgZ3JvX3VkcDRfcmVhc3NlbWJsZShzdHJ1Y3QgcnRlX21idWYgKnBrdCwKPj4gKwkJ c3RydWN0IGdyb191ZHA0X3RibCAqdGJsLAo+PiArCQl1aW50NjRfdCBzdGFydF90aW1lKTsKPj4g Kwo+PiArLyoqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGZsdXNoZXMgdGltZW91dCBwYWNrZXRzIGlu IGEgVURQL0lQdjQgcmVhc3NlbWJseSB0YWJsZSwKPj4gKyAqIGFuZCB3aXRob3V0IHVwZGF0aW5n IGNoZWNrc3Vtcy4KPj4gKyAqCj4+ICsgKiBAcGFyYW0gdGJsCj4+ICsgKiAgVURQL0lQdjQgcmVh c3NlbWJseSB0YWJsZSBwb2ludGVyCj4+ICsgKiBAcGFyYW0gZmx1c2hfdGltZXN0YW1wCj4+ICsg KiAgRmx1c2ggcGFja2V0cyB3aGljaCBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgdGFibGUgYmVmb3Jl IG9yIGF0IHRoZQo+PiArICogIGZsdXNoX3RpbWVzdGFtcC4KPj4gKyAqIEBwYXJhbSBvdXQKPj4g KyAqICBQb2ludGVyIGFycmF5IHVzZWQgdG8ga2VlcCBmbHVzaGVkIHBhY2tldHMKPj4gKyAqIEBw YXJhbSBuYl9vdXQKPj4gKyAqICBUaGUgZWxlbWVudCBudW1iZXIgaW4gJ291dCcuIEl0IGFsc28g ZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKPj4gKyAqICBwYWNrZXRzIHRoYXQgY2Fu IGJlIGZsdXNoZWQgZmluYWxseS4KPj4gKyAqCj4+ICsgKiBAcmV0dXJuCj4+ICsgKiAgVGhlIG51 bWJlciBvZiBmbHVzaGVkIHBhY2tldHMKPj4gKyAqLwo+PiArdWludDE2X3QgZ3JvX3VkcDRfdGJs X3RpbWVvdXRfZmx1c2goc3RydWN0IGdyb191ZHA0X3RibCAqdGJsLAo+PiArCQl1aW50NjRfdCBm bHVzaF90aW1lc3RhbXAsCj4+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKm91dCwKPj4gKwkJdWludDE2 X3QgbmJfb3V0KTsKPj4gKwo+PiArLyoqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhl IG51bWJlciBvZiB0aGUgcGFja2V0cyBpbiBhIFVEUC9JUHY0Cj4+ICsgKiByZWFzc2VtYmx5IHRh YmxlLgo+PiArICoKPj4gKyAqIEBwYXJhbSB0YmwKPj4gKyAqICBVRFAvSVB2NCByZWFzc2VtYmx5 IHRhYmxlIHBvaW50ZXIKPj4gKyAqCj4+ICsgKiBAcmV0dXJuCj4+ICsgKiAgVGhlIG51bWJlciBv ZiBwYWNrZXRzIGluIHRoZSB0YWJsZQo+PiArICovCj4+ICt1aW50MzJfdCBncm9fdWRwNF90Ymxf cGt0X2NvdW50KHZvaWQgKnRibCk7Cj4+ICsKPj4gKy8qCj4+ICsgKiBDaGVjayBpZiB0d28gVURQ L0lQdjQgcGFja2V0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZmxvdy4KPj4gKyAqLwo+PiArc3RhdGlj IGlubGluZSBpbnQKPj4gK2lzX3NhbWVfdWRwNF9mbG93KHN0cnVjdCB1ZHA0X2Zsb3dfa2V5IGsx LCBzdHJ1Y3QgdWRwNF9mbG93X2tleSBrMikKPj4gK3sKPj4gKwlyZXR1cm4gKHJ0ZV9pc19zYW1l X2V0aGVyX2FkZHIoJmsxLmV0aF9zYWRkciwgJmsyLmV0aF9zYWRkcikgJiYKPj4gKwkJCXJ0ZV9p c19zYW1lX2V0aGVyX2FkZHIoJmsxLmV0aF9kYWRkciwgJmsyLmV0aF9kYWRkcikgJiYKPj4gKwkJ CShrMS5pcF9zcmNfYWRkciA9PSBrMi5pcF9zcmNfYWRkcikgJiYKPj4gKwkJCShrMS5pcF9kc3Rf YWRkciA9PSBrMi5pcF9kc3RfYWRkcikgJiYKPj4gKwkJCShrMS5pcF9pZCA9PSBrMi5pcF9pZCkp Owo+PiArfQo+PiArCj4+ICsvKgo+PiArICogTWVyZ2UgdHdvIFVEUC9JUHY0IHBhY2tldHMgd2l0 aG91dCB1cGRhdGluZyBjaGVja3N1bXMuCj4+ICsgKiBJZiBjbXAgaXMgbGFyZ2VyIHRoYW4gMCwg YXBwZW5kIHRoZSBuZXcgcGFja2V0IHRvIHRoZQo+PiArICogb3JpZ2luYWwgcGFja2V0LiBPdGhl cndpc2UsIHByZS1wZW5kIHRoZSBuZXcgcGFja2V0IHRvCj4+ICsgKiB0aGUgb3JpZ2luYWwgcGFj a2V0Lgo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIGludAo+PiArbWVyZ2VfdHdvX3VkcDRfcGFj a2V0cyhzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSAqaXRlbSwKPj4gKwkJc3RydWN0IHJ0ZV9tYnVmICpw a3QsCj4+ICsJCWludCBjbXAsCj4+ICsJCXVpbnQxNl90IGZyYWdfb2Zmc2V0LAo+PiArCQl1aW50 OF90IGlzX2xhc3RfZnJhZywKPj4gKwkJdWludDE2X3QgbDJfb2Zmc2V0KQo+PiArewo+PiArCXN0 cnVjdCBydGVfbWJ1ZiAqcGt0X2hlYWQsICpwa3RfdGFpbCwgKmxhc3RzZWc7Cj4+ICsJdWludDE2 X3QgaGRyX2xlbiwgbDJfbGVuOwo+PiArCXVpbnQzMl90IGlwX2xlbjsKPj4gKwo+PiArCWlmIChj bXAgPiAwKSB7Cj4+ICsJCXBrdF9oZWFkID0gaXRlbS0+Zmlyc3RzZWc7Cj4+ICsJCXBrdF90YWls ID0gcGt0Owo+PiArCX0gZWxzZSB7Cj4+ICsJCXBrdF9oZWFkID0gcGt0Owo+PiArCQlwa3RfdGFp bCA9IGl0ZW0tPmZpcnN0c2VnOwo+PiArCX0KPj4gKwo+PiArCS8qIGNoZWNrIGlmIHRoZSBJUHY0 IHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXggdmFsdWUgKi8KPj4gKwloZHJf bGVuID0gbDJfb2Zmc2V0ICsgcGt0X2hlYWQtPmwyX2xlbiArIHBrdF9oZWFkLT5sM19sZW47Cj4+ ICsJbDJfbGVuID0gbDJfb2Zmc2V0ID4gMCA/IHBrdF9oZWFkLT5vdXRlcl9sMl9sZW4gOiBwa3Rf aGVhZC0+bDJfbGVuOwo+PiArCWlwX2xlbiA9IHBrdF9oZWFkLT5wa3RfbGVuIC0gbDJfbGVuCj4+ ICsJCSArIHBrdF90YWlsLT5wa3RfbGVuIC0gaGRyX2xlbjsKPj4gKwlpZiAodW5saWtlbHkoaXBf bGVuID4gTUFYX0lQVjRfUEtUX0xFTkdUSCkpCj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJLyog cmVtb3ZlIHRoZSBwYWNrZXQgaGVhZGVyIGZvciB0aGUgdGFpbCBwYWNrZXQgKi8KPj4gKwlydGVf cGt0bWJ1Zl9hZGoocGt0X3RhaWwsIGhkcl9sZW4pOwo+PiArCj4+ICsJLyogY2hhaW4gdHdvIHBh Y2tldHMgdG9nZXRoZXIgKi8KPj4gKwlpZiAoY21wID4gMCkgewo+PiArCQlpdGVtLT5sYXN0c2Vn LT5uZXh0ID0gcGt0Owo+PiArCQlpdGVtLT5sYXN0c2VnID0gcnRlX3BrdG1idWZfbGFzdHNlZyhw a3QpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCWxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2VnKHBr dCk7Cj4+ICsJCWxhc3RzZWctPm5leHQgPSBpdGVtLT5maXJzdHNlZzsKPj4gKwkJaXRlbS0+Zmly c3RzZWcgPSBwa3Q7Cj4+ICsJCWl0ZW0tPmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7Cj4+ICsJ fQo+PiArCWl0ZW0tPm5iX21lcmdlZCsrOwo+PiArCWlmIChpc19sYXN0X2ZyYWcpCj4+ICsJCWl0 ZW0tPmlzX2xhc3RfZnJhZyA9IGlzX2xhc3RfZnJhZzsKPj4gKwo+PiArCS8qIHVwZGF0ZSBNQlVG IG1ldGFkYXRhIGZvciB0aGUgbWVyZ2VkIHBhY2tldCAqLwo+PiArCXBrdF9oZWFkLT5uYl9zZWdz ICs9IHBrdF90YWlsLT5uYl9zZWdzOwo+PiArCXBrdF9oZWFkLT5wa3RfbGVuICs9IHBrdF90YWls LT5wa3RfbGVuOwo+PiArCj4+ICsJcmV0dXJuIDE7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBD aGVjayBpZiB0d28gVURQL0lQdjQgcGFja2V0cyBhcmUgbmVpZ2hib3JzLgo+PiArICovCj4+ICtz dGF0aWMgaW5saW5lIGludAo+PiArdWRwX2NoZWNrX25laWdoYm9yKHN0cnVjdCBncm9fdWRwNF9p dGVtICppdGVtLAo+PiArCQl1aW50MTZfdCBmcmFnX29mZnNldCwKPj4gKwkJdWludDE2X3QgaXBf ZGwsCj4+ICsJCXVpbnQxNl90IGwyX29mZnNldCkKPgo+SXQncyBiZXR0ZXIgdG8gcmVuYW1lIHRo ZSBmdW5jdGlvbiBhcyB1ZHA0X2NoZWNrX25laWdoYm9yKCksIElNTy4KCk5vIHByb2JsZW0KCj4K Pj4gK3sKPj4gKwlzdHJ1Y3QgcnRlX21idWYgKnBrdF9vcmlnID0gaXRlbS0+Zmlyc3RzZWc7Cj4+ ICsJdWludDE2X3QgbGVuOwo+PiArCj4+ICsJLyogY2hlY2sgaWYgdGhlIHR3byBwYWNrZXRzIGFy ZSBuZWlnaGJvcnMgKi8KPj4gKwlsZW4gPSBwa3Rfb3JpZy0+cGt0X2xlbiAtIGwyX29mZnNldCAt IHBrdF9vcmlnLT5sMl9sZW4gLQo+PiArCQlwa3Rfb3JpZy0+bDNfbGVuOwo+PiArCWlmIChmcmFn X29mZnNldCA9PSBpdGVtLT5mcmFnX29mZnNldCArIGxlbikKPj4gKwkJLyogYXBwZW5kIHRoZSBu ZXcgcGFja2V0ICovCj4+ICsJCXJldHVybiAxOwo+PiArCWVsc2UgaWYgKGZyYWdfb2Zmc2V0ICsg aXBfZGwgPT0gaXRlbS0+ZnJhZ19vZmZzZXQpCj4+ICsJCS8qIHByZS1wZW5kIHRoZSBuZXcgcGFj a2V0ICovCj4+ICsJCXJldHVybiAtMTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW5saW5lIGludAo+PiAraXNfaXB2NF9mcmFnbWVudChjb25zdCBzdHJ1Y3QgcnRl X2lwdjRfaGRyICpoZHIpCj4+ICt7Cj4+ICsJdWludDE2X3QgZmxhZ19vZmZzZXQsIGlwX2ZsYWcs IGlwX29mczsKPj4gKwo+PiArCWZsYWdfb2Zmc2V0ID0gcnRlX2JlX3RvX2NwdV8xNihoZHItPmZy YWdtZW50X29mZnNldCk7Cj4+ICsJaXBfb2ZzID0gKHVpbnQxNl90KShmbGFnX29mZnNldCAmIFJU RV9JUFY0X0hEUl9PRkZTRVRfTUFTSyk7Cj4+ICsJaXBfZmxhZyA9ICh1aW50MTZfdCkoZmxhZ19v ZmZzZXQgJiBSVEVfSVBWNF9IRFJfTUZfRkxBRyk7Cj4+ICsKPj4gKwlyZXR1cm4gaXBfZmxhZyAh PSAwIHx8IGlwX29mcyAgIT0gMDsKPj4gK30KPj4gKyNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEvbGli L2xpYnJ0ZV9ncm8vbWVzb24uYnVpbGQgYi9saWIvbGlicnRlX2dyby9tZXNvbi5idWlsZAo+PiBp bmRleCA1MDE2NjhjLi4wZDE4ZGMyIDEwMDY0NAo+PiAtLS0gYS9saWIvbGlicnRlX2dyby9tZXNv bi5idWlsZAo+PiArKysgYi9saWIvbGlicnRlX2dyby9tZXNvbi5idWlsZAo+PiBAQCAtMSw2ICsx LDYgQEAKPj4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQo+PiAgIyBD b3B5cmlnaHQoYykgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+PiAgCj4+IC1zb3VyY2VzID0gZmls ZXMoJ3J0ZV9ncm8uYycsICdncm9fdGNwNC5jJywgJ2dyb192eGxhbl90Y3A0LmMnKQo+PiArc291 cmNlcyA9IGZpbGVzKCdydGVfZ3JvLmMnLCAnZ3JvX3RjcDQuYycsICdncm9fdWRwNC5jJywgJ2dy b192eGxhbl90Y3A0LmMnKQo+PiAgaGVhZGVycyA9IGZpbGVzKCdydGVfZ3JvLmgnKQo+PiAgZGVw cyArPSBbJ2V0aGRldiddCj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2dyby9ydGVfZ3JvLmMg Yi9saWIvbGlicnRlX2dyby9ydGVfZ3JvLmMKPj4gaW5kZXggNjYxOGY0ZC4uZDA5NDEyOSAxMDA2 NDQKPj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vcnRlX2dyby5jCj4+ICsrKyBiL2xpYi9saWJydGVf Z3JvL3J0ZV9ncm8uYwo+PiBAQCAtOSw2ICs5LDcgQEAKPj4gIAo+PiAgI2luY2x1ZGUgInJ0ZV9n cm8uaCIKPj4gICNpbmNsdWRlICJncm9fdGNwNC5oIgo+PiArI2luY2x1ZGUgImdyb191ZHA0Lmgi Cj4+ICAjaW5jbHVkZSAiZ3JvX3Z4bGFuX3RjcDQuaCIKPj4gIAo+PiAgdHlwZWRlZiB2b2lkICoo Kmdyb190YmxfY3JlYXRlX2ZuKSh1aW50MTZfdCBzb2NrZXRfaWQsCj4+IEBAIC0xOCwxNyArMTks MjMgQEAKPj4gIHR5cGVkZWYgdWludDMyX3QgKCpncm9fdGJsX3BrdF9jb3VudF9mbikodm9pZCAq dGJsKTsKPj4gIAo+PiAgc3RhdGljIGdyb190YmxfY3JlYXRlX2ZuIHRibF9jcmVhdGVfZm5bUlRF X0dST19UWVBFX01BWF9OVU1dID0gewo+PiAtCQlncm9fdGNwNF90YmxfY3JlYXRlLCBncm9fdnhs YW5fdGNwNF90YmxfY3JlYXRlLCBOVUxMfTsKPj4gKwkJZ3JvX3RjcDRfdGJsX2NyZWF0ZSwgZ3Jv X3Z4bGFuX3RjcDRfdGJsX2NyZWF0ZSwKPj4gKwkJZ3JvX3VkcDRfdGJsX2NyZWF0ZSwgTlVMTH07 Cj4+ICBzdGF0aWMgZ3JvX3RibF9kZXN0cm95X2ZuIHRibF9kZXN0cm95X2ZuW1JURV9HUk9fVFlQ RV9NQVhfTlVNXSA9IHsKPj4gIAkJCWdyb190Y3A0X3RibF9kZXN0cm95LCBncm9fdnhsYW5fdGNw NF90YmxfZGVzdHJveSwKPj4gKwkJCWdyb191ZHA0X3RibF9kZXN0cm95LAo+PiAgCQkJTlVMTH07 Cj4+ICBzdGF0aWMgZ3JvX3RibF9wa3RfY291bnRfZm4gdGJsX3BrdF9jb3VudF9mbltSVEVfR1JP X1RZUEVfTUFYX05VTV0gPSB7Cj4+ICAJCQlncm9fdGNwNF90YmxfcGt0X2NvdW50LCBncm9fdnhs YW5fdGNwNF90YmxfcGt0X2NvdW50LAo+PiArCQkJZ3JvX3VkcDRfdGJsX3BrdF9jb3VudCwKPj4g IAkJCU5VTEx9Owo+PiAgCj4+ICAjZGVmaW5lIElTX0lQVjRfVENQX1BLVChwdHlwZSkgKFJURV9F VEhfSVNfSVBWNF9IRFIocHR5cGUpICYmIFwKPj4gIAkJKChwdHlwZSAmIFJURV9QVFlQRV9MNF9U Q1ApID09IFJURV9QVFlQRV9MNF9UQ1ApKQo+PiAgCj4+ICsjZGVmaW5lIElTX0lQVjRfVURQX1BL VChwdHlwZSkgKFJURV9FVEhfSVNfSVBWNF9IRFIocHR5cGUpICYmIFwKPj4gKwkJKChwdHlwZSAm IFJURV9QVFlQRV9MNF9VRFApID09IFJURV9QVFlQRV9MNF9VRFApKQo+PiArCj4+ICAjZGVmaW5l IElTX0lQVjRfVlhMQU5fVENQNF9QS1QocHR5cGUpIChSVEVfRVRIX0lTX0lQVjRfSERSKHB0eXBl KSAmJiBcCj4+ICAJCSgocHR5cGUgJiBSVEVfUFRZUEVfTDRfVURQKSA9PSBSVEVfUFRZUEVfTDRf VURQKSAmJiBcCj4+ICAJCSgocHR5cGUgJiBSVEVfUFRZUEVfVFVOTkVMX1ZYTEFOKSA9PSBcCj4+ IEBAIC00MCw2ICs0Nyw3IEBACj4+ICAJCSAgICAgUlRFX1BUWVBFX0lOTkVSX0wzX0lQVjRfRVhU IHwgXAo+PiAgCQkgICAgIFJURV9QVFlQRV9JTk5FUl9MM19JUFY0X0VYVF9VTktOT1dOKSkgIT0g MCkpCj4+ICAKPj4gKwo+PiAgLyoKPj4gICAqIEdSTyBjb250ZXh0IHN0cnVjdHVyZS4gSXQga2Vl cHMgdGhlIHRhYmxlIHN0cnVjdHVyZXMsIHdoaWNoIGFyZQo+PiAgICogdXNlZCB0byBtZXJnZSBw YWNrZXRzLCBmb3IgZGlmZmVyZW50IEdSTyB0eXBlcy4gQmVmb3JlIHVzaW5nCj4+IEBAIC0xMjMs MjAgKzEzMSwyNiBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+ICAJc3RydWN0IGdyb190Y3A0X2Zsb3cg dGNwX2Zsb3dzW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXTsKPj4gIAlzdHJ1Y3QgZ3JvX3Rj cDRfaXRlbSB0Y3BfaXRlbXNbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1dID0ge3swfSB9Owo+ PiAgCj4+IC0JLyogQWxsb2NhdGUgYSByZWFzc2VtYmx5IHRhYmxlIGZvciBWWExBTiBHUk8gKi8K Pj4gKwkvKiBhbGxvY2F0ZSBhIHJlYXNzZW1ibHkgdGFibGUgZm9yIFVEUC9JUHY0IEdSTyAqLwo+ PiArCXN0cnVjdCBncm9fdWRwNF90YmwgdWRwX3RibDsKPj4gKwlzdHJ1Y3QgZ3JvX3VkcDRfZmxv dyB1ZHBfZmxvd3NbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1dOwo+PiArCXN0cnVjdCBncm9f dWRwNF9pdGVtIHVkcF9pdGVtc1tSVEVfR1JPX01BWF9CVVJTVF9JVEVNX05VTV0gPSB7ezB9IH07 Cj4+ICsKPj4gKwkvKiBBbGxvY2F0ZSBhIHJlYXNzZW1ibHkgdGFibGUgZm9yIFZYTEFOIFRDUCBH Uk8gKi8KPj4gIAlzdHJ1Y3QgZ3JvX3Z4bGFuX3RjcDRfdGJsIHZ4bGFuX3RibDsKPj4gIAlzdHJ1 Y3QgZ3JvX3Z4bGFuX3RjcDRfZmxvdyB2eGxhbl9mbG93c1tSVEVfR1JPX01BWF9CVVJTVF9JVEVN X05VTV07Cj4+IC0Jc3RydWN0IGdyb192eGxhbl90Y3A0X2l0ZW0gdnhsYW5faXRlbXNbUlRFX0dS T19NQVhfQlVSU1RfSVRFTV9OVU1dID0gewo+PiAtCQl7ezB9LCAwLCAwfSB9Owo+PiArCXN0cnVj dCBncm9fdnhsYW5fdGNwNF9pdGVtIHZ4bGFuX2l0ZW1zW1JURV9HUk9fTUFYX0JVUlNUX0lURU1f TlVNXQo+PiArCQkJPSB7e3swfSwgMCwgMH0gfTsKPj4gIAo+PiAgCXN0cnVjdCBydGVfbWJ1ZiAq dW5wcm9jZXNzX3BrdHNbbmJfcGt0c107Cj4+ICAJdWludDMyX3QgaXRlbV9udW07Cj4+ICAJaW50 MzJfdCByZXQ7Cj4+ICAJdWludDE2X3QgaSwgdW5wcm9jZXNzX251bSA9IDAsIG5iX2FmdGVyX2dy byA9IG5iX3BrdHM7Cj4+IC0JdWludDhfdCBkb190Y3A0X2dybyA9IDAsIGRvX3Z4bGFuX2dybyA9 IDA7Cj4+ICsJdWludDhfdCBkb190Y3A0X2dybyA9IDAsIGRvX3Z4bGFuX2dybyA9IDAsIGRvX3Vk cDRfZ3JvID0gMDsKPj4gIAo+PiAgCWlmICh1bmxpa2VseSgocGFyYW0tPmdyb190eXBlcyAmIChS VEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQgfAo+PiAtCQkJCQlSVEVfR1JPX1RDUF9JUFY0KSkg PT0gMCkpCj4+ICsJCQkJCVJURV9HUk9fVENQX0lQVjQgfAo+PiArCQkJCQlSVEVfR1JPX1VEUF9J UFY0KSkgPT0gMCkpCj4+ICAJCXJldHVybiBuYl9wa3RzOwo+PiAgCj4+ICAJLyogR2V0IHRoZSBt YXhpbXVtIG51bWJlciBvZiBwYWNrZXRzICovCj4+IEBAIC0xNzAsNiArMTg0LDIwIEBAIHN0cnVj dCBncm9fY3R4IHsKPj4gIAkJZG9fdGNwNF9ncm8gPSAxOwo+PiAgCX0KPj4gIAo+PiArCWlmIChw YXJhbS0+Z3JvX3R5cGVzICYgUlRFX0dST19VRFBfSVBWNCkgewo+PiArCQlmb3IgKGkgPSAwOyBp IDwgaXRlbV9udW07IGkrKykKPj4gKwkJCXVkcF9mbG93c1tpXS5zdGFydF9pbmRleCA9IElOVkFM SURfQVJSQVlfSU5ERVg7Cj4+ICsKPj4gKwkJdWRwX3RibC5mbG93cyA9IHVkcF9mbG93czsKPj4g KwkJdWRwX3RibC5pdGVtcyA9IHVkcF9pdGVtczsKPj4gKwkJdWRwX3RibC5mbG93X251bSA9IDA7 Cj4+ICsJCXVkcF90YmwuaXRlbV9udW0gPSAwOwo+PiArCQl1ZHBfdGJsLm1heF9mbG93X251bSA9 IGl0ZW1fbnVtOwo+PiArCQl1ZHBfdGJsLm1heF9pdGVtX251bSA9IGl0ZW1fbnVtOwo+PiArCQlk b191ZHA0X2dybyA9IDE7Cj4+ICsJfQo+PiArCj4+ICsKPj4gIAlmb3IgKGkgPSAwOyBpIDwgbmJf cGt0czsgaSsrKSB7Cj4+ICAJCS8qCj4+ICAJCSAqIFRoZSB0aW1lc3RhbXAgaXMgaWdub3JlZCwg c2luY2UgYWxsIHBhY2tldHMKPj4gQEAgLTE3Nyw3ICsyMDUsOCBAQCBzdHJ1Y3QgZ3JvX2N0eCB7 Cj4+ICAJCSAqLwo+PiAgCQlpZiAoSVNfSVBWNF9WWExBTl9UQ1A0X1BLVChwa3RzW2ldLT5wYWNr ZXRfdHlwZSkgJiYKPj4gIAkJCQlkb192eGxhbl9ncm8pIHsKPj4gLQkJCXJldCA9IGdyb192eGxh bl90Y3A0X3JlYXNzZW1ibGUocGt0c1tpXSwgJnZ4bGFuX3RibCwgMCk7Cj4+ICsJCQlyZXQgPSBn cm9fdnhsYW5fdGNwNF9yZWFzc2VtYmxlKHBrdHNbaV0sCj4+ICsJCQkJCQkJJnZ4bGFuX3RibCwg MCk7Cj4+ICAJCQlpZiAocmV0ID4gMCkKPj4gIAkJCQkvKiBNZXJnZSBzdWNjZXNzZnVsbHkgKi8K Pj4gIAkJCQluYl9hZnRlcl9ncm8tLTsKPj4gQEAgLTE5MSwyNyArMjIwLDQzIEBAIHN0cnVjdCBn cm9fY3R4IHsKPj4gIAkJCQluYl9hZnRlcl9ncm8tLTsKPj4gIAkJCWVsc2UgaWYgKHJldCA8IDAp Cj4+ICAJCQkJdW5wcm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07Cj4+ICsJ CX0gZWxzZSBpZiAoSVNfSVBWNF9VRFBfUEtUKHBrdHNbaV0tPnBhY2tldF90eXBlKSAmJgo+PiAr CQkJCWRvX3VkcDRfZ3JvKSB7Cj4+ICsJCQlyZXQgPSBncm9fdWRwNF9yZWFzc2VtYmxlKHBrdHNb aV0sICZ1ZHBfdGJsLCAwKTsKPj4gKwkJCWlmIChyZXQgPiAwKQo+PiArCQkJCS8qIG1lcmdlIHN1 Y2Nlc3NmdWxseSAqLwo+PiArCQkJCW5iX2FmdGVyX2dyby0tOwo+PiArCQkJZWxzZSBpZiAocmV0 IDwgMCkKPj4gKwkJCQl1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsK Pj4gIAkJfSBlbHNlCj4+ICAJCQl1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0 c1tpXTsKPj4gIAl9Cj4+ICAKPj4gLQlpZiAobmJfYWZ0ZXJfZ3JvIDwgbmJfcGt0cykgewo+PiAr CWlmICgobmJfYWZ0ZXJfZ3JvIDwgbmJfcGt0cykKPj4gKwkJIHx8ICh1bnByb2Nlc3NfbnVtIDwg bmJfcGt0cykpIHsKPgo+V2h5IG5lZWQgdG8gY2hlY2sgdW5wcm9jZXNzX251bSBoZXJlPwoKSW4g dGhlIGNhc2UgdGhhdCBwYWNrZXQgaXNuJ3QgbWVyZ2VkLCBuYl9hZnRlcl9ncm8gd29uJ3QgYmUg Y2hhbmdlZCwgd2Ugb25seSBjYW4gdXNlIHVucHJvY2Vzc19udW0gdG8gY2hlY2ssIGl0IGlzIHBv c3NpYmxlIHRvIHJlYXNzbWJsZSB0aGVtIHN1Y2Nlc3NmdWxseSBpbiBmbHVzaCBwaGFzZS4KCj4K Pj4gIAkJaSA9IDA7Cj4+ICAJCS8qIEZsdXNoIGFsbCBwYWNrZXRzIGZyb20gdGhlIHRhYmxlcyAq Lwo+PiAgCQlpZiAoZG9fdnhsYW5fZ3JvKSB7Cj4+ICAJCQlpID0gZ3JvX3Z4bGFuX3RjcDRfdGJs X3RpbWVvdXRfZmx1c2goJnZ4bGFuX3RibCwKPj4gIAkJCQkJMCwgcGt0cywgbmJfcGt0cyk7Cj4+ ICAJCX0KPj4gKwo+PiAgCQlpZiAoZG9fdGNwNF9ncm8pIHsKPj4gIAkJCWkgKz0gZ3JvX3RjcDRf dGJsX3RpbWVvdXRfZmx1c2goJnRjcF90YmwsIDAsCj4+ICAJCQkJCSZwa3RzW2ldLCBuYl9wa3Rz IC0gaSk7Cj4+ICAJCX0KPj4gKwo+PiArCQlpZiAoZG9fdWRwNF9ncm8pIHsKPj4gKwkJCWkgKz0g Z3JvX3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goJnVkcF90YmwsIDAsCj4+ICsJCQkJCSZwa3RzW2ld LCBuYl9wa3RzIC0gaSk7Cj4+ICsJCX0KPj4gIAkJLyogQ29weSB1bnByb2Nlc3NlZCBwYWNrZXRz ICovCj4+ICAJCWlmICh1bnByb2Nlc3NfbnVtID4gMCkgewo+PiAgCQkJbWVtY3B5KCZwa3RzW2ld LCB1bnByb2Nlc3NfcGt0cywKPj4gIAkJCQkJc2l6ZW9mKHN0cnVjdCBydGVfbWJ1ZiAqKSAqCj4+ ICAJCQkJCXVucHJvY2Vzc19udW0pOwo+PiAgCQl9Cj4+ICsJCW5iX2FmdGVyX2dybyA9IGkgKyB1 bnByb2Nlc3NfbnVtOwo+PiAgCX0KPj4gIAo+PiAgCXJldHVybiBuYl9hZnRlcl9ncm87Cj4+IDEu OC4zLjEKCgo=