From shaohef at linux.vnet.ibm.com Thu Apr 24 21:41:27 2014 Content-Type: multipart/mixed; boundary="===============3961843399777460537==" MIME-Version: 1.0 From: Sheldon To: kimchi-devel at ovirt.org Subject: Re: [Kimchi-devel] [PATCH V8 1/7] Add two function to set and get domain xml metadata Date: Fri, 25 Apr 2014 09:41:19 +0800 Message-ID: <5359BD3F.2080502@linux.vnet.ibm.com> In-Reply-To: 5359A81D.4030401@linux.vnet.ibm.com --===============3961843399777460537== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On 04/25/2014 08:11 AM, Sheldon wrote: >> +def set_vm_metadata_element(dom, meta_xml, mode=3D"all"): >> + element =3D etree.fromstring(meta_xml) >> + # From libvirt doc, Passing None for @metadata says to remove that = >> element >> + # from the domain XML (passing the empty string leaves the element = >> present) >> + # Do not support remove the old metadata >> + dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, meta_xml, >> + "kimchi", KIMCHI_META_URL + element.tag, > > Why are you append element.tag to namespace? Use only = > https://github.com/kimchi-project/kimchi/ as namespace = If we don not like it. I change it next version. The reason as follow as libvirt docs(http://libvirt.org/formatdomain.html#elementsMetadata) = says: fv0 4dea22b31d52d8f32516782e98ab3fa0 A short description - title - of the domain Some human readable description .. .. ... |metadata| yes, one application use one namespace. append element.tag to namespace, make every "kimchi" element has an = unique uri. this looks like all the "kimchi" prefix element are belong to one = "kimchi" application. looks like "foo" are "bar" are all "kimchi", but they has different xmlns. .. .. The libvirt API can easy to set/get the every metadata element. get foo by: virDomain.metadata(@type, "https://kimchi.org/kimchi/foo/") get bar by: virDomain.metadata(@type, "https://kimchi.org/kimchi/bar/") set foo by: virDomain.setMetadata(@type, "", = "https://kimchi.org/kimchi/foo/") set bar by: virDomain.setMetadata(@type, "", = "https://kimchi.org/kimchi/bar/") looks like foo and bar belong to "kimchi" element, but they are = independent. Their is no relationship between them. If we just want to handle foo, we do not need to care "bar". like we can call kimchi api, every api is unique uri. every api are = independent. virDomain.metadata Type: instancemethod String Form: File: /usr/lib64/python2.7/site-packages/libvirt.py Definition: libvirt.virDomain.metadata(self, type, uri, flags=3D0) Docstring: Retrieves the appropriate domain element given by @type. If VIR_DOMAIN_METADATA_ELEMENT is requested parameter @uri must be set to the name of the namespace the requested elements belong to, otherwise must be None. If an element of the domain XML is not present, the resulting error will be VIR_ERR_NO_DOMAIN_METADATA. This method forms a shortcut for seeing information from virDomainSetMetadata() without having to go through virDomainGetXMLDesc(). @flags controls whether the live domain or persistent configuration will be queried. The|metadata|node can be used by applications to store custom metadata in the form of XML nodes/trees. Applications must use custom namespaces on their XML nodes/trees, with only one top-level element per namespace (if the application needs structure, they should have sub-elements to their namespace element).Since 0.9.10 -- = Thanks and best regards! Sheldon Feng(=E5=86=AF=E5=B0=91=E5=90=88) IBM Linux Technology Center --===============3961843399777460537== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRG LTgiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSI+CiAgPC9oZWFkPgogIDxib2R5IGJnY29sb3I9 IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgogICAgPGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4 Ij5PbiAwNC8yNS8yMDE0IDA4OjExIEFNLCBTaGVsZG9uIHdyb3RlOjxicj4KICAgIDwvZGl2Pgog ICAgPGJsb2NrcXVvdGUgY2l0ZT0ibWlkOjUzNTlBODFELjQwMzA0MDFAbGludXgudm5ldC5pYm0u Y29tIgogICAgICB0eXBlPSJjaXRlIj4KICAgICAgPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgc3R5 bGU9ImNvbG9yOiAjMDAwMDAwOyI+K2RlZgogICAgICAgIHNldF92bV9tZXRhZGF0YV9lbGVtZW50 KGRvbSwgbWV0YV94bWwsIG1vZGU9ImFsbCIpOgogICAgICAgIDxicj4KICAgICAgICArIGVsZW1l bnQgPSBldHJlZS5mcm9tc3RyaW5nKG1ldGFfeG1sKQogICAgICAgIDxicj4KICAgICAgICArICMg RnJvbSBsaWJ2aXJ0IGRvYywgUGFzc2luZyBOb25lIGZvciBAbWV0YWRhdGEgc2F5cyB0byByZW1v dmUKICAgICAgICB0aGF0IGVsZW1lbnQKICAgICAgICA8YnI+CiAgICAgICAgKyAjIGZyb20gdGhl IGRvbWFpbiBYTUwgKHBhc3NpbmcgdGhlIGVtcHR5IHN0cmluZyBsZWF2ZXMgdGhlCiAgICAgICAg ZWxlbWVudCBwcmVzZW50KQogICAgICAgIDxicj4KICAgICAgICArICMgRG8gbm90IHN1cHBvcnQg cmVtb3ZlIHRoZSBvbGQgbWV0YWRhdGEKICAgICAgICA8YnI+CiAgICAgICAgKyBkb20uc2V0TWV0 YWRhdGEobGlidmlydC5WSVJfRE9NQUlOX01FVEFEQVRBX0VMRU1FTlQsIG1ldGFfeG1sLAogICAg ICAgIDxicj4KICAgICAgICArICJraW1jaGkiLCBLSU1DSElfTUVUQV9VUkwgKyBlbGVtZW50LnRh ZywKICAgICAgICA8YnI+CiAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgPGJyPgogICAgICBXaHkg YXJlIHlvdSBhcHBlbmQgZWxlbWVudC50YWcgdG8gbmFtZXNwYWNlPyBVc2Ugb25seSA8YQogICAg ICAgIG1vei1kby1ub3Qtc2VuZD0idHJ1ZSIgY2xhc3M9Im1vei10eHQtbGluay1mcmVldGV4dCIK ICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va2ltY2hpLXByb2plY3Qva2ltY2hpLyI+ aHR0cHM6Ly9naXRodWIuY29tL2tpbWNoaS1wcm9qZWN0L2tpbWNoaS88L2E+CiAgICAgIGFzIG5h bWVzcGFjZQogICAgPC9ibG9ja3F1b3RlPgogICAgSWYgd2UgZG9uIG5vdCBsaWtlIGl0LiBJIGNo YW5nZSBpdCBuZXh0IHZlcnNpb24uIDxicj4KICAgIDxicj4KICAgIFRoZSByZWFzb24gYXMgZm9s bG93PGJyPgogICAgPGJyPgogICAgYXMgbGlidmlydAogICAgZG9jcyg8YSBjbGFzcz0ibW96LXR4 dC1saW5rLWZyZWV0ZXh0IiBocmVmPSJodHRwOi8vbGlidmlydC5vcmcvZm9ybWF0ZG9tYWluLmh0 bWwjZWxlbWVudHNNZXRhZGF0YSI+aHR0cDovL2xpYnZpcnQub3JnL2Zvcm1hdGRvbWFpbi5odG1s I2VsZW1lbnRzTWV0YWRhdGE8L2E+KSBzYXlzOiA8YnI+CiAgICA8cHJlIHhtbDpzcGFjZT0icHJl c2VydmUiIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCByZ2IoMTUzLCAxNTMsIDE1Myk7IGJhY2tn cm91bmQtY29sb3I6IHJnYigyMzgsIDIzOCwgMjM4KTsgY29sb3I6IHJnYigwLCAwLCAwKTsgcGFk ZGluZzogMWVtOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250 LXdlaWdodDogbm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyBsaW5lLWhlaWdodDogbm9y bWFsOyBvcnBoYW5zOiBhdXRvOyB0ZXh0LWFsaWduOiBzdGFydDsgdGV4dC1pbmRlbnQ6IDBweDsg dGV4dC10cmFuc2Zvcm06IG5vbmU7IHdpZG93czogYXV0bzsgd29yZC1zcGFjaW5nOiAwcHg7IC13 ZWJraXQtdGV4dC1zdHJva2Utd2lkdGg6IDBweDsgYmFja2dyb3VuZC1wb3NpdGlvbjogaW5pdGlh bCBpbml0aWFsOyBiYWNrZ3JvdW5kLXJlcGVhdDogaW5pdGlhbCBpbml0aWFsOyI+Jmx0O2RvbWFp biB0eXBlPSd4ZW4nIGlkPSczJyZndDsKICAmbHQ7bmFtZSZndDtmdjAmbHQ7L25hbWUmZ3Q7CiAg Jmx0O3V1aWQmZ3Q7NGRlYTIyYjMxZDUyZDhmMzI1MTY3ODJlOThhYjNmYTAmbHQ7L3V1aWQmZ3Q7 CiAgJmx0O3RpdGxlJmd0O0Egc2hvcnQgZGVzY3JpcHRpb24gLSB0aXRsZSAtIG9mIHRoZSBkb21h aW4mbHQ7L3RpdGxlJmd0OwogICZsdDtkZXNjcmlwdGlvbiZndDtTb21lIGh1bWFuIHJlYWRhYmxl IGRlc2NyaXB0aW9uJmx0Oy9kZXNjcmlwdGlvbiZndDsKICAmbHQ7bWV0YWRhdGEmZ3Q7CiAgICAm bHQ7YXBwMTpmb28geG1sbnM6YXBwMT08YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBo cmVmPSJodHRwOi8vYXBwMS5vcmcvYXBwMS8iPiJodHRwOi8vYXBwMS5vcmcvYXBwMS8iPC9hPiZn dDsuLiZsdDsvYXBwMTpmb28mZ3Q7CiAgICAmbHQ7YXBwMjpiYXIgeG1sbnM6YXBwMj08YSBjbGFz cz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJodHRwOi8vYXBwMS5vcmcvYXBwMi8iPiJo dHRwOi8vYXBwMS5vcmcvYXBwMi8iPC9hPiZndDsuLiZsdDsvYXBwMjpiYXImZ3Q7CiAgJmx0Oy9t ZXRhZGF0YSZndDsKICAuLi48L3ByZT4KICAgIDxkdCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDFlbTsg bWFyZ2luLXJpZ2h0OiAyZW07IGNvbG9yOiByZ2IoMCwgMCwgMCk7CiAgICAgIGZvbnQtZmFtaWx5 OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6CiAgICAg IDEzcHg7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJpYW50OiBub3JtYWw7IGZvbnQtd2Vp Z2h0OgogICAgICBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7IGxpbmUtaGVpZ2h0OiBu b3JtYWw7IG9ycGhhbnM6CiAgICAgIGF1dG87IHRleHQtYWxpZ246IHN0YXJ0OyB0ZXh0LWluZGVu dDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsg d2lkb3dzOiBhdXRvOyB3b3JkLXNwYWNpbmc6IDBweDsKICAgICAgLXdlYmtpdC10ZXh0LXN0cm9r ZS13aWR0aDogMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsCiAgICAgIDI1NSk7 Ij48Y29kZT5tZXRhZGF0YTwvY29kZT48L2R0PgogICAgPGJyPgogICAgPGJyPgogICAgPGJyPgog ICAgeWVzLCBvbmUgYXBwbGljYXRpb24gdXNlIG9uZSBuYW1lc3BhY2UuIDxicj4KICAgIDxicj4K ICAgIGFwcGVuZCBlbGVtZW50LnRhZyB0byBuYW1lc3BhY2UsIG1ha2UgZXZlcnkgImtpbWNoaSIg ZWxlbWVudCBoYXMgYW4KICAgIHVuaXF1ZSB1cmkuPGJyPgogICAgdGhpcyBsb29rcyBsaWtlIGFs bCB0aGUgImtpbWNoaSIgcHJlZml4IGVsZW1lbnQgYXJlIGJlbG9uZyB0byBvbmUKICAgICJraW1j aGkiIGFwcGxpY2F0aW9uLjxicj4KICAgIGxvb2tzIGxpa2UgImZvbyIgYXJlICJiYXIiIGFyZSBh bGwgImtpbWNoaSIsIGJ1dCB0aGV5IGhhcyBkaWZmZXJlbnQKICAgIHhtbG5zLjxicj4KICAgIDxw cmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJnYigxNTMs IDE1MywgMTUzKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzOCwgMjM4LCAyMzgpOyBjb2xvcjog cmdiKDAsIDAsIDApOyBwYWRkaW5nOiAxZW07IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC12YXJp YW50OiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGxldHRlci1zcGFjaW5nOiBub3JtYWw7 IGxpbmUtaGVpZ2h0OiBub3JtYWw7IG9ycGhhbnM6IGF1dG87IHRleHQtYWxpZ246IHN0YXJ0OyB0 ZXh0LWluZGVudDogMHB4OyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgd2lkb3dzOiBhdXRvOyB3b3Jk LXNwYWNpbmc6IDBweDsgLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aDogMHB4OyBiYWNrZ3JvdW5k LXBvc2l0aW9uOiBpbml0aWFsIGluaXRpYWw7IGJhY2tncm91bmQtcmVwZWF0OiBpbml0aWFsIGlu aXRpYWw7Ij4gICZsdDttZXRhZGF0YSZndDsKICAgICZsdDtraW1jaGk6Zm9vIHhtbG5zOmtpbWNo aT08YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJodHRwOi8va2ltY2hpLm9y Zy9raW1jaGkvZm9vIj4iaHR0cDovL2tpbWNoaS5vcmcva2ltY2hpL2ZvbyI8L2E+Jmd0Oy4uJmx0 Oy9raW1jaGk6Zm9vJmd0OwogICAgJmx0O2tpbWNoaTpiYXIgeG1sbnM6a2ltY2hpPTxhIGNsYXNz PSJtb3otdHh0LWxpbmstcmZjMjM5NkUiIGhyZWY9Imh0dHA6Ly9raW1jaGkub3JnL2tpbWNoaS9i YXIiPiJodHRwOi8va2ltY2hpLm9yZy9raW1jaGkvYmFyIjwvYT4mZ3Q7Li4mbHQ7L2tpbWNoaTpi YXImZ3Q7CiAgJmx0Oy9tZXRhZGF0YSZndDs8L3ByZT4KICAgIDxicj4KICAgIFRoZSBsaWJ2aXJ0 IEFQSSBjYW4gZWFzeSB0byBzZXQvZ2V0IHRoZSBldmVyeSBtZXRhZGF0YSBlbGVtZW50LiA8YnI+ CiAgICBnZXQgZm9vIGJ5OiB2aXJEb21haW4ubWV0YWRhdGEoQHR5cGUsCiAgICA8YSBjbGFzcz0i bW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJodHRwczovL2tpbWNoaS5vcmcva2ltY2hpL2Zv by8iPiJodHRwczovL2tpbWNoaS5vcmcva2ltY2hpL2Zvby8iPC9hPik8YnI+CiAgICBnZXQgYmFy IGJ5OiB2aXJEb21haW4ubWV0YWRhdGEoQHR5cGUsCiAgICA8YSBjbGFzcz0ibW96LXR4dC1saW5r LXJmYzIzOTZFIiBocmVmPSJodHRwczovL2tpbWNoaS5vcmcva2ltY2hpL2Jhci8iPiJodHRwczov L2tpbWNoaS5vcmcva2ltY2hpL2Jhci8iPC9hPik8YnI+CiAgICA8YnI+CiAgICBzZXQgZm9vIGJ5 OiB2aXJEb21haW4uc2V0TWV0YWRhdGEoQHR5cGUsICImbHQ7Zm9vJmd0OyZsdDsvZm9vJmd0OyIs CiAgICA8YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJodHRwczovL2tpbWNo aS5vcmcva2ltY2hpL2Zvby8iPiJodHRwczovL2tpbWNoaS5vcmcva2ltY2hpL2Zvby8iPC9hPik8 YnI+CiAgICBzZXQgYmFyIGJ5OiB2aXJEb21haW4uc2V0TWV0YWRhdGEoQHR5cGUsICImbHQ7YmFy Jmd0OyZsdDsvYmFyJmd0OyIsCiAgICA8YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBo cmVmPSJodHRwczovL2tpbWNoaS5vcmcva2ltY2hpL2Jhci8iPiJodHRwczovL2tpbWNoaS5vcmcv a2ltY2hpL2Jhci8iPC9hPik8YnI+CiAgICA8YnI+CiAgICBsb29rcyBsaWtlIGZvbyBhbmQgYmFy IGJlbG9uZyB0byAia2ltY2hpIiBlbGVtZW50LCBidXQgdGhleSBhcmUKICAgIGluZGVwZW5kZW50 LiDCoCA8YnI+CiAgICBUaGVpciBpcyBubyByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLiA8YnI+ CiAgICBJZiB3ZSBqdXN0IHdhbnQgdG8gaGFuZGxlIGZvbywgd2UgZG8gbm90IG5lZWQgdG8gY2Fy ZSAiYmFyIi4gPGJyPgogICAgPGJyPgogICAgbGlrZSB3ZSBjYW4gY2FsbCBraW1jaGkgYXBpLCBl dmVyeSBhcGkgaXMgdW5pcXVlIHVyaS4gZXZlcnkgYXBpIGFyZQogICAgaW5kZXBlbmRlbnQuPGJy PgogICAgPGJyPgogICAgPGJyPgogICAgPGJyPgogICAgdmlyRG9tYWluLm1ldGFkYXRhPGJyPgog ICAgVHlwZTrCoMKgwqDCoMKgwqAgaW5zdGFuY2VtZXRob2Q8YnI+CiAgICBTdHJpbmcgRm9ybTom bHQ7dW5ib3VuZCBtZXRob2QgdmlyRG9tYWluLm1ldGFkYXRhJmd0Ozxicj4KICAgIEZpbGU6wqDC oMKgwqDCoMKgIC91c3IvbGliNjQvcHl0aG9uMi43L3NpdGUtcGFja2FnZXMvbGlidmlydC5weTxi cj4KICAgIERlZmluaXRpb246IGxpYnZpcnQudmlyRG9tYWluLm1ldGFkYXRhKHNlbGYsIHR5cGUs IHVyaSwgZmxhZ3M9MCk8YnI+CiAgICBEb2NzdHJpbmc6PGJyPgogICAgUmV0cmlldmVzIHRoZSBh cHByb3ByaWF0ZSBkb21haW4gZWxlbWVudCBnaXZlbiBieSBAdHlwZS48YnI+CiAgICBJZiBWSVJf RE9NQUlOX01FVEFEQVRBX0VMRU1FTlQgaXMgcmVxdWVzdGVkIHBhcmFtZXRlciBAdXJpPGJyPgog ICAgbXVzdCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIG5hbWVzcGFjZSB0aGUgcmVxdWVzdGVk IGVsZW1lbnRzPGJyPgogICAgYmVsb25nIHRvLCBvdGhlcndpc2UgbXVzdCBiZSBOb25lLjxicj4K ICAgIDxicj4KICAgIElmIGFuIGVsZW1lbnQgb2YgdGhlIGRvbWFpbiBYTUwgaXMgbm90IHByZXNl bnQsIHRoZSByZXN1bHRpbmc8YnI+CiAgICBlcnJvciB3aWxsIGJlIFZJUl9FUlJfTk9fRE9NQUlO X01FVEFEQVRBLsKgIFRoaXMgbWV0aG9kIGZvcm1zPGJyPgogICAgYSBzaG9ydGN1dCBmb3Igc2Vl aW5nIGluZm9ybWF0aW9uIGZyb20gdmlyRG9tYWluU2V0TWV0YWRhdGEoKTxicj4KICAgIHdpdGhv dXQgaGF2aW5nIHRvIGdvIHRocm91Z2ggdmlyRG9tYWluR2V0WE1MRGVzYygpLjxicj4KICAgIDxi cj4KICAgIEBmbGFncyBjb250cm9scyB3aGV0aGVyIHRoZSBsaXZlIGRvbWFpbiBvciBwZXJzaXN0 ZW50PGJyPgogICAgY29uZmlndXJhdGlvbiB3aWxsIGJlIHF1ZXJpZWQuIDxicj4KICAgIDxkZCBz dHlsZT0ibWFyZ2luLWxlZnQ6IDJlbTsgbWFyZ2luLXJpZ2h0OiAyZW07IG1hcmdpbi1ib3R0b206 CiAgICAgIDAuNWVtOyBjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogVmVyZGFuYSwg QXJpYWwsCiAgICAgIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxM3B4OyBmb250 LXN0eWxlOiBub3JtYWw7CiAgICAgIGZvbnQtdmFyaWFudDogbm9ybWFsOyBmb250LXdlaWdodDog bm9ybWFsOyBsZXR0ZXItc3BhY2luZzogbm9ybWFsOwogICAgICBsaW5lLWhlaWdodDogbm9ybWFs OyBvcnBoYW5zOiBhdXRvOyB0ZXh0LWFsaWduOiBzdGFydDsKICAgICAgdGV4dC1pbmRlbnQ6IDBw eDsgdGV4dC10cmFuc2Zvcm06IG5vbmU7IHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgIHdpZG93 czogYXV0bzsgd29yZC1zcGFjaW5nOiAwcHg7IC13ZWJraXQtdGV4dC1zdHJva2Utd2lkdGg6IDBw eDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI+VGhlPHNwYW4K ICAgICAgICBjbGFzcz0iQXBwbGUtY29udmVydGVkLXNwYWNlIj7CoDwvc3Bhbj48Y29kZT5tZXRh ZGF0YTwvY29kZT48c3BhbgogICAgICAgIGNsYXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPsKg PC9zcGFuPm5vZGUgY2FuIGJlIHVzZWQgYnkKICAgICAgYXBwbGljYXRpb25zIHRvIHN0b3JlIGN1 c3RvbSBtZXRhZGF0YSBpbiB0aGUgZm9ybSBvZiBYTUwKICAgICAgbm9kZXMvdHJlZXMuIEFwcGxp Y2F0aW9ucyBtdXN0IHVzZSBjdXN0b20gbmFtZXNwYWNlcyBvbiB0aGVpciBYTUwKICAgICAgbm9k ZXMvdHJlZXMsIHdpdGggb25seSBvbmUgdG9wLWxldmVsIGVsZW1lbnQgcGVyIG5hbWVzcGFjZSAo aWYgdGhlCiAgICAgIGFwcGxpY2F0aW9uIG5lZWRzIHN0cnVjdHVyZSwgdGhleSBzaG91bGQgaGF2 ZSBzdWItZWxlbWVudHMgdG8KICAgICAgdGhlaXIgbmFtZXNwYWNlIGVsZW1lbnQpLjxzcGFuIGNs YXNzPSJBcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPsKgPC9zcGFuPjxzcGFuCiAgICAgICAgY2xhc3M9 InNpbmNlIiBzdHlsZT0iY29sb3I6IHJnYig2MCwgMTMzLCAxMjQpOyBmb250LXN0eWxlOgogICAg ICAgIGl0YWxpYzsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5TaW5jZSAwLjkuMTA8L3NwYW4+PC9kZD4K ICAgIDxicj4KICAgIDxicj4KICAgIDxwcmUgY2xhc3M9Im1vei1zaWduYXR1cmUiIGNvbHM9Ijcy Ij4tLSAKVGhhbmtzIGFuZCBiZXN0IHJlZ2FyZHMhCgpTaGVsZG9uIEZlbmco5Yav5bCR5ZCIKTxh IGNsYXNzPSJtb3otdHh0LWxpbmstcmZjMjM5NkUiIGhyZWY9Im1haWx0bzpzaGFvaGVmQGxpbnV4 LnZuZXQuaWJtLmNvbSI+Jmx0O3NoYW9oZWZAbGludXgudm5ldC5pYm0uY29tJmd0OzwvYT4KSUJN IExpbnV4IFRlY2hub2xvZ3kgQ2VudGVyPC9wcmU+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --===============3961843399777460537==--