From algirdas at host1plus.com Mon Jan 18 10:12:35 2016 Content-Type: multipart/mixed; boundary="===============6199482841140099126==" MIME-Version: 1.0 From: =?utf-8?q?Algirdas_=C5=BDemaitis_=3Calgirdas_at_host1plus=2Ecom=3E?= To: users at ovirt.org Subject: [ovirt-users] Ovirt python API clone VM to other data domain Date: Mon, 18 Jan 2016 14:39:29 +0000 Message-ID: --===============6199482841140099126== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --_000_DB5PR09MB0422E945B518A88DA81C075999C00DB5PR09MB0422eurp_ Content-Type: text/plain; charset=3D"windows-1257" Content-Transfer-Encoding: quoted-printable Hello, It seems ovirt API lacks of possibility to define storage domain, in which = =3D cloned vm (from snapshot) will be created, is it done on purpose, or it is = =3D just missing/under development ? Scenario using WEB GUI : Create snapshot of any running VM, right-click on snapshot, select =3D93clo= ne=3D =3D94 In pop-up window you can enter new VM name etc, under =3D93resource allocat= io=3D n=3D94 section *you can select where it will be created* Scenario using python-sdk/ovirt-api I was trying to create vm for example like this: ## vm_params =3D3D params.VM(name=3D3Dvm_from_list + '__bak', cluster=3D3Dapi.= cluste=3D rs.get("Default"), storage_domain=3D3Dapi.storagedomains.get("temp"), memor= y=3D =3D3Dvm.get_memory(), snapshots=3D3Dsnapshots_param) api.vms.add(vm_params) ## # temp is =3D84other=3D93 storage domain, NFS v3 VM will be still created on same storage as original VM, no matter what dom= =3D ain I will define in params... Also tried other variations, using templates, disk profiles and so on, but = =3D nothing has changed where new VM is created. I know cloning is not intended for backup purpose, but it is workaround pro= =3D bably half of Ovirt users use. In my case, it is not very smart to do snapshot and create VM (allocate dis= =3D k space, etc) on same storage domain where there is already running a lot o= =3D f VMs, environment is already busy. Thanks ! --_000_DB5PR09MB0422E945B518A88DA81C075999C00DB5PR09MB0422eurp_ Content-Type: text/html; charset=3D"windows-1257" Content-Transfer-Encoding: quoted-printable

Hello,

 

It seems ovirt API lacks of= pos=3D sibility to define storage domain, in which cloned vm (from snapshot) will = =3D be created, is it done on purpose, or it is just missing/under development = =3D ?

 

Scenario using WEB GUI :

Create snapshot of any runn= ing =3D VM, right-click on snapshot, select =3D93clone=3D94

In pop-up window you can en= ter =3D new VM name etc, under =3D93resource allocation=3D94 section *you can se= lect=3D where it will be created*

 

 

Scenario using python-sdk/o= virt=3D -api

 

I was trying to create vm f= or e=3D xample like this:

##

vm_params =3D3D param= s.VM(name=3D3Dvm_from_list + '__bak', cluster<= span=3D class=3D3D"sy0">=3D3Dapi.clusters.get(&= quot;D=3D efault"), storage_domain=3D3Dapi.= storag=3D edomains.get(<=3D span class=3D3D"st0">"temp")<= span=3D class=3D3D"sy0">, memory=3D3Dvm.get_memory()=3D , snapshots=3D3Dsnapshots_param=3D )

api.vms.add(vm_params)=

##

# temp is =3D84other=3D93 st= orage do=3D main, NFS v3

VM will be still created on = same=3D storage as original VM, no matter what domain I will define in params...

Also tried other variations= , us=3D ing templates, disk profiles and so on, but nothing has changed where new V= =3D M is created.

 

I know cloning is not inten= ded =3D for backup purpose, but it is workaround probably half of Ovirt users use.<= =3D o:p>

In my case, it is not very = smar=3D t to do snapshot and create VM (allocate disk space, etc) on same storage d= =3D omain where there is already running a lot of VMs, environment is already b= =3D usy.

 

Thanks !<= /p>

--_000_DB5PR09MB0422E945B518A88DA81C075999C00DB5PR09MB0422eurp_-- --===============6199482841140099126== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" LS1fMDAwX0RCNVBSMDlNQjA0MjJFOTQ1QjUxOEE4OERBODFDMDc1OTk5QzAwREI1UFIwOU1CMDQy MmV1cnBfCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0id2luZG93cy0xMjU3IgpD b250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCgpIZWxsbywKCkl0IHNl ZW1zIG92aXJ0IEFQSSBsYWNrcyBvZiBwb3NzaWJpbGl0eSB0byBkZWZpbmUgc3RvcmFnZSBkb21h aW4sIGluIHdoaWNoID0KY2xvbmVkIHZtIChmcm9tIHNuYXBzaG90KSB3aWxsIGJlIGNyZWF0ZWQs IGlzIGl0IGRvbmUgb24gcHVycG9zZSwgb3IgaXQgaXMgPQpqdXN0IG1pc3NpbmcvdW5kZXIgZGV2 ZWxvcG1lbnQgPwoKU2NlbmFyaW8gdXNpbmcgV0VCIEdVSSA6CkNyZWF0ZSBzbmFwc2hvdCBvZiBh bnkgcnVubmluZyBWTSwgcmlnaHQtY2xpY2sgb24gc25hcHNob3QsIHNlbGVjdCA9OTNjbG9uZT0K PTk0CkluIHBvcC11cCB3aW5kb3cgeW91IGNhbiBlbnRlciBuZXcgVk0gbmFtZSBldGMsIHVuZGVy ID05M3Jlc291cmNlIGFsbG9jYXRpbz0Kbj05NCBzZWN0aW9uICp5b3UgY2FuIHNlbGVjdCB3aGVy ZSBpdCB3aWxsIGJlIGNyZWF0ZWQqCgoKU2NlbmFyaW8gdXNpbmcgcHl0aG9uLXNkay9vdmlydC1h cGkKCkkgd2FzIHRyeWluZyB0byBjcmVhdGUgdm0gZm9yIGV4YW1wbGUgbGlrZSB0aGlzOgojIwp2 bV9wYXJhbXMgPTNEIHBhcmFtcy5WTShuYW1lPTNEdm1fZnJvbV9saXN0ICsgJ19fYmFrJywgY2x1 c3Rlcj0zRGFwaS5jbHVzdGU9CnJzLmdldCgiRGVmYXVsdCIpLCBzdG9yYWdlX2RvbWFpbj0zRGFw aS5zdG9yYWdlZG9tYWlucy5nZXQoInRlbXAiKSwgbWVtb3J5PQo9M0R2bS5nZXRfbWVtb3J5KCks IHNuYXBzaG90cz0zRHNuYXBzaG90c19wYXJhbSkKYXBpLnZtcy5hZGQodm1fcGFyYW1zKQojIwoj IHRlbXAgaXMgPTg0b3RoZXI9OTMgc3RvcmFnZSBkb21haW4sIE5GUyB2MwpWTSB3aWxsIGJlIHN0 aWxsIGNyZWF0ZWQgb24gc2FtZSBzdG9yYWdlIGFzIG9yaWdpbmFsIFZNLCBubyBtYXR0ZXIgd2hh dCBkb209CmFpbiBJIHdpbGwgZGVmaW5lIGluIHBhcmFtcy4uLgpBbHNvIHRyaWVkIG90aGVyIHZh cmlhdGlvbnMsIHVzaW5nIHRlbXBsYXRlcywgZGlzayBwcm9maWxlcyBhbmQgc28gb24sIGJ1dCA9 Cm5vdGhpbmcgaGFzIGNoYW5nZWQgd2hlcmUgbmV3IFZNIGlzIGNyZWF0ZWQuCgpJIGtub3cgY2xv bmluZyBpcyBub3QgaW50ZW5kZWQgZm9yIGJhY2t1cCBwdXJwb3NlLCBidXQgaXQgaXMgd29ya2Fy b3VuZCBwcm89CmJhYmx5IGhhbGYgb2YgT3ZpcnQgdXNlcnMgdXNlLgpJbiBteSBjYXNlLCBpdCBp cyBub3QgdmVyeSBzbWFydCB0byBkbyBzbmFwc2hvdCBhbmQgY3JlYXRlIFZNIChhbGxvY2F0ZSBk aXM9Cmsgc3BhY2UsIGV0Yykgb24gc2FtZSBzdG9yYWdlIGRvbWFpbiB3aGVyZSB0aGVyZSBpcyBh bHJlYWR5IHJ1bm5pbmcgYSBsb3Qgbz0KZiBWTXMsIGVudmlyb25tZW50IGlzIGFscmVhZHkgYnVz eS4KClRoYW5rcyAhCgotLV8wMDBfREI1UFIwOU1CMDQyMkU5NDVCNTE4QTg4REE4MUMwNzU5OTlD MDBEQjVQUjA5TUIwNDIyZXVycF8KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Indp bmRvd3MtMTI1NyIKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQoK PGh0bWwgeG1sbnM6dj0zRCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIgeG1sbnM6bz0z RCJ1cm46c2NoZW1hcy1taWNyPQpvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0zRCJ1 cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiA9CnhtbG5zOm09M0QiaHR0cDov L3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0zRCJodHRw Oj0KLy93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0z RCJDb250ZW50LVR5cGUiIGNvbnRlbnQ9M0QidGV4dC9odG1sOyBjaGFyc2V0PTNEd2luZG93cy0x PQoyNTciPgo8bWV0YSBuYW1lPTNEIkdlbmVyYXRvciIgY29udGVudD0zRCJNaWNyb3NvZnQgV29y ZCAxNSAoZmlsdGVyZWQgbWVkaXVtKSI+CjxzdHlsZT48IS0tCi8qIEZvbnQgRGVmaW5pdGlvbnMg Ki8KQGZvbnQtZmFjZQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOwoJcGFub3NlLTE6MiA0 IDUgMyA1IDQgNiAzIDIgNDt9CkBmb250LWZhY2UKCXtmb250LWZhbWlseTpDYWxpYnJpOwoJcGFu b3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAyIDQ7fQovKiBTdHlsZSBEZWZpbml0aW9ucyAqLwpwLk1z b05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCgl7bWFyZ2luOjBjbTsKCW1hcmdp bi1ib3R0b206LjAwMDFwdDsKCWZvbnQtc2l6ZToxMS4wcHQ7Cglmb250LWZhbWlseToiQ2FsaWJy aSIsc2Fucy1zZXJpZjsKCW1zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTO30KYTpsaW5rLCBzcGFu Lk1zb0h5cGVybGluawoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsKCWNvbG9yOiMwNTYzQzE7Cgl0 ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KYTp2aXNpdGVkLCBzcGFuLk1zb0h5cGVybGlua0Zv bGxvd2VkCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5OwoJY29sb3I6Izk1NEY3MjsKCXRleHQtZGVj b3JhdGlvbjp1bmRlcmxpbmU7fQpzcGFuLkVtYWlsU3R5bGUxNwoJe21zby1zdHlsZS10eXBlOnBl cnNvbmFsLWNvbXBvc2U7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsKCWNvbG9y OndpbmRvd3RleHQ7fQpzcGFuLnN5MAoJe21zby1zdHlsZS1uYW1lOnN5MDt9CnNwYW4ubWUxCgl7 bXNvLXN0eWxlLW5hbWU6bWUxO30Kc3Bhbi5icjAKCXttc28tc3R5bGUtbmFtZTpicjA7fQpzcGFu LnN0MAoJe21zby1zdHlsZS1uYW1lOnN0MDt9Ci5Nc29DaHBEZWZhdWx0Cgl7bXNvLXN0eWxlLXR5 cGU6ZXhwb3J0LW9ubHk7Cglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsKCW1zby1m YXJlYXN0LWxhbmd1YWdlOkVOLVVTO30KQHBhZ2UgV29yZFNlY3Rpb24xCgl7c2l6ZTo2MTIuMHB0 IDc5Mi4wcHQ7CgltYXJnaW46My4wY20gMS4wY20gMi4wY20gMy4wY207fQpkaXYuV29yZFNlY3Rp b24xCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQotLT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5XT48 eG1sPgo8bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PTNEImVkaXQiIHNwaWRtYXg9M0QiMTAyNiIgLz4K PC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CjxvOnNoYXBlbGF5b3V0 IHY6ZXh0PTNEImVkaXQiPgo8bzppZG1hcCB2OmV4dD0zRCJlZGl0IiBkYXRhPTNEIjEiIC8+Cjwv bzpzaGFwZWxheW91dD48L3htbD48IVtlbmRpZl0tLT4KPC9oZWFkPgo8Ym9keSBsYW5nPTNEIkxU IiBsaW5rPTNEIiMwNTYzQzEiIHZsaW5rPTNEIiM5NTRGNzIiPgo8ZGl2IGNsYXNzPTNEIldvcmRT ZWN0aW9uMSI+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PHNwYW4gbGFuZz0zRCJFTi1VUyI+SGVs bG8sPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0zRCJNc29Ob3JtYWwiPjxzcGFuIGxh bmc9M0QiRU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9M0QiTXNv Tm9ybWFsIj48c3BhbiBsYW5nPTNEIkVOLVVTIj5JdCBzZWVtcyBvdmlydCBBUEkgbGFja3Mgb2Yg cG9zPQpzaWJpbGl0eSB0byBkZWZpbmUgc3RvcmFnZSBkb21haW4sIGluIHdoaWNoIGNsb25lZCB2 bSAoZnJvbSBzbmFwc2hvdCkgd2lsbCA9CmJlIGNyZWF0ZWQsIGlzIGl0IGRvbmUgb24gcHVycG9z ZSwgb3IgaXQgaXMganVzdCBtaXNzaW5nL3VuZGVyIGRldmVsb3BtZW50ID0KPzxvOnA+PC9vOnA+ PC9zcGFuPjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj48c3BhbiBsYW5nPTNEIkVOLVVTIj48 bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PHNwYW4g bGFuZz0zRCJFTi1VUyI+U2NlbmFyaW8gdXNpbmcgV0VCIEdVSSA6PG86cD48Lz0KbzpwPjwvc3Bh bj48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PHNwYW4gbGFuZz0zRCJFTi1VUyI+Q3JlYXRl IHNuYXBzaG90IG9mIGFueSBydW5uaW5nID0KVk0sIHJpZ2h0LWNsaWNrIG9uIHNuYXBzaG90LCBz ZWxlY3QgPTkzY2xvbmU9OTQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPTNEIk1zb05v cm1hbCI+PHNwYW4gbGFuZz0zRCJFTi1VUyI+SW4gcG9wLXVwIHdpbmRvdyB5b3UgY2FuIGVudGVy ID0KbmV3IFZNIG5hbWUgZXRjLCB1bmRlciA9OTNyZXNvdXJjZSBhbGxvY2F0aW9uPTk0IHNlY3Rp b24gKjxiPnlvdSBjYW4gc2VsZWN0PQogd2hlcmUgaXQgd2lsbCBiZSBjcmVhdGVkPC9iPio8bzpw PjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PHNwYW4gbGFuZz0zRCJF Ti1VUyI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0zRCJNc29Ob3JtYWwi PjxzcGFuIGxhbmc9M0QiRU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4KPHAgY2xh c3M9M0QiTXNvTm9ybWFsIj48c3BhbiBsYW5nPTNEIkVOLVVTIj5TY2VuYXJpbyB1c2luZyBweXRo b24tc2RrL292aXJ0PQotYXBpPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0zRCJNc29O b3JtYWwiPjxzcGFuIGxhbmc9M0QiRU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4K PHAgY2xhc3M9M0QiTXNvTm9ybWFsIj48c3BhbiBsYW5nPTNEIkVOLVVTIj5JIHdhcyB0cnlpbmcg dG8gY3JlYXRlIHZtIGZvciBlPQp4YW1wbGUgbGlrZSB0aGlzOjxvOnA+PC9vOnA+PC9zcGFuPjwv cD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj4jIzxvOnA+PC9vOnA+PC9wPgo8cCBjbGFzcz0zRCJN c29Ob3JtYWwiPnZtX3BhcmFtcyA8c3BhbiBjbGFzcz0zRCJzeTAiPj0zRDwvc3Bhbj4gcGFyYW1z LjxzcGE9Cm4gY2xhc3M9M0QibWUxIj5WTTwvc3Bhbj48c3BhbiBjbGFzcz0zRCJicjAiPig8L3Nw YW4+bmFtZTxzcGFuIGNsYXNzPTNEInN5MD0KIj49M0Q8L3NwYW4+dm1fZnJvbV9saXN0ICYjNDM7 CjxzcGFuIGNsYXNzPTNEInN0MCI+J19fYmFrJzwvc3Bhbj48c3BhbiBjbGFzcz0zRCJzeTAiPiw8 L3NwYW4+IGNsdXN0ZXI8c3Bhbj0KIGNsYXNzPTNEInN5MCI+PTNEPC9zcGFuPmFwaS48c3BhbiBj bGFzcz0zRCJtZTEiPmNsdXN0ZXJzPC9zcGFuPi48c3BhbiBjbGFzPQpzPTNEIm1lMSI+Z2V0PC9z cGFuPjxzcGFuIGNsYXNzPTNEImJyMCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0zRCJzdDAiPiZxdW90 O0Q9CmVmYXVsdCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0zRCJicjAiPik8L3NwYW4+PHNwYW4g Y2xhc3M9M0Qic3kwIj4sPC9zcGFuPgogc3RvcmFnZV9kb21haW48c3BhbiBjbGFzcz0zRCJzeTAi Pj0zRDwvc3Bhbj5hcGkuPHNwYW4gY2xhc3M9M0QibWUxIj5zdG9yYWc9CmVkb21haW5zPC9zcGFu Pi48c3BhbiBjbGFzcz0zRCJtZTEiPmdldDwvc3Bhbj48c3BhbiBjbGFzcz0zRCJicjAiPig8L3Nw YW4+PD0Kc3BhbiBjbGFzcz0zRCJzdDAiPiZxdW90O3RlbXAmcXVvdDs8L3NwYW4+PHNwYW4gY2xh c3M9M0QiYnIwIj4pPC9zcGFuPjxzcGFuPQogY2xhc3M9M0Qic3kwIj4sPC9zcGFuPiBtZW1vcnk8 c3BhbiBjbGFzcz0zRCJzeTAiPj0zRDwvc3Bhbj52bS48c3BhbiBjbGFzcz0KPTNEIm1lMSI+Z2V0 X21lbW9yeTwvc3Bhbj48c3BhbiBjbGFzcz0zRCJicjAiPigpPC9zcGFuPjxzcGFuIGNsYXNzPTNE InN5MCI+PQosPC9zcGFuPgogc25hcHNob3RzPHNwYW4gY2xhc3M9M0Qic3kwIj49M0Q8L3NwYW4+ c25hcHNob3RzX3BhcmFtPHNwYW4gY2xhc3M9M0QiYnIwIj49Cik8bzpwPjwvbzpwPjwvc3Bhbj48 L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+YXBpLjxzcGFuIGNsYXNzPTNEIm1lMSI+dm1zPC9z cGFuPi48c3BhbiBjbGFzcz0zRCJtZT0KMSI+YWRkPC9zcGFuPjxzcGFuIGNsYXNzPTNEImJyMCI+ KDwvc3Bhbj52bV9wYXJhbXM8c3BhbiBjbGFzcz0zRCJicjAiPik8bzpwPQo+PC9vOnA+PC9zcGFu PjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj48c3BhbiBjbGFzcz0zRCJicjAiPiMjPG86cD48 L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0zRCJNc29Ob3JtYWwiPjxzcGFuIGNsYXNzPTNEImJy MCI+IyB0ZW1wIGlzID04NG90aGVyPTkzIHN0b3JhZ2UgZG89Cm1haW4sIE5GUyB2MzxvOnA+PC9v OnA+PC9zcGFuPjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj48c3BhbiBjbGFzcz0zRCJicjAi PlZNIHdpbGwgYmUgc3RpbGwgY3JlYXRlZCBvbiBzYW1lPQogc3RvcmFnZSBhcyBvcmlnaW5hbCBW TSwgbm8gbWF0dGVyIHdoYXQgZG9tYWluIEkgd2lsbCBkZWZpbmUgaW4gcGFyYW1zLi4uPG89Cjpw PjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PHNwYW4gY2xhc3M9M0Qi YnIwIj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+CjxwIGNsYXNzPTNEIk1zb05vcm1hbCI+PHNwYW4g bGFuZz0zRCJFTi1VUyI+QWxzbyB0cmllZCBvdGhlciB2YXJpYXRpb25zLCB1cz0KaW5nIHRlbXBs YXRlcywgZGlzayBwcm9maWxlcyBhbmQgc28gb24sIGJ1dCBub3RoaW5nIGhhcyBjaGFuZ2VkIHdo ZXJlIG5ldyBWPQpNIGlzIGNyZWF0ZWQuPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0z RCJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9M0QiRU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFu PjwvcD4KPHAgY2xhc3M9M0QiTXNvTm9ybWFsIj48c3BhbiBsYW5nPTNEIkVOLVVTIj5JIGtub3cg Y2xvbmluZyBpcyBub3QgaW50ZW5kZWQgPQpmb3IgYmFja3VwIHB1cnBvc2UsIGJ1dCBpdCBpcyB3 b3JrYXJvdW5kIHByb2JhYmx5IGhhbGYgb2YgT3ZpcnQgdXNlcnMgdXNlLjw9Cm86cD48L286cD48 L3NwYW4+PC9wPgo8cCBjbGFzcz0zRCJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9M0QiRU4tVVMiPklu IG15IGNhc2UsIGl0IGlzIG5vdCB2ZXJ5IHNtYXI9CnQgdG8gZG8gc25hcHNob3QgYW5kIGNyZWF0 ZSBWTSAoYWxsb2NhdGUgZGlzayBzcGFjZSwgZXRjKSBvbiBzYW1lIHN0b3JhZ2UgZD0Kb21haW4g d2hlcmUgdGhlcmUgaXMgYWxyZWFkeSBydW5uaW5nIGEgbG90IG9mIFZNcywgZW52aXJvbm1lbnQg aXMgYWxyZWFkeSBiPQp1c3kuPG86cD48L286cD48L3NwYW4+PC9wPgo8cCBjbGFzcz0zRCJNc29O b3JtYWwiPjxzcGFuIGxhbmc9M0QiRU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4K PHAgY2xhc3M9M0QiTXNvTm9ybWFsIj48c3BhbiBsYW5nPTNEIkVOLVVTIj5UaGFua3MgITxvOnA+ PC9vOnA+PC9zcGFuPjwvcD4KPC9kaXY+CjwvYm9keT4KPC9odG1sPgoKLS1fMDAwX0RCNVBSMDlN QjA0MjJFOTQ1QjUxOEE4OERBODFDMDc1OTk5QzAwREI1UFIwOU1CMDQyMmV1cnBfLS0K --===============6199482841140099126==--