<?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>UpUtils</name>
	<version>0.0.6</version>
  <mincmsversion>1.10.3</mincmsversion>
	<help><![CDATA[PGgyPkRvY3VtZW50YXRpb248L2gyPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHV0aWxpdHkgbWV0aG9kcyBoYW5keSB3aGVuIHByb2dyYW1taW5nIG1vZHVsZXMuPC9wPgoKPGgyPlN1cHBvcnQ8L2gyPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCB0aGUgY21zIGRldmVsb3BtZW50IGZvcmdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmciPmRldi5jbXNtYWRlc2ltcGxlLm9yZzwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ1wiPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yKHMpLCBhcm5vdWQgZXQgYWxsIGNhbiBzb21ldGltZXMgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2Ntc1wiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yKHMpIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPmxpY2Vuc2U8L2E+IGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMj5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gyPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTEsIEFybm91ZCB2YW4gU3VzdGVyZW4gPGEgaHJlZj0ibWFpbHRvOmFybm91ZEB1cHNlcnZpY2UubmwiPiZsdDthcm5vdWRAdXBzZXJ2aWNlLm5sJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KCjxici8+PHN0cm9uZz5TdXBwb3J0IG1vcmUgbW9kcyBsaWtlIHRoaXM6PC9zdHJvbmc+Cgo8cD4KPGZvcm0gYWN0aW9uPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2NnaS1iaW4vd2Vic2NyIiBtZXRob2Q9InBvc3QiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjbWQiIHZhbHVlPSJfcy14Y2xpY2siPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlbmNyeXB0ZWQiIHZhbHVlPSItLS0tLUJFR0lOIFBLQ1M3LS0tLS1NSUlIVHdZSktvWklodmNOQVFjRW9JSUhRRENDQnp3Q0FRRXhnZ0V3TUlJQkxBSUJBRENCbERDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwQ0FRQXdEUVlKS29aSWh2Y05BUUVCQlFBRWdZQW5MV3ZqWWkyY1FZQzRUeFlsU2htYjhMOG1UZjN4d1ZpSlU1a3l6YUpWUmtCblcvSkJGVDBSQ283UkZHV1FZTE9LNkJCNm5nOTZuYzFIT2FDeG1INmlxMk1KcVN2K0U4MTFoQ01lQTh4Wjdxekp0d0M4Nk5oRnNueVlubW94WXRUWXEvME5ncGQvajNUOU43RTlYVTMwQ0VJdlZvNkMwZnhPdmVBbktKK2pZakVMTUFrR0JTc09Bd0lhQlFBd2djd0dDU3FHU0liM0RRRUhBVEFVQmdncWhraUc5dzBEQndRSUVtWlZvVGg2SVVXQWdhZ3h5elg5U3p3b3lPYTRmZHo5MnM3WnJtdzE1R2J0ZUxpekFtaHJDQmFVT3MzUzFpVjNlTlNOKzBIa1RxQXZvREpidmgwazF5bWpaYVBrMDViVWFZMTRqc3RZOEsranExaVNWVGlJY0hZc3ljalZBSk9GN0Z2TnZkUGh2ZnJMY3cwZFdEMlppNm5yQ0JmdVF3anB2YlM5QncrenV3amsvK1VEdUJsM1BzS21RTFQxTTdrQklpUlNwMW1UWHV5RCt2M2FjNksvRUh6b25wWmdyT2pQdC9wZmlMZjZHdFh4SFcyZ2dnT0hNSUlEZ3pDQ0F1eWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwd0hoY05NRFF3TWpFek1UQXhNekUxV2hjTk16VXdNakV6TVRBeE16RTFXakNCampFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CTVJZd0ZBWURWUVFIRXcxTmIzVnVkR0ZwYmlCV2FXVjNNUlF3RWdZRFZRUUtFd3RRWVhsUVlXd2dTVzVqTGpFVE1CRUdBMVVFQ3hRS2JHbDJaVjlqWlhKMGN6RVJNQThHQTFVRUF4UUliR2wyWlY5aGNHa3hIREFhQmdrcWhraUc5dzBCQ1FFV0RYSmxRSEJoZVhCaGJDNWpiMjB3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1GSFR0MzhSTXhMWEp5TzJTbVMrTmRsNzJUN29LSjR1NHV3KzZhd250QUxXaDAzUGV3bUlKdXpiQUxTY3NUUzRzWm9TMWZLY2lCR29oMTFnSWZIenlsdmtkTmUvaEpsNjYvUkdxcmo1ckZiMDhzQUFCTlR6RFRpcXFOcEplQnNZcy9jMmFpR296cHRYMlJsbkJrdEgrU1VOcEFhalc3MjROdjJXdmhpZjZzRkFnTUJBQUdqZ2U0d2dlc3dIUVlEVlIwT0JCWUVGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyTUlHN0JnTlZIU01FZ2JNd2diQ0FGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyb1lHVXBJR1JNSUdPTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFUxdmRXNTBZV2x1SUZacFpYY3hGREFTQmdOVkJBb1RDMUJoZVZCaGJDQkpibU11TVJNd0VRWURWUVFMRkFwc2FYWmxYMk5sY25Sek1SRXdEd1lEVlFRREZBaHNhWFpsWDJGd2FURWNNQm9HQ1NxR1NJYjNEUUVKQVJZTmNtVkFjR0Y1Y0dGc0xtTnZiWUlCQURBTUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSUZmT2xhYWdGcmw3MStqcTZPS2lkYldGU0UrUTRGcVJPdmRnSU9OdGgrOGtTSy8vWS80aWh1RTRZbXZ6bjVjZUUzUy9pQlNRUU1qeXZiK3MyVFdiUVlEd2NwMTI5T1BJYkQ5ZXBkcjR0Sk9VTmlTb2p3N0JId1lSaVBoNThTMXhHbEZnSEZYd3JFQmIzZGdOYk1VYSt1NHFlY3RzTUFYcFZIbkQ5d0l5Zm1ITVlJQm1qQ0NBWllDQVFFd2daUXdnWTR4Q3pBSkJnTlZCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVXTUJRR0ExVUVCeE1OVFc5MWJuUmhhVzRnVm1sbGR6RVVNQklHQTFVRUNoTUxVR0Y1VUdGc0lFbHVZeTR4RXpBUkJnTlZCQXNVQ214cGRtVmZZMlZ5ZEhNeEVUQVBCZ05WQkFNVUNHeHBkbVZmWVhCcE1Sd3dHZ1lKS29aSWh2Y05BUWtCRmcxeVpVQndZWGx3WVd3dVkyOXRBZ0VBTUFrR0JTc09Bd0lhQlFDZ1hUQVlCZ2txaGtpRzl3MEJDUU14Q3dZSktvWklodmNOQVFjQk1Cd0dDU3FHU0liM0RRRUpCVEVQRncweE1URXdNakl4TVRJd016UmFNQ01HQ1NxR1NJYjNEUUVKQkRFV0JCUmxGN3ZWWDVMWDJYNUl0WTdjbXdBL1JaVEF0VEFOQmdrcWhraUc5dzBCQVFFRkFBU0JnSXJ5WWVrSGhTcitmV0hlbVUvWDZzWXFmZEJ1WTQ5ZDcra0NJcG1kYnRLUlpTK3pDLzgxV2h6OVBMaGh1TmxXU3J4U2N5bVFleCtWbkZnU2dmckdQMTc0Tnp3S0lzOHJkS1l5SHBDaE5abFZQN3BKZUFyYnR1bmRVaXN2cnBjOHdQeGxyak5DTXhSRS9yTlhIZVBtR3V1S2J2UmppM2owbklXZmtGNnVCemNPLS0tLS1FTkQgUEtDUzctLS0tLQoiPgo8aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vZW5fVVMvaS9idG4vYnRuX2RvbmF0ZUNDX0xHLmdpZiIgYm9yZGVyPSIwIiBuYW1lPSJzdWJtaXQiIGFsdD0iUGF5UGFsIC0gVGhlIHNhZmVyLCBlYXNpZXIgd2F5IHRvIHBheSBvbmxpbmUhIj4KPGltZyBhbHQ9IiIgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL25sX05ML2kvc2NyL3BpeGVsLmdpZiIgd2lkdGg9IjEiIGhlaWdodD0iMSI+CjwvZm9ybT48YnIvPjxici8+Cgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBBcm5vdWQgdmFuIFN1c3RlcmVuICZsdDthcm5vdWRAdXBzZXJ2aWNlLm5sJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuMC42PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PGJyIC8+Cgo8Yj4wLjAuNiB2ZXJzaW9uPC9iPiAtIDE4IGFwciAyMDEzPGJyIC8+Cgo8dWw+CjxsaT5maXggbm90aWNlIG9uIFVwQ3VzdG9tRmllbGQuY2xhc3MucGhwPC9saT4KPC91bD4KCgo8Yj4wLjAuNSB2ZXJzaW9uPC9iPiAtIDE3IGp1bCAyMDEyPGJyIC8+Cgo8dWw+CjxsaT5yZW1vdmUgZGVwcmVjYXRlZCBNYXhpbXVtQ01TVmVyc2lvbigpPC9saT4KPGxpPnJlbW92ZSBoZWxwIGZyb20gbGFuZyBmaWxlPC9saT4gCjxsaT5BZGQgVXBJbWFnZU1hbmlwdWxhdGlvbi5jbGFzcy5waHA8L2xpPgo8bGk+QWRkIFVwQ3VzdG9tRmllbGQuY2xhc3MucGhwPC9saT4KPGxpPkV4dGVuZCBVcFNtYXJ0eSB3aXRoIHVwX2Zvcm1zdGFydCBmdW5jdGlvbjwvbGk+CjxsaT5BZGQgbGVuZ3RoIHBhcmFtZXRlciB0byBVcFV0aWxzOjpyYW5kb21fcGFzc3dvcmQoJzEwJyk8L2xpPgo8L3VsPgoKPGI+MC4wLjQgdmVyc2lvbjwvYj4gLSAyMiBva3QgMjAxMSA8YnIgLz4KCjx1bD4KPGxpPmJhc2VEQU86IG1vcmUgY29uc2lzdGVuY3kgKGRiX3Jlc3VsdCAtPiAkZGJyZXN1bHQpPC9saT4KPGxpPmJhc2VEQU86IHZhbHVlIGNoZWNrIG9uIGZldGNoX2FsbF93aGVyZSBtZXRob2Q8L2xpPgo8bGk+VXBMb2dnZXI6IG1vZGlmeSBtc2dfdmFsdWUsIGFkZCAnOicgdG8gc3RyaW5nIHRvIGxvZzwvbGk+CjxsaT5VcEhlbHBlcjogYWRkIG1vZGlmeV9pbnB1dF9zZWxlY2xpc3Q8L2xpPgo8bGk+VXBIZWxwZXI6IGFkZCBnZXRfdXBsb2Fkc19maWxlc19yZWN1cnNpdmU8L2xpPgo8bGk+VXBIZWxwZXI6IGFkZCBhcnJheV9mbGF0IG1ldGhvZDwvbGk+CjxsaT5VcEhlbHBlcjogY2hhbmdlIG1rZGlyIDA3NzUgdG8gMDc3NyBvbiBtYWtlX3VwbG9hZHNfZGlyZWN0b3J5IG1ldGhvZDwvbGk+CjxsaT5VcEhlbHBlcjogYWRkIGFycmF5X3BsdWNrIGFsdGVybmF0aXZlIHRvIGFycmF5X21hcCB3aGljaCBnaXZlcyBwcm9ibGVtcyBvbiBwaHAgPCA1LjMgaG9zdHM8L2xpPgo8bGk+QWRkIFBheVBhbCBkb25hdGlvbiBidXR0b24gdG8gZG9jdW1lbnRhdGlvbjwvbGk+CjxsaT5DTVNNUyAxLjEwIGNvbXBhdGlibGU8L2xpPgo8L3VsPiA8YnIgLz4KCjxiPjAuMC4zIHZlcnNpb248L2I+IC0gOSBhdWcgMjAxMSA8YnIgLz4KCjx1bD4KPGxpPkFkZCBhdXRvbG9hZGVyIHRvIFVwVXRpbHMgY2xhc3M8L2xpPgo8bGk+QWRkIFVwVXBsb2FkLmNsYXNzLnBocDwvbGk+CjxsaT5BZGQgVXBMb2dnZXIuY2xhc3MucGhwPC9saT4KPGxpPkFkZCBzb21lIHBhcmFtZXRlciBjaGVja2luZyB0byBiYXNlREFPLmNsYXNzLnBocDwvbGk+CjxsaT5BZGQgZmV0Y2hfYWxsX3doZXJlIGFuZCB1cGRhdGVfd2hlcmUgbWV0aG9kIHRvIGJhc2VEQU8uY2xhc3MucGhwPC9saT4KPGxpPkFkZCBzdWJzaXR1dGUgZnVuY3Rpb25hbGl0eSB0byBVcFNtYXJ0eS5jbGFzcy5waHA8L2xpPgo8bGk+QWRkIHRyZWUgbWFuaXB1bGF0aW9uIG1ldGhvZHMgKGxpa2U6IG1rZGlyLCBybWRpciBjcCkgdG8gVXBIZWxwZXIuY2xhc3MucGhwPC9saT4KPC91bD4gPGJyIC8+Cgo8Yj4wLjAuMiB2ZXJzaW9uPC9iPiAtIDIwIGp1biAyMDExIDxiciAvPgoKPHVsPgo8bGk+TW9kdWxlIGFkZGVkIHRvIHRyYW5zbGF0aW9uIGNlbnRlcjwvbGk+CjxsaT5BZGRlZCBkdXRjaCB0cmFuc2xhdGlvbiBsYW5nL2V4dC9ubF9OTC5waHA8L2xpPgo8bGk+QWRkIG1ldGhvZCBuZXh0X3ByaW1hcnlfa2V5IHRvIGJhc2UgZGF0YSBvYmplY3QgPC9saT4KPC91bD4gPGJyIC8+CgoKPGI+MC4wLjEgaW5pdGlhbCB2ZXJzaW9uPC9iPiAtIDYganVuIDIwMTEKPGJyIC8+]]></about>
	<description><![CDATA[Utility module to store generic classes and code.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGJyIC8+Cgo8Yj4wLjAuNiB2ZXJzaW9uPC9iPiAtIDE4IGFwciAyMDEzPGJyIC8+Cgo8dWw+CjxsaT5maXggbm90aWNlIG9uIFVwQ3VzdG9tRmllbGQuY2xhc3MucGhwPC9saT4KPC91bD4KCgo8Yj4wLjAuNSB2ZXJzaW9uPC9iPiAtIDE3IGp1bCAyMDEyPGJyIC8+Cgo8dWw+CjxsaT5yZW1vdmUgZGVwcmVjYXRlZCBNYXhpbXVtQ01TVmVyc2lvbigpPC9saT4KPGxpPnJlbW92ZSBoZWxwIGZyb20gbGFuZyBmaWxlPC9saT4gCjxsaT5BZGQgVXBJbWFnZU1hbmlwdWxhdGlvbi5jbGFzcy5waHA8L2xpPgo8bGk+QWRkIFVwQ3VzdG9tRmllbGQuY2xhc3MucGhwPC9saT4KPGxpPkV4dGVuZCBVcFNtYXJ0eSB3aXRoIHVwX2Zvcm1zdGFydCBmdW5jdGlvbjwvbGk+CjxsaT5BZGQgbGVuZ3RoIHBhcmFtZXRlciB0byBVcFV0aWxzOjpyYW5kb21fcGFzc3dvcmQoJzEwJyk8L2xpPgo8L3VsPgoKPGI+MC4wLjQgdmVyc2lvbjwvYj4gLSAyMiBva3QgMjAxMSA8YnIgLz4KCjx1bD4KPGxpPmJhc2VEQU86IG1vcmUgY29uc2lzdGVuY3kgKGRiX3Jlc3VsdCAtPiAkZGJyZXN1bHQpPC9saT4KPGxpPmJhc2VEQU86IHZhbHVlIGNoZWNrIG9uIGZldGNoX2FsbF93aGVyZSBtZXRob2Q8L2xpPgo8bGk+VXBMb2dnZXI6IG1vZGlmeSBtc2dfdmFsdWUsIGFkZCAnOicgdG8gc3RyaW5nIHRvIGxvZzwvbGk+CjxsaT5VcEhlbHBlcjogYWRkIG1vZGlmeV9pbnB1dF9zZWxlY2xpc3Q8L2xpPgo8bGk+VXBIZWxwZXI6IGFkZCBnZXRfdXBsb2Fkc19maWxlc19yZWN1cnNpdmU8L2xpPgo8bGk+VXBIZWxwZXI6IGFkZCBhcnJheV9mbGF0IG1ldGhvZDwvbGk+CjxsaT5VcEhlbHBlcjogY2hhbmdlIG1rZGlyIDA3NzUgdG8gMDc3NyBvbiBtYWtlX3VwbG9hZHNfZGlyZWN0b3J5IG1ldGhvZDwvbGk+CjxsaT5VcEhlbHBlcjogYWRkIGFycmF5X3BsdWNrIGFsdGVybmF0aXZlIHRvIGFycmF5X21hcCB3aGljaCBnaXZlcyBwcm9ibGVtcyBvbiBwaHAgPCA1LjMgaG9zdHM8L2xpPgo8bGk+QWRkIFBheVBhbCBkb25hdGlvbiBidXR0b24gdG8gZG9jdW1lbnRhdGlvbjwvbGk+CjxsaT5DTVNNUyAxLjEwIGNvbXBhdGlibGU8L2xpPgo8L3VsPiA8YnIgLz4KCjxiPjAuMC4zIHZlcnNpb248L2I+IC0gOSBhdWcgMjAxMSA8YnIgLz4KCjx1bD4KPGxpPkFkZCBhdXRvbG9hZGVyIHRvIFVwVXRpbHMgY2xhc3M8L2xpPgo8bGk+QWRkIFVwVXBsb2FkLmNsYXNzLnBocDwvbGk+CjxsaT5BZGQgVXBMb2dnZXIuY2xhc3MucGhwPC9saT4KPGxpPkFkZCBzb21lIHBhcmFtZXRlciBjaGVja2luZyB0byBiYXNlREFPLmNsYXNzLnBocDwvbGk+CjxsaT5BZGQgZmV0Y2hfYWxsX3doZXJlIGFuZCB1cGRhdGVfd2hlcmUgbWV0aG9kIHRvIGJhc2VEQU8uY2xhc3MucGhwPC9saT4KPGxpPkFkZCBzdWJzaXR1dGUgZnVuY3Rpb25hbGl0eSB0byBVcFNtYXJ0eS5jbGFzcy5waHA8L2xpPgo8bGk+QWRkIHRyZWUgbWFuaXB1bGF0aW9uIG1ldGhvZHMgKGxpa2U6IG1rZGlyLCBybWRpciBjcCkgdG8gVXBIZWxwZXIuY2xhc3MucGhwPC9saT4KPC91bD4gPGJyIC8+Cgo8Yj4wLjAuMiB2ZXJzaW9uPC9iPiAtIDIwIGp1biAyMDExIDxiciAvPgoKPHVsPgo8bGk+TW9kdWxlIGFkZGVkIHRvIHRyYW5zbGF0aW9uIGNlbnRlcjwvbGk+CjxsaT5BZGRlZCBkdXRjaCB0cmFuc2xhdGlvbiBsYW5nL2V4dC9ubF9OTC5waHA8L2xpPgo8bGk+QWRkIG1ldGhvZCBuZXh0X3ByaW1hcnlfa2V5IHRvIGJhc2UgZGF0YSBvYmplY3QgPC9saT4KPC91bD4gPGJyIC8+CgoKPGI+MC4wLjEgaW5pdGlhbCB2ZXJzaW9uPC9iPiAtIDYganVuIDIwMTEK]]></data>
	</file>
	<file>
	  <filename>/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/docs/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPkRvY3VtZW50YXRpb248L2gyPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHV0aWxpdHkgbWV0aG9kcyBoYW5keSB3aGVuIHByb2dyYW1taW5nIG1vZHVsZXMuPC9wPgoKPGgyPlN1cHBvcnQ8L2gyPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCB0aGUgY21zIGRldmVsb3BtZW50IGZvcmdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmciPmRldi5jbXNtYWRlc2ltcGxlLm9yZzwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ1wiPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yKHMpLCBhcm5vdWQgZXQgYWxsIGNhbiBzb21ldGltZXMgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2Ntc1wiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yKHMpIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPmxpY2Vuc2U8L2E+IGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMj5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gyPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTEsIEFybm91ZCB2YW4gU3VzdGVyZW4gPGEgaHJlZj0ibWFpbHRvOmFybm91ZEB1cHNlcnZpY2UubmwiPiZsdDthcm5vdWRAdXBzZXJ2aWNlLm5sJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KCjxici8+PHN0cm9uZz5TdXBwb3J0IG1vcmUgbW9kcyBsaWtlIHRoaXM6PC9zdHJvbmc+Cgo8cD4KPGZvcm0gYWN0aW9uPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2NnaS1iaW4vd2Vic2NyIiBtZXRob2Q9InBvc3QiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjbWQiIHZhbHVlPSJfcy14Y2xpY2siPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlbmNyeXB0ZWQiIHZhbHVlPSItLS0tLUJFR0lOIFBLQ1M3LS0tLS1NSUlIVHdZSktvWklodmNOQVFjRW9JSUhRRENDQnp3Q0FRRXhnZ0V3TUlJQkxBSUJBRENCbERDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwQ0FRQXdEUVlKS29aSWh2Y05BUUVCQlFBRWdZQW5MV3ZqWWkyY1FZQzRUeFlsU2htYjhMOG1UZjN4d1ZpSlU1a3l6YUpWUmtCblcvSkJGVDBSQ283UkZHV1FZTE9LNkJCNm5nOTZuYzFIT2FDeG1INmlxMk1KcVN2K0U4MTFoQ01lQTh4Wjdxekp0d0M4Nk5oRnNueVlubW94WXRUWXEvME5ncGQvajNUOU43RTlYVTMwQ0VJdlZvNkMwZnhPdmVBbktKK2pZakVMTUFrR0JTc09Bd0lhQlFBd2djd0dDU3FHU0liM0RRRUhBVEFVQmdncWhraUc5dzBEQndRSUVtWlZvVGg2SVVXQWdhZ3h5elg5U3p3b3lPYTRmZHo5MnM3WnJtdzE1R2J0ZUxpekFtaHJDQmFVT3MzUzFpVjNlTlNOKzBIa1RxQXZvREpidmgwazF5bWpaYVBrMDViVWFZMTRqc3RZOEsranExaVNWVGlJY0hZc3ljalZBSk9GN0Z2TnZkUGh2ZnJMY3cwZFdEMlppNm5yQ0JmdVF3anB2YlM5QncrenV3amsvK1VEdUJsM1BzS21RTFQxTTdrQklpUlNwMW1UWHV5RCt2M2FjNksvRUh6b25wWmdyT2pQdC9wZmlMZjZHdFh4SFcyZ2dnT0hNSUlEZ3pDQ0F1eWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwd0hoY05NRFF3TWpFek1UQXhNekUxV2hjTk16VXdNakV6TVRBeE16RTFXakNCampFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CTVJZd0ZBWURWUVFIRXcxTmIzVnVkR0ZwYmlCV2FXVjNNUlF3RWdZRFZRUUtFd3RRWVhsUVlXd2dTVzVqTGpFVE1CRUdBMVVFQ3hRS2JHbDJaVjlqWlhKMGN6RVJNQThHQTFVRUF4UUliR2wyWlY5aGNHa3hIREFhQmdrcWhraUc5dzBCQ1FFV0RYSmxRSEJoZVhCaGJDNWpiMjB3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1GSFR0MzhSTXhMWEp5TzJTbVMrTmRsNzJUN29LSjR1NHV3KzZhd250QUxXaDAzUGV3bUlKdXpiQUxTY3NUUzRzWm9TMWZLY2lCR29oMTFnSWZIenlsdmtkTmUvaEpsNjYvUkdxcmo1ckZiMDhzQUFCTlR6RFRpcXFOcEplQnNZcy9jMmFpR296cHRYMlJsbkJrdEgrU1VOcEFhalc3MjROdjJXdmhpZjZzRkFnTUJBQUdqZ2U0d2dlc3dIUVlEVlIwT0JCWUVGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyTUlHN0JnTlZIU01FZ2JNd2diQ0FGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyb1lHVXBJR1JNSUdPTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFUxdmRXNTBZV2x1SUZacFpYY3hGREFTQmdOVkJBb1RDMUJoZVZCaGJDQkpibU11TVJNd0VRWURWUVFMRkFwc2FYWmxYMk5sY25Sek1SRXdEd1lEVlFRREZBaHNhWFpsWDJGd2FURWNNQm9HQ1NxR1NJYjNEUUVKQVJZTmNtVkFjR0Y1Y0dGc0xtTnZiWUlCQURBTUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSUZmT2xhYWdGcmw3MStqcTZPS2lkYldGU0UrUTRGcVJPdmRnSU9OdGgrOGtTSy8vWS80aWh1RTRZbXZ6bjVjZUUzUy9pQlNRUU1qeXZiK3MyVFdiUVlEd2NwMTI5T1BJYkQ5ZXBkcjR0Sk9VTmlTb2p3N0JId1lSaVBoNThTMXhHbEZnSEZYd3JFQmIzZGdOYk1VYSt1NHFlY3RzTUFYcFZIbkQ5d0l5Zm1ITVlJQm1qQ0NBWllDQVFFd2daUXdnWTR4Q3pBSkJnTlZCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVXTUJRR0ExVUVCeE1OVFc5MWJuUmhhVzRnVm1sbGR6RVVNQklHQTFVRUNoTUxVR0Y1VUdGc0lFbHVZeTR4RXpBUkJnTlZCQXNVQ214cGRtVmZZMlZ5ZEhNeEVUQVBCZ05WQkFNVUNHeHBkbVZmWVhCcE1Sd3dHZ1lKS29aSWh2Y05BUWtCRmcxeVpVQndZWGx3WVd3dVkyOXRBZ0VBTUFrR0JTc09Bd0lhQlFDZ1hUQVlCZ2txaGtpRzl3MEJDUU14Q3dZSktvWklodmNOQVFjQk1Cd0dDU3FHU0liM0RRRUpCVEVQRncweE1URXdNakl4TVRJd016UmFNQ01HQ1NxR1NJYjNEUUVKQkRFV0JCUmxGN3ZWWDVMWDJYNUl0WTdjbXdBL1JaVEF0VEFOQmdrcWhraUc5dzBCQVFFRkFBU0JnSXJ5WWVrSGhTcitmV0hlbVUvWDZzWXFmZEJ1WTQ5ZDcra0NJcG1kYnRLUlpTK3pDLzgxV2h6OVBMaGh1TmxXU3J4U2N5bVFleCtWbkZnU2dmckdQMTc0Tnp3S0lzOHJkS1l5SHBDaE5abFZQN3BKZUFyYnR1bmRVaXN2cnBjOHdQeGxyak5DTXhSRS9yTlhIZVBtR3V1S2J2UmppM2owbklXZmtGNnVCemNPLS0tLS1FTkQgUEtDUzctLS0tLQoiPgo8aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vZW5fVVMvaS9idG4vYnRuX2RvbmF0ZUNDX0xHLmdpZiIgYm9yZGVyPSIwIiBuYW1lPSJzdWJtaXQiIGFsdD0iUGF5UGFsIC0gVGhlIHNhZmVyLCBlYXNpZXIgd2F5IHRvIHBheSBvbmxpbmUhIj4KPGltZyBhbHQ9IiIgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL25sX05ML2kvc2NyL3BpeGVsLmdpZiIgd2lkdGg9IjEiIGhlaWdodD0iMSI+CjwvZm9ybT48YnIvPjxici8+Cgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdVcFV0aWxzJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICdVdGlsaXR5IG1vZHVsZSB0byBzdG9yZSBnZW5lcmljIGNsYXNzZXMgYW5kIGNvZGUuJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVXBVdGlscyBpcyBub3cgaW5zdGFsbGVkJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdVcFV0aWxzIGhhcyBiZWVuIHJlbW92ZWQnOwoKLy8gY3VzdG9tIGZpZWxkcwokbGFuZ1sndGV4dGJveCddID0gJ1RleHQgSW5wdXQnOwokbGFuZ1snY2hlY2tib3gnXSA9ICdDaGVja2JveCc7CiRsYW5nWyd0ZXh0YXJlYSddID0gJ1RleHQgQXJlYSc7CiRsYW5nWydzZWxlY3RfZGF0ZSddID0gJ1NlbGVjdCBEYXRlJzsKJGxhbmdbJ3VwbG9hZF9maWxlJ10gPSAnVXBsb2FkIEZpbGUnOwokbGFuZ1snZHJvcGRvd24nXSA9ICdEcm9wZG93bic7CiRsYW5nWydzZWxlY3RfZmlsZSddID0gJ1NlbGVjdCBGaWxlJzsKJGxhbmdbJ2ZpZWxkc2V0X3N0YXJ0J10gPSAnRmllbGRzZXQgU3RhcnQnOwokbGFuZ1snZmllbGRzZXRfZW5kJ10gPSAnRmllbGRzZXQgRW5kJzsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwVXRpbHMnOwokbGFuZ1snaGVscCddID0gJzxoMj5Eb2N1bWVudGF0aW9uPC9oMj4NCjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgdXRpbGl0eSBtZXRob2RzIGhhbmR5IHdoZW4gcHJvZ3JhbW1pbmcgbW9kdWxlcy48L3A+DQoNCjxoMj5TdXBwb3J0PC9oMj4NCjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCjx1bD4NCjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIGNtcyBkZXZlbG9wbWVudCBmb3JnZSBhdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnIj5kZXYuY21zbWFkZXNpbXBsZS5vcmc8L2E+LjwvbGk+DQo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPVwiaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnXCI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4NCjxsaT5UaGUgYXV0aG9yKHMpLCBhcm5vdWQgZXQgYWxsIGNhbiBzb21ldGltZXMgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2Ntc1wiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvcihzKSBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0DQpvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5saWNlbnNlPC9hPiBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+DQoNCjxoMj5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gyPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDExLCBBcm5vdWQgdmFuIFN1c3RlcmVuIDxhIGhyZWY9Im1haWx0bzphcm5vdWRAdXBzZXJ2aWNlLm5sIj48YXJub3VkQHVwc2VydmljZS5ubD48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQoNCjxzdHJvbmc+U3VwcG9ydCBtb3JlIG1vZHMgbGlrZSB0aGlzOjwvc3Ryb25nPg0KDQo8cD4NCjxmb3JtIGFjdGlvbj0mcXVvdDtodHRwczovL3d3dy5wYXlwYWwuY29tL2NnaS1iaW4vd2Vic2NyJnF1b3Q7IG1ldGhvZD0mcXVvdDtwb3N0JnF1b3Q7Pg0KPGlucHV0IHR5cGU9JnF1b3Q7aGlkZGVuJnF1b3Q7IG5hbWU9JnF1b3Q7Y21kJnF1b3Q7IHZhbHVlPSZxdW90O19zLXhjbGljayZxdW90Oz4NCjxpbnB1dCB0eXBlPSZxdW90O2hpZGRlbiZxdW90OyBuYW1lPSZxdW90O2VuY3J5cHRlZCZxdW90OyB2YWx1ZT0mcXVvdDstLS0tLUJFR0lOIFBLQ1M3LS0tLS1NSUlIVHdZSktvWklodmNOQVFjRW9JSUhRRENDQnp3Q0FRRXhnZ0V3TUlJQkxBSUJBRENCbERDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwQ0FRQXdEUVlKS29aSWh2Y05BUUVCQlFBRWdZQW5MV3ZqWWkyY1FZQzRUeFlsU2htYjhMOG1UZjN4d1ZpSlU1a3l6YUpWUmtCblcvSkJGVDBSQ283UkZHV1FZTE9LNkJCNm5nOTZuYzFIT2FDeG1INmlxMk1KcVN2K0U4MTFoQ01lQTh4Wjdxekp0d0M4Nk5oRnNueVlubW94WXRUWXEvME5ncGQvajNUOU43RTlYVTMwQ0VJdlZvNkMwZnhPdmVBbktKK2pZakVMTUFrR0JTc09Bd0lhQlFBd2djd0dDU3FHU0liM0RRRUhBVEFVQmdncWhraUc5dzBEQndRSUVtWlZvVGg2SVVXQWdhZ3h5elg5U3p3b3lPYTRmZHo5MnM3WnJtdzE1R2J0ZUxpekFtaHJDQmFVT3MzUzFpVjNlTlNOKzBIa1RxQXZvREpidmgwazF5bWpaYVBrMDViVWFZMTRqc3RZOEsranExaVNWVGlJY0hZc3ljalZBSk9GN0Z2TnZkUGh2ZnJMY3cwZFdEMlppNm5yQ0JmdVF3anB2YlM5QncrenV3amsvK1VEdUJsM1BzS21RTFQxTTdrQklpUlNwMW1UWHV5RCt2M2FjNksvRUh6b25wWmdyT2pQdC9wZmlMZjZHdFh4SFcyZ2dnT0hNSUlEZ3pDQ0F1eWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwd0hoY05NRFF3TWpFek1UQXhNekUxV2hjTk16VXdNakV6TVRBeE16RTFXakNCampFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CTVJZd0ZBWURWUVFIRXcxTmIzVnVkR0ZwYmlCV2FXVjNNUlF3RWdZRFZRUUtFd3RRWVhsUVlXd2dTVzVqTGpFVE1CRUdBMVVFQ3hRS2JHbDJaVjlqWlhKMGN6RVJNQThHQTFVRUF4UUliR2wyWlY5aGNHa3hIREFhQmdrcWhraUc5dzBCQ1FFV0RYSmxRSEJoZVhCaGJDNWpiMjB3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1GSFR0MzhSTXhMWEp5TzJTbVMrTmRsNzJUN29LSjR1NHV3KzZhd250QUxXaDAzUGV3bUlKdXpiQUxTY3NUUzRzWm9TMWZLY2lCR29oMTFnSWZIenlsdmtkTmUvaEpsNjYvUkdxcmo1ckZiMDhzQUFCTlR6RFRpcXFOcEplQnNZcy9jMmFpR296cHRYMlJsbkJrdEgrU1VOcEFhalc3MjROdjJXdmhpZjZzRkFnTUJBQUdqZ2U0d2dlc3dIUVlEVlIwT0JCWUVGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyTUlHN0JnTlZIU01FZ2JNd2diQ0FGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyb1lHVXBJR1JNSUdPTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFUxdmRXNTBZV2x1SUZacFpYY3hGREFTQmdOVkJBb1RDMUJoZVZCaGJDQkpibU11TVJNd0VRWURWUVFMRkFwc2FYWmxYMk5sY25Sek1SRXdEd1lEVlFRREZBaHNhWFpsWDJGd2FURWNNQm9HQ1NxR1NJYjNEUUVKQVJZTmNtVkFjR0Y1Y0dGc0xtTnZiWUlCQURBTUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSUZmT2xhYWdGcmw3MStqcTZPS2lkYldGU0UrUTRGcVJPdmRnSU9OdGgrOGtTSy8vWS80aWh1RTRZbXZ6bjVjZUUzUy9pQlNRUU1qeXZiK3MyVFdiUVlEd2NwMTI5T1BJYkQ5ZXBkcjR0Sk9VTmlTb2p3N0JId1lSaVBoNThTMXhHbEZnSEZYd3JFQmIzZGdOYk1VYSt1NHFlY3RzTUFYcFZIbkQ5d0l5Zm1ITVlJQm1qQ0NBWllDQVFFd2daUXdnWTR4Q3pBSkJnTlZCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVXTUJRR0ExVUVCeE1OVFc5MWJuUmhhVzRnVm1sbGR6RVVNQklHQTFVRUNoTUxVR0Y1VUdGc0lFbHVZeTR4RXpBUkJnTlZCQXNVQ214cGRtVmZZMlZ5ZEhNeEVUQVBCZ05WQkFNVUNHeHBkbVZmWVhCcE1Sd3dHZ1lKS29aSWh2Y05BUWtCRmcxeVpVQndZWGx3WVd3dVkyOXRBZ0VBTUFrR0JTc09Bd0lhQlFDZ1hUQVlCZ2txaGtpRzl3MEJDUU14Q3dZSktvWklodmNOQVFjQk1Cd0dDU3FHU0liM0RRRUpCVEVQRncweE1URXdNakl4TVRJd016UmFNQ01HQ1NxR1NJYjNEUUVKQkRFV0JCUmxGN3ZWWDVMWDJYNUl0WTdjbXdBL1JaVEF0VEFOQmdrcWhraUc5dzBCQVFFRkFBU0JnSXJ5WWVrSGhTcitmV0hlbVUvWDZzWXFmZEJ1WTQ5ZDcra0NJcG1kYnRLUlpTK3pDLzgxV2h6OVBMaGh1TmxXU3J4U2N5bVFleCtWbkZnU2dmckdQMTc0Tnp3S0lzOHJkS1l5SHBDaE5abFZQN3BKZUFyYnR1bmRVaXN2cnBjOHdQeGxyak5DTXhSRS9yTlhIZVBtR3V1S2J2UmppM2owbklXZmtGNnVCemNPLS0tLS1FTkQgUEtDUzctLS0tLQ0KJnF1b3Q7Pg0KPGlucHV0IHR5cGU9JnF1b3Q7aW1hZ2UmcXVvdDsgc3JjPSZxdW90O2h0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL2VuX1VTL2kvYnRuL2J0bl9kb25hdGVDQ19MRy5naWYmcXVvdDsgYm9yZGVyPSZxdW90OzAmcXVvdDsgbmFtZT0mcXVvdDtzdWJtaXQmcXVvdDsgYWx0PSZxdW90O1BheVBhbCAtIFRoZSBzYWZlciwgZWFzaWVyIHdheSB0byBwYXkgb25saW5lISZxdW90Oz4NCjxpbWcgYWx0PSZxdW90OyZxdW90OyBib3JkZXI9JnF1b3Q7MCZxdW90OyBzcmM9JnF1b3Q7aHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vbmxfTkwvaS9zY3IvcGl4ZWwuZ2lmJnF1b3Q7IHdpZHRoPSZxdW90OzEmcXVvdDsgaGVpZ2h0PSZxdW90OzEmcXVvdDs+DQo8L2Zvcm0+PGJyLz48YnIvPg0KDQo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4NCjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZA0KYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TDQpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gDQpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4NCjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4NCic7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnRGllbnN0cHJvZ3JhbW0gTW9kdWwsIHVtIGdlbmVyaXNjaGUgS2xhc3NlbiB1bmQgQ29kZSB6dSBzcGVpY2hlcm4uJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVXBVdGlscyBpc3QgaW5zdGFsbGllcnQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1VwVXRpbHMgd3VyZGUgZW50ZmVybnQnOwokbGFuZ1sncWNhJ10gPSAnUDAtMTU4MzI5ODExLTEzMTg4NjE4NzIxMjcnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xODc2NTY5MzM0LjEzMTk5MDgyOTkuMTMxOTkwODI5OS4xMzE5OTA4Mjk5LjEnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMTk5MDgyOTkuMS4xLnV0bWNjbj0ob3JnYW5pYyl8dXRtY3NyPWdvb2dsZXx1dG1jdHI9aHR0cDovL3RyYW5zbGF0aW9ucy5jbXNtYWRlc2ltcGxlLm9yZy98dXRtY21kPW9yZ2FuaWMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwVXRpbHMgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDI+RG9jdW1lbnRhdGlvbjwvaDI+DQo8cD5DZSBtb2R1bGUgZm91cm5pIGRlcyBtJmVhY3V0ZTt0aG9kZXMgdXRpbGl0YWlyZXMgYXBwciZlYWN1dGU7Y2lhYmxlcyBwb3VyIHByb2dyYW1tZXIgZGVzIG1vZHVsZXMuPC9wPg0KDQo8aDI+U3VwcG9ydDwvaDI+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgZGV2ZWxvcG1lbnQgZm9yZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+ZGV2LmNtc21hZGVzaW1wbGUub3JnPC9hPi48L2xpPg0KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ1wiPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvcihzKSwgYXJub3VkIGV0IGFsbCBjYW4gc29tZXRpbWVzIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXNcIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IocykgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+bGljZW5zZTwvYT4gZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDI+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMj4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAxMSwgQXJub3VkIHZhbiBTdXN0ZXJlbiA8YSBocmVmPSJtYWlsdG86YXJub3VkQHVwc2VydmljZS5ubCI+PGFybm91ZEB1cHNlcnZpY2Uubmw+PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQ0KaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUw0KTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIA0Kc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+DQo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+DQonOwokbGFuZ1snYWRtaW5kZXNjcmlwdGlvbiddID0gJ01vZHVsZSB1dGlsaXRhaXJlIHBvdXIgc3RvY2tlciBkZXMgY2xhc3NlcyBldCBkdSBjb2RlIGcmZWFjdXRlO24mZWFjdXRlO3JpcXVlLic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1VwVXRpbHMgZXN0IG1haW50ZW5hbnQgaW5zdGFsbCZlYWN1dGU7JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdVcFV0aWxzIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgZCZlYWN1dGU7c2luc3RhbGwmZWFjdXRlOyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/hu_HU.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwVXRpbHMgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDI+RG9jdW1lbnRhdGlvbjwvaDI+DQo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHV0aWxpdHkgbWV0aG9kcyBoYW5keSB3aGVuIHByb2dyYW1taW5nIG1vZHVsZXMuPC9wPg0KDQo8aDI+U3VwcG9ydDwvaDI+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgZGV2ZWxvcG1lbnQgZm9yZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+ZGV2LmNtc21hZGVzaW1wbGUub3JnPC9hPi48L2xpPg0KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ1wiPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvcihzKSwgYXJub3VkIGV0IGFsbCBjYW4gc29tZXRpbWVzIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXNcIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IocykgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+bGljZW5zZTwvYT4gZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDI+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMj4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAxMSwgQXJub3VkIHZhbiBTdXN0ZXJlbiA8YSBocmVmPSJtYWlsdG86YXJub3VkQHVwc2VydmljZS5ubCI+PGFybm91ZEB1cHNlcnZpY2Uubmw+PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KDQo8c3Ryb25nPlN1cHBvcnQgbW9yZSBtb2RzIGxpa2UgdGhpczo8L3N0cm9uZz4NCg0KPHA+DQo8Zm9ybSBhY3Rpb249JnF1b3Q7aHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjciZxdW90OyBtZXRob2Q9JnF1b3Q7cG9zdCZxdW90Oz4NCjxpbnB1dCB0eXBlPSZxdW90O2hpZGRlbiZxdW90OyBuYW1lPSZxdW90O2NtZCZxdW90OyB2YWx1ZT0mcXVvdDtfcy14Y2xpY2smcXVvdDs+DQo8aW5wdXQgdHlwZT0mcXVvdDtoaWRkZW4mcXVvdDsgbmFtZT0mcXVvdDtlbmNyeXB0ZWQmcXVvdDsgdmFsdWU9JnF1b3Q7LS0tLS1CRUdJTiBQS0NTNy0tLS0tTUlJSFR3WUpLb1pJaHZjTkFRY0VvSUlIUURDQ0J6d0NBUUV4Z2dFd01JSUJMQUlCQURDQmxEQ0JqakVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkJNUll3RkFZRFZRUUhFdzFOYjNWdWRHRnBiaUJXYVdWM01SUXdFZ1lEVlFRS0V3dFFZWGxRWVd3Z1NXNWpMakVUTUJFR0ExVUVDeFFLYkdsMlpWOWpaWEowY3pFUk1BOEdBMVVFQXhRSWJHbDJaVjloY0dreEhEQWFCZ2txaGtpRzl3MEJDUUVXRFhKbFFIQmhlWEJoYkM1amIyMENBUUF3RFFZSktvWklodmNOQVFFQkJRQUVnWUFuTFd2allpMmNRWUM0VHhZbFNobWI4TDhtVGYzeHdWaUpVNWt5emFKVlJrQm5XL0pCRlQwUkNvN1JGR1dRWUxPSzZCQjZuZzk2bmMxSE9hQ3htSDZpcTJNSnFTditFODExaENNZUE4eFo3cXpKdHdDODZOaEZzbnlZbm1veFl0VFlxLzBOZ3BkL2ozVDlON0U5WFUzMENFSXZWbzZDMGZ4T3ZlQW5LSitqWWpFTE1Ba0dCU3NPQXdJYUJRQXdnY3dHQ1NxR1NJYjNEUUVIQVRBVUJnZ3Foa2lHOXcwREJ3UUlFbVpWb1RoNklVV0FnYWd4eXpYOVN6d295T2E0ZmR6OTJzN1pybXcxNUdidGVMaXpBbWhyQ0JhVU9zM1MxaVYzZU5TTiswSGtUcUF2b0RKYnZoMGsxeW1qWmFQazA1YlVhWTE0anN0WThLK2pxMWlTVlRpSWNIWXN5Y2pWQUpPRjdGdk52ZFBodmZyTGN3MGRXRDJaaTZuckNCZnVRd2pwdmJTOUJ3K3p1d2prLytVRHVCbDNQc0ttUUxUMU03a0JJaVJTcDFtVFh1eUQrdjNhYzZLL0VIem9ucFpnck9qUHQvcGZpTGY2R3RYeEhXMmdnZ09ITUlJRGd6Q0NBdXlnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFVRkFEQ0JqakVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkJNUll3RkFZRFZRUUhFdzFOYjNWdWRHRnBiaUJXYVdWM01SUXdFZ1lEVlFRS0V3dFFZWGxRWVd3Z1NXNWpMakVUTUJFR0ExVUVDeFFLYkdsMlpWOWpaWEowY3pFUk1BOEdBMVVFQXhRSWJHbDJaVjloY0dreEhEQWFCZ2txaGtpRzl3MEJDUUVXRFhKbFFIQmhlWEJoYkM1amIyMHdIaGNOTURRd01qRXpNVEF4TXpFMVdoY05NelV3TWpFek1UQXhNekUxV2pDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNRkhUdDM4Uk14TFhKeU8yU21TK05kbDcyVDdvS0o0dTR1dys2YXdudEFMV2gwM1Bld21JSnV6YkFMU2NzVFM0c1pvUzFmS2NpQkdvaDExZ0lmSHp5bHZrZE5lL2hKbDY2L1JHcXJqNXJGYjA4c0FBQk5UekRUaXFxTnBKZUJzWXMvYzJhaUdvenB0WDJSbG5Ca3RIK1NVTnBBYWpXNzI0TnYyV3ZoaWY2c0ZBZ01CQUFHamdlNHdnZXN3SFFZRFZSME9CQllFRkphZmZMdkdieGU5V1Q5UzF3b2I3QkRXWkpSck1JRzdCZ05WSFNNRWdiTXdnYkNBRkphZmZMdkdieGU5V1Q5UzF3b2I3QkRXWkpScm9ZR1VwSUdSTUlHT01Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DUTBFeEZqQVVCZ05WQkFjVERVMXZkVzUwWVdsdUlGWnBaWGN4RkRBU0JnTlZCQW9UQzFCaGVWQmhiQ0JKYm1NdU1STXdFUVlEVlFRTEZBcHNhWFpsWDJObGNuUnpNUkV3RHdZRFZRUURGQWhzYVhabFgyRndhVEVjTUJvR0NTcUdTSWIzRFFFSkFSWU5jbVZBY0dGNWNHRnNMbU52YllJQkFEQU1CZ05WSFJNRUJUQURBUUgvTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUlGZk9sYWFnRnJsNzEranE2T0tpZGJXRlNFK1E0RnFST3ZkZ0lPTnRoKzhrU0svL1kvNGlodUU0WW12em41Y2VFM1MvaUJTUVFNanl2YitzMlRXYlFZRHdjcDEyOU9QSWJEOWVwZHI0dEpPVU5pU29qdzdCSHdZUmlQaDU4UzF4R2xGZ0hGWHdyRUJiM2RnTmJNVWErdTRxZWN0c01BWHBWSG5EOXdJeWZtSE1ZSUJtakNDQVpZQ0FRRXdnWlF3Z1k0eEN6QUpCZ05WQkFZVEFsVlRNUXN3Q1FZRFZRUUlFd0pEUVRFV01CUUdBMVVFQnhNTlRXOTFiblJoYVc0Z1ZtbGxkekVVTUJJR0ExVUVDaE1MVUdGNVVHRnNJRWx1WXk0eEV6QVJCZ05WQkFzVUNteHBkbVZmWTJWeWRITXhFVEFQQmdOVkJBTVVDR3hwZG1WZllYQnBNUnd3R2dZSktvWklodmNOQVFrQkZnMXlaVUJ3WVhsd1lXd3VZMjl0QWdFQU1Ba0dCU3NPQXdJYUJRQ2dYVEFZQmdrcWhraUc5dzBCQ1FNeEN3WUpLb1pJaHZjTkFRY0JNQndHQ1NxR1NJYjNEUUVKQlRFUEZ3MHhNVEV3TWpJeE1USXdNelJhTUNNR0NTcUdTSWIzRFFFSkJERVdCQlJsRjd2Vlg1TFgyWDVJdFk3Y213QS9SWlRBdFRBTkJna3Foa2lHOXcwQkFRRUZBQVNCZ0lyeVlla0hoU3IrZldIZW1VL1g2c1lxZmRCdVk0OWQ3K2tDSXBtZGJ0S1JaUyt6Qy84MVdoejlQTGhodU5sV1NyeFNjeW1RZXgrVm5GZ1NnZnJHUDE3NE56d0tJczhyZEtZeUhwQ2hOWmxWUDdwSmVBcmJ0dW5kVWlzdnJwYzh3UHhscmpOQ014UkUvck5YSGVQbUd1dUtidlJqaTNqMG5JV2ZrRjZ1QnpjTy0tLS0tRU5EIFBLQ1M3LS0tLS0NCiZxdW90Oz4NCjxpbnB1dCB0eXBlPSZxdW90O2ltYWdlJnF1b3Q7IHNyYz0mcXVvdDtodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9lbl9VUy9pL2J0bi9idG5fZG9uYXRlQ0NfTEcuZ2lmJnF1b3Q7IGJvcmRlcj0mcXVvdDswJnF1b3Q7IG5hbWU9JnF1b3Q7c3VibWl0JnF1b3Q7IGFsdD0mcXVvdDtQYXlQYWwgLSBUaGUgc2FmZXIsIGVhc2llciB3YXkgdG8gcGF5IG9ubGluZSEmcXVvdDs+DQo8aW1nIGFsdD0mcXVvdDsmcXVvdDsgYm9yZGVyPSZxdW90OzAmcXVvdDsgc3JjPSZxdW90O2h0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL25sX05ML2kvc2NyL3BpeGVsLmdpZiZxdW90OyB3aWR0aD0mcXVvdDsxJnF1b3Q7IGhlaWdodD0mcXVvdDsxJnF1b3Q7Pg0KPC9mb3JtPjxici8+PGJyLz4NCg0KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQ0KaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUw0KTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIA0Kc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+DQo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+IA0KJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICdVdGlsaXR5IG1vZHVsZSB0byBzdG9yZSBnZW5lcmljIGNsYXNzZXMgYW5kIGNvZGUuJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVXBVdGlscyB0ZWxlcCZpYWN1dGU7dHZlIHZhbic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVXBVdGlscyBlbCB2b2x0IHQmYWFjdXRlO3ZvbCZpYWN1dGU7dHZhJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTEzMjI3Njc3OS0xMzE4NjIwMTE3MDY1JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMzkyNDQ3ODIzLjEzMjExODkwNTMuMTMyMTIxNjE1OS4xMzIxMjIwMDI3LjcnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzIxMTg5MDUzLjEuMS51dG1jc3I9ZGV2LmNtc21hZGVzaW1wbGUub3JnfHV0bWNjbj0ocmVmZXJyYWwpfHV0bWNtZD1yZWZlcnJhbHx1dG1jY3Q9L3Byb2plY3QvbGlzdC9tb2R1bGUnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwVXRpbHMnOwokbGFuZ1snaGVscCddID0gJzxoMj5Eb2N1bWVudGF0aW9uPC9oMj4NCjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgdXRpbGl0eSBtZXRob2RzIGhhbmR5IHdoZW4gcHJvZ3JhbW1pbmcgbW9kdWxlcy48L3A+DQoNCjxoMj5TdXBwb3J0PC9oMj4NCjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCjx1bD4NCjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIGNtcyBkZXZlbG9wbWVudCBmb3JnZSBhdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnIj5kZXYuY21zbWFkZXNpbXBsZS5vcmc8L2E+LjwvbGk+DQo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPVwiaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnXCI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4NCjxsaT5UaGUgYXV0aG9yKHMpLCBhcm5vdWQgZXQgYWxsIGNhbiBzb21ldGltZXMgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2Ntc1wiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvcihzKSBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0DQpvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5saWNlbnNlPC9hPiBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+DQoNCjxoMj5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gyPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDExLCBBcm5vdWQgdmFuIFN1c3RlcmVuIDxhIGhyZWY9Im1haWx0bzphcm5vdWRAdXBzZXJ2aWNlLm5sIj48YXJub3VkQHVwc2VydmljZS5ubD48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQoNCjxzdHJvbmc+U3VwcG9ydCBtb3JlIG1vZHMgbGlrZSB0aGlzOjwvc3Ryb25nPg0KDQo8cD4NCjxmb3JtIGFjdGlvbj0mcXVvdDtodHRwczovL3d3dy5wYXlwYWwuY29tL2NnaS1iaW4vd2Vic2NyJnF1b3Q7IG1ldGhvZD0mcXVvdDtwb3N0JnF1b3Q7Pg0KPGlucHV0IHR5cGU9JnF1b3Q7aGlkZGVuJnF1b3Q7IG5hbWU9JnF1b3Q7Y21kJnF1b3Q7IHZhbHVlPSZxdW90O19zLXhjbGljayZxdW90Oz4NCjxpbnB1dCB0eXBlPSZxdW90O2hpZGRlbiZxdW90OyBuYW1lPSZxdW90O2VuY3J5cHRlZCZxdW90OyB2YWx1ZT0mcXVvdDstLS0tLUJFR0lOIFBLQ1M3LS0tLS1NSUlIVHdZSktvWklodmNOQVFjRW9JSUhRRENDQnp3Q0FRRXhnZ0V3TUlJQkxBSUJBRENCbERDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwQ0FRQXdEUVlKS29aSWh2Y05BUUVCQlFBRWdZQW5MV3ZqWWkyY1FZQzRUeFlsU2htYjhMOG1UZjN4d1ZpSlU1a3l6YUpWUmtCblcvSkJGVDBSQ283UkZHV1FZTE9LNkJCNm5nOTZuYzFIT2FDeG1INmlxMk1KcVN2K0U4MTFoQ01lQTh4Wjdxekp0d0M4Nk5oRnNueVlubW94WXRUWXEvME5ncGQvajNUOU43RTlYVTMwQ0VJdlZvNkMwZnhPdmVBbktKK2pZakVMTUFrR0JTc09Bd0lhQlFBd2djd0dDU3FHU0liM0RRRUhBVEFVQmdncWhraUc5dzBEQndRSUVtWlZvVGg2SVVXQWdhZ3h5elg5U3p3b3lPYTRmZHo5MnM3WnJtdzE1R2J0ZUxpekFtaHJDQmFVT3MzUzFpVjNlTlNOKzBIa1RxQXZvREpidmgwazF5bWpaYVBrMDViVWFZMTRqc3RZOEsranExaVNWVGlJY0hZc3ljalZBSk9GN0Z2TnZkUGh2ZnJMY3cwZFdEMlppNm5yQ0JmdVF3anB2YlM5QncrenV3amsvK1VEdUJsM1BzS21RTFQxTTdrQklpUlNwMW1UWHV5RCt2M2FjNksvRUh6b25wWmdyT2pQdC9wZmlMZjZHdFh4SFcyZ2dnT0hNSUlEZ3pDQ0F1eWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURDQmpqRUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQk1SWXdGQVlEVlFRSEV3MU5iM1Z1ZEdGcGJpQldhV1YzTVJRd0VnWURWUVFLRXd0UVlYbFFZV3dnU1c1akxqRVRNQkVHQTFVRUN4UUtiR2wyWlY5alpYSjBjekVSTUE4R0ExVUVBeFFJYkdsMlpWOWhjR2t4SERBYUJna3Foa2lHOXcwQkNRRVdEWEpsUUhCaGVYQmhiQzVqYjIwd0hoY05NRFF3TWpFek1UQXhNekUxV2hjTk16VXdNakV6TVRBeE16RTFXakNCampFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CTVJZd0ZBWURWUVFIRXcxTmIzVnVkR0ZwYmlCV2FXVjNNUlF3RWdZRFZRUUtFd3RRWVhsUVlXd2dTVzVqTGpFVE1CRUdBMVVFQ3hRS2JHbDJaVjlqWlhKMGN6RVJNQThHQTFVRUF4UUliR2wyWlY5aGNHa3hIREFhQmdrcWhraUc5dzBCQ1FFV0RYSmxRSEJoZVhCaGJDNWpiMjB3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1GSFR0MzhSTXhMWEp5TzJTbVMrTmRsNzJUN29LSjR1NHV3KzZhd250QUxXaDAzUGV3bUlKdXpiQUxTY3NUUzRzWm9TMWZLY2lCR29oMTFnSWZIenlsdmtkTmUvaEpsNjYvUkdxcmo1ckZiMDhzQUFCTlR6RFRpcXFOcEplQnNZcy9jMmFpR296cHRYMlJsbkJrdEgrU1VOcEFhalc3MjROdjJXdmhpZjZzRkFnTUJBQUdqZ2U0d2dlc3dIUVlEVlIwT0JCWUVGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyTUlHN0JnTlZIU01FZ2JNd2diQ0FGSmFmZkx2R2J4ZTlXVDlTMXdvYjdCRFdaSlJyb1lHVXBJR1JNSUdPTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFUxdmRXNTBZV2x1SUZacFpYY3hGREFTQmdOVkJBb1RDMUJoZVZCaGJDQkpibU11TVJNd0VRWURWUVFMRkFwc2FYWmxYMk5sY25Sek1SRXdEd1lEVlFRREZBaHNhWFpsWDJGd2FURWNNQm9HQ1NxR1NJYjNEUUVKQVJZTmNtVkFjR0Y1Y0dGc0xtTnZiWUlCQURBTUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSUZmT2xhYWdGcmw3MStqcTZPS2lkYldGU0UrUTRGcVJPdmRnSU9OdGgrOGtTSy8vWS80aWh1RTRZbXZ6bjVjZUUzUy9pQlNRUU1qeXZiK3MyVFdiUVlEd2NwMTI5T1BJYkQ5ZXBkcjR0Sk9VTmlTb2p3N0JId1lSaVBoNThTMXhHbEZnSEZYd3JFQmIzZGdOYk1VYSt1NHFlY3RzTUFYcFZIbkQ5d0l5Zm1ITVlJQm1qQ0NBWllDQVFFd2daUXdnWTR4Q3pBSkJnTlZCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVXTUJRR0ExVUVCeE1OVFc5MWJuUmhhVzRnVm1sbGR6RVVNQklHQTFVRUNoTUxVR0Y1VUdGc0lFbHVZeTR4RXpBUkJnTlZCQXNVQ214cGRtVmZZMlZ5ZEhNeEVUQVBCZ05WQkFNVUNHeHBkbVZmWVhCcE1Sd3dHZ1lKS29aSWh2Y05BUWtCRmcxeVpVQndZWGx3WVd3dVkyOXRBZ0VBTUFrR0JTc09Bd0lhQlFDZ1hUQVlCZ2txaGtpRzl3MEJDUU14Q3dZSktvWklodmNOQVFjQk1Cd0dDU3FHU0liM0RRRUpCVEVQRncweE1URXdNakl4TVRJd016UmFNQ01HQ1NxR1NJYjNEUUVKQkRFV0JCUmxGN3ZWWDVMWDJYNUl0WTdjbXdBL1JaVEF0VEFOQmdrcWhraUc5dzBCQVFFRkFBU0JnSXJ5WWVrSGhTcitmV0hlbVUvWDZzWXFmZEJ1WTQ5ZDcra0NJcG1kYnRLUlpTK3pDLzgxV2h6OVBMaGh1TmxXU3J4U2N5bVFleCtWbkZnU2dmckdQMTc0Tnp3S0lzOHJkS1l5SHBDaE5abFZQN3BKZUFyYnR1bmRVaXN2cnBjOHdQeGxyak5DTXhSRS9yTlhIZVBtR3V1S2J2UmppM2owbklXZmtGNnVCemNPLS0tLS1FTkQgUEtDUzctLS0tLQ0KJnF1b3Q7Pg0KPGlucHV0IHR5cGU9JnF1b3Q7aW1hZ2UmcXVvdDsgc3JjPSZxdW90O2h0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL2VuX1VTL2kvYnRuL2J0bl9kb25hdGVDQ19MRy5naWYmcXVvdDsgYm9yZGVyPSZxdW90OzAmcXVvdDsgbmFtZT0mcXVvdDtzdWJtaXQmcXVvdDsgYWx0PSZxdW90O1BheVBhbCAtIFRoZSBzYWZlciwgZWFzaWVyIHdheSB0byBwYXkgb25saW5lISZxdW90Oz4NCjxpbWcgYWx0PSZxdW90OyZxdW90OyBib3JkZXI9JnF1b3Q7MCZxdW90OyBzcmM9JnF1b3Q7aHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vbmxfTkwvaS9zY3IvcGl4ZWwuZ2lmJnF1b3Q7IHdpZHRoPSZxdW90OzEmcXVvdDsgaGVpZ2h0PSZxdW90OzEmcXVvdDs+DQo8L2Zvcm0+PGJyLz48YnIvPg0KDQo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4NCjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZA0KYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TDQpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gDQpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4NCjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4NCic7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnVXRpbGl0eSBtb2R1bGUgdG8gc3RvcmUgZ2VuZXJpYyBjbGFzc2VzIGFuZCBjb2RlLic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1VwVXRpbHMgZXIgbiZhcmluZzsgaW5zdGFsbGVydCc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVXBVdGlscyBoYXIgbiZhcmluZzsgYmxpdHQgZmplcm5ldCc7CiRsYW5nWydxY2EnXSA9ICdQMC01MzY4NDkxMTUtMTMwNzk4MzQ5NTIxMCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE5Nzc4MTIyMDUuMTMyMTI5OTQyOC4xMzIxMjk5NDI4LjEzMjEyOTk0MjguMSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMjEyOTk0MjguMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuMi4xMC4xMzIxMjk5NDI4JzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwVXRpbHMgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDI+RG9jdW1lbnRhdGllPC9oMj4NCjxwPkRlemUgbW9kdWxlIGxldmVydCBlZW4gYWFudGFsICYjMDM5O3V0aWxpdHkgbWV0aG9kcyYjMDM5OyBoYW5kaWcgdm9vciBoZXQgcHJvZ3JhbW1lcmVuIHZhbiBtb2R1bGVzLjwvcD4NCg0KPGgyPlN1cHBvcnQ8L2gyPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCB0aGUgY21zIGRldmVsb3BtZW50IGZvcmdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmciPmRldi5jbXNtYWRlc2ltcGxlLm9yZzwvYT4uPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9XCJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmdcIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KPGxpPlRoZSBhdXRob3IocyksIGFybm91ZCBldCBhbGwgY2FuIHNvbWV0aW1lcyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zXCI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPg0KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yKHMpIGRpcmVjdGx5LjwvbGk+ICANCjwvdWw+DQo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQNCm9mIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPmxpY2Vuc2U8L2E+IGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCg0KPGgyPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDI+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTEsIEFybm91ZCB2YW4gU3VzdGVyZW4gPGEgaHJlZj0ibWFpbHRvOmFybm91ZEB1cHNlcnZpY2UubmwiPjxhcm5vdWRAdXBzZXJ2aWNlLm5sPjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCg0KPHN0cm9uZz5TdXBwb3J0IG1vcmUgbW9kcyBsaWtlIHRoaXM6PC9zdHJvbmc+DQoNCjxwPg0KPGZvcm0gYWN0aW9uPSZxdW90O2h0dHBzOi8vd3d3LnBheXBhbC5jb20vY2dpLWJpbi93ZWJzY3ImcXVvdDsgbWV0aG9kPSZxdW90O3Bvc3QmcXVvdDs+DQo8aW5wdXQgdHlwZT0mcXVvdDtoaWRkZW4mcXVvdDsgbmFtZT0mcXVvdDtjbWQmcXVvdDsgdmFsdWU9JnF1b3Q7X3MteGNsaWNrJnF1b3Q7Pg0KPGlucHV0IHR5cGU9JnF1b3Q7aGlkZGVuJnF1b3Q7IG5hbWU9JnF1b3Q7ZW5jcnlwdGVkJnF1b3Q7IHZhbHVlPSZxdW90Oy0tLS0tQkVHSU4gUEtDUzctLS0tLU1JSUhUd1lKS29aSWh2Y05BUWNFb0lJSFFEQ0NCendDQVFFeGdnRXdNSUlCTEFJQkFEQ0JsRENCampFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CTVJZd0ZBWURWUVFIRXcxTmIzVnVkR0ZwYmlCV2FXVjNNUlF3RWdZRFZRUUtFd3RRWVhsUVlXd2dTVzVqTGpFVE1CRUdBMVVFQ3hRS2JHbDJaVjlqWlhKMGN6RVJNQThHQTFVRUF4UUliR2wyWlY5aGNHa3hIREFhQmdrcWhraUc5dzBCQ1FFV0RYSmxRSEJoZVhCaGJDNWpiMjBDQVFBd0RRWUpLb1pJaHZjTkFRRUJCUUFFZ1lBbkxXdmpZaTJjUVlDNFR4WWxTaG1iOEw4bVRmM3h3VmlKVTVreXphSlZSa0JuVy9KQkZUMFJDbzdSRkdXUVlMT0s2QkI2bmc5Nm5jMUhPYUN4bUg2aXEyTUpxU3YrRTgxMWhDTWVBOHhaN3F6SnR3Qzg2TmhGc255WW5tb3hZdFRZcS8wTmdwZC9qM1Q5TjdFOVhVMzBDRUl2Vm82QzBmeE92ZUFuS0orallqRUxNQWtHQlNzT0F3SWFCUUF3Z2N3R0NTcUdTSWIzRFFFSEFUQVVCZ2dxaGtpRzl3MERCd1FJRW1aVm9UaDZJVVdBZ2FneHl6WDlTendveU9hNGZkejkyczdacm13MTVHYnRlTGl6QW1ockNCYVVPczNTMWlWM2VOU04rMEhrVHFBdm9ESmJ2aDBrMXltalphUGswNWJVYVkxNGpzdFk4SytqcTFpU1ZUaUljSFlzeWNqVkFKT0Y3RnZOdmRQaHZmckxjdzBkV0QyWmk2bnJDQmZ1UXdqcHZiUzlCdyt6dXdqay8rVUR1QmwzUHNLbVFMVDFNN2tCSWlSU3AxbVRYdXlEK3YzYWM2Sy9FSHpvbnBaZ3JPalB0L3BmaUxmNkd0WHhIVzJnZ2dPSE1JSURnekNDQXV5Z0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBRENCampFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CTVJZd0ZBWURWUVFIRXcxTmIzVnVkR0ZwYmlCV2FXVjNNUlF3RWdZRFZRUUtFd3RRWVhsUVlXd2dTVzVqTGpFVE1CRUdBMVVFQ3hRS2JHbDJaVjlqWlhKMGN6RVJNQThHQTFVRUF4UUliR2wyWlY5aGNHa3hIREFhQmdrcWhraUc5dzBCQ1FFV0RYSmxRSEJoZVhCaGJDNWpiMjB3SGhjTk1EUXdNakV6TVRBeE16RTFXaGNOTXpVd01qRXpNVEF4TXpFMVdqQ0JqakVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkJNUll3RkFZRFZRUUhFdzFOYjNWdWRHRnBiaUJXYVdWM01SUXdFZ1lEVlFRS0V3dFFZWGxRWVd3Z1NXNWpMakVUTUJFR0ExVUVDeFFLYkdsMlpWOWpaWEowY3pFUk1BOEdBMVVFQXhRSWJHbDJaVjloY0dreEhEQWFCZ2txaGtpRzl3MEJDUUVXRFhKbFFIQmhlWEJoYkM1amIyMHdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTUZIVHQzOFJNeExYSnlPMlNtUytOZGw3MlQ3b0tKNHU0dXcrNmF3bnRBTFdoMDNQZXdtSUp1emJBTFNjc1RTNHNab1MxZktjaUJHb2gxMWdJZkh6eWx2a2ROZS9oSmw2Ni9SR3FyajVyRmIwOHNBQUJOVHpEVGlxcU5wSmVCc1lzL2MyYWlHb3pwdFgyUmxuQmt0SCtTVU5wQWFqVzcyNE52Mld2aGlmNnNGQWdNQkFBR2pnZTR3Z2Vzd0hRWURWUjBPQkJZRUZKYWZmTHZHYnhlOVdUOVMxd29iN0JEV1pKUnJNSUc3QmdOVkhTTUVnYk13Z2JDQUZKYWZmTHZHYnhlOVdUOVMxd29iN0JEV1pKUnJvWUdVcElHUk1JR09NUXN3Q1FZRFZRUUdFd0pWVXpFTE1Ba0dBMVVFQ0JNQ1EwRXhGakFVQmdOVkJBY1REVTF2ZFc1MFlXbHVJRlpwWlhjeEZEQVNCZ05WQkFvVEMxQmhlVkJoYkNCSmJtTXVNUk13RVFZRFZRUUxGQXBzYVhabFgyTmxjblJ6TVJFd0R3WURWUVFERkFoc2FYWmxYMkZ3YVRFY01Cb0dDU3FHU0liM0RRRUpBUllOY21WQWNHRjVjR0ZzTG1OdmJZSUJBREFNQmdOVkhSTUVCVEFEQVFIL01BMEdDU3FHU0liM0RRRUJCUVVBQTRHQkFJRmZPbGFhZ0ZybDcxK2pxNk9LaWRiV0ZTRStRNEZxUk92ZGdJT050aCs4a1NLLy9ZLzRpaHVFNFltdnpuNWNlRTNTL2lCU1FRTWp5dmIrczJUV2JRWUR3Y3AxMjlPUEliRDllcGRyNHRKT1VOaVNvanc3Qkh3WVJpUGg1OFMxeEdsRmdIRlh3ckVCYjNkZ05iTVVhK3U0cWVjdHNNQVhwVkhuRDl3SXlmbUhNWUlCbWpDQ0FaWUNBUUV3Z1pRd2dZNHhDekFKQmdOVkJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpFVU1CSUdBMVVFQ2hNTFVHRjVVR0ZzSUVsdVl5NHhFekFSQmdOVkJBc1VDbXhwZG1WZlkyVnlkSE14RVRBUEJnTlZCQU1VQ0d4cGRtVmZZWEJwTVJ3d0dnWUpLb1pJaHZjTkFRa0JGZzF5WlVCd1lYbHdZV3d1WTI5dEFnRUFNQWtHQlNzT0F3SWFCUUNnWFRBWUJna3Foa2lHOXcwQkNRTXhDd1lKS29aSWh2Y05BUWNCTUJ3R0NTcUdTSWIzRFFFSkJURVBGdzB4TVRFd01qSXhNVEl3TXpSYU1DTUdDU3FHU0liM0RRRUpCREVXQkJSbEY3dlZYNUxYMlg1SXRZN2Ntd0EvUlpUQXRUQU5CZ2txaGtpRzl3MEJBUUVGQUFTQmdJcnlZZWtIaFNyK2ZXSGVtVS9YNnNZcWZkQnVZNDlkNytrQ0lwbWRidEtSWlMrekMvODFXaHo5UExoaHVObFdTcnhTY3ltUWV4K1ZuRmdTZ2ZyR1AxNzROendLSXM4cmRLWXlIcENoTlpsVlA3cEplQXJidHVuZFVpc3ZycGM4d1B4bHJqTkNNeFJFL3JOWEhlUG1HdXVLYnZSamkzajBuSVdma0Y2dUJ6Y08tLS0tLUVORCBQS0NTNy0tLS0tDQomcXVvdDs+DQo8aW5wdXQgdHlwZT0mcXVvdDtpbWFnZSZxdW90OyBzcmM9JnF1b3Q7aHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vZW5fVVMvaS9idG4vYnRuX2RvbmF0ZUNDX0xHLmdpZiZxdW90OyBib3JkZXI9JnF1b3Q7MCZxdW90OyBuYW1lPSZxdW90O3N1Ym1pdCZxdW90OyBhbHQ9JnF1b3Q7UGF5UGFsIC0gVGhlIHNhZmVyLCBlYXNpZXIgd2F5IHRvIHBheSBvbmxpbmUhJnF1b3Q7Pg0KPGltZyBhbHQ9JnF1b3Q7JnF1b3Q7IGJvcmRlcj0mcXVvdDswJnF1b3Q7IHNyYz0mcXVvdDtodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9ubF9OTC9pL3Njci9waXhlbC5naWYmcXVvdDsgd2lkdGg9JnF1b3Q7MSZxdW90OyBoZWlnaHQ9JnF1b3Q7MSZxdW90Oz4NCjwvZm9ybT48YnIvPjxici8+DQoNCjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPg0KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkDQphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUNCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiANCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPg0KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQpidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0ENCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPg0KJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICdVdGlsaXR5IG1vZHVsZSB2b29yIGhldCBvcHNsYWFuIHZhbiBnZW5lcmlla2UgY2xhc3NlcyBlbiBjb2RlLic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1VwVXRpbHMgbW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVXBVdGlscyBpcyB2ZXJ3aWpkZXJkJzsKJGxhbmdbJ3RleHRib3gnXSA9ICdUZWtzdHZlbGQnOwokbGFuZ1snY2hlY2tib3gnXSA9ICdWaW5rdmFramUnOwokbGFuZ1sndGV4dGFyZWEnXSA9ICdUZWtzdHJ1aW10ZSc7CiRsYW5nWydzZWxlY3RfZGF0ZSddID0gJ1NlbGVjdGVlciBEYXR1bSc7CiRsYW5nWyd1cGxvYWRfZmlsZSddID0gJ1VwbG9hZCBCZXN0YW5kJzsKJGxhbmdbJ2Ryb3Bkb3duJ10gPSAnS2V1emVtZW51JzsKJGxhbmdbJ3NlbGVjdF9maWxlJ10gPSAnU2VsZWN0ZWVyIGJlc3RhbmQnOwokbGFuZ1snZmllbGRzZXRfc3RhcnQnXSA9ICdTdGFydCBWZWxkZ3JvZXAnOwokbGFuZ1snZmllbGRzZXRfZW5kJ10gPSAnRWluZCBWZWxkZ3JvZXAnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4zMDQ1OTQ4MS4xMzI5OTM3MzQwLjEzMjk5MzczNDAuMTMyOTkzNzM0MC4xJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMyOTkzNzM0MC4xLjEudXRtY2NuPShkaXJlY3QpfHV0bWNzcj0oZGlyZWN0KXx1dG1jbWQ9KG5vbmUpJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ru_RU.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwVXRpbHMgJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICfQnNC+0LTRg9C70Ywg0LTQu9GPINGF0YDQsNC90LXQvdC40Y8g0YPQvdC40LLQtdGA0YHQsNC70YzQvdGL0YUg0LrQu9Cw0YHRgdC+0LIg0Lgg0LrQvtC00LAnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdVcFV0aWxzINGD0YHRgtCw0L3QvtCy0LvQtdC9JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdVcFV0aWxzINCx0YvQuyDRg9C00LDQu9C10L0nOwokbGFuZ1sndGV4dGJveCddID0gJ9Cf0L7Qu9C1INCy0LLQvtC00LAnOwokbGFuZ1snY2hlY2tib3gnXSA9ICfQp9C10Lot0LHQvtC60YEnOwokbGFuZ1sndGV4dGFyZWEnXSA9ICfQotC10LrRgdGC0L7QstC+0LUg0L/QvtC70LUnOwokbGFuZ1snc2VsZWN0X2RhdGUnXSA9ICfQktGL0LHQtdGA0LjRgtC1INC00LDRgtGDJzsKJGxhbmdbJ3VwbG9hZF9maWxlJ10gPSAn0JfQsNCz0YDRg9C30LjRgtC1INGE0LDQudC7JzsKJGxhbmdbJ2Ryb3Bkb3duJ10gPSAn0JLRi9C/0LDQtNCw0Y7RidC40Lkg0YHQv9C40YHQvtC6JzsKJGxhbmdbJ3NlbGVjdF9maWxlJ10gPSAn0JLRi9Cx0LXRgNC40YLQtSDRhNCw0LnQuyc7CiRsYW5nWydmaWVsZHNldF9zdGFydCddID0gJ0ZpZWxkc2V0INC90LDRh9Cw0LvQvic7CiRsYW5nWydmaWVsZHNldF9lbmQnXSA9ICdGaWVsZHNldCDQutC+0L3QtdGGJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTM1NzY5NTM1Mi4xLjEudXRtY2NuPShkaXJlY3QpfHV0bWNzcj0oZGlyZWN0KXx1dG1jbWQ9KG5vbmUpJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMjExMDAxNDgyMC4xMzU3Njk1MzUyLjEzNTc3MzAyMzIuMTM1Nzc1MjQyNC41JzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/baseDAO.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCgojICRJZDogYmFzZURBTy5jbGFzcy5waHAgMzIgMjAxMi0wNy0xMSAxOTo0NDozMlogYXJub3VkICQgCgojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENsYXNzOiBiYXNlREFPIChjKSAyMDExLTIwMTIgYnkgQXJub3VkIHZhbiBTdXN0ZXJlbiAoYXJub3VkQHVwc2VydmljZS5ubCkKIwojIFRoZSBiYXNlREFPIGNsYXNzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoZSB0YWJsZW5hbWVEQU8gY2xhc3MgZXh0ZW5kcy4gCiMgYmFzZURBTyBoYXMgYSBwcml2YXRlIG1ldGhvZCB0byBjb25uZWN0IHRoZSBkYXRhIHNvdXJjZSBuYW1lZCBjb25uZWN0VG9EQiwKIyB0aGlzIHN0b3JlcyB0aGUgY29ubmVjdGlvbiBpbiBhIHByaXZhdGUgaW5zdGFuY2UgdmFyaWFibGUgJF9fY29ubmVjdGlvbgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKYWJzdHJhY3QgY2xhc3MgYmFzZURBTyB7CgogICAgcHJvdGVjdGVkICRfX2Nvbm5lY3Rpb247CiAgICBzdGF0aWMgJGRlYnVnID0gJzAnOwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CiAgICAgICAgJHRoaXMtPl9fY29ubmVjdFRvREIoKTsgICAgICAgIAogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25uZWN0VG9EQigpIHsKICAgICAgICAkdGhpcy0+X19jb25uZWN0aW9uID0gY21zbXMoKS0+R2V0RGIoKTsgIAogICAgfQogICAgCiAgICAvKiogZGJfdGltZV9zdGFtcAogICAgICogIAogICAgICogQHBhcmFtICR1bml4X3RzIHN0cmluZyBvcHRpb25hbCAtIHVuaXggdGltZXN0YW1wCiAgICAgKiBAcmV0dXJuICRkYl90cyBzdHJpbmcgLSB1bml4IHRpbWVzdGFtcCBjb252ZXJ0ZWQgdG8gZGIgdGltZXN0YW1wCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBkYl90aW1lX3N0YW1wKCR1bml4X3RzID0gTlVMTCkgewogICAgICAgIAogICAgICAgICRkYl90cyA9ICcnOwoKICAgICAgICBpZiAoISBpc19udWxsKCR1bml4X3RzKSkgeyAgICAgICAgCiAgICAgICAgICAgICR1bml4X3RzID0gdHJpbShwcmVnX3JlcGxhY2UoJy9bXjAtOS1cczpdLycsICcnLCAkdW5peF90cykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBpc19udWxsKCR1bml4X3RzKSApIHsKICAgICAgICAgICAgJGRiX3RzID0gdHJpbSgkdGhpcy0+X19jb25uZWN0aW9uLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkYl90cyA9IHRyaW0oJHRoaXMtPl9fY29ubmVjdGlvbi0+REJUaW1lU3RhbXAoJHVuaXhfdHMpLCAiJyIpOyAKICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICByZXR1cm4gJGRiX3RzOwogICAgICAgIAogICAgfQogICAgCiAgICAvKiogdW5peF90aW1lX3N0YW1wCiAgICAgKiAgCiAgICAgKiBAcGFyYW0gJGRiX3RzIHN0cmluZyBvcHRpb25hbCAtIGRiIHRpbWVzdGFtcAogICAgICogQHJldHVybiAkdW5peF90cyBzdHJpbmcgLSBkYl90cyBjb252ZXJ0ZWQgdG8gdW5peF90cwogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5peF90aW1lX3N0YW1wKCRkYl90cyA9IE5VTEwpIHsKICAgICAgICAKICAgICAgICAkdW5peF90cyA9ICcnOwogICAgICAgIAogICAgICAgIGlmICghIGlzX251bGwoJGRiX3RzKSkgewogICAgICAgICAgICAkZGJfdHMgPSB0cmltKHByZWdfcmVwbGFjZSgnL1teMC05XS8nLCAnJywgJGRiX3RzKSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICggaXNfbnVsbCgkZGJfdHMpICkgewogICAgICAgICAgICAkdW5peF90cyA9IHRpbWUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdW5peF90cyA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPlVuaXhUaW1lU3RhbXAoJGRiX3RzKTsgCiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkdW5peF90czsKICAgICAgICAKICAgIH0KICAgIAogICAgLyoqIGZldGNoCiAgICAgKgogICAgICogIEBwYXJhbSAkdmFsdWUgc3RyaW5nIC0gCiAgICAgKiAgQHBhcmFtICRkYl9rZXkgc3RyaW5nIC0gCiAgICAgKiAgQHJldHVybiAkcm93cyBhcnJheSAtIHJlc3VsdCBzZXQKICAgICAqCiAgICAgKi8KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoKCR2YWx1ZSwgJGRiX2tleSA9IE5VTEwpIHsKICAgIAogICAgICAgIGlmIChpc19udWxsKCRkYl9rZXkpKSB7CiAgICAgICAgICAgICRkYl9rZXkgPSAkdGhpcy0+X3ByaW1hcnlrZXk7ICAgICAgICAgICAgCiAgICAgICAgfQogICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00geyR0aGlzLT5fdGFibGVuYW1lfSBXSEVSRSB7JGRiX2tleX0gPSA/IjsgCiAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnkgXG4iOwogICAgICAgIH0KICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdmFsdWUpKTsKICAgIAogICAgICAgICRyb3dzID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICB3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAgICAgJHJvd3NbXSA9ICRyb3c7CiAgICAgICAgfQogICAgCiAgICAgICAgcmV0dXJuICRyb3dzOwogICAgCiAgICB9CgogICAgLyoqIGZldGNoX2FsbAogICAgICoKICAgICAqICBAcGFyYW0gJG9yZGVyX3R5cGUgc3RyaW5nIC0gQVNDIHwgREVTQyAKICAgICAqICBAcGFyYW0gJGRiX2tleSBzdHJpbmcgLSAKICAgICAqICBAcmV0dXJuICRyb3dzIGFycmF5IC0gcmVzdWx0IHNldAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hfYWxsKCRvcmRlcl90eXBlID0gTlVMTCwgJGRiX2tleSA9IE5VTEwpIHsgIAogICAgICAgIAogICAgICAgICRhc2NfZGVzYyA9IGFycmF5KCdBU0MnLCAnREVTQycpOwogICAgICAgIAogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0iOyAKICAgIAogICAgICAgIGlmICghaXNfbnVsbCgkZGJfa2V5KSkgewogICAgICAgICAgICAkb3JkZXJfdHlwZSA9IGluX2FycmF5KCRvcmRlcl90eXBlLCAkYXNjX2Rlc2MpID8gJG9yZGVyX3R5cGUgOiAnREVTQyc7CiAgICAgICAgICAgICRkYl9rZXkgPSB0cmltKHByZWdfcmVwbGFjZSgnL1teYS16X10vJywgJycsICRkYl9rZXkpKTsKICAgICAgICAgICAgJHF1ZXJ5IC49ICIgT1JERVIgQlkgeyRkYl9rZXl9IHskb3JkZXJfdHlwZX0iOyAKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5IFxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgIAogICAgICAgICRyb3dzID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICB3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAgICAgJHJvd3NbXSA9ICRyb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkcm93czsKICAgIH0KICAgICAgICAKICAgIC8qKiBmZXRjaF9hbGxfd2hlcmUKICAgICAqCiAgICAgKiAgQHBhcmFtICRvcmRlcl90eXBlIHN0cmluZyAtIEFTQyB8IERFU0MgCiAgICAgKiAgQHBhcmFtICRvcmRlcl9rZXkgc3RyaW5nIC0ga2V5IHRvIHNvcnQgb24KICAgICAqICBAcGFyYW0gJHdoZXJlX2tleSBzdHJpbmcgLSBrZXkgdG8gbWF0Y2ggb24KICAgICAqICBAcGFyYW0gJHdoZXJlX3ZhbHVlIHN0cmluZyAtIHZhbHVlIHRvIG1hdGNoIG9uCiAgICAgKiAgQHJldHVybiAkcm93cyBhcnJheSAtIHJlc3VsdCBzZXQKICAgICAqCiAgICAgKi8KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoX2FsbF93aGVyZSgkb3JkZXJfdHlwZSA9IE5VTEwsICRvcmRlcl9rZXkgPSBOVUxMLCAkd2hlcmVfa2V5ID0gTlVMTCwgJHdoZXJlX3ZhbHVlID0gTlVMTCkgeyAgCiAgICAgICAgCiAgICAgICAgJGFzY19kZXNjID0gYXJyYXkoJ0FTQycsICdERVNDJyk7CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00geyR0aGlzLT5fdGFibGVuYW1lfSI7CiAgICAgICAgCiAgICAgICAgaWYgKCFpc19udWxsKCR3aGVyZV9rZXkpICYmICFpc19udWxsKCR3aGVyZV92YWx1ZSkpIHsKICAgICAgICAgICAgJHdoZXJlX2tleSA9IHRyaW0ocHJlZ19yZXBsYWNlKCcvW15hLXpfXS8nLCAnJywgJHdoZXJlX2tleSkpOwogICAgICAgICAgICAkcXVlcnkgLj0gIiBXSEVSRSB7JHdoZXJlX2tleX0gPSA/IjsgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCFpc19udWxsKCRvcmRlcl9rZXkpKSB7CiAgICAgICAgICAgICRvcmRlcl90eXBlID0gaW5fYXJyYXkoJG9yZGVyX3R5cGUsICRhc2NfZGVzYykgPyAkb3JkZXJfdHlwZSA6ICdERVNDJzsKICAgICAgICAgICAgJG9yZGVyX2tleSA9IHRyaW0ocHJlZ19yZXBsYWNlKCcvW15hLXpfXS8nLCAnJywgJG9yZGVyX2tleSkpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCRvcmRlcl9rZXkgIT0gJycpIHsKICAgICAgICAgICAgICAgICRxdWVyeSAuPSAiIE9SREVSIEJZIHskb3JkZXJfa2V5fSB7JG9yZGVyX3R5cGV9IjsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeSBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICghaXNfbnVsbCgkd2hlcmVfa2V5KSAmJiAhaXNfbnVsbCgkd2hlcmVfdmFsdWUpKSB7CiAgICAgICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkd2hlcmVfdmFsdWUpKTsgICAgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkcm93cyA9IGFycmF5KCk7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICRyb3dzW10gPSAkcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJHJvd3M7CiAgICB9CgogICAgLyoqIGZldGNoIHRoZSB2YWx1ZSBvZiB0aGUgbmV4dCBwcmltYXJ5X2tleQogICAgICoKICAgICAqIEByZXR1cm4gJG5leHRfcGsgLSBpbnQKICAgICAqCiAgICAgKi8KICAgICAKICAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dF9wcmltYXJ5X2tleSgpIHsKICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBNQVgoeyR0aGlzLT5fcHJpbWFyeWtleX0pIEZST00geyR0aGlzLT5fdGFibGVuYW1lfSI7CiAgICAgICAgIAogICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgICBwcmludCAiJHF1ZXJ5IFxuIjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgJG5leHRfcGsgPSAgJHRoaXMtPl9fY29ubmVjdGlvbi0+R2V0T25lKCRxdWVyeSk7CiAgICAgICAgIAogICAgICAgICAkbmV4dF9wayA9ICFpc19udWxsKCRuZXh0X3BrKSA/ICgkbmV4dF9wayArMSkgOiAxOwogICAgICAgICAKICAgICAgICAgcmV0dXJuICRuZXh0X3BrOwogICAgIH0KICAgICAgICAKICAgIC8qKiBjb3VudAogICAgICoKICAgICAqIEByZXR1cm4gJGNvdW50IC0gbnVtYmVyIG9mIHJlY29yZHMKICAgICAqCiAgICAgKi8KICAgICAKICAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKSB7CiAgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgQ09VTlQoMSkgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IjsKICAgICAgICAgCiAgICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgIHByaW50ICIkcXVlcnkgXG4iOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkY291bnQgPSAgJHRoaXMtPl9fY29ubmVjdGlvbi0+R2V0T25lKCRxdWVyeSk7CiAgICAgICAgIHJldHVybiAkY291bnQ7CiAgICAgfQoKICAgIC8qKiBkZWxldGUKICAgICAqCiAgICAgKiAgQHBhcmFtICR2YWx1ZSBzdHJpbmcgLSAKICAgICAqICBAcGFyYW0gJGRiX2tleSBzdHJpbmcgLSAKICAgICAqICBAcmV0dXJuICRyb3dzIGFycmF5IC0gcmVzdWx0IHNldAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCR2YWx1ZSwgJGRiX2tleSA9IE5VTEwpIHsKICAgIAogICAgICAgIGlmIChpc19udWxsKCRkYl9rZXkpKSB7CiAgICAgICAgICAgICRkYl9rZXkgPSAkdGhpcy0+X3ByaW1hcnlrZXk7ICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYl9rZXkgPSB0cmltKHByZWdfcmVwbGFjZSgnL1teYS16X10vJywgJycsICRkYl9rZXkpKTsKICAgIAogICAgICAgICRxdWVyeSA9ICJERUxFVEUgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IFdIRVJFIHskZGJfa2V5fSA9ID8iOyAKICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeSBcbiI7CiAgICAgICAgfQogICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR2YWx1ZSkpOwogICAgICAgIAogICAgICAgIGlmICghJGRicmVzdWx0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1F1ZXJ5IEZhaWxlZCAnLiR0aGlzLT5fX2Nvbm5lY3Rpb24tPnNxbCk7CiAgICAgICAgfQogICAgICAgIAogICAgfQogICAgCiAgICAvKiogdXBkYXRlIHdoZXJlIAogICAgICoKICAgICAqICBAcGFyYW0gJGtleWVkX2FycmF5IC0gYXJyYXkgd2l0aCBrZXksIHZhbHVlIHBhaXJzCiAgICAgKiAgQHBhcmFtICR3aGVyZV9rZXkgc3RyaW5nIC0ga2V5IHRvIG1hdGNoIG9uCiAgICAgKiAgQHBhcmFtICR3aGVyZV92YWx1ZSBzdHJpbmcgLSB2YWx1ZSB0byBtYXRjaCBvbgogICAgICogIEByZXR1cm4gTlVMTAogICAgICoKICAgICAqLwogICAgICAgICAKICAgICBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlX3doZXJlKCRrZXllZF9hcnJheSwgJHdoZXJlX2tleSA9IE5VTEwsICR3aGVyZV92YWx1ZSA9IE5VTEwpIHsKICAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCAiOwogICAgICAgIAogICAgICAgICRjb2x1bW5zID0gYXJyYXkoKTsKICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICBmb3JlYWNoICgka2V5ZWRfYXJyYXkgYXMgJGNvbHVtbiA9PiAkdmFsdWUpIHsKICAgICAgICAKICAgICAgICAgICAgaWYgKCRjb2x1bW4gIT0gJHRoaXMtPl9wcmltYXJ5a2V5KSB7CiAgICAgICAgICAgICAgICAkY29sdW1uID0gdHJpbShwcmVnX3JlcGxhY2UoJy9bXmEtel9dLycsICcnLCAkY29sdW1uKSk7CiAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gInskY29sdW1ufSA9ID8iOwogICAgICAgICAgICAgICAgJHZhbHVlc1tdID0gInskdmFsdWV9IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgIGlmICghaXNfbnVsbCgkd2hlcmVfa2V5KSAmJiAhaXNfbnVsbCgkd2hlcmVfdmFsdWUpKSB7CiAgICAgICAgICAgICRxdWVyeSAuPSBpbXBsb2RlKCcsICcsICRjb2x1bW5zKTsKICAgICAgICAgICAgJHdoZXJlX2tleSA9IHRyaW0ocHJlZ19yZXBsYWNlKCcvW15hLXpfXS8nLCAnJywgJHdoZXJlX2tleSkpOwogICAgICAgICAgICAkcXVlcnkgLj0gIiBXSEVSRSB7JHdoZXJlX2tleX0gPSA/IjsKICAgICAgICAgICAgJHZhbHVlc1tdID0gJHdoZXJlX3ZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRxdWVyeSAuPSBpbXBsb2RlKCcsICcsICRjb2x1bW5zKTsKICAgICAgICAgICAgJHF1ZXJ5IC49ICIgV0hFUkUgeyR0aGlzLT5fcHJpbWFyeWtleX0gPSA/IjsKICAgICAgICAgICAgJHZhbHVlc1tdID0gJGtleWVkX2FycmF5WyR0aGlzLT5fcHJpbWFyeWtleV07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeSBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFsdWVzKTsKICAgICAgICAKICAgICAgICBpZiAoISRkYnJlc3VsdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdRdWVyeSBGYWlsZWQgJy4kdGhpcy0+X19jb25uZWN0aW9uLT5zcWwpOwogICAgICAgIH0KICAgICAgICAgCiAgICAgfQogICAgICAgICAgICAgCiAgICAgLyoqIHVwZGF0ZQogICAgICoKICAgICAqICBAcGFyYW0gJGtleWVkX2FycmF5IC0gYXJyYXkgd2l0aCBrZXksIHZhbHVlIHBhaXJzIAogICAgICogIEByZXR1cm4gTlVMTAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKCRrZXllZF9hcnJheSkgewoKICAgICAgICAkcXVlcnkgPSAiVVBEQVRFIHskdGhpcy0+X3RhYmxlbmFtZX0gU0VUICI7CiAgICAgICAgICAgICAgICAKICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7CiAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCAoJGtleWVkX2FycmF5IGFzICRjb2x1bW4gPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoJGNvbHVtbiAhPSAkdGhpcy0+X3ByaW1hcnlrZXkpIHsKICAgICAgICAgICAgICAgICRjb2x1bW4gPSB0cmltKHByZWdfcmVwbGFjZSgnL1teYS16X10vJywgJycsICRjb2x1bW4pKTsKICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAieyRjb2x1bW59ID0gPyI7CiAgICAgICAgICAgICAgICAkdmFsdWVzW10gPSAieyR2YWx1ZX0iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICR2YWx1ZXNbXSA9ICRrZXllZF9hcnJheVskdGhpcy0+X3ByaW1hcnlrZXldOwogICAgICAgIAogICAgICAgICRxdWVyeSAuPSBpbXBsb2RlKCcsICcsICRjb2x1bW5zKTsKICAgICAgICAkcXVlcnkgLj0gIiBXSEVSRSB7JHRoaXMtPl9wcmltYXJ5a2V5fSA9ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeSBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFsdWVzKTsKICAgICAgICAKICAgICAgICBpZiAoISRkYnJlc3VsdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdRdWVyeSBGYWlsZWQgJy4kdGhpcy0+X19jb25uZWN0aW9uLT5zcWwpOwogICAgICAgIH0KICAgICAgICAKICAgIH0KICAgIAogICAgLyoqIGluc2VydAogICAgICoKICAgICAqICBAcGFyYW0gJGtleWVkX2FycmF5IC0gYXJyYXkgd2l0aCBrZXksIHZhbHVlIHBhaXJzIAogICAgICogIEByZXR1cm4gTlVMTAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0KCRrZXllZF9hcnJheSkgewogICAgICAgIAogICAgICAgICRxdWVyeSA9ICJJTlNFUlQgSU5UTyB7JHRoaXMtPl90YWJsZW5hbWV9ICgiOwogICAgICAgIAogICAgICAgICRjb2x1bW5zID0gYXJyYXkoKTsKICAgICAgICAkcGxhY2Vob2xkZXJzID0gYXJyYXkoKTsKICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICAka2V5ZWRfYXJyYXlbJHRoaXMtPl9wcmltYXJ5a2V5XSA9ICcnOwogICAgICAgIAogICAgICAgIGZvcmVhY2ggKCRrZXllZF9hcnJheSBhcyAkY29sdW1uID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoJGNvbHVtbiAhPSAkdGhpcy0+X3ByaW1hcnlrZXkpIHsKICAgICAgICAgICAgICAgICRjb2x1bW4gPSB0cmltKHByZWdfcmVwbGFjZSgnL1teYS16X10vJywgJycsICRjb2x1bW4pKTsKICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAieyRjb2x1bW59IjsKICAgICAgICAgICAgICAgICRwbGFjZWhvbGRlcnNbXSA9ICI/IjsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9ICJ7JHZhbHVlfSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5IC49IGltcGxvZGUoJywgJywgJGNvbHVtbnMpOwogICAgICAgICRxdWVyeSAuPSAiKSBWQUxVRVMgKCI7CiAgICAgICAgJHF1ZXJ5IC49IGltcGxvZGUoJywgJywgJHBsYWNlaG9sZGVycykuICIpIjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnkgXG4iOwogICAgICAgICAgICBwcmludF9yKCR2YWx1ZXMpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgJHZhbHVlcyk7IAoKICAgICAgICBpZiAoISRkYnJlc3VsdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdRdWVyeSBGYWlsZWQgJy4kdGhpcy0+X19jb25uZWN0aW9uLT5zcWwpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkaW5zZXJ0X2lkID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+SW5zZXJ0X0lEKCk7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiaW5zZXJ0X2lkOiAkaW5zZXJ0X2lkIFxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRpbnNlcnRfaWQ7CiAgICAgICAgCiAgICB9CiAgICAKICAgIAp9IC8vIGJhc2VEQU8KCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/classes/function.up_formstart.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBmdW5jdGlvbi51cF9mb3Jtc3RhcnQucGhwIDMyIDIwMTItMDctMTEgMTk6NDQ6MzJaIGFybm91ZCAkCgojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENsYXNzOiBVcFNtYXJ0eSAoYykgMjAxMS0yMDEyIGJ5IEFybm91ZCB2YW4gU3VzdGVyZW4gKGFybm91ZEB1cHNlcnZpY2UubmwpCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCi8qKiBTbWFydGlmaWVkIHZlcnNpb24gb2YgQ01TTW9kdWxlIENyZWF0ZUZvcm1TdGFydCBtZXRob2QKICoKICogQGxpbmsgaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hcGlkb2MvQ01TL0NNU01vZHVsZS5odG1sI0NyZWF0ZUZvcm1TdGFydAogKiBAaWdub3JlCiAqCiAqIEBwYXJhbSAkcGFyYW1zIHN0cmluZwogKiBAcGFyYW0gbW9kdWxlIHN0cmluZyByZXF1aXJlZAogKiBAcGFyYW0gaWQgc3RyaW5nIG9wdGlvbmFsCiAqIEBwYXJhbSBhY3Rpb24gc3RyaW5nIHJlcXVpcmVkIAogKiBAcGFyYW0gcmV0dXJuaWQgaW50IG9wdGlvbmFsLCBkZWZhdWx0IGN1cmVudF9wYWdlX2lkCiAqIEBwYXJhbSBtZXRob2Qgc3RyaW5nIG9wdGlvbmFsIChwb3N0fGdldCksIGRlZmF1bHQgcG9zdAogKiBAcGFyYW0gZW5jdHlwZSBzdHJpbmcgb3B0aW9uYWwgCiAqIEBwYXJhbSBpbmxpbmUgYm9vbGVhbiBvcHRpb25hbCwgZGVmYXVsdCBmYWxzZQogKiBAcGFyYW0gaWRzdWZmaXggc3RyaW5nIC0gb3B0aW9uYWwgZGVmYXVsdCAxCiAqIEBwYXJhbSBwcm9wcyBhcnJheSAtIG9wdGlvbmFsIGNvbW1hIGRlbGltaXRlZCBsaXN0IChrZXksdmFsdWUsa2V5LHZhbHVlKQogKiBAcGFyYW0gZXh0cmEgc3RyaW5nIC0gb3B0aW9uYWwKICogQHBhcmFtIGFzc2lnbiBzdHJpbmcgLSBvcHRpb25hbCBzbWFydHkgdmFsdWUgdG8gYXNzaWduIHRoZSBvdXRwdXQgdG8KICoKICogQHBhcmFtICRzbWFydHkgb2JqZWN0IC0gc21hcnR5CiAqIEByZXR1cm4gJG91dHB1dCBzdHJpbmcgLSBodG1sIGNvZGUgb2YgdGhlIGZvcm1zdGFydCBpZiBhc3NpZ24gaXMgdXNlZCwgdGhlIG91dHB1dCBpcyBhc3NpZ25lZCB0byBhIFNtYXJ0eSB2YXJpYWJsZSAKICoKICogQGV4YW1wbGUge3VwX2Zvcm1zdGFydCBtb2R1bGU9IkZyb250RW5kVXNlcnMiIGFjdGlvbj0nZG9fc29tZXRoaW5nJ30KICogQGV4YW1wbGUge3VwX2Zvcm1zdGFydCBtb2R1bGU9J0Zyb250RW5kVXNlcnMnIGlkPSdhYmNkZWYnIGFjdGlvbj0nZG9fc29tZXRoaW5nJyByZXR1cm5pZD0nMTUnIG1ldGhvZD0nZ2V0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJyBpbmxpbmU9J3RydWUnIGlkc3VmZml4PScyJyBwcm9wcz0nPC18LT4nfGV4cGxvZGU6J2V4dHJhX2tleTwtfC0+ZXh0cmFfdmFsdWUnIGV4dHJhPSdvbnN1Ym1pdD1hbGVydCgiaGkiKTsnIGFzc2lnbj0nX291dHB1dCd9CiAqCiAqLwpmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25fdXBfZm9ybXN0YXJ0KCRwYXJhbXMsICYkc21hcnR5KSB7CgkKCSRkZWJ1ZyA9ICcwJzsKCQoJaWYgKCFpc3NldCgkcGFyYW1zWydtb2R1bGUnXSkgKSB7CgkJcmV0dXJuOwkKCX0KCQoJJG1vZHVsZSA9ICRwYXJhbXNbJ21vZHVsZSddOwoJdW5zZXQoJHBhcmFtc1snbW9kdWxlJ10pOwoJCgkkb2JqID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGUpOwoJCglpZiAoIWlzX29iamVjdCgkb2JqKSkgewoJCXJldHVybjsKCX0KCQoJLy8gZGVmYXVsdHMgCgkkaWQgPSBVcEhlbHBlcjo6cmFuZG9tX3Bhc3N3b3JkKCc0Jyk7CgkkYWN0aW9uID0gJyc7CgkkcmV0dXJuaWQgPSBpc3NldChjbXNtcygpLT52YXJpYWJsZXNbJ2NvbnRlbnRfaWQnXSkgPyBjbXNtcygpLT52YXJpYWJsZXNbJ2NvbnRlbnRfaWQnXSA6ICcnOwoJJG1ldGhvZCA9ICdwb3N0JzsKCSRlbmN0eXBlID0gJyc7CgkkaW5saW5lID0gJyc7CgkkaWRzdWZmaXggPSAnMSc7CgkkcHJvcHMgPSBhcnJheSgpOwoJJGV4dHJhID0gJyc7CgkkYXNzaWduID0gJyc7CgkJCglpZiAoaXNzZXQoJHBhcmFtc1snaWQnXSkpIHsKCQkkaWQgPSAkcGFyYW1zWydpZCddOwoJCXVuc2V0KCRwYXJhbXNbJ2lkJ10pOwoJfQoJCglpZiAoaXNzZXQoJHBhcmFtc1snYWN0aW9uJ10pKSB7CgkJJGFjdGlvbiA9ICRwYXJhbXNbJ2FjdGlvbiddOwoJCXVuc2V0KCRwYXJhbXNbJ2FjdGlvbiddKTsKCX0KCQoJaWYgKGlzc2V0KCRwYXJhbXNbJ3JldHVybmlkJ10pKSB7CgkJJHJldHVybmlkID0gJHBhcmFtc1sncmV0dXJuaWQnXTsKCQl1bnNldCgkcGFyYW1zWydyZXR1cm5pZCddKTsKCX0KCQoJaWYgKGlzc2V0KCRwYXJhbXNbJ21ldGhvZCddKSkgewoJCSRtZXRob2QgPSAkcGFyYW1zWydtZXRob2QnXTsKCQl1bnNldCgkcGFyYW1zWydtZXRob2QnXSk7Cgl9CgkKCWlmIChpc3NldCgkcGFyYW1zWydlbmN0eXBlJ10pKSB7CgkJJGVuY3R5cGUgPSAkcGFyYW1zWydlbmN0eXBlJ107CgkJdW5zZXQoJHBhcmFtc1snZW5jdHlwZSddKTsKCX0KCQoJaWYgKGlzc2V0KCRwYXJhbXNbJ2lubGluZSddKSkgewoJCSRpbmxpbmUgPSAkcGFyYW1zWydpbmxpbmUnXTsKCQl1bnNldCgkcGFyYW1zWydpbmxpbmUnXSk7Cgl9CgkKCWlmIChpc3NldCgkcGFyYW1zWydpZHN1ZmZpeCddKSkgewoJCSRpZHN1ZmZpeCA9ICRwYXJhbXNbJ2lkc3VmZml4J107CgkJdW5zZXQoJHBhcmFtc1snaWRzdWZmaXgnXSk7Cgl9CgkJCglpZiAoaXNzZXQoJHBhcmFtc1sncHJvcHMnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1sncHJvcHMnXSkgKSB7CgkKCQkkYXJyYXkgPSAkcGFyYW1zWydwcm9wcyddOwoJCSRwcm9wcyA9IGFycmF5KCk7CgkJCgkJZm9yKCRpID0gMDsgJGkgPCBjb3VudCgkYXJyYXkpOyAkaSsrKSB7CgkJCWlmKCRpICUgMikgewoJCQkJJGsgPSB0cmltKCRhcnJheVskaS0xXSk7CgkJCQkkdiA9IHRyaW0oJGFycmF5WyRpXSk7CQkJCgkJCQkkcHJvcHNbJGtdID0gJHY7CgkJCX0KCQl9CgkJCgkJdW5zZXQoJHBhcmFtc1sncHJvcHMnXSk7Cgl9CgkKCWlmIChpc3NldCgkcGFyYW1zWydleHRyYSddKSkgewoJCSRleHRyYSA9ICRwYXJhbXNbJ2V4dHJhJ107CgkJdW5zZXQoJHBhcmFtc1snZXh0cmEnXSk7Cgl9CgkKCWlmIChpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpIHsKCQkkYXNzaWduID0gJHBhcmFtc1snYXNzaWduJ107CgkJdW5zZXQoJHBhcmFtc1snYXNzaWduJ10pOwoJfQoJCgkkb3V0cHV0ID0gJG9iai0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCAkbWV0aG9kLCAkZW5jdHlwZSwgJGlubGluZSwgJGlkc3VmZml4LCAkcHJvcHMsICRleHRyYSk7CgkKICBpZiAoIWVtcHR5KCRhc3NpZ24pKSB7CiAgICAgICRzbWFydHktPmFzc2lnbigkYXNzaWduLCRvdXRwdXQpOwogICAgICByZXR1cm47CiAgfQoKICByZXR1cm4gJG91dHB1dDsKCQp9CgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpCookie.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBVcENvb2tpZS5jbGFzcy5waHAgMzIgMjAxMi0wNy0xMSAxOTo0NDozMlogYXJub3VkICQgCgojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENsYXNzOiBVcENvb2tpZSAoYykgMjAxMS0yMDEyIGJ5IEFybm91ZCB2YW4gU3VzdGVyZW4gKGFybm91ZEB1cHNlcnZpY2UubmwpCiMgQSBjbGFzcyB0byB3b3JrIHdpdGggQ29va2llcwojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgVXBDb29raWUgewoKICAgIC8qKgogICAgICogQ2xhc3MgY29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBpcmVzIE51bWJlciBvZiBzZWNvbmRzIHVudGlsIGNvb2tpZSBleHBpcmVzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHBhdGgKICAgICAqIEBwYXJhbSBib29sICRzZWN1cmUKICAgICAqIEBwYXJhbSBib29sICRodHRwb25seQogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGV4cGlyZXMsICRwYXRoID0gJy8nLCAkc2VjdXJlID0gRkFMU0UsICRodHRwb25seSA9IEZBTFNFKSB7CiAgICAgICAgJHRoaXMtPmV4cGlyYXRpb24gPSAkZXhwaXJlczsKICAgICAgICAkdGhpcy0+cGF0aCA9ICRwYXRoOwogICAgICAgICR0aGlzLT5kb21haW4gPSAnLicgLiAkX1NFUlZFUlsiU0VSVkVSX05BTUUiXTsKICAgICAgICAkdGhpcy0+c2VjdXJlID0gJHNlY3VyZTsKICAgICAgICAkdGhpcy0+aHR0cG9ubHkgPSAkaHR0cG9ubHk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgY29va2llCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyZQogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICovCiAgICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVwZGF0ZUNvb2tpZSgkbmFtZSwgJGRhdGEsICRleHBpcmUpIHsKICAgIAogICAgICAgIGlmIChoZWFkZXJzX3NlbnQoKSA9PT0gVFJVRSkgewogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfSAgICAKICAgIAogICAgICAgICRyZXQgPSBzZXRjb29raWUoJG5hbWUsICRkYXRhLCRleHBpcmUsICR0aGlzLT5wYXRoLCAkdGhpcy0+ZG9tYWluLCAkdGhpcy0+c2VjdXJlLCAkdGhpcy0+aHR0cG9ubHkpOwogICAgCiAgICAgICAgaWYgKCRyZXQgPT09IFRSVUUpIHsKICAgICAgICAgICAgaWYgKGlzX251bGwoJGRhdGEpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkX0NPT0tJRVskbmFtZV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJF9DT09LSUVbJG5hbWVdID0gJGRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICAvKioKICAgICAqIERlbGV0ZXMgYSBjb29raWUKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5hbWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqCiAgICAgKi8KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgkbmFtZSkgewogICAgICAgIHJldHVybiAkdGhpcy0+dXBkYXRlQ29va2llKCRuYW1lLG51bGwsdGltZSgpIC0gMzYwMCAqIDI1KTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBjb29raWUKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJG5hbWUsICRkYXRhID0gJycpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwZGF0ZUNvb2tpZSgkbmFtZSwgc2VyaWFsaXplKCRkYXRhKSwgdGltZSgpICsgJHRoaXMtPmV4cGlyYXRpb24pOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGNvb2tpZQogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkbmFtZQogICAgICogQHJldHVybiBtaXhlZAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRuYW1lKSB7CiAgICAgICAgaWYgKCR0aGlzLT5jaGVjaygkbmFtZSkgPT09IFRSVUUpIHsKICAgICAgICAgICAgcmV0dXJuIHVuc2VyaWFsaXplKCRfQ09PS0lFWyRuYW1lXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIHRoZSBleGlzdGFuY2Ugb2YgYSBjb29raWUKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5hbWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soJG5hbWUpIHsKICAgICAgICByZXR1cm4gaXNzZXQoJF9DT09LSUVbJG5hbWVdKTsKICAgIH0KICAgIAp9IC8vIFVwQ29va2llCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpCustomField.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBVcEN1c3RvbUZpZWxkLmNsYXNzLnBocCAzNCAyMDEzLTA0LTE4IDE3OjAwOjIyWiBhcm5vdWQgJAoKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDbGFzczogVXBDdXN0b21GaWVsZCAoYykgMjAxMS0yMDEyIGJ5IEFybm91ZCB2YW4gU3VzdGVyZW4gKGFybm91ZEB1cHNlcnZpY2UubmwpCiMgQSBjbGFzcyB3aGljaCBjYW4gYmUgdXNlZCB0byBzZXR1cCBDdXN0b21GaWVsZHMKIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb3N0IG9mIHRoaXMgY29kZSBpcyB0YWtlbiBmcm9tIHRoZSBDTVMgTWFkZSBTaW1wbGUgbW9kdWxlIExpc3RJdDIKIyAoYykgQmVuIE1hbGVtLCBTaW1vbiBSYWRmb3JkCiMgKGMpIEpvbmF0aGFuIFNjaG1pZCwgYW5kIG90aGVycwojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2xpc3RpdDIKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgovKiogCiAqCiAqIEBleGFtcGxlCiAqICRjdXN0b21fZmllbGQgPSBuZXcgVXBDdXN0b21GaWVsZCgnVXBQcm9qZWN0Jyk7CiAqICRmaWVsZF90eXBlc19hcnJheSA9ICRjdXN0b21fZmllbGQtPkdldEZpZWxkVHlwZXMoKTsKICoKICovCgpjbGFzcyBVcEN1c3RvbUZpZWxkIHsKCQoJCgl2YXIgJF9tb2R1bGU7Cgl2YXIgJF9tb2R1bGVfaW5zdGFuY2U7CgkKCS8qKgoJICogY29uc3RydWN0b3IKCSAqCgkgKi8KCQoJZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZSkgewoJCSR0aGlzLT5fbW9kdWxlID0gJG1vZHVsZTsKCQkkdGhpcy0+X21vZHVsZV9pbnN0YW5jZSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlKTsKCX0KCgkvKioKCSAqIEdldCBmaWVsZCB0eXBlcwoJICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGZpZWxkIHR5cGVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBHZXRGaWVsZFR5cGVzKCkgewoJCQoJCS8vJG1vZG9wcyA9IGNtc21zKCktPkdldE1vZHVsZU9wZXJhdGlvbnMoKTsKCQkvLyRtb2R1bGVfaW5zdGFuY2UgPSAkbW9kb3BzLT5nZXRfbW9kdWxlX2luc3RhbmNlKCR0aGlzLT5fbW9kdWxlKTsKCQkvLyAndXBsb2FkX2ZpbGUnID0+ICR0aGlzLT5fbW9kdWxlX2luc3RhbmNlLT5MYW5nKCd1cGxvYWRfZmlsZScpLAoJCQoJCSR0eXBlcyA9IGFycmF5KAoJCQkndGV4dGJveCcgPT4gJHRoaXMtPl9tb2R1bGVfaW5zdGFuY2UtPkxhbmcoJ3RleHRib3gnKSwKCQkJJ2NoZWNrYm94JyA9PiAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+TGFuZygnY2hlY2tib3gnKSwKCQkJJ3RleHRhcmVhJyA9PiAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+TGFuZygndGV4dGFyZWEnKSwKCQkJJ3NlbGVjdF9kYXRlJyA9PiAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+TGFuZygnc2VsZWN0X2RhdGUnKSwKCQkJJ3NlbGVjdF9maWxlJyA9PiAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+TGFuZygnc2VsZWN0X2ZpbGUnKSwKCQkJJ2Ryb3Bkb3duJyA9PiAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+TGFuZygnZHJvcGRvd24nKSwKCQkJJ2ZpZWxkc2V0X3N0YXJ0JyA9PiAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+TGFuZygnZmllbGRzZXRfc3RhcnQnKSwKCQkJJ2ZpZWxkc2V0X2VuZCcgPT4gJHRoaXMtPl9tb2R1bGVfaW5zdGFuY2UtPkxhbmcoJ2ZpZWxkc2V0X2VuZCcpCgkJKTsKCQkKCQlyZXR1cm4gJHR5cGVzOwoJCQoJfQkKCQoJLyoqCgkgKiBHZXQgdGhlIGN1c3RvbWZpZWxkIG1hcmt1cCB0byBiZSBzaG93biBpbiB0aGUgU21hcnR5IHRlbXBsYXRlCgkgKiBAcGFyYW0gYXJyYXkgJGZsZHZhbHMgYXJyYXkgb2YgYXJyYXkgd2l0aCBzdGlja3kgdmFsdWVzCgkgKiBAcGFyYW0gYXJyYXkgJGN1c3RvbV9mbGRzIGFycmF5IG9mIGFycmF5IHdpdGggZmxkZGVmIHZhbHVlcwoJICogQHBhcmFtIGludCAkaWQgY21zbXMgbW9kdWxlIGlkCgkgKiBAcGFyYW0gaW50ICRpdGVtX2lkIHBrZXkKCSAqIEByZXR1cm4gb2JqZWN0ICRjdXN0b21fZmxkc19vYmogb2JqZWN0IHdpdGggd2l0aCBjdXN0b21maWVsZCBtYXJrdXAgCgkgKi8KCSAKCSAvLyBAdG9kbyB0ZXN0IGFuZCBkb2N1bWVudAoJIAoJcHVibGljIGZ1bmN0aW9uIGdldF9jdXN0b21maWVsZF9tYXJrdXAoJGZpZWxkdmFscywgJGN1c3RvbV9mbGRzLCAkaWQsICRpdGVtX2lkKSB7CgoJCSRjdXN0b21fZmxkc19vYmogPSBhcnJheSgpOwoJCgkJZm9yZWFjaCAoJGN1c3RvbV9mbGRzIGFzICRjdXN0b21fZmxkKSB7CgkKCQkJJG9iaiAgCQkJPSBuZXcgU3RkQ2xhc3MoKTsKCQkJJG5hbWUgCQkJPSAnY3VzdG9tZmllbGRbJyAuICRjdXN0b21fZmxkWydmaWVsZGRlZl9pZCddIC4gJ10nOwoJCQkkb2JqLT5uYW1lIAkJPSAoJGN1c3RvbV9mbGRbJ3JlcXVpcmVkJ10gPyAnKicgOiAnJykgLiAkY3VzdG9tX2ZsZFsnbmFtZSddOwoJCQkkdmFsdWUgCQkJPSAoaXNzZXQoJGZpZWxkdmFsc1skY3VzdG9tX2ZsZFsnZmllbGRkZWZfaWQnXV0pID8gJGZpZWxkdmFsc1skY3VzdG9tX2ZsZFsnZmllbGRkZWZfaWQnXV0gOiAnJyk7CgkJCQoJCQkkb2JqLT5pdGVtX2lkCT0gJGl0ZW1faWQ7CgkJCSRvYmotPnByb21wdCAJPSAkY3VzdG9tX2ZsZFsncHJvbXB0J107CgkJCSRvYmotPnR5cGUgCQk9ICRjdXN0b21fZmxkWyd0eXBlJ107CgkJCQkJCQoJCQlzd2l0Y2ggKCRjdXN0b21fZmxkWyd0eXBlJ10pIHsKCQkJCWNhc2UgJ3RleHRib3gnOgoJCQkJCSRzaXplID0gIWVtcHR5KCRjdXN0b21fZmxkWydzaXplJ10pID8gJGN1c3RvbV9mbGRbJ3NpemUnXSA6IDUwOwoKCQkJCQkkdmFsaWRhdGlvbl9ydWxlID0gJGN1c3RvbV9mbGRbJ3JlcXVpcmVkJ10gPyAncmVxdWlyZWQnIDogJyc7CgkJCQkJCgkJCQkJaWYgKCFlbXB0eSgkY3VzdG9tX2ZsZFsnbWF4X2xlbmd0aCddKSkgewoJCQkJCQkkb2JqLT5maWVsZCA9ICR0aGlzLT5fbW9kdWxlX2luc3RhbmNlLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAkbmFtZSwgJHZhbHVlLCAkc2l6ZSwgJGN1c3RvbV9mbGRbJ21heF9sZW5ndGgnXSwgJHZhbGlkYXRpb25fcnVsZSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJG9iai0+ZmllbGQgPSAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJG5hbWUsICR2YWx1ZSwgJHNpemUsICcnLCAkdmFsaWRhdGlvbl9ydWxlKTsKCQkJCQl9CgkJCQkJCgkJCQkJYnJlYWs7CgkJCQkKCQkJCWNhc2UgJ2Ryb3Bkb3duJzoKCQkJCQkkb3B0aW9ucyA9IGFycmF5KCk7CgkJCQkJJG9wdGlvbnNbJy0tLSAnLmxhbmcoJ25vbmUnKS4nIC0tLSddID0gJ3NlbGVjdF9kZWZhdWx0JzsKCQkJCQkKCQkJCQlpZiAoaXNfYXJyYXkoJGN1c3RvbV9mbGRbJ29wdGlvbnMnXSkgJiYgIWVtcHR5KCRjdXN0b21fZmxkWydvcHRpb25zJ10pKSB7CgkJCQkJCSRvcHRpb25zID0gJG9wdGlvbnMgKyBhcnJheV9mbGlwKCRjdXN0b21fZmxkWydvcHRpb25zJ10pOwoJCQkJCX0KCQkJCQkKCQkJCQkkb2JqLT5maWVsZCA9ICR0aGlzLT5fbW9kdWxlX2luc3RhbmNlLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJG5hbWUsICRvcHRpb25zLCAtMSwgJHZhbHVlKTsKCQkJCQlicmVhazsKCQkJCQoJCQkJY2FzZSAnY2hlY2tib3gnOgoJCQkJCSRvYmotPmZpZWxkID0gJHRoaXMtPl9tb2R1bGVfaW5zdGFuY2UtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJG5hbWUsICcwJykgLiAkdGhpcy0+X21vZHVsZV9pbnN0YW5jZS0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICRuYW1lLCAnMScsICR2YWx1ZSk7CgkJCQkJYnJlYWs7CgkJCQkKCQkJCWNhc2UgJ3RleHRhcmVhJzoKCQkJCQkkb2JqLT5maWVsZCA9ICR0aGlzLT5fbW9kdWxlX2luc3RhbmNlLT5DcmVhdGVUZXh0QXJlYSgkY3VzdG9tX2ZsZFsnd3lzaXd5ZyddLCAkaWQsICR2YWx1ZSwgJG5hbWUpOwoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICdzZWxlY3RfZGF0ZSc6CgkJCQkJJHNpemUgPSAhZW1wdHkoJGN1c3RvbV9mbGRbJ3NpemUnXSkgPyAkY3VzdG9tX2ZsZFsnc2l6ZSddIDogMjA7CgkJCQkJCgkJCQkJJHNlbGVjdG9yICAgPSAnIycgLiAkaWQgLiBzdHJfcmVwbGFjZShhcnJheSgKCQkJCQkJJ1snLAoJCQkJCQknXScKCQkJCQkpLCBhcnJheSgKCQkJCQkJJ1xcXFsnLAoJCQkJCQknXFxcXScKCQkJCQkpLCAkbmFtZSk7CgkJCQkJJGRhdGVwaWNrZXIgPSAnCgkJCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQkJCQkJCWpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCl7CgkJCQkJCQkJJCgiJyAuICRzZWxlY3RvciAuICciKS5kYXRlcGlja2VyKHsnIC4gKCFlbXB0eSgkY3VzdG9tX2ZsZFsnZGF0ZWZvcm1hdCddKSA/ICdkYXRlRm9ybWF0OiBcJycgLiBodG1sZW50aXRpZXMoJGN1c3RvbV9mbGRbJ2RhdGVmb3JtYXQnXSkgLiAnXCcnIDogJycpIC4gJ30pOwoJCQkJCQkJfSk7CgkJCQkJPC9zY3JpcHQ+JzsKCQkJCQkKCQkJCQkkdmFsaWRhdGlvbl9ydWxlID0gJGN1c3RvbV9mbGRbJ3JlcXVpcmVkJ10gPyAncmVxdWlyZWQgZGF0ZScgOiAnZGF0ZSc7CgkJCQkJCgkJCQkJaWYgKCFlbXB0eSgkY3VzdG9tX2ZsZFsnbWF4X2xlbmd0aCddKSkgewoJCQkJCQkkb2JqLT5maWVsZCA9ICRkYXRlcGlja2VyIC4gJHRoaXMtPl9tb2R1bGVfaW5zdGFuY2UtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICRuYW1lLCAkdmFsdWUsICRzaXplLCAkY3VzdG9tX2ZsZFsnbWF4X2xlbmd0aCddLCAkdmFsaWRhdGlvbl9ydWxlKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkb2JqLT5maWVsZCA9ICRkYXRlcGlja2VyIC4gJHRoaXMtPl9tb2R1bGVfaW5zdGFuY2UtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICRuYW1lLCAkdmFsdWUsICRzaXplLCAnJywgJHZhbGlkYXRpb25fcnVsZSk7CgkJCQkJfQoJCQkJCQoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICd1cGxvYWRfZmlsZSc6CgkJCQkJCgkJCQkJLyogbm90X2ltcGxlbWVudGVkCgkJCQkJCgkJCQkJJEdCRmlsZVBpY2tlciA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnR0JGaWxlUGlja2VyJyk7CgkJCQkJCgkJCQkJJGRpciA9ICR0aGlzLT5fbW9kdWxlX2luc3RhbmNlLT5Db21waWxlRXh0cmFEaXIoJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkWydmaWVsZGRlZl9pZCddXVsnZGlyJ10sICRpdGVtX2lkLCAkYWxpYXMpOwoJCQkJCQoJCQkJCWlmICgkZGlyICE9PSBmYWxzZSl7CgkJCQkJCS8vIG1ha2UgZGlyIGlmIG5vdCBleGlzdHMKCQkJCQkJJHBhdGggPSBjbXNtcygpLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRkaXI7CgkJCQkJCWlmICghaXNfZGlyKCRwYXRoKSl7CgkJCQkJCQlAbWtkaXIoJHBhdGgsIDA3NzcsIHRydWUpOwoJCQkJCQl9CgkJCQkJCgkJCQkJCS8vIEdCRmlsZVBpY2tlciAiVXBkYXRlIGRyb3Bkb3duIiBkb2VzIG5vdCB3b3JrIGlmIGlkIGNvbnRhaW5zICJbXSIsIHN0cmlwIGl0IG91dAoJCQkJCQkkc2F2ZW5hbWUgPSBzdHJfcmVwbGFjZShhcnJheSgnWycsICddJyksICdfJywgJG5hbWUpOwoJCQkJCQkKCQkJCQkJJGdiZmlsZXBpY2tlciA9ICRHQkZpbGVQaWNrZXItPkNyZWF0ZUZpbGVQaWNrZXJJbnB1dCgkR0JGaWxlUGlja2VyLCAkaWQsICRzYXZlbmFtZSwgJHZhbHVlLCBhcnJheSgKCQkJCQkJCSdtZWRpYV90eXBlJyA9PiAoJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkWydmaWVsZGRlZl9pZCddXVsnbWVkaWFfdHlwZSddPydpbWFnZSc6J2ZpbGUnKSwKCQkJCQkJCSdmaWxlX2V4dGVuc2lvbnMnID0+IGltcGxvZGUoJywnLCAkY3VzdG9tX2ZsZHNbJGN1c3RvbV9mbGRbJ2ZpZWxkZGVmX2lkJ11dWydhbGxvdyddKSwKCQkJCQkJCSdkaXInID0+ICRkaXIsCgkJCQkJCQkndXBsb2FkJyA9PiB0cnVlLAoJCQkJCQkJJ2V4Y2x1ZGVfcHJlZml4JyA9PiAkY3VzdG9tX2ZsZHNbJGN1c3RvbV9mbGRbJ2ZpZWxkZGVmX2lkJ11dWydleGNsdWRlX3ByZWZpeCddLAoJCQkJCQkJJ21vZGUnID0+ICgkY3VzdG9tX2ZsZHNbJGN1c3RvbV9mbGRbJ2ZpZWxkZGVmX2lkJ11dWydmaWxlYnJvd3NlciddPydicm93c2VyJzonZHJvcGRvd24nKQoJCQkJCQkpKTsKCQkJCQkJCgkJCQkJCSRzZWFyY2ggICAgICAgPSAnbmFtZT0iJy4kaWQuJHNhdmVuYW1lOwoJCQkJCQkkcmVwbGFjZSAgICAgID0gJ25hbWU9IicuJGlkLiRuYW1lOwoJCQkJCQkkZ2JmaWxlcGlja2VyID0gc3RyX3JlcGxhY2UoJHNlYXJjaCwgJHJlcGxhY2UsICRnYmZpbGVwaWNrZXIpOwoJCQkJCQkKCQkJCQkJJG9iai0+ZmllbGQgPSAkZ2JmaWxlcGlja2VyOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRvYmotPmZpZWxkID0gJHRoaXMtPm1vZHVsZV9pbnN0YW5jZS0+TGFuZygncGF0aGNvbnRhaW5zdmFycycsICR0aGlzLT5fbW9kdWxlX2luc3RhbmNlLT5HZXRQcmVmZXJlbmNlKCdpdGVtX3Npbmd1bGFyJywgJycpKTsKCQkJCQl9CgkJCQkJCgkJCQkJKi8KCQkJCQkKCQkJCQlicmVhazsKCQkJCQoJCQkJY2FzZSAnc2VsZWN0X2ZpbGUnOgoJCQkJCSRwID0gY21zX2pvaW5fcGF0aChjbXNtcygpLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLCAkY3VzdG9tX2ZsZFsnZGlyJ10pOwoJCQkJCQoJCQkJCWlmICghaXNfZGlyKCRwKSkgewoJCQkJCQkkcmVzID0gQG1rZGlyKCRwKTsKCQkJCQl9CgkJCQkJCgkJCQkJJGltYWdlcyA9IGFycmF5KCk7CgkJCQkJCgkJCQkJJGFsbG93ZWQgPSAoIWVtcHR5KCRjdXN0b21fZmxkWydhbGxvdyddKSA/ICRjdXN0b21fZmxkWydhbGxvdyddIDogYXJyYXkoCgkJCQkJCSdqcGcnLAoJCQkJCQknZ2lmJywKCQkJCQkJJ3BuZycKCQkJCQkpKTsKCQkJCQkKCQkJCQlpZiAoJGhhbmRsZSA9IG9wZW5kaXIoJHApKSB7CgkJCQkJCXdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKCQkJCQkJCWlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJyAmJiAhJHRoaXMtPkhhc1ByZWZpeCgkZmlsZSwgJGN1c3RvbV9mbGRbJ2V4Y2x1ZGVfcHJlZml4J10pKSB7CgkJCQkJCQkJJGV4dCA9IHN0cnRvbG93ZXIoc3Vic3RyKHN0cnJjaHIoJGZpbGUsICcuJyksIDEpKTsKCQkJCQkKCQkJCQkJCQlpZiAoaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpKSB7CgkJCQkJCQkJCSRpbWFnZXNbJGZpbGVdID0gJGZpbGU7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWNsb3NlZGlyKCRoYW5kbGUpOwoJCQkJCX0KCQkJCQkKCQkJCQlhc29ydCgkaW1hZ2VzKTsKCQkJCQkkaW1hZ2VzID0gYXJyYXlfbWVyZ2UoYXJyYXkoJy0tLSAnLmxhbmcoJ25vbmUnKS4nIC0tLScgPT4gJ3NlbGVjdF9kZWZhdWx0JyksICRpbWFnZXMpOwoJCQkJCQoJCQkJCSRvYmotPmZpZWxkID0gJHRoaXMtPl9tb2R1bGVfaW5zdGFuY2UtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAkbmFtZSwgJGltYWdlcywgLTEsICR2YWx1ZSk7CgkJCQkJYnJlYWs7CgkJCQkKCQkJfSAvLyBzd2l0Y2gKCQkJCgkJCSRjdXN0b21fZmxkc19vYmpbXSA9ICRvYmo7CgkJCQoJCX0gLy8gZm9yZWFjaAoKCQlyZXR1cm4gJGN1c3RvbV9mbGRzX29iajsKCQkKCX0KCQkKCS8qKgoJICogR2V0IHRoZSBleHRyYSBzZXR0aW5ncyBmcm9tIHRoZSBzcGVjaWZpZWQgY3VzdG9tZmllbGRzCgkgKiBAcGFyYW0gYXJyYXkgJGN1c3RvbV9mbGRzIGFycmF5IG9mIGFycmF5IHdpdGggZmxkZGVmIHZhbHVlcwoJICogQHJldHVybiBhcnJheSAkY3VzdG9tX2ZsZHMgYXJyYXkgb2YgYXJyYXkgd2l0aCBmbGRkZWYgdmFsdWVzIGVucmljaGVkIHdpdGggZXh0cmEgdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY3VzdG9tZmllbGRfZXh0cmFzKCRjdXN0b21fZmxkcykgewoKCQlmb3JlYWNoICgkY3VzdG9tX2ZsZHMgYXMgJGN1c3RvbV9mbGQgPT4gJHNldHRpbmcpIHsKCgkJCSRpbnN0cnVjdGlvbnMgPSAkdGhpcy0+R2V0RXh0cmEoJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnZXh0cmEnXSk7CgkJCQoJCQlzd2l0Y2ggKCRzZXR0aW5nWyd0eXBlJ10pIHsKCQkJCWNhc2UgJ3RleHRib3gnOgoJCQkJCSRjdXN0b21fZmxkc1skY3VzdG9tX2ZsZF1bJ3NpemUnXSA9ICR0aGlzLT5HZXRFeHRyYVNpemUoJGluc3RydWN0aW9ucyk7CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnbWF4X2xlbmd0aCddID0gJHRoaXMtPkdldEV4dHJhTWF4TGVuZ3RoKCRpbnN0cnVjdGlvbnMpOwoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICdkcm9wZG93bic6CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnb3B0aW9ucyddID0gJHRoaXMtPkdldEV4dHJhT3B0aW9ucygkaW5zdHJ1Y3Rpb25zKTsKCQkJCQlicmVhazsKCQkJCQoJCQkJY2FzZSAnY2hlY2tib3gnOgoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICd0ZXh0YXJlYSc6CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnbWF4X2xlbmd0aCddCT0gJHRoaXMtPkdldEV4dHJhTWF4TGVuZ3RoKCRpbnN0cnVjdGlvbnMpOwoJCQkJCSRjdXN0b21fZmxkc1skY3VzdG9tX2ZsZF1bJ3d5c2l3eWcnXQk9ICR0aGlzLT5HZXRFeHRyYVd5c2l3eWcoJGluc3RydWN0aW9ucyk7CgkJCQkJYnJlYWs7CgkJCQkKCQkJCWNhc2UgJ3NlbGVjdF9kYXRlJzoKCQkJCQkkY3VzdG9tX2ZsZHNbJGN1c3RvbV9mbGRdWydzaXplJ10JID0gJHRoaXMtPkdldEV4dHJhU2l6ZSgkaW5zdHJ1Y3Rpb25zKTsKCQkJCQkkY3VzdG9tX2ZsZHNbJGN1c3RvbV9mbGRdWydtYXhfbGVuZ3RoJ10gPSAkdGhpcy0+R2V0RXh0cmFNYXhMZW5ndGgoJGluc3RydWN0aW9ucyk7CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnZGF0ZWZvcm1hdCddCSA9ICR0aGlzLT5HZXRFeHRyYURhdGVGb3JtYXQoJGluc3RydWN0aW9ucyk7CgkJCQkJYnJlYWs7CgkJCQkKCQkJCWNhc2UgJ3VwbG9hZF9maWxlJzoKCQkJCQkkY3VzdG9tX2ZsZHNbJGN1c3RvbV9mbGRdWydhbGxvdyddID0gJHRoaXMtPkdldEV4dHJhQWxsb3coJGluc3RydWN0aW9ucyk7CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnZGlyJ10gPSAkdGhpcy0+R2V0RXh0cmFEaXIoJGluc3RydWN0aW9ucyk7CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnZXhjbHVkZV9wcmVmaXgnXSA9ICR0aGlzLT5HZXRFeHRyYUV4Y2x1ZGVQcmVmaXgoJGluc3RydWN0aW9ucyk7CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnZmlsZWJyb3dzZXInXSA9ICR0aGlzLT5HZXRFeHRyYUZpbGVCcm93c2VyKCRpbnN0cnVjdGlvbnMpOwoJCQkJCWJyZWFrOwoJCQkJCgkJCQljYXNlICdzZWxlY3RfZmlsZSc6CgkJCQkJJGN1c3RvbV9mbGRzWyRjdXN0b21fZmxkXVsnYWxsb3cnXSA9ICR0aGlzLT5HZXRFeHRyYUFsbG93KCRpbnN0cnVjdGlvbnMpOwoJCQkJCSRjdXN0b21fZmxkc1skY3VzdG9tX2ZsZF1bJ2RpciddID0gJHRoaXMtPkdldEV4dHJhRGlyKCRpbnN0cnVjdGlvbnMpOwoJCQkJCSRjdXN0b21fZmxkc1skY3VzdG9tX2ZsZF1bJ2V4Y2x1ZGVfcHJlZml4J10gPSAkdGhpcy0+R2V0RXh0cmFFeGNsdWRlUHJlZml4KCRpbnN0cnVjdGlvbnMpOwoJCQkJCWJyZWFrOwoJCQl9IC8vIHN3aXRjaAoJCX0gLy8gZm9yZWFjaAoJCQoJCXJldHVybiAkY3VzdG9tX2ZsZHM7CgoJfQoJCgkKCgkvKioKCSogR2VuZXJhdGUgYWxpYXMKCSogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgc3RyaW5nIHRoYXQgdGhlIGFsaWFzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20KCSogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgYWxpYXMKCSovCglwdWJsaWMgZnVuY3Rpb24gR2VuZXJhdGVBbGlhcygkbmFtZSkgewoJCQoJCWlmICghaXNfc3RyaW5nKCRuYW1lKSkgewoJCQlyZXR1cm47CgkJfQoJCQoJCSRhbGlhcyA9ICRuYW1lOwoJCQoJCS8vIHJlcGxhY2UgbXVsdGlwbGUgc3BhY2VzIHdpdGggc2luZ2xlIHVuZGVyc2NvcmUKCQkkYWxpYXMgPSBwcmVnX3JlcGxhY2UoJy8gKy8nLCAnXycsICRhbGlhcyk7CgkJCgkJLy8gbGVhdmUgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGFuZCB1bnNjb3JlcywKCQkvLyByZXBsYWNlIGV2ZXJ5dGhpbmcgZWxzZSB3aXRoIGFuIHVuZGVyc2NvcmUKCQkkYWxpYXMgPSBwcmVnX3JlcGxhY2UoJy9bXmEtekEtWl9dLycsICdfJywgJGFsaWFzKTsKCQkKCQkvLyByZXBsYWNlIG11bHRpcGxlIHVuZGVyc2NvcmVzIHdpdGggc2luZ2xlIHVuZGVyc2NvcmUKCQkkYWxpYXMgPSBwcmVnX3JlcGxhY2UoJy9fKy8nLCAnXycsICRhbGlhcyk7CgkJCgkJLy8gY29udmVydCB0byBsb3dlcmNhc2UKCQkkYWxpYXMgPSBzdHJ0b2xvd2VyKCRhbGlhcyk7CgkJCgkJLy8gcmVtb3ZlIHVuZGVyc2NvcmUgZnJvbSBzdGFydCBhbmQgZW5kCgkJJGFsaWFzID0gdHJpbSgkYWxpYXMsICdfJyk7CgkJCgkJcmV0dXJuICRhbGlhczsKCQkKCX0KCgkvKioKCSogSXMgdmFsaWQgYWxpYXMKCSogQHBhcmFtIHN0cmluZyAkYWxpYXMKCSogQHJldHVybiBib29sIFJldHVybnMgdHJ1ZSBpZiBzdHJpbmcgaW4gcXVlc3Rpb24gaXMgYSB2YWxpZCBhbGlhcywgb3IKCSogZmFsc2Ugb3RoZXJ3aXNlCgkqLwoJcHVibGljIGZ1bmN0aW9uIElzVmFsaWRBbGlhcygkYWxpYXMpIHsKCQkKCQlpZiAoIWlzX3N0cmluZygkYWxpYXMpKSB7CgkJCXJldHVybjsKCQl9CgkKCQkvLyBjaGVjayBhbGlhcwoJCS8vIGh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudmFyaWFibGVzLmJhc2ljcy5waHAKCQlpZiAocHJlZ19tYXRjaCgnL15bYS16QS1aX1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qJC8nLCAkYWxpYXMpKSB7CgkJCXJldHVybiB0cnVlOwoJCX0gZWxzZSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkKCX0KCgkvKioKCSogR2V0IEV4dHJhCgkqIEBwYXJhbSBzdHJpbmcgJGV4dHJhCgkqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBvZiBpbnN0cnVjdGlvbnMgaWYgc3BlY2lmaWVkCgkqLwoJcHVibGljIGZ1bmN0aW9uIEdldEV4dHJhKCRleHRyYSkgewoJCQoJCWlmICghaXNfc3RyaW5nKCRleHRyYSkpIHsKCQkJcmV0dXJuOwoJCX0KCQkKCQkkaW5zdHJ1Y3Rpb25zID0gZXhwbG9kZSgnOycsIHRyaW0oJGV4dHJhLCAnOycpKTsKCQkKCQlpZiAoIWVtcHR5KCRpbnN0cnVjdGlvbnMpKSB7CgkJCXJldHVybiAkaW5zdHJ1Y3Rpb25zOwoJCX0KCQkKCX0KCgkvKioKCSogR2V0IEV4dHJhOiBPcHRpb25zCgkqIEBwYXJhbSBhcnJheSAkaW5zdHJ1Y3Rpb25zIEluc3RydWN0aW9ucwoJKiBAcmV0dXJuIGFycmF5IFJldHVybnMgYW4gYXJyYXkgb2Ygb3B0aW9ucyBpZiBzcGVjaWZpZWQKCSovCglwdWJsaWMgZnVuY3Rpb24gR2V0RXh0cmFPcHRpb25zKCRpbnN0cnVjdGlvbnMpIHsKCQkKCQlpZiAoIWlzX2FycmF5KCRpbnN0cnVjdGlvbnMpKSB7CgkJCXJldHVybjsKCQl9CgkKCQkkb3B0aW9ucyA9IGFycmF5KCk7CgkKCQlmb3JlYWNoICgkaW5zdHJ1Y3Rpb25zIGFzICRpbnN0cnVjdGlvbikgewoJCQkvLyBvcHRpb25zW2FwcGxlPUFwcGxlXQoJCQkvLyBvcHRpb25zW2FwcGxlPUFwcGxlLGJhbmFuYT1CYW5hbmFdCgkJCWlmIChwcmVnX21hdGNoKCcvXm9wdGlvbnNcWyhbXixdKz1bXixdKygsW14sXSs9W14sXSspKilcXSQvaScsICRpbnN0cnVjdGlvbiwgJG1hdGNoZXMpKSB7CgkJCQlmb3JlYWNoIChleHBsb2RlKCcsJywgJG1hdGNoZXNbMV0pIGFzICRwYWlyKSB7CgkJCQkJJGtleV92YWwgPSBleHBsb2RlKCc9JywgJHBhaXIpOwoJCQkJCSRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzFdOwoJCQkJfQoJCQl9CgkJfQoJCgkJaWYgKCFlbXB0eSgkb3B0aW9ucykpIHsKCQkJcmV0dXJuICRvcHRpb25zOwoJCX0KCQkKCX0KCgkvKioKCSogR2V0IEV4dHJhOiBXWVNJV1lHCgkqIEBwYXJhbSBhcnJheSAkaW5zdHJ1Y3Rpb25zIEluc3RydWN0aW9ucwoJKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIFdZU0lXWUcgaXMgdG8gYmUgZW5hYmxlZCwgb3IgZmFsc2Ugb3RoZXJ3aXNlCgkqLwoJcHVibGljIGZ1bmN0aW9uIEdldEV4dHJhV3lzaXd5ZygkaW5zdHJ1Y3Rpb25zKSB7CgkJCgkJaWYgKCFpc19hcnJheSgkaW5zdHJ1Y3Rpb25zKSkgewoJCQlyZXR1cm47CgkJfQoJCgkJZm9yZWFjaCAoJGluc3RydWN0aW9ucyBhcyAkaW5zdHJ1Y3Rpb24pIHsKCQkJLy8gd3lzaXd5Z1sxXQoJCQkvLyB3eXNpd3lnWzBdCgkJCS8vIHd5c2l3eWdbdHJ1ZV0KCQkJLy8gd3lzaXd5Z1tmYWxzZV0KCQkJaWYgKHByZWdfbWF0Y2goJy9ed3lzaXd5Z1xbKC4rKVxdJC9pJywgJGluc3RydWN0aW9uLCAkbWF0Y2hlcykpIHsKCQkJCWlmICgkbWF0Y2hlc1sxXSA9PSAndHJ1ZScgfHwgJG1hdGNoZXNbMV0gPT0gJzEnKSB7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgkKCQlyZXR1cm4gZmFsc2U7CgkJCgl9CgoJLyoqCgkqIEdldCBFeHRyYTogU2l6ZQoJKiBAcGFyYW0gYXJyYXkgJGluc3RydWN0aW9ucyBJbnN0cnVjdGlvbnMKCSogQHJldHVybiBpbnQgUmV0dXJucyBzaXplIGlmIHNwZWNpZmllZAoJKi8KCXB1YmxpYyBmdW5jdGlvbiBHZXRFeHRyYVNpemUoJGluc3RydWN0aW9ucykgewoJCQoJCWlmICghaXNfYXJyYXkoJGluc3RydWN0aW9ucykpIHsKCQkJcmV0dXJuOwoJCX0KCQoJCWZvcmVhY2ggKCRpbnN0cnVjdGlvbnMgYXMgJGluc3RydWN0aW9uKSB7CgkJCS8vIHNpemVbMjBdCgkJCWlmIChwcmVnX21hdGNoKCcvXnNpemVcWyhbMC05XSspXF0kL2knLCAkaW5zdHJ1Y3Rpb24sICRtYXRjaGVzKSkgewoJCQkJcmV0dXJuIChpbnQpICRtYXRjaGVzWzFdOwoJCQl9CgkJfQoJfQoKCS8qKgoJKiBHZXQgRXh0cmE6IE1heCBMZW5ndGgKCSogQHBhcmFtIGFycmF5ICRpbnN0cnVjdGlvbnMgSW5zdHJ1Y3Rpb25zCgkqIEByZXR1cm4gaW50IFJldHVybnMgbWF4aW11bSBsZW5ndGggaWYgc3BlY2lmaWVkCgkqLwoJcHVibGljIGZ1bmN0aW9uIEdldEV4dHJhTWF4TGVuZ3RoKCRpbnN0cnVjdGlvbnMpIHsKCQkKCQlpZiAoIWlzX2FycmF5KCRpbnN0cnVjdGlvbnMpKSB7CgkJCXJldHVybjsKCQl9CgkKCQlmb3JlYWNoICgkaW5zdHJ1Y3Rpb25zIGFzICRpbnN0cnVjdGlvbikgewoJCQkvLyBtYXhfbGVuZ3RoWzIwXQoJCQlpZiAocHJlZ19tYXRjaCgnL15tYXhfbGVuZ3RoXFsoWzAtOV0rKVxdJC9pJywgJGluc3RydWN0aW9uLCAkbWF0Y2hlcykpIHsKCQkJCXJldHVybiAoaW50KSAkbWF0Y2hlc1sxXTsKCQkJfQoJCX0KCQkKCX0KCgkvKioKCSogR2V0IEV4dHJhOiBEYXRlIEZvcm1hdAoJKiBAcGFyYW0gYXJyYXkgJGluc3RydWN0aW9ucyBJbnN0cnVjdGlvbnMKCSogQHJldHVybiBzdHJpbmcgUmV0dXJucyBkYXRlIGZvcm1hdCB0byBiZSB1c2VkIHdpdGggdGhlIGpxdWVyeQoJKiBkYXRlcGlja2VyIGlmIHNwZWNpZmllZAoJKi8KCXB1YmxpYyBmdW5jdGlvbiBHZXRFeHRyYURhdGVGb3JtYXQoJGluc3RydWN0aW9ucykgewoJCQoJCWlmICghaXNfYXJyYXkoJGluc3RydWN0aW9ucykpIHsKCQkJcmV0dXJuOwoJCX0KCQoJCWZvcmVhY2ggKCRpbnN0cnVjdGlvbnMgYXMgJGluc3RydWN0aW9uKSB7CgkJCS8vIGRhdGVmb3JtYXRbZGQvbW0veXldCgkJCWlmIChwcmVnX21hdGNoKCcvXmRhdGVmb3JtYXRcWyguKylcXSQvaScsICRpbnN0cnVjdGlvbiwgJG1hdGNoZXMpKSB7CgkJCQlyZXR1cm4gJG1hdGNoZXNbMV07CgkJCX0KCQl9CgkJCgl9CgoJLyoqCgkqIEdldCBFeHRyYTogRmlsZSBCcm93c2VyCgkqIEBwYXJhbSBhcnJheSAkaW5zdHJ1Y3Rpb25zIEluc3RydWN0aW9ucwoJKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIGZpbGUgYnJvd3NlciBtb2RlIGlzIHRvIGJlIGVuYWJsZWQsIG9yIGZhbHNlIG90aGVyd2lzZQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBHZXRFeHRyYUZpbGVCcm93c2VyKCRpbnN0cnVjdGlvbnMpIHsKCQkKCQlpZiAoIWlzX2FycmF5KCRpbnN0cnVjdGlvbnMpKSB7CgkJCXJldHVybjsKCQl9CgkJCgkJZm9yZWFjaCAoJGluc3RydWN0aW9ucyBhcyAkaW5zdHJ1Y3Rpb24pIHsKCQkJLy8gZmlsZWJyb3dzZXJbMV0KCQkJLy8gZmlsZWJyb3dzZXJbMF0KCQkJLy8gZmlsZWJyb3dzZXJbdHJ1ZV0KCQkJLy8gZmlsZWJyb3dzZXJbZmFsc2VdCgkJCWlmIChwcmVnX21hdGNoKCcvXmZpbGVicm93c2VyXFsoLispXF0kL2knLCAkaW5zdHJ1Y3Rpb24sICRtYXRjaGVzKSkgewoJCQkJaWYgKCRtYXRjaGVzWzFdID09ICd0cnVlJyB8fCAkbWF0Y2hlc1sxXSA9PSAnMScpIHsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0KCQkKCQlyZXR1cm4gZmFsc2U7CgkJCgl9CgoJLyoqCgkqIEdldCBFeHRyYTogQWxsb3dlZCBGaWxlIEV4dGVuc2lvbnMKCSogQHBhcmFtIGFycmF5ICRpbnN0cnVjdGlvbnMgSW5zdHJ1Y3Rpb25zCgkqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyBpZiBzcGVjaWZpZWQKCSovCglwdWJsaWMgZnVuY3Rpb24gR2V0RXh0cmFBbGxvdygkaW5zdHJ1Y3Rpb25zKSB7CgkJCgkJaWYgKCFpc19hcnJheSgkaW5zdHJ1Y3Rpb25zKSkgewoJCQlyZXR1cm4gYXJyYXkoKTsKCQl9CgkKCQlmb3JlYWNoICgkaW5zdHJ1Y3Rpb25zIGFzICRpbnN0cnVjdGlvbikgewoJCQkvLyBhbGxvd1twZGYsZ2lmLHBuZyxqcGVnLGpwZ10KCQkJaWYgKHByZWdfbWF0Y2goJy9eYWxsb3dcWyhbYS16XSsoLFthLXpdKykqKVxdJC9pJywgJGluc3RydWN0aW9uLCAkbWF0Y2hlcykpIHsKCQkJCXJldHVybiBleHBsb2RlKCcsJywgJG1hdGNoZXNbMV0pOwoJCQl9CgkJfQoJCgkJcmV0dXJuIGFycmF5KCk7CgkJCgl9CgoJLyoqCgkqIEdldCBFeHRyYTogRGlyZWN0b3J5CgkqIEBwYXJhbSBhcnJheSAkaW5zdHJ1Y3Rpb25zIEluc3RydWN0aW9ucwoJKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBkaXJlY3RvcnkgaWYgc3BlY2lmaWVkCgkqLwoJcHVibGljIGZ1bmN0aW9uIEdldEV4dHJhRGlyKCRpbnN0cnVjdGlvbnMpIHsKCQkKCQlpZiAoIWlzX2FycmF5KCRpbnN0cnVjdGlvbnMpKSB7CgkJCXJldHVybjsKCQl9CgkJCgkJZm9yZWFjaCAoJGluc3RydWN0aW9ucyBhcyAkaW5zdHJ1Y3Rpb24pIHsKCQkJLy8gZGlyW3BhdGgvdG8vZGlyXQoJCQlpZiAocHJlZ19tYXRjaCgnL15kaXJcWyguKylcXSQvaScsICRpbnN0cnVjdGlvbiwgJG1hdGNoZXMpKSB7CgkJCQlyZXR1cm4gJG1hdGNoZXNbMV07CgkJCX0KCQl9CgkJCgl9CgkKCS8qKgoJICogR2V0IEV4dHJhOiBNZWRpYVR5cGUKCSAqIEBwYXJhbSBhcnJheSAkaW5zdHJ1Y3Rpb25zIEluc3RydWN0aW9ucwoJICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgbWVkaWFfdHlwZSBpZiBzcGVjaWZpZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEdldEV4dHJhTWVkaWFUeXBlKCRpbnN0cnVjdGlvbnMpIHsKCgoJCgkJaWYgKCFpc19hcnJheSgkaW5zdHJ1Y3Rpb25zKSkgewoJCQlyZXR1cm47CgkJfQoKCQlmb3JlYWNoICgkaW5zdHJ1Y3Rpb25zIGFzICRpbnN0cnVjdGlvbikgewoJCQlpZiAocHJlZ19tYXRjaCgnL15pbWFnZVxbKC4rKVxdJC9pJywgJGluc3RydWN0aW9uLCAkbWF0Y2hlcykpIHsKCQkJCWlmICgkbWF0Y2hlc1sxXSA9PSAndHJ1ZScgfHwgJG1hdGNoZXNbMV0gPT0gJzEnKSB7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJCgkJcmV0dXJuIGZhbHNlOwoJCQoJfSAgCgkKICAgLyoqCgkqIENvbXBpbGVFeHRyYURpcgoJKiBAcGFyYW0gc3RyaW5nICRwYXRoCgkqIEBwYXJhbSBpbnQgJGl0ZW1faWQKCSogQHBhcmFtIHN0cmluZyAkaXRlbV9hbGlhcwoJKiBAcmV0dXJuIHN0cmluZyAkcGF0aAoJKi8KCXB1YmxpYyBmdW5jdGlvbiBDb21waWxlRXh0cmFEaXIoJHBhdGgsICRpdGVtX2lkID0gbnVsbCwgJGl0ZW1fYWxpYXMgPSBudWxsKXsKCQoJCWlmIChzdHJwb3MoJHBhdGgsICd7JGl0ZW1fYWxpYXN9JykgIT09IGZhbHNlKSB7CgkJCQoJCQlpZighaXNzZXQoJGl0ZW1fYWxpYXMpIHx8IHN0cmxlbigkaXRlbV9hbGlhcykgPT0gMCkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCQoJCQkkcGF0aCA9IHN0cl9yZXBsYWNlKCd7JGl0ZW1fYWxpYXN9JywgJGl0ZW1fYWxpYXMsICRwYXRoKTsKCQkJCgkJfQoJCQoJCWlmKHN0cnBvcygkcGF0aCwgJ3skaXRlbV9pZH0nKSAhPT0gZmFsc2UpIHsKCQkJCgkJCWlmKCFpc3NldCgkaXRlbV9pZCkgfHwgIWlzX2ludCgkaXRlbV9pZCkpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkKCQkJJHBhdGggPSBzdHJfcmVwbGFjZSgneyRpdGVtX2lkfScsICRpdGVtX2lkLCAkcGF0aCk7CgkJfQoJCQoJCXJldHVybiAkcGF0aDsKCQkKCX0KCgkvKioKCSogR2V0IEV4dHJhOiBFeGNsdWRlIFByZWZpeAoJKiBAcGFyYW0gYXJyYXkgJGluc3RydWN0aW9ucyBJbnN0cnVjdGlvbnMKCSogQHJldHVybiBhcnJheSBSZXR1cm5zIGFycmF5IG9mIHByZWZpeGVzIHRvIGV4Y2x1ZGUgaWYgc3BlY2lmaWVkCgkqLwoJcHVibGljIGZ1bmN0aW9uIEdldEV4dHJhRXhjbHVkZVByZWZpeCgkaW5zdHJ1Y3Rpb25zKSB7CgkJCgkJaWYgKCFpc19hcnJheSgkaW5zdHJ1Y3Rpb25zKSkgewoJCQlyZXR1cm47CgkJfQoJCQoJCWZvcmVhY2ggKCRpbnN0cnVjdGlvbnMgYXMgJGluc3RydWN0aW9uKSB7CgkJCS8vIGRpclt0aHVtYl9dCgkJCS8vIGRpclt0aHVtYl8sbm90bWVdCgkJCWlmIChwcmVnX21hdGNoKCcvXmV4Y2x1ZGVfcHJlZml4XFsoW14sXSsoLFteLF0rKSopXF0kL2knLCAkaW5zdHJ1Y3Rpb24sICRtYXRjaGVzKSkgewoJCQkJcmV0dXJuIGV4cGxvZGUoJywnLCAkbWF0Y2hlc1sxXSk7CgkJCX0KCQl9CgkJCgl9CgoJLyoqCgkqIEhhcyBQcmVmaXgKCSogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFRoZSBzdHJpbmcgaW4gcXVlc3Rpb24KCSogQHBhcmFtIGFycmF5ICRwcmVmaXggQXJyYXkgb2YgcHJlZml4ZXMgdG8gbWF0Y2ggYWdhaW5zdAoJKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIHByZWZpeCBpcyBmb3VuZCwgb3IgZmFsc2Ugb3RoZXJ3aXNlCgkqLwoJcHVibGljIGZ1bmN0aW9uIEhhc1ByZWZpeCgkc3RyaW5nLCAkcHJlZml4ZXMpIHsKCQkKCQlpZiAoIWlzX3N0cmluZygkc3RyaW5nKSkgewoJCQlyZXR1cm47CgkJfQoJCQoJCWlmICghaXNfYXJyYXkoJHByZWZpeGVzKSkgewoJCQlyZXR1cm47CgkJfQoJCQoJCWZvcmVhY2ggKCRwcmVmaXhlcyBhcyAkcHJlZml4KSB7CgkJCWlmIChzdHJwb3MoJHN0cmluZywgJHByZWZpeCkgPT09IDApIHsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoJCQoJCXJldHVybiBmYWxzZTsKCQoJfQoKCn0gLy8gVXBDdXN0b21GaWVsZAoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpHelper.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBVcEhlbHBlci5jbGFzcy5waHAgMzIgMjAxMi0wNy0xMSAxOTo0NDozMlogYXJub3VkICQgCgojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENsYXNzOiBVcEhlbHBlciAoYykgMjAxMS0yMDEyIGJ5IEFybm91ZCB2YW4gU3VzdGVyZW4gKGFybm91ZEB1cHNlcnZpY2UubmwpCiMKIyBTb21lIGhlbHBlciBtZXRob2RzCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIFVwSGVscGVyIHsKICAgIAogICAgLyoqIAogICAgICogZmlsdGVyIGFuICRhc3NvY19hcnJheSBieSAka2V5CiAgICAgKgogICAgICogYWx0ZXJuYXRpdmUgdG86IAogICAgICogJGZpbHRlcmVkX2FycmF5ID0gYXJyYXlfbWFwKCBmdW5jdGlvbigkaXRlbSkgeyByZXR1cm4gJGl0ZW1bJ25hbWUnXTsgfSwgJGFzc29jX2FycmF5KTsKICAgICAqIHdoaWNoIGRvZXMgbm90IHdvcmsgb24gcGhwIDwgNS4zIAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIGFycmF5ICRhc3NvY19hcnJheQogICAgICogQHJldHVybiBhcnJheSAkZmlsdGVyZWRfYXJyYXkKICAgICAqCiAgICAgKi8KICAgIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcnJheV9wbHVjaygka2V5LCAkYXNzb2NfYXJyYXkpIHsKCiAgICAgICAgaWYgKGlzX2FycmF5KCRrZXkpIHx8ICFpc19hcnJheSgkYXNzb2NfYXJyYXkpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgpOwogICAgICAgIH0gICAKICAgIAogICAgICAgICRmaWx0ZXJlZF9hcnJheSA9IGFycmF5KCk7CiAgICAKICAgICAgICBmb3JlYWNoKCRhc3NvY19hcnJheSBhcyAkdikgewogICAgICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkdikpIHsKICAgICAgICAgICAgICAgICRmaWx0ZXJlZF9hcnJheVtdID0gJHZbJGtleV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAKICAgICAgICByZXR1cm4gJGZpbHRlcmVkX2FycmF5OwoKICAgIH0gCiAgICAgICAgCiAgICAvKiogCiAgICAgKiBjb252ZXJ0cyAkaW5wdXQgdG8gYSBsb3dlcmNhc2UgYWxwaGEgbnVtZXJpYyBvbmx5IHZhcmlhbnQgCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5wdXQgCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkbGNfYWxwaGFfbnVtCiAgICAgKgogICAgICovCiAgICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFscGhhX251bWVyaWNfbG93ZXIoJGlucHV0KSB7CiAgICAgICAgJGlucHV0ID0gdHJpbSgkaW5wdXQpOwogICAgICAgICRpbnB1dCA9IHByZWdfcmVwbGFjZSgiL1teYS16QS1aMC05XHNfXS8iLCAiIiwgJGlucHV0KTsgCiAgICAgICAgJGlucHV0ID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICdfJywgJGlucHV0KTsKICAgICAgICAkaW5wdXQgPSBwcmVnX3JlcGxhY2UoJy9fezIsfS8nLCAnXycsICRpbnB1dCk7CiAgICAgICAgJGlucHV0ID0gc3RydG9sb3dlcigkaW5wdXQpOwogICAgICAgIAogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICAgICAgCiAgICB9CiAgICAKICAgICAvKiogCiAgICAgKiBnZW5lcmF0ZSBhIHJhbmRvbSBwYXNzd29yZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nICRwYXNzCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGgKICAgICAqLwogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJhbmRvbV9wYXNzd29yZCgkbGVuZ3RoID0gOCkgewogICAgCiAgICAgICAgJGNoYXJzID0gImFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXowMjM0NTY3ODkiOwogICAgICAgIHNyYW5kKChkb3VibGUpbWljcm90aW1lKCkqMTAwMDAwMCk7CiAgICAgICAgJGkgPSAwOwogICAgICAgICRwYXNzID0gJycgOwogICAgICAgIAogICAgICAgIHdoaWxlICgkaSA8PSAoJGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICRudW0gPSByYW5kKCkgJSAzMzsKICAgICAgICAgICAgJHRtcCA9IHN1YnN0cigkY2hhcnMsICRudW0sIDEpOwogICAgICAgICAgICAkcGFzcyA9ICRwYXNzIC4gJHRtcDsKICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRwYXNzOwogICAgCiAgICB9CiAgICAKICAgIC8qKiAKICAgICAqIGdldCB0aGUgY2xpZW50IGlwIGFkZHJlc3MgCiAgICAgKiAKICAgICAqIEByZXR1cm4gc3RyaW5nICRpcAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9pcCggKSB7CiAgICAgICAgCiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddKSkgewogICAgICAgICAgICAkaXAgPSBzdHJpcHNsYXNoZXMoJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSkpIHsKICAgICAgICAgICAgICAgICRpcCA9IHN0cmlwc2xhc2hlcygkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaXAgPSBzdHJpcHNsYXNoZXMoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pOyAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJGlwOwogICAgfQogICAgCiAgICAvKioKICAgICAqCiAgICAgKiBDTVNNUyBDcmVhdGVJbnB1dERyb3dkb3duIGNhbiBnaXZlIHRoZSB3cm9uZyBvcHRpb24gKGtleSwgdmFsdWUpIG9yZGVyCiAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIHRoZSBzYW1lIGJ1dCBpbiBhIHJldmVyc2Ugd2F5ICh2YWx1ZSwga2V5KSAKICAgICAqCiAgICAgKiBAcGFyYW0gJGlucHV0IHN0cmluZyAtIGVtcHR5IDxzZWxlY3Q+PC9zZWxlY3Q+IGJveAogICAgICogQHBhcmFtICRkcm9wZG93biBhcnJheSAtIGFycmF5IHdpdGgga2V5LCB2YWx1ZSBwYWlycwogICAgICogQHBhcmFtICRzZWxlY3RlZCBzdHJpbmcgLSBzZWxlY3RlZCBvcHRpb24gCiAgICAgKgogICAgICogQHJldHVybiAkaW5wdXQgc3RyaW5nIC0gbW9kaWZpZWQgZHJvcGRvd24gIAogICAgICoKICAgICAqLwogICAgICAgIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb2RpZnlfaW5wdXRfZHJvcGRvd24oJGlucHV0LCAkZHJvcGRvd24sICRzZWxlY3RlZCkgewogICAgCiAgICAgICAgJGRyb3Bkb3duX29wdGlvbnMgPSAnJzsKICAgICAgICAkaW5wdXRfc2VsZWN0ZWQgPSAnJzsKICAgICAgICAKICAgICAgICBmb3JlYWNoICgkZHJvcGRvd24gYXMgJGsgPT4gJHYpIHsKICAgICAgICAKICAgICAgICAgICAgaWYgKCRrID09ICRzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgJGlucHV0X3NlbGVjdGVkID0gJyAnLiAnc2VsZWN0ZWQ9InNlbGVjdGVkIic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaW5wdXRfc2VsZWN0ZWQgPSAnJzsgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICRkcm9wZG93bl9vcHRpb25zIC49ICc8b3B0aW9uIHZhbHVlPSInLiBjbXNfaHRtbGVudGl0aWVzKCRrKS4gJyInLiAkaW5wdXRfc2VsZWN0ZWQuICc+Jy4gY21zX2h0bWxlbnRpdGllcygkdikuICc8L29wdGlvbj4nOyAgIAogICAgICAgIAogICAgICAgIH0KICAgICAgICAKICAgICAgICAkaW5wdXQgPSBzdHJfcmVwbGFjZSgiPC9zZWxlY3Q+IiwgJGRyb3Bkb3duX29wdGlvbnMsICRpbnB1dCkuICI8L3NlbGVjdD4iOwogICAgICAgIAogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKgogICAgICogQ01TTVMgQ3JlYXRlSW5wdXRTZWxlY3RMaXN0IGNhbiBnaXZlIHRoZSB3cm9uZyBvcHRpb24gKGtleSwgdmFsdWUpIG9yZGVyCiAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIHRoZSBzYW1lIGJ1dCBpbiBhIHJldmVyc2Ugd2F5ICh2YWx1ZSwga2V5KSAKICAgICAqCiAgICAgKiBAcGFyYW0gJGlucHV0IHN0cmluZyAtIGVtcHR5IDxzZWxlY3Q+PC9zZWxlY3Q+IGJveAogICAgICogQHBhcmFtICRzZWxlY3RsaXN0IGFycmF5IC0gYXJyYXkgd2l0aCBrZXksIHZhbHVlIHBhaXJzCiAgICAgKiBAcGFyYW0gJHNlbGVjdGVkIGFycmF5IC0gc2VsZWN0ZWQgb3B0aW9uIAogICAgICoKICAgICAqIEByZXR1cm4gJGlucHV0IHN0cmluZyAtIG1vZGlmaWVkIHNlbGVjdGxpc3QgIAogICAgICoKICAgICAqLwogICAgICAgIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb2RpZnlfaW5wdXRfc2VsZWN0bGlzdCgkaW5wdXQsICRzZWxlY3RsaXN0LCAkc2VsZWN0ZWQpIHsKICAgIAogICAgICAgICRzZWxlY3RsaXN0X29wdGlvbnMgPSAnJzsKICAgICAgICAkaW5wdXRfc2VsZWN0ZWQgPSAnJzsKICAgICAgICAKICAgICAgICBmb3JlYWNoICgkc2VsZWN0bGlzdCBhcyAkayA9PiAkdikgewogICAgICAgIAogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGssICRzZWxlY3RlZCkpIHsKICAgICAgICAgICAgICAgICRpbnB1dF9zZWxlY3RlZCA9ICcgJy4gJ3NlbGVjdGVkPSJzZWxlY3RlZCInOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGlucHV0X3NlbGVjdGVkID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgJHNlbGVjdGxpc3Rfb3B0aW9ucyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4gY21zX2h0bWxlbnRpdGllcygkaykuICciJy4gJGlucHV0X3NlbGVjdGVkLiAnPicuIGNtc19odG1sZW50aXRpZXMoJHYpLiAnPC9vcHRpb24+JzsgICAKICAgICAgICAKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGlucHV0ID0gc3RyX3JlcGxhY2UoIjwvc2VsZWN0PiIsICRzZWxlY3RsaXN0X29wdGlvbnMsICRpbnB1dCkuICI8L3NlbGVjdD4iOwogICAgICAgIAogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBUdXJuIGFuIGFycmF5X29mX2FycmF5IHRvIGpzb24gZGF0YSB0byBiZSB1c2VkIGluIGRyb3Bkb3ducwogICAgICoKICAgICAqIEBwYXJhbSAkYV9vZl9hIGFycmF5IC0gYXJyYXlfb2ZfYXJyYXkgd2l0aCBuZXN0ZWQga2V5IHBhaXJzCiAgICAgKiBAcmV0dXJuICRqc29uIHN0cmluZyAtIGphdmFzY3JpcHQgZW5jb2RlZCAgCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXJyYXlfb2ZfYXJyYXlfdG9fanNvbigkYV9vZl9hID0gYXJyYXkoKSkgewogICAgIAogICAgICAgICRqc29uID0gJyc7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCAoJGFfb2ZfYSBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkanNvbiAuPSAneyBwa2V5OicuICRrLiAnLCAnOwogICAgICAgIAogICAgICAgICAgICAkbGVuID0gY291bnQoYXJyYXlfa2V5cygkdikpOwogICAgICAgICAgICAkY291bnQgPSAnMCc7CiAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2ggKCR2IGFzICRzX2sgPT4gJHNfdikgewogICAgICAgICAgICAgICAgLy8kc192ID0gcHJlZ19yZXBsYWNlKCIvW15hLXpBLVowLTlcc10vIiwgIiIsICRzX3YpOwogICAgICAgICAgICAgICAgJHNfdiA9IHByZWdfcmVwbGFjZSgiL1wnLyIsICIiLCAkc192KTsKICAgICAgICAgICAgICAgIC8vJHNfdiA9IGh0bWxlbnRpdGllcygkc192KTsKICAgICAgICAKICAgICAgICAgICAgICAgICRqc29uIC49ICIkc19rIi4gIjonIi4gIiRzX3YiLiAiJywiOwogICAgICAgIAogICAgICAgICAgICAgICAgJGNvdW50Kys7CiAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoJGNvdW50ID09ICRsZW4pIHsKICAgICAgICAgICAgICAgICAgICAkanNvbiA9IHN1YnN0cigkanNvbiwgMCwgLTEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICRqc29uIC49ICd9LCc7CiAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgICRqc29uID0gc3Vic3RyKCRqc29uLCAwLCAtMSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRqc29uOwogICAgICAgIAogICAgfQogICAgCiAgICAKICAgIC8qKgogICAgICogZmxhdHRlbiBhbiBhcnJheQogICAgICoKICAgICAqIEBwYXJhbSAkYXJyYXlfaW4gYXJyYXkKICAgICAqIEByZXR1cm4gJGFycmF5X291dCBhcnJheQogICAgICoKICAgICAqLwoKICAgIGZ1bmN0aW9uIGFycmF5X2ZsYXQoJGFycmF5X2luKSB7CgogICAgICAgICRhcnJheV9vdXQgPSBhcnJheSgpOwogICAgICAgIAogICAgICAgICBmb3JlYWNoKCRhcnJheV9pbiBhcyAkYSkgewogICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRhKSkgewogICAgICAgICAgICAgICAgICRhcnJheV9vdXQgPSBhcnJheV9tZXJnZSgkYXJyYXlfb3V0LCBzZWxmOjphcnJheV9mbGF0KCRhKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmICgkYSkgewogICAgICAgICAgICAgICAgICAgICAkYXJyYXlfb3V0W10gPSAkYTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KCiAgICAgICAgIHJldHVybiAkYXJyYXlfb3V0OwogICAgfSAKICAgIAogICAgLyoqCiAgICAgKiBnZXQgYWxsIHRoZSBmaWxlcyAocmVjdXJzaXZlbHkpIG9mIGFuIHVwbG9hZHMgZGlyZWN0b3J5CiAgICAgKiAkc291cmNlIHNob3VsZCBiZSBpbnNpZGUgdGhlIGNvbmZpZ3VyZWQgdXBsb2Fkc19kaXJlY3RvcnkKICAgICAqCiAgICAgKiBAcGFyYW0gJHNvdXJjZSAtIGZ1bGxfcGF0aCwgc291cmNlIGRpcmVjdG9yeQogICAgICogQHJldHVybiBAZmlsZXMgYXJyYXkgfHwgZmFsc2Ugb24gZmFpbHVyZQogICAgICoKICAgICAqLwogICAgIAogICAgZnVuY3Rpb24gZ2V0X3VwbG9hZHNfZmlsZXNfcmVjdXJzaXZlKCRzb3VyY2UpIHsKICAgIAogICAgICAgICRmaWxlcyA9IGFycmF5KCk7CiAgICAgICAgCiAgICAgICAgJHVwbG9hZHNfcGF0aCA9IGNtc21zKCktPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ107CiAgICAgICAgCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCJ8XiR1cGxvYWRzX3BhdGh8IiwgJHNvdXJjZSkgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCRoYW5kbGUgPSBvcGVuZGlyKCRzb3VyY2UpKSB7CiAgICAgICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewogICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHNvdXJjZS4nLycuJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzb3VyY2Vfc3ViID0gJHNvdXJjZS4nLycuJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlc1tdID0gc2VsZjo6Z2V0X3VwbG9hZHNfZmlsZXNfcmVjdXJzaXZlKCRzb3VyY2Vfc3ViKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkZmlsZXNbXSA9ICRzb3VyY2UuJy8nLiRmaWxlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gCiAgICAgICAgCiAgICAgICAgY2xvc2VkaXIoJGhhbmRsZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHNlbGY6OmFycmF5X2ZsYXQoJGZpbGVzKTsKICAgICAgICAKICAgIH0KICAgICAKICAgIC8qKgogICAgICogbWFrZSBhIGRpcmVjdG9yeSAKICAgICAqICRkZXN0IHNob3VsZCBiZSBpbnNpZGUgdGhlIGNvbmZpZ3VyZWQgdXBsb2Fkc19kaXJlY3RvcnkKICAgICAqCiAgICAgKiBAcGFyYW0gJGRlc3QgLSBmdWxsX3BhdGgsIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQogICAgICogQHJldHVybiB0cnVlIHwgZmFsc2UKICAgICAqCiAgICAgKi8KICAgICAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZV91cGxvYWRzX2RpcmVjdG9yeSgkZGVzdCkgewogICAgCiAgICAgICAgLy8kZGVzdCA9IHByZWdfcmVwbGFjZSgnL1teYS16XC9dLycsICcnLCAkZGVzdCk7CiAgICAgICAgCiAgICAgICAgJHVwbG9hZHNfcGF0aCA9IGNtc21zKCktPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ107CiAgICAgICAgCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCJ8XiR1cGxvYWRzX3BhdGh8IiwgJGRlc3QpICkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgaWYgKCFpc19kaXIoJGRlc3QpKSB7CiAgICAgICAgICAgICRyZXMgPSBAbWtkaXIoJGRlc3QsIDA3NzcsIHRydWUpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCRyZXMgPT09IGZhbHNlKSB7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHJlbmFtZSBhIGRpcmVjdG9yeSAKICAgICAqICRzb3VyY2UgYW5kICRkZXN0IHNob3VsZCBiZSBpbnNpZGUgdGhlIGNvbmZpZ3VyZWQgdXBsb2Fkc19kaXJlY3RvcnkKICAgICAqCiAgICAgKiBAcGFyYW0gJHNvdXJjZSAtIGZ1bGxfcGF0aCwgc291cmNlIGRpcmVjdG9yeQogICAgICogQHBhcmFtICRkZXN0IC0gZnVsbF9wYXRoLCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKICAgICAqIEByZXR1cm4gdHJ1ZSB8IGZhbHNlCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVuYW1lX3VwbG9hZHNfZGlyZWN0b3J5KCRzb3VyY2UsICRkZXN0KSB7CiAgICAKICAgICAgICAvLyRzb3VyY2UgPSBwcmVnX3JlcGxhY2UoJy9bXmEtelwvXS8nLCAnJywgJHNvdXJjZSk7CiAgICAgICAgLy8kZGVzdCA9IHByZWdfcmVwbGFjZSgnL1teYS16XC9dLycsICcnLCAkZGVzdCk7CiAgICAgICAgCiAgICAgICAgJHVwbG9hZHNfcGF0aCA9IGNtc21zKCktPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ107CiAgICAgICAgCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCJ8XiR1cGxvYWRzX3BhdGh8IiwgJHNvdXJjZSkgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCJ8XiR1cGxvYWRzX3BhdGh8IiwgJGRlc3QpICkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICghaXNfZGlyKCRzb3VyY2UpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCFpc19kaXIoJGRlc3QpKSB7CiAgICAgICAgICAgICRyZXMgPSBAY2hkaXIoJHNvdXJjZSwgJGRlc3QpOwogICAgICAgIAogICAgICAgICAgICBpZiAoJHJlcyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgCiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICB9CiAgICAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiByZW1vdmUgYSBkaXJlY3RvcnkgYW5kIGl0J3MgY29udGVudHMgKHJlY3Vyc2l2ZWx5KSAKICAgICAqICRzb3VyY2UgYW5kICRkZXN0IHNob3VsZCBiZSBpbnNpZGUgdGhlIGNvbmZpZ3VyZWQgdXBsb2Fkc19kaXJlY3RvcnkKICAgICAqCiAgICAgKiBAcGFyYW0gJHNvdXJjZSAtIGZ1bGxfcGF0aCwgc291cmNlIGRpcmVjdG9yeQogICAgICogQHBhcmFtICRkZXN0IC0gZnVsbF9wYXRoLCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKICAgICAqIEByZXR1cm4gdHJ1ZSB8IGZhbHNlCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlX3VwbG9hZHNfcmVjdXJzaXZlKCRzb3VyY2UpIHsKICAgICAgICAKICAgICAgICAkdXBsb2Fkc19wYXRoID0gY21zbXMoKS0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXTsKICAgICAgICAKICAgICAgICBpZiAoIXByZWdfbWF0Y2goInxeJHVwbG9hZHNfcGF0aHwiLCAkc291cmNlKSApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkZmlsZXMgPSBnbG9iKCRzb3VyY2UgLiAnKicsIEdMT0JfTUFSSyk7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpewogICAgICAgICAgICBpZiAoc3Vic3RyKCAkZmlsZSwgLTEpID09ICcvJykgewogICAgICAgICAgICAgICAgc2VsZjo6cmVtb3ZlX3VwbG9hZHNfcmVjdXJzaXZlKCRmaWxlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVubGluaygkZmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzX2Rpcigkc291cmNlKSkgewogICAgICAgICAgICBybWRpcigkc291cmNlKTsKICAgICAgICB9CiAgIAogICAgfSAKICAgIAogICAgLyoqCiAgICAgKiBjb3B5IGEgZGlyZWN0b3J5IGFuZCBpdCdzIGNvbnRlbnRzIChyZWN1cnNpdmVseSkgCiAgICAgKiAkc291cmNlIGFuZCAkZGVzdCBzaG91bGQgYmUgaW5zaWRlIHRoZSBjb25maWd1cmVkIHVwbG9hZHNfZGlyZWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtICRzb3VyY2UgLSBmdWxsX3BhdGgsIHNvdXJjZSBkaXJlY3RvcnkKICAgICAqIEBwYXJhbSAkZGVzdCAtIGZ1bGxfcGF0aCwgZGVzdGluYXRpb24gZGlyZWN0b3J5CiAgICAgKiBAcmV0dXJuIHRydWUgfCBmYWxzZQogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvcHlfdXBsb2Fkc19yZWN1cnNpdmUoJHNvdXJjZSwgJGRlc3QpIHsKICAgICAgICAKICAgICAgICAkdXBsb2Fkc19wYXRoID0gY21zbXMoKS0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXTsKICAgICAgICAKICAgICAgICBpZiAoIXByZWdfbWF0Y2goInxeJHVwbG9hZHNfcGF0aHwiLCAkc291cmNlKSApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoIXByZWdfbWF0Y2goInxeJHVwbG9hZHNfcGF0aHwiLCAkZGVzdCkgKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzX2xpbmsoJHNvdXJjZSkpIHsKICAgICAgICAgICAgcmV0dXJuIHN5bWxpbmsocmVhZGxpbmsoJHNvdXJjZSksICRkZXN0KTsKICAgICAgICB9CiAgICAKICAgICAgICBpZiAoaXNfZmlsZSgkc291cmNlKSkgewogICAgICAgICAgICByZXR1cm4gY29weSgkc291cmNlLCAkZGVzdCk7CiAgICAgICAgfQogICAgCiAgICAgICAgaWYgKCFpc19kaXIoJGRlc3QpKSB7CiAgICAgICAgICAgIG1rZGlyKCRkZXN0KTsKICAgICAgICB9CiAgICAKICAgICAgICAkZGlyID0gZGlyKCRzb3VyY2UpOwogICAgICAgIHdoaWxlIChmYWxzZSAhPT0gJGVudHJ5ID0gJGRpci0+cmVhZCgpKSB7CiAgICAgICAgICAgIGlmICgkZW50cnkgPT0gJy4nIHx8ICRlbnRyeSA9PSAnLi4nKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIHNlbGY6OmNvcHlfdXBsb2Fkc19yZWN1cnNpdmUoIiRzb3VyY2UvJGVudHJ5IiwgIiRkZXN0LyRlbnRyeSIpOwogICAgICAgIH0KICAgIAogICAgICAgICRkaXItPmNsb3NlKCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgCiAgICB9CiAgICAKfSAvLyBVcEhlbHBlcgoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpImageManipulation.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBVcEltYWdlTWFuaXB1bGF0aW9uLmNsYXNzLnBocCAzMiAyMDEyLTA3LTExIDE5OjQ0OjMyWiBhcm5vdWQgJAoKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDbGFzczogVXBJbWFnZU1hbmlwdWxhdGlvbiAoYykgMjAxMS0yMDEyIGJ5IEFybm91ZCB2YW4gU3VzdGVyZW4gKGFybm91ZEB1cHNlcnZpY2UubmwpCiMgQSBjbGFzcyBmb3IgcmVzaXppbmcgYW5kIGNyb3BpbmcgaW1hZ2VzCiMgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgovKioKICogSW1hZ2UgUmVzaXplciBhbmQgQ3JvcHBlci4gVGhpcyBjbGFzcyB0YWtlcyBhIHJlZmVyZW5jZSB0byBhbiBpbWFnZSBhbmQKICogYWxsb3dzIHJlc2l6aW5nIGFuZCBjcm9wcGluZyBvZiB0aGF0IGltYWdlLiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvCiAqIHdvcmsgaW5kZXBlbmRlbnRseSBvZiBvdGhlciBjbGFzc2VzLgogKiBZb3UgbXVzdCBoYXZlIEdEIGluc3RhbGxlZCB0byB1dGlsaXNlIHRoaXMgY2xhc3MuCiAqCiAqIEBwYWNrYWdlICAgIFVwSW1hZ2VNYW5pcHVsYXRpb24KICoKICovCgpjbGFzcyBVcEltYWdlTWFuaXB1bGF0aW9uIHsKICAgIAogICAgLyoqCiAgICAgKiBBbiBhcnJheSB0byBob2xkIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGltYWdlLiBEZWZhdWx0IHZhbHVlcyBmb3IKICAgICAqIGltYWdlcyBhcmUgc2V0IGhlcmUuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICoKICAgICAqLwogICAgIAogICAgcHVibGljICRpbWFnZSA9IGFycmF5KCd0YXJnZXR4JyA9PiAwLCAndGFyZ2V0eScgPT4gMCwgJ3F1YWxpdHknID0+IDEwMCk7CgkKICAgIC8qKgogICAgICogQSBib29sZWFuIHZhbHVlIHRvIGRldGVjdCBpZiBhbiBpbWFnZSBoYXMgbm90IGJlZW4gY3JlYXRlZC4gVGhpcwogICAgICogY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhhdCBhbiBpbWFnZSBpcyB2aWFibGUgYmVmb3JlIHRyeWluZyAKICAgICAqIHJlc2l6ZSBvciBjcm9wLgogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgJGltYWdlb2sgPSBmYWxzZTsKCQogICAgLyoqCiAgICAgKiBDb250cnVjdG9yIG1ldGhvZC4gV2lsbCBjcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSB0aGUgdGFyZ2V0IGZpbGUuCiAgICAgKiBBY2NlcHRzIGFuIGltYWdlIGZpbGVuYW1lIGFzIGEgc3RyaW5nLiBNZXRob2QgYWxzbyB3b3JrcyBvdXQgaG93CiAgICAgKiBiaWcgdGhlIGltYWdlIGlzIGFuZCBzdG9yZXMgdGhpcyBpbiB0aGUgJGltYWdlIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGltZ0ZpbGUgVGhlIGltYWdlIGZpbGVuYW1lLgogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGltZ2ZpbGUpIHsKICAgIAogICAgICAgIHByZWdfbWF0Y2goIi9cLihbXlwuXSspJC8iLCAkaW1nZmlsZSwgJG1hdGNoZXMpOyAgICAKICAgICAgICAkdGhpcy0+aW1hZ2VbImZvcm1hdCJdID0gc3RydG91cHBlcigkbWF0Y2hlc1sxXSk7CiAgICAgICAgCiAgICAgICAgLy8gY29udmVydCBpbWFnZSBpbnRvIHVzYWJsZSBmb3JtYXQuCiAgICAgICAgaWYgKCAkdGhpcy0+aW1hZ2VbImZvcm1hdCJdID09ICJKUEciIHx8ICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPT0gIkpQRUciICkgewogICAgICAgICAgICAvLyBKUEVHCiAgICAgICAgICAgICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPSAiSlBFRyI7CiAgICAgICAgICAgICR0aGlzLT5pbWFnZVsic3JjIl0gICAgPSBJbWFnZUNyZWF0ZUZyb21KUEVHKCRpbWdmaWxlKTsKICAgICAgICB9IGVsc2VpZiggJHRoaXMtPmltYWdlWyJmb3JtYXQiXSA9PSAiUE5HIiApewogICAgICAgICAgICAvLyBQTkcKICAgICAgICAgICAgJHRoaXMtPmltYWdlWyJmb3JtYXQiXSA9ICJQTkciOwogICAgICAgICAgICAkdGhpcy0+aW1hZ2VbInNyYyJdICAgID0gaW1hZ2VjcmVhdGVmcm9tcG5nKCRpbWdmaWxlKTsKICAgICAgICB9IGVsc2VpZiggJHRoaXMtPmltYWdlWyJmb3JtYXQiXSA9PSAiR0lGIiApewogICAgICAgICAgICAvLyBHSUYKICAgICAgICAgICAgJHRoaXMtPmltYWdlWyJmb3JtYXQiXSA9ICJHSUYiOwogICAgICAgICAgICAkdGhpcy0+aW1hZ2VbInNyYyJdICAgID0gSW1hZ2VDcmVhdGVGcm9tR2lmKCRpbWdmaWxlKTsKICAgICAgICB9IGVsc2VpZiAoICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPT0gIldCTVAiICl7CiAgICAgICAgICAgIC8vIFdCTVAKICAgICAgICAgICAgJHRoaXMtPmltYWdlWyJmb3JtYXQiXSA9ICJXQk1QIjsKICAgICAgICAgICAgJHRoaXMtPmltYWdlWyJzcmMiXSAgICA9IEltYWdlQ3JlYXRlRnJvbVdCTVAoJGltZ2ZpbGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIERFRkFVTFQKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBJbWFnZSBpcyBvawogICAgICAgICR0aGlzLT5pbWFnZW9rID0gdHJ1ZTsKICAgICAgICAKICAgICAgICAvLyBXb3JrIG91dCBpbWFnZSBzaXplCiAgICAgICAgJHRoaXMtPmltYWdlWyJzaXpleCJdICA9IGltYWdlc3goJHRoaXMtPmltYWdlWyJzcmMiXSk7CiAgICAgICAgJHRoaXMtPmltYWdlWyJzaXpleSJdID0gaW1hZ2VzeSgkdGhpcy0+aW1hZ2VbInNyYyJdKTsKICAgICAgICAKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2UgdG8gYmUgY3JlYXRlZC4gVGhlIHdpZHRoIG9mIHRoZSBpbWFnZQogICAgICogaXMgd29ya2VkIG91dCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZSBoZWlnaHQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIGltYWdlLgogICAgICogCiAgICAgKi8KICAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUhlaWdodCgkaGVpZ2h0PTEwMCkgewogICAgICAgIC8vIGhlaWdodAogICAgICAgICR0aGlzLT5pbWFnZVsic2l6ZXlfdGh1bWIiXSA9ICRoZWlnaHQ7CiAgICAgICAgJHRoaXMtPmltYWdlWyJzaXpleF90aHVtYiJdICA9ICgkdGhpcy0+aW1hZ2VbInNpemV5X3RodW1iIl0vJHRoaXMtPmltYWdlWyJzaXpleSJdKSokdGhpcy0+aW1hZ2VbInNpemV4Il07CiAgICB9CgkKICAgIC8qKgogICAgICogU2V0cyB0aGUgd2lkdGggb2YgdGhlIGltYWdlIHRvIGJlIGNyZWF0ZWQuIFRoZSBoZWlnaHQgb2YgdGhlIGltYWdlCgkgKiBpcyB3b3JrZWQgb3V0IGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIHdpZHRoLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNpemUgVGhlIHdpZHRoIG9mIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKi8KICAgICAKCXB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZVdpZHRoKCR3aWR0aD0xMDApIHsKICAgICAgICAvLyB3aWR0aAogICAgICAgICR0aGlzLT5pbWFnZVsic2l6ZXhfdGh1bWIiXSAgPSAkd2lkdGg7CiAgICAgICAgJHRoaXMtPmltYWdlWyJzaXpleV90aHVtYiJdID0gKCR0aGlzLT5pbWFnZVsic2l6ZXhfdGh1bWIiXS8kdGhpcy0+aW1hZ2VbInNpemV4Il0pKiR0aGlzLT5pbWFnZVsic2l6ZXkiXTsKCX0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGUgd2lkdGggYW5kIGhlaWdodCBkZXBlbmRpbmcKICAgICAqIG9uIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBpbWFnZSB1cCB0byBhIG1heGltdW0gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2l6ZSBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKi8KICAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNpemUoJHNpemU9MTAwKSB7CiAgICAgICAgCiAgICAgICAgaWYgKCAkdGhpcy0+aW1hZ2VbInNpemV4Il0gPj0gJHRoaXMtPmltYWdlWyJzaXpleSJdICkgewogICAgICAgICAgICAkdGhpcy0+aW1hZ2VbInNpemV4X3RodW1iIl0gID0gJHNpemU7CiAgICAgICAgICAgICR0aGlzLT5pbWFnZVsic2l6ZXlfdGh1bWIiXSA9ICgkdGhpcy0+aW1hZ2VbInNpemV4X3RodW1iIl0vJHRoaXMtPmltYWdlWyJzaXpleCJdKSokdGhpcy0+aW1hZ2VbInNpemV5Il07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmltYWdlWyJzaXpleV90aHVtYiJdID0gJHNpemU7CiAgICAgICAgICAgICR0aGlzLT5pbWFnZVsic2l6ZXhfdGh1bWIiXSAgPSAoJHRoaXMtPmltYWdlWyJzaXpleV90aHVtYiJdLyR0aGlzLT5pbWFnZVsic2l6ZXkiXSkqJHRoaXMtPmltYWdlWyJzaXpleCJdOwogICAgICAgIH0KICAgICAgICAKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGNyb3BwaW5nIHZhbHVlcyBvZiB0aGUgaW1hZ2UuIEJlIHN1cmUKICAgICAqIHRvIHNldCB0aGUgaGVpZ2h0IGFuZCB3aXRoIG9mIHRoZSBpbWFnZSBpZiB5b3Ugd2FudCB0aGUKICAgICAqIGltYWdlIHRvIGJlIGEgY2VydGFpbiBzaXplIGFmdGVyIGNyb3BwaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHggVGhlIHggY29vcmRpbmF0ZXMgdG8gc3RhcnQgY3JvcHBpbmcgZnJvbS4KICAgICAqIEBwYXJhbSBpbnQgJHkgVGhlIHkgY29vcmRpbmF0ZXMgdG8gc3RhcnQgY3JvcHBpbmcgZnJvbS4KICAgICAqIEBwYXJhbSBpbnQgJHcgVGhlIHdpZHRoIG9mIHRoZSBjcm9wIGZyb20gdGhlIHggYW5kIHkgY29vcmRpbmF0ZXMuCiAgICAgKiBAcGFyYW0gaW50ICRoIFRoZSBoZWlnaHQgb2YgdGhlIGNyb3AgZnJvbSB0aGUgeCBhbmQgeSBjb29yZGluYXRlcy4KICAgICAqCiAgICAgKi8KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHNldENyb3AoJHgsICR5LCAkdywgJGgpIHsKICAgICAgICAkdGhpcy0+aW1hZ2VbInRhcmdldHgiXSA9ICR4OwogICAgICAgICR0aGlzLT5pbWFnZVsidGFyZ2V0eSJdID0gJHk7CiAgICAgICAgJHRoaXMtPmltYWdlWyJzaXpleCJdID0gJHc7CiAgICAgICAgJHRoaXMtPmltYWdlWyJzaXpleSJdID0gJGg7CiAgICB9CgkKICAgIC8qKgogICAgICogU2V0cyB0aGUgSlBFRyBvdXRwdXQgcXVhbGl0eS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRxdWFsaXR5IFRoZSBxdWFsaXR5IG9mIHRoZSBKUEVHIGltYWdlLgogICAgICoKICAgICAqLwogICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHNldEpwZWdRdWFsaXR5KCRxdWFsaXR5PTc1KSB7CiAgICAgICAgLy8ganBlZyBxdWFsaXR5CiAgICAgICAgJHRoaXMtPmltYWdlWyJxdWFsaXR5Il0gPSAkcXVhbGl0eTsKICAgIH0KCgkvKioKICAgICAqIFNob3dzIHRoZSBpbWFnZSB0byBhIGJyb3dzZXIuIFNldHMgdGhlIGNvcnJlY3QgaW1hZ2UgZm9ybWF0IGluIGEgaGVhZGVyLgogICAgICoKICAgICAqLwogICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHNob3coKSB7CiAgICAgICAgLy8gc2hvdyB0aHVtYgogICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiBpbWFnZS8iLiR0aGlzLT5pbWFnZVsiZm9ybWF0Il0pOwogICAgCiAgICAgICAgJHRoaXMtPmNyZWF0ZVJlc2FtcGxlZEltYWdlKCk7CiAgICAKICAgICAgICBpZiAoICR0aGlzLT5pbWFnZVsiZm9ybWF0Il09PSJKUEciIHx8ICR0aGlzLT5pbWFnZVsiZm9ybWF0Il09PSJKUEVHIiApIHsKICAgICAgICAgICAgLy8gSlBFRwogICAgICAgICAgICBpbWFnZUpQRUcoJHRoaXMtPmltYWdlWyJkZXMiXSwgIiIsICR0aGlzLT5pbWFnZVsicXVhbGl0eSJdKTsKICAgICAgICB9IGVsc2VpZiAoICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPT0gIlBORyIgKSB7CiAgICAgICAgICAgIC8vIFBORwogICAgICAgICAgICBpbWFnZVBORygkdGhpcy0+aW1hZ2VbImRlcyJdKTsKICAgICAgICB9IGVsc2VpZiAoICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPT0gIkdJRiIgKSB7CiAgICAgICAgICAgIC8vIEdJRgogICAgICAgICAgICBpbWFnZUdJRigkdGhpcy0+aW1hZ2VbImRlcyJdKTsKICAgICAgICB9IGVsc2VpZiAoICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPT0gIldCTVAiICkgewogICAgICAgICAgICAvLyBXQk1QCiAgICAgICAgICAgIGltYWdlV0JNUCgkdGhpcy0+aW1hZ2VbImRlcyJdKTsKICAgICAgICB9CiAgICB9CgkKCS8qKgogICAgICogUHJpdmF0ZSBtZXRob2QgdG8gcnVuIHRoZSBpbWFnZWNvcHlyZXNhbXBsZWQoKSBmdW5jdGlvbiB3aXRoIHRoZSBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCB1cC4KCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgdGhlIHNhdmUoKSBhbmQgc2hvdygpIG1ldGhvZHMuCgkgKgogICAgICovCiAgICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVJlc2FtcGxlZEltYWdlKCkgewogICAgICAgIC8qIGNoYW5nZSBJbWFnZUNyZWF0ZVRydWVDb2xvciB0byBJbWFnZUNyZWF0ZSBpZiB5b3VyIEdEIG5vdCBzdXBwb3J0ZWQgSW1hZ2VDcmVhdGVUcnVlQ29sb3IgZnVuY3Rpb24qLwogICAgICAgIGlmICggaXNzZXQoJHRoaXMtPmltYWdlWyJzaXpleF90aHVtYiJdKSAmJiBpc3NldCgkdGhpcy0+aW1hZ2VbInNpemV5X3RodW1iIl0pICkgewkJCiAgICAgICAgICAgICR0aGlzLT5pbWFnZVsiZGVzIl0gPSBJbWFnZUNyZWF0ZVRydWVDb2xvcigkdGhpcy0+aW1hZ2VbInNpemV4X3RodW1iIl0sICR0aGlzLT5pbWFnZVsic2l6ZXlfdGh1bWIiXSk7CiAgICAgICAgICAgIGltYWdlY29weXJlc2FtcGxlZCgkdGhpcy0+aW1hZ2VbImRlcyJdLCAkdGhpcy0+aW1hZ2VbInNyYyJdLCAwLCAwLCAkdGhpcy0+aW1hZ2VbInRhcmdldHgiXSwgJHRoaXMtPmltYWdlWyJ0YXJnZXR5Il0sICR0aGlzLT5pbWFnZVsic2l6ZXhfdGh1bWIiXSwgJHRoaXMtPmltYWdlWyJzaXpleV90aHVtYiJdLCAkdGhpcy0+aW1hZ2VbInNpemV4Il0sICR0aGlzLT5pbWFnZVsic2l6ZXkiXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmltYWdlWyJkZXMiXSA9IEltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCR0aGlzLT5pbWFnZVsic2l6ZXgiXSwgJHRoaXMtPmltYWdlWyJzaXpleSJdKTsKICAgICAgICAgICAgaW1hZ2Vjb3B5cmVzYW1wbGVkKCR0aGlzLT5pbWFnZVsiZGVzIl0sICR0aGlzLT5pbWFnZVsic3JjIl0sIDAsIDAsICR0aGlzLT5pbWFnZVsidGFyZ2V0eCJdLCAkdGhpcy0+aW1hZ2VbInRhcmdldHkiXSwgJHRoaXMtPmltYWdlWyJzaXpleCJdLCAkdGhpcy0+aW1hZ2VbInNpemV5Il0sICR0aGlzLT5pbWFnZVsic2l6ZXgiXSwgJHRoaXMtPmltYWdlWyJzaXpleSJdKTsKICAgICAgICB9CQogICAgfQoJCiAgICAvKioKICAgICogU2F2ZXMgdGhlIGltYWdlIHRvIGEgZ2l2ZW4gZmlsZW5hbWUsIGlmIG5vIGZpbGVuYW1lIGlzIGdpdmVuIHRoZW4gYSBkZWZhdWx0IGlzIGNyZWF0ZWQuCiAgICAqCiAgICAqIEBwYXJhbSBzdHJpbmcgJHNhdmUgVGhlIG5ldyBpbWFnZSBmaWxlbmFtZS4KICAgICoKICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCRzYXZlPSIiKSB7CiAgICAgICAgCiAgICAgICAgLy8gc2F2ZSB0aHVtYgogICAgICAgIGlmICggZW1wdHkoJHNhdmUpICkgewogICAgICAgICAgICAkc2F2ZSA9IHN0cnRvbG93ZXIoIi4vdGh1bWIuIi4kdGhpcy0+aW1hZ2VbImZvcm1hdCJdKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHRoaXMtPmNyZWF0ZVJlc2FtcGxlZEltYWdlKCk7CiAgICAgICAgCiAgICAgICAgaWYgKCAkdGhpcy0+aW1hZ2VbImZvcm1hdCJdID09ICJKUEciIHx8ICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPT0gIkpQRUciICkgewogICAgICAgICAgICAvLyBKUEVHCiAgICAgICAgICAgIGltYWdlSlBFRygkdGhpcy0+aW1hZ2VbImRlcyJdLCAkc2F2ZSwgJHRoaXMtPmltYWdlWyJxdWFsaXR5Il0pOwogICAgICAgIH0gZWxzZWlmICggJHRoaXMtPmltYWdlWyJmb3JtYXQiXSA9PSAiUE5HIiApIHsKICAgICAgICAgICAgLy8gUE5HCiAgICAgICAgICAgIGltYWdlUE5HKCR0aGlzLT5pbWFnZVsiZGVzIl0sICRzYXZlKTsKICAgICAgICB9IGVsc2VpZiAoICR0aGlzLT5pbWFnZVsiZm9ybWF0Il0gPT0gIkdJRiIgKSB7CiAgICAgICAgICAgIC8vIEdJRgogICAgICAgICAgICBpbWFnZUdJRigkdGhpcy0+aW1hZ2VbImRlcyJdLCAkc2F2ZSk7CiAgICAgICAgfSBlbHNlaWYgKCAkdGhpcy0+aW1hZ2VbImZvcm1hdCJdID09ICJXQk1QIiApIHsKICAgICAgICAgICAgLy8gV0JNUAogICAgICAgICAgICBpbWFnZVdCTVAoJHRoaXMtPmltYWdlWyJkZXMiXSwgJHNhdmUpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgCiAgICAvKiogZ2V0X2RpcmVjdGlvbgogICAgICoKICAgICAqIGJhc2VkIG9uIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGdldCBkaXJlY3Rpb24gKGhvcml6b250YWx8dmVydGljYWwpCiAgICAgKgogICAgICogQHBhcmFtICR3aWR0aCBudW1iZXIKICAgICAqIEBwYXJhbSAkaGVpZ2h0IG51bWJlcgogICAgICogQHJldHVybiAkZGlyZWN0aW9uIHN0cmluZwogICAgICogCiAgICAgKi8KICAgIAogICAgZnVuY3Rpb24gZ2V0X2RpcmVjdGlvbigkd2lkdGgsICRoZWlnaHQpIHsKICAgIAogICAgICAgIGlmICgkd2lkdGggPT0gJGhlaWdodCkgewogICAgICAgICAgICByZXR1cm4gJ3NxdWFyZSc7CiAgICAgICAgfSBlbHNlaWYgKCR3aWR0aCA+ICRoZWlnaHQpIHsKICAgICAgICAgICAgcmV0dXJuICdob3Jpem9udGFsJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJ3ZlcnRpY2FsJzsKICAgICAgICB9CiAgICAKICAgIH0KICAgIAp9IC8vIFVwSW1hZ2VNYW5pcHVsYXRpb24KCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpLogger.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBVcExvZ2dlci5jbGFzcy5waHAgMzIgMjAxMi0wNy0xMSAxOTo0NDozMlogYXJub3VkICQKCiNCRUdJTl9MSUNFTlNFCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ2xhc3M6IFVwTG9nZ2VyIChjKSAyMDExLTIwMTIgYnkgQXJub3VkIHZhbiBTdXN0ZXJlbiAoYXJub3VkQHVwc2VydmljZS5ubCkKIyBBIGNsYXNzIGZvciBsb2dnaW5nIHN0cmluZ3MgdG8gYSAubG9nIGZpbGUgaGFuZHkgZm9yIGRlYnVnIHB1cnBvc2VzCiMgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgovKiogCiAqCiAqIEBleGFtcGxlCiAqICRsb2cgPSBuZXcgVXBMb2dnZXIoJy9tbnQvd2ViL2xvZy50eHQnKTsKICogJGxvZy0+bXNnKCRtc2cpOwogKiAkbG9nLT5tc2dfdmFsdWUoJG1zZywgJHZhbHVlKTsKICoKICovCgpjbGFzcyBVcExvZ2dlciB7CiAgICAgIAogICAgcHJpdmF0ZSAkbG9nX2ZpbGU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsb2dfZmlsZSkgewogICAgICAgICR0aGlzLT5sb2dfZmlsZSA9ICRsb2dfZmlsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9nRmlsZSgpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxvZ19maWxlOwogICAgfQoKICAgIC8qKgogICAgICogbG9nIG1zZyB0byBlcnJvcl9sb2cKICAgICAqCiAgICAgKiBAcGFyYW0gJG1zZyAtIG1lc3NhZ2UgdG8gbG9nCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBtc2coJG1zZyA9ICcnKSB7CiAgICAgICAgJGRhdGUgPSBkYXRlKCdkLm0uWSBoOmk6cycpOwogICAgICAgICRsb2cgPSAiZGF0ZToiLiAkZGF0ZS4gIi0tbXNnOiIuICRtc2cuIlxuIjsgICAgICAKICAgICAgICBlcnJvcl9sb2coJGxvZywgMywgJHRoaXMtPmxvZ19maWxlKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBsb2cgbXNnIGFuZCB2YWx1ZSB0byBlcnJvcl9sb2cKICAgICAqCiAgICAgKiBAcGFyYW0gJG1zZyAtIG1lc3NhZ2UgdG8gbG9nCiAgICAgKiBAcGFyYW0gJHZhbHVlIC0gdmFsdWUgdG8gbG9nCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBtc2dfdmFsdWUoJG1zZyA9ICcnLCAkdmFsdWUgPSAnJykgewogICAgICAgICRkYXRlID0gZGF0ZSgnZC5tLlkgaDppOnMnKTsKICAgICAgICAkbG9nID0gImRhdGU6Ii4gJGRhdGUuICItLW1zZzoiLiAkbXNnLiAiLS12YWx1ZToiLiAkdmFsdWUuIlxuIjsKICAgICAgICBlcnJvcl9sb2coJGxvZywgMywgJHRoaXMtPmxvZ19maWxlKTsKICAgIH0KICAgIAp9IC8vIFVwTG9nZ2VyCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpNestedTree.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCgojICRJZDogVXBOZXN0ZWRUcmVlLmNsYXNzLnBocCAzMiAyMDEyLTA3LTExIDE5OjQ0OjMyWiBhcm5vdWQgJAoKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDbGFzczogVXBOZXN0ZWRUcmVlIChjKSAyMDExLTIwMTIgYnkgQXJub3VkIHZhbiBTdXN0ZXJlbiAoYXJub3VkQHVwc2VydmljZS5ubCkKIwojIFRoZSBVcE5lc3RlZFRyZWUgY2xhc3MgY29udGFpbnMgbWV0aG9kcyB0byBpbnNlcnQsIGRlbGV0ZSwgZmV0Y2ggZGF0YQojIGZyb20gYSB0YWJsZSBob2xkaW5nIGhpZXJhcmNoeSBkYXRhCiMgCiMgVGhlIGhpZXJhY2h5IHRhYmxlIHNob3VsZCBjb250YWluOiBoaWVyYXJjaHlfaWQgKHVuaXF1ZSBwcmltYXJ5IGtleSksCiMgbmFtZSwgbGZ0IChoaWVyYXJjaHkgbGVmdCB2YWx1ZSksIHJndCAoaGllcmFyY2h5IHJpZ2h0IHZhbHVlKS4gCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIFVwTmVzdGVkVHJlZSB7CgogICAgcHJvdGVjdGVkICRfX2Nvbm5lY3Rpb247CiAgICBwcm90ZWN0ZWQgJF90YWJsZW5hbWU7CiAgICBwcm90ZWN0ZWQgJF9wcmltYXJ5a2V5OwogICAgCiAgICBzdGF0aWMgJGRlYnVnID0gJzAnOwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRhYmxlbmFtZSwgJHByaW1hcnlrZXkpIHsKICAgICAgICAKICAgICAgICAkdGhpcy0+X3RhYmxlbmFtZSA9ICR0YWJsZW5hbWU7CiAgICAgICAgJHRoaXMtPl9wcmltYXJ5a2V5ID0gJHByaW1hcnlrZXk7CiAgICAgICAgCiAgICAgICAgJHRoaXMtPl9fY29ubmVjdFRvREIoKTsgICAgICAgIAogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25uZWN0VG9EQigpIHsKICAgICAgICAkdGhpcy0+X19jb25uZWN0aW9uID0gY21zbXMoKS0+R2V0RGIoKTsgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHN3YXAgJ29sZF9pZCcgbm9kZSB3aXRoICduZXdfaWQnIG5vZGUKICAgICAqCiAgICAgKiBAcGFyYW0gJG9sZF9pZCBpbnQKICAgICAqIEBwYXJhbSAkbmV3X2lkIGludAogICAgICoKICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gc3dhcF9ub2Rlcygkb2xkX2lkLCAkbmV3X2lkKSB7CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00geyR0aGlzLT5fdGFibGVuYW1lfSBXSEVSRSB7JHRoaXMtPl9wcmltYXJ5a2V5fSA9ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJG9sZF9yb3cgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkb2xkX2lkKSk7CiAgICAgICAgJG5ld19yb3cgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkbmV3X2lkKSk7CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCBsZnQgPSA/LCByZ3QgPSA/IFdIRVJFIHskdGhpcy0+X3ByaW1hcnlrZXl9ID0gPyI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG9sZF9yb3dbJ2xmdCddLCAkb2xkX3Jvd1sncmd0J10sICRuZXdfaWQpKTsKICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5ld19yb3dbJ2xmdCddLCAkbmV3X3Jvd1sncmd0J10sICRvbGRfaWQpKTsKICAgICAgICAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBtb3ZlICdvbGRfaWQnIG5vZGUgdW5kZXIgJ25ld19pZCcgbm9kZQogICAgICoKICAgICAqIEBwYXJhbSAkb2xkX2lkIGludAogICAgICogQHBhcmFtICRuZXdfaWQgaW50CiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlX29sZF90b19uZXcoJG9sZF9pZCwgJG5ld19pZCkgewogICAgICAgIAogICAgICAgIC8vICRuZXdfaWQgLT4gbGZ0ICsgMSBpcyB0aGUgZGVzdGluYXRpb24KICAgICAgICAKICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIChsZnQgKyAxKSBBUyBkZXN0aW5hdGlvbiBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gV0hFUkUgeyR0aGlzLT5fcHJpbWFyeWtleX0gPSA/IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRyb3cgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkbmV3X2lkKSk7CiAgICAgICAgCiAgICAgICAgJGRlc3RpbmF0aW9uID0gJHJvd1snZGVzdGluYXRpb24nXTsgCiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAoKHJndCAtIGxmdCkgKyAxKSBBUyBvbGRfd2lkdGggRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IFdIRVJFIHskdGhpcy0+X3ByaW1hcnlrZXl9ID0gPyI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkcm93ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJG9sZF9pZCkpOwogICAgICAgIAogICAgICAgICRvbGRfd2lkdGggPSAkcm93WydvbGRfd2lkdGgnXTsKICAgICAgICAKICAgICAgICAvLyBSaXAgdGhpcyB0YWJsZSBhIG5ldyBvbGQgc2l6ZWQgaG9sZSBpbnNpZGUgY2F0X25ldyAKICAgICAgICAKICAgICAgICAkcXVlcnkgPSAiVVBEQVRFIHskdGhpcy0+X3RhYmxlbmFtZX0gU0VUIHJndCA9IHJndCArICRvbGRfd2lkdGggV0hFUkUgcmd0ID49ICRkZXN0aW5hdGlvbiI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSk7CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCBsZnQgPSBsZnQgKyAkb2xkX3dpZHRoIFdIRVJFIGxmdCA+PSAkZGVzdGluYXRpb24iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBsZnQgQVMgb2xkX2xmdCwgcmd0IEFTIG9sZF9yZ3QgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IFdIRVJFIHskdGhpcy0+X3ByaW1hcnlrZXl9ID0gPyI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkcm93ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJG9sZF9pZCkpOwogICAgICAgICAgCiAgICAgICAgJG9sZF9sZnQgPSAkcm93WydvbGRfbGZ0J107CiAgICAgICAgJG9sZF9yZ3QgPSAkcm93WydvbGRfcmd0J107CiAgICAgICAgJGRpZmYgPSAkZGVzdGluYXRpb24gLSAkb2xkX2xmdDsKICAgICAgICAKICAgICAgICAvLyBNb3ZlIG9sZCBhbmQgYWxsIGluaGFiaXRhbnRzIHRvIG5ldyBob2xlCiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCByZ3QgPSByZ3QgKyAkZGlmZiBXSEVSRSByZ3QgQkVUV0VFTiAkb2xkX2xmdCBBTkQgJG9sZF9yZ3QiOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgIAogICAgICAgICRxdWVyeSA9ICJVUERBVEUgeyR0aGlzLT5fdGFibGVuYW1lfSBTRVQgbGZ0ID0gbGZ0ICsgJGRpZmYgV0hFUkUgbGZ0IEJFVFdFRU4gJG9sZF9sZnQgQU5EICRvbGRfcmd0IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5KTsKICAgICAgICAKICAgICAgICAvLyBDbG9zZSB0aGUgZ2FwIGNyZWF0ZWQgd2hlbiB3ZSBtb3ZlZCBvbGQKICAgICAgICAkcXVlcnkgPSAiVVBEQVRFIHskdGhpcy0+X3RhYmxlbmFtZX0gU0VUIHJndCA9IHJndCAtICRvbGRfd2lkdGggV0hFUkUgcmd0ID49ICRvbGRfbGZ0IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5KTsKICAgICAgICAKICAgICAgICAkcXVlcnkgPSAiVVBEQVRFIHskdGhpcy0+X3RhYmxlbmFtZX0gU0VUIGxmdCA9IGxmdCAtICRvbGRfd2lkdGggV0hFUkUgbGZ0ID49ICRvbGRfbGZ0IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5KTsKICAgICAgICAgICAgIAogICAgfQogICAgIAogICAgLyoqIGRlbGV0ZSBwYXJlbnQgbm9kZSBub3QgaXQncyBjaGlsZGVyZW4KICAgICAqCiAgICAgKiBAcGFyYW0gJGlkIGludCAtIGlkIG9mIHRoZSBub2RlIHRvIGRlbGV0ZQogICAgICogQHJldHVybiBub25lCiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVfbm9kZSgkaWQpIHsKICAgICAgICAgICAgCiAgICAgICAgLy8gZ2V0IGxmdCwgcmd0IHZhbHVlCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBsZnQsIHJndCBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gV0hFUkUgeyR0aGlzLT5fcHJpbWFyeWtleX0gPSA/IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbiB7JHRoaXMtPl9wcmltYXJ5a2V5fSA9ICRpZCBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRyb3cgPSAgJHRoaXMtPl9fY29ubmVjdGlvbi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJGlkKSk7CiAgICAgICAgCiAgICAgICAgJGxmdCA9ICRyb3dbJ2xmdCddOwogICAgICAgICRyZ3QgPSAkcm93WydyZ3QnXTsKICAgICAgICAkd2lkdGggPSAkcmd0IC0gKCRsZnQgKyAxKTsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICJsZnQ6ICRsZnQgXG4iOwogICAgICAgICAgICBwcmludCAicmd0OiAkcmd0IFxuIjsKICAgICAgICAgICAgcHJpbnQgIndpZHRoOiAkd2lkdGggXG4iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBkZWxldGUgc2luZ2xlIG5vZGUgIAogICAgICAgICRxdWVyeSA9ICJERUxFVEUgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IFdIRVJFIGxmdCA9ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIGxmdCA9ICRsZnRcbiI7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxmdCkpOwogICAgICAgIAogICAgICAgICRuZXdfcmd0ID0gKCRyZ3QgLSAxKTsKICAgICAgICAkbmV3X2xmdCA9ICgkbGZ0IC0gMSk7CiAgICAgICAgCiAgICAgICAgLy8gdXBkYXRlIHJndCwgbGZ0IGhpZXJhcmhjeSAKICAgICAgICAkcXVlcnkgPSAiVVBEQVRFIHskdGhpcy0+X3RhYmxlbmFtZX0gU0VUIHJndCA9ID8sIGxmdCA9ID8gV0hFUkUgbGZ0IEJFVFdFRU4gPyBBTkQgPyI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4gbmV3X3JndD0gJG5ld19yZ3QsIG5ld19sZnQgPSAkbmV3X2xmdCwgbGZ0ID0gJGxmdCwgcmd0ID0gJHJndCBcbiI7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5ld19yZ3QsICRuZXdfbGZ0LCAkbGZ0LCAkcmd0KSk7ICAKICAgICAgICAKICAgICAgICAkbmV3X3JndCA9ICgkcmd0IC0gMik7CiAgICAgICAgJG5ld19sZnQgPSAoJGxmdCAtIDIpOwogICAgICAgIAogICAgICAgIC8vIHVwZGF0ZSByZ3QgaGllcmFyY2h5CiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCByZ3QgPSA/IFdIRVJFIHJndCA+ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIG5ld19yZ3QgPSAkbmV3X3JndCwgcmd0ID0gJHJndFxuIjsKICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbmV3X3JndCwgJHJndCkpOwogICAgICAgIAogICAgICAgIC8vIHVwZGF0ZSBsZnQgaGllcmFyY2h5CiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCBsZnQgPSA/IFdIRVJFIGxmdCA+ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIG5ld19sZnQgPSAkbmV3X2xmdCwgcmd0ID0gJHJndFxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRuZXdfbGZ0LCAkcmd0KSk7CiAgICAgICAgCiAgICB9CgogICAgLyoqIAogICAgICAqIGRlbGV0ZSBsZWFmIG5vZGVzIGFuZCBub2RlcyB3aXRoIGNoaWxkZXJlbgogICAgICAqCiAgICAgICogQHBhcmFtICRpZCBpbnQgLSBub2RlIHRvIGRlbGV0ZSAKICAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAgKgogICAgICAqLwogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlX25vZGVfd2l0aF9jaGlsZGVyZW4oJGlkKSB7CiAgICAgICAgCiAgICAgICAgLy8gZ2V0IGxmdCwgcmd0IHZhbHVlCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBsZnQsIHJndAogICAgICAgICAgICAgICAgICAgIEZST00geyR0aGlzLT5fdGFibGVuYW1lfQogICAgICAgICAgICAgICAgICAgIFdIRVJFIHskdGhpcy0+X3ByaW1hcnlrZXl9ID0gPyI7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgeyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuKCAkdGhpcy0+X3ByaW1hcnlrZXkgPSAkaWQgKSBcbiI7ICAgICAgICAgICAgICAgIAogICAgICAgIH0gICAgCiAgICAgICAgICAgIAogICAgICAgICRyb3cgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkaWQpKTsKICAgICAgICAgICAgCiAgICAgICAgJGxmdCA9ICRyb3dbJ2xmdCddOwogICAgICAgICRyZ3QgPSAkcm93WydyZ3QnXTsKICAgICAgICAkd2lkdGggPSAkcmd0IC0gKCRsZnQgKyAxKTsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICJsZnQ6ICRsZnQgXG4iOwogICAgICAgICAgICBwcmludCAicmd0OiAkcmd0IFxuIjsKICAgICAgICAgICAgcHJpbnQgIndpZHRoOiAkd2lkdGggXG4iOwogICAgICAgIH0gICAgCiAgICAgICAgCiAgICAgICAgLy8gZGVsZXRlIG5vZGVzIAogICAgICAgICRxdWVyeSA9ICJERUxFVEUgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IFdIRVJFIGxmdCBCRVRXRUVOID8gQU5EID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuIGxmdCA9ICRsZnQsIHJndCA9ICRyZ3QgXG4iOwogICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRsZnQsICRyZ3QpKTsKICAgICAgICAKICAgICAgICAkbmV3X3JndCA9ICgkcmd0IC0gJHdpZHRoKTsKICAgICAgICAKICAgICAgICAvLyB1cGRhdGUgcmd0IHZhbHVlIG9mIGhpZXJhcmNoeSAKICAgICAgICAkcXVlcnkgPSAiVVBEQVRFIHskdGhpcy0+X3RhYmxlbmFtZX0gU0VUIHJndCA9ID8gV0hFUkUgcmd0ID4gPyI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4gbmV3X3JndCA9ICRuZXdfcmd0LCByZ3QgPSAkcmd0XG4iOwogICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRuZXdfcmd0LCAkcmd0KSk7CiAgICAgICAgCiAgICAgICAgJG5ld19sZnQgPSAoJGxmdCAtICR3aWR0aCk7CiAgICAgICAgCiAgICAgICAgLy8gdXBkYXRlIGxmdCB2YWx1ZSBvZiBoaWVyYXJjaHkKICAgICAgICAkcXVlcnkgPSAiVVBEQVRFIHskdGhpcy0+X3RhYmxlbmFtZX0gU0VUIGxmdCA9ID8gV0hFUkUgbGZ0ID4gPyI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgewogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4gbmV3X2xmdCA9ICRuZXdfbGZ0LCByZ3QgPSAkcmd0XG4iOwogICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRuZXdfbGZ0LCAkcmd0KSk7CiAgICAgICAgICAgICAgIAogICAgfQoKICAgIC8qKiBpbnNlcnQgJ25ldycgbm9kZSBhcyBjaGlsZCBvZiAnb2xkJyBub2RlCiAgICAgKgogICAgICogQHBhcmFtICRvbGRfaWQgaW50IC0gaWQgb2YgdGhlIG9sZCBub2RlCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqCiAgICAgKi8KICAgIAogICAgZnVuY3Rpb24gaW5zZXJ0X2FzX2NoaWxkKCRvbGRfaWQpIHsKICAgICAgICAgICAgCiAgICAgICAgLy8gZ2V0IGxmdCB2YWx1ZQogICAgIAogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgbGZ0IEZST00geyR0aGlzLT5fdGFibGVuYW1lfSBXSEVSRSB7JHRoaXMtPl9wcmltYXJ5a2V5fSA9ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuKCB7JHRoaXMtPl9wcmltYXJ5a2V5fSA9ICRvbGRfaWQgKSBcbiI7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAkbGZ0ID0gICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkdldE9uZSgkcXVlcnksIGFycmF5KCRvbGRfaWQpKTsKICAgICAgICAKICAgICAgICAvLyB1cGRhdGUgcmd0IHZhbHVlIG9mIGhpZXJhcmNoeQogICAgICAgIAogICAgICAgICRxdWVyeSA9ICJVUERBVEUgeyR0aGlzLT5fdGFibGVuYW1lfSBTRVQgcmd0ID0gcmd0ICsgMiBXSEVSRSByZ3QgPiA/IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbihsZnQgPSAkbGZ0KSBcbiI7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxmdCkpOwogICAgCiAgICAgICAgLy8gdXBkYXRlIGxmdCB2YWx1ZSBvZiBoaWVyYXJjaHkKICAgIAogICAgICAgICRxdWVyeSA9ICJVUERBVEUgeyR0aGlzLT5fdGFibGVuYW1lfSBTRVQgbGZ0ID0gbGZ0ICsgMiBXSEVSRSBsZnQgPiA/IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbihsZnQgPSAkbGZ0KSBcbiI7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGxmdCkpOwogICAgCiAgICAgICAgLy8gaW5zZXJ0IHRoZSBuZXcgb25lCiAgICAgICAgCiAgICAgICAgJG5ld19sZnQgPSAoJGxmdCArIDEpOwogICAgICAgICRuZXdfcmd0ID0gKCRsZnQgKyAyKTsKICAgIAogICAgICAgICRxdWVyeSA9ICJJTlNFUlQgSU5UTyB7JHRoaXMtPl90YWJsZW5hbWV9KGxmdCwgcmd0KSBWQUxVRVMoPywgPykiOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuKCRuZXdfbGZ0LCAkbmV3X3JndCkgXG4iOyAgICAKICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbmV3X2xmdCwgJG5ld19yZ3QpKTsKICAgICAgICAKICAgICAgICAkaWQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5JbnNlcnRfSUQoKTsKICAgICAgICByZXR1cm4gJGlkOwogICAgICAgIAogICAgICAgIAogICAgfQoKICAgIC8qKiBpbnNlcnQgbmV3ICduYW1lJyBhZnRlciBvbGQgJ2lkJwogICAgICoKICAgICAqIEBwYXJhbSAkbmV3X25hbWUgc3RyaW5nCiAgICAgKiBAcGFyYW0gJG5ld19kZXNjcmlwdGlvbiBzdHJpbmcKICAgICAqIEBwYXJhbSAkb2xkX2lkIGludAogICAgICogQHJldHVybiBub25lCiAgICAgKgogICAgICovCiAgICAKICAgIGZ1bmN0aW9uIGluc2VydF9uZXdfYWZ0ZXJfb2xkKCRvbGRfaWQpIHsKICAgICAgICAgICAgCiAgICAgICAgLy8gZ2V0IHJndCB2YWx1ZSAKICAgICAgICAKICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIHJndCBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gV0hFUkUgeyR0aGlzLT5fcHJpbWFyeWtleX0gPSA/IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbiggeyR0aGlzLT5fcHJpbWFyeWtleX0gPSAkb2xkX2lkKSBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRyZ3QgPSAgJHRoaXMtPl9fY29ubmVjdGlvbi0+R2V0T25lKCRxdWVyeSwgYXJyYXkoJG9sZF9pZCkpOwogICAgICAgICAgICAKICAgICAgICAvLyB1cGRhdGUgdGhlIHJndCB2YWx1ZSBvZiB0aGUgaGllcmFyY2h5CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCByZ3QgPSByZ3QgKyAyIFdIRVJFIHJndCA+ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeVxuKCRyZ3QpIFxuIjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRyZ3QpKTsKICAgICAgICAKICAgICAgICAvLyB1cGRhdGUgdGhlIGxmdCB2YWx1ZSBvZiB0aGUgaGllcmFyY2h5CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZW5hbWV9IFNFVCBsZnQgPSBsZnQgKyAyIFdIRVJFIGxmdCA+ID8iOwogICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsgICAgCiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbigkcmd0KSBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkcmd0KSk7CiAgICAgICAgCiAgICAgICAgLy8gaW5zZXJ0IHRoZSBuZXcgb25lCiAgICAgICAgCiAgICAgICAgJG5ld19sZnQgPSAoJHJndCArIDEpOwogICAgICAgICRuZXdfcmd0ID0gKCRyZ3QgKyAyKTsKICAgICAgICAKICAgICAgICAkcXVlcnkgPSAiSU5TRVJUIElOVE8geyR0aGlzLT5fdGFibGVuYW1lfShsZnQsIHJndCkgVkFMVUVTKD8sID8pIjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7ICAgIAogICAgICAgICAgICBwcmludCAiJHF1ZXJ5XG4oJG5ld19sZnQsICRuZXdfcmd0KSBcbiI7ICAgIAogICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbmV3X2xmdCwgJG5ld19yZ3QpKTsKICAgICAgICAKICAgICAgICAkaWQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5JbnNlcnRfSUQoKTsKICAgICAgICByZXR1cm4gJGlkOwogICAgICAgIAogICAgfQoKICAgIC8qKiBmZXRjaCBzdWIgdHJlZSBkZXB0aAogICAgICogCiAgICAgKiBAcGFyYW0gJGlkIHN0cmluZyAtIGlkIG9mIHRoZSBub2RlcyB0byBmZXRjaAogICAgICogQHBhcmFtICRkZXB0aCBpbnQgLSBmcm9tIHdoaWNoIGRlcHRoCiAgICAgKgogICAgICovCiAgICAKICAgIGZ1bmN0aW9uIGZldGNoX3N1Yl90cmVlX2RlcHRoKCRpZCA9IE5VTEwsICRkZXB0aCA9IE5VTEwpIHsKICAgICAgICAgICAKICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIG5vZGUuKiwgCiAgICAgICAgICAgICAgICAgICAgICAgIChDT1VOVChwYXJlbnQubmFtZSkgLSAoc3ViX3RyZWUuZGVwdGggKyAxKSkgQVMgZGVwdGgKICAgICAgICAgICAgICAgICAgICBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gQVMgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgeyR0aGlzLT5fdGFibGVuYW1lfSBBUyBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHskdGhpcy0+X3RhYmxlbmFtZX0gQVMgc3ViX3BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgKFNFTEVDVCBub2RlLm5hbWUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDT1VOVChwYXJlbnQubmFtZSkgLSAxKSBBUyBkZXB0aAogICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IEFTIG5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHskdGhpcy0+X3RhYmxlbmFtZX0gQVMgcGFyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBub2RlLmxmdCBCRVRXRUVOIHBhcmVudC5sZnQgQU5EIHBhcmVudC5yZ3QKICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBub2RlLnskdGhpcy0+X3ByaW1hcnlrZXl9ID0gPwogICAgICAgICAgICAgICAgICAgICAgICAgR1JPVVAgQlkgbm9kZS5uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSBub2RlLmxmdAogICAgICAgICAgICAgICAgICAgICAgICAgKUFTIHN1Yl90cmVlCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgbm9kZS5sZnQgQkVUV0VFTiBwYXJlbnQubGZ0IEFORCBwYXJlbnQucmd0CiAgICAgICAgICAgICAgICAgICAgQU5EIG5vZGUubGZ0IEJFVFdFRU4gc3ViX3BhcmVudC5sZnQgQU5EIHN1Yl9wYXJlbnQucmd0CiAgICAgICAgICAgICAgICAgICAgQU5EIHN1Yl9wYXJlbnQubmFtZSA9IHN1Yl90cmVlLm5hbWUKICAgICAgICAgICAgICAgICAgICBHUk9VUCBCWSBub2RlLnskdGhpcy0+X3ByaW1hcnlrZXl9IjsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICBpZiAoIWlzX251bGwoJGRlcHRoKSkgewogICAgICAgICAgICAkcXVlcnkgLj0gIiBIQVZJTkcgZGVwdGggPSAkZGVwdGgiOwogICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkcXVlcnkgLj0gIiBPUkRFUiBCWSBub2RlLmxmdCI7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgeyAgICAgIAogICAgICAgICAgICBwcmludCAiJHF1ZXJ5IFxuIjsKICAgICAgICAgICAgcHJpbnQgInskdGhpcy0+X3ByaW1hcnlrZXl9OiAkaWQgXG4iOwogICAgICAgICAgICBwcmludCAiZGVwdGg6ICRkZXB0aCBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaWQpKTsgIAogICAgICAgICAgIAogICAgICAgICRyb3dzID0gYXJyYXkoKTsKICAgICAgICAgICAgCiAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICRyb3dzW10gPSAkcm93OyAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgcmV0dXJuICRyb3dzOwogICAgICAgICAKICAgIH0KCiAgICAvKiogZmV0Y2ggdGhlIGxlYWYgbm9kZXMKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uZQogICAgICogQHJldHVybiAkcm93cyBhcnJheSAtIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxlYWYgbm9kZXMKICAgICAqCiAgICAgKi8KICAgIAogICAgZnVuY3Rpb24gZmV0Y2hfbGVhZl9ub2RlcygpIHsKICAgICAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqCiAgICAgICAgICAgICAgICAgICAgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IAogICAgICAgICAgICAgICAgICAgIFdIRVJFIHJndCA9IGxmdCArIDEiOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsgCiAgICAgICAgICAgIHByaW50ICIkcXVlcnkgXG4iOyAgICAgICAgCiAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSk7CiAgICAgICAgCiAgICAgICAgJHJvd3MgPSBhcnJheSgpOwogICAgICAgICAgICAKICAgICAgICB3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAgICAgJHJvd3NbXSA9ICRyb3c7ICAgICAgICAKICAgICAgICB9CiAgICAgICAgCiAgICAgICByZXR1cm4gJHJvd3M7CiAgICAgICAgCiAgICB9CiAgICAKICAgIC8qKiBmZXRjaCB0aGUgcGFyZW50X2lkIGJ5IHByb3ZpZGluZyB0aGUgY2hpbGRfaWQKICAgICAqCiAgICAgKiBAcGFyYW0gJGNoaWxkX2lkIGludCAKICAgICAqIEByZXR1cm4gJGlkIGludCAKICAgICAqCiAgICAgKi8KICAgICAKICAgICBmdW5jdGlvbiBmZXRjaF9wYXJlbnRfaWRfYnlfY2hpbGRfaWQoJGNoaWxkX2lkKSB7CiAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAoCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHskdGhpcy0+X3ByaW1hcnlrZXl9IAogICAgICAgICAgICAgICAgICAgIEZST00geyR0aGlzLT5fdGFibGVuYW1lfSB0MiAKICAgICAgICAgICAgICAgICAgICBXSEVSRSB0Mi5sZnQgPCB0MS5sZnQgQU5EIHQyLnJndCA+IHQxLnJndCAgICAKICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSB0Mi5yZ3QtdDEucmd0IEFTQwogICAgICAgICAgICAgICAgICAgIExJTUlUIDEKICAgICAgICAgICAgICAgICAgICApIEFTIHBhcmVudF97JHRoaXMtPl9wcmltYXJ5a2V5fQogICAgICAgICAgICAgICAgRlJPTSB7JHRoaXMtPl90YWJsZW5hbWV9IHQxIAogICAgICAgICAgICAgICAgV0hFUkUgeyR0aGlzLT5fcHJpbWFyeWtleX0gPSA/CiAgICAgICAgICAgICAgICBPUkRFUiBCWSAocmd0LWxmdCkgREVTQyI7IAoKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7CiAgICAgICAgICAgIHByaW50ICIkcXVlcnlcbiggeyR0aGlzLT5fcHJpbWFyeWtleX0gPSAkY2hpbGRfaWQgKSBcbiI7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAkaWQgPSAgJHRoaXMtPl9fY29ubmVjdGlvbi0+R2V0T25lKCRxdWVyeSwgYXJyYXkoJGNoaWxkX2lkKSk7CiAgICAgICAgCiAgICAgICAgJGlkID0gaXNzZXQoJGlkKSA/ICRpZCA6ICcwJzsKICAgICAgICAKICAgICAgICByZXR1cm4gJGlkOwoKICAgICAgICAgCiAgICAgfQogICAgIAogICAgLyoqIGZldGNoIGZ1bGwgdHJlZSB3aXRoIHBhcmVudF9uYW1lIGFuZCBwYXJlbnRfe3ByaW1hcnlrZXl9CiAgICAgKgogICAgICogQHBhcmFtIG5vbmUKICAgICAqIEByZXR1cm4gJHJvd3MgYXJyYXkgCiAgICAgKiAKICAgICAqLwogICAgCiAgICBmdW5jdGlvbiBmZXRjaF9mdWxsX3RyZWVfd2l0aF9wYXJlbnQoKSB7CiAgICAKICAgICAgICAkcXVlcnkgPSAiU0VMRUNUICosICgKICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgbmFtZSAKICAgICAgICAgICAgICAgICAgICBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gdDIgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgdDIubGZ0IDwgdDEubGZ0IEFORCB0Mi5yZ3QgPiB0MS5yZ3QgICAgCiAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgdDIucmd0LXQxLnJndCBBU0MKICAgICAgICAgICAgICAgICAgICBMSU1JVCAxCiAgICAgICAgICAgICAgICAgICAgKSBBUyBwYXJlbnRfbmFtZSwKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGhpZXJhcmNoeV9pZCAKICAgICAgICAgICAgICAgICAgICBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gdDIgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgdDIubGZ0IDwgdDEubGZ0IEFORCB0Mi5yZ3QgPiB0MS5yZ3QgICAgCiAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgdDIucmd0LXQxLnJndCBBU0MKICAgICAgICAgICAgICAgICAgICBMSU1JVCAxCiAgICAgICAgICAgICAgICAgICAgKSBBUyBwYXJlbnRfeyR0aGlzLT5fcHJpbWFyeWtleX0KICAgICAgICAgICAgICAgICAgICBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gdDEgCiAgICAgICAgICAgICAgICBPUkRFUiBCWSAocmd0LWxmdCkgREVTQyI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgeyAgICAgCiAgICAgICAgICAgIHByaW50ICIkcXVlcnkgXG4iOyAgICAgICAgICAgICAgICAKICAgICAgICB9ICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgIAogICAgICAgICRyb3dzID0gYXJyYXkoKTsKICAgICAgICAgICAgCiAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICRyb3dzW10gPSAkcm93OyAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgcmV0dXJuICRyb3dzOwogICAgICAgIAogICAgfQoKICAgIC8qKiBmZXRjaCB0aGUgZnVsbCB0cmVlIGRyb3Bkb3duCiAgICAgKgogICAgICogQHBhcmFtIG5vbmUKICAgICAqIEByZXR1cm4gJHJvd3MgYXJyYXkgCiAgICAgKiAKICAgICAqLwogICAgCiAgICBmdW5jdGlvbiBmZXRjaF9mdWxsX3RyZWVfZHJvcGRvd24oKSB7CiAgICAgICAgICAgIAogICAgICAgICRxdWVyeSA9ICJTRUxFQ1Qgbm9kZS4qLAogICAgICAgICAgICAgICAgICAgICAgICAoQ09VTlQocGFyZW50Lm5hbWUpIC0gMSkgQVMgZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIENPTkNBVCggUkVQRUFUKCctJywgQ09VTlQocGFyZW50Lm5hbWUpIC0gMSkpIEFTIGluZGVudAogICAgICAgICAgICAgICAgICBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gQVMgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgeyR0aGlzLT5fdGFibGVuYW1lfSBBUyBwYXJlbnQKICAgICAgICAgICAgICAgICAgV0hFUkUgbm9kZS5sZnQgQkVUV0VFTiBwYXJlbnQubGZ0IEFORCBwYXJlbnQucmd0CiAgICAgICAgICAgICAgICAgIEdST1VQIEJZIG5vZGUubmFtZQogICAgICAgICAgICAgICAgICBPUkRFUiBCWSBub2RlLmxmdCI7CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRkZWJ1ZykgeyAgICAgCiAgICAgICAgICAgIHByaW50ICIkcXVlcnkgXG4iOyAgICAgICAgICAgICAgICAKICAgICAgICB9ICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgJGRicmVzdWx0ID0gJHRoaXMtPl9fY29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgIAogICAgICAgICRyb3dzID0gYXJyYXkoKTsKICAgICAgICAgICAgCiAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICRyb3dzWyRyb3dbJ2hpZXJhcmNoeV9pZCddXSA9ICRyb3dbJ2luZGVudCddLiAnICcuJHJvd1snbmFtZSddOyAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgcmV0dXJuICRyb3dzOwogICAgICAgIAogICAgfQogICAgCgogICAgLyoqIGZldGNoIHRoZSBmdWxsIHRyZWUgd2l0aCBhICdkZXB0aCcga2V5CiAgICAgKgogICAgICogQHBhcmFtIG5vbmUKICAgICAqIEByZXR1cm4gJHJvd3MgYXJyYXkgCiAgICAgKiAKICAgICAqLwogICAgCiAgICBmdW5jdGlvbiBmZXRjaF9mdWxsX3RyZWVfd2l0aF9kZXB0aCgpIHsKICAgICAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBub2RlLiosCiAgICAgICAgICAgICAgICAgICAgICAgIChDT1VOVChwYXJlbnQubmFtZSkgLSAxKSBBUyBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgQ09OQ0FUKCBSRVBFQVQoJy0nLCBDT1VOVChwYXJlbnQubmFtZSkgLSAxKSkgQVMgaW5kZW50CiAgICAgICAgICAgICAgICAgIEZST00geyR0aGlzLT5fdGFibGVuYW1lfSBBUyBub2RlLAogICAgICAgICAgICAgICAgICAgICAgICB7JHRoaXMtPl90YWJsZW5hbWV9IEFTIHBhcmVudAogICAgICAgICAgICAgICAgICBXSEVSRSBub2RlLmxmdCBCRVRXRUVOIHBhcmVudC5sZnQgQU5EIHBhcmVudC5yZ3QKICAgICAgICAgICAgICAgICAgR1JPVVAgQlkgbm9kZS5uYW1lCiAgICAgICAgICAgICAgICAgIE9SREVSIEJZIG5vZGUubGZ0IjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7ICAgICAKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeSBcbiI7ICAgICAgICAgICAgICAgIAogICAgICAgIH0gICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSk7CiAgICAgICAgCiAgICAgICAgJHJvd3MgPSBhcnJheSgpOwogICAgICAgICAgICAKICAgICAgICB3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAgICAgJHJvd3NbXSA9ICRyb3c7ICAgICAgICAKICAgICAgICB9CiAgICAgICAgCiAgICAgICByZXR1cm4gJHJvd3M7CiAgICAgICAgCiAgICB9CiAgICAKICAgIC8qKiBmZXRjaCB0cmVlIGZyb20gc3RhcnRub2RlIHRvIGxlYWZub2RlCiAgICAgKgogICAgICogQHBhcmFtICRpZCBpbnQgLSBpZCBvZiB0aGUgbm9kZSAgCiAgICAgKiBAcmV0dXJuICRyb3dzIGFycmF5IC0gbm9kZSBwYXRoIGl0ZW1zCiAgICAgKgogICAgICovCiAgICAKICAgIGZ1bmN0aW9uIGZldGNoX3RyZWVfZnJvbV9zdGFydG5vZGUoJGlkID0gTlVMTCkgewogICAgICAgIAogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgcGFyZW50LioKICAgICAgICAgICAgICAgICAgICBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gQVMgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgeyR0aGlzLT5fdGFibGVuYW1lfSBBUyBwYXJlbnQKICAgICAgICAgICAgICAgICAgICBXSEVSRSBub2RlLmxmdCBCRVRXRUVOIHBhcmVudC5sZnQgQU5EIHBhcmVudC5yZ3QKICAgICAgICAgICAgICAgICAgICBBTkQgbm9kZS57JHRoaXMtPl9wcmltYXJ5a2V5fSA9ID8KICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSBwYXJlbnQubGZ0IjsKICAgICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JGRlYnVnKSB7ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCAiJHF1ZXJ5IFxuIjsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHByaW50ICIkdGhpcy0+X3ByaW1hcnlrZXk6ICRpZCBcbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICR0aGlzLT5fX2Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaWQpKTsKICAgICAgICAKICAgICAgICAkcm93cyA9IGFycmF5KCk7CiAgICAgICAgICAgIAogICAgICAgIHdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgewogICAgICAgICAgICAkcm93c1tdID0gJHJvdzsgICAgICAgIAogICAgICAgIH0KICAgICAgICAKICAgICAgIHJldHVybiAkcm93czsKICAgICAgICAKICAgIH0KICAgICAgICAKICAgIC8qKiBmZXRjaCB0cmVlIGZyb20gbGVhZm5vZGUgdG8gc3RhcnRub2RlCiAgICAgKgogICAgICogQHBhcmFtICRpZCBpbnQgLSBpZCBvZiB0aGUgbm9kZQogICAgICogQHJldHVybiAkcm93IGFycmF5ICAtIG5vZGUgcGF0aCBpdGVtcwogICAgICoKICAgICAqLwogICAgCiAgICBmdW5jdGlvbiBmZXRjaF90cmVlX2Zyb21fbGVhZm5vZGUoJGlkID0gTlVMTCkgewogICAgICAgIAogICAgICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBub2RlLioKICAgICAgICAgICAgICAgICAgICBGUk9NIHskdGhpcy0+X3RhYmxlbmFtZX0gQVMgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgeyR0aGlzLT5fdGFibGVuYW1lfSBBUyBwYXJlbnQKICAgICAgICAgICAgICAgICAgIFdIRVJFIG5vZGUubGZ0IEJFVFdFRU4gcGFyZW50LmxmdCBBTkQgcGFyZW50LnJndAogICAgICAgICAgICAgICAgICAgQU5EIHBhcmVudC57JHRoaXMtPl9wcmltYXJ5a2V5fSA9ID8KICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIG5vZGUubGZ0IjsKICAgIAogICAgICAgIGlmIChzZWxmOjokZGVidWcpIHsgICAKICAgICAgICAgICAgcHJpbnQgIiRxdWVyeSBcbiI7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICBwcmludCAiJHRoaXMtPl9wcmltYXJ5a2V5OiAkaWQgXG4iOwogICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkdGhpcy0+X19jb25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkKSk7ICAgICAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICRyb3dzID0gYXJyYXkoKTsKICAgICAgICAgICAgCiAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CiAgICAgICAgICAgICRyb3dzW10gPSAkcm93OyAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgcmV0dXJuICRyb3dzOwogICAgICAgIAogICAgfSAgCgogICAgLyoqIHJlbmRlciBoaWVyYXJjaHkgdHJlZSB0byBodG1sIGxpc3RzIChsaSB3aWxsIGJlIGNsb3NlZCBhZnRlciBldmVyeSBpdGVtKQogICAgICogCiAgICAgKiBAcGFyYW0gJHRyZWUgYXJyYXkgLSB0cmVlIHRvIHJlbmRlcgogICAgICogQHJldHVybiAkcmVzdWx0IHN0cmluZyAtIGh0bWwgd2l0aCByZW5kZXJlZCB1bCwgbGkKICAgICAqCiAgICAgKi8KICAgIAogICAgZnVuY3Rpb24gcmVuZGVyX3RyZWVfY2xvc2VkX2xpKCR0cmVlLCAkY3VycmVudF9kZXB0aCA9IC0xLCAkY291bnRlciA9IDEpIHsKICAgICAgICAKICAgICAgICAkbm9kZSA9IGFycmF5X3NoaWZ0KCR0cmVlKTsKICAgICAgICAgICAgCiAgICAgICAgJG5vZGVfaGllcmFyY2h5X2lkICA9ICRub2RlWydoaWVyYXJjaHlfaWQnXTsKICAgICAgICAkbm9kZV9sZnQgICAgICAgICAgID0gJG5vZGVbJ2xmdCddOwogICAgICAgICRub2RlX3JndCAgICAgICAgICAgPSAkbm9kZVsncmd0J107CiAgICAgICAgJG5vZGVfbmFtZSAgICAgICAgICA9ICRub2RlWyduYW1lJ107CiAgICAgICAgJG5vZGVfZGVwdGggICAgICAgICA9ICRub2RlWydkZXB0aCddOwogICAgICAgICRub2RlX2luZGVudCAgICAgICAgPSAkbm9kZVsnaW5kZW50J107CiAgICAgICAgCiAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgIAogICAgICAgIGlmICgkbm9kZV9kZXB0aCA+ICRjdXJyZW50X2RlcHRoKSB7CiAgICAgICAgICAgIGlmICgkY291bnRlciA9PSAxKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICI8dWwgY2xhc3M9XCJzb3J0YWJsZUxpc3Qgc29ydGFibGVcIj5cbiI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICI8dWw+XG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICgkbm9kZV9kZXB0aCA8ICRjdXJyZW50X2RlcHRoKSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gc3RyX3JlcGVhdCgiPC91bD5cbiIsICRjdXJyZW50X2RlcHRoIC0gJG5vZGVfZGVwdGgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkcmVzdWx0IC49ICJcbiA8bGkgaWQ9XCJsaXN0XyRub2RlX2hpZXJhcmNoeV9pZFwiPjxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPiZuYnNwOzwvc3Bhbj4kY291bnRlcigkbm9kZV9oaWVyYXJjaHlfaWQpOiZuYnNwOyRub2RlX25hbWUgPGVtPigkbm9kZV9uYW1lKTwvZW0+PC9kaXY+PC9saT5cbiI7CiAgICAgICAgICAgIAogICAgICAgICRjb3VudGVyKys7CiAgICAgICAgCiAgICAgICAgaWYgKCFlbXB0eSgkdHJlZSkpIHsKICAgICAgICAgICAgJHJlc3VsdCAuPSAgc2VsZjo6cmVuZGVyX3RyZWVfY2xvc2VkX2xpKCR0cmVlLCAkbm9kZV9kZXB0aCwgJGNvdW50ZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gc3RyX3JlcGVhdCgiPC91bD5cbiIsICRub2RlX2RlcHRoKTsKICAgICAgICAgICAgJHJlc3VsdCAuPSAiPC91bD5cbiI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgIAogICAgfQogICAgCiAgICAvKiogcmVuZGVyIGhpZXJhcmNoeSB0cmVlIHRvIGh0bWwgbGlzdHMgKGxpIHdpbGwgbm90IGJlIGNsb3NlZCBkaXJlY3RseSAuLi4KICAgICAqIHdpbGwgc3RheSBvcGVuIHRpbGwgY3VycmVudCBsZXZlbCBpcyBjbG9zZWQpIAogICAgICoKICAgICAqIEBwYXJhbSAkdHJlZSBhcnJheSAtIHRyZWUgdG8gcmVuZGVyCiAgICAgKiBAcmV0dXJuICRyZXN1bHQgc3RyaW5nIC0gaHRtbCB3aXRoIHJlbmRlcmVkIHVsLCBsaQogICAgICoKICAgICAqLwogICAgCiAgICBmdW5jdGlvbiByZW5kZXJfdHJlZV9vcGVuX2xpKCR0cmVlKSB7CiAgICAKICAgICAgICAkY3VycmVudF9kZXB0aCA9IDA7CiAgICAgICAgJGNvdW50ZXIgPSAwOwogICAgICAgIAogICAgICAgICRyZXN1bHQgPSAnPHVsIGNsYXNzPSJzb3J0YWJsZUxpc3Qgc29ydGFibGUiPic7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCAoJHRyZWUgYXMgJG5vZGUpIHsgCiAgICAgICAgICAgIAogICAgICAgICAgICAkbm9kZV9oaWVyYXJjaHlfaWQgID0gJG5vZGVbJ2hpZXJhcmNoeV9pZCddOwogICAgICAgICAgICAkbm9kZV9sZnQgICAgICAgICAgID0gJG5vZGVbJ2xmdCddOwogICAgICAgICAgICAkbm9kZV9yZ3QgICAgICAgICAgID0gJG5vZGVbJ3JndCddOwogICAgICAgICAgICAkbm9kZV9uYW1lICAgICAgICAgID0gJG5vZGVbJ25hbWUnXTsKICAgICAgICAgICAgJG5vZGVfZGVwdGggICAgICAgICA9ICRub2RlWydkZXB0aCddOwogICAgICAgICAgICAkbm9kZV9pbmRlbnQgICAgICAgID0gJG5vZGVbJ2luZGVudCddOwogICAgCiAgICAgICAgICAgIGlmICgkbm9kZV9kZXB0aCA9PSAkY3VycmVudF9kZXB0aCkgewogICAgICAgICAgICAgICAgaWYgKCRjb3VudGVyID4gMCkgewogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIjwvbGk+XG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoJG5vZGVfZGVwdGggPiAkY3VycmVudF9kZXB0aCkgewogICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiXG48dWw+XG4iOyAgIAogICAgICAgICAgICAgICAgJGN1cnJlbnRfZGVwdGggPSAkY3VycmVudF9kZXB0aCArICgkbm9kZV9kZXB0aCAtICRjdXJyZW50X2RlcHRoKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRub2RlX2RlcHRoIDwgJGN1cnJlbnRfZGVwdGgpIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gc3RyX3JlcGVhdCgnPC9saT48L3VsPicsJGN1cnJlbnRfZGVwdGggLSAkbm9kZV9kZXB0aCkuIjwvbGk+XG4iOwogICAgICAgICAgICAgICAgJGN1cnJlbnRfZGVwdGggPSAkY3VycmVudF9kZXB0aCAtICgkY3VycmVudF9kZXB0aCAtICRub2RlX2RlcHRoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgJHJlc3VsdCAuPSAiXG4gPGxpIGlkPVwibGlzdF8kbm9kZV9oaWVyYXJjaHlfaWQiLiAiXCI+PGRpdiBjbGFzcz1cImxhYmVsXCI+PHNwYW4+Jm5ic3A7PC9zcGFuPiRjb3VudGVyKCRub2RlX2hpZXJhcmNoeV9pZCk6Jm5ic3A7JG5vZGVfbmFtZSA8ZW0+KCRub2RlX25hbWUpPC9lbT48L2Rpdj4iOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICsrJGNvdW50ZXI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRyZXN1bHQgLj0gc3RyX3JlcGVhdCgiPC9saT5cbjwvdWw+XG4iLCRub2RlX2RlcHRoKS4iPC9saT5cbiI7CiAgICAKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIAogICAgfSAgICAKICAgIAogICAgLyoqCiAgICAgKiBtYWtlIG5lc3RlZCBhcnJheSBmcm9tIHVubmVzdGVkIGhpZXJhcmNoeSBhcnJheQogICAgICoKICAgICAqIEBwYXJhbSAkaGllcmFyY2h5X2FycmF5IGFycmF5IC0gdW5uZXN0ZWQgYXJyYXkgd2l0aCBoaWVyYXJjaHkgaXRlbXMKICAgICAqIEBwYXJhbSAkZGVwdGhfa2V5IHN0cmluZyAtIHRoZSBuYW1lIG9mIHRoZSBrZXkgY29udGFpbmluZyB0aGUgZGVwdGggaW50CiAgICAgKiBAcmV0dXJuICRuZXN0ZWQgYXJyYXkgLSBuZXN0ZWQgYXJyYXkgd2l0aCBoaWVyYXJjaHkgaXRlbXMgCiAgICAgKgogICAgICovCiAgICAKICAgIGZ1bmN0aW9uIG5lc3RpZnkoJGhpZXJhcmNoeV9hcnJheSwgJGRlcHRoX2tleSA9ICdkZXB0aCcpIHsKICAgICAgICAKICAgICAgICAkbmVzdGVkID0gYXJyYXkoKTsKICAgICAgICAkZGVwdGhzID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICBmb3JlYWNoKCAkaGllcmFyY2h5X2FycmF5IGFzICRrID0+ICR2ICkgewogICAgICAgICAgICAKICAgICAgICAgICAgaWYoICR2WyRkZXB0aF9rZXldID09IDAgKSB7CiAgICAgICAgICAgICAgICAkbmVzdGVkWyRrXSA9ICR2OwogICAgICAgICAgICAgICAgJGRlcHRoc1skdlskZGVwdGhfa2V5XSArIDFdID0gJGs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcGFyZW50ID0mICRuZXN0ZWQ7CiAgICAgICAgICAgICAgICBmb3IoICRpID0gMTsgJGkgPD0gKCAkdlskZGVwdGhfa2V5XSApOyAkaSsrICkgewogICAgICAgICAgICAgICAgICAgICRwYXJlbnQgPSYgJHBhcmVudFskZGVwdGhzWyRpXV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICAkcGFyZW50WyRrXSA9ICR2OwogICAgICAgICAgICAgICAgJGRlcHRoc1skdlskZGVwdGhfa2V5XSArIDFdID0gJGs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRuZXN0ZWQ7CiAgICAgICAgCiAgICB9Cgp9IC8vIFVwTmVzdGVkVHJlZQoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpSmarty.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBVcFNtYXJ0eS5jbGFzcy5waHAgMzIgMjAxMi0wNy0xMSAxOTo0NDozMlogYXJub3VkICQgCgojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENsYXNzOiBVcFNtYXJ0eSAoYykgMjAxMS0yMDEyIGJ5IEFybm91ZCB2YW4gU3VzdGVyZW4gKGFybm91ZEB1cHNlcnZpY2UubmwpCiMKIyBTb21lIG1ldGhvZHMgdG8gYmUgdXNlZCBpbnNpZGUgdGhlIFNtYXJ0eSB0ZW1wbGF0ZSBlbmdpbmUKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwnZnVuY3Rpb24udXBfZm9ybXN0YXJ0LnBocCcpOwpyZXF1aXJlX29uY2UoJGZuKTsKCmNsYXNzIFVwU21hcnR5IHsKCiAgICB2YXIgJF9tb2R1bGU7CgogICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZSkgewogICAgICAgICR0aGlzLT5fbW9kdWxlID0gJG1vZHVsZTsKICAgICAgICAKCQkkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CQkKCQkkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigndXBfZm9ybXN0YXJ0Jywnc21hcnR5X2Z1bmN0aW9uX3VwX2Zvcm1zdGFydCcpOwogICAgfQogICAgCiAgICAvKiogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gY2FsbCBsYW5nIHN0cmluZyBmcm9tIHdpdGhpbiBTbWFydHkKICAgICAqCiAgICAgKiBAcGFyYW0gJG5hbWUgc3RyaW5nIC0gbGFuZyBhbGlhcwogICAgICogQHBhcmFtICRwYXJhbXMgc3RyaW5nIC0gY29tbWEgZGVsaW1pdGVkIGxhbmcgYWxpYXMKICAgICAqIEByZXR1cm4gJGxhbmcgc3RyaW5nIC0gaW50ZXJuYXRpb25hbGl6ZWQgbGFuZyAKICAgICAqCiAgICAgKiBAZXhhbXBsZSB7JHVwc21hcnR5LT5sYW5nKCdzX3NfYWxyZWFkeWdpdmVuJywgJ2ZpcnN0X25hbWUgLCBsYXN0X25hbWUnKX0gCiAgICAgKgogICAgICovCgogICAgcHVibGljIGZ1bmN0aW9uIGxhbmcoJG5hbWUsICRwYXJhbXM9JycpIHsKICAgICAgICAKICAgICAgICAkcGFyYW1zID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcnLCAkcGFyYW1zKTsKICAgICAgICAkcGFyYW1zID0gZXhwbG9kZSgiLCIsICRwYXJhbXMpOwogICAgICAgIAogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICAgICAKICAgICAgICAkc3Vic3RpdHV0ZSA9IGFycmF5KCk7CiAgICAgICAgJF9zdWJzdGl0dXRlID0gJyc7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9edjovJywgJHYpKSB7CiAgICAgICAgICAgICAgICAkdl9hcnJheSA9IGV4cGxvZGUoJzonLCAkdik7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJHYgPSAkc21hcnR5LT5nZXRfdGVtcGxhdGVfdmFycygkdl9hcnJheVsxXSk7CiAgICAgICAgICAgICAgICAkX3N1YnN0aXR1dGUgPSAiJHYiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkc3Vic3RpdHV0ZSwgJHRoaXMtPl9tb2R1bGUtPkxhbmcoJHYpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoIWVtcHR5KCRfc3Vic3RpdHV0ZSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fbW9kdWxlLT5MYW5nKCRuYW1lLCAkX3N1YnN0aXR1dGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X21vZHVsZS0+TGFuZygkbmFtZSwgJHN1YnN0aXR1dGUpOyAgIAogICAgICAgIH0KICAgICAgICAgICAgCiAgICB9CiAgICAKICAgIC8qKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGEgZmlsZSBzaXplIHRvIGEgaHVtYW4gKGZyaWVuZGx5KSBzaXplIHdpdGhpbiBTbWFydHkKICAgICAqCiAgICAgKiBAcGFyYW0gJGJ5dGVzIHN0cmluZyAtIGZpbGUgc2l6ZSBpbiBieXRlcwogICAgICogQHJldHVybiAkaHVtYW5fc2l6ZSBzdHJpbmcgLSBmaWxlIHNpemUgaW4gTUJ8a2J8Ynl0ZXMKICAgICAqCiAgICAgKiBAZXhhbXBsZSB7JHVwcHJvamVjdC0+ZmlsZV9zaXplKCR1cGxvYWRfc2l6ZV9pbl9ieXRlcyl9CiAgICAgKgogICAgICovCiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBmaWxlX3NpemUoJGJ5dGVzPTApIHsKICAgICAgICAgICAgICAgIAogICAgICAgICRtYiA9IDEwMjQqMTAyNDsKICAgIAogICAgICAgIGlmICgkYnl0ZXMgPiAkbWIpIHsKICAgICAgICAgICAgJGh1bWFuX3NpemUgPSBzcHJpbnRmICgiJTAxLjJmIiwkYnl0ZXMvJG1iKSAuICIgTUIiOwogICAgICAgIH0gZWxzZWlmICggJGJ5dGVzID49IDEwMjQgKSB7CiAgICAgICAgICAgICRodW1hbl9zaXplID0gc3ByaW50ZiAoIiUwMS4wZiIsJGJ5dGVzLzEwMjQpIC4gIiBLYiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGh1bWFuX3NpemUgPSAkYnl0ZXMgLiAiIGJ5dGVzIjsKICAgICAgICB9CiAgICAKICAgICAgICByZXR1cm4gJGh1bWFuX3NpemU7CiAgICB9CiAgICAKCn0gLy8gVXBTbWFydHkKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/classes/UpUpload.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KIyAkSWQ6IFVwVXBsb2FkLmNsYXNzLnBocCAzMiAyMDEyLTA3LTExIDE5OjQ0OjMyWiBhcm5vdWQgJA0KDQojQkVHSU5fTElDRU5TRQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ2xhc3M6IFVwVXBsb2FkIChjKSAyMDExLTIwMTIgYnkgQXJub3VkIHZhbiBTdXN0ZXJlbiAoYXJub3VkQHVwc2VydmljZS5ubCkNCiMgQSBjbGFzcyBmb3IgdXBsb2FkaW5nIGZpbGVzDQojIA0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZA0KIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUNCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUw0KIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojRU5EX0xJQ0VOU0UNCg0KY2xhc3MgVXBVcGxvYWQgew0KICAgIA0KICAgIHN0YXRpYyAkZGVidWcgPSAnMCc7DQoJDQoJcHJpdmF0ZSAkdXBsb2FkX2hvb2sgPSBhcnJheSgpOw0KCQ0KICAgIHByaXZhdGUgJGFyZ3MgPSBhcnJheSAoDQogICAgICAgICd1cGxvYWRfZmlsZScJCT0+CU5VTEwsDQogICAgICAgICd1cGxvYWRfZGlyZWN0b3J5Jwk9PglOVUxMLA0KICAgICAgICAnYWxsb3dlZF9zaXplJwkJPT4JNTEyMDAwLAkJCQkJCQ0KICAgICAgICAnZXh0ZW5zaW9uX2NoZWNrJwk9PglUUlVFLA0KICAgICAgICAndXBsb2FkX292ZXJ3cml0ZScJPT4JRkFMU0UsDQogICAgKTsNCgkNCiAgICBwcml2YXRlICRhbGxvd2VkX2V4dGVuc2lvbnMgPSBhcnJheSAoDQogICAgKTsNCgkNCg0KICAgIC8qKg0KICAgICAqIGNvbnN0cnVjdG9yDQogICAgICoNCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MNCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFsbG93ZWRfZXh0ZW5zaW9ucw0KICAgICAqDQogICAgICovDQoJDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCX0NCgkNCiAgICAvKioNCiAgICAgKiBwcmludCB2YXJpYWJsZSBpbiByZWFkYWJsZSBmb3JtYXQNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXl8b2JqZWN0ICR2YXINCiAgICAgKg0KICAgICAqLw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBwcmludF92YXIoJHZhcikgeyAJDQoJCWVjaG8gIjxwcmU+IjsNCiAgICAJcHJpbnRfcigkdmFyKTsNCiAgIAkgCWVjaG8gIjwvcHJlPiI7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqIHVwZGF0ZSBkZWZhdWx0IGFyZ3VtZW50cw0KICAgICAqIGl0IHdpbGwgdXBkYXRlIGRlZmF1bHQgYXJyYXkgb2YgY2xhc3MgaS5lICRhcmdzDQogICAgICoNCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MgLSBpbnB1dCBhcmd1bWVudHMNCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRlZmF0dWxzIC0gZGVmYXVsdCBhcmd1bWVudHMgDQogICAgICogQHJldHVybiBhcnJheQ0KICAgICAqDQogICAgICovDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZV9hcmdzKCAkYXJncyA9IGFycmF5KCksICRkZWZhdWx0cyA9IGFycmF5KCkgKSB7IA0KCQlyZXR1cm4gYXJyYXlfbWVyZ2UoICRkZWZhdWx0cywgJGFyZ3MgKTsJIA0KCX0NCgkNCiAgICAvKioNCiAgICAgKiBnZXQgZXh0ZW5zaW9uIGFuZCBuYW1lIG9mIGZpbGUNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfbmFtZSANCiAgICAgKiBAcmV0dXJuIGFycmF5IC0gaGF2aW5nIGZpbGVfbmFtZSBhbmQgZmlsZV9leHQNCiAgICAgKg0KICAgICAqLw0KCQ0KCXByaXZhdGUgZnVuY3Rpb24gZ2V0X2V4dGVuc2lvbigkZmlsZV9uYW1lKSB7DQoJCSR0ZW1wID0gYXJyYXkoKTsNCgkJJHRlbXBbJ2ZpbGVfbmFtZSddID0gc3RydG9sb3dlciggc3Vic3RyKCAkZmlsZV9uYW1lLCAwLCBzdHJyaXBvcyggJGZpbGVfbmFtZSwgJy4nICkgKSApOw0KCSAgICAkdGVtcFsnZmlsZV9leHRlbnNpb24nXSA9IHN0cnRvbG93ZXIoIHN1YnN0ciggJGZpbGVfbmFtZSwgc3Rycmlwb3MoICRmaWxlX25hbWUsICcuJyApICsgMSApICk7DQoJCXJldHVybiAkdGVtcDsNCgl9DQoJDQogICAgLyoqDQogICAgICogZ2V0IHNhZmUgc3RyaW5nDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YXIgDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKg0KICAgICAqLw0KICAgICAgICANCglwdWJsaWMgZnVuY3Rpb24gc2FmZV9zdHJpbmcoICR2YXIgPSAiIiwgJHNlcGFyYXRvciA9ICIiICkgew0KCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCd8W15hLXpBLVowLTlfXXwnLCRzZXBhcmF0b3IsJHZhcik7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqIGdldCBlcnJvciBzdGF0dXMgb2YgdXBsb2FkZWQgZmlsZQ0KICAgICAqDQogICAgICogQHBhcmFtIGludGVnZXIgJGVycm9yX2NvZGUNCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqDQogICAgICovDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiB1cGxvYWRfZXJyb3IoICRlcnJvcl9jb2RlICkgew0KCQkNCgkJc3dpdGNoICggJGVycm9yX2NvZGUgKSB7DQoJCSAgIA0KCQkgICBjYXNlIFVQTE9BRF9FUlJfT0s6DQoJCQkgICAJJGVycm9yID0gIkFsbCBPSyI7DQoJCQkgICAJYnJlYWs7DQoJCSAgIA0KCQkgICBjYXNlIFVQTE9BRF9FUlJfSU5JX1NJWkU6DQoJCQkgICAJJGVycm9yID0gIlRoZSB1cGxvYWRlZCBmaWxlIGV4Y2VlZHMgdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgZGlyZWN0aXZlICgiLmluaV9nZXQoInVwbG9hZF9tYXhfZmlsZXNpemUiKS4iKSBpbiBwaHAuaW5pLiI7DQoJCQkgICAJYnJlYWs7DQoJCSAgIA0KCQkgICBjYXNlIFVQTE9BRF9FUlJfRk9STV9TSVpFOg0KCQkJICAgCSRlcnJvciA9ICJUaGUgdXBsb2FkZWQgZmlsZSBleGNlZWRzIHRoZSBNQVhfRklMRV9TSVpFIGRpcmVjdGl2ZSB0aGF0IHdhcyBzcGVjaWZpZWQgaW4gdGhlIEhUTUwgZm9ybS4iOw0KCQkJICAgCWJyZWFrOw0KCQkgICANCgkJICAgY2FzZSBVUExPQURfRVJSX1BBUlRJQUw6DQoJCQkJJGVycm9yID0gIlRoZSB1cGxvYWRlZCBmaWxlIHdhcyBvbmx5IHBhcnRpYWxseSB1cGxvYWRlZC4iOw0KCQkJICAgCWJyZWFrOw0KCQkgICANCgkJICAgY2FzZSBVUExPQURfRVJSX05PX0ZJTEU6DQoJCQkJJGVycm9yID0gIk5vIGZpbGUgd2FzIHVwbG9hZGVkLiI7DQoJCQkgICAJYnJlYWs7DQoJCSAgIA0KCQkgICBjYXNlIFVQTE9BRF9FUlJfTk9fVE1QX0RJUjoNCgkJCQkkZXJyb3IgPSAiTWlzc2luZyBhIHRlbXBvcmFyeSBmb2xkZXIuIjsNCgkJCSAgIAlicmVhazsNCgkJICAgDQoJCSAgIGNhc2UgVVBMT0FEX0VSUl9DQU5UX1dSSVRFOg0KCQkJCSRlcnJvciA9ICJGYWlsZWQgdG8gd3JpdGUgZmlsZSB0byBkaXNrLiI7DQoJCQkgICAJYnJlYWs7DQoJCSAgIA0KCQkgICBkZWZhdWx0Og0KCQkJCSRlcnJvciA9ICJVbmtub3duIEVycm9yLiI7DQoJCQ0KCQl9DQoJCQ0KCQlyZXR1cm4gJGVycm9yOw0KCQkNCgl9DQoJDQoJLyoqDQoJICogc2V0IGRlZmF1bHQgYXJndW1lbnRzDQoJICogaXQgd2lsbCBzZXQgZGVmYXVsdCBhcnJheSBvZiBjbGFzcyBpLmUgJGFyZ3MNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAkYXJncw0KCSAqIEByZXR1cm4gMA0KCSAqDQoJICovDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBzZXRfYXJncyggJGFyZ3MgPSBhcnJheSgpICkgeyANCgkJDQoJCSRkZWZhdWx0cyA9ICR0aGlzLT5nZXRfYXJncygpOw0KCQkkYXJncyA9ICR0aGlzLT5wYXJzZV9hcmdzKCAkYXJncywgJGRlZmF1bHRzICk7DQoJCSR0aGlzLT5hcmdzID0gJGFyZ3M7CSANCgl9DQoJDQogICAgLyoqDQogICAgICogZ2V0IGRlZmF1bHQgYXJndW1lbnRzDQogICAgICogaXQgd2lsbCBnZXQgZGVmYXVsdCBhcnJheSBvZiBjbGFzcyBpLmUgJGFyZ3MNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYXJyYXkNCiAgICAgKg0KICAgICAqLw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRfYXJncygpIHsgDQoJCXJldHVybiAkdGhpcy0+YXJnczsJIA0KCX0NCgkNCiAgICAvKioNCiAgICAgKiBzZXQgZGVmYXVsdCBhbGxvd2VkIGV4dGVuc2lvbnMNCiAgICAgKiBpdCB3aWxsIHNldCBkZWZhdWx0IGFycmF5IG9mIGNsYXNzIGkuZSAkYWxsb3dlZF9leHRlbnNpb25zDQogICAgICoNCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFsbG93ZWRfZXh0ZW5zaW9ucw0KICAgICAqIEByZXR1cm4gMA0KICAgICAqDQogICAgICovDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBzZXRfYWxsb3dlZF9leHRlbnNpb25zKCAkYWxsb3dlZF9leHRlbnNpb25zID0gYXJyYXkoKSApIHsgDQoJCQ0KCQkkZGVmYXVsdHMgPSAkdGhpcy0+Z2V0X2FsbG93ZWRfZXh0ZW5zaW9ucygpOw0KCQkkYWxsb3dlZF9leHRlbnNpb25zID0gJHRoaXMtPnBhcnNlX2FyZ3MoICRhbGxvd2VkX2V4dGVuc2lvbnMsICRkZWZhdWx0cyApOw0KCQkkdGhpcy0+YWxsb3dlZF9leHRlbnNpb25zID0gJGFsbG93ZWRfZXh0ZW5zaW9uczsJIA0KCQ0KCX0NCgkNCiAgICAvKioNCiAgICAgKiBnZXQgZGVmYXVsdCBhbGxvd2VkIGV4dGVuc2lvbnMNCiAgICAgKiBpdCB3aWxsIGdldCBkZWZhdWx0IGFycmF5IG9mIGNsYXNzIGkuZSAkYWxsb3dlZF9leHRlbnNpb25zDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGFycmF5DQogICAgICoNCiAgICAgKi8NCiAgICAgICAgDQoJcHVibGljIGZ1bmN0aW9uIGdldF9hbGxvd2VkX2V4dGVuc2lvbnMoKSB7IA0KCQlyZXR1cm4gJHRoaXMtPmFsbG93ZWRfZXh0ZW5zaW9uczsJIA0KCX0NCgkNCiAgICAvKioNCiAgICAgKiBzZXQgdXBsb2FkIHZhcg0KICAgICAqIGl0IHdpbGwgc2V0IHVwbG9hZCB2YXJpYWJsZQ0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkdXBsb2FkX2RpcmVjdG9yeQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbg0KICAgICAqDQogICAgICovDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBzZXRfdXBsb2FkX3ZhciggJGZpbGVzICkgeyANCgkJDQoJCSR0ZW1wID0gYXJyYXkoKTsNCgkJJGZpbGVzX3VwbG9hZF9hdHRyaWJ1dGVzID0gYXJyYXkoICduYW1lJywgJ3R5cGUnLCAndG1wX25hbWUnLCAnZXJyb3InLCAnc2l6ZScgKTsNCgkJDQoJCWlmIChzZWxmOjokZGVidWcpIHsNCgkJICAgICR0aGlzLT5wcmludF92YXIoJGZpbGVzKTsNCgkJfSANCgkJDQoJCSR1cGxvYWRfZmlsZXMgPSBjb3VudCggJGZpbGVzWyduYW1lJ10gKTsNCgkJJHVwbG9hZF9maWxlcyA9ICggIWVtcHR5KCAkdXBsb2FkX2ZpbGVzICkgKSA/ICR1cGxvYWRfZmlsZXMgOiAwIDsgDQoJCQ0KCQkkZm9yZWFjaGluZGV4ID0gMDsNCgkJZm9yKCAkaSA9IDE7ICRpIDw9ICR1cGxvYWRfZmlsZXM7ICRpKysgKSB7DQoJCQkJCQ0KCQkgICAgLy8gdXBsb2FkW10gYXMgYXJyYXkNCgkJICAgIA0KCQkgICAgaWYgKGlzX2FycmF5KCRmaWxlc1snbmFtZSddKSkgew0KCQkgICAgDQogICAgICAgICAgICAgICAgZm9yZWFjaCggJGZpbGVzX3VwbG9hZF9hdHRyaWJ1dGVzIGFzICR2YWwgKSB7CQkJCQ0KICAgICAgICAgICAgICAgICAgICAkdGVtcFskaV1bJHZhbF0gPSAgJGZpbGVzWyR2YWxdWyRmb3JlYWNoaW5kZXhdOwkNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgaWYoICR2YWwgPT0gImVycm9yIiApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZW1wWyRpXVsnZXJyb3Jfc3RhdHVzJ10gPSAkdGhpcy0+dXBsb2FkX2Vycm9yKCAkZmlsZXNbJHZhbF1bJGZvcmVhY2hpbmRleF0gKTsNCiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgfQ0KCQkJDQoJCQl9IGVsc2VpZiAoaXNfc3RyaW5nKCRmaWxlc1snbmFtZSddKSkgew0KCQkJICAgIA0KCQkJICAgIC8vIHVwbG9hZCBhcyBzdHJpbmcNCgkJCSAgICANCiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkZmlsZXNfdXBsb2FkX2F0dHJpYnV0ZXMgYXMgJHZhbCApIHsJCQkJDQogICAgICAgICAgICAgICAgICAgICR0ZW1wWyRpXVskdmFsXSA9ICAkZmlsZXNbJHZhbF07CQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiggJHZhbCA9PSAiZXJyb3IiICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBbJGldWydlcnJvcl9zdGF0dXMnXSA9ICR0aGlzLT51cGxvYWRfZXJyb3IoICRmaWxlc1skdmFsXSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIH0NCgkJCSAgICANCgkJCX0NCgkJCQ0KCQkJKyskZm9yZWFjaGluZGV4Ow0KCQkJDQoJCX0NCgkJDQoJCXJldHVybiAkdGVtcDsNCgkJCQkgDQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqIGdldCB1cGxvYWQgdmFyIChnZXR0ZXIgYW5kIHNldHRlcj8pDQogICAgICoNCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZpbGVzDQogICAgICogQHJldHVybiBhcnJheQ0KICAgICAqDQogICAgICovDQoJDQoJcHVibGljIGZ1bmN0aW9uIGdldF91cGxvYWRfdmFyKCAkZmlsZXMgPSBhcnJheSgpICkgeyANCgkJcmV0dXJuICR0aGlzLT5zZXRfdXBsb2FkX3ZhciggJGZpbGVzICk7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqIGNoZWNrIGlmICR1cGxvYWRfZGlyZWN0b3J5IGlzIGRpcmVjdG9yeQ0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkdXBsb2FkX2RpcmVjdG9yeQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbg0KICAgICAqDQogICAgICovDQoJDQoJcHJpdmF0ZSBmdW5jdGlvbiBpc19kaXJlY3RvcnlfcGF0aCggJHVwbG9hZF9kaXJlY3RvcnkgKSB7IA0KCQkNCgkJaWYoIGlzX2RpciggJHVwbG9hZF9kaXJlY3RvcnkgKSApIHsNCgkJCXJldHVybiAxOw0KCQl9DQoJCQ0KCQlyZXR1cm4gMDsNCgkJCSANCgl9DQoJDQogICAgLyoqDQogICAgICoNCiAgICAgKiBjaGVjayBpZiAkdXBsb2FkX2RpcmVjdG9yeSBpcyB3cml0YWJsZQ0KICAgICAqICAgIA0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVwbG9hZF9kaXJlY3RvcnkNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4NCiAgICAgKg0KICAgICAqLw0KCQ0KCXByaXZhdGUgZnVuY3Rpb24gaXNfZGlyZWN0b3J5X3dyaXRhYmxlKCAkdXBsb2FkX2RpcmVjdG9yeSApIHsgDQoJCQ0KCQlpZiggaXNfd3JpdGFibGUoICR1cGxvYWRfZGlyZWN0b3J5ICkgKSB7DQoJCQlyZXR1cm4gMTsNCgkJfQ0KCQkNCgkJcmV0dXJuIDA7DQoJCQkgDQoJfQ0KCQ0KCS8qKg0KCSAqIHNldCB1cGxvYWQgaG9vaw0KCSAqDQoJICogQHBhcmFtIGFycmF5ICR2YXINCgkgKg0KCSAqLw0KCQ0KCXByaXZhdGUgZnVuY3Rpb24gc2V0X3VwbG9hZF9ob29rKCAkdmFyID0gYXJyYXkoKSApIHsgCQkNCgkJJHRoaXMtPnVwbG9hZF9ob29rID0gJHZhcjsJCQkgDQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqIGdldCB1cGxvYWQgaG9vaw0KICAgICAqDQogICAgICogQHBhcmFtIGFycmF5ICR2YXINCiAgICAgKg0KICAgICAqLw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRfdXBsb2FkX2hvb2soKSB7IAkJDQoJCXJldHVybiAkdGhpcy0+dXBsb2FkX2hvb2s7CQkJIA0KCX0NCgkNCiAgICAvKioNCiAgICAgKg0KICAgICAqIHNldCB1cGxvYWQNCiAgICAgKiBpdCB3aWxsIHVwbG9hZCBmaWxlLg0KICAgICAqDQogICAgICogQHJldHVybiBhcnJheQ0KICAgICAqDQogICAgICovDQoJDQoJcHVibGljIGZ1bmN0aW9uIHNldF91cGxvYWQoICRhcmdzLCAkYWxsb3dlZF9leHRlbnNpb25zICkgeyANCgkJDQoJCSR0aGlzLT5zZXRfYXJncyggJGFyZ3MgKTsNCgkJJGFyZ3MgPSAkdGhpcy0+Z2V0X2FyZ3MoKTsNCgkJDQoJCWlmIChzZWxmOjokZGVidWcpIHsNCgkJICAgICR0aGlzLT5wcmludF92YXIoJGFyZ3MpOw0KCQl9DQoJCQ0KCQlleHRyYWN0KCAkYXJncyApOw0KCQkNCgkJJHRoaXMtPnNldF9hbGxvd2VkX2V4dGVuc2lvbnMoICRhbGxvd2VkX2V4dGVuc2lvbnMgKTsNCgkJJGFsbG93ZWRfZXh0ZW5zaW9ucyA9ICR0aGlzLT5nZXRfYWxsb3dlZF9leHRlbnNpb25zKCk7DQoJCQ0KCQlpZiAoc2VsZjo6JGRlYnVnKSB7DQoJCSAgICAkdGhpcy0+cHJpbnRfdmFyKCRhbGxvd2VkX2V4dGVuc2lvbnMpOw0KCQl9IA0KCQkNCgkJJHRlbXAgPSBhcnJheSgpOw0KCQkkdGVtcFsndXBsb2FkX2RpcmVjdG9yeSddID0gIkludmFsaWQgLSAiIC4gJHVwbG9hZF9kaXJlY3Rvcnk7DQoJCSR0ZW1wWyd1cGxvYWRfZGlyZWN0b3J5X3dyaXRhYmxlJ10gPSAiSW52YWxpZCAtIERpcmVjdG9yeSBpcyBub3Qgd3JpdGFibGUiOw0KCQkkdGVtcFsndXBsb2FkX2ZpbGVfZXh0ZW5zaW9uJ10gPSAiSW52YWxpZCAtIEV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCI7DQoJCSR0ZW1wWyd1cGxvYWRfZmlsZV9zaXplJ10gPSAiSW52YWxpZCAtIFNpemUgIiAuICR1cGxvYWRfZmlsZVsnc2l6ZSddIC4gIiBieXRlcyI7DQoJCSR0ZW1wWyd1cGxvYWRfcHJvY2VzcyddID0gMDsNCgkJJHRlbXBbJ3VwbG9hZF9tb3ZlJ10gPSBGQUxTRTsNCgkJJHRlbXBbJ3VwbG9hZF9vdmVyd3JpdGUnXSA9ICR1cGxvYWRfb3ZlcndyaXRlOw0KCQkJCQ0KCQkkdGVtcFsndXBsb2FkX2ZpbGUnXVsnbmFtZSddID0gJHVwbG9hZF9maWxlWyduYW1lJ107DQoJCSR0ZW1wWyd1cGxvYWRfZmlsZSddWyd0eXBlJ10gPSAkdXBsb2FkX2ZpbGVbJ3R5cGUnXTsNCgkJJHRlbXBbJ3VwbG9hZF9maWxlJ11bJ3RtcF9uYW1lJ10gPSAkdXBsb2FkX2ZpbGVbJ3RtcF9uYW1lJ107DQoJCSR0ZW1wWyd1cGxvYWRfZmlsZSddWydlcnJvciddID0gJHVwbG9hZF9maWxlWydlcnJvciddOw0KCQkkdGVtcFsndXBsb2FkX2ZpbGUnXVsnZXJyb3Jfc3RhdHVzJ10gPSAkdXBsb2FkX2ZpbGVbJ2Vycm9yX3N0YXR1cyddOw0KCQkkdGVtcFsndXBsb2FkX2ZpbGUnXVsnc2l6ZSddID0gJHVwbG9hZF9maWxlWydzaXplJ107DQoJCQ0KCQkvLyBkaXJlY3RvcnkgcGF0aCB2YWxpZGF0aW9uDQoJCQ0KCQlpZiggIWVtcHR5KCR1cGxvYWRfZGlyZWN0b3J5KSApIHsNCgkJDQoJCQkvLyB1cGxvYWQgZGlyZWN0b3J5IHBhdGggdmFsaWRhdGlvbiANCgkJCWlmICggJHRoaXMtPmlzX2RpcmVjdG9yeV9wYXRoKCAkdXBsb2FkX2RpcmVjdG9yeSApICkgew0KCQkJCQ0KCQkJCSR0ZW1wWyd1cGxvYWRfZGlyZWN0b3J5J10gPSAiVmFsaWQgLSAiIC4gJHVwbG9hZF9kaXJlY3Rvcnk7DQoJCQkJJHRlbXBbJ3VwbG9hZF9wcm9jZXNzJ10rKzsNCgkJCQkNCgkJCQkvLyBkaXJlY3Rvcnkgd3JpdGUgcGVybWlzc2lvbnMNCgkJCQlpZiAoICR0aGlzLT5pc19kaXJlY3Rvcnlfd3JpdGFibGUoICR1cGxvYWRfZGlyZWN0b3J5ICkgKSB7DQoJCQkJCSR0ZW1wWyd1cGxvYWRfZGlyZWN0b3J5X3dyaXRhYmxlJ10gPSAiVmFsaWQgLSBEaXJlY3RvcnkgaXMgd3JpdGFibGUiOw0KCQkJCQkkdGVtcFsndXBsb2FkX3Byb2Nlc3MnXSsrOw0KCQkJCQkkdGVtcFsndXBsb2FkX2ZpbGUnXVsnZGlyZWN0b3J5J10gPSAkdXBsb2FkX2RpcmVjdG9yeTsNCgkJCQl9DQoJCQkNCgkJCX0NCgkJDQoJCX0NCgkJCQ0KCQlpZiAoICFlbXB0eSggJHVwbG9hZF9maWxlWyduYW1lJ10gKSApIHsNCg0KCQkJLy8gZmlsZW5hbWUgYW5kIGV4dGVuc2lvbg0KCQkJJG5hbWVleHQgPSAkdGhpcy0+Z2V0X2V4dGVuc2lvbiggJHVwbG9hZF9maWxlWyduYW1lJ10gKTsNCgkJCSRmaWxlX25hbWUgPSAkbmFtZWV4dFsnZmlsZV9uYW1lJ107DQoJCQkkZmlsZV9leHRlbnNpb24gPSAkbmFtZWV4dFsnZmlsZV9leHRlbnNpb24nXTsNCgkJCQ0KCQkJJHRlbXBbJ3VwbG9hZF9maWxlJ11bJ25hbWVvbmx5J10gPSAkZmlsZV9uYW1lOw0KCQkJJHRlbXBbJ3VwbG9hZF9maWxlJ11bJ2V4dGVuc2lvbiddID0gJGZpbGVfZXh0ZW5zaW9uOw0KCQkJDQoJCQkvLyBhbGxvd2VkIGV4dGVuc2lvbnMNCgkJCWlmICggJGV4dGVuc2lvbl9jaGVjayA9PSBGQUxTRSApIHsNCgkJCQkkdGVtcFsndXBsb2FkX2ZpbGVfZXh0ZW5zaW9uJ10gPSAiVmFsaWQgLSBFeHRlbnNpb24gaXMgYWxsb3dlZCI7DQoJCQkJJHRlbXBbJ3VwbG9hZF9wcm9jZXNzJ10rKzsNCgkJCX0gDQoJCQkNCgkJCWVsc2UgaWYgKCBhcnJheV9rZXlfZXhpc3RzKCAkZmlsZV9leHRlbnNpb24sICRhbGxvd2VkX2V4dGVuc2lvbnMgKSAmJiAkYWxsb3dlZF9leHRlbnNpb25zWyRmaWxlX2V4dGVuc2lvbl0gPT0gVFJVRSApIHsNCgkJCQkkdGVtcFsndXBsb2FkX2ZpbGVfZXh0ZW5zaW9uJ10gPSAiVmFsaWQgLSBFeHRlbnNpb24gaXMgYWxsb3dlZCI7DQoJCQkJJHRlbXBbJ3VwbG9hZF9wcm9jZXNzJ10rKzsJCQ0KCQkJfQ0KCQkJDQoJCQkvLyBzaXplIHZhbGlkYXRpb24NCgkJCWlmICggJGFsbG93ZWRfc2l6ZSA+PSAkdXBsb2FkX2ZpbGVbJ3NpemUnXSApIHsNCgkJCQkkdGVtcFsndXBsb2FkX2ZpbGVfc2l6ZSddID0gIlZhbGlkIC0gU2l6ZSAiIC4gJHVwbG9hZF9maWxlWydzaXplJ10gLiAiIGJ5dGVzIjsNCgkJCQkkdGVtcFsndXBsb2FkX3Byb2Nlc3MnXSsrOw0KCQkJfQkJDQoJCQ0KCQl9DQoJCQ0KCQkvLyB1cGxvYWQgbW92ZSBzdGF0dXMNCgkJDQoJCWlmICggJHRlbXBbJ3VwbG9hZF9wcm9jZXNzJ10gPT0gNCAmJiBpc191cGxvYWRlZF9maWxlKCAkdXBsb2FkX2ZpbGVbJ3RtcF9uYW1lJ10gKSAmJiAkdXBsb2FkX2ZpbGVbJ2Vycm9yJ10gPT0gVVBMT0FEX0VSUl9PSyApIHsJCQ0KCQkJJHRlbXBbJ3VwbG9hZF9tb3ZlJ10gPSBUUlVFOw0KCQl9DQoJCQ0KCQkvLyB1cGxvYWQgaG9vaw0KCQkkdGhpcy0+c2V0X3VwbG9hZF9ob29rKCAkdGVtcCApOw0KCQkJCQ0KCQlpZiAoc2VsZjo6JGRlYnVnKSB7DQoJCSAgICAkdGhpcy0+cHJpbnRfdmFyKCR0ZW1wKTsNCgkJfSANCgkJDQoJCXJldHVybiAkdGVtcDsNCgkJCSANCgl9DQoJDQogICAgLyoqDQogICAgICoNCiAgICAgKiBnZXQgdXBsb2FkDQogICAgICogaXQgd2lsbCB1cGxvYWQgZmlsZS4NCiAgICAgKg0KICAgICAqIEBwYXJhbSAkYXJncyAtIGFycmF5DQogICAgICogQHBhcmFtICRhbGxvd2VkX2V4dGVuc2lvbnMgLSBhcnJheQ0KICAgICAqIEByZXR1cm4gYXJyYXkNCiAgICAgKg0KICAgICAqLw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRfdXBsb2FkKCAkYXJncyA9IGFycmF5KCksICRhbGxvd2VkX2V4dGVuc2lvbnMgPSBhcnJheSgpICkgeyANCgkJcmV0dXJuICR0aGlzLT5zZXRfdXBsb2FkKCAkYXJncywgJGFsbG93ZWRfZXh0ZW5zaW9ucyApOwkgDQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqDQogICAgICogc2V0IFVwbG9hZCBNb3ZlDQogICAgICogaXQgd2lsbCB1cGxvYWQgZmlsZS4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gYXJyYXkNCiAgICAgKg0KICAgICAqLw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBzZXRfdXBsb2FkX21vdmUoICRuYW1lICkgeyANCgkJDQoJCSR0ZW1wID0gYXJyYXkoKTsJCQ0KCQkNCgkJJHVwbG9hZF9ob29rID0gJHRoaXMtPmdldF91cGxvYWRfaG9vaygpOw0KCQkNCgkJaWYgKCAkdXBsb2FkX2hvb2tbJ3VwbG9hZF9tb3ZlJ10gPT0gVFJVRSApIHsNCgkJCQkJCQkJCQ0KICAgICAgICAJJG5hbWUgPSAoICFlbXB0eSggJG5hbWUgKSApID8gJG5hbWUgOiAkdXBsb2FkX2hvb2tbJ3VwbG9hZF9maWxlJ11bJ25hbWVvbmx5J107DQoJCQkkbmFtZSA9ICR0aGlzLT5zYWZlX3N0cmluZyggJG5hbWUgKTsNCgkJCQ0KCQkJJGV4dGVuc2lvbiA9ICR1cGxvYWRfaG9va1sndXBsb2FkX2ZpbGUnXVsnZXh0ZW5zaW9uJ107DQogICAgICAgIAkNCgkJCSR0ZW1wX25hbWUgPSAkdXBsb2FkX2hvb2tbJ3VwbG9hZF9maWxlJ11bJ3RtcF9uYW1lJ107DQoJCQkkZGVzdF9uYW1lID0gJHVwbG9hZF9ob29rWyd1cGxvYWRfZmlsZSddWydkaXJlY3RvcnknXSAuICRuYW1lIC4gIi4iIC4gJGV4dGVuc2lvbjsNCgkJCQ0KCQkJaWYgKCAkdXBsb2FkX2hvb2tbJ3VwbG9hZF9vdmVyd3JpdGUnXSA9PSBGQUxTRSApIHsNCgkJCQkNCgkJCQlpZiAoIGZpbGVfZXhpc3RzKCAkZGVzdF9uYW1lICkgKSB7DQoJCQkJCQ0KCQkJCQkkaSA9IDE7DQoJCQkJCSRtYXhfbG9vcHMgPSAxMDA7DQoJCQkJCXdoaWxlICggZmlsZV9leGlzdHMoICRkZXN0X25hbWUgKSAmJiAkaSA8PSAkbWF4X2xvb3BzICkgew0KCQkJCQkJDQoJCQkJCQkkbmFtZV9uZXcgPSAkbmFtZSAuICJfIiAuICRpOw0KCQkJCQkJJG5hbWVfbmV3ID0gJHRoaXMtPnNhZmVfc3RyaW5nKCAkbmFtZV9uZXcgKTsNCgkJCQkJCQ0KCQkJCQkJJGRlc3RfbmFtZSA9ICR1cGxvYWRfaG9va1sndXBsb2FkX2ZpbGUnXVsnZGlyZWN0b3J5J10gLiAkbmFtZV9uZXcgLiAiLiIgLiAkZXh0ZW5zaW9uOw0KCQkJCQkJDQoJCQkJCQkkaSsrOyANCgkJCQkJCQ0KCQkJCQl9DQoJCQkJCQ0KCQkJCX0gDQoJCQkJDQoJCQl9DQoJCQkNCgkJCSRuYW1lID0gKCBlbXB0eSgkbmFtZV9uZXcpICkgPyAkbmFtZSA6ICRuYW1lX25ldyA7CQkJDQoJCQkNCgkJCWlmICggbW92ZV91cGxvYWRlZF9maWxlKCAkdGVtcF9uYW1lLCAkZGVzdF9uYW1lICkgKSB7CQkJCQ0KCQkJCSR0ZW1wWyd1cGxvYWRlZF9zdGF0dXMnXSA9IFRSVUU7DQoJCQkJJHRlbXBbJ3VwbG9hZGVkX2ZpbGUnXSA9ICRuYW1lOw0KCQkJCSR0ZW1wWyd1cGxvYWRlZF9leHRlbnNpb24nXSA9ICRleHRlbnNpb247DQoJCQkJJHRlbXBbJ3VwbG9hZGVkX2RpcmVjdG9yeSddID0gJGRlc3RfbmFtZTsNCgkJCX0gZWxzZSB7DQoJCQkJJHRlbXBbJ3VwbG9hZGVkX3N0YXR1cyddID0gRkFMU0U7DQoJCQkJJHRlbXBbJ3VwbG9hZGVkX2ZpbGUnXSA9ICRuYW1lOw0KCQkJCSR0ZW1wWyd1cGxvYWRlZF9leHRlbnNpb24nXSA9ICRleHRlbnNpb247DQoJCQkJJHRlbXBbJ3VwbG9hZGVkX2RpcmVjdG9yeSddID0gJGRlc3RfbmFtZTsNCgkJCQ0KCQkJfQ0KCQkJDQoJCX0NCgkJDQoJCXJldHVybiAkdGVtcDsNCgkJIA0KCX0NCgkNCiAgICAvKioNCiAgICAgKiBnZXQgVXBsb2FkIE1vdmUNCiAgICAgKiBpdCB3aWxsIHVwbG9hZCBmaWxlLg0KICAgICAqIA0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUNCiAgICAgKiBAcmV0dXJuIGFycmF5DQogICAgICoNCiAgICAgKi8NCgkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3VwbG9hZF9tb3ZlKCAkbmFtZSA9IEZBTFNFICkgeyANCgkJcmV0dXJuICR0aGlzLT5zZXRfdXBsb2FkX21vdmUoICRuYW1lICk7CSANCgl9DQoNCgkvKioNCgkgKiBkZXN0cnVjdG9yDQoJICoNCgkgKi8NCgkNCglwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpIHsNCgl9DQoNCn0gLy8gVXBVcGxvYWQNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/UpUtils.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgJElkOiBVcFV0aWxzLm1vZHVsZS5waHAgMzQgMjAxMy0wNC0xOCAxNzowMDoyMlogYXJub3VkICQgCgojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBVdGlscyAoYykgMjAxMS0yMDEyIGJ5IEFybm91ZCB2YW4gU3VzdGVyZW4gKGFybm91ZEB1cHNlcnZpY2UubmwpCiMKIyBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBsb2FkIGdlbmVyaWMgY2xhc3NlcyAvIHV0aWxpdGllcwojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgVXBVdGlscyBleHRlbmRzIENNU01vZHVsZSB7CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsKICAgICAgICAKICAgICAgICBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJHRoaXMsJ2F1dG9sb2FkJykpOwogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsgICAKICAgICAgICAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBhdXRvbG9hZCBtZXRob2QKICAgICAqIEBwYXJhbSAkY2xhc3NuYW1lIC0gc3RyaW5nCiAgICAgKiBAcmV0dXJuIHRydWV8ZmFsc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGF1dG9sb2FkKCRjbGFzc25hbWUpIHsKICAgICAKICAgICAgICBpZiAoICFpc19vYmplY3QoJHRoaXMpICkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIFVwVXRpbHMgbGlicwogICAgICAgIAogICAgICAgIGlmIChwcmVnX21hdGNoKCcvREFPJC8nLCRjbGFzc25hbWUpICkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRmbiA9ICR0aGlzLT5HZXRNb2R1bGVQYXRoKCkuIi9saWIvY2xhc3Nlcy97JGNsYXNzbmFtZX0uY2xhc3MucGhwIjsKICAgICAgICAKICAgICAgICBpZiAoIGZpbGVfZXhpc3RzKCRmbikgKSB7CiAgICAgICAgICAgIHJlcXVpcmVfb25jZSgkZm4pOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgCiAgICB9CiAgICAKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNHZXROYW1lCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXROYW1lKCkgeyByZXR1cm4gJ1VwVXRpbHMnOyB9CiAgICAKICAgIC8qKgogICAgICogQGxpbmsgaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hcGlkb2MvQ01TL0NNU01vZHVsZS5odG1sI0dldEZyaWVuZGx5TmFtZQogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9CiAgICAKICAgIC8qKgogICAgICogQGxpbmsgaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hcGlkb2MvQ01TL0NNU01vZHVsZS5odG1sI0dldFZlcnNpb24KICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMC4wLjYnOyB9CiAgICAKICAgIC8qKgogICAgICogQGxpbmsgaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hcGlkb2MvQ01TL0NNU01vZHVsZS5odG1sI01pbmltdW1DTVNWZXJzaW9uCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcxLjEwLjMnOyB9CiAgICAKICAgIC8qKgogICAgICogQGxpbmsgaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hcGlkb2MvQ01TL0NNU01vZHVsZS5odG1sI01heGltdW1DTVNWZXJzaW9uCiAgICAgKiBAaWdub3JlCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICAvKiBwdWJsaWMgZnVuY3Rpb24gTWF4aW11bUNNU1ZlcnNpb24oKSB7IHJldHVybiAiMS4xMC45IjsgfSAqLwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hcGlkb2MvQ01TL0NNU01vZHVsZS5odG1sI0dldEhlbHAKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSB7CiAgICAgICAgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKGRpcm5hbWUoX19GSUxFX18pLicvaGVscC5pbmMnKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBAbGluayBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2FwaWRvYy9DTVMvQ01TTW9kdWxlLmh0bWwjR2V0QXV0aG9yCiAgICAgKiBAaWdub3JlCiAgICAgKi8gIAogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdBcm5vdWQgdmFuIFN1c3RlcmVuJzsgfQogICAgCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNHZXRBdXRob3JFbWFpbAogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnYXJub3VkQHVwc2VydmljZS5ubCc7IH0KICAgIAogICAgLyoqCiAgICAgKiBAbGluayBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2FwaWRvYy9DTVMvQ01TTW9kdWxlLmh0bWwjR2V0Q2hhbmdlTG9nCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7IHJldHVybiBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2NoYW5nZWxvZy5pbmMnKTsgfQogICAgCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNIYW5kbGVzRXZlbnRzCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIGZ1bmN0aW9uIEhhbmRsZXNFdmVudHMoKSB7IHJldHVybiBmYWxzZTt9CiAgICAKICAgIC8vIHB1YmxpYyBmdW5jdGlvbiBHZXRFdmVuRGVzY3JpcHRpb24oKSB7fQogICAgCiAgICAvLyBwdWJsaWMgZnVuY3Rpb24gR2V0RXZlbnRIZWxwKCkge30KICAgIAogICAgLyoqCiAgICAgKiBAbGluayBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2FwaWRvYy9DTVMvQ01TTW9kdWxlLmh0bWwjSXNQbHVnaW5Nb2R1bGUKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgIAogICAgLyoqCiAgICAgKiBAbGluayBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2FwaWRvYy9DTVMvQ01TTW9kdWxlLmh0bWwjSGFzQWRtaW4KICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgIAogICAgLy8gcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHt9CiAgICAgICAgCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNHZXRBZG1pbkRlc2NyaXB0aW9uCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2FkbWluZGVzY3JpcHRpb24nKTsgfQogICAgCiAgICAvLyBwdWJsaWMgZnVuY3Rpb24gVmlzaWJpbGVUb0FkbWluVXNlcigpIHt9CiAgICAKICAgIC8vIHB1YmxpYyBmdW5jdGlvbiBDaGVja0FjY2VzcygpIHt9CiAgICAKICAgIC8vIHB1YmxpYyBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKSB7IH0KICAgIAogICAgLy8gcHVibGljIGZ1bmN0aW9uIEluc3RhbGwoKSB7fQogICAgCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNJbnN0YWxsUG9zdE1lc3NhZ2UKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyB9CiAgICAKICAgIC8vcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2FwaWRvYy9DTVMvQ01TTW9kdWxlLmh0bWwjVW5pbnN0YWxsUG9zdE1lc3NhZ2UKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsgfQogICAgCiAgICAvL3B1YmxpYyBmdW5jdGlvbiBVcGdyYWRlKCRvbGR2ZXJzaW9uLCAkbmV3dmVyc2lvbikge30KCgoKCgoKfSAvLyBVcFV0aWxzCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
</module>
