From fabrice.bacchella at orange.fr Wed Aug 23 10:12:37 2017 Content-Type: multipart/mixed; boundary="===============7586882359964209387==" MIME-Version: 1.0 From: Fabrice Bacchella To: users at ovirt.org Subject: [ovirt-users] automatic creation of single host cluster Date: Wed, 23 Aug 2017 12:11:53 +0200 Message-ID: --===============7586882359964209387== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --Apple-Mail=3D_AC19CFC8-9E6C-4A6C-89E5-059CF1A2921C Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=3Dus-ascii I'm still playing with my sdk4 python wrapper =3D (https://github.com/fbacchella/ovirtcmd). In the last update, I tried to make writing of custom script simpler. As an example, i wrote a wrapper for single node cluster installation. I have a bunch of old ProLiant DL185 G5. I configured them to be =3D single-node cluster. I create two disks on them, one will be system, the = =3D second on will be directly used by oVirt, without a file system on it. =3D Three VLAN are added to the server. It used with: ovcmd eval -v host_name $hostname samples/single_node_cluster.py The code for this script is found at =3D https://github.com/fbacchella/ovirtcmd/blob/master/samples/single_node_clu= =3D ster.py --Apple-Mail=3D_AC19CFC8-9E6C-4A6C-89E5-059CF1A2921C Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=3Dus-ascii I'm still playing =3D with my sdk4 python wrapper (https://github.com/fbacchella/ovirtcmd).
<= br =3D class=3D3D"">In the last update, I tried to make writing of custom script = =3D simpler.

As an example, i wrote a wrapper = =3D for single node cluster installation.

I = =3D have a bunch of old ProLiant DL185 G5. I configured them to be =3D single-node cluster. I create two disks on them, one will =3D be system, the second on will be directly used by oVirt, without a =3D file system on it. Three VLAN are added to the server. It =3D used with:

    ovcmd eval -v host_name =3D $hostname samples/single_node_cluster.py

The code for this script is found =3D at https://github.com/fbacchella/ovirtcmd/blob/master/samples/single_= =3D node_cluster.py


=3D --Apple-Mail=3D_AC19CFC8-9E6C-4A6C-89E5-059CF1A2921C-- --===============7586882359964209387== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" Ci0tQXBwbGUtTWFpbD1fQUMxOUNGQzgtOUU2Qy00QTZDLTg5RTUtMDU5Q0YxQTI5MjFDCkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOwoJY2hhcnNldD11cy1hc2NpaQoKSSdtIHN0aWxsIHBsYXlpbmcgd2l0aCBteSBzZGs0 IHB5dGhvbiB3cmFwcGVyID0KKGh0dHBzOi8vZ2l0aHViLmNvbS9mYmFjY2hlbGxhL292aXJ0Y21k KS4KCkluIHRoZSBsYXN0IHVwZGF0ZSwgSSB0cmllZCB0byBtYWtlIHdyaXRpbmcgb2YgY3VzdG9t IHNjcmlwdCBzaW1wbGVyLgoKQXMgYW4gZXhhbXBsZSwgaSB3cm90ZSBhIHdyYXBwZXIgZm9yIHNp bmdsZSBub2RlIGNsdXN0ZXIgaW5zdGFsbGF0aW9uLgoKSSBoYXZlIGEgYnVuY2ggb2Ygb2xkIFBy b0xpYW50IERMMTg1IEc1LiBJIGNvbmZpZ3VyZWQgdGhlbSB0byBiZSA9CnNpbmdsZS1ub2RlIGNs dXN0ZXIuIEkgY3JlYXRlIHR3byBkaXNrcyBvbiB0aGVtLCBvbmUgd2lsbCBiZSBzeXN0ZW0sIHRo ZSA9CnNlY29uZCBvbiB3aWxsIGJlIGRpcmVjdGx5IHVzZWQgYnkgb1ZpcnQsIHdpdGhvdXQgYSBm aWxlIHN5c3RlbSBvbiBpdC4gPQpUaHJlZSBWTEFOIGFyZSBhZGRlZCB0byB0aGUgc2VydmVyLiBJ dCB1c2VkIHdpdGg6CgogICAgb3ZjbWQgZXZhbCAtdiBob3N0X25hbWUgJGhvc3RuYW1lIHNhbXBs ZXMvc2luZ2xlX25vZGVfY2x1c3Rlci5weQoKVGhlIGNvZGUgZm9yIHRoaXMgc2NyaXB0IGlzIGZv dW5kIGF0ID0KaHR0cHM6Ly9naXRodWIuY29tL2ZiYWNjaGVsbGEvb3ZpcnRjbWQvYmxvYi9tYXN0 ZXIvc2FtcGxlcy9zaW5nbGVfbm9kZV9jbHU9CnN0ZXIucHkKCgoKLS1BcHBsZS1NYWlsPV9BQzE5 Q0ZDOC05RTZDLTRBNkMtODlFNS0wNTlDRjFBMjkyMUMKQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu ZzogcXVvdGVkLXByaW50YWJsZQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsKCWNoYXJzZXQ9dXMt YXNjaWkKCjxodG1sPjxib2R5IHN0eWxlPTNEIndvcmQtd3JhcDogYnJlYWstd29yZDsgLXdlYmtp dC1uYnNwLW1vZGU6IHNwYWNlOyA9Ci13ZWJraXQtbGluZS1icmVhazogYWZ0ZXItd2hpdGUtc3Bh Y2U7IiBjbGFzcz0zRCIiPkknbSBzdGlsbCBwbGF5aW5nID0Kd2l0aCBteSBzZGs0IHB5dGhvbiB3 cmFwcGVyICg8YSA9CmhyZWY9M0QiaHR0cHM6Ly9naXRodWIuY29tL2ZiYWNjaGVsbGEvb3ZpcnRj bWQiID0KY2xhc3M9M0QiIj5odHRwczovL2dpdGh1Yi5jb20vZmJhY2NoZWxsYS9vdmlydGNtZDwv YT4pLjxiciBjbGFzcz0zRCIiPjxiciA9CmNsYXNzPTNEIiI+SW4gdGhlIGxhc3QgdXBkYXRlLCBJ IHRyaWVkIHRvIG1ha2Ugd3JpdGluZyBvZiBjdXN0b20gc2NyaXB0ID0Kc2ltcGxlci48YnIgY2xh c3M9M0QiIj48YnIgY2xhc3M9M0QiIj5BcyBhbiBleGFtcGxlLCBpIHdyb3RlIGEgd3JhcHBlciA9 CmZvciBzaW5nbGUgbm9kZSBjbHVzdGVyIGluc3RhbGxhdGlvbi48YnIgY2xhc3M9M0QiIj48YnIg Y2xhc3M9M0QiIj5JID0KaGF2ZSBhIGJ1bmNoIG9mIG9sZCBQcm9MaWFudCBETDE4NSBHNS4gSSBj b25maWd1cmVkIHRoZW0gdG8gYmUgPQpzaW5nbGUtbm9kZSBjbHVzdGVyLiBJIGNyZWF0ZSB0d28g ZGlza3Mgb24gdGhlbSwgb25lIHdpbGwgPQpiZSZuYnNwO3N5c3RlbSwgdGhlIHNlY29uZCBvbiB3 aWxsIGJlIGRpcmVjdGx5IHVzZWQgYnkgb1ZpcnQsIHdpdGhvdXQgYSA9CmZpbGUgc3lzdGVtIG9u IGl0LiBUaHJlZSBWTEFOIGFyZSBhZGRlZCB0byB0aGUgc2VydmVyLiBJdCA9CnVzZWQmbmJzcDt3 aXRoOjxiciBjbGFzcz0zRCIiPjxiciBjbGFzcz0zRCIiPjxkaXYgY2xhc3M9M0QiIj48Zm9udCA9 CmZhY2U9M0QiTWVubG8iIGNsYXNzPTNEIiI+Jm5ic3A7ICZuYnNwOyBvdmNtZCBldmFsIC12IGhv c3RfbmFtZSA9CiRob3N0bmFtZSBzYW1wbGVzL3NpbmdsZV9ub2RlX2NsdXN0ZXIucHk8L2ZvbnQ+ PC9kaXY+PGJyID0KY2xhc3M9M0QiQXBwbGUtaW50ZXJjaGFuZ2UtbmV3bGluZSI+VGhlIGNvZGUg Zm9yIHRoaXMgc2NyaXB0IGlzIGZvdW5kID0KYXQmbmJzcDtodHRwczovL2dpdGh1Yi5jb20vZmJh Y2NoZWxsYS9vdmlydGNtZC9ibG9iL21hc3Rlci9zYW1wbGVzL3NpbmdsZV89Cm5vZGVfY2x1c3Rl ci5weTxiciBjbGFzcz0zRCIiPjxiciBjbGFzcz0zRCIiPjxiciBjbGFzcz0zRCIiPjwvYm9keT48 L2h0bWw+PQoKLS1BcHBsZS1NYWlsPV9BQzE5Q0ZDOC05RTZDLTRBNkMtODlFNS0wNTlDRjFBMjky MUMtLQo= --===============7586882359964209387==-- From ykaul at redhat.com Wed Aug 23 13:52:49 2017 Content-Type: multipart/mixed; boundary="===============5132135092303726851==" MIME-Version: 1.0 From: Yaniv Kaul To: users at ovirt.org Subject: Re: [ovirt-users] automatic creation of single host cluster Date: Wed, 23 Aug 2017 16:52:07 +0300 Message-ID: In-Reply-To: FBC641E3-3AA7-4D63-A94D-490A66C332E3@orange.fr --===============5132135092303726851== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On Wed, Aug 23, 2017 at 1:11 PM, Fabrice Bacchella < fabrice.bacchella(a)orange.fr> wrote: > I'm still playing with my sdk4 python wrapper (https://github.com/ > fbacchella/ovirtcmd). > > In the last update, I tried to make writing of custom script simpler. > > As an example, i wrote a wrapper for single node cluster installation. > > I have a bunch of old ProLiant DL185 G5. I configured them to be > single-node cluster. I create two disks on them, one will be system, the > second on will be directly used by oVirt, without a file system on it. > Three VLAN are added to the server. It used with: > > ovcmd eval -v host_name $hostname samples/single_node_cluster.py > > The code for this script is found at https://github.com/ > fbacchella/ovirtcmd/blob/master/samples/single_node_cluster.py > > Thanks for sharing. I quite like ovlib. How do you pass parameters to the script? Lastly, I wonder how it compares to oVirt Ansible roles[1]. Y. [1] https://github.com/ovirt/ovirt-ansible > > > _______________________________________________ > Users mailing list > Users(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/users > > --===============5132135092303726851== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGRpdiBkaXI9Imx0ciI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFz cz0iZ21haWxfcXVvdGUiPk9uIFdlZCwgQXVnIDIzLCAyMDE3IGF0IDE6MTEgUE0sIEZhYnJpY2Ug QmFjY2hlbGxhIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmZhYnJpY2UuYmFj Y2hlbGxhQG9yYW5nZS5mciIgdGFyZ2V0PSJfYmxhbmsiPmZhYnJpY2UuYmFjY2hlbGxhQG9yYW5n ZS5mcjwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1 b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xp ZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgc3R5bGU9IndvcmQtd3Jh cDpicmVhay13b3JkIj5JJiMzOTttIHN0aWxsIHBsYXlpbmcgd2l0aCBteSBzZGs0IHB5dGhvbiB3 cmFwcGVyICg8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZmJhY2NoZWxsYS9vdmlydGNtZCIg dGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS88d2JyPmZiYWNjaGVsbGEvb3ZpcnRj bWQ8L2E+KS48YnI+PGJyPkluIHRoZSBsYXN0IHVwZGF0ZSwgSSB0cmllZCB0byBtYWtlIHdyaXRp bmcgb2YgY3VzdG9tIHNjcmlwdCBzaW1wbGVyLjxicj48YnI+QXMgYW4gZXhhbXBsZSwgaSB3cm90 ZSBhIHdyYXBwZXIgZm9yIHNpbmdsZSBub2RlIGNsdXN0ZXIgaW5zdGFsbGF0aW9uLjxicj48YnI+ SSBoYXZlIGEgYnVuY2ggb2Ygb2xkIFByb0xpYW50IERMMTg1IEc1LiBJIGNvbmZpZ3VyZWQgdGhl bSB0byBiZSBzaW5nbGUtbm9kZSBjbHVzdGVyLiBJIGNyZWF0ZSB0d28gZGlza3Mgb24gdGhlbSwg b25lIHdpbGwgYmXCoHN5c3RlbSwgdGhlIHNlY29uZCBvbiB3aWxsIGJlIGRpcmVjdGx5IHVzZWQg Ynkgb1ZpcnQsIHdpdGhvdXQgYSBmaWxlIHN5c3RlbSBvbiBpdC4gVGhyZWUgVkxBTiBhcmUgYWRk ZWQgdG8gdGhlIHNlcnZlci4gSXQgdXNlZMKgd2l0aDo8YnI+PGJyPjxkaXY+PGZvbnQgZmFjZT0i TWVubG8iPsKgIMKgIG92Y21kIGV2YWwgLXYgaG9zdF9uYW1lICRob3N0bmFtZSBzYW1wbGVzL3Np bmdsZV9ub2RlX2NsdXN0ZXIucHk8L2ZvbnQ+PC9kaXY+PGJyIGNsYXNzPSJnbWFpbC1tXy0yOTAy NTUxODcyNzM0MzA4ODRBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIj5UaGUgY29kZSBmb3IgdGhp cyBzY3JpcHQgaXMgZm91bmQgYXTCoDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9mYmFjY2hl bGxhL292aXJ0Y21kL2Jsb2IvbWFzdGVyL3NhbXBsZXMvc2luZ2xlX25vZGVfY2x1c3Rlci5weSIg dGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS88d2JyPmZiYWNjaGVsbGEvb3ZpcnRj bWQvYmxvYi88d2JyPm1hc3Rlci9zYW1wbGVzL3NpbmdsZV9ub2RlXzx3YnI+Y2x1c3Rlci5weTwv YT48YnI+PGJyPjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYW5rcyBm b3Igc2hhcmluZy4gSSBxdWl0ZSBsaWtlIG92bGliLjwvZGl2PjxkaXY+SG93IGRvIHlvdSBwYXNz IHBhcmFtZXRlcnMgdG8gdGhlIHNjcmlwdD88L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pkxhc3Rs eSwgSSB3b25kZXIgaG93IGl0IGNvbXBhcmVzIHRvIG9WaXJ0IEFuc2libGUgcm9sZXNbMV0uPC9k aXY+PGRpdj5ZLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+WzFdwqA8YSBocmVmPSJodHRwczov L2dpdGh1Yi5jb20vb3ZpcnQvb3ZpcnQtYW5zaWJsZSI+aHR0cHM6Ly9naXRodWIuY29tL292aXJ0 L292aXJ0LWFuc2libGU8L2E+wqA8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1 b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xp ZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgc3R5bGU9IndvcmQtd3Jh cDpicmVhay13b3JkIj48YnI+PC9kaXY+PGJyPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xzx3YnI+X19fX19fX19fX19fX19fX188YnI+ClVzZXJzIG1haWxpbmcgbGlzdDxicj4KPGEgaHJl Zj0ibWFpbHRvOlVzZXJzQG92aXJ0Lm9yZyI+VXNlcnNAb3ZpcnQub3JnPC9hPjxicj4KPGEgaHJl Zj0iaHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3VzZXJzIiByZWw9Im5v cmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwOi8vbGlzdHMub3ZpcnQub3JnLzx3YnI+bWFp bG1hbi9saXN0aW5mby91c2VyczwvYT48YnI+Cjxicj48L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwv ZGl2PjwvZGl2Pgo= --===============5132135092303726851==-- From fabrice.bacchella at orange.fr Wed Aug 23 14:38:55 2017 Content-Type: multipart/mixed; boundary="===============4424969046427491302==" MIME-Version: 1.0 From: Fabrice Bacchella To: users at ovirt.org Subject: Re: [ovirt-users] automatic creation of single host cluster Date: Wed, 23 Aug 2017 16:38:51 +0200 Message-ID: <15862642-0096-4418-9A65-D562C569381F@orange.fr> In-Reply-To: CAJgorsZxa-Fk76=NktxaSyMuMoQSybyPRvtmeimczp_gCfqF0Q@mail.gmail.com --===============4424969046427491302== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --Apple-Mail=3D_AB14F229-CE2E-4B95-BB93-CE31335A85FA Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=3Dutf-8 > Le 23 ao=3DC3=3DBBt 2017 =3DC3=3DA0 15:52, Yaniv Kaul a =3D =3DC3=3DA9crit : >=3D20 >=3D20 >=3D20 > On Wed, Aug 23, 2017 at 1:11 PM, Fabrice Bacchella =3D > =3D wrote: > I'm still playing with my sdk4 python wrapper =3D (https://github.com/fbacchella/ovirtcmd =3D ). >=3D20 > In the last update, I tried to make writing of custom script simpler. >=3D20 > As an example, i wrote a wrapper for single node cluster installation. >=3D20 > I have a bunch of old ProLiant DL185 G5. I configured them to be =3D single-node cluster. I create two disks on them, one will be system, the = =3D second on will be directly used by oVirt, without a file system on it. =3D Three VLAN are added to the server. It used with: >=3D20 > ovcmd eval -v host_name $hostname samples/single_node_cluster.py >=3D20 > The code for this script is found at =3D https://github.com/fbacchella/ovirtcmd/blob/master/samples/single_node_clu= =3D ster.py =3D >=3D20 >=3D20 > Thanks for sharing. I quite like ovlib. > How do you pass parameters to the script? It's prepared in the variables of the eval. The argument -v host_name =3D $hostname create a variable called hostname with value $hostname that =3D will be global for the script. >=3D20 > Lastly, I wonder how it compares to oVirt Ansible roles[1]. I don't know, I'm not a ansible user, we're running on puppet. --Apple-Mail=3D_AB14F229-CE2E-4B95-BB93-CE31335A85FA Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=3Dutf-8
Le 23 ao=3DC3=3DBBt 2017 =3DC3=3DA0 15:52, Yaniv Kaul <ykaul(a)redhat.com>= ; a =3D =3DC3=3DA9crit :



On We= d, =3D Aug 23, 2017 at 1:11 PM, Fabrice Bacchella <fabrice.bacchella(a)orange.fr> =3D wrote:
I'm still playing with my sdk4 python wrapper (https://github.com/fbacchella/ovirtcmd).=
In the last update, I tried to make writing = =3D of custom script simpler.

As an example, i= =3D wrote a wrapper for single node cluster installation.

I have a bunch of old ProLiant DL185 G5. I configured them to = =3D be single-node cluster. I create two disks on them, one will =3D be system, the second on will be directly used by oVirt, without a =3D file system on it. Three VLAN are added to the server. It =3D used with:

    ovcmd eval -v host_name =3D $hostname samples/single_node_cluster.py

The code = =3D for this script is found at https://github.com/fbacchella/ovirtcmd/blob/master/samples/single_node_cluster.py

Thanks for sharing. I quite like =3D ovlib.
How do you pass parameters to the =3D script?

It's prepared in the variables of the eval. The =3D argument -v =3D host_name $hostname create a variable called hostname with value =3D $hostname that will be global for the script.


Lastly, I wonder how it compares to oVirt Ansible =3D roles[1].

I don't know, I'm not a ansible user, we're =3D running on puppet.

=3D --Apple-Mail=3D_AB14F229-CE2E-4B95-BB93-CE31335A85FA-- --===============4424969046427491302== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" Ci0tQXBwbGUtTWFpbD1fQUIxNEYyMjktQ0UyRS00Qjk1LUJCOTMtQ0UzMTMzNUE4NUZBCkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKQ29udGVudC1UeXBlOiB0ZXh0 L3BsYWluOwoJY2hhcnNldD11dGYtOAoKCj4gTGUgMjMgYW89QzM9QkJ0IDIwMTcgPUMzPUEwIDE1 OjUyLCBZYW5pdiBLYXVsIDx5a2F1bEByZWRoYXQuY29tPiBhID0KPUMzPUE5Y3JpdCA6Cj49MjAK Pj0yMAo+PTIwCj4gT24gV2VkLCBBdWcgMjMsIDIwMTcgYXQgMToxMSBQTSwgRmFicmljZSBCYWNj aGVsbGEgPQo8ZmFicmljZS5iYWNjaGVsbGFAb3JhbmdlLmZyIDxtYWlsdG86ZmFicmljZS5iYWNj aGVsbGFAb3JhbmdlLmZyPj4gPQp3cm90ZToKPiBJJ20gc3RpbGwgcGxheWluZyB3aXRoIG15IHNk azQgcHl0aG9uIHdyYXBwZXIgPQooaHR0cHM6Ly9naXRodWIuY29tL2ZiYWNjaGVsbGEvb3ZpcnRj bWQgPQo8aHR0cHM6Ly9naXRodWIuY29tL2ZiYWNjaGVsbGEvb3ZpcnRjbWQ+KS4KPj0yMAo+IElu IHRoZSBsYXN0IHVwZGF0ZSwgSSB0cmllZCB0byBtYWtlIHdyaXRpbmcgb2YgY3VzdG9tIHNjcmlw dCBzaW1wbGVyLgo+PTIwCj4gQXMgYW4gZXhhbXBsZSwgaSB3cm90ZSBhIHdyYXBwZXIgZm9yIHNp bmdsZSBub2RlIGNsdXN0ZXIgaW5zdGFsbGF0aW9uLgo+PTIwCj4gSSBoYXZlIGEgYnVuY2ggb2Yg b2xkIFByb0xpYW50IERMMTg1IEc1LiBJIGNvbmZpZ3VyZWQgdGhlbSB0byBiZSA9CnNpbmdsZS1u b2RlIGNsdXN0ZXIuIEkgY3JlYXRlIHR3byBkaXNrcyBvbiB0aGVtLCBvbmUgd2lsbCBiZSBzeXN0 ZW0sIHRoZSA9CnNlY29uZCBvbiB3aWxsIGJlIGRpcmVjdGx5IHVzZWQgYnkgb1ZpcnQsIHdpdGhv dXQgYSBmaWxlIHN5c3RlbSBvbiBpdC4gPQpUaHJlZSBWTEFOIGFyZSBhZGRlZCB0byB0aGUgc2Vy dmVyLiBJdCB1c2VkIHdpdGg6Cj49MjAKPiAgICAgb3ZjbWQgZXZhbCAtdiBob3N0X25hbWUgJGhv c3RuYW1lIHNhbXBsZXMvc2luZ2xlX25vZGVfY2x1c3Rlci5weQo+PTIwCj4gVGhlIGNvZGUgZm9y IHRoaXMgc2NyaXB0IGlzIGZvdW5kIGF0ID0KaHR0cHM6Ly9naXRodWIuY29tL2ZiYWNjaGVsbGEv b3ZpcnRjbWQvYmxvYi9tYXN0ZXIvc2FtcGxlcy9zaW5nbGVfbm9kZV9jbHU9CnN0ZXIucHkgPQo8 aHR0cHM6Ly9naXRodWIuY29tL2ZiYWNjaGVsbGEvb3ZpcnRjbWQvYmxvYi9tYXN0ZXIvc2FtcGxl cy9zaW5nbGVfbm9kZV9jbD0KdXN0ZXIucHk+Cj49MjAKPj0yMAo+IFRoYW5rcyBmb3Igc2hhcmlu Zy4gSSBxdWl0ZSBsaWtlIG92bGliLgo+IEhvdyBkbyB5b3UgcGFzcyBwYXJhbWV0ZXJzIHRvIHRo ZSBzY3JpcHQ/CgpJdCdzIHByZXBhcmVkIGluIHRoZSB2YXJpYWJsZXMgb2YgdGhlIGV2YWwuIFRo ZSBhcmd1bWVudCAtdiBob3N0X25hbWUgPQokaG9zdG5hbWUgY3JlYXRlIGEgdmFyaWFibGUgY2Fs bGVkIGhvc3RuYW1lIHdpdGggdmFsdWUgJGhvc3RuYW1lIHRoYXQgPQp3aWxsIGJlIGdsb2JhbCBm b3IgdGhlIHNjcmlwdC4KCj49MjAKPiBMYXN0bHksIEkgd29uZGVyIGhvdyBpdCBjb21wYXJlcyB0 byBvVmlydCBBbnNpYmxlIHJvbGVzWzFdLgoKSSBkb24ndCBrbm93LCBJJ20gbm90IGEgYW5zaWJs ZSB1c2VyLCB3ZSdyZSBydW5uaW5nIG9uIHB1cHBldC4KCgotLUFwcGxlLU1haWw9X0FCMTRGMjI5 LUNFMkUtNEI5NS1CQjkzLUNFMzEzMzVBODVGQQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBx dW90ZWQtcHJpbnRhYmxlCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOwoJY2hhcnNldD11dGYtOAoK PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0zRCJDb250ZW50LVR5cGUiIGNvbnRlbnQ9M0Qi dGV4dC9odG1sID0KY2hhcnNldD0zRHV0Zi04Ij48L2hlYWQ+PGJvZHkgc3R5bGU9M0Qid29yZC13 cmFwOiBicmVhay13b3JkOyA9Ci13ZWJraXQtbmJzcC1tb2RlOiBzcGFjZTsgLXdlYmtpdC1saW5l LWJyZWFrOiBhZnRlci13aGl0ZS1zcGFjZTsiID0KY2xhc3M9M0QiIj48YnIgY2xhc3M9M0QiIj48 ZGl2PjxibG9ja3F1b3RlIHR5cGU9M0QiY2l0ZSIgY2xhc3M9M0QiIj48ZGl2ID0KY2xhc3M9M0Qi Ij5MZSAyMyBhbz1DMz1CQnQgMjAxNyA9QzM9QTAgMTU6NTIsIFlhbml2IEthdWwgJmx0OzxhID0K aHJlZj0zRCJtYWlsdG86eWthdWxAcmVkaGF0LmNvbSIgY2xhc3M9M0QiIj55a2F1bEByZWRoYXQu Y29tPC9hPiZndDsgYSA9Cj1DMz1BOWNyaXQgOjwvZGl2PjxiciBjbGFzcz0zRCJBcHBsZS1pbnRl cmNoYW5nZS1uZXdsaW5lIj48ZGl2ID0KY2xhc3M9M0QiIj48ZGl2IGRpcj0zRCJsdHIiIGNsYXNz PTNEIiI+PGJyIGNsYXNzPTNEIiI+PGRpdiA9CmNsYXNzPTNEImdtYWlsX2V4dHJhIj48YnIgY2xh c3M9M0QiIj48ZGl2IGNsYXNzPTNEImdtYWlsX3F1b3RlIj5PbiBXZWQsID0KQXVnIDIzLCAyMDE3 IGF0IDE6MTEgUE0sIEZhYnJpY2UgQmFjY2hlbGxhIDxzcGFuIGRpcj0zRCJsdHIiID0KY2xhc3M9 M0QiIj4mbHQ7PGEgaHJlZj0zRCJtYWlsdG86ZmFicmljZS5iYWNjaGVsbGFAb3JhbmdlLmZyIiA9 CnRhcmdldD0zRCJfYmxhbmsiIGNsYXNzPTNEIiI+ZmFicmljZS5iYWNjaGVsbGFAb3JhbmdlLmZy PC9hPiZndDs8L3NwYW4+ID0Kd3JvdGU6PGJyIGNsYXNzPTNEIiI+PGJsb2NrcXVvdGUgY2xhc3M9 M0QiZ21haWxfcXVvdGUiIHN0eWxlPTNEIm1hcmdpbjowcHg9CiAwcHggMHB4IDAuOGV4O2JvcmRl ci1sZWZ0OjFweCBzb2xpZCA9CnJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+PGRp diBzdHlsZT0zRCJ3b3JkLXdyYXA6YnJlYWstd29yZCIgPQpjbGFzcz0zRCIiPkknbSBzdGlsbCBw bGF5aW5nIHdpdGggbXkgc2RrNCBweXRob24gd3JhcHBlciAoPGEgPQpocmVmPTNEImh0dHBzOi8v Z2l0aHViLmNvbS9mYmFjY2hlbGxhL292aXJ0Y21kIiB0YXJnZXQ9M0QiX2JsYW5rIiA9CmNsYXNz PTNEIiI+aHR0cHM6Ly9naXRodWIuY29tLzx3YnIgY2xhc3M9M0QiIj5mYmFjY2hlbGxhL292aXJ0 Y21kPC9hPikuPGJyPQogY2xhc3M9M0QiIj48YnIgY2xhc3M9M0QiIj5JbiB0aGUgbGFzdCB1cGRh dGUsIEkgdHJpZWQgdG8gbWFrZSB3cml0aW5nID0Kb2YgY3VzdG9tIHNjcmlwdCBzaW1wbGVyLjxi ciBjbGFzcz0zRCIiPjxiciBjbGFzcz0zRCIiPkFzIGFuIGV4YW1wbGUsIGkgPQp3cm90ZSBhIHdy YXBwZXIgZm9yIHNpbmdsZSBub2RlIGNsdXN0ZXIgaW5zdGFsbGF0aW9uLjxiciBjbGFzcz0zRCIi PjxiciA9CmNsYXNzPTNEIiI+SSBoYXZlIGEgYnVuY2ggb2Ygb2xkIFByb0xpYW50IERMMTg1IEc1 LiBJIGNvbmZpZ3VyZWQgdGhlbSB0byA9CmJlIHNpbmdsZS1ub2RlIGNsdXN0ZXIuIEkgY3JlYXRl IHR3byBkaXNrcyBvbiB0aGVtLCBvbmUgd2lsbCA9CmJlJm5ic3A7c3lzdGVtLCB0aGUgc2Vjb25k IG9uIHdpbGwgYmUgZGlyZWN0bHkgdXNlZCBieSBvVmlydCwgd2l0aG91dCBhID0KZmlsZSBzeXN0 ZW0gb24gaXQuIFRocmVlIFZMQU4gYXJlIGFkZGVkIHRvIHRoZSBzZXJ2ZXIuIEl0ID0KdXNlZCZu YnNwO3dpdGg6PGJyIGNsYXNzPTNEIiI+PGJyIGNsYXNzPTNEIiI+PGRpdiBjbGFzcz0zRCIiPjxm b250ID0KZmFjZT0zRCJNZW5sbyIgY2xhc3M9M0QiIj4mbmJzcDsgJm5ic3A7IG92Y21kIGV2YWwg LXYgaG9zdF9uYW1lID0KJGhvc3RuYW1lIHNhbXBsZXMvc2luZ2xlX25vZGVfY2x1c3Rlci5weTwv Zm9udD48L2Rpdj48YnIgPQpjbGFzcz0zRCJnbWFpbC1tXy0yOTAyNTUxODcyNzM0MzA4ODRBcHBs ZS1pbnRlcmNoYW5nZS1uZXdsaW5lIj5UaGUgY29kZSA9CmZvciB0aGlzIHNjcmlwdCBpcyBmb3Vu ZCBhdCZuYnNwOzxhID0KaHJlZj0zRCJodHRwczovL2dpdGh1Yi5jb20vZmJhY2NoZWxsYS9vdmly dGNtZC9ibG9iL21hc3Rlci9zYW1wbGVzL3NpbmdsZV89Cm5vZGVfY2x1c3Rlci5weSIgdGFyZ2V0 PTNEIl9ibGFuayIgY2xhc3M9M0QiIj5odHRwczovL2dpdGh1Yi5jb20vPHdiciA9CmNsYXNzPTNE IiI+ZmJhY2NoZWxsYS9vdmlydGNtZC9ibG9iLzx3YnIgPQpjbGFzcz0zRCIiPm1hc3Rlci9zYW1w bGVzL3NpbmdsZV9ub2RlXzx3YnIgY2xhc3M9M0QiIj5jbHVzdGVyLnB5PC9hPjxiciA9CmNsYXNz PTNEIiI+PGJyIGNsYXNzPTNEIiI+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXYgY2xhc3M9M0QiIj48 YnIgPQpjbGFzcz0zRCIiPjwvZGl2PjxkaXYgY2xhc3M9M0QiIj5UaGFua3MgZm9yIHNoYXJpbmcu IEkgcXVpdGUgbGlrZSA9Cm92bGliLjwvZGl2PjxkaXYgY2xhc3M9M0QiIj5Ib3cgZG8geW91IHBh c3MgcGFyYW1ldGVycyB0byB0aGUgPQpzY3JpcHQ/PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9k aXY+PC9ibG9ja3F1b3RlPjxkaXY+PGJyID0KY2xhc3M9M0QiIj48L2Rpdj5JdCdzIHByZXBhcmVk IGluIHRoZSB2YXJpYWJsZXMgb2YgdGhlIGV2YWwuIFRoZSA9CmFyZ3VtZW50Jm5ic3A7PHNwYW4g c3R5bGU9M0QiZm9udC1mYW1pbHk6IE1lbmxvOyIgY2xhc3M9M0QiIj4tdiA9Cmhvc3RfbmFtZSAk aG9zdG5hbWUgY3JlYXRlIGEgdmFyaWFibGUgY2FsbGVkIGhvc3RuYW1lIHdpdGggdmFsdWUgPQok aG9zdG5hbWUgdGhhdCB3aWxsIGJlIGdsb2JhbCBmb3IgdGhlIHNjcmlwdC48L3NwYW4+PC9kaXY+ PGRpdj48YnIgPQpjbGFzcz0zRCIiPjxibG9ja3F1b3RlIHR5cGU9M0QiY2l0ZSIgY2xhc3M9M0Qi Ij48ZGl2IGNsYXNzPTNEIiI+PGRpdiA9CmRpcj0zRCJsdHIiIGNsYXNzPTNEIiI+PGRpdiBjbGFz cz0zRCJnbWFpbF9leHRyYSI+PGRpdiA9CmNsYXNzPTNEImdtYWlsX3F1b3RlIj48ZGl2IGNsYXNz PTNEIiI+PGJyIGNsYXNzPTNEIiI+PC9kaXY+PGRpdiA9CmNsYXNzPTNEIiI+TGFzdGx5LCBJIHdv bmRlciBob3cgaXQgY29tcGFyZXMgdG8gb1ZpcnQgQW5zaWJsZSA9CnJvbGVzWzFdLjwvZGl2Pjwv ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48YnIgPQpjbGFzcz0zRCIiPjwvZGl2 PjxkaXY+SSBkb24ndCBrbm93LCBJJ20gbm90IGEgYW5zaWJsZSB1c2VyLCB3ZSdyZSA9CnJ1bm5p bmcgb24gcHVwcGV0LjwvZGl2PjxiciBjbGFzcz0zRCIiPjwvYm9keT48L2h0bWw+PQoKLS1BcHBs ZS1NYWlsPV9BQjE0RjIyOS1DRTJFLTRCOTUtQkI5My1DRTMxMzM1QTg1RkEtLQo= --===============4424969046427491302==--