From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=13.75.44.102 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793797223; b=OCD+wjUq5OTcJVhEp7G3fLv190P+qepVvwVUZuXRroMlXPCDNTmLcwNYKlL9H76aia2y lz2TGVwT5bAaScappmEDh/a3OyDn4CO00wt1OdbDI3Hwuma8CHfpGvyqtTtsWrpJITOLi dkDGtZg0fboH8eK2m3c9oMUBKpekuIKPCJnA+yWjl++iVbmmNv+s3Nj1RFauomapA8my5 rlzivqYOLX8Y79orNkjT7yrNzp7v5P+9icregk4iuTfSb6EeArf0l3ZJ6Bckl0EkVYbHU uBH6CAqcrWgwqWsqvzB440w6zbL8W6vpkg9GrPz/W48DF9/vG2+cus/VLc5MNkwpW5A== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793797223; h=DMARC-Filter:Received:X-Originating-IP:Date:X-CM-HeaderCharset:From: To:Cc:Subject:X-Priority:X-Mailer:In-Reply-To:References: X-CM-CTRLMSGS:Content-Type:MIME-Version:Message-ID:X-Coremail-Locale: X-CM-TRANSID:X-CM-SenderInfo:X-Coremail-Antispam; bh=99Es5eozoIHqvOtc8Mr5p+G/cKw7Zjs4zhE1KYIQcu8=; b=Cicu8PKmYo0kJP+P8+ktxOyeOVe41p+z6/no4s9ZZ5ghZsmT1ohEIQJyL6m0FScT/g4y aiIMKsK5gm7P5IP0rpjp2Li0moFiOPgDo+fR9z0bwEhQukBhT0oOPM8JMLodVRPD1O+Cf GxJ7kRJwTEny5t+KkxsNqhwWZ50t/KRiK7TeNNqiUdXdedDzSWlMeF5yQi+rehfOYPO1/ cdI8whhe1+foD6rxgoQgvFjx5ZGQOLc70YK/uPT44OPg3JJmuSGI3wQ8M5nEKbns0LliA AWZrZOb5OP/VJ4SSLkb2EpQ8VzW2E8947XsfLMakQ1mv2DBiiB+wCWT6iTovyca1g8Q== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none header.from=hust.edu.cn; spf=pass smtp.mailfrom=hust.edu.cn; arc=none smtp.remote-ip=13.75.44.102 Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [13.75.44.102]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8180E606A329; Wed, 4 Nov 2026 13:00:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 8180E606A329 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=hust.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hust.edu.cn Received: from xuhx$hust.edu.cn ( [10.12.190.107] ) by ajax-webmail-app2 (Coremail) ; Wed, 4 Nov 2026 21:00:18 +0800 (GMT+08:00) Date: Wed, 4 Nov 2026 21:00:18 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?5b6Q5pmX57+U?= To: heikki.krogerus@linux.intel.com Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: usb: typec: stusb160x/rt1719/hd3ss3220: IRQ thread vs remove -- double unregister / use-after-free on the partner and port X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2025.3-cmXT6 build 20260810(6c94e3b5) Copyright (c) 2002-2026 www.mailtech.cn hust In-Reply-To: <2026102727-data-sequel-ce41@gregkh> References: <4c7f9772.192e1.1a17d5c2ed5.Coremail.xuhx@hust.edu.cn> <2026102727-data-sequel-ce41@gregkh> X-CM-CTRLMSGS: =?B?rdES9ziH6nJ5xwDR7hwMki1N8jM= Content-Type: multipart/mixed; boundary="----=_Part_415415_3790571.1793797218529" X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-ID: <78142dbc.1e594.1a1a6a560e1.Coremail.xuhx@hust.edu.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID:IQEQrMAWP3hiLOtqmqlxAA--.11329W X-CM-SenderInfo: bgsqjkayqyjmo6kx23oohg3hdfq/1tbiAQoBB2rqCWyiLAABsn X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= ------=_Part_415415_3790571.1793797218529 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 VGhyZWUgdHlwZWMgY29udHJvbGxlciBkcml2ZXJzIHNoYXJlIG9uZSB0ZWFyZG93biBkZWZlY3Q6 IHRoZWlyIElSUQp0aHJlYWQgbXV0YXRlcyB0aGUgcmVnaXN0ZXJlZCBwYXJ0bmVyICh0eXBlY19y ZWdpc3Rlcl9wYXJ0bmVyIC8KdHlwZWNfdW5yZWdpc3Rlcl9wYXJ0bmVyLCBhbmQgZGF0YS1yb2xl IHNldHRpbmcpIHdpdGggbm8Kc3luY2hyb25pemF0aW9uIGFnYWluc3QgLnJlbW92ZSgpLCBhbmQg dGhlIElSUSBpdHNlbGYgaXMgZGV2bS1yZXEtCnVlc3RlZCAtLSBzbyBpdCBrZWVwcyBydW5uaW5n IHVudGlsIEFGVEVSIC5yZW1vdmUgcmV0dXJucyBhbmQgdGhlCnBvcnQvcGFydG5lciBvYmplY3Rz IG1heSBhbHJlYWR5IGJlIGdvbmUuICBzdHVzYjE2MHhfcmVtb3ZlKCkgZXZlbgpwZXJmb3JtcyB0 aGUgc2FtZSB1bmxvY2tlZCByZWFkLXRoZW4tdW5yZWdpc3RlciBvbiBjaGlwLT5wYXJ0bmVyCig6 ODA1LTgwOCkgdGhhdCB0aGUgSVJRIHRocmVhZCBwZXJmb3JtcyAoOjM4OC0zODkpOiBib3RoIHNp ZGVzJyAic2VlCm5vbi1OVUxMIC0+IHVucmVnaXN0ZXIiIHBhaXJzIHJhY2UsIHByb2R1Y2luZyBh IGRvdWJsZQp0eXBlY191bnJlZ2lzdGVyX3BhcnRuZXIgb24gYSBwb3NzaWJseSBmcmVlZCBwYXJ0 bmVyICh1c2UtYWZ0ZXItZnJlZQp3cml0ZXMgaW5zaWRlIHRoZSBjbGFzcyBsYXllciksIGFuZCB0 aGUgdHJhaWxpbmcKdHlwZWNfdW5yZWdpc3Rlcl9wb3J0KCkgZnJlZXMgdGhlIHBvcnQgd2hpbGUg dGhlIElSUSB0aHJlYWQgbWF5CnN0aWxsIGhvbGQgdGhlIHN0YWxlIHBvcnQgcG9pbnRlci4gIHJ0 MTcxOV9yZW1vdmUoKSBkb2VzIG5vdCB0b3VjaAp0aGUgcGFydG5lciBhdCBhbGwsIHNvIGl0cyBJ UlEgdGhyZWFkIGNhbiB1bnJlZ2lzdGVyIHRoZSBwYXJ0bmVyCmFmdGVyIHJlbW92ZSBhbmQgZXZl biByZS1BVFRBQ0ggb25lIG9udG8gdGhlIHJlbW92ZWQgcG9ydCAob3JwaGFuKSwKY2FsbGluZyB0 eXBlY19zZXRfcHdyX29wbW9kZSgpIG9uIHRoZSBmcmVlZCBwb3J0IChzeXNmc19ub3RpZnkgb24g YQpkZWFkIGtvYmplY3QpLiAgaGQzc3MzMjIwIChJUlEgbW9kZSkgcmFjZXMgdHlwZWNfc2V0X2Rh dGFfcm9sZSgpCmFnYWluc3QgdGhlIHBvcnQgdGVhcmRvd24gdGhlIHNhbWUgd2F5LiAgSSB2ZXJp ZmllZCB0aGUgY29yZQppbnRlcmxlYXZpbmcgb24gYSBwcmlzdGluZSBMaW51eCA3LjMgS0FTQU4g a2VybmVsIHdpdGggYQpzdGF0ZW1lbnQtbGV2ZWwgcmVwbGljYSBvZiB0aGUgc3R1c2IxNjB4IHNo YXBlIG92ZXIgdGhlIE5BVElWRSB0eXBlYwpjbGFzcyBhbmQgZGV2aWNlIGNvcmU6IGFuIElSUSB0 aHJlYWQgcGFya2VkIHJpZ2h0IGFmdGVyIHNlZWluZyBhCm5vbi1OVUxMIHBhcnRuZXIsIHRoZW4g dGhlIHJlbW92ZSBzaWRlIHVucmVnaXN0ZXJpbmcgcGFydG5lcitwb3J0LAp0aGVuIHRoZSByZXN1 bWVkIElSUSB1bnJlZ2lzdGVyaW5nIG9uIHRoZSBmcmVlZCBwYXJ0bmVyIC0tIGZvdXIKdHlwZWNf dW5yZWdpc3Rlcl9wYXJ0bmVyIFVBRiByZXBvcnRzLCBhIGZyZWVkLW11dGV4IHdhaXQsIGEga2Vy bmZzCk5VTEwtZGVyZWYgYW5kIHR3byBPb3BzZXMsIHdpdGggdGhlIHRpbWVsaW5lIHNob3dpbmcg Ym90aCBzaWRlcwpyZWFkaW5nIHRoZSBTQU1FIHBhcnRuZXIgcG9pbnRlciBiZWZvcmUgdGhlIGZy ZWUuICBUaGUgZml4IGlzIHRoZQpvcmRlcmluZyB0aGUgc2libGluZyBkcml2ZXIgd3VzYjM4MDEg YWxyZWFkeSB1c2VzOiBzdG9wL3dhaXQgdGhlIElSUQooZnJlZV9pcnEsIHdoaWNoIHdhaXRzIGZv ciBhIHJ1bm5pbmcgT05FU0hPVCB0aHJlYWQpIGJlZm9yZSB0b3VjaGluZwpwYXJ0bmVyL3BvcnQg aW4gcmVtb3ZlLgoKVGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uOgoKKiBUaGUgdGhyZWUgZHJpdmVy cyAoTGludXggNy4zIGxpbmUgbnVtYmVycykKCiAgLSBzdHVzYjE2MHg6IElSUSB0aHJlYWQgc3R1 c2IxNjB4X2lycV9oYW5kbGVyICg6NDAyLTQyOSkgY2FsbHMKICAgIHN0dXNiMTYweF9hdHRhY2gg KDo0MTYgLT4gOjM2NCBjaGlwLT5wYXJ0bmVyID0gdHlwZWNfcmVnaXN0ZXJfCiAgICBwYXJ0bmVy KC4uLikpIC8gc3R1c2IxNjB4X2RldGFjaCAoOjQxOCAtPiA6Mzg4LTM4OSB1bnJlZ2lzdGVyICsK ICAgIE5VTEwpIGRpcmVjdGx5OyBzdHVzYjE2MHhfcmVtb3ZlICg6ODAwLTgxNSkgZG9lcyB0aGUg c2FtZQogICAgdW5sb2NrZWQgb3BlcmF0aW9ucyBhdCA6ODA1LTgwOCBhbmQgdW5yZWdpc3RlcnMg dGhlIHBvcnQgYXQKICAgIDo4MTU7IGRldm0gSVJRIGF0IDo0NTIuCiAgLSBydDE3MTk6IHJ0MTcx OV9pcnFfaGFuZGxlciAoOjU4Ni02MjQpIGNhbGxzIHJ0MTcxOV9hdHRhY2gKICAgICg6NjExOyBy ZS1yZWdpc3RlciBhdCA6MjQ3IGFmdGVyIGEgZGVmZW5zaXZlIHByZS11bnJlZ2lzdGVyCiAgICA6 MjM4LTI0MCkgLyBydDE3MTlfZGV0YWNoICg6NjE0IC0+IDoyODgpOyBydDE3MTlfcmVtb3ZlCiAg ICAoOjkyOC05MzMpIG9ubHkgdW5yZWdpc3RlcnMgdGhlIHBvcnQ7IGRldm0gSVJRIDo2NDUuCiAg LSBoZDNzczMyMjAgKElSUSBtb2RlKTogaGQzc3MzMjIwX2lycV9oYW5kbGVyICg6MjgwLTI4Nikg LT4KICAgIGhkM3NzMzIyMF9zZXRfcm9sZSAoOjIyNi0yNDEpIC0+IHR5cGVjX3NldF9kYXRhX3Jv bGUgKDoyMzcvOjI0MCk7CiAgICByZW1vdmUgKDo1MjItNTMyKSBjYW5jZWxzIG9ubHkgdGhlIHBv bGxpbmctbW9kZSB3b3JrZXIgKDo1MjcpCiAgICBhbmQgdW5yZWdpc3RlcnMgdGhlIHBvcnQgKDo1 MjkpOyBkZXZtIElSUSA6NDM4Lzo0ODkuCgogIFdoeSBub3RoaW5nIHByb3RlY3RzIHRoaXM6IGRl dnJlc19yZWxlYXNlX2FsbCBydW5zIGFmdGVyIC5yZW1vdmUKICByZXR1cm5zICh0aGUgd2luZG93 IGNvdmVycyB0aGUgd2hvbGUgcmVtb3ZlIGJvZHkpOyBJUlFGX09ORVNIT1QKICBvbmx5IHByZXZl bnRzIHJlLWVudHJ5IG9mIHRoZSB0aHJlYWQsIG5vdCBpdHMgY29uY3VycmVuY3kgd2l0aAogIHJl bW92ZTsgdHlwZWNfdW5yZWdpc3Rlcl9wYXJ0bmVyKCkncyBwb3J0LT5wYXJ0bmVyX2xpbmtfbG9j awogIChjbGFzcy5jOjExODMtMTE5NCkgb3JkZXJzIHRoZSBjbGFzcy1zaWRlIGxpc3Qgb3BzIGJ1 dCBuZWl0aGVyCiAgZ3VhcmRzIHRoZSBkcml2ZXIncyBjaGlwLT5wYXJ0bmVyIHBvaW50ZXIgbm9y IHRoZSBwb3J0J3MKICBsaWZldGltZTsgYW5kIGFmdGVyIHRoZSBwb3J0IGlzIGZyZWVkIHRoZSBJ UlEgdGhyZWFkJ3MgcG9ydAogIHBvaW50ZXIgaXMgZGFuZ2xpbmcgKHR5cGVjX3BvcnRfcmVsZWFz ZSBrZnJlZXMgaXQpLgoKKiBFdmlkZW5jZSAocHJpc3RpbmUgNy4zIEtBU0FOOyBtb2R1bGUgYXR0 YWNoZWQpCgogIFRoZSBzdHVzYjE2MHgtc2hhcGUgcmVwbGljYSAoc3R1X2lycS9zdHVfcmVtb3Zl IGluIHRoZSBtb2R1bGUpCiAgb3ZlciB0aGUgbmF0aXZlIGNsYXNzIGxheWVyOiB0aGUgSVJRIHRo cmVhZCBpcyBwYXJrZWQgcmlnaHQgYWZ0ZXIKICBpdCBvYnNlcnZlZCBjaGlwLT5wYXJ0bmVyICE9 IE5VTEw7IHRoZSByZW1vdmUgc2lkZSB0aGVuIHJlYWRzIHRoZQogIHNhbWUgbm9uLU5VTEwgcG9p bnRlciwgdW5yZWdpc3RlcnMgcGFydG5lciBhbmQgcG9ydDsgb24gcmVsZWFzZSwKICB0aGUgSVJR IHRocmVhZCdzIHR5cGVjX3VucmVnaXN0ZXJfcGFydG5lcigpIGxhbmRzIG9uIHRoZSBmcmVlZAog IHBhcnRuZXI6CgogICAgaXJxIHNhdyBwYXJ0bmVyIC4uLiBwYXJrZWQKICAgIHJlbW92ZSBzYXcg cGFydG5lciAoc2FtZSBwb2ludGVyKSAtPiB1bnJlZ2lzdGVyZWQgKyBwb3J0IGdvbmUKICAgICg0 MDAgbXMgbGF0ZXIpIGlycSByZXN1bWVzIC0+CiAgICBCVUc6IEtBU0FOOiBzbGFiLXVzZS1hZnRl ci1mcmVlIGluCiAgICB0eXBlY191bnJlZ2lzdGVyX3BhcnRuZXIrMHg1MS8rMHhkNiAgICh4NCkK ICAgICsgbXV0ZXhfbG9jayBvbiBmcmVlZCBsb2NrICsga2VybmZzX2ZpbmRfYW5kX2dldF9ucyBO VUxMLWRlcmVmCiAgICArIE9vcHMgeDIKCiAgRmlkZWxpdHk6IHR5cGVjX3JlZ2lzdGVyL3VucmVn aXN0ZXJfcGFydG5lciwgdGhlIHBvcnQgcmVsZWFzZSBhbmQKICB0aGUgd2hvbGUgZGV2aWNlIGNv cmUgYXJlIG5hdGl2ZTsgdGhlIGRyaXZlcidzIGR1YWwKICByZWFkLXRoZW4tdW5yZWdpc3RlciBw YWlycyBhcmUgcmVwbGljYXRlZCBzdGF0ZW1lbnQtYnktc3RhdGVtZW50CiAgcGVyIHN0dXNiMTYw eC5jOjM4OC0zODkvOjgwMC04MTUuCgogIE1vZHVsZSB1c2FnZTogaW5zbW9kIHR5cGNyYWNlLmtv OyBhY3Rpb249dGMxICh0aGUgc3R1c2IxNjB4CiAgY2hvcmVvZ3JhcGh5KS4gIE9uIHJlYWwgaGFy ZHdhcmUgdGhlIHNoYXBlIGlzIHJlYWNoZWQgYnkgdW5iaW5kaW5nCiAgdGhlIGkyYyBkcml2ZXIg d2hpbGUgYSBjYWJsZSBhdHRhY2gvZGV0YWNoIGV2ZW50IGlzIGluIGZsaWdodCAtLQogIHBsYWlu IHBsdWcvdW5wbHVnIHRyYWZmaWMgc3VmZmljZXMgdG8gaGF2ZSB0aGUgSVJRIHRocmVhZCBpbnNp ZGUKICBhdHRhY2gvZGV0YWNoIGF0IHVuYmluZCB0aW1lLgoKKiBTdWdnZXN0ZWQgZml4CgogIFN0 b3AgdGhlIElSUSBiZWZvcmUgbXV0YXRpbmcgcGFydG5lci9wb3J0IGluIHJlbW92ZToKICBzdHVz YjE2MHg6IGZyZWVfaXJxKCkgKG9yIGRpc2FibGUrY2FuY2VsKSBmaXJzdCwgdGhlbiB0aGUKICA6 ODA1LTgwOCBwYWlyIGFuZCB0aGUgcG9ydCB1bnJlZ2lzdGVyOyBydDE3MTk6IGZyZWVfaXJxKCkg Zmlyc3QsCiAgYW5kIG1ha2UgcmVtb3ZlIGFsc28gZGV0YWNoIHRoZSBwYXJ0bmVyIChvciBoYXZl IHRoZSBJUlEgdGhyZWFkCiAgY2hlY2sgYSByZW1vdmluZyBmbGFnKTsgaGQzc3MzMjIwOiBmcmVl X2lycSgpIGluIGJvdGggbW9kZXMKICBiZWZvcmUgdGhlIHBvcnQgdW5yZWdpc3Rlci4gIFRoZSBj b3JyZWN0LW9yZGVyIHByZWNlZGVudCBpcwogIHd1c2IzODAxLmM6NDAyLTQxNCwgd2hpY2ggZnJl ZV9pcnEoKXMgLS0gd2FpdGluZyBmb3IgdGhlIGluLWZsaWdodAogIE9ORVNIT1QgdGhyZWFkIC0t IGJlZm9yZSB0b3VjaGluZyBwYXJ0bmVyL3BvcnQuCgoKICBQbGVhc2Uga2VlcCBtZSBpbiBDYzsg SSBhbSBub3Qgc3Vic2NyaWJlZCB0byB0aGUgbGlzdHMuCgoKClJlZ2FyZHMsCkhhbnhpYW5nIFh1 Cnh1aHhAaHVzdC5lZHUuY24K ------=_Part_415415_3790571.1793797218529 Content-Type: text/plain; name=typcrace.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="typcrace.c" Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLyoKICogdHlwY3JhY2UuYyAtIGR5 bmFtaWMgdmVyaWZpY2F0aW9uIG1vZHVsZSBmb3IgZHJpdmVycy91c2IvdHlwZWMgYXVkaXQKICog KGRvY3MvbWFudWFsLXJldmlldy1kcml2ZXJzLXVzYi10eXBlYy0yMDI2LTExLTAyLnJvdW5kMy5t ZCkKICoKICogU3RhdGVtZW50LWZhaXRoZnVsIHJlcGxpY2FzIG9mIHRoZSBhdWRpdGVkIGRyaXZl ciBzdGF0ZSBtYWNoaW5lcyAoYW54NzQxMSwKICogc3R1c2IxNjB4KSwgZHJpdmVuIHZpYSB0aGUg ZXhwb3J0ZWQgdHlwZWMgY2xhc3MgQVBJIG9uIGEgZmFrZSB0eXBlY19wb3J0LAogKiB3aXRoIG9u ZS1zaG90IGtwcm9iZSBzdGFsbHMgbWFraW5nIHRoZSBhdWRpdGVkIGludGVybGVhdmluZ3MgZGV0 ZXJtaW5pc3RpYy4KICogS2VybmVsIHNvdXJjZSB1bm1vZGlmaWVkIChidWlsZC1rYXNhbi10eXBl Yy03LjMpLgogKgogKiB0YzAgIC0gYXVkaXQgQ2FzZSAzIGludGVybGVhdmluZyAxOiBhbng3NDEx IHdvcmsgdXNlcyBhbW9kZVtdIHBvaW50ZXIKICogICAgICAgIChjaGVjay10aGVuLXVzZSwgYW54 NzQxMS5jOjYwMi02MTMpIHdoaWxlIHJlbW92ZSBmcmVlcyB0aGUgZGV2aWNlLgogKiAgICAgICAg V29yayBpcyBwYXJrZWQgYnkgYSBrcHJvYmUgYXQgaXRzIHVzZSBwb2ludAogKiAgICAgICAgKHR5 cGVjX2FsdG1vZGVfdXBkYXRlX2FjdGl2ZSkgQUZURVIgaXQgcmVhZCBhbW9kZVtpXTsgdGhlIHJl bW92ZQogKiAgICAgICAgdGhyZWFkIHVucmVnaXN0ZXJzIChmcmVlcykgdGhlIGFsdG1vZGUgZHVy aW5nIHRoZSBwYXJrOyBvbiByZXN1bWUKICogICAgICAgIHRoZSB1c2UgZGVyZWZlcmVuY2VzIGZy ZWVkIG1lbW9yeSAtPiBLQVNBTiBVQUYuCiAqIHRjMGIgLSBhdWRpdCBDYXNlIDMgaW50ZXJsZWF2 aW5nIDI6IGRvdWJsZSBkZXZpY2VfdW5yZWdpc3Rlci4gUmVtb3ZlIGlzCiAqICAgICAgICBwYXJr ZWQgYnkgYSBvbmUtc2hvdCBrcHJvYmUgYXQgdHlwZWNfdW5yZWdpc3Rlcl9hbHRtb2RlIEJFRk9S RSBpdAogKiAgICAgICAgZXhlY3V0ZXM7IHRoZSBxdWV1ZWQgd29yayB0aGVuIHVucmVnaXN0ZXJz IHRoZSBzYW1lIGFsdG1vZGUKICogICAgICAgIChkZXZpY2UgZnJlZWQpOyBvbiByZXN1bWUgcmVt b3ZlJ3MgdW5yZWdpc3RlciBydW5zIG9uIHRoZSBmcmVlZAogKiAgICAgICAgZGV2aWNlIC0+IFVB RiBpbnNpZGUgdHlwZWNfdW5yZWdpc3Rlcl9hbHRtb2RlL2NsYXNzIGNvcmUuCiAqIHRjMSAgLSBh dWRpdCBDYXNlIDQgKHN0dXNiMTYweCBmb3JtKTogaXJxIHRocmVhZCBwYXJrZWQgYnkgb25lLXNo b3Qga3Byb2JlCiAqICAgICAgICBhdCB0eXBlY191bnJlZ2lzdGVyX3BhcnRuZXIgKGhhdmluZyBz ZWVuIGNoaXAtPnBhcnRuZXIgIT0gTlVMTCk7CiAqICAgICAgICByZW1vdmUgdGhyZWFkIHRoZW4g dW5yZWdpc3RlcnMgdGhlIHNhbWUgcGFydG5lciBhbmQgdW5yZWdpc3RlcnMgdGhlCiAqICAgICAg ICBwb3J0OyBpcnEgcmVzdW1lcyAtPiB1bnJlZ2lzdGVyIG9uIGZyZWVkIHBhcnRuZXIgLT4gVUFG LgogKi8KI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAoKI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgojaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiNpbmNsdWRlIDxsaW51eC93 b3JrcXVldWUuaD4KI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KI2luY2x1ZGUgPGxpbnV4L2Nv bXBsZXRpb24uaD4KI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CiNpbmNsdWRlIDxsaW51eC91c2IvdHlwZWMuaD4KI2luY2x1ZGUgPGxpbnV4L3VzYi90eXBl Y19hbHRtb2RlLmg+CgojZGVmaW5lIE1BWF9BTFRNT0RFIDQKCnN0cnVjdCB0eWNfdHlwZWMgewoJ c3RydWN0IHR5cGVjX3BvcnQgKnBvcnQ7CglzdHJ1Y3QgdHlwZWNfcGFydG5lciAqcGFydG5lcjsK CXN0cnVjdCB0eXBlY19hbHRtb2RlICphbW9kZVtNQVhfQUxUTU9ERV07Cn07CgovKiAtLS0tLS0t LS0tLS0tLS0tIGFueDc0MTEgcmVwbGljYSAoQ2FzZSAzKSAtLS0tLS0tLS0tLS0tLS0tICovCnN0 cnVjdCB0eWNfYW54IHsKCXN0cnVjdCB0eWNfdHlwZWMgdHlwZWM7CglzdHJ1Y3QgbXV0ZXggbG9j azsJCS8qIGFuYWxvZyBvZiBjdHgtPmxvY2s6IHdvcmsgc2lkZSBvbmx5ICovCglzdHJ1Y3Qgd29y a19zdHJ1Y3Qgd29yazsKCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKCXN0cnVjdCBjb21w bGV0aW9uIHdvcmtfaW5fdXNlOwkvKiB3b3JrIHBhcmtlZCBhdCBpdHMgdXNlIHBvaW50ICovCn07 CgpzdGF0aWMgdm9pZCBhbnhfdW5yZWdpc3Rlcl9hbHRtb2RlX3JlcGxpY2Eoc3RydWN0IHR5Y19h bnggKmN0eCkKewoJaW50IGk7CgoJLyogYW54NzQxMS5jOjUzNS01NDkgLS0gTk8gY3R4LT5sb2Nr IChhdWRpdGVkKSAqLwoJZm9yIChpID0gMDsgaSA8IE1BWF9BTFRNT0RFOyBpKyspCgkJaWYgKGN0 eC0+dHlwZWMuYW1vZGVbaV0pIHsKCQkJdHlwZWNfdW5yZWdpc3Rlcl9hbHRtb2RlKGN0eC0+dHlw ZWMuYW1vZGVbaV0pOwoJCQljdHgtPnR5cGVjLmFtb2RlW2ldID0gTlVMTDsKCQl9Cn0KCnN0YXRp YyB2b2lkIGFueF91bnJlZ2lzdGVyX3BhcnRuZXJfcmVwbGljYShzdHJ1Y3QgdHljX2FueCAqY3R4 KQp7CgkvKiBhbng3NDExLmM6NTg1LTU5MSAtLSBOTyBjdHgtPmxvY2sgKGF1ZGl0ZWQpICovCglp ZiAoY3R4LT50eXBlYy5wYXJ0bmVyKSB7CgkJdHlwZWNfdW5yZWdpc3Rlcl9wYXJ0bmVyKGN0eC0+ dHlwZWMucGFydG5lcik7CgkJY3R4LT50eXBlYy5wYXJ0bmVyID0gTlVMTDsKCX0KfQoKc3RhdGlj IGJvb2wgYW54X3VzZV9tb2RlOwkvKiB0YzA6IHdvcmsgcGFya3MgYXQgdXNlIHBvaW50ICovCnN0 YXRpYyBzdHJ1Y3QgdHljX2FueCAqZ19hbngwOwkvKiB0YzAgdGFyZ2V0IGZvciBrcHJvYmUgbG9v a3VwICovCgovKgogKiB0YzAga3Byb2JlIHRhcmdldDogdHlwZWNfYWx0bW9kZV91cGRhdGVfYWN0 aXZlIGlzIG9ubHkgcmVhY2hlZCBmcm9tIHRoZQogKiB3b3JrJ3MgdXNlIHBvaW50IGluIHRoaXMg bW9kdWxlICh0aGUgcmVtb3ZlIHRocmVhZCBuZXZlciBjYWxscyBpdCkuCiAqIFBhcmsgaGVyZSBB RlRFUiB0aGUgd29yayBoYXMgcmVhZCBhbW9kZVtpXSAoYXVkaXRlZCBjaGVjay10aGVuLXVzZSBn YXApLgogKi8Kc3RhdGljIGludCBrcF91c2VfcHJlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBw dF9yZWdzICpyZWdzKQp7Cgl1bnNpZ25lZCBsb25nIGxvbmcgdDA7CglzdHJ1Y3QgdHljX2FueCAq Y3R4ID0gZ19hbngwOwoKCWlmICghYW54X3VzZV9tb2RlIHx8ICFjdHgpCgkJcmV0dXJuIDA7Cglh bnhfdXNlX21vZGUgPSBmYWxzZTsKCXByX2luZm8oIlRDMDogd29yayBwYXJrZWQgYXQgdXNlIHBv aW50IChhZGV2PSVweCksIHJlbW92ZSBmcmVlcyBub3dcbiIsCgkJKHZvaWQgKilyZWdzLT5kaSk7 Cgljb21wbGV0ZSgmY3R4LT53b3JrX2luX3VzZSk7Cgl0MCA9IGt0aW1lX2dldF9tb25vX2Zhc3Rf bnMoKTsKCXdoaWxlIChrdGltZV9nZXRfbW9ub19mYXN0X25zKCkgLSB0MCA8IDQwMFVMTCAqIE5T RUNfUEVSX01TRUMpCgkJY3B1X3JlbGF4KCk7Cglwcl9pbmZvKCJUQzA6IHdvcmsgcmVzdW1lcyB1 c2Ugb24gKHBvc3NpYmx5IGZyZWVkKSBhZGV2XG4iKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgc3Ry dWN0IGtwcm9iZSBrcF91c2UgPSB7Cgkuc3ltYm9sX25hbWUgPSAidHlwZWNfYWx0bW9kZV91cGRh dGVfYWN0aXZlIiwKCS5wcmVfaGFuZGxlciA9IGtwX3VzZV9wcmUsCn07CgovKiB3b3JrIHJlcGxp Y2Egb2YgYW54NzQxMV93b3JrX2Z1bmMgKGFueDc0MTEuYzo5MDYtOTg0KSAqLwpzdGF0aWMgdm9p ZCBhbnhfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKewoJc3RydWN0IHR5Y19hbngg KmN0eCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgdHljX2FueCwgd29yayk7CglpbnQgaTsKCglt dXRleF9sb2NrKCZjdHgtPmxvY2spOwkJLyogOjkxNiAqLwoKCS8qICJ1cGRhdGVfYWx0bW9kZSIg Y2hlY2stdGhlbi11c2UgbG9vcCAoOjYwMi02MTMpICovCglmb3IgKGkgPSAwOyBpIDwgTUFYX0FM VE1PREU7IGkrKykgewoJCWlmICghY3R4LT50eXBlYy5hbW9kZVtpXSkKCQkJY29udGludWU7CgkJ cHJfaW5mbygiVEMwOiB3b3JrIHJlYWQgYW1vZGVbJWRdPSVweCBzdmlkPSUwNHgsIGNhbGxpbmcg dXBkYXRlX2FjdGl2ZVxuIiwKCQkJaSwgY3R4LT50eXBlYy5hbW9kZVtpXSwgY3R4LT50eXBlYy5h bW9kZVtpXS0+c3ZpZCk7CgkJdHlwZWNfYWx0bW9kZV91cGRhdGVfYWN0aXZlKGN0eC0+dHlwZWMu YW1vZGVbaV0sIHRydWUpOwoJfQoJLyogUE9XX09GRiBicmFuY2ggKDo5NDMtOTQ2KSAqLwoJcHJf aW5mbygiVEMwOiB3b3JrIHVucmVnaXN0ZXIgYWx0bW9kZStwYXJ0bmVyXG4iKTsKCWFueF91bnJl Z2lzdGVyX2FsdG1vZGVfcmVwbGljYShjdHgpOwoJYW54X3VucmVnaXN0ZXJfcGFydG5lcl9yZXBs aWNhKGN0eCk7CgoJbXV0ZXhfdW5sb2NrKCZjdHgtPmxvY2spOwp9CgpzdGF0aWMgaW50IGFueF9y ZW1vdmVfdGhyZWFkKHZvaWQgKmRhdGEpCnsKCXN0cnVjdCB0eWNfYW54ICpjdHggPSBkYXRhOwoK CXByX2luZm8oIlRDMCo6IHJlbW92ZSBlbnRlcnMgKGF1ZGl0ZWQgb3JkZXI6IHVucmVnaXN0ZXIg RklSU1QpXG4iKTsKCWFueF91bnJlZ2lzdGVyX2FsdG1vZGVfcmVwbGljYShjdHgpOwkvKiA6MTU2 NiAqLwoJYW54X3VucmVnaXN0ZXJfcGFydG5lcl9yZXBsaWNhKGN0eCk7CS8qIDoxNTY3ICovCglw cl9pbmZvKCJUQzAqOiByZW1vdmUgc3RvcHMgd29yayAodG9vIGxhdGUsIGF1ZGl0ZWQpXG4iKTsK CWNhbmNlbF93b3JrX3N5bmMoJmN0eC0+d29yayk7CQkvKiA6MTU3MSAqLwoJcHJfaW5mbygiVEMw KjogcmVtb3ZlIGRvbmVcbiIpOwoJcmV0dXJuIDA7Cn0KCi8qIG9uZS1zaG90IHN0YWxsIGF0IHR5 cGVjX3VucmVnaXN0ZXJfYWx0bW9kZSAodGMwYik6IHBhcmsgdGhlIEZJUlNUIGNhbGxlciAqLwpz dGF0aWMgYm9vbCBvbmVzaG90X2FybWVkOwpzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gdGNfZG9u ZV93YWl0OwoKc3RhdGljIGludCBrcF91bnJlZ19wcmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpCnsKCXVuc2lnbmVkIGxvbmcgbG9uZyB0MDsKCglpZiAoIW9uZXNob3Rf YXJtZWQpCgkJcmV0dXJuIDA7CglvbmVzaG90X2FybWVkID0gZmFsc2U7Cglwcl9pbmZvKCJUQzBi OiByZW1vdmUgcGFya2VkIGF0IHR5cGVjX3VucmVnaXN0ZXJfYWx0bW9kZSAoYWRldj0lcHgpXG4i LAoJCSh2b2lkICopcmVncy0+ZGkpOwoJY29tcGxldGUoJnRjX2RvbmVfd2FpdCk7Cgl0MCA9IGt0 aW1lX2dldF9tb25vX2Zhc3RfbnMoKTsKCXdoaWxlIChrdGltZV9nZXRfbW9ub19mYXN0X25zKCkg LSB0MCA8IDQwMFVMTCAqIE5TRUNfUEVSX01TRUMpCgkJY3B1X3JlbGF4KCk7Cglwcl9pbmZvKCJU QzBiOiBwYXJrZWQgdW5yZWdpc3RlciByZXN1bWVzIChkZXZpY2UgbGlrZWx5IGZyZWVkKVxuIik7 CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSBzdHVzYjE2MHggcmVwbGljYSAoQ2Fz ZSA0KSAtLS0tLS0tLS0tLS0tLS0tICovCnN0cnVjdCB0eWNfc3R1IHsKCXN0cnVjdCB0eWNfdHlw ZWMgdHlwZWM7CglzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlycV90aHJlYWQ7CglzdHJ1Y3QgY29tcGxl dGlvbiBpcnFfcGFya2VkOwp9OwoKc3RhdGljIGludCBzdHVfaXJxX3RocmVhZCh2b2lkICpkYXRh KQp7CglzdHJ1Y3QgdHljX3N0dSAqY3R4ID0gZGF0YTsKCgl3aGlsZSAoIWt0aHJlYWRfc2hvdWxk X3N0b3AoKSkgewoJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CgkJc2No ZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDIwKSk7CgkJaWYgKGt0aHJlYWRfc2hvdWxk X3N0b3AoKSkKCQkJYnJlYWs7CgkJLyogc3R1c2IxNjB4X2RldGFjaCg6Mzg4LTM4OSkgY2hlY2st dGhlbi11c2UgKi8KCQlpZiAoY3R4LT50eXBlYy5wYXJ0bmVyKSB7CgkJCXByX2luZm8oIlRDMTog aXJxIHNhdyBwYXJ0bmVyPSVweCwgdW5yZWdpc3RlcmluZ1xuIiwKCQkJCWN0eC0+dHlwZWMucGFy dG5lcik7CgkJCXR5cGVjX3VucmVnaXN0ZXJfcGFydG5lcihjdHgtPnR5cGVjLnBhcnRuZXIpOwoJ CQljdHgtPnR5cGVjLnBhcnRuZXIgPSBOVUxMOwoJCX0KCX0KCXJldHVybiAwOwp9CgpzdGF0aWMg aW50IHN0dV9yZW1vdmVfdGhyZWFkKHZvaWQgKmRhdGEpCnsKCXN0cnVjdCB0eWNfc3R1ICpjdHgg PSBkYXRhOwoKCXByX2luZm8oIlRDMTogcmVtb3ZlIGVudGVycyAoZGV2bS1pcnEgd2luZG93IG9w ZW4pXG4iKTsKCS8qIHN0dXNiMTYweC5jOjgwNS04MDggKi8KCWlmIChjdHgtPnR5cGVjLnBhcnRu ZXIpIHsKCQlwcl9pbmZvKCJUQzE6IHJlbW92ZSBzYXcgcGFydG5lcj0lcHgsIHVucmVnaXN0ZXJp bmdcbiIsCgkJCWN0eC0+dHlwZWMucGFydG5lcik7CgkJdHlwZWNfdW5yZWdpc3Rlcl9wYXJ0bmVy KGN0eC0+dHlwZWMucGFydG5lcik7CgkJY3R4LT50eXBlYy5wYXJ0bmVyID0gTlVMTDsKCX0KCXBy X2luZm8oIlRDMTogcmVtb3ZlIHVucmVnaXN0ZXJzIHBvcnRcbiIpOwoJdHlwZWNfdW5yZWdpc3Rl cl9wb3J0KGN0eC0+dHlwZWMucG9ydCk7CgljdHgtPnR5cGVjLnBvcnQgPSBOVUxMOwoJcHJfaW5m bygiVEMxOiByZW1vdmUgZG9uZVxuIik7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0t LSBvcmNoZXN0cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0gKi8Kc3RhdGljIHN0cnVjdCB0eWNfYW54 ICpnX2FueDsKc3RhdGljIHN0cnVjdCB0eWNfc3R1ICpnX3N0dTsKCgpzdGF0aWMgc3RydWN0IGtw cm9iZSBrcF91bnJlZzsKCnN0YXRpYyBpbnQgdGNfc2V0dXBfY29tbW9uKHN0cnVjdCB0eWNfdHlw ZWMgKnQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKewoJc3RydWN0IHR5cGVjX2NhcGFiaWxpdHkg Y2FwID0geyB9OwoJc3RydWN0IHR5cGVjX3BhcnRuZXJfZGVzYyBwZGVzYyA9IHsgfTsKCXN0cnVj dCB0eXBlY19hbHRtb2RlX2Rlc2MgYWRlc2MgPSB7IH07CglpbnQgaTsKCgljYXAudHlwZSA9IFRZ UEVDX1BPUlRfRFJQOwoJY2FwLmRhdGEgPSBUWVBFQ19QT1JUX0RSRDsKCWNhcC5yZXZpc2lvbiA9 IFVTQl9UWVBFQ19SRVZfMV8yOwoJY2FwLmRyaXZlcl9kYXRhID0gdDsKCXQtPnBvcnQgPSB0eXBl Y19yZWdpc3Rlcl9wb3J0KHBhcmVudCwgJmNhcCk7CglpZiAoSVNfRVJSKHQtPnBvcnQpKSB7CgkJ cHJfZXJyKCJ0eXBlY19yZWdpc3Rlcl9wb3J0IGZhaWxlZDogJXBlXG4iLCB0LT5wb3J0KTsKCQly ZXR1cm4gUFRSX0VSUih0LT5wb3J0KTsKCX0KCXQtPnBhcnRuZXIgPSB0eXBlY19yZWdpc3Rlcl9w YXJ0bmVyKHQtPnBvcnQsICZwZGVzYyk7CglpZiAoSVNfRVJSKHQtPnBhcnRuZXIpKSB7CgkJcHJf ZXJyKCJ0eXBlY19yZWdpc3Rlcl9wYXJ0bmVyIGZhaWxlZDogJXBlXG4iLCB0LT5wYXJ0bmVyKTsK CQl0eXBlY191bnJlZ2lzdGVyX3BvcnQodC0+cG9ydCk7CgkJdC0+cG9ydCA9IE5VTEw7CgkJcmV0 dXJuIFBUUl9FUlIodC0+cGFydG5lcik7Cgl9Cglmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CgkJ YWRlc2Muc3ZpZCA9IDB4MTIzNCArIGk7CgkJYWRlc2MubW9kZSA9IGkgKyAxOwoJCWFkZXNjLnZk byA9IDB4ZGVhZGJlZWY7CgkJYWRlc2Mucm9sZXMgPSBUWVBFQ19QT1JUX0RSRDsKCQl0LT5hbW9k ZVtpXSA9IHR5cGVjX3BhcnRuZXJfcmVnaXN0ZXJfYWx0bW9kZSh0LT5wYXJ0bmVyLCAmYWRlc2Mp OwoJCWlmIChJU19FUlIodC0+YW1vZGVbaV0pKSB7CgkJCXByX2VycigicGFydG5lcl9yZWdpc3Rl cl9hbHRtb2RlWyVkXSBmYWlsZWQ6ICVwZVxuIiwKCQkJICAgICAgIGksIHQtPmFtb2RlW2ldKTsK CQkJdC0+YW1vZGVbaV0gPSBOVUxMOwoJCQlyZXR1cm4gLUVGQVVMVDsKCQl9Cgl9CglyZXR1cm4g MDsKfQoKc3RhdGljIGludCBydW5fdGMwKHZvaWQpCnsKCXN0cnVjdCBkZXZpY2UgKnJvb3RfZGV2 OwoJc3RydWN0IHRhc2tfc3RydWN0ICpybTsKCWludCByZXQ7CgoJcm9vdF9kZXYgPSByb290X2Rl dmljZV9yZWdpc3RlcigidHljcm9vdDAiKTsKCWlmIChJU19FUlIocm9vdF9kZXYpKQoJCXJldHVy biBQVFJfRVJSKHJvb3RfZGV2KTsKCglnX2FueCA9IGt6YWxsb2Moc2l6ZW9mKCpnX2FueCksIEdG UF9LRVJORUwpOwoJaWYgKCFnX2FueCkgewoJCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9vdF9k ZXYpOwoJCXJldHVybiAtRU5PTUVNOwoJfQoJbXV0ZXhfaW5pdCgmZ19hbngtPmxvY2spOwoJaW5p dF9jb21wbGV0aW9uKCZnX2FueC0+d29ya19pbl91c2UpOwoJSU5JVF9XT1JLKCZnX2FueC0+d29y aywgYW54X3dvcmtfZnVuYyk7CglnX2FueC0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtx dWV1ZSgidHljYW54d3EiKTsKCXJldCA9IHRjX3NldHVwX2NvbW1vbigmZ19hbngtPnR5cGVjLCBy b290X2Rldik7CglpZiAocmV0KQoJCWdvdG8gb3V0OwoKCXJldCA9IHJlZ2lzdGVyX2twcm9iZSgm a3BfdXNlKTsKCWlmIChyZXQpIHsKCQlwcl9lcnIoIlRDMDoga3Byb2JlKHVzZSkgZmFpbGVkICVk XG4iLCByZXQpOwoJCWdvdG8gb3V0OwoJfQoJZ19hbngwID0gZ19hbng7CglhbnhfdXNlX21vZGUg PSB0cnVlOwoKCS8qIDEuIHF1ZXVlIHdvcms7IGl0IHBhcmtzIGluc2lkZSBrcHJvYmUgYXQgaXRz IGZpcnN0IHVzZSwgaGF2aW5nCgkgKiAgICBhbHJlYWR5IHJlYWQgYW1vZGVbMF0gKGF1ZGl0ZWQg Y2hlY2stdGhlbi11c2UgZ2FwKS4gKi8KCXF1ZXVlX3dvcmsoZ19hbngtPndxLCAmZ19hbngtPndv cmspOwoJLyogMi4gd2FpdCB1bnRpbCBwYXJrZWQgKi8KCWlmICghd2FpdF9mb3JfY29tcGxldGlv bl90aW1lb3V0KCZnX2FueC0+d29ya19pbl91c2UsIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpKSB7 CgkJcHJfZXJyKCJUQzA6IHdvcmsgbmV2ZXIgcGFya2VkOyBhYm9ydFxuIik7CgkJZ290byBvdXQ7 Cgl9CgkvKiAzLiByZW1vdmUgdGhyZWFkIGZyZWVzIGFsdG1vZGVzK3BhcnRuZXIgdW5kZXIgdGhl IHBhcmtlZCB3b3JrICovCglybSA9IGt0aHJlYWRfcnVuKGFueF9yZW1vdmVfdGhyZWFkLCBnX2Fu eCwgInR5Yy1hbnhybSIpOwoJaWYgKCFJU19FUlIocm0pKQoJCWt0aHJlYWRfc3RvcChybSk7CS8q IGpvaW5zOiByZW1vdmUgY29tcGxldGVzIGluc2lkZSB3aW5kb3cgKi8KCS8qIDQuIHdvcmsgYXV0 by1yZXN1bWVzIGFmdGVyIDQwMG1zIC0+IFVBRiAqLwoJcHJfaW5mbygiVEMwOiBSRVNVTFQgc2Vl IEtBU0FOIHJlcG9ydHMgYWJvdmVcbiIpOwoJbXNsZWVwKDMwMCk7CglhbnhfdW5yZWdpc3Rlcl9h bHRtb2RlX3JlcGxpY2EoZ19hbngpOwoJYW54X3VucmVnaXN0ZXJfcGFydG5lcl9yZXBsaWNhKGdf YW54KTsKb3V0OgoJdW5yZWdpc3Rlcl9rcHJvYmUoJmtwX3VzZSk7CglnX2FueDAgPSBOVUxMOwoJ aWYgKGdfYW54KSB7CgkJaWYgKGdfYW54LT53cSkKCQkJZGVzdHJveV93b3JrcXVldWUoZ19hbngt PndxKTsKCQlrZnJlZShnX2FueCk7CgkJZ19hbnggPSBOVUxMOwoJfQoJcm9vdF9kZXZpY2VfdW5y ZWdpc3Rlcihyb290X2Rldik7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBydW5fdGMwYih2b2lk KQp7CglzdHJ1Y3QgZGV2aWNlICpyb290X2RldjsKCXN0cnVjdCB0YXNrX3N0cnVjdCAqcm07Cglp bnQgcmV0OwoKCXJvb3RfZGV2ID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoInR5Y3Jvb3QwYiIpOwoJ aWYgKElTX0VSUihyb290X2RldikpCgkJcmV0dXJuIFBUUl9FUlIocm9vdF9kZXYpOwoKCWdfYW54 ID0ga3phbGxvYyhzaXplb2YoKmdfYW54KSwgR0ZQX0tFUk5FTCk7CglpZiAoIWdfYW54KSB7CgkJ cm9vdF9kZXZpY2VfdW5yZWdpc3Rlcihyb290X2Rldik7CgkJcmV0dXJuIC1FTk9NRU07Cgl9Cglt dXRleF9pbml0KCZnX2FueC0+bG9jayk7Cglpbml0X2NvbXBsZXRpb24oJnRjX2RvbmVfd2FpdCk7 CglJTklUX1dPUksoJmdfYW54LT53b3JrLCBhbnhfd29ya19mdW5jKTsKCWdfYW54LT53cSA9IGNy ZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJ0eWNhbnh3cWIiKTsKCXJldCA9IHRjX3NldHVw X2NvbW1vbigmZ19hbngtPnR5cGVjLCByb290X2Rldik7CglpZiAocmV0KQoJCWdvdG8gb3V0OwoK CWtwX3VucmVnID0gKHN0cnVjdCBrcHJvYmUpewoJCS5zeW1ib2xfbmFtZSA9ICJ0eXBlY191bnJl Z2lzdGVyX2FsdG1vZGUiLAoJCS5wcmVfaGFuZGxlciA9IGtwX3VucmVnX3ByZSwKCX07CglyZXQg PSByZWdpc3Rlcl9rcHJvYmUoJmtwX3VucmVnKTsKCWlmIChyZXQpIHsKCQlwcl9lcnIoIlRDMGI6 IGtwcm9iZSBmYWlsZWQgJWRcbiIsIHJldCk7CgkJZ290byBvdXQ7Cgl9CgoJLyogMS4gcmVtb3Zl IHRocmVhZCBwYXJrcyBpbnNpZGUga3Byb2JlIEJFRk9SRSBpdHMgdW5yZWdpc3RlciAqLwoJb25l c2hvdF9hcm1lZCA9IHRydWU7CglybSA9IGt0aHJlYWRfcnVuKGFueF9yZW1vdmVfdGhyZWFkLCBn X2FueCwgInR5Yy1hbnhybTBiIik7CglpZiAoSVNfRVJSKHJtKSkgewoJCXByX2VycigiVEMwYjog a3RocmVhZCBmYWlsZWRcbiIpOwoJCWdvdG8gb3V0OwoJfQoJLyogMi4gd2FpdCBwYXJrZWQgKi8K CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ0Y19kb25lX3dhaXQsIG1zZWNzX3Rv X2ppZmZpZXMoMjAwMCkpKSB7CgkJcHJfZXJyKCJUQzBiOiByZW1vdmUgbmV2ZXIgcGFya2VkXG4i KTsKCQlrdGhyZWFkX3N0b3Aocm0pOwoJCWdvdG8gb3V0OwoJfQoJLyogMy4gbm93IGxldCB0aGUg d29yayBydW46IGl0IHVucmVnaXN0ZXJzIHRoZSBzYW1lIGFsdG1vZGVzK3BhcnRuZXIKCSAqICAg IChkZXZpY2UgZnJlZWQpIHdoaWxlIHJlbW92ZSBpcyBwYXJrZWQgbWlkLXVucmVnaXN0ZXIgKi8K CXF1ZXVlX3dvcmsoZ19hbngtPndxLCAmZ19hbngtPndvcmspOwoJbXNsZWVwKDEwMCk7CgkvKiA0 LiByZW1vdmUgcmVzdW1lcyAtPiB1bnJlZ2lzdGVyIG9uIGZyZWVkIGRldmljZSAqLwoJcHJfaW5m bygiVEMwYjogcmVtb3ZlIHJlc3VtZXMgYXQgfjMwMG1zXG4iKTsKCW1zbGVlcCg3MDApOwkJCS8q IGxldCBldmVyeXRoaW5nIHNldHRsZSAqLwoJY2FuY2VsX3dvcmtfc3luYygmZ19hbngtPndvcmsp OwoJcHJfaW5mbygiVEMwYjogUkVTVUxUIHNlZSBLQVNBTiByZXBvcnRzIGFib3ZlXG4iKTsKb3V0 OgoJdW5yZWdpc3Rlcl9rcHJvYmUoJmtwX3VucmVnKTsKCWlmIChnX2FueCkgewoJCWlmIChnX2Fu eC0+d3EpCgkJCWRlc3Ryb3lfd29ya3F1ZXVlKGdfYW54LT53cSk7CgkJa2ZyZWUoZ19hbngpOwoJ CWdfYW54ID0gTlVMTDsKCX0KCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9vdF9kZXYpOwoJcmV0 dXJuIDA7Cn0KCnN0YXRpYyBpbnQga3BfcGFya19wcmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpCnsKCXVuc2lnbmVkIGxvbmcgbG9uZyB0MDsKCglpZiAoIW9uZXNob3Rf YXJtZWQpCgkJcmV0dXJuIDA7CglvbmVzaG90X2FybWVkID0gZmFsc2U7Cglwcl9pbmZvKCJUQzE6 IGlycSB0aHJlYWQgcGFya2VkIGF0IHR5cGVjX3VucmVnaXN0ZXJfcGFydG5lciAocGFydG5lcj0l cHgpXG4iLAoJCSh2b2lkICopcmVncy0+ZGkpOwoJY29tcGxldGUoJnRjX2RvbmVfd2FpdCk7Cgl0 MCA9IGt0aW1lX2dldF9tb25vX2Zhc3RfbnMoKTsKCXdoaWxlIChrdGltZV9nZXRfbW9ub19mYXN0 X25zKCkgLSB0MCA8IDQwMFVMTCAqIE5TRUNfUEVSX01TRUMpCgkJY3B1X3JlbGF4KCk7Cglwcl9p bmZvKCJUQzE6IGlycSByZXN1bWVzIHVucmVnaXN0ZXIgKHBhcnRuZXIgbGlrZWx5IGZyZWVkKVxu Iik7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBydW5fdGMxKHZvaWQpCnsKCXN0cnVjdCBkZXZp Y2UgKnJvb3RfZGV2OwoJaW50IHJldDsKCglyb290X2RldiA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVy KCJ0eWNyb290MSIpOwoJaWYgKElTX0VSUihyb290X2RldikpCgkJcmV0dXJuIFBUUl9FUlIocm9v dF9kZXYpOwoKCWdfc3R1ID0ga3phbGxvYyhzaXplb2YoKmdfc3R1KSwgR0ZQX0tFUk5FTCk7Cglp ZiAoIWdfc3R1KSB7CgkJcm9vdF9kZXZpY2VfdW5yZWdpc3Rlcihyb290X2Rldik7CgkJcmV0dXJu IC1FTk9NRU07Cgl9Cglpbml0X2NvbXBsZXRpb24oJnRjX2RvbmVfd2FpdCk7Cglpbml0X2NvbXBs ZXRpb24oJmdfc3R1LT5pcnFfcGFya2VkKTsKCXJldCA9IHRjX3NldHVwX2NvbW1vbigmZ19zdHUt PnR5cGVjLCByb290X2Rldik7CglpZiAocmV0KQoJCWdvdG8gb3V0OwoKCWtwX3VucmVnID0gKHN0 cnVjdCBrcHJvYmUpewoJCS5zeW1ib2xfbmFtZSA9ICJ0eXBlY191bnJlZ2lzdGVyX3BhcnRuZXIi LAoJCS5wcmVfaGFuZGxlciA9IGtwX3BhcmtfcHJlLAoJfTsKCXJldCA9IHJlZ2lzdGVyX2twcm9i ZSgma3BfdW5yZWcpOwoJaWYgKHJldCkgewoJCXByX2VycigiVEMxOiBrcHJvYmUgZmFpbGVkICVk XG4iLCByZXQpOwoJCWdvdG8gb3V0OwoJfQoKCS8qIDEuIGlycSB0aHJlYWQgcGFya3MgYXQgaXRz IHVucmVnaXN0ZXIgKHBhcnRuZXIgc3RpbGwgYWxpdmUpICovCglvbmVzaG90X2FybWVkID0gdHJ1 ZTsKCWdfc3R1LT5pcnFfdGhyZWFkID0ga3RocmVhZF9ydW4oc3R1X2lycV90aHJlYWQsIGdfc3R1 LCAidHljLXN0dWlycSIpOwoJaWYgKElTX0VSUihnX3N0dS0+aXJxX3RocmVhZCkpIHsKCQlnX3N0 dS0+aXJxX3RocmVhZCA9IE5VTEw7CgkJZ290byBvdXQ7Cgl9CglpZiAoIXdhaXRfZm9yX2NvbXBs ZXRpb25fdGltZW91dCgmdGNfZG9uZV93YWl0LCBtc2Vjc190b19qaWZmaWVzKDIwMDApKSkgewoJ CXByX2VycigiVEMxOiBpcnEgbmV2ZXIgcGFya2VkXG4iKTsKCQlnb3RvIG91dDsKCX0KCS8qIDIu IHJlbW92ZSBzZXF1ZW5jZSBpbmxpbmUgb24gdGhlIGluc21vZCB0aHJlYWQgKHBhcnRuZXIgc3Rp bGwKCSAqICAgIGFsaXZlIC0+IHVucmVnaXN0ZXIgZnJlZXMgaXQsIHRoZW4gcG9ydCk7IHBhcmtl ZCBpcnEgdGhyZWFkIGlzCgkgKiAgICBvbiBhbm90aGVyIENQVSAqLwoJc3R1X3JlbW92ZV90aHJl YWQoZ19zdHUpOwoJLyogMy4gaXJxIHJlc3VtZXMgLT4gdW5yZWdpc3RlciBvbiBmcmVlZCBwYXJ0 bmVyICovCglwcl9pbmZvKCJUQzE6IFJFU1VMVCBzZWUgS0FTQU4gcmVwb3J0cyBhYm92ZVxuIik7 Cgltc2xlZXAoMzAwKTsKb3V0OgoJdW5yZWdpc3Rlcl9rcHJvYmUoJmtwX3VucmVnKTsKCWlmIChn X3N0dSkgewoJCWlmIChnX3N0dS0+aXJxX3RocmVhZCkKCQkJa3RocmVhZF9zdG9wKGdfc3R1LT5p cnFfdGhyZWFkKTsKCQlrZnJlZShnX3N0dSk7CgkJZ19zdHUgPSBOVUxMOwoJfQoJcm9vdF9kZXZp Y2VfdW5yZWdpc3Rlcihyb290X2Rldik7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0t LSB0YzI6IENhc2UgMS1CIGRlYWRsb2NrIHN0cnVjdHVyZSByZXBsaWNhIC0tLS0tLS0tLS0tLS0t LS0KICogRmFpdGhmdWwgc3RydWN0dXJlIHJlcGxpY2Egb2YgdGhlIGF1ZGl0ZWQgVUNTSSB1bmJp bmQgZGVhZGxvY2s6CiAqICAgLSB1bmJpbmQgdGhyZWFkIGhvbGRzICJjb24tPmxvY2siIGFuZCBj YWxscyBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoKQogKiAgICAgKHVjc2kuYzoyMDAzLTIwMDQg LT4gbW9kZV9zZWxlY3Rpb24uYzoyNzcpOwogKiAgIC0gdGhlIG1vZGUtc2VsZWN0aW9uIHdvcmss IGluc2lkZSBpdHMgYWN0aXZhdGUgd2luZG93LCBtdXN0IHRha2UgdGhlCiAqICAgICBzYW1lIGxv Y2sgdmlhIHRoZSB1Y3NpX2Nvbl9tdXRleF9sb2NrKCkgdHJ5bG9jayBsb29wIHdob3NlIGV4aXQK ICogICAgIGNvbmRpdGlvbiBpcyB0aGUgU1RBTEUgY29uLT5zdGF0dXMgQ09OTkVDVEVEIHNuYXBz aG90CiAqICAgICAodWNzaS5jOjIyNzItMjI3NzsgdWNzaS5oOjQ1NyByZWFkcyAtPnN0YXR1cywg bmV2ZXIgcmVmcmVzaGVkIG9uIHRoZQogKiAgICAgdW5iaW5kIHBhdGgpLgogKiBFeHBlY3RlZCBy ZXN1bHQ6IGJvdGggc2lkZXMgcGFyayBmb3JldmVyOyB0aGUgVk0gaGFuZ3MgdW50aWwgdGltZW91 dC4KICovCnN0cnVjdCB0eWNfZGVhZCB7CglzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIGNvbi0+bG9j ayBhbmFsb2cgKi8KCWJvb2wgY29ubmVjdGVkX3NuYXBzaG90OwkvKiBjb24tPnN0YXR1cyBDT05O RUNURUQgYml0IChzdGFsZSkgKi8KCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKCXN0cnVjdCBj b21wbGV0aW9uIGluX2xvb3A7CS8qIGhhbmRzaGFrZTogd29yayBpbnNpZGUgdHJ5bG9jayBsb29w ICovCglib29sIGN0bDsJCQkvKiBjdGw9dHJ1ZTogbG9jayBmaXJzdCwgcXVldWUgbGF0ZXIgKi8K fTsKCnN0YXRpYyB2b2lkIGRlYWRfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCnsKCXN0 cnVjdCB0eWNfZGVhZCAqZCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgdHljX2RlYWQsIHdvcmsu d29yayk7Cglib29sIGxvY2tlZCA9IGZhbHNlOwoKCXByX2luZm8oIlRDMjogd29yayBlbnRlcmVk IGFjdGl2YXRlIHdpbmRvdywgbmVlZHMgY29uLT5sb2NrXG4iKTsKCS8qIGZpcnN0IHRyeWxvY2sg ZmFpbHM6IHVuYmluZCBhbHJlYWR5IGhvbGRzIHRoZSBsb2NrICovCglsb2NrZWQgPSBtdXRleF90 cnlsb2NrKCZkLT5sb2NrKSAhPSAwOwoJaWYgKCFsb2NrZWQpCgkJY29tcGxldGUoJmQtPmluX2xv b3ApOwoJLyogdWNzaV9jb25fbXV0ZXhfbG9jaygpIGxvb3AsIHVjc2kuYzoyMjcyLTIyNzcsIHZl cmJhdGltIHNoYXBlICovCgl3aGlsZSAoZC0+Y29ubmVjdGVkX3NuYXBzaG90ICYmICFsb2NrZWQp IHsKCQlsb2NrZWQgPSBtdXRleF90cnlsb2NrKCZkLT5sb2NrKSAhPSAwOwoJCWlmIChkLT5jb25u ZWN0ZWRfc25hcHNob3QgJiYgIWxvY2tlZCkgewoJCQltc2xlZXAoMjApOwoJCX0KCX0KCWlmIChs b2NrZWQpCgkJbXV0ZXhfdW5sb2NrKCZkLT5sb2NrKTsKCXByX2luZm8oIlRDMjogd29yayBmaW5p c2hlZFxuIik7Cn0KCi8qIGF1ZGl0ZWQgaW50ZXJsZWF2aW5nOiB3b3JrIGVudGVycyB0aGUgbG9v cCBmaXJzdCwgdW5iaW5kIHRoZW4gdGFrZXMgdGhlCiAqIGxvY2sgYW5kIGNhbmNlbHMgLS0gZXhw ZWN0ZWQgcGVybWFuZW50IGhhbmcgKFZNIGtpbGxlZCBieSB0aW1lb3V0KS4gKi8Kc3RhdGljIGlu dCBydW5fdGMyKHZvaWQpCnsKCXN0cnVjdCB0eWNfZGVhZCAqZDsKCglkID0ga3phbGxvYyhzaXpl b2YoKmQpLCBHRlBfS0VSTkVMKTsKCWlmICghZCkKCQlyZXR1cm4gLUVOT01FTTsKCW11dGV4X2lu aXQoJmQtPmxvY2spOwoJaW5pdF9jb21wbGV0aW9uKCZkLT5pbl9sb29wKTsKCWQtPmNvbm5lY3Rl ZF9zbmFwc2hvdCA9IHRydWU7CS8qIGNhYmxlIGNvbm5lY3RlZCBzbmFwc2hvdCAqLwoJZC0+Y3Rs ID0gZmFsc2U7CglJTklUX0RFTEFZRURfV09SSygmZC0+d29yaywgZGVhZF93b3JrX2ZuKTsKCS8q IGF1ZGl0ZWQgb3JkZXI6IHVuYmluZCBob2xkcyBjb24tPmxvY2sgRklSU1QsIHdvcmsgc3RhcnRz IGFuZAoJICogZmFpbHMgaXRzIHRyeWxvY2tzIHdoaWxlIHRoZSBsb2NrIHN0YXlzIGhlbGQgKi8K CW11dGV4X2xvY2soJmQtPmxvY2spOwoJcHJfaW5mbygiVEMyOiB1bmJpbmQgaG9sZHMgY29uLT5s b2NrOyBzY2hlZHVsaW5nIHdvcmtcbiIpOwoJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkLT53b3Jr LCAwKTsKCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkLT5pbl9sb29wLCBtc2Vj c190b19qaWZmaWVzKDIwMDApKSkgewoJCXByX2VycigiVEMyOiB3b3JrIG5ldmVyIGVudGVyZWQg bG9vcFxuIik7CgkJbXV0ZXhfdW5sb2NrKCZkLT5sb2NrKTsKCQlrZnJlZShkKTsKCQlyZXR1cm4g LUVUSU1FRE9VVDsKCX0KCXByX2luZm8oIlRDMjogd29yayBsb29waW5nIG9uIGZhaWxlZCB0cnls b2NrczsgdW5iaW5kIGNhbGxzIGNhbmNlbCAoZXhwZWN0IGhhbmcpXG4iKTsKCWNhbmNlbF9kZWxh eWVkX3dvcmtfc3luYygmZC0+d29yayk7CS8qIGF1ZGl0ZWQgaGFuZyAqLwoJcHJfaW5mbygiVEMy OiBjYW5jZWwgcmV0dXJuZWQgKHNob3VsZCBuZXZlciBwcmludClcbiIpOwoJbXV0ZXhfdW5sb2Nr KCZkLT5sb2NrKTsKCWtmcmVlKGQpOwoJcmV0dXJuIDA7Cn0KCi8qIGNvbnRyb2w6IHVuYmluZCB0 YWtlcyB0aGUgbG9jayBCRUZPUkUgdGhlIHdvcmsgZXZlciBydW5zOyBjYW5jZWwoKSBraWxscwog KiB0aGUgcGVuZGluZyB0aW1lciAtLSBubyBkZWFkbG9jayAoYXVkaXRlZCBlc2NhcGUtYnJhbmNo IDEpLiAqLwpzdGF0aWMgaW50IHJ1bl90YzJjdGwodm9pZCkKewoJc3RydWN0IHR5Y19kZWFkICpk OwoKCWQgPSBremFsbG9jKHNpemVvZigqZCksIEdGUF9LRVJORUwpOwoJaWYgKCFkKQoJCXJldHVy biAtRU5PTUVNOwoJbXV0ZXhfaW5pdCgmZC0+bG9jayk7Cglpbml0X2NvbXBsZXRpb24oJmQtPmlu X2xvb3ApOwoJZC0+Y29ubmVjdGVkX3NuYXBzaG90ID0gdHJ1ZTsKCWQtPmN0bCA9IHRydWU7CglJ TklUX0RFTEFZRURfV09SSygmZC0+d29yaywgZGVhZF93b3JrX2ZuKTsKCgltdXRleF9sb2NrKCZk LT5sb2NrKTsKCXByX2luZm8oIlRDMkNUTDogdW5iaW5kIGhvbGRzIGxvY2sgZmlyc3QsIHF1ZXVl aW5nIHdvcmtcbiIpOwoJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkLT53b3JrLCBtc2Vjc190b19q aWZmaWVzKDUwKSk7CgljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmQtPndvcmspOwkvKiBwZW5k aW5nIC0+IGtpbGxlZCAqLwoJcHJfaW5mbygiVEMyQ1RMOiBjYW5jZWwgcmV0dXJuZWQgKGV4cGVj dGVkLCBwZW5kaW5nIGJyYW5jaClcbiIpOwoJbXV0ZXhfdW5sb2NrKCZkLT5sb2NrKTsKCW1zbGVl cCgyMDApOwoJa2ZyZWUoZCk7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSB0Y25h dDogbmF0dXJhbCBoYW1tZXJpbmcgKG5vIHByb2JlcykgLS0tLS0tLS0tLS0tLS0tLSAqLwpzdGF0 aWMgaW50IHRjbmF0X3JvdW5kcyA9IDEwMDA7Cm1vZHVsZV9wYXJhbSh0Y25hdF9yb3VuZHMsIGlu dCwgMDQ0NCk7CgpzdGF0aWMgaW50IHJ1bl90Y25hdCh2b2lkKQp7CglzdHJ1Y3QgZGV2aWNlICpy b290X2RldjsKCWludCByb3VuZDsKCglmb3IgKHJvdW5kID0gMDsgcm91bmQgPCB0Y25hdF9yb3Vu ZHM7IHJvdW5kKyspIHsKCQlyb290X2RldiA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKCJ0eWNyb290 bmF0Iik7CgkJaWYgKElTX0VSUihyb290X2RldikpCgkJCXJldHVybiBQVFJfRVJSKHJvb3RfZGV2 KTsKCQlnX2FueCA9IGt6YWxsb2Moc2l6ZW9mKCpnX2FueCksIEdGUF9LRVJORUwpOwoJCWlmICgh Z19hbngpIHsKCQkJcm9vdF9kZXZpY2VfdW5yZWdpc3Rlcihyb290X2Rldik7CgkJCXJldHVybiAt RU5PTUVNOwoJCX0KCQltdXRleF9pbml0KCZnX2FueC0+bG9jayk7CgkJSU5JVF9XT1JLKCZnX2Fu eC0+d29yaywgYW54X3dvcmtfZnVuYyk7CgkJZ19hbngtPndxID0gY3JlYXRlX3NpbmdsZXRocmVh ZF93b3JrcXVldWUoInR5Y25hdHdxIik7CgkJaWYgKHRjX3NldHVwX2NvbW1vbigmZ19hbngtPnR5 cGVjLCByb290X2RldikpIHsKCQkJZGVzdHJveV93b3JrcXVldWUoZ19hbngtPndxKTsKCQkJa2Zy ZWUoZ19hbngpOwoJCQlnX2FueCA9IE5VTEw7CgkJCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9v dF9kZXYpOwoJCQlyZXR1cm4gLUVGQVVMVDsKCQl9CgkJLyogbmF0dXJhbCByYWNlOiBxdWV1ZSB3 b3JrLCB0aGVuIGltbWVkaWF0ZWx5IHJlbW92ZSAqLwoJCXF1ZXVlX3dvcmsoZ19hbngtPndxLCAm Z19hbngtPndvcmspOwoJCWFueF9yZW1vdmVfdGhyZWFkKGdfYW54KTsKCQljYW5jZWxfd29ya19z eW5jKCZnX2FueC0+d29yayk7CgkJZGVzdHJveV93b3JrcXVldWUoZ19hbngtPndxKTsKCQlrZnJl ZShnX2FueCk7CgkJZ19hbnggPSBOVUxMOwoJCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9vdF9k ZXYpOwoJCWlmICghKHJvdW5kICUgMTAwKSkKCQkJcHJfaW5mbygiVENOQVQ6IHJvdW5kICVkIGRv bmVcbiIsIHJvdW5kKTsKCX0KCXByX2luZm8oIlRDTkFUOiAlZCByb3VuZHMgZG9uZSAoY2hlY2sg ZG1lc2cgZm9yIEtBU0FOIHJlcG9ydHMpXG4iLAoJCXRjbmF0X3JvdW5kcyk7CglyZXR1cm4gMDsK fQoKLyogLS0tLS0tLS0tLS0tLS0tLSBtb2R1bGUgcGFyYW1zICYgZW50cnkgLS0tLS0tLS0tLS0t LS0tLSAqLwpzdGF0aWMgY2hhciAqYWN0aW9uID0gInN0YXR1cyI7Cm1vZHVsZV9wYXJhbShhY3Rp b24sIGNoYXJwLCAwNDQ0KTsKTU9EVUxFX1BBUk1fREVTQyhhY3Rpb24sICJ0YzB8dGMwYnx0YzF8 dGMyfHRjbmF0fHN0YXR1cyIpOwoKc3RhdGljIGludCB0eWNfcnVuX2FjdGlvbih2b2lkKQp7Cglp ZiAoIXN0cmNtcChhY3Rpb24sICJ0YzAiKSkKCQlyZXR1cm4gcnVuX3RjMCgpOwoJaWYgKCFzdHJj bXAoYWN0aW9uLCAidGMwYiIpKQoJCXJldHVybiBydW5fdGMwYigpOwoJaWYgKCFzdHJjbXAoYWN0 aW9uLCAidGMxIikpCgkJcmV0dXJuIHJ1bl90YzEoKTsKCWlmICghc3RyY21wKGFjdGlvbiwgInRj MiIpKQoJCXJldHVybiBydW5fdGMyKCk7CglpZiAoIXN0cmNtcChhY3Rpb24sICJ0YzJjdGwiKSkK CQlyZXR1cm4gcnVuX3RjMmN0bCgpOwoJaWYgKCFzdHJjbXAoYWN0aW9uLCAidGNuYXQiKSkKCQly ZXR1cm4gcnVuX3RjbmF0KCk7Cglwcl9pbmZvKCJubyBhY3Rpb24sIGRvbmVcbiIpOwoJcmV0dXJu IDA7Cn0KCnN0YXRpYyBpbnQgX19pbml0IHR5Y19pbml0KHZvaWQpCnsKCXByX2luZm8oImFjdGlv bj0lc1xuIiwgYWN0aW9uKTsKCXJldHVybiB0eWNfcnVuX2FjdGlvbigpOwp9Cm1vZHVsZV9pbml0 KHR5Y19pbml0KTsKCnN0YXRpYyB2b2lkIF9fZXhpdCB0eWNfZXhpdCh2b2lkKQp7Cglwcl9pbmZv KCJleGl0XG4iKTsKfQptb2R1bGVfZXhpdCh0eWNfZXhpdCk7Ck1PRFVMRV9MSUNFTlNFKCJHUEwi KTsK ------=_Part_415415_3790571.1793797218529--