From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EA88BC433EF for ; Tue, 28 Dec 2021 10:22:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Message-ID:Mime-Version:References: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: List-Owner; bh=cqFyGTtOkPv63VLxOUrqQdx62yrXCHOrwMithBqb6vQ=; b=VhZ9ClAXuBim6w 7OtDch6mWzZ5hagkqKZwoFVmjTp5pvvRO0bn/So4OYoyHKFZ+IILn7xPbJfxFu/j7hUX4nzjYTb0n juVIQgkrYQVFtewUbyEgwO7u1Eoo6oU8Mlz52pfWMsvq2ka59BQj4I81Ns59Uj/fc9RVSVRIzVhcW ifkHpCE3U9pIm8BTFEVSIkSeIIW33PtVjQiPrlOOZv7gWSIOsoO4cAfsBLzFy/bzIMKcfx7SiNz+U FPFttia/ZoeuIkgyXGmWkUkxC69MCiHV27W0WrlTORgrKWWjJRJF16e1DlPOul+vN6v8YvSuQtIfy Gcf5p/gR9Q9Wwd3J15Xg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n29dC-000fOw-EQ; Tue, 28 Dec 2021 10:22:58 +0000 Received: from regular1.263xmail.com ([211.150.70.203]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n29cx-000fKm-Vv; Tue, 28 Dec 2021 10:22:48 +0000 Received: from localhost (unknown [192.168.167.13]) by regular1.263xmail.com (Postfix) with ESMTP id 015B7776; Tue, 28 Dec 2021 18:22:37 +0800 (CST) X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-ADDR-CHECKED4: 1 X-SKE-CHECKED: 1 X-ABS-CHECKED: 1 X-ANTISPAM-LEVEL: 2 Received: from hp1216 (unknown [58.22.7.114]) by smtp.263.net (postfix) whith ESMTP id P24607T140177624250112S1640686955673855_; Tue, 28 Dec 2021 18:22:36 +0800 (CST) X-IP-DOMAINF: 1 X-RL-SENDER: zyf@rock-chips.com X-SENDER: zyf@rock-chips.com X-LOGIN-NAME: zyf@rock-chips.com X-FST-TO: jbx6244@gmail.com X-RCPT-COUNT: 15 X-LOCAL-RCPT-COUNT: 3 X-MUTI-DOMAIN-COUNT: 0 X-SENDER-IP: 58.22.7.114 X-ATTACHMENT-NUM: 0 X-UNIQUE-TAG: <2a0cbaf25a66c9c9f2f72f7e1f42581e> X-System-Flag: 0 Date: Tue, 28 Dec 2021 18:22:36 +0800 Organization: =?UTF-8?B?55Ge6Iqv5b6u55S15a2Q?= From: =?UTF-8?B?6LW15Luq5bOw?= To: "Johan Jonker" , =?UTF-8?B?SGVpa29TdMO8Ym5lcg==?= Cc: robh+dt , kishon , "Vinod Koul" , "Philipp Zabel" , "Lee Jones" , Kever.Yang , =?UTF-8?B?6ZmI5Lqu?= , linux-phy , linux-arm-kernel , linux-rockchip , devicetree , linux-kernel Subject: Re: Re: [RFC PATCH v6 3/4] phy: rockchip: add naneng multi phy for rk3568 References: <20211222213032.7678-1-jbx6244@gmail.com>, <20211222213032.7678-4-jbx6244@gmail.com>, <983bfd82-87e6-b5ca-1620-917be6098625@gmail.com> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.23.114[cn] Mime-Version: 1.0 Message-ID: <2021122818212386307531@rock-chips.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211228_022244_691615_F0EF2B7D X-CRM114-Status: GOOD ( 19.52 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org SGnvvIxKb2hhbgoKCgoKClRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHN1Ym1pdHRpbmcgdGhlIGNo YW5nZXMsCgoKCmJ1dCBJIHRoaW5rIHZlcnNpb24gNiBpcyBjb21wbGljYXRlZCBhYm91dCBhZGQK CgoKYSBwaHlfaWQuIFRoZSB0aHJlZSBjb21ibyBwaHlzIGFyZSBleGFjdGx5IHRoZSBzYW1lLAoK CgpUaGV5IGhhdmUgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzIHdpdGggdGhlIHNhbWUKCgoKZGVmaW5p dGlvbnMsIGluY2x1ZGluZyBHUkYgY29uZmlndXJhdGlvbiwgc28gdGhhdAoKCgpQSFkgZHJpdmUg Y2FuIGJlIHNpbXBsZSwgYW5kIGRpZmZlcmVudGlhdGVkIHBhcnRzCgoKCmNhbiBiZSBjb25maWd1 cmVkIHRocm91Z2ggRFRTLgoKCgpUaGUgdmVyc2lvbiA1IGRyaXZlciBpcyBlYXN5IHRvIHN1cHBv cnRzIFJLMzU4OCwgYW5kCgoKCnJlbWFpbnMgY29tcGF0aWJsZSB3aXRoIG91ciBSSzM1NjggbWFz cy1wcm9kdWNlZCBkZXZpY2VzLgoKCgoKCkkgd2lsbCBwcm9kdWNlIGEgdmVyc2lvbiA3IGJhc2Vk IG9uIHRoZSB2ZXJzaW9uIDUuCgoKClRoZSBjaGFuZ2VzIGFyZSBhcyBmb2xsb3dzOgoKCgoKCjEu IFRoZSBjdXJyZW50bHkgY29udHJvdmVyc2lhbCBEVFMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBk ZWxldGVkLgoKCgpUaGVzZSBhcmUgZXh0ZW5kZWQgYXBwbGljYXRpb25zLCBhbmQgc3VwcG9ydCB3 aWxsIG5vdCBiZSBjb25zaWRlcmVkIGluIHRoaXMKCgoKdmVyc2lvbi4KCgoKcm9ja2NoaXAsZGlz LXUzb3RnMC1wb3J0CgoKCnJvY2tjaGlwLGRpcy11M290ZzEtcG9ydAoKCgpyb2NrY2hpcCxzZ21p aS1tYWMtc2VsCgoKCgoKMi4gcmVuYW1lIFBIWSBSRUdzCgoKClRoZSByZWdpc3RlciBkZWZpbml0 aW9ucyBmb3IgcmszNTY4IGFuZCByazM1ODggcGh5cyBhcmUgdGhlIHNhbWXvvIxhbmQgcmVtb3Zl IHByZWZpeC4KCgoKI2RlZmluZSBQSFlSRUc1CQkJMHgxNAoKCgojZGVmaW5lIFBIWVJFRzVfUExM X0RJVl9NQVNLCUdFTk1BU0soNywgNikKCgoKI2RlZmluZSBQSFlSRUc1X1BMTF9ESVZfU0hJRlQJ NgoKCgouLi4KCgoKCgozLiBTb21lIGRlc2NyaXB0aW9ucyB3aWxsIGJlIG1vZGlmaWVkIGluIGZp bGUgcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwKCgoKCgotLS0tLS0tLS0tLS0tLQoK CgoKCllpZmVuZwoKCgoKCgoKCgo+SGkgWWlmZW5nIGFuZCBvdGhlcnMsCgoKCgoKCgoKCj4KCgoK CgoKCgoKPlNvbWUgY29tbWVudHMsaGF2ZSBhIGxvb2sgaWYgaXQncyB1c2VmdWwuCgoKCgoKCgoK Cj4KCgoKCgoKCgoKPklmIHlvdSBsaWtlIHRoZSBtdWx0aSBwaHkgYXBwcm91Y2g6CgoKCgoKCgoK Cj4KCgoKCgoKCgoKPkNvdWxkIHlvdSBjYXJlZnVsbHkgdGVzdCB3aXRoIGhhcmR3YXJlIGFuZCB0 ZWxsIHVzCgoKCgoKCgoKCj53aGF0IHBhcnQgb2YgdGhlIGNvZGUgd29ya3Mgb3Igbm90IGFuZCB3 aGF0IHRvIGltcHJvdmUuCgoKCgoKCgoKCj4KCgoKCgoKCgoKPlByb2R1Y2UgYSB2ZXJzaW9uIDcg YmFzZWQgb24gdGhlIGNvZGUgaWRlYXMgYW5kIHRoZSBjb21tZW50cyBiZWxvdy4KCgoKCgoKCgoK PgoKCgoKCgoKCgo+S2luZCByZWdhcmRzLAoKCgoKCgoKCgo+CgoKCgoKCgoKCj5Kb2hhbiBKb25r ZXIKCgoKCgoKCgoKPgoKCgoKCgoKCgo+CgoKCgoKCgoKCj5PbiAxMi8yMi8yMSAxMDozMCBQTSwg Sm9oYW4gSm9ua2VyIHdyb3RlOgoKCgoKCgoKCgo+PiBGcm9tOiBZaWZlbmcgWmhhbyA8eWlmZW5n LnpoYW9Acm9jay1jaGlwcy5jb20+CgoKCgoKCgoKCj4+IAoKCgoKCgoKCgo+PiBUaGlzIHBhdGNo IGltcGxlbWVudHMgYSBtdWx0aSBwaHkgZHJpdmVyIGZvciBSb2NrY2hpcCBTb0NzCgoKCgoKCgoK Cj4+IHdpdGggTmFOZW5nIElQIGJsb2NrLiBUaGlzIHBoeSBjYW4gYmUgdXNlZCBhcyBwY2llLXBo eSwgdXNiMy1waHksCgoKCgoKCgoKCj4+IHNhdGEtcGh5IG9yIHNnbWlpLXBoeS4KCgoKCgoKCgoK Pj4gCgoKCgoKCgoKCj4+IFNpZ25lZC1vZmYtYnk6IFlpZmVuZyBaaGFvIDx5aWZlbmcuemhhb0By b2NrLWNoaXBzLmNvbT4KCgoKCgoKCgoKPj4gU2lnbmVkLW9mZi1ieTogSm9oYW4gSm9ua2VyIDxq Yng2MjQ0QGdtYWlsLmNvbT4KCgoKCgoKCgoKPj4gLS0tCgoKCgoKCgoKCj4+IAoKCgoKCgoKCgo+ PiBURVNUIENPTVBJTEVEIE9OTFkhCgoKCgoKCgoKCj4+IERyaXZlciBub3QgdmVyaWZpZWQgd2l0 aCBoYXJkd2FyZSEKCgoKCgoKCgoKPj4gCgoKCgoKCgoKCj4+IC0tLQoKCgoKCgoKCgo+PiAKCgoK CgoKCgoKPj4gQ2hhbmdlcyBpbiB2NjoKCgoKCgoKCgoKPj4gLSByZXN0eWxlCgoKCgoKCgoKCj4+ IC0gcmVuYW1lIGRlZmluZXMKCgoKCgoKCgoKPj4gLSBjaGFuZ2UgZnJvbSBjb21iIHRvIG11bHRp IHBoeQoKCgoKCgoKCgo+PiAtIGNsZWFuIHVwIGluY2x1ZGVzCgoKCgoKCgoKCj4+IC0gYWRkIHBh cmVudCBub2RlCgoKCgoKCgoKCj4+IC0gY2hhbmdlIGNvbXBhdGlibGUgc3RyaW5ncwoKCgoKCgoK Cgo+PiAtIHJlbW92ZSByb2NrY2hpcCxzZ21paS1tYWMtc2VsIHN1cHBvcnQKCgoKCgoKCgoKPj4g LSByZW1vdmUgcm9ja2NoaXAsZGlzLXUzb3RnMC1wb3J0IHN1cHBvcnQKCgoKCgoKCgoKPj4gLSBy ZW1vdmUgcm9ja2NoaXAsZGlzLXUzb3RnMS1wb3J0IHN1cHBvcnQKCgoKCgoKCgoKPj4gCgoKCgoK CgoKCj4+IENoYW5nZXMgaW4gdjU6CgoKCgoKCgoKCj4+IC0gYWRkIHJvY2tjaGlwX2NvbWJwaHlf dXBkYXRlbCgpCgoKCgoKCgoKCj4+IC0gcmVzdHlsZQoKCgoKCgoKCgo+PiAKCgoKCgoKCgoKPj4g Q2hhbmdlcyBpbiB2NDoKCgoKCgoKCgoKPj4gLSByZXN0eWxlCgoKCgoKCgoKCj4+IC0gYWRkIGRl dm1fcmVzZXRfY29udHJvbF9hcnJheV9nZXQoKQoKCgoKCgoKCgo+PiAtIHJlbW92ZSBjbGsgc3Ry dWN0dXJlCgoKCgoKCgoKCj4+IC0gY2hhbmdlIHJlZmNsayBEVCBwYXJzZQoKCgoKCgoKCgo+PiAt IGNoYW5nZSBkZXZfZXJyIG1lc3NhZ2UKCgoKCgoKCgoKPj4gLSBhZGQgZG90IHRvIHBocmFzZQoK CgoKCgoKCgo+PiAtIGFkZCBleHRfcmVmY2xrIHZhcmlhYmxlCgoKCgoKCgoKCj4+IC0gYWRkIGVu YWJsZV9zc2MgdmFyaWFibGUKCgoKCgoKCgoKPj4gLSByZW5hbWUgcm9ja2NoaXBfY29tYnBoeV9w YXJhbV93cml0ZQoKCgoKCgoKCgo+PiAtIHJlbW92ZSBwYXJhbV9yZWFkCgoKCgoKCgoKCj4+IC0g cmVwbGFjZSByb2NrY2hpcC1uYW5lbmctY29tYnBoeSBkcml2ZXIgbmFtZQoKCgoKCgoKCgo+PiAK CgoKCgoKCgoKPj4gQ2hhbmdlcyBpbiB2MzoKCgoKCgoKCgoKPj4gLSBVc2luZyBhcGkgZGV2bV9y ZXNldF9jb250cm9sX2dldF9vcHRpb25hbF9leGNsdXNpdmUgYW5kIGRldl9lcnJfcHJvYmUuCgoK CgoKCgoKCj4+IC0gUmVtb3ZlIGFwYl9yc3QuCgoKCgoKCgoKCj4+IC0gUmVkZWZpbmUgcmVnaXN0 ZXJzIGFkZHJlc3MuCgoKCgoKCgoKCj4+IAoKCgoKCgoKCgo+PiBDaGFuZ2VzIGluIHYyOgoKCgoK CgoKCgo+PiAtIFVzaW5nIGFwaSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJj ZS4KCgoKCgoKCgoKPj4gLSBNb2RpZnkgcm9ja2NoaXBfY29tYnBoeV9zZXRfTW9kZS4KCgoKCgoK CgoKPj4gLSBBZGQgc29tZSBQSFkgcmVnaXN0ZXJzIGRlZmluaXRpb24uCgoKCgoKCgoKCj4+IC0t LQoKCgoKCgoKCgo+PsKgIGRyaXZlcnMvcGh5L3JvY2tjaGlwL0tjb25maWfCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDggKwoKCgoKCgoKCgo+PsKgIGRyaXZlcnMvcGh5 L3JvY2tjaGlwL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAg MSArCgoKCgoKCgoKCj4+wqAgLi4uL3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctbXVsdGlw aHkuY8KgwqAgfCA2NjEgKysrKysrKysrKysrKysrKysrCgoKCgoKCgoKCj4+wqAgMyBmaWxlcyBj aGFuZ2VkLCA2NzAgaW5zZXJ0aW9ucygrKQoKCgoKCgoKCgo+PsKgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLW11bHRpcGh5LmMKCgoK CgoKCgoKPj4gCgoKCgoKCgoKCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9L Y29uZmlnIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvS2NvbmZpZwoKCgoKCgoKCgo+PiBpbmRleCBl ODEyYWRhZDcuLmExNGUzMmI2ZiAxMDA2NDQKCgoKCgoKCgoKPj4gLS0tIGEvZHJpdmVycy9waHkv cm9ja2NoaXAvS2NvbmZpZwoKCgoKCgoKCgo+PiArKysgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9L Y29uZmlnCgoKCgoKCgoKCj4+IEBAIC02Niw2ICs2NiwxNCBAQCBjb25maWcgUEhZX1JPQ0tDSElQ X0lOTk9fRFNJRFBIWQoKCgoKCgoKCgo+PsKgIAnCoCBFbmFibGUgdGhpcyB0byBzdXBwb3J0IHRo ZSBSb2NrY2hpcCBNSVBJL0xWRFMvVFRMIFBIWSB3aXRoCgoKCgoKCgoKCj4+wqAgCcKgIElubm9z aWxpY29uIElQIGJsb2NrLgoKCgoKCgoKCgo+PsKgIAoKCgoKCgoKCgo+PiArY29uZmlnIFBIWV9S T0NLQ0hJUF9OQU5FTkdfTVVMVElfUEhZCgoKCgoKCgoKCj4+ICsJdHJpc3RhdGUgIlJvY2tjaGlw IE5BTkVORyBNVUxUSSBQSFkgRHJpdmVyIgoKCgoKCgoKCgo+PiArCWRlcGVuZHMgb24gQVJDSF9S T0NLQ0hJUCAmJiBPRgoKCgoKCgoKCgo+PiArCXNlbGVjdCBHRU5FUklDX1BIWQoKCgoKCgoKCgo+ PiArCWhlbHAKCgoKCgoKCgoKPj4gKwnCoCBFbmFibGUgdGhpcyB0byBzdXBwb3J0IHRoZSBSb2Nr Y2hpcCBQQ0llL1VTQjMuMC9TQVRBL1FTR01JSQoKCgoKCgoKCgo+PiArCcKgIG11bHRpIFBIWSB3 aXRoIE5hTmVuZyBJUCBibG9jay4KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PsKgIGNvbmZpZyBQ SFlfUk9DS0NISVBfUENJRQoKCgoKCgoKCgo+PsKgIAl0cmlzdGF0ZSAiUm9ja2NoaXAgUENJZSBQ SFkgRHJpdmVyIgoKCgoKCgoKCgo+PsKgIAlkZXBlbmRzIG9uIChBUkNIX1JPQ0tDSElQICYmIE9G KSB8fCBDT01QSUxFX1RFU1QKCgoKCgoKCgoKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3Jv Y2tjaGlwL01ha2VmaWxlIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvTWFrZWZpbGUKCgoKCgoKCgoK Pj4gaW5kZXggZjBlZWMyMTJiLi5kNTU3MDQ1MmYgMTAwNjQ0CgoKCgoKCgoKCj4+IC0tLSBhL2Ry aXZlcnMvcGh5L3JvY2tjaGlwL01ha2VmaWxlCgoKCgoKCgoKCj4+ICsrKyBiL2RyaXZlcnMvcGh5 L3JvY2tjaGlwL01ha2VmaWxlCgoKCgoKCgoKCj4+IEBAIC02LDYgKzYsNyBAQCBvYmotJChDT05G SUdfUEhZX1JPQ0tDSElQX0lOTk9fQ1NJRFBIWSkJKz0gcGh5LXJvY2tjaGlwLWlubm8tY3NpZHBo eS5vCgoKCgoKCgoKCj4+wqAgb2JqLSQoQ09ORklHX1BIWV9ST0NLQ0hJUF9JTk5PX0RTSURQSFkp CSs9IHBoeS1yb2NrY2hpcC1pbm5vLWRzaWRwaHkubwoKCgoKCgoKCgo+PsKgIG9iai0kKENPTkZJ R19QSFlfUk9DS0NISVBfSU5OT19IRE1JKQkrPSBwaHktcm9ja2NoaXAtaW5uby1oZG1pLm8KCgoK CgoKCgoKPj7CoCBvYmotJChDT05GSUdfUEhZX1JPQ0tDSElQX0lOTk9fVVNCMikJKz0gcGh5LXJv Y2tjaGlwLWlubm8tdXNiMi5vCgoKCgoKCgoKCj4+ICtvYmotJChDT05GSUdfUEhZX1JPQ0tDSElQ X05BTkVOR19NVUxUSV9QSFkpCSs9IHBoeS1yb2NrY2hpcC1uYW5lbmctbXVsdGlwaHkubwoKCgoK CgoKCgo+PsKgIG9iai0kKENPTkZJR19QSFlfUk9DS0NISVBfUENJRSkJCSs9IHBoeS1yb2NrY2hp cC1wY2llLm8KCgoKCgoKCgoKPj7CoCBvYmotJChDT05GSUdfUEhZX1JPQ0tDSElQX1RZUEVDKQkr PSBwaHktcm9ja2NoaXAtdHlwZWMubwoKCgoKCgoKCgo+PsKgIG9iai0kKENPTkZJR19QSFlfUk9D S0NISVBfVVNCKQkJKz0gcGh5LXJvY2tjaGlwLXVzYi5vCgoKCgoKCgoKCj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLW11bHRpcGh5LmMgYi9k cml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLW11bHRpcGh5LmMKCgoKCgoK CgoKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKCgoKCgoKCgoKPj4gaW5kZXggMDAwMDAwMDAwLi43 NjVlZGU0NDAKCgoKCgoKCgoKPj4gLS0tIC9kZXYvbnVsbAoKCgoKCgoKCgo+PiArKysgYi9kcml2 ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLW11bHRpcGh5LmMKCgoKCgoKCgoK Pj4gQEAgLTAsMCArMSw2NjEgQEAKCgoKCgoKCgoKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCgoKCgoKCgoKCj4+ICsvKgoKCgoKCgoKCgo+PiArICogUm9ja2NoaXAgUElQ RSBVU0IzLjAgUENJRSBTQVRBIE11bHRpIFBoeSBkcml2ZXIKCgoKCgoKCgoKPj4gKyAqCgoKCgoK CgoKCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjEgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBM dGQuCgoKCgoKCgoKCj4+ICsgKi8KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArI2luY2x1ZGUg PGR0LWJpbmRpbmdzL3BoeS9waHkuaD4KCgoKCgoKCgoKPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4KCgoKCgoKCgoKPj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CgoKCgoKCgoKCj4+ ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgoKCgoKCgoKCgo+PiArI2luY2x1ZGUgPGxp bnV4L29mX2RldmljZS5oPgoKCgoKCgoKCgo+PiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4K CgoKCgoKCgoKPj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KCgoKCgoKCgoKPj4gKyNpbmNs dWRlIDxsaW51eC9yZXNldC5oPgoKCgoKCgoKCgo+PiArI2luY2x1ZGUgPGxpbnV4L3VuaXRzLmg+ CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKyNkZWZpbmUgQklUX1dSSVRFQUJMRV9TSElGVAkJ MTYKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUkVGX0NMT0NLXzI0TUh6CQkJKDI0ICogSFpfUEVSX01I WikKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUkVGX0NMT0NLXzI1TUh6CQkJKDI1ICogSFpfUEVSX01I WikKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUkVGX0NMT0NLXzEwME1IegkJKDEwMCAqIEhaX1BFUl9N SFopCgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKy8qIFJLMzU2OCBNVUxUSSBQSFkgUkVHICov CgoKCgoKCgoKCj4+ICsjZGVmaW5lIFJLMzU2OF9QSFlSRUc2CQkJMHgxNAoKCgoKCgoKCgo+PiAr I2RlZmluZSBQSFlSRUc2X1BMTF9ESVZfTUFTSwkJR0VOTUFTSyg3LCA2KQoKCgoKCgoKCgo+PiAr I2RlZmluZSBQSFlSRUc2X1BMTF9ESVZfU0hJRlQJCTYKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUEhZ UkVHNl9QTExfRElWXzIJCTEKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArI2RlZmluZSBSSzM1 NjhfUEhZUkVHNwkJCTB4MTgKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUEhZUkVHN19UWF9SVEVSTV9N QVNLCQlHRU5NQVNLKDcsIDQpCgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzdfVFhfUlRFUk1f U0hJRlQJCTQKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUEhZUkVHN19UWF9SVEVSTV81ME9ITQkJOAoK CgoKCgoKCgo+PiArI2RlZmluZSBQSFlSRUc3X1JYX1JURVJNX01BU0sJCUdFTk1BU0soMywgMCkK CgoKCgoKCgoKPj4gKyNkZWZpbmUgUEhZUkVHN19SWF9SVEVSTV9TSElGVAkJMAoKCgoKCgoKCgo+ PiArI2RlZmluZSBQSFlSRUc3X1JYX1JURVJNXzQ0T0hNCQkxNQoKCgoKCgoKCgo+PiArCgoKCgoK CgoKCj4+ICsjZGVmaW5lIFJLMzU2OF9QSFlSRUc4CQkJMHgxQwoKCgoKCgoKCgo+PiArI2RlZmlu ZSBQSFlSRUc4X1NTQ19FTgkJCUJJVCg0KQoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsjZGVm aW5lIFJLMzU2OF9QSFlSRUcxMQkJCTB4MjgKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUEhZUkVHMTFf U1VfVFJJTV8wXzcJCTB4RjAKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArI2RlZmluZSBSSzM1 NjhfUEhZUkVHMTIJCQkweDJDCgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzEyX1BMTF9MUEZf QURKX1ZBTFVFCTQKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArI2RlZmluZSBSSzM1NjhfUEhZ UkVHMTMJCQkweDMwCgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzEzX1JFU0lTVEVSX01BU0sJ CUdFTk1BU0soNSwgNCkKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUEhZUkVHMTNfUkVTSVNURVJfU0hJ RlQJCTB4NAoKCgoKCgoKCgo+PiArI2RlZmluZSBQSFlSRUcxM19SRVNJU1RFUl9ISUdIX1oJMwoK CgoKCgoKCgo+PiArI2RlZmluZSBQSFlSRUcxM19DS1JDVl9BTVAwCQlCSVQoNykKCgoKCgoKCgoK Pj4gKwoKCgoKCgoKCgo+PiArI2RlZmluZSBSSzM1NjhfUEhZUkVHMTQJCQkweDM0CgoKCgoKCgoK Cj4+ICsjZGVmaW5lIFBIWVJFRzE0X0NLUkNWX0FNUDEJCUJJVCgwKQoKCgoKCgoKCgo+PiArCgoK CgoKCgoKCj4+ICsjZGVmaW5lIFJLMzU2OF9QSFlSRUcxNQkJCTB4MzgKCgoKCgoKCgoKPj4gKyNk ZWZpbmUgUEhZUkVHMTVfQ1RMRV9FTgkJQklUKDApCgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJF RzE1X1NTQ19DTlRfTUFTSwkJR0VOTUFTSyg3LCA2KQoKCgoKCgoKCgo+PiArI2RlZmluZSBQSFlS RUcxNV9TU0NfQ05UX1NISUZUCQk2CgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzE1X1NTQ19D TlRfVkFMVUUJCTEKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArI2RlZmluZSBSSzM1NjhfUEhZ UkVHMTYJCQkweDNDCgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzE2X1NTQ19DTlRfVkFMVUUJ CTB4NWYKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArI2RlZmluZSBSSzM1NjhfUEhZUkVHMTgJ CQkweDQ0CgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzE4X1BMTF9MT09QCQkweDMyCgoKCgoK CgoKCj4+ICsKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUkszNTY4X1BIWVJFRzMyCQkJMHg3QwoKCgoK CgoKCgo+PiArI2RlZmluZSBQSFlSRUczMl9TU0NfTUFTSwkJR0VOTUFTSyg3LCA0KQoKCgoKCgoK Cgo+PiArI2RlZmluZSBQSFlSRUczMl9TU0NfRElSX1NISUZUCQk0CgoKCgoKCgoKCj4+ICsjZGVm aW5lIFBIWVJFRzMyX1NTQ19VUFdBUkQJCTAKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUEhZUkVHMzJf U1NDX0RPV05XQVJECQkxCgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzMyX1NTQ19PRkZTRVRf U0hJRlQJNgoKCgoKCgoKCgo+PiArI2RlZmluZSBQSFlSRUczMl9TU0NfT0ZGU0VUXzUwMFBQTQkx CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKyNkZWZpbmUgUkszNTY4X1BIWVJFRzMzCQkJMHg4 MAoKCgoKCgoKCgo+PiArI2RlZmluZSBQSFlSRUczM19QTExfS1ZDT19NQVNLCQlHRU5NQVNLKDQs IDIpCgoKCgoKCgoKCj4+ICsjZGVmaW5lIFBIWVJFRzMzX1BMTF9LVkNPX1NISUZUCQkyCgoKCgoK CgoKCj4+ICsjZGVmaW5lIFBIWVJFRzMzX1BMTF9LVkNPX1ZBTFVFCQkyCgoKCgoKCgoKCj4KCgoK CgoKCgoKPi8qIFJLMzU4OCBNVUxUSSBQSFkgUkVHICovCgoKCgoKCgoKCj4KCgoKCgoKCgoKPkFk ZCBtb3JlIGRlZmluZXMuCgoKCgoKCgoKCj4KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArc3Ry dWN0IHJvY2tjaGlwX211bHRpcGh5X3ByaXY7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gK3N0 cnVjdCBtdWx0aXBoeV9yZWcgewoKCgoKCgoKCgo+PiArCXUxNiBvZmZzZXQ7CgoKCgoKCgoKCj4+ ICsJdTE2IGJpdGVuZDsKCgoKCgoKCgoKPj4gKwl1MTYgYml0c3RhcnQ7CgoKCgoKCgoKCj4+ICsJ dTE2IGRpc2FibGU7CgoKCgoKCgoKCj4+ICsJdTE2IGVuYWJsZTsKCgoKCgoKCgoKPj4gK307CgoK CgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gK3N0cnVjdCByb2NrY2hpcF9tdWx0aXBoeV9ncmZjZmcg ewoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGNpZV9tb2RlX3NldDsKCgoKCgoK CgoKPj4gKwlzdHJ1Y3QgbXVsdGlwaHlfcmVnIHVzYl9tb2RlX3NldDsKCgoKCgoKCgoKPj4gKwlz dHJ1Y3QgbXVsdGlwaHlfcmVnIHNnbWlpX21vZGVfc2V0OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBt dWx0aXBoeV9yZWcgcXNnbWlpX21vZGVfc2V0OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBo eV9yZWcgcGlwZV9yeHRlcm1fc2V0OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcg cGlwZV90eGVsZWNfc2V0OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGlwZV90 eGNvbXBfc2V0OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGlwZV9jbGtfMjVt OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGlwZV9jbGtfMTAwbTsKCgoKCgoK CgoKPj4gKwlzdHJ1Y3QgbXVsdGlwaHlfcmVnIHBpcGVfcGh5bW9kZV9zZWw7CgoKCgoKCgoKCj4+ ICsJc3RydWN0IG11bHRpcGh5X3JlZyBwaXBlX3JhdGVfc2VsOwoKCgoKCgoKCgo+PiArCXN0cnVj dCBtdWx0aXBoeV9yZWcgcGlwZV9yeHRlcm1fc2VsOwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0 aXBoeV9yZWcgcGlwZV90eGVsZWNfc2VsOwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9y ZWcgcGlwZV90eGNvbXBfc2VsOwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGlw ZV9jbGtfZXh0OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGlwZV9zZWxfdXNi OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGlwZV9zZWxfcXNnbWlpOwoKCgoK CgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgcGlwZV9waHlfc3RhdHVzOwoKCgoKCgoKCgo+ PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgY29uMF9mb3JfcGNpZTsKCgoKCgoKCgoKPj4gKwlzdHJ1 Y3QgbXVsdGlwaHlfcmVnIGNvbjFfZm9yX3BjaWU7CgoKCgoKCgoKCj4+ICsJc3RydWN0IG11bHRp cGh5X3JlZyBjb24yX2Zvcl9wY2llOwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcg Y29uM19mb3JfcGNpZTsKCgoKCgoKCgoKPj4gKwlzdHJ1Y3QgbXVsdGlwaHlfcmVnIGNvbjBfZm9y X3NhdGE7CgoKCgoKCgoKCj4+ICsJc3RydWN0IG11bHRpcGh5X3JlZyBjb24xX2Zvcl9zYXRhOwoK CgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0aXBoeV9yZWcgY29uMl9mb3Jfc2F0YTsKCgoKCgoKCgoK Pj4gKwlzdHJ1Y3QgbXVsdGlwaHlfcmVnIGNvbjNfZm9yX3NhdGE7CgoKCgoKCgoKCj4+ICsJc3Ry dWN0IG11bHRpcGh5X3JlZyBwaXBlX2NvbjBfZm9yX3NhdGE7CgoKCgoKCgoKCj4+ICsJc3RydWN0 IG11bHRpcGh5X3JlZyBwaXBlX3NnbWlpX21hY19zZWw7CgoKCgoKCgoKCj4+ICsJc3RydWN0IG11 bHRpcGh5X3JlZyBwaXBlX3hwY3NfcGh5X3JlYWR5OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBtdWx0 aXBoeV9yZWcgdTNvdGcwX3BvcnRfZW47CgoKCgoKCgoKCj4+ICsJc3RydWN0IG11bHRpcGh5X3Jl ZyB1M290ZzFfcG9ydF9lbjsKCgoKCgoKCgoKPgoKCgoKCgoKCgo+Lm51bV9waHkKCgoKCgoKCgoK Pi5yZWdzCgoKCgoKCgoKCj4uY2FwCgoKCgoKCgoKCj4KCgoKCgoKCgoKPkFkZCBtb3JlIHBoeSBw cm9wZXJ0aWVzIGZvciBjaGVja3MgYW5kIGNvbnRyb2wuCgoKCgoKCgoKCj4KCgoKCgoKCgoKPj4g K307CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gK3N0cnVjdCByb2NrY2hpcF9tdWx0aXBoeV9j ZmcgewoKCgoKCgoKCgo+PiArCWNvbnN0IHN0cnVjdCByb2NrY2hpcF9tdWx0aXBoeV9ncmZjZmcg KmdyZmNmZzsKCgoKCgoKCgoKPj4gKwlpbnQgKCptdWx0aXBoeV9jZmcpKHN0cnVjdCBwaHkgKnBo eSk7CgoKCgoKCgoKCj4+ICt9OwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICtzdHJ1Y3Qgcm9j a2NoaXBfbXVsdGlwaHlfbm9kZV9wcml2IHsKCgoKCgoKCgoKPj4gKwlpbnQgaWQ7CgoKCgoKCgoK Cj4+ICsJdTggbW9kZTsKCgoKCgoKCgoKPj4gKwl2b2lkIF9faW9tZW0gKm1taW87CgoKCgoKCgoK Cj4+ICsJaW50IG51bV9jbGtzOwoKCgoKCgoKCgo+PiArCXN0cnVjdCBjbGtfYnVsa19kYXRhICpj bGtzOwoKCgoKCgoKCgo+PiArCXN0cnVjdCByZWdtYXAgKnBoeV9ncmY7CgoKCgoKCgoKCj4+ICsJ c3RydWN0IHBoeSAqcGh5OwoKCgoKCgoKCgo+PiArCXN0cnVjdCByZXNldF9jb250cm9sICpwaHlf cnN0OwoKCgoKCgoKCgo+PiArCXN0cnVjdCBjbGsgKnJlZmNsazsKCgoKCgoKCgoKPj4gKwlib29s IGVuYWJsZV9zc2M7CgoKCgoKCgoKCj4+ICsJYm9vbCBleHRfcmVmY2xrOwoKCgoKCgoKCgo+PiAr fTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArc3RydWN0IHJvY2tjaGlwX211bHRpcGh5X3By aXYgewoKCgoKCgoKCgo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKCgoKCgoKCgoKPj4gKwlpbnQg bnVtX3BoeTsKCgoKCgoKCgoKPj4gKwlzdHJ1Y3QgcmVnbWFwICpwaXBlX2dyZjsKCgoKCgoKCgoK Pj4gKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfbXVsdGlwaHlfY2ZnICpjZmc7CgoKCgoKCgoKCj4+ ICsJc3RydWN0IHJvY2tjaGlwX211bHRpcGh5X25vZGVfcHJpdiAqKm5vZGU7CgoKCgoKCgoKCj4+ ICt9OwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICtzdGF0aWMgdm9pZCByb2NrY2hpcF9tdWx0 aXBoeV91cGRhdGVsKHN0cnVjdCBwaHkgKnBoeSwgaW50IG1hc2ssIGludCB2YWwsIGludCByZWcp CgoKCgoKCgoKCj4+ICt7CgoKCgoKCgoKCj4+ICsJc3RydWN0IHJvY2tjaGlwX211bHRpcGh5X25v ZGVfcHJpdiAqbm9kZV9wcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CgoKCgoKCgoKCj4+ICsJ dW5zaWduZWQgaW50IHRlbXA7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwl0ZW1wID0gcmVh ZGwobm9kZV9wcml2LT5tbWlvICsgcmVnKTsKCgoKCgoKCgoKPj4gKwl0ZW1wID0gKHRlbXAgJiB+ KG1hc2spKSB8IHZhbDsKCgoKCgoKCgoKPj4gKwl3cml0ZWwodGVtcCwgbm9kZV9wcml2LT5tbWlv ICsgcmVnKTsKCgoKCgoKCgoKPj4gK30KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArc3RhdGlj IGludCByb2NrY2hpcF9tdWx0aXBoeV9wYXJhbV93cml0ZShzdHJ1Y3QgcmVnbWFwICpiYXNlLAoK CgoKCgoKCgo+PiArCQkJCQkgY29uc3Qgc3RydWN0IG11bHRpcGh5X3JlZyAqcmVnLCBib29sIGVu KQoKCgoKCgoKCgo+PiArewoKCgoKCgoKCgo+PiArCXUzMiB2YWwsIG1hc2ssIHRtcDsKCgoKCgoK CgoKPj4gKwoKCgoKCgoKCgo+PiArCXRtcCA9IGVuID8gcmVnLT5lbmFibGUgOiByZWctPmRpc2Fi bGU7CgoKCgoKCgoKCj4+ICsJbWFzayA9IEdFTk1BU0socmVnLT5iaXRlbmQsIHJlZy0+Yml0c3Rh cnQpOwoKCgoKCgoKCgo+PiArCXZhbCA9ICh0bXAgPDwgcmVnLT5iaXRzdGFydCkgfCAobWFzayA8 PCBCSVRfV1JJVEVBQkxFX1NISUZUKTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCXJldHVy biByZWdtYXBfd3JpdGUoYmFzZSwgcmVnLT5vZmZzZXQsIHZhbCk7CgoKCgoKCgoKCj4+ICt9CgoK CgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gK3N0YXRpYyB1MzIgcm9ja2NoaXBfbXVsdGlwaHlfaXNf cmVhZHkoc3RydWN0IHBoeSAqcGh5KQoKCgoKCgoKCgo+PiArewoKCgoKCgoKCgo+PiArCXN0cnVj dCByb2NrY2hpcF9tdWx0aXBoeV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKHBoeS0+ZGV2 LnBhcmVudCk7CgoKCgoKCgoKCj4+ICsJc3RydWN0IHJvY2tjaGlwX211bHRpcGh5X25vZGVfcHJp diAqbm9kZV9wcml2ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CgoKCgoKCgoKCj4+ICsJY29uc3Qg c3RydWN0IHJvY2tjaGlwX211bHRpcGh5X2dyZmNmZyAqY2ZnID0gcHJpdi0+Y2ZnLT5ncmZjZmc7 CgoKCgoKCgoKCj4+ICsJdTMyIG1hc2ssIHZhbDsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiAr CW1hc2sgPSBHRU5NQVNLKGNmZy0+cGlwZV9waHlfc3RhdHVzLmJpdGVuZCwKCgoKCgoKCgoKPj4g KwkJwqDCoMKgwqDCoMKgIGNmZy0+cGlwZV9waHlfc3RhdHVzLmJpdHN0YXJ0KTsKCgoKCgoKCgoK Pj4gKwoKCgoKCgoKCgo+PiArCXJlZ21hcF9yZWFkKG5vZGVfcHJpdi0+cGh5X2dyZiwgY2ZnLT5w aXBlX3BoeV9zdGF0dXMub2Zmc2V0LCAmdmFsKTsKCgoKCgoKCgoKPj4gKwl2YWwgPSAodmFsICYg bWFzaykgPj4gY2ZnLT5waXBlX3BoeV9zdGF0dXMuYml0c3RhcnQ7CgoKCgoKCgoKCj4+ICsKCgoK CgoKCgoKPj4gKwlyZXR1cm4gdmFsOwoKCgoKCgoKCgo+PiArfQoKCgoKCgoKCgo+PiArCgoKCgoK CgoKCj4+ICtzdGF0aWMgaW50IHJvY2tjaGlwX211bHRpcGh5X3NldF9tb2RlKHN0cnVjdCBwaHkg KnBoeSkKCgoKCgoKCgoKPj4gK3sKCgoKCgoKCgoKPj4gKwlzdHJ1Y3Qgcm9ja2NoaXBfbXVsdGlw aHlfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShwaHktPmRldi5wYXJlbnQpOwoKCgoKCgoK Cgo+PiArCXN0cnVjdCByb2NrY2hpcF9tdWx0aXBoeV9ub2RlX3ByaXYgKm5vZGVfcHJpdiA9IHBo eV9nZXRfZHJ2ZGF0YShwaHkpOwoKCgoKCgoKCgo+PiArCWludCByZXQgPSAwOwoKCgoKCgoKCgo+ PiArCgoKCgoKCgoKCj4+ICsJc3dpdGNoIChub2RlX3ByaXYtPm1vZGUpIHsKCgoKCgoKCgoKPj4g KwljYXNlIFBIWV9UWVBFX1BDSUU6CgoKCgoKCgoKCj4+ICsJY2FzZSBQSFlfVFlQRV9VU0IzOgoK CgoKCgoKCgo+PiArCWNhc2UgUEhZX1RZUEVfU0FUQToKCgoKCgoKCgoKPj4gKwljYXNlIFBIWV9U WVBFX1NHTUlJOgoKCgoKCgoKCgo+PiArCWNhc2UgUEhZX1RZUEVfUVNHTUlJOgoKCgoKCgoKCgo+ PiArCQlpZiAocHJpdi0+Y2ZnLT5tdWx0aXBoeV9jZmcpCgoKCgoKCgoKCj4+ICsJCQlyZXQgPSBw cml2LT5jZmctPm11bHRpcGh5X2NmZyhwaHkpOwoKCgoKCgoKCgo+PiArCQlicmVhazsKCgoKCgoK CgoKPj4gKwlkZWZhdWx0OgoKCgoKCgoKCgo+PiArCQlkZXZfZXJyKHByaXYtPmRldiwgImluY29t cGF0aWJsZSBQSFkgdHlwZVxuIik7CgoKCgoKCgoKCj4+ICsJCXJldHVybiAtRUlOVkFMOwoKCgoK CgoKCgo+PiArCX0KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCWlmIChyZXQpCgoKCgoKCgoK Cj4+ICsJCWRldl9lcnIocHJpdi0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgcGh5IGZvciBwaHkgbW9k ZSAleFxuIiwgbm9kZV9wcml2LT5tb2RlKTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCXJl dHVybiByZXQ7CgoKCgoKCgoKCj4+ICt9CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gK3N0YXRp YyBpbnQgcm9ja2NoaXBfbXVsdGlwaHlfaW5pdChzdHJ1Y3QgcGh5ICpwaHkpCgoKCgoKCgoKCj4+ ICt7CgoKCgoKCgoKCj4+ICsJc3RydWN0IHJvY2tjaGlwX211bHRpcGh5X3ByaXYgKnByaXYgPSBk ZXZfZ2V0X2RydmRhdGEocGh5LT5kZXYucGFyZW50KTsKCgoKCgoKCgoKPj4gKwlzdHJ1Y3Qgcm9j a2NoaXBfbXVsdGlwaHlfbm9kZV9wcml2ICpub2RlX3ByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5 KTsKCgoKCgoKCgoKPj4gKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfbXVsdGlwaHlfZ3JmY2ZnICpj ZmcgPSBwcml2LT5jZmctPmdyZmNmZzsKCgoKCgoKCgoKPj4gKwl1MzIgdmFsOwoKCgoKCgoKCgo+ PiArCWludCByZXQ7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwlyZXQgPSBjbGtfYnVsa19w cmVwYXJlX2VuYWJsZShub2RlX3ByaXYtPm51bV9jbGtzLCBub2RlX3ByaXYtPmNsa3MpOwoKCgoK CgoKCgo+PiArCWlmIChyZXQpIHsKCgoKCgoKCgoKPj4gKwkJZGV2X2Vycihwcml2LT5kZXYsICJm YWlsZWQgdG8gZW5hYmxlIGNsa3NcbiIpOwoKCgoKCgoKCgo+PiArCQlyZXR1cm4gcmV0OwoKCgoK CgoKCgo+PiArCX0KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCXJldCA9IHJvY2tjaGlwX211 bHRpcGh5X3NldF9tb2RlKHBoeSk7CgoKCgoKCgoKCj4+ICsJaWYgKHJldCkKCgoKCgoKCgoKPj4g KwkJZ290byBlcnJfY2xrOwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJcmV0ID0gcmVzZXRf Y29udHJvbF9kZWFzc2VydChub2RlX3ByaXYtPnBoeV9yc3QpOwoKCgoKCgoKCgo+PiArCWlmIChy ZXQpCgoKCgoKCgoKCj4+ICsJCWdvdG8gZXJyX2NsazsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+ PiArCWlmIChub2RlX3ByaXYtPm1vZGUgPT0gUEhZX1RZUEVfVVNCMykgewoKCgoKCgoKCgo+PiAr CQlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljKHJvY2tjaGlwX211bHRpcGh5X2lzX3Jl YWR5LAoKCgoKCgoKCgo+PiArCQkJCQkJcGh5LCB2YWwsCgoKCgoKCgoKCj4+ICsJCQkJCQl2YWwg PT0gY2ZnLT5waXBlX3BoeV9zdGF0dXMuZW5hYmxlLAoKCgoKCgoKCgo+PiArCQkJCQkJMTAsIDEw MDApOwoKCgoKCgoKCgo+PiArCQlpZiAocmV0KQoKCgoKCgoKCgo+PiArCQkJZGV2X3dhcm4ocHJp di0+ZGV2LCAid2FpdCBwaHkgc3RhdHVzIHJlYWR5IHRpbWVvdXRcbiIpOwoKCgoKCgoKCgo+PiAr CX0KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCXJldHVybiAwOwoKCgoKCgoKCgo+PiArCgoK CgoKCgoKCj4+ICtlcnJfY2xrOgoKCgoKCgoKCgo+PiArCWNsa19idWxrX2Rpc2FibGVfdW5wcmVw YXJlKG5vZGVfcHJpdi0+bnVtX2Nsa3MsIG5vZGVfcHJpdi0+Y2xrcyk7CgoKCgoKCgoKCj4+ICsK CgoKCgoKCgoKPj4gKwlyZXR1cm4gcmV0OwoKCgoKCgoKCgo+PiArfQoKCgoKCgoKCgo+PiArCgoK CgoKCgoKCj4+ICtzdGF0aWMgaW50IHJvY2tjaGlwX211bHRpcGh5X2V4aXQoc3RydWN0IHBoeSAq cGh5KQoKCgoKCgoKCgo+PiArewoKCgoKCgoKCgo+PiArCXN0cnVjdCByb2NrY2hpcF9tdWx0aXBo eV9ub2RlX3ByaXYgKm5vZGVfcHJpdiA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwoKCgoKCgoKCgo+ PiArCgoKCgoKCgoKCj4+ICsJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUobm9kZV9wcml2LT5u dW1fY2xrcywgbm9kZV9wcml2LT5jbGtzKTsKCgoKCgoKCgoKPj4gKwlyZXNldF9jb250cm9sX2Fz c2VydChub2RlX3ByaXYtPnBoeV9yc3QpOwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJcmV0 dXJuIDA7CgoKCgoKCgoKCj4+ICt9CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgcGh5X29wcyByb2NoY2hpcF9tdWx0aXBoeV9vcHMgPSB7CgoKCgoKCgoKCj4+ ICsJLmluaXQgPSByb2NrY2hpcF9tdWx0aXBoeV9pbml0LAoKCgoKCgoKCgo+PiArCS5leGl0ID0g cm9ja2NoaXBfbXVsdGlwaHlfZXhpdCwKCgoKCgoKCgoKPj4gKwkub3duZXIgPSBUSElTX01PRFVM RSwKCgoKCgoKCgoKPj4gK307CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gK3N0YXRpYyBzdHJ1 Y3QgcGh5ICpyb2NrY2hpcF9tdWx0aXBoeV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBvZl9waGFuZGxlX2FyZ3MgKmFyZ3MpCgoKCgoKCgoKCj4+ICt7CgoKCgoKCgoKCj4+ICsJc3Ry dWN0IHJvY2tjaGlwX211bHRpcGh5X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK CgoKCgoKCgoKPj4gKwlzdHJ1Y3Qgcm9ja2NoaXBfbXVsdGlwaHlfbm9kZV9wcml2ICpub2RlX3By aXYgPSBOVUxMOwoKCgoKCgoKCgo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25wID0gYXJn cy0+bnA7CgoKCgoKCgoKCj4+ICsJaW50IGluZGV4OwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj5b Li5dCgoKCgoKCgoKCj4KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCWZvciAoaW5kZXggPSAw OyBpbmRleCA8IHByaXYtPm51bV9waHk7IGluZGV4KyspCgoKCgoKCgoKCj4+ICsJCWlmIChwaHlf bnAgPT0gcHJpdi0+bm9kZVtpbmRleF0tPnBoeS0+ZGV2Lm9mX25vZGUpIHsKCgoKCgoKCgoKPj4g KwkJCW5vZGVfcHJpdiA9IHByaXYtPm5vZGVbaW5kZXhdOwoKCgoKCgoKCgo+PiArCQkJYnJlYWs7 CgoKCgoKCgoKCj4+ICsJCX0KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCWlmICghbm9kZV9w cml2KSB7CgoKCgoKCgoKCj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgYXBwcm9w cmlhdGUgcGh5XG4iKTsKCgoKCgoKCgoKPj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CgoK CgoKCgoKCj4+ICsJfQoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJaWYgKG5vZGVfcHJpdi0+ bW9kZSAhPSBQSFlfTk9ORSAmJiBub2RlX3ByaXYtPm1vZGUgIT0gYXJncy0+YXJnc1swXSkKCgoK CgoKCgoKPj4gKwkJZGV2X3dhcm4oZGV2LCAicGh5IHR5cGUgc2VsZWN0ICVkIG92ZXJ3cml0aW5n IHR5cGUgJWRcbiIsCgoKCgoKCgoKCj4+ICsJCQkgYXJncy0+YXJnc1swXSwgbm9kZV9wcml2LT5t b2RlKTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCW5vZGVfcHJpdi0+bW9kZSA9IGFyZ3Mt PmFyZ3NbMF07CgoKCgoKCgoKCj4KCgoKCgoKCgoKPmlmICgobm9kZV9wcml2LT5tb2RlID09IFBI WV9UWVBFX1NHTUlJICYmIGFyZ3MtPmFyZ3NfY291bnQgIT0gMikgfHwKCgoKCgoKCgoKPihub2Rl X3ByaXYtPm1vZGUgIT0gUEhZX1RZUEVfU0dNSUkgJiYgYXJncy0+YXJnc19jb3VudCAhPSAxKSB7 CgoKCgoKCgoKCj4JCWRldl9lcnIoZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzXG4i KTsKCgoKCgoKCgoKPgkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CgoKCgoKCgoKCj4JfQoKCgoK CgoKCgo+CgoKCgoKCgoKCj5DaGVjayBudW1iZXIgb2YgYXJndW1lbnQgYmFzZWQgb24gY2FwYWJp bGxpdHkuCgoKCgoKCgoKCj4KCgoKCgoKCgoKPj09PQoKCgoKCgoKCgo+CgoKCgoKCgoKCj4JaWYg KG5vZGVfcHJpdi0+bW9kZSAhPSBwcml2LT5jYXBbbm9kZV9wcml2LT5pZF0pIHsKCgoKCgoKCgoK PgkJZGV2X2VycihkZXYsICJpbnZhbGlkIG1vZGVcbiIpOwoKCgoKCgoKCgo+CQlyZXR1cm4gRVJS X1BUUigtRUlOVkFMKTsKCgoKCgoKCgoKPgl9CgoKCgoKCgoKCj4KCgoKCgoKCgoKPkNoZWNrIG1v ZGUgYW5kIGlkIHdpdGggcGh5IG5vZGUgY2FwYWJpbGl0aWVzLgoKCgoKCgoKCgo+CgoKCgoKCgoK Cj49PT0KCgoKCgoKCgoKPglpZiAobm9kZV9wcml2LT5tb2RlID09IFBIWV9UWVBFX1NHTUlJICYm IGFyZ3MtPmFyZ3NbMV0gPT0gMCB8fAoKCgoKCgoKCgo+YXJncy0+YXJnc1sxXSA9PSAxKQoKCgoK CgoKCgo+CQlub2RlX3ByaXYtPnNnbWlpLW1hYy1zZWwgPSBhcmdzLT5hcmdzWzFdOwoKCgoKCgoK Cgo+CWVsc2UgewoKCgoKCgoKCgo+CQlkZXZfZXJyKGRldiwgImludmFsaWQgZ21hYyBpZFxuIik7 CgoKCgoKCgoKCj4JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwoKCgoKCgoKCgo+CX0KCgoKCgoK CgoKPgoKCgoKCgoKCgo+TWF5YmUgb2J0YWluIFNHTUlJIG91dHB1dCBmcm9tIGV4dHJhIHBoeSBh cmd1bWVudC4KCgoKCgoKCgoKPkZpeCBZQU1MIGRvY3VtZW50IGFzIHdlbGwhCgoKCgoKCgoKCj4K CgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCXJldHVybiBub2RlX3ByaXYtPnBoeTsKCgoKCgoK CgoKPj4gK30KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArc3RhdGljIGludCByb2NrY2hpcF9t dWx0aXBoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoKCgoKCgoKCgo+PiAr ewoKCgoKCgoKCgo+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CgoKCgoKCgoK Cj4+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKCgoKCgoKCgoKPj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkX25wOwoKCgoKCgoKCgo+PiArCXN0cnVjdCBwaHlf cHJvdmlkZXIgKnBoeV9wcm92aWRlcjsKCgoKCgoKCgoKPj4gKwlzdHJ1Y3QgcmVzb3VyY2UgcmVz OwoKCgoKCgoKCgo+PiArCXN0cnVjdCByb2NrY2hpcF9tdWx0aXBoeV9wcml2ICpwcml2OwoKCgoK CgoKCgo+PiArCWludCByZXR2YWw7CgoKCgoKCgoKCj4+ICsJaW50IGlkOwoKCgoKCgoKCgo+PiAr CgoKCgoKCgoKCj4+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdG UF9LRVJORUwpOwoKCgoKCgoKCgo+PiArCWlmICghcHJpdikKCgoKCgoKCgoKPj4gKwkJcmV0dXJu IC1FTk9NRU07CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwlwcml2LT5jZmcgPSBvZl9kZXZp Y2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKCgoKCgoKCgoKPj4gKwlpZiAoIXByaXYtPmNmZykgewoK CgoKCgoKCgo+PiArCQlkZXZfZXJyKGRldiwgIm5vIE9GIG1hdGNoIGRhdGEgcHJvdmlkZWRcbiIp OwoKCgoKCgoKCgo+PiArCQlyZXR1cm4gLUVJTlZBTDsKCgoKCgoKCgoKPj4gKwl9CgoKCgoKCgoK Cj4+ICsKCgoKCgoKCgoKPgoKCgoKCgoKCgo+PiArCXByaXYtPm51bV9waHkgPSBvZl9nZXRfY2hp bGRfY291bnQobnApOwoKCgoKCgoKCgo+CgoKCgoKCgoKCj5DaGVjayBwcml2LT5udW1fcGh5IHdp dGggbWF4IFNvQyBjYXBhYmlsaXRpZXMuCgoKCgoKCgoKCj4KCgoKCgoKCgoKPj4gKwlwcml2LT5u b2RlID0gZGV2bV9rY2FsbG9jKGRldiwgcHJpdi0+bnVtX3BoeSwgc2l6ZW9mKCpwcml2LT5ub2Rl KSwgR0ZQX0tFUk5FTCk7CgoKCgoKCgoKCj4+ICsJaWYgKCFwcml2LT5ub2RlKQoKCgoKCgoKCgo+ PiArCQlyZXR1cm4gLUVOT01FTTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCXByaXYtPmRl diA9IGRldjsKCgoKCgoKCgoKPj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKCgoKCgoK CgoKPj4gKwoKCgoKCgoKCgo+PiArCXByaXYtPnBpcGVfZ3JmID0gc3lzY29uX3JlZ21hcF9sb29r dXBfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsICJyb2NrY2hpcCxwaXBlLWdyZiIpOwoKCgoKCgoK Cgo+PiArCWlmIChJU19FUlIocHJpdi0+cGlwZV9ncmYpKSB7CgoKCgoKCgoKCj4+ICsJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgcGVyaV9jdHJsIHBpcGUtZ3JmIHJlZ21hcFxuIik7CgoK CgoKCgoKCj4+ICsJCXJldHVybiBQVFJfRVJSKHByaXYtPnBpcGVfZ3JmKTsKCgoKCgoKCgoKPj4g Kwl9CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwlpZCA9IDA7CgoKCgoKCgoKCj4+ICsJZm9y X2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGRfbnApIHsKCgoKCgoKCgoKPj4gKwkJc3RydWN0 IHJvY2tjaGlwX211bHRpcGh5X25vZGVfcHJpdiAqbm9kZV9wcml2OwoKCgoKCgoKCgo+PiArCQlz dHJ1Y3QgZGV2aWNlICpzdWJkZXY7CgoKCgoKCgoKCj4+ICsJCXN0cnVjdCBwaHkgKnBoeTsKCgoK CgoKCgoKPj4gKwkJaW50IGk7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwkJbm9kZV9wcml2 ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpub2RlX3ByaXYpLCBHRlBfS0VSTkVMKTsKCgoK CgoKCgoKPj4gKwkJaWYgKCFub2RlX3ByaXYpIHsKCgoKCgoKCgoKPj4gKwkJCXJldHZhbCA9IC1F Tk9NRU07CgoKCgoKCgoKCj4+ICsJCQlnb3RvIHB1dF9jaGlsZDsKCgoKCgoKCgoKPj4gKwkJfQoK CgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJCXByaXYtPm5vZGVbaWRdID0gbm9kZV9wcml2OwoK CgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJCXBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIGNo aWxkX25wLCAmcm9jaGNoaXBfbXVsdGlwaHlfb3BzKTsKCgoKCgoKCgoKPj4gKwkJaWYgKElTX0VS UihwaHkpKSB7CgoKCgoKCgoKCj4+ICsJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUg cGh5XG4iKTsKCgoKCgoKCgoKPj4gKwkJCXJldHZhbCA9IFBUUl9FUlIocGh5KTsKCgoKCgoKCgoK Pj4gKwkJCWdvdG8gcHV0X2NoaWxkOwoKCgoKCgoKCgo+PiArCQl9CgoKCgoKCgoKCj4+ICsKCgoK CgoKCgoKPj4gKwkJc3ViZGV2ID0gJnBoeS0+ZGV2OwoKCgoKCgoKCgo+PiArCQlyZXR2YWwgPSBv Zl9hZGRyZXNzX3RvX3Jlc291cmNlKGNoaWxkX25wLCAwLCAmcmVzKTsKCgoKCgoKCgoKPj4gKwkJ aWYgKHJldHZhbCkgewoKCgoKCgoKCgo+PiArCQkJZGV2X2VycihzdWJkZXYsICJmYWlsZWQgdG8g Z2V0IGFkZHJlc3MgcmVzb3VyY2UoaWQtJWQpXG4iLAoKCgoKCgoKCgo+PiArCQkJCWlkKTsKCgoK CgoKCgoKPj4gKwkJCWdvdG8gcHV0X2NoaWxkOwoKCgoKCgoKCgo+PiArCQl9CgoKCgoKCgoKCj4+ ICsKCgoKCgoKCgoKPj4gKwkJbm9kZV9wcml2LT5tbWlvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl KHN1YmRldiwgJnJlcyk7CgoKCgoKCgoKCj4+ICsJCWlmIChJU19FUlIobm9kZV9wcml2LT5tbWlv KSkgewoKCgoKCgoKCgo+PiArCQkJcmV0dmFsID0gUFRSX0VSUihub2RlX3ByaXYtPm1taW8pOwoK CgoKCgoKCgo+PiArCQkJZ290byBwdXRfY2hpbGQ7CgoKCgoKCgoKCj4+ICsJCX0KCgoKCgoKCgoK Pj4gKwoKCgoKCgoKCgo+PiArCQlub2RlX3ByaXYtPnBoeSA9IHBoeTsKCgoKCgoKCgoKPgoKCgoK CgoKCgo+PiArCQlub2RlX3ByaXYtPmlkID0gaWQ7CgoKCgoKCgoKCj4KCgoKCgoKCgoKPkZvciBh IG1vZGUgY2hlY2sgYmFzZWQgb24gaWQgYW5kIHBoeSBub2RlIGNhcGFiaWxpdGllcyB0aGUgaWQg aGFzIHRvIGJlCgoKCgoKCgoKCj5iYXNlZCBvbiByZWcgYWRkcmVzcyBEVCBvcmRlci4KCgoKCgoK CgoKPkN1cnJlbnRseSBub2RlX3ByaXYtPmlkIGlzIGJhc2VkIG9uIG5vZGUgb3JkZXIuCgoKCgoK CgoKCj5DaGVjayByZWcgYWRkcmVzcyB3aXRoIGEgdGFibGUgYW5kIGFzc2lnbiBpZCBmcm9tIHRh YmxlIGluZGV4LgoKCgoKCgoKCgo+CgoKCgoKCgoKCj4+ICsJCW5vZGVfcHJpdi0+bW9kZSA9IFBI WV9OT05FOwoKCgoKCgoKCgo+PiArCQlpZCsrOwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJ CXBoeV9zZXRfZHJ2ZGF0YShwaHksIG5vZGVfcHJpdik7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoK Pj4gKwkJbm9kZV9wcml2LT5udW1fY2xrcyA9IGRldm1fY2xrX2J1bGtfZ2V0X2FsbChkZXYsICZu b2RlX3ByaXYtPmNsa3MpOwoKCgoKCgoKCgo+PiArCQlpZiAobm9kZV9wcml2LT5udW1fY2xrcyA8 IDEpIHsKCgoKCgoKCgoKPj4gKwkJCXJldHZhbCA9IC1FSU5WQUw7CgoKCgoKCgoKCj4+ICsJCQln b3RvIHB1dF9jaGlsZDsKCgoKCgoKCgoKPj4gKwkJfQoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ ICsJCW5vZGVfcHJpdi0+cmVmY2xrID0gTlVMTDsKCgoKCgoKCgoKPj4gKwkJZm9yIChpID0gMDsg aSA8IG5vZGVfcHJpdi0+bnVtX2Nsa3M7IGkrKykgewoKCgoKCgoKCgo+PiArCQkJaWYgKCFzdHJu Y21wKG5vZGVfcHJpdi0+Y2xrc1tpXS5pZCwgInJlZiIsIDMpKSB7CgoKCgoKCgoKCj4+ICsJCQkJ bm9kZV9wcml2LT5yZWZjbGsgPSBub2RlX3ByaXYtPmNsa3NbaV0uY2xrOwoKCgoKCgoKCgo+PiAr CQkJCWJyZWFrOwoKCgoKCgoKCgo+PiArCQkJfQoKCgoKCgoKCgo+PiArCQl9CgoKCgoKCgoKCj4+ ICsKCgoKCgoKCgoKPj4gKwkJaWYgKCFub2RlX3ByaXYtPnJlZmNsaykgewoKCgoKCgoKCgo+PiAr CQkJZGV2X2VycihkZXYsICJubyByZWZjbGsgZm91bmRcbiIpOwoKCgoKCgoKCgo+PiArCQkJcmV0 dmFsID0gLUVJTlZBTDsKCgoKCgoKCgoKPj4gKwkJCWdvdG8gcHV0X2NoaWxkOwoKCgoKCgoKCgo+ PiArCQl9CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwkJbm9kZV9wcml2LT5waHlfZ3JmID0g c3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsCgoKCgoKCgoKCj4+ ICsJCQkJCQkJCcKgwqDCoMKgICJyb2NrY2hpcCxwaXBlLXBoeS1ncmYiKTsKCgoKCgoKCgoKPj4g KwkJaWYgKElTX0VSUihub2RlX3ByaXYtPnBoeV9ncmYpKSB7CgoKCgoKCgoKCj4+ICsJCQlyZXR2 YWwgPSBQVFJfRVJSKG5vZGVfcHJpdi0+cGh5X2dyZik7CgoKCgoKCgoKCj4+ICsJCQlkZXZfZXJy KGRldiwgImZhaWxlZCB0byBmaW5kIHBpcGUtcGh5LWdyZiByZWdtYXBcbiIpOwoKCgoKCgoKCgo+ PiArCQkJZ290byBwdXRfY2hpbGQ7CgoKCgoKCgoKCj4+ICsJCX0KCgoKCgoKCgoKPj4gKwoKCgoK CgoKCgo+PiArCQlub2RlX3ByaXYtPmVuYWJsZV9zc2MgPSBkZXZpY2VfcHJvcGVydHlfcHJlc2Vu dChkZXYsICJyb2NrY2hpcCxlbmFibGUtc3NjIik7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4g KwkJbm9kZV9wcml2LT5leHRfcmVmY2xrID0gZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAi cm9ja2NoaXAsZXh0LXJlZmNsayIpOwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJCW5vZGVf cHJpdi0+cGh5X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9hcnJheV9nZXQoZGV2LCBmYWxzZSwg ZmFsc2UpOwoKCgoKCgoKCgo+PiArCQlpZiAoSVNfRVJSKG5vZGVfcHJpdi0+cGh5X3JzdCkpIHsK CgoKCgoKCgoKPj4gKwkJCXJldHZhbCA9IFBUUl9FUlIobm9kZV9wcml2LT5waHlfcnN0KTsKCgoK CgoKCgoKPj4gKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwaHkgcmVzZXRcbiIpOwoK CgoKCgoKCgo+PiArCQkJZ290byBwdXRfY2hpbGQ7CgoKCgoKCgoKCj4+ICsJCX0KCgoKCgoKCgoK Pj4gKwoKCgoKCgoKCgo+PiArCQlyZXR2YWwgPSByZXNldF9jb250cm9sX2Fzc2VydChub2RlX3By aXYtPnBoeV9yc3QpOwoKCgoKCgoKCgo+PiArCQlpZiAocmV0dmFsKSB7CgoKCgoKCgoKCj4+ICsJ CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXNldCBwaHlcbiIpOwoKCgoKCgoKCgo+PiArCQkJ Z290byBwdXRfY2hpbGQ7CgoKCgoKCgoKCj4+ICsJCX0KCgoKCgoKCgoKPj4gKwl9CgoKCgoKCgoK Cj4+ICsKCgoKCgoKCgoKPj4gKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9y ZWdpc3RlcihkZXYsIHJvY2tjaGlwX211bHRpcGh5X3hsYXRlKTsKCgoKCgoKCgoKPj4gKwoKCgoK CgoKCgo+PiArCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocGh5X3Byb3ZpZGVyKTsKCgoKCgoKCgoK Pj4gK3B1dF9jaGlsZDoKCgoKCgoKCgoKPj4gKwlvZl9ub2RlX3B1dChjaGlsZF9ucCk7CgoKCgoK CgoKCj4+ICsJcmV0dXJuIHJldHZhbDsKCgoKCgoKCgoKPj4gK30KCgoKCgoKCgoKPj4gKwoKCgoK CgoKCgo+PiArc3RhdGljIGludCByazM1NjhfbXVsdGlwaHlfY2ZnKHN0cnVjdCBwaHkgKnBoeSkK CgoKCgoKCgoKPj4gK3sKCgoKCgoKCgoKPj4gKwlzdHJ1Y3Qgcm9ja2NoaXBfbXVsdGlwaHlfbm9k ZV9wcml2ICpub2RlX3ByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKCgoKCgoKCgoKPj4gKwlz dHJ1Y3Qgcm9ja2NoaXBfbXVsdGlwaHlfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShwaHkt PmRldi5wYXJlbnQpOwoKCgoKCgoKCgo+PiArCWNvbnN0IHN0cnVjdCByb2NrY2hpcF9tdWx0aXBo eV9ncmZjZmcgKmNmZyA9IHByaXYtPmNmZy0+Z3JmY2ZnOwoKCgoKCgoKCgo+PiArCXVuc2lnbmVk IGxvbmcgcmF0ZTsKCgoKCgoKCgoKPj4gKwl1MzIgdmFsOwoKCgoKCgoKCgo+PiArCgoKCgoKCgoK Cj4+ICsJc3dpdGNoIChub2RlX3ByaXYtPm1vZGUpIHsKCgoKCgoKCgoKPj4gKwljYXNlIFBIWV9U WVBFX1BDSUU6CgoKCgoKCgoKCj4+ICsJCS8qIFNldCBTU0MgZG93bndhcmQgc3ByZWFkIHNwZWN0 cnVtLiAqLwoKCgoKCgoKCgo+PiArCQlyb2NrY2hpcF9tdWx0aXBoeV91cGRhdGVsKHBoeSwgUEhZ UkVHMzJfU1NDX01BU0ssCgoKCgoKCgoKCj4+ICsJCQkJCcKgIFBIWVJFRzMyX1NTQ19ET1dOV0FS RCA8PCBQSFlSRUczMl9TU0NfRElSX1NISUZULAoKCgoKCgoKCgo+PiArCQkJCQnCoCBSSzM1Njhf UEhZUkVHMzIpOwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5 X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+Y29uMF9mb3JfcGNpZSwgdHJ1 ZSk7CgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5X3BhcmFtX3dyaXRlKG5vZGVfcHJp di0+cGh5X2dyZiwgJmNmZy0+Y29uMV9mb3JfcGNpZSwgdHJ1ZSk7CgoKCgoKCgoKCj4+ICsJCXJv Y2tjaGlwX211bHRpcGh5X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+Y29u Ml9mb3JfcGNpZSwgdHJ1ZSk7CgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5X3BhcmFt X3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+Y29uM19mb3JfcGNpZSwgdHJ1ZSk7CgoK CgoKCgoKCj4+ICsJCWJyZWFrOwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJY2FzZSBQSFlf VFlQRV9VU0IzOgoKCgoKCgoKCgo+PiArCQkvKiBTZXQgU1NDIGRvd253YXJkIHNwcmVhZCBzcGVj dHJ1bS4gKi8KCgoKCgoKCgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlwaHlfdXBkYXRlbChwaHksIFBI WVJFRzMyX1NTQ19NQVNLLAoKCgoKCgoKCgo+PiArCQkJCQnCoCBQSFlSRUczMl9TU0NfRE9XTldB UkQgPDwgUEhZUkVHMzJfU1NDX0RJUl9TSElGVCwKCgoKCgoKCgoKPj4gKwkJCQkJwqAgUkszNTY4 X1BIWVJFRzMyKTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCQkvKiBFbmFibGUgYWRhcHRp dmUgQ1RMRSBmb3IgVVNCMy4wIFJ4LiAqLwoKCgoKCgoKCgo+PiArCQl2YWwgPSByZWFkbChub2Rl X3ByaXYtPm1taW8gKyBSSzM1NjhfUEhZUkVHMTUpOwoKCgoKCgoKCgo+PiArCQl2YWwgfD0gUEhZ UkVHMTVfQ1RMRV9FTjsKCgoKCgoKCgoKPj4gKwkJd3JpdGVsKHZhbCwgbm9kZV9wcml2LT5tbWlv ICsgUkszNTY4X1BIWVJFRzE1KTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCQkvKiBTZXQg UExMIEtWQ08gZmluZSB0dW5pbmcgc2lnbmFscy4gKi8KCgoKCgoKCgoKPj4gKwkJcm9ja2NoaXBf bXVsdGlwaHlfdXBkYXRlbChwaHksIFBIWVJFRzMzX1BMTF9LVkNPX01BU0ssCgoKCgoKCgoKCj4+ ICsJCQkJCcKgIFBIWVJFRzMzX1BMTF9LVkNPX1ZBTFVFIDw8IFBIWVJFRzMzX1BMTF9LVkNPX1NI SUZULAoKCgoKCgoKCgo+PiArCQkJCQnCoCBSSzM1NjhfUEhZUkVHMzMpOwoKCgoKCgoKCgo+PiAr CgoKCgoKCgoKCj4+ICsJCS8qIEVuYWJsZSBjb250cm9sbGluZyByYW5kb20gaml0dGVyLiAqLwoK CgoKCgoKCgo+PiArCQl3cml0ZWwoUEhZUkVHMTJfUExMX0xQRl9BREpfVkFMVUUsIG5vZGVfcHJp di0+bW1pbyArIFJLMzU2OF9QSFlSRUcxMik7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwkJ LyogU2V0IFBMTCBpbnB1dCBjbG9jayBkaXZpZGVyIDEvMi4gKi8KCgoKCgoKCgoKPj4gKwkJcm9j a2NoaXBfbXVsdGlwaHlfdXBkYXRlbChwaHksIFBIWVJFRzZfUExMX0RJVl9NQVNLLAoKCgoKCgoK Cgo+PiArCQkJCQnCoCBQSFlSRUc2X1BMTF9ESVZfMiA8PCBQSFlSRUc2X1BMTF9ESVZfU0hJRlQs CgoKCgoKCgoKCj4+ICsJCQkJCcKgIFJLMzU2OF9QSFlSRUc2KTsKCgoKCgoKCgoKPj4gKwoKCgoK CgoKCgo+PiArCQl3cml0ZWwoUEhZUkVHMThfUExMX0xPT1AsIG5vZGVfcHJpdi0+bW1pbyArIFJL MzU2OF9QSFlSRUcxOCk7CgoKCgoKCgoKCj4+ICsJCXdyaXRlbChQSFlSRUcxMV9TVV9UUklNXzBf Nywgbm9kZV9wcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzExKTsKCgoKCgoKCgoKPj4gKwoKCgoK CgoKCgo+PiArCQlyb2NrY2hpcF9tdWx0aXBoeV9wYXJhbV93cml0ZShub2RlX3ByaXYtPnBoeV9n cmYsICZjZmctPnBpcGVfc2VsX3VzYiwgdHJ1ZSk7CgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211 bHRpcGh5X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+cGlwZV90eGNvbXBf c2VsLCBmYWxzZSk7CgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5X3BhcmFtX3dyaXRl KG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+cGlwZV90eGVsZWNfc2VsLCBmYWxzZSk7CgoKCgoK CgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dy ZiwgJmNmZy0+dXNiX21vZGVfc2V0LCB0cnVlKTsKCgoKCgoKCgoKPj4gKwkJYnJlYWs7CgoKCgoK CgoKCj4+ICsKCgoKCgoKCgoKPj4gKwljYXNlIFBIWV9UWVBFX1NBVEE6CgoKCgoKCgoKCj4+ICsJ CS8qIEVuYWJsZSBhZGFwdGl2ZSBDVExFIGZvciBTQVRBIFJ4LiAqLwoKCgoKCgoKCgo+PiArCQl2 YWwgPSByZWFkbChub2RlX3ByaXYtPm1taW8gKyBSSzM1NjhfUEhZUkVHMTUpOwoKCgoKCgoKCgo+ PiArCQl2YWwgfD0gUEhZUkVHMTVfQ1RMRV9FTjsKCgoKCgoKCgoKPj4gKwkJd3JpdGVsKHZhbCwg bm9kZV9wcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzE1KTsKCgoKCgoKCgoKPj4gKwkJLyoKCgoK CgoKCgoKPj4gKwkJICogU2V0IHR4X3J0ZXJtPTUwb2htIGFuZCByeF9ydGVybT00NG9obSBmb3Ig U0FUQS4KCgoKCgoKCgoKPj4gKwkJICogMDogNjBvaG0sIDg6IDUwb2htIDE1OiA0NG9obSAoYnkg c3RlcCBhYm9ydCAxb2htKQoKCgoKCgoKCgo+PiArCQkgKi8KCgoKCgoKCgoKPj4gKwkJdmFsID0g UEhZUkVHN19UWF9SVEVSTV81ME9ITSA8PCBQSFlSRUc3X1RYX1JURVJNX1NISUZUOwoKCgoKCgoK Cgo+PiArCQl2YWwgfD0gUEhZUkVHN19SWF9SVEVSTV80NE9ITSA8PCBQSFlSRUc3X1JYX1JURVJN X1NISUZUOwoKCgoKCgoKCgo+PiArCQl3cml0ZWwodmFsLCBub2RlX3ByaXYtPm1taW8gKyBSSzM1 NjhfUEhZUkVHNyk7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlw aHlfcGFyYW1fd3JpdGUobm9kZV9wcml2LT5waHlfZ3JmLCAmY2ZnLT5jb24wX2Zvcl9zYXRhLCB0 cnVlKTsKCgoKCgoKCgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlwaHlfcGFyYW1fd3JpdGUobm9kZV9w cml2LT5waHlfZ3JmLCAmY2ZnLT5jb24xX2Zvcl9zYXRhLCB0cnVlKTsKCgoKCgoKCgoKPj4gKwkJ cm9ja2NoaXBfbXVsdGlwaHlfcGFyYW1fd3JpdGUobm9kZV9wcml2LT5waHlfZ3JmLCAmY2ZnLT5j b24yX2Zvcl9zYXRhLCB0cnVlKTsKCgoKCgoKCgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlwaHlfcGFy YW1fd3JpdGUobm9kZV9wcml2LT5waHlfZ3JmLCAmY2ZnLT5jb24zX2Zvcl9zYXRhLCB0cnVlKTsK CgoKCgoKCgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlwaHlfcGFyYW1fd3JpdGUocHJpdi0+cGlwZV9n cmYsICZjZmctPnBpcGVfY29uMF9mb3Jfc2F0YSwgdHJ1ZSk7CgoKCgoKCgoKCj4+ICsJCWJyZWFr OwoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJY2FzZSBQSFlfVFlQRV9TR01JSToKCgoKCgoK CgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlwaHlfcGFyYW1fd3JpdGUocHJpdi0+cGlwZV9ncmYsICZj ZmctPnBpcGVfeHBjc19waHlfcmVhZHksIHRydWUpOwoKCgoKCgoKCgo+PiArCQlyb2NrY2hpcF9t dWx0aXBoeV9wYXJhbV93cml0ZShub2RlX3ByaXYtPnBoeV9ncmYsICZjZmctPnBpcGVfcGh5bW9k ZV9zZWwsIHRydWUpOwoKCgoKCgoKCgo+PiArCQlyb2NrY2hpcF9tdWx0aXBoeV9wYXJhbV93cml0 ZShub2RlX3ByaXYtPnBoeV9ncmYsICZjZmctPnBpcGVfc2VsX3FzZ21paSwgdHJ1ZSk7CgoKCgoK CgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dy ZiwgJmNmZy0+c2dtaWlfbW9kZV9zZXQsIHRydWUpOwoKCgoKCgoKCgo+PiArCQlicmVhazsKCgoK CgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCWNhc2UgUEhZX1RZUEVfUVNHTUlJOgoKCgoKCgoKCgo+ PiArCQlyb2NrY2hpcF9tdWx0aXBoeV9wYXJhbV93cml0ZShwcml2LT5waXBlX2dyZiwgJmNmZy0+ cGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7CgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211bHRp cGh5X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+cGlwZV9waHltb2RlX3Nl bCwgdHJ1ZSk7CgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5X3BhcmFtX3dyaXRlKG5v ZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+cGlwZV9yYXRlX3NlbCwgdHJ1ZSk7CgoKCgoKCgoKCj4+ ICsJCXJvY2tjaGlwX211bHRpcGh5X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNm Zy0+cGlwZV9zZWxfcXNnbWlpLCB0cnVlKTsKCgoKCgoKCgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlw aHlfcGFyYW1fd3JpdGUobm9kZV9wcml2LT5waHlfZ3JmLCAmY2ZnLT5xc2dtaWlfbW9kZV9zZXQs IHRydWUpOwoKCgoKCgoKCgo+PiArCQlicmVhazsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiAr CWRlZmF1bHQ6CgoKCgoKCgoKCj4+ICsJCWRldl9lcnIocHJpdi0+ZGV2LCAiaW5jb21wYXRpYmxl IFBIWSB0eXBlXG4iKTsKCgoKCgoKCgoKPj4gKwkJcmV0dXJuIC1FSU5WQUw7CgoKCgoKCgoKCj4+ ICsJfQoKCgoKCgoKCgo+PiArCgoKCgoKCgoKCj4+ICsJcmF0ZSA9IGNsa19nZXRfcmF0ZShub2Rl X3ByaXYtPnJlZmNsayk7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwlzd2l0Y2ggKHJhdGUp IHsKCgoKCgoKCgoKPj4gKwljYXNlIFJFRl9DTE9DS18yNE1IejoKCgoKCgoKCgoKPj4gKwkJaWYg KG5vZGVfcHJpdi0+bW9kZSA9PSBQSFlfVFlQRV9VU0IzIHx8IG5vZGVfcHJpdi0+bW9kZSA9PSBQ SFlfVFlQRV9TQVRBKSB7CgoKCgoKCgoKCj4+ICsJCQkvKiBTZXQgc3NjX2NudFs5OjBdPTAxMDEx MTExMDEgJiAzMS41S0h6LiAqLwoKCgoKCgoKCgo+PiArCQkJdmFsID0gUEhZUkVHMTVfU1NDX0NO VF9WQUxVRSA8PCBQSFlSRUcxNV9TU0NfQ05UX1NISUZUOwoKCgoKCgoKCgo+PiArCQkJcm9ja2No aXBfbXVsdGlwaHlfdXBkYXRlbChwaHksIFBIWVJFRzE1X1NTQ19DTlRfTUFTSywKCgoKCgoKCgoK Pj4gKwkJCQkJCcKgIHZhbCwgUkszNTY4X1BIWVJFRzE1KTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoK Cgo+PiArCQkJd3JpdGVsKFBIWVJFRzE2X1NTQ19DTlRfVkFMVUUsIG5vZGVfcHJpdi0+bW1pbyAr IFJLMzU2OF9QSFlSRUcxNik7CgoKCgoKCgoKCj4+ICsJCX0KCgoKCgoKCgoKPj4gKwkJYnJlYWs7 CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwljYXNlIFJFRl9DTE9DS18yNU1IejoKCgoKCgoK CgoKPj4gKwkJcm9ja2NoaXBfbXVsdGlwaHlfcGFyYW1fd3JpdGUobm9kZV9wcml2LT5waHlfZ3Jm LCAmY2ZnLT5waXBlX2Nsa18yNW0sIHRydWUpOwoKCgoKCgoKCgo+PiArCQlicmVhazsKCgoKCgoK CgoKPj4gKwoKCgoKCgoKCgo+PiArCWNhc2UgUkVGX0NMT0NLXzEwME1IejoKCgoKCgoKCgoKPj4g KwkJcm9ja2NoaXBfbXVsdGlwaHlfcGFyYW1fd3JpdGUobm9kZV9wcml2LT5waHlfZ3JmLCAmY2Zn LT5waXBlX2Nsa18xMDBtLCB0cnVlKTsKCgoKCgoKCgoKPj4gKwkJaWYgKG5vZGVfcHJpdi0+bW9k ZSA9PSBQSFlfVFlQRV9QQ0lFKSB7CgoKCgoKCgoKCj4+ICsJCQkvKiBQTEwgS1ZDT8KgIGZpbmUg dHVuaW5nLiAqLwoKCgoKCgoKCgo+PiArCQkJdmFsID0gUEhZUkVHMzNfUExMX0tWQ09fVkFMVUUg PDwgUEhZUkVHMzNfUExMX0tWQ09fU0hJRlQ7CgoKCgoKCgoKCj4+ICsJCQlyb2NrY2hpcF9tdWx0 aXBoeV91cGRhdGVsKHBoeSwgUEhZUkVHMzNfUExMX0tWQ09fTUFTSywKCgoKCgoKCgoKPj4gKwkJ CQkJCcKgIHZhbCwgUkszNTY4X1BIWVJFRzMzKTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiAr CQkJLyogRW5hYmxlIGNvbnRyb2xsaW5nIHJhbmRvbSBqaXR0ZXIuICovCgoKCgoKCgoKCj4+ICsJ CQl3cml0ZWwoUEhZUkVHMTJfUExMX0xQRl9BREpfVkFMVUUsIG5vZGVfcHJpdi0+bW1pbyArIFJL MzU2OF9QSFlSRUcxMik7CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwkJCXZhbCA9IFBIWVJF RzZfUExMX0RJVl8yIDw8IFBIWVJFRzZfUExMX0RJVl9TSElGVDsKCgoKCgoKCgoKPj4gKwkJCXJv Y2tjaGlwX211bHRpcGh5X3VwZGF0ZWwocGh5LCBQSFlSRUc2X1BMTF9ESVZfTUFTSywKCgoKCgoK CgoKPj4gKwkJCQkJCcKgIHZhbCwgUkszNTY4X1BIWVJFRzYpOwoKCgoKCgoKCgo+PiArCgoKCgoK CgoKCj4+ICsJCQl3cml0ZWwoUEhZUkVHMThfUExMX0xPT1AsIG5vZGVfcHJpdi0+bW1pbyArIFJL MzU2OF9QSFlSRUcxOCk7CgoKCgoKCgoKCj4+ICsJCQl3cml0ZWwoUEhZUkVHMTFfU1VfVFJJTV8w XzcsIG5vZGVfcHJpdi0+bW1pbyArIFJLMzU2OF9QSFlSRUcxMSk7CgoKCgoKCgoKCj4+ICsJCX0g ZWxzZSBpZiAobm9kZV9wcml2LT5tb2RlID09IFBIWV9UWVBFX1NBVEEpIHsKCgoKCgoKCgoKPj4g KwkJCS8qIGRvd253YXJkIHNwcmVhZCBzcGVjdHJ1bSArNTAwcHBtICovCgoKCgoKCgoKCj4+ICsJ CQl2YWwgPSBQSFlSRUczMl9TU0NfRE9XTldBUkQgPDwgUEhZUkVHMzJfU1NDX0RJUl9TSElGVDsK CgoKCgoKCgoKPj4gKwkJCXZhbCB8PSBQSFlSRUczMl9TU0NfT0ZGU0VUXzUwMFBQTSA8PCBQSFlS RUczMl9TU0NfT0ZGU0VUX1NISUZUOwoKCgoKCgoKCgo+PiArCQkJcm9ja2NoaXBfbXVsdGlwaHlf dXBkYXRlbChwaHksIFBIWVJFRzMyX1NTQ19NQVNLLAoKCgoKCgoKCgo+PiArCQkJCQkJwqAgdmFs LCBSSzM1NjhfUEhZUkVHMzIpOwoKCgoKCgoKCgo+PiArCQkJd3JpdGVsKHZhbCwgbm9kZV9wcml2 LT5tbWlvICsgUkszNTY4X1BIWVJFRzMyKTsKCgoKCgoKCgoKPj4gKwkJfQoKCgoKCgoKCgo+PiAr CQlicmVhazsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCWRlZmF1bHQ6CgoKCgoKCgoKCj4+ ICsJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5zdXBwb3J0ZWQgcmF0ZTogJWx1XG4iLCByYXRlKTsK CgoKCgoKCgoKPj4gKwkJcmV0dXJuIC1FSU5WQUw7CgoKCgoKCgoKCj4+ICsJfQoKCgoKCgoKCgo+ CgoKCgoKCgoKCj4JY29uZGl0aW9uMSA9IChTb0MgcmszNTY4KSAmJiAoaWQgPT0gMCkKCgoKCgoK CgoKPgl2YWwgPSBjb25kaXRpb24xICYmIChtb2RlICE9IFVTQjMpPyBmYWxzZSA6IHRydWU7CgoK CgoKCgoKCj4JaWYgKGNvbmRpdGlvbjEpCgoKCgoKCgoKCj4JCXJvY2tjaGlwX2NvbWJwaHlfcGFy YW1fd3JpdGUocHJpdi0+cGlwZV9ncmYsCgoKCgoKCgoKCj4mcGh5X2NmZy0+Z3JmY2ZnLT51M290 ZzBfcG9ydF9lbiwgdmFsKTsKCgoKCgoKCgoKPgoKCgoKCgoKCgo+CgoKCgoKCgoKCj4JY29uZGl0 aW9uMiA9IChTb0MgcmszNTY2IG9yIHJrMzU2OCkgJiYgKGlkID09IDEpCgoKCgoKCgoKCj4JdmFs ID0gY29uZGl0aW9uMiAmJiAobW9kZSAhPSBVU0IzKT8gZmFsc2UgOiB0cnVlOwoKCgoKCgoKCgo+ CWlmIChjb25kaXRpb24yKQoKCgoKCgoKCgo+CQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRl KHByaXYtPnBpcGVfZ3JmLAoKCgoKCgoKCgo+JnBoeV9jZmctPmdyZmNmZy0+dTNvdGcxX3BvcnRf ZW4sIHZhbCk7CgoKCgoKCgoKCj4KCgoKCgoKCgoKPj09PT09PT09PT09PT09PT09PT09PT09PQoK CgoKCgoKCgo+CgoKCgoKCgoKCj4JY29uZGl0aW9uMyA9IChTb0MgcmszNTY4KSAmJiAoaWQgPT0g MSB8fCBpZCA9PSAyKSAmJiAobW9kZSA9PSBTR01JSSkKCgoKCgoKCgoKPgl2YWwgPSBjb25kaXRp b24zICYmIChub2RlX3ByaXYtPnNnbWlpLW1hYy1zZWwpPyB0cnVlIDogZmFsc2U7CgoKCgoKCgoK Cj4JaWYgKGNvbmRpdGlvbjMpCgoKCgoKCgoKCj4JCXJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3Jp dGUocHJpdi0+cGlwZV9ncmYsCgoKCgoKCgoKCj4mcGh5X2NmZy0+Z3JmY2ZnLT5waXBlX3NnbWlp X21hY19zZWwsIHZhbCk7CgoKCgoKCgoKCj4KCgoKCgoKCgoKPlRPRE86CgoKCgoKCgoKCj5BbGxv dyBtb3JlIHBoeSBkYXRhIHdpdGg6CgoKCgoKCgoKCj4KCgoKCgoKCgoKPllBTUwgbm9kZToKCgoK CgoKCgoKPgoKCgoKCgoKCgo+wqDCoMKgwqAgIiNwaHktY2VsbHMiOgoKCgoKCgoKCgo+wqDCoMKg wqDCoMKgwqAgZW51bTogWzEsIDJdCgoKCgoKCgoKCj4KCgoKCgoKCgoKPkRUIG5vZGU6CgoKCgoK CgoKCj4KCgoKCgoKCgoKPglnbWFjMDogZXRoZXJuZXRAZmUyYTAwMDAgewoKCgoKCgoKCgo+CQlw aHlzID0gPCZjb21icGh5MSBQSFlfVFlQRV9TR01JSSAwPjsKCgoKCgoKCgoKPgkJcGh5LW5hbWVz ID0gInNnbWlpLXBoeSI7CgoKCgoKCgoKCj4KCgoKCgoKCgoKPm9yCgoKCgoKCgoKCj4KCgoKCgoK CgoKPgkJcGh5cyA9IDwmY29tYnBoeTIgUEhZX1RZUEVfU0dNSUkgMD47CgoKCgoKCgoKCj4JCXBo eS1uYW1lcyA9ICJzZ21paS1waHkiOwoKCgoKCgoKCgo+CX0KCgoKCgoKCgoKPgoKCgoKCgoKCgo+ CWdtYWMxOiBldGhlcm5ldEBmZTAxMDAwMCB7CgoKCgoKCgoKCj4JCXBoeXMgPSA8JmNvbWJwaHkx IFBIWV9UWVBFX1NHTUlJIDE+OwoKCgoKCgoKCgo+CQlwaHktbmFtZXMgPSAic2dtaWktcGh5IjsK CgoKCgoKCgoKPgoKCgoKCgoKCgo+b3IKCgoKCgoKCgoKPgoKCgoKCgoKCgo+CQlwaHlzID0gPCZj b21icGh5MiBQSFlfVFlQRV9TR01JSSAxPjsKCgoKCgoKCgoKPgkJcGh5LW5hbWVzID0gInNnbWlp LXBoeSI7CgoKCgoKCgoKCj4JfQoKCgoKCgoKCgo+CgoKCgoKCgoKCj5Db3VsZCBzb21lb25lIHRl c3QgdGhpcyBpZGVhPwoKCgoKCgoKCgo+CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoKPj4gKwlpZiAo bm9kZV9wcml2LT5leHRfcmVmY2xrKSB7CgoKCgoKCgoKCj4+ICsJCXJvY2tjaGlwX211bHRpcGh5 X3BhcmFtX3dyaXRlKG5vZGVfcHJpdi0+cGh5X2dyZiwgJmNmZy0+cGlwZV9jbGtfZXh0LCB0cnVl KTsKCgoKCgoKCgoKPj4gKwkJaWYgKG5vZGVfcHJpdi0+bW9kZSA9PSBQSFlfVFlQRV9QQ0lFICYm IHJhdGUgPT0gUkVGX0NMT0NLXzEwME1IeikgewoKCgoKCgoKCgo+PiArCQkJdmFsID0gUEhZUkVH MTNfUkVTSVNURVJfSElHSF9aIDw8IFBIWVJFRzEzX1JFU0lTVEVSX1NISUZUOwoKCgoKCgoKCgo+ PiArCQkJdmFsIHw9IFBIWVJFRzEzX0NLUkNWX0FNUDA7CgoKCgoKCgoKCj4+ICsJCQlyb2NrY2hp cF9tdWx0aXBoeV91cGRhdGVsKHBoeSwgUEhZUkVHMTNfUkVTSVNURVJfTUFTSywKCgoKCgoKCgoK Pj4gKwkJCQkJCcKgIHZhbCwgUkszNTY4X1BIWVJFRzEzKTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoK Cgo+PiArCQkJdmFsID0gcmVhZGwobm9kZV9wcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzE0KTsK CgoKCgoKCgoKPj4gKwkJCXZhbCB8PSBQSFlSRUcxNF9DS1JDVl9BTVAxOwoKCgoKCgoKCgo+PiAr CQkJd3JpdGVsKHZhbCwgbm9kZV9wcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzE0KTsKCgoKCgoK CgoKPj4gKwkJfQoKCgoKCgoKCgo+PiArCX0KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArCWlm IChub2RlX3ByaXYtPmVuYWJsZV9zc2MpIHsKCgoKCgoKCgoKPj4gKwkJdmFsID0gcmVhZGwobm9k ZV9wcml2LT5tbWlvICsgUkszNTY4X1BIWVJFRzgpOwoKCgoKCgoKCgo+PiArCQl2YWwgfD0gUEhZ UkVHOF9TU0NfRU47CgoKCgoKCgoKCj4+ICsJCXdyaXRlbCh2YWwsIG5vZGVfcHJpdi0+bW1pbyAr IFJLMzU2OF9QSFlSRUc4KTsKCgoKCgoKCgoKPj4gKwl9CgoKCgoKCgoKCj4+ICsKCgoKCgoKCgoK Pj4gKwlyZXR1cm4gMDsKCgoKCgoKCgoKPj4gK30KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+c3Rh dGljIGNvbnN0IHN0cnVjdCByb2NrY2hpcF9tdWx0aXBoeV9ncmZjZmcgcmszNTY2X211bHRpcGh5 X2dyZmNmZ3MgPSB7CgoKCgoKCgoKCj5bLi5dCgoKCgoKCgoKCj4KCgoKCgoKCgoKPkFkZCBtYXhp bXVtIG51bWJlciBvZiBwaHkgbm9kZXMgZm9yIGNoZWNrIHdpdGggcHJpdi0+bnVtX3BoeS4KCgoK CgoKCgoKPiAubnVtX3BoeSA9IDIsCgoKCgoKCgoKCj4KCgoKCgoKCgoKPkFkZCByZWcgYWRkcmVz c2VzIHRvIGRldGVjdCBwaHkgaWQuCgoKCgoKCgoKCj4ucmVncyA9CgoKCgoKCgoKCj4weGZlODMw MDAwLAoKCgoKCgoKCgo+MHhmZTg0MDAwMCwKCgoKCgoKCgoKPgoKCgoKCgoKCgo+QWRkIHRhYmxl IHdpdGggU29DIGNhcGFiaWxpdGllcyBiYXNlZCBvbiBwaHkgaWQuCgoKCgoKCgoKCj4gUENpZSBV U0IzIFNBVEEgU0dNSUkKCgoKCgoKCgoKPjA6IDDCoMKgIHjCoMKgwqAgeMKgwqDCoMKgIDAKCgoK CgoKCgoKPjE6IHjCoMKgIHjCoMKgwqAgeMKgwqDCoMKgIDAKCgoKCgoKCgoKPgoKCgoKCgoKCgo+ RG9uJ3QgY29uZnVzZSBwaHkgaWQgd2l0aCBub2RlIGxhYmVsIG51bWJlcnMhCgoKCgoKCgoKCj4K CgoKCgoKCgoKPn07CgoKCgoKCgoKCj4KCgoKCgoKCgoKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg cm9ja2NoaXBfbXVsdGlwaHlfZ3JmY2ZnIHJrMzU2OF9tdWx0aXBoeV9ncmZjZmdzID0gewoKCgoK CgoKCgo+PiArCS8qIHBpcGUtcGh5LWdyZiAqLwoKCgoKCgoKCgo+PiArCS5wY2llX21vZGVfc2V0 CQk9IHsgMHgwMDAwLCA1LCAwLCAweDAwLCAweDExIH0sCgoKCgoKCgoKCj4+ICsJLnVzYl9tb2Rl X3NldAkJPSB7IDB4MDAwMCwgNSwgMCwgMHgwMCwgMHgwNCB9LAoKCgoKCgoKCgo+PiArCS5zZ21p aV9tb2RlX3NldAkJPSB7IDB4MDAwMCwgNSwgMCwgMHgwMCwgMHgwMSB9LAoKCgoKCgoKCgo+PiAr CS5xc2dtaWlfbW9kZV9zZXQJPSB7IDB4MDAwMCwgNSwgMCwgMHgwMCwgMHgyMSB9LAoKCgoKCgoK Cgo+PiArCS5waXBlX3J4dGVybV9zZXQJPSB7IDB4MDAwMCwgMTIsIDEyLCAweDAwLCAweDAxIH0s CgoKCgoKCgoKCj4+ICsJLnBpcGVfdHhlbGVjX3NldAk9IHsgMHgwMDA0LCAxLCAxLCAweDAwLCAw eDAxIH0sCgoKCgoKCgoKCj4+ICsJLnBpcGVfdHhjb21wX3NldAk9IHsgMHgwMDA0LCA0LCA0LCAw eDAwLCAweDAxIH0sCgoKCgoKCgoKCj4+ICsJLnBpcGVfY2xrXzI1bQkJPSB7IDB4MDAwNCwgMTQs IDEzLCAweDAwLCAweDAxIH0sCgoKCgoKCgoKCj4+ICsJLnBpcGVfY2xrXzEwMG0JCT0geyAweDAw MDQsIDE0LCAxMywgMHgwMCwgMHgwMiB9LAoKCgoKCgoKCgo+PiArCS5waXBlX3BoeW1vZGVfc2Vs CT0geyAweDAwMDgsIDEsIDEsIDB4MDAsIDB4MDEgfSwKCgoKCgoKCgoKPj4gKwkucGlwZV9yYXRl X3NlbAkJPSB7IDB4MDAwOCwgMiwgMiwgMHgwMCwgMHgwMSB9LAoKCgoKCgoKCgo+PiArCS5waXBl X3J4dGVybV9zZWwJPSB7IDB4MDAwOCwgOCwgOCwgMHgwMCwgMHgwMSB9LAoKCgoKCgoKCgo+PiAr CS5waXBlX3R4ZWxlY19zZWwJPSB7IDB4MDAwOCwgMTIsIDEyLCAweDAwLCAweDAxIH0sCgoKCgoK CgoKCj4+ICsJLnBpcGVfdHhjb21wX3NlbAk9IHsgMHgwMDA4LCAxNSwgMTUsIDB4MDAsIDB4MDEg fSwKCgoKCgoKCgoKPj4gKwkucGlwZV9jbGtfZXh0CQk9IHsgMHgwMDBjLCA5LCA4LCAweDAyLCAw eDAxIH0sCgoKCgoKCgoKCj4+ICsJLnBpcGVfc2VsX3VzYgkJPSB7IDB4MDAwYywgMTQsIDEzLCAw eDAwLCAweDAxIH0sCgoKCgoKCgoKCj4+ICsJLnBpcGVfc2VsX3FzZ21paQk9IHsgMHgwMDBjLCAx NSwgMTMsIDB4MDAsIDB4MDcgfSwKCgoKCgoKCgoKPj4gKwkucGlwZV9waHlfc3RhdHVzCT0geyAw eDAwMzQsIDYsIDYsIDB4MDEsIDB4MDAgfSwKCgoKCgoKCgoKPj4gKwkuY29uMF9mb3JfcGNpZQkJ PSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MTAwMCB9LAoKCgoKCgoKCgo+PiArCS5jb24xX2Zv cl9wY2llCQk9IHsgMHgwMDA0LCAxNSwgMCwgMHgwMCwgMHgwMDAwIH0sCgoKCgoKCgoKCj4+ICsJ LmNvbjJfZm9yX3BjaWUJCT0geyAweDAwMDgsIDE1LCAwLCAweDAwLCAweDAxMDEgfSwKCgoKCgoK CgoKPj4gKwkuY29uM19mb3JfcGNpZQkJPSB7IDB4MDAwYywgMTUsIDAsIDB4MDAsIDB4MDIwMCB9 LAoKCgoKCgoKCgo+PiArCS5jb24wX2Zvcl9zYXRhCQk9IHsgMHgwMDAwLCAxNSwgMCwgMHgwMCwg MHgwMTE5IH0sCgoKCgoKCgoKCj4+ICsJLmNvbjFfZm9yX3NhdGEJCT0geyAweDAwMDQsIDE1LCAw LCAweDAwLCAweDAwNDAgfSwKCgoKCgoKCgoKPj4gKwkuY29uMl9mb3Jfc2F0YQkJPSB7IDB4MDAw OCwgMTUsIDAsIDB4MDAsIDB4ODBjMyB9LAoKCgoKCgoKCgo+PiArCS5jb24zX2Zvcl9zYXRhCQk9 IHsgMHgwMDBjLCAxNSwgMCwgMHgwMCwgMHg0NDA3IH0sCgoKCgoKCgoKCj4+ICsJLyogcGlwZS1n cmYgKi8KCgoKCgoKCgoKPj4gKwkucGlwZV9jb24wX2Zvcl9zYXRhCT0geyAweDAwMDAsIDE1LCAw LCAweDAwLCAweDIyMjAgfSwKCgoKCgoKCgoKPj4gKwkucGlwZV9zZ21paV9tYWNfc2VsCT0geyAw eDAwNDAsIDEsIDEsIDB4MDAsIDB4MDEgfSwKCgoKCgoKCgoKPj4gKwkucGlwZV94cGNzX3BoeV9y ZWFkeQk9IHsgMHgwMDQwLCAyLCAyLCAweDAwLCAweDAxIH0sCgoKCgoKCgoKCj4+ICsJLnUzb3Rn MF9wb3J0X2VuCQk9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSwKCgoKCgoKCgoK Pj4gKwkudTNvdGcxX3BvcnRfZW4JCT0geyAweDAxNDQsIDE1LCAwLCAweDAxODEsIDB4MTEwMCB9 LAoKCgoKCgoKCgo+CgoKCgoKCgoKCj5BZGQgbWF4aW11bSBudW1iZXIgb2YgcGh5IG5vZGVzIGZv ciBjaGVjayB3aXRoIHByaXYtPm51bV9waHkuCgoKCgoKCgoKCj4gLm51bV9waHkgPSAzLAoKCgoK CgoKCgo+CgoKCgoKCgoKCj5BZGQgcmVnIGFkZHJlc3NlcyB0byBkZXRlY3QgcGh5IGlkLgoKCgoK CgoKCgo+LnJlZ3MgPQoKCgoKCgoKCgo+MHhmZTgyMDAwMCwKCgoKCgoKCgoKPjB4ZmU4MzAwMDAs CgoKCgoKCgoKCj4weGZlODQwMDAwLAoKCgoKCgoKCgo+CgoKCgoKCgoKCj4KCgoKCgoKCgoKPkFk ZCB0YWJsZSB3aXRoIFNvQyBjYXBhYmlsaXRpZXMgYmFzZWQgb24gcGh5IGlkLgoKCgoKCgoKCgo+ IFBDaWUgVVNCMyBTQVRBIFNHTUlJCgoKCgoKCgoKCj4wOiAwwqDCoCB4wqDCoMKgIHjCoMKgwqDC oCAwCgoKCgoKCgoKCj4xOiAwwqDCoCB4wqDCoMKgIHjCoMKgwqDCoCB4CgoKCgoKCgoKCj4yOiB4 wqDCoCB4wqDCoMKgIHjCoMKgwqDCoCB4CgoKCgoKCgoKCj4KCgoKCgoKCgoKPj4gK307CgoKCgoK CgoKCj4KCgoKCgoKCgoKPnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfbXVsdGlwaHlfZ3Jm Y2ZnIHJrMzU4OF9tdWx0aXBoeV9ncmZjZmdzID0gewoKCgoKCgoKCgo+Wy4uXQoKCgoKCgoKCgo+ fTsKCgoKCgoKCgoKPgoKCgoKCgoKCgo+c3RhdGljIGNvbnN0IHN0cnVjdCByb2NrY2hpcF9tdWx0 aXBoeV9jZmcgcmszNTY2X211bHRpcGh5X2NmZ3MgPSB7CgoKCgoKCgoKCj4JLmdyZmNmZwkJPSAm cmszNTY2X211bHRpcGh5X2dyZmNmZ3MsCgoKCgoKCgoKCj4JLm11bHRpcGh5X2NmZwk9IHJrMzU2 OF9tdWx0aXBoeV9jZmcsCgoKCgoKCgoKCj59OwoKCgoKCgoKCgo+CgoKCgoKCgoKCj4+ICsKCgoK CgoKCgoKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfbXVsdGlwaHlfY2ZnIHJrMzU2 OF9tdWx0aXBoeV9jZmdzID0gewoKCgoKCgoKCgo+PiArCS5ncmZjZmcJCT0gJnJrMzU2OF9tdWx0 aXBoeV9ncmZjZmdzLAoKCgoKCgoKCgo+PiArCS5tdWx0aXBoeV9jZmcJPSByazM1NjhfbXVsdGlw aHlfY2ZnLAoKCgoKCgoKCgo+PiArfTsKCgoKCgoKCgoKPgoKCgoKCgoKCgo+CgoKCgoKCgoKCj5z dGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX211bHRpcGh5X2NmZyByazM1ODhfbXVsdGlwaHlf Y2ZncyA9IHsKCgoKCgoKCgoKPgkuZ3JmY2ZnCQk9ICZyazM1ODhfbXVsdGlwaHlfZ3JmY2ZncywK CgoKCgoKCgoKPgkubXVsdGlwaHlfY2ZnCT0gcmszNTg4X211bHRpcGh5X2NmZywKCgoKCgoKCgoK Pn07CgoKCgoKCgoKCj4KCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgcm9ja2NoaXBfbXVsdGlwaHlfb2ZfbWF0Y2hbXSA9IHsKCgoKCgoK CgoKPj4gKwl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzU2Ni1uYW5lbmctbXVsdGlwaHki LAoKCgoKCgoKCgo+CgoKCgoKCgoKCj4+ICsJwqAgLmRhdGEgPSAmcmszNTY4X211bHRpcGh5X2Nm Z3MsIH0sCgoKCgoKCgoKCj4KCgoKCgoKCgoKPgnCoCAuZGF0YSA9ICZyazM1NjZfbXVsdGlwaHlf Y2ZncywgfSwKCgoKCgoKCgoKPgoKCgoKCgoKCgo+PiArCXsgLmNvbXBhdGlibGUgPSAicm9ja2No aXAscmszNTY4LW5hbmVuZy1tdWx0aXBoeSIsCgoKCgoKCgoKCj4+ICsJwqAgLmRhdGEgPSAmcmsz NTY4X211bHRpcGh5X2NmZ3MsIH0sCgoKCgoKCgoKCj4KCgoKCgoKCgoKPgl7IC5jb21wYXRpYmxl ID0gInJvY2tjaGlwLHJrMzU4OC1uYW5lbmctbXVsdGlwaHkiLAoKCgoKCgoKCgo+CcKgIC5kYXRh ID0gJnJrMzU4OF9tdWx0aXBoeV9jZmdzLCB9LAoKCgoKCgoKCgo+CgoKCgoKCgoKCj4+ICsJeyB9 LAoKCgoKCgoKCgo+PiArfTsKCgoKCgoKCgoKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJv Y2tjaGlwX211bHRpcGh5X29mX21hdGNoKTsKCgoKCgoKCgoKPj4gKwoKCgoKCgoKCgo+PiArc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9ja2NoaXBfbXVsdGlwaHlfZHJpdmVyID0gewoK CgoKCgoKCgo+PiArCS5wcm9iZQk9IHJvY2tjaGlwX211bHRpcGh5X3Byb2JlLAoKCgoKCgoKCgo+ PiArCS5kcml2ZXIgPSB7CgoKCgoKCgoKCj4+ICsJCS5uYW1lID0gInJvY2tjaGlwLW5hbmVuZy1t dWx0aXBoeSIsCgoKCgoKCgoKCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHJvY2tjaGlwX211bHRp cGh5X29mX21hdGNoLAoKCgoKCgoKCgo+PiArCX0sCgoKCgoKCgoKCj4+ICt9OwoKCgoKCgoKCgo+ PiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyb2NrY2hpcF9tdWx0aXBoeV9kcml2ZXIpOwoKCgoK CgoKCgo+PiArCgoKCgoKCgoKCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlJvY2tjaGlwIE5BTkVO RyBNVUxUSVBIWSBkcml2ZXIiKTsKCgoKCgoKCgoKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKCgoKCgoKCgoKPj4gCgoKCgoKCgoKCj4KCgoKCgoKCgoKPgoKCgoKCgoKCgo+CgoKCgoKCi0t IApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo=