<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>CanadianTaxes</name>
	<version>1.2</version>
    <mincmsversion>2.2.2</mincmsversion>
	<help><![CDATA[PGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DR0Vjb21tZXJjZUJhc2UgPSZndDsgMS44LjU8L2xpPjxsaT5DR0V4dGVuc2lvbnMgPSZndDsgMS41Ni4yPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGdtYWlsLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjI8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+Cgk8bGk+VmVyc2lvbiAxLjAgLSBJbml0aWFsIHJlbGVhc2UuPC9saT4KICAgICAgICA8bGk+VmVyc2lvbiAxLjEKCQk8dWw+CgkJPGxpPk1vZGlmaWVzIHRoZSBVSSB0byBhbGxvdyBhZGluZy9lZGl0aW5nIGFuZCBkZWxldGluZyB0YXhlcyBmb3IgYSByZWdpbi9wcm92aW5jZS48L2xpPgoJCTxsaT5BZGRzIGZsYWdzIHRvIGluZGljYXRlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHRheCBpcyBhcHBsaWNhYmxlIHRvIHByb2R1Y3RzLCBhbmQvb3Igc2VydmljZXMuPC9saT4KCQk8L3VsPgogICAgICAgIDwvbGk+Cgk8bGk+VmVyc2lvbiAxLjIKCQk8dWw+CgkJPGxpPlJlZmFjdG9yIHRvIGFsbG93IHNwZWNpZnlpbmcgd2hldGhlciBlYWNoIHRheCBpcyBhcHBsaWNhYmxlIHRvIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9yIGJvdGguPC9saT4KCQk8bGk+Tm93IGFsbG93cyBhZGRpbmcvZGVsZXRpbmcgdGF4ZXMgYXMgd2VsbCBhcyBlZGl0aW5nIHRoZW0uPC9saT4KCQk8L3VsPgoJPC9saT4KPC91bD4KPGJyIC8+]]></about>
	<description><![CDATA[A module for Calguys Ecommerce suite that handles taxes for Canadian vendors]]></description>
	<requires>
	  <requiredname>CGEcommerceBase</requiredname>
	  <requiredversion>1.8.5</requiredversion>
	</requires>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.56.2</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSApIHJldHVybjsKCmlmKCBcY2dlX3BhcmFtOjpleGlzdHMoJHBhcmFtcywnc2V0YXN0YXgnKSApIHsKICAgIHRyeSB7CiAgICAgICAgXENHRWNvbW1lcmNlQmFzZVxzZXR1cF9tYW5hZ2VyOjpzZXRfdGF4X2NhbGN1bGF0b3IoICR0aGlzLT5HZXROYW1lKCkgKTsKICAgICAgICBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3NldGFzdGF4JykpOwogICAgfQogICAgY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICAgICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZS0+R2V0TWVzc2FnZSgpKTsKICAgIH0KfQplbHNlIGlmKCBcY2dlX3BhcmFtOjpleGlzdHMoJHBhcmFtcywnc3VibWl0JykgKSB7CiAgICAkZ2V0X3RheF9yZWdpb24gPSBmdW5jdGlvbigka2V5KSB7CiAgICAgICAgaWYoICFzdGFydHN3aXRoKCAka2V5LCAndGF4bmFtZScpICkgcmV0dXJuOwogICAgICAgICRwb3MxID0gc3RycG9zKCRrZXksJ18nKSsxOwogICAgICAgICRwb3MyID0gc3RycnBvcygka2V5LCdfJyk7CiAgICAgICAgJG5ld2tleSA9IHN1YnN0cigka2V5LCRwb3MxLCRwb3MyLSRwb3MxKTsKICAgICAgICByZXR1cm4gJG5ld2tleTsKICAgIH07CgogICAgJGdldF9yZWdpb25fdGF4ZXMgPSBmdW5jdGlvbihhcnJheSAkcGFyYW1zLCRyZWdpb24pIHsKICAgICAgICAkdGF4ZXMgPSBbXTsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCA1OyAkaSsrICkgewogICAgICAgICAgICAkZXhwZWN0MSA9ICd0YXhuYW1lXycuJHJlZ2lvbi4nXycuJGk7CiAgICAgICAgICAgICRleHBlY3QyID0gJ3RheHJhdGVfJy4kcmVnaW9uLidfJy4kaTsKICAgICAgICAgICAgJGV4cGVjdDMgPSAndGF4cHJvZHVjdHNfJy4kcmVnaW9uLidfJy4kaTsKICAgICAgICAgICAgJGV4cGVjdDQgPSAndGF4c2VydmljZXNfJy4kcmVnaW9uLidfJy4kaTsKICAgICAgICAgICAgaWYoICFpc3NldCgkcGFyYW1zWyRleHBlY3QxXSkgfHwgIWlzc2V0KCRwYXJhbXNbJGV4cGVjdDJdKSApIGJyZWFrOwogICAgICAgICAgICAkdGF4ID0gW107CiAgICAgICAgICAgICR0YXhbJ25hbWUnXSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywkZXhwZWN0MSk7CiAgICAgICAgICAgICR0YXhbJ3JhdGUnXSA9IFxjZ2VfcGFyYW06OmdldF9mbG9hdCgkcGFyYW1zLCRleHBlY3QyKTsKICAgICAgICAgICAgJHRheFsndGF4X3Byb2R1Y3RzJ10gPSBcY2dlX3BhcmFtOjpnZXRfYm9vbCgkcGFyYW1zLCRleHBlY3QzKTsKICAgICAgICAgICAgJHRheFsndGF4X3NlcnZpY2VzJ10gPSBcY2dlX3BhcmFtOjpnZXRfYm9vbCgkcGFyYW1zLCRleHBlY3Q0KTsKICAgICAgICAgICAgJHRheGVzWyR0YXhbJ25hbWUnXV0gPSAkdGF4OwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRheGVzOwogICAgfTsKCiAgICAkcmVnaW9ucyA9IFtdOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgaWYoIHN0YXJ0c3dpdGgoJGtleSwndGF4bmFtZScpICkgewogICAgICAgICAgICAkcmVnaW9uc1tdID0gJGdldF90YXhfcmVnaW9uKCRrZXkpOwogICAgICAgIH0KICAgIH0KICAgICRyZWdpb25zID0gYXJyYXlfdW5pcXVlKCRyZWdpb25zKTsKCiAgICAkbmV3X3Byb2ZpbGUgPSBbXTsKICAgIGZvcmVhY2goICRyZWdpb25zIGFzICRyZWdpb24gKSB7CiAgICAgICAgJG5ld19wcm9maWxlWyRyZWdpb25dID0gJGdldF9yZWdpb25fdGF4ZXMoICRwYXJhbXMsICRyZWdpb24gKTsKICAgIH0KICAgICRuZXdfcHJvZmlsZSA9IG5ldyBcQ2FuYWRpYW5UYXhlc1x0YXhfcHJvZmlsZSgkbmV3X3Byb2ZpbGUpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoXENhbmFkaWFuVGF4ZXM6OlBST0ZJTEVfUFJFRixzZXJpYWxpemUoJG5ld19wcm9maWxlKSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZShDYW5hZGlhblRheGVzOjpTSElQUElOR19QUkVGLFxjZ2VfcGFyYW06OmdldF9ib29sKCRwYXJhbXMsJ3RheF9zaGlwcGluZycpKTsKfQoKJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnZGVmYXVsdGFkbWluLnRwbCcpOwokcHJvZmlsZSA9IHVuc2VyaWFsaXplKCR0aGlzLT5HZXRQcmVmZXJlbmNlKFxDYW5hZGlhblRheGVzOjpQUk9GSUxFX1BSRUYpKTsKJHRwbC0+YXNzaWduKCdwcm9maWxlJywkcHJvZmlsZSk7CiR0cGwtPmFzc2lnbignbGFiZWxzJyxuZXcgXENhbmFkaWFuVGF4ZXNccmVnaW9ucygkdGhpcykpOwokdHBsLT5hc3NpZ24oJ3RheF9zaGlwcGluZycsJHRoaXMtPkdldFByZWZlcmVuY2UoXENhbmFkaWFuVGF4ZXM6OlNISVBQSU5HX1BSRUYsMCkpOwokdHBsLT5kaXNwbGF5KCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/CanadianTaxes.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENhbmFkaWFuVGF4ZXMgLSBBIG1vZHVsZSB0byBjYWxjdWxhdGUgdGF4ZXMgZm9yIGNhbmFkaWFuIHNob3BzIGFuZCBjYW5hZGlhbiBkZWxpdmVyeS4KIyBWZXJzaW9uOiAxLjAsIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAaG90bWFpbC5jb20+CiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NrZWxldG9uLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmNsYXNzIENhbmFkaWFuVGF4ZXMgZXh0ZW5kcyBDR0V4dGVuc2lvbnMKewogICAgY29uc3QgUFJPRklMRV9QUkVGID0gJ3RheF9wcm9maWxlJzsKICAgIGNvbnN0IFNISVBQSU5HX1BSRUYgPSAndGF4X3NoaXBwaW5nJzsKICAgIHByaXZhdGUgJF9oZWxwZXI7CgogICAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9CiAgICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gJzEuMic7IH0KICAgIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdjYWxndXkxMDAwJzsgfQogICAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnY2FsZ3V5MTAwMEBnbWFpbC5jb20nOyB9CiAgICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICBmdW5jdGlvbiBIYXNBZG1pbigpIHsgcmV0dXJuIHRydWU7IH0KICAgIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdlY29tbWVyY2UnOyB9CiAgICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7IH0KICAgIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIFsgJ0NHRWNvbW1lcmNlQmFzZSc9PicxLjguNScsICdDR0V4dGVuc2lvbnMnPT4nMS41Ni4yJyBdOyB9CiAgICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcyLjIuMic7IH0KICAgIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyB9CiAgICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7IH0KICAgIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOyB9CiAgICBmdW5jdGlvbiBMYXp5TG9hZEFkbWluKCkgeyByZXR1cm4gVFJVRTsgfQogICAgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7IH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gJmdldF90YXhfY2FsY3VsYXRvcigpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+X2hlbHBlciApICR0aGlzLT5faGVscGVyID0gbmV3IFxDYW5hZGlhblRheGVzXHRheF9jYWxjdWxhdG9yKCAkdGhpcyApOwogICAgICAgIHJldHVybiAkdGhpcy0+X2hlbHBlcjsKICAgIH0KCn0gLy8gY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPlZlcnNpb24gMS4wIC0gSW5pdGlhbCByZWxlYXNlLjwvbGk+CiAgICAgICAgPGxpPlZlcnNpb24gMS4xCgkJPHVsPgoJCTxsaT5Nb2RpZmllcyB0aGUgVUkgdG8gYWxsb3cgYWRpbmcvZWRpdGluZyBhbmQgZGVsZXRpbmcgdGF4ZXMgZm9yIGEgcmVnaW4vcHJvdmluY2UuPC9saT4KCQk8bGk+QWRkcyBmbGFncyB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgcGFydGljdWxhciB0YXggaXMgYXBwbGljYWJsZSB0byBwcm9kdWN0cywgYW5kL29yIHNlcnZpY2VzLjwvbGk+CgkJPC91bD4KICAgICAgICA8L2xpPgoJPGxpPlZlcnNpb24gMS4yCgkJPHVsPgoJCTxsaT5SZWZhY3RvciB0byBhbGxvdyBzcGVjaWZ5aW5nIHdoZXRoZXIgZWFjaCB0YXggaXMgYXBwbGljYWJsZSB0byBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvciBib3RoLjwvbGk+CgkJPGxpPk5vdyBhbGxvd3MgYWRkaW5nL2RlbGV0aW5nIHRheGVzIGFzIHdlbGwgYXMgZWRpdGluZyB0aGVtLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCgogQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCnNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCkdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQp0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAppZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAppbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCgogIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgpUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQpkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CnlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCnNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCigyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCmRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCgogIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCnRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCnNvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQp3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwp0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAphdXRob3JzJyByZXB1dGF0aW9ucy4KCiAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQpwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCnByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQpwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LgoKICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwphIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAp1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCnJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgptZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Ogp0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAplaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgpsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCnRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgoKQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCmlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCldoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgoKICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQpub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CmFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KCllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAp5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgoKICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgogICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CiAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAogICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgoKICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQogICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCiAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCiAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwogICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQpvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCm1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwp0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCmNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwp0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KCiAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0Kc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwplaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCnRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4KCiAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQpwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCnRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZApvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCk9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUwpUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFClBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLApSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SClJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCklOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORwpPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEClRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQpZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgpQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgoKICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgogICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CmZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgoKICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAp0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CmNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CnRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgoKICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CiAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KCklmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKCiAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KClRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQpwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CmJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQptb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgoKWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgoKICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCiAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCgogIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQogIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCgpUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCmxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgbW9kdWxlLCBzb21lIGRhdGEgbWF5IGJlIGxvc3QsIGFuZCBpdCBtYXkgZWZmZWN0IGEgd29ya2luZyBpbnN0YWxsYXRpb24uJzsKJGxhbmdbJ3RheF9wcm9kdWN0cyddID0gJ1RheCBwcm9kdWN0cyc7CiRsYW5nWyd0YXhfc2VydmljZXMnXSA9ICdUYXggc2VydmljZXMnOwokbGFuZ1snb3RoZXInXSA9ICdPdGhlcic7CiRsYW5nWyd0YXhfc2hpcHBpbmcnXSA9ICdBcHBseSB0YXhlcyB0byBzaGlwcGluZyBjb3N0cyc7CiRsYW5nWydtc2dfc2V0YXN0YXgnXSA9ICdUaGlzIGlzIG5vdyB5b3VyIG5ldyB0YXggbW9kdWxlJzsKJGxhbmdbJ3NldGFzdGF4J10gPSAnU2V0IGFzIFRheCBDYWxjdWxhdG9yJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSB0YXggcmF0ZXMgYXJlIGNvcnJlY3QgaW4gdGhlIG1vZHVsZSBhZG1pbiBwYW5lbCwgYW5kIHNldCB0aGlzIGFzIHlvdXIgdGF4IG1vZHVsZSBpbiBDR0Vjb21tZXJjZUJhc2UnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdBIG1vZHVsZSBmb3IgQ2FsZ3V5cyBFY29tbWVyY2Ugc3VpdGUgdGhhdCBoYW5kbGVzIHRheGVzIGZvciBDYW5hZGlhbiB2ZW5kb3JzJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NhbmFkaWFuIFRheGVzJzsKJGxhbmdbJ3JhdGUnXSA9ICdSYXRlJzsKJGxhbmdbJ25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1N1Ym1pdCc7CiRsYW5nWyduYXRpb25hbCddID0gJ05hdGlvbmFsJzsKJGxhbmdbJ3Byb3ZfQUInXSA9ICdBbGJlcnRhJzsKJGxhbmdbJ3Byb3ZfQkMnXSA9ICdCcml0aXNoIENvbHVtYmlhJzsKJGxhbmdbJ3Byb3ZfU0snXSA9ICdTYXNrYXRjaGV3YW4nOwokbGFuZ1sncHJvdl9NQiddID0gJ01hbml0b2JhJzsKJGxhbmdbJ3Byb3ZfT04nXSA9ICdPbnRhcmlvJzsKJGxhbmdbJ3Byb3ZfUUMnXSA9ICdRdWViZWMnOwokbGFuZ1sncHJvdl9OQiddID0gJ25ldyBCcnVuc3dpY2snOwokbGFuZ1sncHJvdl9OTCddID0gJ05ld2ZvdW5kbGFuZCc7CiRsYW5nWydwcm92X05TJ10gPSAnTm92YSBTY29hdGlhJzsKJGxhbmdbJ3Byb3ZfUEUnXSA9ICdQcmluY2UgRWR3YXJkIElzbGFuZCc7CiRsYW5nWydwcm92X05UJ10gPSAnTm9ydGh3ZXN0IFRlcnJpdG9yaWVzJzsKJGxhbmdbJ3Byb3ZfTlUnXSA9ICdOdW5hdnV0JzsKJGxhbmdbJ3Byb3ZfWVQnXSA9ICdZdWtvbic7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.regions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENhbmFkaWFuVGF4ZXM7CgpjbGFzcyByZWdpb25zCnsKICAgIHByaXZhdGUgJF9sYWJlbHMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXENhbmFkaWFuVGF4ZXMgJG1vZCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsc1t0YXhfcHJvZmlsZTo6TkFUSU9OQUxdID0gJG1vZC0+TGFuZygnbmF0aW9uYWwnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snQUInXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfQUInKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snQkMnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfQkMnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snU0snXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfU0snKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snTUInXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfTUInKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snT04nXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfT04nKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snUUMnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfUUMnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snTkInXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfTkInKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snTkwnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfTkwnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snTlMnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfTlMnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snUEUnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfUEUnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snTlQnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfTlQnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snTlUnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfTlUnKTsKICAgICAgICAkdGhpcy0+X2xhYmVsc1snWVQnXSA9ICRtb2QtPkxhbmcoJ3Byb3ZfWVQnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmV4aXN0cygka2V5KSApIHJldHVybiAkdGhpcy0+X2xhYmVsc1ska2V5XTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpc3RzKCAka2V5ICkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fbGFiZWxzKTsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/class.tax_calculator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENhbmFkaWFuVGF4ZXM7CgpjbGFzcyB0YXhfY2FsY3VsYXRvciBpbXBsZW1lbnRzIFxDR0Vjb21tZXJjZUJhc2VcdGF4X2NhbGN1bGF0b3IKewogICAgcHJpdmF0ZSAkX21vZDsKICAgIHByaXZhdGUgJF9zcmNfbG9jYXRpb247CiAgICBwcml2YXRlICRfZGVzdF9sb2NhdGlvbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoIFxDYW5hZGlhblRheGVzICRtb2QgKQogICAgewogICAgICAgICR0aGlzLT5fbW9kID0gJG1vZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5fbW9kLT5HZXROYW1lKCk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBJc0NvbmZpZ3VyZWQoKSB7CiAgICAgICAgJHByb2ZpbGUgPSB1bnNlcmlhbGl6ZSgkdGhpcy0+X21vZC0+R2V0UHJlZmVyZW5jZShcQ2FuYWRpYW5UYXhlczo6UFJPRklMRV9QUkVGKSk7CiAgICAgICAgcmV0dXJuICRwcm9maWxlLT50YXhlc19leGlzdF9mb3IoJHByb2ZpbGU6Ok5BVElPTkFMKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3NvdXJjZV9sb2NhdGlvbiggXGNnX2Vjb21tX2NvbXBhbnlfYWRkcmVzcyAkYWRkciApCiAgICB7CiAgICAgICAgJHRoaXMtPl9zcmNfbG9jYXRpb24gPSAkYWRkcjsKICAgICAgICBpZiggJGFkZHItPmNvdW50cnkgIT0gJ0NBJyApIHsKICAgICAgICAgICAgYXVkaXQoJycsJHRoaXMtPl9tb2QtPkdldE5hbWUoKSwnV0FSTklORzogQSBzaG9wIGxvY2F0aW9uIG5vdCBpbiBDYW5hZGEgd2FzIHNwZWNpZmllZC4nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVnaW9ucyA9IG5ldyBcQ2FuYWRpYW5UYXhlc1xyZWdpb25zKCAkdGhpcy0+X21vZCApOwogICAgICAgICAgICBpZiggISRyZWdpb25zLT5leGlzdHMoICR0aGlzLT5fc3JjX2xvY2F0aW9uLT5zdGF0ZSApICkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCR0aGlzLT5fc3JjX2xvY2F0aW9uLT5zdGF0ZS4nIGlzIG5vdCBhIHZhbGlkIGNhbmFkaWFuIHByb3ZpbmNlL3RlcnJpdG9yeScpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGVzdF9sb2NhdGlvbiggXGNnZV9hZGRyZXNzICRhZGRyICkKICAgIHsKICAgICAgICAkdGhpcy0+X2Rlc3RfbG9jYXRpb24gPSAkYWRkcjsKICAgICAgICBpZiggJGFkZHItPmNvdW50cnkgPT0gJ0NBJyApIHsKICAgICAgICAgICAgJHJlZ2lvbnMgPSBuZXcgXENhbmFkaWFuVGF4ZXNccmVnaW9ucyggJHRoaXMtPl9tb2QgKTsKICAgICAgICAgICAgaWYoICEkcmVnaW9ucy0+ZXhpc3RzKCAkdGhpcy0+X2Rlc3RfbG9jYXRpb24tPnN0YXRlICkgKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPl9kZXN0X2xvY2F0aW9uLT5zdGF0ZS4nIGlzIG5vdCBhIHZhbGlkIGNhbmFkaWFuIHByb3ZpbmNlL3RlcnJpdG9yeScpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxjdWxhdGVfdGF4ZXMoIFxjZ19lY29tbV9jYXJ0aXRlbSAkaXRlbSApCiAgICB7CiAgICAgICAgLy8gcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgb2YgdGF4IG5hbWUgYW5kIHRvdGFsLiBvciBudWxsLgoKICAgICAgICAvLyBpZiBubyBkZXN0aW5hdGlvbiwgb3Igbm90IGluIGNhbmFkYS4uLiBubyB0YXhlcy4KICAgICAgICBpZiggISR0aGlzLT5fc3JjX2xvY2F0aW9uIHx8ICR0aGlzLT5fc3JjX2xvY2F0aW9uLT5jb3VudHJ5ICE9ICdDQScgKSByZXR1cm47CiAgICAgICAgaWYoICEkdGhpcy0+X2Rlc3RfbG9jYXRpb24gfHwgJHRoaXMtPl9kZXN0X2xvY2F0aW9uLT5jb3VudHJ5ICE9ICdDQScgKSByZXR1cm47CiAgICAgICAgJHByb2ZpbGUgPSB1bnNlcmlhbGl6ZSgkdGhpcy0+X21vZC0+R2V0UHJlZmVyZW5jZShcQ2FuYWRpYW5UYXhlczo6UFJPRklMRV9QUkVGKSk7CiAgICAgICAgJHRheF9zaGlwcGluZyA9IChib29sKSAkdGhpcy0+X21vZC0+R2V0UHJlZmVyZW5jZShcQ2FuYWRpYW5UYXhlczo6U0hJUFBJTkdfUFJFRiwwKTsKCiAgICAgICAgJGtleSA9IG51bGw7CiAgICAgICAgaWYoICR0aGlzLT5fZGVzdF9sb2NhdGlvbi0+c3RhdGUgIT0gJHRoaXMtPl9zcmNfbG9jYXRpb24tPnN0YXRlICkgewogICAgICAgICAgICAvLyBzaGlwcGluZyB0byBhIGRpZmZlcmVudCBwcm92aW5jZS4uLiBqdXN0IHVzZSBuYXRpb25hbCB0YXhlcwogICAgICAgICAgICAka2V5ID0gJHByb2ZpbGU6Ok5BVElPTkFMOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGtleSA9ICR0aGlzLT5fc3JjX2xvY2F0aW9uLT5zdGF0ZTsKICAgICAgICB9CiAgICAgICAgJGRlZm4gPSAkcHJvZmlsZS0+Z2V0X3RheGVzX2ZvciggJGtleSApOwogICAgICAgICR0YXhlcyA9ICRkZWZuLT5nZXRfcmF3X3RheGVzKCk7CgogICAgICAgICRvdXQgPSBbXTsKICAgICAgICBmb3JlYWNoKCAkdGF4ZXMgYXMgJHRheF9uYW1lID0+ICR0YXggKSB7CiAgICAgICAgICAgIHN3aXRjaCggJGl0ZW0tPmdldF90eXBlKCkgKSB7CiAgICAgICAgICAgIGNhc2UgJGl0ZW06OlRZUEVfUFJPRFVDVDoKICAgICAgICAgICAgICAgIGlmKCAkdGF4Wyd0YXhfcHJvZHVjdHMnXSApICRvdXRbJHRheF9uYW1lXSA9IHJvdW5kKCRpdGVtLT5nZXRfaXRlbV90b3RhbCgpICogJHRheFsncmF0ZSddIC8gMTAwLjAgLDIpOwogICAgICAgICAgICBjYXNlICRpdGVtOjpUWVBFX1NFUlZJQ0U6CiAgICAgICAgICAgICAgICBpZiggJHRheFsndGF4X3NlcnZpY2VzJ10gKSAkb3V0WyR0YXhfbmFtZV0gPSByb3VuZCgkaXRlbS0+Z2V0X2l0ZW1fdG90YWwoKSAqICR0YXhbJ3JhdGUnXSAvIDEwMC4wICwyKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICRpdGVtOjpUWVBFX1NISVBQSU5HOgogICAgICAgICAgICAgICAgaWYoICR0YXhfc2hpcHBpbmcgKSAkb3V0WyR0YXhfbmFtZV0gPSByb3VuZCgkaXRlbS0+Z2V0X2l0ZW1fdG90YWwoKSAqICRyYXRlLDIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIGNvdW50KCRvdXQpICkgcmV0dXJuICRvdXQ7CiAgICB9Cgp9IC8vIGVuZCBvZiBjbGFzczs=]]></data>
	</file>
	<file>
	  <filename>/lib/class.tax_profile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENhbmFkaWFuVGF4ZXM7CgpjbGFzcyB0YXhfcHJvZmlsZQp7CiAgICBjb25zdCBOQVRJT05BTCA9ICdfX0FMTF9fJzsKICAgIHByaXZhdGUgJF9kZWZuczsKICAgIHByaXZhdGUgJF90YXhfc2hpcHBpbmc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCBhcnJheSAkdGF4ZGF0YSA9IG51bGwsICR0YXhfc2hpcHBpbmcgPSBmYWxzZSApCiAgICB7CiAgICAgICAgJHRoaXMtPl90YXhfc2hpcHBpbmcgPSAoYm9vbCkgJHRheF9zaGlwcGluZzsKICAgICAgICBpZiggIWlzX2FycmF5KCR0YXhkYXRhKSApIHJldHVybjsKCiAgICAgICAgZm9yZWFjaCggJHRheGRhdGEgYXMgJGtleSA9PiAkbGlzdCApIHsKICAgICAgICAgICAgJGtleSA9IHRyaW0oJGtleSk7CiAgICAgICAgICAgIGlmKCAkdGhpcy0+dGF4ZXNfZXhpc3RfZm9yKCAka2V5ICkgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGRhdGEgcGFzc2VkIHRvICcuX19NRVRIT0RfXyk7CiAgICAgICAgICAgIGlmKCBcY2dlX2FycmF5Ojppc19oYXNoKCAkbGlzdCApICYmIGlzc2V0KCAkbGlzdFsnbmFtZSddICkgKSAkbGlzdCA9IFsgJGxpc3QgXTsKICAgICAgICAgICAgJHRoaXMtPl9kZWZuc1ska2V5XSA9IG5ldyB0YXhfZGVmbigka2V5LCAkbGlzdCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0YXhlc19leGlzdF9mb3IoICRrZXkgKQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9kZWZucyApIHJldHVybiBmYWxzZTsKICAgICAgICBpZiggIWFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X2RlZm5zKSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgJGRlZm4gPSAkdGhpcy0+X2RlZm5zWyRrZXldOwogICAgICAgIHJldHVybiAkZGVmbi0+aGFzX3ZhbGlkX3RheCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfdGF4ZXNfZm9yKCAka2V5ICkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT50YXhlc19leGlzdF9mb3IoICRrZXkgKSApIHJldHVybjsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kZWZuc1ska2V5XTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpcHBpbmdfdGF4YWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSAkdGhpcy0+X3RheF9zaGlwcGluZzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3JlZ2lvbnMoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV9rZXlzKCR0aGlzLT5fZGVmbnMpOwogICAgfQp9CgoKY2xhc3MgdGF4X2RlZm4KewogICAgcHJpdmF0ZSAkX2tleTsKICAgIHByaXZhdGUgJF90YXhlczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoICRrZXksIGFycmF5ICR0YXhlcyApCiAgICB7CiAgICAgICAgJHRoaXMtPl9rZXkgPSB0cmltKCRrZXkpOwogICAgICAgIGlmKCAhY291bnQoJHRheGVzKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YSBwYXNzZWQgdG8gJy5fX01FVEhPRF9fKTsKCiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICR0YXhlcyBhcyAkbmFtZSA9PiAkcmVjICkgewogICAgICAgICAgICBpZiggISR0aGlzLT5pc192YWxpZF90YXgoICRyZWMgKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkb3V0WyRyZWNbJ25hbWUnXV0gPSAkcmVjOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X3RheGVzID0gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNfdmFsaWRfdGF4KCBhcnJheSAkcmVjICkgewogICAgICAgICRuYW1lID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcmVjLCduYW1lJyk7CiAgICAgICAgJHJhdGUgPSBcY2dlX3BhcmFtOjpnZXRfZmxvYXQoJHJlYywncmF0ZScpOwogICAgICAgIGlmKCAhJG5hbWUgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYoICRyYXRlIDwgMC4wMDAwMDEgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9rZXkoKSB7IHJldHVybiAkdGhpcy0+X2tleTsgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcmF3X3RheGVzKCkgeyByZXR1cm4gJHRoaXMtPl90YXhlczsgfQogICAgcHVibGljIGZ1bmN0aW9uIGhhc190YXgoJHRheG5hbWUpIHsgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJHRoaXMtPl90YXhlcywkdGF4bmFtZSk7IH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzX3ZhbGlkX3RheCgpCiAgICB7CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPl90YXhlcyBhcyAkcmVjICkgewogICAgICAgICAgICBpZiggJHRoaXMtPmlzX3ZhbGlkX3RheCggJHJlYyApICkgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfdGF4ZXMoKQogICAgewogICAgICAgIC8vIGdldCB0aGUgdGF4ZXMgYXMgcmF0ZXMuCiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICR0aGlzLT5fdGF4ZXMgYXMgJG5hbWUgPT4gJHJlYyApIHsKICAgICAgICAgICAgJG91dFskbmFtZV0gPSAkcmVjWydyYXRlJ10gLyAxMDAuMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENhbmFkaWFuVGF4ZXM7CgpmaW5hbCBjbGFzcyB1dGlscwp7CiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9kZmx0X3RheHByb2ZpbGUoKQogICAgewogICAgICAgICRHU1QgPSBbICduYW1lJz0+J0dTVCcsICdyYXRlJz0+NSwgJ3RheF9wcm9kdWN0cyc9PjEsICd0YXhfc2VydmljZXMnPT4xIF07CiAgICAgICAgJEhTVDEzID0gWyAnbmFtZSc9PidIU1QnLCAncmF0ZSc9PjEzLCAndGF4X3Byb2R1Y3RzJz0+MSwgJ3RheF9zZXJ2aWNlcyc9PjEgXTsKICAgICAgICAkSFNUMTQgPSBbICduYW1lJz0+J0hTVCcsICdyYXRlJz0+MTQsICd0YXhfcHJvZHVjdHMnPT4xLCAndGF4X3NlcnZpY2VzJz0+MSBdOwogICAgICAgICRIU1QxNSA9IFsgJ25hbWUnPT4nSFNUJywgJ3JhdGUnPT4xNSwgJ3RheF9wcm9kdWN0cyc9PjEsICd0YXhfc2VydmljZXMnPT4xIF07CgogICAgICAgICR0YXhlcyA9IFsgdGF4X3Byb2ZpbGU6Ok5BVElPTkFMID0+ICRHU1QsCiAgICAgICAgICAgICAgICAgICAnQUInID0+ICRHU1QsCiAgICAgICAgICAgICAgICAgICAnQkMnID0+IFsgJEdTVCwgWyAnbmFtZSc9PidQU1QnLCAncmF0ZSc9PjcsICd0YXhfcHJvZHVjdHMnPT4xLCAndGF4X3NlcnZpY2VzJz0+IDAgXSBdLAogICAgICAgICAgICAgICAgICAgJ1NLJyA9PiBbICRHU1QsIFsgJ25hbWUnPT4nUFNUJywgJ3JhdGUnPT41LCAndGF4X3Byb2R1Y3RzJz0+MSwgJ3RheF9zZXJ2aWNlcyc9PiAwIF0gXSwKICAgICAgICAgICAgICAgICAgICdPTicgPT4gJEhTVDEzLAogICAgICAgICAgICAgICAgICAgJ1FDJyA9PiBbICRHU1QsIFsgJ25hbWUnPT4nUE9TVCcsICdyYXRlJz0+MC45NzUsICd0YXhfcHJvZHVjdHMnPT4xLCAndGF4X3NlcnZpY2VzJz0+MCBdIF0sCiAgICAgICAgICAgICAgICAgICAnTkInID0+ICRIU1QxNSwKICAgICAgICAgICAgICAgICAgICdOTCcgPT4gJEhTVDE1LAogICAgICAgICAgICAgICAgICAgJ05TJyA9PiAkSFNUMTUsCiAgICAgICAgICAgICAgICAgICAnUEUnID0+ICRIU1QxNCwKICAgICAgICAgICAgICAgICAgICdOVCcgPT4gJEdTVCwKICAgICAgICAgICAgICAgICAgICdOVScgPT4gJEdTVCwKICAgICAgICAgICAgICAgICAgICdZVCcgPT4gJEdTVCwKICAgICAgICAgICAgXTsKICAgICAgICAkdGF4X3Byb2ZpbGUgPSBuZXcgdGF4X3Byb2ZpbGUoICR0YXhlcyApOwogICAgICAgIHJldHVybiAkdGF4X3Byb2ZpbGU7CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENhbmFkaWFuVGF4ZXM7CgokdGF4X3Byb2ZpbGUgPSB1dGlsczo6Z2V0X2RmbHRfdGF4cHJvZmlsZSgpOwokdGhpcy0+U2V0UHJlZmVyZW5jZShcQ2FuYWRpYW5UYXhlczo6UFJPRklMRV9QUkVGLHNlcmlhbGl6ZSgkdGF4X3Byb2ZpbGUpKTs=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENhbmFkaWFuVGF4ZXM7CgokdGF4X3Byb2ZpbGUgPSB1dGlsczo6Z2V0X2RmbHRfdGF4cHJvZmlsZSgpOwokdGhpcy0+U2V0UHJlZmVyZW5jZShcQ2FuYWRpYW5UYXhlczo6UFJPRklMRV9QUkVGLHNlcmlhbGl6ZSgkdGF4X3Byb2ZpbGUpKTs=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJDYW5hZGlhblRheGVzIgp2ZXJzaW9uID0gMS4yCmF1dGhvciA9ICJjYWxndXkxMDAwIgphdXRob3JlbWFpbCA9ICJjYWxndXkxMDAwQGdtYWlsLmNvbSIKbWluY21zdmVyc2lvbiA9ICIyLjIuMiIKbGF6eWxvYWRhZG1pbiA9IDEKbGF6eWxvYWRmcm9udGVuZCA9IDEKW2RlcGVuZHNdCkNHRWNvbW1lcmNlQmFzZSA9ICIxLjguNSIKQ0dFeHRlbnNpb25zID0gIjEuNTYuMiIK]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/defaultadmin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Zvcm1fc3RhcnR9CjxkaXYgY2xhc3M9ImNfZnVsbCBjZiI+CiAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9Ii8+CiAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zZXRhc3RheCIgdmFsdWU9InskbW9kLT5MYW5nKCdzZXRhc3RheCcpfSIvPgo8L2Rpdj4KCnskdGF4X3JlZ2lvbnM9JHByb2ZpbGUtPmdldF9yZWdpb25zKCl9Cntmb3JlYWNoICR0YXhfcmVnaW9ucyBhcyAkcmVnaW9ufQogIDxkaXYgaWQ9InJnbl97JHJlZ2lvbn0iPgogICAgIDxoND57JGxhYmVscy0+JHJlZ2lvbn0ge2lmICRyZWdpb24gIT0gJ19fQUxMX18nfTxlbT4oeyRyZWdpb259KTwvZW0+ey9pZn08L2g0PgogICAgIHskZGVmbj0kcHJvZmlsZS0+Z2V0X3RheGVzX2ZvcigkcmVnaW9uKX0KICAgICB7JHRheGVzPSRkZWZuLT5nZXRfcmF3X3RheGVzKCl9CiAgICAgeyRjbnQ9Y291bnQoJHRheGVzKX0KCiAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luLWxlZnQ6IDJlbTsiPgogICAgICAgPHRoZWFkPgogICAgICAgICA8dHI+CgkgICA8dGg+eyRtb2QtPkxhbmcoJ25hbWUnKX08L3RoPgoJICAgPHRoPnskbW9kLT5MYW5nKCdyYXRlJyl9PC90aD4KCSAgIDx0aD57JG1vZC0+TGFuZygndGF4X3Byb2R1Y3RzJyl9PC90aD4KCSAgIDx0aD57JG1vZC0+TGFuZygndGF4X3NlcnZpY2VzJyl9PC90aD4KCSA8L3RyPgogICAgICAgPC90aGVhZD4KICAgICAgIDx0Ym9keT4KICAgICAgIHtmb3JlYWNoICR0YXhlcyBhcyAkcmVjIH0KICAgICAgICAgIDx0cj4KCSAgICA8dGQ+PGlucHV0IGNsYXNzPSJncmlkXzMiIG5hbWU9InskYWN0aW9uaWR9dGF4bmFtZV97JHJlZ2lvbn1feyRyZWNAaW5kZXh9IiB2YWx1ZT0ieyRyZWMubmFtZX0iLz48L3RkPgoJICAgIDx0ZD48aW5wdXQgY2xhc3M9ImdyaWRfMyIgbmFtZT0ieyRhY3Rpb25pZH10YXhyYXRlX3skcmVnaW9ufV97JHJlY0BpbmRleH0iIHZhbHVlPSJ7JHJlYy5yYXRlfSIvPjwvdGQ+CgkgICAgPHRkPjxpbnB1dCBjbGFzcz0iZ3JpZF8zIHRleHQtY2VudGVyIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH10YXhwcm9kdWN0c197JHJlZ2lvbn1feyRyZWNAaW5kZXh9IiB2YWx1ZT0iMSIge2lmICRyZWMudGF4X3Byb2R1Y3RzfWNoZWNrZWQ9ImNoZWNrZWQiey9pZn0iLz48L3RkPgoJICAgIDx0ZD48aW5wdXQgY2xhc3M9ImdyaWRfMyB0ZXh0LWNlbnRlciIgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9dGF4c2VydmljZXNfeyRyZWdpb259X3skcmVjQGluZGV4fSIgdmFsdWU9IjEiIHtpZiAkcmVjLnRheF9zZXJ2aWNlc31jaGVja2VkPSJjaGVja2VkInsvaWZ9Ii8+PC90ZD4KCSAgPC90cj4KICAgICAgIDwvdGJvZHk+CiAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAgICA8dHI+CgkgICAgPHRkPjxpbnB1dCBjbGFzcz0iZ3JpZF8zIiBuYW1lPSJ7JGFjdGlvbmlkfXRheG5hbWVfeyRyZWdpb259X3skY250fSIgdmFsdWU9IiIvPjwvdGQ+CgkgICAgPHRkPjxpbnB1dCBjbGFzcz0iZ3JpZF8zIiBuYW1lPSJ7JGFjdGlvbmlkfXRheHJhdGVfeyRyZWdpb259X3skY250fSIgdmFsdWU9IiIvPjwvdGQ+CgkgICAgPHRkPjxpbnB1dCBjbGFzcz0iZ3JpZF8zIHRleHQtY2VudGVyIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH10YXhwcm9kdWN0c197JHJlZ2lvbn1feyRjbnR9IiB2YWx1ZT0iMSIvPjwvdGQ+CgkgICAgPHRkPjxpbnB1dCBjbGFzcz0iZ3JpZF8zIHRleHQtY2VudGVyIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH10YXhzZXJ2aWNlc197JHJlZ2lvbn1feyRjbnR9IiB2YWx1ZT0iMSIvPjwvdGQ+CgkgIDwvdHI+CiAgICAgPC90YWJsZT4KICA8L2Rpdj4KICA8aHIvPgp7L2ZvcmVhY2h9CjxoND57JG1vZC0+TGFuZygnb3RoZXInKX06PC9oND4KPGRpdiBjbGFzcz0iY19mdWxsIGNmIj4KICA8bGFiZWwgY2xhc3M9ImdyaWRfMyI+eyRtb2QtPkxhbmcoJ3RheF9zaGlwcGluZycpfTo8L2xhYmVsPgogIDxzZWxlY3QgY2xhc3M9ImdyaWRfOSIgbmFtZT0ieyRhY3Rpb25pZH10YXhfc2hpcHBpbmciPntjZ2VfeWVzbm9fb3B0aW9ucyBzZWxlY3RlZD0kdGF4X3NoaXBwaW5nfTwvc2VsZWN0Pgo8L2Rpdj4Ke2Zvcm1fZW5kfQo=]]></data>
	</file>
</module>
