-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathinstall.php
executable file
·202 lines (149 loc) · 27.6 KB
/
install.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<?php
header('Expires: Mon, 12 Dec 1982 06:14:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
function __errorHandler($errno=NULL, $errstr, $errfile=NULL, $errline=NULL, $errcontext=NULL){
return;
}
error_reporting(E_ALL ^ E_NOTICE);
set_error_handler('__errorHandler');
define('kBUILD', '375');
define('kVERSION', '2.0.2');
define('kINSTALL_ASSET_LOCATION', './symphony/assets/installer');
define('kINSTALL_FILENAME', basename(__FILE__));
## Show PHP Info
if(isset($_REQUEST['info'])){
phpinfo();
exit();
}
function setLanguage() {
require_once('symphony/lib/toolkit/class.lang.php');
$lang = NULL;
if(!empty($_REQUEST['lang'])){
$l = preg_replace('/[^a-zA-Z\-]/', '', $_REQUEST['lang']);
if(file_exists("./symphony/lib/lang/lang.{$l}.php")) $lang = $l;
}
if($lang === NULL){
foreach(Lang::getBrowserLanguages() as $l){
if(file_exists("./symphony/lib/lang/lang.{$l}.php")) $lang = $l;
break;
}
}
## none of browser accepted languages is available, get first available
if($lang === NULL){
## default to English
if(file_exists('./symphony/lib/lang/lang.en.php')) $lang = 'en';
else{
$l = Lang::getAvailableLanguages();
if(is_array($l) && count($l) > 0) $lang = $l[0];
}
}
if($lang === NULL) return NULL;
try{
Lang::init('./symphony/lib/lang/lang.%s.php', $lang);
}
catch(Exception $s){
return NULL;
}
define('__LANG__', $lang);
return $lang;
}
/***********************
TESTS
************************/
// Check for PHP 5.1+
if(version_compare(phpversion(), '5.1.3', '<=')){
$code = '<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Outstanding Requirements</title>
<link rel="stylesheet" type="text/css" href="'.kINSTALL_ASSET_LOCATION.'/main.css"/>
<script type="text/javascript" src="'.kINSTALL_ASSET_LOCATION.'/main.js"></script>
</head>
<body>
<h1>Install Symphony <em>Version '.kVERSION.'</em></h1>
<h2>Outstanding Requirements</h2>
<p>Symphony needs the following requirements satisfied before installation can proceed.</p>
<dl>
<dt><abbr title="PHP: Hypertext Pre-processor">PHP</abbr> 5.1.3 or above</dt>
<dd>Symphony needs a recent version of <abbr title="PHP: Hypertext Pre-processor">PHP</abbr>.</dd>
</dl>
</body>
</html>';
die($code);
}
// Check and set language
if(setLanguage() === NULL){
$code = '<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Outstanding Requirements</title>
<link rel="stylesheet" type="text/css" href="'.kINSTALL_ASSET_LOCATION.'/main.css"/>
<script type="text/javascript" src="'.kINSTALL_ASSET_LOCATION.'/main.js"></script>
</head>
<body>
<h1>Install Symphony <em>Version '.kVERSION.'</em></h1>
<h2>Outstanding Requirements</h2>
<p>Symphony needs at least one language file to be present before installation can proceed.</p>
</body>
</html>';
die($code);
}
// Check if Symphony is already installed
if(file_exists('manifest/config.php')){
$code = '<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>'.__('Existing Installation').'</title>
<link rel="stylesheet" type="text/css" href="'.kINSTALL_ASSET_LOCATION.'/main.css"/>
<script type="text/javascript" src="'.kINSTALL_ASSET_LOCATION.'/main.js"></script>
</head>
<body>
<h1>'.__('Install Symphony <em>Version %s</em>', array(kVERSION)).'</h1>
<h2>'.__('Existing Installation').'</h2>
<p>'.__('It appears that Symphony has already been installed at this location.').'</p>
</body>
</html>';
die($code);
}
/////////////////////////
function getDynamicConfiguration(){
$conf = array();
$conf['admin']['max_upload_size'] = '5242880';
$conf['symphony']['pagination_maximum_rows'] = '17';
$conf['symphony']['allow_page_subscription'] = '1';
$conf['symphony']['lang'] = 'en';
$conf['symphony']['version'] = '2.0.2';
$conf['log']['archive'] = '1';
$conf['log']['maxsize'] = '102400';
$conf['image']['cache'] = '1';
$conf['image']['quality'] = '90';
$conf['database']['driver'] = 'mysql';
$conf['database']['character_set'] = 'utf8';
$conf['database']['character_encoding'] = 'utf8';
$conf['database']['runtime_character_set_alter'] = '1';
$conf['database']['disable_query_caching'] = 'no';
$conf['public']['display_event_xml_in_source'] = 'no';
$conf['general']['sitename'] = 'Fluid 960 Grid System';
$conf['region']['time_format'] = 'g:i a';
$conf['region']['date_format'] = 'd F Y';
return $conf;
}
function getTableSchema(){
$sql = <<<SQL
DQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2F1dGhvcnNgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9hdXRob3JzYDsNCkNSRUFURSBUQUJMRSBgdGJsX2F1dGhvcnNgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYHVzZXJuYW1lYCB2YXJjaGFyKDIwKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBwYXNzd29yZGAgdmFyY2hhcigzMikgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgZmlyc3RfbmFtZWAgdmFyY2hhcigxMDApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIGRlZmF1bHQgTlVMTCwKICBgbGFzdF9uYW1lYCB2YXJjaGFyKDEwMCkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgZGVmYXVsdCBOVUxMLAogIGBlbWFpbGAgdmFyY2hhcigyNTUpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIGRlZmF1bHQgTlVMTCwKICBgbGFzdF9zZWVuYCBkYXRldGltZSBkZWZhdWx0ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywKICBgdXNlcl90eXBlYCBlbnVtKCdhdXRob3InLCdkZXZlbG9wZXInKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdhdXRob3InLAogIGBwcmltYXJ5YCBlbnVtKCd5ZXMnLCdubycpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMIGRlZmF1bHQgJ25vJywKICBgZGVmYXVsdF9zZWN0aW9uYCBpbnQoMTEpIE5PVCBOVUxMLAogIGBhdXRoX3Rva2VuX2FjdGl2ZWAgZW51bSgneWVzJywnbm8nKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdubycsCiAgUFJJTUFSWSBLRVkgIChgaWRgKSwKICBVTklRVUUgS0VZIGB1c2VybmFtZWAgKGB1c2VybmFtZWApCikgRU5HSU5FPU15SVNBTSAgREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfY2FjaGVgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9jYWNoZWA7DQpDUkVBVEUgVEFCTEUgYHRibF9jYWNoZWAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgaGFzaGAgdmFyY2hhcigzMikgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgY3JlYXRpb25gIGludCgxNCkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgYGV4cGlyeWAgaW50KDE0KSB1bnNpZ25lZCBkZWZhdWx0IE5VTEwsCiAgYGRhdGFgIGxvbmd0ZXh0IGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBjcmVhdGlvbmAgKGBjcmVhdGlvbmApLAogIEtFWSBgaGFzaGAgKGBoYXNoYCkKKSBFTkdJTkU9TXlJU0FNICBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIFNUUlVDVFVSRTogYHRibF9lbnRyaWVzYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZW50cmllc2A7DQpDUkVBVEUgVEFCTEUgYHRibF9lbnRyaWVzYCAoCiAgYGlkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBzZWN0aW9uX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBhdXRob3JfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYGNyZWF0aW9uX2RhdGVgIGRhdGV0aW1lIE5PVCBOVUxMLAogIGBjcmVhdGlvbl9kYXRlX2dtdGAgZGF0ZXRpbWUgTk9UIE5VTEwsCiAgUFJJTUFSWSBLRVkgIChgaWRgKSwKICBLRVkgYHNlY3Rpb25faWRgIChgc2VjdGlvbl9pZGApLAogIEtFWSBgYXV0aG9yX2lkYCAoYGF1dGhvcl9pZGApLAogIEtFWSBgY3JlYXRpb25fZGF0ZWAgKGBjcmVhdGlvbl9kYXRlYCksCiAgS0VZIGBjcmVhdGlvbl9kYXRlX2dtdGAgKGBjcmVhdGlvbl9kYXRlX2dtdGApCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIFNUUlVDVFVSRTogYHRibF9leHRlbnNpb25zYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZXh0ZW5zaW9uc2A7DQpDUkVBVEUgVEFCTEUgYHRibF9leHRlbnNpb25zYCAoCiAgYGlkYCBpbnQoMTEpIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBuYW1lYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgc3RhdHVzYCBlbnVtKCdlbmFibGVkJywnZGlzYWJsZWQnKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdlbmFibGVkJywKICBgdmVyc2lvbmAgZG91YmxlIHVuc2lnbmVkIE5PVCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBuYW1lYCAoYG5hbWVgKQopIEVOR0lORT1NeUlTQU0gIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2V4dGVuc2lvbnNfZGVsZWdhdGVzYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZXh0ZW5zaW9uc19kZWxlZ2F0ZXNgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZXh0ZW5zaW9uc19kZWxlZ2F0ZXNgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGV4dGVuc2lvbl9pZGAgaW50KDExKSBOT1QgTlVMTCwKICBgcGFnZWAgdmFyY2hhcigxMDApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIGBkZWxlZ2F0ZWAgdmFyY2hhcigxMDApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIGBjYWxsYmFja2AgdmFyY2hhcigxMDApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBleHRlbnNpb25faWRgIChgZXh0ZW5zaW9uX2lkYCksCiAgS0VZIGBwYWdlYCAoYHBhZ2VgKSwKICBLRVkgYGRlbGVnYXRlYCAoYGRlbGVnYXRlYCkKKSBFTkdJTkU9TXlJU0FNICBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIFNUUlVDVFVSRTogYHRibF9maWVsZHNgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9maWVsZHNgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzYCAoCiAgYGlkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBsYWJlbGAgdmFyY2hhcigyNTUpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIGBlbGVtZW50X25hbWVgIHZhcmNoYXIoNTApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIGB0eXBlYCB2YXJjaGFyKDMyKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCwKICBgcGFyZW50X3NlY3Rpb25gIGludCgxMSkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgYHJlcXVpcmVkYCBlbnVtKCd5ZXMnLCdubycpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMIGRlZmF1bHQgJ3llcycsCiAgYHNvcnRvcmRlcmAgaW50KDExKSBOT1QgTlVMTCBkZWZhdWx0ICcxJywKICBgbG9jYXRpb25gIGVudW0oJ21haW4nLCdzaWRlYmFyJykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnbWFpbicsCiAgYHNob3dfY29sdW1uYCBlbnVtKCd5ZXMnLCdubycpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMIGRlZmF1bHQgJ25vJywKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgaW5kZXhgIChgZWxlbWVudF9uYW1lYCxgdHlwZWAsYHBhcmVudF9zZWN0aW9uYCkKKSBFTkdJTkU9TXlJU0FNIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2ZpZWxkc19hdXRob3JgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9maWVsZHNfYXV0aG9yYDsNCkNSRUFURSBUQUJMRSBgdGJsX2ZpZWxkc19hdXRob3JgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBhbGxvd19hdXRob3JfY2hhbmdlYCBlbnVtKCd5ZXMnLCdubycpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIGBhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb25gIGVudW0oJ3llcycsJ25vJykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnbm8nLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgVU5JUVVFIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX2NoZWNrYm94YCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZmllbGRzX2NoZWNrYm94YDsNCkNSRUFURSBUQUJMRSBgdGJsX2ZpZWxkc19jaGVja2JveGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYGRlZmF1bHRfc3RhdGVgIGVudW0oJ29uJywnb2ZmJykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnb24nLAogIGBkZXNjcmlwdGlvbmAgdmFyY2hhcigyNTUpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIGRlZmF1bHQgTlVMTCwKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX2RhdGVgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9maWVsZHNfZGF0ZWA7DQpDUkVBVEUgVEFCTEUgYHRibF9maWVsZHNfZGF0ZWAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYHByZV9wb3B1bGF0ZWAgZW51bSgneWVzJywnbm8nKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdubycsCiAgYGNhbGVuZGFyYCBlbnVtKCd5ZXMnLCdubycpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMIGRlZmF1bHQgJ25vJywKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX2lucHV0YCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZmllbGRzX2lucHV0YDsNCkNSRUFURSBUQUJMRSBgdGJsX2ZpZWxkc19pbnB1dGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYHZhbGlkYXRvcmAgdmFyY2hhcigxMDApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIGRlZmF1bHQgTlVMTCwKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX3NlbGVjdGAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX2ZpZWxkc19zZWxlY3RgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzX3NlbGVjdGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYGFsbG93X211bHRpcGxlX3NlbGVjdGlvbmAgZW51bSgneWVzJywnbm8nKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdubycsCiAgYHN0YXRpY19vcHRpb25zYCB0ZXh0IGNvbGxhdGUgdXRmOF91bmljb2RlX2NpLAogIGBkeW5hbWljX29wdGlvbnNgIGludCgxMSkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBmaWVsZF9pZGAgKGBmaWVsZF9pZGApCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIFNUUlVDVFVSRTogYHRibF9maWVsZHNfc2VsZWN0Ym94X2xpbmtgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9maWVsZHNfc2VsZWN0Ym94X2xpbmtgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzX3NlbGVjdGJveF9saW5rYCAoCiAgYGlkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBmaWVsZF9pZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCwKICBgYWxsb3dfbXVsdGlwbGVfc2VsZWN0aW9uYCBlbnVtKCd5ZXMnLCdubycpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMIGRlZmF1bHQgJ25vJywKICBgcmVsYXRlZF9maWVsZF9pZGAgdmFyY2hhcigyNTUpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIGBsaW1pdGAgaW50KDQpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzIwJywKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX3RhZ2xpc3RgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9maWVsZHNfdGFnbGlzdGA7DQpDUkVBVEUgVEFCTEUgYHRibF9maWVsZHNfdGFnbGlzdGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYHZhbGlkYXRvcmAgdmFyY2hhcigxMDApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIGRlZmF1bHQgTlVMTCwKICBgcHJlX3BvcHVsYXRlX3NvdXJjZWAgdmFyY2hhcigxNSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBmaWVsZF9pZGAgKGBmaWVsZF9pZGApLAogIEtFWSBgcHJlX3BvcHVsYXRlX3NvdXJjZWAgKGBwcmVfcG9wdWxhdGVfc291cmNlYCkKKSBFTkdJTkU9TXlJU0FNIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2ZpZWxkc190ZXh0YXJlYWAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX2ZpZWxkc190ZXh0YXJlYWA7DQpDUkVBVEUgVEFCTEUgYHRibF9maWVsZHNfdGV4dGFyZWFgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBmb3JtYXR0ZXJgIHZhcmNoYXIoMTAwKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBkZWZhdWx0IE5VTEwsCiAgYHNpemVgIGludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCwKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX3VwbG9hZGAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX2ZpZWxkc191cGxvYWRgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzX3VwbG9hZGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYGRlc3RpbmF0aW9uYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwsCiAgYHZhbGlkYXRvcmAgdmFyY2hhcig1MCkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBmaWVsZF9pZGAgKGBmaWVsZF9pZGApCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIFNUUlVDVFVSRTogYHRibF9mb3Jnb3RwYXNzYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZm9yZ290cGFzc2A7DQpDUkVBVEUgVEFCTEUgYHRibF9mb3Jnb3RwYXNzYCAoCiAgYGF1dGhvcl9pZGAgaW50KDExKSBOT1QgTlVMTCBkZWZhdWx0ICcwJywKICBgdG9rZW5gIHZhcmNoYXIoNikgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwsCiAgYGV4cGlyeWAgdmFyY2hhcigyNSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwsCiAgUFJJTUFSWSBLRVkgIChgYXV0aG9yX2lkYCkKKSBFTkdJTkU9TXlJU0FNIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX3BhZ2VzYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfcGFnZXNgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfcGFnZXNgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYHBhcmVudGAgaW50KDExKSBkZWZhdWx0IE5VTEwsCiAgYHRpdGxlYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgaGFuZGxlYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgZGVmYXVsdCBOVUxMLAogIGBwYXRoYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgZGVmYXVsdCBOVUxMLAogIGBwYXJhbXNgIHZhcmNoYXIoMjU1KSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBkZWZhdWx0IE5VTEwsCiAgYGRhdGFfc291cmNlc2AgdGV4dCBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSwKICBgZXZlbnRzYCB0ZXh0IGNvbGxhdGUgdXRmOF91bmljb2RlX2NpLAogIGBzb3J0b3JkZXJgIGludCgxMSkgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCiAgUFJJTUFSWSBLRVkgIChgaWRgKSwKICBLRVkgYHBhcmVudGAgKGBwYXJlbnRgKQopIEVOR0lORT1NeUlTQU0gIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX3BhZ2VzX3R5cGVzYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfcGFnZXNfdHlwZXNgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfcGFnZXNfdHlwZXNgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYHBhZ2VfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYHR5cGVgIHZhcmNoYXIoNTApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBwYWdlX2lkYCAoYHBhZ2VfaWRgLGB0eXBlYCkKKSBFTkdJTkU9TXlJU0FNICBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIFNUUlVDVFVSRTogYHRibF9zZWN0aW9uc2AgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX3NlY3Rpb25zYDsNCkNSRUFURSBUQUJMRSBgdGJsX3NlY3Rpb25zYCAoCiAgYGlkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBuYW1lYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgaGFuZGxlYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwsCiAgYHNvcnRvcmRlcmAgaW50KDExKSBOT1QgTlVMTCBkZWZhdWx0ICcwJywKICBgZW50cnlfb3JkZXJgIHZhcmNoYXIoNykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgZGVmYXVsdCBOVUxMLAogIGBlbnRyeV9vcmRlcl9kaXJlY3Rpb25gIGVudW0oJ2FzYycsJ2Rlc2MnKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBkZWZhdWx0ICdhc2MnLAogIGBoaWRkZW5gIGVudW0oJ3llcycsJ25vJykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnbm8nLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgVU5JUVVFIEtFWSBgaGFuZGxlYCAoYGhhbmRsZWApCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIFNUUlVDVFVSRTogYHRibF9zZWN0aW9uc19hc3NvY2lhdGlvbmAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX3NlY3Rpb25zX2Fzc29jaWF0aW9uYDsNCkNSRUFURSBUQUJMRSBgdGJsX3NlY3Rpb25zX2Fzc29jaWF0aW9uYCAoCiAgYGlkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBwYXJlbnRfc2VjdGlvbl9pZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCwKICBgcGFyZW50X3NlY3Rpb25fZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAogIGBjaGlsZF9zZWN0aW9uX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBjaGlsZF9zZWN0aW9uX2ZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBjYXNjYWRpbmdfZGVsZXRpb25gIGVudW0oJ3llcycsJ25vJykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnbm8nLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBwYXJlbnRfc2VjdGlvbl9pZGAgKGBwYXJlbnRfc2VjdGlvbl9pZGAsYGNoaWxkX3NlY3Rpb25faWRgLGBjaGlsZF9zZWN0aW9uX2ZpZWxkX2lkYCkKKSBFTkdJTkU9TXlJU0FNIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0K
SQL;
return base64_decode(trim($sql));
}
function getWorkspaceData(){
$sql = <<<SQL
DQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2ZpZWxkc19hdXRob3JgICoqKg0KRFJPUCBUQUJMRSBJRiBFWElTVFMgYHRibF9maWVsZHNfYXV0aG9yYDsNCkNSRUFURSBUQUJMRSBgdGJsX2ZpZWxkc19hdXRob3JgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBhbGxvd19hdXRob3JfY2hhbmdlYCBlbnVtKCd5ZXMnLCdubycpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMLAogIGBhbGxvd19tdWx0aXBsZV9zZWxlY3Rpb25gIGVudW0oJ3llcycsJ25vJykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnbm8nLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgVU5JUVVFIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBEQVRBOiBgdGJsX2ZpZWxkc19hdXRob3JgICoqKg0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2ZpZWxkc19jaGVja2JveGAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX2ZpZWxkc19jaGVja2JveGA7DQpDUkVBVEUgVEFCTEUgYHRibF9maWVsZHNfY2hlY2tib3hgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBkZWZhdWx0X3N0YXRlYCBlbnVtKCdvbicsJ29mZicpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIE5PVCBOVUxMIGRlZmF1bHQgJ29uJywKICBgZGVzY3JpcHRpb25gIHZhcmNoYXIoMjU1KSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBkZWZhdWx0IE5VTEwsCiAgUFJJTUFSWSBLRVkgIChgaWRgKSwKICBLRVkgYGZpZWxkX2lkYCAoYGZpZWxkX2lkYCkKKSBFTkdJTkU9TXlJU0FNIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogREFUQTogYHRibF9maWVsZHNfY2hlY2tib3hgICoqKg0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2ZpZWxkc19kYXRlYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZmllbGRzX2RhdGVgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzX2RhdGVgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBwcmVfcG9wdWxhdGVgIGVudW0oJ3llcycsJ25vJykgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwgZGVmYXVsdCAnbm8nLAogIGBjYWxlbmRhcmAgZW51bSgneWVzJywnbm8nKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdubycsCiAgUFJJTUFSWSBLRVkgIChgaWRgKSwKICBLRVkgYGZpZWxkX2lkYCAoYGZpZWxkX2lkYCkKKSBFTkdJTkU9TXlJU0FNIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogREFUQTogYHRibF9maWVsZHNfZGF0ZWAgKioqDQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX2lucHV0YCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZmllbGRzX2lucHV0YDsNCkNSRUFURSBUQUJMRSBgdGJsX2ZpZWxkc19pbnB1dGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYHZhbGlkYXRvcmAgdmFyY2hhcigxMDApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIGRlZmF1bHQgTlVMTCwKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBEQVRBOiBgdGJsX2ZpZWxkc19pbnB1dGAgKioqDQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX3NlbGVjdGAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX2ZpZWxkc19zZWxlY3RgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzX3NlbGVjdGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYGFsbG93X211bHRpcGxlX3NlbGVjdGlvbmAgZW51bSgneWVzJywnbm8nKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdubycsCiAgYHN0YXRpY19vcHRpb25zYCB0ZXh0IGNvbGxhdGUgdXRmOF91bmljb2RlX2NpLAogIGBkeW5hbWljX29wdGlvbnNgIGludCgxMSkgdW5zaWduZWQgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBmaWVsZF9pZGAgKGBmaWVsZF9pZGApCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIERBVEE6IGB0YmxfZmllbGRzX3NlbGVjdGAgKioqDQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX3NlbGVjdGJveF9saW5rYCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZmllbGRzX3NlbGVjdGJveF9saW5rYDsNCkNSRUFURSBUQUJMRSBgdGJsX2ZpZWxkc19zZWxlY3Rib3hfbGlua2AgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYGFsbG93X211bHRpcGxlX3NlbGVjdGlvbmAgZW51bSgneWVzJywnbm8nKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCBkZWZhdWx0ICdubycsCiAgYHJlbGF0ZWRfZmllbGRfaWRgIHZhcmNoYXIoMjU1KSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBOT1QgTlVMTCwKICBgbGltaXRgIGludCg0KSB1bnNpZ25lZCBOT1QgTlVMTCBkZWZhdWx0ICcyMCcsCiAgUFJJTUFSWSBLRVkgIChgaWRgKSwKICBLRVkgYGZpZWxkX2lkYCAoYGZpZWxkX2lkYCkKKSBFTkdJTkU9TXlJU0FNIERFRkFVTFQgQ0hBUlNFVD11dGY4IENPTExBVEU9dXRmOF91bmljb2RlX2NpOw0KDQotLSAqKiogREFUQTogYHRibF9maWVsZHNfc2VsZWN0Ym94X2xpbmtgICoqKg0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2ZpZWxkc190YWdsaXN0YCAqKioNCkRST1AgVEFCTEUgSUYgRVhJU1RTIGB0YmxfZmllbGRzX3RhZ2xpc3RgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzX3RhZ2xpc3RgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGB2YWxpZGF0b3JgIHZhcmNoYXIoMTAwKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBkZWZhdWx0IE5VTEwsCiAgYHByZV9wb3B1bGF0ZV9zb3VyY2VgIHZhcmNoYXIoMTUpIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpIGRlZmF1bHQgTlVMTCwKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKSwKICBLRVkgYHByZV9wb3B1bGF0ZV9zb3VyY2VgIChgcHJlX3BvcHVsYXRlX3NvdXJjZWApCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIERBVEE6IGB0YmxfZmllbGRzX3RhZ2xpc3RgICoqKg0KDQotLSAqKiogU1RSVUNUVVJFOiBgdGJsX2ZpZWxkc190ZXh0YXJlYWAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX2ZpZWxkc190ZXh0YXJlYWA7DQpDUkVBVEUgVEFCTEUgYHRibF9maWVsZHNfdGV4dGFyZWFgICgKICBgaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYGZpZWxkX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMLAogIGBmb3JtYXR0ZXJgIHZhcmNoYXIoMTAwKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaSBkZWZhdWx0IE5VTEwsCiAgYHNpemVgIGludCgzKSB1bnNpZ25lZCBOT1QgTlVMTCwKICBQUklNQVJZIEtFWSAgKGBpZGApLAogIEtFWSBgZmllbGRfaWRgIChgZmllbGRfaWRgKQopIEVOR0lORT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0ZjggQ09MTEFURT11dGY4X3VuaWNvZGVfY2k7DQoNCi0tICoqKiBEQVRBOiBgdGJsX2ZpZWxkc190ZXh0YXJlYWAgKioqDQoNCi0tICoqKiBTVFJVQ1RVUkU6IGB0YmxfZmllbGRzX3VwbG9hZGAgKioqDQpEUk9QIFRBQkxFIElGIEVYSVNUUyBgdGJsX2ZpZWxkc191cGxvYWRgOw0KQ1JFQVRFIFRBQkxFIGB0YmxfZmllbGRzX3VwbG9hZGAgKAogIGBpZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKICBgZmllbGRfaWRgIGludCgxMSkgdW5zaWduZWQgTk9UIE5VTEwsCiAgYGRlc3RpbmF0aW9uYCB2YXJjaGFyKDI1NSkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgTk9UIE5VTEwsCiAgYHZhbGlkYXRvcmAgdmFyY2hhcig1MCkgY29sbGF0ZSB1dGY4X3VuaWNvZGVfY2kgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYGlkYCksCiAgS0VZIGBmaWVsZF9pZGAgKGBmaWVsZF9pZGApCikgRU5HSU5FPU15SVNBTSBERUZBVUxUIENIQVJTRVQ9dXRmOCBDT0xMQVRFPXV0ZjhfdW5pY29kZV9jaTsNCg0KLS0gKioqIERBVEE6IGB0YmxfZmllbGRzX3VwbG9hZGAgKioqDQoNCi0tICoqKiBEQVRBOiBgdGJsX2VudHJpZXNgICoqKg0KDQotLSAqKiogREFUQTogYHRibF9leHRlbnNpb25zYCAqKioNCklOU0VSVCBJTlRPIGB0YmxfZXh0ZW5zaW9uc2AgKGBpZGAsIGBuYW1lYCwgYHN0YXR1c2AsIGB2ZXJzaW9uYCkgVkFMVUVTICgxLCAnaW1wcm92ZWRwYWdlcmVzb2x2ZScsICdlbmFibGVkJywgMSk7DQpJTlNFUlQgSU5UTyBgdGJsX2V4dGVuc2lvbnNgIChgaWRgLCBgbmFtZWAsIGBzdGF0dXNgLCBgdmVyc2lvbmApIFZBTFVFUyAoMiwgJ2V4cG9ydF9lbnNlbWJsZScsICdlbmFibGVkJywgMS41KTsNCg0KLS0gKioqIERBVEE6IGB0YmxfZXh0ZW5zaW9uc19kZWxlZ2F0ZXNgICoqKg0KSU5TRVJUIElOVE8gYHRibF9leHRlbnNpb25zX2RlbGVnYXRlc2AgKGBpZGAsIGBleHRlbnNpb25faWRgLCBgcGFnZWAsIGBkZWxlZ2F0ZWAsIGBjYWxsYmFja2ApIFZBTFVFUyAoMSwgMSwgJy9mcm9udGVuZC8nLCAnRnJvbnRlbmRQcmVQYWdlUmVzb2x2ZScsICdfX3BhZ2VQcmVSZXNvbHZlJyk7DQpJTlNFUlQgSU5UTyBgdGJsX2V4dGVuc2lvbnNfZGVsZWdhdGVzYCAoYGlkYCwgYGV4dGVuc2lvbl9pZGAsIGBwYWdlYCwgYGRlbGVnYXRlYCwgYGNhbGxiYWNrYCkgVkFMVUVTICgyLCAxLCAnL2Zyb250ZW5kLycsICdGcm9udGVuZFBhcmFtc1Jlc29sdmUnLCAnX19wYWdlUGFyYW1zUmVzb2x2ZScpOw0KSU5TRVJUIElOVE8gYHRibF9leHRlbnNpb25zX2RlbGVnYXRlc2AgKGBpZGAsIGBleHRlbnNpb25faWRgLCBgcGFnZWAsIGBkZWxlZ2F0ZWAsIGBjYWxsYmFja2ApIFZBTFVFUyAoMywgMiwgJy9zeXN0ZW0vcHJlZmVyZW5jZXMvJywgJ0FkZEN1c3RvbVByZWZlcmVuY2VGaWVsZHNldHMnLCAnYXBwZW5kUHJlZmVyZW5jZXMnKTsNCg0KLS0gKioqIERBVEE6IGB0YmxfZmllbGRzYCAqKioNCg0KLS0gKioqIERBVEE6IGB0YmxfcGFnZXNgICoqKg0KSU5TRVJUIElOVE8gYHRibF9wYWdlc2AgKGBpZGAsIGBwYXJlbnRgLCBgdGl0bGVgLCBgaGFuZGxlYCwgYHBhdGhgLCBgcGFyYW1zYCwgYGRhdGFfc291cmNlc2AsIGBldmVudHNgLCBgc29ydG9yZGVyYCkgVkFMVUVTICgxLCBOVUxMLCAnaG9tZScsICdob21lJywgTlVMTCwgJ2EvYi9jJywgTlVMTCwgTlVMTCwgMSk7DQoNCi0tICoqKiBEQVRBOiBgdGJsX3BhZ2VzX3R5cGVzYCAqKioNCklOU0VSVCBJTlRPIGB0YmxfcGFnZXNfdHlwZXNgIChgaWRgLCBgcGFnZV9pZGAsIGB0eXBlYCkgVkFMVUVTICgzLCAxLCAnaW5kZXgnKTsNCg0KLS0gKioqIERBVEE6IGB0Ymxfc2VjdGlvbnNgICoqKg0KDQotLSAqKiogREFUQTogYHRibF9zZWN0aW9uc19hc3NvY2lhdGlvbmAgKioqDQo=
SQL;
return base64_decode(trim($sql));
}
define('INSTALL_REQUIREMENTS_PASSED', true);
include_once('./symphony/lib/toolkit/include.install.php');