From asocha at redhat.com Wed Apr 22 11:11:15 2020 Content-Type: multipart/mixed; boundary="===============1401704012214021070==" MIME-Version: 1.0 From: Artur Socha To: users at ovirt.org Subject: [ovirt-users] Re: oVirt and KeyCloak intergration Date: Wed, 22 Apr 2020 13:09:06 +0200 Message-ID: <5e54dbcb70be20560261c16aa987ca1966476c7b.camel@redhat.com> In-Reply-To: JN2P275MB0347F40D4EA2E126CBFF8429A0D20@JN2P275MB0347.ZAFP275.PROD.OUTLOOK.COM --===============1401704012214021070== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On Wed, 2020-04-22 at 10:42 +0000, Anton Louw wrote: > = > = > Ok so this is definitely looking better. I get an error, but at least now= it > is saying : =E2=80=9CThe user admin(a)openidchttp is not authorized to pe= rform login=E2=80=9D > = > This is strange though, because admin in by default should be allowed acc= ess? Well, yes and no :) In order for user to be considered admin (for ovirt engine) it must belong = to keycloak's ovirt-administrator group (in keycloak admin panel see Manage- >Groups->Members) I think you are very close to have it up-and-running. > = > From: Anton Louw = > Sent: 22 April 2020 12:38 > To: Artur Socha ; users(a)ovirt.org > Subject: RE: [ovirt-users] oVirt and KeyCloak intergration > = > Perfect, I=E2=80=99ll test and let you know. > = > Thanks > = > From: Artur Socha = > Sent: 22 April 2020 12:32 > To: Anton Louw ; users(a)ovirt.org > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > = > + users(a)ovirt.org > = > On Wed, 2020-04-22 at 09:57 +0000, Anton Louw wrote: > > = > > = > > Hi Artur, > > = > > I would just like to make sure I am following correctly, comparing your > > entries against mine. > > = > > Your setup: > > ... > > config.mapAuthRecord.regex.pattern =3D > > ^(?.*?)((\\\\(?@)(?.*?)@.*)|(?@.*))$ > > ... > > = > > = > > My setup: > > =E2=80=A6 > > config.mapAuthRecord.regex.pattern =3D > > ^(?.*?)((\\(?@)(?.*?)@.*)|(?@.*))$ > > =E2=80=A6 > > = > > Should I add the additional 2 =E2=80=9C\\=E2=80=9D in on my side? > = > = > Yes, please try adding it. In my case I learned about this issue by debug= ging > the code because the real exception generated by incorrect regexp syntax = was > hidden behind generic error message giving no clues about the true cause. > = > > = > > Your setup: > > ... > > > http-auth)|^/ovirt-engine/callback> > > > > = > > Require valid-user > > AuthType openid-connect > > = > > ErrorDocument 401 " > url=3D/ovirt-engine/sso/login-unauthorized\"/> > engine/sso/login-unauthorized\">Here" > > > > > > =E2=80=A6 > > = > > My setup: > > =E2=80=A6 > > > http-auth)|^/ovirt-engine/callback> > > > > = > > Require valid-user > > AuthType openid-connect > > = > > ErrorDocument 401 " > url=3D/ovirt-engine/sso/login-unauthorized'/> > engine/sso/login-unauthorized'>Here" > > > > > > =E2=80=A6 > > = > > I remember I had syntax errors, but mine was changed. > > = > > Does this look fine to you? > = > = > Yeah, your version looks good too. You have ' instead of " so that is ok. = > = > = > Anton Louw > Cloud Engineer: Storage and Virtualization at Vox > T: 087 805 0000 | D: 087 805 1572 > M: N/A > E: anton.louw(a)voxtelecom.co.za > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > www.vox.co.za > = > = > = > = > = > = > = > = > = > = > = > = > > Thanks > > = > > = > > = > > Anton Louw > > Cloud Engineer: Storage and Virtualization at Vox > > T: 087 805 0000 | D: 087 805 1572 > > M: N/A > > E: anton.louw(a)voxtelecom.co.za > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > www.vox.co.za > > = > > = > > = > > = > > = > > = > > = > > = > > = > > = > > = > > = > > From: Anton Louw = > > Sent: 22 April 2020 10:07 > > To: Artur Socha > > Subject: RE: [ovirt-users] oVirt and KeyCloak intergration > > = > > Hi Artur, > > = > > Great, I will try the below and let you know. I appreciate your efforts. > > = > > Sure, you may report it, I was in such a rush that I only hit =E2=80=9C= reply=E2=80=9D and > > not =E2=80=9CReply All=E2=80=9D > > = > > I do recall that I had to make some changes to the below as the it > > complained about syntax errors: > > = > > ErrorDocument 401 " > content=3D\"0; url=3D/ovirt-engine/sso/login-unauthorized\"/> > href=3D\"/ovirt-engine/sso/login-unauthorized\">Here" > > > > > > = > > I will let you know the outcome when I change the below as you suggeste= d. > > = > > Cheers > > = > > From: Artur Socha = > > Sent: 22 April 2020 09:51 > > To: Anton Louw > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > = > > I checked your logs and I did not notice anything suspicious. = > > However, now I recall I made some changes compared to blog post > > example: > > = > > 1) /etc/ovirt-engine/extensions.d/openid-http-mapping.properties = > > I added escaping in regexp for '\' > > ... > > config.mapAuthRecord.regex.pattern =3D > > ^(?.*?)((\\\\(?@)(?.*?)@.*)|(?@.*))$ > > ... > > = > > 2) /etc/httpd/ovirt-openidc.conf > > Escaping for '"' in error document snippet > > ... > > > negotiate|oauth/token-http-auth)|^/ovirt-engine/callback> > > > > = > > Require valid-user > > AuthType openid-connect > > = > > ErrorDocument 401 " > content=3D\"0; url=3D/ovirt-engine/sso/login-unauthorized\"/> > href=3D\"/ovirt-engine/sso/login-unauthorized\">Here" > > > > > > = > > ... > > = > > These two issues were most probably caused by the blog site rendering. > > = > > = > > You might want to check engine.log (or server.log not really sure which > > one was that) for aaa extension initialization logs. They should = > > appear at the beginning just after restarting engine. > > = > > Unfortunately, at the moment I do not have running keycloak setup (I > > used to have a local VM) but I will try to find some time to set it up > > again once I'm done with another work item that actually consumes > > almost entire disk space for my 2 machines) > > = > > Please let me know if anything changes after applying these config > > changes. It this works for you then I will request the blog post to be > > updated. > > = > > Do you mind if I keep(re-post) this discussion back to users(a)ovirt in > > case other might have similar issues with keycloak integration? > > = > > A. > > = > > On Wed, 2020-04-22 at 06:35 +0000, Anton Louw wrote: > > > = > > > = > > > Hi Artru, > > > = > > > Thank you for the reply. The post [1] is actually the main source of > > > information I worked from in order top get everything configured. In > > > the post[1] I ran through the whole testing section, and everything > > > works as expected. I can see the VMs etc when using the python > > > script. > > > = > > > In my case we are not using ldap as a provider, I tried using > > > keycloak directly as a provider, I am not sure if that is where I am > > > going wrong? > > > = > > > I have attached the last part of the apache ssl_access_log when I > > > tried logging in this morning. I have also attached the engine log. > > > = > > > Thanks > > > = > > > = > > > Anton Louw > > > Cloud Engineer: Storage and Virtualization at Vox > > > T: 087 805 0000 | D: 087 805 1572 > > > M: N/A > > > E: anton.louw(a)voxtelecom.co.za > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > www.vox.co.za > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > From: Artru Socha = > > > Sent: 21 April 2020 15:20 > > > To: Anton Louw ; users(a)ovirt.org > > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > > = > > > On Tue, 2020-04-21 at 12:48 +0000, Anton Louw wrote: > > > > = > > > > = > > > > Hi Everybody, > > > > = > > > > = > > > Hi Anton, > > > = > > > > Has anybody gone the route of using KeyCloak to login to oVirt? > > > > KeyCloak has been configured and the neccesary configs have also > > > been > > > > done on the engine. It redirects perfectly from the oVirt Web Login > > > > page to KeyCloak, but after logging into KeyCloak, I get redirected > > > > back to the oVirt Web Login. When trying to login again, I get the > > > > below error: > > > > = > > > > = > > > > = > > > > server_error: Missing parameter: 'params' > > > > = > > > = > > > Not so long ago I managed to setup ovirt engine with keyloack (using > > > ldap as users provider). Hopefully, I would be able to help you with > > > it. = > > > = > > > There is excellent blog post[1] available. You might also check > > > keycloak+ldap post [2], however, when I was working on the > > > integration > > > I was not aware of if and did not test it. > > > = > > > The error you mentioned does not really indicate what exactly is > > > wrong > > > but it might suggest that there is some sort of misconfiguration with > > > apache (you need to install and configure mod_auth_openidc as > > > described > > > at [1]). At least that happened in my case. > > > = > > > In case you have already gone through it you could probably check > > > apache logs. > > > = > > > Under [1] there is a python script that can be used to check api > > > calls, > > > please update username/password and test it against your environment. > > > = > > > = > > > Would it be possible post relevant piece of apache logs together with > > > engine.log ? > > > = > > > = > > > [1] = > > > = > > https://blogs.ovirt.org/2019/01/federate-ovirt-engine-authentication-to= -openid-connect-infrastructure/ > > > [2] = > > > = > > https://blogs.ovirt.org/2018/08/ovirt-saml-with-keyloak-using-389ds-use= r-federation/ > > > = > > > Artur > > > = > > > = > > > = > > > > I have checked all the logs, but nothing is telling me what exactly > > > > the issue is. = > > > > = > > > > If anybody has any idea, please let me know. > > > > = > > > > Thanks > > > > = > > > > Anton Louw > > > > Cloud Engineer: Storage and Virtualization at Vox > > > > T: 087 805 0000 | D: 087 805 1572 > > > > M: N/A > > > > E: anton.louw(a)voxtelecom.co.za > > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > > www.vox.co.za > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > Disclaimer > > > > The contents of this email are confidential to the sender and the > > > > intended recipient. Unless the contents are clearly and entirely of > > > a > > > > personal nature, they are subject to copyright in favour of the > > > > holding company of the Vox group of companies. Any recipient who > > > > receives this email in error should immediately report the error to > > > > the sender and permanently delete this email from all storage > > > > devices. > > > > = > > > > This email has been scanned for viruses and malware, and may have > > > > been automatically archived by Mimecast Ltd, an innovator in > > > Software > > > > as a Service (SaaS) for business. Providing a safer and more useful > > > > place for your human generated data. Specializing in; Security, > > > > archiving and compliance. To find out more Click Here. > > > > = > > > > = > > > > _______________________________________________ > > > > Users mailing list -- users(a)ovirt.org > > > > To unsubscribe send an email to users-leave(a)ovirt.org > > > > Privacy Statement: https://www.ovirt.org/privacy-policy.html > > > > oVirt Code of Conduct: = > > > > https://www.ovirt.org/community/about/community-guidelines/ > > > > List Archives: = > > > > = > > > = > > https://lists.ovirt.org/archives/list/users(a)ovirt.org/message/S4I2I3M= ID4A4AYXVOLWKU55563DFKEFQ/ > > > > > = > = >=20 --===============1401704012214021070== Content-Type: application/pgp-signature MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="signature.asc" LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KCmlRRXpCQUFCQ0FBZEZpRUU1eUFoeWNKUU5X ZkhRU253QmhsOEh5eDZnWTRGQWw2Z0pkSUFDZ2tRQmhsOEh5eDYKZ1k0Q3RRZi9hYlV2VU5HNmFz UkRWaGZBOWFMZVVGYURzU1JRd1dJZ0h4MGlyZXVPRDZUNDBsNER3RGhkVDVUUgp3bzZ1U3AyOGVJ Q0xMKzJtSXA0M29QOHo4Z3VIVHZIZElKVmhubnVFTXdWS0hzMXprWFNDVXVGU2t3Zi8yNnBoCjBD aEVkYzNUSExER2VoV2dMTHZqV0pnNnVNZWlraEpqREhqcVZsRC9KNFlKcVFlZkxjaUlDWHpSaHBy SWt0QWcKQ2lHeEs2MGhUWi90bm9FZFJTczA3U2NlR3N5RTdnN3A2cVIvRUErT2liOW51UVoraVpz Z0FIYlE4MlI5TVJIbApQS1RkU1R3cnQ1eHZBY0t5U213Y0k0YWZiQjZ3TVYzeDZMZUZkTjBpODBD NEtjc3VKSEhKcE9rR3lpVzk2SThBCkd5MUk5OWZJdlZ5Mnl4aHlueTdYRzQ4YUp6L1pIUT09Cj1w bjRpCi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQo= --===============1401704012214021070==-- From asocha at redhat.com Wed Apr 22 11:21:00 2020 Content-Type: multipart/mixed; boundary="===============7710127710418801515==" MIME-Version: 1.0 From: Artur Socha To: users at ovirt.org Subject: [ovirt-users] Re: oVirt and KeyCloak intergration Date: Wed, 22 Apr 2020 13:20:43 +0200 Message-ID: <0a9fd22985e84f9bca0c49b567ff3d01667789d6.camel@redhat.com> In-Reply-To: 5e54dbcb70be20560261c16aa987ca1966476c7b.camel@redhat.com --===============7710127710418801515== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On Wed, 2020-04-22 at 13:09 +0200, Artur Socha wrote: > On Wed, 2020-04-22 at 10:42 +0000, Anton Louw wrote: > > = > > Ok so this is definitely looking better. I get an error, but at least n= ow it > > is saying : =E2=80=9CThe user admin(a)openidchttp is not authorized to = perform login=E2=80=9D > > = > > This is strange though, because admin in by default should be allowed > > access? > = > Well, yes and no :) > = > In order for user to be considered admin (for ovirt engine) it must belon= g to > keycloak's ovirt-administrator group (in keycloak admin panel see Manage- > > Groups->Members) Small clarification: In keycloak admin panel see Manage-> Groups-> 'ovirt-administrator' -> Mem= bers Note that the group must have the exact name: ovirt-administrator = > = > I think you are very close to have it up-and-running. > = > = > > = > > From: Anton Louw = > > Sent: 22 April 2020 12:38 > > To: Artur Socha ; users(a)ovirt.org > > Subject: RE: [ovirt-users] oVirt and KeyCloak intergration > > = > > Perfect, I=E2=80=99ll test and let you know. > > = > > Thanks > > = > > From: Artur Socha = > > Sent: 22 April 2020 12:32 > > To: Anton Louw ; users(a)ovirt.org > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > = > > + users(a)ovirt.org > > = > > On Wed, 2020-04-22 at 09:57 +0000, Anton Louw wrote: > > > = > > > = > > > Hi Artur, > > > = > > > I would just like to make sure I am following correctly, comparing yo= ur > > > entries against mine. > > > = > > > Your setup: > > > ... > > > config.mapAuthRecord.regex.pattern =3D > > > ^(?.*?)((\\\\(?@)(?.*?)@.*)|(?@.*))$ > > > ... > > > = > > > = > > > My setup: > > > =E2=80=A6 > > > config.mapAuthRecord.regex.pattern =3D > > > ^(?.*?)((\\(?@)(?.*?)@.*)|(?@.*))$ > > > =E2=80=A6 > > > = > > > Should I add the additional 2 =E2=80=9C\\=E2=80=9D in on my side? > > = > > = > > Yes, please try adding it. In my case I learned about this issue by > > debugging > > the code because the real exception generated by incorrect regexp synta= x was > > hidden behind generic error message giving no clues about the true caus= e. > > = > > > = > > > Your setup: > > > ... > > > > > negotiate|oauth/token- > > > http-auth)|^/ovirt-engine/callback> > > > > > > = > > > Require valid-user > > > AuthType openid-connect > > > = > > > ErrorDocument 401 " > > url=3D/ovirt-engine/sso/login-unauthorized\"/> > > engine/sso/login-unauthorized\">Here" > > > > > > > > > =E2=80=A6 > > > = > > > My setup: > > > =E2=80=A6 > > > > > negotiate|oauth/token- > > > http-auth)|^/ovirt-engine/callback> > > > > > > = > > > Require valid-user > > > AuthType openid-connect > > > = > > > ErrorDocument 401 " > > url=3D/ovirt-engine/sso/login-unauthorized'/> > > engine/sso/login-unauthorized'>Here" > > > > > > > > > =E2=80=A6 > > > = > > > I remember I had syntax errors, but mine was changed. > > > = > > > Does this look fine to you? > > = > > = > > Yeah, your version looks good too. You have ' instead of " so that is o= k. = > > = > > = > > Anton Louw > > Cloud Engineer: Storage and Virtualization at Vox > > T: 087 805 0000 | D: 087 805 1572 > > M: N/A > > E: anton.louw(a)voxtelecom.co.za > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > www.vox.co.za > > = > > = > > = > > = > > = > > = > > = > > = > > = > > = > > = > > = > > > Thanks > > > = > > > = > > > = > > > Anton Louw > > > Cloud Engineer: Storage and Virtualization at Vox > > > T: 087 805 0000 | D: 087 805 1572 > > > M: N/A > > > E: anton.louw(a)voxtelecom.co.za > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > www.vox.co.za > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > = > > > From: Anton Louw = > > > Sent: 22 April 2020 10:07 > > > To: Artur Socha > > > Subject: RE: [ovirt-users] oVirt and KeyCloak intergration > > > = > > > Hi Artur, > > > = > > > Great, I will try the below and let you know. I appreciate your effor= ts. > > > = > > > Sure, you may report it, I was in such a rush that I only hit =E2=80= =9Creply=E2=80=9D and > > > not =E2=80=9CReply All=E2=80=9D > > > = > > > I do recall that I had to make some changes to the below as the it > > > complained about syntax errors: > > > = > > > ErrorDocument 401 " > > content=3D\"0; url=3D/ovirt-engine/sso/login-unauthorized\"/> > > href=3D\"/ovirt-engine/sso/login-unauthorized\">Here" > > > > > > > > > = > > > I will let you know the outcome when I change the below as you sugges= ted. > > > = > > > Cheers > > > = > > > From: Artur Socha = > > > Sent: 22 April 2020 09:51 > > > To: Anton Louw > > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > > = > > > I checked your logs and I did not notice anything suspicious. = > > > However, now I recall I made some changes compared to blog post > > > example: > > > = > > > 1) /etc/ovirt-engine/extensions.d/openid-http-mapping.properties = > > > I added escaping in regexp for '\' > > > ... > > > config.mapAuthRecord.regex.pattern =3D > > > ^(?.*?)((\\\\(?@)(?.*?)@.*)|(?@.*))$ > > > ... > > > = > > > 2) /etc/httpd/ovirt-openidc.conf > > > Escaping for '"' in error document snippet > > > ... > > > > > negotiate|oauth/token-http-auth)|^/ovirt-engine/callback> > > > > > > = > > > Require valid-user > > > AuthType openid-connect > > > = > > > ErrorDocument 401 " > > content=3D\"0; url=3D/ovirt-engine/sso/login-unauthorized\"/> > > href=3D\"/ovirt-engine/sso/login-unauthorized\">Here" > > > > > > > > > = > > > ... > > > = > > > These two issues were most probably caused by the blog site rendering. > > > = > > > = > > > You might want to check engine.log (or server.log not really sure whi= ch > > > one was that) for aaa extension initialization logs. They should = > > > appear at the beginning just after restarting engine. > > > = > > > Unfortunately, at the moment I do not have running keycloak setup (I > > > used to have a local VM) but I will try to find some time to set it up > > > again once I'm done with another work item that actually consumes > > > almost entire disk space for my 2 machines) > > > = > > > Please let me know if anything changes after applying these config > > > changes. It this works for you then I will request the blog post to be > > > updated. > > > = > > > Do you mind if I keep(re-post) this discussion back to users(a)ovirt = in > > > case other might have similar issues with keycloak integration? > > > = > > > A. > > > = > > > On Wed, 2020-04-22 at 06:35 +0000, Anton Louw wrote: > > > > = > > > > Hi Artru, > > > > = > > > > Thank you for the reply. The post [1] is actually the main source of > > > > information I worked from in order top get everything configured. In > > > > the post[1] I ran through the whole testing section, and everything > > > > works as expected. I can see the VMs etc when using the python > > > > script. > > > > = > > > > In my case we are not using ldap as a provider, I tried using > > > > keycloak directly as a provider, I am not sure if that is where I am > > > > going wrong? > > > > = > > > > I have attached the last part of the apache ssl_access_log when I > > > > tried logging in this morning. I have also attached the engine log. > > > > = > > > > Thanks > > > > = > > > > = > > > > Anton Louw > > > > Cloud Engineer: Storage and Virtualization at Vox > > > > T: 087 805 0000 | D: 087 805 1572 > > > > M: N/A > > > > E: anton.louw(a)voxtelecom.co.za > > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > > www.vox.co.za > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > = > > > > From: Artru Socha = > > > > Sent: 21 April 2020 15:20 > > > > To: Anton Louw ; users(a)ovirt.org > > > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > > > = > > > > On Tue, 2020-04-21 at 12:48 +0000, Anton Louw wrote: > > > > > = > > > > > Hi Everybody, > > > > > = > > > > > = > > > > Hi Anton, > > > > = > > > > > Has anybody gone the route of using KeyCloak to login to oVirt? > > > > > KeyCloak has been configured and the neccesary configs have also > > > > been > > > > > done on the engine. It redirects perfectly from the oVirt Web Log= in > > > > > page to KeyCloak, but after logging into KeyCloak, I get redirect= ed > > > > > back to the oVirt Web Login. When trying to login again, I get the > > > > > below error: > > > > > = > > > > > = > > > > > = > > > > > server_error: Missing parameter: 'params' > > > > > = > > > > = > > > > Not so long ago I managed to setup ovirt engine with keyloack (using > > > > ldap as users provider). Hopefully, I would be able to help you with > > > > it. = > > > > = > > > > There is excellent blog post[1] available. You might also check > > > > keycloak+ldap post [2], however, when I was working on the > > > > integration > > > > I was not aware of if and did not test it. > > > > = > > > > The error you mentioned does not really indicate what exactly is > > > > wrong > > > > but it might suggest that there is some sort of misconfiguration wi= th > > > > apache (you need to install and configure mod_auth_openidc as > > > > described > > > > at [1]). At least that happened in my case. > > > > = > > > > In case you have already gone through it you could probably check > > > > apache logs. > > > > = > > > > Under [1] there is a python script that can be used to check api > > > > calls, > > > > please update username/password and test it against your environmen= t. > > > > = > > > > = > > > > Would it be possible post relevant piece of apache logs together wi= th > > > > engine.log ? > > > > = > > > > = > > > > [1] = > > > > = > > > https://blogs.ovirt.org/2019/01/federate-ovirt-engine-authentication-= to-openid-connect-infrastructure/ > > > > [2] = > > > > = > > > https://blogs.ovirt.org/2018/08/ovirt-saml-with-keyloak-using-389ds-u= ser-federation/ > > > > Artur > > > > = > > > > = > > > > = > > > > > I have checked all the logs, but nothing is telling me what exact= ly > > > > > the issue is. = > > > > > = > > > > > If anybody has any idea, please let me know. > > > > > = > > > > > Thanks > > > > > = > > > > > Anton Louw > > > > > Cloud Engineer: Storage and Virtualization at Vox > > > > > T: 087 805 0000 | D: 087 805 1572 > > > > > M: N/A > > > > > E: anton.louw(a)voxtelecom.co.za > > > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > > > www.vox.co.za > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > = > > > > > Disclaimer > > > > > The contents of this email are confidential to the sender and the > > > > > intended recipient. Unless the contents are clearly and entirely = of > > > > a > > > > > personal nature, they are subject to copyright in favour of the > > > > > holding company of the Vox group of companies. Any recipient who > > > > > receives this email in error should immediately report the error = to > > > > > the sender and permanently delete this email from all storage > > > > > devices. > > > > > = > > > > > This email has been scanned for viruses and malware, and may have > > > > > been automatically archived by Mimecast Ltd, an innovator in > > > > Software > > > > > as a Service (SaaS) for business. Providing a safer and more usef= ul > > > > > place for your human generated data. Specializing in; Security, > > > > > archiving and compliance. To find out more Click Here. > > > > > = > > > > > = > > > > > _______________________________________________ > > > > > Users mailing list -- users(a)ovirt.org > > > > > To unsubscribe send an email to users-leave(a)ovirt.org > > > > > Privacy Statement: https://www.ovirt.org/privacy-policy.html > > > > > oVirt Code of Conduct: = > > > > > https://www.ovirt.org/community/about/community-guidelines/ > > > > > List Archives: = > > > > > = > > > https://lists.ovirt.org/archives/list/users(a)ovirt.org/message/S4I2I= 3MID4A4AYXVOLWKU55563DFKEFQ/ > > > =20 --===============7710127710418801515== Content-Type: application/pgp-signature MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="signature.asc" LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KCmlRRXpCQUFCQ0FBZEZpRUU1eUFoeWNKUU5X ZkhRU253QmhsOEh5eDZnWTRGQWw2Z0tJc0FDZ2tRQmhsOEh5eDYKZ1k1dGlBZi9Za0JFQTczcGQz NlBRdjJpMmc1SUJNWWZGWjIyYll6VzRQdktlTTZVdm52ZDllQ1pBSmVwWUc1UApZalprc2xUREM3 aytGS2dQd2NWajVmNlFTT1lPejg3YlVpWGw4cVF3MzlqY1Y4ZWRsWUt2ajRvTDJWRXc2Y0hJCmZG SmV2RTArTXd0aUxSbkNKcnkzQkk0aGV2TmpZb1NEd2JDMllsQ0tnVUpqY3FVVXR0c2xOSUl5aHdQ L1RqTUsKeEVnVGY3bDQ5dnpWOEgwbVh3WThwY21meHlHNUlVVmxzZUVpZy9rMnFLWXpSYVRHMDha b3VOSkNTK05waHZrMwp0MW5ZdDN5Y0FNZ0w1bUE2ZS9ISTRHMEgwNE1vK3FVV0U5MlNQemdoRGg5 Y0kzV1pydjBLN3BVbGxuUzVTditQCjliZE1saW1kRFZVOVdObWhMejRmVWptb2RMTzRGQT09Cj1I Ykp1Ci0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQo= --===============7710127710418801515==-- From Anton.Louw at voxtelecom.co.za Wed Apr 22 12:28:39 2020 Content-Type: multipart/mixed; boundary="===============1779278649260196952==" MIME-Version: 1.0 From: Anton Louw To: users at ovirt.org Subject: [ovirt-users] Re: oVirt and KeyCloak intergration Date: Wed, 22 Apr 2020 12:28:14 +0000 Message-ID: < > In-Reply-To: 0a9fd22985e84f9bca0c49b567ff3d01667789d6.camel@redhat.com --===============1779278649260196952== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi Artur, You are a champion! I can access oVirt now. Thank you so much. One last question, can I create additional groups in ie. Read Only, etc? An= d then will this be done in KeyCloak or in the oVIrt UI? Thank you From: Artur Socha Sent: 22 April 2020 13:21 To: Anton Louw ; users(a)ovirt.org Subject: Re: [ovirt-users] oVirt and KeyCloak intergration On Wed, 2020-04-22 at 13:09 +0200, Artur Socha wrote: > On Wed, 2020-04-22 at 10:42 +0000, Anton Louw wrote: > > > > Ok so this is definitely looking better. I get an error, but at least n= ow it > > is saying : =E2=80=9CThe user admin(a)openidchttp is not authorized to = perform login=E2=80=9D > > > > This is strange though, because admin in by default should be allowed > > access? > > Well, yes and no :) > > In order for user to be considered admin (for ovirt engine) it must belon= g to > keycloak's ovirt-administrator group (in keycloak admin panel see Manage- > > Groups->Members) Anton Louw Cloud Engineer: Storage and Virtualization ______________________________________ D: 087 805 1572 | M: N/A A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg anton.louw(a)voxtelecom.co.za www.vox.co.za Small clarification: In keycloak admin panel see Manage-> Groups-> 'ovirt-administrator' -> Memb= ers Note that the group must have the exact name: ovirt-administrator > > I think you are very close to have it up-and-running. > > > > > > From: Anton Louw > > Sent: 22 April 2020 12:38 > > To: Artur Socha >; user= s(a)ovirt.org > > Subject: RE: [ovirt-users] oVirt and KeyCloak intergration > > > > Perfect, I=E2=80=99ll test and let you know. > > > > Thanks > > > > From: Artur Socha > > > Sent: 22 April 2020 12:32 > > To: Anton Louw >; users(a)ovirt.org > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > > > + users(a)ovirt.org > > > > On Wed, 2020-04-22 at 09:57 +0000, Anton Louw wrote: > > > > > > > > > Hi Artur, > > > > > > I would just like to make sure I am following correctly, comparing yo= ur > > > entries against mine. > > > > > > Your setup: > > > ... > > > config.mapAuthRecord.regex.pattern =3D > > > ^(?.*?)((\\\\(?@)(?.*?)@.*)|(?@.*))$ > > > ... > > > > > > > > > My setup: > > > =E2=80=A6 > > > config.mapAuthRecord.regex.pattern =3D > > > ^(?.*?)((\\(?@)(?.*?)@.*)|(?@.*))$ > > > =E2=80=A6 > > > > > > Should I add the additional 2 =E2=80=9C\\=E2=80=9D in on my side? > > > > > > Yes, please try adding it. In my case I learned about this issue by > > debugging > > the code because the real exception generated by incorrect regexp synta= x was > > hidden behind generic error message giving no clues about the true caus= e. > > > > > > > > Your setup: > > > ... > > > > > negotiate|oauth/token- > > > http-auth)|^/ovirt-engine/callback> > > > > > > > > > Require valid-user > > > AuthType openid-connect > > > > > > ErrorDocument 401 " > > url=3D/ovirt-engine/sso/login-unauthorized\"/> > > engine/sso/login-unauthorized\">Here" > > > > > > > > > =E2=80=A6 > > > > > > My setup: > > > =E2=80=A6 > > > > > negotiate|oauth/token- > > > http-auth)|^/ovirt-engine/callback> > > > > > > > > > Require valid-user > > > AuthType openid-connect > > > > > > ErrorDocument 401 " > > url=3D/ovirt-engine/sso/login-unauthorized'/> > > engine/sso/login-unauthorized'>Here" > > > > > > > > > =E2=80=A6 > > > > > > I remember I had syntax errors, but mine was changed. > > > > > > Does this look fine to you? > > > > > > Yeah, your version looks good too. You have ' instead of " so that is o= k. > > > > > > Anton Louw > > Cloud Engineer: Storage and Virtualization at Vox > > T: 087 805 0000 | D: 087 805 1572 > > M: N/A > > E: anton.louw(a)voxtelecom.co.za > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > www.vox.co.za > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > Anton Louw > > > Cloud Engineer: Storage and Virtualization at Vox > > > T: 087 805 0000 | D: 087 805 1572 > > > M: N/A > > > E: anton.louw(a)voxtelecom.co.za > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > www.vox.co.za > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > From: Anton Louw > > > Sent: 22 April 2020 10:07 > > > To: Artur Socha > > > > Subject: RE: [ovirt-users] oVirt and KeyCloak intergration > > > > > > Hi Artur, > > > > > > Great, I will try the below and let you know. I appreciate your effor= ts. > > > > > > Sure, you may report it, I was in such a rush that I only hit =E2=80= =9Creply=E2=80=9D and > > > not =E2=80=9CReply All=E2=80=9D > > > > > > I do recall that I had to make some changes to the below as the it > > > complained about syntax errors: > > > > > > ErrorDocument 401 " > > content=3D\"0; url=3D/ovirt-engine/sso/login-unauthorized\"/> > > href=3D\"/ovirt-engine/sso/login-unauthorized\">Here" > > > > > > > > > > > > I will let you know the outcome when I change the below as you sugges= ted. > > > > > > Cheers > > > > > > From: Artur Socha > > > > Sent: 22 April 2020 09:51 > > > To: Anton Louw > > > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > > > > > I checked your logs and I did not notice anything suspicious. > > > However, now I recall I made some changes compared to blog post > > > example: > > > > > > 1) /etc/ovirt-engine/extensions.d/openid-http-mapping.properties > > > I added escaping in regexp for '\' > > > ... > > > config.mapAuthRecord.regex.pattern =3D > > > ^(?.*?)((\\\\(?@)(?.*?)@.*)|(?@.*))$ > > > ... > > > > > > 2) /etc/httpd/ovirt-openidc.conf > > > Escaping for '"' in error document snippet > > > ... > > > > > negotiate|oauth/token-http-auth)|^/ovirt-engine/callback> > > > > > > > > > Require valid-user > > > AuthType openid-connect > > > > > > ErrorDocument 401 " > > content=3D\"0; url=3D/ovirt-engine/sso/login-unauthorized\"/> > > href=3D\"/ovirt-engine/sso/login-unauthorized\">Here" > > > > > > > > > > > > ... > > > > > > These two issues were most probably caused by the blog site rendering. > > > > > > > > > You might want to check engine.log (or server.log not really sure whi= ch > > > one was that) for aaa extension initialization logs. They should > > > appear at the beginning just after restarting engine. > > > > > > Unfortunately, at the moment I do not have running keycloak setup (I > > > used to have a local VM) but I will try to find some time to set it up > > > again once I'm done with another work item that actually consumes > > > almost entire disk space for my 2 machines) > > > > > > Please let me know if anything changes after applying these config > > > changes. It this works for you then I will request the blog post to be > > > updated. > > > > > > Do you mind if I keep(re-post) this discussion back to users(a)ovirt = in > > > case other might have similar issues with keycloak integration? > > > > > > A. > > > > > > On Wed, 2020-04-22 at 06:35 +0000, Anton Louw wrote: > > > > > > > > Hi Artru, > > > > > > > > Thank you for the reply. The post [1] is actually the main source of > > > > information I worked from in order top get everything configured. In > > > > the post[1] I ran through the whole testing section, and everything > > > > works as expected. I can see the VMs etc when using the python > > > > script. > > > > > > > > In my case we are not using ldap as a provider, I tried using > > > > keycloak directly as a provider, I am not sure if that is where I am > > > > going wrong? > > > > > > > > I have attached the last part of the apache ssl_access_log when I > > > > tried logging in this morning. I have also attached the engine log. > > > > > > > > Thanks > > > > > > > > > > > > Anton Louw > > > > Cloud Engineer: Storage and Virtualization at Vox > > > > T: 087 805 0000 | D: 087 805 1572 > > > > M: N/A > > > > E: anton.louw(a)voxtelecom.co.za > > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > > www.vox.co.za > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > From: Artru Socha > > > > > Sent: 21 April 2020 15:20 > > > > To: Anton Louw >; users(a)ovirt.org > > > > Subject: Re: [ovirt-users] oVirt and KeyCloak intergration > > > > > > > > On Tue, 2020-04-21 at 12:48 +0000, Anton Louw wrote: > > > > > > > > > > Hi Everybody, > > > > > > > > > > > > > > Hi Anton, > > > > > > > > > Has anybody gone the route of using KeyCloak to login to oVirt? > > > > > KeyCloak has been configured and the neccesary configs have also > > > > been > > > > > done on the engine. It redirects perfectly from the oVirt Web Log= in > > > > > page to KeyCloak, but after logging into KeyCloak, I get redirect= ed > > > > > back to the oVirt Web Login. When trying to login again, I get the > > > > > below error: > > > > > > > > > > > > > > > > > > > > server_error: Missing parameter: 'params' > > > > > > > > > > > > > Not so long ago I managed to setup ovirt engine with keyloack (using > > > > ldap as users provider). Hopefully, I would be able to help you with > > > > it. > > > > > > > > There is excellent blog post[1] available. You might also check > > > > keycloak+ldap post [2], however, when I was working on the > > > > integration > > > > I was not aware of if and did not test it. > > > > > > > > The error you mentioned does not really indicate what exactly is > > > > wrong > > > > but it might suggest that there is some sort of misconfiguration wi= th > > > > apache (you need to install and configure mod_auth_openidc as > > > > described > > > > at [1]). At least that happened in my case. > > > > > > > > In case you have already gone through it you could probably check > > > > apache logs. > > > > > > > > Under [1] there is a python script that can be used to check api > > > > calls, > > > > please update username/password and test it against your environmen= t. > > > > > > > > > > > > Would it be possible post relevant piece of apache logs together wi= th > > > > engine.log ? > > > > > > > > > > > > [1] > > > > > > > https://blogs.ovirt.org/2019/01/federate-ovirt-engine-authentication-= to-openid-connect-infrastructure/ > > > > [2] > > > > > > > https://blogs.ovirt.org/2018/08/ovirt-saml-with-keyloak-using-389ds-u= ser-federation/ > > > > Artur > > > > > > > > > > > > > > > > > I have checked all the logs, but nothing is telling me what exact= ly > > > > > the issue is. > > > > > > > > > > If anybody has any idea, please let me know. > > > > > > > > > > Thanks > > > > > > > > > > Anton Louw > > > > > Cloud Engineer: Storage and Virtualization at Vox > > > > > T: 087 805 0000 | D: 087 805 1572 > > > > > M: N/A > > > > > E: anton.louw(a)voxtelecom.co.za > > > > > A: Rutherford Estate, 1 Scott Street, Waverley, Johannesburg > > > > > www.vox.co.za > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Disclaimer > > > > > The contents of this email are confidential to the sender and the > > > > > intended recipient. Unless the contents are clearly and entirely = of > > > > a > > > > > personal nature, they are subject to copyright in favour of the > > > > > holding company of the Vox group of companies. Any recipient who > > > > > receives this email in error should immediately report the error = to > > > > > the sender and permanently delete this email from all storage > > > > > devices. > > > > > > > > > > This email has been scanned for viruses and malware, and may have > > > > > been automatically archived by Mimecast Ltd, an innovator in > > > > Software > > > > > as a Service (SaaS) for business. Providing a safer and more usef= ul > > > > > place for your human generated data. Specializing in; Security, > > > > > archiving and compliance. To find out more Click Here. > > > > > > > > > > > > > > > _______________________________________________ > > > > > Users mailing list -- users(a)ovirt.org > > > > > To unsubscribe send an email to users-leave(a)ovirt.org > > > > > Privacy Statement: https://www.ovirt.org/privacy-policy.html > > > > > oVirt Code of Conduct: > > > > > https://www.ovirt.org/community/about/community-guidelines/ > > > > > List Archives: > > > > > > > > https://lists.ovirt.org/archives/list/users(a)ovirt.org/message/S4I2I= 3MID4A4AYXVOLWKU55563DFKEFQ/ > > > --===============1779278649260196952== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+PGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD11dGYtOCI+DQo8bWV0YSBuYW1lPSJHZW5lcmF0b3IiIGNvbnRlbnQ9 Ik1pY3Jvc29mdCBXb3JkIDE1IChmaWx0ZXJlZCBtZWRpdW0pIj4NCjxzdHlsZT48IS0tDQovKiBG b250IERlZmluaXRpb25zICovDQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1h dGgiOw0KCXBhbm9zZS0xOjIgNCA1IDMgNSA0IDYgMyAyIDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250 LWZhbWlseTpDYWxpYnJpOw0KCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30NCi8qIFN0 eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9y bWFsDQoJe21hcmdpbjowY207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZTox MS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7fQ0KYTpsaW5rLCBzcGFu Lk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6Ymx1ZTsNCgl0 ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtG b2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxlOw0KCXRleHQt ZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KcC5tc29ub3JtYWwwLCBsaS5tc29ub3JtYWwwLCBkaXYu bXNvbm9ybWFsMA0KCXttc28tc3R5bGUtbmFtZTptc29ub3JtYWw7DQoJbXNvLW1hcmdpbi10b3At YWx0OmF1dG87DQoJbWFyZ2luLXJpZ2h0OjBjbTsNCgltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0 bzsNCgltYXJnaW4tbGVmdDowY207DQoJZm9udC1zaXplOjExLjBwdDsNCglmb250LWZhbWlseToi Q2FsaWJyaSIsc2Fucy1zZXJpZjt9DQpzcGFuLkVtYWlsU3R5bGUxOQ0KCXttc28tc3R5bGUtdHlw ZTpwZXJzb25hbC1yZXBseTsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCglj b2xvcjp3aW5kb3d0ZXh0O30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10eXBlOmV4cG9y dC1vbmx5Ow0KCWZvbnQtc2l6ZToxMC4wcHQ7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6 NjEyLjBwdCA3OTIuMHB0Ow0KCW1hcmdpbjo3Mi4wcHQgNzIuMHB0IDcyLjBwdCA3Mi4wcHQ7fQ0K ZGl2LldvcmRTZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPjwhLS1b aWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1h eD0iMTAyNiIgLz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0K PG86c2hhcGVsYXlvdXQgdjpleHQ9ImVkaXQiPg0KPG86aWRtYXAgdjpleHQ9ImVkaXQiIGRhdGE9 IjEiIC8+DQo8L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+DQo8c3R5bGUgdHlwZT0i dGV4dC9jc3MiPi5zdHlsZTEge2ZvbnQtZmFtaWx5OiAiQXJpYWwiO308L3N0eWxlPjwvaGVhZD48 Ym9keSBsYW5nPSJFTi1aQSIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI+PGJyPg0KICAgIDxi cj4NCiAgICA8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj5IaSBBcnR1ciw8bzpwPjwv bzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZh cmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+ WW91IGFyZSBhIGNoYW1waW9uISBJIGNhbiBhY2Nlc3Mgb1ZpcnQgbm93LiBUaGFuayB5b3Ugc28g bXVjaC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBz dHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFu PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJtc28tZmFyZWFzdC1sYW5n dWFnZTpFTi1VUyI+T25lIGxhc3QgcXVlc3Rpb24sIGNhbiBJIGNyZWF0ZSBhZGRpdGlvbmFsIGdy b3VwcyBpbiBpZS4gUmVhZCBPbmx5LCBldGM/IEFuZCB0aGVuIHdpbGwgdGhpcyBiZSBkb25lIGlu IEtleUNsb2FrIG9yIGluIHRoZSBvVklydCBVST88bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0ibXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMi PjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJtc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+VGhhbmsgeW91PG86cD48L286cD48 L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9Im1zby1mYXJlYXN0 LWxhbmd1YWdlOkVOLVVTIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQogICAgPGJyPg0K ICA8dGFibGUgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNp bmc9IjAiPg0KICA8dGJvZHk+DQogIDx0cj4NCiAgICA8dGQ+PGZvbnQgY29sb3I9IiM5MmQ0MDAi IHNpemU9IjQiIGZhY2U9IkFyaWFsIj48c3Ryb25nPkFudG9uIExvdXc8L3N0cm9uZz48L2ZvbnQ+ PC90ZD4NCiAgPC90cj4gICANCiAgPHRyPg0KICAgIDx0ZD48Zm9udCBjb2xvcj0iIzAwMDAwMCIg c2l6ZT0iMiIgZmFjZT0iQXJpYWwiPjxzdHJvbmc+Q2xvdWQgRW5naW5lZXI6IFN0b3JhZ2UgYW5k IFZpcnR1YWxpemF0aW9uPC9zdHJvbmc+IGF0IDxmb250IGNvbG9yPSIjOTJkNDAwIj48c3Ryb25n PlZveDwvc3Ryb25nPjwvZm9udD48L2ZvbnQ+PGJyPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAg ICA8dGQ+PGhyPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQ+PGZvbnQgY29sb3I9IiMw MDAwMDAiIHNpemU9IjIiIGZhY2U9IkFyaWFsIj48Zm9udCBjb2xvcj0iIzkyZDQwMCI+PHN0cm9u Zz5UOjwvc3Ryb25nPjwvZm9udD4gPGZvbnQgc2l6ZT0iMyI+Jm5ic3A7PC9mb250PjA4NyA4MDUg MDAwMCB8IDxmb250IGNvbG9yPSIjOTJkNDAwIj48c3Ryb25nPkQ6PC9zdHJvbmc+PC9mb250PiAw ODcgODA1IDE1NzI8YnI+PGZvbnQgY29sb3I9IiM5MmQ0MDAiPjxzdHJvbmc+TTo8L3N0cm9uZz48 L2ZvbnQ+IE4vQTxicj4NCiAgICA8YSBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7IiB0YXJn ZXQ9Il9ibGFuayI+PGZvbnQgY29sb3I9IiMwMDAwMDAiIHNpemU9IjIiIGZhY2U9IkFyaWFsIj48 Zm9udCBjb2xvcj0iIzkyZDQwMCI+PHN0cm9uZz5FOjwvc3Ryb25nPjwvZm9udD4gPGEgaHJlZj0i bWFpbHRvOmFudG9uLmxvdXdAdm94dGVsZWNvbS5jby56YSI+YW50b24ubG91d0B2b3h0ZWxlY29t LmNvLnphPC9hPjwvZm9udD48L2E+PGJyPjxmb250IGNvbG9yPSIjOTJkNDAwIj48c3Ryb25nPkE6 PC9zdHJvbmc+PC9mb250PiA8Zm9udCBjb2xvcj0iIzAwMDAwMCIgc2l6ZT0iMiIgZmFjZT0iQXJp YWwiPjxmb250IGNvbG9yPSIjMDAwMDAwIiBzaXplPSIyIiBmYWNlPSJBcmlhbCI+UnV0aGVyZm9y ZCBFc3RhdGUsIDEgU2NvdHQgU3RyZWV0LCBXYXZlcmxleSwgSm9oYW5uZXNidXJnPC9mb250Pjxi cj4NCiAgICA8YSBocmVmPSJodHRwOi8vd3d3LnZveC5jby56YSIgc3R5bGU9InRleHQtZGVjb3Jh dGlvbjpub25lIiB0YXJnZXQ9Il9ibGFuayI+PGZvbnQgY29sb3I9IiM5MmQ0MDAiIHNpemU9IjIi IGZhY2U9IkFyaWFsIj53d3cudm94LmNvLnphPC9mb250PjwvYT48L2ZvbnQ+PC9mb250PjwvdGQ+ DQogIDwvdHI+DQogICAgPHRyPg0KICAgIDx0ZD48YnI+DQogICAgPHRhYmxlIGJvcmRlcj0iMCIg Y2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCiAgICA8dGJvZHk+PHRyPg0KICAgIDx0 ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0cj48 dGQ+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3ZveHRlbGVjb21aQSI+PElNRyBi b3JkZXI9IjAiIGFsdD0iRiIgc3JjPSJjaWQ6MTIwMDQyMjE0MjgyMDAwOTczQHphLW10YS0yNS56 YS5taW1lY2FzdC5sYW4iID48L0E+PC90ZD48L3RyPjwvdGFibGU+ICZuYnNwOzwvdGQ+DQogICAg PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+PHRy Pjx0ZD48YSBocmVmPSJodHRwczovL3d3dy50d2l0dGVyLmNvbS92b3h0ZWxlY29tIj48SU1HIGJv cmRlcj0iMCIgYWx0PSJUIiBzcmM9ImNpZDoxMjAwNDIyMTQyODIwMDA3NzNAemEtbXRhLTI1Lnph Lm1pbWVjYXN0LmxhbiIgPjwvQT48L3RkPjwvdHI+PC90YWJsZT4gJm5ic3A7PC90ZD4NCiAgICA8 dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dHI+ PHRkPjxhIGhyZWY9Imh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vdm94dGVsZWNvbXphLyI+PElN RyBib3JkZXI9IjAiIGFsdD0iSSIgc3JjPSJjaWQ6MTIwMDQyMjE0MjgyMDAwNjczQHphLW10YS0y NS56YS5taW1lY2FzdC5sYW4iID48L0E+PC90ZD48L3RyPjwvdGFibGU+ICZuYnNwOzwvdGQ+DQog ICAgPHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+ PHRyPjx0ZD48YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tcGFueS92b3h0ZWxl Y29tIj48SU1HIGJvcmRlcj0iMCIgYWx0PSJMIiBzcmM9ImNpZDoxMjAwNDIyMTQyODIwMDA4NzNA emEtbXRhLTI1LnphLm1pbWVjYXN0LmxhbiIgPjwvQT48L3RkPjwvdHI+PC90YWJsZT4gJm5ic3A7 PC90ZD4NCiAgICA8dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRk aW5nPSIwIj48dHI+PHRkPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3VzZXIvVm94 VGVsZWNvbSI+PElNRyBib3JkZXI9IjAiIGFsdD0iWSIgc3JjPSJjaWQ6MTIwMDQyMjE0MjgyMDAw NTczQHphLW10YS0yNS56YS5taW1lY2FzdC5sYW4iID48L0E+PC90ZD48L3RyPjwvdGFibGU+ICZu YnNwOzwvdGQ+DQogICAgPC90cj4NCiAgICA8L3Rib2R5PjwvdGFibGU+DQogICAgPC90ZD4NCiAg PC90cj4NCjwvdGJvZHk+PC90YWJsZT4NCg0KPGJyPg0KDQoNCg0KPGRpdj4NCjxkaXYgc3R5bGU9 ImJvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0 IDBjbSAwY20gMGNtIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIGxhbmc9IkVOLVVT Ij5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gbGFuZz0iRU4tVVMiPiBBcnR1ciBTb2NoYSAmbHQ7YXNv Y2hhQHJlZGhhdC5jb20mZ3Q7DQo8YnI+DQo8Yj5TZW50OjwvYj4gMjIgQXByaWwgMjAyMCAxMzoy MTxicj4NCjxiPlRvOjwvYj4gQW50b24gTG91dyAmbHQ7QW50b24uTG91d0B2b3h0ZWxlY29tLmNv LnphJmd0OzsgdXNlcnNAb3ZpcnQub3JnPGJyPg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbb3ZpcnQt dXNlcnNdIG9WaXJ0IGFuZCBLZXlDbG9hayBpbnRlcmdyYXRpb248bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286 cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5PbiBXZWQsIDIwMjAtMDQtMjIgYXQgMTM6MDkg JiM0MzswMjAwLCBBcnR1ciBTb2NoYSB3cm90ZTo8YnI+DQomZ3Q7IE9uIFdlZCwgMjAyMC0wNC0y MiBhdCAxMDo0MiAmIzQzOzAwMDAsIEFudG9uIExvdXcgd3JvdGU6PGJyPg0KJmd0OyAmZ3Q7IDxi cj4NCiZndDsgJmd0OyBPayBzbyB0aGlzIGlzIGRlZmluaXRlbHkgbG9va2luZyBiZXR0ZXIuIEkg Z2V0IGFuIGVycm9yLCBidXQgYXQgbGVhc3Qgbm93IGl0PGJyPg0KJmd0OyAmZ3Q7IGlzIHNheWlu ZyA6IOKAnFRoZSB1c2VyIGFkbWluQG9wZW5pZGNodHRwIGlzIG5vdCBhdXRob3JpemVkIHRvIHBl cmZvcm0gbG9naW7igJ08YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7IFRoaXMgaXMgc3Ry YW5nZSB0aG91Z2gsIGJlY2F1c2UgYWRtaW4gaW4gYnkgZGVmYXVsdCBzaG91bGQgYmUgYWxsb3dl ZDxicj4NCiZndDsgJmd0OyBhY2Nlc3M/PGJyPg0KJmd0OyA8YnI+DQomZ3Q7IFdlbGwsIHllcyBh bmQgbm8gOik8YnI+DQomZ3Q7IDxicj4NCiZndDsgSW4gb3JkZXIgZm9yIHVzZXIgdG8gYmUgY29u c2lkZXJlZCBhZG1pbiAoZm9yIG92aXJ0IGVuZ2luZSkgaXQgbXVzdCBiZWxvbmcgdG88YnI+DQom Z3Q7IGtleWNsb2FrJ3Mgb3ZpcnQtYWRtaW5pc3RyYXRvciBncm91cCAoaW4ga2V5Y2xvYWsgYWRt aW4gcGFuZWwgc2VlIE1hbmFnZS08YnI+DQomZ3Q7ICZndDsgR3JvdXBzLSZndDtNZW1iZXJzKTxi cj4NCjxicj4NClNtYWxsIGNsYXJpZmljYXRpb246PGJyPg0KPGJyPg0KSW4ga2V5Y2xvYWsgYWRt aW4gcGFuZWwgc2VlIE1hbmFnZS0mZ3Q7IEdyb3Vwcy0mZ3Q7ICdvdmlydC1hZG1pbmlzdHJhdG9y JyAtJmd0OyBNZW1iZXJzPGJyPg0KPGJyPg0KTm90ZSB0aGF0IHRoZSBncm91cCBtdXN0IGhhdmUg dGhlIGV4YWN0IG5hbWU6IG92aXJ0LWFkbWluaXN0cmF0b3IgPGJyPg0KPGJyPg0KPGJyPg0KJmd0 OyA8YnI+DQomZ3Q7IEkgdGhpbmsgeW91IGFyZSB2ZXJ5IGNsb3NlIHRvIGhhdmUgaXQgdXAtYW5k LXJ1bm5pbmcuPGJyPg0KJmd0OyA8YnI+DQomZ3Q7IDxicj4NCiZndDsgJmd0OyA8YnI+DQomZ3Q7 ICZndDsgRnJvbTogQW50b24gTG91dyA8YnI+DQomZ3Q7ICZndDsgU2VudDogMjIgQXByaWwgMjAy MCAxMjozODxicj4NCiZndDsgJmd0OyBUbzogQXJ0dXIgU29jaGEgJmx0OzxhIGhyZWY9Im1haWx0 bzphc29jaGFAcmVkaGF0LmNvbSI+YXNvY2hhQHJlZGhhdC5jb208L2E+Jmd0OzsgPGEgaHJlZj0i bWFpbHRvOnVzZXJzQG92aXJ0Lm9yZyI+DQp1c2Vyc0BvdmlydC5vcmc8L2E+PGJyPg0KJmd0OyAm Z3Q7IFN1YmplY3Q6IFJFOiBbb3ZpcnQtdXNlcnNdIG9WaXJ0IGFuZCBLZXlDbG9hayBpbnRlcmdy YXRpb248YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7IFBlcmZlY3QsIEnigJlsbCB0ZXN0 IGFuZCBsZXQgeW91IGtub3cuPGJyPg0KJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyBUaGFua3M8 YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7IEZyb206IEFydHVyIFNvY2hhICZsdDs8YSBo cmVmPSJtYWlsdG86YXNvY2hhQHJlZGhhdC5jb20iPmFzb2NoYUByZWRoYXQuY29tPC9hPiZndDsg PGJyPg0KJmd0OyAmZ3Q7IFNlbnQ6IDIyIEFwcmlsIDIwMjAgMTI6MzI8YnI+DQomZ3Q7ICZndDsg VG86IEFudG9uIExvdXcgJmx0OzxhIGhyZWY9Im1haWx0bzpBbnRvbi5Mb3V3QHZveHRlbGVjb20u Y28uemEiPkFudG9uLkxvdXdAdm94dGVsZWNvbS5jby56YTwvYT4mZ3Q7Ow0KPGEgaHJlZj0ibWFp bHRvOnVzZXJzQG92aXJ0Lm9yZyI+dXNlcnNAb3ZpcnQub3JnPC9hPjxicj4NCiZndDsgJmd0OyBT dWJqZWN0OiBSZTogW292aXJ0LXVzZXJzXSBvVmlydCBhbmQgS2V5Q2xvYWsgaW50ZXJncmF0aW9u PGJyPg0KJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmIzQzOyA8YSBocmVmPSJtYWlsdG86dXNl cnNAb3ZpcnQub3JnIj51c2Vyc0BvdmlydC5vcmc8L2E+PGJyPg0KJmd0OyAmZ3Q7IDxicj4NCiZn dDsgJmd0OyBPbiBXZWQsIDIwMjAtMDQtMjIgYXQgMDk6NTcgJiM0MzswMDAwLCBBbnRvbiBMb3V3 IHdyb3RlOjxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZn dDsgJmd0OyAmZ3Q7IEhpIEFydHVyLDxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0 OyAmZ3Q7IEkgd291bGQganVzdCBsaWtlIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyBjb3Jy ZWN0bHksIGNvbXBhcmluZyB5b3VyPGJyPg0KJmd0OyAmZ3Q7ICZndDsgZW50cmllcyBhZ2FpbnN0 IG1pbmUuPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgWW91ciBzZXR1 cDo8YnI+DQomZ3Q7ICZndDsgJmd0OyAuLi48YnI+DQomZ3Q7ICZndDsgJmd0OyBjb25maWcubWFw QXV0aFJlY29yZC5yZWdleC5wYXR0ZXJuID08YnI+DQomZ3Q7ICZndDsgJmd0OyBeKD8mbHQ7dXNl ciZndDsuKj8pKCg8YSBocmVmPSJmaWxlOi8vKCUzZiUzY2F0JTNlQCkoJTNmJTNjc3VmZml4JTNl LiolM2YpQC4qKXwoJTNmJTNjcmVhbG0lM2VALiopKSQiPlxcXFwoPyZsdDthdCZndDtAKSg/Jmx0 O3N1ZmZpeCZndDsuKj8pQC4qKXwoPyZsdDtyZWFsbSZndDtALiopKSQ8L2E+PGJyPg0KJmd0OyAm Z3Q7ICZndDsgLi4uPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgTXkgc2V0dXA6PGJyPg0KJmd0OyAmZ3Q7ICZndDsg4oCmPGJyPg0K Jmd0OyAmZ3Q7ICZndDsgY29uZmlnLm1hcEF1dGhSZWNvcmQucmVnZXgucGF0dGVybiA9PGJyPg0K Jmd0OyAmZ3Q7ICZndDsgXig/Jmx0O3VzZXImZ3Q7Lio/KSgoPGEgaHJlZj0iZmlsZTovLyglM2Yl M2NhdCUzZUApKCUzZiUzY3N1ZmZpeCUzZS4qJTNmKUAuKil8KCUzZiUzY3JlYWxtJTNlQC4qKSkk Ij5cXCg/Jmx0O2F0Jmd0O0ApKD8mbHQ7c3VmZml4Jmd0Oy4qPylALiopfCg/Jmx0O3JlYWxtJmd0 O0AuKikpJDwvYT48YnI+DQomZ3Q7ICZndDsgJmd0OyDigKY8YnI+DQomZ3Q7ICZndDsgJmd0OyA8 YnI+DQomZ3Q7ICZndDsgJmd0OyBTaG91bGQgSSBhZGQgdGhlIGFkZGl0aW9uYWwgMiDigJxcXOKA nSBpbiBvbiBteSBzaWRlPzxicj4NCiZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0 OyAmZ3Q7IFllcywgcGxlYXNlIHRyeSBhZGRpbmcgaXQuIEluIG15IGNhc2UgSSBsZWFybmVkIGFi b3V0IHRoaXMgaXNzdWUgYnk8YnI+DQomZ3Q7ICZndDsgZGVidWdnaW5nPGJyPg0KJmd0OyAmZ3Q7 IHRoZSBjb2RlIGJlY2F1c2UgdGhlIHJlYWwgZXhjZXB0aW9uIGdlbmVyYXRlZCBieSBpbmNvcnJl Y3QgcmVnZXhwIHN5bnRheCB3YXM8YnI+DQomZ3Q7ICZndDsgaGlkZGVuIGJlaGluZCBnZW5lcmlj IGVycm9yIG1lc3NhZ2UgZ2l2aW5nIG5vIGNsdWVzIGFib3V0IHRoZSB0cnVlIGNhdXNlLjxicj4N CiZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyBZb3Vy IHNldHVwOjxicj4NCiZndDsgJmd0OyAmZ3Q7IC4uLjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZsdDtM b2NhdGlvbk1hdGNoIF4vb3ZpcnQtZW5naW5lL3Nzby8oaW50ZXJhY3RpdmUtbG9naW4tPGJyPg0K Jmd0OyAmZ3Q7ICZndDsgbmVnb3RpYXRlfG9hdXRoL3Rva2VuLTxicj4NCiZndDsgJmd0OyAmZ3Q7 IGh0dHAtYXV0aCl8Xi9vdmlydC1lbmdpbmUvY2FsbGJhY2smZ3Q7PGJyPg0KJmd0OyAmZ3Q7ICZn dDsgJmx0O0lmICZxdW90O3JlcSgnQXV0aG9yaXphdGlvbicpICF+IC9eKEJlYXJlcnxCYXNpYykv aSZxdW90OyZndDs8YnI+DQomZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyBSZXF1 aXJlIHZhbGlkLXVzZXI8YnI+DQomZ3Q7ICZndDsgJmd0OyBBdXRoVHlwZSBvcGVuaWQtY29ubmVj dDxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IEVycm9yRG9jdW1lbnQg NDAxICZxdW90OyZsdDtodG1sJmd0OyZsdDttZXRhIGh0dHAtZXF1aXY9XCZxdW90O3JlZnJlc2hc JnF1b3Q7Y29udGVudD1cJnF1b3Q7MDs8YnI+DQomZ3Q7ICZndDsgJmd0OyB1cmw9L292aXJ0LWVu Z2luZS9zc28vbG9naW4tdW5hdXRob3JpemVkXCZxdW90Oy8mZ3Q7Jmx0O2JvZHkmZ3Q7Jmx0O2Fo cmVmPVwmcXVvdDsvb3ZpcnQtPGJyPg0KJmd0OyAmZ3Q7ICZndDsgZW5naW5lL3Nzby9sb2dpbi11 bmF1dGhvcml6ZWRcJnF1b3Q7Jmd0O0hlcmUmbHQ7L2EmZ3Q7Jmx0Oy9ib2R5Jmd0OyZsdDsvaHRt bCZndDsmcXVvdDs8YnI+DQomZ3Q7ICZndDsgJmd0OyAmbHQ7L0lmJmd0Ozxicj4NCiZndDsgJmd0 OyAmZ3Q7ICZsdDsvTG9jYXRpb25NYXRjaCZndDs8YnI+DQomZ3Q7ICZndDsgJmd0OyDigKY8YnI+ DQomZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyBNeSBzZXR1cDo8YnI+DQomZ3Q7 ICZndDsgJmd0OyDigKY8YnI+DQomZ3Q7ICZndDsgJmd0OyAmbHQ7TG9jYXRpb25NYXRjaCBeL292 aXJ0LWVuZ2luZS9zc28vKGludGVyYWN0aXZlLWxvZ2luLTxicj4NCiZndDsgJmd0OyAmZ3Q7IG5l Z290aWF0ZXxvYXV0aC90b2tlbi08YnI+DQomZ3Q7ICZndDsgJmd0OyBodHRwLWF1dGgpfF4vb3Zp cnQtZW5naW5lL2NhbGxiYWNrJmd0Ozxicj4NCiZndDsgJmd0OyAmZ3Q7ICZsdDtJZiAmcXVvdDty ZXEoJ0F1dGhvcml6YXRpb24nKSAhfiAvXihCZWFyZXJ8QmFzaWMpL2kmcXVvdDsmZ3Q7PGJyPg0K Jmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgUmVxdWlyZSB2YWxpZC11c2VyPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgQXV0aFR5cGUgb3BlbmlkLWNvbm5lY3Q8YnI+DQomZ3Q7ICZndDsg Jmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyBFcnJvckRvY3VtZW50IDQwMSAmcXVvdDsmbHQ7aHRt bCZndDsmbHQ7bWV0YSBodHRwLWVxdWl2PSdyZWZyZXNoJyBjb250ZW50PScwOzxicj4NCiZndDsg Jmd0OyAmZ3Q7IHVybD0vb3ZpcnQtZW5naW5lL3Nzby9sb2dpbi11bmF1dGhvcml6ZWQnLyZndDsm bHQ7Ym9keSZndDsmbHQ7YSBocmVmPScvb3ZpcnQtPGJyPg0KJmd0OyAmZ3Q7ICZndDsgZW5naW5l L3Nzby9sb2dpbi11bmF1dGhvcml6ZWQnJmd0O0hlcmUmbHQ7L2EmZ3Q7Jmx0Oy9ib2R5Jmd0OyZs dDsvaHRtbCZndDsmcXVvdDs8YnI+DQomZ3Q7ICZndDsgJmd0OyAmbHQ7L0lmJmd0Ozxicj4NCiZn dDsgJmd0OyAmZ3Q7ICZsdDsvTG9jYXRpb25NYXRjaCZndDs8YnI+DQomZ3Q7ICZndDsgJmd0OyDi gKY8YnI+DQomZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyBJIHJlbWVtYmVyIEkg aGFkIHN5bnRheCBlcnJvcnMsIGJ1dCBtaW5lIHdhcyBjaGFuZ2VkLjxicj4NCiZndDsgJmd0OyAm Z3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IERvZXMgdGhpcyBsb29rIGZpbmUgdG8geW91Pzxicj4N CiZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7IFllYWgsIHlvdXIgdmVy c2lvbiBsb29rcyBnb29kIHRvby4gWW91IGhhdmUgJyBpbnN0ZWFkIG9mICZxdW90OyBzbyB0aGF0 IGlzIG9rLiA8YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyBB bnRvbiBMb3V3PGJyPg0KJmd0OyAmZ3Q7IENsb3VkIEVuZ2luZWVyOiBTdG9yYWdlIGFuZCBWaXJ0 dWFsaXphdGlvbiBhdCBWb3g8YnI+DQomZ3Q7ICZndDsgVDogMDg3IDgwNSAwMDAwIHwgRDogMDg3 IDgwNSAxNTcyPGJyPg0KJmd0OyAmZ3Q7IE06IE4vQTxicj4NCiZndDsgJmd0OyBFOiA8YSBocmVm PSJtYWlsdG86YW50b24ubG91d0B2b3h0ZWxlY29tLmNvLnphIj5hbnRvbi5sb3V3QHZveHRlbGVj b20uY28uemE8L2E+PGJyPg0KJmd0OyAmZ3Q7IEE6IFJ1dGhlcmZvcmQgRXN0YXRlLCAxIFNjb3R0 IFN0cmVldCwgV2F2ZXJsZXksIEpvaGFubmVzYnVyZzxicj4NCiZndDsgJmd0OyA8YSBocmVmPSJo dHRwOi8vd3d3LnZveC5jby56YSI+DQp3d3cudm94LmNvLnphPC9hPjxicj4NCiZndDsgJmd0OyA8 YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyA8YnI+DQomZ3Q7 ICZndDsgPGJyPg0KJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgPGJy Pg0KJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgPGJyPg0KJmd0OyAm Z3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IFRoYW5rczxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4N CiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7 IEFudG9uIExvdXc8YnI+DQomZ3Q7ICZndDsgJmd0OyBDbG91ZCBFbmdpbmVlcjogU3RvcmFnZSBh bmQgVmlydHVhbGl6YXRpb24gYXQgVm94PGJyPg0KJmd0OyAmZ3Q7ICZndDsgVDogMDg3IDgwNSAw MDAwIHwgRDogMDg3IDgwNSAxNTcyPGJyPg0KJmd0OyAmZ3Q7ICZndDsgTTogTi9BPGJyPg0KJmd0 OyAmZ3Q7ICZndDsgRTogPGEgaHJlZj0ibWFpbHRvOmFudG9uLmxvdXdAdm94dGVsZWNvbS5jby56 YSI+YW50b24ubG91d0B2b3h0ZWxlY29tLmNvLnphPC9hPjxicj4NCiZndDsgJmd0OyAmZ3Q7IEE6 IFJ1dGhlcmZvcmQgRXN0YXRlLCAxIFNjb3R0IFN0cmVldCwgV2F2ZXJsZXksIEpvaGFubmVzYnVy Zzxicj4NCiZndDsgJmd0OyAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly93d3cudm94LmNvLnphIj4NCnd3 dy52b3guY28uemE8L2E+PGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsg PGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7 ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0 OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZn dDsgRnJvbTogQW50b24gTG91dyA8YnI+DQomZ3Q7ICZndDsgJmd0OyBTZW50OiAyMiBBcHJpbCAy MDIwIDEwOjA3PGJyPg0KJmd0OyAmZ3Q7ICZndDsgVG86IEFydHVyIFNvY2hhICZsdDs8YSBocmVm PSJtYWlsdG86YXNvY2hhQHJlZGhhdC5jb20iPmFzb2NoYUByZWRoYXQuY29tPC9hPiZndDs8YnI+ DQomZ3Q7ICZndDsgJmd0OyBTdWJqZWN0OiBSRTogW292aXJ0LXVzZXJzXSBvVmlydCBhbmQgS2V5 Q2xvYWsgaW50ZXJncmF0aW9uPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZn dDsgSGkgQXJ0dXIsPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgR3Jl YXQsIEkgd2lsbCB0cnkgdGhlIGJlbG93IGFuZCBsZXQgeW91IGtub3cuIEkgYXBwcmVjaWF0ZSB5 b3VyIGVmZm9ydHMuPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgU3Vy ZSwgeW91IG1heSByZXBvcnQgaXQsIEkgd2FzIGluIHN1Y2ggYSBydXNoIHRoYXQgSSBvbmx5IGhp dCDigJxyZXBseeKAnSBhbmQ8YnI+DQomZ3Q7ICZndDsgJmd0OyBub3Qg4oCcUmVwbHkgQWxs4oCd PGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgSSBkbyByZWNhbGwgdGhh dCBJIGhhZCB0byBtYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgYmVsb3cgYXMgdGhlIGl0PGJyPg0K Jmd0OyAmZ3Q7ICZndDsgY29tcGxhaW5lZCBhYm91dCBzeW50YXggZXJyb3JzOjxicj4NCiZndDsg Jmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IEVycm9yRG9jdW1lbnQgNDAxICZxdW90OyZs dDtodG1sJmd0OyZsdDttZXRhIGh0dHAtZXF1aXY9XCZxdW90O3JlZnJlc2hcJnF1b3Q7PGJyPg0K Jmd0OyAmZ3Q7ICZndDsgY29udGVudD1cJnF1b3Q7MDsgdXJsPS9vdmlydC1lbmdpbmUvc3NvL2xv Z2luLXVuYXV0aG9yaXplZFwmcXVvdDsvJmd0OyZsdDtib2R5Jmd0OyZsdDthPGJyPg0KJmd0OyAm Z3Q7ICZndDsgaHJlZj1cJnF1b3Q7L292aXJ0LWVuZ2luZS9zc28vbG9naW4tdW5hdXRob3JpemVk XCZxdW90OyZndDtIZXJlJmx0Oy9hJmd0OyZsdDsvYm9keSZndDsmbHQ7L2h0bWwmZ3Q7JnF1b3Q7 PGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmx0Oy9JZiZndDs8YnI+DQomZ3Q7ICZndDsgJmd0OyAmbHQ7 L0xvY2F0aW9uTWF0Y2gmZ3Q7PGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZn dDsgSSB3aWxsIGxldCB5b3Uga25vdyB0aGUgb3V0Y29tZSB3aGVuIEkgY2hhbmdlIHRoZSBiZWxv dyBhcyB5b3Ugc3VnZ2VzdGVkLjxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAm Z3Q7IENoZWVyczxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IEZyb206 IEFydHVyIFNvY2hhICZsdDs8YSBocmVmPSJtYWlsdG86YXNvY2hhQHJlZGhhdC5jb20iPmFzb2No YUByZWRoYXQuY29tPC9hPiZndDsNCjxicj4NCiZndDsgJmd0OyAmZ3Q7IFNlbnQ6IDIyIEFwcmls IDIwMjAgMDk6NTE8YnI+DQomZ3Q7ICZndDsgJmd0OyBUbzogQW50b24gTG91dyAmbHQ7PGEgaHJl Zj0ibWFpbHRvOkFudG9uLkxvdXdAdm94dGVsZWNvbS5jby56YSI+QW50b24uTG91d0B2b3h0ZWxl Y29tLmNvLnphPC9hPiZndDs8YnI+DQomZ3Q7ICZndDsgJmd0OyBTdWJqZWN0OiBSZTogW292aXJ0 LXVzZXJzXSBvVmlydCBhbmQgS2V5Q2xvYWsgaW50ZXJncmF0aW9uPGJyPg0KJmd0OyAmZ3Q7ICZn dDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgSSBjaGVja2VkIHlvdXIgbG9ncyBhbmQgSSBkaWQgbm90 IG5vdGljZSBhbnl0aGluZyBzdXNwaWNpb3VzLiA8YnI+DQomZ3Q7ICZndDsgJmd0OyBIb3dldmVy LCBub3cgSSByZWNhbGwgSSBtYWRlIHNvbWUgY2hhbmdlcyBjb21wYXJlZCB0byBibG9nIHBvc3Q8 YnI+DQomZ3Q7ICZndDsgJmd0OyBleGFtcGxlOjxicj4NCiZndDsgJmd0OyAmZ3Q7IDxicj4NCiZn dDsgJmd0OyAmZ3Q7IDEpIC9ldGMvb3ZpcnQtZW5naW5lL2V4dGVuc2lvbnMuZC9vcGVuaWQtaHR0 cC1tYXBwaW5nLnByb3BlcnRpZXMgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgSSBhZGRlZCBlc2NhcGlu ZyBpbiByZWdleHAgZm9yICdcJzxicj4NCiZndDsgJmd0OyAmZ3Q7IC4uLjxicj4NCiZndDsgJmd0 OyAmZ3Q7IGNvbmZpZy5tYXBBdXRoUmVjb3JkLnJlZ2V4LnBhdHRlcm4gPTxicj4NCiZndDsgJmd0 OyAmZ3Q7IF4oPyZsdDt1c2VyJmd0Oy4qPykoKDxhIGhyZWY9ImZpbGU6Ly8oJTNmJTNjYXQlM2VA KSglM2YlM2NzdWZmaXglM2UuKiUzZilALiopfCglM2YlM2NyZWFsbSUzZUAuKikpJCI+XFxcXCg/ Jmx0O2F0Jmd0O0ApKD8mbHQ7c3VmZml4Jmd0Oy4qPylALiopfCg/Jmx0O3JlYWxtJmd0O0AuKikp JDwvYT48YnI+DQomZ3Q7ICZndDsgJmd0OyAuLi48YnI+DQomZ3Q7ICZndDsgJmd0OyA8YnI+DQom Z3Q7ICZndDsgJmd0OyAyKSAvZXRjL2h0dHBkL292aXJ0LW9wZW5pZGMuY29uZjxicj4NCiZndDsg Jmd0OyAmZ3Q7IEVzY2FwaW5nIGZvciAnJnF1b3Q7JyBpbiBlcnJvciBkb2N1bWVudCBzbmlwcGV0 PGJyPg0KJmd0OyAmZ3Q7ICZndDsgLi4uPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmx0O0xvY2F0aW9u TWF0Y2ggXi9vdmlydC1lbmdpbmUvc3NvLyhpbnRlcmFjdGl2ZS1sb2dpbi08YnI+DQomZ3Q7ICZn dDsgJmd0OyBuZWdvdGlhdGV8b2F1dGgvdG9rZW4taHR0cC1hdXRoKXxeL292aXJ0LWVuZ2luZS9j YWxsYmFjayZndDs8YnI+DQomZ3Q7ICZndDsgJmd0OyAmbHQ7SWYgJnF1b3Q7cmVxKCdBdXRob3Jp emF0aW9uJykgIX4gL14oQmVhcmVyfEJhc2ljKS9pJnF1b3Q7Jmd0Ozxicj4NCiZndDsgJmd0OyAm Z3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7IFJlcXVpcmUgdmFsaWQtdXNlcjxicj4NCiZndDsgJmd0 OyAmZ3Q7IEF1dGhUeXBlIG9wZW5pZC1jb25uZWN0PGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0K Jmd0OyAmZ3Q7ICZndDsgRXJyb3JEb2N1bWVudCA0MDEgJnF1b3Q7Jmx0O2h0bWwmZ3Q7Jmx0O21l dGEgaHR0cC1lcXVpdj1cJnF1b3Q7cmVmcmVzaFwmcXVvdDs8YnI+DQomZ3Q7ICZndDsgJmd0OyBj b250ZW50PVwmcXVvdDswOyB1cmw9L292aXJ0LWVuZ2luZS9zc28vbG9naW4tdW5hdXRob3JpemVk XCZxdW90Oy8mZ3Q7Jmx0O2JvZHkmZ3Q7Jmx0O2E8YnI+DQomZ3Q7ICZndDsgJmd0OyBocmVmPVwm cXVvdDsvb3ZpcnQtZW5naW5lL3Nzby9sb2dpbi11bmF1dGhvcml6ZWRcJnF1b3Q7Jmd0O0hlcmUm bHQ7L2EmZ3Q7Jmx0Oy9ib2R5Jmd0OyZsdDsvaHRtbCZndDsmcXVvdDs8YnI+DQomZ3Q7ICZndDsg Jmd0OyAmbHQ7L0lmJmd0Ozxicj4NCiZndDsgJmd0OyAmZ3Q7ICZsdDsvTG9jYXRpb25NYXRjaCZn dDs8YnI+DQomZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAuLi48YnI+DQomZ3Q7 ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyBUaGVzZSB0d28gaXNzdWVzIHdlcmUgbW9z dCBwcm9iYWJseSBjYXVzZWQgYnkgdGhlIGJsb2cgc2l0ZSByZW5kZXJpbmcuPGJyPg0KJmd0OyAm Z3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgWW91IG1p Z2h0IHdhbnQgdG8gY2hlY2sgZW5naW5lLmxvZyAob3Igc2VydmVyLmxvZyBub3QgcmVhbGx5IHN1 cmUgd2hpY2g8YnI+DQomZ3Q7ICZndDsgJmd0OyBvbmUgd2FzIHRoYXQpIGZvciBhYWEgZXh0ZW5z aW9uIGluaXRpYWxpemF0aW9uIGxvZ3MuIFRoZXkgc2hvdWxkIDxicj4NCiZndDsgJmd0OyAmZ3Q7 IGFwcGVhciBhdCB0aGUgYmVnaW5uaW5nIGp1c3QgYWZ0ZXIgcmVzdGFydGluZyBlbmdpbmUuPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgVW5mb3J0dW5hdGVseSwgYXQg dGhlIG1vbWVudCBJIGRvIG5vdCBoYXZlIHJ1bm5pbmcga2V5Y2xvYWsgc2V0dXAgKEk8YnI+DQom Z3Q7ICZndDsgJmd0OyB1c2VkIHRvIGhhdmUgYSBsb2NhbCBWTSkgYnV0IEkgd2lsbCB0cnkgdG8g ZmluZCBzb21lIHRpbWUgdG8gc2V0IGl0IHVwPGJyPg0KJmd0OyAmZ3Q7ICZndDsgYWdhaW4gb25j ZSBJJ20gZG9uZSB3aXRoIGFub3RoZXIgd29yayBpdGVtIHRoYXQgYWN0dWFsbHkgY29uc3VtZXM8 YnI+DQomZ3Q7ICZndDsgJmd0OyBhbG1vc3QgZW50aXJlIGRpc2sgc3BhY2UgZm9yIG15IDIgbWFj aGluZXMpPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgUGxlYXNlIGxl dCBtZSBrbm93IGlmIGFueXRoaW5nIGNoYW5nZXMgYWZ0ZXIgYXBwbHlpbmcgdGhlc2UgY29uZmln PGJyPg0KJmd0OyAmZ3Q7ICZndDsgY2hhbmdlcy4gSXQgdGhpcyB3b3JrcyBmb3IgeW91IHRoZW4g SSB3aWxsIHJlcXVlc3QgdGhlIGJsb2cgcG9zdCB0byBiZTxicj4NCiZndDsgJmd0OyAmZ3Q7IHVw ZGF0ZWQuPGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgRG8geW91IG1p bmQgaWYgSSBrZWVwKHJlLXBvc3QpIHRoaXMgZGlzY3Vzc2lvbiBiYWNrIHRvIHVzZXJzQG92aXJ0 IGluPGJyPg0KJmd0OyAmZ3Q7ICZndDsgY2FzZSBvdGhlciBtaWdodCBoYXZlIHNpbWlsYXIgaXNz dWVzIHdpdGgga2V5Y2xvYWsgaW50ZWdyYXRpb24/PGJyPg0KJmd0OyAmZ3Q7ICZndDsgPGJyPg0K Jmd0OyAmZ3Q7ICZndDsgQS48YnI+DQomZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0 OyBPbiBXZWQsIDIwMjAtMDQtMjIgYXQgMDY6MzUgJiM0MzswMDAwLCBBbnRvbiBMb3V3IHdyb3Rl Ojxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBIaSBB cnRydSw8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsg VGhhbmsgeW91IGZvciB0aGUgcmVwbHkuIFRoZSBwb3N0IFsxXSBpcyBhY3R1YWxseSB0aGUgbWFp biBzb3VyY2Ugb2Y8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IGluZm9ybWF0aW9uIEkgd29ya2Vk IGZyb20gaW4gb3JkZXIgdG9wIGdldCBldmVyeXRoaW5nIGNvbmZpZ3VyZWQuIEluPGJyPg0KJmd0 OyAmZ3Q7ICZndDsgJmd0OyB0aGUgcG9zdFsxXSBJIHJhbiB0aHJvdWdoIHRoZSB3aG9sZSB0ZXN0 aW5nIHNlY3Rpb24sIGFuZCBldmVyeXRoaW5nPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyB3b3Jr cyBhcyBleHBlY3RlZC4gSSBjYW4gc2VlIHRoZSBWTXMgZXRjIHdoZW4gdXNpbmcgdGhlIHB5dGhv bjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgc2NyaXB0Ljxicj4NCiZndDsgJmd0OyAmZ3Q7ICZn dDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBJbiBteSBjYXNlIHdlIGFyZSBub3QgdXNpbmcg bGRhcCBhcyBhIHByb3ZpZGVyLCBJIHRyaWVkIHVzaW5nPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0 OyBrZXljbG9hayBkaXJlY3RseSBhcyBhIHByb3ZpZGVyLCBJIGFtIG5vdCBzdXJlIGlmIHRoYXQg aXMgd2hlcmUgSSBhbTxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgZ29pbmcgd3Jvbmc/PGJyPg0K Jmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IEkgaGF2ZSBhdHRh Y2hlZCB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBhcGFjaGUgc3NsX2FjY2Vzc19sb2cgd2hlbiBJPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyB0cmllZCBsb2dnaW5nIGluIHRoaXMgbW9ybmluZy4gSSBo YXZlIGFsc28gYXR0YWNoZWQgdGhlIGVuZ2luZSBsb2cuPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0 OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IFRoYW5rczxicj4NCiZndDsgJmd0OyAmZ3Q7ICZn dDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IEFu dG9uIExvdXc8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IENsb3VkIEVuZ2luZWVyOiBTdG9yYWdl IGFuZCBWaXJ0dWFsaXphdGlvbiBhdCBWb3g8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IFQ6IDA4 NyA4MDUgMDAwMCB8IEQ6IDA4NyA4MDUgMTU3Mjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgTTog Ti9BPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBFOiA8YSBocmVmPSJtYWlsdG86YW50b24ubG91 d0B2b3h0ZWxlY29tLmNvLnphIj5hbnRvbi5sb3V3QHZveHRlbGVjb20uY28uemE8L2E+PGJyPg0K Jmd0OyAmZ3Q7ICZndDsgJmd0OyBBOiBSdXRoZXJmb3JkIEVzdGF0ZSwgMSBTY290dCBTdHJlZXQs IFdhdmVybGV5LCBKb2hhbm5lc2J1cmc8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxhIGhyZWY9 Imh0dHA6Ly93d3cudm94LmNvLnphIj4NCnd3dy52b3guY28uemE8L2E+PGJyPg0KJmd0OyAmZ3Q7 ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7 ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7 IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+ DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0 OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0 OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBGcm9tOiBBcnRydSBTb2NoYSAm bHQ7PGEgaHJlZj0ibWFpbHRvOmFzb2NoYUByZWRoYXQuY29tIj5hc29jaGFAcmVkaGF0LmNvbTwv YT4mZ3Q7DQo8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IFNlbnQ6IDIxIEFwcmlsIDIwMjAgMTU6 MjA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IFRvOiBBbnRvbiBMb3V3ICZsdDs8YSBocmVmPSJt YWlsdG86QW50b24uTG91d0B2b3h0ZWxlY29tLmNvLnphIj5BbnRvbi5Mb3V3QHZveHRlbGVjb20u Y28uemE8L2E+Jmd0OzsNCjxhIGhyZWY9Im1haWx0bzp1c2Vyc0BvdmlydC5vcmciPnVzZXJzQG92 aXJ0Lm9yZzwvYT48YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IFN1YmplY3Q6IFJlOiBbb3ZpcnQt dXNlcnNdIG9WaXJ0IGFuZCBLZXlDbG9hayBpbnRlcmdyYXRpb248YnI+DQomZ3Q7ICZndDsgJmd0 OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgT24gVHVlLCAyMDIwLTA0LTIxIGF0IDEy OjQ4ICYjNDM7MDAwMCwgQW50b24gTG91dyB3cm90ZTo8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7 ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IEhpIEV2ZXJ5Ym9keSw8YnI+DQom Z3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxi cj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgSGkgQW50b24sPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0 OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgSGFzIGFueWJvZHkgZ29uZSB0aGUgcm91 dGUgb2YgdXNpbmcgS2V5Q2xvYWsgdG8gbG9naW4gdG8gb1ZpcnQ/PGJyPg0KJmd0OyAmZ3Q7ICZn dDsgJmd0OyAmZ3Q7IEtleUNsb2FrIGhhcyBiZWVuIGNvbmZpZ3VyZWQgYW5kIHRoZSBuZWNjZXNh cnkgY29uZmlncyBoYXZlIGFsc288YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IGJlZW48YnI+DQom Z3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgZG9uZSBvbiB0aGUgZW5naW5lLiBJdCByZWRpcmVjdHMg cGVyZmVjdGx5IGZyb20gdGhlIG9WaXJ0IFdlYiBMb2dpbjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZn dDsgJmd0OyBwYWdlIHRvIEtleUNsb2FrLCBidXQgYWZ0ZXIgbG9nZ2luZyBpbnRvIEtleUNsb2Fr LCBJIGdldCByZWRpcmVjdGVkPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IGJhY2sgdG8g dGhlIG9WaXJ0IFdlYiBMb2dpbi4gV2hlbiB0cnlpbmcgdG8gbG9naW4gYWdhaW4sIEkgZ2V0IHRo ZTxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBiZWxvdyBlcnJvcjo8YnI+DQomZ3Q7ICZn dDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZn dDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgc2Vy dmVyX2Vycm9yOiBNaXNzaW5nIHBhcmFtZXRlcjogJ3BhcmFtcyc8YnI+DQomZ3Q7ICZndDsgJmd0 OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0 OyAmZ3Q7IE5vdCBzbyBsb25nIGFnbyBJIG1hbmFnZWQgdG8gc2V0dXAgb3ZpcnQgZW5naW5lIHdp dGgga2V5bG9hY2sgKHVzaW5nPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBsZGFwIGFzIHVzZXJz IHByb3ZpZGVyKS4gSG9wZWZ1bGx5LCBJIHdvdWxkIGJlIGFibGUgdG8gaGVscCB5b3Ugd2l0aDxi cj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgaXQuIDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBUaGVyZSBpcyBleGNlbGxlbnQgYmxvZyBwb3N0WzFdIGF2 YWlsYWJsZS4gWW91IG1pZ2h0IGFsc28gY2hlY2s8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IGtl eWNsb2FrJiM0MztsZGFwIHBvc3QgWzJdLCBob3dldmVyLCB3aGVuIEkgd2FzIHdvcmtpbmcgb24g dGhlPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBpbnRlZ3JhdGlvbjxicj4NCiZndDsgJmd0OyAm Z3Q7ICZndDsgSSB3YXMgbm90IGF3YXJlIG9mIGlmIGFuZCBkaWQgbm90IHRlc3QgaXQuPGJyPg0K Jmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IFRoZSBlcnJvciB5 b3UgbWVudGlvbmVkIGRvZXMgbm90IHJlYWxseSBpbmRpY2F0ZSB3aGF0IGV4YWN0bHkgaXM8YnI+ DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IHdyb25nPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBidXQg aXQgbWlnaHQgc3VnZ2VzdCB0aGF0IHRoZXJlIGlzIHNvbWUgc29ydCBvZiBtaXNjb25maWd1cmF0 aW9uIHdpdGg8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IGFwYWNoZSAoeW91IG5lZWQgdG8gaW5z dGFsbCBhbmQgY29uZmlndXJlIG1vZF9hdXRoX29wZW5pZGMgYXM8YnI+DQomZ3Q7ICZndDsgJmd0 OyAmZ3Q7IGRlc2NyaWJlZDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgYXQgWzFdKS4gQXQgbGVh c3QgdGhhdCBoYXBwZW5lZCBpbiBteSBjYXNlLjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBJbiBjYXNlIHlvdSBoYXZlIGFscmVhZHkgZ29uZSB0aHJv dWdoIGl0IHlvdSBjb3VsZCBwcm9iYWJseSBjaGVjazxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsg YXBhY2hlIGxvZ3MuPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0 OyAmZ3Q7IFVuZGVyIFsxXSB0aGVyZSBpcyBhIHB5dGhvbiBzY3JpcHQgdGhhdCBjYW4gYmUgdXNl ZCB0byBjaGVjayBhcGk8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IGNhbGxzLDxicj4NCiZndDsg Jmd0OyAmZ3Q7ICZndDsgcGxlYXNlIHVwZGF0ZSB1c2VybmFtZS9wYXNzd29yZCBhbmQgdGVzdCBp dCBhZ2FpbnN0IHlvdXIgZW52aXJvbm1lbnQuPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+ DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgV291bGQgaXQg YmUgcG9zc2libGUgcG9zdCByZWxldmFudCBwaWVjZSBvZiBhcGFjaGUgbG9ncyB0b2dldGhlciB3 aXRoPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBlbmdpbmUubG9nID88YnI+DQomZ3Q7ICZndDsg Jmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsg Jmd0OyBbMV0gPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyA8 YSBocmVmPSJodHRwczovL2Jsb2dzLm92aXJ0Lm9yZy8yMDE5LzAxL2ZlZGVyYXRlLW92aXJ0LWVu Z2luZS1hdXRoZW50aWNhdGlvbi10by1vcGVuaWQtY29ubmVjdC1pbmZyYXN0cnVjdHVyZSI+DQpo dHRwczovL2Jsb2dzLm92aXJ0Lm9yZy8yMDE5LzAxL2ZlZGVyYXRlLW92aXJ0LWVuZ2luZS1hdXRo ZW50aWNhdGlvbi10by1vcGVuaWQtY29ubmVjdC1pbmZyYXN0cnVjdHVyZS88L2E+PGJyPg0KJmd0 OyAmZ3Q7ICZndDsgJmd0OyBbMl0gPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7 ICZndDsgJmd0OyA8YSBocmVmPSJodHRwczovL2Jsb2dzLm92aXJ0Lm9yZy8yMDE4LzA4L292aXJ0 LXNhbWwtd2l0aC1rZXlsb2FrLXVzaW5nLTM4OWRzLXVzZXItZmVkZXJhdGlvbiI+DQpodHRwczov L2Jsb2dzLm92aXJ0Lm9yZy8yMDE4LzA4L292aXJ0LXNhbWwtd2l0aC1rZXlsb2FrLXVzaW5nLTM4 OWRzLXVzZXItZmVkZXJhdGlvbi88L2E+PGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBBcnR1cjxi cj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQom Z3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBJIGhhdmUg Y2hlY2tlZCBhbGwgdGhlIGxvZ3MsIGJ1dCBub3RoaW5nIGlzIHRlbGxpbmcgbWUgd2hhdCBleGFj dGx5PGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IHRoZSBpc3N1ZSBpcy4gPGJyPg0KJmd0 OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBJZiBh bnlib2R5IGhhcyBhbnkgaWRlYSwgcGxlYXNlIGxldCBtZSBrbm93Ljxicj4NCiZndDsgJmd0OyAm Z3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgVGhhbmtzPGJyPg0K Jmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBB bnRvbiBMb3V3PGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IENsb3VkIEVuZ2luZWVyOiBT dG9yYWdlIGFuZCBWaXJ0dWFsaXphdGlvbiBhdCBWb3g8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7 ICZndDsgVDogMDg3IDgwNSAwMDAwIHwgRDogMDg3IDgwNSAxNTcyPGJyPg0KJmd0OyAmZ3Q7ICZn dDsgJmd0OyAmZ3Q7IE06IE4vQTxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBFOiA8YSBo cmVmPSJtYWlsdG86YW50b24ubG91d0B2b3h0ZWxlY29tLmNvLnphIj5hbnRvbi5sb3V3QHZveHRl bGVjb20uY28uemE8L2E+PGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IEE6IFJ1dGhlcmZv cmQgRXN0YXRlLCAxIFNjb3R0IFN0cmVldCwgV2F2ZXJsZXksIEpvaGFubmVzYnVyZzxicj4NCiZn dDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YSBocmVmPSJodHRwOi8vd3d3LnZveC5jby56YSI+DQp3 d3cudm94LmNvLnphPC9hPjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7 ICZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4N CiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsg PGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsg Jmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsg Jmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsg Jmd0OyAmZ3Q7ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsg Jmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgRGlzY2xh aW1lcjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBUaGUgY29udGVudHMgb2YgdGhpcyBl bWFpbCBhcmUgY29uZmlkZW50aWFsIHRvIHRoZSBzZW5kZXIgYW5kIHRoZTxicj4NCiZndDsgJmd0 OyAmZ3Q7ICZndDsgJmd0OyBpbnRlbmRlZCByZWNpcGllbnQuIFVubGVzcyB0aGUgY29udGVudHMg YXJlIGNsZWFybHkgYW5kIGVudGlyZWx5IG9mPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBhPGJy Pg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IHBlcnNvbmFsIG5hdHVyZSwgdGhleSBhcmUgc3Vi amVjdCB0byBjb3B5cmlnaHQgaW4gZmF2b3VyIG9mIHRoZTxicj4NCiZndDsgJmd0OyAmZ3Q7ICZn dDsgJmd0OyBob2xkaW5nIGNvbXBhbnkgb2YgdGhlIFZveCBncm91cCBvZiBjb21wYW5pZXMuIEFu eSByZWNpcGllbnQgd2hvPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IHJlY2VpdmVzIHRo aXMgZW1haWwgaW4gZXJyb3Igc2hvdWxkIGltbWVkaWF0ZWx5IHJlcG9ydCB0aGUgZXJyb3IgdG88 YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZndDsgdGhlIHNlbmRlciBhbmQgcGVybWFuZW50bHkg ZGVsZXRlIHRoaXMgZW1haWwgZnJvbSBhbGwgc3RvcmFnZTxicj4NCiZndDsgJmd0OyAmZ3Q7ICZn dDsgJmd0OyBkZXZpY2VzLjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+DQomZ3Q7 ICZndDsgJmd0OyAmZ3Q7ICZndDsgVGhpcyBlbWFpbCBoYXMgYmVlbiBzY2FubmVkIGZvciB2aXJ1 c2VzIGFuZCBtYWx3YXJlLCBhbmQgbWF5IGhhdmU8YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7ICZn dDsgYmVlbiBhdXRvbWF0aWNhbGx5IGFyY2hpdmVkIGJ5IE1pbWVjYXN0IEx0ZCwgYW4gaW5ub3Zh dG9yIGluPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyBTb2Z0d2FyZTxicj4NCiZndDsgJmd0OyAm Z3Q7ICZndDsgJmd0OyBhcyBhIFNlcnZpY2UgKFNhYVMpIGZvciBidXNpbmVzcy4gUHJvdmlkaW5n IGEgc2FmZXIgYW5kIG1vcmUgdXNlZnVsPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IHBs YWNlIGZvciB5b3VyIGh1bWFuIGdlbmVyYXRlZCBkYXRhLiBTcGVjaWFsaXppbmcgaW47IFNlY3Vy aXR5LDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBhcmNoaXZpbmcgYW5kIGNvbXBsaWFu Y2UuIFRvIGZpbmQgb3V0IG1vcmUgQ2xpY2sgSGVyZS48YnI+DQomZ3Q7ICZndDsgJmd0OyAmZ3Q7 ICZndDsgPGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0OyAmZ3Q7IDxicj4NCiZndDsgJmd0OyAmZ3Q7 ICZndDsgJmd0OyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xzxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBVc2VycyBtYWlsaW5nIGxpc3QgLS0gPGEg aHJlZj0ibWFpbHRvOnVzZXJzQG92aXJ0Lm9yZyI+dXNlcnNAb3ZpcnQub3JnPC9hPjxicj4NCiZn dDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIDxh IGhyZWY9Im1haWx0bzp1c2Vycy1sZWF2ZUBvdmlydC5vcmciPg0KdXNlcnMtbGVhdmVAb3ZpcnQu b3JnPC9hPjxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyBQcml2YWN5IFN0YXRlbWVudDog PGEgaHJlZj0iaHR0cHM6Ly93d3cub3ZpcnQub3JnL3ByaXZhY3ktcG9saWN5Lmh0bWwiPg0KaHR0 cHM6Ly93d3cub3ZpcnQub3JnL3ByaXZhY3ktcG9saWN5Lmh0bWw8L2E+PGJyPg0KJmd0OyAmZ3Q7 ICZndDsgJmd0OyAmZ3Q7IG9WaXJ0IENvZGUgb2YgQ29uZHVjdDogPGJyPg0KJmd0OyAmZ3Q7ICZn dDsgJmd0OyAmZ3Q7IDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm92aXJ0Lm9yZy9jb21tdW5pdHkvYWJv dXQvY29tbXVuaXR5LWd1aWRlbGluZXMiPg0KaHR0cHM6Ly93d3cub3ZpcnQub3JnL2NvbW11bml0 eS9hYm91dC9jb21tdW5pdHktZ3VpZGVsaW5lcy88L2E+PGJyPg0KJmd0OyAmZ3Q7ICZndDsgJmd0 OyAmZ3Q7IExpc3QgQXJjaGl2ZXM6IDxicj4NCiZndDsgJmd0OyAmZ3Q7ICZndDsgJmd0OyA8YnI+ DQomZ3Q7ICZndDsgJmd0OyA8YSBocmVmPSJodHRwczovL2xpc3RzLm92aXJ0Lm9yZy9hcmNoaXZl cy9saXN0L3VzZXJzQG92aXJ0Lm9yZy9tZXNzYWdlL1M0STJJM01JRDRBNEFZWFZPTFdLVTU1NTYz REZLRUZRIj4NCmh0dHBzOi8vbGlzdHMub3ZpcnQub3JnL2FyY2hpdmVzL2xpc3QvdXNlcnNAb3Zp cnQub3JnL21lc3NhZ2UvUzRJMkkzTUlENEE0QVlYVk9MV0tVNTU1NjNERktFRlEvPC9hPjxicj4N CiZndDsgJmd0OyAmZ3Q7IDxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQoNCg0KDQoNCjxicj4NCiAg ICANCg0KPC9ib2R5PjwvaHRtbD4NCg== --===============1779278649260196952== Content-Type: image/png MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="120042214282001173.png" iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFu Y2VJRD0ieG1wLmlpZDpDMkU2NDhCRjRCOTAxMUU4QUI1REQ3QUNGM0I1MEJFMCIgeG1wTU06RG9j dW1lbnRJRD0ieG1wLmRpZDpDMkU2NDhDMDRCOTAxMUU4QUI1REQ3QUNGM0I1MEJFMCI+IDx4bXBN TTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkMyRTY0OEJENEI5MDExRThB QjVERDdBQ0YzQjUwQkUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyRTY0OEJFNEI5MDEx RThBQjVERDdBQ0YzQjUwQkUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4 bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+tUKiZgAAAqZQTFRF////k9Iok9IpkdEkkNEikdEl j9AgkdEjkdIljdAdxOaJ1u6tktImktInjtAfkNEhjM8a/P75w+aH9/zvktEn9fvr/v783vG9ktEl 1++w9fvs1O2osN5h/v/9/P740eyj1O2qweaE5/XPktEmi84Yq9xZj9Egj9Afi88Yk9In9vvu6fbT yOiRy+qYwOSB7ffbweWDyumVjc8coNdAodhEkNEjxeeM2O+xmdU13/K/zeqar95gkNAjw+aGldIq /f78lNMrjdAel9Qx2u+zzOmY2/C3jM4axeaLqdxVy+qXzeqc0Ougx+eQp9pQsN1hzuud8Pjgp9pR oNdCwOWBpdlNpdpNvON7jdAc5vTLrNxZ5PTJkNAi7PfZ5fTL9/zwj9AiktEk6/fY5vXN8vnm7/je sd5ju+N59PrqmtU1ndY9rNxb9vvsjM8YotlImtU2i88ayuqXyemUkNIjndc9z+ufrN1Zq9xWq9xX uuJ0m9Y27vjeptpO2/C2zuqd2/G5tOBov+WAkdIjnNU5qNlRst9m0u2mt+Fw5vXOqNtSv+SCic4W kdImm9U4lNIq4vPF7/jgmNQzwuaG9PrplNMqxueMtuBv0OuhteFuj9Aej9EfjM8cqdtV9vvv0Ouj 9/vu9/vvmdQzueFykdIk9vvtktIo6vbWoNhD6/bX1e2rlNIo1+6vx+eOz+qe7vjdvuR8v+R9odhD uOFxtuFwuOJyzOqapttP8/rnxOeKu+J27ffa4fPEzOqbjM8b8fnjoNdBzOqZweaD1e2q2vC01u6u 0eyk6/fX2e+zxeeO+PzxuuN0oNhBjc8bi84X+/328fnl0+ynnNY7rdxczeqby+mYotdEst9kmNQy zuqerd1dlNIrmtY3ltMu6ffV0+2p6vbV+fzzqNpPi88ZrduO9AAAAaJJREFUeNpiYIAAqSRuXZfD SloMSEBr2uxejkUSPHaRR+LggokX2fmZOZgYGZWZE67GQAWXGrM55N3MYOFhZWbULNq3Fiwo+oCP efKa40KcLIxLGBkZ2UqFgYKyXDOYVuaY7Sy8u1FI0YmVkfG0oRgDQz8rLyNTuOou9zpzaQULZkZG 9gXnGBi81JgYmeJzzx84ZM69CiTKOFOSQVCGHcjoupameqxefjenCiMTk+lJhsVXOIAOkvGs1V1x fa7V9qxGEUaRZoZ0Yx5Gx/KjlncYxJKBdmdvncUoEsIgtYGD0Ujv3jL5+Sk79spWMWw+w8gbyCDo x84kYMDAxS1Usknx0nTxBg1Gm4UMDJfVmAQmMhhsqfDR2V/W4hysoakuycCgz8or0MkQVmDNtZ4r 1TZi3UPm2wEMDGJ6fHvaGMRjzcRbpZUM9aeqGOnYA63dFpp/y3XOCTk5wbP3hWsmuPkKg4NHu5JT oqc4yMTkVGaTBOeF5dCgbPdg4+NniWZh4Vdnu6END3ZR/2pG025g8HZ4z0OOo0l9B6esVogShfAA AgwAEztrLLygDIAAAAAASUVORK5CYIINCg== --===============1779278649260196952== Content-Type: image/png MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="120042214282001373.png" iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFu Y2VJRD0ieG1wLmlpZDpFOUE2RUUwMjRCOTExMUU4QUI1REQ3QUNGM0I1MEJFMCIgeG1wTU06RG9j dW1lbnRJRD0ieG1wLmRpZDpFOUE2RUUwMzRCOTExMUU4QUI1REQ3QUNGM0I1MEJFMCI+IDx4bXBN TTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU5QTZFRTAwNEI5MTExRThB QjVERDdBQ0YzQjUwQkUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU5QTZFRTAxNEI5MTEx RThBQjVERDdBQ0YzQjUwQkUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4 bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YueZbgAAAXFQTFRFkdEk////kdElk9Io1u6tktIn kdEj9fvrktElj9AgjtAfkdIl5vXN9/zv9vvuktIm6fbT5vXO2e+zj9Af5/XPk9In1+6v/P75kNAh j9EgkNEi/v785fTL1e6skNEhoNdA1+6w9PrpzeqclNIp0OugjtAgmNQzlNIqqNtSrNxZjs8fqdtV nNY74vPFyumVrd1d6/fYm9Y2ltQukNEjjdAdwOSBkNAi1e2q3PC5otdE9fvsp9pQ0eykj9Ael9Mx qNpPpdhLrdxc7/jgsN5h7/ngz+ugptpO5PTK1O2qsN1hxueMzOmYx+eOzuud2O+x1e2r6vbWldIq 6/bX9/zwldMs8fnkldIty+qY/f78t+Jv9vvs0eyjqdxVrN1Zy+mYtuBtpdpN7/jf/v/99/vuktEm 0Ouh7PfZ1u6uktEkpNlLkdIkst9kkNIjothG7vjdlNIrxOaJ8/rn5PTJkdImyOiRoNdB7ffbj9Ah i88aodhD5/XQkMkTcwAAASZJREFUeNpMkQWTwjAQhd+mpS1Q9LDDOXd349zd3d3dfv0lDQfsZHby vuxs8jYgGX2mujV3FXBLBSu7L+qrnbeGZ6V2YC1PW0a0JMDEur67zNHllF0JQga7/3i0qJ51oCi6 Dlycnj4P2oopSppioFFm4x0T8nJV4KENUFkpL10iRegqSvCcVBEe0wyAgGBoAuOMxOEOdnudEFSh gEkMFh1GJuWxqP8X8O1J+gD9R9b6TSDeI+kNwjPauewQn6J1SY9Ah+INXJSr6Sdrg4gK+mS2KFSS DijN0+YJKNbpcDCEpItF4e19m8/h5fi7zSgYrut3WTPztnYYyj+0N6zm5uvbt1dGNY60yFezN/8X +sKk0v7GoNRUnBV+iCjT2D07P/2qS/UnwAD6GSCHFS9xbQAAAABJRU5ErkJggg0K --===============1779278649260196952== Content-Type: image/png MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="120042214282001573.png" iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFu Y2VJRD0ieG1wLmlpZDpDMkU2NDhCQjRCOTAxMUU4QUI1REQ3QUNGM0I1MEJFMCIgeG1wTU06RG9j dW1lbnRJRD0ieG1wLmRpZDpDMkU2NDhCQzRCOTAxMUU4QUI1REQ3QUNGM0I1MEJFMCI+IDx4bXBN TTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkMyRTY0OEI5NEI5MDExRThB QjVERDdBQ0YzQjUwQkUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyRTY0OEJBNEI5MDEx RThBQjVERDdBQ0YzQjUwQkUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4 bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+RF0UugAAAexQTFRF////k9Iok9IpkdEjkdEkkNEi ktEmktImktIn7/jfkNEjlNIpkdElj9Ehjs8ejNAbkNAik9In///+j9Ahj9AgkNEkmtU1jtAf7fjb kNEhjtAej9EijM8ais8XpNlK8vnljM8Z8/rnjM8bs99nktElvON48Pnh+/33+/32yumV0eykkNAh j9Eg6/fX1++x5vTOweaE5fTMy+mXuuJ1q9xYs+BpvON79fvso9lJxueMxueO5/bQ+PzwxOeMm9U4 nNU5zOqah80RzuudlNMq8frkltMu0uym4/PGjtAdptlNrNxZl9Qx+v30r95ejtEgkdIkntY+p9pQ q9xWwuWEoNhCqttV9/zw7/jeyOmRm9U2t+Jw8vrkntY8jM4ZweSBxOeK/v782fC0ptlM4vPGqdtV mtQ2pdpM9fvqueJx9Pvq5vTNptpNndc8/v/94vLFzeub9vvsqNtT/v/+i88amNQx6fbU1+6v0Oyi u+J4othFktEooNhDvuR91u6tqdpTwOSBntc9+fzy2fC1xOaJjc8dpNlJsN5f9vvuo9lGic4Tq9xX n9dAktIonNU7wuaF1O2pl9Mv8fnj+Pzy4vPEmtU35PPJ9Prp9frrueFwjdAcis4W0uyjveN7o9lI kdAiuOFyrt5eqNpSteFsr91enGjXPAAAAXlJREFUeNpiYAABIYl+1ZS00JqyaAYEmBjfwMzMxs7G zBOgWQAT1JVjZmGEABYBEzWIoHyOMFSMkYmRUdsiHSTYWCfCDeICxbhEGLkZW0zVgaJGfEyMKjog QSnGkpn8goxSWgwM03tFGdlTK5WYmcS9siQiokIEpOXCGBK1ORjFu1x8ZR2dw4E6MxfycbBOZTBg ZmTktVfzcStU1gCK6omyMEk6MWQAReeJTWZg0DDPBYradjIxMc9hWCDIyCgpZi0EdbuyDDeTcAXD DC5Gxh7+tkkQQU5XHiZGVjOGYKAok46dPkRUNZaJkYk3n6FJmIORsUopxh0kOFuch5GRgzWPQVFM hdE/Mi4ZGHCKzSy8QN/wzm1nYLDyY2JjCupz0DTuluEB+VyhFqjLJluAiZ1/lkKxrAcoOJj4FquD 7Z3ACgwUdg5wEDGJVMtDLDZsZWWHha90oAQs2DnrvVlY2ATZuESnWE5DRFFCafmipA7P+VqcRWA+ QIABACL8OjXFH8tXAAAAAElFTkSuQmCCDQo= --===============1779278649260196952== Content-Type: image/png MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="120042214282001773.png" iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAMAAAB1/u6nAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFu Y2VJRD0ieG1wLmlpZDpDMkU2NDhCNzRCOTAxMUU4QUI1REQ3QUNGM0I1MEJFMCIgeG1wTU06RG9j dW1lbnRJRD0ieG1wLmRpZDpDMkU2NDhCODRCOTAxMUU4QUI1REQ3QUNGM0I1MEJFMCI+IDx4bXBN TTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZBNkNBOTEyNEI4RTExRThB QjVERDdBQ0YzQjUwQkUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyRTY0OEI2NEI5MDEx RThBQjVERDdBQ0YzQjUwQkUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4 bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+8OACfQAAAgRQTFRF////k9Iok9IpktInk9InkdEk ktImkdEjjtAej9AfktEmlNIpkdElkNEikNEjj9Ag/v/9jdAd5fTKktEl3/G//v/+9/zwkNAh2e+0 ldMtj9EhqdtTyOiSy+mWrt1e9fvs0OyiqNpRs99m1+6wmNQy3/K/kNAikdIljtAf0uyljtAg/f78 t+Fx+/33l9Qwx+eOp9pQ8/ro0+2nwuaHh80Po9lJ+vz18fnjr91fptpOltQu1+6vk9Mq8PjgjtEf 5PTJldIsodhE6PbRk9Mp7/jfn9dAxeeL9ProotlGj9Ah1e6s5fTLrd1bltMv3fG8n9c//v785/XP m9U48vrl+v315/XQ6/fXw+aIktEn3PC5lNIq4vPFm9Y5/P76mdQ0jtAdmtQ1yemS7PfZxeeNzeqc tuFu0OuhqNtTkNEgk9Em0eyi9vvspNlJpdlM0+ymoNdBt+FvhcwMjM8Z0u2mi88ZotlHmNUyq9tX 7/jg4fPEy+mX3PC47fjbsd5ildIryOiTteBqlNIsoddFpdlNkdImktIl8/rnkdEmzOqaktEk4fLD mtU2tuBs4PLB9/zv2e+y+fzzweSEyuiW+Pzw/P75ndY7qNpS6vbVqNtRic4Ss99l4vLFxOaL4vPG hcwOpdpNjc8cj9EgothHktIk+Pzy7Pfb3fG9qdtU7PfaxeeMptpNfskA8TsRSQAAAYZJREFUeNpi YAADsdn6tbmWSrL2ExgQQEBVjoWdh4uNlZVllhBcdIp+Ji8zIxgws5Z1aENERWX4hZmYGKGgk1MT ImzNwczEKgUTZmKTigaJGsaxMwlHSLLDxBnVTPuAwmmCjMxsyjXSHEyMEKNYOL0YGJZIizOxOXcF W8wsEtcq4QdJcOroMiy1aWFk5FNMlZw6Qy8oXYUfKMzuUcEg0soClM+ynZ8iNneFWeCihUBX1nkz iLAChTkiGaYVM8gnhjEoazAzMvMIMYiog4QlBAwUGGRW6zA4MbUzMjcKMSQxccGEk+c1MIQy8TCx OrowiK3iBQpXMygaMdQXFjBM5+ZhzOgJYWCQ1QBaqdnWXOU+0UTJcBlQmN8I6B1zPVZGlm5/h4R8 FS4r1xiga5vkQb7Ps2Nh8hTkUlvAF6UuyMnIzOsHDqoA43g2Jm5gIAF9ws3NpjVJFBKEunMWszNC QpaZ3XdlLCwetPuXs/JyMbMI8zHL9YoiRVu2anh5aY6PW+VkCB8gwABFyUDmauRf9QAAAABJRU5E rkJggg0K --===============1779278649260196952== Content-Type: image/png MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="120042214282001973.png" iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFu Y2VJRD0ieG1wLmlpZDpGQTZDQTkxMDRCOEUxMUU4QUI1REQ3QUNGM0I1MEJFMCIgeG1wTU06RG9j dW1lbnRJRD0ieG1wLmRpZDpGQTZDQTkxMTRCOEUxMUU4QUI1REQ3QUNGM0I1MEJFMCI+IDx4bXBN TTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZBNkNBOTBFNEI4RTExRThB QjVERDdBQ0YzQjUwQkUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkZBNkNBOTBGNEI4RTEx RThBQjVERDdBQ0YzQjUwQkUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4 bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+sTRsSwAAAdRQTFRFk9Io////k9IpkdEkktEmk9In kNEjktInj9AfkNEkj9Ag7PfZkdEj/v78oNhCkNAijdAcjM8ZjtAd/f77nNU5kNAjqttVkNEhktEl kdEl/f78pdpLsd9lkdIm9fvrj9AekdIjkdEm5fTKl9Mxjs8evON4/v/+9vvui88ZteBsr91ej9Ai 6/fX5vTN1+2uqNpT+v31v+R/rt1d5vXP7vjcrN1aptlNkNEi9Prp5fTM9fvsrd1aweWDothGgssG +Pzy2O+w/f76xeaNodhDw+aIz+ugic4TkNAhxeeL+fzzx+iP6PXSv+SA1+6wmdQ07fjb3PG71O6q 2vC24/PHmdU1o9lHzuqd8vnlzeqcpNhMyOiSnNQ5lNIppdlNvOR6otlFktIlm9U35fTLsd5mu+J2 jM8brt1e8Pnh1u2s8vrn7vjehMwM8vnkl9UwktIm2u+1jM8atuFtpNlI5vTMy+qY5/XPr91fi88b i88amdU02/C3pdlJkdIl+/33j9Ef3PC5kdEivuR9ptpN9vvt7fjc///+oNdBsd9kqNtRyemW4/TH qtxWjc8bpNlJqttU5PTKuuJzndY8ktEkptlLtuBtyOiRn9dA1+6uqttW+v32wOSBkNEljptg5wAA AVVJREFUeNo8kdVyAzEMRbXrpTA1ScOclJmZmZmZmZmZmfuzXXsn9YPn6owsyVdA4RNM+xxL7P5K rp8kIQX4mitr4DiG8XAW9VpOmGbblJGADw3Ina6QqKJXQxiLEAuseeUUU2e/nOShKEFuEYXwtk+B qsdPMh1Qt7PYLqeB1hdRMN2GCL3LE+uljPcBcLvVcCgQOORvpao+fB5RLjhW4VhD46rmJW/xScEe 1lDZBSYGtz8YbQoFH5ufOYxlAXglVFeCh/+O4HAub4cHTAGVRp+p3k00j4PfAAwYSV2h4sZwNSv9 JrYDWlxEMi8jholNInnkhc55Mi+jXD+P2SJUdl8IqmstoSjVuhFFvq6dEn0IDWIfWP72cpi8EuxJ 2LPabSOO9Dok9mVd6izJ3/gLmeSvWOgoVxHexcyPzy3jxY6ZETXO/w1R1rjyZVt+xlNCo7S3PwEG ADUqM7OG4aOZAAAAAElFTkSuQmCCDQo= --===============1779278649260196952==--