From vfeenstr at redhat.com Fri Jul 1 10:37:25 2016 Content-Type: multipart/mixed; boundary="===============3063557962913374373==" MIME-Version: 1.0 From: Vinzenz Feenstra To: users at ovirt.org Subject: Re: [ovirt-users] Communicating with ovirt agent Date: Fri, 01 Jul 2016 16:37:22 +0200 Message-ID: In-Reply-To: 52675B8315A1475A98668728C0F72271@MOHCTP --===============3063557962913374373== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --Apple-Mail=3D_F29BC291-4CB2-4CD5-8856-BD4ABEB46229 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=3Dutf-8 > On Jul 1, 2016, at 4:24 PM, Tadas wrote: >=3D20 > Thank you for reply! > Im trying to send JSON-formated shutdown command to windows guest vm =3D now. Here=3DE2=3D80=3D99s small script I=3DE2=3D80=3D99ve written to test t= hat: > http://pastebin.com/usAYc7Ww > =3D20 > But still I get no reaction from ovirt agent. Surely I=3DE2=3D80=3D99m = =3D missing something. Yes the newline character send a =3DE2=3D80=3D98\n=3DE2=3D80=3D99 at the en= d and the =3D name key must be surrounded by two underscores like in the replies =3D __name__ not name > =3D20 > =3D20 > From: Vinzenz Feenstra > Sent: Friday, July 01, 2016 2:53 PM > To: tadas(a)ring.lt > Cc: users(a)ovirt.org > Subject: Re: [ovirt-users] Communicating with ovirt agent > =3D20 > =3D20 >> On Jul 1, 2016, at 12:05 PM, Tadas > =3D3Drote: >> =3D20 >>=3D20 >> is there any documentation o oVirt guest agent =3D3Dommands? >> To be more precise: i need to pass commands to =3D3DVirt guest agent =3D from >> hypervisor. >> Reading =3D3Dnfo works fine: >>=3D20 >> socat =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20- >> win7_32bit/com.redhat.serial.0 - >>=3D20 >> {"applications": ["Python 2.7.12rc1", "SPICE Guest Tools", =3D3DTotal >> Commander (Remove or Repair)", "Python 2.7 =3D3Dywin32-216", "Microsoft >> .NET Framework 4.6.1", "Git =3D3Dersion 2.9.0", "WinRAR 5.40 beta 2 =3D (32- >> bit)", =3D3DNotepad++"], "__name__": "applications"} >> {"__name__": =3D3Dhost-name", "name": "WIN7_32BIT"} >> {"__name__": =3D3Dos-version", "version": "Win 7=3DE2=3D80=3D9D} > =3D20 > Every =3D3Dommand has to be send as a whole JSON object and sent as line = =3D =3D3Derminated by a \n character > =3D20 > The =3D3Dommands available are currently not documented however. > =3D20 > {=3DE2=3D80=3D9C__name__=3DE2=3D80=3D9D: =3DE2=3D80=3D9Cname=3DE2=3D80=3D= 9D,=3D3D=3DE2=3D80=3DA6 args} > =3D20 > - name: =3D3Dhutdown > parameters: > - =3D3Dimeout: optional integer (seconds) > =3D3D/span>- reboot:=3D20 > optional boolean > - =3D3Dessage: string > =3D20 > - =3D3Dame: refresh > parameters: > - =3D3DpiVersion: optiona integer > =3D3Dnbsp; this defines what information can be =3D3Dxchanged > =3D20 > - =3D3Dame: hibernate: > parameters: > - state: =3D3Disk or mem (default is disk if not specified) > =3D20 > if you need more you can look here: =3D https://github.com/oVirt/ovirt-guest-agent/blob/master/ovirt-gu=3D3Dst-agen= t=3D /OVirtAgentLogic.py#L306 <> at the parseCommand =3D3Dunction > or just ask here :-) >=3D20 >=3D20 >=3D20 > I'm unable to find how to send command (lets =3D3Day "shutdown") to =3D agent?. > echo "shutdown" | socat =3D =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20- > win7_32bit/com.redhat.kvm-vdi.0 - > Does=3D3Dnot seem to work > Thank you for your help. > _______________________________________________ > Users mailing list > Users(a)ovirt.org <> > http://lists.ovirt.org/mailman/listinfo/users >=3D20 > =3D3D > _______________________________________________ > Users mailing list > Users(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/users --Apple-Mail=3D_F29BC291-4CB2-4CD5-8856-BD4ABEB46229 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=3Dutf-8
On Jul 1, 2016, at 4:24 PM, Tadas <tadas(a)ring.lt> =3D wrote:

Thank you for reply!
Im trying to send JSON-formated shutdown command to =3D windows guest vm now.=3D20 Here=3DE2=3D80=3D99s small script I=3DE2=3D80=3D99ve written to test that:<= /div>
 
But still I get no reaction from ovirt agent. Surely =3D I=3DE2=3D80=3D99m missing=3D20 something.

Yes the newline character send a =3DE2=3D80=3D98\n= =3DE2=3D80=3D99=3D at the end and the name key must be surrounded by two underscores like =3D in the replies __name__ not name

 
 
From: <= a =3D title=3D3D"vfeenstr(a)redhat.com" href=3D3D"mailto:vfeenstr(a)redhat.com" = =3D class=3D3D"">Vinzenz Feenstra
Sent: Friday, July 01, 2016 2:53 =3D PM
Cc: users(a)ovirt.org
Subject: Re: [ovirt-users] =3D Communicating with ovirt=3D20 agent
 
 
On Jul 1, 2016, at 12:05 PM,= =3D Tadas <tadas(a)ring.lt> =3D3Drote:
 

is there an= y =3D documentation o oVirt guest agent=3D20 =3D3Dommands?
To be more precise: i need to pass commands= =3D to =3D3DVirt guest agent=3D20 from
hypervisor.
Reading =3D3Dnfo works = =3D fine:

socat=3D20 =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20-
win7_32bit/com.redhat.serial.0 -

{"applications":=3D20 ["Python 2.7.12rc1", "SPICE Guest Tools", =3D3DTotal
Commander (Remove or=3D20 Repair)", "Python 2.7 =3D3Dywin32-216", "Microsoft
.NET = =3D Framework 4.6.1", "Git=3D20 =3D3Dersion 2.9.0", "WinRAR 5.40 beta 2 (32-
bit)", =3D =3D3DNotepad++"], "__name__":=3D20 "applications"}
{"__name__": =3D3Dhost-name", "name":=3D20 "WIN7_32BIT"}
{"__name__": =3D3Dos-version", "version": = =3D "Win 7=3DE2=3D80=3D9D}
 
Every =3D3Dommand has to be send as a whole JSON object = =3D and sent as line=3D20 =3D3Derminated by a \n character
 
The =3D3Dommands available are currently not documented = =3D however.
 
{=3DE2=3D80=3D9C__name__=3DE2=3D80=3D9D: =3DE2=3D80=3D9Cn= ame=3DE2=3D80=3D9D,=3D3D=3DE2=3D =3D80=3DA6 args}
 
- name: =3D3Dhutdown
  parameters:
- =3D3Dimeout:=3D20 optional integer (seconds)
=3D3D/span>- reboot:=3D20 optional boolean
- =3D3Dessage:=3D20 string
 
- =3D3Dame: refresh
  parameters:
-=3D20 =3D3DpiVersion: optiona integer
        =3D =3D3Dnbsp;   this defines=3D20 what information can be =3D3Dxchanged
 
- =3D3Dame: hibernate:
  parameters:
- state:=3D20 =3D3Disk or mem (default is disk if not specified)
 
if you need more you can look here:  https://github.com/oVirt/ovirt-guest-agent/blob/master/ovirt-g= u=3D =3D3Dst-agent/OVirtAgentLogic.py#L306=3D20 at the parseCommand =3D3Dunction
or just ask here :-)



I'm =3D unable to find how to send command (lets =3D3Day=3D20 "shutdown") to agent?.
echo "shutdown" | socat=3D20 =3D3Dvar/lib/libvirt/qemu/channel/target/domain-20-
win7_32bit/com.redhat.kvm-vdi.0  -
Does=3D3Dnot seem to=3D20 work
Thank you for your help.
_______________________________________________
Users=3D20 mailing list
Users(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/users

=3D3D
_______________________________________________
Users =3D mailing list
Users(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/users

=3D --Apple-Mail=3D_F29BC291-4CB2-4CD5-8856-BD4ABEB46229-- --===============3063557962913374373== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" Ci0tQXBwbGUtTWFpbD1fRjI5QkMyOTEtNENCMi00Q0Q1LTg4NTYtQkQ0QUJFQjQ2MjI5CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOwoJY2hhcnNldD11dGYtOAoKCj4gT24gSnVsIDEsIDIwMTYsIGF0IDQ6MjQgUE0sIFRh ZGFzIDx0YWRhc0ByaW5nLmx0PiB3cm90ZToKPj0yMAo+IFRoYW5rIHlvdSBmb3IgcmVwbHkhCj4g SW0gdHJ5aW5nIHRvIHNlbmQgSlNPTi1mb3JtYXRlZCBzaHV0ZG93biBjb21tYW5kIHRvIHdpbmRv d3MgZ3Vlc3Qgdm0gPQpub3cuIEhlcmU9RTI9ODA9OTlzIHNtYWxsIHNjcmlwdCBJPUUyPTgwPTk5 dmUgd3JpdHRlbiB0byB0ZXN0IHRoYXQ6Cj4gaHR0cDovL3Bhc3RlYmluLmNvbS91c0FZYzdXdyA8 aHR0cDovL3Bhc3RlYmluLmNvbS91c0FZYzdXdz4KPiA9MjAKPiBCdXQgc3RpbGwgSSBnZXQgbm8g cmVhY3Rpb24gZnJvbSBvdmlydCBhZ2VudC4gU3VyZWx5IEk9RTI9ODA9OTltID0KbWlzc2luZyBz b21ldGhpbmcuCgpZZXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyIHNlbmQgYSA9RTI9ODA9OThcbj1F Mj04MD05OSBhdCB0aGUgZW5kIGFuZCB0aGUgPQpuYW1lIGtleSBtdXN0IGJlIHN1cnJvdW5kZWQg YnkgdHdvIHVuZGVyc2NvcmVzIGxpa2UgaW4gdGhlIHJlcGxpZXMgPQpfX25hbWVfXyBub3QgbmFt ZQoKPiA9MjAKPiA9MjAKPiBGcm9tOiBWaW56ZW56IEZlZW5zdHJhIDxtYWlsdG86dmZlZW5zdHJA cmVkaGF0LmNvbT4KPiBTZW50OiBGcmlkYXksIEp1bHkgMDEsIDIwMTYgMjo1MyBQTQo+IFRvOiB0 YWRhc0ByaW5nLmx0IDxtYWlsdG86dGFkYXNAcmluZy5sdD4KPiBDYzogdXNlcnNAb3ZpcnQub3Jn IDxtYWlsdG86dXNlcnNAb3ZpcnQub3JnPgo+IFN1YmplY3Q6IFJlOiBbb3ZpcnQtdXNlcnNdIENv bW11bmljYXRpbmcgd2l0aCBvdmlydCBhZ2VudAo+ID0yMAo+ID0yMAo+PiBPbiBKdWwgMSwgMjAx NiwgYXQgMTI6MDUgUE0sIFRhZGFzIDx0YWRhc0ByaW5nLmx0IDw+PiA9M0Ryb3RlOgo+PiA9MjAK Pj49MjAKPj4gaXMgdGhlcmUgYW55IGRvY3VtZW50YXRpb24gbyBvVmlydCBndWVzdCBhZ2VudCA9 M0RvbW1hbmRzPwo+PiBUbyBiZSBtb3JlIHByZWNpc2U6IGkgbmVlZCB0byBwYXNzIGNvbW1hbmRz IHRvID0zRFZpcnQgZ3Vlc3QgYWdlbnQgPQpmcm9tCj4+IGh5cGVydmlzb3IuCj4+IFJlYWRpbmcg PTNEbmZvIHdvcmtzIGZpbmU6Cj4+PTIwCj4+IHNvY2F0ID0zRHZhci9saWIvbGlidmlydC9xZW11 L2NoYW5uZWwvdGFyZ2V0L2RvbWFpbi0yMC0KPj4gd2luN18zMmJpdC9jb20ucmVkaGF0LnNlcmlh bC4wIC0KPj49MjAKPj4geyJhcHBsaWNhdGlvbnMiOiBbIlB5dGhvbiAyLjcuMTJyYzEiLCAiU1BJ Q0UgR3Vlc3QgVG9vbHMiLCA9M0RUb3RhbAo+PiBDb21tYW5kZXIgKFJlbW92ZSBvciBSZXBhaXIp IiwgIlB5dGhvbiAyLjcgPTNEeXdpbjMyLTIxNiIsICJNaWNyb3NvZnQKPj4gLk5FVCBGcmFtZXdv cmsgNC42LjEiLCAiR2l0ID0zRGVyc2lvbiAyLjkuMCIsICJXaW5SQVIgNS40MCBiZXRhIDIgPQoo MzItCj4+IGJpdCkiLCA9M0ROb3RlcGFkKysiXSwgIl9fbmFtZV9fIjogImFwcGxpY2F0aW9ucyJ9 Cj4+IHsiX19uYW1lX18iOiA9M0Rob3N0LW5hbWUiLCAibmFtZSI6ICJXSU43XzMyQklUIn0KPj4g eyJfX25hbWVfXyI6ID0zRG9zLXZlcnNpb24iLCAidmVyc2lvbiI6ICJXaW4gNz1FMj04MD05RH0K PiA9MjAKPiBFdmVyeSA9M0RvbW1hbmQgaGFzIHRvIGJlIHNlbmQgYXMgYSB3aG9sZSBKU09OIG9i amVjdCBhbmQgc2VudCBhcyBsaW5lID0KPTNEZXJtaW5hdGVkIGJ5IGEgXG4gY2hhcmFjdGVyCj4g PTIwCj4gVGhlID0zRG9tbWFuZHMgYXZhaWxhYmxlIGFyZSBjdXJyZW50bHkgbm90IGRvY3VtZW50 ZWQgaG93ZXZlci4KPiA9MjAKPiB7PUUyPTgwPTlDX19uYW1lX189RTI9ODA9OUQ6ID1FMj04MD05 Q25hbWU9RTI9ODA9OUQsPTNEPUUyPTgwPUE2IGFyZ3N9Cj4gPTIwCj4gLSBuYW1lOiA9M0RodXRk b3duCj4gICBwYXJhbWV0ZXJzOgo+IC0gPTNEaW1lb3V0OiBvcHRpb25hbCBpbnRlZ2VyIChzZWNv bmRzKQo+ID0zRC9zcGFuPi0gcmVib290Oj0yMAo+IG9wdGlvbmFsIGJvb2xlYW4KPiAtID0zRGVz c2FnZTogc3RyaW5nCj4gPTIwCj4gLSA9M0RhbWU6IHJlZnJlc2gKPiAgIHBhcmFtZXRlcnM6Cj4g LSA9M0RwaVZlcnNpb246IG9wdGlvbmEgaW50ZWdlcgo+ICAgICAgICAgPTNEbmJzcDsgICB0aGlz IGRlZmluZXMgd2hhdCBpbmZvcm1hdGlvbiBjYW4gYmUgPTNEeGNoYW5nZWQKPiA9MjAKPiAtID0z RGFtZTogaGliZXJuYXRlOgo+ICAgcGFyYW1ldGVyczoKPiAtIHN0YXRlOiA9M0Rpc2sgb3IgbWVt IChkZWZhdWx0IGlzIGRpc2sgaWYgbm90IHNwZWNpZmllZCkKPiA9MjAKPiBpZiB5b3UgbmVlZCBt b3JlIHlvdSBjYW4gbG9vayBoZXJlOiAgPQpodHRwczovL2dpdGh1Yi5jb20vb1ZpcnQvb3ZpcnQt Z3Vlc3QtYWdlbnQvYmxvYi9tYXN0ZXIvb3ZpcnQtZ3U9M0RzdC1hZ2VudD0KL09WaXJ0QWdlbnRM b2dpYy5weSNMMzA2IDw+IGF0IHRoZSBwYXJzZUNvbW1hbmQgPTNEdW5jdGlvbgo+IG9yIGp1c3Qg YXNrIGhlcmUgOi0pCj49MjAKPj0yMAo+PTIwCj4gSSdtIHVuYWJsZSB0byBmaW5kIGhvdyB0byBz ZW5kIGNvbW1hbmQgKGxldHMgPTNEYXkgInNodXRkb3duIikgdG8gPQphZ2VudD8uCj4gZWNobyAi c2h1dGRvd24iIHwgc29jYXQgPQo9M0R2YXIvbGliL2xpYnZpcnQvcWVtdS9jaGFubmVsL3Rhcmdl dC9kb21haW4tMjAtCj4gd2luN18zMmJpdC9jb20ucmVkaGF0Lmt2bS12ZGkuMCAgLQo+IERvZXM9 M0Rub3Qgc2VlbSB0byB3b3JrCj4gVGhhbmsgeW91IGZvciB5b3VyIGhlbHAuCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBVc2VycyBtYWlsaW5nIGxp c3QKPiBVc2Vyc0BvdmlydC5vcmcgPD4KPiBodHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW4v bGlzdGluZm8vdXNlcnMKPj0yMAo+ID0zRAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCj4gVXNlcnMgbWFpbGluZyBsaXN0Cj4gVXNlcnNAb3ZpcnQub3Jn Cj4gaHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3VzZXJzCgoKLS1BcHBs ZS1NYWlsPV9GMjlCQzI5MS00Q0IyLTRDRDUtODg1Ni1CRDRBQkVCNDYyMjkKQ29udGVudC1UcmFu c2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsK CWNoYXJzZXQ9dXRmLTgKCjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9M0QiQ29udGVudC1U eXBlIiBjb250ZW50PTNEInRleHQvaHRtbCA9CmNoYXJzZXQ9M0R1dGYtOCI+PC9oZWFkPjxib2R5 IHN0eWxlPTNEIndvcmQtd3JhcDogYnJlYWstd29yZDsgPQotd2Via2l0LW5ic3AtbW9kZTogc3Bh Y2U7IC13ZWJraXQtbGluZS1icmVhazogYWZ0ZXItd2hpdGUtc3BhY2U7IiA9CmNsYXNzPTNEIiI+ PGJyIGNsYXNzPTNEIiI+PGRpdj48YmxvY2txdW90ZSB0eXBlPTNEImNpdGUiIGNsYXNzPTNEIiI+ PGRpdiA9CmNsYXNzPTNEIiI+T24gSnVsIDEsIDIwMTYsIGF0IDQ6MjQgUE0sIFRhZGFzICZsdDs8 YSA9CmhyZWY9M0QibWFpbHRvOnRhZGFzQHJpbmcubHQiIGNsYXNzPTNEIiI+dGFkYXNAcmluZy5s dDwvYT4mZ3Q7ID0Kd3JvdGU6PC9kaXY+PGJyIGNsYXNzPTNEIkFwcGxlLWludGVyY2hhbmdlLW5l d2xpbmUiPjxkaXYgY2xhc3M9M0QiIj4KPG1ldGEgY29udGVudD0zRCJ0ZXh0L2h0bWwgPTNEaGFy c2V0PTNEdXRmLTgiIGh0dHAtZXF1aXY9M0QiQ29udGVudC1UeXBlIiA9CmNsYXNzPTNEIiI+Cjxk aXYgc3R5bGU9M0QiV09SRC1XUkFQOiBicmVhay13b3JkOyB3ZWJraXQtbmJzcC1tb2RlOiBzcGFj ZTsgPQotd2Via2l0LWxpbmUtYnJlYWs6IGFmdGVyLXdoaXRlLXNwYWNlIiBkaXI9M0QibHRyIiA9 M0QnbGFzcz0zRCIiICc9M0QiIiA9CmNsYXNzPTNEIiI+CjxkaXYgZGlyPTNEImx0ciIgY2xhc3M9 M0QiIj4KPGRpdiBzdHlsZT0zRCJmb250LXNpemU6IDEycHQ7IGZvbnQtZmFtaWx5OiBDYWxpYnJp OyIgY2xhc3M9M0QiIj4KPGRpdiBjbGFzcz0zRCIiPlRoYW5rIHlvdSBmb3IgcmVwbHkhPC9kaXY+ CjxkaXYgY2xhc3M9M0QiIj5JbSB0cnlpbmcgdG8gc2VuZCBKU09OLWZvcm1hdGVkIHNodXRkb3du IGNvbW1hbmQgdG8gPQp3aW5kb3dzIGd1ZXN0IHZtIG5vdy49MjAKSGVyZT1FMj04MD05OXMgc21h bGwgc2NyaXB0IEk9RTI9ODA9OTl2ZSB3cml0dGVuIHRvIHRlc3QgdGhhdDo8L2Rpdj4KPGRpdiBj bGFzcz0zRCIiPjxhIHRpdGxlPTNEImh0dHA6Ly9wYXN0ZWJpbi5jb20vdXNBWWM3V3ciID0KaHJl Zj0zRCJodHRwOi8vcGFzdGViaW4uY29tL3VzQVljN1d3IiA9CmNsYXNzPTNEIiI+aHR0cDovL3Bh c3RlYmluLmNvbS91c0FZYzdXdzwvYT48L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPiZuYnNwOzwvZGl2 Pgo8ZGl2IGNsYXNzPTNEIiI+QnV0IHN0aWxsIEkgZ2V0IG5vIHJlYWN0aW9uIGZyb20gb3ZpcnQg YWdlbnQuIFN1cmVseSA9Ckk9RTI9ODA9OTltIG1pc3Npbmc9MjAKc29tZXRoaW5nLjwvZGl2Pjwv ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PjxiciA9CmNsYXNzPTNEIiI+ PC9kaXY+PGRpdj5ZZXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyIHNlbmQgYSA9RTI9ODA9OThcbj1F Mj04MD05OT0KIGF0IHRoZSBlbmQgYW5kIHRoZSBuYW1lIGtleSBtdXN0IGJlIHN1cnJvdW5kZWQg YnkgdHdvIHVuZGVyc2NvcmVzIGxpa2UgPQppbiB0aGUgcmVwbGllcyBfX25hbWVfXyBub3QgbmFt ZTwvZGl2PjxiciBjbGFzcz0zRCIiPjxibG9ja3F1b3RlID0KdHlwZT0zRCJjaXRlIiBjbGFzcz0z RCIiPjxkaXYgY2xhc3M9M0QiIj48ZGl2IHN0eWxlPTNEIldPUkQtV1JBUDogPQpicmVhay13b3Jk OyB3ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5lLWJyZWFrOiA9CmFmdGVyLXdo aXRlLXNwYWNlIiBkaXI9M0QibHRyIiA9M0QnbGFzcz0zRCIiICc9M0QiIiBjbGFzcz0zRCIiPjxk aXYgPQpkaXI9M0QibHRyIiBjbGFzcz0zRCIiPjxkaXYgc3R5bGU9M0QiZm9udC1zaXplOiAxMnB0 OyBmb250LWZhbWlseTogPQpDYWxpYnJpOyIgY2xhc3M9M0QiIj4KPGRpdiBjbGFzcz0zRCIiPiZu YnNwOzwvZGl2Pgo8ZGl2IHN0eWxlPTNEImZvbnQtc2l6ZTogc21hbGw7IHRleHQtZGVjb3JhdGlv bjogbm9uZTsgZm9udC1mYW1pbHk6ID0KQ2FsaWJyaTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9u dC1zdHlsZTogbm9ybWFsOyBkaXNwbGF5OiBpbmxpbmU7IiA9CmNsYXNzPTNEIiI+CjxkaXYgc3R5 bGU9M0QiRk9OVDogMTBwdCB0YWhvbWEiIGNsYXNzPTNEIiI+CjxkaXYgY2xhc3M9M0QiIj4mbmJz cDs8L2Rpdj4KPGRpdiBzdHlsZT0zRCJCQUNLR1JPVU5EOiAjZjVmNWY1IiBjbGFzcz0zRCIiPgo8 ZGl2IHN0eWxlPTNEImZvbnQtY29sb3I6IGJsYWNrIiBjbGFzcz0zRCIiPjxiIGNsYXNzPTNEIiI+ RnJvbTo8L2I+IDxhID0KdGl0bGU9M0QidmZlZW5zdHJAcmVkaGF0LmNvbSIgaHJlZj0zRCJtYWls dG86dmZlZW5zdHJAcmVkaGF0LmNvbSIgPQpjbGFzcz0zRCIiPlZpbnplbnogRmVlbnN0cmE8L2E+ IDwvZGl2Pgo8ZGl2IGNsYXNzPTNEIiI+PGIgY2xhc3M9M0QiIj5TZW50OjwvYj4gRnJpZGF5LCBK dWx5IDAxLCAyMDE2IDI6NTMgPQpQTTwvZGl2Pgo8ZGl2IGNsYXNzPTNEIiI+PGIgY2xhc3M9M0Qi Ij5Ubzo8L2I+IDxhIHRpdGxlPTNEInRhZGFzQHJpbmcubHQiID0KaHJlZj0zRCJtYWlsdG86dGFk YXNAcmluZy5sdCIgY2xhc3M9M0QiIj50YWRhc0ByaW5nLmx0PC9hPiA8L2Rpdj4KPGRpdiBjbGFz cz0zRCIiPjxiIGNsYXNzPTNEIiI+Q2M6PC9iPiA8YSB0aXRsZT0zRCJ1c2Vyc0BvdmlydC5vcmci ID0KaHJlZj0zRCJtYWlsdG86dXNlcnNAb3ZpcnQub3JnIiBjbGFzcz0zRCIiPnVzZXJzQG92aXJ0 Lm9yZzwvYT4gPC9kaXY+CjxkaXYgY2xhc3M9M0QiIj48YiBjbGFzcz0zRCIiPlN1YmplY3Q6PC9i PiBSZTogW292aXJ0LXVzZXJzXSA9CkNvbW11bmljYXRpbmcgd2l0aCBvdmlydD0yMAphZ2VudDwv ZGl2PjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPTNEIiI+Jm5ic3A7PC9kaXY+PC9kaXY+CjxkaXYg c3R5bGU9M0QiZm9udC1zaXplOiBzbWFsbDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LWZh bWlseTogPQpDYWxpYnJpOyBmb250LXdlaWdodDogbm9ybWFsOyBmb250LXN0eWxlOiBub3JtYWw7 IGRpc3BsYXk6IGlubGluZTsiID0KY2xhc3M9M0QiIj4KPGRpdiBjbGFzcz0zRCIiPiZuYnNwOzwv ZGl2Pgo8ZGl2IGNsYXNzPTNEIiI+CjxibG9ja3F1b3RlIHR5cGU9M0QiY2l0ZSIgY2xhc3M9M0Qi Ij4KICA8ZGl2ID0zRCdsYXNzPTNEIiIgJz0zRCIiIGNsYXNzPTNEIiI+T24gSnVsIDEsIDIwMTYs IGF0IDEyOjA1IFBNLCA9ClRhZGFzICZsdDs8YSA9M0QncmVmPTNEIm1haWx0bzp0YWRhc0ByaW5n Lmx0IiAnPTNEIiIgPQpjbGFzcz0zRCIiPnRhZGFzQHJpbmcubHQ8L2E+Jmd0OyA9M0Ryb3RlOjwv ZGl2PgogIDxkaXYgY2xhc3M9M0QiIj4mbmJzcDs8L2Rpdj4KICA8ZGl2IGNsYXNzPTNEIiI+CiAg PGRpdiA9M0QnbGFzcz0zRCIiICc9M0QiIiBjbGFzcz0zRCIiPjxiciBjbGFzcz0zRCIiPmlzIHRo ZXJlIGFueSA9CmRvY3VtZW50YXRpb24gbyBvVmlydCBndWVzdCBhZ2VudD0yMAogID0zRG9tbWFu ZHM/PGJyIGNsYXNzPTNEIiI+VG8gYmUgbW9yZSBwcmVjaXNlOiBpIG5lZWQgdG8gcGFzcyBjb21t YW5kcyA9CnRvID0zRFZpcnQgZ3Vlc3QgYWdlbnQ9MjAKICBmcm9tPGJyIGNsYXNzPTNEIiI+aHlw ZXJ2aXNvci48YnIgY2xhc3M9M0QiIj5SZWFkaW5nID0zRG5mbyB3b3JrcyA9CmZpbmU6PGJyIGNs YXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+c29jYXQ9MjAKICA9M0R2YXIvbGliL2xpYnZpcnQvcWVt dS9jaGFubmVsL3RhcmdldC9kb21haW4tMjAtPGJyID0zRCdsYXNzPTNEIiIgPQonPTNEIiIgY2xh c3M9M0QiIj53aW43XzMyYml0L2NvbS5yZWRoYXQuc2VyaWFsLjAgLTxiciBjbGFzcz0zRCIiPjxi ciA9Cj0zRCdsYXNzPTNEIiIgJz0zRCIiIGNsYXNzPTNEIiI+eyJhcHBsaWNhdGlvbnMiOj0yMAog IFsiUHl0aG9uIDIuNy4xMnJjMSIsICJTUElDRSBHdWVzdCBUb29scyIsID0zRFRvdGFsPGJyID0K Y2xhc3M9M0QiIj5Db21tYW5kZXIgKFJlbW92ZSBvcj0yMAogIFJlcGFpcikiLCAiUHl0aG9uIDIu NyA9M0R5d2luMzItMjE2IiwgIk1pY3Jvc29mdDxiciBjbGFzcz0zRCIiPi5ORVQgPQpGcmFtZXdv cmsgNC42LjEiLCAiR2l0PTIwCiAgPTNEZXJzaW9uIDIuOS4wIiwgIldpblJBUiA1LjQwIGJldGEg MiAoMzItPGJyIGNsYXNzPTNEIiI+Yml0KSIsID0KPTNETm90ZXBhZCsrIl0sICJfX25hbWVfXyI6 PTIwCiAgImFwcGxpY2F0aW9ucyJ9PGJyIGNsYXNzPTNEIiI+eyJfX25hbWVfXyI6ID0zRGhvc3Qt bmFtZSIsICJuYW1lIjo9MjAKICAiV0lON18zMkJJVCJ9PGJyIGNsYXNzPTNEIiI+eyJfX25hbWVf XyI6ID0zRG9zLXZlcnNpb24iLCAidmVyc2lvbiI6ID0KIldpbiA3PUUyPTgwPTlEfTxiciA9M0Qn bGFzcz0zRCIiICc9M0QiIiA9CmNsYXNzPTNEIiI+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPgo8 ZGl2IGNsYXNzPTNEIiI+Jm5ic3A7PC9kaXY+CjxkaXYgY2xhc3M9M0QiIj5FdmVyeSA9M0RvbW1h bmQgaGFzIHRvIGJlIHNlbmQgYXMgYSB3aG9sZSBKU09OIG9iamVjdCA9CmFuZCBzZW50IGFzIGxp bmU9MjAKPTNEZXJtaW5hdGVkIGJ5IGEgXG4gY2hhcmFjdGVyPC9kaXY+CjxkaXYgY2xhc3M9M0Qi Ij4mbmJzcDs8L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPlRoZSA9M0RvbW1hbmRzIGF2YWlsYWJsZSBh cmUgY3VycmVudGx5IG5vdCBkb2N1bWVudGVkID0KaG93ZXZlci48L2Rpdj4KPGRpdiBjbGFzcz0z RCIiPiZuYnNwOzwvZGl2Pgo8ZGl2IGNsYXNzPTNEIiI+ez1FMj04MD05Q19fbmFtZV9fPUUyPTgw PTlEOiA9RTI9ODA9OUNuYW1lPUUyPTgwPTlELD0zRD1FMj0KPTgwPUE2IGFyZ3N9PC9kaXY+Cjxk aXYgY2xhc3M9M0QiIj4mbmJzcDs8L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPi0gbmFtZTogPTNEaHV0 ZG93bjwvZGl2Pgo8ZGl2IGNsYXNzPTNEIiI+Jm5ic3A7IHBhcmFtZXRlcnM6PC9kaXY+CjxkaXYg Y2xhc3M9M0QiIj48c3BhbiBzdHlsZT0zRCJXSElURS1TUEFDRTogcHJlIiA9M0QnbGFzcz0zRCJB cHBsZS10YWItc3BhPQpuIiAnPTNEIiIgY2xhc3M9M0QiIj48L3NwYW4+LSA9M0RpbWVvdXQ6PTIw Cm9wdGlvbmFsIGludGVnZXIgKHNlY29uZHMpPC9kaXY+CjxkaXYgY2xhc3M9M0QiIj48c3BhbiBz dHlsZT0zRCJXSElURS1TUEFDRTogcHJlIiA9M0QnbGFzcz0zRCJBcHBsZS10YWItc3BhPQpuIiAn PTNEIiIgY2xhc3M9M0QiIj49M0Qvc3BhbiZndDstIHJlYm9vdDo9MjAKb3B0aW9uYWwgYm9vbGVh bjwvc3Bhbj48L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPjxzcGFuIHN0eWxlPTNEIldISVRFLVNQQUNF OiBwcmUiID0zRCdsYXNzPTNEIkFwcGxlLXRhYi1zcGE9Cm4iICc9M0QiIiBjbGFzcz0zRCIiPjwv c3Bhbj4tID0zRGVzc2FnZTo9MjAKc3RyaW5nPC9kaXY+CjxkaXYgY2xhc3M9M0QiIj4mbmJzcDs8 L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPi0gPTNEYW1lOiByZWZyZXNoPC9kaXY+CjxkaXYgY2xhc3M9 M0QiIj4mbmJzcDsgcGFyYW1ldGVyczo8L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPjxzcGFuIHN0eWxl PTNEIldISVRFLVNQQUNFOiBwcmUiID0zRCdsYXNzPTNEIkFwcGxlLXRhYi1zcGE9Cm4iICc9M0Qi IiBjbGFzcz0zRCIiPjwvc3Bhbj4tPTIwCj0zRHBpVmVyc2lvbjogb3B0aW9uYSBpbnRlZ2VyIDwv ZGl2Pgo8ZGl2IGNsYXNzPTNEIiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7ID0KPTNEbmJzcDsmbmJzcDsmbmJzcDsgdGhpcyBkZWZpbmVzPTIwCndoYXQgaW5mb3Jt YXRpb24gY2FuIGJlID0zRHhjaGFuZ2VkPC9kaXY+CjxkaXYgY2xhc3M9M0QiIj4mbmJzcDs8L2Rp dj4KPGRpdiBjbGFzcz0zRCIiPi0gPTNEYW1lOiBoaWJlcm5hdGU6PC9kaXY+CjxkaXYgY2xhc3M9 M0QiIj4mbmJzcDsgcGFyYW1ldGVyczo8L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPjxzcGFuIHN0eWxl PTNEIldISVRFLVNQQUNFOiBwcmUiID0zRCdsYXNzPTNEIkFwcGxlLXRhYi1zcGE9Cm4iICc9M0Qi IiBjbGFzcz0zRCIiPjwvc3Bhbj4tIHN0YXRlOj0yMAo9M0Rpc2sgb3IgbWVtIChkZWZhdWx0IGlz IGRpc2sgaWYgbm90IHNwZWNpZmllZCk8L2Rpdj4KPGRpdiBjbGFzcz0zRCIiPiZuYnNwOzwvZGl2 Pgo8ZGl2IGNsYXNzPTNEIiI+aWYgeW91IG5lZWQgbW9yZSB5b3UgY2FuIGxvb2sgaGVyZTombmJz cDsgPGEgPQo9M0QncmVmPTNEImh0dHBzOi8vZ2l0aHViLmNvbS9vVmlydC9vdmlydC1ndWVzdC1h Z2VudC9ibG9iL21hc3Rlci9vdmlydC1ndT0KZXN0PTNEYWdlbnQvT1ZpcnRBZ2VudExvZ2ljLnB5 I0wzMDYiICc9M0QiIiA9CmNsYXNzPTNEIiI+aHR0cHM6Ly9naXRodWIuY29tL29WaXJ0L292aXJ0 LWd1ZXN0LWFnZW50L2Jsb2IvbWFzdGVyL292aXJ0LWd1PQo9M0RzdC1hZ2VudC9PVmlydEFnZW50 TG9naWMucHkjTDMwNjwvYT49MjAKYXQgdGhlIHBhcnNlQ29tbWFuZCA9M0R1bmN0aW9uPC9kaXY+ CjxkaXYgY2xhc3M9M0QiIj5vciBqdXN0IGFzayBoZXJlIDotKTwvZGl2PjxiciBjbGFzcz0zRCIi Pgo8YmxvY2txdW90ZSA9M0QneXBlPTNEImNpdGUiICc9M0QiIiBjbGFzcz0zRCIiPgogIDxkaXYg Y2xhc3M9M0QiIj4KICA8ZGl2IGNsYXNzPTNEIiI+PGJyID0zRCdsYXNzPTNEIiIgJz0zRCIiIGNs YXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+SSdtID0KdW5hYmxlIHRvIGZpbmQgaG93IHRvIHNlbmQg Y29tbWFuZCAobGV0cyA9M0RheT0yMAogICJzaHV0ZG93biIpIHRvIGFnZW50Py48YnIgY2xhc3M9 M0QiIj5lY2hvICJzaHV0ZG93biIgfCBzb2NhdD0yMAogID0zRHZhci9saWIvbGlidmlydC9xZW11 L2NoYW5uZWwvdGFyZ2V0L2RvbWFpbi0yMC08YnIgPTNEJ2xhc3M9M0QiIiA9Cic9M0QiIiBjbGFz cz0zRCIiPndpbjdfMzJiaXQvY29tLnJlZGhhdC5rdm0tdmRpLjAmbmJzcDsgLTxiciA9CmNsYXNz PTNEIiI+RG9lcz0zRG5vdCBzZWVtIHRvPTIwCiAgd29yazxiciBjbGFzcz0zRCIiPlRoYW5rIHlv dSBmb3IgeW91ciBoZWxwLjxiciA9M0QnbGFzcz0zRCIiICc9M0QiIiA9CmNsYXNzPTNEIiI+X19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnIgPTNEJ2xhc3M9 M0QiPQoiICc9M0QiIiBjbGFzcz0zRCIiPlVzZXJzPTIwCiAgbWFpbGluZyBsaXN0PGJyIGNsYXNz PTNEIiI+PGEgPTNEJ3JlZj0zRCJtYWlsdG86VXNlcnNAb3ZpcnQub3JnIiAnPTNEIiIgPQpjbGFz cz0zRCIiPlVzZXJzQG92aXJ0Lm9yZzwvYT48YnIgPTNEJ2xhc3M9M0QiIiAnPTNEIiIgY2xhc3M9 M0QiIj48YSA9CmhyZWY9M0QiaHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv L3VzZXJzIiA9CmNsYXNzPTNEIiI+aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3VzZXJzPC9hPjxiciA9Cj0zRCdsYXNzPTNEIiIgJz0zRCIiIGNsYXNzPTNEIiI+PC9kaXY+ PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2PjxiciA9CmNsYXNzPTNEIiI+PTNEPC9kaXY+PC9kaXY+ PC9kaXY+PC9kaXY+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fPGJyIGNsYXNzPTNEIiI+VXNlcnMgPQptYWlsaW5nIGxpc3Q8YnIgY2xhc3M9M0QiIj48YSBo cmVmPTNEIm1haWx0bzpVc2Vyc0BvdmlydC5vcmciID0KY2xhc3M9M0QiIj5Vc2Vyc0BvdmlydC5v cmc8L2E+PGJyID0KY2xhc3M9M0QiIj5odHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtYW4vbGlz dGluZm8vdXNlcnM8YnIgPQpjbGFzcz0zRCIiPjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48YnIg Y2xhc3M9M0QiIj48L2JvZHk+PC9odG1sPj0KCi0tQXBwbGUtTWFpbD1fRjI5QkMyOTEtNENCMi00 Q0Q1LTg4NTYtQkQ0QUJFQjQ2MjI5LS0K --===============3063557962913374373==--