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 X-Spam-Level: X-Spam-Status: No, score=-0.5 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8C347C10F00 for ; Sat, 7 Mar 2020 15:19:32 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5E04220674 for ; Sat, 7 Mar 2020 15:19:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mUkycIGi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5E04220674 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 330B66E245; Sat, 7 Mar 2020 15:19:25 +0000 (UTC) Received: from mail-qt1-x841.google.com (mail-qt1-x841.google.com [IPv6:2607:f8b0:4864:20::841]) by gabe.freedesktop.org (Postfix) with ESMTPS id 17EE66E126 for ; Sat, 7 Mar 2020 10:00:57 +0000 (UTC) Received: by mail-qt1-x841.google.com with SMTP id n5so24554qtv.7 for ; Sat, 07 Mar 2020 02:00:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=yDGBspS/Vs9DNDUoPfT0os2H3JB2qjDoI2tZ7uyD218=; b=mUkycIGi4oYACH1QaL1icEImRWZSt902+QXKn3SQBhntJMwPfuyO8L9rM4rlTpZ0by 0H06Uldy0yy9xPqOePSssOAWiIN8OmvhOHpuoVFrdgpSkQzdKYRr3b6EcuscU98eiSBT I3LvuyBBDTn2lFO8Vmtf4Nfy4FuLDNKIQsPcDe9yfppEO3fNkZC9lB7T538nxYapsuNO GRWgpXk6Ud47xIaqQOEUGdI/u198RNyfO1g58kfid8+SP5gD6tBP08Chn16/6BXHXmfX kQF+YikO9e5LBvxT7UKvKVFIW1j6fDtCCJDaGCrFr2+zVqjsSVxrgix+riTwN7BOqoF1 pFlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=yDGBspS/Vs9DNDUoPfT0os2H3JB2qjDoI2tZ7uyD218=; b=U5z6PtjvReeA5tMh7NdkjAOs6vvExzBaOnj+VvL1aZCtT4z18fFbhWUkJfH7QgeJ5i QHpmLouGOYShu93TnUsgmcXldI6RHJERiXntmOBHe8BAikmiy0rfYeY7ii4TedSkXIMj fG0modSbnEN4ZoSWjZWFHbn0NrgevKcLMeScLExR7X2GYOgv2FrlbXJBNXJ3yrEtvL77 0/c4In3r3rzP303DVYYyEQpHIeqARJBBgxEnw+STH26CLAMjpiRFzVET5T8DdAe61J1G CmxKwKDWCT3imAi8Y60oiYjHy46sNlb+8D59mQiQ1XBSgkU5N+V3wlh9ksMoDdIGc/7C YaIg== X-Gm-Message-State: ANhLgQ1op1Gzu37pKidMv7c+Io2HoTXdb7ByLniJSLiWEvu+X0DG2/xO l8Lp43tnUFbm6XlBqb1JLh9sMZBrIXb0r4mSBmc= X-Google-Smtp-Source: ADFU+vtczD9jv6SweX81rCr8EDQAcn1DdQ6jOGu9HP7lYy7M0xoTMMY56pvUkFsh8kT6AwsON57IioxbyyVHViNEON4= X-Received: by 2002:ac8:5484:: with SMTP id h4mr6582813qtq.209.1583575255635; Sat, 07 Mar 2020 02:00:55 -0800 (PST) MIME-Version: 1.0 References: <1582710377-15489-1-git-send-email-kevin3.tang@gmail.com> <1582710377-15489-5-git-send-email-kevin3.tang@gmail.com> In-Reply-To: From: tang pengchuan Date: Sat, 7 Mar 2020 18:00:44 +0800 Message-ID: Subject: Re: [PATCH RFC v4 4/6] drm/sprd: add Unisoc's drm display controller driver To: Emil Velikov X-Mailman-Approved-At: Sat, 07 Mar 2020 15:19:22 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Baolin Wang , Dave Airlie , Chunyan Zhang , "Linux-Kernel@Vger. Kernel. Org" , Rob Herring , ML dri-devel , Orson Zhai , Sean Paul Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGkgRW1pbCwKTWF5YmUgaGVyZSBpcyB5b3VyIG1pc3NpbmcgY29tbWVudHMKSSDigJltIHJlYWxs eSBzb3JyeSwgc29tZXRpbWVzIEkgZm9yZ2V0IHRvIHVzZSBwbGFpbiB0ZXh0IGJ5IGdtYWlsLApu ZXZlciBtYWtlIHRoZSBzYW1lIG1pc3Rha2UgYWdhaW4uCgpFbWlsIFZlbGlrb3YgPGVtaWwubC52 ZWxpa292QGdtYWlsLmNvbT4g5LqOMjAyMOW5tDPmnIgz5pel5ZGo5LqMIOS4iuWNiDI6Mjnlhpnp gZPvvJoKPgo+IEhpIEtldmluLAo+Cj4gVGhlcmUncyBhIGZldyBzbWFsbCBzdWdnZXN0aW9ucywg YWx0aG91Z2ggb3ZlcmFsbCB0aGUgZHJpdmVyIGxvb2tzIGEgbG90IGJldHRlci4KPgo+IE9uIFRo dSwgMjcgRmViIDIwMjAgYXQgMDg6MTQsIEtldmluIFRhbmcgPGtldmluMy50YW5nQGdtYWlsLmNv bT4gd3JvdGU6Cj4KPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9z cHJkL2RwdS9NYWtlZmlsZQo+ID4gQEAgLTAsMCArMSw3IEBACj4gPiArIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKwo+ID4gK2lmZGVmIENPTkZJR19BUk02NAo+ID4gK0tC VUlMRF9DRkxBR1MgKz0gLW1zdHJpY3QtYWxpZ24KPgo+Cj4gVGhlcmUgYXJlIG1hbnkgb3RoZXIg ZHJpdmVycyB0aGF0IGRvIG5vdCB1c2UgcmVhZGwvd3JpdGVsIGZvciByZWdpc3RlciBhY2Nlc3Ms Cj4geWV0IG5vbmUgaGFzIHRoaXMgd29ya2Fyb3VuZC4uLiBFdmVuIHRob3NlIHRoYXQgdGhleSBh cmUgZXhjbHVzaXZlbHkgQVJNNjQuCj4KPiBIYXZlIHlvdSB0cmllZCB0aGF0IGl0J3Mgbm90IGEg YnVnZ3kgdmVyc2lvbiBvZiBHQ0M/IEF0IHRoZSB2ZXJ5IGxlYXN0LCBJJ2QKPiBlbmNvdXJhZ2Ug eW91IHRvIGFkZCBhIGJyaWVmIGNvbW1lbnQgYWJvdXQgdGhlIHByb2JsZW0gKyBzZXR1cC4KPgo+ IC4uLiBJbiBnZW5lcmFsIEkgdGhpbmsgb25lIHNob3VsZCBmb2xsb3cgdGhlIHN1Z2dlc3Rpb25z IGZyb20gUm9iIEhlcnJpbmcuCj4KWW9jdG8gdjIuNQphYXJjaDY0LWxpbmFyby1saW51eC1nY2Mg KExpbmFybyBHQ0MgNy4yLTIwMTcuMTEpIDcuMi4xIDIwMTcxMDExCgpDcmFzaCBTdGFjazoKL3Nw cmQvZHJ2L2Rpc3BjL2RwdV9yMnAwLmM6NzI5CjE3OTYyNTYgZmZmZmZmODAwODQ4NjY1MDogICAg ICAgZjgwM2MwNDMgICAgICAgIHN0dXIgICAgeDMsIFt4MiwjNjBdCj0+VW5oYW5kbGVkIGZhdWx0 OiBhbGlnbm1lbnQgZmF1bHQgKDB4OTYwMDAwNjEpIGF0IDB4ZmZmZmZmODAwOThiODgzYwoKNzI5 ICAgICAgICAgcmVnLT5tbXVfbWluX3BwbjEgPSAwOwo3MzAgICAgICAgICByZWctPm1tdV9wcG5f cmFuZ2UxID0gMHhmZmZmOwo3MzEgICAgICAgICByZWctPm1tdV9taW5fcHBuMiA9IDA7CjczMiAg ICAgICAgIHJlZy0+bW11X3Bwbl9yYW5nZTIgPSAweGZmZmY7CgpUaGUgYWJvdmUgQyBjb2RlIG9w ZXJhdGlvbiBhcmUgY29udGludW91cy4gVGhlIGNvbXBpbGVyIG1heSB0aGluayB0aGF0CnRoZSBh Y2Nlc3MgY2FuIGJlIGNvbXBsZXRlZCBieSBkaXJlY3RseSB1c2luZyB0d28gNjQtYml0IGFzc2ln bm1lbnQKb3BlcmF0aW9ucywgc28gaXQgaXMgb3B0aW1pemVkIHRvIDY0LWJpdCBvcGVyYXRpb24u CgpBc3NlbWJseSBjb2Rl77yaCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci9zcHJkL2Ry di9kaXNwYy9kcHVfcjJwMC5jOjcyOQoxNzk2MjQ0IGZmZmZmZjgwMDg0ODY2Mzg6ICAgICAgIDkx MjAwMDIyICAgICAgICBhZGQgICAgIHgyLCB4MSwgIzB4ODAwCi9zcHJkL2Rydi9kaXNwYy9kcHVf cjJwMC5jOjcyOAoxNzk2MjQ2IGZmZmZmZjgwMDg0ODY2M2M6ICAgICAgIGI5MDgwMDNmICAgICAg ICBzdHIgICAgIHd6ciwgW3gxLCMyMDQ4XQovc3ByZC9kcnYvZGlzcGMvZHB1X3IycDAuYzo3MjkK MTc5NjI0OCBmZmZmZmY4MDA4NDg2NjQwOiAgICAgICBkMmRmZmZlMyAgICAgICAgbW92ICAgICB4 MywKIzB4ZmZmZjAwMDAwMDAwCi9zcHJkL2Rydi9kaXNwYy9kcHVfcjJwMC5jOjczMwoxNzk2MjUw IGZmZmZmZjgwMDg0ODY2NDQ6ICAgICAgIDEyYmZmZmM0ICAgICAgICBtb3YgICAgIHc0LCAjMHgx ZmZmZgovc3ByZC9kcnYvZGlzcGMvZHB1X3IycDAuYzo3MzUKMTc5NjI1MiBmZmZmZmY4MDA4NDg2 NjQ4OiAgICAgICA1MjlmZmZlNSAgICAgICAgbW92ICAgICB3NSwgIzB4ZmZmZgovc3ByZC9kcnYv ZGlzcGMvZHB1X3IycDAuYzo3NDEKMTc5NjI1NCBmZmZmZmY4MDA4NDg2NjRjOiAgICAgICA1Mjgw MDAwMCAgICAgICAgbW92ICAgICB3MCwgIzB4MAovc3ByZC9kcnYvZGlzcGMvZHB1X3IycDAuYzo3 MjkKMTc5NjI1NiBmZmZmZmY4MDA4NDg2NjUwOiAgICAgICBmODAzYzA0MyAgICAgICAgc3R1ciAg ICB4MywgW3gyLCM2MF0KPT5VbmhhbmRsZWQgZmF1bHQ6IGFsaWdubWVudCBmYXVsdCAoMHg5NjAw MDA2MSkgYXQgMHhmZmZmZmY4MDA5OGI4ODNjCi9zcHJkL2Rydi9kaXNwYy9kcHVfcjJwMC5jOjcz MAoxNzk2MjU4IGZmZmZmZjgwMDg0ODY2NTQ6ICAgICAgIGY4MDQ0MDQzICAgICAgICBzdHVyICAg IHgzLCBbeDIsIzY4XQovc3ByZC9kcnYvZGlzcGMvZHB1X3IycDAuYzo3MzUKMTc5NjI2MCBmZmZm ZmY4MDA4NDg2NjU4OiAgICAgICBiOTAxZTQyNSAgICAgICAgc3RyICAgICB3NSwgW3gxLCM0ODRd Ci9zcHJkL2Rydi9kaXNwYy9kcHVfcjJwMC5jOjczMwoxNzk2MjYyIGZmZmZmZjgwMDg0ODY2NWM6 ICAgICAgIGI5MDgwYzI0ICAgICAgICBzdHIgICAgIHc0LCBbeDEsIzIwNjBdCjE3OTYyNjMgZmZm ZmZmODAwODQ4NjY2MDogICAgICAgZjk0MDAyNzQgICAgICAgIGxkciAgICAgeDIwLCBbeDE5XQo+ Cj4KPiA+ICtzdGF0aWMgdm9pZCBkcHVfZHVtcChzdHJ1Y3QgZHB1X2NvbnRleHQgKmN0eCkKPiA+ ICt7Cj4gPiArICAgICAgIHUzMiAqcmVnID0gKHUzMiAqKWN0eC0+YmFzZTsKPiA+ICsgICAgICAg aW50IGk7Cj4gPiArCj4gPiArICAgICAgIHByX2luZm8oIiAgICAgIDAgICAgICAgICAgNCAgICAg ICAgICA4ICAgICAgICAgIENcbiIpOwo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBp ICs9IDQpIHsKPiA+ICsgICAgICAgICAgICAgICBwcl9pbmZvKCIlMDR4OiAweCUwOHggMHglMDh4 IDB4JTA4eCAweCUwOHhcbiIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpICogNCwgcmVn W2ldLCByZWdbaSArIDFdLCByZWdbaSArIDJdLCByZWdbaSArIDNdKTsKPgo+IFVzaW5nIHNvbWUg b2YgdGhlIGhlbHBlcnMgZnJvbSBkcm1fcHJpbnQuaCB3b3VsZCBiZSBiZXR0ZXIgdGhhbiBwcl8q Lgo+IFRoaXMgYXBwbGllcyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoLgo+Cj4KPiA+ICtzdGF0 aWMgdm9pZCBkcHVfY2xlYW5fYWxsKHN0cnVjdCBkcHVfY29udGV4dCAqY3R4KQo+ID4gK3sKPiA+ ICsgICAgICAgaW50IGk7Cj4gPiArICAgICAgIHN0cnVjdCBkcHVfcmVnICpyZWcgPSAoc3RydWN0 IGRwdV9yZWcgKiljdHgtPmJhc2U7Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCA4 OyBpKyspCj4KPiBUaGlzICI8IDgiIHNlZW0gcHJldHR5IG1hZ2ljYWwuIEhvdyBhYm91dCAiPCBB UlJBWV9TSVpFKHJlZy0+bGF5ZXJzKSIKPiBTYW1lIGxvZ2ljIGFwcGxpZXMgdGhyb3VnaCB0aGUg cmVzdCBvZiB0aGUgcGF0Y2guCj4KPgo+ID4gK3N0YXRpYyBpbnQgZHB1X3dhaXRfc3RvcF9kb25l KHN0cnVjdCBkcHVfY29udGV4dCAqY3R4KQo+ID4gK3sKPiA+ICsgICAgICAgaW50IHJjOwo+ID4g Kwo+ID4gKyAgICAgICBpZiAoY3R4LT5zdG9wcGVkKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVy biAwOwo+ID4gKwo+IFRoZSBzdG9wcGVkIGhhbmRsaW5nIGRvZXMgbG9vayBzdXNwaWNpb3VzLiBB ZG1pdHRlZGx5IEkgZGlkIG5vdCBsb29rIHRvbyBjbG9zZWx5Cj4gYXQgdGhlIGRwdV9mbGlwIGNv ZGUsIHdoaWNoIHNlZW1zIHRvIHJlcXVpcmUgaXQuCj4KPiBMZXQncyBhZGQgYSBzbWFsbCBjb21t ZW50IGluIHRoZSBzdHJ1Y3QgZHB1X2NvbnRleHQ6OnN0b3BwZWQgZGVjbGFyYXRpb24sIHdoeSBp dAo+IGlzIG5lZWRlZCwgaWYgaXQgdHJ1ZWx5IGlzLgo+Cj4gPiArICAgICAgIHJjID0gd2FpdF9l dmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY3R4LT53YWl0X3F1ZXVlLCBjdHgtPmV2dF9zdG9w LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2Vj c190b19qaWZmaWVzKDUwMCkpOwo+ID4gKyAgICAgICBjdHgtPmV2dF9zdG9wID0gZmFsc2U7Cj4g PiArCj4gPiArICAgICAgIGN0eC0+c3RvcHBlZCA9IHRydWU7Cj4gPiArCj4gPiArICAgICAgIGlm ICghcmMpIHsKPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoImRwdSB3YWl0IGZvciBzdG9wIGRv bmUgdGltZSBvdXQhXG4iKTsKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVUSU1FRE9VVDsK PiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4K PiA+ICtzdGF0aWMgdm9pZCBkcHVfc3RvcChzdHJ1Y3QgZHB1X2NvbnRleHQgKmN0eCkKPiA+ICt7 Cj4gPiArICAgICAgIHN0cnVjdCBkcHVfcmVnICpyZWcgPSAoc3RydWN0IGRwdV9yZWcgKiljdHgt PmJhc2U7Cj4gPiArCj4gPiArICAgICAgIGlmIChjdHgtPnN0b3BwZWQpCj4gPiArICAgICAgICAg ICAgICAgcmV0dXJuOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoY3R4LT5pZl90eXBlID09IFNQUkRf RElTUENfSUZfRFBJKQo+ID4gKyAgICAgICAgICAgICAgIHJlZy0+ZHB1X2N0cmwgfD0gQklUKDEp Owo+ID4gKwo+ID4gKyAgICAgICBkcHVfd2FpdF9zdG9wX2RvbmUoY3R4KTsKPiA+ICsKPiA+ICsg ICAgICAgcHJfaW5mbygiZHB1IHN0b3BcbiIpOwo+Cj4gVGhpcyBhbmQgdGhlIGRwdV9ydW4gcHJf aW5mbygpIG1lc3NhZ2VzIGNhbiBiZSByZW1vdmVkLgo+Cj4KPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgZHB1X3J1bihzdHJ1Y3QgZHB1X2NvbnRleHQgKmN0eCkKPiA+ICt7Cj4gPiArICAg ICAgIHN0cnVjdCBkcHVfcmVnICpyZWcgPSAoc3RydWN0IGRwdV9yZWcgKiljdHgtPmJhc2U7Cj4g PiArCj4gPiArICAgICAgIGlmICghY3R4LT5zdG9wcGVkKQo+ID4gKyAgICAgICAgICAgICAgIHJl dHVybjsKPiA+ICsKPiA+ICsgICAgICAgcmVnLT5kcHVfY3RybCB8PSBCSVQoMCk7Cj4gPiArCj4g PiArICAgICAgIGN0eC0+c3RvcHBlZCA9IGZhbHNlOwo+ID4gKwo+ID4gKyAgICAgICBwcl9pbmZv KCJkcHUgcnVuXG4iKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBkcHVfaW5pdChzdHJ1 Y3QgZHB1X2NvbnRleHQgKmN0eCkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcHVfcmVnICpy ZWcgPSAoc3RydWN0IGRwdV9yZWcgKiljdHgtPmJhc2U7Cj4gPiArICAgICAgIHUzMiBzaXplOwo+ ID4gKwo+ID4gKyAgICAgICByZWctPmJnX2NvbG9yID0gMDsKPiA+ICsKPiA+ICsgICAgICAgc2l6 ZSA9IChjdHgtPnZtLnZhY3RpdmUgPDwgMTYpIHwgY3R4LT52bS5oYWN0aXZlOwo+ID4gKyAgICAg ICByZWctPnBhbmVsX3NpemUgPSBzaXplOwo+ID4gKyAgICAgICByZWctPmJsZW5kX3NpemUgPSBz aXplOwo+ID4gKwo+ID4gKyAgICAgICByZWctPmRwdV9jZmcwID0gQklUKDQpIHwgQklUKDUpOwo+ ID4gKwo+ID4gKyAgICAgICByZWctPmRwdV9jZmcxID0gMHgwMDQ0NjZkYTsKPiA+ICsgICAgICAg cmVnLT5kcHVfY2ZnMiA9IDA7Cj4gPiArCj4gPiArICAgICAgIGlmIChjdHgtPnN0b3BwZWQpCj4g PiArICAgICAgICAgICAgICAgZHB1X2NsZWFuX2FsbChjdHgpOwo+ID4gKwo+ID4gKyAgICAgICBy ZWctPm1tdV9lbiA9IDA7Cj4gPiArICAgICAgIHJlZy0+bW11X21pbl9wcG4xID0gMDsKPiA+ICsg ICAgICAgcmVnLT5tbXVfcHBuX3JhbmdlMSA9IDB4ZmZmZjsKPiA+ICsgICAgICAgcmVnLT5tbXVf bWluX3BwbjIgPSAwOwo+ID4gKyAgICAgICByZWctPm1tdV9wcG5fcmFuZ2UyID0gMHhmZmZmOwo+ ID4gKyAgICAgICByZWctPm1tdV92cG5fcmFuZ2UgPSAweDFmZmZmOwo+ID4gKwo+ID4gKyAgICAg ICByZWctPmRwdV9pbnRfY2xyID0gMHhmZmZmOwo+ID4gKwo+ID4gKyAgICAgICBpbml0X3dhaXRx dWV1ZV9oZWFkKCZjdHgtPndhaXRfcXVldWUpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsK Pgo+IEZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIDAuIExldCdzIG1ha2UgaXQgc3RhdGljIHZvaWQg ZHB1X2luaXQoKQo+Cj4KPgo+ID4gK3N0YXRpYyB1MzIgdG9fZHB1X3JvdGF0aW9uKHUzMiBhbmds ZSkKPiA+ICt7Cj4gPiArICAgICAgIHUzMiByb3QgPSBEUFVfTEFZRVJfUk9UQVRJT05fMDsKPiA+ ICsKPiA+ICsgICAgICAgc3dpdGNoIChhbmdsZSkgewo+ID4gKyAgICAgICBjYXNlIDA6Cj4gPiAr ICAgICAgIGNhc2UgRFJNX01PREVfUk9UQVRFXzA6Cj4gPiArICAgICAgICAgICAgICAgcm90ID0g RFBVX0xBWUVSX1JPVEFUSU9OXzA7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg ICAgIGNhc2UgRFJNX01PREVfUk9UQVRFXzkwOgo+ID4gKyAgICAgICAgICAgICAgIHJvdCA9IERQ VV9MQVlFUl9ST1RBVElPTl85MDsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAg ICAgY2FzZSBEUk1fTU9ERV9ST1RBVEVfMTgwOgo+ID4gKyAgICAgICAgICAgICAgIHJvdCA9IERQ VV9MQVlFUl9ST1RBVElPTl8xODA7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg ICAgIGNhc2UgRFJNX01PREVfUk9UQVRFXzI3MDoKPiA+ICsgICAgICAgICAgICAgICByb3QgPSBE UFVfTEFZRVJfUk9UQVRJT05fMjcwOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAg ICAgICBjYXNlIERSTV9NT0RFX1JFRkxFQ1RfWToKPiA+ICsgICAgICAgICAgICAgICByb3QgPSBE UFVfTEFZRVJfUk9UQVRJT05fMTgwX007Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAr ICAgICAgIGNhc2UgKERSTV9NT0RFX1JFRkxFQ1RfWSB8IERSTV9NT0RFX1JPVEFURV85MCk6Cj4g PiArICAgICAgICAgICAgICAgcm90ID0gRFBVX0xBWUVSX1JPVEFUSU9OXzkwX007Cj4gPiArICAg ICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2UgRFJNX01PREVfUkVGTEVDVF9YOgo+ ID4gKyAgICAgICAgICAgICAgIHJvdCA9IERQVV9MQVlFUl9ST1RBVElPTl8wX007Cj4gPiArICAg ICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2UgKERSTV9NT0RFX1JFRkxFQ1RfWCB8 IERSTV9NT0RFX1JPVEFURV85MCk6Cj4gPiArICAgICAgICAgICAgICAgcm90ID0gRFBVX0xBWUVS X1JPVEFUSU9OXzI3MF9NOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICBk ZWZhdWx0Ogo+ID4gKyAgICAgICAgICAgICAgIHByX2Vycigicm90YXRpb24gY29udmVydCB1bnN1 cHBvcnQgYW5nbGUgKGRybSk9IDB4JXhcbiIsIGFuZ2xlKTsKPiA+ICsgICAgICAgICAgICAgICBi cmVhazsKPgo+IEhhdmUgeW91IHNlZW4gYSBjYXNlIHdoZXJlIHRoZSAwIG9yIGRlZmF1bHQgY2Fz ZSBhcmUgcmVhY2hlZD8gQUZBSUNUIHRoZXkgd2lsbAo+IG5ldmVyIHRyaWdnZXIuIFNvIG9uZSBt aWdodCBhcyB3ZWxsIHVzZToKPiAgICAgc3dpdGNoIChhbmdsZSkgewo+ICAgICBjYXNlIERSTV9N T0RFX0ZPTzoKPiAgICAgICAgIHJldHVybiBEUFVfTEFZRVJfUk9UQVRJT05fRk9POwo+ICAgICAu Li4KPiAgICAgY2FzZSBEUk1fTU9ERV9CQVI6Cj4gICAgICAgICByZXR1cm4gRFBVX0xBWUVSX1JP VEFUSU9OX0JBUjsKPiAgICAgfQo+Cj4KPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBy ZXR1cm4gcm90Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdTMyIGRwdV9pbWdfY3RybCh1MzIg Zm9ybWF0LCB1MzIgYmxlbmRpbmcsIHUzMiByb3RhdGlvbikKPiA+ICt7Cj4gPiArICAgICAgIGlu dCByZWdfdmFsID0gMDsKPiA+ICsKPiA+ICsgICAgICAgLyogbGF5ZXIgZW5hYmxlICovCj4gPiAr ICAgICAgIHJlZ192YWwgfD0gQklUKDApOwo+ID4gKwo+ID4gKyAgICAgICBzd2l0Y2ggKGZvcm1h dCkgewo+ID4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfQkdSQTg4ODg6Cj4gPiArICAgICAgICAg ICAgICAgLyogQkdSQTg4ODggLT4gQVJHQjg4ODggKi8KPiA+ICsgICAgICAgICAgICAgICByZWdf dmFsIHw9IFNQUkRfSU1HX0RBVEFfRU5ESUFOX0IzQjJCMUIwIDw8IDg7Cj4gPiArICAgICAgICAg ICAgICAgcmVnX3ZhbCB8PSAoRFBVX0xBWUVSX0ZPUk1BVF9BUkdCODg4OCA8PCA0KTsKPiA+ICsg ICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4 Ogo+ID4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gPiArICAgICAgICAgICAg ICAgLyogUkdCQTg4ODggLT4gQUJHUjg4ODggKi8KPiA+ICsgICAgICAgICAgICAgICByZWdfdmFs IHw9IFNQUkRfSU1HX0RBVEFfRU5ESUFOX0IzQjJCMUIwIDw8IDg7Cj4gPiArICAgICAgICAgICAg ICAgLyogRkFMTFRIUlUgKi8KPiA+ICsgICAgICAgY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+ ID4gKyAgICAgICAgICAgICAgIC8qIHJiIHN3aXRjaCAqLwo+ID4gKyAgICAgICAgICAgICAgIHJl Z192YWwgfD0gQklUKDEwKTsKPiA+ICsgICAgICAgICAgICAgICAvKiBGQUxMVEhSVSAqLwo+ID4g KyAgICAgICBjYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gPiArICAgICAgICAgICAgICAgcmVn X3ZhbCB8PSAoRFBVX0xBWUVSX0ZPUk1BVF9BUkdCODg4OCA8PCA0KTsKPiA+ICsgICAgICAgICAg ICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+ID4gKyAg ICAgICAgICAgICAgIC8qIHJiIHN3aXRjaCAqLwo+ID4gKyAgICAgICAgICAgICAgIHJlZ192YWwg fD0gQklUKDEwKTsKPiA+ICsgICAgICAgICAgICAgICAvKiBGQUxMVEhSVSAqLwo+ID4gKyAgICAg ICBjYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gPiArICAgICAgICAgICAgICAgcmVnX3ZhbCB8 PSAoRFBVX0xBWUVSX0ZPUk1BVF9BUkdCODg4OCA8PCA0KTsKPiA+ICsgICAgICAgICAgICAgICBi cmVhazsKPiA+ICsgICAgICAgY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKPiA+ICsgICAgICAgICAg ICAgICAvKiByYiBzd2l0Y2ggKi8KPiA+ICsgICAgICAgICAgICAgICByZWdfdmFsIHw9IEJJVCgx MCk7Cj4gPiArICAgICAgICAgICAgICAgLyogRkFMTFRIUlUgKi8KPiA+ICsgICAgICAgY2FzZSBE Uk1fRk9STUFUX1JHQjU2NToKPiA+ICsgICAgICAgICAgICAgICByZWdfdmFsIHw9IChEUFVfTEFZ RVJfRk9STUFUX1JHQjU2NSA8PCA0KTsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsg ICAgICAgY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gPiArICAgICAgICAgICAgICAgLyogMi1MYW5l OiBZdXY0MjAgKi8KPiA+ICsgICAgICAgICAgICAgICByZWdfdmFsIHw9IERQVV9MQVlFUl9GT1JN QVRfWVVWNDIwXzJQTEFORSA8PCA0Owo+ID4gKyAgICAgICAgICAgICAgIC8qIFkgZW5kaWFuICov Cj4gPiArICAgICAgICAgICAgICAgcmVnX3ZhbCB8PSBTUFJEX0lNR19EQVRBX0VORElBTl9CMEIx QjJCMyA8PCA4Owo+ID4gKyAgICAgICAgICAgICAgIC8qIFVWIGVuZGlhbiAqLwo+ID4gKyAgICAg ICAgICAgICAgIHJlZ192YWwgfD0gU1BSRF9JTUdfREFUQV9FTkRJQU5fQjBCMUIyQjMgPDwgMTA7 Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9O VjIxOgo+ID4gKyAgICAgICAgICAgICAgIC8qIDItTGFuZTogWXV2NDIwICovCj4gPiArICAgICAg ICAgICAgICAgcmVnX3ZhbCB8PSBEUFVfTEFZRVJfRk9STUFUX1lVVjQyMF8yUExBTkUgPDwgNDsK PiA+ICsgICAgICAgICAgICAgICAvKiBZIGVuZGlhbiAqLwo+ID4gKyAgICAgICAgICAgICAgIHJl Z192YWwgfD0gU1BSRF9JTUdfREFUQV9FTkRJQU5fQjBCMUIyQjMgPDwgODsKPiA+ICsgICAgICAg ICAgICAgICAvKiBVViBlbmRpYW4gKi8KPiA+ICsgICAgICAgICAgICAgICByZWdfdmFsIHw9IFNQ UkRfSU1HX0RBVEFfRU5ESUFOX0IzQjJCMUIwIDw8IDEwOwo+ID4gKyAgICAgICAgICAgICAgIGJy ZWFrOwo+ID4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfTlYxNjoKPiA+ICsgICAgICAgICAgICAg ICAvKiAyLUxhbmU6IFl1djQyMiAqLwo+ID4gKyAgICAgICAgICAgICAgIHJlZ192YWwgfD0gRFBV X0xBWUVSX0ZPUk1BVF9ZVVY0MjJfMlBMQU5FIDw8IDQ7Cj4gPiArICAgICAgICAgICAgICAgLyog WSBlbmRpYW4gKi8KPiA+ICsgICAgICAgICAgICAgICByZWdfdmFsIHw9IFNQUkRfSU1HX0RBVEFf RU5ESUFOX0IzQjJCMUIwIDw8IDg7Cj4gPiArICAgICAgICAgICAgICAgLyogVVYgZW5kaWFuICov Cj4gPiArICAgICAgICAgICAgICAgcmVnX3ZhbCB8PSBTUFJEX0lNR19EQVRBX0VORElBTl9CM0Iy QjFCMCA8PCAxMDsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBE Uk1fRk9STUFUX05WNjE6Cj4gPiArICAgICAgICAgICAgICAgLyogMi1MYW5lOiBZdXY0MjIgKi8K PiA+ICsgICAgICAgICAgICAgICByZWdfdmFsIHw9IERQVV9MQVlFUl9GT1JNQVRfWVVWNDIyXzJQ TEFORSA8PCA0Owo+ID4gKyAgICAgICAgICAgICAgIC8qIFkgZW5kaWFuICovCj4gPiArICAgICAg ICAgICAgICAgcmVnX3ZhbCB8PSBTUFJEX0lNR19EQVRBX0VORElBTl9CMEIxQjJCMyA8PCA4Owo+ ID4gKyAgICAgICAgICAgICAgIC8qIFVWIGVuZGlhbiAqLwo+ID4gKyAgICAgICAgICAgICAgIHJl Z192YWwgfD0gU1BSRF9JTUdfREFUQV9FTkRJQU5fQjBCMUIyQjMgPDwgMTA7Cj4gPiArICAgICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgIGNhc2UgRFJNX0ZPUk1BVF9ZVVY0MjA6Cj4gPiAr ICAgICAgICAgICAgICAgcmVnX3ZhbCB8PSBEUFVfTEFZRVJfRk9STUFUX1lVVjQyMF8zUExBTkUg PDwgNDsKPiA+ICsgICAgICAgICAgICAgICAvKiBZIGVuZGlhbiAqLwo+ID4gKyAgICAgICAgICAg ICAgIHJlZ192YWwgfD0gU1BSRF9JTUdfREFUQV9FTkRJQU5fQjBCMUIyQjMgPDwgODsKPiA+ICsg ICAgICAgICAgICAgICAvKiBVViBlbmRpYW4gKi8KPiA+ICsgICAgICAgICAgICAgICByZWdfdmFs IHw9IFNQUkRfSU1HX0RBVEFfRU5ESUFOX0IwQjFCMkIzIDw8IDEwOwo+ID4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+ID4gKyAgICAgICBjYXNlIERSTV9GT1JNQVRfWVZVNDIwOgo+ID4gKyAgICAg ICAgICAgICAgIHJlZ192YWwgfD0gRFBVX0xBWUVSX0ZPUk1BVF9ZVVY0MjBfM1BMQU5FIDw8IDQ7 Cj4gPiArICAgICAgICAgICAgICAgLyogWSBlbmRpYW4gKi8KPiA+ICsgICAgICAgICAgICAgICBy ZWdfdmFsIHw9IFNQUkRfSU1HX0RBVEFfRU5ESUFOX0IwQjFCMkIzIDw8IDg7Cj4gPiArICAgICAg ICAgICAgICAgLyogVVYgZW5kaWFuICovCj4gPiArICAgICAgICAgICAgICAgcmVnX3ZhbCB8PSBT UFJEX0lNR19EQVRBX0VORElBTl9CM0IyQjFCMCA8PCAxMDsKPiA+ICsgICAgICAgICAgICAgICBi cmVhazsKPiA+ICsgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoImVy cm9yOiBpbnZhbGlkIGZvcm1hdCAlYyVjJWMlY1xuIiwgZm9ybWF0LAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID4+IDgsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPj4gMTYs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt YXQgPj4gMjQpOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+IFRoZSBkZWZhdWx0IGNhc2Ug aGVyZSBzaG91bGQgYmUgdW5yZWFjaGFibGUuIEVpdGhlciBpdCBpcyBvciB0aGUgdXBwZXIgbGF5 ZXIgKG9yCj4gZWFybGllciBjb2RlKSBzaG91bGQgZW5zdXJlIHRoYXQuCj4KPiA+ICsgICAgICAg fQo+ID4gKwo+ID4gKyAgICAgICBzd2l0Y2ggKGJsZW5kaW5nKSB7Cj4gPiArICAgICAgIGNhc2Ug RFJNX01PREVfQkxFTkRfUElYRUxfTk9ORToKPiA+ICsgICAgICAgICAgICAgICAvKiBkb24ndCBk byBibGVuZGluZywgbWF5YmUgUkdCWCAqLwo+ID4gKyAgICAgICAgICAgICAgIC8qIGFscGhhIG1v ZGUgc2VsZWN0IC0gbGF5ZXIgYWxwaGEgKi8KPiA+ICsgICAgICAgICAgICAgICByZWdfdmFsIHw9 IEJJVCgyKTsKPiA+ICsgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgY2FzZSBEUk1f TU9ERV9CTEVORF9DT1ZFUkFHRToKPiA+ICsgICAgICAgICAgICAgICAvKiBhbHBoYSBtb2RlIHNl bGVjdCAtIGNvbWJvIGFscGhhICovCj4gPiArICAgICAgICAgICAgICAgcmVnX3ZhbCB8PSBCSVQo Myk7Cj4gPiArICAgICAgICAgICAgICAgLypOb3JtYWwgbW9kZSovCj4gPiArICAgICAgICAgICAg ICAgcmVnX3ZhbCAmPSAofkJJVCgxNikpOwo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+ID4g KyAgICAgICBjYXNlIERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJOgo+ID4gKyAgICAgICAgICAgICAg IC8qIGFscGhhIG1vZGUgc2VsZWN0IC0gY29tYm8gYWxwaGEgKi8KPiA+ICsgICAgICAgICAgICAg ICByZWdfdmFsIHw9IEJJVCgzKTsKPiA+ICsgICAgICAgICAgICAgICAvKlByZS1tdWx0IG1vZGUq Lwo+ID4gKyAgICAgICAgICAgICAgIHJlZ192YWwgfD0gQklUKDE2KTsKPiA+ICsgICAgICAgICAg ICAgICBicmVhazsKPiA+ICsgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgICAvKiBh bHBoYSBtb2RlIHNlbGVjdCAtIGxheWVyIGFscGhhICovCj4gPiArICAgICAgICAgICAgICAgcmVn X3ZhbCB8PSBCSVQoMik7Cj4gPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gRGl0dG8KPgo+ID4g KyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJvdGF0aW9uID0gdG9fZHB1X3JvdGF0aW9uKHJv dGF0aW9uKTsKPiA+ICsgICAgICAgcmVnX3ZhbCB8PSAocm90YXRpb24gJiAweDcpIDw8IDIwOwo+ ID4gKwo+ID4gKyAgICAgICByZXR1cm4gcmVnX3ZhbDsKPiA+ICt9Cj4gPiArCj4KPiA+ICtzdGF0 aWMgdm9pZCBkcHVfbGF5ZXIoc3RydWN0IGRwdV9jb250ZXh0ICpjdHgsCj4gPiArICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzcHJkX2RwdV9sYXllciAqaHdsYXllcikKPiA+ICt7Cj4gPiArICAg ICAgIHN0cnVjdCBkcHVfcmVnICpyZWcgPSAoc3RydWN0IGRwdV9yZWcgKiljdHgtPmJhc2U7Cj4g PiArICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmluZm87Cj4gPiArICAgICAg IHN0cnVjdCBsYXllcl9yZWcgKmxheWVyOwo+ID4gKyAgICAgICB1MzIgYWRkciwgc2l6ZSwgb2Zm c2V0Owo+ID4gKyAgICAgICBpbnQgaTsKPiA+ICsKPiA+ICsgICAgICAgbGF5ZXIgPSAmcmVnLT5s YXllcnNbaHdsYXllci0+aW5kZXhdOwo+ID4gKyAgICAgICBvZmZzZXQgPSAoaHdsYXllci0+ZHN0 X3ggJiAweGZmZmYpIHwgKChod2xheWVyLT5kc3RfeSkgPDwgMTYpOwo+ID4gKwo+ID4gKyAgICAg ICBpZiAoaHdsYXllci0+c3JjX3cgJiYgaHdsYXllci0+c3JjX2gpCj4gPiArICAgICAgICAgICAg ICAgc2l6ZSA9IChod2xheWVyLT5zcmNfdyAmIDB4ZmZmZikgfCAoKGh3bGF5ZXItPnNyY19oKSA8 PCAxNik7Cj4gPiArICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgICBzaXplID0gKGh3bGF5 ZXItPmRzdF93ICYgMHhmZmZmKSB8ICgoaHdsYXllci0+ZHN0X2gpIDw8IDE2KTsKPiA+ICsKPiA+ ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGh3bGF5ZXItPnBsYW5lczsgaSsrKSB7Cj4gPiArICAg ICAgICAgICAgICAgYWRkciA9IGh3bGF5ZXItPmFkZHJbaV07Cj4gPiArCj4gPiArICAgICAgICAg ICAgICAgaWYgKGFkZHIgJSAxNikKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2Vycigi bGF5ZXIgYWRkclslZF0gaXMgbm90IDE2IGJ5dGVzIGFsaWduLCBpdCdzIDB4JTA4eFxuIiwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgYWRkcik7Cj4gPiArICAgICAgICAg ICAgICAgbGF5ZXItPmFkZHJbaV0gPSBhZGRyOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAg ICAgIGxheWVyLT5wb3MgPSBvZmZzZXQ7Cj4gPiArICAgICAgIGxheWVyLT5zaXplID0gc2l6ZTsK PiA+ICsgICAgICAgbGF5ZXItPmNyb3Bfc3RhcnQgPSAoaHdsYXllci0+c3JjX3kgPDwgMTYpIHwg aHdsYXllci0+c3JjX3g7Cj4gPiArICAgICAgIGxheWVyLT5hbHBoYSA9IGh3bGF5ZXItPmFscGhh Owo+ID4gKwo+ID4gKyAgICAgICBpbmZvID0gZHJtX2Zvcm1hdF9pbmZvKGh3bGF5ZXItPmZvcm1h dCk7Cj4gPiArICAgICAgIGlmIChpbmZvLT5jcHBbMF0gPT0gMCkgewo+Cj4gRGl0dG8KPgo+ID4g KyAgICAgICAgICAgICAgIHByX2VycigibGF5ZXJbJWRdIGJ5dGVzIHBlciBwaXhlbCBpcyBpbnZh bGlkXG4iLCBod2xheWVyLT5pbmRleCk7Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4g KyAgICAgICB9Cj4gPiArCj4KPgo+Cj4KPiA+ICtzdGF0aWMgaW50IGRwdV9jYXBhYmlsaXR5KHN0 cnVjdCBkcHVfY29udGV4dCAqY3R4LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRwdV9jYXBhYmlsaXR5ICpjYXApCj4gPiArewo+ID4gKyAgICAgICBpZiAoIWNhcCkKPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiBFbnN1cmUgdGhlIGNhbGxlciBh bHdheXMgcGFzc2VzIGNhcCAhPSBOVUxMIGFuZCBkcm9wIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlw ZT8KPgo+ID4gKyAgICAgICBjYXAtPm1heF9sYXllcnMgPSA2Owo+ID4gKyAgICAgICBjYXAtPmZt dHNfcHRyID0gcHJpbWFyeV9mbXRzOwo+ID4gKyAgICAgICBjYXAtPmZtdHNfY250ID0gQVJSQVlf U0laRShwcmltYXJ5X2ZtdHMpOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4K Pgo+ID4gK3N0YXRpYyBpbnQgc3ByZF9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKyAgICAgICBEUk1fREVCVUcoIiVzKClc biIsIF9fZnVuY19fKTsKPiA+ICsKPgo+IFdvdWxkIGJlIG5pY2UgdG8gaGVhciBmcm9tIHRoZSBh dG9taWMgZXhwZXJ0cywgaG93IGEgbm8tb3AgYXRvbWljX2NoZWNrIGdvZXMKPiB3aXRoIHRoZSBv dmVyYWxsIGF0b21pYyBzZW1hbnRpY3MuCj4KPgo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4KPgo+ID4gK3N0YXRpYyB2b2lkIHNwcmRfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gK3sKPiA+ICsgICAg ICAgc3RydWN0IHNwcmRfcGxhbmUgKnAgPSB0b19zcHJkX3BsYW5lKHBsYW5lKTsKPiA+ICsKPiA+ ICsgICAgICAgLyoKPiA+ICsgICAgICAgICogTk9URToKPiA+ICsgICAgICAgICogVGhlIGRwdS0+ Y29yZS0+ZmxpcCgpIHdpbGwgZGlzYWJsZSBhbGwgdGhlIHBsYW5lcyBlYWNoIHRpbWUuCj4gPiAr ICAgICAgICAqIFNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW1wbGltZW50IHRoZSBhdG9taWNfZGlz YWJsZSgpIGZ1bmN0aW9uLgo+ID4gKyAgICAgICAgKiBCdXQgdGhpcyBmdW5jdGlvbiBjYW4gbm90 IGJlIHJlbW92ZWQsIGJlY2F1c2UgaXQgd2lsbCBjaGFuZ2UKPiA+ICsgICAgICAgICogdG8gY2Fs bCBhdG9taWNfdXBkYXRlKCkgY2FsbGJhY2sgaW5zdGVhZC4gV2hpY2ggd2lsbCBjYXVzZQo+ID4g KyAgICAgICAgKiBrZXJuZWwgcGFuaWMgaW4gc3ByZF9wbGFuZV9hdG9taWNfdXBkYXRlKCkuCj4g PiArICAgICAgICAqCj4gPiArICAgICAgICAqIFdlIGRvIG5vdGhpbmcgaGVyZSBidXQganVzdCBw cmludCBhIGRlYnVnIGxvZy4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIERSTV9ERUJVRygi JXMoKSBsYXllcl9pZCA9ICV1XG4iLCBfX2Z1bmNfXywgcC0+aW5kZXgpOwo+Cj4gU2ltaWxhciB0 byB0aGUgY2hlY2sgLSB3b3VsZCBiZSBuaWNlIHRvIHNlZSBhIGNvbmZpcm1hdGlvbiwgdGhhdCB0 aGlzIGlzbid0Cj4gYWJ1c2luZyBhdG9taWNzIGluIHNvbWUgd2F5Lgo+Cj4KPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBzcHJkX3BsYW5lX2NyZWF0ZV9wcm9wZXJ0aWVzKHN0cnVjdCBzcHJk X3BsYW5lICpwLCBpbnQgaW5kZXgpCj4gPiArewo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgc3Vw cG9ydGVkX21vZGVzID0gQklUKERSTV9NT0RFX0JMRU5EX1BJWEVMX05PTkUpIHwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChEUk1fTU9ERV9CTEVORF9QUkVN VUxUSSkgfAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKERS TV9NT0RFX0JMRU5EX0NPVkVSQUdFKTsKPiA+ICsKPiA+ICsgICAgICAgLyogY3JlYXRlIHJvdGF0 aW9uIHByb3BlcnR5ICovCj4gPiArICAgICAgIGRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJv cGVydHkoJnAtPnBsYW5lLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERSTV9NT0RFX1JPVEFURV8wLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERSTV9NT0RFX1JPVEFURV9NQVNLIHwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUk1fTU9ERV9SRUZMRUNUX01BU0spOwo+ID4g Kwo+ID4gKyAgICAgICAvKiBjcmVhdGUgYWxwaGEgcHJvcGVydHkgKi8KPiA+ICsgICAgICAgZHJt X3BsYW5lX2NyZWF0ZV9hbHBoYV9wcm9wZXJ0eSgmcC0+cGxhbmUpOwo+ID4gKwo+ID4gKyAgICAg ICAvKiBjcmVhdGUgYmxlbmQgbW9kZSBwcm9wZXJ0eSAqLwo+ID4gKyAgICAgICBkcm1fcGxhbmVf Y3JlYXRlX2JsZW5kX21vZGVfcHJvcGVydHkoJnAtPnBsYW5lLCBzdXBwb3J0ZWRfbW9kZXMpOwo+ ID4gKwo+ID4gKyAgICAgICAvKiBjcmVhdGUgenBvcyBwcm9wZXJ0eSAqLwo+ID4gKyAgICAgICBk cm1fcGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3BlcnR5KCZwLT5wbGFuZSwgaW5kZXgp Owo+ID4gKwo+IEVpdGhlciBjaGVjayBpZiBjcmVhdGluZyB0aGUgcHJvcGVydGllcyBmYWlsIChh bmQgcHJvcGFnYXRlIHRoZSBlcnJvcikgb3IgZHJvcAo+IHRoZSBmdW5jdGlvbiByZXR1cm4gdHlw ZS4gQXMtaXMgaXQncyBpbiB0aGUgbWlkZGxlIG1ha2luZyBpdCBmYWlybHkgbWlzbGVhZGluZy4K Pgo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4KPgo+ID4gK3N0YXRpYyBzdHJ1 Y3QgZHJtX3BsYW5lICpzcHJkX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3ByZF9kcHUg KmRwdSkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnkgPSBOVUxM Owo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ByZF9wbGFuZSAqcCA9IE5VTEw7Cj4gPiArICAgICAgIHN0 cnVjdCBkcHVfY2FwYWJpbGl0eSBjYXAgPSB7fTsKPiA+ICsgICAgICAgaW50IGVyciwgaTsKPiA+ ICsKPiA+ICsgICAgICAgaWYgKGRwdS0+Y29yZSAmJiBkcHUtPmNvcmUtPmNhcGFiaWxpdHkpCj4g QXMgbWVudGlvbmVkIGJlZm9yZSAtIHRoaXMgYWx3YXlzIGV2YWx1YXRlcyB0byB0cnVlLCBzbyBk cm9wIHRoZSBjaGVjay4KPiBTYW1lIGFwcGxpZXMgZm9yIHRoZSBvdGhlciBkcHUtPmNvcmUtPmZv byBjaGVja3MuCj4KPiBTdGlsbCBub3QgYSBodWdlIGZhbiBvZiB0aGUgYWJzdHJhY3Rpb24gbGF5 ZXIsIGJ1dCBJIGd1ZXNzIHlvdSdyZSBoZXNpdGFudCBvbgo+IHJlbW92aW5nIGl0LgpIZXJlIGlz IHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBvdXIgInNwcmRfZHB1X2luaXQiOgogICAg aWYgKGRwdS0+Z2xiICYmIGRwdS0+Z2xiLT5wb3dlcikKICAgICAgICBkcHUtPmdsYi0+cG93ZXIo Y3R4LCB0cnVlKTsKICAgIGlmIChkcHUtPmdsYiAmJiBkcHUtPmdsYi0+ZW5hYmxlKQogICAgICAg IGRwdS0+Z2xiLT5lbmFibGUoY3R4KTsKCiAgICBpZiAoY3R4LT5pc19zdG9wcGVkICYmIGRwdS0+ Z2xiICYmIGRwdS0+Z2xiLT5yZXNldCkKICAgICAgICBkcHUtPmdsYi0+cmVzZXQoY3R4KTsKCiAg ICBpZiAoZHB1LT5jbGsgJiYgZHB1LT5jbGstPmluaXQpCiAgICAgICAgZHB1LT5jbGstPmluaXQo Y3R4KTsKICAgIGlmIChkcHUtPmNsayAmJiBkcHUtPmNsay0+ZW5hYmxlKQogICAgICAgIGRwdS0+ Y2xrLT5lbmFibGUoY3R4KTsKCiAgICBpZiAoZHB1LT5jb3JlICYmIGRwdS0+Y29yZS0+aW5pdCkK ICAgICAgICBkcHUtPmNvcmUtPmluaXQoY3R4KTsKICAgIGlmIChkcHUtPmNvcmUgJiYgZHB1LT5j b3JlLT5pZmNvbmZpZykKICAgICAgICBkcHUtPmNvcmUtPmlmY29uZmlnKGN0eCk7CgrigJxkcHUt PmNvcmUiLCAiZHB1LT5jbGsiLCAiZHB1LT5nbGIiIGNoZWNraW5nIG1heWJlIGlzIG5vdCBuZWVk ZWQsIGkKd2lsbCByZW1vdmUgaXQuCkJ1dCwgRWc6ICJkcHUtPmdsYi0+cG93ZXIiIG5vdCBhbHdh eXMgbmVlZCBmb3IgYWxsIGgvdwpTbyBpbiBvcmRlciB0byBrZWVwIHRoZSBzYW1lIGNvZGluZyBz dHlsZSwgY291bGQgaSBkbyBsaWtlIHRoaXM6CiAgICBpZiAoZHB1LT5nbGItPnBvd2VyKQogICAg ICAgIGRwdS0+Z2xiLT5wb3dlcihjdHgsIHRydWUpOwogICAgaWYgKGRwdS0+Z2xiLT5lbmFibGUp CiAgICAgICAgZHB1LT5nbGItPmVuYWJsZShjdHgpOwouLi4uLi4KCkJ1dCBoZXJlLCAiZHB1LT5j b3JlLT5jYXBhYmlsaXR5IiwgeW91ciBhcmUgcmlnaHQsIHRoaXMgYWx3YXlzIGV2YWx1YXRlcyB0 byB0cnVlClNvIGkgd2lsbCByZW1vdmUgdGhlIGVycm9yIGNoZWNraW5nIGFib3V0IGFsd2F5cyBi ZWluZyB0cnVlLi4uCj4KPiA+ICsgICAgICAgICAgICAgICBkcHUtPmNvcmUtPmNhcGFiaWxpdHko JmRwdS0+Y3R4LCAmY2FwKTsKPiA+ICsKPiA+ICsgICAgICAgZHB1LT5sYXllcnMgPSBkZXZtX2tj YWxsb2MoZHJtLT5kZXYsIGNhcC5tYXhfbGF5ZXJzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3ByZF9kcHVfbGF5ZXIpLCBHRlBfS0VSTkVMKTsK PiA+ICsgICAgICAgaWYgKCFkcHUtPmxheWVycykKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKPiA+ICsKPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGNhcC5t YXhfbGF5ZXJzOyBpKyspIHsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBwID0gZGV2bV9remFs bG9jKGRybS0+ZGV2LCBzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKPiA+ICsgICAgICAgICAgICAg ICBpZiAoIXApCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBlcnIgPSBkcm1fdW5pdmVyc2FsX3BsYW5l X2luaXQoZHJtLCAmcC0+cGxhbmUsIDEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZzcHJkX3BsYW5lX2Z1bmNzLCBjYXAuZm10c19wdHIsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcC5mbXRzX2Nu dCwgTlVMTCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSwgTlVMTCk7Cj4gPiArICAgICAgICAgICAgICAgaWYg KGVycikgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJmYWlsIHRvIGlu aXQgcHJpbWFyeSBwbGFuZVxuIik7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g RVJSX1BUUihlcnIpOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAg ICAgICBkcm1fcGxhbmVfaGVscGVyX2FkZCgmcC0+cGxhbmUsICZzcHJkX3BsYW5lX2hlbHBlcl9m dW5jcyk7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgc3ByZF9wbGFuZV9jcmVhdGVfcHJvcGVy dGllcyhwLCBpKTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBwLT5pbmRleCA9IGk7Cj4gPiAr ICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHBy aW1hcnkgPSAmcC0+cGxhbmU7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgaWYgKHAp Cj4gPiArICAgICAgICAgICAgICAgRFJNX0lORk8oImRwdSBwbGFuZSBpbml0IG9rXG4iKTsKPgo+ IFRoaXMgYW5kIG5lYXJseSBhbGwgdGhlIG90aGVyIERSTV9JTkZPKCkgbWVzc2FnZXMgbG9vayBs aWtlIGEgZGVidWcvZGV2ZWxvcG1lbnQKPiBsZWZ0IG92ZXIuIFBsZWFzZSByZW1vdmUgdGhlbSAt IHRoZSBkcml2ZXIgZG9lcyBub3QgbmVlZCB0byBwcmludCB3aGVuIGZ1bmN0aW9ucwo+IGFyZSBz dWNjZXNzZnVsbC4KPgo+Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBwcmltYXJ5Owo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBzcHJkX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ByZF9kcHUgKmRwdSA9IGNy dGNfdG9fZHB1KGNydGMpOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoKGRwdS0+bW9kZS0+aGRpc3Bs YXkgPT0gZHB1LT5tb2RlLT5odG90YWwpIHx8Cj4gPiArICAgICAgICAgICAoZHB1LT5tb2RlLT52 ZGlzcGxheSA9PSBkcHUtPm1vZGUtPnZ0b3RhbCkpCj4gPiArICAgICAgICAgICAgICAgZHB1LT5j dHguaWZfdHlwZSA9IFNQUkRfRElTUENfSUZfRURQSTsKPiA+ICsgICAgICAgZWxzZQo+ID4gKyAg ICAgICAgICAgICAgIGRwdS0+Y3R4LmlmX3R5cGUgPSBTUFJEX0RJU1BDX0lGX0RQSTsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzIHNwcmRfY3J0Y19tb2RlX3Zh bGlkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiA+ICt7 Cj4gPiArICAgICAgIHN0cnVjdCBzcHJkX2RwdSAqZHB1ID0gY3J0Y190b19kcHUoY3J0Yyk7Cj4g PiArCj4gPiArICAgICAgIERSTV9JTkZPKCIlcygpIG1vZGU6ICJEUk1fTU9ERV9GTVQiXG4iLCBf X2Z1bmNfXywgRFJNX01PREVfQVJHKG1vZGUpKTsKPiA+ICsKPgo+IElmIG5lZWRlZCwgbGV0J3Mg bW92ZSB0aGlzIHRvIGNvcmUgYW5kIG1ha2UgaXQgYSBkZWJ1ZyBtZXNzYWdlLiBBcy1pcyBpdCB3 aWxsCj4gY2F1c2Ugc3BhbSBmb3Igbm8gcmVhc29uLgo+Cj4KPiA+ICsgICAgICAgaWYgKG1vZGUt PnR5cGUgJiBEUk1fTU9ERV9UWVBFX0RFRkFVTFQpCj4gPiArICAgICAgICAgICAgICAgZHB1LT5t b2RlID0gKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICopbW9kZTsKPiA+ICsKPiA+ICsgICAgICAg aWYgKG1vZGUtPnR5cGUgJiBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRCkgewo+ID4gKyAgICAgICAg ICAgICAgIGRwdS0+bW9kZSA9IChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKW1vZGU7Cj4KPiBD YXN0aW5nIGF3YXkgdGhlIGNvbnN0bmVzcyBpcyBhIGJhZCBpZGVhLgo+Cj4gSW5zdGVhZCwgbGV0 J3MgbW92ZSB0aGUgaWZfdHlwZSBkZWNpc2lvbiBoZXJlLCB0aHVzIHdlIGNhbiByZW1vdmUgdGhl Cj4gbnNwcmRfY3J0Y19tb2RlX3NldF9ub2ZiIGZ1bmN0aW9uPyBUaGlzIHdheSB3ZSBjYW4gYWxz byByZW1vdmUgc3ByZF9kcHU6Om1vZGUuCj4KPgo+ID4gKyAgICAgICAgICAgICAgIGRybV9kaXNw bGF5X21vZGVfdG9fdmlkZW9tb2RlKGRwdS0+bW9kZSwgJmRwdS0+Y3R4LnZtKTsKPgo+IFNpbWls YXJseSwgb25lIGNvdWxkIGRlcml2ZSB0aGUgdm0gYmFzZWQgYXR0cmlidXRlcyBoZXJlIGFuZCBy ZW1vdmUgZHB1LT5jdHgudm0uCj4KPgo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIHJl dHVybiBNT0RFX09LOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBzcHJkX2NydGNfYXRv bWljX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ID4gK3sK PiA+ICsgICAgICAgc3RydWN0IHNwcmRfZHB1ICpkcHUgPSBjcnRjX3RvX2RwdShjcnRjKTsKPiA+ ICsKPiA+ICsgICAgICAgRFJNX0lORk8oIiVzKClcbiIsIF9fZnVuY19fKTsKPiA+ICsKPiBNb3Jl IHNwcnVyaW91cyBpbmZvIG1lc3NhZ2VzIC0gZGVidWcgbGVmdG92ZXI/Cj4KPgo+Cj4gPiArc3Rh dGljIGludCBzcHJkX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g PiArewo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ByZF9kcHUgKmRwdSA9IGNydGNfdG9fZHB1KGNydGMp Owo+ID4gKwo+ID4gKyAgICAgICBEUk1fREVCVUcoIiVzKClcbiIsIF9fZnVuY19fKTsKPiA+ICsK PiBQZXJzb25hbGx5LCBJIGRvbid0IHNlZSB0aGUgYXBwZWFsIGluIHRoZXNlIGRlYnVnIG1lc3Nh Z2VzLiBXaGlsZSBhIGZldyBkaXNwbGF5Cj4gY29udHJvbGxlcnMgaGF2ZSB0aGUgb2RkIHBpZWNl LCB0aGV5IGFyZSBhbiBleGNlcHRpb24gaW4gRFJNLgo+Cj4KPgo+ID4gK3N0YXRpYyBpbnQgc3By ZF9jcnRjX2NyZWF0ZV9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICt7Cj4g PiArICAgICAgIHN0cnVjdCBzcHJkX2RwdSAqZHB1ID0gY3J0Y190b19kcHUoY3J0Yyk7Cj4gPiAr ICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkcHUtPmNydGMuZGV2Owo+ID4gKyAgICAg ICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgKmJsb2I7Cj4gPiArICAgICAgIHNpemVfdCBibG9iX3NpemU7Cj4gPiArCj4gPiAr ICAgICAgIGJsb2Jfc2l6ZSA9IHN0cmxlbihkcHUtPmN0eC52ZXJzaW9uKSArIDE7Cj4gPiArCj4g PiArICAgICAgIGJsb2IgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoZHB1LT5jcnRjLmRldiwg YmxvYl9zaXplLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZHB1LT5jdHgudmVyc2lvbik7 Cj4gPiArICAgICAgIGlmIChJU19FUlIoYmxvYikpIHsKPiA+ICsgICAgICAgICAgICAgICBEUk1f RVJST1IoImRybV9wcm9wZXJ0eV9jcmVhdGVfYmxvYiBkcHUgdmVyc2lvbiBmYWlsZWRcbiIpOwo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGJsb2IpOwo+ID4gKyAgICAgICB9Cj4g PiArCj4gPiArICAgICAgIC8qIGNyZWF0ZSBkcHUgdmVyc2lvbiBwcm9wZXJ0eSAqLwo+ID4gKyAg ICAgICBwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZShkcm0sCj4gPiArICAgICAgICAgICAgICAg RFJNX01PREVfUFJPUF9JTU1VVEFCTEUgfCBEUk1fTU9ERV9QUk9QX0JMT0IsCj4gPiArICAgICAg ICAgICAgICAgImRwdSB2ZXJzaW9uIiwgMCk7Cj4KPiBOb3RlOiBDdXN0b20gcHJvcGVydGllcyBz aG91bGQgYmUgc2VwYXJhdGUgcGF0Y2hlcy4gVGhpcyBpbmNsdWRlcyBkb2N1bWVudGF0aW9uCj4g d2h5IHRoZXkgYXJlIG5lZWRlZCBhbmQgcmVmZXJlbmNlcyB0byBvcGVuLXNvdXJjZSB1c2Vyc3Bh Y2UuCj4KPgo+IEhUSAo+IEVtaWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==