From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?utf-8?Q?Carsten_Schiers?=
Subject: Load increase after memory upgrade (part2)
Date: Thu, 24 Nov 2011 13:28:44 +0100
Message-ID:
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="===============5279143288043207915=="
Return-path:
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?utf-8?Q?konrad=2Ewilk?=
Cc: =?utf-8?Q?xen-devel?=
List-Id: xen-devel@lists.xenproject.org
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--===============5279143288043207915==
Content-Type: multipart/alternative;
boundary="=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac"
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hello again, I would like to come back to that thing...sorry that I did n=
ot have the time up to now.=0D=0A=0D=0A=C2=A0=0D=0AWe (now) speak about=0D=
=0A=0D=0A=C2=A0=0D=0A*=09Xen 4.1.2=0D=0A*=09Dom0 is Jeremy's 2.6.32.46 64=
bit=0D=0A*=09DomU in question is now 3.1.2 64 bit=0D=0A*=09Same thing if=
DomU is also 2.6.32.46=0D=0A*=09DomU owns two PCI cards (DVB-C) that o D=
MA=0D=0A*=09Machine has 8GB, Dom0 pinned at 512MB=0D=0A=0D=0A=C2=A0=0D=0A=
As compared to 2.6.34 Kernel with backported patches, the load on the Dom=
U is at least twice as high. It=0D=0A=0D=0Awill be "close to normal" if I=
reduce the memory used to 4GB.=0D=0A=0D=0A=C2=A0=0D=0AAs you can see fro=
m the attachment, you once had an idea. So should we try to find somethin=
g...=3F=0D=0A=0D=0A=C2=A0=0D=0ACarsten.=0D=0A=C2=A0=0D=0A-----Urspr=C3=BC=
ngliche Nachricht-----=0D=0AAn:konrad.wilk ;=20=0D=
=0ACC:linux ; xen-devel ;=20=0D=0AVon:Carsten Schiers =0D=0AGesendet:Mi 2=
9.06.2011 23:17=0D=0ABetreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load=
increase after memory upgrade=3F=0D=0A> Lets first do the c) experiment =
as that will likely explain your load average increase.=0D=0A...=0D=0A> >=
c). If you want to see if the fault here lies in the bounce buffer=20=0D=0A=
> being used more=0D=0A> >often in the DomU b/c you have 8GB of memory no=
w and you end up using=20=0D=0A> more pages=0D=0A> >past 4GB (in DomU), I=
can cook up a patch to figure this out. But an=20=0D=0A> easier way is=0D=
=0A> >to just do (on the Xen hypervisor line): mem=3D4G and that will mak=
e=20=0D=0A> think you only have=0D=0A> >4GB of physical RAM. =C2=A0If the=
load comes back to the normal "amount"=20=0D=0A> then the likely=0D=0A> =
>culprit is that and we can think on how to fix this.=0D=0A=0D=0AYou are =
on the right track. Load was going down to "normal" 10% when reducing=0D=0A=
Xen to 4GB by the parameter. Load seems to be still a little, little bit =
lower=0D=0Awith Xenified Kernel (8-9%), but this is drastically lower tha=
n the 20% we had=0D=0Abefore.=0D=0A
--=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
=0A=0A =0A =0A Load increase=
after memory upgrade (part2)=0A =0A=0A=0AHello again, I =
would like to come back to that thing...sorry that I did not have the tim=
e up to now.
We (now) speak about
=
- Xen 4.1.2
- Dom0 is Jeremy's 2.6.32.46 64 bit
- DomU =
in question is now 3.1.2 64 bit
- Same thing if DomU is also 2.6.32=
=2E46
- DomU owns two PCI cards (DVB-C) that o DMA
- Machine =
has 8GB, Dom0 pinned at 512MB
As compared to 2.6=
=2E34 Kernel with backported patches, the load on the DomU is at least tw=
ice as high. It
will be "close to normal" if I reduce the=
memory used to 4GB.
As you can see from the attachmen=
t, you once had an idea. So should we try to find something...=3F
&=
nbsp;
Carsten.
-----Ursprünglic=
he Nachricht-----
An:=09konrad.wilk <konrad.wilk=
@oracle.com>;
CC:=09linux <linux@eikelenboom=
=2Eit>; xen-devel <xen-devel@lists.xensource.com>;
Von:=09Carsten Schiers <carsten@schiers.de>
=
Gesendet:=09Mi 29.06.2011 23:17
Betreff:=09=
AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrad=
e=3F
> Lets first do the c) experiment as that will likely explai=
n your load average increase.
...
> >c). If you want to s=
ee if the fault here lies in the bounce buffer
> being used more=
> >often in the DomU b/c you have 8GB of memory now and you e=
nd up using
> more pages
> >past 4GB (in DomU), I can=
cook up a patch to figure this out. But an
> easier way is
> >to just do (on the Xen hypervisor line): mem=3D4G and that will=
make
> think you only have
> >4GB of physical RAM. &=
nbsp;If the load comes back to the normal "amount"
> t=
hen the likely
> >culprit is that and we can think on how to f=
ix this.
You are on the right track. Load was going down to &q=
uot;normal" 10% when reducing
Xen to 4GB by the parameter. Load=
seems to be still a little, little bit lower
with Xenified Kernel (=
8-9%), but this is drastically lower than the 20% we had
before.
=0A=0A
--=_YxzPBjBTzpUBlSYZQ4vSJPEqrKxiuQBmiORB-kDfPBPw5Qac--
--===============5279143288043207915==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
--===============5279143288043207915==--
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Fri, 25 Nov 2011 14:42:33 -0400
Message-ID: <20111125184233.GB26841@andromeda.dapyr.net>
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
Content-Disposition: inline
In-Reply-To:
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Carsten Schiers
Cc: xen-devel , "konrad.wilk"
List-Id: xen-devel@lists.xenproject.org
On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote:
> Hello again, I would like to come back to that thing...sorry that I did not have the time up to now.
>
> ??
> We (now) speak about
>
> ??
> * Xen 4.1.2
> * Dom0 is Jeremy's 2.6.32.46 64 bit
> * DomU in question is now 3.1.2 64 bit
> * Same thing if DomU is also 2.6.32.46
> * DomU owns two PCI cards (DVB-C) that o DMA
> * Machine has 8GB, Dom0 pinned at 512MB
>
> ??
> As compared to 2.6.34 Kernel with backported patches, the load on the DomU is at least twice as high. It
>
> will be "close to normal" if I reduce the memory used to 4GB.
That is in the dom0 or just in general on the machine?
>
> ??
> As you can see from the attachment, you once had an idea. So should we try to find something...?
I think that was to instrument swiotlb to give an idea of how
often it is called and basically have a matrix of its load. And
from there figure out if the issue is that:
1). The drivers allocoate/bounce/deallocate buffers on every interrupt
(bad, driver should be using some form of dma pool and most of the
ivtv do that)
2). The buffers allocated to the drivers are above the 4GB and we end
up bouncing it needlessly. That can happen if the dom0 has most of
the precious memory under 4GB. However, that is usually not the case
as the domain isusually allocated from the top of the memory. The
fix for that was to set dom0_mem=max:XX. .. but with Dom0 kernels
before 3.1, the parameter would be ignored, so you had to use
'mem=XX' on the Linux command line as well.
3). Where did you get the load values? Was it dom0? or domU?
>
> ??
> Carsten.
> ??
> -----Urspr??ngliche Nachricht-----
> An:konrad.wilk ;
> CC:linux ; xen-devel ;
> Von:Carsten Schiers
> Gesendet:Mi 29.06.2011 23:17
> Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrade?
> > Lets first do the c) experiment as that will likely explain your load average increase.
> ...
> > >c). If you want to see if the fault here lies in the bounce buffer
> > being used more
> > >often in the DomU b/c you have 8GB of memory now and you end up using
> > more pages
> > >past 4GB (in DomU), I can cook up a patch to figure this out. But an
> > easier way is
> > >to just do (on the Xen hypervisor line): mem=4G and that will make
> > think you only have
> > >4GB of physical RAM. ??If the load comes back to the normal "amount"
> > then the likely
> > >culprit is that and we can think on how to fix this.
>
> You are on the right track. Load was going down to "normal" 10% when reducing
> Xen to 4GB by the parameter. Load seems to be still a little, little bit lower
> with Xenified Kernel (8-9%), but this is drastically lower than the 20% we had
> before.
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?iso-8859-1?Q?Carsten_Schiers?=
Subject: Re:
=?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?=
=?iso-8859-1?q?part2=29?=
Date: Fri, 25 Nov 2011 23:11:55 +0100
Message-ID:
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Return-path:
In-Reply-To: <20111125184233.GB26841@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?konrad=2Ewilk?=
List-Id: xen-devel@lists.xenproject.org
I got the values in DomU. I will have
- aprox. 5% load in DomU with 2.6.34 Xenified Kernel
- aprox. 15% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with one =
card attached
- aprox. 30% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with two =
cards attached
I looked through my old mails from you and you explained already the necess=
ity of double
bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: w=
hy does the
Xenified kernel not have this kind of issue?
The driver in question is nearly identical between the two kernel versions.=
It is in
Drivers/media/dvb/ttpci by the way and when I understood the code right, th=
e allo in =
question is:
/* allocate and init buffers */
av7110->debi_virt =3D pci_alloc_consistent(pdev, 8192, &av7110->deb=
i_bus);
if (!av7110->debi_virt)
goto err_saa71466_vfree_4;
isn't it? I think the cards are constantly transferring the stream received=
through DMA. =
I have set dom0_mem=3D512M by the way, shall I change that in some way?
I can try out some things, if you want me to. But I have no idea what to do=
and where to
start, so I rely on your help...
Carsten.
-----Urspr=FCngliche Nachricht-----
Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.=
xensource.com] Im Auftrag von Konrad Rzeszutek Wilk
Gesendet: Freitag, 25. November 2011 19:43
An: Carsten Schiers
Cc: xen-devel; konrad.wilk
Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2)
On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote:
> Hello again, I would like to come back to that thing...sorry that I did n=
ot have the time up to now.
> =
> ??
> We (now) speak about
> =
> ??
> * Xen 4.1.2
> * Dom0 is Jeremy's 2.6.32.46 64 bit
> * DomU in question is now 3.1.2 64 bit
> * Same thing if DomU is also 2.6.32.46
> * DomU owns two PCI cards (DVB-C) that o DMA
> * Machine has 8GB, Dom0 pinned at 512MB
> =
> ??
> As compared to 2.6.34 Kernel with backported patches, the load on the Dom=
U is at least twice as high. It
> =
> will be "close to normal" if I reduce the memory used to 4GB.
That is in the dom0 or just in general on the machine?
> =
> ??
> As you can see from the attachment, you once had an idea. So should we tr=
y to find something...?
I think that was to instrument swiotlb to give an idea of how
often it is called and basically have a matrix of its load. And
from there figure out if the issue is that:
1). The drivers allocoate/bounce/deallocate buffers on every interrupt
(bad, driver should be using some form of dma pool and most of the
ivtv do that)
2). The buffers allocated to the drivers are above the 4GB and we end
up bouncing it needlessly. That can happen if the dom0 has most of
the precious memory under 4GB. However, that is usually not the case
as the domain isusually allocated from the top of the memory. The
fix for that was to set dom0_mem=3Dmax:XX. .. but with Dom0 kernels
before 3.1, the parameter would be ignored, so you had to use
'mem=3DXX' on the Linux command line as well.
3). Where did you get the load values? Was it dom0? or domU?
> =
> ??
> Carsten.
> ??
> -----Urspr??ngliche Nachricht-----
> An:konrad.wilk ; =
> CC:linux ; xen-devel ; =
> Von:Carsten Schiers
> Gesendet:Mi 29.06.2011 23:17
> Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memor=
y upgrade?
> > Lets first do the c) experiment as that will likely explain your load a=
verage increase.
> ...
> > >c). If you want to see if the fault here lies in the bounce buffer =
> > being used more
> > >often in the DomU b/c you have 8GB of memory now and you end up using =
> > more pages
> > >past 4GB (in DomU), I can cook up a patch to figure this out. But an =
> > easier way is
> > >to just do (on the Xen hypervisor line): mem=3D4G and that will make =
> > think you only have
> > >4GB of physical RAM. ??If the load comes back to the normal "amount" =
> > then the likely
> > >culprit is that and we can think on how to fix this.
> =
> You are on the right track. Load was going down to "normal" 10% when redu=
cing
> Xen to 4GB by the parameter. Load seems to be still a little, little bit =
lower
> with Xenified Kernel (8-9%), but this is drastically lower than the 20% w=
e had
> before.
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?iso-8859-1?Q?Carsten_Schiers?=
Subject: Re:
=?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?=
=?iso-8859-1?q?part2=29?=
Date: Sat, 26 Nov 2011 10:14:08 +0100
Message-ID:
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Return-path:
In-Reply-To: <20111125184233.GB26841@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?konrad=2Ewilk?=
List-Id: xen-devel@lists.xenproject.org
To add (read from some munin statistics I made over the time):
- with load I mean the %CPU of xentop
- there is no change in CPU usage of the DomU or Dom0
- xenpm shows the core dedicated to that DomU is doing more work
Also I need to say that reduction to 4GB was performed by Xen parameter.
Carsten.
-----Urspr=FCngliche Nachricht-----
Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] =
Gesendet: Freitag, 25. November 2011 19:43
An: Carsten Schiers
Cc: konrad.wilk; xen-devel
Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2)
On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote:
> Hello again, I would like to come back to that thing...sorry that I did n=
ot have the time up to now.
> =
> ??
> We (now) speak about
> =
> ??
> * Xen 4.1.2
> * Dom0 is Jeremy's 2.6.32.46 64 bit
> * DomU in question is now 3.1.2 64 bit
> * Same thing if DomU is also 2.6.32.46
> * DomU owns two PCI cards (DVB-C) that o DMA
> * Machine has 8GB, Dom0 pinned at 512MB
> =
> ??
> As compared to 2.6.34 Kernel with backported patches, the load on the Dom=
U is at least twice as high. It
> =
> will be "close to normal" if I reduce the memory used to 4GB.
That is in the dom0 or just in general on the machine?
> =
> ??
> As you can see from the attachment, you once had an idea. So should we tr=
y to find something...?
I think that was to instrument swiotlb to give an idea of how
often it is called and basically have a matrix of its load. And
from there figure out if the issue is that:
1). The drivers allocoate/bounce/deallocate buffers on every interrupt
(bad, driver should be using some form of dma pool and most of the
ivtv do that)
2). The buffers allocated to the drivers are above the 4GB and we end
up bouncing it needlessly. That can happen if the dom0 has most of
the precious memory under 4GB. However, that is usually not the case
as the domain isusually allocated from the top of the memory. The
fix for that was to set dom0_mem=3Dmax:XX. .. but with Dom0 kernels
before 3.1, the parameter would be ignored, so you had to use
'mem=3DXX' on the Linux command line as well.
3). Where did you get the load values? Was it dom0? or domU?
> =
> ??
> Carsten.
> ??
> -----Urspr??ngliche Nachricht-----
> An:konrad.wilk ; =
> CC:linux ; xen-devel ; =
> Von:Carsten Schiers
> Gesendet:Mi 29.06.2011 23:17
> Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memor=
y upgrade?
> > Lets first do the c) experiment as that will likely explain your load a=
verage increase.
> ...
> > >c). If you want to see if the fault here lies in the bounce buffer =
> > being used more
> > >often in the DomU b/c you have 8GB of memory now and you end up using =
> > more pages
> > >past 4GB (in DomU), I can cook up a patch to figure this out. But an =
> > easier way is
> > >to just do (on the Xen hypervisor line): mem=3D4G and that will make =
> > think you only have
> > >4GB of physical RAM. ??If the load comes back to the normal "amount" =
> > then the likely
> > >culprit is that and we can think on how to fix this.
> =
> You are on the right track. Load was going down to "normal" 10% when redu=
cing
> Xen to 4GB by the parameter. Load seems to be still a little, little bit =
lower
> with Xenified Kernel (8-9%), but this is drastically lower than the 20% w=
e had
> before.
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Mon, 28 Nov 2011 11:28:29 -0400
Message-ID: <20111128152829.GC9655@andromeda.dapyr.net>
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
Content-Disposition: inline
In-Reply-To:
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Carsten Schiers , zhenzhong.duan@oracle.com, lersek@redhat.com
Cc: xen-devel , "konrad.wilk"
List-Id: xen-devel@lists.xenproject.org
On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote:
> I got the values in DomU. I will have
>
> - aprox. 5% load in DomU with 2.6.34 Xenified Kernel
> - aprox. 15% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with one card attached
> - aprox. 30% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with two cards attached
HA!
I just wonder if the issue is that the reporting of CPU spent is wrong.
Laszlo Ersek and Zhenzhong Duan have both reported a bug in the pvops
code when it came to account of CPU time.
>
> I looked through my old mails from you and you explained already the necessity of double
> bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the
> Xenified kernel not have this kind of issue?
That is a puzzle. It should not. The code is very much the same - both
use the generic SWIOTLB which has not changed for years.
>
> The driver in question is nearly identical between the two kernel versions. It is in
> Drivers/media/dvb/ttpci by the way and when I understood the code right, the allo in
> question is:
>
> /* allocate and init buffers */
> av7110->debi_virt = pci_alloc_consistent(pdev, 8192, &av7110->debi_bus);
Good. So it allocates it during init and uses it.
> if (!av7110->debi_virt)
> goto err_saa71466_vfree_4;
>
> isn't it? I think the cards are constantly transferring the stream received through DMA.
Yeah, and that memory is set aside for the life of the driver. So there
should be no bounce buffering happening (as it allocated the memory
below the 4GB mark).
>
> I have set dom0_mem=512M by the way, shall I change that in some way?
Does the reporting (CPU usage of DomU) change in any way with that?
>
> I can try out some things, if you want me to. But I have no idea what to do and where to
> start, so I rely on your help...
>
> Carsten.
>
> -----Urspr?ngliche Nachricht-----
> Von: xen-devel-bounces@lists.xensource.com [mailto:xen-devel-bounces@lists.xensource.com] Im Auftrag von Konrad Rzeszutek Wilk
> Gesendet: Freitag, 25. November 2011 19:43
> An: Carsten Schiers
> Cc: xen-devel; konrad.wilk
> Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2)
>
> On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote:
> > Hello again, I would like to come back to that thing...sorry that I did not have the time up to now.
> >
> > ??
> > We (now) speak about
> >
> > ??
> > * Xen 4.1.2
> > * Dom0 is Jeremy's 2.6.32.46 64 bit
> > * DomU in question is now 3.1.2 64 bit
> > * Same thing if DomU is also 2.6.32.46
> > * DomU owns two PCI cards (DVB-C) that o DMA
> > * Machine has 8GB, Dom0 pinned at 512MB
> >
> > ??
> > As compared to 2.6.34 Kernel with backported patches, the load on the DomU is at least twice as high. It
> >
> > will be "close to normal" if I reduce the memory used to 4GB.
>
> That is in the dom0 or just in general on the machine?
> >
> > ??
> > As you can see from the attachment, you once had an idea. So should we try to find something...?
>
> I think that was to instrument swiotlb to give an idea of how
> often it is called and basically have a matrix of its load. And
> from there figure out if the issue is that:
>
> 1). The drivers allocoate/bounce/deallocate buffers on every interrupt
> (bad, driver should be using some form of dma pool and most of the
> ivtv do that)
>
> 2). The buffers allocated to the drivers are above the 4GB and we end
> up bouncing it needlessly. That can happen if the dom0 has most of
> the precious memory under 4GB. However, that is usually not the case
> as the domain isusually allocated from the top of the memory. The
> fix for that was to set dom0_mem=max:XX. .. but with Dom0 kernels
> before 3.1, the parameter would be ignored, so you had to use
> 'mem=XX' on the Linux command line as well.
>
> 3). Where did you get the load values? Was it dom0? or domU?
>
>
>
> >
> > ??
> > Carsten.
> > ??
> > -----Urspr??ngliche Nachricht-----
> > An:konrad.wilk ;
> > CC:linux ; xen-devel ;
> > Von:Carsten Schiers
> > Gesendet:Mi 29.06.2011 23:17
> > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrade?
> > > Lets first do the c) experiment as that will likely explain your load average increase.
> > ...
> > > >c). If you want to see if the fault here lies in the bounce buffer
> > > being used more
> > > >often in the DomU b/c you have 8GB of memory now and you end up using
> > > more pages
> > > >past 4GB (in DomU), I can cook up a patch to figure this out. But an
> > > easier way is
> > > >to just do (on the Xen hypervisor line): mem=4G and that will make
> > > think you only have
> > > >4GB of physical RAM. ??If the load comes back to the normal "amount"
> > > then the likely
> > > >culprit is that and we can think on how to fix this.
> >
> > You are on the right track. Load was going down to "normal" 10% when reducing
> > Xen to 4GB by the parameter. Load seems to be still a little, little bit lower
> > with Xenified Kernel (8-9%), but this is drastically lower than the 20% we had
> > before.
>
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xensource.com
> > http://lists.xensource.com/xen-devel
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Mon, 28 Nov 2011 11:30:27 -0400
Message-ID: <20111128153027.GD9655@andromeda.dapyr.net>
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
Content-Disposition: inline
In-Reply-To:
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Carsten Schiers
Cc: xen-devel , "konrad.wilk"
List-Id: xen-devel@lists.xenproject.org
On Sat, Nov 26, 2011 at 10:14:08AM +0100, Carsten Schiers wrote:
> To add (read from some munin statistics I made over the time):
>
> - with load I mean the %CPU of xentop
> - there is no change in CPU usage of the DomU or Dom0
Uhh, which matrix are using for that? CPU usage...? This is if you
change the DomU or the amount of memory the guest has? This is not
the load number (xentop value)?
> - xenpm shows the core dedicated to that DomU is doing more work
>
> Also I need to say that reduction to 4GB was performed by Xen parameter.
>
> Carsten.
>
>
> -----Urspr?ngliche Nachricht-----
> Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org]
> Gesendet: Freitag, 25. November 2011 19:43
> An: Carsten Schiers
> Cc: konrad.wilk; xen-devel
> Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2)
>
> On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote:
> > Hello again, I would like to come back to that thing...sorry that I did not have the time up to now.
> >
> > ??
> > We (now) speak about
> >
> > ??
> > * Xen 4.1.2
> > * Dom0 is Jeremy's 2.6.32.46 64 bit
> > * DomU in question is now 3.1.2 64 bit
> > * Same thing if DomU is also 2.6.32.46
> > * DomU owns two PCI cards (DVB-C) that o DMA
> > * Machine has 8GB, Dom0 pinned at 512MB
> >
> > ??
> > As compared to 2.6.34 Kernel with backported patches, the load on the DomU is at least twice as high. It
> >
> > will be "close to normal" if I reduce the memory used to 4GB.
>
> That is in the dom0 or just in general on the machine?
> >
> > ??
> > As you can see from the attachment, you once had an idea. So should we try to find something...?
>
> I think that was to instrument swiotlb to give an idea of how
> often it is called and basically have a matrix of its load. And
> from there figure out if the issue is that:
>
> 1). The drivers allocoate/bounce/deallocate buffers on every interrupt
> (bad, driver should be using some form of dma pool and most of the
> ivtv do that)
>
> 2). The buffers allocated to the drivers are above the 4GB and we end
> up bouncing it needlessly. That can happen if the dom0 has most of
> the precious memory under 4GB. However, that is usually not the case
> as the domain isusually allocated from the top of the memory. The
> fix for that was to set dom0_mem=max:XX. .. but with Dom0 kernels
> before 3.1, the parameter would be ignored, so you had to use
> 'mem=XX' on the Linux command line as well.
>
> 3). Where did you get the load values? Was it dom0? or domU?
>
>
>
> >
> > ??
> > Carsten.
> > ??
> > -----Urspr??ngliche Nachricht-----
> > An:konrad.wilk ;
> > CC:linux ; xen-devel ;
> > Von:Carsten Schiers
> > Gesendet:Mi 29.06.2011 23:17
> > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: Load increase after memory upgrade?
> > > Lets first do the c) experiment as that will likely explain your load average increase.
> > ...
> > > >c). If you want to see if the fault here lies in the bounce buffer
> > > being used more
> > > >often in the DomU b/c you have 8GB of memory now and you end up using
> > > more pages
> > > >past 4GB (in DomU), I can cook up a patch to figure this out. But an
> > > easier way is
> > > >to just do (on the Xen hypervisor line): mem=4G and that will make
> > > think you only have
> > > >4GB of physical RAM. ??If the load comes back to the normal "amount"
> > > then the likely
> > > >culprit is that and we can think on how to fix this.
> >
> > You are on the right track. Load was going down to "normal" 10% when reducing
> > Xen to 4GB by the parameter. Load seems to be still a little, little bit lower
> > with Xenified Kernel (8-9%), but this is drastically lower than the 20% we had
> > before.
>
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xensource.com
> > http://lists.xensource.com/xen-devel
>
>
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Ian Campbell
Subject: Re: Load increase after memory upgrade (part2)
Date: Mon, 28 Nov 2011 15:40:13 +0000
Message-ID: <1322494816.20646.14.camel@zakaz.uk.xensource.com>
References:
<20111128152829.GC9655@andromeda.dapyr.net>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
In-Reply-To: <20111128152829.GC9655@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Konrad Rzeszutek Wilk
Cc: "lersek@redhat.com" , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "konrad.wilk"
List-Id: xen-devel@lists.xenproject.org
On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote:
> On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote:
> > I looked through my old mails from you and you explained already the necessity of double
> > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the
> > Xenified kernel not have this kind of issue?
>
> That is a puzzle. It should not. The code is very much the same - both
> use the generic SWIOTLB which has not changed for years.
The swiotlb-xen used by classic-xen kernels (which I assume is what
Carsten means by "Xenified") isn't exactly the same as the stuff in
mainline Linux, it's been heavily refactored for one thing. It's not
impossible that mainline is bouncing something it doesn't really need
to.
It's also possible that the dma mask of the device is different/wrong in
mainline leading to such additional bouncing.
I guess it's also possible that the classic-Xen kernels are playing fast
and loose by not bouncing something they should (although if so they
appear to be getting away with it...) or that there is some difference
which really means mainline needs to bounce while classic-Xen doesn't.
Ian.
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?utf-8?Q?Carsten_Schiers?=
Subject: Re: Load increase after memory upgrade (part2)
Date: Mon, 28 Nov 2011 16:52:17 +0100
Message-ID:
References: <20111128152829.GC9655@andromeda.dapyr.net>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="===============7373466658977440381=="
Return-path:
In-Reply-To: <20111128152829.GC9655@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?utf-8?Q?xen-devel?= , =?utf-8?Q?konrad=2Ewilk?=
List-Id: xen-devel@lists.xenproject.org
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--===============7373466658977440381==
Content-Type: multipart/alternative;
boundary="=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I"
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hi,=0D=0A=0D=0A=C2=A0=0D=0Alet me try to explain a bit more. Here you see=
the output of my xentop munin graph for a=0D=0A=0D=0Aweek. Only take a l=
ook at the bluish buckle. Notice the small step in front=3F So it's the C=
PU=0D=0A=0D=0Apermille used by the DomU that owns the cards. The small bu=
ckle is when I only put in=20=0D=0A=0D=0Aone PCI card. Afterwards it's co=
nstantly noticable higher load. See that Dom0 (green) is=20=0D=0A=0D=0Ano=
t impacted. I am back to the Xenified kernel, as you can see.=0D=0A=0D=0A=
=C2=A0=0D=0A=0D=0A=C2=A0=0D=0AIn the next picture you see the output of x=
enpm visualized. So this might be an indicator that=0D=0A=0D=0Arealy some=
thing happens. It's only the core that I dedicated to that DomU. I have a=
three-core=0D=0A=0D=0AAMD CPU by the way:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=C2=
=A0=0D=0AIn CPU usage of the Dom0, there is nothing to see:=0D=0A=0D=0A=C2=
=A0=0D=0A=0D=0A=C2=A0=0D=0AIn CPU usage of the DomU, there is also not mu=
ch to see, eventually a very slight change of=0D=0A=0D=0Amix:=0D=0A=0D=0A=
=C2=A0=0D=0A=0D=0A=C2=A0=0D=0AThere is a slight increase in sleaping jobs=
at the time slot in question, I guess nothing we ca=0D=0A=0D=0Adirectly =
map to the issue:=0D=0A=0D=0A=C2=A0=0D=0A=0D=0A=C2=A0=0D=0AIf you need ot=
her charts, I can try to produce them.=20=0D=0A=0D=0A=C2=A0=0D=0ABR,=0D=0A=
Carsten.=0D=0A=0D=0A=C2=A0=0D=0A-----Urspr=C3=BCngliche Nachricht-----=0D=
=0AAn:Carsten Schiers ; zhenzhong.duan@oracle.com; le=
rsek@redhat.com;=20=0D=0ACC:xen-devel ; ko=
nrad.wilk ;=20=0D=0AVon:Konrad Rzeszutek Wilk =0D=0AGesendet:Mo 28.11.2011 16:33=0D=0ABetreff:Re: [Xen-=
devel] Load increase after memory upgrade (part2)=0D=0AOn Fri, Nov 25, 20=
11 at 11:11:55PM +0100, Carsten Schiers wrote:=0D=0A> I got the values in=
DomU. I will have=0D=0A>=20=0D=0A> =C2=A0 - aprox. 5% load in DomU with =
2.6.34 Xenified Kernel=0D=0A> =C2=A0 - aprox. 15% load in DomU with 2.6.3=
2.46 Jeremy or 3.1.2 Kernel with one card attached=0D=0A> =C2=A0 - aprox.=
30% load in DomU with 2.6.32.46 Jeremy or 3.1.2 Kernel with two cards at=
tached=0D=0A=0D=0AHA!=0D=0A=0D=0AI just wonder if the issue is that the r=
eporting of CPU spent is wrong.=0D=0ALaszlo Ersek and Zhenzhong Duan have=
both reported a bug in the pvops=0D=0Acode when it came to account of CP=
U time.=0D=0A=0D=0A>=20=0D=0A> I looked through my old mails from you and=
you explained already the necessity of double=0D=0A> bounce buffering (P=
CI->below 4GB->above 4GB). What I don't understand is: why does the=0D=0A=
> Xenified kernel not have this kind of issue=3F=0D=0A=0D=0AThat is a puz=
zle. It should not. The code is very much the same - both=0D=0Ause the ge=
neric SWIOTLB which has not changed for years.=0D=0A>=20=0D=0A> The drive=
r in question is nearly identical between the two kernel versions. It is =
in=0D=0A> Drivers/media/dvb/ttpci by the way and when I understood the co=
de right, the allo in=20=0D=0A> question is:=0D=0A>=20=0D=0A> =C2=A0 =C2=A0=
=C2=A0 =C2=A0 /* allocate and init buffers */=0D=0A> =C2=A0 =C2=A0 =C2=A0=
=C2=A0 av7110->debi_virt =3D pci_alloc_consistent(pdev, 8192, &av7110->d=
ebi_bus);=0D=0A=0D=0AGood. So it allocates it during init and uses it.=0D=
=0A> =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (!av7110->debi_virt)=0D=0A> =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto err_saa71466_vfree_4;=0D=
=0A>=20=0D=0A> isn't it=3F I think the cards are constantly transferring =
the stream received through DMA.=20=0D=0A=0D=0AYeah, and that memory is s=
et aside for the life of the driver. So there=0D=0Ashould be no bounce bu=
ffering happening (as it allocated the memory=0D=0Abelow the 4GB mark).=0D=
=0A>=20=0D=0A> I have set dom0_mem=3D512M by the way, shall I change that=
in some way=3F=0D=0A=0D=0ADoes the reporting (CPU usage of DomU) change =
in any way with that=3F=0D=0A>=20=0D=0A> I can try out some things, if yo=
u want me to. But I have no idea what to do and where to=0D=0A> start, so=
I rely on your help...=0D=0A>=20=0D=0A> Carsten.=0D=0A>=20=0D=0A> -----U=
rspr=3Fngliche Nachricht-----=0D=0A> Von: xen-devel-bounces@lists.xensour=
ce.com [mailto:xen-devel-bounces@lists.xensource.com] Im Auftrag von Konr=
ad Rzeszutek Wilk=0D=0A> Gesendet: Freitag, 25. November 2011 19:43=0D=0A=
> An: Carsten Schiers=0D=0A> Cc: xen-devel; konrad.wilk=0D=0A> Betreff: R=
e: [Xen-devel] Load increase after memory upgrade (part2)=0D=0A>=20=0D=0A=
> On Thu, Nov 24, 2011 at 01:28:44PM +0100, Carsten Schiers wrote:=0D=0A>=
> Hello again, I would like to come back to that thing...sorry that I di=
d not have the time up to now.=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > We (n=
ow) speak about=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > *Xen 4.1.2=0D=0A> > =
*Dom0 is Jeremy's 2.6.32.46 64 bit=0D=0A> > *DomU in question is now 3.1.=
2 64 bit=0D=0A> > *Same thing if DomU is also 2.6.32.46=0D=0A> > *DomU ow=
ns two PCI cards (DVB-C) that o DMA=0D=0A> > *Machine has 8GB, Dom0 pinne=
d at 512MB=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > As compared to 2.6.34 Ker=
nel with backported patches, the load on the DomU is at least twice as hi=
gh. It=0D=0A> >=20=0D=0A> > will be "close to normal" if I reduce the mem=
ory used to 4GB.=0D=0A>=20=0D=0A> That is in the dom0 or just in general =
on the machine=3F=0D=0A> >=20=0D=0A> > =3F=3F=0D=0A> > As you can see fro=
m the attachment, you once had an idea. So should we try to find somethin=
g...=3F=0D=0A>=20=0D=0A> I think that was to instrument swiotlb to give a=
n idea of how=0D=0A> often it is called and basically have a matrix of it=
s load. And=0D=0A> from there figure out if the issue is that:=0D=0A>=20=0D=
=0A> =C2=A01). The drivers allocoate/bounce/deallocate buffers on every i=
nterrupt=0D=0A> =C2=A0 =C2=A0 (bad, driver should be using some form of d=
ma pool and most of the=0D=0A> =C2=A0 =C2=A0 ivtv do that)=0D=0A>=20=0D=0A=
> =C2=A02). The buffers allocated to the drivers are above the 4GB and we=
end=0D=0A> =C2=A0 =C2=A0 up bouncing it needlessly. That can happen if t=
he dom0 has most of=0D=0A> =C2=A0 =C2=A0 the precious memory under 4GB. H=
owever, that is usually not the case=0D=0A> =C2=A0 =C2=A0 as the domain i=
susually allocated from the top of the memory. The=0D=0A> =C2=A0 =C2=A0 f=
ix for that was to set dom0_mem=3Dmax:XX. .. but with Dom0 kernels=0D=0A>=
=C2=A0 =C2=A0 before 3.1, the parameter would be ignored, so you had to =
use=0D=0A> =C2=A0 =C2=A0 'mem=3DXX' on the Linux command line as well.=0D=
=0A>=20=0D=0A> =C2=A03). Where did you get the load values=3F Was it dom0=
=3F or domU=3F=0D=0A>=20=0D=0A>=20=0D=0A>=20=0D=0A> >=20=0D=0A> > =3F=3F=0D=
=0A> > Carsten.=0D=0A> > =3F=3F=0D=0A> > -----Urspr=3F=3Fngliche Nachrich=
t-----=0D=0A> > An:konrad.wilk ;=20=0D=0A> > CC:l=
inux ; xen-devel ;=20=
=0D=0A> > Von:Carsten Schiers =0D=0A> > Gesendet:Mi 2=
9.06.2011 23:17=0D=0A> > Betreff:AW: Re: Re: Re: AW: Re: [Xen-devel] AW: =
Load increase after memory upgrade=3F=0D=0A> > > Lets first do the c) exp=
eriment as that will likely explain your load average increase.=0D=0A> > =
=2E..=0D=0A> > > >c). If you want to see if the fault here lies in the bo=
unce buffer=20=0D=0A> > > being used more=0D=0A> > > >often in the DomU b=
/c you have 8GB of memory now and you end up using=20=0D=0A> > > more pag=
es=0D=0A> > > >past 4GB (in DomU), I can cook up a patch to figure this o=
ut. But an=20=0D=0A> > > easier way is=0D=0A> > > >to just do (on the Xen=
hypervisor line): mem=3D4G and that will make=20=0D=0A> > > think you on=
ly have=0D=0A> > > >4GB of physical RAM. =3F=3FIf the load comes back to =
the normal "amount"=20=0D=0A> > > then the likely=0D=0A> > > >culprit is =
that and we can think on how to fix this.=0D=0A> >=20=0D=0A> > You are on=
the right track. Load was going down to "normal" 10% when reducing=0D=0A=
> > Xen to 4GB by the parameter. Load seems to be still a little, little =
bit lower=0D=0A> > with Xenified Kernel (8-9%), but this is drastically l=
ower than the 20% we had=0D=0A> > before.=0D=0A>=20=0D=0A> > ____________=
___________________________________=0D=0A> > Xen-devel mailing list=0D=0A=
> > Xen-devel@lists.xensource.com=0D=0A> > http://lists.xensource.com/xen=
-devel=0D=0A>=20=0D=0A>=20=0D=0A> _______________________________________=
________=0D=0A> Xen-devel mailing list=0D=0A> Xen-devel@lists.xensource.c=
om=0D=0A> http://lists.xensource.com/xen-devel=0D=0A>=20=0D=0A=0D=0A_____=
__________________________________________=0D=0AXen-devel mailing list=0D=
=0AXen-devel@lists.xensource.com=0D=0Ahttp://lists.xensource.com/xen-deve=
l=0D=0A
--=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlv
bmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+PGh0bWw+
CjxoZWFkPgogIDxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iWmFyYWZhIFdlYkFj
Y2VzcyB2Ny4wLjItMjk0NzAiPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+QVc6IFtYZW4t
ZGV2ZWxdIExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5IHVwZ3JhZGUgKHBhcnQyKTwvdGl0
bGU+CiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgYm9keQ0KICAgICAgew0KICAg
ICAgICBmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIFNhbnMtU2VyaWYgISBpbXBvcnRh
bnQ7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgcGFkZGluZzogNXB4IDVw
eCA1cHggNXB4Ow0KICAgICAgICBtYXJnaW46IDBweDsNCiAgICAgICAgYm9yZGVyLXN0eWxl
OiBub25lOw0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOw0KICAgICAgfQ0K
DQogICAgICBwLCB1bCwgbGkNCiAgICAgIHsNCiAgICAgICAgbWFyZ2luLXRvcDogMHB4Ow0K
ICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7DQogICAgICB9DQogIDwvc3R5bGU+CjwvaGVh
ZD4KPGJvZHk+CjxwPkhpLDwvcD48cD4mbmJzcDs8L3A+PHA+bGV0IG1lIHRyeSB0byBleHBs
YWluIGEgYml0IG1vcmUuIEhlcmUgeW91IHNlZSB0aGUgb3V0cHV0IG9mIG15IHhlbnRvcCBt
dW5pbiBncmFwaCBmb3IgYTwvcD48cD53ZWVrLiBPbmx5IHRha2UgYSBsb29rIGF0IHRoZSBi
bHVpc2ggYnVja2xlLiBOb3RpY2UgdGhlIHNtYWxsIHN0ZXAgaW4gZnJvbnQ/IFNvIGl0JiMz
OTtzIHRoZSBDUFU8L3A+PHA+cGVybWlsbGUgdXNlZCBieSB0aGUgRG9tVSB0aGF0IG93bnMg
dGhlIGNhcmRzLiBUaGUgc21hbGwgYnVja2xlIGlzIHdoZW4gSSBvbmx5IHB1dCBpbiA8L3A+
PHA+b25lIFBDSSBjYXJkLiBBZnRlcndhcmRzIGl0JiMzOTtzIGNvbnN0YW50bHkgbm90aWNh
YmxlIGhpZ2hlciBsb2FkLiBTZWUgdGhhdCBEb20wIChncmVlbikgaXMgPC9wPjxwPm5vdCBp
bXBhY3RlZC4gSSBhbSBiYWNrIHRvIHRoZSBYZW5pZmllZCBrZXJuZWwsIGFzIHlvdSBjYW4g
c2VlLjwvcD48cD4mbmJzcDs8L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3Bu
ZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZFQUFBR0VDQUlBQUFDcHY0NVlB
QUFnQUVsRVFWUjRuTzI5ZjNSVTFiMzN2OE1rRUFKbVFpQ1dZRG9RTVNRd2t5QWRpajhlOWZI
YmRhdFdYYWdGTHZXcXZiMjFwYmY0STRCV3k3SUw1MUdxVDRVU2JUQmxsaFhTYUJETVRFS0NY
TFdJSkNwM0dSMm9UUUVSRTJoUmhKbE15SS85ejEzcitlTjgvOWpKenM3WjU1elpjMmJPelBu
eGVhMVpzMmJPZk00NW43Tm5uL2U4WjgrWnowWi9CUUFBQUd4QloyY255bllPQUFBQVFCcm83
T3pjdVhQbnFLWmpBQUFBd01yczNMa1ROQjBBQU1BbWdLWURBQURZQjlCMEFBQUErd0NhRGdB
QVlDVmFPTmhYUWRNQlFCbUVVTFpUU0FJelpHdUdISnpEeU1nSVVYUFFkTUFPR0NjZmRNdjhn
N1JzMWlETW9LZG15TUVoREEwTmZmcnBwNkZRNlB6NTg2MnRyZXhMb09uTzRyNzc3dnZwVDMv
S0x2bVAvL2lQKysrL1A1VnRJb1FRUWprNU9aZGRkbGxOVGMzNjlldlBuajJiV3BwcFJsRnJF
a3AyaWdxVllZRXpnNTZhSVFjbmNQTGt5WTZPanE2dXJ0T25UN2UydG43NjZhZnNxNkRwemlJ
YWpTNWF0R2puenAzazZhdXZ2dXIxZW1PeFdDcmJwR2R5TkJyOTZLT1Bmdm5MWDVhV2xwNDRj
U0xWWE5NSGFMcHpjbkFDNzcvLy92bno1OVZlQlUxM0hFZVBIdjNXdDc1MTdOaXhZOGVPelo0
OW03enZRME5ER3pac21EVnIxdFNwVTFlc1dISGh3Z1VTakJCNjhjVVhQUjVQWGw1ZVRVM05r
U05IK0EzeVovS1RUejc1b3gvOWlEenU3Ky8vOTMvLzk4c3V1K3l5eXk3N3lVOSswdC9mVDll
cXE2dWJPM2Z1NU1tVEZ5NWMrSmUvL0dYSGpoM3o1ODhuTy9yNDQ0OUoyTi8vL3ZjZi9PQUgw
NlpObXpKbHl2ZS8vLzB6Wjg3SWRxb3ZRN29RTWZCYjVoL3c4WW9aYW14V28wRVNIb2dHQ0tG
bm4zMjJwS1Nrb0tEZy92dnZqOGZqR09QcnI3OSsxNjVkTk9ia3laT3paODltNWFDOHZQeVRU
ejRoajNmczJFRWVmUExKSitYbDVWaTlWMmowRnZMZ2d3OCttRE5uenU5Kzk3dWtEZ0ZJQzZE
cFR1UlBmL3FUMSt2MWVyMk5qWTFreVc5Kzg1dnZmZTk3cDA2ZHVuRGh3bjMzM2Zlem4vMk1M
RWNJclZpeDRvc3Z2b2hHbzA4OTlaVGY3K2UzeGl2bXlaTW52L1d0YjVISGp6NzY2SzIzM25y
bXpKbSt2cjUvK1pkL3FhMnRwV3N0WDc3ODg4OC9qMGFqVHovOTlQVHAwKys1NXg3NjlMdmYv
UzRKcTZxcWV1dXR0Mkt4MlBuejU5ZXVYYnQ2OVdyWlR2VmxpTlY5dXNoNGVuMTkvVzIzM1Nh
WW9leXBSb01rUEJBTkVFSmtzMmZPbkxuMTFsdlhyVnVITVc1cmE2dXNyQndlSGlZeFAvN3hq
NTk1NWhsMnJaLy8vT2QxZFhVWTQxT25UazJmUHAybzg3WnQyOWFzV1lQVmU0VkdiOEVZdDdT
MHpKbzFhOCtlUFVubEQ0Z0QxNzBBQ2l4WnNtVHAwcVgwcWNmak9YYnNHSG5jMTlkMytlV1hr
OGNJb1hQbnpwSEgwV2cwTnplWDN4UXZlWmN1WGNyTHl5T1BTMHRMUC92c00vTDRyMy85NjV3
NWMraGEvL3puUCttV1pVOFZkeFNOUm1mTm1pWGJxYjRNY1FxYTN0SFJzWGp4WW1wT0UyWW9l
NnJSSUFrUFJBT0UwTi8rOWpmeStMUFBQcnZpaWl2SVk3L2YvK3FycjlLRjBXaVVYV3Z2M3Iw
clZxekFHRC96ekRPelpzM2F2bjA3eHZpSFAvemhtMisraWRWN2hVWnYrZjN2ZjE5YVd0cloy
WmxVOG9BTzRMb1hZSndkTzNaY2ZmWFZWMTk5OVovKzlDZXlKRGMzbHgwdXlNbkpJY3ZWaEVs
N0lmbU9UeDY3WEs2aG9TSHllSEJ3a0VxVjlwYnAwL2ZlZSsrNjY2NHJLQ2hRUzB3a3cwbVRK
dEVjQ0VORFE1TW1UZExlZ3VJdVB2MzAwL256NTdPL0ZpVE1VUFpVWDRQUWhleDRqdXdseGMz
dTJiT25vcUppYUdobzFhcFZXN1pza2ExMThlTEZiMy83MnhoanI5Y2JDb1d1dWVZYWpQRzN2
LzF0SXYxcXZVS2p0OHliTisreHh4N2owd1BTQzF6M0Fveno2YWVmbHBhVy92M3ZmKy9wNlNr
dExUMTY5Q2pHdUt5czdJc3Z2dUNEOVduNmswOCtlZSs5OTVMSHBhV2wxRC8rOWE5L0xTMHRG
ZGt5ZlRwbnpwekd4c2J6NTgrUGpJeDg4ODAzQ1UyMFlvWWVqK2UvLy91LzJTVWZmZlNSeCtQ
UjNnTC80TXlaTXhVVkZRY1BIbVRqRTJZb2U2cXZRUkxDK3ZTLy9lMXYxUDZQakl4NHZkN2Ey
bHFQeHpNd01NQ3ZlT09OTi83NXozOG1RejErdjMvUG5qMDMzWFFUZVVtdFYyajBsbE9uVGwx
NTVaV2JOMjlPS25rZ0tlQzZGMkNjYURTNmNPSENOOTU0Z3p4OS9mWFh5WFV2VHovOTlLMjMz
dHJUMHpNNE9Qanh4eCtUNytNNFNVMG4xNzJzWGJ1V3ZlN2w0WWNmcHVPODMvLys5eDk1NUJH
UkxkT25NMmJNMkxOblR6d2UvL3ZmLzc1aXhRcDltdjUvL3MvL1diSmt5ZnZ2dngrUHgrUHgr
S0ZEaHhZdlhreDF4KzEyMDVFRXhTM1RCOS85N25mcEQ0a1V0UXpWTnF1dlFSS0NFUHJCRDM1
dzl1elpzMmZQM25iYmJYU1lIbVBjMk5pSUVIcjU1WmNWVjN6bW1XZm16SmxETFB3TEw3eHd4
UlZYUFB2c3MrUWx0VjZoM1Z0T256NWRVVkVSQ0FTU3loOFFCNjU3QWNhNTc3NzdxSWdRZnZu
TFg5NTMzMzNEdzhPQlFJQmNkTEZvMFNMNjI2bjRnRUJPVHM2MGFkT3FxNnZYclZ0SHIwN0JH
TWRpc1FjZWVHRDY5T25UcDA5LzRJRUg2SFdUZ3ByK3hodHZ6SnMzeitWeWZmdmIzOTZ5Wllz
K1RSOFpHZG15Wll2WDY1MHlaY3FVS1ZPOFh1L3ZmLzk3K3VxbVRadW1UWnVtc1dYMkFZdDJo
bXFiMWRjZ0NVSE1kUy8zM1hjZnZad0dZL3phYTYvTm56OS9jSEJRY2NValI0N2s1dWFTdnhT
Y09YTW1OemVYZnFkUjZ4VUplMHR2YjI5bFplVnZmdk9icEE0QlNBdWc2UUJnYzI2Ly9YYjZq
d1RBQnNCMUx3RGdVSWFIaCt2cjY2dXFxdWpsaklBTmtJazRhRG9BT0FXRWtNZmpnU3NMYlVa
cmErdWxTNWZJNDB1WExzRjFMd0FBQUJhbXM3UHprMDgrR1J3Y0hCd2MvT1NUVDdxNnV0aFhR
ZE1CQUFDc1JIOS8vK0hEaDhQaGNEZ2M3dXpzWkg4UHg2RHBBQUFBbGdiRzB3RUFBT3dEYURv
QUFJQ0ZjZEMxakQwSER2UWNPSkR0TEFBQUFES0hiVFY5TUI3ZmR0MTEyNjY3YmpBZXozWXVB
QUFBR2NLMm12NlgzLzB1NFBFRVBKNi9RQ1YrQUFDY2lrMDAvZnlwVTVzcktvaW1iNjZvT0gv
cVZMWXpBZ0FBTUlSWUxOYloyVW12WlpUTlBaa2RUVzlxYXFxcXFzckx5NnV1cnU3bzZNQVlm
L0hGRjlkZWUrM2t5Wk92dmZaYVVzWlRaTW40Qmg5NGdBZzZ1VFU5OEVER2pnVUFBQ0NUSER4
NDhOaXhZNWN1WGJwMDZkTFJvMGRseForem8rbjMzSE5QZDNkM2YzLy85dTNiWjg2Y2lURmV1
WExsaGcwYit2djdOMnpZc0dyVktzRWxNcDU0NGdueTRQVHAweUpwWElwRVJNSkV0aWE0UjVF
d3lFbzhETElTRHpOblZsZ3NzVFR1MFp4WkpVVW9GS0lGZklhSGgwT2hFUHRxbHNkZVRwdzRR
YVltbURselpsOWZIOGE0cjYrUHFMeklFaGxVMHovODhFT1J2WCt6ZmJ0SW1NaldCUGNvRWda
WmlZZEJWdUpoNXN3S2l5V1d4ajJhTTZ1a01LTlBKL1QyOWk1WnNtVHYzcjBZNDBtVEpwRlBu
cUdoSVpmTEpiaUVNdlRQZjM3ejBrdVAvL3puK1BCaFNaSUdEeDZVSklrODFyai9mN0ZZd2hq
QnJRbnU4WC8rNTM4Z0s4Z0tzbUx2aHpvNk1ybEg4MlQxLytMeGIxNTZhYUM3TzFubGpFYWpw
aHRQeHhoM2RuWjZQSjVYWG5tRlBDMHVMcFo1Y0pFbE1wNTQ0Z2xKa2lSSjZ1M3RsUVRBWFYw
aVlTSmJFOXlqU0Joa0pSNEdXWW1IbVRNclNTeXhOTzdSVkZrWklhM1owZlQ2K3ZxU2twSjkr
L2JSSlN0V3JLQmo1V1FxTEpFbE1xaW1Bd0FBbUI5OSttbkc2MTVrYzRCZHZIang4ODgvWDda
c1dWNWUzalhYWEhQcTFDbU1zY2dTR2VEVGRjUUloa0ZXNG1HUVZWSmg0Tk9UeGJ6ajZXa0hm
RG9BQUJaQ245Q1orcnFYOUFJK1hVZU1ZQmhrSlI0R1dTVVZCajQ5V2NDbkF3QUFtQkY5UW1m
UzYxNk1BSHk2amhqQk1NaEtQQXl5U2lvTWZIcDZzYWVtQXdBQW1COTlRdWVJK3VtWExsMDZj
ZUxFVDMvNlUwbVMrdnI2ZW50NysvcjZ5R09OK3hNZEhRbGpCTGNtdU1jalI0NUFWcEFWWk1Y
ZTQ2NnVUTzdSUEZsOThjVVhKMDZjMEZFNVFDYmlNbXlpNlFUdzZRQUFXQWg5UXVkRVRZZnhk
UEVZd1RESVNqd01za29xRE1iVGs4V0ptZzRBQUdCK2pKQkJlMm82K0hUeEdNRXd5RW84RExK
S0tneDhlbnF4cDZZREFBQ1lIeDBxOTlaYmIzVjNkL2YxOVEwTkRTa0daTG5lQzEzUzNOeGNY
bDd1Y3JubXpadlgzTnlNazV6bmlBQStYVWVNWUZqR3NrSjF5SVJaSlJVR1dTVVZCajQ5S2I3
NTVwdWVucDVEaHc2MXRyWWVPblNvcDZmbm0yKytZUU95NmROWlRTOHNMQXlIdy9GNFBCUUt1
ZDF1ckhlZUk1RW1Cc3dNMVhRQXNEMnA2T2ZnNEdCZlgxOTNkL2RiYjczRkxqZUxwdnQ4dm5B
NFBEQXdFQXFGYW1wcXNONTVqa2hMZ1U4WGp4RU15MHhXcUE0RkFnR3paWlZzR0dTVlZCajQ5
UFJpRmswL2ZQaHdZV0VoUXFpd3NQRHc0Y000dFhtTzRONmk5NmdPZFpSdE1rTW1jQS8zUnQv
cm51ZElHN05vK3Z6NTgrbll5MVZYWFlWaG5xTjBiTXB5V2FFNkZFUkJzMldWYkJoa2xWUVkr
UFQwWWhaTkx5b3FvbU12TTJiTXdERFBrU01KQkFMK01VMEhBTnVURmlFMVJiMFgyVHhIR09P
bXBpYVB4K055dWViT25mdjY2NjlqbU9jb0hadXlYRlpCRlBTRFQwOHlSakRNbkZsSjROTlR4
aFNhYmhEZzA2MU9FQVdsQ0Z6M0FqZ0ZmVUxuaUxxTUJQRHBPbUlFd3pLVGxSOEZwUUJjbjU1
Y2pHQ1lPYk9Td0tlbmpDTTBIYkFvcktackE1ZXhBellnTGJybkNFMEhueTRlSXhobU5wOU9M
bzl4Y2xzbEcyYk9yQ1R3NmVuR0pwb3VteE1EN3ExNnY5a3JCWkJJNUYzZWh1eG5DL2R3bjhL
OTdqa3hZckVZekVlcWpEbWRpNk96Q2lCQm4rNEhuNTVrbURtemtzQ25KOC9CZ3dlUEhUdDI2
ZEtsUzVjdUhUMTY5T0RCZyt5cjl0UjB3S293bXE0TlhNWU8yQUI5UWhjS2hjZy82akhHdzhQ
RG9WQ0lmZFdlbWc0K1hUeEdNQ3hEL3lOZHMxLzB1cGNBeWxoV3lZWkJWa21GZ1U5UEZ2RHBn
R1ZnTlQwQmdtRUFZR0wwQ1YwMEdvWHhkSlVHTmFWemNYSlc0Tk4xeEFpR21UTXJDWHg2dWpI
TG5CakR3OE1iTjI0c0xTM055Y2toeTFPWkV3T3dLT0RUQVVlaFR6L04rejlTVnRNM2JkcTBZ
TUdDN3U3dWtaRVJzaVNWT1RIQXA0dkhDSWFCVHhjUGc2eVNDZ09mbml4RXhLbVVtMVRUUFI2
UDdOZmJWT2JFQUN3SytIVEFVZWhUem5BNGZPSENoVkFvOU0wMzMzenp6VGR0Ylczc3EyYlJk
SmZMOWRCREQwMmRPdFhqOGV6WnN3ZW5OaWRHMzk2OWtrQk5ldHpWSlZLOVhtUnJnbnZzN2Uy
RnJEUmkwSnI5K05FeW9hd0N5T0Z0Wlkrc0pFbnEvK01mTTdsSDgyU2xlMDZNVHo3NXBMVzE5
ZVRKazIrOTlWWTRIRDUrL0RqN3FsazBmZWJNbWFGUWlNeUpNV3ZXTEp6YW5CaUFSUUdmRGpn
S0kzVFZMSnErYXRXcVVDaEU1c1FvS1NuQnFjMkpBZVBwNGpHQ1lUQ2VMaDRHV1NVVkJ1UHB5
V0xHMzBqNU9URk9uejU5d3cwMzVPWGxsWmVYazRIMVZPYkVBQ3dLK0hUQVVSaWhybkI5ZW1M
QVQwbmcwNU1KZzZ5U0NnT2ZubDdzcWVtQVJRR2ZEamdLSTJUUW5wb09QbDA4UmpBTWZMcDRH
R1NWVkJqNDlQUmlUMDBITEFyNGRIRmdwaWNib0Uvb29INjZlb09hMHJrNE9Tdnc2ZUl4Z1VE
QWhGbnBDQU9mbml5T3FNc0k4eHpaNDk2N1lZL2dQRWQ5bTcxWnp6Ykw5MTdIdDRERjczWFBj
d1QxMDFVeHAzTnhjbGJnMDVPSVFVZ29MTU5aSlI4R1BqMVpIT0hUQ1RDZWJuVmdQRDBKa09O
YndQcm9FenFvbjY3ZW9LWjBMazdPQ254NkVqSGcwM1dGbVNvckkyVFFucG9PV0JUdzZVa0FQ
dDM2NkJNNk05WUdNQWp3NlRwaUJNUEFwNHVIZ1U5UEtneDhlcktZc1g0NlA4OFJZZVBHalhR
aHpIUGtRRmhOUjNWSTZ4SnM4T25nMDYyUFB2MDBvNllUWkpyZTFkVTFlL1pzdWhEbU9VcDlV
NWJMaXRYMGQzdDlhcHFPNmhENGRQRHArc0pNbFpVKzViU0dwdmYzOTN1OTNnTUhEdENGTU0r
UkEyRTEzWStDUVJSVURodlRkRWNEUHQzNnBFVklUYXJwYTlldWZmNzU1OW1GTU0rUkE3Tmk1
em02eTlld3ZteVRZbVRQNFRLWTUwaEN5SXhaSmRsV0VzeHpsUHc4UnpKTXF1azVPVG15aXVv
d3o1RURrZmwwdjRwUDk2TWcrSFR3NlRaQW4zS2E5N29YL2pkU2RpSE1jNVQ2cGl5WDFZVHJY
amI3Wk1KTmg5ZXBwanU1clNRMC9odXlpYkpLUGd6RzAxUEVGSnJPejNQRXZrUWV3RHhIRG1U
Qzlla0IrYUE1SFY0SG55NUpFelFkc0NocGtWTlRhTHBCZ0UvWEVTTVlaZ2FmUHY2VGFRQkpB
WVRxa0pQYlNrS0lEcitZS0t2a3c4Q25weGQ3YWpwZ1VSUjlPcjFRM1Q5UjA5V3VpbkVLaktZ
REZrV2YwSmwzUEQzdGdFL1hFU01ZbGtXZnJxYnBmaFIwY2x1QlQ5Y1hacXFzakpCQmUybzZZ
RkVVZlhwdzdFSjFYdE96azZWSkFKOXVmZlFKblNOOHVteE9qTjdlWHBHYTlDYzZPaExHQ0c1
TmNJOUhqaHlCckRSaTJEa3hqangvTzNuc1I4Rzd2QTJvRHQzbGJSaU5ES0MrelY0L0NqcTVy
ZnE4WGdraDAyV1ZaRnYxOWZYaHJpN2RlMFIxS05rOUNtYTFmR09aMGUyZ2UwNE1qUEhBd01B
Nzc3elQydHA2OXV4WjJVczIwWFFDK0hTcm8ralR5WVhxUWZaYUYvS1N3eTk5QVo4dUdYbVJm
a2JhVnAvUUVVRS9kdXpZVjE5OXRXL2Z2dlBuejdPdjJsUFQ2UUNXOXNWZTVoeGhkSEpXaXVQ
cDVNcEZ2NUttTzdtdFlEeGRrdVRLbTg3eDlMS3lkRzBxN2VQcGI3LzlOcFhyTDcvOHNxT2pn
MzNWbnBvK0RoZ1pTNkY4ZlRvZFBRZWZ6Z0krWFVyL0NUNWVEZFRFUGwybTFjZVBIMmVmSnRE
MGd3Y1BWbFJVNU9Ua1lJeFhyMTdkMk5pb0w0bk1vSERkaStZYlkwN240dVNzbEs5UG42anBv
d1c4d0tlRFQ1Y004T2tJa1Q5em1kbW5wL1FiNlZWWFhkWFcxa2IrMi9uNTU1L1BuVHRYWHhL
WkFYeTYxZEh3NmZScElCQUFueTVKNCtxVDdUeXlTdHBQY0lRa2hBS0JnSmw5ZWtxMWR2UHk4
dUx4T05IMGMrZk9GUlFVNkV0Q0JsOFZvS21wcWFxcUtpOHZyN3E2bWd3UHBUSW5ocS9PTi80
T2FUU29LWjJMazdOQ2EvYWpOZnRId3liNmRQYlNSdkRwa2pUbTB4RXlWMWJKaDVuUXAwdkk3
RDRkNjliMG0yKytlY2VPSFFpaDA2ZFByMTY5ZXZueTVmcVNVSVRWOUh2dXVhZTd1N3UvdjMv
Nzl1Mms1bUlxYzJLTXY5UGcweTBGcSttS1BoM1ZqUTNDZ0U5bk5OMjVHT1BUTTlhdytwUXpK
VTAvZmZyMG5YZmVXVkJRVUZCUXNIejU4bi84NHgvNmtsQkVzUzdqaVJNblBCNFBUbTFPakY2
ZmIvUzNEdkRwYWRxVVNYeTZUTk9kM0ZiZzB5WEpvVDVkRzNQVjJ1M3Q3VjJ5Wk1uZXZYdHhh
bk5pNExJeVZJZnVmcktNblRjQTdzMS9qOWJzdi91QmJhTkxBbWgwZm94SHkwWWZCMUJIMlNZ
L0NvNHZNVUhPV2JzbnV1UHdIbDZXN2o1QVd6WHRXK2J1ZGMrSllkNy9rY28wdmJPejArUHh2
UExLSytScEtuTmk5UHA4SWwrZ3pPbGNuSnhWUXA4K09sRUcrSFFKZkxva1NZNzI2U01qSTdK
QkdJS3lwaU4xVWtsQ0JydTErdnI2a3BLU2ZmdjIwU1dwekltUjRVRXhJRjBrSEUrZk1KZ080
K25RdzQwZlR6ZjB5aUxkNGprME5QVHBwNStHUXFIejU4KzN0cmF5TDVsbFRnelprb3NYTDZZ
eUp3YjRkUEVZd1REeitIVDJxWlBiQ255NkpHWEVwNnRyU0xaOCtzbVRKenM2T3JxNnVrNmZQ
dDNhMnZycHA1K3lyOXIwZjZUZzA2MEorUFFrZ0I0dVplUzZsNG03U0s5dDF5ZDA3Ny8vdnF6
R0MwczJ4MTdTRHZoMEhUR0NZU2J4NmJLYms5c0tmTG9rWmNPbk0wL2h1aGZEQVo5dWRYaWZ6
bFlDVUxnNUdlamhVaFo4ZW5yM2FJUU0ybFBUd2FlTHh3aUdaY3VuYTJ1Nms5c0tmTG9rWmMy
bmt4RVlpL2wweFo4dXJUTDJBajdkb2xCTnAxSWVsQTJnZzArblFBK1hzdWZUMDdSZkkyVFFK
ajVkUHMrUnp6YzZDNHpYSzFsdDVoY25aK1hkc0FldDJVL21yeUh6SE4zbGJaQUNxRyt6Vi9I
ZXlXM0Y5bkFUWlpWa1cvV2xOcytSaE5JOXo5RllxK0t5c3ZFbC9CNFJTcjBkVXBublNBT2Jh
RG9CZkxyVm9UNDlJcWxjNkFJK25RSTlYQUtmcmtBQ1RkKzllN2ZINDhuSnliSFcyQXVNcDR2
SENJWmxlRHc5aUlLajE3MUVZRHhkQlJoUGw3SjMzWXR3czJ1SEdTR0RDVFI5NXN5WnI3MzIy
dERRa0JIN1RqdmcwNjBPMWZRRTloeDh1Z1ErWFpLa1RQdjA4YktBMXZYcFJVVkYwV2pVaUIw
YkFmaDBIVEdDWVJuMjZYN3EwelZ2VG00cjhPbVNsSEdmanBEbGZmcFRUejIxY2VQRy92NStJ
L2FkZHNDbld4M3c2VWtBUFZ6SytIZzZHcHRieXJvK3ZibTVlY3FVS1dtL2xwSGZtc2lzUnVM
ekhJRlBGNDhSRE12MDlla0JCRDQ5UVF6NGRDbExQajJaWnRjT1M0dWN5a2lnNlNVbEpjM056
UWFOcDdPYUxqS3JVWEx6SEkzZG5ENWhvNlZnTlIxOGVnTEFwMHZaOGVscGJIWWpkRFdCcGhj
V0ZobzNuczVxdXNpc1Jrbk5jeVRTK3VaMExrN09Dbng2RWpIZzB5WHc2UXBrY3p5ZDFYU1JX
WTJTbXVkSXl1QjhKWENmcnZ2eGVZNll1WTIwN2syUWM5YnVZWjRqS1NQekhMRXRuRlpWMFQz
UGtUWUpORDFqYzJLSXpHcWtjNTRqOE9ucENBT2ZMaDRHUGoycE1QRHA2Y1VzYzllSnpHcWtj
NTRqaHc4NFdnb1lUMDhDNk40U2pLY3JrRURUYzNKeWpOZ3I3LzFGWmpYU09jOFIrUFIwaElG
UEZ3OERuNTVVR1BqMDlKSkEwK2ZNbVhQMjdGa2pkbXdFNE5PdER2aDBjWUlvQ04wNy9SZTIy
ZDZuUC8vODh3OCsrT0RGaXhlTjJIZmFBWit1STBZd0RIeTZlRmhtc21JMTNUeFo2UWhMMWFj
ekp6ajRkSnpkMzBqVER2aDBxd00rWFJ6dzZaSWsxL1MwYmRER1B0MWFnRS9YRVNNWUJqNWRQ
QXg4ZWxKaDROUFRpMDAwWFRZbmhrVG1DcUQzQW5YcjRkNE05M1JPREVsOUhvd0o5eWJJT1Z2
M0RkNEdLZEdzTC9hL1Qzc0w4THJCYmordHFwS2RPVEVPSGp4WVVWRkJybjVadlhwMVkyTmpl
bmVmWHNDbjY0Z1JEQU9mTGg0R1BqMnBNS3Y0OU5IU1hWYjM2VmRkZFZWYld4dTkzSER1M0xs
R0pKRXVZRHpkNnNCNHVqZ3duaTVKbVIxUE4wQlZqSkRCQkpxZWw1Y1hqOGVKcHA4N2Q2Nmdv
TUNJSk5JRitIUWRNWUpoNE5QRnc4Q25KeFZtRlovT2E3b2xmZnJOTjkrOFk4Y09oTkRwMDZk
WHIxNjlmUGx5STVKSUYrRFRyUTc0ZEhIQXAwdFM1bnk2Zk9ERnVqNzk5T25UZDk1NVowRkJR
VUZCd2ZMbHkvL3hqMzhZa1VTNkFKK3VJMFl3REh5NmVCajQ5S1RDVXZIcG80MlF6QjUxK25T
a29PbVc5T2tabzdtNXVieTgzT1Z5elpzM3I3bTVHYWMySjRaRmZib3pTNzJ6UncwK1had2dD
c29VellHa3Z3WFV4dE9WTkQxMWpOQlNzMmg2WVdGaE9CeU94K09oVU1qdGR1UFU1c1N3cWs5
SHlJeFpTWkprWkZacW1nNCtYVHVHMVhUelpLVWpESHg2ZWxIVjlQZmVlNitxcWlvM043ZXFx
dXI5OTk4M1l0OHNQcDh2SEE0UERBeUVRcUdhbWhxYzJwd1lGdlhwVmtvMWZZQlAxd2Y0ZE1s
SW54NUV3ZkVsa2kxOCtxSkZpMTU0NFlWb05QckNDeS80ZkQ0ajlzMXkrUERod3NKQ2hGQmhZ
ZUhodzRkeGFuTmk5RjE3clNSUXZSNTNkWWxVcisvYnV6Y3RNZmp3NGQ3ZTNnVDErRTJZbGNG
dGhlckc1eHhnNThUbzNleExPQ2VHMDlxS3ZRK2lZRWZaSnRKbnpKTlZzbTBsU1ZML0gvK29l
NCswQmNUM21QZ2NMQ3VURU9xcWVXUjhDYk9jVlpVVTJ5SFRjMks0WEs2QmdRR01jVHdlbHdt
b0VjeWZQNStPdlZ4MTFWVTR0VGt4d0tkYkNQRHArZ0NmTG9GUFYwSlYwOWx5WFJrbzNWVlVW
RVRIWG1iTW1JRlRteE1EeHRQVG1aVWtTVVptRlFnRTZHTVlUeGVQZ2ZGMHljang5UGF5cDhl
WFNMWVlUK2NyTWhwYWw3R3BxY25qOGJoY3JybHo1NzcrK3VzNHRUa3h3S2RiaUhGREJENDlH
Y0NuU3diNGROS3FvMjFMc0kxUHR5TGcwdzNKU3BJa0k3TUtvaUFkZmdHZkxoNERQbDB5d0tk
VFFiZWhUN2NpNE5PdGlGOUYwOEduYXdNK1hRS2Zyb1E5TlozNmRPMjMzSFRPeFpFK1hVM1R3
YWRyeDRCUGw4Q25LMkZQVFovdzQ3V0ZqSXlGVWswZmZoU2tQNU9DVHhkSGJpY2RDZmgwSG50
cU92ajBkR1lsU1pMQlBwMmVQK0RUeFdOWTZURlBWanJDd0tlbkY1dG91bXllbzRnME9oZko2
Rnd3V1orTlJYeU9sYXpua1BGNzc0WTlRUlNrajJHZUk4SDdCbTlERUFVYnZBMm96cm50RUVU
QjlKNDF0RlZwbnh6ZFBqdkRrYVhuT2JJVzFLYzMrQm9pRW9wSTROTXQ0RDNSbXYxKzhPbkp4
SkNmSDZpalJIWElERm5wRGdPZm5sN3NxZWtUQnNVc05FaHRvVlRUaDVxbXczaTZHakpOZDJh
M0ljQjRPbzhOTlIzVm9RWmZnMGlQTjUxekFaOE9QbDBnaHNnTjI4UE5rSlh1TVBEcDZjV0dt
azUrR3JXa2k3RlFxdWtEZkhxeThKcWU3WXl5aHRFK0hkV2hpQVErUFh0UVRRZWZuczZzSkVr
eTJLZExFYmcrUFlrWThPa1V3MzA2TGVZMUp1VmtqK0tYRzJtSEdTR0RadEgwNGVIaGpSczNs
cGFXNXVUa2tLb3krdWM1c3BwUEh5OU1hUHBValdCY3g4R25pd0UrbldMNGVMcW1wcWVPRVZw
cUZrM2Z0R25UZ2dVTHVydTdSMFpHeUJMOTh4eFp6YWZMTk4wa1dja3cxS2NyYWpyNGRMVVlj
cTBMK0hRSmZMb1NadEYwajhjVENvWFlKZnJuT2JLYVR4L1AwUHlwR2dENDlHU2hzbUtaSG00
WW1mSHBxQTZCVDA4YWw4djEwRU1QVFowNjFlUHg3Tm16QjZjeXp4RkMrNjc5VFJBRk84bzJC
VkhRQXZNYzBReWRPYzhSbmRzSTVqa1NpNkY5bS9ad00yU2xyNjJrbE9jNWlranBuT2VJdHVy
b1BFZGxaYU1hZ2hBdUs0dElpTXlzMUZHMktmVjJ5UFE4UnhsbTVzeVpvVkNJekhNMGE5WXNu
TW84UitEVExRWDQ5R1JodTdjMWVyaGhUTGlRUEgwYmxJK25NeVpkZnZWNmFoaWhwV2JSOUZX
clZvVkNJVExQVVVsSkNVNWxuaU9yamFmTE5OMHNXVTBFeHRQRnd6SXduaDVFUVQrTXAzT2Fi
dFI0dW9xbXczaTZGcWRQbjc3aGhodnk4dkxLeTh2SndMcitlWTdBcDFzSzhPbkp3bXQ2dGpQ
S0d1RFRlY3lpNldrQmZIbzZzNW9JK0hUeE1DZjRkRlNIMk1uQmRXOUtNREcxVGZuQnAzUFlV
OVBCcDFzSThPbkpRalhkbjZVZVBuNGRTTGJ4ajFVeFM5Y0d3YWViQ3pXZnJ2YVdtOFhsSVNU
Ujg4UThXVTBFZkRvZmxxMSt4V3Q2aHQvQnpaczNpMmg2NW56NldDWjZ1dC9FTjVIMTZlU1VI
TDk0Y2FLbUM1YkQxTTdLQ0JtMHA2YkxmSG9hUDhZTkFURUZKWnlIZFgxNnR2cFYxbjM2dUhY
Tk5tbG9BYVNzNmZRWTFUUTlMWWR2aEF6YVJOTW56SW5oOVRiNEdtaHRlNG5Vc0ZlcVNYK2lv
ME54dWV5K3Q3YzNMVEdTSkIwNWNrUmhPYW12UDVhbldiTEtWRnVOejRNeGNVNk1JOC9mTGlX
YUV5UHRXU1djWCtMSWtTTTBSbTArQ3FQZlFkSzM3L0kyK01kNmVJYmZ3UVpmZzhpOEVDSlo5
ZlgxNGE0dTNWblJGaERmb3p3R0lXL2R1RDVRM1dndmU1cWRWNGZlQittTUdWNXZpdWNYeklt
UkdFV2Zib0VoZGZEcHB2SHBkR1pVcllUSDdIbDZSM0xGWVgyNkgzeDZ5ajQ5RUFqUW4zekJw
NXNMeGZGMGpkWTN5OGoxUkUwM1MxWVRjY2g0ZXNMZnZzZ2xIK1N4V3RmSzVIaTZYKzk0dXRx
bmtjaW1HbndOdktiekd6UjZQQjNWb2RUSDAwbExCZ0lCVWxOM3duVXZpVFE5UWZrbXplUUpS
c2lnUFRVZGZMcUZNSlZQRjdtZUlUaFdXWnZ0V2dZWmRzWE4ramxOMTdIM1ZCSlc5dW1aNzcw
SXBmNU5oZjRzNFo5WTdWSy9UMDhtR1NOazBKNmFEajVkRnFOOUFvTlBwekYrQVovT2E3cnNZ
dTAwWnVXcjgvRUxlVTFYREpNaHkwcnQwNU5IZ2RFQUFDQUFTVVJCVkV2UXA4dXU1eHR0RFFi
eHkwTDBYL2ZDYWJxTzd1ZG5XeklkUHAxdldQRHArZ0dmcnJvSEUxLzVZeXFmcnEzcGRNaFZr
cVNJTlBiRmYwelJqR2prMFVsMnVDVDlFelZkNU91RkRCMnJzQWtrMUhReVNLMTdGMEtrejZm
em11N25mTHFncWlUVnNFYklvTGswZmVQR2pXUkNESnphbkJqZzArVXhtcDBlZkxxVXlLY1Rl
U0xlTXpoMjhzdUVnT3B2R3JOcThEWHdDM2xOVnd5VEpaOUduMzRYNTlObFQ4bVNkM3NUZjN2
Z0Uwc2lLd044T24xY3kvbDBYdFBCcHllZ3E2dHI5dXpaVk5OVG1STURmTHFNVkV5WjBWakNw
eE5acEQralNSTTFuUldGdE9mRHUxMlpwZ2VaLzFMeXdXcC80ayt2VDFmVWRIMjdFSGYzUWVa
VFRmZU8xRFFkZkhxcTlQZjNlNzNlQXdjT1VFMVBaVTRNNnRPMUwzVXltMDhudmNHSXJMVGxC
bnk2eFBsMG1SVFNVUmRGbnk3VDlEUm1kWmV2SWFHbSsxRndQSXpyNmhGSnVWOWx3S2VUYnc4
MGY5cWsyajgvS0Y1T3F1YUlkZnQwK3JkdE5VMWYvdU1Yd2FlbnhOcTFhNTkvL25tTU1kVjAz
WE5pQkZGdy9kaU1BWDRVSkRYc1JXcnpaKzJleklsQnF1OGJzeGUvWVZ0Ty9WNXRUZ3hKY3ph
TTBmdDA1N08rYkJPcVEzYy9PVG9IQWwxKzk1TmxxRzUwSm9TT3NrM2tzUjhGMTVkdEltdlJ4
OHJIV0tlbkI2STZ0TDVzazRRUTJmdmRUNWJSZDNOOTJTYTBaai9kNzJnL2w2U09zUnpJSHNr
Vy9DaEl0aUNiVFVKSCs1QWM2UGtsV3lKclNkTHJ4ak12SzR0STZPNG55NElvMkhONHdudEhz
eVhuTDk4T2ZQNzBUS2ZIcnRqbXNyVklKdVQ5N1pqNDNwRnM2ZU83ZDQ3MmdTQUtrbnQySGhJ
TlZSRS9pMjArSndhWldwcUNVNWdUSTRpQ2Qva2EyRyttNE5QQnB3dkdrTEdPUUNEQS93Wkkz
aURpMDhtVjBlSStYZkduVHUzQ0kyUUpjY1RFMk5JQXNpOFVHYytCaHZuSGd1bGFKQ0FpSVZ4
V3h1NUNyVXNrYUN1RUpNYW4wNTlHMlorTHBiRXJ4OG0zQjlxU05KUFIvTWNPYXZuR012cXZI
elp6OXVhcjg3RXhOSksyQUEzajEyVnY1Qm9oOHY3Nko3NlBwRUZRQkpIYjhzWXk0dFA5RTMy
NkgzeDZzbENmcm50T2pBbnY5SnI5YXBwdW9rdEJKbXE2RVJneDFKc3V6RGFlVGdZclpMcER0
WW1vQUJVbW1TNm9TUW5WS1lsUlBWNXUxRFNML0FBYmtSQXIwNnltKzVuY0FvRkFJQkR3andr
dUc4UEtvbUtYa09YR1A1WjluckZ0NGgrYnQ1UGMweVV5VFdkSHEwbFRreHZSV1hZSmVjd3Vv
ZG9ha2NaM1FUOHF5STJHMGUzVGw5aE55VDVnZUUxSEVhU2g2WDUxcHdqajZYS29wdXVlRTRQ
MTZTZ3kzcVc0L211YTZ0dmcwODNrMDNuM2grb1FGWHBmblU4V3crb0NVYlRsRzh1SS9sS1pE
azdVVTdMQnpaczNrekR5RXBHaFFDQWdqZjFiM2MvMFpLcWVyS1pMWTdKT3dsZ1hLVXZTajRL
MVpVOEh4MzczWXgyOW9vMmxXWkViWFVLMklNdUt5aXRwSmVxQzcySXVQNU01WWxsaWZMYXlH
L3ZOTzhVd2pSZ3BrVStuUiswSG41NFpxS1lUYVVCcjltdHJlc0x6UERQUTM5ekFwNXZCcDh2
TXI4elpLY3FsWXJ6SXphL3lPS2l5QzNZNWtSNFJwVlBjam81czFZNDlxUDQwcUJLVHJwdWt0
d1VTYWpyMTZWSUV5VFRkUDZicGlsMElmSG82b1pydWU5ZEgzeGp6KzNTWnBodmswelhHbXND
blM0eFAxNzZKT0VGaVBOT3lLWTBZVnRQTms1V09NSkhFMURZbCsxUXp3cWVqaVpwTzl3ZytQ
Uk9NKzNUbXc5WVBQajJScG1jWFh0TlJuWmhKTjhDblM0RjArajVEYjZuNGROdmMwdHNDa3BK
UEp3LzhFelY5OUZVbHdLZW5FMFdmN25lOFR4LzlRVXo5TXl4YlBuMzBsemNWVGMrd1R5Y2xV
OUNhL2RxbnZYa2NNZmgwZndaOXVwLzhLa0MwUGpDNlVOeW5xemtxSTJUUW5wb09QcDJGWEFW
aDNKY0EzWXhxZWdUSngxNVFGbnc2K2F0TFFrMDN6NDN0NFk2OXBmZndVUjNTOXVueVY1VlFQ
TkZBMDVPR25lZW93ZHZnZTlmbmZkZUxJc2o3cnRkUFprSlJtbDNJSkRNS0JWR1EzTi9sYlpB
TW1DVW5PRFluanRvOFB0bWE1K2pkUHE4a1NkNTN2Yko1amhxOERWSm01em55MW5rYmZBM2VP
aTlhczUrMGxkcjlUMi9mcnZFcXVmLzEvOTZjTU9ZdWI4TmR2b1pVWXRnZWJwNnNrbTJydTd3
TnRXVlA2OTRqaXFCazk2Z1JFd2dFYUtzdWJ5enI4M3FES09oOTF5c2hKR3R6RkVGcTh4enhh
blBreUJGeWpzdVd3enhIaVVuS3B5ditEU1FyVUovdU44WktCMWtib2xMOWd5VmpJKzlCK20x
M29rLzNvNkRSUGwxMmpPT1hrSU5QdDlRdHZZZlBPL0hnMlBYUXBHUG85dWxxMzVLTmtFRjdh
am83bms3ZWRYcnEwcE01aUlKbUcwLzNHek9lUG40QzFDSHloeFR0VFNscXVuRlh6YXRwdXNo
NCt2S05aZnF5a2wwdFRxNjVsbEJpVFRmUHlEWGJ2YzJUbFk0dzg0eW5zNjFLeHRQSE5YM3Nw
MUZXMHdYSDAzMTFQdEIwblJCTmx6VTkxWFEwOXZkdTJ2UW11UlRFei93anc2RHRqMjRjamY2
dFRqcytZeVB2ZmpxQ3FkZW42MDQxeVB3SmlQNUhodG94Uzl6QXAvdlQ3ZFA5R2o0OWdxU0px
cUxtMC8xY255UWRUTmtxR1lBOU5WM1pwelAvVnlabk5TblNsQkNqZmJwL29xWWI1OVBwUDBl
ME44VjNTaU95R3Y4cll3byt2YmJzYVgxWitibS8waEQ3Qmo0ZGZMcWFUMGVjcHF1ZHpySWxw
RXlzWXIxSkkyVFFicG8rcWhTY1QyZi9ta3ora0IzVVczWlpHeDNlM3ovMjcyb3BvbWRpU1pI
dHkyNko4ekVlV3B4RTRib1hza1RBcCt0T1ZmV1V0b0pQSndjT1BwMDJRdG8zU0ZYYnJ6VHFr
cXhQOTZ0NEtjbmVtdDdVMUZSVlZaV1hsMWRkWGQzUjBZSDF6bk5FUEJmdjArVUYyQkF5eUtk
cmk3THFCenVqNldtYzM1MWNHS3NnQ3BxYjRnT2tpVDQ5MmIra3l1TEhDMWhUQnlTN1BuM05m
clJtdnc2Zkx0NVdmSnRZeUtmTFZNWWtXZWtPUzlHbnM1cWVkcC9PdHphOVJTUUZueTRyamtZ
RzkvaHk4eFFqdE5Rc21uN1BQZmQwZDNmMzkvZHYzNzZkMU5IVk44OFJHUkxsZmJxc0FKdGYv
Wk16S2ZqTEovUjQvd0NpZjFFTG92RUNmb3E3U0RZOWNuRzY3S2E5bGovaEx3MUpIcVBpMXNp
b0M5WDAwWjhyR1UzWDQ5UEZFdE9vSjJVSm40N0cvdllDUHQxUW55Nzc0NmppcjNUOHFZRWk0
NTJRMW1MelQ2eEZUREZDUzgyaTZaUVRKMDU0UEI2c2Q1NGowdnE4VDFlOHRZKzVQRUZ6ellm
UkpkUjcwaDlENUJYdkpvYXg2NUxlSTQybDJ0TTFvYzYxMmdkUFFwK082aEQ1d1YyaDQzTEdl
VHlaT2tTK0xyQkhJVTMwNlJxZmhWcUZKeWZ1am1pNlgxM1RoZjVIV2p2aG01WmdXeWxxdXJW
OHVxeDdteUVyM1dIWjllbXlLbUNzVDZkTCtEWW5DL25lUHVwUm1Hckp0SXdsYTlmbzZXYUVo
SnBMMDN0N2U1Y3NXYkozNzE2c2Q1Nmo5V1diVUFUZHZiT012ZmVQelYwaXV3K2lJSm4zcE9m
dytDd3FkRFlaOWpHaWM5OXdzNmpRT1doUUhXcDY5RkUvQ2pZOStpaU5aMStWM1krL3VyUE1q
NEo0WnhtS0lEcHZDNDFrSDdQNXlPWndrVzJmTE9rNVhCWWs4KzhFME4wN3k2UUF1dnVCYldq
TmZqcURqMkp1ZUdkWlJFS3lvNUNZT1dLQ1NqUFJLTjdUZU9WMmlLRFI5K3VCYldST0dUTFAw
ZWhzUnlMekhBVW01Q1pySzlwaXNzZUJRRUN4UC9oUjhPNEh0cW4xRnZQY3kzcDQxdlBKNG4z
cUxZQW42b05NTjJSS0luK1ZPZGZvN0ZFb2drZ2ZhM3IwMFNDWkVTa3lQdHRVSUJDZ3ZkSG04
eHhoakRzN096MGV6eXV2dkVLZTZwdm55Sy9rMDlXc2VtM1owL1RqbEg2SzhqZGZuWStVbkth
VEV0RGI2T1hlRXlkUEdmMk5tNm5mVCtNM2I5NGNHQ000Tm4wQmF3VDhZN1lGTVdXNzJhdnU2
QU9hMVlSdkF4T1hzSFhrWlY4cVpRZEk4aHd0a0QzMlI2M2cySmlWaE5EeWpXV3MrMURiTHo4
ZnplakZBMlBKU3dqMStueWpqY240OU9EWXBZVEorblIyWDhHeCt1QWtINXFuckswVXY3dFkx
NmRMQVpUaHJIcmY5YVZyVTRLSlpjdW44L2FjbFJUYXIyaWY5NCtOb05McnFmd282QnRyTHFv
em8rWDE3ZTNUNit2clMwcEs5dTNiUjVmb20rZEk3VzFRZTRPRDNFMDJINHJzaWpmRjViSzMw
RC94cVVad2NPeXZhM3p2MU40Um43UGlFa1VKUUl4a0syYkYxNlRtTjB2M3FORmMydTNtWnc5
OFRFbVRIVThuUDBXSXZFSCtpWS9WYnBZWW5oYnYzc1lsa1BWR1lKc2lsUzJvYWJyYWtBdjdV
YXA0eHZINW9MSFpTMlQ5ME9hYWppWnk4ZUpGbmZNY1JaQ2dUMGNSWkpJUlJrV2Zuc2FzRWtx
QXRuTWhOeVBhYWp3bEpVMFg5T2xwYnl2eFRkR0dJai9MMDZjWjl1a29na1NNc3l3cnRka2tS
TEx5dmV1VG1PTk41UUFGbXlzclBsMUQwTWxONDNTV05aZGl2N0s1cHFjRnF1a2FLaWFORmNn
MnlHdEl5UmZnUnN4ZjFFUk9GUjNiVDhyV3BUMkJ4SWxSVFNlL2w0NzVJTUZMWDlMeU50R0NI
dlNwMmpqTTZHY3crU2JCZkI3clRpYjFONVNtTFhFUE5EYVNlZ0t5MXB2UXdobnBSYkwrbytN
MjJwRWlhTUlHeFc2Q0Rhc1dESnFlR0cyZlRpLy9rc1kwRkRlbTJlVWxQRlZVYlJjVnNnakNq
V1VpNTROZ1ZpSjlrWGN1ZkFJWjh1bXM5elRTcHl1YUtYOGlUU2NqMSt6M0t2NXhldHZLcDJU
QStUZVVobWxvdWl3cnRZNHFtSlZjMDdsK3hXWTEzb0I2dndJcVpzVmYwQ25lL1dnbmw1MFg5
SEhhZlRxL0hEUTlNVTg4OFlUR0o2cjRKNjN1MitoMzhNQzRMZ2l0eGVRanBkV3FxM1pIOWNR
a0pvZDBKYU80QmZrM3FySDVZOGViUWwzSzJkRjIzVytUU0VQeENmdTVpOXY4U3I1VjM1dVZv
SWtTZWNuUi85L0szcjZBOHR1dEwxdUpPMTZKK1ZNcjM2VCtNU01zNzFycCtFNlR5b21zcU9u
SjN0UlNva2V0b0VMTWV3R2FuaGlxNmJ4UFY3d3RieXdqNnFEMnV4eFowcnZaTnhvV0dWY1Qy
WW9rUmxtaG1FamZoajNzL05lOGtNbXlJanZsTTZSN2xBbmNlRXdFb1RYN05kcUJYY1czWVk4
OGJTWjVjc08xWmVPN1VCRmN4YXhvUE4zNGFDTWtlbmMwZkRyZE9LNHRZMXRHZmdoam1aQTlz
am53TjhXMll0K0YwVERhVnV4N1BmRjlKMWxOYUlUSWhMVDV0cHJRSDVqRGtXV2xxQlFLeVNz
ZDQvSWZ2OGkvS2RwWnlScWNKcW02dTRtZGh3MVRTSHZzTU1lYks4TDBGcjdQS0xXUGJHdnlO
M3JpYmJSSjJYZFF2UitLK1BUZXpUN1pPeXZTdGNhYkZEUmRBem9uQmhxcldBLzNWci9YbUEw
RHJkbFBIcHNoVDdpSGUzMzNNQ2RHWXZUNGRJRXdrYTBKN2xFa0RMSWlOK3JUa2FJL1hiTWZy
ZGtQYldYMXJBUVRTK01lelpNVitQVEVhSXlud3cxdWNJT2JxVzZnNllrQm53NVpRVmJXeWtv
d01mRHA0dGhUMCtFR043akJ6ZVEzMFBURWdFK0hyQ0FyYTJVbG1CajRkSEdzcE9raWMyS0lO
REhjNEFZM3VHWDlSalc5NmNjLy92cnp6OU9sazFiU2RKRTVNVWhqZ1UrSHJDQXJTMlFsbUpp
OWZYckE0OW04WU1GZmZ2ZTd3ZjcrMUhYU1Nwb3VNaWVHU0JQRERXNXdnMXZXYjZ5bWsxdmQv
L3BmZjN2cnJSUjEwa3Fhcmpnbnh0R2pSeDk3N0xFTkR6Lzg2SjEzL24vWFg3L3V2dnNlZSt5
eG45MTExMk9QUFVZZWE5elgvdkNIQ1dNRXR5YTR4NS84NUNlUUZXUUZXYkgzajl4eVN5YjNh
SjZzaUdxdC8rbFB4elg5K3V2L3RuOS9panBwSlUwWG1ST0RQRGgrL0xqSUJ2dmZmVmNrVEdS
cmduc1VDWU9zeE1NZ0svRXdjMmFGeFJKTDR4NU5tQlVaZTNuMy8vNWZ4NDI5aU15SlFSNE1E
QXlJYlBDYjdkdEZ3a1MySnJoSGtURElTandNc2hJUE0yZFdXQ3l4Tk83UmhGazFQZkRBMXlk
UGlteEtCQ3RwdXNpY0dFbHRjT2pzMlRTbGxrNGdLM0VnSzNITW1SVTJhMkxtekVvRUsybDZR
cnJUUFZzckFBQ0F0YkNWcGdNQUFEZ2MwSFQ5TkRVMVZWVlY1ZVhsVlZkWGQzUjBZR1pXVlZO
bHhTOHhRMWFOalkwVkZSVm15NHF3Y2VQR0xMNkpHdjNLVkZrTkR3OXYzTGl4dExRMEp5ZkhW
SW14elZWY1hHeVNySnFibTh2THkxMHUxN3g1ODVxYm00M2JOV2k2ZnU2NTU1N3U3dTcrL3Y3
dDI3ZXoxK0ZrVjlQNXJOVHl6RzVXOTk1Nzc0a1RKMkt4MkovLy9PZHNuWGlLTGRQVjFUVjc5
dXdzdm9sOFZ0bnRVUVErcTAyYk5pMVlzS0M3dTN0a1pNUlVpVkVPSFRyMHExLzl5aVJaRlJZ
V2hzUGhlRHdlQ29YY2JyZHh1d1pOVHdNblRwendlRHowcVJuT1FNeGxwYmdrODhoeWlNZmpy
Ny8rdXMvbnkySkttTW1xdjcvZjYvVWVPSERBREc4aXpRb2hkTmxsbHhVVUZOeDY2NjBuVHB3
d1NWWWVqeWNVQ21VM0dSYStlOTk2NjYxZmZ2bGx0dkloMEt4OFBsODRIQjRZR0FpRlFqVTFO
Y2J0RVRROVZYcDdlNWNzV2JKMzcxNjZ4QXh5d0dmRkw4bDZWdVRiY1ZGUjBmdnZ2MitTck5h
dVhmdjg4ODlqRTd5Si9QdDE1c3laMnRyYVpjdVdtU1FybDh2MTBFTVBUWjA2MWVQeDdObXpK
NHRaWWFYbU9uanc0TDMzM3B2RmxQREVyQTRmUGx4WVdJZ1FLaXdzUEh6NHNIRTdCVTFQaWM3
T1RvL0g4OG9ycjdBTHN5NEhmRmFLZVdZOUs0d3hHWHU1OHNvclRaSVZHUnJPK3VDMTJ2c1Zp
OFh5OHZLeWtoTG1zcG81YzJZb0ZDS0RDYk5temNwV1ZueGloSnR2dnZtamp6N0tWa3FZeTJy
Ky9QbDA3T1dxcTY0eWJyK2c2ZnFwcjY4dktTblp0MitmYkhsMk5aM1BTaTNQN0dhMWR1M2Fz
MmZQeG1LeDExNTc3ZkxMTHpkSlZwUXN2b2xxV1gzOTlkZFBQUEdFMysvUFJsSUtXYTFhdFNv
VUNwSEJoSktTa3F4a3BaZ1l4dmlkZDk2NTRZWWJzcFVTVnNxcXFLaUlqcjNNbURIRHVGMkRw
dXNIVGVUaXhZdXlKZWJNNnVMRmkyYklxcUdob2JTMGRQTGt5ZC81em5mKzY3LytLL01wS1di
RnZwU1ZsQlN6SWcveTgvTnZ2dm5teno3N3pDUlpuVDU5K29ZYmJzakx5eXN2TDgvaXdMcmlt
M2pqalRlKzhjWWIyVXBKTWF1bXBpYVB4K055dWViT25mdjY2NjhidDJ2UWRBQUFBUHNBbWc0
QUFHQWZRTk1CQUFEc0EyZzZBQUNBZlFCTkJ3QUFzQStnNlFBQUFQWUJOQjBBQU1BK2dLWURU
aWVMbDZJRFFOb0JUYmN3QXdNRER6Lzg4S3haczZaUG4vN01NODlrT3gyemd4QjY3cm5uTU1h
Ly9lMXZRY2NUMHQzZGpSQ0NlV1pFTUZYWEFrMjNNT3ZYcjcvenpqdS8vUExMcjcvKytwRkhI
c2wyT21ZSElWUlpXVGt5TXJKZ3dZS3NuM2ptWi9QbXpaTW1UZHE4ZVhPMkU3RUFwdXBhb09r
V1pzNmNPYklweWRuK1JCOGpoTmF2WDE5UVVFQXJmR2E5MjJVRmhOQjExMTIzYWRPbTY2Ky9u
bTBjV2FPOThNSUxNMmJNS0NvcTJqNDJ5N0F6bSt2bW0yLys4WTkvZlBQTk41T25OVFUxWkc2
SDl2YjJ4WXNYWTR5N3Vyb3FLeXZ6OC9NM2JOakF0bWUyRXM0aWZOY2kvU28zTjVmT2lmSHpu
Ly84My83dDN6REc5OTU3NzVvMWEraUthVThHTk4zQ3VGeXVvYUVoZG9tYXBqLzMzSFBSYVBU
QkJ4L01hSDRtQXlHMGMrZk9TWk1tN2RxMVM3R2h5T050MjdiRllySFcxdFpzelI5aUJxTFI2
TFJwMDc3ODhzdHAwNlpGbzFHTThaWXRXMWF0V29VeFhybHk1ZGF0V3pIR1BwL3Z4UmRmakVh
ajI3ZHZkNmFVVTlTNjF0RFEwTUdEQjJmUG5vMHhIaHdjL043M3Z2ZUxYL3ppZTkvNzN1RGdv
SEhKZ0taYkdBMmZQamc0eUdyNnBVdVhNcDJjK2REUWNmWXhQZCtjckZNdExTMjAvbFJMU3d2
RytOeTVjMjYzKy9qeDQyNjMrNnV2dnNJWTUrYm14bUl4akhFc0ZuTnlXMkdsN3JSdDJ6YVB4
ek5wMGlTRVVFNU9Ebm1wcTZzTElkVFYxV1ZvTXFEcEZxYTJ0dmJPTysvczdlMDlmLzU4Ylcw
dHhuam16Sm43OXUzcjcrK3ZxNnR6K05kaEhrRk5WM3pzTk5hc1dVTitkWC9tbVdmb1FNR0tG
U3V1dnZycWxTdFhrcWRlci9jUGYvaERMQmI3NHgvLzZPUzJ3a3JkSmo4L3Y3VzFOUmFMaFVJ
aHNpUVdpMVZYVjk5NjY2M1YxZFg5L2YzR0pRT2FibUhpOGZndmYvbkxtVE5uMHV0ZTZ1dnIz
VzczakJrenRtN2RxcUhwemp3RCtSTlBWaEJWTVFZN3Nybkt5OHMvL3ZoampQSEhIMzljWGw1
T0ZyYTN0eU9FMnR2YnlkUE96czZLaW9yOC9QeDE2OVpObWpTSkxIUmdXMkdsYnZQVVUwKzUz
VzYzMi8zc3M4K1NKZmZmZi8vcTFhc3h4di82ci8vNndBTVA4Q3VtQzlCMEFBRDBNenc4L01Z
YmJ5eFlzQ0RiaVFDamdLWURBS0FUTWxoY1hsNmVyVmxOQUI3UWRBQUFBUHNBbWc0QUFHQWZy
S0hwenZ6aEJRQUFJRm1TMDNTa2dtSmtUazdPdDc3MXJWLzg0aGZrSXRaTWN2TGt5V1hMbGsy
ZVBIblpzbVdmZi81NWh2ZWVNZmoyNTVmRTQvR0hIbnFvcEtSRTdaM0NHRGMzTjNzOG5yeTh2
TzkrOTdzOVBUM1llUTJJRUNvdUxzWktUY0dqMWppQlFNQTI1b1B2U00zTnpRc1hMcHc4ZWZL
U0pVdmVlZWNkTE5aSitMV2FtNXZMeTh0ZExsZDVlZm51M2JzemN6aEd3NHNoZjk3eFRjSERO
Nm5JV2pLUzEvUUlkMVBSOUpHUmtWT25UcTFhdGVvLy8vTS9SVkpKSTNmZmZmZUdEUnY2Ky9z
M2JOaXdZc1dLRE84OXcyaGZxbGhiVzF0VFV4T0pSRVpHUnRTMlVGeGMzTkhSTVRBd0VBcUY3
cmpqRHV5d0JzUVlyMW16NXZISEg4ZEtUY0dqMkRoSGpod2hKM0RHY3M0QTdPR3NXTEVpRW9u
RTQvSGR1M2RmZnZubFdLeVQ4R3U1M2U2MnRyWjRQQjRPaDkxdWQwYU93M0Q0OTUwLzcvaW00
T0diVkdRdEdRWnFPbmx3NnRRcDh0Zlk5OTU3cjZxcUtqYzN0NnFxNnIzMzNpTXgzL25PZDFh
dVhEbHYzanp5UndieW1jWVdTYUFMMlMzekZUbGtGQmNYOS9YMVlZejcrdnBzL3c5dmJVMHZM
UzE5KysyM3RiZFFYRnk4Zi85K0ltUXpac3pBRG12QXI3Lyt1cWlvNlBUcDAxaXBLWGo0eG9u
SDQ0c1dMZnJUbi81a1kwMG54R0t4cHFZbWN1V2llQ2RoMTZxdXJtNXZieDhZR05pM2J4K3BH
Mk1ERUVKdXQ3dWdvT0NXVzI0NWNlSUVWai92MktiZ1VXdFM3YlZrR0s3cFEwTkR1Ym01R09Q
S3lzcVhYMzQ1Rm92VjE5ZFhWVldSR0ZyUGM5cTBhWFJkdGtpQ2JHdFlyQ0xIcEVtVGhvZUhy
N3Z1dXFHaElaZkxKZElRMWtWYjAxMHUxNFlOR3dvS0Nzckt5bDU3N1RYRkxUUTJObDV4eFJW
VHAwNWR0MjRkYVM1SE5lQ3p6ejVML2d5Q2xacUNoMitjUng5OTlJYy8vQ0cyM1E4L3NzT2hn
MVFmZnZnaEZ1NGtzclU2T3p1TGlvb1FRa1ZGUlViL1N6N0RuRDE3dHJhMmR0bXlaVmpsdkpN
MUJZOWlreVpjUzBibWZMckw1U0lENjlGb2xLZzhZdjY1aDlTTEpHQk8weE5XNUNndUxqNXo1
Z3gyaHMzVTF2U2lvcUpRS0RRd01ORFIwVUdHakRVNGNPREFuRGx6c0pNYWNIQndzS3lzakJj
WDJoUThmT09RSHN1UFFWc2QvbGlpMGVpdVhic1dMVnFFaytrazdGb1ZGUlhoY0RnZWo0ZENv
Y3JLU3FOU3p4TDkvZjE1ZVhsWS9ieGptNEpIclVtMTE1Smg3SGo2RjE5ODhhTWYvWWpVaTFE
MDZiSjd2a2dDM1ZyQ3h5eDMzWFhYNDQ4L0hvL0hIMy84Y1dLZ2JJeTJwdDkrKysyMGIybWNl
Q01qSTBlUEh2WDVmS1J1akhNYXNMR3g4ZHBycjJXWHlKcUNSNk54N0NUb2VPTGgzSC8vL1Nk
UG5vekg0MDFOVFdSVVNxU1Q4R3NWRmhhR3crR0JnWUcydGpiYmpLY1RMbHk0c0duVEpyL2Zq
NVhPTzc0cGVQZ21GVmxMaG9HYW5wT1RjL25sbC8vc1p6OGp0VG9QSGp4WVdWbnBjcmtxS3l2
cGVMcnNuaStTZ0NhQ3hUVDl4SWtUUzVjdUpWY3ZuRHg1VXFRaHJJaGk0OGlXOVBUMExGMjZO
RGMzMStQeE5EYzMweFg1N1pTVWxLeGR1elllajJQSE5DREdlT25TcGV5UUZOOFVtR3N1amNh
eGphYnpIU2tZRE02Yk55ODNOM2ZSb2tYaGNCaXJ0SU9zQmZpMUdoc2J5WGZ4dVhQbk5qVTFa
ZnpJRElHMDBwUXBVMjY2NmFiUFB2c01LNTEzZkZOZ2dhNmx1SlkyUmwzTENBQUFBR1FlYS96
blNBUDRnQUVBQUtCWVh0TUJBQUFBQ21nNkFBQ0FmY2ljcG91TWlzRElDUUFBUUNwazdqZlNO
R282U0w4SXI3enl5cFZYWHBtWGw3ZDQ4ZUlEQnc0b3h2RDFKUnhTNlVXR1NFOTJRcGtYR1h5
emlIUXFmV3RaQ1A0QStTSTJyRHlTNjlQNUpScGJwaHNYV1V0RzhwcStaci84QnBwdVN1Nisr
KzZQUC82NHY3Ly9sVmRlVWJzeW5hOHY0YlJLTHl6YS9jbzVaVjVrc0VjbjBxbFNXY3RDc0Fl
b1VjU0dsaExTV0tLNFRSa2FhOGt3U3RNLyt1aWp4WXNYdTF3dTlnTkhWcWZsNk5HajExeHpU
VjVlM3Z6NTgwbkpNUko4OXV6WkcyKzhjY2VPSFZpbFNvenNvNHpmenRLbFM4bXNpZncvU2h6
SXFWT244dkx5TGwyNnhML0UxNWR3VktVWEdkclM3Snd5THpJVWowNmpVNld5bG9WZ0QxQ3Rp
QTFiU2todGlXeWJzcm94SW12Sk1FclRmVDdmMXExYjZiODJzRktkbGlWTGxyejY2cXZ4ZUx5
dHJXMysvUGtrSmhLSjFOVFUwQUplL0w5UE1kZGQrTzNzMnJXTEZBVmJzbVRKM3IxN1JSckNy
dnpqSC8vdysvMlBQUEtJNHF0OGZRbEhWWHFSb1MzTnppbnpJb00vT3UxT2xjcGFGb0k5UUxV
aU5td3BJYlVsUEd6ZEdQRzFLRVpwZW01dUx2bjdLTHV1ckU1TGJtNHVkZHlrdWd0Q3FMcTZ1
cVNrcEx1N20wVHlWV0l3MTEzNDdRd09EbDU1NVpXdnZmWmFaV1dsUm8xWjIvUGhoeC9PbXpk
dnc0WU53OFBEaWdGOGZRbm5WSHJoU2VqVEhWTG1SWWJzMEJKMnFsVFdzaERzQVNvV3NlRkxD
YWtWRitLaGRXT1NXb3RnbEtaN3ZkNnRXN2NPREF5dzY4b2UrLzMrbHBhVy92NStkdm1aTTJm
MjdOa3piOTQ4OGoxWDBhZFBuanlaL1dMQ2J3ZGovTXd6enhRVUZLZ1Y0M1VDRFEwTmZyK2ZE
Rmlwd2RlWGNFNmxGeDV0WFhaT21SY1o3TkdKZEtwVTFySVE3QUVxRnJIaEIzNEZoNExadWpI
aWExR00wdlFQUHZpZ3VycWFHQm02THJzZGpQR3hZOGR1dXVtbS9QeDhhbk5vVEVORHc5S2xT
Mk94R0Y4bEJtUDg4TU1QazdYSVUzNDdHT04vL3ZPZnhjWEZtWjlpeVR5Z2lWeThlQkVMMUpk
d1RxVVhGbGxiMFlWc2pCUEt2TWpnbTBXa1V3bXVaVjM0QTFRc1lpTXJKYVM0UkxIcDJMb3hp
bXRwWTg5Nkw4UER3Ny8vL2U4ZmZ2amhiQ2NDQUFDUVVlejVQMUtFVUUxTkRSbTlBUUFBY0E3
MjFIUUFBQUJuQXBvT0FBQmdINkRlQ3dBQWdIMndaTDBYUUFSOXBUbll0MVd3dm9RTmdObzRH
ckFGYlpxYm14Y3VYRGg1OHVRbFM1YVEvMnp6OERFaWExa0kvcXhwYm03MmVEemttcWllbmg2
czFEZEUxSkp2S0IybGNwTFdkQ2tndjRHbW14TjlwVGtvNHZVbGJBRFV4bEZEVnRCbXhZb1Zr
VWdrSG8vdjNyMzc4c3N2VjF5Rmp4Rlp5M0t3WjAxeGNYRkhSOGZBd0VBb0ZMcmpqanV3ZXQv
UWxqaStvWFNVeWpGSzA0MnI5MElyQjdTM3Q3T2xGUUExZEpUbVNLcStoSjJBMmpnc2FnVnRZ
ckZZVTFQVGdnVUxOTmJsWTBUV3NoQXlUZCsvZnovUmRESVR0RnJmRUxHdGlnMGxYaXJIS0Uw
M3J0N0xsaTFiVnExYWhURmV1WExsMXExYkUrYnNjUFNWNWtpcXZvUnRnTm80TWhRTDJ0Qnh1
UTgvL0ZCdFJUNUdaQzFyd2JaSlkyUGpGVmRjTVhYcTFIWHIxbW4zallTYXJ0aFFTWlhLTVVy
VGphdjNjdTdjT2JmYmZmejRjYmZiL2RWWFg0a2NwR1BSVjVvajJmb1M5Z0JxNC9Db0ZiU0pS
cU83ZHUxYXRHaVJ4cnA4ak1oYUZrSlI5dzRjT0RCbnpoeXMzamRFZkxxc29aSXRsV09VcGh0
YTcyWEZpaFZYWDMwMXFid0lxS0d2TkFkMlpJRmlxSTJqRGUwaDk5OS8vOG1USitQeGVGTlRF
eGxrNE9GalJOYXlITEt6Wm1SazVPalJvejZmcjdhMkZxdjNEVzFONXh0S1I2a2NvelRkMEhv
djdlM3RDQ0ZTSVIxUUEwMUVzRFFIVHI2K2hBMFFhU3NuMThhaFRSRU1CdWZObTVlYm03dG8w
YUp3T0N4N1ZTMUdjUzNyd3A4MTVFRkpTY25hdFd2SmdEUGZOeFRQdFlSTnA5Z3p0YkZudlJj
QXQzYyt0UUFBRm1SSlJFRlVBQUJuQXY4akJRQUFzQStnNlFBQUFQWUJOQjBBQU1BK0dLWHBN
TWdPQUFDUWVZejZqUlEwM1NSQUpaT2tFUG5aWDYxeDJMb296a0g3cVBuMjFGSEF4UHp3QjhY
S0k2bWJKSExnZkwwWEhkZWhKSDh0WTBSK0EwMDNNMURKUkFmYXZWZXhjV1IxVVJ5QzRGR3pB
VG9LbUpnZmpZT2lkWk5FRGx5dE1JNkpOSjJ0M01KWGQ5bXlaWXZINHlFMVlaeDJNbVFlcUdR
aWpuWnY1QnRIclM2S3ZSRS9hc1VBOFFJbUZrSjJVSXAxa3hJZU9GL3Z4U3lhTHF2Y3dsZDNt
VFp0V2lBUWlFUWk3TjlOQVNPQVNpWkpvWDBLOFkyaldCZkY5b2dmTlIrUVZBRVRxOEFmRkY4
M0tlR0IwK0VhdHQ2TFdUUmRWcm1Gcis3eTVwdHYzbmJiYmZQbno1OCtmZnF2Zi8xcjhhU0Jw
SUJLSnNtUzBLZkxHa2V0TG9xOUVUOXEyYXZKRmpDeEJQeEI4WFdUQkErY0w0eGpGazJYVlc3
aHE3c1Fob2VIRHh3NFVGQlFJSjQwSUE1VU10R0I5aW1rMFRqT0VYU1dwSHk2amdJbTVrZnhv
R1IxazBRT1hLMHdqbGswblI0SnFkeWlXTjBGSVRScDBxUzVjK2UrK09LTDRra0Q0cUNKUUNV
VGJXVE5SUmV5TVJxTkE1b3Vhd0crUFJVN3BOVlJQQ2haM1NTUk16Rmh2UmVSWktEZUN3QUFn
SDJBLzVFQ0FBRFlCOUIwQUFBQSt3Q2FEZ0FBWUI4eXJla2FQNmNBQUFBQUtaTE4zMGhCMHcy
Q0xjSFIzTnhjWGw3dWNybkt5OHQzNzk2dEdNKy9sVkR2UlNPbXViblo0L0dRNjE1NmVucXdV
cGtPcThPM0EzK01JZ1ZNdEF1aFpPWllNb0JJNDRpY2lYd00zOWtTa3JTbSsxRlFkZ05OTnhX
eUVoeHV0N3V0clMwZWo0ZkRZYmZicmJnSy8wWkF2UmVOVjR1TGl6czZPZ1lHQmtLaDBCMTMz
SUhWeTNSWUhiWWQrR01VTENVa2k3SGxXUy9TT0NKbkloL0RkN2FFR0tqcENLSDE2OWNYRkJU
VTFOVFFKZnpZaTNaTkdNWHRBR3J3SlRpcXE2dmIyOXNIQmdiMjdkdTNlUEZpeGJVUVFtNjN1
NkNnNEpaYmJqbHg0Z1NHZWkrSk5IMy8vdjNrTkdQL0dNS1g2YkE2ZkRzb0hxTkk1UllhdzNj
MjI2RGRPQ0puSWgrajF0azBNRmJUbjN2dXVXZzArdUNERDdJTDJjY0phOEtvYlFkUWhDL0Iw
ZG5aV1ZSVWhCQXFLaXBpLzZiTWMvYnMyZHJhMm1YTGxtR285NktwNlkyTmpWZGNjY1hVcVZQ
WHJWdEhHNGY0RlZtWkRxdURsUDVBSkR0R2tjb3RmQXpiMmV4QndzWVJPUlA1R01YT3BvMnht
czUvZE1zMFBXRk5HTFh0QUlyd0pUZ3FLaXJDNFhBOEhnK0ZRcFdWbGRxcjkvZjM1K1hsWWFq
M0lqWStjT0RBZ1RsejV0Q25mSmtPcThPM2crd1lSUXFZcU1YUXptWWJ0QnRINUV6VWlKRjFO
ZzJNMVhUdGhVaXNKb3d0QitDTWhqWmFZV0ZoT0J3ZUdCaG9hMnRURzhValhMaHdZZE9tVFg2
L0gwTzlsMFJkYm1SazVPalJvejZmcjdhMkZxdVg2YkE2YkR2d3h5aFN3RVF0aHUxc05rQ2tj
VVRPUk1VWVdXZExTT1kwSFUyRURkQ29DY052QnhDQk5scGpZNlBINHlGRmRacWFtbVN2MHFj
SW9TbFRwdHgwMDAyZmZmWVpobm92RXkvTVVHeXVrcEtTdFd2WHh1TnhyRlNtdytydzdaQ3dG
SWxpQVJNK2h1OXNOa0NrY1VUT1JENkc3MndKZ1hvdkFBQUE5Z0grUndvQUFHQWZRTk1CQUFE
c0EyZzZBQUNBZmNpY3Bxc051MnNNeHljY3I0ZWhmQUFBQUpiTS9VYXFXMzlCMDhWUnJES1Jz
QlFKLzFiYXI0QkpVckFGYzNqNFlqaE9LSStqWGJtbHVMaFljUzIrSThYajhZY2Vlb2lVcjdE
WitTdXJzNlNqUEE3ZnBDSnJ5VWhhMDRNb0tMdUJwcHNIdnNxRVNDa1N2aG50V3NCRUJGbkJI
QjYrR0k0VHl1Tm9WSGRaczJiTjQ0OC9ycmdXMzVGcWEydHJhbW9pa2NqSXlFZ0cwczRZc202
anJ6d09oVFpwVW1zUmpOTDBMVnUyZUR3ZWw4dEZQNDBSUWkrODhNS01HVE9LaW9xMmI5OU9O
OGl1cmxidmhkMXlaMmRuWldWbGZuNStiVzB0ZVluZkZ5QXJ3YUZkaWdTcGxPQ3dYd0dUaFBB
RmMzajRZamlPS284ajYxcGZmLzExVVZIUjZkT25OVlpoTzFKcGFlbmJiNytkaVVRemlGcTMw
VmNlUjdGSlJZcnFFSXpTOUduVHBnVUNnVWdrTWpBd1FOZmR0bTFiTEJacmJXMWwrejI3dWxx
OUYzYkxDeGN1Ykdob2lNVmlMNzMwRW5tSjM1ZkRrWlhYb0YvbHRFdVJ5RXB3Q0s1bE0vaUNP
VHg4TVJ6bmxNZmhLN2M4Kyt5enExZXYxbGhGMXBGY0x0ZUdEUnNLQ2dyS3lzcllLWmd0aldL
M1VUeURSTXJqOEUwcXNoYkZLRTEvODgwM2I3dnR0dm56NTArZlB2M1h2LzQxV1hkd2NKQnVo
OTBtZmF4Vzc0WGRjbTV1Yml3V3d4aEhvMUh5RXI4dko2TllYa093Rkltc0JJZjlDcGdraEMr
WXc4TVh3M0ZJZVJ5K2F3ME9EcGFWbFduWGhzTVRPMUpSVVZFb0ZCb1lHT2pvNkZBYmhiY2Nh
dDFHUjNrY3ZrbEYxbUl4ZGp4OWVIajR3SUVEQlFVRldGM0gyY2VLOVY1bXo1N05mdEF0V3JT
SStQVDYrbnAyWFhaZmpvV3ZNaUZlaW9RdHdXSFhBaWJpYVBScXZoaU9FOHJqS0ZadWFXeHN2
UGJhYXpYVzRqdlM3YmZmVGpYZGZwOS90TnZvSzQrRHVTWVZYSXZGS0Uwbm4xZWtjTUdMTDc2
SWxYUWNUUVJqckZqdjVROS8rRU5CUVFGOWV1alFvWXFLaXZ6OC9QWHIxN1BiWWZmbFdHUk5l
dkhpUmNWU0pMSzNqQVN6SlRqc1Y4QWtXZFJzQjFZcWh1T0U4amg4MThJWUwxMjZWRForSW1z
cnZpUDE5UFFzWGJvME56Zlg0L0UwTnpkbjhoQXlBRDE4ZmVWeE1OZWtpbXRwQS9WZUFBQUE3
QVA4anhRQUFNQStnS1lEQUFEWUI5QjBBQUFBKzJCMlRZZkJlZ0FBQUhITS9oc3BhSHFLSkZW
bGdsK0MxRXQ1MkJLUkxxMVczVVc3U296OUVPbGFmRnZadU42TE5pS0MyZHpjWEY1ZTduSzV5
c3ZMZCsvZVRaY24xYldTMXZTSUpMK0JwcHNaOFhvUmlrMnRVY3JEeG1qM09zWHFMZ21yeE5n
UGthN0Z0NVZkNjcwa1JLUnZ1TjN1dHJhMmVEd2VEb2ZwZktUSmRpMmpORjJ4M2t0dGJXMStm
djZDQlFzNk96c3h4dSs5OTE1VlZWVnVibTVWVlJXNXFQNmpqejVhdkhneFdZdHRpTE5uejk1
NDQ0MDdkdXdRUENxQUoyRzlDUDU5RkNubFlVdTB6eCsrdW90SWxSZ2JvOUcxK0xheVpiMFhF
WkJLVlNXVzZ1cnE5dmIyZ1lHQmZmdjJMVjY4R092cVdrWnB1bUs5bC9yNitsZ3MxdERRNFBW
Nk1jYVZsWlV2di93eStVZG9WVlVWeHRqbjgyM2R1cFdkU2hVaEZJbEVhbXBxT2pvNkJBOEo0
QkdwRjhHL2p3bExlZGdWN2ZPSHIrNGlVaVhHcm1oM0xiNnRiRm52UlJ4WlZTVVpuWjJkUlVW
RkNLR2lvaUpTSGtCSDF6SksweFhydlpBNkxiRllqQlFWY2JsY3RISkxibTR1eGpnM056Y2Fq
Y3IyV0YxZFhWSlMwdDNkTFhoSWdBekJlaEd5OTFHd2xJY3RTZWpUWmRWZFJLckUySktFWFl0
dksxdldlMGtLV1ZVbGxvcUtpbkE0SEkvSFE2RlFaV1VsMXRXMWpCMVBsOVY3SWE2OG9hRmg0
Y0tGV01tbmU3M2VyVnUzc3VVVkVVSm56cHpaczJmUHZIbnp5SmM0SUNuRTYwWEkzc2VFcFR4
c2pQYkpvMUhkeFZHQ0x0SzErTGF5ZDcyWGhMQlZsWGdLQ3d2RDRmREF3RUJiV3hzZFR5ZGsz
NmVUVHhWWnZSY3lubDVSVVhIbzBDR004Y0dEQnlzcksxMHVWMlZsSmVrWkgzendRWFYxTmZs
b2toMUpRMFBEMHFWTGlhOEh4RUVUVWF3eUlZc2hDL2xTSGs1QXNTbGt6YVZSM2NWUm1pN1N0
Zmkyc25lOUZ3MUlLN0ZWbGJDU2tmSjRQRVEybTVxYVpLc0w3c2dDYzljQkFBQUFnbVIvam1r
QUFBQWdYWmo5ZjZRQUFBQ0FPS0RwQUFBQTlzR01tZzZqTkFBQUFQb3c4RGRTa0dZejBOemN2
SERod3NtVEp5OVpzdVNkZDk1UmpPSGZSOGNXNWRCWHcwU3RBb3lkVU90SUlxVkkyQmhiZGkx
V0RNbEY5L3c1SmRKSmVGRVZPWDlsSkszcEVuY0RUVGN6SzFhc2lFUWk4WGg4OSs3ZGwxOSt1
VVlrKzM0NXRpaUh2aG9taWhWZ2JJWmlSeElwUlNLTHNYZlhrdFZIWWx0R3BKUHdMU2wrL2xL
TTBuUkZGNDhRV3I5K2ZVRkJRVTFORFZhcTkwSlhGRWtkRUNjV2l6VTFOUzFZc0VBamhtMTJ4
eGJsb0NSVnc0UmZZbGZZamlSU2lvU1BzWEhYNHVzanNTMGowa21RU2swWWtmT1hrbEdmamhC
Njdybm5vdEhvZ3c4K2lKWCtSNnEySXBBSzlDdmhoeDkrcUIxR0h6dThLRWV5TlV6NEpiWkUx
cEZFU3BId01UYnVXbng5SkxabHhEdUpyQ2FNNFBsTHliU21zOGFIci9laXRpS1FJdEZvZE5l
dVhZc1dMZEtJWVp2ZHlVVTVkTlF3NFpmWUZiWWppWlFpNFdQczJyVVU2eVBKZkxwNEo1SFZo
QkU1ZnlrR2F2cmt5Wk5sSlNWbGtlRFRNOEQ5OTk5Lzh1VEplRHplMU5RMFk4WU1qVWkyMlIx
YmxFTmZEUk9OQ2pDMlFhTWppWnl3Tk1hdVhVdXhQaExiTXVLZGhLMEpJMzcrVWd6VTlJY2Zm
amcvUDE4Mm5zNEc4UFZlMEVSRURnRFFKaGdNenBzM0x6YzNkOUdpUmVGd21DeVV0UzNmN0E0
dnlrRVJyR0dpVVFIR05paDJKSUxHT2M0dnQydlhrdFZINHM4cHhVNmllQ2F5TldFMG1sME5z
ODlkQndBQUFJaGp4djhjQVFBQUFQb0FUUWNBQUxBUG9Pa0FBQUQyd2V5YURvUDFBQUFBNHBp
OTNndG9lb3FJRkRCSnBaU0h6UkQ1MmQrWjlWNTRSTnFLVlFtMVFpaTJoRDlNa2NvdHpjM05I
bytIWEJ2VDA5T0RkWlhIU1ZyVEF4eWc2V1pHcElDSjdsSWVka1g3cUoxWjcwVU53UjZpVVFq
RnhyQ0hLVks1cGJpNHVLT2pZMkJnSUJRSzNYSEhIVmhYZVJ5ak5KMTM4WWk3aUxXbXBxYWpv
d05qM043ZXZuanhZcXhVQVlaRW5qMTc5c1liYjl5eFk0ZmdVUUU4R2dWTUNNbVc4ckF4Mmtm
dDVIb3ZQQ0k5UkxzUWlvM2hEMU83Y2t0eGNmSCsvZnVKcHBOL0dPa29qNU01bjg1citwWXRX
MWF0V29VeFhybHk1ZGF0VzdIU1Awc1JRcEZJaEtvL29BL3RBaVpZVnlrUEc2TjkxSTZ0OTZL
SVNBL1JMb1JpWTNnTlJKcVZXeG9iRzYrNDRvcXBVNmV1VzdlT2RDUWQ1WEd5b09tRGc0UGs4
Ymx6NTl4dTkvSGp4OTF1OTFkZmZZV1ZLc0FnaEtxcnEwdEtTcnE3dTBXT0IrQkpXTUNFa0d3
cER4dVQwS2M3dHQ0TFQ4THVrYkFRaW8zaEQxT3djc3VCQXdmbXpKbURkWlhITVZEVFpmVmVa
czZjdVcvZnZ2NysvcnE2T3JyS2loVXJycjc2NnBVclY1S25pajc5ekpremUvYnNtVGR2SHZs
NkN5U0ZTQUdURkV0NTJBL3RvM1ptdlJjMUV2YVFoSVZRYkF4N21JS1ZXMFpHUm80ZVBlcnor
V3ByYTdHdThqZ0dhcnFzM2t0OWZiM2I3WjR4WThiV3JWdnB3dmIyZG9SUWUzczdlYXBZQVlh
ODFORFFzSFRwVXVMaUFYSFFSQlFMbUFpVzhuQUNzdWFpQzlrWVo5Wjc0UkZwS3l4UUNNV1c4
SWNwWG5tcHBLUms3ZHExOFhnYzZ5cVBBL1ZlQUFBQTdJUFovM01FQUFBQWlBT2FEZ0FBWUI5
QTB3RUFBT3hENWpRZGh0MEJBQUNNSm5PL2tZS21ad0QrSGRGWFpjS1pCVXl3MHYrZmVaeFo3
NFZ2RnZIVG43MDZ6cFlYVnZCbkdkOGwrTE5NWkRzaTlacGtKSy9wZGR3Tk5OMWtzRTJ0cjhx
RVl3dVlpUFJTSjlkNzRkc25ZWXNwRmc2eW1ScndaeG5mSmZpelRIQTdDZXMxeVRCSzAyV2Y1
K1QraFJkZW1ERmpSbEZSMGZidDJ4Vmp5SVAxNjljWEZCVFUxTlRnc1UvMTNOemM2dXBxS0E4
Z0NQK09KRnRsd3JFRlRCQkNicmU3b0tEZ2xsdHVrYzJRVG5GeXZaZGtOVjJ0Y0pETk5KM0Fu
bVdLblVSMmxvbHNoNUt3WGhNbG81cStiZHUyV0N6VzJ0cEtEbEpOMDU5NzdybG9OUHJnZ3cv
U1Y0ZUdoZzRlUERoNzl1eUVHUUk0SFZVbW5GekFCR044OXV6WjJ0cmFaY3VXS2I3cTVIb3Z5
V3E2V3VFZysybTY3Q3pqdXdSL2xvbHNoNUN3WGhPTDRacE9xN3NnaEFZSEI5bFgrUml5a1Aw
czJyWnRtOGZqSWVWSGNuSnlSQTRKNE4rUlpLdE1PTG1BQ2FHL3Z6OHZMMC94SlNmWGUwbFcw
OVVLQjlsUDAvSEVzMHlqUzlDelRHUTdXTGhlRThVb1RlZXJ1L0R2cUdJRkdOblc4dlB6VzF0
Ylk3RllLQlN5WlQ4d0FyYWg5RldaY0hJQkU0enhoUXNYTm0zYTVQZjdGVjkxY3IwWEhlUHBp
bUUyTzVmNXMweXhTOGpPTXBIdGlOUnJrbUdVcHZQVlhYaE5WNndBSTl2YVUwODk1WGE3M1c3
M3M4OCthN04rWUFSb0lsaHZsUWxuRmpEQlkwMHhaY3FVbTI2NjZiUFBQcU1MMlJobjFudmh1
eGEvQkt1TE5SdWc2Tnd0RFgrVzhWMkNQOHV3UU9VbFdYT1JlazNhUUwwWEFBQUErd0QvSXdV
QUFMQVBvT2tBQUFEMkFUUWRBQURBUG9DbUE0Q3BnZCtyZ0tRQVRRY0FCWFFyYWRvbFdHT0Rh
ZGtYUXVpNTU1N0RHUC8ydDc5TlpZTUlvYzJiTjZlZUdGL2hwTG01dWJ5ODNPVnlsWmVYNzk2
OVcyM3ZzdXMxNHZINFF3ODlSTW9TcU9YRFYyVVJ1ZlNEejFDazRJL0lXdnl1ZFZ5SEFwb09B
QW80U3RNckt5dEhSa1lXTEZpUW9xWlhWRlJjdUhBaHhjVDRDaWR1dDd1dHJTMGVqNGZEWWJm
YnJaMERmVnhiVzF0VFV4T0pSRVpHUmpUMkphdktJcEk1bjZGSXdSL3h0ZmdjUU5NQklGVVV6
eXMwc2ZUUWxpMWJQQjZQeStXaVRrckU1Y2xjR0xtdnJhM056ODlmc0dCQloyY254cml6czdP
eXNqSS9QNysydHBiZE1ydDNmbDlIang2OTVwcHI4dkx5NXMrZlQydHdKcFFEaE5CMTExMjNh
ZE9tNjYrL25nUy85OTU3VlZWVnVibTVWVlZWZEZwZ1diRW14ZTBFQW9IZi9PWTNkS2Y4ZG1w
cWFrank3ZTN0aXhjdjFrNk1WamlwcnE1dWIyOGZHQmpZdDIrZjlscnN3WmFXbHI3OTl0c2FB
VmlwS2d0U0t2aWoxb1kwdzZRSy9pUmNDelFkQU5LUDJsbkVsaDZhTm0xYUlCQ0lSQ0lEQXdN
SlYxUU1vSHBkWDE4Zmk4VWFHaHE4WGkvR2VPSENoUTBORGJGWTdLV1hYbUxqWllXUFpQdGFz
bVRKcTYrK0dvL0gyOXJhNXMrZkwzNmtPM2Z1bkRScDBxNWR1OGdHS3lzclgzNzU1VmdzVmw5
ZlgxVlZoWldLTlNsdTUrTEZpMWRlZWVYWFgzK3R0cDB0Vzdhc1dyVUtZN3h5NWNxdFc3ZHFa
TVZXT09uczdDd3FLa0lJRlJVVmRYVjFhUjhMZmV4eXVUWnMyRkJRVUZCV1ZzWk9jczJpVnFo
SHUrQVBuNkY0d1IrUnRVRFRBU0Q5OEdjUlgzcm96VGZmdk8yMjIrYlBuejk5K3ZSZi8vclhh
aXVxYlprdGhSU0x4VERHc1ZpTUZKbkp6YzBsUzZMUktJbFJMSHdrMjFkdWJpNTE3dUxGa2Zq
UEdKZkxSZmVlbTV1TGxZbzFxVzNubVdlZStkV3ZmcVcyblhQbnpybmQ3dVBIajd2ZDdxKysr
a290SlZtRms0cUtpbkE0SEkvSFE2RlFaV1dsNExFVUZSV0ZRcUdCZ1lHT2pvN2k0bUxGZUky
cUxCb0ZmL2dNQlF2K0NLNEZtZzRBNlljL2k5UktEdzBQRHg4NGNLQ2dvSUE4blR4NXNscVJY
b0ppS1NUaVp4c2FHaFl1WElneFhyUm9FZkhwOWZYMUpFWng3N0o5K2YzK2xwYVcvdjUrM1Vl
cTRkTTFXb1pkSG8xRzU4NmRxN1lkalBHS0ZTdXV2dnJxbFN0WHF1WERWemdwTEN3TWg4TURB
d050YlczaTQrbTMzMzQ3MVhRMW5WVXIxS05kOElmUFVLVGdqL2hhb09rQWtIN1FSTEJTNlNI
eTBxUkprK2JPbmZ2aWl5K1NGUjkrK09IOC9IeU5rMUN4RkJJWlQ2K29xRGgwNkJERytOQ2hR
eFVWRmZuNStldlhyMWZiTzcrdlk4ZU8zWFRUVFdRSlhhaGpMT2pnd1lPVmxaVXVsNnV5c3BL
T3B5dkdLMjVuOCtiTmF0dkJHTGUzdHlPRTJ0dmJOZkpodVhqeFltTmpJL21PTW5mdTNLYW1K
cEcxTU1ZOVBUMUxseTdOemMzMWVEek56YzJLeWF0VlpkRXUrTU5uS0ZMd1IyUXQvaWo0SlFr
QlRRZUFMSk9VQ3dNQWJVRFRBU0RMZ0tZRGFRUTBIUUFBd0Q2QXBnTUFBTmdIMEhRQUFBRDdB
Sm9PQUFCZ0gwRFRBV3ZRMHRMUzJ0bzZORFRVMnRyYTB0SWl1SXIycTJvQjBXZzBGQW9weG11
c0JRQm1BRFFkc0FZdExTM3Z2dnZ1WC8vNjE3Lzg1Uy9wVWxXMTdYejAwVWY4U3lEbGdDVUFU
UWVzUVV0THk3Rmp4OExoOExGang2aTh5aDYwdExSMGQzZUh3K0dqUjQrcUxaUnRrOS9SaFFz
WDJ0dmJGVFU5SEE3djM3Ky90N2MzclVjR0FPa0VOQjJ3QmkwdExlZk9uYVAzZENIN29LV2w1
YXV2dm9wR28yVE9kY1dGc20zeU8vcmdndzk2ZW5vVVh4b1pHZW50N2QyM2IxLzZEZ3NBMGd4
b09tQU5XbHBhUmtaRzNucnJyWkdSRVNxNDRYQTRHbzFTbGVjbG5sOG8yNmJpanRUR3pVZEdS
czZjT1FPYURwZ1owSFRBR3JBS1N4OGZQWG8wSEE1M2QzZnIwSFNaY1BPdjhnOWFXbHIyNzkv
LzVaZGZwdlBBQUNDdGdLWURBQURZQjlCMEFBQUErd0NhRGdBQVlCOUEwd0VBQU93RGFEb0FB
SUI5QUUwSEFBQ3dEK09hM3RuWnVSTUFBQUN3UGdnRUhRQUF3RGI4LzFETSs3NmVBZ3hWQUFB
QUFFbEZUa1N1UW1DQyIgLz48YnIgLz4mbmJzcDs8L3A+PHA+SW4gdGhlIG5leHQgcGljdHVy
ZSB5b3Ugc2VlIHRoZSBvdXRwdXQgb2YgeGVucG0gdmlzdWFsaXplZC4gU28gdGhpcyBtaWdo
dCBiZSBhbiBpbmRpY2F0b3IgdGhhdDwvcD48cD5yZWFseSBzb21ldGhpbmcgaGFwcGVucy4g
SXQmIzM5O3Mgb25seSB0aGUgY29yZSB0aGF0IEkgZGVkaWNhdGVkIHRvIHRoYXQgRG9tVS4g
SSBoYXZlIGEgdGhyZWUtY29yZTwvcD48cD5BTUQgQ1BVIGJ5IHRoZSB3YXk6PC9wPjxwPiZu
YnNwOzwvcD48cD48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBZkVBQUFFa0NBSUFBQUN3bzUrMkFBQWdBRWxFUVZSNG5P
MmRhM1JVVlpyM043a1pBcWFTUUJpQ1VDRmdTSUNBWW1nRVdtM2FHVHM5UFRSZUFycG93T25W
MHpockFJMEdkSTJqaTZZQnRVVUgydVlpTFNPR1lCUk1WUzRJZ2tZa2FiVVg0U1pta1lBaEYw
RXVxVXV1Kzh1c05SL3EvYkRmUG4wNGw2cGRweTduOXYrdFo1MXpzcyt1dmYvbnFWTlBudXlx
UEVXK0FRQUFZQWthR3h1SjNob0FBQUJFZ2NiR3hyMTc5LzcvbUU0QkFBQ1ltYjE3OXlLbUF3
Q0FSVUJNQndBQTY0Q1lEZ0FBMWdFeEhRQUF6RVMxRFBGWnhIUVFWd2doa2dPRGMvVG8wZkhq
eHh0VHJSRlVHVUdEUFJrYUdtTFJIREVkeEFPMWwzcFVZbm84NDBoeGNmSEJnd2ZqTmwxWUdD
R2VHa0dERFJrWUdEaDkrclRMNWJwKy9YcE5UWTM0RkdJNm9HZlBubDIwYUZGbVptWktTc285
OTl5emYvLysyTTJsTGFickdEaFNVMVA3K3ZwaU5IaE5UYzFQZnZLVDFOVFV6TXpNSjU1NG9x
dXJLNnlIR3lHZUdrR0QzV2hyYXp0MDZGQlRVMU43ZTN0TlRjM3AwNmZGWnhIVDdjNzU4K2Yv
NFIvK1lkdTJiVmV1WFBINy9TZE9uSGo0NFlkak41M3BZbnBNcDM3d3dRZmRibmRQVDA5WFY5
ZktsU3QvOHBPZmhQVndJOFJUSTJpd0cxOTg4Y1gxNjlmVnppS20yNTNISDMvOEQzLzRnK0lw
UXNpbVRadXlzN1BUMHRLV0wxL3U5L3VGZGtrM3hjZXlBNy9mdjJ6WnNyUzB0REZqeG16ZXZG
a2Uwd2NHQnNyTHkwZVBIajE4K1BEUzB0S2JOMi9LaHhLUVBKWVFzbTNidHR6YzNKU1VsS2xU
cDM3MjJXZTdkKytlUEhseWNuTHl6Smt6VDU0OHlUa0ZwZFRuOC8zcnYvN3I3YmZmZnZ2dHQv
LzYxNy8yK1h5S1V3djA5Zld0V2JObTFLaFJEb2ZqbFZkZWlkeGpIby9udHR0dWs3Y0hRWEc2
K2ZQbnYvZmVlMEtmdHJhMnNXUEhpa05BWGw3ZXFWT24yUEh1M2J2WndhbFRwL0x5OHFpNnI5
VGFoV3Y1eTEvK01tN2N1TmRmZnoyc1N3QlJCekhkN293Wk0rYnk1Y3VLcHdnaEpTVWxYVjFk
WFYxZEpTVWx6ejc3ck5BdTZhYjRXSFpRVmxiR0J1bnM3SHpvb1lma2NmbmxsMTkrOE1FSEwx
MjZkUFBteldYTGx2MzJ0NzhOTXBya1IwTElva1dMTGw2ODZQRjRmdmU3MzQwY09mTFJSeDhW
ZnZ6UmozN0VQOFV6enp3ajZQeW5mL3Fuc3JLeUlGZEhLVjIzYnQwLy91TS9YcnAwNmRxMWE2
dFhyNDdjWXdjT0hMai8vdnNWNTFKRGNicmEydHFDZ29MQndVSFc1OGtubjl5NGNhUDRVU3RY
cnR5MmJSdWw5TktsU3lOSGptVFJlZXZXclU4OTlSUlY5NVZhTzd1VzZ1cnEwYU5ISHpod0lD
ejlRQnY0M0FzSVJsSlNVbjkvditJcFFzaTMzMzdManMrZlAzL0hIWGNJN1pKdWlvOWxCK1BH
alJNRytlYWJiK1F4M2VsMG5qdDNqaDEzZG5hT0dUTW15R2lTSHdraFY2NWNZY2NlajBmeVkx
SlNFdjhVT1RrNTU4K2ZGM1NPR3pjdXlOVlJTdSs0NHc3NVMwYXp4NzcrK3V2YzNOeHdYNE5x
MHhVWEY3Lzc3cnRDbzhmakVUL3E0TUdEcGFXbGxOS05HemVPSGoxNng0NGRsTkxISG52c280
OCtvdXErVW1zbmhQejNmLzkzVGs1T1kyTmpXT0pCaE9CekwwQ1o0SG42d01BQU8rN3Y3eGRD
WkZneFBURXhVVHlJUEtZbkpTV0psemlHRFJzV1pEVEpqOEdWaERXRlJLZmF4WXI3eTM4WGF2
UFlKNTk4TW1IQ0JMV1lxTGI0RTJTNkF3Y081T2ZuRHd3TUxGbXk1STAzM3BBOHFxZW5aOEtF
Q1pUUzZkT251MXl1ZSsrOWwxSTZZY0lFRnZyVmZLWFdUZ2laT0hIaTJyVnJGY1dER0lIUHZR
QlZIbi84OFMxYnRpaWVFcWVCMzM3N3JaQzZKaVVsQ2FuZmxTdFgrUFAwOCtmUHk4UHgrUEhq
di92dXUrQWlJNHpwUEZQazVPU0kvNTdJeWNsUkhGTWdaSjdPNmJHS2lvcWNuSnltcHFiZzho
UlJtMjVvYUdqNjlPbGxaV1ZPcDdPM3QxZit3UHZ2djMvZnZuM0Z4Y1dVMHVMaTRnTUhEanp3
d0FQc2xKcXYxTm9KSVpjdVhabzBhZExtelpzMVhBTFFBRDczQW9KeC92ejVzV1BIL3VsUGY3
cDY5YXJmNzI5c2JCUSs5MElJK2VkLy91ZnU3dTd1N3U2Zi8vem53aEx6ckZtelhucnBKWS9I
ODkxMzN6M3l5Q01oMTlQWklHek5WeDZPZi9lNzM1V1VsTFMwdFBUMzk1ODhlWkl0QzBod09C
ekNILzQwL0pqT004V2FOV3VFdGVtSEhucm82YWVmVmh4VDRQbm5uMWRjVHcvTFk2KysrdXFF
Q1JQT25EbWpPRVZJMUthamxGWlVWQkJDZHU3Y3FmakFqUnMzamhzM2pxWHdXN1pzdWVPT096
WnQyc1JPcWZsS3JaMWRTM3Q3ZTM1Ky9vWU5HN1JkQ0FnTGZPNEZoT0RNbVRPLy9PVXZIUTVI
U2twS2NYR3g4UGwwOGNjcWxpMWJ4ajRLUWluOTZxdXY3cnJycnFTa0pLZlR1VzNidHVBeDNl
ZnovZXBYdnhvK2ZIaDJkcmJpNTE0R0J3YzNiTmpnZERxVGs1T25UWnRXVVZFaEgyMzkrdlVq
Um95UVA1WXpwdk5NNGZWNlY2eFlNWExreUpFalI2NVlzY0xyOVNxT0tkRFgxN2RxMWFyTXpN
eU1qSXpYWG50Tm04ZUlqSjZlSHNYcEZGR2JqbEs2Zi8vK3laTW5xNzFUOHZYWFh5Y2xKWFYz
ZDFOS3U3cTZrcEtTL3ZyWHZ3YjNsVnE3Y0MwZEhSMEZCUVV2di93eXYzNFFDeERUZ1NwcTRR
eW9ZUnlQL2VJWHY5aTdkNi9lS2tCTXdPZGVnRWFNRTZITWdoRThOamc0dUgzNzlzTENRdUhq
ak1CaVNJSTRZanJneFFnUnlsd1l3V09FRUtmVGlVOFdXcGlhbWhxaFhrVmZYeDgrOXdJQUFD
YW1zYkh4MUtsVC9mMzkvZjM5cDA2ZGtueG9DakVkQUFETWhNL25PM0hpaE52dGRydmRqWTJO
NHZmR0tXSTZBQUNZR3F5bkF3Q0FkVUJNQndBQUUyT2p6eksySERuU2N1U0kzaW9BQUNCK1dE
YW05L3Y5VytmTjJ6cHZYdi9maWxZREFJRGxzV3hNLyt6MTF6YzRuUnVjenM5UWxSOEFZRmNz
RXRPdlg3cTBPVCtmeGZUTitmblhMMTNTV3hFQUFNUUVyOWZiMk5nb2ZKWlJxRTNFc0VoTXIx
eXhnZ1YwWnBVclZ1aXRDQUFBWWtKRFE4TzVjK2Y2K3ZyNit2ck9uajNiME5BZ1BtdVJtTTU0
NFlVWDJFRjdlenRQL3o2K0dxYzhvM0hPeU5NTnF2aTdRUlYvTjJPcW9uekNvamlqTVZXRmhj
dmxFb3I1REE0T3Vsd3U4VmxyeHZRdnYveVNwLytOSFR0NHV2R014amtqVHplbzR1OEdWZnpk
akttSzhnbUw0b3pHVkJVV3RzalQrL3I2V2x0YmYvT2Izd1FDZ2M3T3p2LzkzLy90N094a3gw
RzI3ZWZPaGV6RE9Scm5qSmN1WFlJcXFJSXE4ZmIvdk41NHptZ2NWZDk5OTExcmE2dUdMTjdq
OFZoL1BaM3h3Z3N2QkFLQlFDRFEwZEVSNElBMk5mRjA0eG1OYzBhZWJsREYzdzJxK0xzWlUx
V0FUMWdVWnpTVXFsaUVRV3ZHZEFBQU1EN2FBcDB0UHZmQ1FKNnVvUTluTjZqaTd3WlZZWFZE
bmg0dTVsaFBGNzZQVVdpcHJLd3NMQ3hNVGs2ZU1XUEdvVU9IS0tYZmZmZmQzTGx6VTFKUzVz
NmRxL2dWNXNqVEFRQW1RbHUwTk5QblhzUXgvZEZISDIxdWJ2YjVmRHQyN0JnMWFoU2xkUEhp
eGVYbDVUNmZyN3k4Zk1tU0pmS0hJMC9YMEllekcxVHhkNE9xc0xvaFR3OFhjK1RwRE1Xdi9t
cHRiWFU2blpUU1VhTkdkWFoyVWtvN096dFpsSmVBUEIwQVlDSzB4VWt6ZmU1Rkh0TTdPanBt
elpwMThPQkJTbWxDUWdMN2kyTmdZQ0F4TVZIY2JlREtsUnR2dmJWdTVVcDY0a1FnRU9nOGVE
QVFDTERqSUZ2YTFCU3lEK2RvbkROMmRIUkFGVlJCbFhqcmUvdnRlTTVvSEZYLzUvZmZlT3V0
M3VibTZFWlJROGYweHNaR3A5TzVaODhlOW1OV1ZoYnlkQUNBWmRBV0o4MVVQMTBjMDdkdjM1
NmRuVjFYVnllMGxKYVdDdXZwcGFXbDhvZGpQVjFESDg1dVVNWGZEYXJDNm9iMTlIQ1JCSEVK
Um9ucDVGYmtMVDA5UFJjdlhwd3paMDV5Y3ZLOTk5NTdTYW55SXZKMEFJQ0owQll0elJIVG93
THlkQTE5T0x0QkZYODNxQXFyRy9MMGNMRmpUQWNBQU9NVGl6Qm96WmlPUEoyL0QyYzNxT0x2
QmxWaGRVT2VIbDBzRXRNbGRSbXh4UlpiYkEyKzFWYVg4ZkRodzgzTnpaMmRuUU1EQTRvZExC
TFRHY2pUTmZUaDdBWlYvTjJnS3F4dXlOUEQ0c2FOR3kwdExjZVBINitwcVRsKy9IaExTOHVO
R3pmRUhhd1owd0VBd1BoRUV1NzYrL3M3T3p1Ym01c1BIejRzYnJkbVRFZWV6dCtIc3h0VThY
ZURxckM2SVUrUExrYUo2Zks2alBJVzFHVUVBRmlKV01SU284UjBocnplaTdnRmRSbkRIUXFx
K0llQ0t2NmhrS2VITlpSTjgzUkc4SmlPdW93QUFDc1JsYkJwbW5vdjhoYlVaWVFxcUxLWXFn
RHFNa1pjbDlIRU1SMTFHUUVBVmtKYm5EUnJYVVo1QytveWhqc1VWUEVQQlZYOFEyRTlQYXlo
WXIyZWJ0Q1lIckl1STZVVWRSa0JBRllpS3NIVG9ERTlLaUJQMTlDSHN4dFU4WGVEcXJDNklV
K1BMdGFNNlFBQVlIeTBCVHF2MTJ1YTd5T05FT1RwR3Zwd2RvTXEvbTVRRlZZMzVPbmgwdERR
Y083Y3ViNit2cjYrdnJObnp6WTBOSWpQV2lTbW95NGp0dGhpYTY2dHRycU1sRktYeThVKzFV
MHBIUndjZExsYzRyTVdpZWtNNU9rYStuQjJneXIrYmxBVlZqZms2ZUZpaXp5ZGdmVjBBSUNK
MEJib1BCNFAxdE5WSEdySXpBV3ErTHRCRlg4M1k2b0tJRStQTmthSjZUeFZHRkdYRVFCZ0pi
UkZTN1ArSDZtOENpUHFNb1k3RkZUeER3VlYvRU1oVHc5cnFLam42U3lJQzZIY05ERmRYb1VS
ZFJrQkFGWkNXNXgwdTkwM2I5NTB1VnczYnR5NGNlTkdiVzJ0K0t4eFk3cThDaU5QWGNaSFRv
d25BYkxtNEZ3U0lPdzR5SFpSMC9pUWZUaEg0NXl4cUtNSXFxQUtxc1RialcvUGpPZU14bEds
dVM3anFWT25hbXBxMnRyYURoOCs3SGE3TDF5NElENXIzSmd1cjhMSVU1ZVJCQWdNQm9NWjN6
VG42Y0V4Ymt5WFYySGtxY3ZJbkZYVVVjVGowMFZONDNtNjhZekdPU05QTjZpQ0t2dW80aFFX
eFJtTm8wcHpURGZIZTZROFZSaDU2akx5dUJnR2c4RjBOMXZrNlJHQ1BCMnFvTXBjcWppRklV
L254NW94SFFhRHdReHVpT21oUVo0T1ZWQmxMbFdjd3BDbjgyT1JtQzdVWlNRQk1yMXpPcmJZ
WW91dHdiZWE2ekxhcTM0NmlmYXZZczdSTEo5UFFSVlV4VUlWcHpEazZXTHNWWmVSeDhVd0dB
eW11Mm1PNmZhcW44NmNoVHdkcXFES0ZLbzRoU0ZQRnhPRlBIMzM3dDJabVptWm1abnZ2UE9P
TmhFYWNMbGNreVpOU2tsSmVlQ0JCOWkvai9MVVplUnhNUXdHZytsdW1tTzZ4dnJwZnI5Zk9N
N0l5R2hxYW1wcWFzck16TlFtUWdQWjJka3VsOHZ2OTd0Y3JxVkxsMUsrdW96TVdjalRvUXFx
VEtHS1V4anlkSDVVWS9xRUNSTjI3ZG8xTURCQWRZcnBvMGFOY3JsY3ZiMjlMcGRyOU9qUmxL
OHVJNCtMWVRBWVRIZUxkMjJBaG9hRytmUG41K2ZuNzl1M2IrZk9uUmtaR1JrWkdidDM3OVlt
UWdOVlZWVVRKa3dZUG56NHFsV3JrcEtTS09veVFoVlVXVTRWUVYzRzhPc3lSbFEvM2UxMjMz
MzMzVE5uenBTOHRScFBYQzZYMCtta3FNc0lnOEVzWkpIazZWUkRUQmZlRi8zem4vKzhiOSsr
L1B6OHVYUG5IanQyVEpzSWJRd05EWjArZmJxd3NQRDN2Lzg5UlYxR3FJSXF5Nm5pRkliMWRE
RWFZM3BtWm1aalk2T3doajR3TUxCejU4NEpFeVpvRTZFQlZxQng3Tml4Ly9WZi84V1dYRkNY
RVFhRFdjYWk5UjRwYjB4WGZGOVUvR0VZQTRJOEhhcWd5bHlxT0lVaFR3OENiMHpmdFd0WC9O
OFhqUkRrNlRBWXpDeG04ZS9FaUFySTA2RUtxc3lsaWxNWTh2UWdXRE9tb3k2ajNiYWQwL1hY
Z0MyMmtXdzExMldVWU0yWXprQ2ViaDlWQVdKRVZjYjBsWkZWY1FwRG5zNlBOV002ektURzlw
dzlkVmNMZzBWaVdFOFBEZkowczZ0aWU1NmhBc2pUTGFHS1V4anlkSDVDeFBTR2hvYjgvUHho
dzRaUlNwOTQ0b21LaW9wWWlGQ2txcW9xTHk4dk1URng0c1NKVlZWVkZIVVpiV0JzejlsVGQ3
VXdXQ1NtVDU1KzU1MTMxdGJXRWtJb3BSY3ZYc3pOemRVbVFnUHA2ZWx1dDV2VlpYUTRIQlIx
R1cyZ2l1MTVoZ29nVDdlRUtrNWh5Tk1sOVBiMkhqdDJyS2FtcHJ1N1czSXFSRXhQVGs3Misv
MHNwbCs5ZWpVdExVMnppSEFwS2lweXU5MnNMdVBNbVRNcDZqTGF3TmllczZmdWFtR3dTRXh6
VEdjQi9keTVjei84OEVOZFhkMzE2OWZGWjBQRTlBVUxGdXpldlpzUTB0N2Uvc1FUVHl4YXRF
aWJDQTJjT0hFaVBUMmRFSktlbm43aXhBbUt1b3cyVUJVZ2hJN25VaFVnZHZlVk5WUVIxR1VN
dnk3ajBhTkhoWEI5K2ZMbFE0Y09pYytHaU9udDdlMExGeTVNUzB0TFMwdGJ0R2pSOTk5L0gr
NzBtcGs4ZWJLdzluTG5uWGRTMUdXMGdiRTlaMC9kMWNKZ2taam1QRjBTcXk5Y3VDRCswYmlm
ZThuSXlCRFdYbGpOR2RSbHRMd3F0dWNaS29EMWRFdW80aFNHOVhReEViMUh5bGJTMVg2TUta
V1ZsVTZuTXpFeE1UYzM5LzMzMzZlb3kyZ0RZM3ZPbnJxcmhjRWlzWGpYMm1XSWcvaUZDeGZp
K1I2cEJwQ25tMTBWMi9NTUZVQ2ViZ2xWbk1LUXA0dlJHTk9KakxTMHRMVnIxMm9URVIrUXA1
dmQySjZ6cCs1cVliQklUUDg4M2ZnZ1R6ZTdLcmJuR1NxQVBOMFNxamlGSVUvbng3anZrWVlG
NmpKYVk5czVmWHFBOFBiVVhTMjIyRWF5MVZ5WE1hTDNTQThlUEppYm16dHMyREJoQlVaNzNJ
MDl5TlBOcm9ydGVZWUtJRSszaENwT1ljalQ1UXdORFVrV1lSZ2hZbnBPVHM3Um8wY0pJVGR2
M2x5OWV2WExMNzhjaVloWWcvVjBzeHZiYy9iVVhTME1Gb2xGRXRNSEJnWk9uejd0Y3JtdVg3
OWVVMU1qUGhWNlBYMXdjREFoSWFHdnI4L2o4V1JrWkdnV0VRZVFwNXRkRmR2ekRCVkFubTRK
Vlp6Q2tLZUxhV3RyTzNUb1VGTlRVM3Q3ZTAxTnplblRwOFZudWQ0am5UeDVzc3ZsT25yMGFE
eGp1dmdqTjFsWldSUjFHVzFnYksvWUhySUZCak9YYVk3cFgzenhoYVRHaXhpdTkwZ1BIRGlR
bloyZG5wNitjK2RPYlNJaTRmang0ODgvL3p4RlhVWWJxR0o3ZWJlQVNreTNzNitzb1lwVEdQ
SjBma3p3dVplU2twTExseTlUMUdXMGdiRzlZanU1TmJJcmRvUEJUR1Q2eEhRZGF3TXdHaG9h
bGk1ZHlvNVJsOUh5cWdJcWRSa0Q1TzliY1U4Nys4b2FxZ2pxTW9aZmx6RTRScThOc0dEQmdx
Kysrb29kb3k2ajVZM3RGZHNsWjlWNndtQm1zWGpuNlVhb0RYRHMyTEg3N3J0UCtCRjFHUzJ2
aXUzbDNjUzl4QzEyOXBVMVZIRUt3M282UDRhdURYRC8vZmQvK09HSHdvK295Mmg1WTN1MWR2
Rlp0WjR3bUZuTXZ1K1I4b004M2V5cTJGN2VUZHhMM0dKblgxbERGYWN3NU9uOHFNYjBqejc2
cUtTa2hCMnZXclVxTFMxdDBxUkpmLzNyWDJNaElsb2dUemU3c2IxYXUzQldmQXlEbWRUaUhk
UG56WnQzOU9oUlNxbkw1Wm8yYmRxVksxYzJiZHIwMDUvK05CWWlvZ1h5ZExPclludWhXK0RX
ckZ3NEt4emIyVmZXVU1VcERIazZQNm94L2JiYmJ2UDcvWlRTMWF0WC8vNzN2NmVVWHIxNmRl
VElrYkVRRVRtb3kyaU5yYVF1bzNETTJ1VmJJMmpHRmx0dFc4MTFHWU9qR3ROSGpoeDU1Y29W
U21sSlNRbDdvOUxuODkxMjIyM1JuVDY2SUU4M3V5cTJGN29GbFBKMHNkblpWOVpReFNrTWVU
by9xakg5b1ljZTJyUnAwOFdMRnpNek03dTd1eW1sbjN6eXlZOS8vT05ZaUlnV1dFODN1N0c5
K0VkeHU5eDBGd3lEYWJaNHgvVFRwMC9uNStlbnBhVnQzcnladFpTVWxMaGNybGlJaUJiSTA4
MnVpdTJGYmdIazZWWlh4U2tNZVRvL3h2MHM0K0RnNElzdnZwaVRrOE8ra1lPaUxxTU5qTzNW
anVXbXUyQVlUTFBwR2ROMStjK2o5ZXZYVDVreXBibTVlV2hvaUxXZ0xxUGxWYkU5MjNVVUlV
KzN2aXBPWWNqVCtURnVUSGM2blpLbEh0Umx0THl4dmRxeDNIUVhESU5wTnR2RjlNVEV4Tldy
Vnc4ZlB0enBkQjQ0Y0lDaUxxTU5WQVZFZFJrN2lvcUVZOVl1MzlyWlY5WlFSVkNYTWM1MUdY
VmsxS2hSTHBmTDcvZTdYSzdSbzBkVDFHVzBnYkc5MnJIY2RCY01nMmsyMjcxSHVtVEpFcGZM
MWR2YjYzSzVzck96S2VveTJrQVYyN01kMXRQdG9JcFRHTmJUK1ZHTjZXKy8vZmJ5NWN2Rkxj
dVdMZHU5ZTNjc1JDalMzdDUrMzMzM0pTY241K1hsc1lWMTFHVzB2TEc5MnJIY2RCY01nMm0y
ZU1mMHZMeThscFlXY1V0TFM4dWtTWk5pSVNKYUlFODN1eXEyWnp2azZYWlF4U2tNZVRvL3Fq
RTlPVG01cjY5UDNOTGIyNXVTa2hJTEVkRUNlYnJaamUzVmp1V211MkFZVExQRk82WVhGQlEw
TkRTSVd6Nzk5Tk9wVTZmR1FrUzBRSjV1ZGxWc3p3NlFwOXRCRmFjdzVPbjhxTWIwZDk1NVor
TEVpWFYxZFY2djErdjExdGJXNXVibXZ2dnV1N0VRRVRtb3kyaU5yVkJ0TVVBVWpsR1hFVnNy
YmVOZGw1RlN1bi8vL3VMaTR0VFUxTlRVMU5teloxZFZWVVYzN3FpRFBOM3NxdGllM0pxbkJ4
bk16cjZ5aGlwT1ljalQrVEh1WnhrMWdQVjBzeHZiRTFFY0owRmp1dTZDWVRETmhwZ2VHdVRw
WmxmRjlnUjV1bTFVY1FwRG5zNlBjV002RWNGYVVKZlI4c2IyQkhrNnpBWm14NWd1YVVGZFJz
dXJZbnVDUE4wMnFqaUZJVS9ueDlBeC9mYmJiMDlMU3lzcEtXbHRiYVdveTJnRFkzdUNQSjNQ
VjdwcmdFVml0b3Zwaks2dXJyS3lzamx6NWxEVVpiU0Jxc0RmNmpMUzhYK3Z5NmhZa1RGZys3
cU1BV0pFVmVINmlxQXVZOXpxTXBKYmNUZ2NpeGN2L3Y3Nzc2TTdQUTllcnpjNU9abWlMcU1O
ak8wSjhuUStYK211QVJhSjZaeW5kM1YxclZ5NThwZS8vR1VzUkFUaDJyVnJMN3p3UW5GeE1V
VmRSaHVvWW51QzlYUStYeGxRbFladVdFK1BMbUdzdmR5NGNTTXRMUzBXSWhSaGZ4K2twcVl1
V0xEZy9QbnpGSFVaYldCc1Q1Q244L2xLZHcyd1NNeDJNVjBEeU5QTnJvcnRDZkowUGw4WlVK
V0dicEZreEFFUzlvekkwLzgvM2QzZEsxZXVYTGh3WVN4RVJBdms2V1kzdGlmSTAvbDhwYnNH
M2MzVVRvaDNUSmU4UjVxZW52N1lZNDkxZDNmSFFrUzBRSjV1ZGxWc1Q1Q25oK01yUTZuUzBB
MTVlblF4K21jWk9VRmRSbXRzVVpkUmc2OTBWNkxqMXRRZTBLRXVvK2xBbm01MlZXeFBrS2VI
NHl0RHFkTFFEWGw2ZEZHTjZaOS8vbmxoWVdGU1VsSmhZZUVYWDN3Umk3bWpEdGJUelc1c1Q3
Q2VIbzZ2N0d5bTlrQzhZL3EwYWRPMmJObmk4WGkyYk5sU1ZGUVVpN21qRHZKMHM2dGllNEk4
UFJ4ZkdVcVZobTdJMDZPTGFreFBURXpzN2UybGxQcjlmc2svNHNlVEYxOThFWFVaN1dOc1Q1
Q25oK01yTzV1cFBhREQ1MTRVaitOSlUxUFQyTEZqaGRsUmw5SHlxdGllSUUvbjloVnprWEZV
YWVpR1BEMjY4SDZXVVZMS1BBNzRmTDdwMDZjZk9YSkVtQlIxR1MxdmJFK1FwM1A3Q2s3UVhZ
TjI4WGI3TE9PcVZhdGVlKzAxS3ZvckFYVVpMYThxZ0xxTVlmb3FRSXlsS2x4ZmtjZ3FJTEk3
Skt3WjQ2Q0tjOFo0MTJYVW5XSERoa24rUGtCZFJzc2IyeFBrNmR5K2doTjAxNkJkZkp6ejlM
ZmZmbnY1OHVYaWxtWExsdTNldlRzV0lvSWo1T21veTJoNVZXeFBzSjdPN2FzQTF0T2pLbDV3
S2ZzTElLWitpSGRNejh2TGEybHBFYmUwdExSTW1qUXBGaUtDSThSMDFHVzB2TEU5UVo3TzdT
czRJVVplallOajR4M1RrNU9UKy9yNnhDMjl2YjBwS1NteEVCRXRrS2ViWFJYYkUrVHAzTDRL
SUUrUHFuamgwSUo1ZWtGQlFVTkRnN2psMDA4L25UcDFhaXhFUkF0NW5oNndkeFpqT21ON2dq
eWQyMWR3UW95OEdnZkh4anVtdi9QT094TW5UcXlycS9ONnZWNnZ0N2EyTmpjMzk5MTMzNDJG
aUdnaHhQU09vaUtlcDl5WW1ZdWRWYkU5UVo3Tzdhc0E4dlNvaWhjT0xaaW5VMHIzNzk5ZlhG
eWNtcHFhbXBvNmUvYnNxcXFxV0NpSUNwSzZqSUcvVld2cm5LNS85VFZzK2Jlb3l4aXVyMngr
aDBmRkEySlB4dlB1UWwzRzBJanpkT0hYSVlrc1FTQVd6ZklNcFVwNG1vU25MSUE4UFZRZjRk
QlFxalIwaXpCUEQ0VDVmVStLdDU4d2puQnN6VHpkZEFneFhldzZIcWZEOUxXQVVreVhIOHRO
ZCtYNk9nMU9pSW9IeEo0VW40bTVlTVQwa0NCUE42bXFBUEwwOFBzSWg0WlNwYUdid2ZQMEFK
RjJqcFlmYkJmVEt5b3E4dlB6azVPVFo4eVljZWpRSVJwT1hVYXg2M2ljRHRQUjJGNXlMSndu
eU5PRCtnMU9pTndEWWsrS3p3aG5KWjJqSnQ1dU1YM3AwcVd0cmExZXIzZmZ2bjFaV1ZrMG5M
cU15Tk5OcEVyOE5BbkhBVFBrNlFHVnV5dUtxb1JQY01sTk9BdzVGT3RqelB1S1U1alI4blFl
dDRjV2I3ZVl6dkQ3L2UrLy96NzdVZzcrdW94aTEvRTRIYWFqc2Iza1dEaFBESnlueDBGRGtQ
SDVuUkIxa2JwN1h1S0VxQXdTQ0NkUGo0b0g3QmpUV2ZXdWpJd005dVY1L0hVWk8rZk9EWWlx
MWhGVFZhcXptNm9BK1h0MXZZQ3A2aktLbGNmSVY1MXpJNjNMS1BTSmo2cHc3eXNTY1YxRzhX
dWNaMFpKSC9FZEpmYXFiK1pNd2MrUy9zSVdkUm0xd05aZVdKMFovcnFNOGwrMk1NTWEyMHVP
aGZQRURIbDY3TVFFR1ZiaUloNlIwYjN3U0FhTWlwaklaUkJackpEOEtKRXFQeHZSMUhiTDAx
ZXRXdFhkM2UzMWV2ZnYzejltekJnYVRsMUdyS2ViU0pYNGFSS09BNFpmVHhmYWlDeTR4SG85
WFQ0cHo3STd6d2V1K1ZXSnI1Y28vVlpqejJBUTVVS2o0SzZBK3E5MjRXYVFkeE1QSlg1MlF2
YVJkSkRNcUxpZUx1bU05ZlR3MkxWclYwNU9Ua3BLeWozMzNQUEpKNS9RY09veVNyekg0M2VZ
WHNiMmttUGhQQWthMDNXWExWY2JveWtVMjBPNklrYnVrZzhvSDErdFJjMUNkcEJmU0ZTZHJh
QkJtRVh4RXFMZ1JydkZkQTBvNXVsQnZHK2ZqRGo0TFlnOFhkSkhhRmJzRmxEL3JST3VyeFNu
RUh0RDRnU0pQTUhVOG5UeFQyeVpXTzI2Skg0SXlNS3grRmd0VDVlSVpLcUN5SllMVXpQSkt6
cVNia0g2aUVVaVR6Y0V5TlBWek1oT1lIdkpNZWVqWTZkSFBFWGcxcWdhVXBKY0lYK2Y0Qk54
ZWthaW1jZDdJYWNJTWxySUMrUlhycThSbGVkRjdxVkFOTzQ5eFBUUUlFOVg2eFA4RmpSeW5o
N2NvcTRxNUdBOHFuZ1NUODZob3BpZkdsTVZwekRrNmZ4WUpLYkw2ektpZXArazhwenVHb0pY
eFpNY0I5UnJNY2IwbWVXY0YxdExib2xTWFVhaFhmRXM2akxHRnVUcGFuMkNPRUZIVllLMkFQ
TDBDUHFZV2hXbk1OM3o5SURTeWd6eTlKaUQ5WFExTTdJVDJGNXl6UG5vR0ltQjJkT0krbnE2
MnRsSURERTlOTWpUMWZvRXZ3V1JweFBrNlRxcDRoU0dQSjBmNDhiMHlzckt3c0xDeU9zeUJn
eWNva3FmNDVoSk5iSVQyRjV5elBub0dJbUIyZE5JMER4ZDNqbENzMTFNZi9UUlI1dWJtMzAr
MzQ0ZE8xZ2xBTTY2akFIWnIySTFueG90VDJkU2thY1Q1T25oOURHMUtrNWhSc2pUNVoyUnAy
dWt0YlhWNlhSUzdycU1pdDQzaGNWT3FwR2R3UGFTWTg1SHgwZ01EQlpBbmg0ak9qbzZaczJh
ZGZEZ1FjcGRsekZBYnFuTEdLUTZvOUVxSUFhaVhUK1A5UWxabjlMSWRSa0RzbHFNNG0yTWZC
Vmt5Nk9LV2ZBK2luZXB0ajZtVmhVZ3hEZHpaanhuNUZjbGZsWEsrMFQrcXJkalhjYkd4a2Fu
MDdsbnp4NzJJMmRkUnNWZmlwSC9VbzJEeFVpbndUMGdsaWNjY3o0NlJtSmdzQUR5OUtpemZm
djI3T3pzdXJvNm9ZV3pMbU5BYWNsTTBhYzJXVThQZVF0aVBaMWdQVjBuVlp6QzRyT2VMbEhG
amdKWVQ0OFc1Rlo2ZW5vNDZ6SXFPcGJIOVhwWmdFZ1BvajYra1QwZ2xpY2NjejQ2Um1KZ3NB
RHlkQ05nMGp4ZGZOUEVRbFhJV3hCNU92bGJDZktRZzVrM0l6YW1LazVoeU5QNXNXWk1WM3dD
REd1QlcyTjZMTVkzc2hQRTJvUmp6a2RIVndiL3ZEQTdHTnNGa0tmckNQSjB4VDRoNzBKNzV1
bVNTUzJmRVJ0VEZhY3c1T244V0NTbWkrc3lxbFZjTTBJTlFyVmFnRUpGd0JpTmIrVDZsTHJV
WmVRY0gxczdiOFd2eWlqZWU4SVdkUmxEZ3p4ZHNVOXdKM0FPWmJFOFhkN0w4aG14TVZWeEN0
TXJUdy9TZ1NCUGp5cTRXS2dBQUJWRVNVUkJWQVBCMTlQRng0YXlBTmJUNDc2ZXJ2ZEZ3MHhn
SkZSTWo5QVEwME1UUEUrWFBCa0JYYjkxL3BhbkZuazY4dlFJK3BoYUZhY3c1T244R0RlbUM1
OU1GMW80NnpMeVBHSEVTQ1ZRQXNqVHRlYnBtaTlLNzR1R21jQ0lwanc5eUNscFQ3dkZkSVk0
cG11dXk2aG15TlA1aDRwZHRVaXhObkZIenR4VG15cDVMOHRueE1aVXhTbk1SSGw2UVBaQ1E1
NStDK0tZcnJrdVk1Qm54UWdXaUZlZWJxaXJWcnh3RGNORXhTY3dtQVpUYkZWclYraUptQjVK
WFVhMVNuVkdxTXNvVkNJTXhMSXVvM2hya0xxTUFWSEZPNkVsM0ZxRDJsVFpzQUtpTVZVRkRG
eVhNV1FmeGJ0ZC92cnFLRUpkUmhIaW1CNUpYVVkxQzZzM1ovK0FiSFU0K0RpQitPYnBNWm9s
UW1GcVVrTmFFTWZ5T3dRRzAyRHlKbmw3a1A3STA3bnFNakozaGJ1UXAvamNDTnVpRHRWdlRS
SU8rYXY2aWJzcFBrUll1UlpyRUxld0E1NjF2T0JmNlNMcHB1WUJ3VmRxZDYyNG5mbEswazE4
SVlJVFNLaVl6cjlHTEg4NkpLNFRxMUo3bWl5L2NtMU1WWnpDZEZsUEQ5bEhIQm5ZTHVTTTRo
TzJpK25rVmlpbFBIVVplWjZ0V0pqYTB4bTcwWWdzVnZMY1hzYThYa2lGMmRIc0Z0TTFvRGxQ
RDI3SXA2QUtxbUtraWxPWU1mUDBTRlVocG9kRXh6d2RCb1BCd2pQRTlKQWdUNGNxcURLWEtr
NWh5TlA1c1VoTUYrb3lCdlN1NVlZdHR0aGl5N05GWGNiUUlFK0hLcWd5bHlwT1ljalQrYkZt
VElmQllEQ2pHMko2U0pDblF4VlVtVXNWcHpEazZmeVlLYWJ6MUdYa2NURU1Cb1BwYjMrTDZa
VlBQbm50NHNWb3hVa3p4WFNldW96TVdjalRvUXFxVEtHS1U1aTE4L1FOVHVmbUtWTStlLzMx
ZnA4djhqaHBwcGpPVTVlUng4VXdHQXltdjRsaU9yTnRQLzd4dDRjUFJ4Z256UlRURmVzeW5q
MTdkdTNhdGVWcjFqeXpjT0ZQNTg5L2R0bXl0V3ZYL3ZiaGg5ZXVYY3VPZzJ6TEhuc3NaQi9P
MFRobi9QV3ZmdzFWVUFWVjR1M1RQL3RaUEdjMGppb1d0Wjc3elcvK0h0UG56Ly8yNDQ4ampK
Tm1pdWs4ZFJuWndZVUxGM2dHOUgzNktVODNudEU0WitUcEJsWDgzYUNLdjVzeFZWRStZVkdj
MFlDcTJOckxwMy80ZyszV1huanFNcktEM3Q1ZW5nRnY3TmpCMDQxbk5NNFplYnBCRlg4M3FP
THZaa3hWbEU5WUZHYzBvS3JLRlN1dXRiWHhETVdEbVdJNlQxM0dzQVljNk82T2tyUm9BbFg4
UUJVL3hsUkZqU3JNbUtwNE1GTk1EMGx6dEw4eEJBQUF6SVdsWWpvQUFOZ2N4SFR0VkZaV0Zo
WVdKaWNuejVneDQ5Q2hRMVQwUFI2R1VpVnZNWUtxaW9xSy9QeDhvNmxpdlBqaWl6bytpVUh1
SzBPcEdod2NmUEhGRjNOeWNvWU5HMllvWVdKM1pXVmxHVVJWVlZWVlhsNWVZbUxpeElrVHE2
cXFZamMxWXJwMkhuMzAwZWJtWnAvUHQyUEhEdkhuY1BTTjZYSlZhanIxVmJWMDZkTFcxbGF2
MTd0djN6NjlYbmlLbm1scWFobzdkcXlPVDZKY2xiNTNGRU91YXYzNjlWT21UR2x1Ymg0YUdq
S1VNSUhqeDQ4Ly8venpCbEdWbnA3dWRydjlmci9MNVhJNEhMR2JHakU5Q3JTMnRqcWRUdUZI
STd3Q3FVeVZZa3Y4a1dqdysvM3Z2LzkrVVZHUmpwS29TSlhQNTVzK2ZmcVJJMGVNOENRS3Fn
Z2h0OTkrZTFwYVdrbEpTV3RycTBGVU9aMU9sOHVscnhneDh0dTdwS1RrOHVYTGV1bGhDS3FL
aW9yY2JuZHZiNi9MNVpvNWMyYnNaa1JNajVTT2pvNVpzMllkUEhoUWFERkNPSkNya3Jmb3Jv
cjlkWnlSa2ZIRkYxOFlSTldxVmF0ZWUrMDFhb0FuVWY1OGRYVjFsWldWelprenh5Q3FFaE1U
VjY5ZVBYejRjS2ZUZWVEQUFSMVZVU1YzTlRRMExGMjZWRWRKOUZaVkowNmNTRTlQSjRTa3A2
ZWZPSEVpZHBNaXBrZEVZMk9qMCtuY3MyZVB1RkgzY0NCWHBhaFRkMVdVVXJiMk1tblNKSU9v
WWt2RHVpOWVxejFmWHE4M09UbFpGMGxVcG1yVXFGRXVsNHN0Sm93ZVBWb3ZWWEpoakFVTEZu
ejExVmQ2U2FJeVZaTW5UeGJXWHU2ODg4N1l6WXVZcnAzdDI3ZG5aMmZYMWRWSjJ2V042WEpW
YWpyMVZiVnExYXJ1N202djE3dC8vLzR4WThZWVJKV0FqaytpbXFwcjE2Njk4TUlMeGNYRmVv
aFNVTFZreVJLWHk4VVdFN0t6czNWUnBTaU1VbnJzMkxINzdydFBMMGxVU1ZWR1JvYXc5cEta
bVJtN3FSSFR0VU51cGFlblI5SmlURlU5UFQxR1VMVnIxNjZjbkp5VWxKUjc3cm5uazA4K2li
OGtSVlhpVTdwSVVsVEZEbEpUVXhjc1dIRCsvSG1EcUdwdmI3L3Z2dnVTazVQejh2SjBYRmhY
ZkJMdnYvLytEei84VUM5Smlxb3FLeXVkVG1kaVltSnVidTc3Nzc4ZnU2a1Iwd0VBd0RvZ3Bn
TUFnSFZBVEFjQUFPdUFtQTRBQU5ZQk1SMEFBS3dEWWpvQUFGZ0h4SFFBQUxBT2lPbkFPdWo0
b1hJQURBSmlldnpvN2UxZHMyYk42TkdqUjQ0Y3VYSGpScjNsbUJoQ3lLdXZ2a29wZmVXVlZ4
REhJNkc1dVprUWdpK1RpUkJEM1pDSTZmSGp1ZWVlVzdodzRlWExsNjlkdS9iMDAwL3JMY2ZF
RUVJS0NncUdob2FtVEptaSswdkkxR3pldkRraElXSHo1czE2Q3pFM2hyb2hFZFBqeDdoeDR5
VGZJQzUrK29WalFzaHp6ejJYbHBZbUZPVFUvUzR4R29TUWVmUG1yVisvZnY3OCtXSy9TZnk1
WmN1V3pNek1qSXlNSFgvN3ZtQjRVc0tDQlF1ZWZQTEpCUXNXc0I5bnpwekp2c0NodnI3K3Jy
dnVvcFEyTlRVVkZCU2twcWFXbDVlTFhhMlhZR01pdnlIWjNaaVVsQ1I4SjhiS2xTdC85YXRm
VVVxWExsMzYxRk5QQ1ErTXVoakU5UGlSbUpnNE1EQWdibEdMNmErKytxckg0L20zZi91M3VP
b3pENFNRdlh2M0ppUWt2UGZlZTRvK1pNZGJ0MjcxZXIwMU5UVjZmUk9Jd2ZGNFBDTkdqTGg4
K2ZLSUVTTThIZytsOUkwMzNsaXlaQW1sZFBIaXhXKysrU2FsdEtpbzZJOS8vS1BINDlteFl3
ZEN1UnBxTitUQXdFQkRROFBZc1dNcHBmMzkvUTgrK09DLy8vdS9QL2pnZy8zOS9iRVRnNWdl
UDRMazZmMzkvZUtZM3RmWEYyOXhwaUpJSEJjZkM2OGNCQ05GcXF1cmhTSlQxZFhWbE5LclY2
ODZISTRMRnk0NEhJNGZmdmlCVXBxVWxPVDFlaW1sWHE4WGJsUkRmaE51M2JyVjZYUW1KQ1FR
UW9ZTkc4Wk9OVFUxRVVLYW1wcGlLZ1l4UFg2VWxaVXRYTGl3bzZQait2WHJaV1ZsbE5KUm8w
YlYxZFg1Zkw1dDI3YmhEMXQrT0dPNjRqRVFlT3FwcDloNzlSczNiaFJXQTBwTFMrKysrKzdG
aXhlekg2ZFBuLzZuUC8zSjYvVysvZmJiY0tNYThwc3ROVFcxcHFiRzYvVzZYQzdXNHZWNlo4
eVlVVkpTTW1QR0RKL1BGenN4aU9ueHcrLzMvOGQvL01lb1VhT0V6NzFzMzc3ZDRYQmtabWEr
K2VhYlFXSTZYa3NTNUM4aFNXbFR4VDRVbnJ5VnZMeThreWRQVWtwUG5qeVpsNWZIR3V2cjZ3
a2g5ZlgxN01mR3hzYjgvUHpVMU5Sbm4zMDJJU0dCTmNLTkV1UTMyMHN2dmVSd09Cd094NlpO
bTFqTDh1WExuM2ppQ1VycDQ0OC92bUxGQ3ZrRG93VmlPZ0FnQklPRGd4OSsrT0dVS1ZQMEZn
SkNnNWdPQUFnR1d4SE95OHZUNjZ0TFFGZ2dwZ01BZ0hWQVRBY0FBT3VBbUE0QUFOWWh2SmhP
VkpEM2xOYzJhV3RybXpOblRrcEt5cHc1Y3k1ZXZCajlTekVoVlZWVmVYbDVpWW1KZVhsNUgz
endnV0lmdjkrL2V2WHE3T3hzd2RYeUZzRGpFL0VkbTVXVkpXNkpyMWlqc0dmUG5rbVRKaVVu
Sjk5MTExMUhqaHloZkM5U3VhdXJxcXFjVG1keWN2S1BmdlNqbHBhV3VGNkRNWkI3Z01jbk1Y
cHBoeDNUQXpKVG5GdGUyK1NSUng0cEx5LzMrWHpsNWVXbHBhWGE1Rm9NaDhOUlcxdnI5L3Zk
YnJmRDRWRHNVMVpXTm5QbXpETm56Z3dORGFtMWdMQjg4dFJUVDYxYnQwNzQwYll4L1pGSEhq
bDU4cVRQNTl1elp3LzdWMXVlRjZuYzFWbFpXWWNPSGVydDdYVzVYUC95TC84U0wva0dRdTRC
SHAvRTZLVWRxNWd1LzUvSnJLeXN6czVPU21sblp5ZitWNXN4WThhTSt2cjYzdDdldXJvNlZs
NURUazVPenRHalI0TzNBSDZmWEx0MkxTTWpvNzI5WFdpeGJVd1h1SFRwVW5KeWNsOWZIOCtM
Vk83cXJLeXNqei8rbU1XdnpNek1PQWcyR25JUDhQZ2tSaS90V01WMGVXMlRoSVNFd2NIQmVm
UG1EUXdNSkNZbVJxamJHalEyTm1aa1pCQkNNakl5MVA1ak9ERXhzYnk4UEMwdGJmejQ4ZnYz
NzFkc0FmdysyYlJwRS92WER3R2J4L1R2di8rK3VMaVkvVEhOOHlLVnU3cWlvdUtPTys0WVBu
ejRzODgrYTgrWHR0d0RQRDZKMFVzN3JubDZWMWNYUlo0dUlqOC8zKzEyKy8xK2w4dFZVRkNn
MkNjakk4UGxjdlgyOWg0NmRJaXRBc3RiQUtkUCt2djd4NDhmTC9uMWFlZVkvdVdYWDA2Y09M
Rzh2SHh3Y0pEeXZVaUR1UHJJa1NQanhvMkx2V3JqSXZkQUVKL0U2S1VkcTVndXIyM3k4TU1Q
cjF1M3p1LzNyMXUzN3JISEh0TW0xMktrcDZlNzNlN2UzdDdhMmxxMTlmUmYvT0lYd3RQTVht
YnlGc0RwazRxS2lybHo1MG9hYlJ2VGQrM2FWVnhjL1Bubm53c3RQQzlTUlZjUERRMmRQWHUy
cUtpSXZkaHRpTndESVgwU281ZDJyR0s2dkxaSmEydnI3Tm16MlJ2QmJXMXQydVJhaklxS0Ns
YThMVGMzdDdLeWtqVksvTm5TMGpKNzl1eWtwQ1NuMDFsVlZhWFlBaFI5SXI4elo4K2VMZjZU
TnVUSHQ2eU41UEo3ZW5vVVg2UWhiMGoyOE96czdGV3JWdm45ZmgydVJHL2tIbEQwU1h4ZTJy
SDZMQ01BQUlENGcvODVBZ0FBNjRDWURnQUExZ0V4SFFBQXJBTmlPZ0FBV0lmNDFYdkJHNnJ5
RWhBOFBxbXFxcG82ZFdwS1NzcXNXYk9PSFRzbXRHL1lzTUVtenVUeGdGb2ZNZkppR3VKNzJJ
YWY5SmRmUGsrVkVybXI4ZEpXclBjUzhvYVUxOXVKU3VXYzhHTzYwb2NaNVQzbDlWNkVFYlFK
dFFCcUpTQ0MrNlMwdFBUTW1UTit2LytERHo0WU0yWU1hL3o2NjY5WmJJcXRZbVBBNHdIRlBo
S0NGTk9RVklDeEc4TGw4MVFwVVhPMVRlNUdSZVIrNDdraDVmVjJvbEk1SjFZeFhmNS9wTUlJ
Mm9SYUFMVVNFRHcrOFhxOWxaV1Y3TXZEL0g3L3RHblQvdWQvL3NkV3p1VHhnTGlQSExWaUd1
SUtNSVNRZSs2NVovSGl4Uk1uVGhTK1o5bmFpQytmdjNLTDNOVzJ1aHNscVBrdCtBMHBJSzYz
RTNubG5GakZkSG05RjJFRWJVSXRnRm9KaUpBK0VmNDYvdkxMTHltbHp6enpEUHNmUC9zNGs4
Y0RrajV5MUlwcGlDdkFFRUthbTV2WmRzU0lFVEc4Sk1NZ3Zuek95aTJLcnJiUDNTaEgwVzho
YjBpR3VONU9WQ3JuSUUvWEFVa0pDQjZmZUR5ZTk5NTdiOXEwYVpUU2hJU0U0RzltV0JJZUQ0
ajd5RkVzcGlHcEFDT3NzMU43M0t1S0JYQW9SK1VXdWF2dDRLNlFTUHdXL0lha3NubzdhdU9F
UmF4aXVyemVpekNDTnFIV1FMRUVSSENmTEYrK3ZLMnR6ZS8zVjFaV1N2NGNzNGt6ZVR3UXBJ
K0FZakVOU1FVWXU4VjBlUUdja0ZWSzFGeHRCM2NGUWVJM25odFNYbTlIUG80R1loWFQ1ZlZl
eUsxb2sydHEySVhMaTBKSWZDSnh6cC8vL09lSkV5Y21KU1ZObXpiTjdYWkxCb3liZUIzaDhZ
QmlINGwvRkl0cHlDdkFVRHZGZE1VQ09NR3JsTWhkalplMjNHODhONlRFYnowOVBZcitEeGZV
ZXdFQUFPdUEvemtDQUFEcmdKZ09BQURXQVRFZEFBQ3NBMkk2QUlZRzcxZUJzRUJNQjBBQnpa
RTA2aUU0eUlCUm1Zc1E4dXFycjFKS1gzbmxsVWdHSklSczNydzVjbUdLVlZEeTh2SVNFeFB6
OHZJKytPQUR0ZGtsbjllUWwvZVIwOWJXTm1mT25KU1VsRGx6NWx5OGVKSGUrakVRZm9YeUZw
NUhCWms5eUhXRkJERWRBQVZzRmRNTENncUdob2FtVEprU1lVelB6OCsvZWZObWhNTGtWVkFj
RGtkdGJhM2Y3M2U3M1dwZjJ5dG9FSTZEbFBjUnoxVmVYdTd6K2NyTHkwdExTem1WeXhYS1d6
Z2ZKWmxkZmhWcUxVRkFUQWRBQWNYWEZTRWtLU2xweG93Wmh3NGRvcFMrOGNZYlRxY3pNVEZS
eUtSNHNqeEpGc2EyWldWbHFhbXBVNlpNYVd4c3BKUTJOallXRkJTa3BxYVdsWldKUnhiUExw
L3I3Tm16OTk1N2IzSnk4dVRKazRWYWdDSERBU0ZrM3J4NTY5ZXZuejkvUHV2OCtlZWZGeFlX
SmlVbEZSWVdzditJSVlSczJiSWxNek16SXlOang0NGRhdU5zMkxEaDVaZGZGaWFWanpOejVr
d212cjYrL3E2Nzdnb3VUS2lDTW1QR2pQcjYrdDdlM3JxNnV1Q1BFbCtzWW5rZmlUZXlzckk2
T3pzcHBaMmRuU3pPRWtJY0RrZGFXdHJQZnZhejF0Wld4VWZKRlFacENmSW8rZXhxMHlHbUF4
QXBhcStpZ1lHQmhvYUdzV1BIVWtwSGpCaXhZY09HTTJmTzlQYjJobnlnWWdjaFhtL2Z2dDNy
OWU3YXRXdjY5T21VMHFsVHArN2F0Y3ZyOWI3MTFsdmkvdUxaNVhQTm1qWHIzWGZmOWZ2OXRi
VzFreWRQNXIvU3ZYdjNKaVFrdlBmZWUyekFnb0tDblR0M2VyM2U3ZHUzRnhZV3NqNWJ0Mjcx
ZXIwMU5UVnFlU2docEtlblo5S2tTZGV1WFZNYjU0MDMzbGl5WkFtbGRQSGl4VysrK1dZUVZl
SXFLSTJOalJrWkdZU1FqSXdNZVJrRGlRYmhXSzI4ajVpRWhJVEJ3Y0Y1OCtZTkRBeUk2NnQw
ZDNlWGxaWE5tVE9IVTZGYVMvQkhxYzJPbUE1QTlKRy9pclp1M2VwME9sbXBtV0hEaGxGS1Av
cm9vNS8vL09lVEowOGVPWExrZi83bmY2bzlVRzNrL3Y1K0lhWjd2VjVLcWRmclRVNU9wcFFt
SlNXeEZvL0h3L3JJWjVmUGxaU1VKR1R1UXArd3JwUWRKeVltQ3JNbkpTV3g5djcrL3VBWHlO
bzNidHo0L1BQUHE0MXo5ZXBWaDhOeDRjSUZoOFB4d3c4L3FFbVNWRUhKejg5M3U5MSt2OS9s
Y2hVVUZIQmVpMko1SHdsWldWbGRYVjFVbGlsVFNuMCtIM3N1ZUJRcXRvUjhsTnJzaU9rQVJC
LzVxeWcxTmJXbXBzYnI5YnBjTHZIWndjSEJJMGVPcEtXbHNSOVRVbEtFdjlrVkdUVnFWRjFk
bmMvbjI3WnRteERUV1Q2N2E5ZXVxVk9uVWtxblRadkc4dlR0MjdlelBvcXpTK1lxTGk2dXJx
NzIrWHlhcnpSSW5oN0VNK0oyajhlVG01dXJOZzZsdExTMDlPNjc3dzVTeDFoZUJTVTlQZDN0
ZHZmMjl0Ylcxdkt2cHl1Vzk1SHc4TU1QcjF1M3p1LzNyMXUzamxYNlpOeThlWFA5K3ZYRnhj
V2NDaFVydDRSOGxOcnNpT2tBUkI5eUs1VFNsMTU2eWVGd09CeU9UWnMyaWRlNEV4SVNjbk56
Ly9qSFA3SUhybG16SmpVMU5jaUxjUHYyN1E2SEl6TXo4ODAzMzVTc3ArZm41eDgvZnB4U2V2
ejQ4Zno4L05UVTFPZWVlMDV0ZHZsYzU4NmRlK0NCQjFpTDBLaGhMYWlob2FHZ29DQXhNYkdn
b0VCWVQxZnNyempPNXMyYjFjYWhsTmJYMXhOQzZ1dnJnK2dSMDlQVFUxRlJ3ZjVHeWMzTnJh
eXM1SGtVVlNudkl4SGYydG82ZS9aczlyMUNiVzF0d2ppMzNYYmJBdzg4Y1A3OGVjVkh5UlhL
VzNpdVMyMTI4VlhJVzBLQ21BNkF6bkMrVmdIZ0FURWRBSjFCVEFkUkJERWRBQUNzQTJJNkFB
QllCOFIwQUFDd0RvanBBQUJnSFJEVGdUbW9ycTZ1cWFrWkdCaW9xYW1wcnE3bWZFandzMm9k
UEI2UHkrVlM3Qi9rVVFBWUFjUjBZQTZxcTZzLy9mVFRiNzc1NXJQUFBvdFdWRlViNTZ1dnZw
S2ZRaWdIcGdBeEhaaUQ2dXJxYytmT3VkM3VjK2ZPQ2VGVmNsQmRYZDNjM094MnU4K2VQYXZX
S0JsVFB0SE5temZyNitzVlk3cmI3Zjc0NDQ4N09qcWllbVVBUkJQRWRHQU9xcXVycjE2OUtt
eUZSdkZCZFhYMUR6Lzg0UEY0MkRlMUt6Wkt4cFJQOUplLy9LV2xwVVh4MU5EUVVFZEhSMTFk
WGZRdUM0QW9nNWdPekVGMWRmWFEwTkRodzRlSGhvYUVnT3QydXowZWp4RGw1U0ZlM2lnWlUz
RWl0WFh6b2FHaHJxNHV4SFJnWkJEVGdUa1FSMWpoK096WnMyNjN1N201V1VOTWx3UnUrVm41
UVhWMTljY2ZmM3o1OHVWb1hoZ0FVUVV4SFFBQXJBTmlPZ0FBV0FmRWRBQUFzQTZJNlFBQVlC
MFEwd0VBd0RvZ3BnTUFnSFg0ZTB4dmJHemNDd0FBd1B3UUJIUUFBTEFNL3c4ekFuMmUwNzdS
bGdBQUFBQkpSVTVFcmtKZ2dnPT0iIC8+PC9wPjxwPiZuYnNwOzwvcD48cD5JbiBDUFUgdXNh
Z2Ugb2YgdGhlIERvbTAsIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VlOjwvcD48cD4mbmJzcDs8
L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtH
Z29BQUFBTlNVaEVVZ0FBQWZFQUFBRnNDQUlBQUFCVHFCZTNBQUFnQUVsRVFWUjRuTzJkZjNR
VGRici94eWFwSlNocEc4b0Mxa0JoUzB0cGk3WGNVcmk3WHI2ZTd4VkZkLzJSVnRjVlBmZXND
L2RjUUN1UjVld2VQVzR2b0xzS2dxWFFxeGVGV2l5aVRkcFNZTld0YUZHNWgyckx4VXAvUVZO
RWZqWEpoS2I5L1BNOVovL2crOGVzczhQOHlxZHAwc3hNM3Evem5EbnBKNStaZWMrVHlidFBK
NU9uelA4Q0FBQXdCRzF0YlV5OE5RQUFBSWdDYlcxdGUvZnUvYnVuRXdBQUFIcG03OTY5OEhR
QUFEQUk4SFFBQURBTzhIUUFBREFPOEhRQUFOQVREUktFejhMVEFZZ0pETVBFVzRJbU5JQVlN
VG82eXJrNVBCMkFpVUFMZnFvRkRTQVdoRUtoYjc3NXh1MTJYNzU4dWJHeFVmZ1VQQjNFbk03
T3psLys4cGRwYVduSnljbDMzbm5uL3YzN3VYSG1SNlpNbWZMd3d3K2ZQMytlSDVkdVJIZjJw
QVhCV3RBQW9rNVBUMDlMUzh2eDQ4ZlBuajNiMk5qNHpUZmZDSitGcDRQWWN2cjA2Wi84NUNj
N2R1eTRjT0VDeTdLZmYvNzVndzgreUQzRk84N2c0T0N2ZnZXclgvemlGNkp4SWJxekp5MEkx
b0lHRUhVKysreXp5NWN2S3owTFR3ZXg1ZEZISC8zem4vOHMrNVRRY1g3NDRRZXIxU29kbDUy
c05Nai82UEY0NXMrZmI3RllIQTdIcmwyN3VNSHZ2dnZ1dnZ2dW16eDU4czAzMy95di8vcXZn
NE9EM0xqZjcvLzFyMzl0dFZxblRadTJlZk5tZmlPaFVNamxjazJkT25YU3BFbE9wL1BxMWF2
MFI4MkoyYng1YzBaR2h0VnFYYmx5SmN1eWhKQ2xTNWZ1MjdlUG45UFQwek45K25UaCt6TXJL
K3ZycjcvbUhyLzU1cHZjZzYrLy9qb3JLMHRGa3RJNGZ5eGZmUEhGekprelgzMzExVEVkQXRB
ajhIUVFXNlpObTNidTNEblpwNFNPZlBIaXhTaDZ1dDF1ZisrOTkxaVc3ZW5wZWVxcHA3akIz
TnpjSTBlTytQMyt5NWN2cjFtejVySEhIdVBHbjMzMjJmdnZ2Ly84K2ZQbno1Ky83Nzc3K0ky
OCtPS0xkOTk5ZDE5ZjM5V3JWNTk0NG9uZi92YTM5RWZOaVZtK2ZQbmc0T0RnNE9EeTVjdWZl
KzQ1UWtoVFUxTk9UczdJeUFnMzU2bW5udHEwYVpOd3JWV3JWdTNZc1lNUTB0ZlhkOHN0dDNE
dXZIMzc5dFdyVjZ0SVVocm5qcVdob1dIcTFLa0hEeDRjazM2Z1dYRGZDNGduWnJONWVIaFk5
aW5lUGMrZlAvL0VFMC9jZi8vOW9uSFp5U3FEL0krWm1abmJ0bTNyNit0VFV1WHorYVpPbmNv
OW5qbHo1bmZmZmNjOS92YmJiL21OT0J5T1U2ZE9jWSs5WHUrMGFkT1V0aVlMd3pEZmZ2c3Q5
L2owNmRPMzNYWWI5N2k0dVBpZGQ5N2hCMzArbjNDdER6NzR3T2wwRWtJMmJkbzBkZXBVN28r
TVJ4NTU1TU1QUDFTUnBEVE9NTXpycjc4K1k4YU10cmEyTVlrSDJnZjN2WUQ0b0Y2bmM5eDY2
NjBQUHZpZzErdmx4cE9Ta2tLaGtIQm1LQlJLU2txUzNZTHNqMjF0YmZmZGQxOTZldnJzMmJN
NU55U0VmUHJwcDB1V0xMRmFyZHhPYjdycEptN2NaREx4dXhzZUh1WTNZamFiR1FIOGZObERr
SDFLdUZtejJjdzlQbmp3WUhaMmRpZ1VLaTh2MzdwMXEyaXRvYUdoMjIrL25SQ3lZTUVDdDl1
OWVQRmlRc2p0dDkvT1diK1NKS1Z4aG1GbXo1NzkvUFBQUytVQlhZUDdYa0RjZVBUUlIxOTc3
VFhacDVRK3dYTTRIUC96UC84akhQbnFxNjhjRG9kMHB0bHM1dXZjQ3hjdWlEWTRPanJxZHJ0
LzhwT2ZjRC9PbkRtenRyYjI4dVhMbzZPalY2NWM0U2ZQbURGRHRrN1B6TXpzNysrbk9FUjVo
SFg2dDk5K08zUG1URjdWZ2dVTEtpb3FIQTVITUJpVXJ2anpuLy84M1hmZkxTNHVKb1FVRnhj
ZlBIandycnZ1VXBla05NNHdURjlmMzV3NWM3WnMyUkx4Z1FDdGdmdGVRRHc1ZmZyMDlPblRk
KzdjK2NNUFA3QXMyOWJXSnIzdlJjUi8vdWQvRmhVVmZmYlpaeXpMc2l4NzdOaXhoUXNYeXJw
U1VWSFJDeSs4NFBQNSt2djdIM3JvSVg2RFpXVmwzM3p6VFRBWWRMdmRkcnVkRzB4TFN6dDQ4
Q0RMc3Q5OTk1M1Q2ZVFuUC9QTU13ODg4TUQzMzMvLy9mZmZDNituLy9HUGYxeStmSGxYVjlm
dzhQREpreWU1U3lMME1BeHozMzMzY1pmcDc3MzMzb3FLQ3Y2cDJ0cGFobUYyNzk0dHUrS21U
WnRtenB6SmxmQ3Z2ZmJhYmJmZHRubnpablZKU3VQY3Nadzllelk3Tzd1eXNuSk0rb0Ztd1gw
dklNNTBkSFQ4NGhlL3NObHN5Y25KeGNYRnd2dlRaZWVQam81dTNicDF3WUlGTjk5ODg4MDMz
N3hnd1lMWFgzOWRkdVpYWDMyMWNPRkNzOW5zY0RoMjdOakJiM0Rmdm4zWjJkbG1zM24rL1Bs
TlRVM2M0UHZ2dno5NzlteVR5WFQ3N2JkdjNicVZuK3p6K1g3MXExOU5talFwSXlQamozLzhv
OFZpNGNaSFJrWXFLeXNkRG9mRllzbkx5NnV0clIzVFVRdnZlM25paVNjQ2dRRC8xUDc5Kytm
T25hdjBNY09KRXlmTVpqTjN0LzdnNEtEWmJPYi9hbEdTcERUT0grUEF3RUJPVHM2TEw3NDRw
a01BZWdTZURzQS82T3pzbkRWclZxejNzbUxGaXIxNzk4WjZMOENvNEw0WEFNS3dkdTNhaXhj
dkRnd01MRisrZk4yNmRiSGIwY2pJU0hWMWRXNXVMbjg3SXdCalJXVGk4SFFBeEx6NjZxdDJ1
MzN5NU1tUFB2cm8wTkJRN0hiRU1JekQ0Y0NkaFdBOE5EWTJYcnQyalh0ODdkbzEzUGNDQUFB
NnBxMnQ3ZXV2dng0ZUhoNGVIdjc2NjYrUEh6OHVmQmFlRGdBQWVpSVFDSHorK2VjZWo4Zmo4
YlMxdFFrL2ZpZndkQUFBMERXNG5nNEFBTVlCbmc0QUFEb21nZTVsN0RwNnRPdm8wWGlyQUFD
QWljT3duajdNc3R1WExObStaTWt3eThaYkN3QUFUQkNHOWZTL3Z2cHFwY05SNlhEOEZZMy9B
UUNKaWtFOC9YSmYzNWJzYk03VHQyUm5YMVp1bkEwQUFMckc3L2UzdGJYeDl6TDYvWDdoczFy
eDlOcmEydXpzYkl2RlVsQlEwTkxTUWdqcDcrOHZMUzFOVGs0dUxTM2wrb2hLUjNqcW5ueVNN
M1F1NnA1OE1qNkhBUUFBTWFhMXRmWFVxVlBYcmwyN2R1MWFaMmRuYTJ1cjhGbXRlUHJqanov
ZTNkM3Q5L3ZmZmZmZDlQUjBRa2haV1puTDVRb0VBaTZYcTd5OFhIWkV4TWFORzdrSFo4K2Vw
ZG5wdFk0T21tazBXNlBjSTgwMHFLS2ZCbFgwMDdTcGl0QUppK0lldGFscVRMamRicjVmME1q
SWlOdnRGajZyRlUvbllGbjJ2ZmZleTgvUEo0VFk3WGJ1SDk5NHZWNnVCYlowUk1UR2pSdXZk
ekRYTzVqMnh2L0xQVkNQd0paQ21tazBXNlBjSTgwMHFJS3F4RkZGS1N5S2U5U09xb2g5VWg5
MU92bngzNENscHFaKzl0bG5oSkNrcENUdWQxRW9GREtaVExJalBLRUxGNjVVVlcxWXRZcnN6
Ynpld1F5L1BlZDZCOE05VmxuKzdkaWtzSE1vdDBhNXgvOTNNdndlb1FxcUVrZlY5UTRtdEh0
Qzk2Z2RWWDlqMlN0VlZjSDI5ckZhcGMvbjA4SDFkQTd1MnN1Y09YTUlJZW5wNmFLcVhEb2ln
cS9UQno3SnYwN3grNVBVWnRKTW85a2E1UjVwcGtFVlZDV09La3BoVWR5amhsUmR2eDRMRjlX
S3A2OVpzK2I4K2ZOK3YzLy8vdjNjZnoxM09wMzgxWFB1ZjNGSlIwVHdubzVBSUJCYWowZzlY
Ui8zdmRUVTFNeVlNU001T2ZuT08rLzh5MS8rUWdqcDdlMHRLU214V0N5TEZ5L3U2K3VUSFJH
Qk9oMnFvRXBmcWlpRm9VNFhvcHZyNmVNSGRUb0NnZEJOUk9ycGVycnZaWnlnVG9jcXFOS1hL
a3BocU5PRkpFU2RmdTNhdGU3dTd0Lzg1amZYT3hqdkp3dXd4QkpMTERXKzdPL3Y3Kzd1anVE
dWRUM2Q5ekpPVUtkREZWVHBTeFdsTU5UcDlCalQweEVJQkVMckVhbW5KMUQvZE5UcFVBVlYr
bEpGS1F4MXVoQ1JpWXN3cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRicVFoUEIwM1Bl
Q0paWlk2bXNaOFgwdjZoakUwemxRcDBNVlZPbExGYVV3MU9uMEdOUFRFUWdFUXVzUmthY2ZP
WEtrdmIzZDYvV0dRaUhaQ2NiMGROVHBVQVZWdWxCRktReDFPcytWSzFlNnVycU9IVHZXMk5o
NDdOaXhycTZ1SzFldUNDY1kwOU1SQ0FSQzZ6RytheS9EdzhOZXI3ZTl2ZjNJa1NQQ2NXTjZP
dXAwcUlJcVhhaWlGSVk2blI2RGVEcnVlOEVTU3l6MXRjUjlMK0ZCblE1VlVLVXZWWlRDVUtm
VFkweFBSeUFRQ0sxSGxEd2QvVjcrRWRxc1hLQUtxaEpIRmFVdzFPa3FKSVNuSXhBSWhOWURm
UmxWRUgxR092QkpQczFuRk4xNy9pWHNITXF0VWU3eGhIc0ZWRUVWVkFtWHBEWnpJdmVvSFZY
UitvelVtSjdPZ1RvZGdVRG9KbkR0SlN5NG5nNVZVS1V2VlpUQ2NEMmRIcTE0ZWwxZFhXNXVy
c1ZpS1Nnb2FHbHBJWVF3QXJnNS9mMzlwYVdseWNuSnBhV2wvZjM5MG8yZ1RrY2dFTHFKU0Qz
ZDcvZnI0UCtSUHZ6d3crM3Q3WUZBWU5ldVhYYTduUkRDV3psUFdWbVp5K1VLQkFJdWw2dTh2
Rnk2RWRUcFVBVlYrbEpGS1F4MXVwRFcxdFpUcDA1ZHUzYnQyclZybloyZHJhMnR3bWUxNHVr
ODNkM2REb2VERU1Jd3pLMjMzbXExV3Bjdlg5N2QzVTBJc2R2dFhxK1hFT0wxZWpuZkY0RTZI
WUZBNkNZaTlYUzMyejB5TXNJOUhoa1pjYnZkd21lMTVla0RBd05GUlVVZmZQQUJQekk0T0Zo
UlVWRlNVa0lJU1VwSzRvNGtGQXFaVENiaGlxRUxGNjVVVlcxWXRZcnN6Ynpld1hoM2xsN3ZZ
TGpIS2t0U214bDJEdVhXS1BjNDhFaytWRUVWVkFtWGdVMkZFN2xIN2FqNkc4dGVxYW9LdHJl
UDFTZDFVNmUzdGJVNUhJNDllL2FJeHYxK3Y4VmlJWVNrcDZlalRrY2dFQWFKU090MG44K25n
K3ZwMWRYVkdSa1p6YzNOb3ZGTGx5NXQzTGl4dUxpWUVPSjBPdm5yNlU2blU3b1JYRStIS3Fq
U2x5cEtZYmllVG85V1BKMjVrYUdoSWU1QlNrcktzbVhMVHA4K1RRanA3ZTB0S1NteFdDeUxG
eS91Nit1VGJnUjFPZ0tCMEUzZ2U2UmhRWjBPVlZDbEwxV1V3bENuQytGTW5MZnloUEIwQkFL
QjBIcEU2dWtlaitmcTFhdHV0L3ZLbFN0WHJseHBhbW9TUG1zUVQwZS9GNmlDS2oycThxTGZ5
OWo3dlh6OTlkZU5qWTA5UFQxSGpoenhlRHhuenB3UlBtc1FUK2RBblk1QUlIUVR4djZNTkNy
Z2VqcFVRWlcrVkZFS3cvVjBJWW40R1NrQ2dVQm9QVkNuaHdWMU9sUkJsYjVVVVFwRG5VNlBN
VDBkZ1VBZ3RCN3dkQlZ3M3d0VVFaVWVWWGx4Mzh1NC84K1JDSU40T2dmcWRBUUNvWnN3ZHYv
MHFJRHI2VkFGVmZwU1JTa00xOU9GNktZdjQvaEJuWTVBSUhRVGlkQS9mWnlnVG9jcXFOS1hL
a3BocU5PRm9FNUhJQkFJN1lXeCs2ZVBFOXozQWxWUXBVZFZYdHozZ3Z0ZVZFQ2Rqa0FnZEJQ
b0RSQVdYRStIS3FqU2x5cEtZYmllTGdUOTB4RUlCRUo3QVU4UEMrcDBxSUlxZmFtaUZJWTZY
VWhDZUxyb00xSXNzY1FTUzQwdm8vVVpxVEU5blFOMU9sUkJsYjVVVVFwRG5hNUNRbmc2QW9G
QWFEMk1mZDlMWFYxZGJtNnV4V0lwS0Nob2FXa2hoUFQzOTVlV2xpWW5KNWVXbHZiMzk4dU9p
RUNkRGxWUXBTOVZsTUpRcDZ1Z1VVOS8rT0dIMjl2YkE0SEFybDI3N0hZN0lhU3NyTXpsY2dV
Q0FaZkxWVjVlTGpzaUFuVTZBb0hRVFJqYjAzbTZ1N3NkRGdjaHhHNjNlNzFlUW9qWDYrVmNY
am9pQW5VNlZFR1Z2bFJSQ2tPZFRvKzJQSDFnWUtDb3FPaUREejRnaENRbEpYRzl4MEtoa01s
a2toM2hDVjI0Y0tXcWFzT3FWV1J2NXZVT0Jrc3NzY1JTNDh1L3NleVZxcXBnZS90WWZWSWYx
OU1KSVcxdGJRNkhZOCtlUGR5UDZlbnBvcXBjT2lJQ2RUcFVRWlcrVkZFS1E1MU9qMVk4dmJx
Nk9pTWpvN201bVI5eE9wMzgxWE9uMHlrN0lnTFgweEVJaEc3QzJQZTlNRGN5TkRUVTI5dGJV
bEppc1ZnV0wxN2MxOWRIQ0pHT2lFQ2REbFZRcFM5VmxNSlFwNHNJQm9NZmYveHhZMlBqK2ZQ
blJVOXB4ZE9qQXVwMEJBS2htNGpVMHpsRFAzWHExTVdMRjV1Ym15OWZ2aXg4MXBpZWpqb2Rx
cUJLRjZvb2hhRk9GL0xSUngveGRuM3UzRG51Q3owOEJ2RjA5SHZCRWtzczliV011TitMeUt2
UG5Ea2ovTkVnbnM2Qk9oMnFvRXBmcWlpRm9VNFhvby9QU0tNQ3JxY2pFQWpkQkhydGhnVjFP
bFJCbGI1VVVRcERuUzRrRVQwZGdVQWd0Qjd3OUxDZ1RvY3FxTktYS2twaHFOUHBNWWluNDc0
WExMSEVVbC9MaU85N1NjVFBTRkduUXhWVTZVSVZwVERVNlZKR1IwZEZGMkU0ak9ucENBUUNv
ZlVZaDZlSFFxRnZ2dm5HN1haZnZueTVzYkZSK0pReFBSMTFPbFJCbFM1VVVRcERuUzZrcDZl
bnBhWGwrUEhqWjgrZWJXeHMvT2FiYjRUUEd0UFRFUWdFUXVzUnFhZC85dGxub2g0dlFvenA2
YWpUb1FxcWRLR0tVaGpxZEhvTTR1bTQ3d1ZMTExIVTF6TGkrMTdVTVlpbmM2Qk9oeXFvMHBj
cVNtR28wK2t4cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4dlIwQkFLQjBIckEw
OE9DT2gycW9FcGZxaWlGb1U2bnh5Q2VqdnRlc01RU1MzMHQ0M25meTV0dnZwbVdscGFXbHZi
Zi8vM2YwZDE5ZEVHZERsVlFwUzlWbE1KUXA5T2o2T2tzeS9LUFUxTlRqeDgvZnZ6NDhiUzB0
RmlJaUJhNG5vNUFJSFFURSt6cHQ5OStlMDFOVFNnVUloUGk2Y3lQU0VmNHdmNysvdExTMHVU
azVOTFMwdjcrZnVsR1VLZERGVlRwU3hXbE1OVHA5Q2g2ZW10cjY5S2xTN096czk5OTk5M2R1
M2VucHFhbXBxYSsrZWFic1JEQkkvSjAwYk5sWldVdWx5c1FDTGhjcnZMeWN1bnFxTk1SQ0lS
dUlpNmZrWG84bmp2dXVLT3dzTkR0ZHNkaTl5SkVubjdycmJkYXJkYmx5NWQzZDNjVFF1eDJ1
OWZySllSNHZWNjczUzVkSFhVNlZFR1Z2bFJSQ2tPZFRvK2lwL09maTc3MTFsdnZ2dnR1ZG5a
MmFXbnB4eDkvSEFzUlBOTGFmSEJ3c0tLaW9xU2toQkNTbEpRME1qSkNDQW1GUWlhVFNUZ3Rk
T0hDbGFxcURhdFdrYjJaMXpzWUxMSEVFa3VOTC8vR3NsZXFxb0x0N2RGMVVVVlBUMHRMYTJ0
cjQ2K2hoMEtoM2J0MzMzNzc3ZEhkdlFpcHB4TkMvSDYveFdJaGhLU25wNk5PaHlxb01wSXFT
bUdvMCtsUjlIVFp6MFdGTjhQRUFxbW5YN3AwYWVQR2pjWEZ4WVFRcDlQSlgwOTNPcDNTMVhF
OUhZRkE2Q1ltMk5OcmFtb201bk5SRHVaRytKR1VsSlJseTVhZFBuMmFFTkxiMjF0U1VtS3hX
Qll2WHR6WDF5ZmRDT3AwcUlJcWZhbWlGSVk2blI2RGZJK1VBM1U2QW9IUVRjRFRWUkQxQmhq
NEpKL211N25kZS80bDdCektyVkh1OFlSN0JWUkJGVlFKbDZRMmN5TDNxQjFWK0o4WTRVR2Rq
a0FnZEJPbzA4T0M2K2xRQlZYNlVrVXBETmZUNlRHbXB5TVFDSVRXQTU0ZUZ0VHBVQVZWK2xK
RktReDFPajNHOUhRRUFvSFFlc0RUVmNCOUwxQUZWWHBVNWNWOUw3anZSUVhVNlFnRVFqZUJP
ajBzdUo0T1ZWQ2xMMVdVd25BOW5SNWplam9DZ1VCb1BlRHBZVUdkRGxWUXBTOVZsTUpRcDlO
alRFOUhJQkFJclFjOFhRWGM5d0pWVUtWSFZWN2M5NEw3WGxSQW5ZNUFJSFFUcU5QRGd1dnBV
QVZWK2xKRktRelgwK2t4cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4dlIwQkFL
QjBIckEwMVhBZlM5UUJWVjZWT1hGZlMrNDcwVUYxT2tJQkVJM2dUbzlMTGllRGxWUXBTOVZs
TUp3UFowZXJYZzY4eVA4U0g5L2YybHBhWEp5Y21scGFYOS92K3lJQ05UcENBUkNOMkZzVCtj
UWVucFpXWm5MNVFvRUFpNlhxN3k4WEhaRUJPcDBxSUlxZmFtaUZJWTZuUjd0ZXJyZGJ2ZDZ2
WVFRcjlkcnQ5dGxSMFNnVGtjZ0VMcUpSUFAwcEtTa2taRVJRa2dvRkRLWlRMSWpQS0VMRjY1
VVZXMVl0WXJzemJ6ZXdYaDNsbDd2WUxqSEtrdFNteGwyRHVYV0tQYzQ4RWsrVkVFVlZBbVhn
VTJGRTdsSDdhajZHOHRlcWFvS3RyZEgxMFcxNitucDZlbWlxbHc2SWdKMU9nS0IwRTBrV3Az
dWREcjVxK2RPcDFOMlJBU3VwME1WVk9sTEZhVXdYRStuUnl1ZXp0d0lJYVMzdDdla3BNUmlz
U3hldkxpdnIwOTJSQVRxZEFRQ29ac3d0cWRIQmRUcFVBVlYrbEpGS1F4MU9qM0c5SFFFQW9I
UWVzRFRWVUMvRjZpQ0tqMnE4cUxmQy9xOXFJQTZIWUZBNkNaUXA0Y0YxOU9oQ3FyMHBZcFNH
SzZuMDJOTVQwY2dFQWl0Qnp3OUxLalRvUXFxOUtXS1VoanFkSG9NNHVtaXowaXh4QkpMTERX
K3hHZWs0VUdkRGxWUXBTOVZsTUpRcDlOalRFOUhJQkFJclFjOFBTeW8wNkVLcXZTbGlsSVk2
blI2ak9ucENBUUNvZldBcDRjRmRUcFVRWlcrVkZFS1E1MU9qMEU4SGZlOVlJa2xsdnBhNHI2
WDhLQk9oeXFvMHBjcVNtR28wK2t4cHFjakVBaUUxZ09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4
dlIwQkFLQjBIckEwOE9DT2gycW9FcGZxaWlGb1U2bnh5Q2VqdnRlc01RU1MzMHRjZDlMZUZD
blF4VlU2VXNWcFREVTZmUVkwOU1SQ0FSQzY1Rm9uczRJNEViNisvdExTMHVUazVOTFMwdjcr
L3VscTZCT2h5cW8wcGNxU21HbzArblJ0S2VMUnNyS3lsd3VWeUFRY0xsYzVlWGwwbFZRcHlN
UUNOMUVBbnI2cmJmZWFyVmFseTlmM3QzZFRRaXgyKzFlcjVjUTR2VjY3WGE3ZEJYVTZWQUZW
ZnBTUlNrTWRUbzkydlYwanNIQndZcUtpcEtTRWtKSVVsTFN5TWdJSVNRVUNwbE1KdUcwMElV
TFY2cXFOcXhhUmZabVh1OWdzTVFTU3l3MXZ2d2J5MTZwcWdxMnQwZlhNN1h1NllRUXY5OXZz
VmdJSWVucDZhalRvUXFxaktTS1VoanFkSHEwN3VtWExsM2F1SEZqY1hFeEljVHBkUExYMDUx
T3AzUXlycWNqRUFqZFJLSjVPbmZIUzBwS3lySmx5MDZmUGswSTZlM3RMU2twc1Znc2l4Y3Y3
dXZyazY2Q09oMnFvRXBmcWlpRm9VNm5SN3VlSGdHbzB4RUloRzRDbmg0VzFPbFFCVlg2VWtV
cERIVTZQUWJ4ZFBSN3dSSkxMUFcxUkwrWDhLQk9oeXFvMHBjcVNtR28wK2t4cHFjakVBaUUx
Z09lSGhiVTZWQUZWZnBTUlNrTWRUbzl4dlIwQkFLQjBIckEwOE9DT2gycW9FcGZxaWlGb1U2
bnh5Q2VqdnRlc01RU1MzMHRjZDlMZUZDbjYxSlZwU1pWYVROWGhsTkZLUXgxT2ozRzlIU0Vu
a0xCMHhFSWd3YzhQU3lvMC9Xb2lsbDlXSU9xdEprcjQ2bWlGSVk2blI1amVqcENSNkhrNlFp
RXdRT2Vyb0xvTTlLQlQvSnBQcVBvM3ZNdlllZFFibzF5anlmY0s2QktOR2VCNjZBR1ZXa3pW
OFpUNWYxa0Fhbk5uTWc5YWtjVlBpTU5EK3AwUFFicWRFU0NCdXIwc09CNnVoNVY0WHA2SXF1
aUZJYnI2ZlFZMDlNUk9nclU2WWdFRFhoNldGQ25LODZwVkx0bE1KNnFVS2NudGlwS1lhalQ2
VEdtcHlQRVVYbGp4RjFQQjNQOVJ6ZS93ZE1ySlE4bVBsSHhUZ3ZDYUtGMFVzSFRWY0I5TDJw
ektwa0Zyb1BNNnNQOFVoT3FmcnpqNVFZOVd4WmNyMlE0emZIS2xSWmZRVzJlVjlGUTVVMkUr
MTcraFB0ZUl1VWZkWG9jeTFMdEZYck02c09paUxza1h0ajF5aHZxZEc1RU5EaVJMNU4ya2tO
MUNGcjZxeXVlU1loRlZpc2xQMHFEYnB1S0p4WHE5TEQ4M2RNcm1ZRXQrVFNwai80VlJ0SHVK
THVXMzVUdzdJbXVxaTM1bkQrcWUzcThyc1l5UC82KzRSUEYvOGlzUGh4RFZkS3pvdklmdVZJ
L2MwUWZCc2pPaVZ5Vndpc29yMGN3SGttdXh0Rm1SMFBYMDIvTVRDVGlLK1cyVnNtUWlzd3do
azZUOWtybWVpV1Q3em9vZjFFUm50N2YzMTlhV3BxY25GeGFXdHJmM3krZHNISGpScjdLdThI
Q3dyMDJVWXdKM2gyTkhobFBqN2VxdjJzVGVycEU3UVMvVFAvNG95SGVhVkhYT2ZHNTBuSkUv
ZkJsM2krQzRpT3k5NUhpekI4OXZlNnBweTcxOWtiTEovWGs2V1ZsWlM2WEt4QUl1Rnl1OHZK
eTZZU05HemR5dWM3L0pQL3ZyOFNQcjRmMDFicE85NnY0dXJUcVY1NGplckdsTDd6c3BvUm5U
M1JWNWJzTy92MmtWRDBkYVRZMUhsV3l1MU1TeGdmTnBpSlRKYnU3ditjcTNKdDJZRXYrMzAr
bkRzVzNhOFNxcEFjclVuWERzNEl6bk4rVXJCN1pzNTNwb0ZLbE5JZkcxR2cyUlprdXhUZk9q
eGtZazNpMWsrSEhEZjZ5TnZNR0Q1RUxwZDNKbmxveUw5Q1BubDdwY0d5Wk4rK3ZyNzQ2SEFp
TTN5ZjE1T2wydTkzcjlSSkN2RjZ2M1c2WFR0aTRjV1BZbHdHQlFDQzBFRUpQNTJMSFAvL3p0
MGVPak5NbjllVHBTVWxKSXlNamhKQlFLR1F5bWJqQnpzN081NTkvM3JWdTNiTVBQUEIvbGk1
OTdva25ubi8rK2Q4KytPRHp6ei9QUFZaWlZqenlTTmc1bEZ1ajNPTy8vZHUvUVJWVVFaVncr
Y3c5OTB6a0hyV2ppbk90OWIvNXpUODhmZW5TYnc4ZkhxZFA2c25UMDlQVHc5YnAzSU16Wjg3
UWJERHd5U2MwMDJpMlJybEhtbWxRUlQ4TnF1aW5hVk1Wb1JNV3hUMXFVQlYzN2VXVFAvODU0
YTY5T0oxTy9ucTYwK21VVHVBOVBSZ00wbXp3eXE1ZE5OTm90a2E1UjVwcFVFVS9EYXJvcDJs
VEZhRVRGc1U5YWxCVjNaTlBYdXJwb2RrVURYcnk5TjdlM3BLU0VvdkZzbmp4NHI2K1B1a0Uz
dE1wQ1owL0h5VnAwUVNxNklFcWVyU3BpbWhWbURaVjBhQW5UdzlMZTN0N3ZDVUFBRUE4TVpT
bkF3QkFnZ05QajV5NnVycmMzRnlMeFZKUVVORFMwa0lJWVg1RVU2cWtJMXBRVlZ0Ym01MmRy
VFZWSEgvNHd4L2krQ0txbkZlYVVqVXlNdktIUC94aHhvd1pOOTEwazZhRUNkT1ZucDZ1RVZY
MTlmVlpXVmttazJuMjdObjE5Zld4MnpVOFBYSWVmdmpoOXZiMlFDQ3dhOWN1NFgwNDhmVjBx
U29sbmZGVjlmampqM2QzZC92OS9uZmZmVGRlYnp6WnpCdy9mbno2OU9seGZCR2xxdUo3Um5G
SVZiMzAwa3Z6NXMxcmIyOGZIUjNWbERDZVk4ZU8vZTUzdjlPSXFpbFRwbmc4SHBabDNXNjN6
V2FMM2E3aDZWR2d1N3ZiNFhEd1AycmhIVWdrcW1SSEpoNlJCcFpsMzN2dnZmejgvRGhLSWdK
VmdVQmd3WUlGUjQ4ZTFjS0x5S3RpR09iV1cyKzFXcTNMbHkvdjd1N1dpQ3FIdytGMnUrTXJS
b2owOUY2K2ZQbTVjK2ZpcFllRFY1V2ZuKy94ZUlMQm9OdnRMaXdzak4wZTRlbmpaV0Jnb0tp
bzZJTVBQdUJIdEdBSFVsWFNrYmlyNHY0NlRrMU4vZXl6enpTaWFzMmFOWC82MDUrSUJsNUU2
ZXMxT0RoWVVWRlJVbEtpRVZVbWsybnQycldUSmsxeU9Cd0hEeDZNb3lvaWw2N1cxdGJISDM4
OGpwTElqYW8rLy96ektWT21NQXd6WmNxVXp6Ly9QSFk3aGFlUGk3YTJOb2ZEc1dmUEh1Rmcz
TzFBcWtwV1o5eFZFVUs0YXk5ejVzelJpQ3J1MG5EY0wxNHJ2VjUrdjk5aXNjUkZFcEdvc3R2
dGJyZWJ1NWd3ZGVyVWVLbVNDdU5ZdG16WlYxOTlGUzlKUktKcTd0eTUvTFdYbi83MHA3SGJM
enc5Y3FxcnF6TXlNcHFibTBYajhmVjBxU29sbmZGVnRXYk5tdlBuei92OS92Mzc5MCtiTmsw
anFuamkrQ0lxcWJwMDZkTEdqUnVMaTR2aklVcEdWWGw1dWR2dDVpNG1aR1JreEVXVnJEQkN5
TWNmZi95em4vMHNYcEtJbktyVTFGVCsya3RhV2xyc2RnMVBqeHptUm9hR2hrUWoybFExTkRT
a0JWVTFOVFV6WnN4SVRrNis4ODQ3Ly9LWHYweThKRmxWd3FmaUlrbFdGZmNnSlNWbDJiSmxw
MCtmMW9pcXMyZlAvdXhuUDdOWUxGbFpXWEc4c0M3N0l2Nzg1ejkvLy8zMzR5VkpWbFZkWFoz
RDRUQ1pUTE5telhydnZmZGl0MnQ0T2dBQUdBZDRPZ0FBR0FkNE9nQUFHQWQ0T2dBQUdBZDRP
Z0FBR0FkNE9nQUFHQWQ0T2dBQUdBZDRPa2hRNG5nSE9nQ3hBNTZ1SjRMQjRMcDE2NlpPblhy
TExiZHMyclFwM25MMEFjTXdyN3p5Q2lIazVaZGZobzlUMHQ3ZXpqQU0vc2tNSlpvNngrRHBl
bUw5K3ZVUFBQREF1WFBuTGwyNjlNd3p6OFJiamo1Z0dDWW5KMmQwZEhUZXZIbHhmNy9waFMx
YnRpUWxKVzNac2lYZVF2U0JwczR4ZUxxZW1EbHpwdWgva0F0UElQNHh3ekRyMTYrM1dxMThT
OCs0bjJkeGhHR1lKVXVXdlBUU1MwdVhMaFdtU0pTNjExNTdMUzB0TFRVMWRkZVAvMXc0a1pP
MmJObXlwNTU2YXRteVpkeVBoWVdGM0Q5Mk9IVG8wTUtGQ3draHg0OGZ6OG5KU1VsSmNibGN3
cXpHUzNCOGtaNWozQWxtTnB2NS80bXhhdFdxWC8vNjE0U1F4eDkvZlBYcTFmeUtVUmNEVDlj
VEpwTXBGSC83NEhnQUFCeHpTVVJCVkFvSlI1UTgvWlZYWHZINWZFOC8vZlNFNnRNa0RNUHMz
YnMzS1NscDM3NTlzdW5pSG0vZnZ0M3Y5emMyTnNicjM0Wm9CNS9QTjNueTVIUG56azJlUE5u
bjh4RkN0bTdkV2w1ZVRnZ3BLeXZidG0wYklTUS9QLytOTjk3dytYeTdkdTFLV0N2blVUckhR
cUZRYTJ2cjlPblRDU0hEdzhOMzMzMzN2Ly83djk5OTk5M0R3OE94RXdOUDF4TXFkZnJ3OExE
UTA2OWR1emJSNHJTS2lvOExIL052TXpoVVEwTUQzM3lxb2FHQkVQTEREei9ZYkxZelo4N1li
TGFMRnk4U1FzeG1zOS92SjRUNC9YNWtUSHBlYmQrKzNlRndKQ1VsTVF4ejAwMDNjVThkUDM2
Y1laamp4NC9IVkF3OFhVOVVWRlE4OE1BREF3TURseTlmcnFpb0lJVFk3ZmJtNXVaQUlMQmp4
dzc4Q1N3THBhZkxQazVNVnE5ZXpYMEN2Mm5USnY0cWdkUHB2T09PTzhyS3lyZ2ZGeXhZc0hQ
blRyL2YvMS8vOVYvSW1QVDhTVWxKYVd4czlQdjlicmViRy9INy9RVUZCY3VYTHk4b0tBZ0VB
ckVUQTAvWEV5ekwvc2QvL0lmZGJ1ZnZlNm11cnJiWmJHbHBhZHUyYlZQeDlFUisxMG5mYjZJ
K3FMSnpTQUluTFNzcjYrVEprNFNRa3lkUFptVmxjWU9IRGgxaUdPYlFvVVBjajIxdGJkbloy
U2twS2M4OTkxeFNVaEkzbUxBWms1NC9MN3p3Z3MxbXM5bHNtemR2NWtaV3JsejUyR09QRVVJ
ZWZmVFJKNTk4VXJwaXRJQ25Bd0FpWkdSazVQMzMzNTgzYjE2OGhZQi9BRThIQUVRQ2Q2VTRL
eXNyWHYvU0JNZ0NUd2NBQU9NQVR3Y0FBT01BVHdjQUFPTXdOazluRklpaW9JVDk2RHhhMEx3
b3d0Y3VQVDJkY2kwRE05YWtjU005UFQwbEpTWEp5Y2tsSlNXOXZiMFRvbFFyMEdTc3ZyN2U0
WEJZTEpaLytxZC82dXJxa2gweEtudjI3Smt6WjQ3RllsbTRjT0hSbzBjSklmWDE5ZlBuejA5
T1RpNHFLdnI0NDQ5VjFxMnNyQnpQT1RaMlQrK1FCRHhkZTFDbWNmWHExUnMyYkJqcldrWWxy
S2VMUmg1NjZDR1h5eFVJQkZ3dWw5UHBqS0V5cmFLZXNmVDA5SmFXbG1BdzZIYTc3Ny8vZnRr
Um8vTFFRdytkUEhreUVBanMyYk9IKzJheTArbnM2T2hnV2ZiQWdRUFRwazFUV3ZIRWlSTVpH
Umw4WWlNNHgyTGw2VnUzYm5VNEhDYVRpZjlsdm1qUkl1N20xdHJhMnRMU1V0azUwbEtvczdO
ejhlTEZGb3RsN3R5NTNDODNobUh1dlBQT3NyS3kyYk5uODkrQUFDSm8zUG5TcFV1cHFhbG56
NTRkMDFvR0pxeW4yMncycTlWNnp6MzNkSGQzRTBMUzA5TzlYaThoeE92MUptWkhnYkNlZnZq
d1ljN0IwOUxTWkVjTVQxOWZuOFZpNGIvWDdmZjc2K3JxbE83K1pGazJMeS92N2JmZjVoTWJ3
VGtXSzArZlBIbHlaV1ZsUjBkSE1CamtSdmJ0MjhkWmNGRlIwUWNmZkNBN2gwak9rcUtpb25m
ZWVZZGwyYWFtcHJsejUzSVQrRWFna3lkUHBqbklCSVRHblRkdjNzeDlDV0pNYXhrWW1zTS9m
LzU4UlVWRlNVa0pJU1FwS1dsa1pHVEpraVdoVU1oa01zVmVvT1pRejFodGJlMXR0OTAyYWRL
azU1NTdqc3VQZE1UWWZQLzk5OFhGeFh3TFZmNXE1NWRmZmlrNy85bG5uMzNra1VlSUlMRVJu
R094OHZRUFAvenczbnZ2blR0MzdpMjMzUEw3My8rZUVESThQRHhuenB6OSsvZHpUU2xsNXhE
SldXSTJtL25Lbld1YndGZjAwc21BSjJ4bWhvZUhNek16UmEwbkVqeWZsSWNmQ0FRc0Znc2hK
RDA5ZlhCd2tLQk9EOGZSbzBkbnpweXBQbUk4dnZ6eXk5bXpaN3RjcnBHUkVYN1E1L1B0Mjdj
dkx5OVBkaFd1UDR6d1drVUU1MWhzcjZlUGpJd2NQWHJVYXJWeVAyN2F0TWxxdGZLOVRHWG5K
Q2NuYzMvWWNoUVhGemMwTkFqYkk4RFRhUWliR2Y0SzJKaldNalkwaDMvMTZ0V1hYbnFwdUxp
WUVQTGdndzl1MkxDQlpka05Help3NVZXaUVUWmpvNk9qbloyZCtmbjVYSHNpMlJGRFVsTlRV
MXhjL09tbm4vSWpLMWV1N09ucFlWbTJycTR1N0hVblByRVJuR094OG5UdTkweFNVdEtzV2JQ
ZWVPTU5idkRDaFF2cDZlbGNPemVsT2V2V3JVdEpTZUczZWVyVXFidnV1b3Nia2JwNWdudVFM
TXlOOElPaWFZc1dMZHEvZjcvNldva0RUZEs0cDI2KytlYTc3cnJyOU9uVGhKRHU3dTVGaXha
eGQzSDA5UFRFUVhmOG9NOVlSa2JHbWpWcldKYVZIVEVxb3Z3TURRMjk5ZFpiczJmUE5wdk5l
WGw1SG8rSG42YTBPdmNnZ25OczR1NWxIQmtaZWYzMTE5ZXRXMGN6R1FBQVFBUk0zSGVPR0lZ
cExDemtQc01GQUFBUUMvQTlVZ0FBTUE3d2RBQUFNQTd3ZEFBQU1BNmE2L2NDeGdsTmd3aHAy
dzNocThsMWdFa29hSkltVFpHMHAwZmlRUFBlbCtZbmNVNHoyWnVDd2lhTlpkbTFhOWR5dlFH
NGFmWDE5VmxaV1NhVEtTc3I2OENCQXpTN0hydW5yejRzRG5pNmxxQnBFS0hTZGtQVUFTWkJH
Rk5YRFQ1RjBwNGVpWWI2ZTE4bFA0WS96YVNab2ZISmlvcUt3c0xDam80TzdsdVpoQkNiemRi
VTFNU3lyTWZqc2Rsc05MdU9sYWNMQjduSDB1NHUwbDR1M09UMTY5ZGJyZGJDd2tLYUF3QWlh
QnBFS0xYZGtIYUFTUkRvdTJySXBralUweU54b0t6blJQbEpoTk9Na1hRSGtvNUltVEZqeGtj
ZmZTUWNLU2dvT0hUb1VEQVliRzV1WHJod0ljMnVKODdUcGQxZHBMMWN1TW12dlBLS3orZDcr
dW1uYVE0QWlLQnBFS0hVZGtQYUFTWkJvTytxSVUyUnFLZEhRa0hqNmRMOEpNNXBKdXdPcERR
aXhHUXl1Vnd1cTlXYW1abkpmU1d3cmEwdE5UV1ZZWmpVMUZSUkp3OGxZdTdwdzhQRDNHTnBk
eGRwTHhkdXhRU3NkNkxJbUJwRUNOdHV5SGFBU1JBb2t5Wk5rV3hQajhRaHJLZEw4NU5vcHhu
ZkhVaGxoQ2MxTmRYdGRnZUR3WmFXRnU3emh1enNiSS9IdzdLczIrM095Y21oMldPc1BOMXV0
emMzTndjQ2dSMDdkZ2duQ0x1N1NIdTVFSHpkZjl4UU5vaVF0dDJRN1FDVElGQW1UWlFpYVUr
UFJFUDkzU3FibjRRNnpZVGRnWlJHaEt4WXNZTDNkSzYybURKbGlzZmpDUWFEVFUxTmNiNmVY
bDFkYmJQWjB0TFN0bTNieGdoNm93dTd1MGg3dVJCNCtyaVJiUkFoeWlxWGNGSGJEVkVIbUlT
Q0pta2tYSk9jb2FHaGlWTWNiMFRIemcrcXpPSHlreUNuR1hmSXd1NUEwaEVpeVZoWFY5ZWlS
WXZNWnJQRDRhaXZyeWVFMU5iV09od096amJyNnVwb2RvMTdHUUVBd0RqZ08wY0FBR0FjNE9r
QUFHQWM0T2tBQUdBY0p0clRjZkVkQUFCaUJ6NGpOUm8wVFVpRXJ4MTNHMnlDdjVvMHh5NU5r
YlJ0VHVKQWM1cEo4NE1PT2Vxbm1iUzdTd1R2eWpGNyt2VktjU1NtQzJpV01UVWg0ZHR1NEVV
azRaSWdmVmFsYlk3aG9Ubk5wUGxKNUE0NU5HOHhwZTR1bXZCMGhtRmVlKzIxdExTMDFOUlUv
cDlLaTM3aGZQWFZWd3NYTHVRNndIQWpzaDFnUUdTRWJVSWliTHZCVURTak1EeGhQVjJVSXFX
Mk9RbUZ5bW1ta3A4RTdKQkQ4eFpUNnU2aUZVL2Z2bjI3Mys5dmJHd1Uva0lXVHM3UHo5KzJi
WnZ3WDgzS2RvQUJFVURUaEVUYWRrTzlHWVhob1hubkNGT2sxRFluY1ZBL3paVHlrOGdkY3RU
ZllrcmRYYlRpNmNQRHcxSkJ3c2Rtczlubjh3blhrdTBBQThZS1RSTVNwYlliS3Mwb0RBL2xP
MGVhSW1IYm5NU0J2dGVOTUQ4SjNpR0hxTDdGbExxN2FNWFR3ejVlc0dEQnRtM2IrRGFOUktF
RERCZ1RsRTFJWk50dXFEZWpNRHcwN3h4UmlxUnRjeElFeXROTWxCOTB5RkYvaXlsMWQ5R29w
ek0zUWdqNTRvc3ZDZ29La3BLUytNbXlIV0RBbUJEbG1XdXlJVTJtYk9zU1VUT0t4RUY2Y2hL
RjdpWFNEaDZpdGprSkFzMXBKczJQN0ZvSmd1eGJUSlF4YVhjWDJUTlRIZHpMQ0FBQXhnSGZJ
d1VBQU9NQVR3Y0FBT01BVHdjQUFPTVFXMDlYdXRTT2EvRUFBQkFMNHZNWnFkS3RCVUFkMlhz
emVMak9MVFJOU0ZpV1hidDJiVVpHQnI4cEEvK0tyYSt2bno5L2ZuSnljbEZSRWZmbFpHblNw
QW1SSWsyK1VidVhVSjVtb3F4S2lVcjNFbDBnelpqMDJDUHJrQ1BOZkZqR2ZpOWpoempnNlJP
R1NycjR6aTAwVFVncUtpb0tDd3M3T2pwR1IwY3B0NjlmbkU1blIwY0h5N0lIRGh5WU5tMmE4
Q2srYVVvSkVTSk5qbEc3bDlDY1ppcFo1WWxLOXhKZElEMGk2YkZIMWlHSGg4OThXR0xvNmFK
ZnlHMXRiVGs1T1NrcEtSVVZGVXFlam40djZqQUtMU09FblZ0b21wRE1tREhqbzQ4K2t0MStq
SlRISGIvZlgxZFhOMi9lUEg1RW1EU2xoQWhSU2o0eFhQY1NtdE9NUTVwVklWSHBYcUlMcEJs
VE9uWVNVWWNjYWVaVmlHMmRMbnhxL3Z6NU5UVTFmcisvcXFwS3lkUFI3NFVHYWNzSVllY1dt
aVlrSnBQSjVYSlpyZGJNekV6Uk40OWlxanhlOEgrNmZ2bmxsL3lnTUdsS0NaRWlUYjVSdTVl
b24yWkVJYXRDb3RLOVJFY0lNNlowN0pGMXlKRzJabEpoNGp6ZGJEYjcvWDVDaU0vblUvSjA5
SHVoUk5neVFxbHppMG9Ua3RUVVZMZmJIUXdHVzFwYWhCZnBqUHBtSTRUNGZMNTkrL2JsNWVW
eFA0cVNwcFFRV1lUSk4zYjNrckNubVNpcklxTFN2VVJmOEJtVFBmYklPdVFvdmNHVm1EaFB6
OHZMNCtyMDZ1cHFmbno2OU9uQ1gvTG85MEtEcUdXRXRITkwyQ1lrSzFhczRDMU1xV3VtWVZp
NWNtVlBUdy9Mc25WMWRmemZzNktrS1NWRWlqRDV4dTVlb242YXlXWlZSRlM2bCtnSVljYWt4
eDVaaHh5aTBKcEpoVmg1T25NamhKQmp4NDVsWjJlbnBLU3NYNytlWDJYbnpwMVdxNVgvRWYx
ZTFPSFNJbW9aSWR1NVJkU0VSSlRNcnE2dVJZc1dtYzFtaDhOUlgxOVA1RjR2dy9EV1cyL05u
ajNiYkRibjVlVjVQQjV1VUpRMGFVSUlkYjhYSHNOMEw2RTV6V1N6S3NwWVZMcVg2QUpweHNJ
ZU8yV0hIQ0xKZkZqUTd3VUFBSXdEdmtjS0FBREdBWjRPQUFER0FaNE9BQURHSVQ3OVh1SzFI
UUFBTURhNi9Jd1VGcTlDVDA5UFNVbEpjbkp5U1VsSmIyK3Y3Qnhwc3c2YTloMEdoaVpwMGpt
SmZJOEFUY2FFRnNIZDlXL1VqQ2tkVjJWbEpUOUkyZTlGMUNXR0pzOGl4dXpweGN4Ym9vQ25h
NHFISG5ySTVYSUZBZ0dYeStWME9tWG5TSnQxMExUdk1EQTBTVk9hazVobkkwM0dlRVM5U295
YU1kRnhuVGh4Z3VzS3gvMUkwKzlGdGtzTWZaNDVZdWpwb2w5Y24zNzZhVzV1cnRsc3pzM041
VzY4ZHpnY1o4NmNJWVI4OTkxM0RvZURYOFZzTmhjVUZMUzB0TWh1Qi9kUXFwT2VudTcxZWdr
aFhxOVgvZXN6MG1ZZDZ1MDdEQXhOMHBUbUpPWjVTSCthU1h1VkdEVmp3dU5pV1RZdkwrL3R0
OStXSHF4S3Z4ZHBseGo2UFBQRXRrNFhQcFdUazdONzkyN3VlNlM1dWJtRWtKVXJWKzdjdVpO
aG1OMjdkei81NUpQOHpGQW8xTnJhT24zNmRObnRTSDhFUXBLU2trWkdScFlzV1JJS2haVDZ2
UkM1WmgzU2tjU0JKbWxLY3hMemJLUTh6WWhjcnhLalpreDRYTTgrKyt3amp6eENKQWVyM3U5
RjJpV0dQczg4RStmcEpwT0o3L2RpTnBzSklYdjI3TG4zM252dnZQUE9GU3RXdlAzMjI0U1E3
ZHUzYzErK1ltN3M5d0pQcHljOVBYMXdjSkJRL0dLWE51dFFiOTloWUdpU3BqUW5NYzlHeXRO
TXRsZUpVVE1tUEM3T3hFUlhGTUwyZTVGMmlhRi9PL1BFczA3djcrK2ZOR25TeXkrL2JMVmF1
VC9OVWxKU0doc2IvWDYvMiswV1hXOFJialk1T1ZuVTdCVHdQUGpnZ3hzMmJHQlpkc09HRFZ5
bElFWGFySU9tZlllQm9VbWEwaHlqT3BRNk5Ca2pDcjFLakpveDJlUGlCMm42dlVpN3hGRG1X
VWlzUEoyNUVVSklhMnRyVGs2T3lXVEt5Y25oRHl3N083dTN0NWUvZ1B2Q0N5L1liRGFiemJa
NTgyYm14disvSS94MXQyN2RPcTRuRE0wUkpocmQzZDJMRmkzaS9sVktUMDhQTnlqS2xiUlpo
Mno3anNTQkptblNPYkluWjRKQWt6R2kwSXpJZUJsVE9TNytSOUVjMlg0djBpNHhzbmxXUjVm
M01nSUFBSkFGM3lNRkFBRGpBRThIQUFEakFFOEhBQURqb0k5K0x3QUFBR2pBWjZSR0k3TFdK
UkcwbFRBU1NOcFlRY2JHeW9SbGJNeWUvaGJ6bGlqZzZab2lzdFlsRWJTVk1CSkkybGhCeHNi
S2hHVXNocDR1ZTZ2bSt2WHJyVlpyWVdFaEllVFlzV1B6NXMwVC9ZZFNNRTRpYTEwU1FWc0pJ
NEdralJWa2JLeE1XTVppVzZkTFBmMlZWMTd4K1h4UFAvMDBJV1QrL1BrMU5UVit2NytxcWdx
ZUhpMGlhMTBTUVZzSkk0R2tqUlZrYkt4TVdNWW0ydE9GM2NqTVpqUGZBUWFlSGkwaWExMFNR
VnNKSTRHa2pSVmtiS3hNV01ZbTJ0T0ZQK2JtNW5KMWVuVjFOVHc5V2tUV3VpU0N0aEpHQWtr
Yks4allXSm13ak1YSzAyVnZqQkhOYkcxdC9lbFBmNXFTa3VKeXVlRHAwU0t5MWlVUnRKVXdF
a2phV0VIR3hzcUVaVXdyOXpMQzB3RUFZUHhvNVh1azhIUUFBQmcvV3ZGMEFBQUE0d2VlRGdB
QXhpSE9ucjV6NTg3Smt5ZUh2ZkNDS3pNQUFFQkRuRDhqblQ1OStva1RKMFM3aUhocmdOQTFp
R0JaZHUzYXRSa1pHZnpMbDhpTk9FaWt2VGc0S2lzckUvQ2twWC92Qy9Pelo4K2VPWFBtV0N5
V2hRc1hIajE2Tk1ZYTQ0bjBTSVdHbVo2ZUxydFdmWDE5VmxhV3lXVEt5c282Y09BQU4rSndP
TGo3WHJxNnVtaDJQV1pQNzdndWp2R2MwTUovSk0zdkl1S3RBVUxYSUtLaW9xS3dzTENqbzJO
MGRKUitMUU1UV1M4T1FzaUpFeWU0WDQwVEpsVlRoRDF3VVg0ZWV1aWhreWRQQmdLQlBYdjJH
UHM3UnlwSHVucjE2ZzBiTnNpdVpiUFptcHFhV0piMWVEemMveU5OVDA5dmFXa0pCb051dC92
KysrK24yWFdzUEgzcjFxME9oOE5rTXZHL3pELzk5TlBjM0Z5ejJaeWJtOHY5UDFMWkc5aWx2
LytsNVFDRHZqSEswRFNJbURGanhrY2ZmVFRXdFF4TVpMMDRXSmJOeTh0NysrMjNFL2FzVXo5
d2xmejA5ZlZaTEJiaHQ4cU5pdWhJTDEyNmxKcWFldmJzV2RuSkJRVUZodzRkQ2dhRHpjM05D
eGN1SklTa3A2Y2ZQbnlZODNUS2YvNGVLMCtmUEhseVpXVmxSMGRITUJqa1JuSnljbmJ2M3Mx
OWF6UTNONWZmb0hRWHN2c1YvWWkrTVVyUU5JZ3dtVXd1bDh0cXRXWm1abkwvQWppUkczR1FT
SHR4UFB2c3M5eFgreEwyckZNL2NLWDhmUC85OThYRnhjODg4MHhzeFdrQTZaRnUzcno1c2Nj
ZVU1cmYxdGFXbXByS01FeHFhdXJ4NDhjSkliVzF0YmZkZHR1a1NaT2VlKzY1V1BWN29mVDBE
ei84OE41Nzc1MDdkKzR0dDl6eSs5Ly9uaEJpTXBuNDdpNW1zNW5mb0hRWHN2c1YvWWkrTVVy
UU5JaElUVTExdTkzQllMQ2xwWVc3dEpmSWpUaElwTDA0a3BLU292dk5POTJoZnRTeStmbnl5
eTluejU3dGNybEdSa1ltUkdQY2tCN3A4UEJ3Wm1ZbVo5YXlaR2RuZXp3ZWxtWGRibmRPVG83
d3FhTkhqODZjT1pObXY3RzluajR5TW5MMDZGR3IxVXFvNi9UazVPVHU3bTdwZmxWK1JOOFlJ
VFFOSWxhc1dNRjdPbWRQaWR5SWcwVGFpNE1uWWM4NnlnUG5wOVhVMUJRWEYzT1hYbzJON0pI
VzF0YVdscGFxckRWbHloU1B4eE1NQnB1YW1yanI2WVNRMGRIUnpzN08vUHo4aW9vS21sM0h5
dE81Mzh4SlNVbXpaczE2NDQwM0NDR3RyYTA1T1RrbWt5a25KNGMvVk9tNjY5YXRTMGxKa2Iz
Q0xod1Vyb0srTVVKbzJrcDBkWFV0V3JUSWJEWTdISTc2K25xbHRSS0h5SHB4OENUZ1dVZnp4
aFJPbGwxcmFHaG9ndVJPT0xKSHVtalJJdTVTcDNDYThNZmEybHFIdzhIWlpsMWRIYitkakl5
TU5XdldzQ3hMczJ1dDlIdUpGcG9TQXdBQUU0elJ2a2NLVHdjQUpESkc4M1FBQUVoazRPa0FB
R0FjTk8zcEdyeGVEd0FBV21aQ1B5T056SjNoNldPQzVrVVJ2bmJjL2VuMTlmWHo1ODlQVGs0
dUtpcjYrT09QSjBxc1ZxQkptclRmaXpTTmlRUE5DU1BOVCtKVWFaSDFlK0VRZHNpSklHTmo5
dlRya29DbmF4REtwUEd0SjV4T1owZEhCOHV5Qnc0Y21EWnRXb3pWYVJUMXBLbjBoRkhwNEdG
VXhuVENpUEtUQ08vb3lQcTlFSVVPUXByd2RHbS9GMmxkMzluWnVYanhZb3ZGTW5mdVhPNVhQ
ZmVzMld3dUtDaG9hV21KNEhnQUIwM1NwSzBuL0g1L1hWM2R2SG56WWlsTnU2Z25UYWtuakhv
SEQyTkRjOEpJODVOUTcrZ3g5WHRSNnBDakNVK1g5bnVSS2lzcUtucm5uWGRZbG0xcWFwbzdk
eTQvSGdxRldsdGJwMCtmSHNIeEFBNmFwSWxhVC9CL0ZYNzU1WmV4bEtaZDFKT20xQk5HdllP
SGdhRThZYVQ1U1p4MzlGajd2U2gxeU5HRXAwdjd2VWlWbWMxbXZuTG5tdTV1Mzc2ZCt4b1ZQ
ekxXNHdFY1laTW0yM3JDNS9QdDI3Y3ZMeTh2bHRLMFM5ZzZYZG9USm13SEQyTVQ5b1NSelUr
Q3ZLTWo2UGVpMUVGSUU1N09JZXozUWlTOVhJcUxpeHNhR2dLQkFEK1NrcExTMk5qbzkvdmRi
amUvMmVuVHB5ZHM1Umd4WVU4Q1VldUpsU3RYOXZUMHNDeGJWMWRIMmRMVGVLZ25UYmJmUzln
T0hrYUY4b1NSelU4aWVIcGsvVjU0dEZpbmM3OW5oUDFlaUtTWHk2bFRwKzY2Nnk1dWhCdDg0
WVVYYkRhYnpXYmJ2SGt6UDIzbnpwMVdxelVSem9Pb3dOd0lQeWlhSm1vOThkWmJiODJlUGR0
c051Zmw1WGs4bm9tVHF3MW9raWJiNzBYYXdTTkJrRDFod3A1bXNuazJKS0lqcGV6M0loMlBJ
R05HNi9jQ0FBQ0pqS2EvY3dRQUFHQk13Tk1CQU1BNHdOTUJBTUE0d05NQjBEVDR2QXFNQ1hn
NkFESkU3S1JSdDJDVkRVWmxYd3pEdlBMS0s0U1FsMTkrZVR3YlpCaG15NVl0NHhjbTdaUlNY
MStmbFpWbE1wbXlzcklPSERpZ3RIZlIvUm9zeTY1ZHU1YjducjJTSHZVZVBrb0twV3RKTmRN
Y2w4cmVWWTRyTFBCMEFHUklLRS9QeWNrWkhSMmROMi9lT0QwOU96djc2dFdyNHhRbTdaUmlz
OW1hbXBwWWx2VjRQUHgvNlZUU3dEK3VxS2dvTEN6czZPZ1lIUjFWMlplb2h3K05jdWxhS3Qx
ZFZJNUxxWU9RVkFNOEhZRHhJdnUrWW01c1JrVFQxRWg5eS94YUZSVVZLU2twOCtiTmEydHJJ
NFMwdGJYbDVPU2twS1JVVkZRSXR5emN1M1JmMGdaS3NnY2kxYk5reVpLWFhucHA2ZEtsM09S
UFAvMDBOemZYYkRibjV1WnkzNXBoR09hMTExNUxTMHRMVFUzZHRXdVgwbllxS3l0ZmZQRkZm
cWZTN1JRV0ZuTGlEeDA2dEhEaFFuVmhmS2VVZ29LQ1E0Y09CWVBCNXVabTliV0VCenRqeG95
UFB2cElaUUtSNitIRE1Jek5ack5hcmZmY2N3Ly9CY213YTBrMTB4eVgwbmJnNlFCRUg2VjNr
YkFaRVUxVEkvVXQ4MzVkWFYzdDkvdHJhbW9XTEZoQUNKay9mMzVOVFkzZjc2K3FxaExPVjIr
RnBOUkFLYXlldlh2M0ppVWw3ZHUzajl0Z1RrN083dDI3L1g1L2RYVjFibTR1TjJmNzl1MSt2
Nyt4c1ZHcERtVVlabWhvYU02Y09aY3VYVkxhenRhdFc4dkx5d2toWldWbDI3WnRVMUVsN0pU
UzF0YVdtcHJLTUV4cWFxcDZHd1poUWt3bWs4dmxzbHF0bVptWlN0OExVK3JoYy83OCtZcUtp
cEtTa2pHdEplM3VvbjVjU3R1QnB3TVFmYVR2SW1reklwcW1SaXBiSGg0ZTVqM2Q3L2NUUXZ4
K3Y4VmlJWVNZeldadXhPZnpjWE5vV2lGSkd5aU45VWk1eHlhVGlkKzcyV3pteG9lSGg5VVBr
QnZmdEduVDczNzNPNlh0L1BERER6YWI3Y3laTXphYjdlTEZpMHFTUkoxU3NyT3pQUjRQeTdK
dXR6c25KNGZ5V0ZKVFU5MXVkekFZYkdscFVlcFhMdHZEaHlNUUNIQ3ZCZVZhMHU0dVlZOUxh
ZS93ZEFDaWovUmRKTnVNaUlScmFpVEZicmMzTnpjSEFvRWRPM2J3bnM3VnN6VTFOZlBuenll
RTVPWGxjWFY2ZFhVMU4wZDI3MkViS0kzMVNGWHFkSlhNQ01kOVB0K3NXYk9VdGtNSWNUcWRk
OXh4UjFsWm1aSWVhYWVVS1ZPbWVEeWVZRERZMU5SRWZ6MTl4WW9Wdktjci9XMGgyOE9IRUhM
MTZ0V1hYbnFwdUxpWWNpM1o3aTVoajB0cDcvQjBBS0lQY3lORXJoa1I5NVI2VXlNcDFkWFZO
cHN0TFMxdDI3WnRvdXZwMmRuWng0NGRJNFFjTzNZc096czdKU1ZsL2ZyMVNudVg3a3ZhUUls
RWRDMm90YlUxSnlmSFpETGw1T1R3MTlObDU4dHVaOHVXTFVyYklZUWNPblNJWVpoRGh3NnA2
QkV5TkRSVVcxdkwvWTB5YTlhc3VybzZtclVJSVYxZFhZc1dMVEtielE2SG83NitYbGE4dElj
UHQvck5OOTk4MTExM25UNTlla3hyQ1RYVEhGZlk3Y2lPaEFXZURrQ2NHVk1WQm9BNjhIUUE0
Z3c4SFVRUmVEb0FBQmdIZURvQUFCZ0hlRG9BQUJnSGVEb0FBQmdIZURyUUJ3ME5EWTJOamFG
UXFMR3hzYUdoZ1hJVjlXZVZKdmg4UHJmYkxUdGZaUzBBdEFBOEhlaURob2FHVHo3NTVILy85
My8vK3RlL1JzdFZsYmJ6MVZkZlNaK0NsUU5kQUU4SCtxQ2hvZUhVcVZNZWorZlVxVk84dllv
ZU5EUTB0TGUzZXp5ZXpzNU9wVUhSTnFVN3VucjE2cUZEaDJROTNlUHhIRDU4ZUdCZ0lLcEhC
a0EwZ2FjRGZkRFEwUERERHovd1MzNVErS0Nob2VIaXhZcytuNC83VC9heWc2SnRTbmYweFJk
ZmRIVjF5VDQxT2pvNk1ERFEzTndjdmNNQ0lNckEwNEUrYUdob0dCMGRQWExreU9qb0tHKzRI
by9INS9QeExpKzFlT21nYUp1eU8xSzZiajQ2T2pvNE9BaFBCMW9Hbmc3MGdkQmgrY2Vkblow
ZWo2ZTl2VDBDVHhjWnQvUlo2WU9HaG9iRGh3K2ZPM2N1bWdjR1FGU0Jwd01BZ0hHQXB3TUFn
SEdBcHdNQWdIR0Fwd01BZ0hHQXB3TUFnSEdBcHdNQWdISDRoNmUzdGJYdEJRQUFvSDhZR0Rv
QUFCaUcvdzlSMWorN1dPODFFUUFBQUFCSlJVNUVya0pnZ2c9PSIgLz48L3A+PHA+Jm5ic3A7
PC9wPjxwPkluIENQVSB1c2FnZSBvZiB0aGUgRG9tVSwgdGhlcmUgaXMgYWxzbyBub3QgbXVj
aCB0byBzZWUsIGV2ZW50dWFsbHkgYSB2ZXJ5IHNsaWdodCBjaGFuZ2Ugb2Y8L3A+PHA+bWl4
OjwvcD48cD4mbmJzcDs8L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZzti
YXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWZFQUFBRnNDQUlBQUFCVHFCZTNBQUFn
QUVsRVFWUjRuTzJkZTNBVVpiNzNtOHhNQ0lObUpnbGhBNFloQVVNdUpNRVFEZ0t2VXJ6V2Uw
VFJYWEVEdXF4b25WcFhUaDFBSXhHdDlXaXhXVUIyQlFRbGtDTUhoUkFJb3VuSkRiTENoa3Np
Y0lwQXdpS1N5QjNrbXBucHllMzU1NjE2LytEOW8zZmJabnBtK3BsT1pxWXYzMC85cW12eXpE
UGQzMzZtK3p1LzlQVDhIdWJ2QUFBQWRFRnpjek1UYlEwQUFBQUdnZWJtNXUzYnQvL0Qwd2tB
QUFBdHMzMzdkbmc2QUFEb0JIZzZBQURvQjNnNkFBRG9CM2c2QUFCb2lXb0o0bWZoNlFDRUJZ
WmhvaTFCRlJwQW1PanY3K2ZkSEo0T1FDUlFnNStxUVFNSUI3Mjl2YWRQbjJaWjlzNmRPelUx
TmVLbjRPa2c3TFMzdC8vcVY3OUtTRWlJalkyZFBIbnlybDI3K0hibW44VEh4Ny80NG92WHIx
OFgycVVyMFp3OXFVR3dHalNBUWFlenM3T2hvYUdscGVYU3BVczFOVFduVDU4V1B3dFBCK0hs
N05tenYvakZMelp1M1BqVFR6OXhISGYwNk5FWFhuaUJmMHB3bkd2WHJ2M21ONy81NVM5LzZk
TXVSblAycEFiQmF0QUFCcDBqUjQ3Y3VYTW4wTFB3ZEJCZVhucnBwYi84NVM5K254STd6czJi
TjYxV3E3VGRiK2RBamNLZlRxY3pPenZiWXJFNEhJN05temZ6alQvODhNT3p6ejQ3ZlBqd29V
T0gvdXUvL3V1MWE5ZjRkcmZiL2R2Zi90WnF0WTRjT1hMVnFsWENTbnA3ZTB0S1NrYU1HREZz
MkxDaW9xSjc5KzdSN3pVdlp0V3FWY25KeVZhcmRlSENoUnpIRVVKbXpKaXhZOGNPb1U5bloy
ZEtTb3I0L0V4UFR6OTE2aFQvK1BQUFArY2ZuRHAxS2owOVBZaWtRTzNDdm56MzNYZWpSNC8r
K09PUFE5b0ZvRVhnNlNDOGpCdzU4dkxseTM2ZkVqdnlyVnUzQnRIVGs1S1NkdS9lelhGY1oy
Zm5hNis5eGpkbVpXWHQzNy9mN1hiZnVYTm44ZUxGTDcvOE10LysxbHR2UGZmY2M5ZXZYNzkr
L2Zxenp6NHJyT1RERHo5ODZxbW5MbHk0Y08vZXZWZGVlZVgzdi84OS9WN3pZbWJQbm4zdDJy
VnIxNjdObmozNzdiZmZKb1RVMXRabVptYjI5Zlh4ZlY1NzdiV1ZLMWVLWC9YR0cyOXMzTGlS
RUhMaHdvV0hIbnFJZCtjTkd6WXNXclFvaUtSQTdmeStWRmRYanhneFl1L2V2U0hwQjZvRjk3
MkFhR0kybTN0NmV2dytKYmpuOWV2WFgzbmxsZWVlZTg2bjNXL25JSTNDbjZtcHFldlhyNzl3
NFVJZ1ZTNlhhOFNJRWZ6ajBhTkgvL0RERC96ajc3Ly9YbGlKdytFNGMrWU0vL2pxMWFzalI0
NE10RGEvTUF6ei9mZmY4NC9QbmozN3lDT1A4SThMQ3d1Ly9QSkxvZEhsY29sZjlmWFhYeGNW
RlJGQ1ZxNWNPV0xFQ1A2ZmpGLy8rdGZmZlBOTkVFbUIyaG1HK2VTVFQwYU5HdFhjM0J5U2VL
QitjTjhMaUE3QjgzU2VoeDkrK0lVWFhyaDY5U3JmSGhNVDA5dmJLKzdaMjlzYkV4UGpkdzEr
LzJ4dWJuNzIyV2NURXhQVDB0SjROeVNFSERwMGFQcjA2VmFybGQvb2tDRkQrSGFUeVNSc3Jx
ZW5SMWlKMld4bVJBajkvZTZDMzZmRXF6V2J6Znpqdlh2M1ptUms5UGIyenA4L2Y5MjZkVDZ2
NnVycUdqTm1EQ0ZrNHNTSkxNcysvdmpqaEpBeFk4YncxaDlJVXFCMmhtSFMwdExlZWVjZHFU
eWdhWERmQzRnYUw3MzAwdHExYS8wK0ZlZ2JQSWZEOFQvLzh6L2lsdVBIanpzY0RtbFBzOWtz
NUxrLy9mU1R6d3I3Ky90Wmx2M0ZMMzdCL3psNjlPaUtpb283ZCs3MDkvZmZ2WHRYNkR4cTFD
aS9lWHBxYXVyRml4Y3BkdEUvNGp6OSsrKy9IejE2dEtCcTRzU0p4Y1hGRG9mRDYvVktYL2pr
azAvdTNMbXpzTENRRUZKWVdMaDM3OTZaTTJjR2x4U29uV0dZQ3hjdWpCczNidlhxMVlwM0JL
Z04zUGNDb3NuWnMyZFRVbEkyYmRwMDgrWk5qdU9hbTV1bDk3MzQ4S2MvL2FtZ29PRElrU01j
eDNFY2Qvanc0VW1USnZsMXBZS0NnZzgrK01EbGNsMjhlSEh1M0xuQ0N1Zk5tM2Y2OUdtdjE4
dXliRkpTRXQrWWtKQ3dkKzllanVOKytPR0hvcUlpb2ZPYmI3NzUvUFBQMzdoeDQ4YU5HK0xy
NlgvODR4OW56NTU5N3R5NW5wNmVreWRQOHBkRTZHRVk1dGxubitVdjB6L3p6RFBGeGNYQ1V4
VVZGUXpEYk5teXhlOExWNjVjT1hyMGFENkZYN3QyN1NPUFBMSnExYXJna2dLMTgvdHk2ZEts
akl5TTB0TFNrUFFEMVlMN1hrQ1VhV3RyKytVdmYybXoyV0pqWXdzTEM4WDNwL3Z0MzkvZnYy
N2R1b2tUSnc0ZE9uVG8wS0VUSjA3ODVKTlAvUFk4ZnZ6NHBFbVR6R2F6dytIWXVIR2pzTUlk
TzNaa1pHU1l6ZWJzN096YTJscSs4YXV2dmtwTFN6T1pUR1BHakZtM2JwM1EyZVZ5L2VZM3Z4
azJiRmh5Y3ZJZi8vaEhpOFhDdC9mMTlaV1dsam9jRG92RmtwT1RVMUZSRWRKZWkrOTdlZVdW
Vnp3ZWovRFVybDI3eG84ZkgraHJoaE1uVHBqTlp2NXUvV3ZYcnBuTlp1Ry9sa0NTQXJVTCsz
amx5cFhNek13UFAvd3dwRjBBV2dTZURzRFB0TGUzangwN050eGJtVE5uenZidDI4TzlGYUJY
Y044TEFESXNXYkxrMXExYlY2NWNtVDE3OXRLbFM4TzNvYjYrdnJLeXNxeXNMT0YyUmdCQ3hj
ZkU0ZWtBK1BMeHh4OG5KU1VOSHo3OHBaZGU2dXJxQ3QrR0dJWnhPQnk0c3hBTWhKcWFtdTd1
YnY1eGQzYzM3bnNCQUFBTjA5emNmT3JVcVo2ZW5wNmVubE9uVHJXMHRJaWZoYWNEQUlDVzhI
ZzhSNDhlZFRxZFRxZXp1YmxaL1BVN2dhY0RBSUNtd2ZWMEFBRFFEL0IwQUFEUU1BYTZsL0Zj
WStPNXhzWm9xd0FBZ01paFcwL3Y0YmdOMDZkdm1ENjloK09pclFVQUFDS0ViajM5Yng5L1hP
cHdsRG9jZjBQaGZ3Q0FVZEdKcDkrNWNHRjFSZ2J2NmFzek11NEVMcHdOQUFDYXh1MTJOemMz
Qy9jeXV0MXU4Yk5xOFhScEhlcUxGeTlPbXpZdE5qWjIyclJwZkIxUmFZdEE1YXV2OG9iT1Ir
V3JyMFo2QndBQUlDSTBOVFdkT1hPbXU3dTd1N3U3dmIyOXFhbEovS3hhUEoxSDdPbno1czBy
S1NueGVEd2xKU1h6NTgvMzIrTERlKys5UndpNWRPa1N6YmE2MjlwaysxQ3VpcVliVk5GM2d5
cjZibEJGMzAyZHFoVEFzcXhRTDZpdnI0OWxXZkd6NnZYMHBLUWtmdUticTFldjhpV3dwUzAr
dlBmZWUvZmJtTmFhLzNPL2paRU56K3A4MlQ2VXE2THBCbFZRRlJWVmhjeFdGYXBTNTFoRldK
VmluOVJxbmg0VEU4Ti9GdlgyOXBwTUpyOHRBcjAvL1hUM3M4K1d2L0VHMlo3NmYwOE9JOXRU
NzdjeHdaZTlXOGJKOXVuNVFyNFA1UmFoQ3FxaW9tcFo2Z29WcWxMbldFVlkxZi9qdUx1ZmZl
WnRiUTNWSjEwdWx3YXVwL09JUFQweE1kRW5LNWUyK01EbjZWY081dDZuK0FnbEZhbXlmU2hY
UmRNTnFxQXFLcXI0UEYxdHF0UTVWcEZXZGY5K09GeFV2WjVlVkZRa1hEM241K0tTdHZqQWV6
b0NnUkNDOTNTRUdrT3BwMnZzdmhmaDdwY2ZmL3h4NnRTcEZvdmw4Y2NmdjNEaGd0OFdINUNu
UXhWVStRVHlkUFdxVXVycFdycWVQa0NRcHlNUVBvRThYYjJoMU5PMWROL0xBRUdlRGxWUTVS
UEkwOVdyQ25tNkxNalRFUWlFWmtLcHAydnB2cGNCZ2p3ZHFxQUtxalNqeWdqM3ZRd1E1T2tJ
QkVJem9kVFREVkUvdmJ1N3U2T2o0M2UvKzkzOU51WUVPK2QrRzNQMTRNVGdTMUtSS3R2bnlz
RmMyVDZVVzRRcXFJSXFxQkl2TDE2ODJOSFJvYUIrZ0krSis2QVRUK2RCbm81QUlEUVRBOGpU
Z3p5clEwOVgzVld6VUZZRlZWQUZWVVpSQlUrWEJYazZBb0hRVE9BN1VsbVFwME1WVkVHVlps
VEIwMlZCbm81QUlEUVRpang5Ly83OXJhMnRWNjllN2UzdDlkdEJ2WjdPc3V5NGNlTmlZMk5u
enB6SmwyTU1NczhSRC9KMHFJSXFxTktNS2tXZWZ2ZnUzWFBuemgwK2ZMaW1wdWJ3NGNQbnpw
MjdlL2V1dUlONlBUMDVPWmxsV1k3aldKWmRzR0FCb1p2bmlHYWdFUWdFSXZveHNHc3ZQVDA5
VjY5ZWJXMXQzYjkvdjdoZHZaNmVsSlRFc3F6WDYyVlpkc1NJRVlSNm5pUFZmUnFIc2lxb2dp
cW9Nb29xbzExUHI2cXFHak5tekxCaHd4WXZYbXcybXduMVBFZjNLZVlmd1JKTExMR003bEx4
UEVmQlVhK25DN0FzNjNBNENPWTVnaXFvZ2lvOXFUSmFuazRJNmUvdlAzMzZkRlpXMXAvKzlD
ZUNlWTRRQ0lTZVlwQThYVFAxWHZnSmoxSlNVdjd6UC8rVHYrU0NlWTZnQ3FxZ1NqK3FqT2Jw
Q2tDZWprQWdOQk9veXlnTDhuU29naXFvMG93cTVPbXlJRTlISUJDYUNYaTZMTWpUb1FxcW9F
b3pxZ3g0M3dzOTRqa3hhR3JWWTRrbGxsaEdkNmw0VGd5MzI0MzVTSkVqUUJWVVFaWEtWQ25O
MDV1YW1zNmNPZFBkM2QzZDNkM2UzdDdVMUNSK1ZvZWVqa0FnRUJvSXBaN09zaXgvZXpjaHBL
K3ZqMlZaOGJNNjlIVFZmUnFIc2lxb2dpcW9Nb29xNU9teUlFOUhJQkNhQ2FXZTduSzVjRDNk
VHhnOVI0QXFxSUtxNktveTJuMHZWVlZWNmVucEpwTXBMUzJ0cXFxS1VNK0pnVUFnRUJvSW8v
Mk9ORDQrM3VsMDhuTmkyR3cyUWowbmh1bytqVU5aRlZSQkZWUVpSZFVBUEoySWZtcWtHVS9Q
emMxMU9wMzhuQmo1K2ZtRWVrNE1CQUtCMEVBbzlYU24wM252M2oyV1plL2V2WHYzN3QzYTJs
cnhzK3IxOUtOSGo4Ykh4ek1NRXg4ZmYvVG9VVUk5SjhhVmc3azBOZWs5Sy9ObCsxemRORTIy
RCtVV29RcXFvQXFxeEV2RmMyS2NPbldxcHFhbXM3TnovLzc5VHFmei9Qbno0bWZWNituang0
OFhycjA4K3VpamhIcE9EQVFDZ2RCQUdPMDdVcnZkTGx4N1NVaElJTlJ6WXFqdXFsa29xNElx
cUlJcW82Z3kybmVrbFpXVkRvZkRaREtOSFR0MjkrN2RoSHBPREFRQ2dkQkFHQzFQVndEeWRL
aUNLcWpTakNwNHVpekkweEVJaEdZQ25pNEw4blNvZ2lxbzBvd3FlTG9zeU5NUkNJUm1RcW1u
bzM2Ni96QjZqZ0JWVUFWVjBWV0Z1b3hCd0R4SFdHS0pwYmFXaXVjNVF2MzBhSDhhcXpOSGdD
cW9ncXJvcWtLZUxndXVweU1RQ00wRTZxZkxnandkcXFBS3FqU2pDdmU5eUlJOEhZRkFhQ2FN
Vmh0QUFjalRvUXFxb0VvenFveFdQNTBSa1ppWVNERFBFUUtCMEZNWXpkTUZEaDgrL082Nzd4
TE1jd1JWVUFWVmVsSmxXRStmUFh2MjVjdVhDZVk1UWlBUWVvcEIrbzVVWTU3ZTFOUzBZTUVD
L2pIbU9ZSXFxSUlxM2FoU1BNK1JEeHJ6OUZtelpoMC9mcHgvakhtT0VBaUVmc0tBOTcwY09I
RGdpU2VlRVA3RVBFZFFCVlZRcFI5VkJyejI4dVNUVDM3MTFWZkNuNWpuQ0lGQTZDY002T21o
Z2p3ZHFxQUtxalNqQ3I4amxRVjVPZ0tCMEV3WThIcDZxQ0JQaHlxb2dpck5xRUtlTGd2eWRB
UUNvWmxBbmg0RThad1lKOWc1OXlscTBwT0tWTmsrVnc3bTB0UzJwOWtpVkVFVlZFR1ZlS2w0
VGd4Q2lOZnJQWERnUUUxTnpmWHIxMzJlMG9tbjh5QlBSeUFRbWdtbGVUcHY2R2ZPbkxsMTYx
WmRYZDJkTzNmRXorclEwMVYzMVN5VVZVRVZWRUdWVVZRcDlmUnZ2LzFXc092TGx5ODNORFNJ
bjlXaHB5TVFDSVFHUXFtbiszajErZlBueFgvcTBOTlY5MmtjeXFxZ0NxcWd5aWlxOEIycExN
alRFUWlFWnNKb3RYYjcrdnJlZi8vOVVhTkdEUmt5aEdFWVFqMG5odW8ralVOWkZWUkJGVlFa
UlpYUlBIM0ZpaFVUSmt4b2JXM3Q3Ky9uV3lqbnhFQWdFQWdOaE5FODNlRndzQ3dyYnFHY0Uw
TjFuOGFockFxcW9BcXFqS0xLYUw4ak5abE1TNVlzR1Rac21NUGgyTHQzTDZHZUUrTStSYTE2
TExIRUVzdm9MaFhQaWFIVjcwaVRrcEpZbHVVNGptWFpFU05HRU9vNU1WVDNhYXpPSEFHcW9B
cXFvcXRxWUhsNmYzKy96MFVZSHZWNit2ejU4MW1XOVhxOUxNc21KeWNUNmpreEVBZ0VRZ014
QUUvdjdlMDlmZm8weTdKMzd0eXBxYWtSUDZWZVQ3OTA2ZElUVHp4aHNWalMwOVA1Qyt1VWMy
S283dE00bEZWQkZWUkJsVkZVS2ZYMHpzN09ob2FHbHBhV1M1Y3UxZFRVbkQ1OVd2eXNlajFk
QWNqVEVRaUVaa0twcHg4NWNzU254b3NZSFhxNjZqNk5RMWtWVkVFVlZCbEZsZEh1ZTFFQThu
UUVBcUdaZ0tmTGdqd2RxcUFLcWpTakNwNHVDL0owQkFLaG1ZQ25Cd0h6SEVFVlZFR1Z0bFFO
Wko2aklPakUwM21RcHlNUUNNMEU4blJaY0QwZHFxQUtxalNqQ3A0dUMvSjBCQUtobVlpaXAz
LysrZWNKQ1FrSkNRbi8vZC8vSFE0Umd3WHlkS2lDS3FqU2pLb0llenJIY2NKanU5M2UwdExT
MHRLU2tKQVFEaEdEQmZKMEJBS2htWWl3cDQ4Wk02YTh2THkzdDVkRXlkTVpFWHdMNWptQ0tx
aUNLdjJvaXJDbk56VTF6Wmd4SXlNalkrZk9uVnUyYkxIYjdYYTcvZlBQUHcrSENMOElWaTZB
ZVk0UUNJUitJaXJYMDUxTzUyT1BQWmFmbis4ejVWQUVZQmptNFljZnRscXRzMmZQN3Vqb0lK
am5DS3FnQ3FyMHBDckNuaTU4TDdwMTY5YWRPM2RtWkdSTW16YnR3SUVENFJBUmhHdlhyaFVY
RjArZE9wVmduaU1zc2NSU1IwdkY4eHdGSjZDbkp5UWtORGMzQzlmUWUzdDd0MnpaTW1iTW1N
SGRQQTF1dDl0aXNSRE1jd1JWVUFWVmVsSVY0VHpkNy9laTRwdGhJc1B0MjdmZmUrKzl3c0pD
Z25tT0VBaUVuaUxDbmw1ZVhoNzU3MFhGOEhlOHhNWEZ6Wm8xNit6WnN3VHpIRUVWVkVHVm5s
VGhkNlN5SUU5SElCQ2FDWGk2TE1qVG9RcXFvRW96cXVEcHNpQlBSeUFRbWdsNHVpekkwNkVL
cXFCS002cmc2VUVRejRsQlU2c2VTeXl4eERLNlM4eUpJUS95ZEtpQ0txalNqQ3JrNmJMZ2Vq
b0NnZEJNd05ObFFaNE9WVkFGVlpwUkJVK1hCWGs2QW9IUVRNRFRaVUdlRGxWUUJWV2FVV1ZN
VDMvLy9mZERuUk1EZ1VBZ05CQUc5UFNXbHBhVWxCVEIweW5ueEZEZHAzRW9xNElxcUlJcW82
Z3ltcWQ3UEo2SkV5YzJOallLbms0NUp3WUNnVUJvSUl6bTZZc1hMLzd6bi85TVJKUFlVYzZK
Y2VWZ0xrMU5lcy9LZk5rK1Z6ZE5rKzFEdVVXb2dpcW9naXJ4TXRKellrU2RJVU9HK0V3elRU
a25CZ0tCUUdnZ2pKYW5Dd2g1T3VXY0dLcTdhaGJLcXFBS3FxREtLS3JnNlpSellpQVFDSVFH
d3JDZVRnL3lkS2lDS3FqU2pDcDR1aXpJMHhFSWhHWUNuaTRMOG5Tb2dpcW8wb3dxZUxvc3lO
TVJDSVJtQXA0dUMvSjBxSUlxcU5LTUtuaDZFRERQRVpaWVlxbXRKZVk1a2dkNU9sUkJGVlJw
UmhYeWRGbHdQUjJCUUdnbTRPbXlJRStIS3FpQ0tzMm9ncWZMZ2p3ZGdVQm9KdURwc2lCUGh5
cW9naXJOcURLYXAxZFVWR1JrWkZnc2xyeTh2SWFHQm9KNWpoQUloSjdDYUo2K1lNR0NqbzRP
dDl1OWMrZk94TVJFZ25tT29BcXFvRXBQcW96bTZUd2N4KzNldlRzM041ZGduaU1FQXFHbk1L
Q244N05oMk8zMkkwZU9FTXh6QkZWUUJWVTZVbVc0ZVk1NCtHc3Y0OGFOSTVqbkNJRkE2Q21N
bHFjdlhyejQrdlhyYnJkNzE2NWRJMGVPSkpqbkNLcWdDcXIwcE1wb25sNWVYajVxMUtqWTJO
akpreWYvOWE5L0paam5DSUZBNkNtTTV1a0tRSjRPVlZBRlZacFJCVStYQlhrNkFvSFFUTURU
WlVHZURsVlFCVldhVVFWUGx3VjVPZ0tCMEV6QTA0TWduaFBqQkR2blBrVk5lbEtSS3R2bnlz
RmNtdHIyTkZ1RUtxaUNLcWdTTHpFbmhqekkweEVJaEdZQ2Vib3N1SjRPVlZBRlZacFJCVStY
QlhrNkFvSFFUTURUWlVHZURsVlFCVldhVVFWUGx3VjVPZ0tCMEV3WXpkTXJLeXV6c3JJVXpJ
bWh1ay9qVUZZRlZWQUZWVVpSWlRSUGYvSEZGMXRiV3owZXorYk5tL2txakpSellpQVFDSVFH
d21pZUx0RFIwZUZ3T0FqMW5CaXErelFPWlZWUUJWVlFaUlJWeHZUMEsxZXVGQlFVZlAzMTE0
UjZUb3o3RkxYcXNjUVNTeXlqdXpUaW5Cak56YzBPaDJQYnRtMzhuNVJ6WXFqdTAxaWRPUUpV
UVJWVVJWZVYwZkwwc3JLeTVPVGt1cm82b1lWeVRnd0VBb0hRUUJqTjA1a0g2ZXJxb3B3VFEz
V2Z4cUdzQ3FxZ0NxcU1vc3BvbnE0QTVPa0lCRUl6QVUrWEJYazZWRUVWVkdsR0ZUeGRGdVRw
Q0FSQ013RlBsd1Y1T2xSQkZWUnBSaFU4WFJiazZRZ0VRak1CVHc4QzVqbUNLcWlDS20ycHdq
eEg4aUJQUnlBUW1nbms2YkxnZWpwVVFSVlVhVVlWUEYwVzVPa0lCRUl6QVUrWEJYazZWRUVW
VkdsR0ZUeGRGdVRwQ0FSQ00yRTBUeGNxdlFndG1PY0lxcUFLcXZTanltaWV6aVAyZE14emhF
QWc5QlB3ZE14ekJGVlFCVlg2VVFWUHh6eEhXR0tKcFc2V1Jwem5pRHpvNlpqbkNLcWdDcXIw
b3dwNU91WTVRaUFRK2dtamViclBQRWVFRU14ekJGVlFCVlg2VVdVMFQxY0E4blFFQXFHWmdL
ZkxnandkcXFBS3FqU2pDcDR1Qy9KMEJBS2htWUNueTRJOEhhcWdDcW8wb3dxZUhnVHhuQmcw
dGVxeHhOSVF5OVVUNzVkR1c0UEtsOUViSDh5SklRL3lkS2lDcWdlaWxHRVc3Vk9kS2pXTkZi
Tm9uekJLa1ZhRlBGMFdYRTlISU1UQkxOckhlOWI5MHVpTFVXZndReVQyOU1nRlBGMFdtVHo5
d1NOYkRUbUNOS0JLTTZvQ3VPUmdxbG85MExGaUZ1MWoyaGhtMFQ1U2pIY3dRSjcrejRpQ0tu
aTZMTUh5OUZMa0xJakJqSDhjUytIZXhBRFh3RWUwOGxBdGhOVFRJeGZ3ZEZtQzVPbi9TRmhF
eDdjYWNnUnBRSlZXVkFVeXlrRlVsVnV5ZDBDckt2M1pzSDVWa1NxYnpTai83MEd5WmsyOGd6
NURKT3dDOHZUSVFUVW5oczlSVy9xUFlOb2VDS0ZkL3lFWkNnMkV6enZZRnVEWlFWbS9zaWdW
SlhlRHVGckpKbVJXRzNTN1ArY3hnNXF0KzY2a1ZQSXZTemhHSXp6eHdCRDUvY2ZMNzc0TTFu
SCtUMCt2Zk8yMTJ6LytPRmcrcVNWUHA1b1RvNVM1c2pwWEdEWGZ3MXIwL3BIaTFQdWxvbTlJ
U24vK0JseUkzSks5NGovRm5jVTlBM1dqWE5YUGY3WXh2M3J0VStrbUtGWDUzV0x3bzhwM3JF
VGJFaHJ2bHpMOFdQMTg5b3BlSXZTL3NqcVhYaFcvc3o3cjhhdktSNTY0cDZBcVVKOUFZeVU5
Uy8rUlQ0VTBWdjlNRG53MktsVVZmRldCZ21samNnL21CczgvK0IwTXNnWnhuaTZiemRDb3Vs
L0s1QjU4b0p0NEtHUlVTVDRWb3A2blM1MkI4aDBNZUZ3OWVLcnlRK3IzdEdJVzdSTTh2ZFRo
V0QxaHd0OCsvcmpINHhtNFQyckowMm5teFBEdjRBaUVUNGl2eGJVRi91eEhoUFV0K09lbis4
OS9pdCtVSUs5cUV4bWwzNWZUdktIUmZ0UEZuczdIeHYvMXY3N2Z2MytBUHFrbFQvYzdKMFo3
ZS9zNzc3eFRzblRwVzg4Ly83OW56SGo3bFZmKzdkLys3ZTFYWG5ubm5YZUNMOTk4K21uWlBy
OS80UVhaUHBSYmhDcW9naXFvRWk5NTExcjJ1OS85N09relpueS9iOThBZlZKTG5rNHpKd1lo
NVB6NTh6UnI4eHc4S051SGNsVTAzYUNLdmh0VTBYZURLdnB1NmxSRi9ubnQ1ZUJmL21LNGF5
ODBjMklRUXJ4ZUw4M2E3bTdlTE51SGNsVTAzYUNLdmh0VTBYZURLdnB1NmxSRkNLbDg5ZFhi
blowMFBXblFrcWZUeklsQnY3YmU2OWNIVDlxZ0FWWDBRQlU5VUVXUE9sWFJveVZQbDZWMXNH
ZHJCUUFBYmFFclR3Y0FBSU1EVDFkSVpXVmxWbGFXeFdMSnk4dHJhR2dnb2dsVVZhVksycUlH
VlJVVkZSa1pHV3BUeGZQKysrOUg4VTBNY2x5cFNsVmZYOS83Nzc4L2F0U29JVU9HUkV0WThM
RktURXhVaWFxcXFxcjA5SFNUeVpTV2xsWlZWUlZ1QWZCMGhiejQ0b3V0cmEwZWoyZno1czNp
bTNDaTYrbFNWWUYwUmxmVmdnVUxPam82M0c3M3pwMDdvM1h1K1IyWmxwYVdsSlNVS0w2SlVs
WFJQYUo0cEtwV3JGZ3hZY0tFMXRiVy92NSs5YWdTT0h6NDhMdnZ2cXNTVmZIeDhVNm5rK000
bG1WdE5sdTRCY0RUQjBwSFI0ZkQ0UkQrVk1NWlNDU3EvTFpFSGg4TkhNZnQzcjA3TnpjM2lw
S0lTSlhINDVrNGNXSmpZNk1hM2tSQkZjTXdEei84c05WcW5UMTdka2RIaDBwVU9Sd09sbVdq
SzBaQWVtelBuajM3OHVYTDBkTERJNmpLemMxMU9wMWVyNWRsMmZ6OC9IQnZGNTQrSUs1Y3VW
SlFVUEQxMTE4TExXcXdBNmtxYVV2VVZmSC9JTnZ0OWlOSGpxaEUxZUxGaS8vODV6OFRGYnlK
MHZmcjJyVnJ4Y1hGVTZkT1ZZa3FrOG0wWk1tU1ljT0dPUnlPdlh2M3FrUVZUMU5UMDRJRkM2
SW9pVHlvNnVqUm8vSHg4UXpEeE1mSEh6MTZOTnliaHFjcnA3bTUyZUZ3Yk51MlRkd1lkVHVR
cXZLck0rcXFDQ0g4dFpkeDQ4YXBSQlYvYVRqcUY2OER2Vjl1dDl0aXNVUkZFcEdvU2twS1ls
bVd2NTR3WXNRSWxhamltVFZyMXZIang2TWxpVWhValI4L1hyajI4dWlqajRaNzYvQjBoWlNW
bFNVbko5ZlYxZm0wUjlmVHBhb0M2WXl1cXNXTEYxKy9mdDN0ZHUvYXRXdmt5SkVxVVNVUXhU
Y3hrS3JidDIrLzk5NTdoWVdGMFJEbFI5WDgrZk5abHVXdkp5UW5KNnRFRlNIa3dJRURUenp4
UkZUMDhFaFYyZTEyNGRwTFFrSkN1QVhBMHhYQ1BFaFhWNWRQaXpwVmRYVjFxVUZWZVhuNXFG
R2pZbU5qSjArZS9OZS8valh5a3Z5cUVqOFZGVWwrVmZFUDR1TGlaczJhZGZic1daV291blRw
MGhOUFBHR3hXTkxUMDZOMVlkM3ZPL2prazA5KzlkVlhVZEVUU0ZWbFphWEQ0VENaVEdQSGp0
MjllM2U0QmNEVEFRQkFQOERUQVFCQVA4RFRBUUJBUDhEVEFRQkFQOERUQVFCQVA4RFRBUUJB
UDhEVEFRQkFQOERUZ1VHSjRrM29BSVFQZUxxVzhIcTlTNWN1SFRGaXhFTVBQYlJ5NWNwb3k5
RUdETU9zV2JPR0VQTFJSeC9CeHlscGJXMWxHQWFUekZDaXFtTU1ucTRsbGkxYjl2enp6MSsr
ZlBuMjdkdHZ2dmxtdE9Wb0E0WmhNak16Ky92N0oweVlFUFh6VFN1c1hyMDZKaVptOWVyVjBS
YWlEVlIxak1IVHRjVG8wYU45WmlJWEgwRENZNFpobGkxYlpyVmFoY0tlVVQvT29nakRNTk9u
VDEreFlzV01HVFBFUStRemRHdlhyazFJU0xEYjdadi9PY1d3a1FkdDFxeFpyNzMyMnF4WnMv
Zy84L1B6K2VrZDZ1dnJKMDJhUkFocGFXbkp6TXlNaTRzcktTa1JqMnEwQkVjWDZUSEdIMkJt
czFtWUdlT05OOTc0N1c5L1N3aFpzR0RCb2tXTGhCY091aGg0dXBZd21VeTl2YjNpbGtDZXZt
Yk5HcGZMOWZycnIwZFVueXBoR0diNzl1MHhNVEU3ZHV6d08xejg0dzBiTnJqZDdwcWFtbWpO
SEtJZVhDN1g4T0hETDErK1BIejRjSmZMUlFoWnQyN2QvUG56Q1NIejVzMWJ2MzQ5SVNRM04v
ZlRUejkxdVZ5Yk4yODJySlVMQkRyR2VudDdtNXFhVWxKU0NDRTlQVDFQUGZYVXYvLzd2ei8x
MUZNOVBUM2hFd05QMXhKQjh2U2VuaDZ4cDNkM2QwZGFuRm9KNHVQaXg4SnBCb2VxcnE0V1Ns
QlZWMWNUUW03ZXZHbXoyYzZmUDIrejJXN2R1a1VJTVp2TmJyZWJFT0oydXpGaTB1TnF3NFlO
RG9jakppYUdZWmdoUTRid1Q3VzB0REFNMDlMU0VsWXg4SFF0VVZ4Yy9Qenp6MSs1Y3VYT25U
dkZ4Y1dFa0tTa3BMcTZPby9IczNIalJ2d0w3QmRLVC9mNzJKZ3NXclNJL3daKzVjcVZ3bFdD
b3FLaXh4NTdiTjY4ZWZ5ZkV5ZE8zTFJwazl2dC9xLy8raStNbVBUNGlZdUxxNm1wY2J2ZExN
dnlMVzYzT3k4dmIvYnMyWGw1ZVI2UEozeGk0T2xhZ3VPNC8vaVAvMGhLU2hMdWV5a3JLN1Ba
YkFrSkNldlhydy9pNlVZKzY2VG5tMDgxVkw5OWlJRUhMVDA5L2VUSms0U1FreWRQcHFlbjg0
MzE5ZlVNdzlUWDEvTi9OamMzWjJSa3hNWEZ2ZjMyMnpFeE1YeWpZVWRNZXZ4ODhNRUhOcHZO
WnJPdFdyV0tiMW00Y09ITEw3OU1DSG5wcFpkZWZmVlY2UXNIQzNnNkFFQWhmWDE5WDMzMTFZ
UUpFNkl0QlB3TVBCMEFvQVQrU25GNmVucTBaalVCZm9HbkF3Q0Fmb0NuQXdDQWZvQ25Bd0NB
ZmdqTjA1a0FES0lndzM1MVBsaDBkblpPblRvMU5qWjI2dFNwUC83NG85OCtWVlZWNmVucEpw
TXBQVDE5ejU0OWhCQ080NVlzV1pLY25Eem9iNmdtb0JtMGJkdTJqUnMzem1LeFRKbzBxYkd4
a1R4NE9pUW1Ka1pXY3BSUmRwaEp4OUJvbEphV0JqbS9wSTVhVlZXVm5aMGRHeHRiVUZCdzRN
QUJtazJFN3VsdGtvQ25xNG01YytlV2xKUjRQSjZTa3BLaW9pSy9mV3cyVzIxdExjZHhUcWZU
WnJNUlFvcUxpL1B6ODl2YTJ2cjcrNFpJZDJ3QUFCa2ZTVVJCVkNNcVZ4M1FETnJjdVhOUG5q
enA4WGkyYmR2bTgxdlRSWXNXTFYrK1BBSTYxWU95d3l6SUdCcUJFeWRPOEdsVDhHN2lEa1ZG
UlcxdGJSekg3ZG16WitUSWtUUmJDWmVucjF1M3p1RndtRXdtNFdObnlwUXAvTTJ0RlJVVjA2
Wk44OXRIbXZ1M3Q3Yy8vdmpqRm90bC9QangvTWNVd3pDVEowK2VOMjllV2xxYThBc0lJSkNZ
bUhqMTZsVkN5TldyVndPZE5ubDVlZlgxOVY2dnQ2NnVqaS9mTVdyVXFHKy8vVGFTT2xVRnph
QUpYTGh3d1dLeENML1V2WDM3dHQxdXYzVHBVcmhGcWdwbGg1bUF6eGdhQVk3amNuSnl2dmpp
aTVBOG5jZnRkbGRXVmxMZU14b3VUeDgrZkhocGFXbGJXNXZYNitWYmR1ell3VnR3UVVIQjEx
OS83YmVQZEg4S0NncSsvUEpManVOcWEydkhqeC9QZHhBS2dRNGZQcHhtSncxRlRFeE1YMS9m
OU9uVGUzdDdUU2FUM3o3TnpjMTJ1NTFoR0x2ZHp2OVMyV1F5bFpTVVdLM1cxTlRVWGJ0MlJW
Wnk5S0VaTko0Yk4yNFVGaGFLaTJLdVdyV0sveTJKb1ZCMm1QRkl4OUFJdlBYV1c3Lys5YThK
eGFVSW53N0N4YjFqeDQ3UmJDaGNudjdOTjk4ODg4d3o0OGVQZitpaGgvN3doejhRUW5wNmVz
YU5HN2RyMXk2K0tLWGZQdEw5TVp2TlF1Yk9sMDBRLy9BUEYycWtKQ1ltWHJ0MmpRUk5vREl5
TXB4T0o4ZHhMTXRtWm1ZU1F1eDJPOHV5WHErM29hSEJhSmVHQ2QyZ0VVS09IVHVXbHBaV1Vs
TFMxOWZIdC9UMDlLU21wb2E3Z29jS1VYYVlFWDlqYUJENDJpODAzMEZLbjNXNVhEdDI3TWpK
eWFIWlVIaXZwL2YxOVRVMk5scXRWdjdQbFN0WFdxMVdvWmFwM3o2eHNiRWRIUjNDczRXRmhk
WFYxZUx5Q1BEMDRMend3Z3ZMbHkvbk9HNzU4dVY4WGlBbFBqN2U2WFI2dmQ3YTJscitRdWVj
T1hNRVR6ZmdoVTZhUVNzdkx5OHNMRHgwNkpDNFViaVFhRFNVSFdaK3g5Qm9oSlNuTDF5NHNM
T3prK080eXNyS2hJUUVtdldIeTlQNXo2S1ltSml4WThkKyt1bW5mT05QUC8yVW1KaklsM01M
MUdmcDBxVnhjWEhDT3MrY09UTno1a3krUmVybThIUXBIUjBkVTZaTXNWZ3MvL0l2LzlMWjJj
azMrZ3hVUlVVRlh6UnU3Tml4bFpXVmhKQno1ODVObVRMRmJEWTdISTZxcXFvbzZJNHFOSVBH
UEVoWFZ4Y2haTXFVS1FhOFZFV1VIbVoreDlCb2lFY3ArREZHQ05tNmRXdGFXcHJaYk03SnlY
RTZuVFRyajl5OWpIMTlmWjk4OHNuU3BVdHBPZ01BQUZCQTVINXp4REJNZm40Ky8xMDVBQUNB
Y0lEZmtRSUFnSDZBcHdNQWdINkFwd01BZ0g1UVhiMFhNRUJvQ25GSTN6aURGK0tnR1RScEh5
TVh5VkYybUJsNXhPamRVbHdUSmlMMVhoYnQ4dzJEdlRjcWg2WVFCNC80alRONElRN0tlaTgr
Zll4Y0pFZlpZV2JrRWVPUmRVdWZtakFScWZkQzUrblNlekNsMVYya3RWejR6c3VXTGJOYXJm
bjUrVFE3QUh5Z0wxM2k5NDB6WUNFT1FqZG8wajVHTHBLajdEQXo4b2p4QlBmMFFEVmh3bHp2
UmFtblM2dTdTR3U1OEozWHJGbmpjcmxlZi8xMW1oMEFQdENYTHBHK2NjWXN4RUhvQmszYXg4
aEZjcFFkWmtZZU1aN2dudTYzSmd5ZkJJZXoza3VJbnQ3VDA4TS9sbFoza2RaeTRWOW90Q1J4
Y0tFc1hVSWtoNWRoQzNFUXVrR1Q5akZ5a1J4bGg1bVJSNHdudUtjSHFna1Q1bm92ZEo2ZWxK
UlVWMWZuOFhnMmJ0d283aUN1N2lLdDVVTHdjLzhCUTFPSWcwYzgxQVl2eEVFemFOSStSaTZT
byt3d00vS0k4VkQ2bTlBdEl2VmU2RHk5ckt6TVpyTWxKQ1NzWDcrZUVkVkdGMWQza2RaeW9k
OW5FQWdGcFV1a0xVWXJ4RUV6YU5JK1JpNlNvK3d3TS9LSVNVZURCTFk3b1YzVjlWNEFBQUNF
Ry96bUNBQUE5QU04SFFBQTlBTThIUUFBOUVPa1BSMFgzd0VBSUh6Z08xSzlFVkloRG9aaCtO
dUVhVjZsWTVSVkx6SHlvSVY2bVBFdFZWVlY2ZW5wSnBNcFBUMTl6NTQ5RWRRYmZXamNVdHBI
ZXFyS0VyS24zeS8xRFhpNnFxQXZ4RUVJV2JSbzBmTGx5ME45bGY1UVhDVEhzSU5Hcys5U1o3
RFpiTFcxdFJ6SE9aMU9mb1pTbzBIamxuNzdDS2VxTE9IeWRJWmgxcTVkbTVDUVlMZmJoVW1s
ZlQ2Q2poOC9QbW5TSkw0Q0ROL2l0d0lNQ0FuNlFoeTNiOSsyMisyWExsMEs2Vlc2UkZuMUVp
TVBHczIrTXd4anM5bXNWdXZUVHovTlR4eWZsNWRYWDEvdjlYcnI2dW9tVFpvVVNjRXFRWm1u
aTA5VldjTG82UnMyYkhDNzNUVTFOZUszWE53NU56ZDMvZnIxSE1jSkxYNHJ3SUNRb0MvRXNX
clZxcGRmZmpuVVYra1NaZFZMakR4bzlQdCsvZnIxNHVMaXFWT25Fa0thbTV2dGRqdkRNSGE3
dmFXbEpWSmlWWVF5VHhlZnFyS0UwZE43ZW5xa0VzV1B6V2F6eStVU3Y4cHZCUmdRRXBTRk9I
cDZlbEpUVTRYemlyNThoeTVSVnIzRXlJTVcwcjU3UEI2THhVSUl5Y2pJY0RxZEhNZXhMSnVa
bVJrQm5XcERnYWY3bktxeWhOSFRaUjlQbkRoeC9mcjFRcGxHRXFBQ0RBZ0p5a0ljRlJVVjA2
Wk5DL1ZWZWtWWjlSSWpEeHI5dnQrN2QyL0ZpaFdGaFlXRWtQajRlS2ZUNmZWNmEydHJjVDJk
c28vUHFTcEw1RHo5d1R0bEdFTElkOTk5bDVlWHg1Y2k0M3Y2clFBRFFvS21FQWNoWk1xVUtl
SmlwMzVmWlJ5VVZTOHg4cURSajlqUW9VTm56cHg1OXV4WlFraEZSWVhENGVDTFBsVldWa1pC
ZC9TUUhqK0U0aGdqa2xOVkZ0ekxDQUFBK2dHL0l3VUFBUDBBVHdjQUFQMEFUd2NBQVAwUVhr
OFBkS2tkMStJQkFDQWNST2M3MGtCZis0TGdTQWU4cXFySzRYRHd0eCtjTzNmT2J4OHBWVlZW
MmRuWnNiR3hCUVVGL085MXhlK203aWVLNURodXlaSWx5Y25Kd2tEUjFDR1JIdkI2cmZmaTl6
RHpHWitCSDJiaDNvdElRbk5pYnR1MmJkeTRjUmFMWmRLa1NZMk5qWDdYbyt6STlDSDBleG5i
ZkFPZUhtSEVnNWFZbU5qUTBPRDFlbG1XZmU2NTUvejJrVkpVVk5UVzFzWngzSjQ5ZTBhT0hD
bCtpcjZzaEhZcExpN096ODl2YTJ2cjcrL25XMmpxa0VpSFZOLzFYc1Q3RzJoOFFqM005SDIr
Qno4eDU4NmRlL0xrU1kvSHMyM2J0a0MvMGxKMlpQb1FSay8zK2VCcWJtN096TXlNaTRzckxp
NE81T21vOTBLRHo2R3piOTgrL3RBUlQwRkxjL0s0M2U3S3lzb0pFeVlJTFNHVmxkQXVvMGFO
K3ZiYmI4VXROSFZJR0VuMUVuM1hleEVmUW9IR0o5VERURHFHZW9MbXhDU0VYTGh3d1dLeGRI
ZDNTOWVnN01qMElieDV1dmlwN096czh2Snl0OXY5MldlZkJmSjAxSHVoUVR4b0ZSVVZqenp5
eUxCaHc5NSsrMjF4MlEzWmswMjR6SExzMkRHaE1hU3lFdHJGWkRLVmxKUllyZGJVMUZUKzF4
ejBkVWpFMVV2MFhlL0ZKeUh6T3o3S0RqUHhHT29KbWhQenhvMGJoWVdGYjc3NXB0ODFET1RJ
RklpY3A1dk5acmZiVFFoeHVWeUJQQjMxWG1qd08rQ05qWTJqUjQ4TzNzY0hsOHUxWThlT25K
d2MvczlReTBwb0Y3dmR6cktzMSt0dGFHamd2endJcVE2SlVMMUUzL1ZleElkUW9QRlJjSmp4
Q0dPb0oyUlB6R1BIanFXbHBaV1VsUFQxOWZsZHd3Q1BUSjdJZVhwT1RnNmZwNWVWbFFudEtT
a3A0Zzl3MUh1aHdXZkErL3Y3Mjl2YmMzTnppNHVMQS9YeFllSENoWjJkblJ6SFZWWldDdjhZ
aGxwV1Fydk1tVE5IT0hONEw2YXZReUt1WHFMdmVpL2lReWpRK0NnNHpNaURZNmduZ3ArWTVl
WGxoWVdGaHc0ZENyS0dnUnlaQXVIeWRPWkJDQ0dIRHgvT3lNaUlpNHRidG15WjhKSk5telpa
clZiaFQ5UjdDWTUwVlBrSHljbkppeGN2NXFzV1Mvc1F5ZEcyZGV2V3RMUTBzOW1jazVQamRE
cjV4bERMU21pWGMrZk9UWmt5eFd3Mk94eU9xcW9xRXFBT2ljK2c4ZU1wcmw2aTEzb3Ywa05J
T2o3S0RqUHBHT29EQlNkbVYxY1hrWXdZNVpFWkhOUjdBUUFBL1lEZmtRSUFnSDZBcHdNQWdI
NkFwd01BZ0g2SVRyMlhhSzBIQUFEMGpTYS9JNFhGQjRHbUNJbTBqOEcvN2xZMmFIcXQ5MElE
emI0cnEzbWlENElVWWdweWxnWHFVRnBhU245dWh1enBoY3hXbjRDbnF3cWFJaVNCK2hoMllK
VU5tcjdydlFTSFp0K1YxVHpSQjlKOXB6KzVmSHFlT0hHQ3IrcEYrZkl3ZXJyUEI4NmhRNGV5
c3JMTVpuTldWaFovNDczRDRUaC8vandoNUljZmZuQTRITUpMekdaelhsNWVRME9EMy9YZ0hz
cmcwQlFoQ2RUSHNFT3FiTkQwWGU4bE9KUWpwcURtaVQ2UTdqdERYZXRHZkJweUhKZVRrL1BG
RjErb3d0Tjl4R1ZtWm03WnNvWC9IV2xXVmhZaFpPSENoWnMyYldJWVpzdVdMYSsrK3FyUXM3
ZTN0Nm1wS1NVbHhlOTZwSDhDTVRSRlNBTDFNZXpBS2hzMGZkZDdDUTdOdml1cmVhSVBBdTA3
VGEwYjhXbjQxbHR2OFQ5UlZxT25tMHdtb2Q2TDJXd21oR3pidHUyWlo1NlpQSG55bkRsenZ2
amlDMExJaGcwYitCOU5NUS9XZTRHbjAwTlRoQ1JRSDhNT3JMSkIwM2U5bCtDRXRPOGgxVHpS
R1Q2Rm1BaEZyUnZ4YWNpYllVaFhKcUtacDErOGVISFlzR0VmZmZTUjFXcmw2N3ZHeGNYVjFO
UzQzVzZXWlgydXQ0aFhHeHNicTc5Q25ZTUZUUkdTUUgwTTYrbktCazNmOVY2Q1E3bnZDbXFl
NkFhL2haaG9hdDM0UFEyam42ZExiNHhwYW1yS3pNdzBtVXlabVpuQ201cVJrZkhqano4S0pi
dy8rT0FEbTgxbXM5bFdyVnJGaU1vbStIeE1MVjI2bEs4SlE3bVRoc0p2RVJLZnNaTDI4VHZP
eGtIWm9PbTEzZ3NOTkNQR0gwdXlOVTkwU2FCOTk2bDE0M2ZFL0o2R1lmUjB2MUJ1REFBQVFG
akI3MGdCQUVBL3dOTUJBRUEvd05NQkFFQS9hS1BlQ3dBQUFCcndIYW5lUU9rU0JXRFFRZ1Vq
RmlvUks4UVVzcWR2WmJiNkJEeGRWYUIwaVFJd2FLR0NFUXVWaUJWaUNxT24rNzNGY3RteVpW
YXJOVDgvbnhCeStQRGhDUk1tK014UUNnWUlTcGNvQUlNV0toaXhVSWxZSWFidzV1bFNUMSt6
Wm8zTDVYcjk5ZGNKSWRuWjJlWGw1VzYzKzdQUFBvT25EeFlvWGFJQURGcW9ZTVJDSldLRm1D
THQ2ZUpLYkdheldhZ0FBMDhmTEZDNlJBRVl0RkRCaUlWS3hBb3hSZHJUeFg5bVpXWHhlWHBa
V1JrOGZiQkE2UklGWU5CQ0JTTVdLaEVyeEJRdVQvZDdZNHhQejZhbXBrY2ZmVFF1THE2a3BB
U2VQbGlnZElrQ01HaWhnaEVMbFlnVllsTEx2WXp3ZEFBQUdEaHErUjBwUEIwQUFBYU9Xandk
QUFEQXdJR25Bd0NBZm9peXAyL2F0R240OE9HeUYxNXdaUVlBQUdpSThuZWtLU2twSjA2YzhO
bUU0clVCUWxjZ29xcXFLanM3T3pZMnRxQ2c0TUNCQTN5THcrSGd2M0EvZCs1Y3BNU3FCZm82
SktXbHBlTDd1QWJ4TmdGdFFiUGpmdTk4RTBoTVRJeUlVclhBY2R5U0pVdVNrNU9EakZ0VlZW
VjZlcnJKWkVwUFQ5K3padzlSZEdLRzdPbHQ5MzFqSUFlMGVDSnBZUk9LMXdZRWdnOWpVVkZS
VzFzYngzRjc5dXdaT1hJa0lTUXhNYkdob2NIcjliSXMrOXh6ejBWS3BscWdyRU55NHNRSi9w
emsvOFN4S3V2cGdaNWF0R2pSOHVYTHc2Qkl2UlFYRitmbjU3ZTF0ZlgzOXdmcVk3UFphbXRy
T1k1ek9wMDJtNDBvT2pIRDVlbnIxcTF6T0J3bWswbjRVRHAwNkZCV1ZwYlpiTTdLeXVMbkl3
MytNUzdlcU04bUdOU05rWU5tSE54dWQyVmxKVDhaYkdKaTRyNTkrL2hESnlFaElmd0MxUVZO
TFE2TzQzSnljcjc0NGd2eDRXcXoyYXhXNjlOUFAyM01TYzlsUGQzditOeStmZHR1dC9QVHlo
dUhVYU5HZmZ2dHQ4SDc1T1hsMWRmWGU3M2V1cnE2U1pNbUVVVW5acmc4ZmZqdzRhV2xwVzF0
YlY2dmwyL0p6TXpjc21VTC82dlJyS3dzWVlYU1RmamRycytmcUJzVEhObHhFUDcvUFhic0dD
R2tvcUxpa1VjZUdUWnMyTnR2djIyMFFoeUVyaGJIVzIrOXhmKzB6MmRzcjErL1hseGNQSFhx
MUVnSVZSazBwNXQwZkZhdFd2WHl5eStIVTVjYU1abE1KU1VsVnFzMU5UVjExNjVkZnZzME56
ZmI3WGFHWWV4MmUwdExDMUYwWW9iTDA3LzU1cHRubm5sbS9QanhEejMwMEIvKzhBZCtsNFRx
TG1heldWaWhkQk4rdCt2ekorckdCSWRtSEZ3dTE0NGRPM0p5Y3NTTmpZMk5vMGVQRHBzdWxV
SlRpeU1tSmliUUJYU1B4Mk94V0NLZ1UyMVFubTdpOGVucDZVbE5UZVVOeTFEWTdYYVdaYjFl
YjBORFE2RHZFakl5TXB4T0o4ZHhMTXRtWm1hS242SS9NY043UGIydnI2K3hzZEZxdFJMcVBE
MDJObGI2YjZ6VTA4Vi9vbTZNbE9EanNIRGh3czdPVG83aktpc3JoWC9vK3Z2NzI5dmJjM056
aTR1TEk2SlJSWVJVaDhSbmJPL2R1N2RpeFlyQ3dzSXc2bE1yTktlYnovaFVWRlJNbXpZdHZM
SlV5Wnc1Y3dSUEQ1UTN4TWZITzUxT3I5ZGJXMXZMWDA4bm9aK1k0ZkowUHBlSmlZa1pPM2Jz
cDU5K1NnaHBhbXJLek13MG1VeVptWm44OVhUaTc1aFl1blJwWEZ5YzN5dnNnYjZiUXQwWU1U
UWp0blhyMXJTME5MUFpuSk9UNDNRNmhWY2xKeWN2WHJ5WTQ3Z282STRxTkxVNEJId096cUZE
aDg2Y09mUHMyYk1SMHFvT2FBNHp2K016WmNxVVFGY2U5TTI1YytlbVRKbGlOcHNkRGtkVlZS
WGY2RE5pRlJVVkRvZUR0ODNLeWtxaTZNUlVTNzJYd1VKVllnQUFJTUxvN1hlazhIUUFnSkhS
bTZjREFJQ1JnYWNEQUlCK1VMV25xL0I2UFFBQXFKbUlma2VxekozaDZTRkJVN3BFL043eHQ4
clNGS1BRTWNycXZVaXJjeGdIbW5OLzI3WnQ0OGFOczFnc2t5Wk5hbXhzSkE4ZWVKRlNHaDJr
K3k1dGtSSm9jTVJIblN3aGUvcDlTY0RUVlFWbDZSSWVvZXdHVFRFS0hhT3Mzb3UwT29mUkNI
NXV6cDA3OStUSmt4NlBaOXUyYmZ3ZDJjWTVsNlg3TG0wSmhNOG8rUngxc29UTDA2WDFYcVFm
MGUzdDdZOC8vcmpGWWhrL2ZqeGZIWkIvMW13MjUrWGxOVFEwK04xREVCeWEwaVU4NHJJYk5N
VW9kSXl5ZWkvUzZoeEdnL0xjdkhEaGdzVmk2ZTd1Wm94WElVZlk5eUF0UG9oSFZYclV5Ukl1
VDVmV2V5R1NJNkNnb09ETEw3L2tPSzYydG5iOCtQRkNlMjl2YjFOVFUwcEtpdDlYZ2VEUWxD
N2hFWmZkb0NsR29XT1UxWHVSVnVjd0dqVG41bzBiTndvTEM5OTg4MDJoeFRnVmNxVDdMbTJS
SWg3VlFGV0dnaEF1VDVmV2U1SEtNcHZOUXViT0Y5M2RzR0VEL3pNcW9TV2tuUUdFcm5RSmta
VGRvQ2xHb1dPVTFYc0pVcDNESU1pZW04ZU9IVXRMU3lzcEtlbnI2eE8zRzZGQ2puVGZBNDJH
RCtKUkRWSmxLQkRodlo0dXJ2ZENKTFZjQ2dzTHE2dXJQUjZQMEJJWEYxZFRVK04ydTFtV0ZW
YWJrcExDMXc0RU5GQ1dMdkVwdTBGVGpFTEhLS3YzNHJjNmg2RUk3akxsNWVXRmhZVkNJUkFC
STFUSWtlNTdvTkdRNG5kVW81K244NThxNG5vdlJGTEw1Y3laTXpObnp1UmIrTVlQUHZqQVpy
UFpiTFpWcTFZSjNUWnQybVMxV3BHdFUwSlp1c1NuN0liZlloVEdRVm05RjJsMUR1UEFQSWpR
R0tSUFYxY1gvOEFJRlhJQzdidTRoY2lObU05VGxKdldXNzBYQUFBd01xcit6UkVBQUlDUWdL
Y0RBSUIrZ0tjREFJQitnS2NEb0dyd2ZSVUlDWGc2QUg1UTdLU0Ric0ZCVmpnbzIySVlaczJh
TllTUWp6NzZhQ0FyWkJobTllclZBeGNtcll0Q1UxZEhlcjhHVFFtanFxcXE3T3pzMk5qWWdv
SUM4VS9aZzkvNklhME9SRlBMUmRwSHVoN3BwaFhjaHdKUEI4QVBodkwwek16TS92NytDUk1t
RE5EVE16SXk3dDI3TjBCaDByb285SFYxeE51bEtXRlVWRlRVMXRiR2NkeWVQWHRHamh4SnFW
eGFIWWltbG92ZkNqQitxd3hKTmNEVEFSZ29mczhyNXNGaVJEUkZqWUt2V1hoVmNYRnhYRnpj
aEFrVG1wdWJDU0hOemMyWm1abHhjWEhGeGNYaU5ZdTNMdDJXdElDUzN4MlI2cGsrZmZxS0ZT
dG16SmpCZHo1MDZGQldWcGJaYk03S3l1Si9JOE13ek5xMWF4TVNFdXgyKytiTm13T3RwN1Mw
OU1NUFB4UTJLbDFQZm40K0w3Nit2bDYyUW81UUY0VytybzU0Wi8yV01QSTdHbTYzdTdLeWNz
S0VDWHdIYVVVYW4xY0ZxUTRrVzh0RjNDZlFldURwQUF3K2djNGljVEVpbXFKR3dkY3MrSFZa
V1puYjdTNHZMNTg0Y1NJaEpEczd1N3k4M08xMmYvYlpaK0wrd1VzaEJTcWdKS3RuKy9idE1U
RXhPM2JzNEZlWW1abTVaY3NXdDl0ZFZsYVdsWlhGOTltd1lZUGI3YTZwcVFtVWh6SU0wOVhW
Tlc3Y3VOdTNid2RhejdwMTYrYlBuMDhJbVRkdjN2cjE2NE9vRXRkRm9hK3JJeDRReWhKRy9J
ZGlZbUtpK01mcXdTdlNCS29PUkZQTFJkd24wSHJnNlFBTVB0S3pTRnFNaUthb1VaQTE5L1Qw
Q0o3dWRyc0pJVzYzbTYrQ1lqYWIrUmFYeThYM29TbUZKQzJnRk9xZThvOU5KcE93ZGJQWnpM
ZjM5UFFFMzBHK2ZlWEtsZSsrKzI2ZzlkeThlZE5tczUwL2Y5NW1zOTI2ZFN1UUpKKzZLUFIx
ZGNUYTZFc1l1Vnl1SFR0MjVPVGtpQnVEVktUeFd4MklwcGFMVDU5QVZZYmc2UUFNUHRLenlH
OHhJaUpYMUVoS1VsSlNYVjJkeCtQWnVIR2o0T2w4UGx0ZVhwNmRuVTBJeWNuSjRmUDBzckl5
dm8vZnJjc1dVQXAxVDRQazZVRkdSdHp1Y3JuR2poMGJhRDJFa0tLaW9zY2VlMnpldkhtQjlF
anJvdERYMVJGcm95bGh0SERod3M3T1RvN2pLaXNyRXhJU2hQYmdGV21rMVlGb2FybEkrd1Nx
TWdSUEIyRHdZUjZFK0N0R3hEOFZ2S2lSbExLeU1wdk5scENRc0g3OWVwL3I2UmtaR1ljUEh5
YUVIRDU4T0NNakl5NHVidG15WllHMkx0Mld0SUFTVVhRdHFLbXBLVE16MDJReVpXWm1DdGZU
L2ZiM3U1N1ZxMWNIV2c4aHBMNitubUdZK3ZyNklIckVkSFYxMGRUVmtiNWZma3NZK1lqZnVu
VnJXbHFhMld6T3ljbHhPcDNDZW53cTB2aThTbG9kU0txWlpyOWsxK08zUlJaNE9nQlJKcVFz
RElEZ3dOTUJpREx3ZERDSXdOTUJBRUEvd05NQkFFQS93Tk1CQUVBL3dOTUJBRUEvd05PQk5x
aXVycTZwcWVudDdhMnBxYW11cnFaOFNmQm5BM1Z3dVZ3c3kvcnRIK1JWQUtnQmVEclFCdFhW
MVFjUEh2ejczLy8rdDcvOWJiQmNOZEI2amg4L0xuMEtWZzQwQVR3ZGFJUHE2dW96Wjg0NG5j
NHpaODRJOXVyem9McTZ1clcxMWVsMHRyZTNCMnIwV2FkMFEvZnUzYXV2ci9mcjZVNm5jOSsr
ZlZldVhCblVQUU5nTUlHbkEyMVFYVjE5OCtaTllTazBpaDlVVjFmZnVuWEw1WEx4dnduMDIr
aXpUdW1HdnZ2dXUzUG56dmw5cXIrLy84cVZLM1YxZFlPM1d3QU1NdkIwb0EycXE2djcrL3Yz
NzkvZjM5OHZHSzdUNlhTNVhJTExTeTFlMnVpelRyOGJDblRkdkwrLy85cTFhL0Iwb0diZzZV
QWJpQjFXZU56ZTN1NTBPbHRiV3hWNHVvOXhTNStWUHFpdXJ0NjNiOS9seTVjSGM4Y0FHRlRn
NlFBQW9CL2c2UUFBb0IvZzZRQUFvQi9nNlFBQW9CL2c2UUFBb0IvZzZRQUFvQjkrOXZUbTV1
YnRBQUFBdEE4RFF3Y0FBTjN3L3dIU0wwMUtqNEZMZ2dBQUFBQkpSVTVFcmtKZ2dnPT0iIC8+
PC9wPjxwPiZuYnNwOzwvcD48cD5UaGVyZSBpcyBhIHNsaWdodCBpbmNyZWFzZSBpbiBzbGVh
cGluZyBqb2JzIGF0IHRoZSB0aW1lIHNsb3QgaW4gcXVlc3Rpb24sIEkgZ3Vlc3Mgbm90aGlu
ZyB3ZSBjYTwvcD48cD5kaXJlY3RseSBtYXAgdG8gdGhlIGlzc3VlOjwvcD48cD4mbmJzcDs8
L3A+PHA+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtH
Z29BQUFBTlNVaEVVZ0FBQWZFQUFBRnNDQUlBQUFCVHFCZTNBQUFnQUVsRVFWUjRuTzJkZjNR
VDVaNy9oeWFwYllDbVB5akxMME4vMkphMmdCZktiYXRYT1h5dGlGZGR2TjYweTdyK1dBOWUz
TE9JbGxiRXk5SERjZ0JscjdKb0xWWTlYS0VXQ21xVGxsYnh4NjJGOUtwN0xBSmlMMm1iMG9M
eXM4MlBOdTN6ejU1ei8rRDd4N1BPanZOTWttbWFaRExKKzNVK1owNzY1Sm1aOXp5WnZQdkpr
OGxudU84QkFBQkVCVmFybFZOYUF3QUFnQ0JndFZyMzc5Ly92NTVPQUFBQXFKbjkrL2ZEMHdF
QUlFcUFwd01BUVBRQVR3Y0FnT2dCbmc0QUFHcWlpVUg0TER3ZGdDRERjWnpTRWlKQ0F3Z3A0
K1BqMU0zaDZRQ0Vsa2p3MDBqUUFFS0h4K1A1N3J2dnpHYnoxYXRYbTV1YmhVL0IwMEdZNEg0
bUtTbnBvWWNldW5qeG90S0tRa1VrK0dra2FBQWhvcWVucDYydHJiT3pzNysvdjdtNStidnZ2
aE0rQzA4SFlZSjNtUXNYTHZ6elAvL3pQLzdqUHlxckozUkVncDlHZ2dZUUlvNGZQMzcxNmxW
dno4TFRRWmdRdXN5bFM1ZjBlajNmdm12WHJybHo1MDZaTW9VUTRuUTYvL1ZmLzNYNjlPblRw
MDkvNG9rbm5FNG43VFl5TXJKaHc0YTB0RFNEd2ZEeXl5L1RSby9IVTExZFBXUEdqTVRFUkpQ
SmRQMzZkZHB1c1ZqeTgvTjFPcDNSYU55N2Q2K1B4Z2x0UWY2Ujd0aXhJejA5WGEvWFAvcm9v
eTZYaXhCeSsrMjNIemh3Z08vVDA5TXphOVlzNFRzek16UHo1TW1UOVBFNzc3eERINXc4ZVRJ
ek05T0hUbS90L0dqLzlhOS9uVE5uenAvKzlLY0pIUUpRTC9CMEVDYUVubjc1OG1XaHA1dE1K
bjRxNXRsbm4xMjFhdFdGQ3hjR0J3ZnZ2dnZ1eXNwSzJyNXAwNmF5c3JLK3ZyNHJWNjQ4L2ZU
VHRQR2xsMTY2NjY2Nyt2cjZybCsvL3NnamovemhEMytnN1dscGFZY09IWEs1WEQwOVBZOC8v
cmlQeGdsdFFmNlIwa080Y09IQ3FsV3JObTdjU0FocGFXbkp5OHNiR3h1amZSNS8vUEh0Mjdj
TDExcTNidDNycjc5T0NPbnI2NXMyYlJwMTV6MTc5anoxMUZNK2RIcHJwNlBkMU5RMFk4YU1E
ejc0WUVMNlFZU0Q2MTVBUk1CNytzV0xGeDk1NUpINzc3K2ZiKy92NytlN3paNDkrK3pacy9U
eDk5OS9QMmZPSFBwNDd0eTU3Q2xxTkJyUG5EbERIdzhPRHM2Y09aTStuamR2M3U3ZHUvdjYr
b1NkSlJzbnRBWDVSL3JERHovUXgyZlBucDA3ZHk1OVhGUlU5TjU3Ny9HTnc4UER3clUrL1BC
RGs4bEVDTm0rZmZ1TUdUUG9oNFBmLy83M0gzMzBrUStkM3RvNWp2dXYvL3F2MmJOblc2M1dB
QTRCUkQ2NDdnVW9EUDhkNmZUcDB4OTg4TUhCd1VHK1hkaE5vOUY0UEI3NmVIUjBWS3ZWOHUy
am82T2liV3ExV2s0QW5iMGhoRml0MXQvKzlyZXBxYWtaR1JuVUU3MDFUbWdMa29jaitaVGtJ
WHp3d1FjNU9Ua2VqNmVpb3VLMTExNFRyVFUwTkhUenpUY1RRZ29MQzgxbWMwbEpDU0hrNXB0
dnB0YnZUYWUzZG83ak1qSXlubnZ1T1ZZZWlBSnczUXRRSG0vZjJvbmFaOCtlelNlNTMzLy8v
ZXpacytsanlUeDkzcng1ZHJ2ZDJ4N0h4OGZOWnZNLy9NTS8rR2dNWUF0K0VlYnBQL3p3QS85
UlkzeDh2TEN3c0xLeTBtZzB1dDF1ZHNVNzc3enovZmZmTHlvcUlvUVVGUlY5OE1FSHk1Y3Y5
NjNUV3p2SGNYMTlmVmxaV1R0MzdweVFlQkQ1NExvWEVCSEk5UFFOR3pid2s5RXJWNjU4NXBs
bmFQdnp6ei9QenFmL3gzLzh4NnBWcTdxN3UwZEhSNy85OWxzNmQwRUlLUzh2Lys2Nzc5eHV0
OWxzVGt0TDg5RTRvUzNJUDlMZi92YTNGeTlldkhqeDRyMzMzc3QvSlVBSXFhK3Y1emp1cmJm
ZWtseHgrL2J0YytiTW9TbjhxNisrT25mdTNCMDdkdmpXNmEyZGptcC9mMzlPVHM2MmJkc21w
QjlFT0xqdUJVUUVNajNkNFhBODl0aGowNlpObXpadDJtT1BQZVp3T0dqN3lNakkrdlhyVTFK
U2twT1RkKzNhUlJ2SHhzYTJiZHRtTkJwMU9sMUJRVUY5ZlQxdFAzRGdRRTVPamxhcnpjL1Bi
MmxwOGRFNG9TM0lQMUwrdXBkSEhubUV2M1NIRUhMdzRNSHM3R3gyRW9ueXpUZmZhTFZhK25Y
eGhRc1h0RnJ0Zi8vM2Yvdlc2YTJkSDlXQmdZRzh2THlYWG5wcFFvY0ExQXM4SFlEd2NkOTk5
KzNmdjE5cEZVRGQ0TG9YQUpSbmJHeXN0cloyd1lJRi9PV01BQVNHeU1UaDZRQW9BTWR4UnFN
UlZ4YUN5ZFBjM0R3eU1rSWZqNHlNNExvWEFBQlFNVmFyOWVUSms2T2pvNk9qb3lkUG51enM3
QlErQzA4SEFBQTE0WFE2VDV3NFliRllMQmFMMVdvVmZnbFA0T2tBQUtCcU1KOE9BQURSQXp3
ZEFBQlVUQXhkeTloOTdGajNzV05LcXdBQWdQQVJ0WjQrNm5MdHVlMjJQYmZkTnVweUthMEZB
QURDUk5SNitsLys5S2R0UnVNMm8vRXZLUDhQQUloVm9zVFRyL2IxN2N6Sm9aNitNeWZuYWtC
bHJ3RUFJUEp4T0J4V3E1Vy9scEd2aVVTSlhFOXZiR3pNek16VWFEUVpHUm1OalkyRUVMdmRY
bHBhR2g4ZlgxcGFLcW92MnZEWVk5VFFhVFE4OXBoQ3FnRUFJTFMwdDdlZk9YTm1aR1JrWkdU
azlPblQ3ZTN0d21jajE5T1RrcElzRm92TDVUS2J6UWFEZ1JCU1hsNWVYVjN0ZERxcnE2c3JL
aXJZVlRadjNrd0lFZDQweHdjanAwNzU3U056VTNLNlFaWDhibEFsdnh0VXllOFdtYW9Dd0d3
MjgxV0R4c2JHekdhejhObkk5ZlNGQ3hkYUxCWmF3SHJ4NHNXRWtMUzBOSHB6bk1IQlFjbVMx
dFRUdi9ycUt6bmJ2eWJqeHNFeU55V25HMVRKN3daVjhydEJsZnh1a2FrcUFOU2FwNTg0Y1NJ
cEtZbmp1S1NrcEJNblRoQkM0dUxpNkg4bmo4ZWowV2lFblQwLy9YU3RwbWJUdW5Ya3hJbi8r
Wi8vSVNkTzNMaHh3L2ZTMDlibXQ4OW9lN3ZmUGpMM0NGVlFCVlZRSlZ6KzNlVzZWbFBqN3Vx
YXFEY09EdytyY2o0OU96dWJuM3U1NVpaYkNDR3BxYWwrOC9RYk4yNE1EQXpja0FIcDdQVGJS
K2FtNUhTREt2bmRvRXArTjZpUzN5MENWWVhDT1NQWDA1T1RrL201bDVTVUZFS0l5V1RpNTlQ
NWUzUUpvWjRPQUFDcUlEQnZWT3QxTHcwTkRVYWpVYVBSeko4Ly85Q2hRNFNRM3Q3ZTR1Smlu
VTVYVWxMU0ozVzFJdkwwaVhhREt2bmRvRXArTjZpUzJTMHdiMVRyZkhvQUlFOW5zVnF0VnF0
VmFSVUFBQWtDTXpxMVh2Y1NBTWpUMlc2K1BSMWpKYjhiVk1udkJsVXl1d1ZtZE1qVFl4ZnJ6
eWd0QklBSUpldEdGZzFGOWg2WTBhbjF1cGNBUUo0dTZtYTFXck51WkNGUEQwcTNNS3V5V3Ey
dHJhMSs3Y2JIcG9UL3pxTjdyR1IyWS90WUJTaWlLaFEyR0lXZURuaXNWaXVYZFFONXVocVJ0
SnZBdGhCY1laSjdDZWt1UWdkTmVuem5QU0VsTUtPTG9mcnB5Tk5GM2Z4Nk9zWktmamRoSHg5
MktVZFZhMnVyWHhPeFdxMEx5d2FvM1FUMkNnby9wUVgzMDRPb2haVVgrYS9nRFY1NUl5ZDZq
MFIrbmk0eWNSRlI2T21BaC9mMGdOTVFwZVlaSXhrNm5uN2QxdThXL0hiZ3NtNndqak9odlFU
M1U1cmtJY3RwRWM0Z0tUaDVMWUsraUZ6V2pVbStSeVpEWUVZWEU1NCtNakppczluV3JsMTc0
OGFOYjc3NTVzYU5HNE9EZzc2WHBMUFRiNStCZ1FHL2ZXVHVVUkZWVnF1MXNHeVF5N3BCYzZ1
SnFxTHBaT3lNbGJkUm91Tnc1TWdSMnNkcXRaWU5sbVhkeUJyY1g4aTMwTGx2bWFwYVcxdTk3
WXZmWTlhTnJQdis1UnN1NjBaaDJTQjlGZWl6d2ozeXF2aDJxb0h2U2RkdGJXMDkrYzQ3L0tz
Wm1DclJIb1VhaEV2YWsvWXBHeXp6M1hPU1kxVTJXQmJ3ZVVXMWxRMlcwUkVXdmtmQ2RyYmI3
WGFielJaQW5hK1k4SFFLOG5RaGZLNDNtVVJQdlZPbDN2QjJVRllCYkR0L2RRUWZkR0Q1UDMx
dlZxWUdZUWQrRjZLWGp4VmovU1hDWGRCTVg5Z3pnSkVSRFFLZjFmS05vaGFyNEVPTTVOQk5h
UDU2UWdNN29XM3k3NDdKdkVjbVNTaHNNQW85blovRHNucmhmMGN6a3VhSWVXRkJ2MnBDK05H
U2ZSdklVV1cxV2srKzg0N2ZNMTR0MXlkSW5oSTBjNVMwU0w2ZHptNExYWUFQZm9hRUh5dmYw
TjM1aHN1NnNiQnNnSDM1ckQ4N0VSVkQrL3p2aEVZako1TE45eVM3NXJIYm1aQXFmbXNMeXdi
WWR1Ri9EanBXdkNwK2ZJUkx1bTZ3eGtwbU43YVBwS2RIL255NmI2TFEwNFh2WHNrRXdScGh1
YWZ3SkF2aU5rVUdGTUQzKy9Ta1YvYkNnQnUvVEJJbkwwUHlyT0RkaDEreUtUbnZSOTQ4WGVS
cnZvUGRpN2VkaWo0UWVQdS93dmFVVkJ1d0t0SFdoTU1sYkJFK3VOSEllUnN4djBwRXV3NXNE
UDBlcWNqVDVaOWR3WHEzQnVCeW4zenlTVmRYMStEZ29NZmprZXdRYlo0dSttOHMrWExTcHlh
YUkyUjUvMkpuTW5tNnlMQmtxdkloaHQ5czJVQ1pYMCtYdkJKQUNGM3hENTFML1o3QkF3TURm
bFh4ZS9UOWxtQlZpVjQ3dXFQQXJqQ3hDdjVSOFZFMlVDYXlKOVpEK2F6WnQ1LytvWE9wWCt1
aEw0MWYweEh1a2RYalRaVmt0OVZMTy8wNnFmQ0VrZFFqM0tPa0xmcFFKWE9zdktsaTIrbC9D
OUVyNkhkVFdWTC9oSVMySHZCNUpUckg2RmthaWp6OTJyVnIzZDNkSFIwZHpjM05IUjBkM2Qz
ZDE2NWRFM2FJTmsrWFBCSFpGR09pRWF4L3krd0x6eHNXVFdxQ0pjYjZ5OCtWM0M4LzgvcldJ
L1JRK1ZrTTMwR21QQjQ1UFlPWVR3bTM1czJTZ2hJK1VsUkVaQTcxWk00cjlsazVXNXVNM1ky
T2pnNE9EbloxZFgzeXlTZkM5aWowZE9GL2JHOHZudndjUWVpa1dWNisrWkdmSTRpc21kVXBV
NVhWK3dRQ3YzRnZ1Wkp3WGZZQUpmOHAwaXpQOTA3NUtXbkpJUktKWi9FOTdLTFhqalpLanBW
b2EreUhOdmEvSFNjdnI1VFRoeE5reEQ2TVJ1YW1RcUZxOHB1S1lsVSt6aXZKczkzYmVjNi9F
WHc3d3lROTNSdlI1dWx5WG40ZmtlVWx0ZWV5ZnBGV1M3cFNBSWdNWFg3STJYZ0E2d3FQM2Nj
SXlEbXVTWFlRZFE1WWlmWG5tUlpSQ3dMQnhpVFBLOUd6dmxjL2N2Skl6SGs2SnlBMU5aVVFZ
cmZiUzB0TDQrUGpTMHRMN1hZN3V3cjE5TW5rQ0NJakUyMHE2K2RKRXI4NXVHUitLcGtGaS9Z
b1AzUHh1MGNmNCtCTmxkK3g4bjJBZkFjZlBZVnptbnhQMFpES1VTVXpuNUtjamZVMnBIS0dQ
YkR6S3JCTlFWWDRWVTNtdkdMUE1lVHAwblIwZER6Ly9QT0VrUEx5Y3Y0K1J4VVZGV3pQeWVm
cGZrTmt3WkxmN0xONXJtVG1HOXo1Vm0vSnRad0Q4WDE5Z3N3dHlGK0w3K3pqdjRqZjhMYXV0
NkhHN0RaQ1p2QkpCajF0Sk04Y21lOWwwZXFpa3pOWW5xNitlaStyVnEwNmYvNDhJU1F0TFcz
UTMvMUlPVFhuQ0ZBRlZWQVZPNnBpMU5QYjI5c2ZmdmhoK2pndUxvN2UzY1BqOFdnMEdtRTN6
MDgvWGF1cDJiUnUzZStXbnVDeWJtQ0pKWlpZUnZqeTd5N1h0Wm9hZDFmWFJGMVIzWFVaVjZ4
WThmWFhYOVBIcWFtcHlOT2hDcXFnS2pwVXhXS2Uvdm5ubjk5eHh4MzhueWFUaVo5UE41bE1i
UDh3ektjakVBaEVVQ0lXUGYzT08rODhjdVFJLzJkdmIyOXhjYkZPcHlzcEtlbnI2MlA3STAr
SEtxaUNLcldvVXVhNmw5cmEyc2NmZjV3UVVsNWVQbjM2OUVPSERvVkNSTEJBbm81QUlOUVNB
WHU2dytHd0Judy9VcVBSMk5QVDA5TFNjdHR0dDMzNTVaZTV1Ym1CaVFnUHlOT2hDcXFnU2ky
cUF2YjA5dmIyTTJmT2pJeU1qSXlNbkQ1OXVyMjlYZmlzSDAvWGFEUWpJeVByMXExNzlkVlhS
MGRIdFZwdFlDTENBL0owQkFLaGxnalkwODFtTTcwQ2tCQXlOalptTnB1Rnovcng5T3pzN0Mr
KytHTEpraVhkM2QwMm0rM21tMjhPVEVSNFFKNE9WVkFGVldwUnBVeWVmdURBZ2VuVHB6Lzc3
TE9Fa0NlZWVLSzJ0all3RWVFQmVUb0NnVkJMQk96cHc4UERnYytucXd2azZWQUZWVkNsRmxX
eFcrOUZQc2pURVFpRVdpSmdUNS9VNzBqYjI5dHpjbkttVEpsQ0NGbXpaazE5ZlgxZ0lrTE55
TWlJeldaYnUzWXRsM1dEdjl1NjcrWHFwWjErK3l3c0cvRGJSK1llb1FxcW9BcXFoRXU3M1c2
ejJmcjcreWRxZDlURWVTdWZtS2ZmY3NzdExTMHRITWNSUW5wN2UrZlBueCtJNDRZTDVPa0lC
RUl0RVhDZWJyRllybCsvYmphYnIxMjdkdTNhdFphV0Z1R3pmanhkcDlPNVhDN3E2WmN1WGRM
cjlZR0pDQStZVDRjcXFJSXF0YWdLMk5OUG5qelozTnpjMDlQenlTZWZXQ3lXYytmT0NaLzE0
K2tyVnF4NDU1MTNPSTdyNys5ZnMyYk42dFdyQXhNUkhwQ25JeEFJdFlReTM1SDI5L2MvOE1B
RGVyMWVyOWV2WHIzNnh4OS9ESVdJWUlFOEhhcWdDcXJVb2txWjcwalZCZkowQkFLaGxzQzFq
UDVCbmc1VlVBVlZhbEdGdW96K1FaNk9RQ0RVRXNwNHVvSjFHY2ZHeHJaczJUSjc5dXdwVTZi
UUMyL3NkbnRwYVdsOGZIeHBhYW5kYm1kWFFaNE9WVkFGVldwUnBZeW5LMWlYY2V2V3JibTV1
VjFkWGVQajQ3U2x2THljdjg5UlJVVUZ1d3J5ZEFRQ29aWlFwbjY2Z25VWmpVYWpxSVprV2xv
YTdrY0tWVkFGVmRHaEt1YnFNbW8wbXFlZmZqb3hNZEZvTkg3d3dRZUVrTGk0T0ZvMTJPUHhh
RFFhWVdmUFR6OWRxNm5adEc2ZDR2Y0N4eEpMTExHVXMveTd5M1d0cHNiZDFUVlJiNXhVL1hR
RlNVdExNNXZOTHBmTGJEYlBtREdERUpLYW1vbzhIYXFnQ3FxaVE1VXllYnFDVkZSVW1NMW10
OXR0TnB2VDA5TUpJU2FUaVo5UE41bE03Q3FZVDBjZ0VHb0paZXFuSzNndFkzOS8veDEzM0tI
VDZUSXpNK21IaTk3ZTN1TGlZcDFPVjFKUzB0Zlh4NjZDUEIycW9BcXExS0lxNXE1bERBRGs2
UWdFUWkyaFRHMEFOZDVqT3RMK0cwOW9VMUFGVlZBVkk2b200K2trNFBycGFyekhOQUtCUUVS
K0tPUHBhcnpIZEtUOU41N1FwcUFLcXFBcVJsUXA0K25xQW5rNkFvRlFTd1RyTzlMbzkvUkkr
Mjg4b1UxQkZWUkJWWXlvVXNiVDFYS1BhUXJ5ZEFRQ29aWlE1cm9YdGR4amVtUmt4R2F6clYy
N2xvdTh1NE5INWozTG9RcXFvRXBaVlhhNzNXYXo5ZmYzVDlMOUp1YnBhcnpITkFLQlFFUitL
RFAzb3NaN1RFZmFyTm1FTmdWVlVBVlZNYUlLOTVqMkQvSjBCQUtobHNBOXB2MkRQQjJxb0Fx
cTFLSUs5NWoyRC9KMEJBS2hsbEFtVDZmZmpucjdNOUpBbmc1VlVBVlZhbEUxbVR6ZDdYWi8v
dm5uemMzTkZ5OWVGRDNsdjRhWDIrM210eElYRnhld2lEQ0FQQjJCUUtnbEF2WjBhdWhuenB5
NWZQbnkwYU5IcjE2OUtueldqNmNYRnhjLzk5eHpseTlmdm56NWNsVlYxYTkvL2V2QVJBUUFK
NEMyMk8zMjB0TFMrUGo0MHRKU3U5M09yb0k4SGFxZ0NxclVvaXBnVC8vc3M4OTR1ejUvL254
Ylc1dndXVCtlZnU3Y3VaVXJWeVltSnVyMStudnV1Y2Rtc3dVbUlnRFllWjd5OG5MK1BrY1ZG
UlhzS3NqVEVRaUVXaUpnVHhkNTlibHo1NFIvUnU1M3BCekhUWjgrWGEvWHIxcTFpdjR2U1V0
THcvMUlvUXFxb0NvNlZNWG90WXdYTGx5b3JLd3NMaTRtaE1URnhkRzdaWHM4SG8xR0krem0r
ZW1uYXpVMW05YXRVL3hlNEZoaWlTV1djcFovZDdtdTFkUzR1N29tNm9xVHFyWDd0Ny85YmVY
S2xmUTNSeXRYcmhRbCtlSEI0WERvZERwQ1NHcHFLdkowcUlJcXFJb09WY3JVVDErMmJObm16
WnZwZDZTYk5tMWF0bXhaWUNJQzVzcVZLNXMzYnk0cUtpS0VtRXdtZmo3ZFpES3huVEdmamtB
ZzFCTEtlTHBXcTNXNVhQU3gwK21rK1hKNG9GZThKQ1FrckZpeDR1elpzNFNRM3Q3ZTR1Smlu
VTVYVWxMUzE5Zkhyb0k4SGFxZ0NxclVva3FaMzVFV0ZSVnQzcno1eXBVclY2NWMyYkpsQzgy
WEl4Yms2UWdFUWkyaHpIZWtQL3p3UTFsWldXSmlZbUppWWxsWldYZDNkMkFpd2dQeWRLaUNL
cWhTaTZwSjV1bmo0K09pU1JoS3BGLzNNaUdRcHlNUUNMWEVaRHpkNC9GODk5MTNaclA1NnRX
cnpjM053cWY4ZURxOWE1MWFRSjRPVlZBRlZXcFJGYkNuOS9UMHRMVzFkWFoyOXZmM056YzNm
L2ZkZDhKbi9YajZuRGx6MkJveEVRdnlkQVFDb1pZSTJOT1BIejh1cXZFaXhJK243OXExNjhr
bm54d2FHZ3BzMzJFR2VUcFVRUlZVcVVXVk10ZTljQXloRUJFc2tLY2pFQWkxQk82SjRZdVJr
UkdiemJaMjdWb3U4dTRPSHBuM0xJY3FxSUlxWlZYWjdYYWJ6ZGJmM3g5Y000d1NUNmNnVDBj
Z0VHb0paZkwwNzcvLy91Njc3NmIxWHU2KysyNzZlODZJQmZQcFVBVlZVS1VXVmNwNGVrRkJ3
UXN2dkVCL1I3cDU4K2JDd3NKUWlBZ1d5Tk1SQ0lSYVFobFAxK3Yxd25vdmVyMCtGQ0tDQmZK
MHFJSXFxRktMS21VOHZhcXFhc3VXTFh5OWw2cXFxbENJQ0JiSTB4RUloRm9pVXE1bGpPUXJH
cEduUXhWVVFaVmFWT0ZhUnY4Z1QwY2dFR3FKR1BYMExWdTI4QjhMN0haN2FXbHBmSHg4YVdt
cDNXNW5PeU5QaHlxb2dpcTFxSXBGVCsvczdKdzFheGJ2NmVYbDVmeDlqaW9xS3RqK3lOTVJD
SVJhSXVZODNlbDBGaFlXSGp0MmpQZjB0TFEwM0k4VXFxQUtxcUpEVmN4NSt2cjE2M2Z0MmtV
STRUMDlMaTV1Ykd5TUVPTHhlRFFhamJDejU2ZWZydFhVYkZxM1R2RjdnV09KSlpaWXlsbisz
ZVc2VmxQajd1b0tybk5LZXpwdm93cGU0akpseWhUUmxUYXBxYW5JMDZFS3FxQXFPbFNGTlUr
Zk1XTkdSMGZIK1BoNEpGeTJ5R3N3bVV6OGZMckpaR0o3WWo0ZGdVQ29KY0xxNlgvKzg1L256
cDByeXBTVnVqS2QzMmx2YjI5eGNiRk9weXNwS2VucjYyTjdJaytIS3FpQ0tyV29VdXczUjZI
WWE0aEFubzVBSU5RU01mY2RhUUFnVDRjcXFJSXF0YWhTeHRQLzlyZS9yVnk1a3RiYVhibHk1
Ymx6NTBJaElsZ2dUMGNnRUdvSlpUeDkyYkpsbXpkdnZuejU4dVhMbHpkdDJyUnMyYkpRaUFn
V3lOT2hDcXFnU2kycWxQRjByVllyckxXcjArbENJU0pZSUU5SElCQnFDV1U4dmFpb2FQUG16
WHl0M2FLaW9sQ0lDQmJJMDZFS3FxQktMYXFVOGZRZmZ2aWhyS3dzTVRFeE1UR3hyS3lzdTdz
N0ZDSW1qL0FlMDNMdS9Zb2xsbGhpcWV3Uzk1ajJEL0owcUlJcXFGS0xLbHpMNkIvTXB5TVFD
TFVFUE4wL3lOT2hDcXFnU2kycTRPbitRWjZPUUNEVUV2QjAveUJQaHlxb2dpcTFxRkxHMDZk
TW1SS0t2WVlJNU9rSUJFSXRvWXluejVrejUrTEZpNkhZY1NoQW5nNVZVQVZWYWxHbGpLZnYy
clhyeVNlZkhCb2FDc1crZlZOZlg1K1RrNlBUNlJZdFd0VFcxa1prMzJNYWdVQWdJajhVcTdX
clZQMzBoeDkrMkdhek9SeU85OTkvUHpVMWxjaSt4M1NrL1RlZTBLYWdDcXFnS2taVXhlaDNw
QzZYNjlDaFF3c1hMaVN5N3pHTlFDQVFrUit4Nk9uMGswRnljdkx4NDhlSjdIdE1MeXdia0hP
UDErMTN2TzIzejRaVkgvcnRJM09QVUFWVlVBVlZ3bVZZN3pITjA5N2VucE9UUTY5K1diTm1U
WDE5ZlhCMzd4YzY5NUtWbFVWazMyTWFnVUFnSWorVXlkTnZ1ZVdXbHBZV09vM2UyOXM3Zi83
OFVJaVFaUDM2OVJjdlhuUTRIQWNQSHB3NWN5YVJmWS9wU0pzMW05Q21vQXFxb0NwR1ZDbmo2
VHFkenVWeVVVKy9kT21TWHE4UGhRaEo2dXJxWnMrZUhSOGZ2M1RwMGs4Ly9aVEl2c2MwQW9G
QVJING80K2tyVnF4NDU1MTNPSTdyNys5ZnMyYk42dFdyUXlFaVdDQlBoeXFvZ2lxMXFGTEcw
L3Y3K3g5NDRBRjZQOUxWcTFmLytPT1BvUkFSTEpDbkl4QUl0VVFzWHZjeVVaQ25ReFZVUVpW
YVZNSFQvWU04SFlGQXFDV1U4ZlR2di8vKzdydnZwbk12ZDk5OTk5bXpaME1oSWxnZ1Q0Y3Fx
SUlxdGFoU3h0TUxDZ3BlZU9FRmVvL3B6WnMzRnhZV2hrSkVzRUNlamtBZzFCTEtlTHBlcjNl
NVhQU3gwK2tNNTdXTUFZQThIYXFnQ3FyVW9rb1pUNitxcXRxeVpRdk4wN2RzMlZKVlZSVUtF
Wk5uWkdURVpyT3RYYnVXVS9wZTRGaGlpU1dXY3BaMnU5MW1zL1gzOXdmWERLVTluUzNIR1A2
NmpBR0FQQjJxb0FxcTFLSUsxNzM0Qi9QcENBUkNMUUZQOXcveWRLaUNLcWhTaXlwbFBQM3c0
Y05HbzNIS2xDa3FtbnRCSUJDSXlBOWxQRDB0TGUzZ3dZTWVqeWNVK3c0NnlOT2hDcXFnU2ky
cWxQSDA1T1RrNGVIaFVPdzRGQ0JQUnlBUWFnbGxQUDNGRjEvY3NtV0wwK2tNeGI2RER2SjBx
SUlxcUZLTEttVTh2Ykd4OGFhYmJsTGtXc2FHaG9ZRkN4Ym9kTHBGaXhhMXRiVVJRdXgyZTJs
cGFYeDhmR2xwcWQxdVoxZEJubzVBSU5RU3luaDZlbnA2WTJPakl2UHBEejMwVUZkWGw5UHAz
THQzTDcxVFhYbDVPWCtmbzRxS0NuWVY1T2xRQlZWUXBSWlZ5bmg2VWxLUzR2UHBOcHZOYURR
U1F0TFMwbkEvVWdRQ0VSMFJvL1BwQXdNRFM1WXMrZkRERHdraGNYRnhZMk5qaEJDUHg2UFJh
SVRkUEQvOWRLMm1adE82ZFJGNGQzRDVmYUFLcXFBcWRsVDkzZVc2VmxQajd1b0tybWY2OFhS
bGF3TllyVmFqMGJodjN6NzZaMnBxS3ZKMEJBSVJIUkZ6dnlPdHJhMU5UMDgvZXZRbzMySXlt
Zmo1ZEpQSnhLNkMrWFNvZ2lxb1VvdXFtUE4wMGVlRG9hR2gzdDdlNHVKaW5VNVhVbExTMTlm
SHJvSThIWUZBcUNXVThYVFVaWlN6S1RYbUNGQUZWVkNsckNxRjgzU0h3L0hDQ3k5czNibzFG
Q0tDQmZKMEJBS2hsbEIrN21Wb2FDZ3BLU2tVSW9JRjhuU29naXFvVW9zcWhUM2Q0L0hVMTll
bnA2ZUhRa1N3UUo2T1FDRFVFZ3JQcDArWk1zVm9OQjQrZkRnVUlvSUY4blNvZ2lxb1Vvc3E1
ZWRlSWgvazZRZ0VRaTBCVC9jUDhuU29naXFvVW91cWNIdTZ1dTR4UFRJeVlyUFoxcTVkeXls
OUwzQXNzY1FTU3psTHU5MXVzOW42Ky91RGE0YXk4dlN4c2JGMzNubm41cHR2WHIxNmRYQjNI
MXlRcDBNVlZFR1ZXbFFwTnZmUzFOUlVVRkR3bTkvODV2ang0NkZRRUVRd240NUFJTlFTQ25q
NmlSTW5mdk9iM3hRVUZEUTFOWVZpMzBFSGVUcFVRUlZVcVVWVnVEMTk5ZXJWTjk5ODg5dHZ2
MDNMMjZvQzVPa0lCRUl0Z2U5SS9ZTThIYXFnQ3FyVW9nclhNdm9IZVRvQ2dWQkx3TlA5Z3p3
ZHFxQUtxdFNpS3VZOG5aM3RzZHZ0cGFXbDhmSHhwYVdsZHJ1ZFhRVjVPZ0tCVUV2RW5LZFRo
SjVlWGw3TzMrZW9vcUtDN1l3OEhhcWdDcXJVb2dxZVR0TFMwbkEvVWdRQ0VSMEJUeWR4Y1hI
MHdrcVB4NlBSYUlUZFBELzlkSzJtWnRPNmRSRjRkM0Q1ZmFBS3FxQXFkbFQ5M2VXNlZsUGo3
dW9Lcm1lcXlkTlRVMU9ScHlNUWlPZ0k1T25FWkRMeDgra21rNG50alBsMHFJSXFxRktMcXBq
emRQYTNUcjI5dmNYRnhUcWRycVNrcEsrdmoxMEZlVG9DZ1ZCTHhKeW5Cd0R5ZEtpQ0txaFNp
eXA0dW4rUXB5TVFDTFVFUE4wL3lOT2hDcXFnU2kycTRPbitRWjZPUUNEVUV2QjAveUJQaHlx
b2dpcTFxSUtuK3dkNU9nS0JVRXZBMC8yRFBCMnFvQXFxMUtJS251NkxrWkVSbTgyMmR1MWFU
dWw3Z1dPSkpaWll5bG5hN1hhYnpkYmYzeDljTTR3U1Q2Y2dUNGNxcUlJcXRhaENudTRmektj
akVBaTFCRHpkUDhqVG9RcXFvRW90cXVEcC9rR2Vqa0FnMUJMd2RQOGdUNGNxcUlJcXRhaUNw
L3NIZVRvQ2dWQkx3TlA5Z3p3ZHFxQUtxdFNpQ3A1TzdIWjdhV2xwZkh4OGFXbXAzVzVuT3lC
UFJ5QVFhZ25lMHhzZWYveEtiMit3ZkZKTm5sNWVYczdmNTZpaW9vTHRnRHdkcXFBS3F0U2lp
dmYwYlVianp0emN2L3pwVDZOTzUrUjlVazJlbnBhV2h2dVJJaENJNkFpaHA5TjQvVGUvK2VH
VFR5YnBrMnJ5OUxpNHVMR3hNVUtJeCtQUmFEUzA4ZlRwMDg4OTkxejFoZzNQUHZEQS83djk5
bzJQUFBMRUUwOXNmT1NSNTU1N3p2ZnltWHZ1OGR2bkR3OCs2TGVQekQxQ0ZWUkJGVlFKbDlT
MXF0YXUvVDlQdi8zMkh6NytlSkkrcVNaUFQwMU45WnVuRTBMT25Uc25aMnZPTDc3dzIwZm1w
dVIwZ3lyNTNhQktmamVva3Q4dE1sV1JuK2RldnZqUC80eTV1UmVUeWNUUHA1dE1KcllEOVhT
MzJ5MW5hOWYyN3ZYYlIrYW01SFNES3ZuZG9FcCtONmlTM3kweVZSRkNHaDU3N0VwUGo1eWVj
bENUcC9mMjloWVhGK3QwdXBLU2tyNitQcllEOVhTWmVDNWVESjYwb0FGVjhvRXErVUNWZkNK
VGxYelU1Ty9QQ0E0QUFCNkZTVVJCVk9sKzZlcnFVbG9DQUFBb1NWUjVPZ0FBeERqdzlBQnBh
R2hZc0dDQlRxZGJ0R2hSVzFzYklZVDdtWWhTeGJaRWdxcjYrdnFjbkp4SVUwWFpzbVdMZ2kr
aWovTXFvbFNOalkxdDJiSmw5dXpaVTZaTVVVcVk3N0ZLVFUyTkVGV05qWTJabVprYWpTWWpJ
Nk94c1RIVUF1RHBBZkxRUXc5MWRYVTVuYzY5ZS9jS0w4SlIxdE5aVmQ1MEtxdnE0WWNmdHRs
c0RvZmovZmZmVitxOUp6a3luWjJkczJiTlV2QkZaRlVwZTBaUldGVmJ0MjdOemMzdDZ1b2FI
eCtQSEZVOEhSMGR6ei8vZklTb1NrcEtzbGdzTHBmTGJEWWJESVpRQzRDblR4YWJ6V1kwR3Zr
L0krRWRTQmhWa2kzaFI2VEI1WElkT25SbzRjS0ZDa29pQWxWT3A3T3dzUERZc1dPUjhDTHlx
amlPbXo1OXVsNnZYN1ZxbGMxbWl4QlZScVBSYkRZcks0YUhQYmRYclZwMS92eDVwZlJRZUZV
TEZ5NjBXQ3h1dDl0c05pOWV2RGpVKzRXblQ0cUJnWUVsUzVaOCtPR0hmRXNrMkFHcmltMVJY
Qlg5Z0p5Y25IejgrUEVJVWJWKy9mcGR1M2FSQ0hnUjJkZnJ3b1VMbFpXVnhjWEZFYUpLbzlF
OC9mVFRpWW1KUnFQeGd3OCtpQkJWbFBiMjlvY2ZmbGhCU2VTWHFrNmNPSkdVbE1SeFhGSlMw
b2tUSjBLOWEzaDY0Rml0VnFQUnVHL2ZQbUdqNG5iQXFwTFVxYmdxUWdpZGU4bkt5b29RVlhS
cVdQSEphMit2bDhQaDBPbDBpa2dpaktxMHREU3oyVXpuRTJiTW1CRWhxaWdyVnF6NCt1dXZs
WkpFR0ZYWjJkbjgzTXN0dDl3UzZyM0Qwd09rdHJZMlBUMzk2Tkdqb25abFBaMVY1VTJuc3Fy
V3IxOS84ZUpGaDhOeDhPREJtVE5uUm9ncUhnVmZSRytxcmx5NXNubno1cUtpSWlWRVNhaXFx
S2d3bTgxMFBpRTlQVDFDVkJGQ1B2Lzg4enZ1dUVNUlBSUldWWEp5TWovM2twS1NFbW9COFBR
QTRYN0owTkNRcUNVeVZRME5EVVdDcXJxNnV0bXpaOGZIeHk5ZHV2VFRUejhOdnlSSlZjS25G
SkVrcVlvK1NFaElXTEZpeGRtelp5TkVWWDkvL3gxMzNLSFQ2VEl6TTVXYVdKZDhCZSs4ODg0
alI0NG9vc2VicW9hR0JxUFJxTkZvNXMrZmYralFvVkFMZ0tjREFFRDBBRThIQUlEb0FaNE9B
QURSQXp3ZEFBQ2lCM2c2QUFCRUQvQjBBQUNJSHVEcEFBQVFQY0RUQVpnVUNsN01EZ0FMUEIx
STQzYTdOMnpZTUdQR2pHblRwbTNmdmwxcE9jckRjZHdycjd4Q0NIbjU1WmZoNDRTUXJxNHVq
dU53SXhvU1llY0dQQjFJVTFWVjljQURENXcvZi83S2xTdlBQUE9NMG5LVWgrTzR2THk4OGZI
eDNOeGN4ZCsza2NET25Udmo0dUoyN3R5cHRCRGxpYWh6QTU0T3BKa3paNDdvcnVmQ2s1Vi96
SEZjVlZXVlhxL25pNGdxZms2SENJN2picnZ0dHExYnQ5NSsrKzNDd3hjTnk2dXZ2cHFTa3BL
Y25MejM1MXNWUit1QXJGaXg0dkhISDEreFlnWDljL0hpeGZRV0VLMnRyYmZlZWlzaHBMT3pN
eTh2THlFaG9icTZXamhpU2drT0hleTVRVThNclZiTDN4bGozYnAxLy9Jdi8wSUllZmpoaDU5
NjZpbCt4YUNMZ2FjRGFUUWFqY2ZqRWJaNDgvUlhYbmxsZUhqNHlTZWZES3Urc01OeDNQNzkr
K1BpNGc0Y09DQTVGUFR4bmoxN0hBNUhjM096VW5jZ0NRL0R3OE5UcDA0OWYvNzgxS2xUaDRl
SENTR3Z2ZlphUlVVRklhUzh2SHozN3QyRWtJVUxGNzd4eGh2RHc4Tjc5KzZOU2l2bjhYWnVl
RHllOXZiMldiTm1FVUpHUjBmdnV1dXVmL3UzZjd2cnJydEdSMGRESndhZURxVHhrYWVQam80
S1BYMWtaQ1RjNHBUQWg0OExIL052MStoMnNhYW1KcjVNVlZOVEV5SGswcVZMQm9QaDNMbHpC
b1BoOHVYTGhCQ3RWdXR3T0FnaERvY2p1a2VEUFIvMjdObGpOQnJqNHVJNGpwc3laUXA5cXJP
emsrTzR6czdPa0lxQnB3TnBLaXNySDNqZ2dZR0JnYXRYcjFaV1ZoSkMwdExTamg0OTZuUTZY
My85OWVqK0tDMkpURStYZkJ4OVBQWFVVL1NiOCszYnQvTXpDU2FUNlZlLytsVjVlVG45czdD
dzhNMDMzM1E0SEcrLy9YWjBqd2I3dWlja0pEUTNOenNjRHJQWlRGc2NEc2VpUll0V3JWcTFh
TkVpcDlNWk9qSHdkQ0NOeStYNjkzLy85N1MwTlA2Nmw5cmFXb1BCa0pLU3NudjNiaCtlSHEz
dlh2WjlLNnFxS3RtSFJPbUFaR1ptZnZ2dHQ0U1FiNy85TmpNemt6YTJ0clp5SE5mYTJrci90
RnF0T1RrNUNRa0pHemR1akl1TG80MVJPUnJzNi83aWl5OGFEQWFEd2JCanh3N2E4dWlqajY1
WnM0WVE4ay8vOUUrUFBmWVl1Mkt3Z0tjREFFTEkyTmpZa1NOSGNuTnpsUllTSzhEVEFRQ2hn
czRtWjJabUtuWG5reGdFbmc0QUFORURQQjBBQUtLSE1IbTY4SHVrWUcwd1dKc0NBSUNvWVdL
ZXpubEI1czVneENwQytQcW1wcVlTUW5wNmVvcUxpK1BqNDR1TGkzdDdleVhYYW14c3pNek0x
R2cwbVptWmh3OGZwaTM1K2ZueDhmRkxsaXo1L1BQUHczb01RY1hsY2ozOTlOUHA2ZW44T2Qv
WTJHZzBHblU2M2E5Ly9ldnU3bTdKdGRoQkMzcCtvd2pzNmJGdjM3NnNyQ3lkVG5mcnJiY2VP
M1pNY2kyMmo1d3hqSHpZMFdCYldOaGpEOEJVV1NidTZWazN4QUZQajJxZWV1cXBUWnMyRVVK
Kzk3dmZWVmRYTzUzTzZ1cHFrOGtrMmRsZ01MUzB0TGhjTG92RllqQVlDQ0VtaytuVXFWTXVs
K3Z3NGNNelo4NE1wL0xnVWxsWnVYang0bE9uVG8yUGo5T1cxTlRVdHJZMnQ5dHROcHZ2di85
K3liVzhEVnJVdkJlRXA4ZTMzMzdyZERyMzdkdm43VGUwYkI4NVk2Z2krTkh3MGNMREhudFF6
b3BRZWZwcnI3MW1OQm8xR28zd2Y0Nm81K25UcDB0S1NuUTZYWFoyTnMzZzJCYU80eW9yS3hN
U0VuSnpjNjFXNi8vSjhGbGtRN0xRQkFpQUsxZXVKQ2NuOS9mM0UwSlNVMU1IQndjSklZT0Rn
OTdldElzV0xXcHRiWFc3M1VlUEhxVkZQeWdPaDZPaG9VSFZGN1RObmozN3M4OCtFN2FrcHFa
Ky9QSEg5RDJaa3BJaXVaYTNRWXVPMDFKNGV2RDA5ZlhwZERyZnZ5N20rOGdaUTdYQWpvYmsr
UEN3eDg1eG5NRmcwT3YxOTl4emo4MW1DMHhHcUR4OTZ0U3AyN1p0TzNYcWxOdnRGcTR1N0xO
a3laTDMzbnZQNVhLMXRMUmtaMmRMdG5BY1YxdGI2M0E0NnVycUNnc0xKVGZGTVVVMllxZlFS
S2pac1dNSC9hRUVJU1F1TG01c2JPeTIyMjd6ZUR3YWpVYXl2OVZxVFU1TzVqZ3VPVG1aL3cw
MC93bjBxNisrQ3BQdUVLRFJhS3FycS9WNi9ieDU4dzRlUEVnSXFhK3ZuenQzYm1KaTRzYU5H
NzBOaUxkQmk0N1RVbmg2VUg3ODhjZWlvaUxmaFR5RmZlU01vVnBnUjROdEVlTHQyQzlldkZo
WldWbGNYQnlZakZCNStrY2ZmWFR2dmZkbVoyZFBtemJ0ajMvOEk3KzZzSTlXcStVbmoyaEpC
TGFGNHppK1pJUk9weE1xRVQ0V0ZkbUluVUlUSVdWMGRIVGV2SG04TmFlbXBsNjRjSUg0ek5O
emNuSXNGb3ZMNVRLYnpYbDVlWHo3OFBEd2dRTUhDZ29LUXE4NlZDUW5KNXZOWnJmYjNkYldK
cG9oUFhiczJKdzVjeVRYOGpab1VYQmFpazRQUXNoWFgzMlZrWkZSWFYwOU5qYm1iUzF2Zlh5
TW9TcGdSNE50OFFaNzdFNm5VMmgzRXlLMDgrbGpZMlBIamgzVDYvWDB6MW16WmdrenRhS2lv
cWFtSm1IcEE3YUY0N2kzM25xTDV1bjUrZm5DZGgrUFk2ZlFSRWlwcjY4dkxTM2wvM3p3d1Fj
M2JkcmtjcmsyYmRyMCs5Ly9YbktWcEtRa2k4WGlkcnRiV2xyb2ZQcWpqejdhMDlQamNya2FH
aHBVL2VINnZ2dnU0ejJkZCtmeDhmSFRwMDh2WExpUWxzUmg4VFpvVVhCYWlrNlB1cnE2b3FL
aUw3Lzgwc2Nxa24zOGpxRXFFSTJHWkF1TDVMRmZ2MzU5NjlhdFJVVkZnU2tKbGFmVFhEc3VM
bTcrL1BsdnZQRUdiWHp6elRmMWVqM2YvOHlaTTh1WEwwOUlTT0RueDlrV2ZqNDlKeWVubzZP
RDM3THcyMkhXMHlVTFRZQ0pzbXpaTWpySlFMSFpiTXVXTGFOZjAvZjA5TkJHMGF0ZlgxOVB5
OUhObnorL29hR0JFUEx1dSs5bVpHUm90ZHFDZ2dLTHhSSk8vY0dsdTd0NzJiSmxXcTNXYURR
Mk5qYVNuMC9GOVBUMDlldlh1MXd1MmswMElPeWdzU2V3U2hHZEhxTGpHaG9hSXN4b3NIMGt4
MUNOaUVaRHNrVnlOSVRIVGx0dXV1bW01Y3VYbnoxN05qQWxZYjJXTVFBbXMzRVVtZ0FBeEJx
Ui9qdlNnRDJkUTZFSkFFRHNFZW1lRGdBQVFEN3dkQUFBaUI2aXpkTlYvYVVUQUFCTWttaXI5
d0pQRHgxeTZyMndmZVNzcFZJd0lFSXdHa0lVSEkwSmUvb3BKdURwTVlLY2VpOXNIemxycVJR
TWlCQ01oaEFGUnlOVW5zN1dlMkh6K2krLy9ITEJnZ1ZhclhiQmdnWDBad2djVTkyRmJXRnJ3
bGl0VmxyZHBiS3lFcDRlT3VUVWUySDd5RmxMcFdCQWhHQTBoQ2c0R3FIeWREbjFYdkx5OHVo
dlJHdHJheGNzV0VDa3FydXdMV3hObVB6OC9McTZPb2ZEVVZOVEEwOFBIWExxdmJCOTVLeWxV
akFnUWpBYVFoUWNqVkI1dXB4Nkx4cU5obFpsR1I0ZTFtcTFSS3E2QzlzaVdTV0czdzQ4UFhU
SXFmZkM5cEd6bGtyQmdBakJhQWhSY0RSQ081OHVxdmNTSHg4dkxDQXBtYWVMcXJ1d0xXeE5t
SUtDQXBxbjE5Yld3dE5EaDV4Nkwyd2ZPV3VwRkF5SUVJeUdFQVZISTFTZVR2Tm9VYjJYRFJz
MjBGb3U5TS8yOXZhOHZEeU5ScE9YbHllYVR4ZFdkeEcxc0RWaE9qbzZhSFdYcXFvcWVIcm9r
RlB2aGUwanVWWjBnQUVSZ3RFUW91Qm9SRmE5RjNaVDhHZ0FBSkJQWlAzbUNKNE9BQUNUSWJJ
OEhRQUF3R1NBcHdNQVFQUVFXWjd1YmFZRk16QUFBQ0NIU1ArT0ZFUU9LT2doQWdNaUJLTWhS
RTMxWHQ1bEFwNGVJNkNnaHdnTWlCQ01oaEExMVh1UjZlbkNMSDdxMUtuRVMzV1hwVXVYbHBl
WFoyUmtsSmVYMDVhcXFxckV4RVMrdWd1L0tYN0xiTDBYRUI1UTBFTUVCa1FJUmtPSW11cTlU
Q2hQcjZtcG1UNTlPblZ3eVYrTmRuVjEwU1gxZldGMWw0S0NBdUYrK2Nkc3ZSY1FIbERRUXdR
R1JBaEdRNGlhNnIzSTkvVDYrdnJrNU9Uang0L1RQeVdydTdCTFVYVVhmci84WTdiZUN3Z1BL
T2doQWdNaUJLTWhSRTMxWG1SNmVuTno4NHdaTS9qNUUrSWxUMmVYZkhVWFdvV1IzeS8vbUsz
M0FzSURDbnFJd0lBSXdXZ0lVVk85RjVtZXJ0ZnJSUmZHU0ZaM1laZDhkUmUrZnJwb08yeTlG
eEFlVU5CREJBWkVDRVpEQ09xOUFBQUFDQUtSOVpzakFBQUFrd0dlRGdBQTBRTThIUUFBb29k
d2VIcGdFKzZZcGdjQWdJa1NqdTlJNGVuUkFRcDZpTUNBQ01Gb0NGRlR2WmNiVE1EVFl3UVU5
QkNCQVJHQzBSQ2lwbm92TWozZGFyWG01ZVVsSkNSVVZsYlNEbXlkRnByamE3WGFSWXNXdGJX
MVNhNEZJZ2NVOUJDQkFSR0MwUkNpcG5vdk1qMDlQeisvcnE3TzRYRFUxTlRRRHQ3cXRIZzhu
dmIyOWxtelprbXVCU0lIRlBRUWdRRVJndEVRb3FaNkx6STlYYXZWOHRWZGFBZTJUc3VlUFh1
TVJtTmNYQnpmd3E0RklnY1U5QkNCQVJHQzBSQ2lwbm92TWoyOW9LQ0FadHkxdGJXMEExdW5K
U0Vob2JtNTJlRndtTTFtMm9kZEMwUU9LT2doQWdNaUJLTWhSRTMxWG1SNmVrZEhSMDVPVGtK
Q1FsVlZsYmM2TFMrKytLTEJZREFZRER0MjdLQXQ3Rm9nY2tCQkR4RVlFQ0VZRFNHbzl3SUFB
Q0FJNEhla0FBQVFQY0RUQVFBZ2VvQ25Bd0JBOUJDSm5vNEplZ0FBQ0F4OFJ3cmtnb0llSWpB
Z1FqQWFRdFJVNzRYNzZDTnh3Tk5qQXhUMEVJRUJFWUxSRUtLbWVpOHlQWjM3K2M2aXVibTV3
anVMQ3F1N2RIWjIwdW91MWRYVi9FWkVpVC9IY2ErKyttcEtTa3B5Y3ZMZXZYdTlyUVhDQUFw
NmlNQ0FDTUZvQ0ZGVHZSZjVubDViVyt0d09PcnE2Z29MQy9sMllYV1hoUXNYdnZIR0c4UER3
M3YzN2hYNXVQRHhuajE3SEE1SGMzTXpQVWh2YTRGUWc0SWVJakFnUWpBYVF0UlU3MFcrcDlQ
S0xRNkhRNmZURVovVlhSd09odzlQSHgwZEZiWjdXd3VFR2hUMEVJRUJFWUxSRUtLbWVpL3lQ
ZjJ0dDk2aWVYcCtmajZScXU1U1dGajQ1cHR2T2h5T3Q5OSsyNGVuaXg1N1d3dUVHaFQwRUlF
QkVZTFJFS0ttZWk4VG5VL1B5Y25wNk9nZ1V0VmRyRllycmU2eWNlUEd1TGc0d2x4WFE2UThu
VjBMaEFjVTlCQ0JBUkdDMFJBU2hmVmU1R2ZRWTJOalI0NGN5YzNOblpEdXdOWUNBSURvSmxT
L09aTHA2WFJ1UFRNejg5TlBQNTNReGdOWUN3QUFvcDVJL0IwcEFBQ0F3SUNuQXdCQTlLQzhw
MGYrdFN2ZXJzTWhnaThZd2k0S0FBQWtVRUc5bDNBNnB0OTlUZklMWVZXRGdoNGlZbWRBMkhj
NjJ5TG51Qm9iRzQxR0k3MnVvN3U3VzNJNzBVRmpZMk4rZm41OGZQeVNKVXMrLy94emIzMjhq
UWJIY2FtcHFZSHRldUwzcm1zVUJ6dzkrczVJU1ZEUVEwU3NEUWg3bmd0YjVCeFhhbXBxVzF1
YjIrMDJtODMzMzMrL2p5MnJIWlBKZE9yVUtaZkxkZmp3NFprelowcjI4VFlhaEpDbm5ucHEw
NlpOZ2UwNlZKN096bGR3VE9VV0lxTzZDL3RwNFBUcDB5VWxKVHFkTGpzN20vOEh5SEZjVlZX
VlhxOWZ2SGl4Wkl1a0hzbUtOSkw1aVBEUHFxcXF4TVJFZmkzQ25KR1NDcU1BRlBRUUVXc0Q0
dHZUWlk3R3h4OS9URjBzSlNWRmNqc2N4eTFkdXJTOHZEd2pJNk84dkR5SStzT1B3K0ZvYUdq
d2RzbTF0OUc0Y3VWS2NuSnlmMzkvWURzTnE2ZUxLcmRJOW1UN2lMYS9aTW1TOTk1N3orVnl0
YlMwWkdkbjgzMWVlZVdWNGVIaEo1OThVckpGVWc5YmtVYk9zZkJyRlJRVXlGY1lCYUNnaDRo
WUd4RGZuaTdudU9ycjYrZk9uWnVZbUxoeDQwWmhIOUZickt1cml5Nm5UcDBhMUNNSUsvd1V5
bGRmZlNYWndkdG83Tml4WTgyYU5RSHZOK1NlUGpvNnludW9xSEtMNUdPMmoyajdXcTJXejZa
cDNSamFaMlJrUkNSQTJDS3BSMVNSaHQyWHBFSy9hMGtxakFKUTBFTkVyQTJJM3p4ZC9uRWRP
M1pzenB3NWt0dmgzNTZTZTFRWHc4UERCdzRjNEpNL2J3aEhZM1IwZE42OGVaMmRuUUh2TkZT
ZW5wYVdkdlRvVWFmVCtmcnJyN012ejRRZXg4ZkgyMncydnIyb3FLaXBxY25wZElxRXNWTDk2
aEZWcEdIM0phbUtYNHZQN21mTm1pWDhWeXlwTUFwQVFROFJzVFlndnQ5bE1vOXJmSHo4OU9u
VEN4Y3VyS3lzbE54T2RIajZvNDgrMnRQVDQzSzVHaG9haFBNcUl0alJxSyt2THkwdG5jeXVR
K1hwdGJXMUJvTWhKU1ZsOSs3ZDNqeWQreVdTZlFnaEd6WnNTRWhJNFA4OGMrYk04dVhMYVl1
M1hKNXRrZFFqcWtqRDdrdFNJYjhXUDUvKzVwdHY2dlY2M3dxakFCVDBFQkU3QXlMNVJoQzF5
QmtOMmprOVBYMzkrdlV1bDh2YmxvbjZQZjNkZDkvTnlNalFhclVGQlFVV2k0VTIraDBOUXNp
eVpjc09Ianc0bVYycjRGckdFS0ZTMlFBQTRBUGxmM09rRlBCMEFFRDBFYnVlRGdBQTBRYzhI
UUFBb2dmMWVicms5d3lZU0FFQUFLTEc3MGdsZHdkUER3TnlYbTYyai9BOENiaUVSZmhoYTNG
SXRtUm1abW8wbXN6TXpNT0hEOHZjVHJSbUlYS095MXRObUczYnRrWFpnT3pidHk4ckswdW4w
OTE2NjYzSGpoMlQ3QlBZR2VXWENYdDYxbzBzVWNEVFl3bzVReTNaWnpJbExNSVBXNHVEYlRF
WURDMHRMUzZYeTJLeEdBd0dtZHVoUk9zWjYvdTRKR3ZDZlBQTk4rbnA2VkUySUwvNzNlKysv
ZlpicDlPNWI5OCtINzlIQytDTThrc0lQWjJUVVhHRnJlNGlXZTlGcTlVdVdyU29yYTJOMzJ4
c1ZseUpCQUx6OUVtV3NBZy9iQzBPdG1YUm9rV3RyYTF1dC92bzBhTzMzbnFyek8xUVJHK0hx
S2x3NHZ2MFlHdkN1Rnl1Z29LQ1AvLzV6MUhtNlR4OWZYMDZuVTcwSzNkS1lHZVVYMExyNlg0
cnJvaXF1N0F0RkkvSDA5N2VQbXZXTEJMYkZWY2lnY0E4ZlpJbExNSVBXNHVEYmJGYXJjbkp5
UnpISlNjbmUvc3hkMHhWT0NIK1RnKzJKc3l6eno1TGYzUWFsWjcrNDQ4L0ZoVVZQZlBNTTVM
UEJuWkcrU1cwbnU2MzRvcW91Z3Zic21mUEhxUFJHQmNYeC8xY080V0w0WW9ya1VBQW5qNzVF
aFlLSXFwTUltekp5Y214V0N3dWw4dHNOdWZsNVUxb081SXBEbEcvdGZuTjAwVTFZZWhiT3lx
L1kvanFxNjh5TWpLcXE2dkh4c1o4OXd6c2pQSkdhRDFkK0tlY0NqQnNTMEpDUW5OenM4UGhN
SnZOZkorWXJiZ1NDUVRnNlpNdllhRUliQzBPVVV0U1VwTEZZbkc3M1MwdExUNW1QMk9rd2du
RnQzNGZOV0hVZnVBaTZ1cnFpb3FLdnZ6eVM5L2RBanVqZkJNK1Q1ZFpBVWJVOHVLTEx4b01C
b1BCc0dQSERyNVB6RlpjVVJidWwvQ05mdnRNdm9SRitLSDYyY29rd3BiNitucjZJWEwrL1Br
TkRRMzhpbksySXh5aTZQQjBPYWVIajFvMzZqMXdTVVNqTVRRMFJHU2NHNUpuMUVSUjM3V01B
QUFBdktHKzN4d0JBQUR3Qmp3ZEFBQ2lCM2c2QUFCRUR4SHQ2Wml2QndDQUNSSEM3MGpsZUhH
dytvQ2dJM3g5YVowV09TVXMySUllM2twOHFBNTJRT1RrSE96aFIwZW13bzVHWTJOamZuNStm
SHo4a2lWTGZQOTRtNjN1b3ZaNkw1S2pJYXJsd3VLdHp5UkhZOEtlYm1XQXAwYzNmSjBXT1NV
czJJSWVraVUrVkkyb2NJM3Y4OVBiNFVmTldjMlBoc2xrT25YcWxNdmxPbno0OE15Wk03MzFa
NnU3UkZPOUYzNDB2Tlg1RVNMWlovS2pFU3BQWjdQNEw3Lzhjc0dDQlZxdGRzR0NCZlJTZkxZ
UGZTeXM3a0tpNk94WEk1SjFXbnlYc0JBVjlHQmJWQTA3SUw3UFQyK0hIeDFuTlRzYURvZWpv
YUVoTnpkWHNqOWIzU1dhNnIwSVI4TmJuUjhoYkorZ2pFYjQ4dlM4dkR6Nis4L2EydG9GQ3ha
STlxRUlxN3Q0NndQQ0ExdW54WGNKQzdhZ0I5dWlhdGdCOFgxK2Vqdjg2RGlyUmFQQlR6NElm
OVF0aEszdUVrMzFYb1NqNGEzT2p4QzJUMUJHSTN5ZXJ0Rm9hSjJXNGVGaHJWWXIyWWV0N3NM
MkFXR0RyZFBpdDRRRlc5Q0RiVkV2a29Wci9PYnBrb2NmQldlMTVHZ01EdzhmT0hDQUw2NG5n
cTN1RWpYMVhyd1ZOV0xyQmJId2ZZSXlHaUgwOVBqNGVKdk54djhwbWFlTCtyRFZYUWhUeXdX
RURWR2RGamtsTE5pQ0hqNUtmS2dPeWNJMXZ0OTczZzVmMWY1RkVZM0dvNDgrMnRQVDQzSzVH
aG9hdk0wMjhMQ0hyL1lCWWM4TnlUby9JcnoxaWRBOGZjT0dEYlRpQ3YyenZiMDlMeTlQbzlI
azVlWHh2aURxdzFaM0lVd3RGeEEyUkhWYXVGOGlXY0tDTGVqaG84U0g2dkE5SUh5amNCWDI4
Q1hYVWlPaTBYajMzWGN6TWpLMFdtMUJRWUhGWXFHTk1qL0UrK2lwRmlUUERXRXRGeUtqM292
d3FZQ1ZvTjRMQUFCRUR4SDlteU1BQUFBVEFwNE9BQURSQXp3ZEFBQ2lCM2c2QUJFTnZxOENF
d0tlRG9BRUFUdHAwQzNZeHdhRHNpK080MTU1NVJWQ3lNc3Z2enlaRFhJY3QzUG56c2tMWThz
S05UWTJabVptYWpTYXpNek13NGNQZTl1NzZIb05sOHYxOU5OUDA5L1plOVBEMXFpUmMra0hX
OE5IVHEwYjlyamsxQUlLNERvVWVEb0FFc1NVcCtmbDVZMlBqK2ZtNWs3UzAzTnljcTVmdno1
SllXeFpJWVBCME5MUzRuSzVMQmFMNzd0MEN2ZGJXVm01ZVBIaVU2ZE9qWStQZSt2UDFxaVJv
NXl0NFNPbjFnMTdYUEpyQWNIVEFaZ3NrdThyN3BmRmlGNTc3VFdqMGFqUmFQaE1TazZXSjhy
Q2lPQVd1N201dWZRV3UxYXJOUzh2THlFaG9iS3lVcmhsNGQ3WmZaMCtmYnFrcEVTbjAyVm5a
L1Bab2w4NzREanV0dHR1MjdwMTYrMjMzMDQ3UzVabWV2WFZWMU5TVXBLVGsvZnUzZXR0Tzl1
MmJYdnBwWmY0bmJMYldieDRNUlhmMnRwNjY2MjMraGJHbHhWYXRHaFJhMnVyMiswK2V2U283
N1dFQnp0Nzl1elBQdnZNUndjZVlZMGFqdU1NQm9OZXI3L25ubnY0bjBPSzF2Sld3OGQzclJ2
MnVPVFhBb0tuQXpCWnZMMkxoTVdJcGs2ZHVtM2J0bE9uVHJuZGJyOHJTbmJnL2JxMnR0Ymhj
TlRWMVJVV0ZoSkM4dlB6NitycUhBNUhUVTJOc0wvdlVraExsaXg1NzczM1hDNVhTMHRMZG5h
Mi9DUGR2MzkvWEZ6Y2dRTUg2QWJabjN4ekhMZG56eDZIdzlIYzNPeXR3QVBIY1VORFExbFpX
VmV1WFBHMm5kZGVlNjJpb29JUVVsNWV2bnYzYmgrcWhHV0ZyRlpyY25JeXgzSEp5Y25zais5
Rkd2akhHbzJtdXJwYXI5ZlBtemZQeHkzTzZUOUZVWTJhaXhjdlZsWldGaGNYUzY0aVdjTkhj
anUrajB0K0xTQjRPZ0NUaFgwWHNjV0lQdnJvbzN2dnZUYzdPM3ZhdEdsLy9PTWZ2YTNvYmN1
am82TzhwOU5TU0E2SFE2ZlRFVUswV2kxZkhJbjJrVk1LU2F2VjhwazczMmRDUjBvZnM2V1pP
STRiSFIzMWZZQzBmZnYyN2M4Ly83eTM3Vnk2ZE1sZ01KdzdkODVnTUZ5K2ZObWJKRkZab1p5
Y0hJdkY0bks1ekdaelhsNmV6R05KVGs0Mm04MXV0N3V0clkzV05QZUdaSTBhcDlOSlh3c1di
elY4Zk5lNllZOUxmaTBnZURvQWs0VjlGMGtXSXlLRWpJMk5IVHQyVEsvWDB6OUZKWXhZMHRM
U2poNDk2blE2WDMvOWRkN1RhVDViVjFlWG41OVBDQ2tvS0tCNWVtMXRMZTBqdVhmUnZvcUtp
cHFhbXB4T1o4Qkg2aU5QOXpFeXd2Ymg0ZUg1OCtkNzJ3NGh4R1F5L2VwWHZ5b3ZML2VtaHkw
cmxKU1VaTEZZM0c1M1MwdUwvUG4wKys2N2ovZDBiNTh0dk5Xb3VYNzkrdGF0VzR1S2lpVFhZ
bXY0eUtsMXd4NlgvRnBBOEhRQUpndjNTNGhVTVNMNlZGeGMzUHo1ODk5NDR3MjZvcWlFRVV0
dGJhM0JZRWhKU2RtOWU3ZG9QajBuSjZlam80TVEwdEhSa1pPVGs1Q1FVRlZWNVczdjdMN09u
RG16ZlBseTJzSTNCakFYeEpabWt1L3BoSkNkTzNkNjJ3NGhwTFcxbGVPNDF0WldIM3FFREEw
TjFkZlgwODhvOCtmUGIyaG9rTE1XSWFTN3UzdlpzbVZhcmRab05EWTJOa3FLWjJ2VTBOVnZ1
dW1tNWN1WG56MTdWbkl0dG9hUFpLMGJ2OGNscHhZUTIrSVhlRG9BQ2pPaExBd0EzOERUQVZB
WWVEb0lJdkIwQUFDSUh1RHBBQUFRUGNEVEFRQWdlb0NuQXdCQTlBQlBCK3FncWFtcHViblo0
L0UwTnpjM05UWEpYTVgzczk0NkRBOFBtODFteWY0KzFnSWdFb0NuQTNYUTFOVDB4UmRmZlAv
OTkzLzV5MStDNWFyZXR2UDExMSt6VDhIS2dTcUFwd04xME5UVWRPYk1HWXZGY3ViTUdkNWVS
USthbXBxNnVyb3NGc3ZwMDZlOU5ZcTJ5ZTdvK3ZYcnJhMnRrcDV1c1ZnKy92ampnWUdCb0I0
WkFNRUVuZzdVUVZOVDA2VkxsL2dsM3loODBOVFVkUG55NWVIaFlmcGJQc2xHMFRiWkhmMzFy
My90N3U2V2ZHcDhmSHhnWU9EbzBhUEJPeXdBZ2d3OEhhaURwcWFtOGZIeFR6NzVaSHg4bkRk
Y2k4VXlQRHpNdXp4cjhXeWphSnVTTy9JMmJ6NCtQbjdod2dWNE9vaGs0T2xBSFFnZGxuOTgr
dlJwaThYUzFkVVZnS2VMakp0OWxuM1ExTlQwOGNjZm56OS9QcGdIQmtCUWdhY0RBRUQwQUU4
SEFJRG9BWjRPQUFEUkF6d2RBQUNpQjNnNkFBQkVEL0IwQUFDSUh2N1AwNjFXNjM0QUFBRHFo
NE9oQXdCQTFQRC9BWjRFWUVWMjZ4WHVBQUFBQUVsRlRrU3VRbUNDIiAvPjwvcD48cD4mbmJz
cDs8L3A+PHA+SWYgeW91IG5lZWQgb3RoZXIgY2hhcnRzLCBJIGNhbiB0cnkgdG8gcHJvZHVj
ZSB0aGVtLiA8L3A+PHA+Jm5ic3A7PC9wPjxwPkJSLDxiciAvPkNhcnN0ZW4uPC9wPjxwPiZu
YnNwOzwvcD48YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMzI1
RkJBOyBwYWRkaW5nLWxlZnQ6IDVweDttYXJnaW4tbGVmdDo1cHg7Ij4tLS0tLVVyc3ByJnV1
bWw7bmdsaWNoZSBOYWNocmljaHQtLS0tLTxiciAvPjxzdHJvbmc+QW46PC9zdHJvbmc+CUNh
cnN0ZW4gU2NoaWVycyAmbHQ7Y2Fyc3RlbkBzY2hpZXJzLmRlJmd0Ozsgemhlbnpob25nLmR1
YW5Ab3JhY2xlLmNvbTsgbGVyc2VrQHJlZGhhdC5jb207IDxiciAvPjxzdHJvbmc+Q0M6PC9z
dHJvbmc+CXhlbi1kZXZlbCAmbHQ7eGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20mZ3Q7
OyBrb25yYWQud2lsayAmbHQ7a29ucmFkLndpbGtAb3JhY2xlLmNvbSZndDs7IDxiciAvPjxz
dHJvbmc+Vm9uOjwvc3Ryb25nPglLb25yYWQgUnplc3p1dGVrIFdpbGsgJmx0O2tvbnJhZEBk
YXJub2sub3JnJmd0OzxiciAvPjxzdHJvbmc+R2VzZW5kZXQ6PC9zdHJvbmc+CU1vIDI4LjEx
LjIwMTEgMTY6MzM8YnIgLz48c3Ryb25nPkJldHJlZmY6PC9zdHJvbmc+CVJlOiBbWGVuLWRl
dmVsXSBMb2FkIGluY3JlYXNlIGFmdGVyIG1lbW9yeSB1cGdyYWRlIChwYXJ0Mik8YnIgLz5P
biBGcmksIE5vdiAyNSwgMjAxMSBhdCAxMToxMTo1NVBNICswMTAwLCBDYXJzdGVuIFNjaGll
cnMgd3JvdGU6PGJyIC8+Jmd0OyBJIGdvdCB0aGUgdmFsdWVzIGluIERvbVUuIEkgd2lsbCBo
YXZlPGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7ICZuYnNwOyAtIGFwcm94LiA1JSBsb2FkIGluIERv
bVUgd2l0aCAyLjYuMzQgWGVuaWZpZWQgS2VybmVsPGJyIC8+Jmd0OyAmbmJzcDsgLSBhcHJv
eC4gMTUlIGxvYWQgaW4gRG9tVSB3aXRoIDIuNi4zMi40NiBKZXJlbXkgb3IgMy4xLjIgS2Vy
bmVsIHdpdGggb25lIGNhcmQgYXR0YWNoZWQ8YnIgLz4mZ3Q7ICZuYnNwOyAtIGFwcm94LiAz
MCUgbG9hZCBpbiBEb21VIHdpdGggMi42LjMyLjQ2IEplcmVteSBvciAzLjEuMiBLZXJuZWwg
d2l0aCB0d28gY2FyZHMgYXR0YWNoZWQ8YnIgLz48YnIgLz5IQSE8YnIgLz48YnIgLz5JIGp1
c3Qgd29uZGVyIGlmIHRoZSBpc3N1ZSBpcyB0aGF0IHRoZSByZXBvcnRpbmcgb2YgQ1BVIHNw
ZW50IGlzIHdyb25nLjxiciAvPkxhc3psbyBFcnNlayBhbmQgWmhlbnpob25nIER1YW4gaGF2
ZSBib3RoIHJlcG9ydGVkIGEgYnVnIGluIHRoZSBwdm9wczxiciAvPmNvZGUgd2hlbiBpdCBj
YW1lIHRvIGFjY291bnQgb2YgQ1BVIHRpbWUuPGJyIC8+PGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7
IEkgbG9va2VkIHRocm91Z2ggbXkgb2xkIG1haWxzIGZyb20geW91IGFuZCB5b3UgZXhwbGFp
bmVkIGFscmVhZHkgdGhlIG5lY2Vzc2l0eSBvZiBkb3VibGU8YnIgLz4mZ3Q7IGJvdW5jZSBi
dWZmZXJpbmcgKFBDSS0mZ3Q7YmVsb3cgNEdCLSZndDthYm92ZSA0R0IpLiBXaGF0IEkgZG9u
JiMzOTt0IHVuZGVyc3RhbmQgaXM6IHdoeSBkb2VzIHRoZTxiciAvPiZndDsgWGVuaWZpZWQg
a2VybmVsIG5vdCBoYXZlIHRoaXMga2luZCBvZiBpc3N1ZT88YnIgLz48YnIgLz5UaGF0IGlz
IGEgcHV6emxlLiBJdCBzaG91bGQgbm90LiBUaGUgY29kZSBpcyB2ZXJ5IG11Y2ggdGhlIHNh
bWUgLSBib3RoPGJyIC8+dXNlIHRoZSBnZW5lcmljIFNXSU9UTEIgd2hpY2ggaGFzIG5vdCBj
aGFuZ2VkIGZvciB5ZWFycy48YnIgLz4mZ3Q7IDxiciAvPiZndDsgVGhlIGRyaXZlciBpbiBx
dWVzdGlvbiBpcyBuZWFybHkgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHR3byBrZXJuZWwgdmVy
c2lvbnMuIEl0IGlzIGluPGJyIC8+Jmd0OyBEcml2ZXJzL21lZGlhL2R2Yi90dHBjaSBieSB0
aGUgd2F5IGFuZCB3aGVuIEkgdW5kZXJzdG9vZCB0aGUgY29kZSByaWdodCwgdGhlIGFsbG8g
aW4gPGJyIC8+Jmd0OyBxdWVzdGlvbiBpczo8YnIgLz4mZ3Q7IDxiciAvPiZndDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC8qIGFsbG9jYXRlIGFuZCBpbml0IGJ1ZmZlcnMgKi88
YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBhdjcxMTAtJmd0O2RlYmlf
dmlydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIDgxOTIsICZhbXA7YXY3MTEwLSZn
dDtkZWJpX2J1cyk7PGJyIC8+PGJyIC8+R29vZC4gU28gaXQgYWxsb2NhdGVzIGl0IGR1cmlu
ZyBpbml0IGFuZCB1c2VzIGl0LjxiciAvPiZndDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IGlmICghYXY3MTEwLSZndDtkZWJpX3ZpcnQpPGJyIC8+Jmd0OyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGdvdG8gZXJyX3Nh
YTcxNDY2X3ZmcmVlXzQ7PGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7IGlzbiYjMzk7dCBpdD8gSSB0
aGluayB0aGUgY2FyZHMgYXJlIGNvbnN0YW50bHkgdHJhbnNmZXJyaW5nIHRoZSBzdHJlYW0g
cmVjZWl2ZWQgdGhyb3VnaCBETUEuIDxiciAvPjxiciAvPlllYWgsIGFuZCB0aGF0IG1lbW9y
eSBpcyBzZXQgYXNpZGUgZm9yIHRoZSBsaWZlIG9mIHRoZSBkcml2ZXIuIFNvIHRoZXJlPGJy
IC8+c2hvdWxkIGJlIG5vIGJvdW5jZSBidWZmZXJpbmcgaGFwcGVuaW5nIChhcyBpdCBhbGxv
Y2F0ZWQgdGhlIG1lbW9yeTxiciAvPmJlbG93IHRoZSA0R0IgbWFyaykuPGJyIC8+Jmd0OyA8
YnIgLz4mZ3Q7IEkgaGF2ZSBzZXQgZG9tMF9tZW09NTEyTSBieSB0aGUgd2F5LCBzaGFsbCBJ
IGNoYW5nZSB0aGF0IGluIHNvbWUgd2F5PzxiciAvPjxiciAvPkRvZXMgdGhlIHJlcG9ydGlu
ZyAoQ1BVIHVzYWdlIG9mIERvbVUpIGNoYW5nZSBpbiBhbnkgd2F5IHdpdGggdGhhdD88YnIg
Lz4mZ3Q7IDxiciAvPiZndDsgSSBjYW4gdHJ5IG91dCBzb21lIHRoaW5ncywgaWYgeW91IHdh
bnQgbWUgdG8uIEJ1dCBJIGhhdmUgbm8gaWRlYSB3aGF0IHRvIGRvIGFuZCB3aGVyZSB0bzxi
ciAvPiZndDsgc3RhcnQsIHNvIEkgcmVseSBvbiB5b3VyIGhlbHAuLi48YnIgLz4mZ3Q7IDxi
ciAvPiZndDsgQ2Fyc3Rlbi48YnIgLz4mZ3Q7IDxiciAvPiZndDsgLS0tLS1VcnNwcj9uZ2xp
Y2hlIE5hY2hyaWNodC0tLS0tPGJyIC8+Jmd0OyBWb246IHhlbi1kZXZlbC1ib3VuY2VzQGxp
c3RzLnhlbnNvdXJjZS5jb20gW21haWx0bzp4ZW4tZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5z
b3VyY2UuY29tXSBJbSBBdWZ0cmFnIHZvbiBLb25yYWQgUnplc3p1dGVrIFdpbGs8YnIgLz4m
Z3Q7IEdlc2VuZGV0OiBGcmVpdGFnLCAyNS4gTm92ZW1iZXIgMjAxMSAxOTo0MzxiciAvPiZn
dDsgQW46IENhcnN0ZW4gU2NoaWVyczxiciAvPiZndDsgQ2M6IHhlbi1kZXZlbDsga29ucmFk
LndpbGs8YnIgLz4mZ3Q7IEJldHJlZmY6IFJlOiBbWGVuLWRldmVsXSBMb2FkIGluY3JlYXNl
IGFmdGVyIG1lbW9yeSB1cGdyYWRlIChwYXJ0Mik8YnIgLz4mZ3Q7IDxiciAvPiZndDsgT24g
VGh1LCBOb3YgMjQsIDIwMTEgYXQgMDE6Mjg6NDRQTSArMDEwMCwgQ2Fyc3RlbiBTY2hpZXJz
IHdyb3RlOjxiciAvPiZndDsgJmd0OyBIZWxsbyBhZ2FpbiwgSSB3b3VsZCBsaWtlIHRvIGNv
bWUgYmFjayB0byB0aGF0IHRoaW5nLi4uc29ycnkgdGhhdCBJIGRpZCBub3QgaGF2ZSB0aGUg
dGltZSB1cCB0byBub3cuPGJyIC8+Jmd0OyAmZ3Q7IDxiciAvPiZndDsgJmd0OyA/PzxiciAv
PiZndDsgJmd0OyBXZSAobm93KSBzcGVhayBhYm91dDxiciAvPiZndDsgJmd0OyA8YnIgLz4m
Z3Q7ICZndDsgPz88YnIgLz4mZ3Q7ICZndDsgKglYZW4gNC4xLjI8YnIgLz4mZ3Q7ICZndDsg
KglEb20wIGlzIEplcmVteSYjMzk7cyAyLjYuMzIuNDYgNjQgYml0PGJyIC8+Jmd0OyAmZ3Q7
ICoJRG9tVSBpbiBxdWVzdGlvbiBpcyBub3cgMy4xLjIgNjQgYml0PGJyIC8+Jmd0OyAmZ3Q7
ICoJU2FtZSB0aGluZyBpZiBEb21VIGlzIGFsc28gMi42LjMyLjQ2PGJyIC8+Jmd0OyAmZ3Q7
ICoJRG9tVSBvd25zIHR3byBQQ0kgY2FyZHMgKERWQi1DKSB0aGF0IG8gRE1BPGJyIC8+Jmd0
OyAmZ3Q7ICoJTWFjaGluZSBoYXMgOEdCLCBEb20wIHBpbm5lZCBhdCA1MTJNQjxiciAvPiZn
dDsgJmd0OyA8YnIgLz4mZ3Q7ICZndDsgPz88YnIgLz4mZ3Q7ICZndDsgQXMgY29tcGFyZWQg
dG8gMi42LjM0IEtlcm5lbCB3aXRoIGJhY2twb3J0ZWQgcGF0Y2hlcywgdGhlIGxvYWQgb24g
dGhlIERvbVUgaXMgYXQgbGVhc3QgdHdpY2UgYXMgaGlnaC4gSXQ8YnIgLz4mZ3Q7ICZndDsg
PGJyIC8+Jmd0OyAmZ3Q7IHdpbGwgYmUgJnF1b3Q7Y2xvc2UgdG8gbm9ybWFsJnF1b3Q7IGlm
IEkgcmVkdWNlIHRoZSBtZW1vcnkgdXNlZCB0byA0R0IuPGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7
IFRoYXQgaXMgaW4gdGhlIGRvbTAgb3IganVzdCBpbiBnZW5lcmFsIG9uIHRoZSBtYWNoaW5l
PzxiciAvPiZndDsgJmd0OyA8YnIgLz4mZ3Q7ICZndDsgPz88YnIgLz4mZ3Q7ICZndDsgQXMg
eW91IGNhbiBzZWUgZnJvbSB0aGUgYXR0YWNobWVudCwgeW91IG9uY2UgaGFkIGFuIGlkZWEu
IFNvIHNob3VsZCB3ZSB0cnkgdG8gZmluZCBzb21ldGhpbmcuLi4/PGJyIC8+Jmd0OyA8YnIg
Lz4mZ3Q7IEkgdGhpbmsgdGhhdCB3YXMgdG8gaW5zdHJ1bWVudCBzd2lvdGxiIHRvIGdpdmUg
YW4gaWRlYSBvZiBob3c8YnIgLz4mZ3Q7IG9mdGVuIGl0IGlzIGNhbGxlZCBhbmQgYmFzaWNh
bGx5IGhhdmUgYSBtYXRyaXggb2YgaXRzIGxvYWQuIEFuZDxiciAvPiZndDsgZnJvbSB0aGVy
ZSBmaWd1cmUgb3V0IGlmIHRoZSBpc3N1ZSBpcyB0aGF0OjxiciAvPiZndDsgPGJyIC8+Jmd0
OyAmbmJzcDsxKS4gVGhlIGRyaXZlcnMgYWxsb2NvYXRlL2JvdW5jZS9kZWFsbG9jYXRlIGJ1
ZmZlcnMgb24gZXZlcnkgaW50ZXJydXB0PGJyIC8+Jmd0OyAmbmJzcDsgJm5ic3A7IChiYWQs
IGRyaXZlciBzaG91bGQgYmUgdXNpbmcgc29tZSBmb3JtIG9mIGRtYSBwb29sIGFuZCBtb3N0
IG9mIHRoZTxiciAvPiZndDsgJm5ic3A7ICZuYnNwOyBpdnR2IGRvIHRoYXQpPGJyIC8+Jmd0
OyA8YnIgLz4mZ3Q7ICZuYnNwOzIpLiBUaGUgYnVmZmVycyBhbGxvY2F0ZWQgdG8gdGhlIGRy
aXZlcnMgYXJlIGFib3ZlIHRoZSA0R0IgYW5kIHdlIGVuZDxiciAvPiZndDsgJm5ic3A7ICZu
YnNwOyB1cCBib3VuY2luZyBpdCBuZWVkbGVzc2x5LiBUaGF0IGNhbiBoYXBwZW4gaWYgdGhl
IGRvbTAgaGFzIG1vc3Qgb2Y8YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgdGhlIHByZWNpb3Vz
IG1lbW9yeSB1bmRlciA0R0IuIEhvd2V2ZXIsIHRoYXQgaXMgdXN1YWxseSBub3QgdGhlIGNh
c2U8YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgYXMgdGhlIGRvbWFpbiBpc3VzdWFsbHkgYWxs
b2NhdGVkIGZyb20gdGhlIHRvcCBvZiB0aGUgbWVtb3J5LiBUaGU8YnIgLz4mZ3Q7ICZuYnNw
OyAmbmJzcDsgZml4IGZvciB0aGF0IHdhcyB0byBzZXQgZG9tMF9tZW09bWF4OlhYLiAuLiBi
dXQgd2l0aCBEb20wIGtlcm5lbHM8YnIgLz4mZ3Q7ICZuYnNwOyAmbmJzcDsgYmVmb3JlIDMu
MSwgdGhlIHBhcmFtZXRlciB3b3VsZCBiZSBpZ25vcmVkLCBzbyB5b3UgaGFkIHRvIHVzZTxi
ciAvPiZndDsgJm5ic3A7ICZuYnNwOyAmIzM5O21lbT1YWCYjMzk7IG9uIHRoZSBMaW51eCBj
b21tYW5kIGxpbmUgYXMgd2VsbC48YnIgLz4mZ3Q7IDxiciAvPiZndDsgJm5ic3A7MykuIFdo
ZXJlIGRpZCB5b3UgZ2V0IHRoZSBsb2FkIHZhbHVlcz8gV2FzIGl0IGRvbTA/IG9yIGRvbVU/
PGJyIC8+Jmd0OyA8YnIgLz4mZ3Q7IDxiciAvPiZndDsgPGJyIC8+Jmd0OyAmZ3Q7IDxiciAv
PiZndDsgJmd0OyA/PzxiciAvPiZndDsgJmd0OyBDYXJzdGVuLjxiciAvPiZndDsgJmd0OyA/
PzxiciAvPiZndDsgJmd0OyAtLS0tLVVyc3ByPz9uZ2xpY2hlIE5hY2hyaWNodC0tLS0tPGJy
IC8+Jmd0OyAmZ3Q7IEFuOmtvbnJhZC53aWxrICZsdDtrb25yYWQud2lsa0BvcmFjbGUuY29t
Jmd0OzsgPGJyIC8+Jmd0OyAmZ3Q7IENDOmxpbnV4ICZsdDtsaW51eEBlaWtlbGVuYm9vbS5p
dCZndDs7IHhlbi1kZXZlbCAmbHQ7eGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20mZ3Q7
OyA8YnIgLz4mZ3Q7ICZndDsgVm9uOkNhcnN0ZW4gU2NoaWVycyAmbHQ7Y2Fyc3RlbkBzY2hp
ZXJzLmRlJmd0OzxiciAvPiZndDsgJmd0OyBHZXNlbmRldDpNaSAyOS4wNi4yMDExIDIzOjE3
PGJyIC8+Jmd0OyAmZ3Q7IEJldHJlZmY6QVc6IFJlOiBSZTogUmU6IEFXOiBSZTogW1hlbi1k
ZXZlbF0gQVc6IExvYWQgaW5jcmVhc2UgYWZ0ZXIgbWVtb3J5IHVwZ3JhZGU/PGJyIC8+Jmd0
OyAmZ3Q7ICZndDsgTGV0cyBmaXJzdCBkbyB0aGUgYykgZXhwZXJpbWVudCBhcyB0aGF0IHdp
bGwgbGlrZWx5IGV4cGxhaW4geW91ciBsb2FkIGF2ZXJhZ2UgaW5jcmVhc2UuPGJyIC8+Jmd0
OyAmZ3Q7IC4uLjxiciAvPiZndDsgJmd0OyAmZ3Q7ICZndDtjKS4gSWYgeW91IHdhbnQgdG8g
c2VlIGlmIHRoZSBmYXVsdCBoZXJlIGxpZXMgaW4gdGhlIGJvdW5jZSBidWZmZXIgPGJyIC8+
Jmd0OyAmZ3Q7ICZndDsgYmVpbmcgdXNlZCBtb3JlPGJyIC8+Jmd0OyAmZ3Q7ICZndDsgJmd0
O29mdGVuIGluIHRoZSBEb21VIGIvYyB5b3UgaGF2ZSA4R0Igb2YgbWVtb3J5IG5vdyBhbmQg
eW91IGVuZCB1cCB1c2luZyA8YnIgLz4mZ3Q7ICZndDsgJmd0OyBtb3JlIHBhZ2VzPGJyIC8+
Jmd0OyAmZ3Q7ICZndDsgJmd0O3Bhc3QgNEdCIChpbiBEb21VKSwgSSBjYW4gY29vayB1cCBh
IHBhdGNoIHRvIGZpZ3VyZSB0aGlzIG91dC4gQnV0IGFuIDxiciAvPiZndDsgJmd0OyAmZ3Q7
IGVhc2llciB3YXkgaXM8YnIgLz4mZ3Q7ICZndDsgJmd0OyAmZ3Q7dG8ganVzdCBkbyAob24g
dGhlIFhlbiBoeXBlcnZpc29yIGxpbmUpOiBtZW09NEcgYW5kIHRoYXQgd2lsbCBtYWtlIDxi
ciAvPiZndDsgJmd0OyAmZ3Q7IHRoaW5rIHlvdSBvbmx5IGhhdmU8YnIgLz4mZ3Q7ICZndDsg
Jmd0OyAmZ3Q7NEdCIG9mIHBoeXNpY2FsIFJBTS4gPz9JZiB0aGUgbG9hZCBjb21lcyBiYWNr
IHRvIHRoZSBub3JtYWwgJnF1b3Q7YW1vdW50JnF1b3Q7IDxiciAvPiZndDsgJmd0OyAmZ3Q7
IHRoZW4gdGhlIGxpa2VseTxiciAvPiZndDsgJmd0OyAmZ3Q7ICZndDtjdWxwcml0IGlzIHRo
YXQgYW5kIHdlIGNhbiB0aGluayBvbiBob3cgdG8gZml4IHRoaXMuPGJyIC8+Jmd0OyAmZ3Q7
IDxiciAvPiZndDsgJmd0OyBZb3UgYXJlIG9uIHRoZSByaWdodCB0cmFjay4gTG9hZCB3YXMg
Z29pbmcgZG93biB0byAmcXVvdDtub3JtYWwmcXVvdDsgMTAlIHdoZW4gcmVkdWNpbmc8YnIg
Lz4mZ3Q7ICZndDsgWGVuIHRvIDRHQiBieSB0aGUgcGFyYW1ldGVyLiBMb2FkIHNlZW1zIHRv
IGJlIHN0aWxsIGEgbGl0dGxlLCBsaXR0bGUgYml0IGxvd2VyPGJyIC8+Jmd0OyAmZ3Q7IHdp
dGggWGVuaWZpZWQgS2VybmVsICg4LTklKSwgYnV0IHRoaXMgaXMgZHJhc3RpY2FsbHkgbG93
ZXIgdGhhbiB0aGUgMjAlIHdlIGhhZDxiciAvPiZndDsgJmd0OyBiZWZvcmUuPGJyIC8+Jmd0
OyA8YnIgLz4mZ3Q7ICZndDsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX188YnIgLz4mZ3Q7ICZndDsgWGVuLWRldmVsIG1haWxpbmcgbGlzdDxiciAv
PiZndDsgJmd0OyBYZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbTxiciAvPiZndDsgJmd0
OyBodHRwOi8vbGlzdHMueGVuc291cmNlLmNvbS94ZW4tZGV2ZWw8YnIgLz4mZ3Q7IDxiciAv
PiZndDsgPGJyIC8+Jmd0OyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXzxiciAvPiZndDsgWGVuLWRldmVsIG1haWxpbmcgbGlzdDxiciAvPiZndDsg
WGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb208YnIgLz4mZ3Q7IGh0dHA6Ly9saXN0cy54
ZW5zb3VyY2UuY29tL3hlbi1kZXZlbDxiciAvPiZndDsgPGJyIC8+PGJyIC8+X19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnIgLz5YZW4tZGV2ZWwg
bWFpbGluZyBsaXN0PGJyIC8+WGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb208YnIgLz5o
dHRwOi8vbGlzdHMueGVuc291cmNlLmNvbS94ZW4tZGV2ZWw8YnIgLz48L2Jsb2NrcXVvdGU+
CjwvYm9keT4KPC9odG1sPg==
--=_NUWQF-8k01W10DsG1N5+EZa3ojZPE3HDoZ4sFFhq0eeh0y-I--
--===============7373466658977440381==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
--===============7373466658977440381==--
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Mon, 28 Nov 2011 11:45:16 -0500
Message-ID: <20111128164516.GA26664@phenom.dumpdata.com>
References:
<20111128152829.GC9655@andromeda.dapyr.net>
<1322494816.20646.14.camel@zakaz.uk.xensource.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
Content-Disposition: inline
In-Reply-To: <1322494816.20646.14.camel@zakaz.uk.xensource.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Ian Campbell
Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "lersek@redhat.com"
List-Id: xen-devel@lists.xenproject.org
On Mon, Nov 28, 2011 at 03:40:13PM +0000, Ian Campbell wrote:
> On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote:
> > On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote:
>
> > > I looked through my old mails from you and you explained already the necessity of double
> > > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the
> > > Xenified kernel not have this kind of issue?
> >
> > That is a puzzle. It should not. The code is very much the same - both
> > use the generic SWIOTLB which has not changed for years.
>
> The swiotlb-xen used by classic-xen kernels (which I assume is what
> Carsten means by "Xenified") isn't exactly the same as the stuff in
> mainline Linux, it's been heavily refactored for one thing. It's not
> impossible that mainline is bouncing something it doesn't really need
> to.
The usage, at least with 'pci_alloc_coherent' is that there is no bouncing
being done. The alloc_coherent will allocate a nice page, underneath the 4GB
mark and give it to the driver. The driver can use it as it wishes and there
is no need to bounce buffer.
But I can't find the implementation of that in the classic Xen-SWIOTLB. It looks
as if it is using map_single which would be taking the memory out of the
pool for a very long time, instead of allocating memory and "swizzling" the MFNs.
[Note, I looked at the 2.6.18 hg tree for classic, the 2.6.34 is probably
improved much better so let me check that]
Carsten, let me prep up a patch that will print some diagnostic information
during the runtime - to see how often it does the bounce, the usage, etc..
>
> It's also possible that the dma mask of the device is different/wrong in
> mainline leading to such additional bouncing.
If one were to use map_page and such - yes. But the alloc_coherent bypasses
that and ends up allocating it right under the 4GB (or rather it allocates
based on the dev->coherent_mask and swizzles the MFNs as required).
>
> I guess it's also possible that the classic-Xen kernels are playing fast
> and loose by not bouncing something they should (although if so they
> appear to be getting away with it...) or that there is some difference
> which really means mainline needs to bounce while classic-Xen doesn't.
Could be very well.
>
> Ian.
>
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Laszlo Ersek
Subject: Re: Load increase after memory upgrade (part2)
Date: Mon, 28 Nov 2011 17:58:01 +0100
Message-ID: <4ED3BD99.8050902@redhat.com>
References:
<20111128152829.GC9655@andromeda.dapyr.net>
<1322494816.20646.14.camel@zakaz.uk.xensource.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Content-Transfer-Encoding: 7bit
Return-path:
In-Reply-To: <1322494816.20646.14.camel@zakaz.uk.xensource.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Ian Campbell
Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "konrad.wilk"
List-Id: xen-devel@lists.xenproject.org
On 11/28/11 16:40, Ian Campbell wrote:
> On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote:
>> On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote:
>
>>> I looked through my old mails from you and you explained already the necessity of double
>>> bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the
>>> Xenified kernel not have this kind of issue?
>>
>> That is a puzzle. It should not. The code is very much the same - both
>> use the generic SWIOTLB which has not changed for years.
>
> The swiotlb-xen used by classic-xen kernels (which I assume is what
> Carsten means by "Xenified") isn't exactly the same as the stuff in
> mainline Linux, it's been heavily refactored for one thing. It's not
> impossible that mainline is bouncing something it doesn't really need
> to.
Please excuse me if I'm completely mistaken; my only point of reference
is that we recently had to backport
.
> It's also possible that the dma mask of the device is different/wrong in
> mainline leading to such additional bouncing.
dma_alloc_coherent() -- which I guess is the precursor of
pci_alloc_consistent() -- asks xen_create_contiguous_region() to back
the vaddr range with frames machine-addressible inside the device's dma
mask. xen_create_contiguous_region() seems to land in a XENMEM_exchange
hypercall (among others). Perhaps this extra layer of indirection allows
the driver to use low pages directly, without bounce buffers.
> I guess it's also possible that the classic-Xen kernels are playing fast
> and loose by not bouncing something they should (although if so they
> appear to be getting away with it...) or that there is some difference
> which really means mainline needs to bounce while classic-Xen doesn't.
I'm sorry if what I just posted is painfully stupid. I'm taking the risk
for the 1% chance that it could be helpful.
Wrt. the idle time accounting problem, after Niall's two pings, I'm also
waiting for a verdict, and/or for myself finding the time and fishing
out the current patches.
Laszlo
From mboxrd@z Thu Jan 1 00:00:00 1970
From: "Jan Beulich"
Subject: Re: Load increase after memory upgrade (part2)
Date: Tue, 29 Nov 2011 08:31:04 +0000
Message-ID: <4ED4A6580200007800063F87@nat28.tlf.novell.com>
References:
<20111128152829.GC9655@andromeda.dapyr.net>
<1322494816.20646.14.camel@zakaz.uk.xensource.com>
<20111128164516.GA26664@phenom.dumpdata.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
In-Reply-To: <20111128164516.GA26664@phenom.dumpdata.com>
Content-Disposition: inline
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Konrad Rzeszutek Wilk
Cc: xen-devel , Ian Campbell , "lersek@redhat.com" , "zhenzhong.duan@oracle.com" , Konrad Rzeszutek Wilk , Carsten Schiers
List-Id: xen-devel@lists.xenproject.org
>>> On 28.11.11 at 17:45, Konrad Rzeszutek Wilk wrote:
> But I can't find the implementation of that in the classic Xen-SWIOTLB.
linux-2.6.18-xen.hg/arch/i386/kernel/pci-dma-xen.c:dma_alloc_coherent().
Jan
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?utf-8?Q?Carsten_Schiers?=
Subject: Re: Load increase after memory upgrade (part2)
Date: Tue, 29 Nov 2011 10:31:02 +0100
Message-ID:
References: <4ED4A6580200007800063F87@nat28.tlf.novell.com>
Mime-Version: 1.0
Content-Type: multipart/mixed;
boundary="=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm"
Return-path:
In-Reply-To: <4ED4A6580200007800063F87@nat28.tlf.novell.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?utf-8?Q?Jan_Beulich?= , =?utf-8?Q?Konrad_Rzesz?= =?utf-8?Q?utek_Wilk?=
Cc: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?Ian_Campbell?=
List-Id: xen-devel@lists.xenproject.org
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm
Content-Type: multipart/alternative;
boundary="=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA"
--=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
I attached the actualy used 2.6.34 file here, if that helps. BR,C.=0D=0A=C2=
=A0=0D=0A-----Urspr=C3=BCngliche Nachricht-----=0D=0AAn:Konrad Rzeszutek =
Wilk ;=20=0D=0ACC:Ian Campbell ; Konrad Rzeszutek Wilk ; xen-devel ; zhenzhong.duan@oracle.com; lersek@redhat.com; Carst=
en Schiers ;=20=0D=0AVon:Jan Beulich =0D=0AGesendet:Di 29.11.2011 09:52=0D=0ABetreff:Re: [Xen-devel] Load i=
ncrease after memory upgrade (part2)=0D=0A>>> On 28.11.11 at 17:45, Konra=
d Rzeszutek Wilk wrote:=0D=0A> But I can't find =
the implementation of that in the classic Xen-SWIOTLB.=0D=0A=0D=0Alinux-2=
=2E6.18-xen.hg/arch/i386/kernel/pci-dma-xen.c:dma_alloc_coherent().=0D=0A=
=0D=0AJan=0D=0A=0D=0A
--=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
=0A=0A =0A =0A AW: [Xen-deve=
l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<=
p>I attached the actualy used 2.6.34 file here, if that helps. BR,C.
-----Ursprüngliche Nachricht-----
An:=09Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>=
;
CC:=09Ian Campbell <Ian.Campbell@citrix.com&g=
t;; Konrad Rzeszutek Wilk <konrad@darnok.org>; xen-devel <xen-de=
vel@lists.xensource.com>; zhenzhong.duan@oracle.com; lersek@redhat.com=
; Carsten Schiers <carsten@schiers.de>;
Von:=
=09Jan Beulich <JBeulich@suse.com>
Gesendet:=09=
Di 29.11.2011 09:52
Betreff:=09Re: [Xen-devel] Load=
increase after memory upgrade (part2)
>>> On 28.11.11 at 1=
7:45, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
&g=
t; But I can't find the implementation of that in the classic Xen-SWI=
OTLB.
linux-2.6.18-xen.hg/arch/i386/kernel/pci-dma-xen.c:dma_a=
lloc_coherent().
Jan
=0A=0A
--=_mpaRxkcu7CvRhUgYoUDQFC5l0pCO1fL+EfgdphTAfYTKa7HA--
--=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm
Content-Type: application/octet-stream; name=pci-dma-xen.c
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=pci-dma-xen.c
I2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiNpbmNsdWRlIDxsaW51eC9kbWEtZGVi
dWcuaD4KI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0u
aD4KI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgojaW5jbHVkZSA8bGludXgvcGNpLmg+CiNpbmNs
dWRlIDxsaW51eC9rbWVtbGVhay5oPgoKI2luY2x1ZGUgPGFzbS9wcm90by5oPgojaW5jbHVk
ZSA8YXNtL2RtYS5oPgojaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiNpbmNsdWRlIDxhc20vZ2Fy
dC5oPgojaW5jbHVkZSA8YXNtL2NhbGdhcnkuaD4KI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXUu
aD4KI2luY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgoKc3RhdGljIGludCBmb3JiaWRfZGFjIF9f
cmVhZF9tb3N0bHk7CgpzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHMgPSAmbm9tbXVfZG1h
X29wczsKRVhQT1JUX1NZTUJPTChkbWFfb3BzKTsKCnN0YXRpYyBpbnQgaW9tbXVfc2FjX2Zv
cmNlIF9fcmVhZF9tb3N0bHk7CgojaWZkZWYgQ09ORklHX0lPTU1VX0RFQlVHCmludCBwYW5p
Y19vbl9vdmVyZmxvdyBfX3JlYWRfbW9zdGx5ID0gMTsKaW50IGZvcmNlX2lvbW11IF9fcmVh
ZF9tb3N0bHkgPSAxOwojZWxzZQppbnQgcGFuaWNfb25fb3ZlcmZsb3cgX19yZWFkX21vc3Rs
eSA9IDA7CmludCBmb3JjZV9pb21tdSBfX3JlYWRfbW9zdGx5ID0gMDsKI2VuZGlmCgppbnQg
aW9tbXVfbWVyZ2UgX19yZWFkX21vc3RseSA9IDA7CgppbnQgbm9faW9tbXUgX19yZWFkX21v
c3RseTsKLyogU2V0IHRoaXMgdG8gMSBpZiB0aGVyZSBpcyBhIEhXIElPTU1VIGluIHRoZSBz
eXN0ZW0gKi8KaW50IGlvbW11X2RldGVjdGVkIF9fcmVhZF9tb3N0bHkgPSAwOwoKLyoKICog
VGhpcyB2YXJpYWJsZSBiZWNvbWVzIDEgaWYgaW9tbXU9cHQgaXMgcGFzc2VkIG9uIHRoZSBr
ZXJuZWwgY29tbWFuZCBsaW5lLgogKiBJZiB0aGlzIHZhcmlhYmxlIGlzIDEsIElPTU1VIGlt
cGxlbWVudGF0aW9ucyBkbyBubyBETUEgdHJhbnNsYXRpb24gZm9yCiAqIGRldmljZXMgYW5k
IGFsbG93IGV2ZXJ5IGRldmljZSB0byBhY2Nlc3MgdG8gd2hvbGUgcGh5c2ljYWwgbWVtb3J5
LiBUaGlzIGlzCiAqIHVzZWZ1bCBpZiBhIHVzZXIgd2FudHMgdG8gdXNlIGFuIElPTU1VIG9u
bHkgZm9yIEtWTSBkZXZpY2UgYXNzaWdubWVudCB0bwogKiBndWVzdHMgYW5kIG5vdCBmb3Ig
ZHJpdmVyIGRtYSB0cmFuc2xhdGlvbi4KICovCmludCBpb21tdV9wYXNzX3Rocm91Z2ggX19y
ZWFkX21vc3RseTsKCi8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAo
bm9ybWFsbHkgSVNBKS4gKi8Kc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldiA9
IHsKCS5pbml0X25hbWUgPSAiZmFsbGJhY2sgZGV2aWNlIiwKCS5jb2hlcmVudF9kbWFfbWFz
ayA9IElTQV9ETUFfQklUX01BU0ssCgkuZG1hX21hc2sgPSAmeDg2X2RtYV9mYWxsYmFja19k
ZXYuY29oZXJlbnRfZG1hX21hc2ssCn07CkVYUE9SVF9TWU1CT0woeDg2X2RtYV9mYWxsYmFj
a19kZXYpOwoKLyogTnVtYmVyIG9mIGVudHJpZXMgcHJlYWxsb2NhdGVkIGZvciBETUEtQVBJ
IGRlYnVnZ2luZyAqLwojZGVmaW5lIFBSRUFMTE9DX0RNQV9ERUJVR19FTlRSSUVTICAgICAg
IDMyNzY4CgppbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2sp
CnsKCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQoJ
CXJldHVybiAtRUlPOwoKCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKCglyZXR1cm4gMDsKfQpF
WFBPUlRfU1lNQk9MKGRtYV9zZXRfbWFzayk7CgojaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0
KSAmJiAhZGVmaW5lZChDT05GSUdfTlVNQSkgJiYgIWRlZmluZWQoQ09ORklHX1hFTikKc3Rh
dGljIF9faW5pdGRhdGEgdm9pZCAqZG1hMzJfYm9vdG1lbV9wdHI7CnN0YXRpYyB1bnNpZ25l
ZCBsb25nIGRtYTMyX2Jvb3RtZW1fc2l6ZSBfX2luaXRkYXRhID0gKDEyOFVMTDw8MjApOwoK
c3RhdGljIGludCBfX2luaXQgcGFyc2VfZG1hMzJfc2l6ZV9vcHQoY2hhciAqcCkKewoJaWYg
KCFwKQoJCXJldHVybiAtRUlOVkFMOwoJZG1hMzJfYm9vdG1lbV9zaXplID0gbWVtcGFyc2Uo
cCwgJnApOwoJcmV0dXJuIDA7Cn0KZWFybHlfcGFyYW0oImRtYTMyX3NpemUiLCBwYXJzZV9k
bWEzMl9zaXplX29wdCk7Cgp2b2lkIF9faW5pdCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9p
ZCkKewoJdW5zaWduZWQgbG9uZyBzaXplLCBhbGlnbjsKCWlmIChtYXhfcGZuIDw9IE1BWF9E
TUEzMl9QRk4pCgkJcmV0dXJuOwoKCS8qCgkgKiBjaGVjayBhcGVydHVyZV82NC5jIGFsbG9j
YXRlX2FwZXJ0dXJlKCkgZm9yIHJlYXNvbiBhYm91dAoJICogdXNpbmcgNTEyTSBhcyBnb2Fs
CgkgKi8KCWFsaWduID0gNjRVTEw8PDIwOwoJc2l6ZSA9IHJvdW5kdXAoZG1hMzJfYm9vdG1l
bV9zaXplLCBhbGlnbik7CglkbWEzMl9ib290bWVtX3B0ciA9IF9fYWxsb2NfYm9vdG1lbV9u
b3BhbmljKHNpemUsIGFsaWduLAoJCQkJIDUxMlVMTDw8MjApOwoJLyoKCSAqIEttZW1sZWFr
IHNob3VsZCBub3Qgc2NhbiB0aGlzIGJsb2NrIGFzIGl0IG1heSBub3QgYmUgbWFwcGVkIHZp
YSB0aGUKCSAqIGtlcm5lbCBkaXJlY3QgbWFwcGluZy4KCSAqLwoJa21lbWxlYWtfaWdub3Jl
KGRtYTMyX2Jvb3RtZW1fcHRyKTsKCWlmIChkbWEzMl9ib290bWVtX3B0cikKCQlkbWEzMl9i
b290bWVtX3NpemUgPSBzaXplOwoJZWxzZQoJCWRtYTMyX2Jvb3RtZW1fc2l6ZSA9IDA7Cn0K
c3RhdGljIHZvaWQgX19pbml0IGRtYTMyX2ZyZWVfYm9vdG1lbSh2b2lkKQp7CgoJaWYgKG1h
eF9wZm4gPD0gTUFYX0RNQTMyX1BGTikKCQlyZXR1cm47CgoJaWYgKCFkbWEzMl9ib290bWVt
X3B0cikKCQlyZXR1cm47CgoJZnJlZV9ib290bWVtKF9fcGEoZG1hMzJfYm9vdG1lbV9wdHIp
LCBkbWEzMl9ib290bWVtX3NpemUpOwoKCWRtYTMyX2Jvb3RtZW1fcHRyID0gTlVMTDsKCWRt
YTMyX2Jvb3RtZW1fc2l6ZSA9IDA7Cn0KI2Vsc2UKdm9pZCBfX2luaXQgZG1hMzJfcmVzZXJ2
ZV9ib290bWVtKHZvaWQpCnsKfQpzdGF0aWMgdm9pZCBfX2luaXQgZG1hMzJfZnJlZV9ib290
bWVtKHZvaWQpCnsKfQoKI2VuZGlmCgpzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzIHN3aW90
bGJfZG1hX29wcyA9IHsKCS5hbGxvY19jb2hlcmVudCA9IGRtYV9nZW5lcmljX2FsbG9jX2Nv
aGVyZW50LAoJLmZyZWVfY29oZXJlbnQgPSBkbWFfZ2VuZXJpY19mcmVlX2NvaGVyZW50LAoJ
Lm1hcHBpbmdfZXJyb3IgPSBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yLAoJLm1hcF9wYWdl
ID0gc3dpb3RsYl9tYXBfcGFnZSwKCS51bm1hcF9wYWdlID0gc3dpb3RsYl91bm1hcF9wYWdl
LAoJLnN5bmNfc2luZ2xlX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUs
Cgkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2Rl
dmljZSwKCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3Npbmds
ZV9yYW5nZV9mb3JfY3B1LAoJLnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UgPSBzd2lv
dGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UsCgkuc3luY19zZ19mb3JfY3B1ID0g
c3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCgkuc3luY19zZ19mb3JfZGV2aWNlID0gc3dpb3Rs
Yl9zeW5jX3NnX2Zvcl9kZXZpY2UsCgkubWFwX3NnID0gc3dpb3RsYl9tYXBfc2dfYXR0cnMs
CgkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnX2F0dHJzLAoJLmRtYV9zdXBwb3J0ZWQg
PSBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQKfTsKCnZvaWQgX19pbml0IHBjaV9pb21tdV9hbGxv
Yyh2b2lkKQp7CgkvKiBmcmVlIHRoZSByYW5nZSBzbyBpb21tdSBjb3VsZCBnZXQgc29tZSBy
YW5nZSBsZXNzIHRoYW4gNEcgKi8KCWRtYTMyX2ZyZWVfYm9vdG1lbSgpOwoKCWlmIChwY2lf
c3dpb3RsYl9kZXRlY3QoKSkKCQlnb3RvIG91dDsKCglnYXJ0X2lvbW11X2hvbGVfaW5pdCgp
OwoKCWRldGVjdF9jYWxnYXJ5KCk7CgoJZGV0ZWN0X2ludGVsX2lvbW11KCk7CgoJLyogbmVl
ZHMgdG8gYmUgY2FsbGVkIGFmdGVyIGdhcnRfaW9tbXVfaG9sZV9pbml0ICovCglhbWRfaW9t
bXVfZGV0ZWN0KCk7Cm91dDoKCXN3aW90bGJfaW5pdCgxKTsKCWlmIChzd2lvdGxiKSB7CgkJ
cHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogVXNpbmcgc29mdHdhcmUgYm91bmNlIGJ1ZmZl
cmluZyBmb3IgSU8gKFNXSU9UTEIpXG4iKTsKCQlkbWFfb3BzID0gJnN3aW90bGJfZG1hX29w
czsKCX0KfQoKdm9pZCAqZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmlj
ZSAqZGV2LCBzaXplX3Qgc2l6ZSwKCQkJCSBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3Qg
ZmxhZykKewoJdW5zaWduZWQgbG9uZyBkbWFfbWFzazsKCXN0cnVjdCBwYWdlICpwYWdlOwoj
aWZuZGVmIENPTkZJR19YRU4KCWRtYV9hZGRyX3QgYWRkcjsKI2Vsc2UKCXZvaWQgKm1lbW9y
eTsKI2VuZGlmCgl1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CgoJZG1h
X21hc2sgPSBkbWFfYWxsb2NfY29oZXJlbnRfbWFzayhkZXYsIGZsYWcpOwoKI2lmbmRlZiBD
T05GSUdfWEVOCglmbGFnIHw9IF9fR0ZQX1pFUk87CmFnYWluOgojZWxzZQoJZmxhZyAmPSB+
KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyKTsKI2VuZGlmCglwYWdlID0gYWxsb2NfcGFnZXNf
bm9kZShkZXZfdG9fbm9kZShkZXYpLCBmbGFnLCBvcmRlcik7CglpZiAoIXBhZ2UpCgkJcmV0
dXJuIE5VTEw7CgojaWZuZGVmIENPTkZJR19YRU4KCWFkZHIgPSBwYWdlX3RvX3BoeXMocGFn
ZSk7CglpZiAoYWRkciArIHNpemUgPiBkbWFfbWFzaykgewoJCV9fZnJlZV9wYWdlcyhwYWdl
LCBvcmRlcik7CgoJCWlmIChkbWFfbWFzayA8IERNQV9CSVRfTUFTSygzMikgJiYgIShmbGFn
ICYgR0ZQX0RNQSkpIHsKCQkJZmxhZyA9IChmbGFnICYgfkdGUF9ETUEzMikgfCBHRlBfRE1B
OwoJCQlnb3RvIGFnYWluOwoJCX0KCgkJcmV0dXJuIE5VTEw7Cgl9CgoJKmRtYV9hZGRyID0g
YWRkcjsKCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiNlbHNlCgltZW1vcnkgPSBwYWdl
X2FkZHJlc3MocGFnZSk7CglpZiAoeGVuX2NyZWF0ZV9jb250aWd1b3VzX3JlZ2lvbigodW5z
aWduZWQgbG9uZyltZW1vcnksIG9yZGVyLAoJCQkJCSBmbHM2NChkbWFfbWFzaykpKSB7CgkJ
X19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKCQlyZXR1cm4gTlVMTDsKCX0KCgkqZG1hX2Fk
ZHIgPSB2aXJ0X3RvX2J1cyhtZW1vcnkpOwoJcmV0dXJuIG1lbXNldChtZW1vcnksIDAsIHNp
emUpOwojZW5kaWYKfQoKI2lmZGVmIENPTkZJR19YRU4Kdm9pZCBkbWFfZ2VuZXJpY19mcmVl
X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRy
LAoJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfYWRkcikKewoJdW5zaWduZWQgaW50IG9yZGVy
ID0gZ2V0X29yZGVyKHNpemUpOwoJdW5zaWduZWQgbG9uZyB2YSA9ICh1bnNpZ25lZCBsb25n
KXZhZGRyOwoKCXhlbl9kZXN0cm95X2NvbnRpZ3VvdXNfcmVnaW9uKHZhLCBvcmRlcik7Cglm
cmVlX3BhZ2VzKHZhLCBvcmRlcik7Cn0KI2VuZGlmCgovKgogKiBTZWUgPERvY3VtZW50YXRp
b24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQ+IGZvciB0aGUgaW9tbXUga2VybmVsIHBhcmFt
ZXRlcgogKiBkb2N1bWVudGF0aW9uLgogKi8Kc3RhdGljIF9faW5pdCBpbnQgaW9tbXVfc2V0
dXAoY2hhciAqcCkKewoJaW9tbXVfbWVyZ2UgPSAxOwoKCWlmICghcCkKCQlyZXR1cm4gLUVJ
TlZBTDsKCgl3aGlsZSAoKnApIHsKCQlpZiAoIXN0cm5jbXAocCwgIm9mZiIsIDMpKQoJCQlu
b19pb21tdSA9IDE7CgkJLyogZ2FydF9wYXJzZV9vcHRpb25zIGhhcyBtb3JlIGZvcmNlIHN1
cHBvcnQgKi8KCQlpZiAoIXN0cm5jbXAocCwgImZvcmNlIiwgNSkpCgkJCWZvcmNlX2lvbW11
ID0gMTsKCQlpZiAoIXN0cm5jbXAocCwgIm5vZm9yY2UiLCA3KSkgewoJCQlpb21tdV9tZXJn
ZSA9IDA7CgkJCWZvcmNlX2lvbW11ID0gMDsKCQl9CgoJCWlmICghc3RybmNtcChwLCAiYmlv
bWVyZ2UiLCA4KSkgewoJCQlpb21tdV9tZXJnZSA9IDE7CgkJCWZvcmNlX2lvbW11ID0gMTsK
CQl9CgkJaWYgKCFzdHJuY21wKHAsICJwYW5pYyIsIDUpKQoJCQlwYW5pY19vbl9vdmVyZmxv
dyA9IDE7CgkJaWYgKCFzdHJuY21wKHAsICJub3BhbmljIiwgNykpCgkJCXBhbmljX29uX292
ZXJmbG93ID0gMDsKCQlpZiAoIXN0cm5jbXAocCwgIm1lcmdlIiwgNSkpIHsKCQkJaW9tbXVf
bWVyZ2UgPSAxOwoJCQlmb3JjZV9pb21tdSA9IDE7CgkJfQoJCWlmICghc3RybmNtcChwLCAi
bm9tZXJnZSIsIDcpKQoJCQlpb21tdV9tZXJnZSA9IDA7CgkJaWYgKCFzdHJuY21wKHAsICJm
b3JjZXNhYyIsIDgpKQoJCQlpb21tdV9zYWNfZm9yY2UgPSAxOwoJCWlmICghc3RybmNtcChw
LCAiYWxsb3dkYWMiLCA4KSkKCQkJZm9yYmlkX2RhYyA9IDA7CgkJaWYgKCFzdHJuY21wKHAs
ICJub2RhYyIsIDUpKQoJCQlmb3JiaWRfZGFjID0gMTsKCQlpZiAoIXN0cm5jbXAocCwgInVz
ZWRhYyIsIDYpKSB7CgkJCWZvcmJpZF9kYWMgPSAtMTsKCQkJcmV0dXJuIDE7CgkJfQojaWZk
ZWYgQ09ORklHX1NXSU9UTEIKCQlpZiAoIXN0cm5jbXAocCwgInNvZnQiLCA0KSkKCQkJc3dp
b3RsYiA9IDE7CiNlbmRpZgoJCWlmICghc3RybmNtcChwLCAicHQiLCAyKSkKCQkJaW9tbXVf
cGFzc190aHJvdWdoID0gMTsKCgkJZ2FydF9wYXJzZV9vcHRpb25zKHApOwoKI2lmZGVmIENP
TkZJR19DQUxHQVJZX0lPTU1VCgkJaWYgKCFzdHJuY21wKHAsICJjYWxnYXJ5IiwgNykpCgkJ
CXVzZV9jYWxnYXJ5ID0gMTsKI2VuZGlmIC8qIENPTkZJR19DQUxHQVJZX0lPTU1VICovCgoJ
CXAgKz0gc3RyY3NwbihwLCAiLCIpOwoJCWlmICgqcCA9PSAnLCcpCgkJCSsrcDsKCX0KCXJl
dHVybiAwOwp9CmVhcmx5X3BhcmFtKCJpb21tdSIsIGlvbW11X3NldHVwKTsKCnN0YXRpYyBp
bnQgY2hlY2tfcGFnZXNfcGh5c2ljYWxseV9jb250aWd1b3VzKHVuc2lnbmVkIGxvbmcgcGZu
LAoJCQkJCSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKCQkJCQkgICAgIHNpemVfdCBsZW5n
dGgpCnsKCXVuc2lnbmVkIGxvbmcgbmV4dF9tZm47CglpbnQgaTsKCWludCBucl9wYWdlczsK
CgluZXh0X21mbiA9IHBmbl90b19tZm4ocGZuKTsKCW5yX3BhZ2VzID0gKG9mZnNldCArIGxl
bmd0aCArIFBBR0VfU0laRS0xKSA+PiBQQUdFX1NISUZUOwoKCWZvciAoaSA9IDE7IGkgPCBu
cl9wYWdlczsgaSsrKSB7CgkJaWYgKHBmbl90b19tZm4oKytwZm4pICE9ICsrbmV4dF9tZm4p
CgkJCXJldHVybiAwOwoJfQoJcmV0dXJuIDE7Cn0KCmludCByYW5nZV9zdHJhZGRsZXNfcGFn
ZV9ib3VuZGFyeShwYWRkcl90IHAsIHNpemVfdCBzaXplKQp7Cgl1bnNpZ25lZCBsb25nIHBm
biA9IHAgPj4gUEFHRV9TSElGVDsKCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwICYgflBBR0Vf
TUFTSzsKCglyZXR1cm4gKChvZmZzZXQgKyBzaXplID4gUEFHRV9TSVpFKSAmJgoJCSFjaGVj
a19wYWdlc19waHlzaWNhbGx5X2NvbnRpZ3VvdXMocGZuLCBvZmZzZXQsIHNpemUpKTsKfQoK
aW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKewoJc3Ry
dWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwoKI2lmZGVmIENPTkZJ
R19QQ0kKCWlmIChtYXNrID4gMHhmZmZmZmZmZiAmJiBmb3JiaWRfZGFjID4gMCkgewoJCWRl
dl9pbmZvKGRldiwgIlBDSTogRGlzYWxsb3dpbmcgREFDIGZvciBkZXZpY2VcbiIpOwoJCXJl
dHVybiAwOwoJfQojZW5kaWYKCglpZiAob3BzLT5kbWFfc3VwcG9ydGVkKQoJCXJldHVybiBv
cHMtPmRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKCgkvKiBDb3BpZWQgZnJvbSBpMzg2LiBE
b2Vzbid0IG1ha2UgbXVjaCBzZW5zZSwgYmVjYXVzZSBpdCB3aWxsCgkgICBvbmx5IHdvcmsg
Zm9yIHBjaV9hbGxvY19jb2hlcmVudC4KCSAgIFRoZSBjYWxsZXIganVzdCBoYXMgdG8gdXNl
IEdGUF9ETUEgaW4gdGhpcyBjYXNlLiAqLwoJaWYgKG1hc2sgPCBETUFfQklUX01BU0soMjQp
KQoJCXJldHVybiAwOwoKCS8qIFRlbGwgdGhlIGRldmljZSB0byB1c2UgU0FDIHdoZW4gSU9N
TVUgZm9yY2UgaXMgb24uICBUaGlzCgkgICBhbGxvd3MgdGhlIGRyaXZlciB0byB1c2UgY2hl
YXBlciBhY2Nlc3NlcyBpbiBzb21lIGNhc2VzLgoKCSAgIFByb2JsZW0gd2l0aCB0aGlzIGlz
IHRoYXQgaWYgd2Ugb3ZlcmZsb3cgdGhlIElPTU1VIGFyZWEgYW5kCgkgICByZXR1cm4gREFD
IGFzIGZhbGxiYWNrIGFkZHJlc3MgdGhlIGRldmljZSBtYXkgbm90IGhhbmRsZSBpdAoJICAg
Y29ycmVjdGx5LgoKCSAgIEFzIGEgc3BlY2lhbCBjYXNlIHNvbWUgY29udHJvbGxlcnMgaGF2
ZSBhIDM5Yml0IGFkZHJlc3MKCSAgIG1vZGUgdGhhdCBpcyBhcyBlZmZpY2llbnQgYXMgMzJi
aXQgKGFpYzc5eHgpLiBEb24ndCBmb3JjZQoJICAgU0FDIGZvciB0aGVzZS4gIEFzc3VtZSBh
bGwgbWFza3MgPD0gNDAgYml0cyBhcmUgb2YgdGhpcwoJICAgdHlwZS4gTm9ybWFsbHkgdGhp
cyBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UsIGJ1dCBnaXZlcwoJICAgbW9yZSBnZW50
bGUgaGFuZGxpbmcgb2YgSU9NTVUgb3ZlcmZsb3cuICovCglpZiAoaW9tbXVfc2FjX2ZvcmNl
ICYmIChtYXNrID49IERNQV9CSVRfTUFTSyg0MCkpKSB7CgkJZGV2X2luZm8oZGV2LCAiRm9y
Y2UgU0FDIHdpdGggbWFzayAlTHhcbiIsIG1hc2spOwoJCXJldHVybiAwOwoJfQoKCXJldHVy
biAxOwp9CkVYUE9SVF9TWU1CT0woZG1hX3N1cHBvcnRlZCk7CgpzdGF0aWMgaW50IF9faW5p
dCBwY2lfaW9tbXVfaW5pdCh2b2lkKQp7CglkbWFfZGVidWdfaW5pdChQUkVBTExPQ19ETUFf
REVCVUdfRU5UUklFUyk7CgojaWZkZWYgQ09ORklHX1BDSQoJZG1hX2RlYnVnX2FkZF9idXMo
JnBjaV9idXNfdHlwZSk7CiNlbmRpZgoJeDg2X2luaXQuaW9tbXUuaW9tbXVfaW5pdCgpOwoK
I2lmbmRlZiBDT05GSUdfWEVOCglpZiAoc3dpb3RsYikgewoJCXByaW50ayhLRVJOX0lORk8g
IlBDSS1ETUE6ICIKCQkgICAgICAgIlVzaW5nIHNvZnR3YXJlIGJvdW5jZSBidWZmZXJpbmcg
Zm9yIElPIChTV0lPVExCKVxuIik7CgkJc3dpb3RsYl9wcmludF9pbmZvKCk7Cgl9IGVsc2UK
CQlzd2lvdGxiX2ZyZWUoKTsKI2VuZGlmCgoJcmV0dXJuIDA7Cn0KLyogTXVzdCBleGVjdXRl
IGFmdGVyIFBDSSBzdWJzeXN0ZW0gKi8Kcm9vdGZzX2luaXRjYWxsKHBjaV9pb21tdV9pbml0
KTsKCiNpZmRlZiBDT05GSUdfUENJCi8qIE1hbnkgVklBIGJyaWRnZXMgc2VlbSB0byBjb3Jy
dXB0IGRhdGEgZm9yIERBQy4gRGlzYWJsZSBpdCBoZXJlICovCgpzdGF0aWMgX19kZXZpbml0
IHZvaWQgdmlhX25vX2RhYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQp7CglpZiAoKGRldi0+Y2xh
c3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9QQ0kgJiYgZm9yYmlkX2RhYyA9PSAwKSB7
CgkJZGV2X2luZm8oJmRldi0+ZGV2LCAiZGlzYWJsaW5nIERBQyBvbiBWSUEgUENJIGJyaWRn
ZVxuIik7CgkJZm9yYmlkX2RhYyA9IDE7Cgl9Cn0KREVDTEFSRV9QQ0lfRklYVVBfRklOQUwo
UENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9BTllfSUQsIHZpYV9ub19kYWMpOwojZW5kaWYK
--=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
--=_mpaRqw5ZTb1NyohKK81n2EoHfBUfa6Wj7ICZiy9X+A95qsfm--
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?utf-8?Q?Carsten_Schiers?=
Subject: Re: Load increase after memory upgrade (part2)
Date: Tue, 29 Nov 2011 10:37:12 +0100
Message-ID:
References: <1322494816.20646.14.camel@zakaz.uk.xensource.com>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="===============3475373792260686772=="
Return-path:
In-Reply-To: <1322494816.20646.14.camel@zakaz.uk.xensource.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?Ian_Campbell?=
Cc: =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?= , =?utf-8?Q?konrad=2Ewilk?=
List-Id: xen-devel@lists.xenproject.org
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--===============3475373792260686772==
Content-Type: multipart/alternative;
boundary="=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78"
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
The swiotlb-xen used by classic-xen kernels (which I assume is what=0D=0A=
Carsten means by "Xenified") isn't exactly the same as the stuff in=0D=0A=
mainline Linux, it's been heavily refactored for one thing. It's not=0D=0A=
impossible that mainline is bouncing something it doesn't really need=0D=0A=
to.=0D=0A=0D=0AYes, it's a 2.6.34 kernel with Andrew Lyon's backported pa=
tches found here:=0D=0A=0D=0A=C2=A0=0D=0A=C2=A0 http://code.google.com/p/=
gentoo-xen-kernel/downloads/list=0D=0A=0D=0A=C2=A0=0D=0AGrC.=0D=0A=0D=0A
--=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
=0A=0A =0A =0A AW: [Xen-deve=
l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<=
br />The swiotlb-xen used by classic-xen kernels (which I=
assume is what
Carsten means by "Xenified") isn't exa=
ctly the same as the stuff in
mainline Linux, it's been heavily =
refactored for one thing. It's not
impossible that mainline is b=
ouncing something it doesn't really need
to.
<=
p>Yes, it's a 2.6.34 kernel with Andrew Lyon's backported patches=
found here:
http://code.google.com/p/gentoo-xe=
n-kernel/downloads/list
GrC.
=0A=0A
--=_8vaRUJPk8dkpUL299rGMwoZkxXI38n1cVRvVMb1phGQ5om78--
--===============3475373792260686772==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
--===============3475373792260686772==--
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?utf-8?Q?Carsten_Schiers?=
Subject: Re: Load increase after memory upgrade (part2)
Date: Tue, 29 Nov 2011 10:42:45 +0100
Message-ID:
References: <20111128153027.GD9655@andromeda.dapyr.net>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="===============8311085662891811754=="
Return-path:
In-Reply-To: <20111128153027.GD9655@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?utf-8?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?utf-8?Q?xen-devel?= , =?utf-8?Q?konrad=2Ewilk?=
List-Id: xen-devel@lists.xenproject.org
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--===============8311085662891811754==
Content-Type: multipart/alternative;
boundary="=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5"
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
=C2=A0=0D=0A=0D=0A> =C2=A0 - with load I mean the %CPU of xentop=0D=0A> =C2=
=A0 - there is no change in CPU usage of the DomU or Dom0=0D=0A=0D=0AUhh,=
which matrix are using for that=3F CPU usage...=3F This is if you=0D=0Ac=
hange the DomU or the amount of memory the guest has=3F This is not=0D=0A=
the load number (xentop value)=3F=0D=0A=0D=0AI had a quick look into the =
munin plugin. It reads the output of "xm li", Time in seconds and normali=
zes it.=20=0D=0ABut the effect is also visible in the CPU(%) column of xe=
ntop, if the DomU is on higher load.=0D=0A=0D=0A=C2=A0=0D=0ABR,C.=0D=0A=0D=
=0A
--=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
=0A=0A =0A =0A AW: [Xen-deve=
l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<=
p> > - with load I mean the %CPU of xe=
ntop
> - there is no change in CPU usage of the DomU or Do=
m0
Uhh, which matrix are using for that=3F CPU usage...=3F Thi=
s is if you
change the DomU or the amount of memory the guest has=3F=
This is not
the load number (xentop value)=3F
=
I had a quick look into the munin plugin. It reads the output of "xm=
li", Time in seconds and normalizes it.
But the effect is als=
o visible in the CPU(%) column of xentop, if the DomU is on higher load.<=
/p>
BR,C.
=0A=0A
--=_lAaRP6aG5X-34uc1sIGN5JX23YWcRTK9j+6QCmonallY6RC5--
--===============8311085662891811754==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
--===============8311085662891811754==--
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?utf-8?Q?Carsten_Schiers?=
Subject: Re: Load increase after memory upgrade (part2)
Date: Tue, 29 Nov 2011 10:46:02 +0100
Message-ID:
References: <20111128164516.GA26664@phenom.dumpdata.com>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="===============6505958179899237990=="
Return-path:
In-Reply-To: <20111128164516.GA26664@phenom.dumpdata.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?utf-8?Q?Ian_Campbell?= , =?utf-8?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?utf-8?Q?Konrad_Rzeszutek_Wilk?= , =?utf-8?Q?xen-devel?= , =?utf-8?Q?lersek=40redhat=2Ecom?= , =?utf-8?Q?zhenzhong=2Eduan=40oracle=2Ecom?=
List-Id: xen-devel@lists.xenproject.org
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--===============6505958179899237990==
Content-Type: multipart/alternative;
boundary="=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp"
This is a multi-part message in MIME format. Your mail reader does not
understand MIME message format.
--=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Carsten, let me prep up a patch that will print some diagnostic informati=
on=0D=0Aduring the runtime - to see how often it does the bounce, the usa=
ge, etc..=0D=0A=0D=0A=C2=A0=0D=0AJup, looking forward to implementing it.=
I can include them into any kernel. 2.6.18 would be=0D=0A=0D=0Aa bit dif=
ficult though, as the driver pack isn't compatible any longer...so I'd pr=
efer 2.6.34 Xenified=0D=0A=0D=0Avs. 3.1.2 pvops.=0D=0A=0D=0A=C2=A0=0D=0AB=
R,C.=0D=0A=0D=0A
--=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
=0A=0A =0A =0A AW: [Xen-deve=
l] Load increase after memory upgrade (part2)=0A =0A=0A=0A<=
br />Carsten, let me prep up a patch that will print some=
diagnostic information
during the runtime - to see how often it doe=
s the bounce, the usage, etc..
Jup, looking f=
orward to implementing it. I can include them into any kernel. 2.6.18 wou=
ld be
a bit difficult though, as the driver pack isn't compatib=
le any longer...so I'd prefer 2.6.34 Xenified
vs. 3.1.2 pvops.<=
/p>
BR,C.
=0A=0A
--=_qDaRfmKSaZg56dIDHyy9ea+dyyk5LeUkGoBWDZJLNcefTnWp--
--===============6505958179899237990==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
--===============6505958179899237990==--
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Ian Campbell
Subject: Re: Load increase after memory upgrade (part2)
Date: Tue, 29 Nov 2011 10:23:18 +0000
Message-ID: <1322562199.20646.30.camel@zakaz.uk.xensource.com>
References:
<20111128152829.GC9655@andromeda.dapyr.net>
<1322494816.20646.14.camel@zakaz.uk.xensource.com>
<20111128164516.GA26664@phenom.dumpdata.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
In-Reply-To: <20111128164516.GA26664@phenom.dumpdata.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Konrad Rzeszutek Wilk
Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "lersek@redhat.com"
List-Id: xen-devel@lists.xenproject.org
On Mon, 2011-11-28 at 16:45 +0000, Konrad Rzeszutek Wilk wrote:
> On Mon, Nov 28, 2011 at 03:40:13PM +0000, Ian Campbell wrote:
> > On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote:
> > > On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote:
> >
> > > > I looked through my old mails from you and you explained already the necessity of double
> > > > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the
> > > > Xenified kernel not have this kind of issue?
> > >
> > > That is a puzzle. It should not. The code is very much the same - both
> > > use the generic SWIOTLB which has not changed for years.
> >
> > The swiotlb-xen used by classic-xen kernels (which I assume is what
> > Carsten means by "Xenified") isn't exactly the same as the stuff in
> > mainline Linux, it's been heavily refactored for one thing. It's not
> > impossible that mainline is bouncing something it doesn't really need
> > to.
>
> The usage, at least with 'pci_alloc_coherent' is that there is no bouncing
> being done. The alloc_coherent will allocate a nice page, underneath the 4GB
> mark and give it to the driver. The driver can use it as it wishes and there
> is no need to bounce buffer.
Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a
subset of swiotlb is in use then, all the bouncing stuff _should_ be
idle/unused -- but has that been confirmed?
>
> But I can't find the implementation of that in the classic Xen-SWIOTLB. It looks
> as if it is using map_single which would be taking the memory out of the
> pool for a very long time, instead of allocating memory and "swizzling" the MFNs.
> [Note, I looked at the 2.6.18 hg tree for classic, the 2.6.34 is probably
> improved much better so let me check that]
>
> Carsten, let me prep up a patch that will print some diagnostic information
> during the runtime - to see how often it does the bounce, the usage, etc..
>
> >
> > It's also possible that the dma mask of the device is different/wrong in
> > mainline leading to such additional bouncing.
>
> If one were to use map_page and such - yes. But the alloc_coherent bypasses
> that and ends up allocating it right under the 4GB (or rather it allocates
> based on the dev->coherent_mask and swizzles the MFNs as required).
>
> >
> > I guess it's also possible that the classic-Xen kernels are playing fast
> > and loose by not bouncing something they should (although if so they
> > appear to be getting away with it...) or that there is some difference
> > which really means mainline needs to bounce while classic-Xen doesn't.
>
> Could be very well.
> >
> > Ian.
> >
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Tue, 29 Nov 2011 10:33:06 -0500
Message-ID: <20111129153306.GA30908@phenom.dumpdata.com>
References:
<20111128152829.GC9655@andromeda.dapyr.net>
<1322494816.20646.14.camel@zakaz.uk.xensource.com>
<20111128164516.GA26664@phenom.dumpdata.com>
<1322562199.20646.30.camel@zakaz.uk.xensource.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
Content-Disposition: inline
In-Reply-To: <1322562199.20646.30.camel@zakaz.uk.xensource.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Ian Campbell
Cc: Konrad Rzeszutek Wilk , xen-devel , Carsten Schiers , "zhenzhong.duan@oracle.com" , "lersek@redhat.com"
List-Id: xen-devel@lists.xenproject.org
On Tue, Nov 29, 2011 at 10:23:18AM +0000, Ian Campbell wrote:
> On Mon, 2011-11-28 at 16:45 +0000, Konrad Rzeszutek Wilk wrote:
> > On Mon, Nov 28, 2011 at 03:40:13PM +0000, Ian Campbell wrote:
> > > On Mon, 2011-11-28 at 15:28 +0000, Konrad Rzeszutek Wilk wrote:
> > > > On Fri, Nov 25, 2011 at 11:11:55PM +0100, Carsten Schiers wrote:
> > >
> > > > > I looked through my old mails from you and you explained already the necessity of double
> > > > > bounce buffering (PCI->below 4GB->above 4GB). What I don't understand is: why does the
> > > > > Xenified kernel not have this kind of issue?
> > > >
> > > > That is a puzzle. It should not. The code is very much the same - both
> > > > use the generic SWIOTLB which has not changed for years.
> > >
> > > The swiotlb-xen used by classic-xen kernels (which I assume is what
> > > Carsten means by "Xenified") isn't exactly the same as the stuff in
> > > mainline Linux, it's been heavily refactored for one thing. It's not
> > > impossible that mainline is bouncing something it doesn't really need
> > > to.
> >
> > The usage, at least with 'pci_alloc_coherent' is that there is no bouncing
> > being done. The alloc_coherent will allocate a nice page, underneath the 4GB
> > mark and give it to the driver. The driver can use it as it wishes and there
> > is no need to bounce buffer.
>
> Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a
> subset of swiotlb is in use then, all the bouncing stuff _should_ be
> idle/unused -- but has that been confirmed?
Nope. I hope that the diagnostic patch I have in mind will prove/disprove that.
Now I just need to find a moment to write it :-)
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Fri, 2 Dec 2011 11:23:39 -0400
Message-ID: <20111202152339.GA2687@andromeda.dapyr.net>
References:
<20111128152829.GC9655@andromeda.dapyr.net>
<1322494816.20646.14.camel@zakaz.uk.xensource.com>
<20111128164516.GA26664@phenom.dumpdata.com>
<1322562199.20646.30.camel@zakaz.uk.xensource.com>
<20111129153306.GA30908@phenom.dumpdata.com>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="vkogqOf2sHV7VnPd"
Return-path:
Content-Disposition: inline
In-Reply-To: <20111129153306.GA30908@phenom.dumpdata.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Konrad Rzeszutek Wilk
Cc: "lersek@redhat.com" , xen-devel , Carsten Schiers , Ian Campbell , "zhenzhong.duan@oracle.com"
List-Id: xen-devel@lists.xenproject.org
--vkogqOf2sHV7VnPd
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
> > > > > That is a puzzle. It should not. The code is very much the same - both
> > > > > use the generic SWIOTLB which has not changed for years.
> > > >
> > > > The swiotlb-xen used by classic-xen kernels (which I assume is what
> > > > Carsten means by "Xenified") isn't exactly the same as the stuff in
> > > > mainline Linux, it's been heavily refactored for one thing. It's not
> > > > impossible that mainline is bouncing something it doesn't really need
> > > > to.
> > >
> > > The usage, at least with 'pci_alloc_coherent' is that there is no bouncing
> > > being done. The alloc_coherent will allocate a nice page, underneath the 4GB
> > > mark and give it to the driver. The driver can use it as it wishes and there
> > > is no need to bounce buffer.
> >
> > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a
> > subset of swiotlb is in use then, all the bouncing stuff _should_ be
> > idle/unused -- but has that been confirmed?
>
> Nope. I hope that the diagnostic patch I have in mind will prove/disprove that.
> Now I just need to find a moment to write it :-)
Done!
Carsten, can you please patch your kernel with this hacky patch and
when you have booted the new kernel, just do
modprobe dump_swiotlb
it should give an idea of how many bounces are happening, coherent
allocations, syncs, and so on.. along with the last driver that
did those operations.
--vkogqOf2sHV7VnPd
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="swiotlb-debug.patch"
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
index a59638b..d513c8d 100644
--- a/drivers/xen/Kconfig
+++ b/drivers/xen/Kconfig
@@ -105,4 +105,10 @@ config SWIOTLB_XEN
depends on PCI
select SWIOTLB
+config SWIOTLB_DEBUG
+ tristate "swiotlb debug facility"
+ default m
+ help
+ Do not enable it unless you know what you are doing.
+
endmenu
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index bbc1825..1dea490 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_XENFS) += xenfs/
obj-$(CONFIG_XEN_SYS_HYPERVISOR) += sys-hypervisor.o
obj-$(CONFIG_XEN_PLATFORM_PCI) += xen-platform-pci.o
obj-$(CONFIG_SWIOTLB_XEN) += swiotlb-xen.o
+obj-$(CONFIG_SWIOTLB_DEBUG) += dump_swiotlb.o
obj-$(CONFIG_XEN_DOM0) += pci.o
xen-evtchn-y := evtchn.o
diff --git a/drivers/xen/dump_swiotlb.c b/drivers/xen/dump_swiotlb.c
new file mode 100644
index 0000000..e0e4a0b
--- /dev/null
+++ b/drivers/xen/dump_swiotlb.c
@@ -0,0 +1,72 @@
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2.0 as published by
+ * the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include
+#define DUMP_SWIOTLB_FUN "0.1"
+
+MODULE_AUTHOR("Konrad Rzeszutek Wilk ");
+MODULE_DESCRIPTION("dump swiotlb");
+MODULE_LICENSE("GPL");
+MODULE_VERSION(DUMP_SWIOTLB_FUN);
+
+extern int xen_swiotlb_start_thread(void);
+extern void xen_swiotlb_stop_thread(void);
+static int __init dump_swiotlb_init(void)
+{
+ printk(KERN_INFO "Starting SWIOTLB debug thread.\n");
+ swiotlb_start_thread();
+ xen_swiotlb_start_thread();
+ return 0;
+}
+
+static void __exit dump_swiotlb_exit(void)
+{
+ swiotlb_stop_thread();
+ xen_swiotlb_stop_thread();
+}
+
+module_init(dump_swiotlb_init);
+module_exit(dump_swiotlb_exit);
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index 6e8c15a..c833501 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -143,6 +143,63 @@ xen_swiotlb_fixup(void *buf, size_t size, unsigned long nslabs)
return 0;
}
+#include
+struct xen_swiotlb_debug {
+ unsigned long alloc;
+ unsigned long dealloc;
+ char dev_name[64];
+};
+static DEFINE_PER_CPU(struct xen_swiotlb_debug, xen_tlb_debug);
+#include
+static int xen_swiotlb_debug_thread(void *arg)
+{
+ int cpu;
+ do {
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout_interruptible(HZ*10);
+
+ for_each_online_cpu(cpu) {
+ struct xen_swiotlb_debug *d;
+
+ d = &per_cpu(xen_tlb_debug, cpu);
+ /* Can't really happend.*/
+ if (!d)
+ continue;
+
+ if (d->dev_name[0] == 0)
+ continue;
+
+ printk(KERN_INFO "%u %s alloc coherent: %ld, free: %ld\n",
+ cpu,
+ d->dev_name ? d->dev_name : "?",
+ d->alloc, d->dealloc);
+
+ memset(d, 0, sizeof(struct xen_swiotlb_debug));
+ }
+
+ } while (!kthread_should_stop());
+ return 0;
+}
+static struct task_struct *xen_debug_thread = NULL;
+
+int xen_swiotlb_start_thread(void) {
+
+ if (xen_debug_thread)
+ return -EINVAL;
+ printk(KERN_INFO "%s: Go!\n",__func__);
+ xen_debug_thread = kthread_run(xen_swiotlb_debug_thread, NULL, "xen_swiotlb_debug");
+ return 0;
+}
+EXPORT_SYMBOL_GPL(xen_swiotlb_start_thread);
+void xen_swiotlb_stop_thread(void) {
+
+ printk(KERN_INFO "%s: Stop!\n",__func__);
+ if (xen_debug_thread)
+ kthread_stop(xen_debug_thread);
+ xen_debug_thread = NULL;
+}
+EXPORT_SYMBOL_GPL(xen_swiotlb_stop_thread);
+
void __init xen_swiotlb_init(int verbose)
{
unsigned long bytes;
@@ -194,7 +251,14 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size,
int order = get_order(size);
u64 dma_mask = DMA_BIT_MASK(32);
unsigned long vstart;
-
+ struct xen_swiotlb_debug *d;
+
+ preempt_disable();
+ d = &__get_cpu_var(xen_tlb_debug);
+ preempt_enable();
+ d->alloc++;
+ snprintf(d->dev_name, sizeof(d->dev_name), "%s %s",
+ dev_driver_string(hwdev), dev_name(hwdev));
/*
* Ignore region specifiers - the kernel's ideas of
* pseudo-phys memory layout has nothing to do with the
@@ -230,6 +294,14 @@ xen_swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
dma_addr_t dev_addr)
{
int order = get_order(size);
+ struct xen_swiotlb_debug *d;
+
+ preempt_disable();
+ d = &__get_cpu_var(xen_tlb_debug);
+ preempt_enable();
+ d->dealloc++;
+ snprintf(d->dev_name, sizeof(d->dev_name), "%s %s",
+ dev_driver_string(hwdev), dev_name(hwdev));
if (dma_release_from_coherent(hwdev, order, vaddr))
return;
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
index 445702c..0d2e049 100644
--- a/include/linux/swiotlb.h
+++ b/include/linux/swiotlb.h
@@ -26,6 +26,8 @@ extern void swiotlb_init(int verbose);
extern void swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose);
extern unsigned long swioltb_nr_tbl(void);
+extern int swiotlb_start_thread(void);
+extern void swiotlb_stop_thread(void);
/*
* Enumeration for sync targets
*/
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index 99093b3..5446076 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -92,6 +92,74 @@ static DEFINE_SPINLOCK(io_tlb_lock);
static int late_alloc;
+#include
+struct swiotlb_debug {
+ unsigned long bounce_to;
+ unsigned long bounce_from;
+ unsigned long bounce_slow;
+ unsigned long map;
+ unsigned long unmap;
+ unsigned long sync;
+ char dev_name[64];
+};
+static DEFINE_PER_CPU(struct swiotlb_debug, tlb_debug);
+#include
+static int swiotlb_debug_thread(void *arg)
+{
+ int cpu;
+ int size = io_tlb_nslabs;
+ do {
+ int i;
+ unsigned long filled = 0;
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout_interruptible(HZ*5);
+
+ for_each_online_cpu(cpu) {
+ struct swiotlb_debug *d = &per_cpu(tlb_debug, cpu);
+ /* Can't really happend.*/
+ if (!d)
+ continue;
+ if (d->dev_name[0] == 0)
+ continue;
+
+ printk(KERN_INFO "%d [%s] bounce: from:%ld(slow:%ld)to:%ld map:%ld unmap:%ld sync:%ld\n",
+ cpu,
+ d->dev_name ? d->dev_name : "?",
+ d->bounce_from,
+ d->bounce_slow,
+ d->bounce_to,
+ d->map, d->unmap, d->sync);
+ memset(d, 0, sizeof(struct swiotlb_debug));
+ }
+ /* Very crude calculation. */
+ for (i = 0; i < size; i++) {
+ if (io_tlb_list[i] == 0)
+ filled++;
+ }
+ printk(KERN_INFO "SWIOTLB is %ld%% full\n", (filled * 100) / size);
+
+ } while (!kthread_should_stop());
+ return 0;
+}
+static struct task_struct *debug_thread = NULL;
+
+int swiotlb_start_thread(void) {
+
+ if (debug_thread)
+ return -EINVAL;
+ printk(KERN_INFO "%s: Go!\n",__func__);
+ debug_thread = kthread_run(swiotlb_debug_thread, NULL, "swiotlb_debug");
+}
+EXPORT_SYMBOL_GPL(swiotlb_start_thread);
+void swiotlb_stop_thread(void) {
+
+ printk(KERN_INFO "%s: Stop!\n",__func__);
+ if (debug_thread)
+ kthread_stop(debug_thread);
+ debug_thread = NULL;
+}
+EXPORT_SYMBOL_GPL(swiotlb_stop_thread);
+
static int __init
setup_io_tlb_npages(char *str)
{
@@ -166,6 +234,7 @@ void __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
panic("Cannot allocate SWIOTLB overflow buffer!\n");
if (verbose)
swiotlb_print_info();
+
}
/*
@@ -336,6 +405,7 @@ void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size,
enum dma_data_direction dir)
{
unsigned long pfn = PFN_DOWN(phys);
+ struct swiotlb_debug *d = &__get_cpu_var(tlb_debug);
if (PageHighMem(pfn_to_page(pfn))) {
/* The buffer does not have a mapping. Map it in and copy */
@@ -362,11 +432,16 @@ void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size,
dma_addr += sz;
offset = 0;
}
+ d->bounce_slow++;
} else {
- if (dir == DMA_TO_DEVICE)
+ if (dir == DMA_TO_DEVICE) {
memcpy(dma_addr, phys_to_virt(phys), size);
- else
+ d->bounce_to++;
+ }
+ else {
memcpy(phys_to_virt(phys), dma_addr, size);
+ d->bounce_from++;
+ }
}
}
EXPORT_SYMBOL_GPL(swiotlb_bounce);
@@ -471,7 +546,15 @@ found:
io_tlb_orig_addr[index+i] = phys + (i << IO_TLB_SHIFT);
if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)
swiotlb_bounce(phys, dma_addr, size, DMA_TO_DEVICE);
-
+ {
+ struct swiotlb_debug *d;
+ preempt_disable();
+ d = &__get_cpu_var(tlb_debug);
+ preempt_enable();
+ d->map++;
+ snprintf(d->dev_name, sizeof(d->dev_name), "%s %s",
+ dev_driver_string(hwdev), dev_name(hwdev));
+ }
return dma_addr;
}
EXPORT_SYMBOL_GPL(swiotlb_tbl_map_single);
@@ -531,6 +614,15 @@ swiotlb_tbl_unmap_single(struct device *hwdev, char *dma_addr, size_t size,
io_tlb_list[i] = ++count;
}
spin_unlock_irqrestore(&io_tlb_lock, flags);
+ {
+ struct swiotlb_debug *d;
+ preempt_disable();
+ d = &__get_cpu_var(tlb_debug);
+ preempt_enable();
+ d->unmap++;
+ snprintf(d->dev_name, sizeof(d->dev_name), "%s %s",
+ dev_driver_string(hwdev), dev_name(hwdev));
+ }
}
EXPORT_SYMBOL_GPL(swiotlb_tbl_unmap_single);
@@ -541,7 +633,13 @@ swiotlb_tbl_sync_single(struct device *hwdev, char *dma_addr, size_t size,
{
int index = (dma_addr - io_tlb_start) >> IO_TLB_SHIFT;
phys_addr_t phys = io_tlb_orig_addr[index];
-
+ struct swiotlb_debug *d;
+ preempt_disable();
+ d = &__get_cpu_var(tlb_debug);
+ preempt_enable();
+ d->sync++;
+ snprintf(d->dev_name, sizeof(d->dev_name), "%s %s",
+ dev_driver_string(hwdev), dev_name(hwdev));
phys += ((unsigned long)dma_addr & ((1 << IO_TLB_SHIFT) - 1));
switch (target) {
--vkogqOf2sHV7VnPd
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
--vkogqOf2sHV7VnPd--
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?iso-8859-1?Q?Carsten_Schiers?=
Subject: Re:
=?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?=
=?iso-8859-1?q?part2=29?=
Date: Sun, 4 Dec 2011 12:59:08 +0100
Message-ID:
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Return-path:
In-Reply-To: <20111202152339.GA2687@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?lersek=40redhat=2Ecom?= , =?iso-8859-1?Q?Ian_Campbell?= , =?iso-8859-1?Q?zhenzhong=2Eduan=40oracle=2Ecom?=
List-Id: xen-devel@lists.xenproject.org
Thank you, Konrad.
I applied the patch to 3.1.2. In order to have a clear picture, I only enab=
led one PCI card.
The result is:
[ 28.028032] Starting SWIOTLB debug thread.
[ 28.028076] swiotlb_start_thread: Go!
[ 28.028622] xen_swiotlb_start_thread: Go!
[ 33.028153] 0 [budget_av 0000:00:00.0] bounce: from:555352(slow:0)to:0 m=
ap:329 unmap:0 sync:555352
[ 33.028294] SWIOTLB is 2% full
[ 38.028178] 0 budget_av 0000:00:00.0 alloc coherent: 4, free: 0
[ 38.028230] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m=
ap:0 unmap:0 sync:127981
[ 38.028352] SWIOTLB is 2% full
[ 43.028170] 0 [budget_av 0000:00:00.0] bounce: from:128310(slow:0)to:0 m=
ap:0 unmap:0 sync:128310
[ 43.028310] SWIOTLB is 2% full
[ 48.028199] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m=
ap:0 unmap:0 sync:127981
[ 48.028334] SWIOTLB is 2% full
[ 53.028170] 0 [budget_av 0000:00:00.0] bounce: from:128310(slow:0)to:0 m=
ap:0 unmap:0 sync:128310
[ 53.028309] SWIOTLB is 2% full
[ 58.028138] 0 [budget_av 0000:00:00.0] bounce: from:126994(slow:0)to:0 m=
ap:0 unmap:0 sync:126994
[ 58.028195] SWIOTLB is 2% full
[ 63.028170] 0 [budget_av 0000:00:00.0] bounce: from:121401(slow:0)to:0 m=
ap:0 unmap:0 sync:121401
[ 63.029560] SWIOTLB is 2% full
[ 68.028193] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m=
ap:0 unmap:0 sync:127981
[ 68.028329] SWIOTLB is 2% full
[ 73.028104] 0 [budget_av 0000:00:00.0] bounce: from:122717(slow:0)to:0 m=
ap:0 unmap:0 sync:122717
[ 73.028244] SWIOTLB is 2% full
[ 78.028191] 0 [budget_av 0000:00:00.0] bounce: from:127981(slow:0)to:0 m=
ap:0 unmap:0 sync:127981
[ 78.028331] SWIOTLB is 2% full
[ 83.028112] 0 [budget_av 0000:00:00.0] bounce: from:128310(slow:0)to:0 m=
ap:0 unmap:0 sync:128310
[ 83.028171] SWIOTLB is 2% full
Was that long enough? I hope this helps.
Carsten.
-----Urspr=FCngliche Nachricht-----
Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] =
Gesendet: Freitag, 2. Dezember 2011 16:24
An: Konrad Rzeszutek Wilk
Cc: Ian Campbell; xen-devel; Carsten Schiers; zhenzhong.duan@oracle.com; le=
rsek@redhat.com
Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2)
> > > > > That is a puzzle. It should not. The code is very much the same -=
both
> > > > > use the generic SWIOTLB which has not changed for years.
> > > > =
> > > > The swiotlb-xen used by classic-xen kernels (which I assume is what
> > > > Carsten means by "Xenified") isn't exactly the same as the stuff in
> > > > mainline Linux, it's been heavily refactored for one thing. It's not
> > > > impossible that mainline is bouncing something it doesn't really ne=
ed
> > > > to.
> > > =
> > > The usage, at least with 'pci_alloc_coherent' is that there is no bou=
ncing
> > > being done. The alloc_coherent will allocate a nice page, underneath =
the 4GB
> > > mark and give it to the driver. The driver can use it as it wishes an=
d there
> > > is no need to bounce buffer.
> > =
> > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a
> > subset of swiotlb is in use then, all the bouncing stuff _should_ be
> > idle/unused -- but has that been confirmed?
> =
> Nope. I hope that the diagnostic patch I have in mind will prove/disprove=
that.
> Now I just need to find a moment to write it :-)
Done!
Carsten, can you please patch your kernel with this hacky patch and
when you have booted the new kernel, just do
modprobe dump_swiotlb
it should give an idea of how many bounces are happening, coherent
allocations, syncs, and so on.. along with the last driver that
did those operations.
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?iso-8859-1?Q?Carsten_Schiers?=
Subject: Re:
=?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?=
=?iso-8859-1?q?part2=29?=
Date: Sun, 4 Dec 2011 13:09:28 +0100
Message-ID:
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Return-path:
In-Reply-To: <20111202152339.GA2687@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?lersek=40redhat=2Ecom?= , =?iso-8859-1?Q?Ian_Campbell?= , =?iso-8859-1?Q?zhenzhong=2Eduan=40oracle=2Ecom?=
List-Id: xen-devel@lists.xenproject.org
Here with two cards enabled and creating a bit "work" by watching TV with o=
ne oft hem:
[ 23.842720] Starting SWIOTLB debug thread.
[ 23.842750] swiotlb_start_thread: Go!
[ 23.842838] xen_swiotlb_start_thread: Go!
[ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 m=
ap:658 unmap:0 sync:435596
[ 28.841592] SWIOTLB is 4% full
[ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 m=
ap:0 unmap:0 sync:127652
[ 33.840283] SWIOTLB is 4% full
[ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0
[ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m=
ap:0 unmap:0 sync:128310
[ 38.840361] SWIOTLB is 4% full
[ 43.840182] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m=
ap:0 unmap:0 sync:128310
[ 43.840323] SWIOTLB is 4% full
[ 48.840094] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 m=
ap:0 unmap:0 sync:127652
[ 48.840154] SWIOTLB is 4% full
[ 53.840160] 0 [budget_av 0000:00:01.0] bounce: from:119756(slow:0)to:0 m=
ap:0 unmap:0 sync:119756
[ 53.840301] SWIOTLB is 4% full
[ 58.840202] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m=
ap:0 unmap:0 sync:128310
[ 58.840339] SWIOTLB is 4% full
[ 63.840626] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 m=
ap:0 unmap:0 sync:128310
[ 63.840686] SWIOTLB is 4% full
[ 68.840122] 0 [budget_av 0000:00:01.0] bounce: from:127323(slow:0)to:0 m=
ap:0 unmap:0 sync:127323
[ 68.840180] SWIOTLB is 4% full
[ 73.840647] 0 [budget_av 0000:00:01.0] bounce: from:211547(slow:0)to:0 m=
ap:0 unmap:0 sync:211547
[ 73.840784] SWIOTLB is 4% full
[ 78.840204] 0 [budget_av 0000:00:01.0] bounce: from:255962(slow:0)to:0 m=
ap:0 unmap:0 sync:255962
[ 78.840344] SWIOTLB is 4% full
[ 83.840114] 0 [budget_av 0000:00:01.0] bounce: from:255304(slow:0)to:0 m=
ap:0 unmap:0 sync:255304
[ 83.840178] SWIOTLB is 4% full
[ 88.840158] 0 [budget_av 0000:00:01.0] bounce: from:256620(slow:0)to:0 m=
ap:0 unmap:0 sync:256620
[ 88.840302] SWIOTLB is 4% full
[ 93.840185] 0 [budget_av 0000:00:00.0] bounce: from:250040(slow:0)to:0 m=
ap:0 unmap:0 sync:250040
[ 93.840319] SWIOTLB is 4% full
[ 98.840181] 0 [budget_av 0000:00:00.0] bounce: from:255962(slow:0)to:0 m=
ap:0 unmap:0 sync:255962
[ 98.841563] SWIOTLB is 4% full
[ 103.841221] 0 [budget_av 0000:00:00.0] bounce: from:255962(slow:0)to:0 m=
ap:0 unmap:0 sync:255962
[ 103.841361] SWIOTLB is 4% full
[ 108.840247] 0 [budget_av 0000:00:00.0] bounce: from:255962(slow:0)to:0 m=
ap:0 unmap:0 sync:255962
[ 108.840389] SWIOTLB is 4% full
[ 113.840157] 0 [budget_av 0000:00:00.0] bounce: from:261555(slow:0)to:0 m=
ap:0 unmap:0 sync:261555
[ 113.840298] SWIOTLB is 4% full
[ 118.840119] 0 [budget_av 0000:00:00.0] bounce: from:295442(slow:0)to:0 m=
ap:0 unmap:0 sync:295442
[ 118.840259] SWIOTLB is 4% full
[ 123.841025] 0 [budget_av 0000:00:00.0] bounce: from:295113(slow:0)to:0 m=
ap:0 unmap:0 sync:295113
[ 123.841164] SWIOTLB is 4% full
[ 128.840175] 0 [budget_av 0000:00:00.0] bounce: from:294784(slow:0)to:0 m=
ap:0 unmap:0 sync:294784
[ 128.840310] SWIOTLB is 4% full
[ 133.840194] 0 [budget_av 0000:00:00.0] bounce: from:293797(slow:0)to:0 m=
ap:0 unmap:0 sync:293797
[ 133.840330] SWIOTLB is 4% full
[ 138.840498] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m=
ap:0 unmap:0 sync:341502
[ 138.840637] SWIOTLB is 4% full
[ 143.840173] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m=
ap:0 unmap:0 sync:341502
[ 143.840313] SWIOTLB is 4% full
[ 148.840215] 0 [budget_av 0000:00:00.0] bounce: from:341831(slow:0)to:0 m=
ap:0 unmap:0 sync:341831
[ 148.840355] SWIOTLB is 4% full
[ 153.840205] 0 [budget_av 0000:00:01.0] bounce: from:329658(slow:0)to:0 m=
ap:0 unmap:0 sync:329658
[ 153.840341] SWIOTLB is 4% full
[ 158.840137] 0 [budget_av 0000:00:00.0] bounce: from:342160(slow:0)to:0 m=
ap:0 unmap:0 sync:342160
[ 158.840277] SWIOTLB is 4% full
[ 163.841288] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m=
ap:0 unmap:0 sync:341502
[ 163.841424] SWIOTLB is 4% full
[ 168.840198] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m=
ap:0 unmap:0 sync:341502
[ 168.840339] SWIOTLB is 4% full
[ 173.840167] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m=
ap:0 unmap:0 sync:341502
[ 173.840304] SWIOTLB is 4% full
[ 178.840184] 0 [budget_av 0000:00:00.0] bounce: from:328013(slow:0)to:0 m=
ap:0 unmap:0 sync:328013
[ 178.840324] SWIOTLB is 4% full
[ 183.840129] 0 [budget_av 0000:00:00.0] bounce: from:341831(slow:0)to:0 m=
ap:0 unmap:0 sync:341831
[ 183.840269] SWIOTLB is 4% full
[ 188.840123] 0 [budget_av 0000:00:01.0] bounce: from:340515(slow:0)to:0 m=
ap:0 unmap:0 sync:340515
[ 188.841647] SWIOTLB is 4% full
[ 193.840192] 0 [budget_av 0000:00:00.0] bounce: from:338541(slow:0)to:0 m=
ap:0 unmap:0 sync:338541
[ 193.840329] SWIOTLB is 4% full
[ 198.840148] 0 [budget_av 0000:00:01.0] bounce: from:330316(slow:0)to:0 m=
ap:0 unmap:0 sync:330316
[ 198.840230] SWIOTLB is 4% full
[ 203.840860] 0 [budget_av 0000:00:00.0] bounce: from:341831(slow:0)to:0 m=
ap:0 unmap:0 sync:341831
[ 203.841000] SWIOTLB is 4% full
[ 208.840562] 0 [budget_av 0000:00:01.0] bounce: from:337883(slow:0)to:0 m=
ap:0 unmap:0 sync:337883
[ 208.840698] SWIOTLB is 4% full
[ 213.840171] 0 [budget_av 0000:00:00.0] bounce: from:341502(slow:0)to:0 m=
ap:0 unmap:0 sync:341502
[ 213.840311] SWIOTLB is 4% full
[ 218.840214] 0 [budget_av 0000:00:01.0] bounce: from:320117(slow:0)to:0 m=
ap:0 unmap:0 sync:320117
[ 218.840354] SWIOTLB is 4% full
[ 223.840238] 0 [budget_av 0000:00:01.0] bounce: from:299390(slow:0)to:0 m=
ap:0 unmap:0 sync:299390
[ 223.840373] SWIOTLB is 4% full
[ 228.841415] 0 [budget_av 0000:00:01.0] bounce: from:298732(slow:0)to:0 m=
ap:0 unmap:0 sync:298732
[ 228.841560] SWIOTLB is 4% full
[ 233.840705] 0 [budget_av 0000:00:00.0] bounce: from:299061(slow:0)to:0 m=
ap:0 unmap:0 sync:299061
[ 233.840844] SWIOTLB is 4% full
[ 238.840145] 0 [budget_av 0000:00:01.0] bounce: from:293468(slow:0)to:0 m=
ap:0 unmap:0 sync:293468
[ 238.840280] SWIOTLB is 4% full
-----Urspr=FCngliche Nachricht-----
Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] =
Gesendet: Freitag, 2. Dezember 2011 16:24
An: Konrad Rzeszutek Wilk
Cc: Ian Campbell; xen-devel; Carsten Schiers; zhenzhong.duan@oracle.com; le=
rsek@redhat.com
Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2)
> > > > > That is a puzzle. It should not. The code is very much the same -=
both
> > > > > use the generic SWIOTLB which has not changed for years.
> > > > =
> > > > The swiotlb-xen used by classic-xen kernels (which I assume is what
> > > > Carsten means by "Xenified") isn't exactly the same as the stuff in
> > > > mainline Linux, it's been heavily refactored for one thing. It's not
> > > > impossible that mainline is bouncing something it doesn't really ne=
ed
> > > > to.
> > > =
> > > The usage, at least with 'pci_alloc_coherent' is that there is no bou=
ncing
> > > being done. The alloc_coherent will allocate a nice page, underneath =
the 4GB
> > > mark and give it to the driver. The driver can use it as it wishes an=
d there
> > > is no need to bounce buffer.
> > =
> > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a
> > subset of swiotlb is in use then, all the bouncing stuff _should_ be
> > idle/unused -- but has that been confirmed?
> =
> Nope. I hope that the diagnostic patch I have in mind will prove/disprove=
that.
> Now I just need to find a moment to write it :-)
Done!
Carsten, can you please patch your kernel with this hacky patch and
when you have booted the new kernel, just do
modprobe dump_swiotlb
it should give an idea of how many bounces are happening, coherent
allocations, syncs, and so on.. along with the last driver that
did those operations.
From mboxrd@z Thu Jan 1 00:00:00 1970
From: =?iso-8859-1?Q?Carsten_Schiers?=
Subject: Re:
=?iso-8859-1?q?Load_increase_after_memory_upgrade_=28?=
=?iso-8859-1?q?part2=29?=
Date: Sun, 4 Dec 2011 13:18:22 +0100
Message-ID:
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Return-path:
In-Reply-To: <20111202152339.GA2687@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?= , =?iso-8859-1?Q?Konrad_Rzeszutek_Wilk?=
Cc: =?iso-8859-1?Q?xen-devel?= , =?iso-8859-1?Q?lersek=40redhat=2Ecom?= , =?iso-8859-1?Q?Ian_Campbell?= , =?iso-8859-1?Q?zhenzhong=2Eduan=40oracle=2Ecom?=
List-Id: xen-devel@lists.xenproject.org
Should eventually mention that I create the DomU with only the parameter io=
mmu=3Dsoft. I hope
Nothing more is required. For Xenified, it's swiotlb=3D32,force.
Carsten.
-----Urspr=FCngliche Nachricht-----
Von: Konrad Rzeszutek Wilk [mailto:konrad@darnok.org] =
Gesendet: Freitag, 2. Dezember 2011 16:24
An: Konrad Rzeszutek Wilk
Cc: Ian Campbell; xen-devel; Carsten Schiers; zhenzhong.duan@oracle.com; le=
rsek@redhat.com
Betreff: Re: [Xen-devel] Load increase after memory upgrade (part2)
> > > > > That is a puzzle. It should not. The code is very much the same -=
both
> > > > > use the generic SWIOTLB which has not changed for years.
> > > > =
> > > > The swiotlb-xen used by classic-xen kernels (which I assume is what
> > > > Carsten means by "Xenified") isn't exactly the same as the stuff in
> > > > mainline Linux, it's been heavily refactored for one thing. It's not
> > > > impossible that mainline is bouncing something it doesn't really ne=
ed
> > > > to.
> > > =
> > > The usage, at least with 'pci_alloc_coherent' is that there is no bou=
ncing
> > > being done. The alloc_coherent will allocate a nice page, underneath =
the 4GB
> > > mark and give it to the driver. The driver can use it as it wishes an=
d there
> > > is no need to bounce buffer.
> > =
> > Oh, I didn't realise dma_alloc_coherent was part of swiotlb now. Only a
> > subset of swiotlb is in use then, all the bouncing stuff _should_ be
> > idle/unused -- but has that been confirmed?
> =
> Nope. I hope that the diagnostic patch I have in mind will prove/disprove=
that.
> Now I just need to find a moment to write it :-)
Done!
Carsten, can you please patch your kernel with this hacky patch and
when you have booted the new kernel, just do
modprobe dump_swiotlb
it should give an idea of how many bounces are happening, coherent
allocations, syncs, and so on.. along with the last driver that
did those operations.
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Mon, 5 Dec 2011 22:26:21 -0500
Message-ID: <20111206032621.GA6568@phenom.dumpdata.com>
References:
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
Content-Disposition: inline
In-Reply-To:
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Carsten Schiers
Cc: Konrad Rzeszutek Wilk , xen-devel , "lersek@redhat.com" , Ian Campbell , "zhenzhong.duan@oracle.com"
List-Id: xen-devel@lists.xenproject.org
On Sun, Dec 04, 2011 at 01:09:28PM +0100, Carsten Schiers wrote:
> Here with two cards enabled and creating a bit "work" by watching TV with one oft hem:
>
> [ 23.842720] Starting SWIOTLB debug thread.
> [ 23.842750] swiotlb_start_thread: Go!
> [ 23.842838] xen_swiotlb_start_thread: Go!
> [ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 map:658 unmap:0 sync:435596
> [ 28.841592] SWIOTLB is 4% full
> [ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 map:0 unmap:0 sync:127652
> [ 33.840283] SWIOTLB is 4% full
> [ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0
> [ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 map:0 unmap:0 sync:128310
Whoa. Yes. You are definitly using the bounce buffer :-)
Now it is time to look at why the drive is not using those coherent ones - it
looks to allocate just eight of them but does not use them.. Unless it is
using them _and_ bouncing them (which would be odd).
And BTW, you can lower your 'swiotlb=XX' value. The 4% is how much you
are using of the default size.
I should find out_why_ the old Xen kernels do not use the bounce buffer
so much...
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Wed, 14 Dec 2011 16:23:51 -0400
Message-ID: <20111214202351.GA25896@andromeda.dapyr.net>
References:
<20111206032621.GA6568@phenom.dumpdata.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Return-path:
Content-Disposition: inline
In-Reply-To: <20111206032621.GA6568@phenom.dumpdata.com>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Konrad Rzeszutek Wilk
Cc: "lersek@redhat.com" , xen-devel , Carsten Schiers , Ian Campbell , "zhenzhong.duan@oracle.com"
List-Id: xen-devel@lists.xenproject.org
On Mon, Dec 05, 2011 at 10:26:21PM -0500, Konrad Rzeszutek Wilk wrote:
> On Sun, Dec 04, 2011 at 01:09:28PM +0100, Carsten Schiers wrote:
> > Here with two cards enabled and creating a bit "work" by watching TV with one oft hem:
> >
> > [ 23.842720] Starting SWIOTLB debug thread.
> > [ 23.842750] swiotlb_start_thread: Go!
> > [ 23.842838] xen_swiotlb_start_thread: Go!
> > [ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 map:658 unmap:0 sync:435596
> > [ 28.841592] SWIOTLB is 4% full
> > [ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 map:0 unmap:0 sync:127652
> > [ 33.840283] SWIOTLB is 4% full
> > [ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0
> > [ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 map:0 unmap:0 sync:128310
>
> Whoa. Yes. You are definitly using the bounce buffer :-)
>
> Now it is time to look at why the drive is not using those coherent ones - it
> looks to allocate just eight of them but does not use them.. Unless it is
> using them _and_ bouncing them (which would be odd).
>
> And BTW, you can lower your 'swiotlb=XX' value. The 4% is how much you
> are using of the default size.
So I able to see this with an atl1c ethernet driver on my SandyBridge i3
box. It looks as if the card is truly 32-bit so on a box with 8GB it
bounces the data. If I booted the Xen hypervisor with 'mem=4GB' I get no
bounces (no surprise there).
In other words - I see the same behavior you are seeing. Now off to:
>
> I should find out_why_ the old Xen kernels do not use the bounce buffer
> so much...
which will require some fiddling around.
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Konrad Rzeszutek Wilk
Subject: Re: Load increase after memory upgrade (part2)
Date: Wed, 14 Dec 2011 17:07:00 -0500
Message-ID: <20111214220700.GA9926@phenom.dumpdata.com>
References:
<20111206032621.GA6568@phenom.dumpdata.com>
<20111214202351.GA25896@andromeda.dapyr.net>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="45Z9DzgjV8m4Oswq"
Return-path:
Content-Disposition: inline
In-Reply-To: <20111214202351.GA25896@andromeda.dapyr.net>
List-Unsubscribe: ,
List-Post:
List-Help:
List-Subscribe: ,
Sender: xen-devel-bounces@lists.xensource.com
Errors-To: xen-devel-bounces@lists.xensource.com
To: Konrad Rzeszutek Wilk
Cc: xen-devel , Ian Campbell , Carsten Schiers , "zhenzhong.duan@oracle.com" , linux@eikelenboom.it, "lersek@redhat.com"
List-Id: xen-devel@lists.xenproject.org
--45Z9DzgjV8m4Oswq
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On Wed, Dec 14, 2011 at 04:23:51PM -0400, Konrad Rzeszutek Wilk wrote:
> On Mon, Dec 05, 2011 at 10:26:21PM -0500, Konrad Rzeszutek Wilk wrote:
> > On Sun, Dec 04, 2011 at 01:09:28PM +0100, Carsten Schiers wrote:
> > > Here with two cards enabled and creating a bit "work" by watching TV with one oft hem:
> > >
> > > [ 23.842720] Starting SWIOTLB debug thread.
> > > [ 23.842750] swiotlb_start_thread: Go!
> > > [ 23.842838] xen_swiotlb_start_thread: Go!
> > > [ 28.841451] 0 [budget_av 0000:00:01.0] bounce: from:435596(slow:0)to:0 map:658 unmap:0 sync:435596
> > > [ 28.841592] SWIOTLB is 4% full
> > > [ 33.840147] 0 [budget_av 0000:00:01.0] bounce: from:127652(slow:0)to:0 map:0 unmap:0 sync:127652
> > > [ 33.840283] SWIOTLB is 4% full
> > > [ 33.844222] 0 budget_av 0000:00:01.0 alloc coherent: 8, free: 0
> > > [ 38.840227] 0 [budget_av 0000:00:01.0] bounce: from:128310(slow:0)to:0 map:0 unmap:0 sync:128310
> >
> > Whoa. Yes. You are definitly using the bounce buffer :-)
> >
> > Now it is time to look at why the drive is not using those coherent ones - it
> > looks to allocate just eight of them but does not use them.. Unless it is
> > using them _and_ bouncing them (which would be odd).
> >
> > And BTW, you can lower your 'swiotlb=XX' value. The 4% is how much you
> > are using of the default size.
>
> So I able to see this with an atl1c ethernet driver on my SandyBridge i3
> box. It looks as if the card is truly 32-bit so on a box with 8GB it
> bounces the data. If I booted the Xen hypervisor with 'mem=4GB' I get no
> bounces (no surprise there).
>
> In other words - I see the same behavior you are seeing. Now off to:
> >
> > I should find out_why_ the old Xen kernels do not use the bounce buffer
> > so much...
>
> which will require some fiddling around.
And I am not seeing any difference - the swiotlb is used with the same usage when
booting a classic (old style XEnoLinux) 2.6.32 vs using a brand new pvops (3.2).
Obviously if I limit the physical amount of memory (so 'mem=4GB' on Xen hypervisor
line), the bounce usage disappears. Hmm, I wonder if there is a nice way to
tell the hypervisor - hey, please stuff dom0 under 4GB.
Here is the patch I used against classic XenLinux. Any chance you could run
it with your classis guests and see what numbers you get?
--45Z9DzgjV8m4Oswq
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="swiotlb-against-old-type.patch"
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
index ab0bb23..17faefd 100644
--- a/drivers/xen/Kconfig
+++ b/drivers/xen/Kconfig
@@ -469,3 +469,10 @@ config XEN_SYS_HYPERVISOR
hypervisor environment. When running native or in another
virtual environment, /sys/hypervisor will still be present,
but will have no xen contents.
+
+config SWIOTLB_DEBUG
+ tristate "swiotlb debug facility."
+ default m
+ help
+ Do not enable it.
+
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index 28fb50a..df84614 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -42,3 +42,4 @@ obj-$(CONFIG_XEN_GRANT_DEV) += gntdev/
obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL) += sfc_netutil/
obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND) += sfc_netfront/
obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND) += sfc_netback/
+obj-$(CONFIG_SWIOTLB_DEBUG) += dump_swiotlb.o
diff --git a/drivers/xen/dump_swiotlb.c b/drivers/xen/dump_swiotlb.c
new file mode 100644
index 0000000..7168eed
--- /dev/null
+++ b/drivers/xen/dump_swiotlb.c
@@ -0,0 +1,72 @@
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2.0 as published by
+ * the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include