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 smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.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 78316C433EF for ; Tue, 8 Feb 2022 08:11:33 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 23E9E404F9; Tue, 8 Feb 2022 08:11:33 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wQSDFE4IUnqZ; Tue, 8 Feb 2022 08:11:31 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id 5A54540112; Tue, 8 Feb 2022 08:11:30 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 369BCC001A; Tue, 8 Feb 2022 08:11:30 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id DEA41C000B for ; Tue, 8 Feb 2022 08:11:28 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id B038A60AF0 for ; Tue, 8 Feb 2022 08:11:28 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp3.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JEDZyyU2JGrP for ; Tue, 8 Feb 2022 08:11:26 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id B4E7760AAA for ; Tue, 8 Feb 2022 08:11:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1644307885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=58hrkIvpdQLmnAiFOUqgDAuaOgF/Li8a1Gu1f4yOfm0=; b=N/BHxJJ1mhqNQHptW6PU4n9iD1fdyCpAvfyzKeJ+etQKuRKBvEwHuscp5K2OHKNxb+DWke Frlv4q7NrDkkFj9XlHe3Tj/zKZ76TRwQsciAis3yTT5Ous5hUM1CJUAxNdrale0b1uwNHL bgM0MNSzF2R4Gq+JREd6+wX3CB+Ywd8= Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-586-9RvtL8uHM064eb10dZZxtg-1; Tue, 08 Feb 2022 03:11:23 -0500 X-MC-Unique: 9RvtL8uHM064eb10dZZxtg-1 Received: by mail-pf1-f197.google.com with SMTP id i16-20020aa78d90000000b004be3e88d746so9217979pfr.13 for ; Tue, 08 Feb 2022 00:11:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=58hrkIvpdQLmnAiFOUqgDAuaOgF/Li8a1Gu1f4yOfm0=; b=LgPHAQZwiLMITOPGQcK4NAYaINSy+Z+YURvh1MWnOv2luKyKhr41xgH/Qmg63MmKto NDuRqj6G+uJF4FBErH1C5uAzQNbXjbGRavidoxPB+nfFy9UL8OMyMWW7g+He1Rq5o0Ih tZK9PtCBLfmW71VyG4tqLokOaMZVcTtR8OOmoejFTgD2bXZsYkZIKRQiAr0NJKgPZ7aq BrYZT+jJRijbzMH1lAFtuFGvyyPOAM/0qmqNe7ILqQxK3tOo9tx58gDzakq/b5XJPdPR 1C672+vyARXEzCfN0Ho6FzTEss1XBSHsW/3zzIDOi9Mo6LILZBdGuGDwb3Kqrxd5uuQC XXQA== X-Gm-Message-State: AOAM533Mi5KO4kEm7Zqe9uovHIvXUpl+tLOCjHf5k9/w2FaSHZF5eSDP VvjKzLodvn0pRHcRZYbLycFDp9XqqSCOozdyew7xUgeyZ53viAjAqoL4HoaRN75f2D1r8tPpc86 CO63+QTbLnrqLMkrV3nf8vGM9N2US4VbENxRraYBsCQ== X-Received: by 2002:a17:902:e949:: with SMTP id b9mr3278091pll.92.1644307881166; Tue, 08 Feb 2022 00:11:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJzbbu1B6X/K8dXoJ4kSzZEkcdk+ixjuNu/r3Mr0HTAu3uk3YIogjyU7qtG6rO50lW397oS2KQ== X-Received: by 2002:a17:902:e949:: with SMTP id b9mr3278051pll.92.1644307880585; Tue, 08 Feb 2022 00:11:20 -0800 (PST) Received: from [10.72.13.12] ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id kk18sm1807788pjb.26.2022.02.08.00.11.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 08 Feb 2022 00:11:19 -0800 (PST) Message-ID: <75e2fd97-1e34-2b1a-cca4-ceb1aa440479@redhat.com> Date: Tue, 8 Feb 2022 16:11:06 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.5.1 Subject: Re: [PATCH 18/31] vhost: Shadow virtqueue buffers forwarding To: Eugenio Perez Martin References: <20220121202733.404989-1-eperezma@redhat.com> <20220121202733.404989-19-eperezma@redhat.com> <6c98f4e8-8695-ab83-ae37-2d6293a1fafa@redhat.com> From: Jason Wang In-Reply-To: Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: Laurent Vivier , Parav Pandit , Cindy Lu , "Michael S. Tsirkin" , Richard Henderson , qemu-level , Gautam Dawar , Markus Armbruster , Eduardo Habkost , Harpreet Singh Anand , Xiao W Wang , Stefan Hajnoczi , Eli Cohen , Paolo Bonzini , Zhu Lingshan , virtualization , Eric Blake X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CuWcqCAyMDIyLzIvMiDkuIrljYgxOjA4LCBFdWdlbmlvIFBlcmV6IE1hcnRpbiDlhpnpgZM6Cj4g T24gU3VuLCBKYW4gMzAsIDIwMjIgYXQgNTo0MyBBTSBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRo YXQuY29tPiB3cm90ZToKPj4KPj4g5ZyoIDIwMjIvMS8yMiDkuIrljYg0OjI3LCBFdWdlbmlvIFDD qXJleiDlhpnpgZM6Cj4+PiBJbml0aWFsIHZlcnNpb24gb2Ygc2hhZG93IHZpcnRxdWV1ZSB0aGF0 IGFjdHVhbGx5IGZvcndhcmQgYnVmZmVycy4gVGhlcmUKPj4+IGlzIG5vIGlvbW11IHN1cHBvcnQg YXQgdGhlIG1vbWVudCwgYW5kIHRoYXQgd2lsbCBiZSBhZGRyZXNzZWQgaW4gZnV0dXJlCj4+PiBw YXRjaGVzIG9mIHRoaXMgc2VyaWVzLiBTaW5jZSBhbGwgdmhvc3QtdmRwYSBkZXZpY2VzIHVzZSBm b3JjZWQgSU9NTVUsCj4+PiB0aGlzIG1lYW5zIHRoYXQgU1ZRIGlzIG5vdCB1c2FibGUgYXQgdGhp cyBwb2ludCBvZiB0aGUgc2VyaWVzIG9uIGFueQo+Pj4gZGV2aWNlLgo+Pj4KPj4+IEZvciBzaW1w bGljaXR5IGl0IG9ubHkgc3VwcG9ydHMgbW9kZXJuIGRldmljZXMsIHRoYXQgZXhwZWN0cyB2cmlu Zwo+Pj4gaW4gbGl0dGxlIGVuZGlhbiwgd2l0aCBzcGxpdCByaW5nIGFuZCBubyBldmVudCBpZHgg b3IgaW5kaXJlY3QKPj4+IGRlc2NyaXB0b3JzLiBTdXBwb3J0IGZvciB0aGVtIHdpbGwgbm90IGJl IGFkZGVkIGluIHRoaXMgc2VyaWVzLgo+Pj4KPj4+IEl0IHJldXNlcyB0aGUgVmlydFF1ZXVlIGNv ZGUgZm9yIHRoZSBkZXZpY2UgcGFydC4gVGhlIGRyaXZlciBwYXJ0IGlzCj4+PiBiYXNlZCBvbiBM aW51eCdzIHZpcnRpb19yaW5nIGRyaXZlciwgYnV0IHdpdGggc3RyaXBwZWQgZnVuY3Rpb25hbGl0 eQo+Pj4gYW5kIG9wdGltaXphdGlvbnMgc28gaXQncyBlYXNpZXIgdG8gcmV2aWV3Lgo+Pj4KPj4+ IEhvd2V2ZXIsIGZvcndhcmRpbmcgYnVmZmVycyBoYXZlIHNvbWUgcGFydGljdWxhciBwaWVjZXM6 IE9uZSBvZiB0aGUgbW9zdAo+Pj4gdW5leHBlY3RlZCBvbmVzIGlzIHRoYXQgYSBndWVzdCdzIGJ1 ZmZlciBjYW4gZXhwYW5kIHRocm91Z2ggbW9yZSB0aGFuCj4+PiBvbmUgZGVzY3JpcHRvciBpbiBT VlEuIFdoaWxlIHRoaXMgaXMgaGFuZGxlZCBncmFjZWZ1bGx5IGJ5IHFlbXUncwo+Pj4gZW11bGF0 ZWQgdmlydGlvIGRldmljZXMsIGl0IG1heSBjYXVzZSB1bmV4cGVjdGVkIFNWUSBxdWV1ZSBmdWxs LiBUaGlzCj4+PiBwYXRjaCBhbHNvIHNvbHZlcyBpdCBieSBjaGVja2luZyBmb3IgdGhpcyBjb25k aXRpb24gYXQgYm90aCBndWVzdCdzCj4+PiBraWNrcyBhbmQgZGV2aWNlJ3MgY2FsbHMuIFRoZSBj b2RlIG1heSBiZSBtb3JlIGVsZWdhbnQgaW4gdGhlIGZ1dHVyZSBpZgo+Pj4gU1ZRIGNvZGUgcnVu cyBpbiBpdHMgb3duIGlvY29udGV4dC4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBFdWdlbmlvIFDD qXJleiA8ZXBlcmV6bWFAcmVkaGF0LmNvbT4KPj4+IC0tLQo+Pj4gICAgaHcvdmlydGlvL3Zob3N0 LXNoYWRvdy12aXJ0cXVldWUuaCB8ICAgMiArCj4+PiAgICBody92aXJ0aW8vdmhvc3Qtc2hhZG93 LXZpcnRxdWV1ZS5jIHwgMzY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4+PiAgICBo dy92aXJ0aW8vdmhvc3QtdmRwYS5jICAgICAgICAgICAgIHwgMTExICsrKysrKysrLQo+Pj4gICAg MyBmaWxlcyBjaGFuZ2VkLCA0NjIgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCj4+Pgo+ Pj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92aG9zdC1zaGFkb3ctdmlydHF1ZXVlLmggYi9ody92 aXJ0aW8vdmhvc3Qtc2hhZG93LXZpcnRxdWV1ZS5oCj4+PiBpbmRleCAzOWFlZjVmZmRmLi4xOWM5 MzRhZjQ5IDEwMDY0NAo+Pj4gLS0tIGEvaHcvdmlydGlvL3Zob3N0LXNoYWRvdy12aXJ0cXVldWUu aAo+Pj4gKysrIGIvaHcvdmlydGlvL3Zob3N0LXNoYWRvdy12aXJ0cXVldWUuaAo+Pj4gQEAgLTMz LDYgKzMzLDggQEAgdWludDE2X3Qgdmhvc3Rfc3ZxX2dldF9udW0oY29uc3QgVmhvc3RTaGFkb3dW aXJ0cXVldWUgKnN2cSk7Cj4+PiAgICBzaXplX3Qgdmhvc3Rfc3ZxX2RyaXZlcl9hcmVhX3NpemUo Y29uc3QgVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSk7Cj4+PiAgICBzaXplX3Qgdmhvc3Rfc3Zx X2RldmljZV9hcmVhX3NpemUoY29uc3QgVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSk7Cj4+Pgo+ Pj4gK3ZvaWQgdmhvc3Rfc3ZxX3N0YXJ0KFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEsIFZpcnRJ T0RldmljZSAqdmRldiwKPj4+ICsgICAgICAgICAgICAgICAgICAgICBWaXJ0UXVldWUgKnZxKTsK Pj4+ICAgIHZvaWQgdmhvc3Rfc3ZxX3N0b3AoVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSk7Cj4+ Pgo+Pj4gICAgVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnZob3N0X3N2cV9uZXcodWludDE2X3QgcXNp emUpOwo+Pj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92aG9zdC1zaGFkb3ctdmlydHF1ZXVlLmMg Yi9ody92aXJ0aW8vdmhvc3Qtc2hhZG93LXZpcnRxdWV1ZS5jCj4+PiBpbmRleCA3YzE2ODA3NWQ3 Li5hMWE0MDRmNjhmIDEwMDY0NAo+Pj4gLS0tIGEvaHcvdmlydGlvL3Zob3N0LXNoYWRvdy12aXJ0 cXVldWUuYwo+Pj4gKysrIGIvaHcvdmlydGlvL3Zob3N0LXNoYWRvdy12aXJ0cXVldWUuYwo+Pj4g QEAgLTksNiArOSw4IEBACj4+Pgo+Pj4gICAgI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKPj4+ICAg ICNpbmNsdWRlICJody92aXJ0aW8vdmhvc3Qtc2hhZG93LXZpcnRxdWV1ZS5oIgo+Pj4gKyNpbmNs dWRlICJody92aXJ0aW8vdmhvc3QuaCIKPj4+ICsjaW5jbHVkZSAiaHcvdmlydGlvL3ZpcnRpby1h Y2Nlc3MuaCIKPj4+ICAgICNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3Zob3N0X3R5 cGVzLmgiCj4+Pgo+Pj4gICAgI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCj4+PiBAQCAt MzYsNiArMzgsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgVmhvc3RTaGFkb3dWaXJ0cXVldWUgewo+Pj4K Pj4+ICAgICAgICAvKiBHdWVzdCdzIGNhbGwgbm90aWZpZXIsIHdoZXJlIFNWUSBjYWxscyBndWVz dC4gKi8KPj4+ICAgICAgICBFdmVudE5vdGlmaWVyIHN2cV9jYWxsOwo+Pj4gKwo+Pj4gKyAgICAv KiBWaXJ0aW8gcXVldWUgc2hhZG93aW5nICovCj4+PiArICAgIFZpcnRRdWV1ZSAqdnE7Cj4+PiAr Cj4+PiArICAgIC8qIFZpcnRpbyBkZXZpY2UgKi8KPj4+ICsgICAgVmlydElPRGV2aWNlICp2ZGV2 Owo+Pj4gKwo+Pj4gKyAgICAvKiBNYXAgZm9yIHJldHVybmluZyBndWVzdCdzIGRlc2NyaXB0b3Jz ICovCj4+PiArICAgIFZpcnRRdWV1ZUVsZW1lbnQgKipyaW5nX2lkX21hcHM7Cj4+PiArCj4+PiAr ICAgIC8qIE5leHQgVmlydFF1ZXVlIGVsZW1lbnQgdGhhdCBndWVzdCBtYWRlIGF2YWlsYWJsZSAq Lwo+Pj4gKyAgICBWaXJ0UXVldWVFbGVtZW50ICpuZXh0X2d1ZXN0X2F2YWlsX2VsZW07Cj4+PiAr Cj4+PiArICAgIC8qIE5leHQgaGVhZCB0byBleHBvc2UgdG8gZGV2aWNlICovCj4+PiArICAgIHVp bnQxNl90IGF2YWlsX2lkeF9zaGFkb3c7Cj4+PiArCj4+PiArICAgIC8qIE5leHQgZnJlZSBkZXNj cmlwdG9yICovCj4+PiArICAgIHVpbnQxNl90IGZyZWVfaGVhZDsKPj4+ICsKPj4+ICsgICAgLyog TGFzdCBzZWVuIHVzZWQgaWR4ICovCj4+PiArICAgIHVpbnQxNl90IHNoYWRvd191c2VkX2lkeDsK Pj4+ICsKPj4+ICsgICAgLyogTmV4dCBoZWFkIHRvIGNvbnN1bWUgZnJvbSBkZXZpY2UgKi8KPj4+ ICsgICAgdWludDE2X3QgbGFzdF91c2VkX2lkeDsKPj4+ICsKPj4+ICsgICAgLyogQ2FjaGUgZm9y IHRoZSBleHBvc2VkIG5vdGlmaWNhdGlvbiBmbGFnICovCj4+PiArICAgIGJvb2wgbm90aWZpY2F0 aW9uOwo+Pj4gICAgfSBWaG9zdFNoYWRvd1ZpcnRxdWV1ZTsKPj4+Cj4+PiAgICAjZGVmaW5lIElO VkFMSURfU1ZRX0tJQ0tfRkQgLTEKPj4+IEBAIC0xNDgsMzAgKzE3NywyOTQgQEAgYm9vbCB2aG9z dF9zdnFfYWNrX2d1ZXN0X2ZlYXR1cmVzKHVpbnQ2NF90IGRldl9mZWF0dXJlcywKPj4+ICAgICAg ICByZXR1cm4gdHJ1ZTsKPj4+ICAgIH0KPj4+Cj4+PiAtLyogRm9yd2FyZCBndWVzdCBub3RpZmlj YXRpb25zICovCj4+PiAtc3RhdGljIHZvaWQgdmhvc3RfaGFuZGxlX2d1ZXN0X2tpY2soRXZlbnRO b3RpZmllciAqbikKPj4+ICsvKioKPj4+ICsgKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgdGhhdCBT VlEgY2FuIG1ha2UgYXZhaWxhYmxlIGZyb20gdGhlIGd1ZXN0Lgo+Pj4gKyAqCj4+PiArICogQHN2 cSAgIFRoZSBzdnEKPj4+ICsgKi8KPj4+ICtzdGF0aWMgdWludDE2X3Qgdmhvc3Rfc3ZxX2F2YWls YWJsZV9zbG90cyhjb25zdCBWaG9zdFNoYWRvd1ZpcnRxdWV1ZSAqc3ZxKQo+Pj4gICAgewo+Pj4g LSAgICBWaG9zdFNoYWRvd1ZpcnRxdWV1ZSAqc3ZxID0gY29udGFpbmVyX29mKG4sIFZob3N0U2hh ZG93VmlydHF1ZXVlLAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN2cV9raWNrKTsKPj4+ICsgICAgcmV0dXJuIHN2cS0+dnJpbmcubnVtIC0gKHN2cS0+ YXZhaWxfaWR4X3NoYWRvdyAtIHN2cS0+c2hhZG93X3VzZWRfaWR4KTsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIHZvaWQgdmhvc3Rfc3ZxX3NldF9ub3RpZmljYXRpb24oVmhvc3RTaGFkb3dWaXJ0 cXVldWUgKnN2cSwgYm9vbCBlbmFibGUpCj4+PiArewo+Pj4gKyAgICB1aW50MTZfdCBub3RpZmlj YXRpb25fZmxhZzsKPj4+Cj4+PiAtICAgIGlmICh1bmxpa2VseSghZXZlbnRfbm90aWZpZXJfdGVz dF9hbmRfY2xlYXIobikpKSB7Cj4+PiArICAgIGlmIChzdnEtPm5vdGlmaWNhdGlvbiA9PSBlbmFi bGUpIHsKPj4+ICsgICAgICAgIHJldHVybjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBub3Rp ZmljYXRpb25fZmxhZyA9IGNwdV90b19sZTE2KFZSSU5HX0FWQUlMX0ZfTk9fSU5URVJSVVBUKTsK Pj4+ICsKPj4+ICsgICAgc3ZxLT5ub3RpZmljYXRpb24gPSBlbmFibGU7Cj4+PiArICAgIGlmIChl bmFibGUpIHsKPj4+ICsgICAgICAgIHN2cS0+dnJpbmcuYXZhaWwtPmZsYWdzICY9IH5ub3RpZmlj YXRpb25fZmxhZzsKPj4+ICsgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgIHN2cS0+dnJpbmcuYXZh aWwtPmZsYWdzIHw9IG5vdGlmaWNhdGlvbl9mbGFnOwo+Pj4gKyAgICB9Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB2b2lkIHZob3N0X3ZyaW5nX3dyaXRlX2Rlc2NzKFZob3N0U2hhZG93VmlydHF1 ZXVlICpzdnEsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IGlvdmVjICppb3ZlYywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgbnVtLCBib29sIG1vcmVfZGVzY3MsIGJvb2wgd3JpdGUpCj4+PiArewo+Pj4g KyAgICB1aW50MTZfdCBpID0gc3ZxLT5mcmVlX2hlYWQsIGxhc3QgPSBzdnEtPmZyZWVfaGVhZDsK Pj4+ICsgICAgdW5zaWduZWQgbjsKPj4+ICsgICAgdWludDE2X3QgZmxhZ3MgPSB3cml0ZSA/IGNw dV90b19sZTE2KFZSSU5HX0RFU0NfRl9XUklURSkgOiAwOwo+Pj4gKyAgICB2cmluZ19kZXNjX3Qg KmRlc2NzID0gc3ZxLT52cmluZy5kZXNjOwo+Pj4gKwo+Pj4gKyAgICBpZiAobnVtID09IDApIHsK Pj4+ICsgICAgICAgIHJldHVybjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBmb3IgKG4gPSAw OyBuIDwgbnVtOyBuKyspIHsKPj4+ICsgICAgICAgIGlmIChtb3JlX2Rlc2NzIHx8IChuICsgMSA8 IG51bSkpIHsKPj4+ICsgICAgICAgICAgICBkZXNjc1tpXS5mbGFncyA9IGZsYWdzIHwgY3B1X3Rv X2xlMTYoVlJJTkdfREVTQ19GX05FWFQpOwo+Pj4gKyAgICAgICAgfSBlbHNlIHsKPj4+ICsgICAg ICAgICAgICBkZXNjc1tpXS5mbGFncyA9IGZsYWdzOwo+Pj4gKyAgICAgICAgfQo+Pj4gKyAgICAg ICAgZGVzY3NbaV0uYWRkciA9IGNwdV90b19sZTY0KChod2FkZHIpaW92ZWNbbl0uaW92X2Jhc2Up Owo+Pj4gKyAgICAgICAgZGVzY3NbaV0ubGVuID0gY3B1X3RvX2xlMzIoaW92ZWNbbl0uaW92X2xl bik7Cj4+PiArCj4+PiArICAgICAgICBsYXN0ID0gaTsKPj4+ICsgICAgICAgIGkgPSBjcHVfdG9f bGUxNihkZXNjc1tpXS5uZXh0KTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBzdnEtPmZyZWVf aGVhZCA9IGxlMTZfdG9fY3B1KGRlc2NzW2xhc3RdLm5leHQpOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgdW5zaWduZWQgdmhvc3Rfc3ZxX2FkZF9zcGxpdChWaG9zdFNoYWRvd1ZpcnRxdWV1ZSAq c3ZxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnRRdWV1ZUVs ZW1lbnQgKmVsZW0pCj4+PiArewo+Pj4gKyAgICBpbnQgaGVhZDsKPj4+ICsgICAgdW5zaWduZWQg YXZhaWxfaWR4Owo+Pj4gKyAgICB2cmluZ19hdmFpbF90ICphdmFpbCA9IHN2cS0+dnJpbmcuYXZh aWw7Cj4+PiArCj4+PiArICAgIGhlYWQgPSBzdnEtPmZyZWVfaGVhZDsKPj4+ICsKPj4+ICsgICAg LyogV2UgbmVlZCBzb21lIGRlc2NyaXB0b3JzIGhlcmUgKi8KPj4+ICsgICAgYXNzZXJ0KGVsZW0t Pm91dF9udW0gfHwgZWxlbS0+aW5fbnVtKTsKPj4KPj4gTG9va3MgbGlrZSB0aGlzIGNvdWxkIGJl IHRyaWdnZXJlZCBieSBndWVzdCwgd2UgbmVlZCBmYWlsIGluc3RlYWQgYXNzZXJ0Cj4+IGhlcmUu Cj4+Cj4gTXkgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCB2aXJ0cXVldWVfcG9wIGFscmVhZHkgc2Fu aXRpemVkIHRoYXQgY2FzZSwKPiBidXQgSSdtIG5vdCBhYmxlIHRvIGZpbmQgd2hlcmUgbm93LiBJ IHdpbGwgcmVjaGVjayBhbmQsIGluIGNhc2UgaXQncwo+IG5vdCwgSSB3aWxsIG1vdmUgdG8gYSBm YWlsdXJlLgo+Cj4+PiArCj4+PiArICAgIHZob3N0X3ZyaW5nX3dyaXRlX2Rlc2NzKHN2cSwgZWxl bS0+b3V0X3NnLCBlbGVtLT5vdXRfbnVtLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbGVtLT5pbl9udW0gPiAwLCBmYWxzZSk7Cj4+PiArICAgIHZob3N0X3ZyaW5nX3dyaXRlX2Rl c2NzKHN2cSwgZWxlbS0+aW5fc2csIGVsZW0tPmluX251bSwgZmFsc2UsIHRydWUpOwo+Pj4gKwo+ Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBQdXQgZW50cnkgaW4gYXZhaWxhYmxlIGFycmF5IChidXQg ZG9uJ3QgdXBkYXRlIGF2YWlsLT5pZHggdW50aWwgdGhleQo+Pj4gKyAgICAgKiBkbyBzeW5jKS4K Pj4+ICsgICAgICovCj4+PiArICAgIGF2YWlsX2lkeCA9IHN2cS0+YXZhaWxfaWR4X3NoYWRvdyAm IChzdnEtPnZyaW5nLm51bSAtIDEpOwo+Pj4gKyAgICBhdmFpbC0+cmluZ1thdmFpbF9pZHhdID0g Y3B1X3RvX2xlMTYoaGVhZCk7Cj4+PiArICAgIHN2cS0+YXZhaWxfaWR4X3NoYWRvdysrOwo+Pj4g Kwo+Pj4gKyAgICAvKiBVcGRhdGUgYXZhaWwgaW5kZXggYWZ0ZXIgdGhlIGRlc2NyaXB0b3IgaXMg d3JvdGUgKi8KPj4+ICsgICAgc21wX3dtYigpOwo+Pj4gKyAgICBhdmFpbC0+aWR4ID0gY3B1X3Rv X2xlMTYoc3ZxLT5hdmFpbF9pZHhfc2hhZG93KTsKPj4+ICsKPj4+ICsgICAgcmV0dXJuIGhlYWQ7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHZob3N0X3N2cV9hZGQoVmhvc3RTaGFkb3dW aXJ0cXVldWUgKnN2cSwgVmlydFF1ZXVlRWxlbWVudCAqZWxlbSkKPj4+ICt7Cj4+PiArICAgIHVu c2lnbmVkIHFlbXVfaGVhZCA9IHZob3N0X3N2cV9hZGRfc3BsaXQoc3ZxLCBlbGVtKTsKPj4+ICsK Pj4+ICsgICAgc3ZxLT5yaW5nX2lkX21hcHNbcWVtdV9oZWFkXSA9IGVsZW07Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyB2b2lkIHZob3N0X3N2cV9raWNrKFZob3N0U2hhZG93VmlydHF1ZXVlICpz dnEpCj4+PiArewo+Pj4gKyAgICAvKiBXZSBuZWVkIHRvIGV4cG9zZSBhdmFpbGFibGUgYXJyYXkg ZW50cmllcyBiZWZvcmUgY2hlY2tpbmcgdXNlZCBmbGFncyAqLwo+Pj4gKyAgICBzbXBfbWIoKTsK Pj4+ICsgICAgaWYgKHN2cS0+dnJpbmcudXNlZC0+ZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9U SUZZKSB7Cj4+PiAgICAgICAgICAgIHJldHVybjsKPj4+ICAgICAgICB9Cj4+Pgo+Pj4gICAgICAg IGV2ZW50X25vdGlmaWVyX3NldCgmc3ZxLT5oZGV2X2tpY2spOwo+Pj4gICAgfQo+Pj4KPj4+IC0v KiBGb3J3YXJkIHZob3N0IG5vdGlmaWNhdGlvbnMgKi8KPj4+ICsvKioKPj4+ICsgKiBGb3J3YXJk IGF2YWlsYWJsZSBidWZmZXJzLgo+Pj4gKyAqCj4+PiArICogQHN2cSBTaGFkb3cgVmlydFF1ZXVl Cj4+PiArICoKPj4+ICsgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBndWFyYW50 ZWUgdGhhdCBhbGwgZ3Vlc3QncyBhdmFpbGFibGUKPj4+ICsgKiBidWZmZXJzIGFyZSBhdmFpbGFi bGUgdG8gdGhlIGRldmljZSBpbiBTVlEgYXZhaWwgcmluZy4gVGhlIGd1ZXN0IG1heSBoYXZlCj4+ PiArICogZXhwb3NlZCBhIEdQQSAvIEdJT1ZBIGNvbmdpdW91cyBidWZmZXIsIGJ1dCBpdCBtYXkg bm90IGJlIGNvbnRpZ3VvdXMgaW4gcWVtdQo+Pj4gKyAqIHZhZGRyLgo+Pj4gKyAqCj4+PiArICog SWYgdGhhdCBoYXBwZW5zLCBndWVzdCdzIGtpY2sgbm90aWZpY2F0aW9ucyB3aWxsIGJlIGRpc2Fi bGVkIHVudGlsIGRldmljZQo+Pj4gKyAqIG1ha2VzIHNvbWUgYnVmZmVycyB1c2VkLgo+Pj4gKyAq Lwo+Pj4gK3N0YXRpYyB2b2lkIHZob3N0X2hhbmRsZV9ndWVzdF9raWNrKFZob3N0U2hhZG93Vmly dHF1ZXVlICpzdnEpCj4+PiArewo+Pj4gKyAgICAvKiBDbGVhciBldmVudCBub3RpZmllciAqLwo+ Pj4gKyAgICBldmVudF9ub3RpZmllcl90ZXN0X2FuZF9jbGVhcigmc3ZxLT5zdnFfa2ljayk7Cj4+ PiArCj4+PiArICAgIC8qIE1ha2UgYXZhaWxhYmxlIGFzIG1hbnkgYnVmZmVycyBhcyBwb3NzaWJs ZSAqLwo+Pj4gKyAgICBkbyB7Cj4+PiArICAgICAgICBpZiAodmlydGlvX3F1ZXVlX2dldF9ub3Rp ZmljYXRpb24oc3ZxLT52cSkpIHsKPj4+ICsgICAgICAgICAgICB2aXJ0aW9fcXVldWVfc2V0X25v dGlmaWNhdGlvbihzdnEtPnZxLCBmYWxzZSk7Cj4+Cj4+IFRoaXMgbG9va3MgbGlrZSBhbiBvcHRp bWl6YXRpb24gdGhlIHNob3VsZCBiZWxvbmcgdG8KPj4gdmlydGlvX3F1ZXVlX3NldF9ub3RpZmlj YXRpb24oKSBpdHNlbGYuCj4+Cj4gU3VyZSB3ZSBjYW4gbW92ZS4KPgo+Pj4gKyAgICAgICAgfQo+ Pj4gKwo+Pj4gKyAgICAgICAgd2hpbGUgKHRydWUpIHsKPj4+ICsgICAgICAgICAgICBWaXJ0UXVl dWVFbGVtZW50ICplbGVtOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgIGlmIChzdnEtPm5leHRfZ3Vl c3RfYXZhaWxfZWxlbSkgewo+Pj4gKyAgICAgICAgICAgICAgICBlbGVtID0gZ19zdGVhbF9wb2lu dGVyKCZzdnEtPm5leHRfZ3Vlc3RfYXZhaWxfZWxlbSk7Cj4+PiArICAgICAgICAgICAgfSBlbHNl IHsKPj4+ICsgICAgICAgICAgICAgICAgZWxlbSA9IHZpcnRxdWV1ZV9wb3Aoc3ZxLT52cSwgc2l6 ZW9mKCplbGVtKSk7Cj4+PiArICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgIGlm ICghZWxlbSkgewo+Pj4gKyAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgICAgICB9 Cj4+PiArCj4+PiArICAgICAgICAgICAgaWYgKGVsZW0tPm91dF9udW0gKyBlbGVtLT5pbl9udW0g Pgo+Pj4gKyAgICAgICAgICAgICAgICB2aG9zdF9zdnFfYXZhaWxhYmxlX3Nsb3RzKHN2cSkpIHsK Pj4+ICsgICAgICAgICAgICAgICAgLyoKPj4+ICsgICAgICAgICAgICAgICAgICogVGhpcyBjb25k aXRpb24gaXMgcG9zc2libGUgc2luY2UgYSBjb250aWd1b3VzIGJ1ZmZlciBpbiBHUEEKPj4+ICsg ICAgICAgICAgICAgICAgICogZG9lcyBub3QgaW1wbHkgYSBjb250aWd1b3VzIGJ1ZmZlciBpbiBx ZW11J3MgVkEKPj4+ICsgICAgICAgICAgICAgICAgICogc2NhdHRlci1nYXRoZXIgc2VnbWVudHMu IElmIHRoYXQgaGFwcGVuLCB0aGUgYnVmZmVyIGV4cG9zZWQKPj4+ICsgICAgICAgICAgICAgICAg ICogdG8gdGhlIGRldmljZSBuZWVkcyB0byBiZSBhIGNoYWluIG9mIGRlc2NyaXB0b3JzIGF0IHRo aXMKPj4+ICsgICAgICAgICAgICAgICAgICogbW9tZW50Lgo+Pj4gKyAgICAgICAgICAgICAgICAg Kgo+Pj4gKyAgICAgICAgICAgICAgICAgKiBTVlEgY2Fubm90IGhvbGQgbW9yZSBhdmFpbGFibGUg YnVmZmVycyBpZiB3ZSBhcmUgaGVyZToKPj4+ICsgICAgICAgICAgICAgICAgICogcXVldWUgdGhl IGN1cnJlbnQgZ3Vlc3QgZGVzY3JpcHRvciBhbmQgaWdub3JlIGZ1cnRoZXIga2lja3MKPj4+ICsg ICAgICAgICAgICAgICAgICogdW50aWwgc29tZSBlbGVtZW50cyBhcmUgdXNlZC4KPj4+ICsgICAg ICAgICAgICAgICAgICovCj4+PiArICAgICAgICAgICAgICAgIHN2cS0+bmV4dF9ndWVzdF9hdmFp bF9lbGVtID0gZWxlbTsKPj4+ICsgICAgICAgICAgICAgICAgcmV0dXJuOwo+Pj4gKyAgICAgICAg ICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAgICB2aG9zdF9zdnFfYWRkKHN2cSwgZWxlbSk7Cj4+ PiArICAgICAgICAgICAgdmhvc3Rfc3ZxX2tpY2soc3ZxKTsKPj4+ICsgICAgICAgIH0KPj4+ICsK Pj4+ICsgICAgICAgIHZpcnRpb19xdWV1ZV9zZXRfbm90aWZpY2F0aW9uKHN2cS0+dnEsIHRydWUp Owo+Pj4gKyAgICB9IHdoaWxlICghdmlydGlvX3F1ZXVlX2VtcHR5KHN2cS0+dnEpKTsKPj4+ICt9 Cj4+PiArCj4+PiArLyoqCj4+PiArICogSGFuZGxlIGd1ZXN0J3Mga2ljay4KPj4+ICsgKgo+Pj4g KyAqIEBuIGd1ZXN0IGtpY2sgZXZlbnQgbm90aWZpZXIsIHRoZSBvbmUgdGhhdCBndWVzdCBzZXQg dG8gbm90aWZ5IHN2cS4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgdm9pZCB2aG9zdF9oYW5kbGVfZ3Vl c3Rfa2lja19ub3RpZmllcihFdmVudE5vdGlmaWVyICpuKQo+Pj4gK3sKPj4+ICsgICAgVmhvc3RT aGFkb3dWaXJ0cXVldWUgKnN2cSA9IGNvbnRhaW5lcl9vZihuLCBWaG9zdFNoYWRvd1ZpcnRxdWV1 ZSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnFf a2ljayk7Cj4+PiArICAgIHZob3N0X2hhbmRsZV9ndWVzdF9raWNrKHN2cSk7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBib29sIHZob3N0X3N2cV9tb3JlX3VzZWQoVmhvc3RTaGFkb3dWaXJ0cXVl dWUgKnN2cSkKPj4+ICt7Cj4+PiArICAgIGlmIChzdnEtPmxhc3RfdXNlZF9pZHggIT0gc3ZxLT5z aGFkb3dfdXNlZF9pZHgpIHsKPj4+ICsgICAgICAgIHJldHVybiB0cnVlOwo+Pj4gKyAgICB9Cj4+ PiArCj4+PiArICAgIHN2cS0+c2hhZG93X3VzZWRfaWR4ID0gY3B1X3RvX2xlMTYoc3ZxLT52cmlu Zy51c2VkLT5pZHgpOwo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gc3ZxLT5sYXN0X3VzZWRfaWR4ICE9 IHN2cS0+c2hhZG93X3VzZWRfaWR4Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgVmlydFF1ZXVl RWxlbWVudCAqdmhvc3Rfc3ZxX2dldF9idWYoVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSkKPj4+ ICt7Cj4+PiArICAgIHZyaW5nX2Rlc2NfdCAqZGVzY3MgPSBzdnEtPnZyaW5nLmRlc2M7Cj4+PiAr ICAgIGNvbnN0IHZyaW5nX3VzZWRfdCAqdXNlZCA9IHN2cS0+dnJpbmcudXNlZDsKPj4+ICsgICAg dnJpbmdfdXNlZF9lbGVtX3QgdXNlZF9lbGVtOwo+Pj4gKyAgICB1aW50MTZfdCBsYXN0X3VzZWQ7 Cj4+PiArCj4+PiArICAgIGlmICghdmhvc3Rfc3ZxX21vcmVfdXNlZChzdnEpKSB7Cj4+PiArICAg ICAgICByZXR1cm4gTlVMTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAvKiBPbmx5IGdldCB1 c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBkZXYgKi8K Pj4+ICsgICAgc21wX3JtYigpOwo+Pj4gKyAgICBsYXN0X3VzZWQgPSBzdnEtPmxhc3RfdXNlZF9p ZHggJiAoc3ZxLT52cmluZy5udW0gLSAxKTsKPj4+ICsgICAgdXNlZF9lbGVtLmlkID0gbGUzMl90 b19jcHUodXNlZC0+cmluZ1tsYXN0X3VzZWRdLmlkKTsKPj4+ICsgICAgdXNlZF9lbGVtLmxlbiA9 IGxlMzJfdG9fY3B1KHVzZWQtPnJpbmdbbGFzdF91c2VkXS5sZW4pOwo+Pj4gKwo+Pj4gKyAgICBz dnEtPmxhc3RfdXNlZF9pZHgrKzsKPj4+ICsgICAgaWYgKHVubGlrZWx5KHVzZWRfZWxlbS5pZCA+ PSBzdnEtPnZyaW5nLm51bSkpIHsKPj4+ICsgICAgICAgIGVycm9yX3JlcG9ydCgiRGV2aWNlICVz IHNheXMgaW5kZXggJXUgaXMgdXNlZCIsIHN2cS0+dmRldi0+bmFtZSwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICB1c2VkX2VsZW0uaWQpOwo+Pj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4+PiAr ICAgIH0KPj4+ICsKPj4+ICsgICAgaWYgKHVubGlrZWx5KCFzdnEtPnJpbmdfaWRfbWFwc1t1c2Vk X2VsZW0uaWRdKSkgewo+Pj4gKyAgICAgICAgZXJyb3JfcmVwb3J0KAo+Pj4gKyAgICAgICAgICAg ICJEZXZpY2UgJXMgc2F5cyBpbmRleCAldSBpcyB1c2VkLCBidXQgaXQgd2FzIG5vdCBhdmFpbGFi bGUiLAo+Pj4gKyAgICAgICAgICAgIHN2cS0+dmRldi0+bmFtZSwgdXNlZF9lbGVtLmlkKTsKPj4+ ICsgICAgICAgIHJldHVybiBOVUxMOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIGRlc2NzW3Vz ZWRfZWxlbS5pZF0ubmV4dCA9IHN2cS0+ZnJlZV9oZWFkOwo+Pj4gKyAgICBzdnEtPmZyZWVfaGVh ZCA9IHVzZWRfZWxlbS5pZDsKPj4+ICsKPj4+ICsgICAgc3ZxLT5yaW5nX2lkX21hcHNbdXNlZF9l bGVtLmlkXS0+bGVuID0gdXNlZF9lbGVtLmxlbjsKPj4+ICsgICAgcmV0dXJuIGdfc3RlYWxfcG9p bnRlcigmc3ZxLT5yaW5nX2lkX21hcHNbdXNlZF9lbGVtLmlkXSk7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB2b2lkIHZob3N0X3N2cV9mbHVzaChWaG9zdFNoYWRvd1ZpcnRxdWV1ZSAqc3ZxLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNoZWNrX2Zvcl9hdmFpbF9xdWV1 ZSkKPj4+ICt7Cj4+PiArICAgIFZpcnRRdWV1ZSAqdnEgPSBzdnEtPnZxOwo+Pj4gKwo+Pj4gKyAg ICAvKiBNYWtlIGFzIG1hbnkgYnVmZmVycyBhcyBwb3NzaWJsZSB1c2VkLiAqLwo+Pj4gKyAgICBk byB7Cj4+PiArICAgICAgICB1bnNpZ25lZCBpID0gMDsKPj4+ICsKPj4+ICsgICAgICAgIHZob3N0 X3N2cV9zZXRfbm90aWZpY2F0aW9uKHN2cSwgZmFsc2UpOwo+Pj4gKyAgICAgICAgd2hpbGUgKHRy dWUpIHsKPj4+ICsgICAgICAgICAgICBnX2F1dG9mcmVlIFZpcnRRdWV1ZUVsZW1lbnQgKmVsZW0g PSB2aG9zdF9zdnFfZ2V0X2J1ZihzdnEpOwo+Pj4gKyAgICAgICAgICAgIGlmICghZWxlbSkgewo+ Pj4gKyAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgICAgICB9Cj4+PiArCj4+PiAr ICAgICAgICAgICAgaWYgKHVubGlrZWx5KGkgPj0gc3ZxLT52cmluZy5udW0pKSB7Cj4+PiArICAg ICAgICAgICAgICAgIHZpcnRpb19lcnJvcihzdnEtPnZkZXYsCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICJNb3JlIHRoYW4gJXUgdXNlZCBidWZmZXJzIG9idGFpbmVkIGluIGEgJXUgc2l6 ZSBTVlEiLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzdnEtPnZyaW5nLm51bSk7 Cj4+PiArICAgICAgICAgICAgICAgIHZpcnRxdWV1ZV9maWxsKHZxLCBlbGVtLCBlbGVtLT5sZW4s IGkpOwo+Pj4gKyAgICAgICAgICAgICAgICB2aXJ0cXVldWVfZmx1c2godnEsIGkpOwo+Pgo+PiBM ZXQncyBzaW1wbHkgdXNlIHZpcnRxdWV1ZV9wdXNoKCkgaGVyZT8KPj4KPiB2aXJ0cXVldWVfcHVz aCBzdXBwb3J0IHRvIGZpbGwgYW5kIGZsdXNoIG9ubHkgb25lIGVsZW1lbnQsIGluc3RlYWQgb2YK PiBiYXRjaC4gSSdtIGZpbmUgd2l0aCBlaXRoZXIgYnV0IEkgdGhpbmsgdGhlIGxlc3MgdXBkYXRl cyB0byB0aGUgdXNlZAo+IGlkeCwgdGhlIGJldHRlci4KCgpGaW5lLgoKCj4KPj4+ICsgICAgICAg ICAgICAgICAgaSA9IDA7Cj4+Cj4+IERvIHdlIG5lZWQgdG8gYmFpbCBvdXQgaGVyZT8KPj4KPiBZ ZXMgSSBndWVzcyB3ZSBjYW4gc2ltcGx5IHJldHVybi4KPgo+Pj4gKyAgICAgICAgICAgIH0KPj4+ ICsgICAgICAgICAgICB2aXJ0cXVldWVfZmlsbCh2cSwgZWxlbSwgZWxlbS0+bGVuLCBpKyspOwo+ Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgdmlydHF1ZXVlX2ZsdXNoKHZxLCBpKTsK Pj4+ICsgICAgICAgIGV2ZW50X25vdGlmaWVyX3NldCgmc3ZxLT5zdnFfY2FsbCk7Cj4+PiArCj4+ PiArICAgICAgICBpZiAoY2hlY2tfZm9yX2F2YWlsX3F1ZXVlICYmIHN2cS0+bmV4dF9ndWVzdF9h dmFpbF9lbGVtKSB7Cj4+PiArICAgICAgICAgICAgLyoKPj4+ICsgICAgICAgICAgICAgKiBBdmFp bCByaW5nIHdhcyBmdWxsIHdoZW4gdmhvc3Rfc3ZxX2ZsdXNoIHdhcyBjYWxsZWQsIHNvIGl0J3Mg YQo+Pj4gKyAgICAgICAgICAgICAqIGdvb2QgbW9tZW50IHRvIG1ha2UgbW9yZSBkZXNjcmlwdG9y cyBhdmFpbGFibGUgaWYgcG9zc2libGUKPj4+ICsgICAgICAgICAgICAgKi8KPj4+ICsgICAgICAg ICAgICB2aG9zdF9oYW5kbGVfZ3Vlc3Rfa2ljayhzdnEpOwo+Pgo+PiBJcyB0aGVyZSBiZXR0ZXIg dG8gaGF2ZSBhIHNpbWlsYXIgY2hlY2sgYXMgdmhvc3RfaGFuZGxlX2d1ZXN0X2tpY2soKSBkaWQ/ Cj4+Cj4+ICAgICAgICAgICAgICAgaWYgKGVsZW0tPm91dF9udW0gKyBlbGVtLT5pbl9udW0gPgo+ PiAgICAgICAgICAgICAgICAgICB2aG9zdF9zdnFfYXZhaWxhYmxlX3Nsb3RzKHN2cSkpIHsKPj4K PiBJdCB3aWxsIGJlIGR1cGxpY2F0ZWQgd2hlbiB3ZSBjYWxsIHZob3N0X2hhbmRsZV9ndWVzdF9r aWNrLCB3b24ndCBpdD8KCgpSaWdodCwgSSBtaXMtcmVhZCB0aGUgY29kZS4KCgo+Cj4+PiArICAg ICAgICB9Cj4+PiArCj4+PiArICAgICAgICB2aG9zdF9zdnFfc2V0X25vdGlmaWNhdGlvbihzdnEs IHRydWUpOwo+Pgo+PiBBIG1iKCkgaXMgbmVlZGVkIGhlcmU/IE90aGVyd2lzZSB3ZSBtYXkgbG9z dCBhIGNhbGwgaGVyZSAod2hlcmUKPj4gdmhvc3Rfc3ZxX21vcmVfdXNlZCgpIGlzIHJ1biBiZWZv cmUgdmhvc3Rfc3ZxX3NldF9ub3RpZmljYXRpb24oKSkuCj4+Cj4gSSdtIGNvbmZ1c2VkIGhlcmUg dGhlbiwgSSB0aG91Z2h0IHlvdSBzYWlkIHRoaXMgaXMganVzdCBhIGhpbnQgc28KPiB0aGVyZSB3 YXMgbm8gbmVlZD8gWzFdLiBJIHRoaW5rIHRoZSBtZW1vcnkgYmFycmllciBpcyBuZWVkZWQgdG9v LgoKClllcywgaXQncyBhIGhpbnQgYnV0OgoKMSkgV2hlbiB3ZSBkaXNhYmxlIHRoZSBub3RpZmlj YXRpb24sIGNvbnNpZGVyIHRoZSBub3RpZmljYXRpb24gZGlzYWJsZSAKaXMganVzdCBhIGhpbnQs IGRldmljZSBjYW4gc3RpbGwgcmFpc2UgYW4gaW50ZXJydXB0LCBzbyB0aGUgb3JkZXJpbmcgaXMg Cm1lYW5pbmdsZXNzIGFuZCBhIG1lbW9yeSBiYXJyaWVyIGlzIG5vdCBuZWNlc3NhcnkgKHRoZSAK dmhvc3Rfc3ZxX3NldF9ub3RpZmljYXRpb24oc3ZxLCBmYWxzZSkpCgoyKSBXaGVuIHdlIGVuYWJs ZSB0aGUgbm90aWZpY2F0aW9uLCB0aG91Z2ggaXQncyBhIGhpbnQsIHRoZSBkZXZpY2UgY2FuIApj aG9vc2UgdG8gaW1wbGVtZW50IGl0IGJ5IGVuYWJsaW5nIHRoZSBpbnRlcnJ1cHQsIGluIHRoaXMg Y2FzZSwgdGhlIApub3RpZmljYXRpb24gZW5hYmxlIHNob3VsZCBiZSBkb25lIGJlZm9yZSBjaGVj a2luZyB0aGUgdXNlZC4gT3RoZXJ3aXNlLCAKdGhlIGNoZWNraW5nIG9mIG1vcmUgdXNlZCBtaWdo dCBiZSBkb25lIGJlZm9yZSBlbmFibGUgdGhlIG5vdGlmaWNhdGlvbjoKCjEpIGRyaXZlciBjaGVj ayBtb3JlIHVzZWQKMikgZGV2aWNlIGFkZCBtb3JlIHVzZWQgYnV0IG5vIG5vdGlmaWNhdGlvbgoz KSBkcml2ZXIgZW5hYmxlIHRoZSBub3RpZmljYXRpb24gdGhlbiB3ZSBsb3N0IGEgbm90aWZpY2F0 aW9uIGhlcmUKCgo+Pj4gKyAgICB9IHdoaWxlICh2aG9zdF9zdnFfbW9yZV91c2VkKHN2cSkpOwo+ Pj4gK30KPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBGb3J3YXJkIHVzZWQgYnVmZmVycy4KPj4+ICsg Kgo+Pj4gKyAqIEBuIGhkZXYgY2FsbCBldmVudCBub3RpZmllciwgdGhlIG9uZSB0aGF0IGRldmlj ZSBzZXQgdG8gbm90aWZ5IHN2cS4KPj4+ICsgKgo+Pj4gKyAqIE5vdGUgdGhhdCB3ZSBhcmUgbm90 IG1ha2luZyBhbnkgYnVmZmVycyBhdmFpbGFibGUgaW4gdGhlIGxvb3AsIHRoZXJlIGlzIG5vCj4+ PiArICogd2F5IHRoYXQgaXQgcnVucyBtb3JlIHRoYW4gdmlydHF1ZXVlIHNpemUgdGltZXMuCj4+ PiArICovCj4+PiAgICBzdGF0aWMgdm9pZCB2aG9zdF9zdnFfaGFuZGxlX2NhbGwoRXZlbnROb3Rp ZmllciAqbikKPj4+ICAgIHsKPj4+ICAgICAgICBWaG9zdFNoYWRvd1ZpcnRxdWV1ZSAqc3ZxID0g Y29udGFpbmVyX29mKG4sIFZob3N0U2hhZG93VmlydHF1ZXVlLAo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRldl9jYWxsKTsKPj4+Cj4+PiAtICAg IGlmICh1bmxpa2VseSghZXZlbnRfbm90aWZpZXJfdGVzdF9hbmRfY2xlYXIobikpKSB7Cj4+PiAt ICAgICAgICByZXR1cm47Cj4+PiAtICAgIH0KPj4+ICsgICAgLyogQ2xlYXIgZXZlbnQgbm90aWZp ZXIgKi8KPj4+ICsgICAgZXZlbnRfbm90aWZpZXJfdGVzdF9hbmRfY2xlYXIobik7Cj4+Cj4+IEFu eSByZWFzb24gdGhhdCB3ZSByZW1vdmUgdGhlIGFib3ZlIGNoZWNrPwo+Pgo+IFRoaXMgY29tZXMg ZnJvbSB0aGUgcHJldmlvdXMgdmVyc2lvbnMsIHdoZXJlIHRoaXMgbWFkZSBzdXJlIHdlIG1pc3Nl ZAo+IG5vIHVzZWQgYnVmZmVycyBpbiB0aGUgcHJvY2VzcyBvZiBzd2l0Y2hpbmcgdG8gU1ZRIG1v ZGUuCgoKSSdtIG5vdCBzdXJlIEkgZ2V0IGhlcmUuIEV2ZW4gaWYgZm9yIHRoZSBzd2l0Y2hpbmcs IGl0IHNob3VsZCBiZSBtb3JlIApzYWZlIHRoZSBoYW5kbGUgdGhlIGZsdXNoIHVuY29uZGl0aW9u YWxseT8KClRoYW5rcwoKCj4KPiBJZiB3ZSBlbmFibGUgU1ZRIGZyb20gdGhlIGJlZ2lubmluZyBJ IHRoaW5rIHdlIGNhbiByZWx5IG9uIGdldHRpbmcgYWxsCj4gdGhlIGRldmljZSdzIHVzZWQgYnVm ZmVyIG5vdGlmaWNhdGlvbnMsIHNvIGxldCBtZSB0aGluayBhIGxpdHRsZSBiaXQKPiBhbmQgSSBj YW4gbW92ZSB0byBjaGVjayB0aGUgZXZlbnRmZC4KPgo+Pj4gLSAgICBldmVudF9ub3RpZmllcl9z ZXQoJnN2cS0+c3ZxX2NhbGwpOwo+Pj4gKyAgICB2aG9zdF9zdnFfZmx1c2goc3ZxLCB0cnVlKTsK Pj4+ICAgIH0KPj4+Cj4+PiAgICAvKioKPj4+IEBAIC0yNTgsMTMgKzU1MSwzOCBAQCB2b2lkIHZo b3N0X3N2cV9zZXRfc3ZxX2tpY2tfZmQoVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSwgaW50IHN2 cV9raWNrX2ZkKQo+Pj4gICAgICAgICAqIG5lZWQgdG8gZXhwbGljaXRlbHkgY2hlY2sgZm9yIHRo ZW0uCj4+PiAgICAgICAgICovCj4+PiAgICAgICAgZXZlbnRfbm90aWZpZXJfaW5pdF9mZCgmc3Zx LT5zdnFfa2ljaywgc3ZxX2tpY2tfZmQpOwo+Pj4gLSAgICBldmVudF9ub3RpZmllcl9zZXRfaGFu ZGxlcigmc3ZxLT5zdnFfa2ljaywgdmhvc3RfaGFuZGxlX2d1ZXN0X2tpY2spOwo+Pj4gKyAgICBl dmVudF9ub3RpZmllcl9zZXRfaGFuZGxlcigmc3ZxLT5zdnFfa2ljaywKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmhvc3RfaGFuZGxlX2d1ZXN0X2tpY2tfbm90aWZpZXIpOwo+ Pj4KPj4+ICAgICAgICBpZiAoIWNoZWNrX29sZCB8fCBldmVudF9ub3RpZmllcl90ZXN0X2FuZF9j bGVhcigmdG1wKSkgewo+Pj4gICAgICAgICAgICBldmVudF9ub3RpZmllcl9zZXQoJnN2cS0+aGRl dl9raWNrKTsKPj4+ICAgICAgICB9Cj4+PiAgICB9Cj4+Pgo+Pj4gKy8qKgo+Pj4gKyAqIFN0YXJ0 IHNoYWRvdyB2aXJ0cXVldWUgb3BlcmF0aW9uLgo+Pj4gKyAqCj4+PiArICogQHN2cSBTaGFkb3cg VmlydHF1ZXVlCj4+PiArICogQHZkZXYgICAgICAgIFZpcnRJTyBkZXZpY2UKPj4+ICsgKiBAdnEg ICAgICAgICAgVmlydHF1ZXVlIHRvIHNoYWRvdwo+Pj4gKyAqLwo+Pj4gK3ZvaWQgdmhvc3Rfc3Zx X3N0YXJ0KFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEsIFZpcnRJT0RldmljZSAqdmRldiwKPj4+ ICsgICAgICAgICAgICAgICAgICAgICBWaXJ0UXVldWUgKnZxKQo+Pj4gK3sKPj4+ICsgICAgc3Zx LT5uZXh0X2d1ZXN0X2F2YWlsX2VsZW0gPSBOVUxMOwo+Pj4gKyAgICBzdnEtPmF2YWlsX2lkeF9z aGFkb3cgPSAwOwo+Pj4gKyAgICBzdnEtPnNoYWRvd191c2VkX2lkeCA9IDA7Cj4+PiArICAgIHN2 cS0+bGFzdF91c2VkX2lkeCA9IDA7Cj4+PiArICAgIHN2cS0+dmRldiA9IHZkZXY7Cj4+PiArICAg IHN2cS0+dnEgPSB2cTsKPj4+ICsKPj4+ICsgICAgbWVtc2V0KHN2cS0+dnJpbmcuYXZhaWwsIDAs IHNpemVvZigqc3ZxLT52cmluZy5hdmFpbCkpOwo+Pj4gKyAgICBtZW1zZXQoc3ZxLT52cmluZy51 c2VkLCAwLCBzaXplb2YoKnN2cS0+dnJpbmcuYXZhaWwpKTsKPj4+ICsgICAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IHN2cS0+dnJpbmcubnVtIC0gMTsgaSsrKSB7Cj4+PiArICAgICAgICBzdnEt PnZyaW5nLmRlc2NbaV0ubmV4dCA9IGNwdV90b19sZTE2KGkgKyAxKTsKPj4+ICsgICAgfQo+Pj4g K30KPj4+ICsKPj4+ICAgIC8qKgo+Pj4gICAgICogU3RvcCBzaGFkb3cgdmlydHF1ZXVlIG9wZXJh dGlvbi4KPj4+ICAgICAqIEBzdnEgU2hhZG93IFZpcnRxdWV1ZQo+Pj4gQEAgLTI3Miw2ICs1OTAs MjggQEAgdm9pZCB2aG9zdF9zdnFfc2V0X3N2cV9raWNrX2ZkKFZob3N0U2hhZG93VmlydHF1ZXVl ICpzdnEsIGludCBzdnFfa2lja19mZCkKPj4+ICAgIHZvaWQgdmhvc3Rfc3ZxX3N0b3AoVmhvc3RT aGFkb3dWaXJ0cXVldWUgKnN2cSkKPj4+ICAgIHsKPj4+ICAgICAgICBldmVudF9ub3RpZmllcl9z ZXRfaGFuZGxlcigmc3ZxLT5zdnFfa2ljaywgTlVMTCk7Cj4+PiArICAgIGdfYXV0b2ZyZWUgVmly dFF1ZXVlRWxlbWVudCAqbmV4dF9hdmFpbF9lbGVtID0gTlVMTDsKPj4+ICsKPj4+ICsgICAgaWYg KCFzdnEtPnZxKSB7Cj4+PiArICAgICAgICByZXR1cm47Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsg ICAgLyogU2VuZCBhbGwgcGVuZGluZyB1c2VkIGRlc2NyaXB0b3JzIHRvIGd1ZXN0ICovCj4+PiAr ICAgIHZob3N0X3N2cV9mbHVzaChzdnEsIGZhbHNlKTsKPj4+ICsKPj4+ICsgICAgZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IHN2cS0+dnJpbmcubnVtOyArK2kpIHsKPj4+ICsgICAgICAgIGdfYXV0 b2ZyZWUgVmlydFF1ZXVlRWxlbWVudCAqZWxlbSA9IE5VTEw7Cj4+PiArICAgICAgICBlbGVtID0g Z19zdGVhbF9wb2ludGVyKCZzdnEtPnJpbmdfaWRfbWFwc1tpXSk7Cj4+PiArICAgICAgICBpZiAo ZWxlbSkgewo+Pj4gKyAgICAgICAgICAgIHZpcnRxdWV1ZV9kZXRhY2hfZWxlbWVudChzdnEtPnZx LCBlbGVtLCBlbGVtLT5sZW4pOwo+Pj4gKyAgICAgICAgfQo+Pj4gKyAgICB9Cj4+PiArCj4+PiAr ICAgIG5leHRfYXZhaWxfZWxlbSA9IGdfc3RlYWxfcG9pbnRlcigmc3ZxLT5uZXh0X2d1ZXN0X2F2 YWlsX2VsZW0pOwo+Pj4gKyAgICBpZiAobmV4dF9hdmFpbF9lbGVtKSB7Cj4+PiArICAgICAgICB2 aXJ0cXVldWVfZGV0YWNoX2VsZW1lbnQoc3ZxLT52cSwgbmV4dF9hdmFpbF9lbGVtLAo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfYXZhaWxfZWxlbS0+bGVuKTsKPj4+ ICsgICAgfQo+Pj4gICAgfQo+Pj4KPj4+ICAgIC8qKgo+Pj4gQEAgLTMxNiw3ICs2NTYsNyBAQCBW aG9zdFNoYWRvd1ZpcnRxdWV1ZSAqdmhvc3Rfc3ZxX25ldyh1aW50MTZfdCBxc2l6ZSkKPj4+ICAg ICAgICBtZW1zZXQoc3ZxLT52cmluZy5kZXNjLCAwLCBkcml2ZXJfc2l6ZSk7Cj4+PiAgICAgICAg c3ZxLT52cmluZy51c2VkID0gcWVtdV9tZW1hbGlnbihxZW11X3JlYWxfaG9zdF9wYWdlX3NpemUs IGRldmljZV9zaXplKTsKPj4+ICAgICAgICBtZW1zZXQoc3ZxLT52cmluZy51c2VkLCAwLCBkZXZp Y2Vfc2l6ZSk7Cj4+PiAtCj4+PiArICAgIHN2cS0+cmluZ19pZF9tYXBzID0gZ19uZXcwKFZpcnRR dWV1ZUVsZW1lbnQgKiwgcXNpemUpOwo+Pj4gICAgICAgIGV2ZW50X25vdGlmaWVyX3NldF9oYW5k bGVyKCZzdnEtPmhkZXZfY2FsbCwgdmhvc3Rfc3ZxX2hhbmRsZV9jYWxsKTsKPj4+ICAgICAgICBy ZXR1cm4gZ19zdGVhbF9wb2ludGVyKCZzdnEpOwo+Pj4KPj4+IEBAIC0zMzUsNiArNjc1LDcgQEAg dm9pZCB2aG9zdF9zdnFfZnJlZShWaG9zdFNoYWRvd1ZpcnRxdWV1ZSAqdnEpCj4+PiAgICAgICAg ZXZlbnRfbm90aWZpZXJfY2xlYW51cCgmdnEtPmhkZXZfa2ljayk7Cj4+PiAgICAgICAgZXZlbnRf bm90aWZpZXJfc2V0X2hhbmRsZXIoJnZxLT5oZGV2X2NhbGwsIE5VTEwpOwo+Pj4gICAgICAgIGV2 ZW50X25vdGlmaWVyX2NsZWFudXAoJnZxLT5oZGV2X2NhbGwpOwo+Pj4gKyAgICBnX2ZyZWUodnEt PnJpbmdfaWRfbWFwcyk7Cj4+PiAgICAgICAgcWVtdV92ZnJlZSh2cS0+dnJpbmcuZGVzYyk7Cj4+ PiAgICAgICAgcWVtdV92ZnJlZSh2cS0+dnJpbmcudXNlZCk7Cj4+PiAgICAgICAgZ19mcmVlKHZx KTsKPj4+IGRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmhvc3QtdmRwYS5jIGIvaHcvdmlydGlvL3Zo b3N0LXZkcGEuYwo+Pj4gaW5kZXggNTNlMTRiYWZhMC4uMGU1YzAwZWQ3ZSAxMDA2NDQKPj4+IC0t LSBhL2h3L3ZpcnRpby92aG9zdC12ZHBhLmMKPj4+ICsrKyBiL2h3L3ZpcnRpby92aG9zdC12ZHBh LmMKPj4+IEBAIC03NTIsOSArNzUyLDkgQEAgc3RhdGljIGludCB2aG9zdF92ZHBhX3NldF92cmlu Z19jYWxsKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKPj4+ICAgICAqIE5vdGUgdGhhdCB0aGlzIGZ1 bmN0aW9uIGRvZXMgbm90IHJld2luZCBraWNrIGZpbGUgZGVzY3JpcHRvciBpZiBjYW5ub3Qgc2V0 Cj4+PiAgICAgKiBjYWxsIG9uZS4KPj4+ICAgICAqLwo+Pj4gLXN0YXRpYyBib29sIHZob3N0X3Zk cGFfc3ZxX3NldHVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKPj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEsCj4+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZHgpCj4+PiArc3RhdGljIGludCB2aG9z dF92ZHBhX3N2cV9zZXRfZmRzKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKPj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSwKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWR4KQo+Pj4gICAgewo+ Pj4gICAgICAgIHN0cnVjdCB2aG9zdF92cmluZ19maWxlIGZpbGUgPSB7Cj4+PiAgICAgICAgICAg IC5pbmRleCA9IGRldi0+dnFfaW5kZXggKyBpZHgsCj4+PiBAQCAtNzY3LDcgKzc2Nyw3IEBAIHN0 YXRpYyBib29sIHZob3N0X3ZkcGFfc3ZxX3NldHVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKPj4+ ICAgICAgICByID0gdmhvc3RfdmRwYV9zZXRfdnJpbmdfZGV2X2tpY2soZGV2LCAmZmlsZSk7Cj4+ PiAgICAgICAgaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKPj4+ICAgICAgICAgICAgZXJyb3JfcmVw b3J0KCJDYW4ndCBzZXQgZGV2aWNlIGtpY2sgZmQgKCVkKSIsIC1yKTsKPj4+IC0gICAgICAgIHJl dHVybiBmYWxzZTsKPj4+ICsgICAgICAgIHJldHVybiByOwo+Pj4gICAgICAgIH0KPj4+Cj4+PiAg ICAgICAgZXZlbnRfbm90aWZpZXIgPSB2aG9zdF9zdnFfZ2V0X3N2cV9jYWxsX25vdGlmaWVyKHN2 cSk7Cj4+PiBAQCAtNzc3LDYgKzc3Nyw5OSBAQCBzdGF0aWMgYm9vbCB2aG9zdF92ZHBhX3N2cV9z ZXR1cChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCj4+PiAgICAgICAgICAgIGVycm9yX3JlcG9ydCgi Q2FuJ3Qgc2V0IGRldmljZSBjYWxsIGZkICglZCkiLCAtcik7Cj4+PiAgICAgICAgfQo+Pj4KPj4+ ICsgICAgcmV0dXJuIHI7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIFVubWFwIFNWUSBh cmVhIGluIHRoZSBkZXZpY2UKPj4+ICsgKi8KPj4+ICtzdGF0aWMgYm9vbCB2aG9zdF92ZHBhX3N2 cV91bm1hcF9yaW5nKHN0cnVjdCB2aG9zdF92ZHBhICp2LCBod2FkZHIgaW92YSwKPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YWRkciBzaXplKQo+Pj4gK3sKPj4+ ICsgICAgaW50IHI7Cj4+PiArCj4+PiArICAgIHNpemUgPSBST1VORF9VUChzaXplLCBxZW11X3Jl YWxfaG9zdF9wYWdlX3NpemUpOwo+Pj4gKyAgICByID0gdmhvc3RfdmRwYV9kbWFfdW5tYXAodiwg aW92YSwgc2l6ZSk7Cj4+PiArICAgIHJldHVybiByID09IDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBib29sIHZob3N0X3ZkcGFfc3ZxX3VubWFwX3JpbmdzKHN0cnVjdCB2aG9zdF9kZXYgKmRl diwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWaG9z dFNoYWRvd1ZpcnRxdWV1ZSAqc3ZxKQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IHZob3N0X3ZkcGEg KnYgPSBkZXYtPm9wYXF1ZTsKPj4+ICsgICAgc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIgc3ZxX2Fk ZHI7Cj4+PiArICAgIHNpemVfdCBkZXZpY2Vfc2l6ZSA9IHZob3N0X3N2cV9kZXZpY2VfYXJlYV9z aXplKHN2cSk7Cj4+PiArICAgIHNpemVfdCBkcml2ZXJfc2l6ZSA9IHZob3N0X3N2cV9kcml2ZXJf YXJlYV9zaXplKHN2cSk7Cj4+PiArICAgIGJvb2wgb2s7Cj4+PiArCj4+PiArICAgIHZob3N0X3N2 cV9nZXRfdnJpbmdfYWRkcihzdnEsICZzdnFfYWRkcik7Cj4+PiArCj4+PiArICAgIG9rID0gdmhv c3RfdmRwYV9zdnFfdW5tYXBfcmluZyh2LCBzdnFfYWRkci5kZXNjX3VzZXJfYWRkciwgZHJpdmVy X3NpemUpOwo+Pj4gKyAgICBpZiAodW5saWtlbHkoIW9rKSkgewo+Pj4gKyAgICAgICAgcmV0dXJu IGZhbHNlOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIHJldHVybiB2aG9zdF92ZHBhX3N2cV91 bm1hcF9yaW5nKHYsIHN2cV9hZGRyLnVzZWRfdXNlcl9hZGRyLCBkZXZpY2Vfc2l6ZSk7Cj4+PiAr fQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIE1hcCBzaGFkb3cgdmlydHF1ZXVlIHJpbmdzIGluIGRl dmljZQo+Pj4gKyAqCj4+PiArICogQGRldiAgIFRoZSB2aG9zdCBkZXZpY2UKPj4+ICsgKiBAc3Zx ICAgVGhlIHNoYWRvdyB2aXJ0cXVldWUKPj4+ICsgKi8KPj4+ICtzdGF0aWMgYm9vbCB2aG9zdF92 ZHBhX3N2cV9tYXBfcmluZ3Moc3RydWN0IHZob3N0X2RldiAqZGV2LAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWaG9zdFNoYWRvd1ZpcnRxdWV1ZSAqc3Zx KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IHZob3N0X3ZkcGEgKnYgPSBkZXYtPm9wYXF1ZTsKPj4+ ICsgICAgc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIgc3ZxX2FkZHI7Cj4+PiArICAgIHNpemVfdCBk ZXZpY2Vfc2l6ZSA9IHZob3N0X3N2cV9kZXZpY2VfYXJlYV9zaXplKHN2cSk7Cj4+PiArICAgIHNp emVfdCBkcml2ZXJfc2l6ZSA9IHZob3N0X3N2cV9kcml2ZXJfYXJlYV9zaXplKHN2cSk7Cj4+PiAr ICAgIGludCByOwo+Pj4gKwo+Pj4gKyAgICB2aG9zdF9zdnFfZ2V0X3ZyaW5nX2FkZHIoc3ZxLCAm c3ZxX2FkZHIpOwo+Pj4gKwo+Pj4gKyAgICByID0gdmhvc3RfdmRwYV9kbWFfbWFwKHYsIHN2cV9h ZGRyLmRlc2NfdXNlcl9hZGRyLCBkcml2ZXJfc2l6ZSwKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAodm9pZCAqKXN2cV9hZGRyLmRlc2NfdXNlcl9hZGRyLCB0cnVlKTsKPj4+ICsgICAg aWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKPj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4+ICsg ICAgfQo+Pj4gKwo+Pj4gKyAgICByID0gdmhvc3RfdmRwYV9kbWFfbWFwKHYsIHN2cV9hZGRyLnVz ZWRfdXNlcl9hZGRyLCBkZXZpY2Vfc2l6ZSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAodm9pZCAqKXN2cV9hZGRyLnVzZWRfdXNlcl9hZGRyLCBmYWxzZSk7Cj4+Cj4+IERvIHdlIG5l ZWQgdW5tYXAgdGhlIGRyaXZlciBhcmVhIGlmIHdlIGZhaWwgaGVyZT8KPj4KPiBZZXMsIHRoaXMg dXNlZCB0byB0cnVzdCBpbiB1bm1hcCB0aGVtIGF0IHRoZSBkaXNhYmxpbmcgb2YgU1ZRLiBOb3cg SQo+IHRoaW5rIHdlIG5lZWQgdG8gdW5tYXAgYXMgeW91IHNheS4KPgo+IFRoYW5rcyEKPgo+IFsx XSBodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvcGlwZXJtYWlsL3ZpcnR1YWxpemF0 aW9uLzIwMjEtTWFyY2gvMDUzMzIyLmh0bWwKPgo+PiBUaGFua3MKPj4KPj4KPj4+ICsgICAgcmV0 dXJuIHIgPT0gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgdmhvc3RfdmRwYV9zdnFf c2V0dXAoc3RydWN0IHZob3N0X2RldiAqZGV2LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2cSwKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkeCkKPj4+ICt7Cj4+PiArICAgIHVpbnQxNl90IHZx X2luZGV4ID0gZGV2LT52cV9pbmRleCArIGlkeDsKPj4+ICsgICAgc3RydWN0IHZob3N0X3ZyaW5n X3N0YXRlIHMgPSB7Cj4+PiArICAgICAgICAuaW5kZXggPSB2cV9pbmRleCwKPj4+ICsgICAgfTsK Pj4+ICsgICAgaW50IHI7Cj4+PiArICAgIGJvb2wgb2s7Cj4+PiArCj4+PiArICAgIHIgPSB2aG9z dF92ZHBhX3NldF9kZXZfdnJpbmdfYmFzZShkZXYsICZzKTsKPj4+ICsgICAgaWYgKHVubGlrZWx5 KHIpKSB7Cj4+PiArICAgICAgICBlcnJvcl9yZXBvcnQoIkNhbid0IHNldCB2cmluZyBiYXNlICgl ZCkiLCByKTsKPj4+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4g KyAgICBzLm51bSA9IHZob3N0X3N2cV9nZXRfbnVtKHN2cSk7Cj4+PiArICAgIHIgPSB2aG9zdF92 ZHBhX3NldF9kZXZfdnJpbmdfbnVtKGRldiwgJnMpOwo+Pj4gKyAgICBpZiAodW5saWtlbHkocikp IHsKPj4+ICsgICAgICAgIGVycm9yX3JlcG9ydCgiQ2FuJ3Qgc2V0IHZyaW5nIG51bSAoJWQpIiwg cik7Cj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAg b2sgPSB2aG9zdF92ZHBhX3N2cV9tYXBfcmluZ3MoZGV2LCBzdnEpOwo+Pj4gKyAgICBpZiAodW5s aWtlbHkoIW9rKSkgewo+Pj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4gKyAgICB9Cj4+PiAr Cj4+PiArICAgIHIgPSB2aG9zdF92ZHBhX3N2cV9zZXRfZmRzKGRldiwgc3ZxLCBpZHgpOwo+Pj4g ICAgICAgIHJldHVybiByID09IDA7Cj4+PiAgICB9Cj4+Pgo+Pj4gQEAgLTc4OCwxNCArODgxLDI0 IEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9kZXZfc3RhcnQoc3RydWN0IHZob3N0X2RldiAqZGV2 LCBib29sIHN0YXJ0ZWQpCj4+PiAgICAgICAgaWYgKHN0YXJ0ZWQpIHsKPj4+ICAgICAgICAgICAg dmhvc3RfdmRwYV9ob3N0X25vdGlmaWVyc19pbml0KGRldik7Cj4+PiAgICAgICAgICAgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCB2LT5zaGFkb3dfdnFzLT5sZW47ICsraSkgewo+Pj4gKyAgICAg ICAgICAgIFZpcnRRdWV1ZSAqdnEgPSB2aXJ0aW9fZ2V0X3F1ZXVlKGRldi0+dmRldiwgZGV2LT52 cV9pbmRleCArIGkpOwo+Pj4gICAgICAgICAgICAgICAgVmhvc3RTaGFkb3dWaXJ0cXVldWUgKnN2 cSA9IGdfcHRyX2FycmF5X2luZGV4KHYtPnNoYWRvd192cXMsIGkpOwo+Pj4gICAgICAgICAgICAg ICAgYm9vbCBvayA9IHZob3N0X3ZkcGFfc3ZxX3NldHVwKGRldiwgc3ZxLCBpKTsKPj4+ICAgICAg ICAgICAgICAgIGlmICh1bmxpa2VseSghb2spKSB7Cj4+PiAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOwo+Pj4gICAgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgIHZob3N0X3N2cV9z dGFydChzdnEsIGRldi0+dmRldiwgdnEpOwo+Pj4gICAgICAgICAgICB9Cj4+PiAgICAgICAgICAg IHZob3N0X3ZkcGFfc2V0X3ZyaW5nX3JlYWR5KGRldik7Cj4+PiAgICAgICAgfSBlbHNlIHsKPj4+ ICsgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2LT5zaGFkb3dfdnFzLT5sZW47ICsr aSkgewo+Pj4gKyAgICAgICAgICAgIFZob3N0U2hhZG93VmlydHF1ZXVlICpzdnEgPSBnX3B0cl9h cnJheV9pbmRleCh2LT5zaGFkb3dfdnFzLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKTsKPj4+ICsgICAgICAgICAgICBib29s IG9rID0gdmhvc3RfdmRwYV9zdnFfdW5tYXBfcmluZ3MoZGV2LCBzdnEpOwo+Pj4gKyAgICAgICAg ICAgIGlmICh1bmxpa2VseSghb2spKSB7Cj4+PiArICAgICAgICAgICAgICAgIHJldHVybiAtMTsK Pj4+ICsgICAgICAgICAgICB9Cj4+PiArICAgICAgICB9Cj4+PiAgICAgICAgICAgIHZob3N0X3Zk cGFfaG9zdF9ub3RpZmllcnNfdW5pbml0KGRldiwgZGV2LT5udnFzKTsKPj4+ICAgICAgICB9Cj4+ PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVh bGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRp b24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZv L3ZpcnR1YWxpemF0aW9u