Login   Register  
PHP Classes
elePHPant
Icontem

File: lib/start.inc.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Roman Shneer  >  PHP Security Scanner  >  lib/start.inc.php  >  Download  
File: lib/start.inc.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Security Scanner
Stop security attacks blocking malicious values
Author: By
Last change:
Date: 1 year ago
Size: 14,072 bytes
 

Contents

Class file image Download
<?
/**
*Class Start - P.W.S.M.
*templates and auth functions
*Author Roman Shneer romanshneer@gmail.com
*1.02.2012
*Any changes at your risk and criminal responsibility
*/
eval(base64_decode('c2Vzc2lvbl9zdGFydCgpOw0KQ2xhc3MgU3RhcnR7DQp2YXIgJGRiOw0KDQp2YXIgJHRydXN0LCRsaWNlbnNlX2tleTsNCglmdW5jdGlvbiBjaGtfaW5zdGFsbGF0aW9uX2xvZ2luKCkNCgl7DQoNCg0KCWlmKCEkdGhpcy0+Y2hrX2NvbmZpZygpKSR0aGlzLT5zZW5kMndpc2FyZCgpOw0KDQoJaWYoISR0aGlzLT5jaGtfZGIoKSkkdGhpcy0+c2VuZDJ3aXNhcmQoKTsNCg0KCWlmKCEkdGhpcy0+Y2hrX3VzZXIoKSkkdGhpcy0+c2VuZDJsb2dpbigpOw0KDQoJJHRoaXMtPnRydXN0PSR0aGlzLT5jaGtfbHVzZXIoKTsNCgkjcHJpbnQgJHRoaXMtPnRydXN0LiI8aHI+IjsNCglyZXR1cm4gdHJ1ZTsNCgl9DQogICAgZnVuY3Rpb24gY2hrX2luc3RhbGxhdGlvbigpDQoJew0KDQoJaWYoISR0aGlzLT5jaGtfY29uZmlnKCkpJHRoaXMtPnNlbmQyd2lzYXJkKCk7DQoJaWYoISR0aGlzLT5jaGtfZGIoKSkkdGhpcy0+c2VuZDJ3aXNhcmQoKTsNCiAgICAgcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gc2VuZDJsb2dpbigpDQoJew0KICAgIGhlYWRlcigiTG9jYXRpb246bG9naW4vIik7DQoJfQ0KCWZ1bmN0aW9uIGNoa19jb25maWcoKQ0KCXsNCglpZighZmlsZV9leGlzdHMoImNvbmYvY29uZmlnLnBocCIpJiYhZmlsZV9leGlzdHMoIi4uL2NvbmYvY29uZmlnLnBocCIpKXJldHVybiBmYWxzZTsNCgllbHNlIHJldHVybiB0cnVlOw0KCX0NCglmdW5jdGlvbiBjaGtfdXNlcigpDQoJew0KCWlmKChpc3NldCgkX1NFU1NJT05bJ3VzZXInXSkpfHwoaXNzZXQoJF9TRVNTSU9OWydpbnN0YWxsJ10pJiYoJF9TRVNTSU9OWydpbnN0YWxsJ11bJ3N0ZXAnXT09NSkpKQ0KICAgIAl7DQogICAgCXJldHVybiB0cnVlOw0KICAgIAl9ZWxzZSByZXR1cm4gZmFsc2U7DQoJfQ0KCWZ1bmN0aW9uIGNoa19sdXNlcigpDQoJew0KCQ0KCWdsb2JhbCAkbWVtY2FjaGVfb2JqOw0KCSRrZXlfZmlsZT0nY29uZi9saWNlbnNlLnBocCc7DQoJaWYoIWZpbGVfZXhpc3RzKCRrZXlfZmlsZSkpJGtleV9maWxlPScuLi9jb25mL2xpY2Vuc2UucGhwJzsNCglpZihmaWxlX2V4aXN0cygka2V5X2ZpbGUpKQ0KCXsNCglpbmNsdWRlX29uY2UgJGtleV9maWxlOw0KCSR0aGlzLT5saWNlbnNlX2tleT0kbGljZW5zZV9rZXk7DQoJDQoJI3ByaW50IGZpbGVfZXhpc3RzKCcvdG1wL3RydXN0X3B3c21fJy51cmxlbmNvZGUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKTsNCglpZihmaWxlX2V4aXN0cygnL3RtcC90cnVzdF9wd3NtXycudXJsZW5jb2RlKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSkmJihmaWxlX2dldF9jb250ZW50cygnL3RtcC90cnVzdF9wd3NtXycudXJsZW5jb2RlKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSk+MCkpDQoJew0KCSANCgkjcHJpbnQgZmlsZV9nZXRfY29udGVudHMoJy90bXAvdHJ1c3RfcHdzbV8nLnVybGVuY29kZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkpOw0KCSNkaWUoJy90bXAvdHJ1c3RfcHdzbV8nLnVybGVuY29kZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkuJzxocj4nKTsNCgkkdHJ1c3Q9ZmlsZV9nZXRfY29udGVudHMoJy90bXAvdHJ1c3RfcHdzbV8nLnVybGVuY29kZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkpOw0KCQ0KCX1lbHNlew0KCSRjaGtfdXJsPSdodHRwOi8vcm9tYW5zaG5lZXIuaW5mby9wd3NtL2Noay5waHA/a2V5PScuJGxpY2Vuc2Vfa2V5Ow0KCSNwcmludCAkY2hrX3VybC4iPGhyPiI7DQoJJGFuc3dlcj0kdGhpcy0+cmVxdWVzdCgkY2hrX3VybCk7DQoJI2RpZSgkYW5zd2VyLiI8aHI+Iik7DQoJJHRydXN0PSgoJGFuc3dlcj09J3RydWUnKT90cnVlOmZhbHNlKTsNCgl9DQoNCgl9ZWxzZSAkdHJ1c3Q9ZmFsc2U7DQoNCgkkdGhpcy0+Y3JlYXRlX3RtcF90cnVzdCgkdHJ1c3QpOw0KDQoJJHRoaXMtPnRydXN0PSR0cnVzdDsNCglyZXR1cm4gJHRydXN0Ow0KCX0NCglmdW5jdGlvbiBjcmVhdGVfdG1wX3RydXN0KCR0cnVzdCkNCgl7DQoJaWYoaXNfd3JpdGFibGUoIi90bXAvIikpDQoJew0KCSR0bXBfbmFtZT0nL3RtcC90cnVzdF9wd3NtXycudXJsZW5jb2RlKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTsNCgkkZj1mb3BlbigkdG1wX25hbWUsIncrIik7DQoJJHJlcz1md3JpdGUoJGYsJHRydXN0KTsNCglmY2xvc2UoJGYpOw0KCSNkaWUoJHRtcF9uYW1lKTsNCgl9DQoJfQ0KCWZ1bmN0aW9uIGNoa19kYigpDQoJew0KDQoJaWYoaXNzZXQoJHRoaXMtPmRiKSlyZXR1cm4gJHRoaXMtPmRiOw0KDQogICAgaWYoZmlsZV9leGlzdHMoImNvbmYvY29uZmlnLnBocCIpKQ0KICAgIHsNCg0KICAgIGluY2x1ZGVfb25jZSgiY29uZi9jb25maWcucGhwIik7DQoNCiAgICBpbmNsdWRlX29uY2UgJ2xpYi8nLiRkYl90eXBlLicvZGIuaW5jLnBocCc7DQoNCiAgICB9ZWxzZWlmKGZpbGVfZXhpc3RzKCIuLi9jb25mL2NvbmZpZy5waHAiKSl7DQoNCiAgICBpbmNsdWRlX29uY2UoIi4uL2NvbmYvY29uZmlnLnBocCIpOw0KDQogICAgaW5jbHVkZV9vbmNlICcuLi9saWIvJy4kZGJfdHlwZS4nL2RiLmluYy5waHAnOw0KICAgICNkaWUoJGRiX3R5cGUuIlhYPGhyPiIpOw0KICAgIH0NCg0KICAgICRkYj1uZXcgREIoJGRiX2hvc3QsJGRiX25hbWUsJGRiX3VzZXIsJGRiX3Bhc3MpOw0KDQogICAgJHRoaXMtPmRiPSRkYjsNCiNkaWUoJGRiKTsNCiAgICByZXR1cm4gJGRiOw0KCX0NCglmdW5jdGlvbiByZXF1ZXN0KCR1cmwpeyRjaCA9IGN1cmxfaW5pdCgpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIDApO2N1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7JGh0bWw9Y3VybF9leGVjKCRjaCk7Y3VybF9jbG9zZSgkY2gpO3JldHVybiAkaHRtbDt9DQoJZnVuY3Rpb24gc2VuZDJ3aXNhcmQoKQ0KCXsNCgkkYXJyPWV4cGxvZGUoIi8iLCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKTsNCglpZihpbl9hcnJheSgnbG9naW4nLCRhcnIpKQ0KCXsNCglhcnJheV9wb3AoJGFycik7YXJyYXlfcG9wKCRhcnIpOw0KCX1lbHNlew0KCWFycmF5X3BvcCgkYXJyKTsNCgl9DQoJJGFycltdPSdpbnN0YWxsJzsNCgkkdXJsX3N0cmluZz1pbXBsb2RlKCIvIiwkYXJyKS4iLyI7DQoJaGVhZGVyKCJMb2NhdGlvbjoiLiR1cmxfc3RyaW5nKTsNCgl9DQoJZnVuY3Rpb24gbG9naW5fZm9ybSgpDQoJew0KCSRodG1sPScnOw0KDQoJCWlmKGlzc2V0KCRfUE9TVFsnbmFtZSddKSYmaXNzZXQoJF9QT1NUWydwYXNzd29yZCddKSkNCgkJew0KICAgIAkkZGI9JHRoaXMtPmRiOw0KICAgIAkkdXNlcj0kZGItPlJPV19RKCJTRUxFQ1QgKiBGUk9NIHB3c21fdXNlcnMgd2hlcmUgbmFtZT0nIi4kZGItPlEoJF9QT1NUWyduYW1lJ10sMSkuIicgQU5EIHBhc3M9JyIubWQ1KCRkYi0+USgkX1BPU1RbJ3Bhc3N3b3JkJ10sMSkpLiInIik7DQoNCiAgICAJaWYoJHVzZXIpDQogICAgCXsNCiAgICAJCSRfU0VTU0lPTlsndXNlciddPSR1c2VyOw0KDQogICAgCQloZWFkZXIoIkxvY2F0aW9uOiIuc3Vic3RyKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLDAsc3RybGVuKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKS02KSk7DQoJCWV4aXQoKTsNCiAgICAJCSMNCg0KICAgIAl9ZWxzZXsNCiAgICAJJGh0bWwuPSc8ZGl2IGNsYXNzPSJtZXNzYWdlIGVycm9yIj5Xcm9uZyB1c2VybmFtZSBvciBwYXNzd29yZDwvZGl2Pic7DQogICAgCX0NCg0KCQl9DQogIAkkaHRtbC49JzxkaXYgY2xhc3M9ImJveCIgc3R5bGU9Im1hcmdpbjowIGF1dG87d2lkdGg6MzAwcHg7Ij48Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJQT1NUIj4NCgkJCTx0YWJsZT4NCiAgCQkJPHRyPjx0ZCBjb2xzcGFuPTI+Jy4kdGhpcy0+ZHJhd19zaWduNGllKCJVc2VyTmFtZSIpLic8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmFtZSIgIHBsYWNlaG9sZGVyPSJVc2VyTmFtZSIgIGlkPSJ1c2VyX25hbWUiPjwvdGQ+PC90cj4NCiAgCQkJPHRyPjx0ZCBjb2xzcGFuPTI+Jy4kdGhpcy0+ZHJhd19zaWduNGllKCJQYXNzd29yZCIpLic8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiICBpZD0idXNlcl9wYXNzd29yZCI+PC90ZD48L3RyPg0KICAJCQk8dHI+PHRkPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTaWduSW4iIGNsYXNzPSJncmVlbl9jbCBidG4iPjwvdGQ+PHRkPjxhIGhyZWY9ImxvZ2luLz9hY3Q9cmVzdG9yZSIgY2xhc3M9ImdyYXlfY2wgYnRuIj5SZXN0b3JlIHBhc3N3b3JkPC9hPjwvdGQ+PC90cj4NCiAgCQkJPC90YWJsZT48L2Zvcm0+PC9kaXY+JzsNCiAgCXJldHVybiAkaHRtbDsNCgl9DQoJZnVuY3Rpb24gZHJhd19zaWduNGllKCRwbGFjZWhvbGRlcikNCgl7DQoJIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pICYmIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAnTVNJRScpICE9PSBmYWxzZSkpDQoJIHsNCgkgICAgICByZXR1cm4gIjxiPiIuJHBsYWNlaG9sZGVyLiI8L2I+ICI7DQoJIH0NCgl9DQoJZnVuY3Rpb24gcmVzdG9yZW5vd19mb3JtKCRrZXkpDQoJew0KCSRzcWw9IlNFTEVDVCAgKiBGUk9NIHB3c21fdXNlcnMgV0hFUkUgbWQ1KENPTkNBVChDT05DQVQobmFtZSxlbWFpbCksY3JlYXRlZCkpPSciLiR0aGlzLT5kYi0+USgka2V5KS4iJyBBTkQgY2hnX3Bhc3NfdGltZT4iLnN0cnRvdGltZSgiLTIgaG91cnMiKTsNCg0KCSR1c2VyPSR0aGlzLT5kYi0+Uk9XX1EoJHNxbCk7DQoJaWYoaXNzZXQoJF9QT1NUWydvcCddKSkNCgkJew0KCQkkdGhpcy0+ZGItPlFVRVJZKCJVUERBVEUgcHdzbV91c2VycyBTRVQgcGFzcz0nIi5tZDUoJF9QT1NUWydwYXNzd29yZDEnXSkuIicgV0hFUkUgaWQ9Ii4kdXNlclsnaWQnXSk7DQoJCSRodG1sPSc8ZGl2PlBhc3N3b3JkIGNoYW5nZWQsIG5vdyB0cnkgZ28gdG8gbG9naW4gcGFnZSA8YSBocmVmPSJsb2dpbi8iPkJhY2sgdG8gTG9naW4gcGFnZTwvYT48L2Rpdj4nOw0KCQl9ZWxzZXsNCgkkaHRtbD0nPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iUE9TVCIgbmFtZT0icGFzc19jaGciPjx0YWJsZT4nIC4NCgkJCSc8dHI+PHRkPlR5cGUgUGFzc3dvcmQ6PC90ZD48dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZDEiPjwvdGQ+PC90cj4nIC4NCgkJCSc8dHI+PHRkPlJlVHlwZSBQYXNzd29yZDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkMiI+PC90ZD48L3RyPicgLg0KCQkJJzx0cj48dGQgY29sc3Bhbj0yPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9Im9wIiB2YWx1ZT0idXBkYXRlIiBvbkNsaWNrPSJyZXR1cm4gY2hrX3Bhc3NfY2hnX2Zvcm0oKTsiPjwvdGQ+PC90cj4nIC4NCg0KCQkJJzwvdGFibGU+PC9mb3JtPic7DQoJCX0NCglyZXR1cm4gJGh0bWw7DQoJfQ0KICAgIGZ1bmN0aW9uICByZXN0b3JlX2Zvcm0oKQ0KICAgIHsNCiAgICAkaHRtbD0nJzsNCiAgICBpZihpc3NldCgkX1BPU1RbJ2VtYWlsJ10pKQ0KICAgIHsNCiAgICAJJHNxbD0iU0VMRUNUICogRlJPTSBwd3NtX3VzZXJzIFdIRVJFIGVtYWlsPSciLiR0aGlzLT5kYi0+USgkX1BPU1RbJ2VtYWlsJ10pLiInIjsNCiAgICAJJHVzZXI9JHRoaXMtPmRiLT5ST1dfUSgkc3FsKTsNCiAgICAJaWYoJHVzZXJbJ2lkJ10pDQogICAgCXsNCiAgICAJJHN1YmplY3Q9IllvdSggb3Igc29tZWJvZHkpIHRyeSB1c2UgbW9kdWxlIGZvcmdldCBwYXNzd29yZCBvbiBzeXN0ZW0gUFNTIG9mICIuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10uIiBTRVJWRVIiOw0KICAgIAkkYm9keT0iWW91KCBvciBzb21lYm9keSkgdHJ5IHVzZSBtb2R1bGUgZm9yZ2V0IHBhc3N3b3JkIG9uIHN5c3RlbSBQU1Mgb2YgIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4iIFNFUlZFUjxicj4iOw0KICAgIAkkYm9keS49IklmIGl0J3MgdHJ1ZSwgY29udGludWUgd2l0aCB0ZW1wb3Jhcnkgc2VjdXJlIGxpbmsgZm9yIGNoYW5nZSBwYXNzd29yZCBpcyB2YWxpZCAyIGhvdXJzPGJyPiI7DQogICAgCSRib2R5Lj0kdGhpcy0+Y3JlYXRlX3NlY3VyZV9mb3Jnb3RfbGluaygkdXNlcik7DQogICAgCSNkaWUoJGJvZHkpOw0KICAgIAltYWlsKCR1c2VyWydlbWFpbCddLCRzdWJqZWN0LCRib2R5KTsNCiAgICAJJHRoaXMtPmRiLT5RVUVSWSgiVVBEQVRFIHB3c21fdXNlcnMgU0VUIGNoZ19wYXNzX3RpbWU9Ii50aW1lKCkuIiBXSEVSRSBpZD0iLiR0aGlzLT5kYi0+USgkdXNlclsnaWQnXSkpOw0KICAgIAkkaHRtbC49JzxkaXYgY2xhc3M9Im1lc3NhZ2UiPjxiPkUtbWFpbCBzZW5kZWQsIHBsZWFzZSBjaGVjayB5b3VyIGluY29taW5nIGJveDxicj48YSBocmVmPSJsb2dpbi8iPkJhY2sgdG8gTG9naW4gcGFnZTwvYT48L2I+PC9kaXY+JzsgICAgCSRzZW5kZWQ9dHJ1ZTsNCiAgICAJfWVsc2V7DQogICAgCSRodG1sLj0nPGRpdiBjbGFzcz0iZXJyb3IiPlVzZXIgbm90IGZvdW5kITwvZGl2Pic7DQogICAgCX0NCg0KICAgIH0NCiAgICBpZighaXNzZXQoJHNlbmRlZCkpDQogICAgew0KICAgICRodG1sLj0nPGRpdiBjbGFzcz0iYm94IiBzdHlsZT0id2lkdGg6NDAwcHg7bWFyZ2luOjAgYXV0bzsiPjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9IlBPU1QiPg0KICAgIAkJPHRhYmxlIGJvcmRlcj0wIHdpZHRoPSI0MDAiPg0KICAJCQk8Y2FwdGlvbj48Yj5SZXN0b3JlIHVzZXIgcGFzc3dvcmQgYnkgZW1haWw8L2I+PC9jYXB0aW9uPg0KICAJCQk8dHI+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJlbWFpbCIgcGxhY2Vob2xkZXI9IlVzZXIgRW1haWwiPjwvdGQ+PC90cj4NCiAgCQkJPHRyPjx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0icmVtZW1iZXIgcGFzc3dvcmQiIGNsYXNzPSJncmVlbl9jbCBidG4iPjwvdGQ+PHRkPjxhIGhyZWY9ImxvZ2luLyI+QmFjayB0byBMb2dpbiBwYWdlPC9hPjwvdGQ+PC90cj4NCiAgCQkJPC90YWJsZT48L2Zvcm0+PC9kaXY+JzsNCg0KICAgIH0NCiAgCXJldHVybiAkaHRtbDsNCiAgICB9DQogICAgZnVuY3Rpb24gY3JlYXRlX3NlY3VyZV9mb3Jnb3RfbGluaygkdXNlcikNCgl7DQoJI3BocGluZm8oKTsNCgkkdXJsPSdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS5zdWJzdHIoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sMCxzdHJwb3MoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sIj8iKSkuIj9hY3Q9cmVzdG9yZW5vdyZrZXk9Ii5tZDUoJHVzZXJbJ25hbWUnXS4kdXNlclsnZW1haWwnXS4kdXNlclsnY3JlYXRlZCddKTsNCglyZXR1cm4gJzxhIGhyZWY9IicuJHVybC4nIj4nLiR1cmwuJzwvYT4nOw0KCX0NCglmdW5jdGlvbiB0ZW1wbGF0ZV9odG1sKCRoZWFkZXJzLCRjb250ZW50cykNCgl7DQojCXByaW50X3IoJF9TRVJWRVIpOw0KICAgICRodG1sPSc8aHRtbD4NCiAgICA8dGl0bGU+UEhQIFdlYiBTZWN1cml0eSBNb25pdG9yIC0gJy4kaGVhZGVyc1sndGl0bGUnXS4nPC90aXRsZT4NCg0KICAgIDxoZWFkPg0KICAgIDxNRVRBIE5BTUU9ZGVzY3JpcHRpb24gQ09OVEVOVD0iJy4kaGVhZGVyc1snZGVzY3JpcHRpb24nXS4nIj4NCiAgICA8TUVUQSBOQU1FPWtleXdvcmRzIENPTlRFTlQ9IicuJGhlYWRlcnNbJ2tleXdvcmRzJ10uJyI+DQogICAgPE1FVEEgTkFNRT1yb2JvdHMgQ09OVEVOVD0ibm9pbmRleCxmb2xsb3ciPg0KICAgICc7DQogICAgaWYoZmlsZV9leGlzdHMoIi4uL2NvbmYvY29uZmlnLnBocCIpKQ0KICAgIHsNCiAgICAkaHRtbC49JzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlLmNzcy5waHAiIC8+DQogICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi9saWIuanMiPjwvc2NyaXB0Pg0KICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iLi4vZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiI+DQogICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIuLi9mYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4nOw0KICAgICRodG1sLj0nPGJhc2UgaHJlZj0iLi4vIj4nOw0KICAgIH1lbHNlew0KICAgICRodG1sLj0nPGxpbmsgcmVsPSJpY29uIiBocmVmPSJmYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4NCjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiI+JzsNCiAgICB9DQogICAgJGh0bWwuPScNCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZS5jc3MucGhwIiAvPg0KICAgIA0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LWxhdGVzdC5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSJsaWIuanMiPjwvc2NyaXB0Pic7DQoNCiAgICAkaHRtbC49JzwvaGVhZD4NCiAgICA8Ym9keT4NCgk8ZGl2IGNsYXNzPSJjb250ZW50Ij4NCiAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPjxhIGhyZWY9Imh0dHA6Ly9yb21hbnNobmVlci5pbmZvL3B3c20vIj48aW1nIHNyYz0iaHR0cDovL3JvbWFuc2huZWVyLmluZm8vcHdzbS9sb2dvMS5wbmciIGNsYXNzPSJsb2dvIj48L2E+DQogICAgPGRpdj48aDE+UEhQIFdlYiBTZWN1cml0eSBNb25pdG9yIC0gJy4kaGVhZGVyc1sndGl0bGUnXS4nPC9oMT48L2Rpdj4NCiAgICAnLihpc3NldCgkaGVhZGVyc1snaGVhZGVyJ10pPyRoZWFkZXJzWydoZWFkZXInXTonJykNCiAgICAuKCgkdGhpcy0+dHJ1c3QhPXRydWUpPyc8aDMgY2xhc3M9ImVycm9yIj48YSBocmVmPSI/cT1hYm91dCI+UGxlYXNlIGJ1eSBzb2Z0d2FyZTwvYT48L2gzPic6JycpDQogICAgLic8L2Rpdj4nOw0KICAgIGlmKGNvdW50KCRjb250ZW50cykpZm9yZWFjaCgkY29udGVudHMgYXMgJGNvbnRlbnQpDQogICAgCSRodG1sLj0nPGRpdiBjbGFzcz0icm93MSI+Jy4kY29udGVudC4nPC9kaXY+JzsNCiAgICAkaHRtbC49JzwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+Jy4kaGVhZGVyc1snZm9vdGVyJ10uJzwvZGl2Pg0KICAgIDwvYm9keT48L2h0bWw+JzsNCg0KICAgIHJldHVybiAkaHRtbDsNCgl9DQoJZnVuY3Rpb24gdGVtcGxhdGVfaHRtbDRpbnN0YWxsKCRjb250ZW50cykNCgl7DQogICAgJGh0bWw9JzxodG1sPg0KICAgIDx0aXRsZT5QSFAgV2ViIFNlY3VyaXR5IE1vbml0b3IgLSBJbnN0YWxsYXRpb24gV2lzYXJkPC90aXRsZT4NCg0KICAgIDxoZWFkPg0KICAgIDxNRVRBIE5BTUU9cm9ib3RzIENPTlRFTlQ9Im5vaW5kZXgsZm9sbG93Ij4NCiAgICAnOw0KICAgICRoZWFkZXJzWydmb290ZXInXT0nQ29waXJpZ2h0IDIwMTIsUEhQIFdlYiBTZWN1cml0eSBNb25pdG9yICAgPGEgaHJlZj0ibWFpbHRvOnNoYW1hbjMzQGdtYWlsLmNvbSI+Q29udGFjdDwvYT4nOw0KICAgICRodG1sLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUuY3NzIiAvPg0KICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vbGliLmpzIj48L3NjcmlwdD4NCiAgICA8L2hlYWQ+DQogICAgPGJvZHk+DQogICAgPGRpdiBjbGFzcz0iaGVhZGVyIj48YSBocmVmPSJodHRwOi8vcm9tYW5zaG5lZXIuaW5mby9wd3NtLyIgdGl0bGU9IlBIUCBXZWIgU2VjdXJpdHkgTW9uaXRvciI+PGltZyBzcmM9Imh0dHA6Ly9yb21hbnNobmVlci5pbmZvL3B3c20vbG9nbzEucG5nIiBjbGFzcz0ibG9nbyIgdGl0bGU9IlBIUCBXZWIgU2VjdXJpdHkgTW9uaXRvciIgYWx0PSJQSFAgV2ViIFNlY3VyaXR5IE1vbml0b3IiPjwvYT4NCiAgICA8aDE+UEhQIFdlYiBTZWN1cml0eSBNb25pdG9yIC0gSW5zdGFsbGF0aW9uIFdpc2FyZDwvaDE+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0iY29udGVudCI+JzsNCiAgICBpZihjb3VudCgkY29udGVudHMpKWZvcmVhY2goJGNvbnRlbnRzIGFzICRjb250ZW50KQ0KICAgIAkkaHRtbC49JzxkaXYgY2xhc3M9InJvdyI+Jy4kY29udGVudC4nPC9kaXY+JzsNCiAgICAkaHRtbC49JzwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+Jy4kaGVhZGVyc1snZm9vdGVyJ10uJzwvZGl2Pg0KICAgIDwvYm9keT48L2h0bWw+JzsNCg0KICAgIHJldHVybiAkaHRtbDsNCgl9DQoJZnVuY3Rpb24gbGV0dGVyX2Zyb21fcGFzdCgpDQoJew0KCQlpZihpc3NldCgkX1NFU1NJT05bJ2Vycm9yJ10pKQ0KCQl7DQoJCSRtc2c9JF9TRVNTSU9OWydlcnJvciddOw0KICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2Vycm9yJ10pOw0KICAgICAgICByZXR1cm4gJG1zZzsNCgkJfQ0KCQlpZihpc3NldCgkX1NFU1NJT05bJ21zZyddKSkNCgkJew0KCQkkbXNnPSRfU0VTU0lPTlsnbXNnJ107DQogICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnbXNnJ10pOw0KICAgICAgICByZXR1cm4gJG1zZzsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoNCn0='));
?>