From yzaslavs at redhat.com Sun May 12 05:53:01 2013 Content-Type: multipart/mixed; boundary="===============6557773343439921506==" MIME-Version: 1.0 From: Yair Zaslavsky To: devel at ovirt.org Subject: Re: [Engine-devel] What type of DB inheritance to use? Date: Sun, 12 May 2013 05:53:01 -0400 Message-ID: <176765088.119212.1368352381011.JavaMail.root@redhat.com> In-Reply-To: 1682384155.165721.1368351734157.JavaMail.root@redhat.com --===============6557773343439921506== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable ------=3D_Part_119211_1477841530.1368352381010 Content-Type: text/plain; charset=3Dutf-8 Content-Transfer-Encoding: 7bit ----- Original Message ----- > From: "Mike Kolesnik" > To: "engine-devel" > Sent: Sunday, May 12, 2013 12:42:14 PM > Subject: [Engine-devel] What type of DB inheritance to use? > Hi All, > I would like to have your opinions on which inheritance type to use in the > DB. > We are adding an "external provider" entity to the system which will be a= ble > to provide various resources (networks, hosts, etc). > These providers will be distinguishable by "type". > The basic definition of a provider contains: > * name > * description > * url > * type > Some providers might need additional properties such as: > * user > * password > In Java this is easily represented by inheritance. > In the DB however, there are 3 approaches that we can take: > 1. No inheritance. This means that each type will wit in his own table, w= ith > no relation or re-use. > 2. Single table inheritance. All types sit in a single table, and each has > his corresponding columns. You forgot to mention discriminator column at option 2 (how are you going t= o differ between sub types) which should be indexed. = > 1. > 2. Multiple table inheritance. Each type sists in his own table, where th= e PK > is FK for the most basic table (providers). > Pros for each approach: > 1. None that I can think of. > 2. No joins: Better performance Easier for developer to see the DB info > Facilitate column reuse > 3. Constraints can be set on each column > Cons for each approach: > 1. No reuse of DB entities + no compliance for column types Most cumberso= me > to query all providers > 2. Can't put some constraints on non-base columns (esp. not null) > 3. Joins are needed - opposite of the pros of 2 > 1. > From personal experience, I find #2 to be better and easier to work with & > maintain. I think it really depends on the use-case, but I also had better experience= with 2. = > What are your thoughts? > Regards, > Mike > _______________________________________________ > Engine-devel mailing list > Engine-devel(a)ovirt.org > http://lists.ovirt.org/mailman/listinfo/engine-devel ------=3D_Part_119211_1477841530.1368352381010 Content-Type: text/html; charset=3Dutf-8 Content-Transfer-Encoding: quoted-printable



<=3D blockquote style=3D3D"border-left:2px solid #1010FF;margin-left:5px;padding= -l=3D eft:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:non= =3D e;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">From: "Mik= =3D e Kolesnik" <mkolesni(a)redhat.com>
To: "engine-devel" <= en=3D gine-devel(a)ovirt.org>
Sent: Sunday, May 12, 2013 12:42:14 PM= Subject: [Engine-devel] What type of DB inheritance to use?

Hi All,

= =3D
I would like to have your opinions on which inheritance type to use in= =3D the DB.
We are adding an "external provider" entity to the s= =3D ystem which will be able to provide various resources (networks, hosts, etc= =3D ).

These providers will be distinguishable by = =3D "type".
The basic definition of a provider contains:
  • name
  • description
  • url
  • type
= =3D Some providers might need additional properties such as:
    = =3D
  • user
  • password
In Java this is easily repr= =3D esented by inheritance.

In the DB however, the= =3D re are 3 approaches that we can take:
  1. No inheritance.= =3D
    This means that each type will wit in his own table, with no relation o= =3D r re-use.
  2. Single table inheritance.
    All types sit in a singl= =3D e table, and each has his corresponding columns.
You forgot to mention discriminator column  a= =3D t option 2 (how are you going to differ between sub types) which should be = =3D indexed.

  1. Multiple table = =3D inheritance.
    Each type sists in his own table, where the PK is FK for th= =3D e most basic table (providers).

Pros for e= =3D ach approach:
  1. None that I can think of.
  2. N= =3D o joins:
        Better performance
       = =3D ; Easier for developer to see the DB info
        F= =3D acilitate column reuse
  3. Constraints can be set on each column
Cons for each approach:
  1. No reuse of DB entities + no compliance for column types
    Most= =3D cumbersome to query all providers
  2. Can't put some constraints o= =3D n non-base columns (esp. not null)
  3. Joins are needed - opposite = =3D of the pros of 2
  1. <= =3D br>
From personal experience, I find #2 to be better and easi= =3D er to work with & maintain.
I think = =3D it really depends on the use-case, but I also had better experience with 2.= =3D


What are your thoug= =3D hts?

Regards,
Mike

= =3D

_______________________________________________
Engine-d= =3D evel mailing list
Engine-devel(a)ovirt.org
http://lists.ovirt.org/mai= lm=3D an/listinfo/engine-devel

------=3D_Part_119211_1477841530.1368352381010-- --===============6557773343439921506== Content-Type: multipart/alternative MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.bin" LS0tLS0tPV9QYXJ0XzExOTIxMV8xNDc3ODQxNTMwLjEzNjgzNTIzODEwMTAKQ29udGVudC1UeXBl OiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdi aXQKCi0tLS0tIE9yaWdpbmFsIE1lc3NhZ2UgLS0tLS0KCj4gRnJvbTogIk1pa2UgS29sZXNuaWsi IDxta29sZXNuaUByZWRoYXQuY29tPgo+IFRvOiAiZW5naW5lLWRldmVsIiA8ZW5naW5lLWRldmVs QG92aXJ0Lm9yZz4KPiBTZW50OiBTdW5kYXksIE1heSAxMiwgMjAxMyAxMjo0MjoxNCBQTQo+IFN1 YmplY3Q6IFtFbmdpbmUtZGV2ZWxdIFdoYXQgdHlwZSBvZiBEQiBpbmhlcml0YW5jZSB0byB1c2U/ Cgo+IEhpIEFsbCwKCj4gSSB3b3VsZCBsaWtlIHRvIGhhdmUgeW91ciBvcGluaW9ucyBvbiB3aGlj aCBpbmhlcml0YW5jZSB0eXBlIHRvIHVzZSBpbiB0aGUKPiBEQi4KPiBXZSBhcmUgYWRkaW5nIGFu ICJleHRlcm5hbCBwcm92aWRlciIgZW50aXR5IHRvIHRoZSBzeXN0ZW0gd2hpY2ggd2lsbCBiZSBh YmxlCj4gdG8gcHJvdmlkZSB2YXJpb3VzIHJlc291cmNlcyAobmV0d29ya3MsIGhvc3RzLCBldGMp LgoKPiBUaGVzZSBwcm92aWRlcnMgd2lsbCBiZSBkaXN0aW5ndWlzaGFibGUgYnkgInR5cGUiLgo+ IFRoZSBiYXNpYyBkZWZpbml0aW9uIG9mIGEgcHJvdmlkZXIgY29udGFpbnM6Cgo+ICogbmFtZQo+ ICogZGVzY3JpcHRpb24KPiAqIHVybAo+ICogdHlwZQoKPiBTb21lIHByb3ZpZGVycyBtaWdodCBu ZWVkIGFkZGl0aW9uYWwgcHJvcGVydGllcyBzdWNoIGFzOgoKPiAqIHVzZXIKPiAqIHBhc3N3b3Jk Cgo+IEluIEphdmEgdGhpcyBpcyBlYXNpbHkgcmVwcmVzZW50ZWQgYnkgaW5oZXJpdGFuY2UuCgo+ IEluIHRoZSBEQiBob3dldmVyLCB0aGVyZSBhcmUgMyBhcHByb2FjaGVzIHRoYXQgd2UgY2FuIHRh a2U6Cgo+IDEuIE5vIGluaGVyaXRhbmNlLiBUaGlzIG1lYW5zIHRoYXQgZWFjaCB0eXBlIHdpbGwg d2l0IGluIGhpcyBvd24gdGFibGUsIHdpdGgKPiBubyByZWxhdGlvbiBvciByZS11c2UuCj4gMi4g U2luZ2xlIHRhYmxlIGluaGVyaXRhbmNlLiBBbGwgdHlwZXMgc2l0IGluIGEgc2luZ2xlIHRhYmxl LCBhbmQgZWFjaCBoYXMKPiBoaXMgY29ycmVzcG9uZGluZyBjb2x1bW5zLgoKWW91IGZvcmdvdCB0 byBtZW50aW9uIGRpc2NyaW1pbmF0b3IgY29sdW1uIGF0IG9wdGlvbiAyIChob3cgYXJlIHlvdSBn b2luZyB0byBkaWZmZXIgYmV0d2VlbiBzdWIgdHlwZXMpIHdoaWNoIHNob3VsZCBiZSBpbmRleGVk LiAKCj4gMS4KPiAyLiBNdWx0aXBsZSB0YWJsZSBpbmhlcml0YW5jZS4gRWFjaCB0eXBlIHNpc3Rz IGluIGhpcyBvd24gdGFibGUsIHdoZXJlIHRoZSBQSwo+IGlzIEZLIGZvciB0aGUgbW9zdCBiYXNp YyB0YWJsZSAocHJvdmlkZXJzKS4KCj4gUHJvcyBmb3IgZWFjaCBhcHByb2FjaDoKCj4gMS4gTm9u ZSB0aGF0IEkgY2FuIHRoaW5rIG9mLgo+IDIuIE5vIGpvaW5zOiBCZXR0ZXIgcGVyZm9ybWFuY2Ug RWFzaWVyIGZvciBkZXZlbG9wZXIgdG8gc2VlIHRoZSBEQiBpbmZvCj4gRmFjaWxpdGF0ZSBjb2x1 bW4gcmV1c2UKPiAzLiBDb25zdHJhaW50cyBjYW4gYmUgc2V0IG9uIGVhY2ggY29sdW1uCj4gQ29u cyBmb3IgZWFjaCBhcHByb2FjaDoKCj4gMS4gTm8gcmV1c2Ugb2YgREIgZW50aXRpZXMgKyBubyBj b21wbGlhbmNlIGZvciBjb2x1bW4gdHlwZXMgTW9zdCBjdW1iZXJzb21lCj4gdG8gcXVlcnkgYWxs IHByb3ZpZGVycwo+IDIuIENhbid0IHB1dCBzb21lIGNvbnN0cmFpbnRzIG9uIG5vbi1iYXNlIGNv bHVtbnMgKGVzcC4gbm90IG51bGwpCj4gMy4gSm9pbnMgYXJlIG5lZWRlZCAtIG9wcG9zaXRlIG9m IHRoZSBwcm9zIG9mIDIKCj4gMS4KCj4gRnJvbSBwZXJzb25hbCBleHBlcmllbmNlLCBJIGZpbmQg IzIgdG8gYmUgYmV0dGVyIGFuZCBlYXNpZXIgdG8gd29yayB3aXRoICYKPiBtYWludGFpbi4KCkkg dGhpbmsgaXQgcmVhbGx5IGRlcGVuZHMgb24gdGhlIHVzZS1jYXNlLCBidXQgSSBhbHNvIGhhZCBi ZXR0ZXIgZXhwZXJpZW5jZSB3aXRoIDIuIAoKPiBXaGF0IGFyZSB5b3VyIHRob3VnaHRzPwoKPiBS ZWdhcmRzLAo+IE1pa2UKCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPiBFbmdpbmUtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gRW5naW5lLWRldmVsQG92aXJ0 Lm9yZwo+IGh0dHA6Ly9saXN0cy5vdmlydC5vcmcvbWFpbG1hbi9saXN0aW5mby9lbmdpbmUtZGV2 ZWwKCi0tLS0tLT1fUGFydF8xMTkyMTFfMTQ3Nzg0MTUzMC4xMzY4MzUyMzgxMDEwCkNvbnRlbnQt VHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6 IHF1b3RlZC1wcmludGFibGUKCjxodG1sPjxib2R5PjxkaXYgc3R5bGU9M0QiZm9udC1mYW1pbHk6 IHRpbWVzIG5ldyByb21hbiwgbmV3IHlvcmssIHRpbWVzLCBzZT0KcmlmOyBmb250LXNpemU6IDEy cHQ7IGNvbG9yOiAjMDAwMDAwIj48YnI+PGRpdj48YnI+PC9kaXY+PGhyIGlkPTNEInp3Y2hyIj48 PQpibG9ja3F1b3RlIHN0eWxlPTNEImJvcmRlci1sZWZ0OjJweCBzb2xpZCAjMTAxMEZGO21hcmdp bi1sZWZ0OjVweDtwYWRkaW5nLWw9CmVmdDo1cHg7Y29sb3I6IzAwMDtmb250LXdlaWdodDpub3Jt YWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbj0KZTtmb250LWZhbWlseTpI ZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTJwdDsiPjxiPkZyb206IDwvYj4i TWlrPQplIEtvbGVzbmlrIiAmbHQ7bWtvbGVzbmlAcmVkaGF0LmNvbSZndDs8YnI+PGI+VG86IDwv Yj4iZW5naW5lLWRldmVsIiAmbHQ7ZW49CmdpbmUtZGV2ZWxAb3ZpcnQub3JnJmd0Ozxicj48Yj5T ZW50OiA8L2I+U3VuZGF5LCBNYXkgMTIsIDIwMTMgMTI6NDI6MTQgUE08Yj0Kcj48Yj5TdWJqZWN0 OiA8L2I+W0VuZ2luZS1kZXZlbF0gV2hhdCB0eXBlIG9mIERCIGluaGVyaXRhbmNlIHRvIHVzZT88 YnI+PGRpPQp2Pjxicj48L2Rpdj48ZGl2IHN0eWxlPTNEImZvbnQtZmFtaWx5OiB0aW1lcyBuZXcg cm9tYW4sIG5ldyB5b3JrLCB0aW1lcywgc2U9CnJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjog IzAwMDAwMCI+PGRpdj5IaSBBbGwsPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2Pj0KPGRpdj5JIHdv dWxkIGxpa2UgdG8gaGF2ZSB5b3VyIG9waW5pb25zIG9uIHdoaWNoIGluaGVyaXRhbmNlIHR5cGUg dG8gdXNlIGluPQogdGhlIERCLjxicj48L2Rpdj48ZGl2PldlIGFyZSBhZGRpbmcgYW4gImV4dGVy bmFsIHByb3ZpZGVyIiBlbnRpdHkgdG8gdGhlIHM9CnlzdGVtIHdoaWNoIHdpbGwgYmUgYWJsZSB0 byBwcm92aWRlIHZhcmlvdXMgcmVzb3VyY2VzIChuZXR3b3JrcywgaG9zdHMsIGV0Yz0KKS48YnI+ PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGVzZSBwcm92aWRlcnMgd2lsbCBiZSBkaXN0aW5n dWlzaGFibGUgYnkgPQoidHlwZSIuPGJyPjwvZGl2PjxkaXY+VGhlIGJhc2ljIGRlZmluaXRpb24g b2YgYSBwcm92aWRlciBjb250YWluczo8L2Rpdj48ZGk9CnY+PHVsPjxsaT4gbmFtZTwvbGk+PGxp PmRlc2NyaXB0aW9uPC9saT48bGk+dXJsPC9saT48bGk+dHlwZTwvbGk+PC91bD48ZGl2Pj0KU29t ZSBwcm92aWRlcnMgbWlnaHQgbmVlZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgc3VjaCBhczo8YnI+ PC9kaXY+PGRpdj48dWw+PQo8bGk+dXNlcjxicj48L2xpPjxsaT5wYXNzd29yZDxicj48L2xpPjwv dWw+PGRpdj5JbiBKYXZhIHRoaXMgaXMgZWFzaWx5IHJlcHI9CmVzZW50ZWQgYnkgaW5oZXJpdGFu Y2UuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SW4gdGhlIERCIGhvd2V2ZXIsIHRoZT0K cmUgYXJlIDMgYXBwcm9hY2hlcyB0aGF0IHdlIGNhbiB0YWtlOjxicj48L2Rpdj48ZGl2PjxvbD48 bGk+Tm8gaW5oZXJpdGFuY2UuPQo8YnI+VGhpcyBtZWFucyB0aGF0IGVhY2ggdHlwZSB3aWxsIHdp dCBpbiBoaXMgb3duIHRhYmxlLCB3aXRoIG5vIHJlbGF0aW9uIG89CnIgcmUtdXNlLjxicj48L2xp PjxsaT5TaW5nbGUgdGFibGUgaW5oZXJpdGFuY2UuPGJyPkFsbCB0eXBlcyBzaXQgaW4gYSBzaW5n bD0KZSB0YWJsZSwgYW5kIGVhY2ggaGFzIGhpcyBjb3JyZXNwb25kaW5nIGNvbHVtbnMuPC9saT48 L29sPjwvZGl2PjwvZGl2PjwvZGl2PQo+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+WW91IGZvcmdv dCB0byBtZW50aW9uIGRpc2NyaW1pbmF0b3IgY29sdW1uICZuYnNwO2E9CnQgb3B0aW9uIDIgKGhv dyBhcmUgeW91IGdvaW5nIHRvIGRpZmZlciBiZXR3ZWVuIHN1YiB0eXBlcykgd2hpY2ggc2hvdWxk IGJlID0KaW5kZXhlZC48L2Rpdj48YmxvY2txdW90ZSBzdHlsZT0zRCJib3JkZXItbGVmdDoycHgg c29saWQgIzEwMTBGRjttYXJnaW4tbGVmPQp0OjVweDtwYWRkaW5nLWxlZnQ6NXB4O2NvbG9yOiMw MDA7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQ9Ci1kZWNvcmF0aW9u Om5vbmU7Zm9udC1mYW1pbHk6SGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEy cHQ7Ij48ZD0KaXYgc3R5bGU9M0QiZm9udC1mYW1pbHk6IHRpbWVzIG5ldyByb21hbiwgbmV3IHlv cmssIHRpbWVzLCBzZXJpZjsgZm9udC1zaXplPQo6IDEycHQ7IGNvbG9yOiAjMDAwMDAwIj48ZGl2 PjxkaXY+PGRpdj48b2w+PGxpPjxicj48L2xpPjxsaT5NdWx0aXBsZSB0YWJsZSA9CmluaGVyaXRh bmNlLjxicj5FYWNoIHR5cGUgc2lzdHMgaW4gaGlzIG93biB0YWJsZSwgd2hlcmUgdGhlIFBLIGlz IEZLIGZvciB0aD0KZSBtb3N0IGJhc2ljIHRhYmxlIChwcm92aWRlcnMpLjxicj48L2xpPjwvb2w+ PGRpdj48YnI+PC9kaXY+PGRpdj5Qcm9zIGZvciBlPQphY2ggYXBwcm9hY2g6PGJyPjwvZGl2Pjxk aXY+PG9sPjxsaT5Ob25lIHRoYXQgSSBjYW4gdGhpbmsgb2YuPGJyPjwvbGk+PGxpPk49Cm8gam9p bnM6PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0JldHRlciBwZXJmb3JtYW5jZTxicj4mbmJz cDsmbmJzcDsmbmJzcD0KOyZuYnNwO0Vhc2llciBmb3IgZGV2ZWxvcGVyIHRvIHNlZSB0aGUgREIg aW5mbzxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGPQphY2lsaXRhdGUgY29sdW1uIHJldXNl PGJyPjwvbGk+PGxpPkNvbnN0cmFpbnRzIGNhbiBiZSBzZXQgb24gZWFjaCBjb2x1bW48YnI9Cj48 L2xpPjwvb2w+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdj5Db25zIGZvciBlYWNoIGFwcHJv YWNoOjxicj48L2Rpdj48ZD0KaXY+PG9sPjxsaT5ObyByZXVzZSBvZiBEQiBlbnRpdGllcyArIG5v IGNvbXBsaWFuY2UgZm9yIGNvbHVtbiB0eXBlczxicj5Nb3N0PQogY3VtYmVyc29tZSB0byBxdWVy eSBhbGwgcHJvdmlkZXJzPGJyPjwvbGk+PGxpPkNhbid0IHB1dCBzb21lIGNvbnN0cmFpbnRzIG89 Cm4gbm9uLWJhc2UgY29sdW1ucyAoZXNwLiBub3QgbnVsbCk8YnI+PC9saT48bGk+Sm9pbnMgYXJl IG5lZWRlZCAtIG9wcG9zaXRlID0Kb2YgdGhlIHByb3Mgb2YgMjwvbGk+PC9vbD48L2Rpdj48L2Rp dj48L2Jsb2NrcXVvdGU+PGJsb2NrcXVvdGUgc3R5bGU9M0QiYm9yPQpkZXItbGVmdDoycHggc29s aWQgIzEwMTBGRjttYXJnaW4tbGVmdDo1cHg7cGFkZGluZy1sZWZ0OjVweDtjb2xvcjojMDAwO2Zv bnQ9Ci13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25l O2ZvbnQtZmFtaWx5OkhlbHZldGljYT0KLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHQ7 Ij48ZGl2IHN0eWxlPTNEImZvbnQtZmFtaWx5OiB0aW1lcyBuZXcgcm9tPQphbiwgbmV3IHlvcmss IHRpbWVzLCBzZXJpZjsgZm9udC1zaXplOiAxMnB0OyBjb2xvcjogIzAwMDAwMCI+PGRpdj48b2w+ PGxpPjw9CmJyPjwvbGk+PC9vbD48ZGl2PkZyb20gcGVyc29uYWwgZXhwZXJpZW5jZSwgSSBmaW5k ICMyIHRvIGJlIGJldHRlciBhbmQgZWFzaT0KZXIgdG8gd29yayB3aXRoICZhbXA7IG1haW50YWlu LjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2PkkgdGhpbmsgPQppdCByZWFsbHkg ZGVwZW5kcyBvbiB0aGUgdXNlLWNhc2UsIGJ1dCBJIGFsc28gaGFkIGJldHRlciBleHBlcmllbmNl IHdpdGggMi49CjwvZGl2PjxibG9ja3F1b3RlIHN0eWxlPTNEImJvcmRlci1sZWZ0OjJweCBzb2xp ZCAjMTAxMEZGO21hcmdpbi1sZWZ0OjVweDtwYT0KZGRpbmctbGVmdDo1cHg7Y29sb3I6IzAwMDtm b250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0PQppb246bm9u ZTtmb250LWZhbWlseTpIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTJwdDsi PjxkaXYgc3R5bGU9Cj0zRCJmb250LWZhbWlseTogdGltZXMgbmV3IHJvbWFuLCBuZXcgeW9yaywg dGltZXMsIHNlcmlmOyBmb250LXNpemU6IDEycHQ7ID0KY29sb3I6ICMwMDAwMDAiPjxkaXY+PGRp dj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5XaGF0IGFyZSB5b3VyIHRob3VnPQpodHM/ PGJyPjwvZGl2PjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+UmVnYXJkcyw8YnI+TWlrZTxicj48 L2Rpdj48ZGl2Pjxicj49CjwvZGl2PjwvZGl2Pjxicj5fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXzxicj5FbmdpbmUtZD0KZXZlbCBtYWlsaW5nIGxpc3Q8YnI+ RW5naW5lLWRldmVsQG92aXJ0Lm9yZzxicj5odHRwOi8vbGlzdHMub3ZpcnQub3JnL21haWxtPQph bi9saXN0aW5mby9lbmdpbmUtZGV2ZWw8YnI+PC9ibG9ja3F1b3RlPjxicj48L2Rpdj48L2JvZHk+ PC9odG1sPgotLS0tLS09X1BhcnRfMTE5MjExXzE0Nzc4NDE1MzAuMTM2ODM1MjM4MTAxMC0tCg== --===============6557773343439921506==--