From deepak.jagtap at maxta.com Wed Jun 21 20:02:39 2017 Content-Type: multipart/mixed; boundary="===============3773953160869392368==" MIME-Version: 1.0 From: Deepak Jagtap To: devel at ovirt.org Subject: Re: [ovirt-devel] Snapshots & clone support from datastore Date: Wed, 21 Jun 2017 19:28:44 +0000 Message-ID: In-Reply-To: CADgXf3z3bBmDuWWJUpOJTYZ_tdk+0DmGP15qPEq5O3e=7Y30TA@mail.gmail.com --===============3773953160869392368== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --_000_MWHPR11MB1663D3BF9B01DB6E1142AB1DEDDA0MWHPR11MB1663namp_ Content-Type: text/plain; charset=3D"us-ascii" Content-Transfer-Encoding: quoted-printable Hi Allon, I am trying to leverage snapshot capability of underlying filesystem. As per my understanding current snapshot works like this: Base Image(raw)--->snap1(qcow)->snap2(qcow), i.e after each snapshot vm sta= =3D rts writing on newly created qcow image. So in this case vm is going to do all new writes on snap2(qcow) voulme and = =3D will redirect read IOs to snap1 & Base image as required. But in my case snapshots created by the filesystem are read only and it's i= =3D n raw format. As a result after creating snapshot vm disk configuration won't change afte= =3D r taking snapshot but will continue doing writes on same base image. So snapshots will look like this: Base Image(raw)--->snap1(raw)->snap2(raw) Base Image will always remain writable, while the snapshots will remain rea= =3D d only raw format. Just wanted to confirm is this configurable so that vm continues referring= =3D base image after the snapshot instead of newly created qcow image? Thanks & Regards, Deepak ________________________________ From: Allon Mureinik Sent: Tuesday, June 20, 2017 7:59:03 PM To: Deepak Jagtap Cc: devel(a)ovirt.org Subject: Re: [ovirt-devel] Snapshots & clone support from datastore Not sure I understand the question. Could you give an example of what you m= =3D ean perhpas? On Tue, Jun 20, 2017 at 10:01 PM, Deepak Jagtap > wrote: Hi Allon, After going through current vdsm code base, noticed that after taking a sna= =3D pshot vm starts referring the newly created qcow image/volume. For internal snapshots which are not qcow is it configurable somehow so th= =3D at vm continues doing writes to same base image? Thanks & Regards, Deepak ________________________________ From: Deepak Jagtap Sent: Tuesday, June 6, 2017 3:37:03 PM To: Allon Mureinik Cc: devel(a)ovirt.org Subject: Re: [ovirt-devel] Snapshots & clone support from datastore Thanks Allon! Best Regards, Deepak ________________________________ From: Allon Mureinik > Sent: Tuesday, June 6, 2017 2:43:17 PM To: Deepak Jagtap Cc: devel(a)ovirt.org Subject: Re: [ovirt-devel] Snapshots & clone support from datastore Unfortunately, there's no such integration point at the moment. On Tue, Jun 6, 2017 at 5:57 AM, Deepak Jagtap > wrote: Hey Guys, I am newbie to ovirt, and wanted to confirm whats the best way to leverage = =3D snapshot, clone features provided by the datastore filesystem. I have a btrfs datastore exported and wanted use btrfs snapshots for vm sna= =3D pshot & clones. Does ovirt offers any hooks/APIs so that image snapshots are created by the= =3D filesystem? Thanks & Regards, Deepak _______________________________________________ Devel mailing list Devel(a)ovirt.org http://lists.ovirt.org/mailman/listinfo/devel --_000_MWHPR11MB1663D3BF9B01DB6E1142AB1DEDDA0MWHPR11MB1663namp_ Content-Type: text/html; charset=3D"us-ascii" Content-Transfer-Encoding: quoted-printable

Hi Allon,


I am trying to leverage snapshot  capability of underlying fil= =3D esystem.

As per my understanding current snaps= ho=3D t works like this:

Base Image(raw)--->snap1(qcow)->snap2(qcow), i.e after each s= =3D napshot vm starts writing on newly created qcow image.

So in this case vm is going to do all new writes on snap2(qcow) voulme a= =3D nd will redirect read IOs to snap1 & Base image as required.


But in my case snapshots created by the filesystem are read only and it'= =3D s in raw format.

As a result after creating snapshot vm disk configuration won't change a= =3D fter taking snapshot but will continue doing writes on same base image.

So snapshots will look like this:

Base Image(raw)--->snap1(raw)->snap2(raw)

Base Image will always remain writable, while the s= =3D napshots will remain read only raw format.


Just wanted to confirm is this configurable so that vm continues  r= =3D eferring base image after the snapshot instead of newly created qcow image?= =3D


Thanks & Regards,

Deepak




 


From: Allon Mureinik &l= t;am=3D ureini(a)redhat.com>
Sent: Tuesday, June 20, 2017 7:59:03 PM
To: Deepak Jagtap
Cc: devel(a)ovirt.org
Subject: Re: [ovirt-devel] Snapshots & clone support from datast= =3D ore
 
= Not =3D sure I understand the question. Could you give an example of what you = =3D mean perhpas?

On Tue, Jun 20, 2017 at 10:01 PM, Deepak Jagta= p =3D <deep= ak.jag=3D tap(a)maxta.com> wrote:

Hi Allon,


After going through current vdsm code base, noticed that after= =3D taking a snapshot vm starts referring the newly created qcow image/volume.= =3D

For internal snapshots which are not qcow  is it configurable = =3D somehow so that vm continues doing writes to same base image?


Thanks & Regards,

Deepak


From:<= /b> =3D Deepak Jagtap
Sent: Tuesday, June 6, 2017 3:37:03 PM
To: Allon Mureinik
Cc: devel= (a)ovirt=3D .org
Subject: Re: [ovirt-devel] Snapshots & clone support from datast= =3D ore
 

Thanks Allon!


Best Regards,

Deepak


From:<= /b> =3D Allon Mureinik <amureini(a)redhat.com>
Sent: Tuesday, June 6, 2017 2:43:17 PM
To: Deepak Jagtap
Cc: devel= (a)ovirt=3D .org
Subject: Re: [ovirt-devel] Snapshots & clone support from datast= =3D ore
 
= Unfo=3D rtunately, there's no such integration point at the moment.

On Tue, Jun 6, 2017 at 5:57 AM, Deepak Jagtap = <deep= ak.jag=3D tap(a)maxta.com> wrote:

Hey Guys,


I am newbie to ovirt, and wanted to confirm whats the best way to levera= =3D ge snapshot, clone features 

provided by the datastore filesystem.

I have a btrfs datastore exported and wanted use btrfs snapshots fo= =3D r vm snapshot & clones.

Does ovirt offers any hooks/APIs so that image snapshots are created by = =3D the filesystem?


Thanks & Regards,

Deepak

 


_______________________________________________
Devel mailing list
Devel(a)ovirt.or= g http://lists.ovirt.org/mailman/listinfo/devel<=3D br>


--_000_MWHPR11MB1663D3BF9B01DB6E1142AB1DEDDA0MWHPR11MB1663namp_-- --===============3773953160869392368== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" LS1fMDAwX01XSFBSMTFNQjE2NjNEM0JGOUIwMURCNkUxMTQyQUIxREVEREEwTVdIUFIxMU1CMTY2 M25hbXBfCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKCkhpIEFsbG9uLAoKCkkgYW0g dHJ5aW5nIHRvIGxldmVyYWdlIHNuYXBzaG90ICBjYXBhYmlsaXR5IG9mIHVuZGVybHlpbmcgZmls ZXN5c3RlbS4KCkFzIHBlciBteSB1bmRlcnN0YW5kaW5nIGN1cnJlbnQgc25hcHNob3Qgd29ya3Mg bGlrZSB0aGlzOgoKQmFzZSBJbWFnZShyYXcpLS0tPnNuYXAxKHFjb3cpLT5zbmFwMihxY293KSwg aS5lIGFmdGVyIGVhY2ggc25hcHNob3Qgdm0gc3RhPQpydHMgd3JpdGluZyBvbiBuZXdseSBjcmVh dGVkIHFjb3cgaW1hZ2UuCgpTbyBpbiB0aGlzIGNhc2Ugdm0gaXMgZ29pbmcgdG8gZG8gYWxsIG5l dyB3cml0ZXMgb24gc25hcDIocWNvdykgdm91bG1lIGFuZCA9CndpbGwgcmVkaXJlY3QgcmVhZCBJ T3MgdG8gc25hcDEgJiBCYXNlIGltYWdlIGFzIHJlcXVpcmVkLgoKCkJ1dCBpbiBteSBjYXNlIHNu YXBzaG90cyBjcmVhdGVkIGJ5IHRoZSBmaWxlc3lzdGVtIGFyZSByZWFkIG9ubHkgYW5kIGl0J3Mg aT0KbiByYXcgZm9ybWF0LgoKQXMgYSByZXN1bHQgYWZ0ZXIgY3JlYXRpbmcgc25hcHNob3Qgdm0g ZGlzayBjb25maWd1cmF0aW9uIHdvbid0IGNoYW5nZSBhZnRlPQpyIHRha2luZyBzbmFwc2hvdCBi dXQgd2lsbCBjb250aW51ZSBkb2luZyB3cml0ZXMgb24gc2FtZSBiYXNlIGltYWdlLgoKU28gc25h cHNob3RzIHdpbGwgbG9vayBsaWtlIHRoaXM6CgpCYXNlIEltYWdlKHJhdyktLS0+c25hcDEocmF3 KS0+c25hcDIocmF3KQoKQmFzZSBJbWFnZSB3aWxsIGFsd2F5cyByZW1haW4gd3JpdGFibGUsIHdo aWxlIHRoZSBzbmFwc2hvdHMgd2lsbCByZW1haW4gcmVhPQpkIG9ubHkgcmF3IGZvcm1hdC4KCgpK dXN0IHdhbnRlZCB0byBjb25maXJtIGlzIHRoaXMgY29uZmlndXJhYmxlIHNvIHRoYXQgdm0gY29u dGludWVzICByZWZlcnJpbmc9CiBiYXNlIGltYWdlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbnN0ZWFk IG9mIG5ld2x5IGNyZWF0ZWQgcWNvdyBpbWFnZT8KCgpUaGFua3MgJiBSZWdhcmRzLAoKRGVlcGFr CgoKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyb206IEFsbG9uIE11cmVp bmlrIDxhbXVyZWluaUByZWRoYXQuY29tPgpTZW50OiBUdWVzZGF5LCBKdW5lIDIwLCAyMDE3IDc6 NTk6MDMgUE0KVG86IERlZXBhayBKYWd0YXAKQ2M6IGRldmVsQG92aXJ0Lm9yZwpTdWJqZWN0OiBS ZTogW292aXJ0LWRldmVsXSBTbmFwc2hvdHMgJiBjbG9uZSBzdXBwb3J0IGZyb20gZGF0YXN0b3Jl CgpOb3Qgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHF1ZXN0aW9uLiBDb3VsZCB5b3UgZ2l2ZSBhbiBl eGFtcGxlIG9mIHdoYXQgeW91IG09CmVhbiBwZXJocGFzPwoKT24gVHVlLCBKdW4gMjAsIDIwMTcg YXQgMTA6MDEgUE0sIERlZXBhayBKYWd0YXAgPGRlZXBhay5qYWd0YXBAbWF4dGEuY29tPG1hPQpp bHRvOmRlZXBhay5qYWd0YXBAbWF4dGEuY29tPj4gd3JvdGU6CgpIaSBBbGxvbiwKCgpBZnRlciBn b2luZyB0aHJvdWdoIGN1cnJlbnQgdmRzbSBjb2RlIGJhc2UsIG5vdGljZWQgdGhhdCBhZnRlciB0 YWtpbmcgYSBzbmE9CnBzaG90IHZtIHN0YXJ0cyByZWZlcnJpbmcgdGhlIG5ld2x5IGNyZWF0ZWQg cWNvdyBpbWFnZS92b2x1bWUuCgpGb3IgaW50ZXJuYWwgc25hcHNob3RzIHdoaWNoIGFyZSBub3Qg cWNvdyAgaXMgaXQgY29uZmlndXJhYmxlIHNvbWVob3cgc28gdGg9CmF0IHZtIGNvbnRpbnVlcyBk b2luZyB3cml0ZXMgdG8gc2FtZSBiYXNlIGltYWdlPwoKClRoYW5rcyAmIFJlZ2FyZHMsCgpEZWVw YWsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyb206IERlZXBhayBKYWd0YXAK U2VudDogVHVlc2RheSwgSnVuZSA2LCAyMDE3IDM6Mzc6MDMgUE0KVG86IEFsbG9uIE11cmVpbmlr CkNjOiBkZXZlbEBvdmlydC5vcmc8bWFpbHRvOmRldmVsQG92aXJ0Lm9yZz4KU3ViamVjdDogUmU6 IFtvdmlydC1kZXZlbF0gU25hcHNob3RzICYgY2xvbmUgc3VwcG9ydCBmcm9tIGRhdGFzdG9yZQoK ClRoYW5rcyBBbGxvbiEKCgpCZXN0IFJlZ2FyZHMsCgpEZWVwYWsKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkZyb206IEFsbG9uIE11cmVpbmlrIDxhbXVyZWluaUByZWRoYXQuY29t PG1haWx0bzphbXVyZWluaUByZWRoYXQuY29tPj4KU2VudDogVHVlc2RheSwgSnVuZSA2LCAyMDE3 IDI6NDM6MTcgUE0KVG86IERlZXBhayBKYWd0YXAKQ2M6IGRldmVsQG92aXJ0Lm9yZzxtYWlsdG86 ZGV2ZWxAb3ZpcnQub3JnPgpTdWJqZWN0OiBSZTogW292aXJ0LWRldmVsXSBTbmFwc2hvdHMgJiBj bG9uZSBzdXBwb3J0IGZyb20gZGF0YXN0b3JlCgpVbmZvcnR1bmF0ZWx5LCB0aGVyZSdzIG5vIHN1 Y2ggaW50ZWdyYXRpb24gcG9pbnQgYXQgdGhlIG1vbWVudC4KCk9uIFR1ZSwgSnVuIDYsIDIwMTcg YXQgNTo1NyBBTSwgRGVlcGFrIEphZ3RhcCA8ZGVlcGFrLmphZ3RhcEBtYXh0YS5jb208bWFpbD0K dG86ZGVlcGFrLmphZ3RhcEBtYXh0YS5jb20+PiB3cm90ZToKCkhleSBHdXlzLAoKCkkgYW0gbmV3 YmllIHRvIG92aXJ0LCBhbmQgd2FudGVkIHRvIGNvbmZpcm0gd2hhdHMgdGhlIGJlc3Qgd2F5IHRv IGxldmVyYWdlID0Kc25hcHNob3QsIGNsb25lIGZlYXR1cmVzCgpwcm92aWRlZCBieSB0aGUgZGF0 YXN0b3JlIGZpbGVzeXN0ZW0uCgpJIGhhdmUgYSBidHJmcyBkYXRhc3RvcmUgZXhwb3J0ZWQgYW5k IHdhbnRlZCB1c2UgYnRyZnMgc25hcHNob3RzIGZvciB2bSBzbmE9CnBzaG90ICYgY2xvbmVzLgoK RG9lcyBvdmlydCBvZmZlcnMgYW55IGhvb2tzL0FQSXMgc28gdGhhdCBpbWFnZSBzbmFwc2hvdHMg YXJlIGNyZWF0ZWQgYnkgdGhlPQogZmlsZXN5c3RlbT8KCgpUaGFua3MgJiBSZWdhcmRzLAoKRGVl cGFrCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl dmVsIG1haWxpbmcgbGlzdApEZXZlbEBvdmlydC5vcmc8bWFpbHRvOkRldmVsQG92aXJ0Lm9yZz4K aHR0cDovL2xpc3RzLm92aXJ0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RldmVsCgoKCi0tXzAwMF9N V0hQUjExTUIxNjYzRDNCRjlCMDFEQjZFMTE0MkFCMURFRERBME1XSFBSMTFNQjE2NjNuYW1wXwpD b250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXMtYXNjaWkiCkNvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKCjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1l cXVpdj0zRCJDb250ZW50LVR5cGUiIGNvbnRlbnQ9M0QidGV4dC9odG1sOyBjaGFyc2V0PTNEdXMt YXNjaWkiPQo+CjwvaGVhZD4KPGJvZHk+CjxzdHlsZSB0eXBlPTNEInRleHQvY3NzIiBzdHlsZT0z RCJkaXNwbGF5Om5vbmU7Ij48IS0tIFAge21hcmdpbi10b3A6MDttYXJnaT0Kbi1ib3R0b206MDt9 IC0tPjwvc3R5bGU+CjxkaXYgaWQ9M0QiZGl2dGFnZGVmYXVsdHdyYXBwZXIiIHN0eWxlPTNEImZv bnQtc2l6ZToxMnB0O2NvbG9yOiMwMDAwMDA7Zm9udD0KLWZhbWlseTpDYWxpYnJpLEFyaWFsLEhl bHZldGljYSxzYW5zLXNlcmlmOyIgZGlyPTNEImx0ciI+CjxwPkhpIEFsbG9uLDwvcD4KPHA+PGJy Pgo8L3A+CjxwPkkgYW0mbmJzcDt0cnlpbmcgdG8gbGV2ZXJhZ2Ugc25hcHNob3QgJm5ic3A7Y2Fw YWJpbGl0eSBvZiB1bmRlcmx5aW5nIGZpbD0KZXN5c3RlbS48L3A+CjxwPjxzcGFuIHN0eWxlPTNE ImZvbnQtc2l6ZTogMTJwdDsiPkFzIHBlciBteSB1bmRlcnN0YW5kaW5nIGN1cnJlbnQgc25hcHNo bz0KdCZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0zRCJmb250LXNpemU6IDEycHQ7Ij48L3NwYW4+ PHNwYW4gc3R5bGU9M0QiZm9udC1zPQppemU6IDEycHQ7Ij53b3JrcyBsaWtlIHRoaXM6PC9zcGFu PjwvcD4KPHA+QmFzZSBJbWFnZShyYXcpLS0tJmd0O3NuYXAxKHFjb3cpLSZndDtzbmFwMihxY293 KSwgaS5lJm5ic3A7YWZ0ZXIgZWFjaCBzPQpuYXBzaG90IHZtIHN0YXJ0cyB3cml0aW5nIG9uIG5l d2x5IGNyZWF0ZWQgcWNvdyBpbWFnZS48L3A+CjxwPlNvIGluIHRoaXMgY2FzZSB2bSBpcyBnb2lu ZyB0byBkbyBhbGwgbmV3IHdyaXRlcyBvbiBzbmFwMihxY293KSB2b3VsbWUgYT0KbmQgd2lsbCBy ZWRpcmVjdCByZWFkJm5ic3A7SU9zIHRvIHNuYXAxICZhbXA7IEJhc2UgaW1hZ2UgYXMgcmVxdWly ZWQuPC9wPgo8cD48YnI+CjwvcD4KPHA+QnV0IGluIG15IGNhc2Ugc25hcHNob3RzIGNyZWF0ZWQg YnkgdGhlIGZpbGVzeXN0ZW0gYXJlIHJlYWQgb25seSBhbmQgaXQnPQpzIGluIHJhdyBmb3JtYXQu PC9wPgo8cD5BcyBhIHJlc3VsdCBhZnRlciBjcmVhdGluZyBzbmFwc2hvdCB2bSBkaXNrIGNvbmZp Z3VyYXRpb24gd29uJ3QgY2hhbmdlIGE9CmZ0ZXIgdGFraW5nIHNuYXBzaG90IGJ1dCB3aWxsIGNv bnRpbnVlIGRvaW5nIHdyaXRlcyBvbiBzYW1lIGJhc2UgaW1hZ2UuPC9wPgo8cD5TbyBzbmFwc2hv dHMgd2lsbCBsb29rIGxpa2UgdGhpczo8L3A+CjxwPjxzcGFuIHN0eWxlPTNEImZvbnQtZmFtaWx5 OiBDYWxpYnJpLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmLCBFbW9qaT0KRm9udCwgJnF1 b3Q7QXBwbGUgQ29sb3IgRW1vamkmcXVvdDssICZxdW90O1NlZ29lIFVJIEVtb2ppJnF1b3Q7LCBO b3RvQ29sb3JFPQptb2ppLCAmcXVvdDtTZWdvZSBVSSBTeW1ib2wmcXVvdDssICZxdW90O0FuZHJv aWQgRW1vamkmcXVvdDssIEVtb2ppU3ltYm9sczs9CiBmb250LXNpemU6IDE2cHg7Ij5CYXNlIElt YWdlKHJhdyktLS0mZ3Q7c25hcDEocmF3KS0mZ3Q7c25hcDIocmF3KTwvc3Bhbj48Yj0Kcj4KPC9w Pgo8cD48c3BhbiBzdHlsZT0zRCJmb250LWZhbWlseTogQ2FsaWJyaSwgQXJpYWwsIEhlbHZldGlj YSwgc2Fucy1zZXJpZiwgRW1vamk9CkZvbnQsICZxdW90O0FwcGxlIENvbG9yIEVtb2ppJnF1b3Q7 LCAmcXVvdDtTZWdvZSBVSSBFbW9qaSZxdW90OywgTm90b0NvbG9yRT0KbW9qaSwgJnF1b3Q7U2Vn b2UgVUkgU3ltYm9sJnF1b3Q7LCAmcXVvdDtBbmRyb2lkIEVtb2ppJnF1b3Q7LCBFbW9qaVN5bWJv bHM7PQogZm9udC1zaXplOiAxNnB4OyI+QmFzZSBJbWFnZSB3aWxsIGFsd2F5cyByZW1haW4gd3Jp dGFibGUsJm5ic3A7d2hpbGUgdGhlIHM9Cm5hcHNob3RzCiB3aWxsIHJlbWFpbiByZWFkIG9ubHkg cmF3IGZvcm1hdC48L3NwYW4+PC9wPgo8cD48YnI+CjwvcD4KPHA+SnVzdCB3YW50ZWQgdG8gY29u ZmlybSBpcyB0aGlzIGNvbmZpZ3VyYWJsZSBzbyB0aGF0IHZtIGNvbnRpbnVlcyAmbmJzcDtyPQpl ZmVycmluZyBiYXNlIGltYWdlIGFmdGVyIHRoZSBzbmFwc2hvdCBpbnN0ZWFkIG9mIG5ld2x5IGNy ZWF0ZWQgcWNvdyBpbWFnZT89CjwvcD4KPHA+PGJyPgo8L3A+CjxwPlRoYW5rcyAmYW1wOyBSZWdh cmRzLDwvcD4KPHA+RGVlcGFrPC9wPgo8cD48c3BhbiBzdHlsZT0zRCJmb250LWZhbWlseTogQ2Fs aWJyaSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiwgRW1vamk9CkZvbnQsICZxdW90O0Fw cGxlIENvbG9yIEVtb2ppJnF1b3Q7LCAmcXVvdDtTZWdvZSBVSSBFbW9qaSZxdW90OywgTm90b0Nv bG9yRT0KbW9qaSwgJnF1b3Q7U2Vnb2UgVUkgU3ltYm9sJnF1b3Q7LCAmcXVvdDtBbmRyb2lkIEVt b2ppJnF1b3Q7LCBFbW9qaVN5bWJvbHM7PQogZm9udC1zaXplOiAxNnB4OyI+PGJyPgo8L3NwYW4+ PC9wPgo8cD48c3BhbiBzdHlsZT0zRCJmb250LWZhbWlseTogQ2FsaWJyaSwgQXJpYWwsIEhlbHZl dGljYSwgc2Fucy1zZXJpZiwgRW1vamk9CkZvbnQsICZxdW90O0FwcGxlIENvbG9yIEVtb2ppJnF1 b3Q7LCAmcXVvdDtTZWdvZSBVSSBFbW9qaSZxdW90OywgTm90b0NvbG9yRT0KbW9qaSwgJnF1b3Q7 U2Vnb2UgVUkgU3ltYm9sJnF1b3Q7LCAmcXVvdDtBbmRyb2lkIEVtb2ppJnF1b3Q7LCBFbW9qaVN5 bWJvbHM7PQogZm9udC1zaXplOiAxNnB4OyI+PGJyPgo8L3NwYW4+PC9wPgo8cD48YnI+CjwvcD4K PHA+Jm5ic3A7PC9wPgo8L2Rpdj4KPGhyIHN0eWxlPTNEImRpc3BsYXk6aW5saW5lLWJsb2NrO3dp ZHRoOjk4JSIgdGFiaW5kZXg9M0QiLTEiPgo8ZGl2IGlkPTNEImRpdlJwbHlGd2RNc2ciIGRpcj0z RCJsdHIiPjxmb250IGZhY2U9M0QiQ2FsaWJyaSwgc2Fucy1zZXJpZiIgc3Q9CnlsZT0zRCJmb250 LXNpemU6MTFwdCIgY29sb3I9M0QiIzAwMDAwMCI+PGI+RnJvbTo8L2I+IEFsbG9uIE11cmVpbmlr ICZsdDthbT0KdXJlaW5pQHJlZGhhdC5jb20mZ3Q7PGJyPgo8Yj5TZW50OjwvYj4gVHVlc2RheSwg SnVuZSAyMCwgMjAxNyA3OjU5OjAzIFBNPGJyPgo8Yj5Ubzo8L2I+IERlZXBhayBKYWd0YXA8YnI+ CjxiPkNjOjwvYj4gZGV2ZWxAb3ZpcnQub3JnPGJyPgo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtvdmly dC1kZXZlbF0gU25hcHNob3RzICZhbXA7IGNsb25lIHN1cHBvcnQgZnJvbSBkYXRhc3Q9Cm9yZTwv Zm9udD4KPGRpdj4mbmJzcDs8L2Rpdj4KPC9kaXY+CjxkaXY+CjxkaXYgZGlyPTNEImx0ciI+Cjxk aXYgY2xhc3M9M0QiZ21haWxfZGVmYXVsdCIgc3R5bGU9M0QiZm9udC1mYW1pbHk6bW9ub3NwYWNl LG1vbm9zcGFjZSI+Tm90ID0Kc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHF1ZXN0aW9uLiBDb3VsZCB5 b3UgZ2l2ZSBhbiBleGFtcGxlJm5ic3A7b2Ygd2hhdCB5b3UgPQptZWFuIHBlcmhwYXM/PC9kaXY+ CjwvZGl2Pgo8ZGl2IGNsYXNzPTNEImdtYWlsX2V4dHJhIj48YnI+CjxkaXYgY2xhc3M9M0QiZ21h aWxfcXVvdGUiPk9uIFR1ZSwgSnVuIDIwLCAyMDE3IGF0IDEwOjAxIFBNLCBEZWVwYWsgSmFndGFw ID0KPHNwYW4gZGlyPTNEImx0ciI+CiZsdDs8YSBocmVmPTNEIm1haWx0bzpkZWVwYWsuamFndGFw QG1heHRhLmNvbSIgdGFyZ2V0PTNEIl9ibGFuayI+ZGVlcGFrLmphZz0KdGFwQG1heHRhLmNvbTwv YT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+CjxibG9ja3F1b3RlIGNsYXNzPTNEImdtYWlsX3F1b3Rl IiBzdHlsZT0zRCJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcD0KeCAjY2NjIHNvbGlk O3BhZGRpbmctbGVmdDoxZXgiPgo8ZGl2Pgo8ZGl2IGlkPTNEIm1fNTg5MTkzODc0MDcyMzgzNzEy N2RpdnRhZ2RlZmF1bHR3cmFwcGVyIiBzdHlsZT0zRCJmb250LXNpemU6MTI9CnB0O2NvbG9yOiMw MDAwMDA7Zm9udC1mYW1pbHk6Q2FsaWJyaSxBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZGly PTNEImx0cj0KIj4KPHA+SGkgQWxsb24sPC9wPgo8cD48YnI+CjwvcD4KPHA+QWZ0ZXIgZ29pbmcg dGhyb3VnaCZuYnNwO2N1cnJlbnQgdmRzbSZuYnNwO2NvZGUgYmFzZSwgbm90aWNlZCB0aGF0IGFm dGVyPQogdGFraW5nIGEgc25hcHNob3Qgdm0gc3RhcnRzIHJlZmVycmluZyB0aGUgbmV3bHkgY3Jl YXRlZCBxY293IGltYWdlL3ZvbHVtZS49CjwvcD4KPHA+Rm9yIGludGVybmFsIHNuYXBzaG90cyB3 aGljaCBhcmUgbm90IHFjb3cgJm5ic3A7aXMgaXQmbmJzcDtjb25maWd1cmFibGUgPQpzb21laG93 Jm5ic3A7c28gdGhhdCB2bSBjb250aW51ZXMgZG9pbmcgd3JpdGVzIHRvIHNhbWUgYmFzZSBpbWFn ZT88L3A+CjxwPjxicj4KPC9wPgo8cD5UaGFua3MgJmFtcDsgUmVnYXJkcyw8L3A+CjxwPkRlZXBh azwvcD4KPC9kaXY+CjxociBzdHlsZT0zRCJkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo5OCUi Pgo8ZGl2IGlkPTNEIm1fNTg5MTkzODc0MDcyMzgzNzEyN2RpdlJwbHlGd2RNc2ciIGRpcj0zRCJs dHIiPjxmb250IGZhY2U9M0QiQ2E9CmxpYnJpLCBzYW5zLXNlcmlmIiBzdHlsZT0zRCJmb250LXNp emU6MTFwdCIgY29sb3I9M0QiIzAwMDAwMCI+PGI+RnJvbTo8L2I+ID0KRGVlcGFrIEphZ3RhcDxi cj4KPGI+U2VudDo8L2I+IFR1ZXNkYXksIEp1bmUgNiwgMjAxNyAzOjM3OjAzIFBNPGJyPgo8Yj5U bzo8L2I+IEFsbG9uIE11cmVpbmlrPHNwYW4gY2xhc3M9M0QiIj48YnI+CjxiPkNjOjwvYj4gPGEg aHJlZj0zRCJtYWlsdG86ZGV2ZWxAb3ZpcnQub3JnIiB0YXJnZXQ9M0QiX2JsYW5rIj5kZXZlbEBv dmlydD0KLm9yZzwvYT48YnI+CjxiPlN1YmplY3Q6PC9iPiBSZTogW292aXJ0LWRldmVsXSBTbmFw c2hvdHMgJmFtcDsgY2xvbmUgc3VwcG9ydCBmcm9tIGRhdGFzdD0Kb3JlPC9zcGFuPjwvZm9udD4K PGRpdj4mbmJzcDs8L2Rpdj4KPC9kaXY+CjxzcGFuIGNsYXNzPTNEIiI+CjxkaXY+CjxkaXYgaWQ9 M0QibV81ODkxOTM4NzQwNzIzODM3MTI3ZGl2dGFnZGVmYXVsdHdyYXBwZXIiIHN0eWxlPTNEImZv bnQtc2l6ZToxMj0KcHQ7Y29sb3I6IzAwMDAwMDtmb250LWZhbWlseTpDYWxpYnJpLEFyaWFsLEhl bHZldGljYSxzYW5zLXNlcmlmIiBkaXI9M0QibHRyPQoiPgo8cD5UaGFua3MgQWxsb24hPC9wPgo8 cD48YnI+CjwvcD4KPHA+QmVzdCBSZWdhcmRzLDwvcD4KPHA+RGVlcGFrPC9wPgo8L2Rpdj4KPGhy IHN0eWxlPTNEImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjk4JSI+CjxkaXYgaWQ9M0QibV81 ODkxOTM4NzQwNzIzODM3MTI3ZGl2UnBseUZ3ZE1zZyIgZGlyPTNEImx0ciI+PGZvbnQgZmFjZT0z RCJDYT0KbGlicmksIHNhbnMtc2VyaWYiIHN0eWxlPTNEImZvbnQtc2l6ZToxMXB0IiBjb2xvcj0z RCIjMDAwMDAwIj48Yj5Gcm9tOjwvYj4gPQpBbGxvbiBNdXJlaW5payAmbHQ7PGEgaHJlZj0zRCJt YWlsdG86YW11cmVpbmlAcmVkaGF0LmNvbSIgdGFyZ2V0PTNEIl9ibGFuayI9Cj5hbXVyZWluaUBy ZWRoYXQuY29tPC9hPiZndDs8YnI+CjxiPlNlbnQ6PC9iPiBUdWVzZGF5LCBKdW5lIDYsIDIwMTcg Mjo0MzoxNyBQTTxicj4KPGI+VG86PC9iPiBEZWVwYWsgSmFndGFwPGJyPgo8Yj5DYzo8L2I+IDxh IGhyZWY9M0QibWFpbHRvOmRldmVsQG92aXJ0Lm9yZyIgdGFyZ2V0PTNEIl9ibGFuayI+ZGV2ZWxA b3ZpcnQ9Ci5vcmc8L2E+PGJyPgo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtvdmlydC1kZXZlbF0gU25h cHNob3RzICZhbXA7IGNsb25lIHN1cHBvcnQgZnJvbSBkYXRhc3Q9Cm9yZTwvZm9udD4KPGRpdj4m bmJzcDs8L2Rpdj4KPC9kaXY+CjxkaXY+CjxkaXYgZGlyPTNEImx0ciI+CjxkaXYgY2xhc3M9M0Qi Z21haWxfZGVmYXVsdCIgc3R5bGU9M0QiZm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZSI+ VW5mbz0KcnR1bmF0ZWx5LCB0aGVyZSdzIG5vIHN1Y2ggaW50ZWdyYXRpb24gcG9pbnQgYXQgdGhl IG1vbWVudC48L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9M0QiZ21haWxfZXh0cmEiPjxicj4KPGRp diBjbGFzcz0zRCJnbWFpbF9xdW90ZSI+T24gVHVlLCBKdW4gNiwgMjAxNyBhdCA1OjU3IEFNLCBE ZWVwYWsgSmFndGFwIDxzPQpwYW4gZGlyPTNEImx0ciI+CiZsdDs8YSBocmVmPTNEIm1haWx0bzpk ZWVwYWsuamFndGFwQG1heHRhLmNvbSIgdGFyZ2V0PTNEIl9ibGFuayI+ZGVlcGFrLmphZz0KdGFw QG1heHRhLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+CjxibG9ja3F1b3RlIGNsYXNzPTNE ImdtYWlsX3F1b3RlIiBzdHlsZT0zRCJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcD0K eCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPgo8ZGl2IGRpcj0zRCJsdHIiPgo8ZGl2IGlk PTNEIm1fNTg5MTkzODc0MDcyMzgzNzEyN21fLTQ4NzMyNDYwOTUxNzM5NjgyMjRkaXZ0YWdkZWZh dWx0d3JhcHBlciI9CiBzdHlsZT0zRCJmb250LXNpemU6MTJwdDtjb2xvcjojMDAwMDAwO2ZvbnQt ZmFtaWx5OkNhbGlicmksQXJpYWwsSGVsdmV0aWNhLD0Kc2Fucy1zZXJpZiIgZGlyPTNEImx0ciI+ CjxwPkhleSBHdXlzLDwvcD4KPHA+PGJyPgo8L3A+CjxwPkkgYW0gbmV3YmllIHRvIG92aXJ0LCBh bmQgd2FudGVkIHRvIGNvbmZpcm0gd2hhdHMgdGhlIGJlc3Qgd2F5IHRvIGxldmVyYT0KZ2Ugc25h cHNob3QsIGNsb25lIGZlYXR1cmVzJm5ic3A7PC9wPgo8cD5wcm92aWRlZCBieSB0aGUgZGF0YXN0 b3JlIGZpbGVzeXN0ZW0uPC9wPgo8cD5JIGhhdmUgYSBidHJmcyBkYXRhc3RvcmUgZXhwb3J0ZWQm bmJzcDthbmQgd2FudGVkIHVzZSBidHJmcyBzbmFwc2hvdHMgZm89CnIgdm0gc25hcHNob3QgJmFt cDsgY2xvbmVzLjwvcD4KPHA+RG9lcyBvdmlydCBvZmZlcnMgYW55IGhvb2tzL0FQSXMgc28gdGhh dCBpbWFnZSBzbmFwc2hvdHMgYXJlIGNyZWF0ZWQgYnkgPQp0aGUgZmlsZXN5c3RlbT88L3A+Cjxw Pjxicj4KPC9wPgo8cD5UaGFua3MgJmFtcDsgUmVnYXJkcyw8L3A+CjxwPkRlZXBhazwvcD4KPHA+ Jm5ic3A7PC9wPgo8L2Rpdj4KPC9kaXY+Cjxicj4KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fPHdicj5fX19fX19fX19fX19fX19fXzxicj4KRGV2ZWwgbWFpbGluZyBsaXN0PGJyPgo8YSBo cmVmPTNEIm1haWx0bzpEZXZlbEBvdmlydC5vcmciIHRhcmdldD0zRCJfYmxhbmsiPkRldmVsQG92 aXJ0Lm9yZzwvYT48YnI9Cj4KPGEgaHJlZj0zRCJodHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxt YW4vbGlzdGluZm8vZGV2ZWwiIHJlbD0zRCJub3JlZmVycmVyPQoiIHRhcmdldD0zRCJfYmxhbmsi Pmh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbjx3YnI+L2xpc3RpbmZvL2RldmVsPC9hPjw9 CmJyPgo8L2Jsb2NrcXVvdGU+CjwvZGl2Pgo8YnI+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+Cjwvc3Bh bj48L2Rpdj4KPC9ibG9ja3F1b3RlPgo8L2Rpdj4KPGJyPgo8L2Rpdj4KPC9kaXY+CjwvYm9keT4K PC9odG1sPgoKLS1fMDAwX01XSFBSMTFNQjE2NjNEM0JGOUIwMURCNkUxMTQyQUIxREVEREEwTVdI UFIxMU1CMTY2M25hbXBfLS0K --===============3773953160869392368==--