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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable 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 0CED5C433ED for ; Thu, 8 Apr 2021 08:32:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CC2F061166 for ; Thu, 8 Apr 2021 08:32:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229895AbhDHIco (ORCPT ); Thu, 8 Apr 2021 04:32:44 -0400 Received: from mx2.suse.de ([195.135.220.15]:38854 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229539AbhDHIcn (ORCPT ); Thu, 8 Apr 2021 04:32:43 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 72218AF24; Thu, 8 Apr 2021 08:32:31 +0000 (UTC) Subject: Re: [PATCH v9 06/13] lpfc: vmid: Add support for vmid in mailbox command, does vmid resource allocation and vmid cleanup To: Muneendra , linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, tj@kernel.org, linux-nvme@lists.infradead.org Cc: jsmart2021@gmail.com, emilne@redhat.com, mkumar@redhat.com, Gaurav Srivastava References: <1617750397-26466-1-git-send-email-muneendra.kumar@broadcom.com> <1617750397-26466-7-git-send-email-muneendra.kumar@broadcom.com> From: Hannes Reinecke Message-ID: <1ca58578-1b76-f084-b26e-5e91d569cdb9@suse.de> Date: Thu, 8 Apr 2021 10:32:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.0 MIME-Version: 1.0 In-Reply-To: <1617750397-26466-7-git-send-email-muneendra.kumar@broadcom.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org On 4/7/21 1:06 AM, Muneendra wrote: > From: Gaurav Srivastava > > This patch does the following - > 1.adds supporting datastructures for mailbox command which helps in > determining if the firmware supports appid or not. > 2.This patch allocates the resource for vmid and checks if the firmware > supports the feature or not. > 3.The patch cleans up the vmid resources and stops the timer. > > Signed-off-by: Gaurav Srivastava > Signed-off-by: James Smart > > --- > v9: > Modified code for use of hashtable > > v8: > Added new function declaration, return error code and > memory allocation API changes > > v7: > No change > > v6: > Added Forward declarations and functions to static > > v5: > Merged patches 8 and 11 of v4 to this patch > Changed Return code to non-numeric/Symbol > > v4: > No change > > v3: > No change > > v2: > Ported the patch on top of 5.10/scsi-queue > --- > drivers/scsi/lpfc/lpfc_hw4.h | 12 +++++++ > drivers/scsi/lpfc/lpfc_init.c | 64 +++++++++++++++++++++++++++++++++++ > drivers/scsi/lpfc/lpfc_mbox.c | 6 ++++ > drivers/scsi/lpfc/lpfc_scsi.c | 29 ++++++++++++++++ > drivers/scsi/lpfc/lpfc_sli.c | 9 +++++ > 5 files changed, 120 insertions(+) > > diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h > index 541b9aef6bfe..5fdafc92fc2d 100644 > --- a/drivers/scsi/lpfc/lpfc_hw4.h > +++ b/drivers/scsi/lpfc/lpfc_hw4.h > @@ -272,6 +272,9 @@ struct lpfc_sli4_flags { > #define lpfc_vfi_rsrc_rdy_MASK 0x00000001 > #define lpfc_vfi_rsrc_rdy_WORD word0 > #define LPFC_VFI_RSRC_RDY 1 > +#define lpfc_ftr_ashdr_SHIFT 4 > +#define lpfc_ftr_ashdr_MASK 0x00000001 > +#define lpfc_ftr_ashdr_WORD word0 > }; > > struct sli4_bls_rsp { > @@ -2943,6 +2946,9 @@ struct lpfc_mbx_request_features { > #define lpfc_mbx_rq_ftr_rq_mrqp_SHIFT 16 > #define lpfc_mbx_rq_ftr_rq_mrqp_MASK 0x00000001 > #define lpfc_mbx_rq_ftr_rq_mrqp_WORD word2 > +#define lpfc_mbx_rq_ftr_rq_ashdr_SHIFT 17 > +#define lpfc_mbx_rq_ftr_rq_ashdr_MASK 0x00000001 > +#define lpfc_mbx_rq_ftr_rq_ashdr_WORD word2 > uint32_t word3; > #define lpfc_mbx_rq_ftr_rsp_iaab_SHIFT 0 > #define lpfc_mbx_rq_ftr_rsp_iaab_MASK 0x00000001 > @@ -2974,6 +2980,9 @@ struct lpfc_mbx_request_features { > #define lpfc_mbx_rq_ftr_rsp_mrqp_SHIFT 16 > #define lpfc_mbx_rq_ftr_rsp_mrqp_MASK 0x00000001 > #define lpfc_mbx_rq_ftr_rsp_mrqp_WORD word3 > +#define lpfc_mbx_rq_ftr_rsp_ashdr_SHIFT 17 > +#define lpfc_mbx_rq_ftr_rsp_ashdr_MASK 0x00000001 > +#define lpfc_mbx_rq_ftr_rsp_ashdr_WORD word3 > }; > > struct lpfc_mbx_supp_pages { > @@ -4391,6 +4400,9 @@ struct wqe_common { > #define wqe_xchg_WORD word10 > #define LPFC_SCSI_XCHG 0x0 > #define LPFC_NVME_XCHG 0x1 > +#define wqe_appid_SHIFT 5 > +#define wqe_appid_MASK 0x00000001 > +#define wqe_appid_WORD word10 > #define wqe_oas_SHIFT 6 > #define wqe_oas_MASK 0x00000001 > #define wqe_oas_WORD word10 > diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c > index 5ea43c527e08..a506ab453343 100644 > --- a/drivers/scsi/lpfc/lpfc_init.c > +++ b/drivers/scsi/lpfc/lpfc_init.c > @@ -98,6 +98,7 @@ static struct scsi_transport_template *lpfc_transport_template = NULL; > static struct scsi_transport_template *lpfc_vport_transport_template = NULL; > static DEFINE_IDR(lpfc_hba_index); > #define LPFC_NVMET_BUF_POST 254 > +static int lpfc_vmid_res_alloc(struct lpfc_hba *phba, struct lpfc_vport *vport); > > /** > * lpfc_config_port_prep - Perform lpfc initialization prior to config port > @@ -2888,6 +2889,10 @@ lpfc_cleanup(struct lpfc_vport *vport) > if (phba->link_state > LPFC_LINK_DOWN) > lpfc_port_link_failure(vport); > > + /* cleanup vmid resources */ > + if (lpfc_is_vmid_enabled(phba)) > + lpfc_vmid_vport_cleanup(vport); > + > list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) { > if (vport->port_type != LPFC_PHYSICAL_PORT && > ndlp->nlp_DID == Fabric_DID) { > @@ -4318,6 +4323,57 @@ lpfc_get_wwpn(struct lpfc_hba *phba) > return rol64(wwn, 32); > } > > +/** > + * lpfc_vmid_res_alloc - Allocates resources for VMID > + * @phba: pointer to lpfc hba data structure. > + * @vport: pointer to vport data structure > + * > + * This routine allocated the resources needed for the vmid. > + * > + * Return codes > + * 0 on Succeess > + * Non-0 on Failure > + */ > +static int > +lpfc_vmid_res_alloc(struct lpfc_hba *phba, struct lpfc_vport *vport) > +{ > + /* vmid feature is supported only on SLI4 */ > + if (phba->sli_rev == LPFC_SLI_REV3) { > + phba->cfg_vmid_app_header = 0; > + phba->cfg_vmid_priority_tagging = 0; > + } > + > + /* if enabled, then allocated the resources */ > + if (lpfc_is_vmid_enabled(phba)) { > + vport->vmid = > + kcalloc(phba->cfg_max_vmid, sizeof(struct lpfc_vmid), > + GFP_KERNEL); > + if (!vport->vmid) > + return -ENOMEM; > + > + rwlock_init(&vport->vmid_lock); > + > + /* setting the VMID parameters for the vport */ > + vport->vmid_priority_tagging = phba->cfg_vmid_priority_tagging; > + vport->vmid_inactivity_timeout = > + phba->cfg_vmid_inactivity_timeout; > + vport->max_vmid = phba->cfg_max_vmid; > + vport->cur_vmid_cnt = 0; > + > + vport->vmid_priority_range = bitmap_zalloc > + (LPFC_VMID_MAX_PRIORITY_RANGE, GFP_KERNEL); > + > + if (!vport->vmid_priority_range) { > + kfree(vport->vmid); > + return -ENOMEM; > + } > + > + /* Initialize the hashtable */ > + hash_init(vport->hash_table); > + } > + return 0; > +} > + > /** > * lpfc_create_port - Create an FC port > * @phba: pointer to lpfc hba data structure. > @@ -4470,6 +4526,12 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev) > vport->port_type, shost->sg_tablesize, > phba->cfg_scsi_seg_cnt, phba->cfg_sg_seg_cnt); > > + /* allocate the resources for vmid */ > + rc = lpfc_vmid_res_alloc(phba, vport); > + > + if (rc) > + goto out; > + > /* Initialize all internally managed lists. */ > INIT_LIST_HEAD(&vport->fc_nodes); > INIT_LIST_HEAD(&vport->rcv_buffer_list); > @@ -4494,6 +4556,8 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev) > return vport; > > out_put_shost: > + kfree(vport->vmid); > + bitmap_free(vport->vmid_priority_range); > scsi_host_put(shost); > out: > return NULL; > diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c > index c03a7f12dd65..7a15986ed586 100644 > --- a/drivers/scsi/lpfc/lpfc_mbox.c > +++ b/drivers/scsi/lpfc/lpfc_mbox.c > @@ -2100,6 +2100,12 @@ lpfc_request_features(struct lpfc_hba *phba, struct lpfcMboxq *mboxq) > bf_set(lpfc_mbx_rq_ftr_rq_iaab, &mboxq->u.mqe.un.req_ftrs, 0); > bf_set(lpfc_mbx_rq_ftr_rq_iaar, &mboxq->u.mqe.un.req_ftrs, 0); > } > + > + /* Enable Application Services Header for apphedr VMID */ > + if (phba->cfg_vmid_app_header) { > + bf_set(lpfc_mbx_rq_ftr_rq_ashdr, &mboxq->u.mqe.un.req_ftrs, 1); > + bf_set(lpfc_ftr_ashdr, &phba->sli4_hba.sli4_flags, 1); > + } > return; > } > > diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c > index 85f6a066de5a..0868cb38d5b0 100644 > --- a/drivers/scsi/lpfc/lpfc_scsi.c > +++ b/drivers/scsi/lpfc/lpfc_scsi.c > @@ -5384,6 +5384,35 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd) > return 0; > } > > +/* > + * lpfc_vmid_vport_cleanup - cleans up the resources associated with a vports > + * @vport: The virtual port for which this call is being executed. > + */ > +void lpfc_vmid_vport_cleanup(struct lpfc_vport *vport) > +{ > + u32 bucket; > + struct lpfc_vmid *cur; > + > + /* delete the timer */ > + if (vport->port_type == LPFC_PHYSICAL_PORT) > + del_timer_sync(&vport->phba->inactive_vmid_poll); > + > + /* free the resources */ > + kfree(vport->qfpa_res); > + kfree(vport->vmid_priority.vmid_range); > + kfree(vport->vmid); > + > + /* for all elements in the hash table */ > + if (!hash_empty(vport->hash_table)) > + hash_for_each(vport->hash_table, bucket, cur, hnode) > + hash_del(&cur->hnode); > + > + /* reset variables */ > + vport->qfpa_res = NULL; > + vport->vmid_priority.vmid_range = NULL; > + vport->vmid = NULL; > + vport->cur_vmid_cnt = 0; > +} > > /** > * lpfc_abort_handler - scsi_host_template eh_abort_handler entry point > diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c > index f6e1e36eabdc..3f212555f3ac 100644 > --- a/drivers/scsi/lpfc/lpfc_sli.c > +++ b/drivers/scsi/lpfc/lpfc_sli.c > @@ -7698,6 +7698,15 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba) > goto out_free_mbox; > } > > + /* Disable vmid if app header is not supported */ > + if (phba->cfg_vmid_app_header && !(bf_get(lpfc_mbx_rq_ftr_rsp_ashdr, > + &mqe->un.req_ftrs))) { > + bf_set(lpfc_ftr_ashdr, &phba->sli4_hba.sli4_flags, 0); > + phba->cfg_vmid_app_header = 0; > + lpfc_printf_log(phba, KERN_DEBUG, LOG_SLI, > + "1242 vmid feature not supported\n"); > + } > + > /* > * The port must support FCP initiator mode as this is the > * only mode running in the host. > I would have thought that the forward declaration for lpfc_vport_cleanup() should be present in this patch (and not the previous one). But that's largely cosmetical, so: Reviewed-by: Hannes Reinecke Cheers, Hannes -- Dr. Hannes Reinecke Kernel Storage Architect hare@suse.de +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer 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=-15.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham 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 C1851C43460 for ; Thu, 8 Apr 2021 08:32:48 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 3134761181 for ; Thu, 8 Apr 2021 08:32:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3134761181 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=BMerTK2gkCUPscPD5QtWrHH2CQcaiZ6ko0wzWKDJrNw=; b=KlEb1th1J5SDGxEQ+xrqm8a/y SAXS3LCbW1MdWo7T+Ov5eILJFmZuzDMtbWglSspdxBPSbRM9/wEsnT8GzyU3s1vinMnOuoHdWi0e+ L2SBNVfm5j96e8V3La09UmLtp70uqFCxAYKEb3bWLid00SGSe7f/G48dmdyJ4HofrInwVjvZjXGZE 0D7rAY2jQKM/5ZyuYUM1lKMnZ4zYSLTKqHQpqlcN5/oWqt3/dfCz2PlJu6VUpm+wENQ5Tz8tjkza3 aWK+oLzmQaduB9VHxT/60pitJBE2vrBLfp/KKu99DxPOZjCM/z4JuS+j8sITNooaNqPTMXBLZeqJT /xVLVLwiA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lUQ5d-007LKa-FU; Thu, 08 Apr 2021 08:32:37 +0000 Received: from mx2.suse.de ([195.135.220.15]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lUQ5Z-007LJv-4X for linux-nvme@lists.infradead.org; Thu, 08 Apr 2021 08:32:35 +0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 72218AF24; Thu, 8 Apr 2021 08:32:31 +0000 (UTC) Subject: Re: [PATCH v9 06/13] lpfc: vmid: Add support for vmid in mailbox command, does vmid resource allocation and vmid cleanup To: Muneendra , linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, tj@kernel.org, linux-nvme@lists.infradead.org Cc: jsmart2021@gmail.com, emilne@redhat.com, mkumar@redhat.com, Gaurav Srivastava References: <1617750397-26466-1-git-send-email-muneendra.kumar@broadcom.com> <1617750397-26466-7-git-send-email-muneendra.kumar@broadcom.com> From: Hannes Reinecke Message-ID: <1ca58578-1b76-f084-b26e-5e91d569cdb9@suse.de> Date: Thu, 8 Apr 2021 10:32:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.0 MIME-Version: 1.0 In-Reply-To: <1617750397-26466-7-git-send-email-muneendra.kumar@broadcom.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210408_093233_335295_5AD35561 X-CRM114-Status: GOOD ( 40.36 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org T24gNC83LzIxIDE6MDYgQU0sIE11bmVlbmRyYSB3cm90ZToKPiBGcm9tOiBHYXVyYXYgU3JpdmFz dGF2YSA8Z2F1cmF2LnNyaXZhc3RhdmFAYnJvYWRjb20uY29tPgo+IAo+IFRoaXMgcGF0Y2ggZG9l cyB0aGUgZm9sbG93aW5nIC0KPiAxLmFkZHMgc3VwcG9ydGluZyBkYXRhc3RydWN0dXJlcyBmb3Ig bWFpbGJveCBjb21tYW5kIHdoaWNoIGhlbHBzIGluCj4gZGV0ZXJtaW5pbmcgaWYgdGhlIGZpcm13 YXJlIHN1cHBvcnRzIGFwcGlkIG9yIG5vdC4KPiAyLlRoaXMgcGF0Y2ggYWxsb2NhdGVzIHRoZSBy ZXNvdXJjZSBmb3Igdm1pZCBhbmQgY2hlY2tzIGlmIHRoZSBmaXJtd2FyZQo+IHN1cHBvcnRzIHRo ZSBmZWF0dXJlIG9yIG5vdC4KPiAzLlRoZSBwYXRjaCBjbGVhbnMgdXAgdGhlIHZtaWQgcmVzb3Vy Y2VzIGFuZCBzdG9wcyB0aGUgdGltZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogR2F1cmF2IFNyaXZh c3RhdmEgPGdhdXJhdi5zcml2YXN0YXZhQGJyb2FkY29tLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBK YW1lcyBTbWFydCA8anNtYXJ0MjAyMUBnbWFpbC5jb20+Cj4gCj4gLS0tCj4gdjk6Cj4gTW9kaWZp ZWQgY29kZSBmb3IgdXNlIG9mIGhhc2h0YWJsZQo+IAo+IHY4Ogo+IEFkZGVkIG5ldyBmdW5jdGlv biBkZWNsYXJhdGlvbiwgcmV0dXJuIGVycm9yIGNvZGUgYW5kCj4gbWVtb3J5IGFsbG9jYXRpb24g QVBJIGNoYW5nZXMKPiAKPiB2NzoKPiBObyBjaGFuZ2UKPiAKPiB2NjoKPiBBZGRlZCBGb3J3YXJk IGRlY2xhcmF0aW9ucyBhbmQgZnVuY3Rpb25zIHRvIHN0YXRpYwo+IAo+IHY1Ogo+IE1lcmdlZCBw YXRjaGVzIDggYW5kIDExIG9mIHY0IHRvIHRoaXMgcGF0Y2gKPiBDaGFuZ2VkIFJldHVybiBjb2Rl IHRvIG5vbi1udW1lcmljL1N5bWJvbAo+IAo+IHY0Ogo+IE5vIGNoYW5nZQo+IAo+IHYzOgo+IE5v IGNoYW5nZQo+IAo+IHYyOgo+IFBvcnRlZCB0aGUgcGF0Y2ggb24gdG9wIG9mIDUuMTAvc2NzaS1x dWV1ZQo+IC0tLQo+ICAgZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaCAgfCAxMiArKysrKysr Cj4gICBkcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyB8IDY0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gICBkcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYyB8ICA2 ICsrKysKPiAgIGRyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIHwgMjkgKysrKysrKysrKysr KysrKwo+ICAgZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyAgfCAgOSArKysrKwo+ICAgNSBm aWxlcyBjaGFuZ2VkLCAxMjAgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3Njc2kvbHBmYy9scGZjX2h3NC5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAo+IGlu ZGV4IDU0MWI5YWVmNmJmZS4uNWZkYWZjOTJmYzJkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc2Nz aS9scGZjL2xwZmNfaHc0LmgKPiArKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCj4g QEAgLTI3Miw2ICsyNzIsOSBAQCBzdHJ1Y3QgbHBmY19zbGk0X2ZsYWdzIHsKPiAgICNkZWZpbmUg bHBmY192ZmlfcnNyY19yZHlfTUFTSwkJMHgwMDAwMDAwMQo+ICAgI2RlZmluZSBscGZjX3ZmaV9y c3JjX3JkeV9XT1JECQl3b3JkMAo+ICAgI2RlZmluZSBMUEZDX1ZGSV9SU1JDX1JEWQkJMQo+ICsj ZGVmaW5lIGxwZmNfZnRyX2FzaGRyX1NISUZUICAgICAgICAgICAgNAo+ICsjZGVmaW5lIGxwZmNf ZnRyX2FzaGRyX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMQo+ICsjZGVmaW5lIGxwZmNfZnRy X2FzaGRyX1dPUkQgICAgICAgICAgICAgd29yZDAKPiAgIH07Cj4gICAKPiAgIHN0cnVjdCBzbGk0 X2Jsc19yc3Agewo+IEBAIC0yOTQzLDYgKzI5NDYsOSBAQCBzdHJ1Y3QgbHBmY19tYnhfcmVxdWVz dF9mZWF0dXJlcyB7Cj4gICAjZGVmaW5lIGxwZmNfbWJ4X3JxX2Z0cl9ycV9tcnFwX1NISUZUCQkx Ngo+ICAgI2RlZmluZSBscGZjX21ieF9ycV9mdHJfcnFfbXJxcF9NQVNLCQkweDAwMDAwMDAxCj4g ICAjZGVmaW5lIGxwZmNfbWJ4X3JxX2Z0cl9ycV9tcnFwX1dPUkQJCXdvcmQyCj4gKyNkZWZpbmUg bHBmY19tYnhfcnFfZnRyX3JxX2FzaGRyX1NISUZUICAgICAgICAgIDE3Cj4gKyNkZWZpbmUgbHBm Y19tYnhfcnFfZnRyX3JxX2FzaGRyX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDEKPiArI2RlZmlu ZSBscGZjX21ieF9ycV9mdHJfcnFfYXNoZHJfV09SRCAgICAgICAgICAgd29yZDIKPiAgIAl1aW50 MzJfdCB3b3JkMzsKPiAgICNkZWZpbmUgbHBmY19tYnhfcnFfZnRyX3JzcF9pYWFiX1NISUZUCQkw Cj4gICAjZGVmaW5lIGxwZmNfbWJ4X3JxX2Z0cl9yc3BfaWFhYl9NQVNLCQkweDAwMDAwMDAxCj4g QEAgLTI5NzQsNiArMjk4MCw5IEBAIHN0cnVjdCBscGZjX21ieF9yZXF1ZXN0X2ZlYXR1cmVzIHsK PiAgICNkZWZpbmUgbHBmY19tYnhfcnFfZnRyX3JzcF9tcnFwX1NISUZUCQkxNgo+ICAgI2RlZmlu ZSBscGZjX21ieF9ycV9mdHJfcnNwX21ycXBfTUFTSwkJMHgwMDAwMDAwMQo+ICAgI2RlZmluZSBs cGZjX21ieF9ycV9mdHJfcnNwX21ycXBfV09SRAkJd29yZDMKPiArI2RlZmluZSBscGZjX21ieF9y cV9mdHJfcnNwX2FzaGRyX1NISUZUICAgICAgICAgMTcKPiArI2RlZmluZSBscGZjX21ieF9ycV9m dHJfcnNwX2FzaGRyX01BU0sgICAgICAgICAgMHgwMDAwMDAwMQo+ICsjZGVmaW5lIGxwZmNfbWJ4 X3JxX2Z0cl9yc3BfYXNoZHJfV09SRCAgICAgICAgICB3b3JkMwo+ICAgfTsKPiAgIAo+ICAgc3Ry dWN0IGxwZmNfbWJ4X3N1cHBfcGFnZXMgewo+IEBAIC00MzkxLDYgKzQ0MDAsOSBAQCBzdHJ1Y3Qg d3FlX2NvbW1vbiB7Cj4gICAjZGVmaW5lIHdxZV94Y2hnX1dPUkQgICAgICAgICB3b3JkMTAKPiAg ICNkZWZpbmUgTFBGQ19TQ1NJX1hDSEcJICAgICAgMHgwCj4gICAjZGVmaW5lIExQRkNfTlZNRV9Y Q0hHCSAgICAgIDB4MQo+ICsjZGVmaW5lIHdxZV9hcHBpZF9TSElGVCAgICAgICA1Cj4gKyNkZWZp bmUgd3FlX2FwcGlkX01BU0sgICAgICAgIDB4MDAwMDAwMDEKPiArI2RlZmluZSB3cWVfYXBwaWRf V09SRCAgICAgICAgd29yZDEwCj4gICAjZGVmaW5lIHdxZV9vYXNfU0hJRlQgICAgICAgICA2Cj4g ICAjZGVmaW5lIHdxZV9vYXNfTUFTSyAgICAgICAgICAweDAwMDAwMDAxCj4gICAjZGVmaW5lIHdx ZV9vYXNfV09SRCAgICAgICAgICB3b3JkMTAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xw ZmMvbHBmY19pbml0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYwo+IGluZGV4IDVl YTQzYzUyN2UwOC4uYTUwNmFiNDUzMzQzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc2NzaS9scGZj L2xwZmNfaW5pdC5jCj4gKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKPiBAQCAt OTgsNiArOTgsNyBAQCBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpscGZj X3RyYW5zcG9ydF90ZW1wbGF0ZSA9IE5VTEw7Cj4gICBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNw b3J0X3RlbXBsYXRlICpscGZjX3Zwb3J0X3RyYW5zcG9ydF90ZW1wbGF0ZSA9IE5VTEw7Cj4gICBz dGF0aWMgREVGSU5FX0lEUihscGZjX2hiYV9pbmRleCk7Cj4gICAjZGVmaW5lIExQRkNfTlZNRVRf QlVGX1BPU1QgMjU0Cj4gK3N0YXRpYyBpbnQgbHBmY192bWlkX3Jlc19hbGxvYyhzdHJ1Y3QgbHBm Y19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCk7Cj4gICAKPiAgIC8qKgo+ICAg ICogbHBmY19jb25maWdfcG9ydF9wcmVwIC0gUGVyZm9ybSBscGZjIGluaXRpYWxpemF0aW9uIHBy aW9yIHRvIGNvbmZpZyBwb3J0Cj4gQEAgLTI4ODgsNiArMjg4OSwxMCBAQCBscGZjX2NsZWFudXAo c3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0KQo+ICAgCWlmIChwaGJhLT5saW5rX3N0YXRlID4gTFBG Q19MSU5LX0RPV04pCj4gICAJCWxwZmNfcG9ydF9saW5rX2ZhaWx1cmUodnBvcnQpOwo+ICAgCj4g KwkvKiBjbGVhbnVwIHZtaWQgcmVzb3VyY2VzICovCj4gKwlpZiAobHBmY19pc192bWlkX2VuYWJs ZWQocGhiYSkpCj4gKwkJbHBmY192bWlkX3Zwb3J0X2NsZWFudXAodnBvcnQpOwo+ICsKPiAgIAls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmdnBvcnQtPmZjX25vZGVz LCBubHBfbGlzdHApIHsKPiAgIAkJaWYgKHZwb3J0LT5wb3J0X3R5cGUgIT0gTFBGQ19QSFlTSUNB TF9QT1JUICYmCj4gICAJCSAgICBuZGxwLT5ubHBfRElEID09IEZhYnJpY19ESUQpIHsKPiBAQCAt NDMxOCw2ICs0MzIzLDU3IEBAIGxwZmNfZ2V0X3d3cG4oc3RydWN0IGxwZmNfaGJhICpwaGJhKQo+ ICAgCQlyZXR1cm4gcm9sNjQod3duLCAzMik7Cj4gICB9Cj4gICAKPiArLyoqCj4gKyAqIGxwZmNf dm1pZF9yZXNfYWxsb2MgLSBBbGxvY2F0ZXMgcmVzb3VyY2VzIGZvciBWTUlECj4gKyAqIEBwaGJh OiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgo+ICsgKiBAdnBvcnQ6IHBvaW50 ZXIgdG8gdnBvcnQgZGF0YSBzdHJ1Y3R1cmUKPiArICoKPiArICogVGhpcyByb3V0aW5lIGFsbG9j YXRlZCB0aGUgcmVzb3VyY2VzIG5lZWRlZCBmb3IgdGhlIHZtaWQuCj4gKyAqCj4gKyAqIFJldHVy biBjb2Rlcwo+ICsgKgkwIG9uIFN1Y2NlZXNzCj4gKyAqCU5vbi0wIG9uIEZhaWx1cmUKPiArICov Cj4gK3N0YXRpYyBpbnQKPiArbHBmY192bWlkX3Jlc19hbGxvYyhzdHJ1Y3QgbHBmY19oYmEgKnBo YmEsIHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCkKPiArewo+ICsJLyogdm1pZCBmZWF0dXJlIGlz IHN1cHBvcnRlZCBvbmx5IG9uIFNMSTQgKi8KPiArCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNf U0xJX1JFVjMpIHsKPiArCQlwaGJhLT5jZmdfdm1pZF9hcHBfaGVhZGVyID0gMDsKPiArCQlwaGJh LT5jZmdfdm1pZF9wcmlvcml0eV90YWdnaW5nID0gMDsKPiArCX0KPiArCj4gKwkvKiBpZiBlbmFi bGVkLCB0aGVuIGFsbG9jYXRlZCB0aGUgcmVzb3VyY2VzICovCj4gKwlpZiAobHBmY19pc192bWlk X2VuYWJsZWQocGhiYSkpIHsKPiArCQl2cG9ydC0+dm1pZCA9Cj4gKwkJICAgIGtjYWxsb2MocGhi YS0+Y2ZnX21heF92bWlkLCBzaXplb2Yoc3RydWN0IGxwZmNfdm1pZCksCj4gKwkJCSAgICBHRlBf S0VSTkVMKTsKPiArCQlpZiAoIXZwb3J0LT52bWlkKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwkJcndsb2NrX2luaXQoJnZwb3J0LT52bWlkX2xvY2spOwo+ICsKPiArCQkvKiBzZXR0aW5n IHRoZSBWTUlEIHBhcmFtZXRlcnMgZm9yIHRoZSB2cG9ydCAqLwo+ICsJCXZwb3J0LT52bWlkX3By aW9yaXR5X3RhZ2dpbmcgPSBwaGJhLT5jZmdfdm1pZF9wcmlvcml0eV90YWdnaW5nOwo+ICsJCXZw b3J0LT52bWlkX2luYWN0aXZpdHlfdGltZW91dCA9Cj4gKwkJICAgIHBoYmEtPmNmZ192bWlkX2lu YWN0aXZpdHlfdGltZW91dDsKPiArCQl2cG9ydC0+bWF4X3ZtaWQgPSBwaGJhLT5jZmdfbWF4X3Zt aWQ7Cj4gKwkJdnBvcnQtPmN1cl92bWlkX2NudCA9IDA7Cj4gKwo+ICsJCXZwb3J0LT52bWlkX3By aW9yaXR5X3JhbmdlID0gYml0bWFwX3phbGxvYwo+ICsJCQkoTFBGQ19WTUlEX01BWF9QUklPUklU WV9SQU5HRSwgR0ZQX0tFUk5FTCk7Cj4gKwo+ICsJCWlmICghdnBvcnQtPnZtaWRfcHJpb3JpdHlf cmFuZ2UpIHsKPiArCQkJa2ZyZWUodnBvcnQtPnZtaWQpOwo+ICsJCQlyZXR1cm4gLUVOT01FTTsK PiArCQl9Cj4gKwo+ICsJCS8qIEluaXRpYWxpemUgdGhlIGhhc2h0YWJsZSAqLwo+ICsJCWhhc2hf aW5pdCh2cG9ydC0+aGFzaF90YWJsZSk7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAg IC8qKgo+ICAgICogbHBmY19jcmVhdGVfcG9ydCAtIENyZWF0ZSBhbiBGQyBwb3J0Cj4gICAgKiBA cGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KPiBAQCAtNDQ3MCw2ICs0 NTI2LDEyIEBAIGxwZmNfY3JlYXRlX3BvcnQoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBpbnQgaW5z dGFuY2UsIHN0cnVjdCBkZXZpY2UgKmRldikKPiAgIAkJCXZwb3J0LT5wb3J0X3R5cGUsIHNob3N0 LT5zZ190YWJsZXNpemUsCj4gICAJCQlwaGJhLT5jZmdfc2NzaV9zZWdfY250LCBwaGJhLT5jZmdf c2dfc2VnX2NudCk7Cj4gICAKPiArCS8qIGFsbG9jYXRlIHRoZSByZXNvdXJjZXMgZm9yIHZtaWQg Ki8KPiArCXJjID0gbHBmY192bWlkX3Jlc19hbGxvYyhwaGJhLCB2cG9ydCk7Cj4gKwo+ICsJaWYg KHJjKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiAgIAkvKiBJbml0aWFsaXplIGFsbCBpbnRlcm5hbGx5 IG1hbmFnZWQgbGlzdHMuICovCj4gICAJSU5JVF9MSVNUX0hFQUQoJnZwb3J0LT5mY19ub2Rlcyk7 Cj4gICAJSU5JVF9MSVNUX0hFQUQoJnZwb3J0LT5yY3ZfYnVmZmVyX2xpc3QpOwo+IEBAIC00NDk0 LDYgKzQ1NTYsOCBAQCBscGZjX2NyZWF0ZV9wb3J0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgaW50 IGluc3RhbmNlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gICAJcmV0dXJuIHZwb3J0Owo+ICAgCj4g ICBvdXRfcHV0X3Nob3N0Ogo+ICsJa2ZyZWUodnBvcnQtPnZtaWQpOwo+ICsJYml0bWFwX2ZyZWUo dnBvcnQtPnZtaWRfcHJpb3JpdHlfcmFuZ2UpOwo+ICAgCXNjc2lfaG9zdF9wdXQoc2hvc3QpOwo+ ICAgb3V0Ogo+ICAgCXJldHVybiBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBm Yy9scGZjX21ib3guYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCj4gaW5kZXggYzAz YTdmMTJkZDY1Li43YTE1OTg2ZWQ1ODYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMv bHBmY19tYm94LmMKPiArKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwo+IEBAIC0y MTAwLDYgKzIxMDAsMTIgQEAgbHBmY19yZXF1ZXN0X2ZlYXR1cmVzKHN0cnVjdCBscGZjX2hiYSAq cGhiYSwgc3RydWN0IGxwZmNNYm94cSAqbWJveHEpCj4gICAJCWJmX3NldChscGZjX21ieF9ycV9m dHJfcnFfaWFhYiwgJm1ib3hxLT51Lm1xZS51bi5yZXFfZnRycywgMCk7Cj4gICAJCWJmX3NldChs cGZjX21ieF9ycV9mdHJfcnFfaWFhciwgJm1ib3hxLT51Lm1xZS51bi5yZXFfZnRycywgMCk7Cj4g ICAJfQo+ICsKPiArCS8qIEVuYWJsZSBBcHBsaWNhdGlvbiBTZXJ2aWNlcyBIZWFkZXIgZm9yIGFw cGhlZHIgVk1JRCAqLwo+ICsJaWYgKHBoYmEtPmNmZ192bWlkX2FwcF9oZWFkZXIpIHsKPiArCQli Zl9zZXQobHBmY19tYnhfcnFfZnRyX3JxX2FzaGRyLCAmbWJveHEtPnUubXFlLnVuLnJlcV9mdHJz LCAxKTsKPiArCQliZl9zZXQobHBmY19mdHJfYXNoZHIsICZwaGJhLT5zbGk0X2hiYS5zbGk0X2Zs YWdzLCAxKTsKPiArCX0KPiAgIAlyZXR1cm47Cj4gICB9Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2ku Ywo+IGluZGV4IDg1ZjZhMDY2ZGU1YS4uMDg2OGNiMzhkNWIwIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCj4gKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19z Y3NpLmMKPiBAQCAtNTM4NCw2ICs1Mzg0LDM1IEBAIGxwZmNfcXVldWVjb21tYW5kKHN0cnVjdCBT Y3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQo+ICAgCXJldHVybiAwOwo+ ICAgfQo+ICAgCj4gKy8qCj4gKyAqIGxwZmNfdm1pZF92cG9ydF9jbGVhbnVwIC0gY2xlYW5zIHVw IHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgdnBvcnRzCj4gKyAqIEB2cG9ydDogVGhl IHZpcnR1YWwgcG9ydCBmb3Igd2hpY2ggdGhpcyBjYWxsIGlzIGJlaW5nIGV4ZWN1dGVkLgo+ICsg Ki8KPiArdm9pZCBscGZjX3ZtaWRfdnBvcnRfY2xlYW51cChzdHJ1Y3QgbHBmY192cG9ydCAqdnBv cnQpCj4gK3sKPiArCXUzMiBidWNrZXQ7Cj4gKwlzdHJ1Y3QgbHBmY192bWlkICpjdXI7Cj4gKwo+ ICsJLyogZGVsZXRlIHRoZSB0aW1lciAqLwo+ICsJaWYgKHZwb3J0LT5wb3J0X3R5cGUgPT0gTFBG Q19QSFlTSUNBTF9QT1JUKQo+ICsJCWRlbF90aW1lcl9zeW5jKCZ2cG9ydC0+cGhiYS0+aW5hY3Rp dmVfdm1pZF9wb2xsKTsKPiArCj4gKwkvKiBmcmVlIHRoZSByZXNvdXJjZXMgKi8KPiArCWtmcmVl KHZwb3J0LT5xZnBhX3Jlcyk7Cj4gKwlrZnJlZSh2cG9ydC0+dm1pZF9wcmlvcml0eS52bWlkX3Jh bmdlKTsKPiArCWtmcmVlKHZwb3J0LT52bWlkKTsKPiArCj4gKwkvKiBmb3IgYWxsIGVsZW1lbnRz IGluIHRoZSBoYXNoIHRhYmxlICovCj4gKwlpZiAoIWhhc2hfZW1wdHkodnBvcnQtPmhhc2hfdGFi bGUpKQo+ICsJCWhhc2hfZm9yX2VhY2godnBvcnQtPmhhc2hfdGFibGUsIGJ1Y2tldCwgY3VyLCBo bm9kZSkKPiArCQkJaGFzaF9kZWwoJmN1ci0+aG5vZGUpOwo+ICsKPiArCS8qIHJlc2V0IHZhcmlh YmxlcyAqLwo+ICsJdnBvcnQtPnFmcGFfcmVzID0gTlVMTDsKPiArCXZwb3J0LT52bWlkX3ByaW9y aXR5LnZtaWRfcmFuZ2UgPSBOVUxMOwo+ICsJdnBvcnQtPnZtaWQgPSBOVUxMOwo+ICsJdnBvcnQt PmN1cl92bWlkX2NudCA9IDA7Cj4gK30KPiAgIAo+ICAgLyoqCj4gICAgKiBscGZjX2Fib3J0X2hh bmRsZXIgLSBzY3NpX2hvc3RfdGVtcGxhdGUgZWhfYWJvcnRfaGFuZGxlciBlbnRyeSBwb2ludAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jIGIvZHJpdmVycy9zY3Np L2xwZmMvbHBmY19zbGkuYwo+IGluZGV4IGY2ZTFlMzZlYWJkYy4uM2YyMTI1NTVmM2FjIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKPiArKysgYi9kcml2ZXJzL3Nj c2kvbHBmYy9scGZjX3NsaS5jCj4gQEAgLTc2OTgsNiArNzY5OCwxNSBAQCBscGZjX3NsaTRfaGJh X3NldHVwKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKPiAgIAkJZ290byBvdXRfZnJlZV9tYm94Owo+ ICAgCX0KPiAgIAo+ICsJLyogRGlzYWJsZSB2bWlkIGlmIGFwcCBoZWFkZXIgaXMgbm90IHN1cHBv cnRlZCAqLwo+ICsJaWYgKHBoYmEtPmNmZ192bWlkX2FwcF9oZWFkZXIgJiYgIShiZl9nZXQobHBm Y19tYnhfcnFfZnRyX3JzcF9hc2hkciwKPiArCQkJCQkJICAmbXFlLT51bi5yZXFfZnRycykpKSB7 Cj4gKwkJYmZfc2V0KGxwZmNfZnRyX2FzaGRyLCAmcGhiYS0+c2xpNF9oYmEuc2xpNF9mbGFncywg MCk7Cj4gKwkJcGhiYS0+Y2ZnX3ZtaWRfYXBwX2hlYWRlciA9IDA7Cj4gKwkJbHBmY19wcmludGZf bG9nKHBoYmEsIEtFUk5fREVCVUcsIExPR19TTEksCj4gKwkJCQkiMTI0MiB2bWlkIGZlYXR1cmUg bm90IHN1cHBvcnRlZFxuIik7Cj4gKwl9Cj4gKwo+ICAgCS8qCj4gICAJICogVGhlIHBvcnQgbXVz dCBzdXBwb3J0IEZDUCBpbml0aWF0b3IgbW9kZSBhcyB0aGlzIGlzIHRoZQo+ICAgCSAqIG9ubHkg bW9kZSBydW5uaW5nIGluIHRoZSBob3N0Lgo+IApJIHdvdWxkIGhhdmUgdGhvdWdodCB0aGF0IHRo ZSBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciAKbHBmY192cG9ydF9jbGVhbnVwKCkgc2hvdWxkIGJl IHByZXNlbnQgaW4gdGhpcyBwYXRjaCAoYW5kIG5vdCB0aGUgCnByZXZpb3VzIG9uZSkuCkJ1dCB0 aGF0J3MgbGFyZ2VseSBjb3NtZXRpY2FsLCBzbzoKClJldmlld2VkLWJ5OiBIYW5uZXMgUmVpbmVj a2UgPGhhcmVAc3VzZS5kZT4KCkNoZWVycywKCkhhbm5lcwotLSAKRHIuIEhhbm5lcyBSZWluZWNr ZSAgICAgICAgICAgICAgICBLZXJuZWwgU3RvcmFnZSBBcmNoaXRlY3QKaGFyZUBzdXNlLmRlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKzQ5IDkxMSA3NDA1MyA2ODgKU1VTRSBTb2Z0d2Fy ZSBTb2x1dGlvbnMgR21iSCwgTWF4ZmVsZHN0ci4gNSwgOTA0MDkgTsO8cm5iZXJnCkhSQiAzNjgw OSAoQUcgTsO8cm5iZXJnKSwgR2VzY2jDpGZ0c2bDvGhyZXI6IEZlbGl4IEltZW5kw7ZyZmZlcgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZt ZSBtYWlsaW5nIGxpc3QKTGludXgtbnZtZUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbnZtZQo=