From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757174AbbAZWiX (ORCPT ); Mon, 26 Jan 2015 17:38:23 -0500 Received: from mga03.intel.com ([134.134.136.65]:7378 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755308AbbAZWiT (ORCPT ); Mon, 26 Jan 2015 17:38:19 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,470,1418112000"; d="scan'208";a="642877874" From: "Dev, Vasu" To: ethan zhao CC: "Kirsher, Jeffrey T" , Ethan Zhao , "Ronciak, John" , "Brandeburg, Jesse" , "Allan, Bruce W" , "Wyborny, Carolyn" , "Skidmore, Donald C" , "Rose, Gregory V" , "Vick, Matthew" , "Williams, Mitch A" , "Parikh, Neerav" , Linux NICS , "e1000-devel@lists.sourceforge.net" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "brian.maly@oracle.com" Subject: RE: [PATCH] i40e: don't enable and init FCOE by default when do PF reset Thread-Topic: [PATCH] i40e: don't enable and init FCOE by default when do PF reset Thread-Index: AQHQNFWWZG20AojpQdSGM7ysgg48FpzS/Lkg Date: Mon, 26 Jan 2015 22:38:15 +0000 Message-ID: <933BEC2E04D6A5458F4B0239FB547F9A34CD15C9@fmsmsx118.amr.corp.intel.com> References: <933BEC2E04D6A5458F4B0239FB547F9A34CCCD35@fmsmsx118.amr.corp.intel.com> <54B86DF8.3040206@oracle.com> <1421419628.2632.112.camel@jtkirshe-mobl> <54B9D082.9050601@oracle.com> <933BEC2E04D6A5458F4B0239FB547F9A34CCE42B@fmsmsx118.amr.corp.intel.com> <54BDB7F3.2020400@oracle.com> In-Reply-To: <54BDB7F3.2020400@oracle.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.200.106] Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id t0QMcScM020792 > -----Original Message----- > From: ethan zhao [mailto:ethan.zhao@oracle.com] > Sent: Monday, January 19, 2015 6:06 PM > To: Dev, Vasu > Cc: Kirsher, Jeffrey T; Ethan Zhao; Ronciak, John; Brandeburg, Jesse; Allan, > Bruce W; Wyborny, Carolyn; Skidmore, Donald C; Rose, Gregory V; Vick, > Matthew; Williams, Mitch A; Parikh, Neerav; Linux NICS; e1000- > devel@lists.sourceforge.net; netdev@vger.kernel.org; linux- > kernel@vger.kernel.org; brian.maly@oracle.com > Subject: Re: [PATCH] i40e: don't enable and init FCOE by default when do PF > reset > > > On 2015/1/20 5:10, Dev, Vasu wrote: > >> -----Original Message----- > >> From: ethan zhao [mailto:ethan.zhao@oracle.com] > >> Sent: Friday, January 16, 2015 7:01 PM > >> To: Kirsher, Jeffrey T > >> Cc: Dev, Vasu; Ethan Zhao; Ronciak, John; Brandeburg, Jesse; Allan, > >> Bruce W; Wyborny, Carolyn; Skidmore, Donald C; Rose, Gregory V; Vick, > >> Matthew; Williams, Mitch A; Parikh, Neerav; Linux NICS; e1000- > >> devel@lists.sourceforge.net; netdev@vger.kernel.org; linux- > >> kernel@vger.kernel.org; brian.maly@oracle.com > >> Subject: Re: [PATCH] i40e: don't enable and init FCOE by default when > >> do PF reset > >> > >> Vasu, > >> > >> What' your idea about the v2, any suggestion ? Jeff is looking > >> forward to see it. > >> > > Jeff was asking for v2 in response to your last comment as "disable FCOE as > default configuration as a temporary step" but I think that is the fix and user > should n't enable FCoE until they have FCoE enabled X710 FCoE with either > fabric or VN2VN mode FCoE setup. > As a Linux distro, we don't know users have FCoE capable X710 or not, so > we couldn't disable the FCoE configuration > by default in the released kernel except FCoE is officially not supported yet > with X710, but if yes, fix those bugs I > mentioned is the only choice. > Yes must be fixed but I don't see your VLAN issue in my XL710 setup having engineering FW 4.33 with FCoE enabled, I could create VLANs and bring them up or down. As for the patch under discussion, it won't help any way whether fcoe enabled or not as I explained before. So I guess my setup differs in XL710 FW version, so upgrading FW should fix the issue and then you could keep FCoE configuration enabled in your distro w/o any concern to XL710 FCoE capable or not in XL710. We can take any FW related further discussion off list. Thanks, Vasu > > Thanks, > Ethan > > > > > > Thanks, > > Vasu > > > >> Thanks, > >> Ethan > >> > >> > >> On 2015/1/16 22:47, Jeff Kirsher wrote: > >>> On Fri, 2015-01-16 at 09:48 +0800, ethan zhao wrote: > >>>> Vasu, > >>>> > >>>> OK, disable FCOE as default configuration as a temporary step > >>>> to make it work. > >>> Sounds like I should expect a v2 coming, correct? > >>> > >>>> Thanks, > >>>> Ethan > >>>> > >>>> On 2015/1/16 7:45, Dev, Vasu wrote: > >>>>>> -----Original Message----- > >>>>>> From: ethan zhao [mailto:ethan.zhao@oracle.com] > >>>>>> Sent: Tuesday, January 13, 2015 6:41 PM > >>>>>> To: Dev, Vasu > >>>>>> Cc: Ethan Zhao; Ronciak, John; Kirsher, Jeffrey T; Brandeburg, > >>>>>> Jesse; Allan, Bruce W; Wyborny, Carolyn; Skidmore, Donald C; > >>>>>> Rose, Gregory V; Vick, Matthew; Williams, Mitch A; Parikh, > >>>>>> Neerav; Linux NICS; e1000- devel@lists.sourceforge.net; > >>>>>> netdev@vger.kernel.org; > >>>>>> linux- kernel@vger.kernel.org; brian.maly@oracle.com > >>>>>> Subject: Re: [PATCH] i40e: don't enable and init FCOE by default > >>>>>> when do PF reset > >>>>>> > >>>>>> Vasu, > >>>>>> > >>>>>> On 2015/1/14 3:38, Dev, Vasu wrote: > >>>>>>>> -----Original Message----- > >>>>>>>>>>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c > >>>>>>>>>>> b/drivers/net/ethernet/intel/i40e/i40e_main.c > >>>>>>>>>>> index a5f2660..a2572cc 100644 > >>>>>>>>>>> --- a/drivers/net/ethernet/intel/i40e/i40e_main.c > >>>>>>>>>>> +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c > >>>>>>>>>>> @@ -6180,9 +6180,12 @@ static void > >>>>>>>>>>> i40e_reset_and_rebuild(struct i40e_pf *pf, bool reinit) > >>>>>>>>>>> } > >>>>>>>>>>> #endif /* CONFIG_I40E_DCB */ > >>>>>>>>>>> #ifdef I40E_FCOE > >>>>>>>>>>> - ret = i40e_init_pf_fcoe(pf); > >>>>>>>>>>> - if (ret) > >>>>>>>>>>> - dev_info(&pf->pdev->dev, "init_pf_fcoe failed: %d\n", > ret); > >>>>>>>>>>> + if (pf->flags & I40E_FLAG_FCOE_ENABLED) { > >>>>>>>>>>> + ret = i40e_init_pf_fcoe(pf); > >>>>>>>>> Calling i40e_init_pf_fcoe() here conflicts with its > >>>>>>>> I40E_FLAG_FCOE_ENABLED pre-condition since > >>>>>> I40E_FLAG_FCOE_ENABLED is > >>>>>>>> set by very same i40e_init_pf_fcoe(), in turn > >>>>>>>> i40e_init_pf_fcoe() will never get called. > >>>>>>>> > >>>>>>>> I don't think so, here ,i40e_reset_and_rebuild() is not the > >>>>>>>> only and the first place that i40e_init_pf_fcoe() is called, > >>>>>>>> see i40e_probe(), that is the first chance. > >>>>>>>> > >>>>>>>> i40e_probe() > >>>>>>>> -->i40e_sw_init() > >>>>>>>> -->i40e_init_pf_fcoe() > >>>>>>>> > >>>>>>>> And the I40E_FLAG_FCOE_ENABLED is possible be set by > >>>>>>>> i40e_fcoe_enable() or i40e_fcoe_disable() interface before the > >>>>>>>> reset action is to be done. > >>>>>>>> > >>>>>>> It is set by i40e_init_pf_fcoe() and you are right that the > >>>>>>> modified call flow > >>>>>> by your patch won't impact setting of I40E_FLAG_FCOE_ENABLED > >> anyway > >>>>>> which could have prevented calling i40e_init_pf_fcoe() as I > >>>>>> described above, so this is not an issue with the patch. > >>>>>>>> BTW, the reason I post this patch is that we hit a bug, after > >>>>>>>> setup vlan, the PF is enabled to FCOE. > >>>>>>>> > >>>>>>> Then that BUG would still remain un-fixed and calling > >>>>>>> i40e_init_pf_fcoe() > >>>>>> under I40E_FLAG_FCOE_ENABLED flag really won't affect call flow > >>>>>> to fix anything. I mean I40E_FLAG_FCOE_ENABLED condition will be > >>>>>> true with "pf- > >>>>>>> hw.func_caps.fcoe == true" and otherwise calling > >>>>>>> i40e_init_pf_fcoe() simply > >>>>>> returns back early on after checking "pf->hw.func_caps.fcoe == > >>>>>> false", so how that bug is fixed here by added > >> I40E_FLAG_FCOE_ENABLED condition ? > >>>>>> What is the bug ? > >>>>>> The func_caps.fcoe is assigned by following call path, under > >>>>>> our test environment, > >>>>>> > >>>>>> i40e_probe() > >>>>>> ->i40e_get_capabilities() > >>>>>> ->i40e_aq_discover_capabilities() > >>>>>> ->i40e_parse_discover_capabilities() > >>>>>> > >>>>>> Or > >>>>>> > >>>>>> i40e_reset_and_rebuild() > >>>>>> ->i40e_get_capabilities() > >>>>>> ->i40e_aq_discover_capabilities() > >>>>>> ->i40e_parse_discover_capabilities() > >>>>>> > >>>>>> Under our test environment, the "pf->hw.func_caps.fcoe" is > >>>>>> true. so if > >>>>>> i40e_reset_and_rebuild() is called for VLAN setup, ethtool > >>>>>> diagnostic > >> test. > >>>>>> And then i40e_init_pf_fcoe() is to be called, > >>>>>> > >>>>>> While if (!pf->hw.func_caps.fcoe) wouldn't return, > >>>>>> > >>>>> I said it would return with "pf->hw.func_caps.fcoe == false" in my > >>>>> last > >> response, more details below. > >>>>>> So pf->flags is set to I40E_FLAG_FCOE_ENABLED. > >>>>>> > >>>>>> With my patch, i40e_init_pf_fcoe() is only called after > >>>>>> I40E_FLAG_FCOE_ENABLED is set before reset. > >>>>>> > >>>>>> Enable FCOE in i40e_probe() or not is another issue. > >>>>>> > >>>>> Nope since both cases we should do i40e_init_pf_fcoe() or don't > >>>>> based > >> on fcoe cap true or false. > >>>>> I don't have much to add as I described before with the your patch > >>>>> that > >> "calling i40e_init_pf_fcoe() under I40E_FLAG_FCOE_ENABLED flag > >> really won't affect call flow to fix anything. I mean > >> I40E_FLAG_FCOE_ENABLED condition will be true with > >> "pf->hw.func_caps.fcoe == true" and otherwise calling > >> i40e_init_pf_fcoe() simply returns back early on after checking "pf- > >>> hw.func_caps.fcoe == false". > >>>>> May be I'm missing something, I guess next either go with > >> CONFIG_I40E_FCOE disable as I suggested before and now it in upstream > >> kernel or we can have further off list discussion to fix the issue > >> you are trying to fix with the patch. > >>>>> Thanks, > >>>>> Vasu > >>>>> > >>>>>> Thanks, > >>>>>> Ethan > >>>>>> > >>>>>> > >>>>>>>>> Jeff Kirsher should be getting out a patch queued by me which > >>>>>>>>> adds > >>>>>>>> I40E_FCoE Kbuild option, in that FCoE is disabled by default > >>>>>>>> and user could enable FCoE only if needed, that patch would do > >>>>>>>> same of skipping > >>>>>>>> i40e_init_pf_fcoe() whether FCoE capability in device enabled > >>>>>>>> or not in default config. > >>>>>>>> The following patch will not fix the above issue -- > >>>>>>>> configuration of PF will be changed via reset. > >>>>>>>> How about the FCOE is configured and disabled by > >>>>>>>> i40e_fcoe_disable() , then reset happens ? > >>>>>>>> > >>>>>>> May be but if the BUG is due to FCoE being enabled then having > >>>>>>> it disabled > >>>>>> in config will avoid the bug for non FCoE config option and once > >>>>>> bug is understood then that has to be fixed for FCoE enabled > >>>>>> config also as I asked above. > >>>>>>> Thanks Ethan for detailed response. > >>>>>>> Vasu > >>>>>>> > >>>>>>>>> From patchwork Wed Oct 2 23:26:08 2013 > >>>>>>>>> Content-Type: text/plain; charset="utf-8" > >>>>>>>>> MIME-Version: 1.0 > >>>>>>>>> Content-Transfer-Encoding: 7bit > >>>>>>>>> Subject: [net] i40e: adds FCoE configure option > >>>>>>>>> Date: Thu, 03 Oct 2013 07:26:08 -0000 > >>>>>>>>> From: Vasu Dev > >>>>>>>>> X-Patchwork-Id: 11797 > >>>>>>>>> > >>>>>>>>> Adds FCoE config option I40E_FCOE, so that FCoE can be enabled > >>>>>>>>> as needed but otherwise have it disabled by default. > >>>>>>>>> > >>>>>>>>> This also eliminate multiple FCoE config checks, instead now > >>>>>>>>> just one config check for CONFIG_I40E_FCOE. > >>>>>>>>> > >>>>>>>>> The I40E FCoE was added with 3.17 kernel and therefore this > >>>>>>>>> patch shall be applied to stable 3.17 kernel also. > >>>>>>>>> > >>>>>>>>> CC: > >>>>>>>>> Signed-off-by: Vasu Dev > >>>>>>>>> Tested-by: Jim Young > >>>>>>>>> > >>>>>>>>> --- > >>>>>>>>> drivers/net/ethernet/intel/Kconfig | 11 +++++++++++ > >>>>>>>>> drivers/net/ethernet/intel/i40e/Makefile | 2 +- > >>>>>>>>> drivers/net/ethernet/intel/i40e/i40e_osdep.h | 4 ++-- > >>>>>>>>> 3 files changed, 14 insertions(+), 3 deletions(-) > >>>>>>>>> > >>>>>>>>> diff --git a/drivers/net/ethernet/intel/Kconfig > >>>>>>>>> b/drivers/net/ethernet/intel/Kconfig > >>>>>>>>> index 5b8300a..4d61ef5 100644 > >>>>>>>>> --- a/drivers/net/ethernet/intel/Kconfig > >>>>>>>>> +++ b/drivers/net/ethernet/intel/Kconfig > >>>>>>>>> @@ -281,6 +281,17 @@ config I40E_DCB > >>>>>>>>> > >>>>>>>>> If unsure, say N. > >>>>>>>>> > >>>>>>>>> +config I40E_FCOE > >>>>>>>>> + bool "Fibre Channel over Ethernet (FCoE)" > >>>>>>>>> + default n > >>>>>>>>> + depends on I40E && DCB && FCOE > >>>>>>>>> + ---help--- > >>>>>>>>> + Say Y here if you want to use Fibre Channel over > >>>>>>>>> +Ethernet > >> (FCoE) > >>>>>>>>> + in the driver. This will create new netdev for exclusive FCoE > >>>>>>>>> + use with XL710 FCoE offloads enabled. > >>>>>>>>> + > >>>>>>>>> + If unsure, say N. > >>>>>>>>> + > >>>>>>>>> config I40EVF > >>>>>>>>> tristate "Intel(R) XL710 X710 Virtual Function > >>>>>>>>> Ethernet > >> support" > >>>>>>>>> depends on PCI_MSI diff --git > >>>>>>>>> a/drivers/net/ethernet/intel/i40e/Makefile > >>>>>>>>> b/drivers/net/ethernet/intel/i40e/Makefile > >>>>>>>>> index 4b94ddb..c405819 100644 > >>>>>>>>> --- a/drivers/net/ethernet/intel/i40e/Makefile > >>>>>>>>> +++ b/drivers/net/ethernet/intel/i40e/Makefile > >>>>>>>>> @@ -44,4 +44,4 @@ i40e-objs := i40e_main.o \ > >>>>>>>>> i40e_virtchnl_pf.o > >>>>>>>>> > >>>>>>>>> i40e-$(CONFIG_I40E_DCB) += i40e_dcb.o i40e_dcb_nl.o > >>>>>>>>> -i40e-$(CONFIG_FCOE:m=y) += i40e_fcoe.o > >>>>>>>>> +i40e-$(CONFIG_I40E_FCOE) += i40e_fcoe.o > >>>>>>>>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_osdep.h > >>>>>>>>> b/drivers/net/ethernet/intel/i40e/i40e_osdep.h > >>>>>>>>> index 045b5c4..ad802dd 100644 > >>>>>>>>> --- a/drivers/net/ethernet/intel/i40e/i40e_osdep.h > >>>>>>>>> +++ b/drivers/net/ethernet/intel/i40e/i40e_osdep.h > >>>>>>>>> @@ -78,7 +78,7 @@ do { \ > >>>>>>>>> } while (0) > >>>>>>>>> > >>>>>>>>> typedef enum i40e_status_code i40e_status; -#if > >>>>>>>>> defined(CONFIG_FCOE) > >>>>>>>>> || defined(CONFIG_FCOE_MODULE) > >>>>>>>>> +#ifdef CONFIG_I40E_FCOE > >>>>>>>>> #define I40E_FCOE > >>>>>>>>> -#endif /* CONFIG_FCOE or CONFIG_FCOE_MODULE */ > >>>>>>>>> +#endif > >>>>>>>>> #endif /* _I40E_OSDEP_H_ */ > >>>>>>>>> > >>>>>>>>>>> + if (ret) > >>>>>>>>>>> + dev_info(&pf->pdev->dev, > >>>>>>>>>>> + "init_pf_fcoe failed: %d\n", ret); > >>>>>>>>>>> + } > >>>>>>>>>>> > >>>>>>>>>>> #endif > >>>>>>>>>>> /* do basic switch setup */ > >>>>>>>>>>> -- > >>>>>>>>>>> 1.8.3.1 > >>>>>>>> Thanks, > >>>>>>>> Ethan {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Dev, Vasu" Subject: RE: [PATCH] i40e: don't enable and init FCOE by default when do PF reset Date: Mon, 26 Jan 2015 22:38:15 +0000 Message-ID: <933BEC2E04D6A5458F4B0239FB547F9A34CD15C9@fmsmsx118.amr.corp.intel.com> References: <933BEC2E04D6A5458F4B0239FB547F9A34CCCD35@fmsmsx118.amr.corp.intel.com> <54B86DF8.3040206@oracle.com> <1421419628.2632.112.camel@jtkirshe-mobl> <54B9D082.9050601@oracle.com> <933BEC2E04D6A5458F4B0239FB547F9A34CCE42B@fmsmsx118.amr.corp.intel.com> <54BDB7F3.2020400@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "Kirsher, Jeffrey T" , Ethan Zhao , "Ronciak, John" , "Brandeburg, Jesse" , "Allan, Bruce W" , "Wyborny, Carolyn" , "Skidmore, Donald C" , "Rose, Gregory V" , "Vick, Matthew" , "Williams, Mitch A" , "Parikh, Neerav" , Linux NICS , "e1000-devel@lists.sourceforge.net" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "brian.maly@oracle.com" To: ethan zhao Return-path: In-Reply-To: <54BDB7F3.2020400@oracle.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBldGhhbiB6aGFvIFttYWlsdG86 ZXRoYW4uemhhb0BvcmFjbGUuY29tXQ0KPiBTZW50OiBNb25kYXksIEphbnVhcnkgMTksIDIwMTUg NjowNiBQTQ0KPiBUbzogRGV2LCBWYXN1DQo+IENjOiBLaXJzaGVyLCBKZWZmcmV5IFQ7IEV0aGFu IFpoYW87IFJvbmNpYWssIEpvaG47IEJyYW5kZWJ1cmcsIEplc3NlOyBBbGxhbiwNCj4gQnJ1Y2Ug VzsgV3lib3JueSwgQ2Fyb2x5bjsgU2tpZG1vcmUsIERvbmFsZCBDOyBSb3NlLCBHcmVnb3J5IFY7 IFZpY2ssDQo+IE1hdHRoZXc7IFdpbGxpYW1zLCBNaXRjaCBBOyBQYXJpa2gsIE5lZXJhdjsgTGlu dXggTklDUzsgZTEwMDAtDQo+IGRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldDsgbmV0ZGV2QHZn ZXIua2VybmVsLm9yZzsgbGludXgtDQo+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGJyaWFuLm1h bHlAb3JhY2xlLmNvbQ0KPiBTdWJqZWN0OiBSZTogW1BBVENIXSBpNDBlOiBkb24ndCBlbmFibGUg YW5kIGluaXQgRkNPRSBieSBkZWZhdWx0IHdoZW4gZG8gUEYNCj4gcmVzZXQNCj4gDQo+IA0KPiBP biAyMDE1LzEvMjAgNToxMCwgRGV2LCBWYXN1IHdyb3RlOg0KPiA+PiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBldGhhbiB6aGFvIFttYWlsdG86ZXRoYW4uemhhb0BvcmFj bGUuY29tXQ0KPiA+PiBTZW50OiBGcmlkYXksIEphbnVhcnkgMTYsIDIwMTUgNzowMSBQTQ0KPiA+ PiBUbzogS2lyc2hlciwgSmVmZnJleSBUDQo+ID4+IENjOiBEZXYsIFZhc3U7IEV0aGFuIFpoYW87 IFJvbmNpYWssIEpvaG47IEJyYW5kZWJ1cmcsIEplc3NlOyBBbGxhbiwNCj4gPj4gQnJ1Y2UgVzsg V3lib3JueSwgQ2Fyb2x5bjsgU2tpZG1vcmUsIERvbmFsZCBDOyBSb3NlLCBHcmVnb3J5IFY7IFZp Y2ssDQo+ID4+IE1hdHRoZXc7IFdpbGxpYW1zLCBNaXRjaCBBOyBQYXJpa2gsIE5lZXJhdjsgTGlu dXggTklDUzsgZTEwMDAtDQo+ID4+IGRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldDsgbmV0ZGV2 QHZnZXIua2VybmVsLm9yZzsgbGludXgtDQo+ID4+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGJy aWFuLm1hbHlAb3JhY2xlLmNvbQ0KPiA+PiBTdWJqZWN0OiBSZTogW1BBVENIXSBpNDBlOiBkb24n dCBlbmFibGUgYW5kIGluaXQgRkNPRSBieSBkZWZhdWx0IHdoZW4NCj4gPj4gZG8gUEYgcmVzZXQN Cj4gPj4NCj4gPj4gVmFzdSwNCj4gPj4NCj4gPj4gICAgIFdoYXQnIHlvdXIgaWRlYSBhYm91dCB0 aGUgdjIsIGFueSBzdWdnZXN0aW9uID8gIEplZmYgaXMgbG9va2luZw0KPiA+PiBmb3J3YXJkIHRv IHNlZSBpdC4NCj4gPj4NCj4gPiBKZWZmIHdhcyBhc2tpbmcgZm9yIHYyIGluIHJlc3BvbnNlIHRv IHlvdXIgbGFzdCBjb21tZW50IGFzICJkaXNhYmxlIEZDT0UgYXMNCj4gZGVmYXVsdCBjb25maWd1 cmF0aW9uIGFzIGEgdGVtcG9yYXJ5IHN0ZXAiIGJ1dCBJIHRoaW5rIHRoYXQgaXMgdGhlIGZpeCBh bmQgdXNlcg0KPiBzaG91bGQgbid0IGVuYWJsZSBGQ29FIHVudGlsIHRoZXkgaGF2ZSBGQ29FIGVu YWJsZWQgWDcxMCBGQ29FIHdpdGggZWl0aGVyDQo+IGZhYnJpYyBvciBWTjJWTiBtb2RlIEZDb0Ug c2V0dXAuDQo+ICAgQXMgYSBMaW51eCBkaXN0cm8sIHdlIGRvbid0IGtub3cgdXNlcnMgaGF2ZSBG Q29FIGNhcGFibGUgWDcxMCBvciBub3QsIHNvDQo+IHdlIGNvdWxkbid0IGRpc2FibGUgdGhlIEZD b0UgY29uZmlndXJhdGlvbg0KPiAgIGJ5IGRlZmF1bHQgaW4gdGhlIHJlbGVhc2VkIGtlcm5lbCBl eGNlcHQgRkNvRSBpcyBvZmZpY2lhbGx5IG5vdCBzdXBwb3J0ZWQgeWV0DQo+IHdpdGggWDcxMCwg YnV0IGlmIHllcywgZml4IHRob3NlIGJ1Z3MgSQ0KPiAgIG1lbnRpb25lZCBpcyB0aGUgb25seSBj aG9pY2UuDQo+IA0KDQpZZXMgbXVzdCBiZSBmaXhlZCBidXQgSSBkb24ndCBzZWUgeW91ciBWTEFO IGlzc3VlIGluIG15IFhMNzEwICBzZXR1cCBoYXZpbmcgZW5naW5lZXJpbmcgRlcgNC4zMyB3aXRo IEZDb0UgZW5hYmxlZCwgSSBjb3VsZCBjcmVhdGUgVkxBTnMgYW5kIGJyaW5nIHRoZW0gdXAgb3Ig ZG93bi4gDQoNCkFzIGZvciB0aGUgcGF0Y2ggdW5kZXIgZGlzY3Vzc2lvbiwgaXQgd29uJ3QgaGVs cCBhbnkgd2F5IHdoZXRoZXIgZmNvZSBlbmFibGVkIG9yIG5vdCBhcyBJIGV4cGxhaW5lZCBiZWZv cmUuIFNvIEkgZ3Vlc3MgbXkgc2V0dXAgZGlmZmVycyBpbiBYTDcxMCBGVyB2ZXJzaW9uLCBzbyB1 cGdyYWRpbmcgRlcgc2hvdWxkIGZpeCB0aGUgaXNzdWUgYW5kIHRoZW4geW91IGNvdWxkIGtlZXAg RkNvRSBjb25maWd1cmF0aW9uIGVuYWJsZWQgaW4geW91ciBkaXN0cm8gdy9vIGFueSBjb25jZXJu IHRvIFhMNzEwIEZDb0UgY2FwYWJsZSBvciBub3QgaW4gWEw3MTAuIFdlIGNhbiB0YWtlIGFueSBG VyByZWxhdGVkIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvZmYgbGlzdC4NCg0KVGhhbmtzLA0KVmFzdQ0K DQo+IA0KPiBUaGFua3MsDQo+IEV0aGFuDQo+IA0KPiANCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBW YXN1DQo+ID4NCj4gPj4gVGhhbmtzLA0KPiA+PiBFdGhhbg0KPiA+Pg0KPiA+Pg0KPiA+PiBPbiAy MDE1LzEvMTYgMjI6NDcsIEplZmYgS2lyc2hlciB3cm90ZToNCj4gPj4+IE9uIEZyaSwgMjAxNS0w MS0xNiBhdCAwOTo0OCArMDgwMCwgZXRoYW4gemhhbyB3cm90ZToNCj4gPj4+PiBWYXN1LA0KPiA+ Pj4+DQo+ID4+Pj4gICAgICAgT0ssIGRpc2FibGUgRkNPRSBhcyBkZWZhdWx0IGNvbmZpZ3VyYXRp b24gYXMgYSB0ZW1wb3Jhcnkgc3RlcA0KPiA+Pj4+IHRvIG1ha2UgaXQgIHdvcmsuDQo+ID4+PiBT b3VuZHMgbGlrZSBJIHNob3VsZCBleHBlY3QgYSB2MiBjb21pbmcsIGNvcnJlY3Q/DQo+ID4+Pg0K PiA+Pj4+IFRoYW5rcywNCj4gPj4+PiBFdGhhbg0KPiA+Pj4+DQo+ID4+Pj4gT24gMjAxNS8xLzE2 IDc6NDUsIERldiwgVmFzdSB3cm90ZToNCj4gPj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+ID4+Pj4+PiBGcm9tOiBldGhhbiB6aGFvIFttYWlsdG86ZXRoYW4uemhhb0BvcmFjbGUu Y29tXQ0KPiA+Pj4+Pj4gU2VudDogVHVlc2RheSwgSmFudWFyeSAxMywgMjAxNSA2OjQxIFBNDQo+ ID4+Pj4+PiBUbzogRGV2LCBWYXN1DQo+ID4+Pj4+PiBDYzogRXRoYW4gWmhhbzsgUm9uY2lhaywg Sm9objsgS2lyc2hlciwgSmVmZnJleSBUOyBCcmFuZGVidXJnLA0KPiA+Pj4+Pj4gSmVzc2U7IEFs bGFuLCBCcnVjZSBXOyBXeWJvcm55LCBDYXJvbHluOyBTa2lkbW9yZSwgRG9uYWxkIEM7DQo+ID4+ Pj4+PiBSb3NlLCBHcmVnb3J5IFY7IFZpY2ssIE1hdHRoZXc7IFdpbGxpYW1zLCBNaXRjaCBBOyBQ YXJpa2gsDQo+ID4+Pj4+PiBOZWVyYXY7IExpbnV4IE5JQ1M7IGUxMDAwLSBkZXZlbEBsaXN0cy5z b3VyY2Vmb3JnZS5uZXQ7DQo+ID4+Pj4+PiBuZXRkZXZAdmdlci5rZXJuZWwub3JnOw0KPiA+Pj4+ Pj4gbGludXgtIGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGJyaWFuLm1hbHlAb3JhY2xlLmNvbQ0K PiA+Pj4+Pj4gU3ViamVjdDogUmU6IFtQQVRDSF0gaTQwZTogZG9uJ3QgZW5hYmxlIGFuZCBpbml0 IEZDT0UgYnkgZGVmYXVsdA0KPiA+Pj4+Pj4gd2hlbiBkbyBQRiByZXNldA0KPiA+Pj4+Pj4NCj4g Pj4+Pj4+IFZhc3UsDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gT24gMjAxNS8xLzE0IDM6MzgsIERldiwg VmFzdSB3cm90ZToNCj4gPj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4+ Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQw ZV9tYWluLmMNCj4gPj4+Pj4+Pj4+Pj4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBl L2k0MGVfbWFpbi5jDQo+ID4+Pj4+Pj4+Pj4+IGluZGV4IGE1ZjI2NjAuLmEyNTcyY2MgMTAwNjQ0 DQo+ID4+Pj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQw ZV9tYWluLmMNCj4gPj4+Pj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwv aTQwZS9pNDBlX21haW4uYw0KPiA+Pj4+Pj4+Pj4+PiBAQCAtNjE4MCw5ICs2MTgwLDEyIEBAIHN0 YXRpYyB2b2lkDQo+ID4+Pj4+Pj4+Pj4+IGk0MGVfcmVzZXRfYW5kX3JlYnVpbGQoc3RydWN0IGk0 MGVfcGYgKnBmLCBib29sIHJlaW5pdCkNCj4gPj4+Pj4+Pj4+Pj4gICAgICAgICB9DQo+ID4+Pj4+ Pj4+Pj4+ICAgICAgI2VuZGlmIC8qIENPTkZJR19JNDBFX0RDQiAqLw0KPiA+Pj4+Pj4+Pj4+PiAg ICAgICNpZmRlZiBJNDBFX0ZDT0UNCj4gPj4+Pj4+Pj4+Pj4gLSAgIHJldCA9IGk0MGVfaW5pdF9w Zl9mY29lKHBmKTsNCj4gPj4+Pj4+Pj4+Pj4gLSAgIGlmIChyZXQpDQo+ID4+Pj4+Pj4+Pj4+IC0g ICAgICAgICAgIGRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LCAiaW5pdF9wZl9mY29lIGZhaWxlZDog JWRcbiIsDQo+IHJldCk7DQo+ID4+Pj4+Pj4+Pj4+ICsgICBpZiAocGYtPmZsYWdzICYgSTQwRV9G TEFHX0ZDT0VfRU5BQkxFRCkgew0KPiA+Pj4+Pj4+Pj4+PiArICAgICAgICAgICByZXQgPSBpNDBl X2luaXRfcGZfZmNvZShwZik7DQo+ID4+Pj4+Pj4+PiBDYWxsaW5nIGk0MGVfaW5pdF9wZl9mY29l KCkgaGVyZSBjb25mbGljdHMgd2l0aCBpdHMNCj4gPj4+Pj4+Pj4gSTQwRV9GTEFHX0ZDT0VfRU5B QkxFRCBwcmUtY29uZGl0aW9uIHNpbmNlDQo+ID4+Pj4+PiBJNDBFX0ZMQUdfRkNPRV9FTkFCTEVE IGlzDQo+ID4+Pj4+Pj4+IHNldCBieSB2ZXJ5IHNhbWUgaTQwZV9pbml0X3BmX2Zjb2UoKSwgaW4g dHVybg0KPiA+Pj4+Pj4+PiBpNDBlX2luaXRfcGZfZmNvZSgpIHdpbGwgbmV2ZXIgZ2V0IGNhbGxl ZC4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gSSBkb24ndCB0aGluayBzbywgIGhlcmUgLGk0MGVf cmVzZXRfYW5kX3JlYnVpbGQoKSAgaXMgbm90IHRoZQ0KPiA+Pj4+Pj4+PiBvbmx5IGFuZCB0aGUg Zmlyc3QgcGxhY2UgdGhhdCAgaTQwZV9pbml0X3BmX2Zjb2UoKSBpcyBjYWxsZWQsDQo+ID4+Pj4+ Pj4+IHNlZSBpNDBlX3Byb2JlKCksIHRoYXQgaXMgdGhlIGZpcnN0IGNoYW5jZS4NCj4gPj4+Pj4+ Pj4NCj4gPj4+Pj4+Pj4gaTQwZV9wcm9iZSgpDQo+ID4+Pj4+Pj4+IC0tPmk0MGVfc3dfaW5pdCgp DQo+ID4+Pj4+Pj4+ICAgICAgICAgIC0tPmk0MGVfaW5pdF9wZl9mY29lKCkNCj4gPj4+Pj4+Pj4N Cj4gPj4+Pj4+Pj4gQW5kIHRoZSBJNDBFX0ZMQUdfRkNPRV9FTkFCTEVEIGlzIHBvc3NpYmxlIGJl IHNldCBieQ0KPiA+Pj4+Pj4+PiBpNDBlX2Zjb2VfZW5hYmxlKCkgb3IgaTQwZV9mY29lX2Rpc2Fi bGUoKSBpbnRlcmZhY2UgYmVmb3JlIHRoZQ0KPiA+Pj4+Pj4+PiByZXNldCBhY3Rpb24gaXMgdG8g YmUgZG9uZS4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+PiBJdCBpcyBzZXQgYnkgaTQwZV9pbml0X3Bm X2Zjb2UoKSBhbmQgeW91IGFyZSByaWdodCB0aGF0IHRoZQ0KPiA+Pj4+Pj4+IG1vZGlmaWVkIGNh bGwgZmxvdw0KPiA+Pj4+Pj4gYnkgeW91ciBwYXRjaCB3b24ndCBpbXBhY3Qgc2V0dGluZyBvZiBJ NDBFX0ZMQUdfRkNPRV9FTkFCTEVEDQo+ID4+IGFueXdheQ0KPiA+Pj4+Pj4gd2hpY2ggY291bGQg aGF2ZSBwcmV2ZW50ZWQgY2FsbGluZyBpNDBlX2luaXRfcGZfZmNvZSgpIGFzIEkNCj4gPj4+Pj4+ IGRlc2NyaWJlZCBhYm92ZSwgc28gdGhpcyBpcyBub3QgYW4gaXNzdWUgd2l0aCB0aGUgcGF0Y2gu DQo+ID4+Pj4+Pj4+IEJUVywgdGhlIHJlYXNvbiBJIHBvc3QgdGhpcyBwYXRjaCBpcyB0aGF0IHdl IGhpdCBhIGJ1ZywgYWZ0ZXINCj4gPj4+Pj4+Pj4gc2V0dXAgdmxhbiwgdGhlIFBGIGlzIGVuYWJs ZWQgdG8gRkNPRS4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+PiBUaGVuIHRoYXQgQlVHIHdvdWxkIHN0 aWxsIHJlbWFpbiB1bi1maXhlZCBhbmQgY2FsbGluZw0KPiA+Pj4+Pj4+IGk0MGVfaW5pdF9wZl9m Y29lKCkNCj4gPj4+Pj4+IHVuZGVyIEk0MEVfRkxBR19GQ09FX0VOQUJMRUQgIGZsYWcgcmVhbGx5 IHdvbid0IGFmZmVjdCBjYWxsIGZsb3cNCj4gPj4+Pj4+IHRvIGZpeCBhbnl0aGluZy4gSSBtZWFu IEk0MEVfRkxBR19GQ09FX0VOQUJMRUQgIGNvbmRpdGlvbiB3aWxsIGJlDQo+ID4+Pj4+PiB0cnVl IHdpdGggInBmLQ0KPiA+Pj4+Pj4+IGh3LmZ1bmNfY2Fwcy5mY29lID09IHRydWUiIGFuZCBvdGhl cndpc2UgY2FsbGluZw0KPiA+Pj4+Pj4+IGk0MGVfaW5pdF9wZl9mY29lKCkgc2ltcGx5DQo+ID4+ Pj4+PiByZXR1cm5zIGJhY2sgZWFybHkgb24gYWZ0ZXIgY2hlY2tpbmcgInBmLT5ody5mdW5jX2Nh cHMuZmNvZSA9PQ0KPiA+Pj4+Pj4gZmFsc2UiLCBzbyBob3cgdGhhdCBidWcgaXMgZml4ZWQgaGVy ZSBieSBhZGRlZA0KPiA+PiBJNDBFX0ZMQUdfRkNPRV9FTkFCTEVEICBjb25kaXRpb24gPw0KPiA+ Pj4+Pj4gV2hhdCBpcyB0aGUgYnVnID8NCj4gPj4+Pj4+ICAgICAgVGhlIGZ1bmNfY2Fwcy5mY29l IGlzIGFzc2lnbmVkIGJ5IGZvbGxvd2luZyBjYWxsIHBhdGgsIHVuZGVyDQo+ID4+Pj4+PiBvdXIg dGVzdCBlbnZpcm9ubWVudCwNCj4gPj4+Pj4+DQo+ID4+Pj4+PiAgICAgIGk0MGVfcHJvYmUoKQ0K PiA+Pj4+Pj4gICAgICAgLT5pNDBlX2dldF9jYXBhYmlsaXRpZXMoKQ0KPiA+Pj4+Pj4gICAgICAg ICAgLT5pNDBlX2FxX2Rpc2NvdmVyX2NhcGFiaWxpdGllcygpDQo+ID4+Pj4+PiAgICAgICAgICAg ICAtPmk0MGVfcGFyc2VfZGlzY292ZXJfY2FwYWJpbGl0aWVzKCkNCj4gPj4+Pj4+DQo+ID4+Pj4+ PiAgICAgIE9yDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gICAgICBpNDBlX3Jlc2V0X2FuZF9yZWJ1aWxk KCkNCj4gPj4+Pj4+ICAgICAgIC0+aTQwZV9nZXRfY2FwYWJpbGl0aWVzKCkNCj4gPj4+Pj4+ICAg ICAgICAgLT5pNDBlX2FxX2Rpc2NvdmVyX2NhcGFiaWxpdGllcygpDQo+ID4+Pj4+PiAgICAgICAg ICAgLT5pNDBlX3BhcnNlX2Rpc2NvdmVyX2NhcGFiaWxpdGllcygpDQo+ID4+Pj4+Pg0KPiA+Pj4+ Pj4gICAgICBVbmRlciBvdXIgdGVzdCBlbnZpcm9ubWVudCwgdGhlICJwZi0+aHcuZnVuY19jYXBz LmZjb2UiIGlzDQo+ID4+Pj4+PiB0cnVlLiBzbyBpZg0KPiA+Pj4+Pj4gaTQwZV9yZXNldF9hbmRf cmVidWlsZCgpIGlzIGNhbGxlZCBmb3IgVkxBTiBzZXR1cCwgZXRodG9vbA0KPiA+Pj4+Pj4gZGlh Z25vc3RpYw0KPiA+PiB0ZXN0Lg0KPiA+Pj4+Pj4gICAgICBBbmQgdGhlbiBpNDBlX2luaXRfcGZf ZmNvZSgpIGlzIHRvIGJlIGNhbGxlZCwNCj4gPj4+Pj4+DQo+ID4+Pj4+PiAgICAgIFdoaWxlIGlm ICghcGYtPmh3LmZ1bmNfY2Fwcy5mY29lKSB3b3VsZG4ndCByZXR1cm4sDQo+ID4+Pj4+Pg0KPiA+ Pj4+PiBJIHNhaWQgaXQgd291bGQgcmV0dXJuIHdpdGggInBmLT5ody5mdW5jX2NhcHMuZmNvZSA9 PSBmYWxzZSIgaW4gbXkNCj4gPj4+Pj4gbGFzdA0KPiA+PiByZXNwb25zZSwgbW9yZSBkZXRhaWxz IGJlbG93Lg0KPiA+Pj4+Pj4gICAgICBTbyAgcGYtPmZsYWdzIGlzIHNldCB0byBJNDBFX0ZMQUdf RkNPRV9FTkFCTEVELg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+ICAgICAgV2l0aCBteSBwYXRjaCwgIGk0 MGVfaW5pdF9wZl9mY29lKCkgaXMgb25seSBjYWxsZWQgYWZ0ZXINCj4gPj4+Pj4+IEk0MEVfRkxB R19GQ09FX0VOQUJMRUQgaXMgc2V0IGJlZm9yZSByZXNldC4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiBF bmFibGUgRkNPRSBpbiBpNDBlX3Byb2JlKCkgb3Igbm90IGlzIGFub3RoZXIgaXNzdWUuDQo+ID4+ Pj4+Pg0KPiA+Pj4+PiBOb3BlIHNpbmNlIGJvdGggY2FzZXMgd2Ugc2hvdWxkIGRvIGk0MGVfaW5p dF9wZl9mY29lKCkgb3IgZG9uJ3QNCj4gPj4+Pj4gYmFzZWQNCj4gPj4gb24gZmNvZSBjYXAgdHJ1 ZSBvciBmYWxzZS4NCj4gPj4+Pj4gSSBkb24ndCBoYXZlIG11Y2ggdG8gYWRkIGFzIEkgZGVzY3Jp YmVkIGJlZm9yZSB3aXRoIHRoZSB5b3VyIHBhdGNoDQo+ID4+Pj4+IHRoYXQNCj4gPj4gImNhbGxp bmcgaTQwZV9pbml0X3BmX2Zjb2UoKSB1bmRlciBJNDBFX0ZMQUdfRkNPRV9FTkFCTEVEICBmbGFn DQo+ID4+IHJlYWxseSB3b24ndCBhZmZlY3QgY2FsbCBmbG93IHRvIGZpeCBhbnl0aGluZy4gSSBt ZWFuDQo+ID4+IEk0MEVfRkxBR19GQ09FX0VOQUJMRUQgY29uZGl0aW9uIHdpbGwgYmUgdHJ1ZSB3 aXRoDQo+ID4+ICJwZi0+aHcuZnVuY19jYXBzLmZjb2UgPT0gdHJ1ZSIgYW5kIG90aGVyd2lzZSBj YWxsaW5nDQo+ID4+IGk0MGVfaW5pdF9wZl9mY29lKCkgc2ltcGx5IHJldHVybnMgYmFjayBlYXJs eSBvbiBhZnRlciBjaGVja2luZyAicGYtDQo+ID4+PiBody5mdW5jX2NhcHMuZmNvZSA9PSBmYWxz ZSIuDQo+ID4+Pj4+IE1heSBiZSBJJ20gbWlzc2luZyBzb21ldGhpbmcsIEkgZ3Vlc3MgbmV4dCBl aXRoZXIgZ28gd2l0aA0KPiA+PiBDT05GSUdfSTQwRV9GQ09FIGRpc2FibGUgYXMgSSBzdWdnZXN0 ZWQgYmVmb3JlIGFuZCBub3cgaXQgaW4gdXBzdHJlYW0NCj4gPj4ga2VybmVsIG9yIHdlIGNhbiBo YXZlIGZ1cnRoZXIgb2ZmIGxpc3QgZGlzY3Vzc2lvbiB0byBmaXggdGhlIGlzc3VlDQo+ID4+IHlv dSBhcmUgdHJ5aW5nIHRvIGZpeCB3aXRoIHRoZSBwYXRjaC4NCj4gPj4+Pj4gVGhhbmtzLA0KPiA+ Pj4+PiBWYXN1DQo+ID4+Pj4+DQo+ID4+Pj4+PiBUaGFua3MsDQo+ID4+Pj4+PiBFdGhhbg0KPiA+ Pj4+Pj4NCj4gPj4+Pj4+DQo+ID4+Pj4+Pj4+PiBKZWZmIEtpcnNoZXIgc2hvdWxkIGJlIGdldHRp bmcgb3V0IGEgcGF0Y2ggcXVldWVkIGJ5IG1lIHdoaWNoDQo+ID4+Pj4+Pj4+PiBhZGRzDQo+ID4+ Pj4+Pj4+IEk0MEVfRkNvRSBLYnVpbGQgb3B0aW9uLCBpbiB0aGF0IEZDb0UgaXMgZGlzYWJsZWQg YnkgZGVmYXVsdA0KPiA+Pj4+Pj4+PiBhbmQgdXNlciBjb3VsZCBlbmFibGUgRkNvRSBvbmx5IGlm IG5lZWRlZCwgdGhhdCBwYXRjaCB3b3VsZCBkbw0KPiA+Pj4+Pj4+PiBzYW1lIG9mIHNraXBwaW5n DQo+ID4+Pj4+Pj4+IGk0MGVfaW5pdF9wZl9mY29lKCkgd2hldGhlciBGQ29FIGNhcGFiaWxpdHkg aW4gZGV2aWNlIGVuYWJsZWQNCj4gPj4+Pj4+Pj4gb3Igbm90IGluIGRlZmF1bHQgY29uZmlnLg0K PiA+Pj4+Pj4+PiBUaGUgZm9sbG93aW5nIHBhdGNoIHdpbGwgbm90IGZpeCB0aGUgYWJvdmUgaXNz dWUgLS0NCj4gPj4+Pj4+Pj4gY29uZmlndXJhdGlvbiBvZiBQRiB3aWxsIGJlIGNoYW5nZWQgdmlh IHJlc2V0Lg0KPiA+Pj4+Pj4+PiBIb3cgYWJvdXQgdGhlIEZDT0UgaXMgY29uZmlndXJlZCBhbmQg ZGlzYWJsZWQgYnkNCj4gPj4+Pj4+Pj4gaTQwZV9mY29lX2Rpc2FibGUoKSAsIHRoZW4gcmVzZXQg aGFwcGVucyA/DQo+ID4+Pj4+Pj4+DQo+ID4+Pj4+Pj4gTWF5IGJlIGJ1dCBpZiB0aGUgQlVHIGlz IGR1ZSB0byBGQ29FIGJlaW5nIGVuYWJsZWQgdGhlbiBoYXZpbmcNCj4gPj4+Pj4+PiBpdCBkaXNh YmxlZA0KPiA+Pj4+Pj4gaW4gY29uZmlnIHdpbGwgYXZvaWQgdGhlIGJ1ZyBmb3Igbm9uIEZDb0Ug Y29uZmlnIG9wdGlvbiBhbmQgb25jZQ0KPiA+Pj4+Pj4gYnVnIGlzIHVuZGVyc3Rvb2QgdGhlbiB0 aGF0IGhhcyB0byBiZSBmaXhlZCBmb3IgRkNvRSBlbmFibGVkDQo+ID4+Pj4+PiBjb25maWcgYWxz byBhcyBJIGFza2VkIGFib3ZlLg0KPiA+Pj4+Pj4+IFRoYW5rcyBFdGhhbiBmb3IgZGV0YWlsZWQg cmVzcG9uc2UuDQo+ID4+Pj4+Pj4gVmFzdQ0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiAgICAgRnJv bSBwYXRjaHdvcmsgV2VkIE9jdCAgMiAyMzoyNjowOCAyMDEzDQo+ID4+Pj4+Pj4+PiBDb250ZW50 LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04Ig0KPiA+Pj4+Pj4+Pj4gTUlNRS1WZXJz aW9uOiAxLjANCj4gPj4+Pj4+Pj4+IENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQNCj4g Pj4+Pj4+Pj4+IFN1YmplY3Q6IFtuZXRdIGk0MGU6IGFkZHMgRkNvRSBjb25maWd1cmUgb3B0aW9u DQo+ID4+Pj4+Pj4+PiBEYXRlOiBUaHUsIDAzIE9jdCAyMDEzIDA3OjI2OjA4IC0wMDAwDQo+ID4+ Pj4+Pj4+PiBGcm9tOiBWYXN1IERldiA8dmFzdS5kZXZAaW50ZWwuY29tPg0KPiA+Pj4+Pj4+Pj4g WC1QYXRjaHdvcmstSWQ6IDExNzk3DQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gQWRkcyBGQ29F IGNvbmZpZyBvcHRpb24gSTQwRV9GQ09FLCBzbyB0aGF0IEZDb0UgY2FuIGJlIGVuYWJsZWQNCj4g Pj4+Pj4+Pj4+IGFzIG5lZWRlZCBidXQgb3RoZXJ3aXNlIGhhdmUgaXQgZGlzYWJsZWQgYnkgZGVm YXVsdC4NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBUaGlzIGFsc28gZWxpbWluYXRlIG11bHRp cGxlIEZDb0UgY29uZmlnIGNoZWNrcywgaW5zdGVhZCBub3cNCj4gPj4+Pj4+Pj4+IGp1c3Qgb25l IGNvbmZpZyBjaGVjayBmb3IgQ09ORklHX0k0MEVfRkNPRS4NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+ Pj4+PiBUaGUgSTQwRSBGQ29FIHdhcyBhZGRlZCB3aXRoIDMuMTcga2VybmVsIGFuZCB0aGVyZWZv cmUgdGhpcw0KPiA+Pj4+Pj4+Pj4gcGF0Y2ggc2hhbGwgYmUgYXBwbGllZCB0byBzdGFibGUgMy4x NyBrZXJuZWwgYWxzby4NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBDQzogPHN0YWJsZUB2Z2Vy Lmtlcm5lbC5vcmc+DQo+ID4+Pj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBWYXN1IERldiA8dmFzdS5k ZXZAaW50ZWwuY29tPg0KPiA+Pj4+Pj4+Pj4gVGVzdGVkLWJ5OiBKaW0gWW91bmcgPGphbWVzeC5t LnlvdW5nQGludGVsLmNvbT4NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiAtLS0NCj4gPj4+Pj4+ Pj4+IGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcgICAgICAgICAgIHwgICAxMSAr KysrKysrKysrKw0KPiA+Pj4+Pj4+Pj4gICAgICBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9p NDBlL01ha2VmaWxlICAgICB8ICAgIDIgKy0NCj4gPj4+Pj4+Pj4+ICAgICAgZHJpdmVycy9uZXQv ZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX29zZGVwLmggfCAgICA0ICsrLS0NCj4gPj4+Pj4+Pj4+ ICAgICAgMyBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0K PiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9pbnRlbC9LY29uZmlnDQo+ID4+Pj4+Pj4+PiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVs L0tjb25maWcNCj4gPj4+Pj4+Pj4+IGluZGV4IDViODMwMGEuLjRkNjFlZjUgMTAwNjQ0DQo+ID4+ Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnDQo+ID4+Pj4+ Pj4+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnDQo+ID4+Pj4+Pj4+ PiBAQCAtMjgxLDYgKzI4MSwxNyBAQCBjb25maWcgSTQwRV9EQ0INCj4gPj4+Pj4+Pj4+DQo+ID4+ Pj4+Pj4+PiAgICAgICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uDQo+ID4+Pj4+Pj4+Pg0KPiA+ Pj4+Pj4+Pj4gK2NvbmZpZyBJNDBFX0ZDT0UNCj4gPj4+Pj4+Pj4+ICsgICAgICAgYm9vbCAiRmli cmUgQ2hhbm5lbCBvdmVyIEV0aGVybmV0IChGQ29FKSINCj4gPj4+Pj4+Pj4+ICsgICAgICAgZGVm YXVsdCBuDQo+ID4+Pj4+Pj4+PiArICAgICAgIGRlcGVuZHMgb24gSTQwRSAmJiBEQ0IgJiYgRkNP RQ0KPiA+Pj4+Pj4+Pj4gKyAgICAgICAtLS1oZWxwLS0tDQo+ID4+Pj4+Pj4+PiArICAgICAgICAg U2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgRmlicmUgQ2hhbm5lbCBvdmVyDQo+ID4+Pj4+ Pj4+PiArRXRoZXJuZXQNCj4gPj4gKEZDb0UpDQo+ID4+Pj4+Pj4+PiArICAgICAgICAgaW4gdGhl IGRyaXZlci4gVGhpcyB3aWxsIGNyZWF0ZSBuZXcgbmV0ZGV2IGZvciBleGNsdXNpdmUgRkNvRQ0K PiA+Pj4+Pj4+Pj4gKyAgICAgICAgIHVzZSB3aXRoIFhMNzEwIEZDb0Ugb2ZmbG9hZHMgZW5hYmxl ZC4NCj4gPj4+Pj4+Pj4+ICsNCj4gPj4+Pj4+Pj4+ICsgICAgICAgICBJZiB1bnN1cmUsIHNheSBO Lg0KPiA+Pj4+Pj4+Pj4gKw0KPiA+Pj4+Pj4+Pj4gICAgICBjb25maWcgSTQwRVZGDQo+ID4+Pj4+ Pj4+PiAgICAgICAgICAgICB0cmlzdGF0ZSAiSW50ZWwoUikgWEw3MTAgWDcxMCBWaXJ0dWFsIEZ1 bmN0aW9uDQo+ID4+Pj4+Pj4+PiBFdGhlcm5ldA0KPiA+PiBzdXBwb3J0Ig0KPiA+Pj4+Pj4+Pj4g ICAgICAgICAgICAgZGVwZW5kcyBvbiBQQ0lfTVNJIGRpZmYgLS1naXQNCj4gPj4+Pj4+Pj4+IGEv ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9NYWtlZmlsZQ0KPiA+Pj4+Pj4+Pj4gYi9k cml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL01ha2VmaWxlDQo+ID4+Pj4+Pj4+PiBpbmRl eCA0Yjk0ZGRiLi5jNDA1ODE5IDEwMDY0NA0KPiA+Pj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvaW50ZWwvaTQwZS9NYWtlZmlsZQ0KPiA+Pj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9u ZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9NYWtlZmlsZQ0KPiA+Pj4+Pj4+Pj4gQEAgLTQ0LDQgKzQ0 LDQgQEAgaTQwZS1vYmpzIDo9IGk0MGVfbWFpbi5vIFwNCj4gPj4+Pj4+Pj4+ICAgICAgICAgICAg IGk0MGVfdmlydGNobmxfcGYubw0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+ICAgICAgaTQwZS0k KENPTkZJR19JNDBFX0RDQikgKz0gaTQwZV9kY2IubyBpNDBlX2RjYl9ubC5vDQo+ID4+Pj4+Pj4+ PiAtaTQwZS0kKENPTkZJR19GQ09FOm09eSkgKz0gaTQwZV9mY29lLm8NCj4gPj4+Pj4+Pj4+ICtp NDBlLSQoQ09ORklHX0k0MEVfRkNPRSkgKz0gaTQwZV9mY29lLm8NCj4gPj4+Pj4+Pj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfb3NkZXAuaA0KPiA+ Pj4+Pj4+Pj4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfb3NkZXAuaA0K PiA+Pj4+Pj4+Pj4gaW5kZXggMDQ1YjVjNC4uYWQ4MDJkZCAxMDA2NDQNCj4gPj4+Pj4+Pj4+IC0t LSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9vc2RlcC5oDQo+ID4+Pj4+ Pj4+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfb3NkZXAuaA0K PiA+Pj4+Pj4+Pj4gQEAgLTc4LDcgKzc4LDcgQEAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPj4+Pj4+Pj4+ICAgICAg fSB3aGlsZSAoMCkNCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiAgICAgIHR5cGVkZWYgZW51bSBp NDBlX3N0YXR1c19jb2RlIGk0MGVfc3RhdHVzOyAtI2lmDQo+ID4+Pj4+Pj4+PiBkZWZpbmVkKENP TkZJR19GQ09FKQ0KPiA+Pj4+Pj4+Pj4gfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpDQo+ ID4+Pj4+Pj4+PiArI2lmZGVmIENPTkZJR19JNDBFX0ZDT0UNCj4gPj4+Pj4+Pj4+ICAgICAgI2Rl ZmluZSBJNDBFX0ZDT0UNCj4gPj4+Pj4+Pj4+IC0jZW5kaWYgLyogQ09ORklHX0ZDT0Ugb3IgQ09O RklHX0ZDT0VfTU9EVUxFICovDQo+ID4+Pj4+Pj4+PiArI2VuZGlmDQo+ID4+Pj4+Pj4+PiAgICAg ICNlbmRpZiAvKiBfSTQwRV9PU0RFUF9IXyAqLw0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+Pj4g KyAgICAgICAgICAgaWYgKHJldCkNCj4gPj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICBk ZXZfaW5mbygmcGYtPnBkZXYtPmRldiwNCj4gPj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiaW5pdF9wZl9mY29lIGZhaWxlZDogJWRcbiIsIHJldCk7DQo+ID4+Pj4+Pj4+ Pj4+ICsgICB9DQo+ID4+Pj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+Pj4+ICAgICAgI2VuZGlmDQo+ID4+ Pj4+Pj4+Pj4+ICAgICAgICAgLyogZG8gYmFzaWMgc3dpdGNoIHNldHVwICovDQo+ID4+Pj4+Pj4+ Pj4+IC0tDQo+ID4+Pj4+Pj4+Pj4+IDEuOC4zLjENCj4gPj4+Pj4+Pj4gVGhhbmtzLA0KPiA+Pj4+ Pj4+PiBFdGhhbg0KDQo=