From romit.misra@flipkart.com Tue Dec 10 06:12:22 2019 From: Romit Misra To: ceph-users@ceph.io Subject: [ceph-users] Re: osdmaps not trimmed until ceph-mon's Date: Tue, 10 Dec 2019 11:41:58 +0530 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7857605896075748118==" --===============7857605896075748118== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Bryan and Dan, Had some similar observations, and wanted some data points from you as well if possible. 1. When you say down osd , is it down and in or down and out. 2. I see the osd accumulating map ranges, when continuous recovery is going on, due to osd flaps( that is some portion of the total of pgs in cluster are not in active+clean) state. 3.Another observation is that, although it may be one of the pools that see a osd churn, the map ranges seem to increase across all the OSd across all the pools. 4.I use the asok socket to dump the status, on osd Daemon which shows the map ranges. 5.Even I tried restarting Mon, one after another, and that seemed to reduce the space, but in a sporadic fashion. 6. Once there was some breathing room, in terms of OSd not flapping, and all PG being in active + clean state, the size trimmed down to almost optimal spaces. 7. I found some pointers at :- https://docs.ceph.com/docs/master/dev/mon-osdmap-prune/ 8. Th behaviour I am specifying us in 12.X Luminous release. 9. Would you care to share what commands you use to dump maps usage info from space perspective. Thanks Romit On Mon, 9 Dec 2019, 22:56 , wrote: > Send ceph-users mailing list submissions to > ceph-users(a)ceph.io > > To subscribe or unsubscribe via email, send a message with subject or > body 'help' to > ceph-users-request(a)ceph.io > > You can reach the person managing the list at > ceph-users-owner(a)ceph.io > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of ceph-users digest..." > > Today's Topics: > > 1. RGW listing millions of objects takes too much time (Arash Shams) > 2. Re: RGW listing millions of objects takes too much time > (Robert LeBlanc) > 3. ceph mgr daemon multiple ip addresses (Frank R) > 4. Re: osdmaps not trimmed until ceph-mon's restarted (if cluster has a > down osd) > (Bryan Stillwell) > > > ---------------------------------------------------------------------- > > Date: Mon, 9 Dec 2019 15:46:04 +0000 > From: Arash Shams > Subject: [ceph-users] RGW listing millions of objects takes too much > time > To: "ceph-users(a)ceph.io" > Message-ID: P265.PROD.OUTLOOK.COM> > Content-Type: multipart/alternative; boundary=3D"_000_CWXP265MB128679 > DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_" > > --_000_CWXP265MB128679DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_ > Content-Type: text/plain; charset=3D"iso-8859-1" > Content-Transfer-Encoding: quoted-printable > > Dear All, > > I have almost 30 million objects and I want to list them and index them > som=3D > ewhere else, > Im using boto3 with continuation Marker but it takes almost 9 hours > > can I run it in multiple threads to make it faster? what solution do you > su=3D > ggest to speedup this process, > > > Thanks > > > --_000_CWXP265MB128679DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_ > Content-Type: text/html; charset=3D"iso-8859-1" > Content-Transfer-Encoding: quoted-printable > > > > charset=3D3Diso-8859-=3D > 1"> > > > >
12pt;=3D > color: rgb(0, 0, 0);"> > Dear All, 
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> > I have almost 30 million objects and I want to list them and index them > som=3D > ewhere else, 
>
12pt;=3D > color: rgb(0, 0, 0);"> > Im using boto3 with continuation Marker but it takes almost 9 hours
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> > can I run it in multiple threads to make it faster? what solution do you > su=3D > ggest to speedup this process, 
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
>
12pt;=3D > color: rgb(0, 0, 0);"> > Thanks 
>
12pt;=3D > color: rgb(0, 0, 0);"> >
>
> > > > --_000_CWXP265MB128679DE9E6B2A6CA289B16492580CWXP265MB1286GBRP_-- > > ------------------------------ > > Date: Mon, 9 Dec 2019 08:23:55 -0800 > From: Robert LeBlanc > Subject: [ceph-users] Re: RGW listing millions of objects takes too > much time > To: Arash Shams > Cc: "ceph-users(a)ceph.io" > Message-ID: > jAW-+ZPOFS-f9Oag(a)mail.gmail.com> > Content-Type: multipart/alternative; > boundary=3D"0000000000000e664e059947d3b2" > > --0000000000000e664e059947d3b2 > Content-Type: text/plain; charset=3D"UTF-8" > > On Mon, Dec 9, 2019 at 7:47 AM Arash Shams wrote: > > > Dear All, > > > > I have almost 30 million objects and I want to list them and index them > > somewhere else, > > Im using boto3 with continuation Marker but it takes almost 9 hours > > > > can I run it in multiple threads to make it faster? what solution do you > > suggest to speedup this process, > > > > > > Thanks > > > > I've thought about indexing objects elsewhere as well. One thought I had > was hooking into the HTTP flow where a PUT or DEL would update the objects > in some kind of database (async of course). We could also gather stats with > GET and POST. Initially, my thoughts were to hook into haproxy since we > already use it, but possibly RGW if that is an option. That way it would > always be up to date and not have to do big scans on the buckets (our > buckets would not perform well with this). I haven't actually gotten to the > implementation phase of this idea. > > ---------------- > Robert LeBlanc > PGP Fingerprint 79A2 9CA4 6CC4 45DD A904 C70E E654 3BB2 FA62 B9F1 > > --0000000000000e664e059947d3b2 > Content-Type: text/html; charset=3D"UTF-8" > Content-Transfer-Encoding: quoted-printable > >
On Mon, Dec 9, 2019 at 7:47 AM Arash > Sham=3D > s <ara4sh(a)hotmail.com> > wrot=3D > e:
st=3D > yle=3D3D"margin:0px 0px 0px 0.8ex;border-left:1px solid > rgb(204,204,204);padd=3D > ing-left:1ex"> > > > > >
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > Dear All,=3DC2=3DA0
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > I have almost 30 million objects and I want to list them and index them > som=3D > ewhere else,=3DC2=3DA0
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > Im using boto3 with continuation Marker but it takes almost 9 hours
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > can I run it in multiple threads to make it faster? what solution do you > su=3D > ggest to speedup this process,=3DC2=3DA0
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> >
>
>
style=3D3D"font-family:Calibri,Helvetica,sans-serif;font-size:12pt;color=3D > :rgb(0,0,0)"> > Thanks=3DC2=3DA0
class=3D3D"gmail_quote">
<=3D > div class=3D3D"gmail_quote">I've thought about indexing objects > elsewhere=3D > as well. One thought I had was hooking into the HTTP flow where a PUT or > D=3D > EL would update the objects in some kind of database (async of course). We > =3D > could also gather stats with GET and POST. Initially, my thoughts were to > h=3D > ook into haproxy since we already use it, but possibly RGW if that is an > op=3D > tion. That way it would always be up to date and not have to do big scans > o=3D > n the buckets (our buckets would not perform well with this). I > haven't=3D > actually gotten to the implementation phase of this idea.

=3D3D"all">
class=3D3D"gmail_signature">---------------- r>Robert LeBlanc
PGP Fingerprint 79A2 9CA4 6CC4 45DD > A9=3D > 04 =3DC2=3DA0C70E E654 3BB2 FA62 B9F1=3DC2=3DA0
> > --0000000000000e664e059947d3b2-- > > ------------------------------ > > Date: Mon, 9 Dec 2019 11:54:10 -0500 > From: Frank R > Subject: [ceph-users] ceph mgr daemon multiple ip addresses > To: ceph-users > Message-ID: > YBH7Etsm5VmiO_WFEPg(a)mail.gmail.com> > Content-Type: multipart/alternative; > boundary=3D"0000000000004ef36d0599483fd9" > > --0000000000004ef36d0599483fd9 > Content-Type: text/plain; charset=3D"UTF-8" > > Hi all, > > Does anyone know what possible issues can arise if the ceph mgr daemon is > running on a mon node that has 2 ips in the public net range (1 is a > loopback address). > > As I understand the it. mgr will bind to all ips > > FYI - I am not sure why the loopback is there, I am trying to find out. > > thx > Frank > > > > > mlovell - ceph anycast > > --0000000000004ef36d0599483fd9 > Content-Type: text/html; charset=3D"UTF-8" > Content-Transfer-Encoding: quoted-printable > >
Hi all,

Does anyone know what possible > =3D > issues can arise if the ceph mgr daemon is running on a mon node that has > 2=3D > ips in the public net range (1 is a loopback > address).

A=3D > s I understand the it. mgr will bind to all ips

FYI - I > a=3D > m not sure why the loopback is there, I am trying to find > out.
r>
thx
Frank




mlovell - ceph > anycast<=3D > br>
> > --0000000000004ef36d0599483fd9-- > > ------------------------------ > > Date: Mon, 9 Dec 2019 17:24:27 +0000 > From: Bryan Stillwell > Subject: [ceph-users] Re: osdmaps not trimmed until ceph-mon's > restarted (if cluster has a down osd) > To: Dan van der Ster > Cc: Joao Eduardo Luis , "dev(a)ceph.io" , > ceph-users > Message-ID: <9B145B17-6665-4254-8D6A-04A9B37389C3(a)godaddy.com> > Content-Type: text/plain; charset=3D"us-ascii" > > On Nov 18, 2019, at 8:12 AM, Dan van der Ster wrote: > > > > On Fri, Nov 15, 2019 at 4:45 PM Joao Eduardo Luis wrote: > >> > >> On 19/11/14 11:04AM, Gregory Farnum wrote: > >>> On Thu, Nov 14, 2019 at 8:14 AM Dan van der Ster > wrote: > >>>> > >>>> Hi Joao, > >>>> > >>>> I might have found the reason why several of our clusters (and maybe > >>>> Bryan's too) are getting stuck not trimming osdmaps. > >>>> It seems that when an osd fails, the min_last_epoch_clean gets stuck > >>>> forever (even long after HEALTH_OK), until the ceph-mons are > >>>> restarted. > >>>> > >>>> I've updated the ticket: https://tracker.ceph.com/issues/41154 > >>> > >>> Wrong ticket, I think you meant > https://tracker.ceph.com/issues/37875#note-7 > >> > >> I've seen this behavior a long, long time ago, but stopped being able to > >> reproduce it consistently enough to ensure the patch was working > properly. > >> > >> I think I have a patch here: > >> > >> https://github.com/ceph/ceph/pull/19076/commits > >> > >> If you are feeling adventurous, and want to give it a try, let me know. > I'll > >> be happy to forward port it to whatever you are running. > > > > Thanks Joao, this patch is what I had in mind. > > > > I'm trying to evaluate how adventurous this would be -- Is there any > > risk that if a huge number of osds are down all at once (but > > transiently), it would trigger the mon to trim too many maps? > > I would expect that the remaining up OSDs will have a safe, low, > osd_epoch ? > > > > And anyway I guess that your proposed get_min_last_epoch_clean patch > > is equivalent to what we have today if we restart the ceph-mon leader > > while an osd is down. > > Joao, > > I ran into this again today and found over 100,000 osdmaps on all 1,000 > OSDs (~50 TiB of disk space used just by osdmaps). There were down OSDs > (pretty regular occurrence with ~1,000 OSDs) so that matches up with what > Dan found. Then when I restarted all the mon nodes twice the osdmaps > started cleaning up. > > I believe the steps to reproduce would look like this: > > 1. Start with a cluster with at least 1 down osd > 2. Expand the cluster (the bigger the expansion, the more osdmaps that > pile up) > 3. Notice that after the expansion completes and the cluster is healthy > that the old osdmaps aren't cleaned up > > I would be willing to test the fix on our test cluster after 14.2.5 comes > out. Could you make a build based on that release? > > Thanks, > Bryan > > ------------------------------ > > Subject: Digest Footer > > _______________________________________________ > ceph-users mailing list -- ceph-users(a)ceph.io > To unsubscribe send an email to ceph-users-leave(a)ceph.io > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s > > > ------------------------------ > > End of ceph-users Digest, Vol 83, Issue 35 > ****************************************** > --=20 *----------------------------------------------------------------------------= -------------* *This email and any files transmitted with it are confidential and=20 intended solely for the use of the individual or entity to whom they are=20 addressed. If you have received this email in error, please notify the=20 system manager. This message contains confidential information and is=20 intended only for the individual named. If you are not the named addressee,=20 you should not disseminate, distribute or copy this email. Please notify=20 the sender immediately by email if you have received this email by mistake=20 and delete this email from your system. If you are not the intended=20 recipient, you are notified that disclosing, copying, distributing or=20 taking any action in reliance on the contents of this information is=20 strictly prohibited.***** =C2=A0**** *Any views or opinions presented in this=20 email are solely those of the author and do not necessarily represent those=20 of the organization. Any information on shares, debentures or similar=20 instruments, recommended product pricing, valuations and the like are for=20 information purposes only. It is not meant to be an instruction or=20 recommendation, as the case may be, to buy or to sell securities, products,=20 services nor an offer to buy or sell securities, products or services=20 unless specifically stated to be so on behalf of the Flipkart group.=20 Employees of=C2=A0the Flipkart group of companies are expressly required not = to=20 make defamatory statements and not to infringe or authorise any=20 infringement of copyright or any other legal right by email communications.=20 Any such communication is contrary to organizational policy and outside the=20 scope of the employment of the individual concerned. The organization will=20 not accept any liability in respect of such communication, and the employee=20 responsible will be personally liable for any damages or other liability=20 arising.***** =C2=A0**** *Our organization accepts no liability for the=20 content of this email, or for the consequences of any actions taken on the=20 basis of the information=C2=A0*provided,*=C2=A0unless that information is=20 subsequently confirmed in writing. If you are not the intended recipient,=20 you are notified that disclosing, copying, distributing or taking any=20 action in reliance on the contents of this information is strictly=20 prohibited.* _----------------------------------------------------------------------------= -------------_ --===============7857605896075748118== Content-Type: text/html Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.htm" MIME-Version: 1.0 PGRpdiBkaXI9ImF1dG8iPjxkaXY+SGkgQnJ5YW4gYW5kIERhbizCoDwvZGl2PjxkaXYgZGlyPSJh dXRvIj5IYWQgc29tZSBzaW1pbGFyIG9ic2VydmF0aW9ucywgYW5kIHdhbnRlZCBzb21lIGRhdGEg cG9pbnRzIGZyb20geW91IGFzIHdlbGwgaWYgcG9zc2libGUuPC9kaXY+PGRpdiBkaXI9ImF1dG8i Pjxicj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+MS4gV2hlbiB5b3Ugc2F5IGRvd24gb3NkICwgaXMg aXQgZG93biBhbmQgaW4gb3IgZG93biBhbmQgb3V0LjwvZGl2PjxkaXYgZGlyPSJhdXRvIj4yLiBJ IHNlZSB0aGUgb3NkIGFjY3VtdWxhdGluZyBtYXAgcmFuZ2VzLCB3aGVuIGNvbnRpbnVvdXMgcmVj b3ZlcnkgaXMgZ29pbmcgb24sIGR1ZSB0byBvc2QgZmxhcHMoIHRoYXQgaXMgc29tZSBwb3J0aW9u IG9mIHRoZSB0b3RhbCBvZiBwZ3MgaW4gY2x1c3RlciBhcmUgbm90IGluIGFjdGl2ZStjbGVhbikg c3RhdGUuPC9kaXY+PGRpdiBkaXI9ImF1dG8iPjMuQW5vdGhlciBvYnNlcnZhdGlvbiBpcyB0aGF0 LCBhbHRob3VnaCBpdCBtYXkgYmUgb25lIG9mIHRoZSBwb29scyB0aGF0IHNlZSBhIG9zZCBjaHVy biwgdGhlIG1hcCByYW5nZXMgc2VlbSB0byBpbmNyZWFzZSBhY3Jvc3MgYWxsIHRoZSBPU2QgYWNy b3NzIGFsbCB0aGUgcG9vbHMuPC9kaXY+PGRpdiBkaXI9ImF1dG8iPjQuSSB1c2UgdGhlIGFzb2sg c29ja2V0IHRvIGR1bXAgdGhlIHN0YXR1cywgb24gb3NkIERhZW1vbiB3aGljaCBzaG93cyB0aGUg bWFwIHJhbmdlcy48L2Rpdj48ZGl2IGRpcj0iYXV0byI+NS5FdmVuIEkgdHJpZWQgcmVzdGFydGlu ZyBNb24sIG9uZSBhZnRlciBhbm90aGVyLCBhbmQgdGhhdCBzZWVtZWQgdG8gcmVkdWNlIHRoZSBz cGFjZSwgYnV0IGluIGEgc3BvcmFkaWMgZmFzaGlvbi48L2Rpdj48ZGl2IGRpcj0iYXV0byI+Ni4g T25jZSB0aGVyZSB3YXMgc29tZSBicmVhdGhpbmcgcm9vbSwgaW4gdGVybXMgb2YgT1NkIG5vdCBm bGFwcGluZywgYW5kIGFsbCBQRyBiZWluZyBpbiBhY3RpdmUgKyBjbGVhbiBzdGF0ZSwgdGhlIHNp emUgdHJpbW1lZCBkb3duIHRvIGFsbW9zdCBvcHRpbWFsIHNwYWNlcy48L2Rpdj48ZGl2IGRpcj0i YXV0byI+Ny4gSSBmb3VuZCBzb21lIHBvaW50ZXJzIGF0IDotwqA8L2Rpdj48ZGl2IGRpcj0iYXV0 byI+wqA8YSBocmVmPSJodHRwczovL2RvY3MuY2VwaC5jb20vZG9jcy9tYXN0ZXIvZGV2L21vbi1v c2RtYXAtcHJ1bmUvIj5odHRwczovL2RvY3MuY2VwaC5jb20vZG9jcy9tYXN0ZXIvZGV2L21vbi1v c2RtYXAtcHJ1bmUvPC9hPjwvZGl2PjxkaXYgZGlyPSJhdXRvIj44LiBUaCBiZWhhdmlvdXIgSSBh bSBzcGVjaWZ5aW5nIHVzIGluIDEyLlggTHVtaW5vdXMgcmVsZWFzZS48L2Rpdj48ZGl2IGRpcj0i YXV0byI+OS4gV291bGQgeW91IGNhcmUgdG8gc2hhcmUgd2hhdCBjb21tYW5kcyB5b3UgdXNlIHRv IGR1bXAgbWFwcyB1c2FnZSBpbmZvIGZyb20gc3BhY2UgcGVyc3BlY3RpdmUuPC9kaXY+PGRpdiBk aXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgZGlyPSJh dXRvIj5UaGFua3M8L2Rpdj48ZGl2IGRpcj0iYXV0byI+Um9taXQ8L2Rpdj48ZGl2IGRpcj0iYXV0 byI+PGJyPjwvZGl2PjxkaXYgZGlyPSJhdXRvIj48YnI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1 b3RlIiBkaXI9ImF1dG8iPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBNb24s IDkgRGVjIDIwMTksIDIyOjU2ICwgJmx0OzxhIGhyZWY9Im1haWx0bzpjZXBoLXVzZXJzLXJlcXVl c3RAY2VwaC5pbyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciI+Y2VwaC11c2Vycy1y ZXF1ZXN0QGNlcGguaW88L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9 ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNj Y2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+U2VuZCBjZXBoLXVzZXJzIG1haWxpbmcgbGlzdCBz dWJtaXNzaW9ucyB0bzxicj4KwqAgwqAgwqAgwqAgPGEgaHJlZj0ibWFpbHRvOmNlcGgtdXNlcnNA Y2VwaC5pbyIgcmVsPSJub3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5jZXBo LXVzZXJzQGNlcGguaW88L2E+PGJyPgo8YnI+ClRvIHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB2 aWEgZW1haWwsIHNlbmQgYSBtZXNzYWdlIHdpdGggc3ViamVjdCBvcjxicj4KYm9keSAmIzM5O2hl bHAmIzM5OyB0bzxicj4KwqAgwqAgwqAgwqAgPGEgaHJlZj0ibWFpbHRvOmNlcGgtdXNlcnMtcmVx dWVzdEBjZXBoLmlvIiByZWw9Im5vcmVmZXJyZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsi PmNlcGgtdXNlcnMtcmVxdWVzdEBjZXBoLmlvPC9hPjxicj4KPGJyPgpZb3UgY2FuIHJlYWNoIHRo ZSBwZXJzb24gbWFuYWdpbmcgdGhlIGxpc3QgYXQ8YnI+CsKgIMKgIMKgIMKgIDxhIGhyZWY9Im1h aWx0bzpjZXBoLXVzZXJzLW93bmVyQGNlcGguaW8iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVy IiB0YXJnZXQ9Il9ibGFuayI+Y2VwaC11c2Vycy1vd25lckBjZXBoLmlvPC9hPjxicj4KPGJyPgpX aGVuIHJlcGx5aW5nLCBwbGVhc2UgZWRpdCB5b3VyIFN1YmplY3QgbGluZSBzbyBpdCBpcyBtb3Jl IHNwZWNpZmljPGJyPgp0aGFuICZxdW90O1JlOiBDb250ZW50cyBvZiBjZXBoLXVzZXJzIGRpZ2Vz dC4uLiZxdW90Ozxicj4KPGJyPgpUb2RheSYjMzk7cyBUb3BpY3M6PGJyPgo8YnI+CsKgIMKgMS4g UkdXIGxpc3RpbmcgbWlsbGlvbnMgb2Ygb2JqZWN0cyB0YWtlcyB0b28gbXVjaCB0aW1lIChBcmFz aCBTaGFtcyk8YnI+CsKgIMKgMi4gUmU6IFJHVyBsaXN0aW5nIG1pbGxpb25zIG9mIG9iamVjdHMg dGFrZXMgdG9vIG11Y2ggdGltZTxicj4KwqAgwqAgwqAgKFJvYmVydCBMZUJsYW5jKTxicj4KwqAg wqAzLiBjZXBoIG1nciBkYWVtb24gbXVsdGlwbGUgaXAgYWRkcmVzc2VzIChGcmFuayBSKTxicj4K wqAgwqA0LiBSZTogb3NkbWFwcyBub3QgdHJpbW1lZCB1bnRpbCBjZXBoLW1vbiYjMzk7cyByZXN0 YXJ0ZWQgKGlmIGNsdXN0ZXIgaGFzIGEgZG93biBvc2QpPGJyPgrCoCDCoCDCoCAoQnJ5YW4gU3Rp bGx3ZWxsKTxicj4KPGJyPgo8YnI+Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+Cjxicj4KRGF0ZTogTW9uLCA5 IERlYyAyMDE5IDE1OjQ2OjA0ICswMDAwPGJyPgpGcm9tOiBBcmFzaCBTaGFtcyAmbHQ7PGEgaHJl Zj0ibWFpbHRvOmFyYTRzaEBob3RtYWlsLmNvbSIgcmVsPSJub3JlZmVycmVyIG5vcmVmZXJyZXIi IHRhcmdldD0iX2JsYW5rIj5hcmE0c2hAaG90bWFpbC5jb208L2E+Jmd0Ozxicj4KU3ViamVjdDog W2NlcGgtdXNlcnNdIFJHVyBsaXN0aW5nIG1pbGxpb25zIG9mIG9iamVjdHMgdGFrZXMgdG9vIG11 Y2g8YnI+CsKgIMKgIMKgIMKgIHRpbWU8YnI+ClRvOiAmcXVvdDs8YSBocmVmPSJtYWlsdG86Y2Vw aC11c2Vyc0BjZXBoLmlvIiByZWw9Im5vcmVmZXJyZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxh bmsiPmNlcGgtdXNlcnNAY2VwaC5pbzwvYT4mcXVvdDsgJmx0OzxhIGhyZWY9Im1haWx0bzpjZXBo LXVzZXJzQGNlcGguaW8iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFu ayI+Y2VwaC11c2Vyc0BjZXBoLmlvPC9hPiZndDs8YnI+Ck1lc3NhZ2UtSUQ6wqAgJmx0O0NXWFAy NjVNQjEyODY3OURFOUU2QjJBNkNBMjg5QjE2NDkyNTgwQENXWFAyNjVNQjEyODYuR0JSPGJyPgrC oCDCoCDCoCDCoCA8YSBocmVmPSJodHRwOi8vUDI2NS5QUk9ELk9VVExPT0suQ09NIiByZWw9Im5v cmVmZXJyZXIgbm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+UDI2NS5QUk9E Lk9VVExPT0suQ09NPC9hPiZndDs8YnI+CkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0 aXZlO8KgIMKgIGJvdW5kYXJ5PSZxdW90O18wMDBfQ1dYUDI2NU1CMTI4Njc5PGJyPgrCoCDCoCDC oCDCoCBERTlFNkIyQTZDQTI4OUIxNjQ5MjU4MENXWFAyNjVNQjEyODZHQlJQXyZxdW90Ozxicj4K PGJyPgotLV8wMDBfQ1dYUDI2NU1CMTI4Njc5REU5RTZCMkE2Q0EyODlCMTY0OTI1ODBDV1hQMjY1 TUIxMjg2R0JSUF88YnI+CkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0mcXVvdDtp c28tODg1OS0xJnF1b3Q7PGJyPgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJp bnRhYmxlPGJyPgo8YnI+CkRlYXIgQWxsLDxicj4KPGJyPgpJIGhhdmUgYWxtb3N0IDMwIG1pbGxp b24gb2JqZWN0cyBhbmQgSSB3YW50IHRvIGxpc3QgdGhlbSBhbmQgaW5kZXggdGhlbSBzb209PGJy Pgpld2hlcmUgZWxzZSw8YnI+CkltIHVzaW5nIGJvdG8zIHdpdGggY29udGludWF0aW9uIE1hcmtl ciBidXQgaXQgdGFrZXMgYWxtb3N0IDkgaG91cnM8YnI+Cjxicj4KY2FuIEkgcnVuIGl0IGluIG11 bHRpcGxlIHRocmVhZHMgdG8gbWFrZSBpdCBmYXN0ZXI/IHdoYXQgc29sdXRpb24gZG8geW91IHN1 PTxicj4KZ2dlc3QgdG8gc3BlZWR1cCB0aGlzIHByb2Nlc3MsPGJyPgo8YnI+Cjxicj4KVGhhbmtz PGJyPgo8YnI+Cjxicj4KLS1fMDAwX0NXWFAyNjVNQjEyODY3OURFOUU2QjJBNkNBMjg5QjE2NDky NTgwQ1dYUDI2NU1CMTI4NkdCUlBfPGJyPgpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNl dD0mcXVvdDtpc28tODg1OS0xJnF1b3Q7PGJyPgpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBx dW90ZWQtcHJpbnRhYmxlPGJyPgo8YnI+CiZsdDtodG1sJmd0Ozxicj4KJmx0O2hlYWQmZ3Q7PGJy PgombHQ7bWV0YSBodHRwLWVxdWl2PTNEJnF1b3Q7Q29udGVudC1UeXBlJnF1b3Q7IGNvbnRlbnQ9 M0QmcXVvdDt0ZXh0L2h0bWw7IGNoYXJzZXQ9M0Rpc28tODg1OS09PGJyPgoxJnF1b3Q7Jmd0Ozxi cj4KJmx0O3N0eWxlIHR5cGU9M0QmcXVvdDt0ZXh0L2NzcyZxdW90OyBzdHlsZT0zRCZxdW90O2Rp c3BsYXk6bm9uZTsmcXVvdDsmZ3Q7IFAge21hcmdpbi10b3A6MDttYXJnaW4tYm89PGJyPgp0dG9t OjA7fSAmbHQ7L3N0eWxlJmd0Ozxicj4KJmx0Oy9oZWFkJmd0Ozxicj4KJmx0O2JvZHkgZGlyPTNE JnF1b3Q7bHRyJnF1b3Q7Jmd0Ozxicj4KJmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5 OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDs9PGJyPgrC oGNvbG9yOiByZ2IoMCwgMCwgMCk7JnF1b3Q7Jmd0Ozxicj4KRGVhciBBbGwsJmFtcDtuYnNwOyZs dDsvZGl2Jmd0Ozxicj4KJmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OiBDYWxpYnJp LCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDs9PGJyPgrCoGNvbG9yOiBy Z2IoMCwgMCwgMCk7JnF1b3Q7Jmd0Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYmZ3Q7PGJy PgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsm cXVvdDsmZ3Q7PGJyPgpJIGhhdmUgYWxtb3N0IDMwIG1pbGxpb24gb2JqZWN0cyBhbmQgSSB3YW50 IHRvIGxpc3QgdGhlbSBhbmQgaW5kZXggdGhlbSBzb209PGJyPgpld2hlcmUgZWxzZSwmYW1wO25i c3A7Jmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6IENh bGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0Oz08YnI+CsKgY29s b3I6IHJnYigwLCAwLCAwKTsmcXVvdDsmZ3Q7PGJyPgpJbSB1c2luZyBib3RvMyB3aXRoIGNvbnRp bnVhdGlvbiBNYXJrZXIgYnV0IGl0IHRha2VzIGFsbW9zdCA5IGhvdXJzJmx0Oy9kaXYmZ3Q7PGJy PgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwg c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsm cXVvdDsmZ3Q7PGJyPgombHQ7YnImZ3Q7PGJyPgombHQ7L2RpdiZndDs8YnI+CiZsdDtkaXYgc3R5 bGU9M0QmcXVvdDtmb250LWZhbWlseTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEycHQ7PTxicj4KwqBjb2xvcjogcmdiKDAsIDAsIDApOyZxdW90OyZndDs8YnI+ CmNhbiBJIHJ1biBpdCBpbiBtdWx0aXBsZSB0aHJlYWRzIHRvIG1ha2UgaXQgZmFzdGVyPyB3aGF0 IHNvbHV0aW9uIGRvIHlvdSBzdT08YnI+CmdnZXN0IHRvIHNwZWVkdXAgdGhpcyBwcm9jZXNzLCZh bXA7bmJzcDsmbHQ7L2RpdiZndDs8YnI+CiZsdDtkaXYgc3R5bGU9M0QmcXVvdDtmb250LWZhbWls eTogQ2FsaWJyaSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHQ7PTxicj4K wqBjb2xvcjogcmdiKDAsIDAsIDApOyZxdW90OyZndDs8YnI+CiZsdDticiZndDs8YnI+CiZsdDsv ZGl2Jmd0Ozxicj4KJmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OiBDYWxpYnJpLCBI ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDs9PGJyPgrCoGNvbG9yOiByZ2Io MCwgMCwgMCk7JnF1b3Q7Jmd0Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYmZ3Q7PGJyPgom bHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fu cy1zZXJpZjsgZm9udC1zaXplOiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsmcXVv dDsmZ3Q7PGJyPgpUaGFua3MmYW1wO25ic3A7Jmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxl PTNEJnF1b3Q7Zm9udC1mYW1pbHk6IENhbGlicmksIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9u dC1zaXplOiAxMnB0Oz08YnI+CsKgY29sb3I6IHJnYigwLCAwLCAwKTsmcXVvdDsmZ3Q7PGJyPgom bHQ7YnImZ3Q7PGJyPgombHQ7L2RpdiZndDs8YnI+CiZsdDsvYm9keSZndDs8YnI+CiZsdDsvaHRt bCZndDs8YnI+Cjxicj4KLS1fMDAwX0NXWFAyNjVNQjEyODY3OURFOUU2QjJBNkNBMjg5QjE2NDky NTgwQ1dYUDI2NU1CMTI4NkdCUlBfLS08YnI+Cjxicj4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tPGJyPgo8YnI+CkRhdGU6IE1vbiwgOSBEZWMgMjAxOSAwODoyMzo1NSAtMDgwMDxicj4K RnJvbTogUm9iZXJ0IExlQmxhbmMgJmx0OzxhIGhyZWY9Im1haWx0bzpyb2JlcnRAbGVibGFuY25l dC51cyIgcmVsPSJub3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5yb2JlcnRA bGVibGFuY25ldC51czwvYT4mZ3Q7PGJyPgpTdWJqZWN0OiBbY2VwaC11c2Vyc10gUmU6IFJHVyBs aXN0aW5nIG1pbGxpb25zIG9mIG9iamVjdHMgdGFrZXMgdG9vPGJyPgrCoCDCoCDCoCDCoCBtdWNo IHRpbWU8YnI+ClRvOiBBcmFzaCBTaGFtcyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmFyYTRzaEBob3Rt YWlsLmNvbSIgcmVsPSJub3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5hcmE0 c2hAaG90bWFpbC5jb208L2E+Jmd0Ozxicj4KQ2M6ICZxdW90OzxhIGhyZWY9Im1haWx0bzpjZXBo LXVzZXJzQGNlcGguaW8iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFu ayI+Y2VwaC11c2Vyc0BjZXBoLmlvPC9hPiZxdW90OyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmNlcGgt dXNlcnNAY2VwaC5pbyIgcmVsPSJub3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5r Ij5jZXBoLXVzZXJzQGNlcGguaW88L2E+Jmd0Ozxicj4KTWVzc2FnZS1JRDo8YnI+CsKgIMKgIMKg IMKgICZsdDtDQUFOTGpGb1p1OExFMGVIMnZCOVFBckFPWkpmNE9mbThWPTxhIGhyZWY9Im1haWx0 bzpqQVctJTJCWlBPRlMtZjlPYWdAbWFpbC5nbWFpbC5jb20iIHJlbD0ibm9yZWZlcnJlciBub3Jl ZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+akFXLStaUE9GUy1mOU9hZ0BtYWlsLmdtYWlsLmNvbTwv YT4mZ3Q7PGJyPgpDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTs8YnI+CsKgIMKg IMKgIMKgIGJvdW5kYXJ5PSZxdW90OzAwMDAwMDAwMDAwMDBlNjY0ZTA1OTk0N2QzYjImcXVvdDs8 YnI+Cjxicj4KLS0wMDAwMDAwMDAwMDAwZTY2NGUwNTk5NDdkM2IyPGJyPgpDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9JnF1b3Q7VVRGLTgmcXVvdDs8YnI+Cjxicj4KT24gTW9uLCBE ZWMgOSwgMjAxOSBhdCA3OjQ3IEFNIEFyYXNoIFNoYW1zICZsdDs8YSBocmVmPSJtYWlsdG86YXJh NHNoQGhvdG1haWwuY29tIiByZWw9Im5vcmVmZXJyZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxh bmsiPmFyYTRzaEBob3RtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4KPGJyPgomZ3Q7IERlYXIg QWxsLDxicj4KJmd0Ozxicj4KJmd0OyBJIGhhdmUgYWxtb3N0IDMwIG1pbGxpb24gb2JqZWN0cyBh bmQgSSB3YW50IHRvIGxpc3QgdGhlbSBhbmQgaW5kZXggdGhlbTxicj4KJmd0OyBzb21ld2hlcmUg ZWxzZSw8YnI+CiZndDsgSW0gdXNpbmcgYm90bzMgd2l0aCBjb250aW51YXRpb24gTWFya2VyIGJ1 dCBpdCB0YWtlcyBhbG1vc3QgOSBob3Vyczxicj4KJmd0Ozxicj4KJmd0OyBjYW4gSSBydW4gaXQg aW4gbXVsdGlwbGUgdGhyZWFkcyB0byBtYWtlIGl0IGZhc3Rlcj8gd2hhdCBzb2x1dGlvbiBkbyB5 b3U8YnI+CiZndDsgc3VnZ2VzdCB0byBzcGVlZHVwIHRoaXMgcHJvY2Vzcyw8YnI+CiZndDs8YnI+ CiZndDs8YnI+CiZndDsgVGhhbmtzPGJyPgomZ3Q7PGJyPgo8YnI+CkkmIzM5O3ZlIHRob3VnaHQg YWJvdXQgaW5kZXhpbmcgb2JqZWN0cyBlbHNld2hlcmUgYXMgd2VsbC4gT25lIHRob3VnaHQgSSBo YWQ8YnI+CndhcyBob29raW5nIGludG8gdGhlIEhUVFAgZmxvdyB3aGVyZSBhIFBVVCBvciBERUwg d291bGQgdXBkYXRlIHRoZSBvYmplY3RzPGJyPgppbiBzb21lIGtpbmQgb2YgZGF0YWJhc2UgKGFz eW5jIG9mIGNvdXJzZSkuIFdlIGNvdWxkIGFsc28gZ2F0aGVyIHN0YXRzIHdpdGg8YnI+CkdFVCBh bmQgUE9TVC4gSW5pdGlhbGx5LCBteSB0aG91Z2h0cyB3ZXJlIHRvIGhvb2sgaW50byBoYXByb3h5 IHNpbmNlIHdlPGJyPgphbHJlYWR5IHVzZSBpdCwgYnV0IHBvc3NpYmx5IFJHVyBpZiB0aGF0IGlz IGFuIG9wdGlvbi4gVGhhdCB3YXkgaXQgd291bGQ8YnI+CmFsd2F5cyBiZSB1cCB0byBkYXRlIGFu ZCBub3QgaGF2ZSB0byBkbyBiaWcgc2NhbnMgb24gdGhlIGJ1Y2tldHMgKG91cjxicj4KYnVja2V0 cyB3b3VsZCBub3QgcGVyZm9ybSB3ZWxsIHdpdGggdGhpcykuIEkgaGF2ZW4mIzM5O3QgYWN0dWFs bHkgZ290dGVuIHRvIHRoZTxicj4KaW1wbGVtZW50YXRpb24gcGhhc2Ugb2YgdGhpcyBpZGVhLjxi cj4KPGJyPgotLS0tLS0tLS0tLS0tLS0tPGJyPgpSb2JlcnQgTGVCbGFuYzxicj4KUEdQIEZpbmdl cnByaW50IDc5QTIgOUNBNCA2Q0M0IDQ1REQgQTkwNMKgIEM3MEUgRTY1NCAzQkIyIEZBNjIgQjlG MTxicj4KPGJyPgotLTAwMDAwMDAwMDAwMDBlNjY0ZTA1OTk0N2QzYjI8YnI+CkNvbnRlbnQtVHlw ZTogdGV4dC9odG1sOyBjaGFyc2V0PSZxdW90O1VURi04JnF1b3Q7PGJyPgpDb250ZW50LVRyYW5z ZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlPGJyPgo8YnI+CiZsdDtkaXYgZGlyPTNEJnF1 b3Q7bHRyJnF1b3Q7Jmd0OyZsdDtkaXYgZGlyPTNEJnF1b3Q7bHRyJnF1b3Q7Jmd0O09uIE1vbiwg RGVjIDksIDIwMTkgYXQgNzo0NyBBTSBBcmFzaCBTaGFtPTxicj4KcyAmYW1wO2x0OyZsdDthIGhy ZWY9M0QmcXVvdDttYWlsdG86PGEgaHJlZj0ibWFpbHRvOmFyYTRzaEBob3RtYWlsLmNvbSIgcmVs PSJub3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5hcmE0c2hAaG90bWFpbC5j b208L2E+JnF1b3Q7Jmd0OzxhIGhyZWY9Im1haWx0bzphcmE0c2hAaG90bWFpbC5jb20iIHJlbD0i bm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+YXJhNHNoQGhvdG1haWwuY29t PC9hPiZsdDsvYSZndDsmYW1wO2d0OyB3cm90PTxicj4KZTombHQ7YnImZ3Q7Jmx0Oy9kaXYmZ3Q7 Jmx0O2RpdiBjbGFzcz0zRCZxdW90O2dtYWlsX3F1b3RlJnF1b3Q7Jmd0OyZsdDtibG9ja3F1b3Rl IGNsYXNzPTNEJnF1b3Q7Z21haWxfcXVvdGUmcXVvdDsgc3Q9PGJyPgp5bGU9M0QmcXVvdDttYXJn aW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIw NCk7cGFkZD08YnI+CmluZy1sZWZ0OjFleCZxdW90OyZndDs8YnI+Cjxicj4KPGJyPgo8YnI+Cjxi cj4KJmx0O2RpdiBkaXI9M0QmcXVvdDtsdHImcXVvdDsmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNE JnF1b3Q7Zm9udC1mYW1pbHk6Q2FsaWJyaSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6 MTJwdDtjb2xvcj08YnI+CjpyZ2IoMCwwLDApJnF1b3Q7Jmd0Ozxicj4KRGVhciBBbGwsPUMyPUEw Jmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6Q2FsaWJy aSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTJwdDtjb2xvcj08YnI+CjpyZ2IoMCww LDApJnF1b3Q7Jmd0Ozxicj4KJmx0O2JyJmd0Ozxicj4KJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7ZGl2 IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6Q2FsaWJyaSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtm b250LXNpemU6MTJwdDtjb2xvcj08YnI+CjpyZ2IoMCwwLDApJnF1b3Q7Jmd0Ozxicj4KSSBoYXZl IGFsbW9zdCAzMCBtaWxsaW9uIG9iamVjdHMgYW5kIEkgd2FudCB0byBsaXN0IHRoZW0gYW5kIGlu ZGV4IHRoZW0gc29tPTxicj4KZXdoZXJlIGVsc2UsPUMyPUEwJmx0Oy9kaXYmZ3Q7PGJyPgombHQ7 ZGl2IHN0eWxlPTNEJnF1b3Q7Zm9udC1mYW1pbHk6Q2FsaWJyaSxIZWx2ZXRpY2Esc2Fucy1zZXJp Zjtmb250LXNpemU6MTJwdDtjb2xvcj08YnI+CjpyZ2IoMCwwLDApJnF1b3Q7Jmd0Ozxicj4KSW0g dXNpbmcgYm90bzMgd2l0aCBjb250aW51YXRpb24gTWFya2VyIGJ1dCBpdCB0YWtlcyBhbG1vc3Qg OSBob3VycyZsdDsvZGl2Jmd0Ozxicj4KJmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5 OkNhbGlicmksSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHQ7Y29sb3I9PGJyPgo6 cmdiKDAsMCwwKSZxdW90OyZndDs8YnI+CiZsdDticiZndDs8YnI+CiZsdDsvZGl2Jmd0Ozxicj4K Jmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OkNhbGlicmksSGVsdmV0aWNhLHNhbnMt c2VyaWY7Zm9udC1zaXplOjEycHQ7Y29sb3I9PGJyPgo6cmdiKDAsMCwwKSZxdW90OyZndDs8YnI+ CmNhbiBJIHJ1biBpdCBpbiBtdWx0aXBsZSB0aHJlYWRzIHRvIG1ha2UgaXQgZmFzdGVyPyB3aGF0 IHNvbHV0aW9uIGRvIHlvdSBzdT08YnI+CmdnZXN0IHRvIHNwZWVkdXAgdGhpcyBwcm9jZXNzLD1D Mj1BMCZsdDsvZGl2Jmd0Ozxicj4KJmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OkNh bGlicmksSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHQ7Y29sb3I9PGJyPgo6cmdi KDAsMCwwKSZxdW90OyZndDs8YnI+CiZsdDticiZndDs8YnI+CiZsdDsvZGl2Jmd0Ozxicj4KJmx0 O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQtZmFtaWx5OkNhbGlicmksSGVsdmV0aWNhLHNhbnMtc2Vy aWY7Zm9udC1zaXplOjEycHQ7Y29sb3I9PGJyPgo6cmdiKDAsMCwwKSZxdW90OyZndDs8YnI+CiZs dDticiZndDs8YnI+CiZsdDsvZGl2Jmd0Ozxicj4KJmx0O2RpdiBzdHlsZT0zRCZxdW90O2ZvbnQt ZmFtaWx5OkNhbGlicmksSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHQ7Y29sb3I9 PGJyPgo6cmdiKDAsMCwwKSZxdW90OyZndDs8YnI+ClRoYW5rcz1DMj1BMCZsdDsvZGl2Jmd0OyZs dDsvZGl2Jmd0OyZsdDsvYmxvY2txdW90ZSZndDsmbHQ7ZGl2IGNsYXNzPTNEJnF1b3Q7Z21haWxf cXVvdGUmcXVvdDsmZ3Q7Jmx0O2JyJmd0OyZsdDsvZGl2Jmd0OyZsdDs9PGJyPgpkaXYgY2xhc3M9 M0QmcXVvdDtnbWFpbF9xdW90ZSZxdW90OyZndDtJJmFtcDsjMzk7dmUgdGhvdWdodCBhYm91dCBp bmRleGluZyBvYmplY3RzIGVsc2V3aGVyZT08YnI+CsKgYXMgd2VsbC4gT25lIHRob3VnaHQgSSBo YWQgd2FzIGhvb2tpbmcgaW50byB0aGUgSFRUUCBmbG93IHdoZXJlIGEgUFVUIG9yIEQ9PGJyPgpF TCB3b3VsZCB1cGRhdGUgdGhlIG9iamVjdHMgaW4gc29tZSBraW5kIG9mIGRhdGFiYXNlIChhc3lu YyBvZiBjb3Vyc2UpLiBXZSA9PGJyPgpjb3VsZCBhbHNvIGdhdGhlciBzdGF0cyB3aXRoIEdFVCBh bmQgUE9TVC4gSW5pdGlhbGx5LCBteSB0aG91Z2h0cyB3ZXJlIHRvIGg9PGJyPgpvb2sgaW50byBo YXByb3h5IHNpbmNlIHdlIGFscmVhZHkgdXNlIGl0LCBidXQgcG9zc2libHkgUkdXIGlmIHRoYXQg aXMgYW4gb3A9PGJyPgp0aW9uLiBUaGF0IHdheSBpdCB3b3VsZCBhbHdheXMgYmUgdXAgdG8gZGF0 ZSBhbmQgbm90IGhhdmUgdG8gZG8gYmlnIHNjYW5zIG89PGJyPgpuIHRoZSBidWNrZXRzIChvdXIg YnVja2V0cyB3b3VsZCBub3QgcGVyZm9ybSB3ZWxsIHdpdGggdGhpcykuIEkgaGF2ZW4mYW1wOyMz OTt0PTxicj4KwqBhY3R1YWxseSBnb3R0ZW4gdG8gdGhlIGltcGxlbWVudGF0aW9uIHBoYXNlIG9m IHRoaXMgaWRlYS4mbHQ7L2RpdiZndDsmbHQ7YnIgY2xlYXI9PGJyPgo9M0QmcXVvdDthbGwmcXVv dDsmZ3Q7Jmx0O2RpdiZndDsmbHQ7ZGl2IGRpcj0zRCZxdW90O2x0ciZxdW90OyBjbGFzcz0zRCZx dW90O2dtYWlsX3NpZ25hdHVyZSZxdW90OyZndDstLS0tLS0tLS0tLS0tLS0tJmx0O2I9PGJyPgpy Jmd0O1JvYmVydCBMZUJsYW5jJmx0O2JyJmd0OyZsdDsvZGl2Jmd0OyZsdDsvZGl2Jmd0OyZsdDtk aXYmZ3Q7UEdQIEZpbmdlcnByaW50IDc5QTIgOUNBNCA2Q0M0IDQ1REQgQTk9PGJyPgowNCA9QzI9 QTBDNzBFIEU2NTQgM0JCMiBGQTYyIEI5RjE9QzI9QTAmbHQ7L2RpdiZndDsmbHQ7L2RpdiZndDsm bHQ7L2RpdiZndDs8YnI+Cjxicj4KLS0wMDAwMDAwMDAwMDAwZTY2NGUwNTk5NDdkM2IyLS08YnI+ Cjxicj4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPgo8YnI+CkRhdGU6IE1vbiwg OSBEZWMgMjAxOSAxMTo1NDoxMCAtMDUwMDxicj4KRnJvbTogRnJhbmsgUiAmbHQ7PGEgaHJlZj0i bWFpbHRvOmZyYW5rYXJpdGNoaWVAZ21haWwuY29tIiByZWw9Im5vcmVmZXJyZXIgbm9yZWZlcnJl ciIgdGFyZ2V0PSJfYmxhbmsiPmZyYW5rYXJpdGNoaWVAZ21haWwuY29tPC9hPiZndDs8YnI+ClN1 YmplY3Q6IFtjZXBoLXVzZXJzXSBjZXBoIG1nciBkYWVtb24gbXVsdGlwbGUgaXAgYWRkcmVzc2Vz PGJyPgpUbzogY2VwaC11c2VycyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmNlcGgtdXNlcnNAY2VwaC5j b20iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+Y2VwaC11c2Vy c0BjZXBoLmNvbTwvYT4mZ3Q7PGJyPgpNZXNzYWdlLUlEOjxicj4KwqAgwqAgwqAgwqAgJmx0O0NB TXVWTERPaGF4KzhSd1BFS181MlVmem1PYzhkdjU9PGEgaHJlZj0ibWFpbHRvOllCSDdFdHNtNVZt aU9fV0ZFUGdAbWFpbC5nbWFpbC5jb20iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJn ZXQ9Il9ibGFuayI+WUJIN0V0c201Vm1pT19XRkVQZ0BtYWlsLmdtYWlsLmNvbTwvYT4mZ3Q7PGJy PgpDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTs8YnI+CsKgIMKgIMKgIMKgIGJv dW5kYXJ5PSZxdW90OzAwMDAwMDAwMDAwMDRlZjM2ZDA1OTk0ODNmZDkmcXVvdDs8YnI+Cjxicj4K LS0wMDAwMDAwMDAwMDA0ZWYzNmQwNTk5NDgzZmQ5PGJyPgpDb250ZW50LVR5cGU6IHRleHQvcGxh aW47IGNoYXJzZXQ9JnF1b3Q7VVRGLTgmcXVvdDs8YnI+Cjxicj4KSGkgYWxsLDxicj4KPGJyPgpE b2VzIGFueW9uZSBrbm93IHdoYXQgcG9zc2libGUgaXNzdWVzIGNhbiBhcmlzZSBpZiB0aGUgY2Vw aCBtZ3IgZGFlbW9uIGlzPGJyPgpydW5uaW5nIG9uIGEgbW9uIG5vZGUgdGhhdCBoYXMgMiBpcHMg aW4gdGhlIHB1YmxpYyBuZXQgcmFuZ2UgKDEgaXMgYTxicj4KbG9vcGJhY2sgYWRkcmVzcykuPGJy Pgo8YnI+CkFzIEkgdW5kZXJzdGFuZCB0aGUgaXQuIG1nciB3aWxsIGJpbmQgdG8gYWxsIGlwczxi cj4KPGJyPgpGWUkgLSBJIGFtIG5vdCBzdXJlIHdoeSB0aGUgbG9vcGJhY2sgaXMgdGhlcmUsIEkg YW0gdHJ5aW5nIHRvIGZpbmQgb3V0Ljxicj4KPGJyPgp0aHg8YnI+CkZyYW5rPGJyPgo8YnI+Cjxi cj4KPGJyPgo8YnI+Cm1sb3ZlbGwgLSBjZXBoIGFueWNhc3Q8YnI+Cjxicj4KLS0wMDAwMDAwMDAw MDA0ZWYzNmQwNTk5NDgzZmQ5PGJyPgpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0m cXVvdDtVVEYtOCZxdW90Ozxicj4KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXBy aW50YWJsZTxicj4KPGJyPgombHQ7ZGl2IGRpcj0zRCZxdW90O2x0ciZxdW90OyZndDsmbHQ7ZGl2 Jmd0O0hpIGFsbCwmbHQ7L2RpdiZndDsmbHQ7ZGl2Jmd0OyZsdDticiZndDtEb2VzIGFueW9uZSBr bm93IHdoYXQgcG9zc2libGUgPTxicj4KaXNzdWVzIGNhbiBhcmlzZSBpZiB0aGUgY2VwaCBtZ3Ig ZGFlbW9uIGlzIHJ1bm5pbmcgb24gYSBtb24gbm9kZSB0aGF0IGhhcyAyPTxicj4KwqBpcHMgaW4g dGhlIHB1YmxpYyBuZXQgcmFuZ2UgKDEgaXMgYSBsb29wYmFjayBhZGRyZXNzKS4mbHQ7YnImZ3Q7 Jmx0O2JyJmd0OyZsdDsvZGl2Jmd0OyZsdDtkaXYmZ3Q7QT08YnI+CnMgSSB1bmRlcnN0YW5kIHRo ZSBpdC4gbWdyIHdpbGwgYmluZCB0byBhbGwgaXBzJmx0O2JyJmd0OyZsdDticiZndDsmbHQ7L2Rp diZndDsmbHQ7ZGl2Jmd0O0ZZSSAtIEkgYT08YnI+Cm0gbm90IHN1cmUgd2h5IHRoZSBsb29wYmFj ayBpcyB0aGVyZSwgSSBhbSB0cnlpbmcgdG8gZmluZCBvdXQuJmx0Oy9kaXYmZ3Q7Jmx0O2RpdiZn dDsmbHQ7Yj08YnI+CnImZ3Q7Jmx0Oy9kaXYmZ3Q7Jmx0O2RpdiZndDt0aHgmbHQ7L2RpdiZndDsm bHQ7ZGl2Jmd0O0ZyYW5rJmx0O2JyJmd0OyZsdDticiZndDsmbHQ7YnImZ3Q7Jmx0O2JyJmd0OyZs dDticiZndDttbG92ZWxsIC0gY2VwaCBhbnljYXN0Jmx0Oz08YnI+CmJyJmd0OyZsdDsvZGl2Jmd0 OyZsdDsvZGl2Jmd0Ozxicj4KPGJyPgotLTAwMDAwMDAwMDAwMDRlZjM2ZDA1OTk0ODNmZDktLTxi cj4KPGJyPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+Cjxicj4KRGF0ZTogTW9u LCA5IERlYyAyMDE5IDE3OjI0OjI3ICswMDAwPGJyPgpGcm9tOiBCcnlhbiBTdGlsbHdlbGwgJmx0 OzxhIGhyZWY9Im1haWx0bzpic3RpbGx3ZWxsQGdvZGFkZHkuY29tIiByZWw9Im5vcmVmZXJyZXIg bm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmJzdGlsbHdlbGxAZ29kYWRkeS5jb208L2E+Jmd0 Ozxicj4KU3ViamVjdDogW2NlcGgtdXNlcnNdIFJlOiBvc2RtYXBzIG5vdCB0cmltbWVkIHVudGls IGNlcGgtbW9uJiMzOTtzPGJyPgrCoCDCoCDCoCDCoCByZXN0YXJ0ZWQgKGlmIGNsdXN0ZXIgaGFz IGEgZG93biBvc2QpPGJyPgpUbzogRGFuIHZhbiBkZXIgU3RlciAmbHQ7PGEgaHJlZj0ibWFpbHRv OmRhbkB2YW5kZXJzdGVyLmNvbSIgcmVsPSJub3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0i X2JsYW5rIj5kYW5AdmFuZGVyc3Rlci5jb208L2E+Jmd0Ozxicj4KQ2M6IEpvYW8gRWR1YXJkbyBM dWlzICZsdDs8YSBocmVmPSJtYWlsdG86am9hb0BzdXNlLmRlIiByZWw9Im5vcmVmZXJyZXIgbm9y ZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmpvYW9Ac3VzZS5kZTwvYT4mZ3Q7LCAmcXVvdDs8YSBo cmVmPSJtYWlsdG86ZGV2QGNlcGguaW8iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJn ZXQ9Il9ibGFuayI+ZGV2QGNlcGguaW88L2E+JnF1b3Q7ICZsdDs8YSBocmVmPSJtYWlsdG86ZGV2 QGNlcGguaW8iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+ZGV2 QGNlcGguaW88L2E+Jmd0Oyw8YnI+CsKgIMKgIMKgIMKgIGNlcGgtdXNlcnMgJmx0OzxhIGhyZWY9 Im1haWx0bzpjZXBoLXVzZXJzQGNlcGguaW8iIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0 YXJnZXQ9Il9ibGFuayI+Y2VwaC11c2Vyc0BjZXBoLmlvPC9hPiZndDs8YnI+Ck1lc3NhZ2UtSUQ6 ICZsdDs8YSBocmVmPSJtYWlsdG86OUIxNDVCMTctNjY2NS00MjU0LThENkEtMDRBOUIzNzM4OUMz QGdvZGFkZHkuY29tIiByZWw9Im5vcmVmZXJyZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsi PjlCMTQ1QjE3LTY2NjUtNDI1NC04RDZBLTA0QTlCMzczODlDM0Bnb2RhZGR5LmNvbTwvYT4mZ3Q7 PGJyPgpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9JnF1b3Q7dXMtYXNjaWkmcXVv dDs8YnI+Cjxicj4KT24gTm92IDE4LCAyMDE5LCBhdCA4OjEyIEFNLCBEYW4gdmFuIGRlciBTdGVy ICZsdDs8YSBocmVmPSJtYWlsdG86ZGFuQHZhbmRlcnN0ZXIuY29tIiByZWw9Im5vcmVmZXJyZXIg bm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmRhbkB2YW5kZXJzdGVyLmNvbTwvYT4mZ3Q7IHdy b3RlOjxicj4KJmd0OyA8YnI+CiZndDsgT24gRnJpLCBOb3YgMTUsIDIwMTkgYXQgNDo0NSBQTSBK b2FvIEVkdWFyZG8gTHVpcyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmpvYW9Ac3VzZS5kZSIgcmVsPSJu b3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5qb2FvQHN1c2UuZGU8L2E+Jmd0 OyB3cm90ZTo8YnI+CiZndDsmZ3Q7IDxicj4KJmd0OyZndDsgT24gMTkvMTEvMTQgMTE6MDRBTSwg R3JlZ29yeSBGYXJudW0gd3JvdGU6PGJyPgomZ3Q7Jmd0OyZndDsgT24gVGh1LCBOb3YgMTQsIDIw MTkgYXQgODoxNCBBTSBEYW4gdmFuIGRlciBTdGVyICZsdDs8YSBocmVmPSJtYWlsdG86ZGFuQHZh bmRlcnN0ZXIuY29tIiByZWw9Im5vcmVmZXJyZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsi PmRhbkB2YW5kZXJzdGVyLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyA8 YnI+CiZndDsmZ3Q7Jmd0OyZndDsgSGkgSm9hbyw8YnI+CiZndDsmZ3Q7Jmd0OyZndDsgPGJyPgom Z3Q7Jmd0OyZndDsmZ3Q7IEkgbWlnaHQgaGF2ZSBmb3VuZCB0aGUgcmVhc29uIHdoeSBzZXZlcmFs IG9mIG91ciBjbHVzdGVycyAoYW5kIG1heWJlPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IEJyeWFuJiMz OTtzIHRvbykgYXJlIGdldHRpbmcgc3R1Y2sgbm90IHRyaW1taW5nIG9zZG1hcHMuPGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7IEl0IHNlZW1zIHRoYXQgd2hlbiBhbiBvc2QgZmFpbHMsIHRoZSBtaW5fbGFz dF9lcG9jaF9jbGVhbiBnZXRzIHN0dWNrPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IGZvcmV2ZXIgKGV2 ZW4gbG9uZyBhZnRlciBIRUFMVEhfT0spLCB1bnRpbCB0aGUgY2VwaC1tb25zIGFyZTxicj4KJmd0 OyZndDsmZ3Q7Jmd0OyByZXN0YXJ0ZWQuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IDxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyBJJiMzOTt2ZSB1cGRhdGVkIHRoZSB0aWNrZXQ6IDxhIGhyZWY9Imh0dHBzOi8v dHJhY2tlci5jZXBoLmNvbS9pc3N1ZXMvNDExNTQiIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVy IG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL3RyYWNrZXIuY2VwaC5jb20vaXNz dWVzLzQxMTU0PC9hPjxicj4KJmd0OyZndDsmZ3Q7IDxicj4KJmd0OyZndDsmZ3Q7IFdyb25nIHRp Y2tldCwgSSB0aGluayB5b3UgbWVhbnQgPGEgaHJlZj0iaHR0cHM6Ly90cmFja2VyLmNlcGguY29t L2lzc3Vlcy8zNzg3NSNub3RlLTciIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIG5vcmVmZXJy ZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczovL3RyYWNrZXIuY2VwaC5jb20vaXNzdWVzLzM3ODc1 I25vdGUtNzwvYT48YnI+CiZndDsmZ3Q7IDxicj4KJmd0OyZndDsgSSYjMzk7dmUgc2VlbiB0aGlz IGJlaGF2aW9yIGEgbG9uZywgbG9uZyB0aW1lIGFnbywgYnV0IHN0b3BwZWQgYmVpbmcgYWJsZSB0 bzxicj4KJmd0OyZndDsgcmVwcm9kdWNlIGl0IGNvbnNpc3RlbnRseSBlbm91Z2ggdG8gZW5zdXJl IHRoZSBwYXRjaCB3YXMgd29ya2luZyBwcm9wZXJseS48YnI+CiZndDsmZ3Q7IDxicj4KJmd0OyZn dDsgSSB0aGluayBJIGhhdmUgYSBwYXRjaCBoZXJlOjxicj4KJmd0OyZndDsgPGJyPgomZ3Q7Jmd0 O8KgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jZXBoL2NlcGgvcHVsbC8xOTA3Ni9jb21t aXRzIiByZWw9Im5vcmVmZXJyZXIgbm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFu ayI+aHR0cHM6Ly9naXRodWIuY29tL2NlcGgvY2VwaC9wdWxsLzE5MDc2L2NvbW1pdHM8L2E+PGJy PgomZ3Q7Jmd0OyA8YnI+CiZndDsmZ3Q7IElmIHlvdSBhcmUgZmVlbGluZyBhZHZlbnR1cm91cywg YW5kIHdhbnQgdG8gZ2l2ZSBpdCBhIHRyeSwgbGV0IG1lIGtub3cuIEkmIzM5O2xsPGJyPgomZ3Q7 Jmd0OyBiZSBoYXBweSB0byBmb3J3YXJkIHBvcnQgaXQgdG8gd2hhdGV2ZXIgeW91IGFyZSBydW5u aW5nLjxicj4KJmd0OyA8YnI+CiZndDsgVGhhbmtzIEpvYW8sIHRoaXMgcGF0Y2ggaXMgd2hhdCBJ IGhhZCBpbiBtaW5kLjxicj4KJmd0OyA8YnI+CiZndDsgSSYjMzk7bSB0cnlpbmcgdG8gZXZhbHVh dGUgaG93IGFkdmVudHVyb3VzIHRoaXMgd291bGQgYmUgLS0gSXMgdGhlcmUgYW55PGJyPgomZ3Q7 IHJpc2sgdGhhdCBpZiBhIGh1Z2UgbnVtYmVyIG9mIG9zZHMgYXJlIGRvd24gYWxsIGF0IG9uY2Ug KGJ1dDxicj4KJmd0OyB0cmFuc2llbnRseSksIGl0IHdvdWxkIHRyaWdnZXIgdGhlIG1vbiB0byB0 cmltIHRvbyBtYW55IG1hcHM/PGJyPgomZ3Q7IEkgd291bGQgZXhwZWN0IHRoYXQgdGhlIHJlbWFp bmluZyB1cCBPU0RzIHdpbGwgaGF2ZSBhIHNhZmUsIGxvdywgb3NkX2Vwb2NoID88YnI+CiZndDsg PGJyPgomZ3Q7IEFuZCBhbnl3YXkgSSBndWVzcyB0aGF0IHlvdXIgcHJvcG9zZWQgZ2V0X21pbl9s YXN0X2Vwb2NoX2NsZWFuIHBhdGNoPGJyPgomZ3Q7IGlzIGVxdWl2YWxlbnQgdG8gd2hhdCB3ZSBo YXZlIHRvZGF5IGlmIHdlIHJlc3RhcnQgdGhlIGNlcGgtbW9uIGxlYWRlcjxicj4KJmd0OyB3aGls ZSBhbiBvc2QgaXMgZG93bi48YnI+Cjxicj4KSm9hbyw8YnI+Cjxicj4KSSByYW4gaW50byB0aGlz IGFnYWluIHRvZGF5IGFuZCBmb3VuZCBvdmVyIDEwMCwwMDAgb3NkbWFwcyBvbiBhbGwgMSwwMDAg T1NEcyAofjUwIFRpQiBvZiBkaXNrIHNwYWNlIHVzZWQganVzdCBieSBvc2RtYXBzKS7CoCBUaGVy ZSB3ZXJlIGRvd24gT1NEcyAocHJldHR5IHJlZ3VsYXIgb2NjdXJyZW5jZSB3aXRoIH4xLDAwMCBP U0RzKSBzbyB0aGF0IG1hdGNoZXMgdXAgd2l0aCB3aGF0IERhbiBmb3VuZC7CoCBUaGVuIHdoZW4g SSByZXN0YXJ0ZWQgYWxsIHRoZSBtb24gbm9kZXMgdHdpY2UgdGhlIG9zZG1hcHMgc3RhcnRlZCBj bGVhbmluZyB1cC48YnI+Cjxicj4KSSBiZWxpZXZlIHRoZSBzdGVwcyB0byByZXByb2R1Y2Ugd291 bGQgbG9vayBsaWtlIHRoaXM6PGJyPgo8YnI+CjEuIFN0YXJ0IHdpdGggYSBjbHVzdGVyIHdpdGgg YXQgbGVhc3QgMSBkb3duIG9zZDxicj4KMi4gRXhwYW5kIHRoZSBjbHVzdGVyICh0aGUgYmlnZ2Vy IHRoZSBleHBhbnNpb24sIHRoZSBtb3JlIG9zZG1hcHMgdGhhdCBwaWxlIHVwKTxicj4KMy4gTm90 aWNlIHRoYXQgYWZ0ZXIgdGhlIGV4cGFuc2lvbiBjb21wbGV0ZXMgYW5kIHRoZSBjbHVzdGVyIGlz IGhlYWx0aHkgdGhhdCB0aGUgb2xkIG9zZG1hcHMgYXJlbiYjMzk7dCBjbGVhbmVkIHVwPGJyPgo8 YnI+Ckkgd291bGQgYmUgd2lsbGluZyB0byB0ZXN0IHRoZSBmaXggb24gb3VyIHRlc3QgY2x1c3Rl ciBhZnRlciAxNC4yLjUgY29tZXMgb3V0LsKgIENvdWxkIHlvdSBtYWtlIGEgYnVpbGQgYmFzZWQg b24gdGhhdCByZWxlYXNlPzxicj4KPGJyPgpUaGFua3MsPGJyPgpCcnlhbjxicj4KPGJyPgotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+Cjxicj4KU3ViamVjdDogRGlnZXN0IEZvb3Rl cjxicj4KPGJyPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xzxicj4KY2VwaC11c2VycyBtYWlsaW5nIGxpc3QgLS0gPGEgaHJlZj0ibWFpbHRvOmNlcGgtdXNl cnNAY2VwaC5pbyIgcmVsPSJub3JlZmVycmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5j ZXBoLXVzZXJzQGNlcGguaW88L2E+PGJyPgpUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRv IDxhIGhyZWY9Im1haWx0bzpjZXBoLXVzZXJzLWxlYXZlQGNlcGguaW8iIHJlbD0ibm9yZWZlcnJl ciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+Y2VwaC11c2Vycy1sZWF2ZUBjZXBoLmlvPC9h Pjxicj4KJSh3ZWJfcGFnZV91cmwpc2xpc3RpbmZvJShjZ2lleHQpcy8lKF9pbnRlcm5hbF9uYW1l KXM8YnI+Cjxicj4KPGJyPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+Cjxicj4K RW5kIG9mIGNlcGgtdXNlcnMgRGlnZXN0LCBWb2wgODMsIElzc3VlIDM1PGJyPgoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio8YnI+CjwvYmxvY2txdW90ZT48L2Rpdj48 L2Rpdj48L2Rpdj4KCjxicj4KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgc3R5bGU9ImNvbG9yOnJn YigzNCwzNCwzNCk7Zm9udC1zaXplOnNtYWxsO2JhY2tncm91bmQtY29sb3I6cmdiKDI1NSwyNTUs MjU1KSI+PGRpdiBkaXI9Imx0ciI+PGRpdj48cCBzdHlsZT0ibWFyZ2luOjBweDt0ZXh0LWFsaWdu Omp1c3RpZnkiPjxpPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBwdDtmb250LWZhbWlseTpBcmlh bCxzYW5zLXNlcmlmO2NvbG9yOnJnYigyMCwxOSwyMikiPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLTx3YnI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPHdicj4tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLTwvc3Bhbj48L2k+PC9wPjxwIHN0eWxlPSJtYXJnaW46MHB4O3Rl eHQtYWxpZ246anVzdGlmeSI+PGk+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB0O2ZvbnQtZmFt aWx5OkFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6cmdiKDIwLDE5LDIyKSI+VGhpcyBlbWFpbCBhbmQg YW55IGZpbGVzIHRyYW5zbWl0dGVkIHdpdGggaXQgYXJlIGNvbmZpZGVudGlhbCBhbmQgaW50ZW5k ZWQgc29sZWx5IGZvciB0aGUgdXNlIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0byB3aG9t IHRoZXkgYXJlIGFkZHJlc3NlZC4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyBlbWFpbCBpbiBl cnJvciwgcGxlYXNlIG5vdGlmeSB0aGUgc3lzdGVtIG1hbmFnZXIuIFRoaXMgbWVzc2FnZSBjb250 YWlucyBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gYW5kIGlzIGludGVuZGVkIG9ubHkgZm9yIHRo ZSBpbmRpdmlkdWFsIG5hbWVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgbmFtZWQgYWRkcmVzc2VlLCB5 b3Ugc2hvdWxkIG5vdCBkaXNzZW1pbmF0ZSwgZGlzdHJpYnV0ZSBvciBjb3B5IHRoaXMgZW1haWwu IFBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSBlbWFpbCBpZiB5b3UgaGF2 ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGJ5IG1pc3Rha2UgYW5kIGRlbGV0ZSB0aGlzIGVtYWlsIGZy b20geW91ciBzeXN0ZW0uIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlv dSBhcmUgbm90aWZpZWQgdGhhdCBkaXNjbG9zaW5nLCBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3Ig dGFraW5nIGFueSBhY3Rpb24gaW4gcmVsaWFuY2Ugb24gdGhlIGNvbnRlbnRzIG9mIHRoaXMgaW5m b3JtYXRpb24gaXMgc3RyaWN0bHkgcHJvaGliaXRlZC48L3NwYW4+PC9pPjx1PjwvdT48dT48L3U+ PC9wPjxwIHN0eWxlPSJtYXJnaW46MHB4O3RleHQtYWxpZ246anVzdGlmeSI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMHB0Ij7CoDwvc3Bhbj48dT48L3U+PHU+PC91PjwvcD48cCBzdHlsZT0ibWFy Z2luOjBweDt0ZXh0LWFsaWduOmp1c3RpZnkiPjxpPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBw dDtmb250LWZhbWlseTpBcmlhbCxzYW5zLXNlcmlmO2NvbG9yOnJnYigyMCwxOSwyMikiPkFueSB2 aWV3cyBvciBvcGluaW9ucyBwcmVzZW50ZWQgaW4gdGhpcyBlbWFpbCBhcmUgc29sZWx5IHRob3Nl IG9mIHRoZSBhdXRob3IgYW5kIGRvIG5vdCBuZWNlc3NhcmlseSByZXByZXNlbnQgdGhvc2Ugb2Yg dGhlIG9yZ2FuaXphdGlvbi4gQW55IGluZm9ybWF0aW9uIG9uIHNoYXJlcywgZGViZW50dXJlcyBv ciBzaW1pbGFyIGluc3RydW1lbnRzLCByZWNvbW1lbmRlZCBwcm9kdWN0IHByaWNpbmcsIHZhbHVh dGlvbnMgYW5kIHRoZSBsaWtlIGFyZSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgb25seS4gSXQg aXMgbm90IG1lYW50IHRvIGJlIGFuIGluc3RydWN0aW9uIG9yIHJlY29tbWVuZGF0aW9uLCBhcyB0 aGUgY2FzZSBtYXkgYmUsIHRvIGJ1eSBvciB0byBzZWxsIHNlY3VyaXRpZXMsIHByb2R1Y3RzLCBz ZXJ2aWNlcyBub3IgYW4gb2ZmZXIgdG8gYnV5IG9yIHNlbGwgc2VjdXJpdGllcywgcHJvZHVjdHMg b3Igc2VydmljZXMgdW5sZXNzIHNwZWNpZmljYWxseSBzdGF0ZWQgdG8gYmUgc28gb24gYmVoYWxm IG9mIHRoZSBGbGlwa2FydCBncm91cC4gRW1wbG95ZWVzIG9mwqB0aGUgRmxpcGthcnQgZ3JvdXAg b2YgY29tcGFuaWVzIGFyZSBleHByZXNzbHkgcmVxdWlyZWQgbm90IHRvIG1ha2UgZGVmYW1hdG9y eSBzdGF0ZW1lbnRzIGFuZCBub3QgdG8gaW5mcmluZ2Ugb3IgYXV0aG9yaXNlIGFueSBpbmZyaW5n ZW1lbnQgb2YgY29weXJpZ2h0IG9yIGFueSBvdGhlciBsZWdhbCByaWdodCBieSBlbWFpbCBjb21t dW5pY2F0aW9ucy4gQW55IHN1Y2ggY29tbXVuaWNhdGlvbiBpcyBjb250cmFyeSB0byBvcmdhbml6 YXRpb25hbCBwb2xpY3kgYW5kIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBlbXBsb3ltZW50IG9m IHRoZSBpbmRpdmlkdWFsIGNvbmNlcm5lZC4gVGhlIG9yZ2FuaXphdGlvbiB3aWxsIG5vdCBhY2Nl cHQgYW55IGxpYWJpbGl0eSBpbiByZXNwZWN0IG9mIHN1Y2ggY29tbXVuaWNhdGlvbiwgYW5kIHRo ZSBlbXBsb3llZSByZXNwb25zaWJsZSB3aWxsIGJlIHBlcnNvbmFsbHkgbGlhYmxlIGZvciBhbnkg ZGFtYWdlcyBvciBvdGhlciBsaWFiaWxpdHkgYXJpc2luZy48L3NwYW4+PC9pPjx1PjwvdT48dT48 L3U+PC9wPjxwIHN0eWxlPSJtYXJnaW46MHB4O3RleHQtYWxpZ246anVzdGlmeSI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMHB0Ij7CoDwvc3Bhbj48dT48L3U+PHU+PC91PjwvcD48cCBzdHlsZT0i bWFyZ2luOjBweDt0ZXh0LWFsaWduOmp1c3RpZnkiPjxpPjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTBwdDtmb250LWZhbWlseTpBcmlhbCxzYW5zLXNlcmlmO2NvbG9yOnJnYigyMCwxOSwyMikiPk91 ciBvcmdhbml6YXRpb24gYWNjZXB0cyBubyBsaWFiaWxpdHkgZm9yIHRoZSBjb250ZW50IG9mIHRo aXMgZW1haWwsIG9yIGZvciB0aGUgY29uc2VxdWVuY2VzIG9mIGFueSBhY3Rpb25zIHRha2VuIG9u IHRoZSBiYXNpcyBvZiB0aGUgaW5mb3JtYXRpb27CoDwvc3Bhbj48L2k+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMHB0O2ZvbnQtZmFtaWx5OkFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6cmdiKDIwLDE5 LDIyKSI+cHJvdmlkZWQsPGk+wqB1bmxlc3MgdGhhdCBpbmZvcm1hdGlvbiBpcyBzdWJzZXF1ZW50 bHkgY29uZmlybWVkIGluIHdyaXRpbmcuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNp cGllbnQsIHlvdSBhcmUgbm90aWZpZWQgdGhhdCBkaXNjbG9zaW5nLCBjb3B5aW5nLCBkaXN0cmli dXRpbmcgb3IgdGFraW5nIGFueSBhY3Rpb24gaW4gcmVsaWFuY2Ugb24gdGhlIGNvbnRlbnRzIG9m IHRoaXMgaW5mb3JtYXRpb24gaXMgc3RyaWN0bHkgcHJvaGliaXRlZC48L2k+PC9zcGFuPjwvcD48 cCBzdHlsZT0ibWFyZ2luOjBweDt0ZXh0LWFsaWduOmp1c3RpZnkiPjxpIHN0eWxlPSJmb250LXNp emU6MS4zZW0iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBwdDtmb250LWZhbWlseTpBcmlhbCxz YW5zLXNlcmlmO2NvbG9yOnJnYigyMCwxOSwyMikiPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLTx3YnI+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPHdicj4tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLTwvc3Bhbj48L2k+PC9wPjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT4= --===============7857605896075748118==--