@@ -9,7 +9,7 @@ |
||
9 | 9 | */ |
10 | 10 | ?> |
11 | 11 | <h1>Example Skin (main user frontpage)</h1> |
12 | -<img src="<?php echo $Gui->skinObject->findresourceUrl("IMAGES","consortium_logo.png");?>"/> |
|
12 | +<img src="<?php echo $Gui->skinObject->findresourceUrl("IMAGES", "consortium_logo.png"); ?>"/> |
|
13 | 13 | <p>This skin is much more sober and less bloated than the default one. As it happens, it also doesn't do anything.</p> |
14 | 14 | <p>But at least it goes to show that it's possible to include custom images/CSS/external software using findResourceUrl(..., $filename): |
15 | -<img src="<?php echo $Gui->skinObject->findresourceUrl("IMAGES","custom.png");?>"/> |
|
15 | +<img src="<?php echo $Gui->skinObject->findresourceUrl("IMAGES", "custom.png"); ?>"/> |
@@ -52,7 +52,7 @@ |
||
52 | 52 | they are from the same user group. You are not allowed to share them to an unlimited |
53 | 53 | audience (e.g. on a publicly accessible web server).</li> |
54 | 54 | <li>If You are an eduroam Identity Provider administrator, you are allowed to download and pass on the Installers to |
55 | -your own <?php echo CONFIG_CONFASSISTANT['CONSORTIUM']['nomenclature_institution'];?> end users, e.g. on the support web pages of your <?php echo CONFIG_CONFASSISTANT['CONSORTIUM']['nomenclature_institution'];?>, on Welcome Package CDs or USB sticks, etc.</li> |
|
55 | +your own <?php echo CONFIG_CONFASSISTANT['CONSORTIUM']['nomenclature_institution']; ?> end users, e.g. on the support web pages of your <?php echo CONFIG_CONFASSISTANT['CONSORTIUM']['nomenclature_institution']; ?>, on Welcome Package CDs or USB sticks, etc.</li> |
|
56 | 56 | <li>If You are a third-party not affiliated with eduroam, you are only allowed to download and pass on |
57 | 57 | the Metadata and/or the Installers after having received written permission by the eduroam Operations team.</li> |
58 | 58 | </ul> |
@@ -155,7 +155,7 @@ discard block |
||
155 | 155 | |
156 | 156 | * @var array |
157 | 157 | */ |
158 | - 'MAILSETTINGS' => [ // we always use Submission |
|
158 | + 'MAILSETTINGS' => [// we always use Submission |
|
159 | 159 | 'host' => 'submission.capable.mta', |
160 | 160 | 'user'=> 'mailuser', |
161 | 161 | 'pass' => 'mailpass', |
@@ -172,25 +172,25 @@ discard block |
||
172 | 172 | * @var array |
173 | 173 | */ |
174 | 174 | 'LANGUAGES' => [ |
175 | - 'bg' => ['display' => 'Български', 'locale' => 'bg_BG.utf8', 'latin_based' => FALSE], |
|
176 | - 'ca' => ['display' => 'Català', 'locale' => 'ca_ES.utf8', 'latin_based' => TRUE], |
|
177 | - 'cs' => ['display' => 'Čeština', 'locale' => 'cs_CZ.utf8', 'latin_based' => TRUE], |
|
178 | - 'de' => ['display' => 'Deutsch', 'locale' => 'de_DE.utf8', 'latin_based' => TRUE], |
|
179 | - 'el' => ['display' => 'Ελληνικά', 'locale' => 'el_GR.utf8', 'latin_based' => FALSE], |
|
180 | - 'en' => ['display' => 'English(GB)', 'locale' => 'en_GB.utf8', 'latin_based' => TRUE], |
|
181 | - 'es' => ['display' => 'Español', 'locale' => 'es_ES.utf8', 'latin_based' => TRUE], |
|
182 | - 'et' => ['display' => 'Eesti', 'locale' => 'et_EE.utf8', 'latin_based' => TRUE], |
|
183 | - 'fr' => ['display' => 'Français', 'locale' => 'fr_FR.utf8', 'latin_based' => TRUE], |
|
184 | - 'hr' => ['display' => 'Hrvatski', 'locale' => 'hr_HR.utf8', 'latin_based' => TRUE], |
|
185 | - 'hu' => ['display' => 'Magyar', 'locale' => 'hu_HU.utf8', 'latin_based' => TRUE], |
|
186 | - 'it' => ['display' => 'Italiano', 'locale' => 'it_IT.utf8', 'latin_based' => TRUE], |
|
187 | - 'nb' => ['display' => 'Norsk', 'locale' => 'nb_NO.utf8', 'latin_based' => TRUE], |
|
188 | - 'pl' => ['display' => 'Polski', 'locale' => 'pl_PL.utf8', 'latin_based' => TRUE], |
|
189 | - 'pt' => ['display' => 'Português', 'locale' => 'pt_PT.utf8', 'latin_based' => TRUE], |
|
190 | - 'sl' => ['display' => 'Slovenščina', 'locale' => 'sl_SI.utf8', 'latin_based' => TRUE], |
|
191 | - 'sr' => ['display' => 'Srpski', 'locale' => 'sr_RS@latin', 'latin_based' => TRUE], |
|
192 | - 'fi' => ['display' => 'Suomi', 'locale' => 'fi_FI.utf8', 'latin_based' => TRUE], |
|
193 | - 'tr' => ['display' => 'Türkçe', 'locale' => 'tr_TR.utf8', 'latin_based' => TRUE], |
|
175 | + 'bg' => ['display' => 'Български', 'locale' => 'bg_BG.utf8', 'latin_based' => FALSE], |
|
176 | + 'ca' => ['display' => 'Català', 'locale' => 'ca_ES.utf8', 'latin_based' => TRUE], |
|
177 | + 'cs' => ['display' => 'Čeština', 'locale' => 'cs_CZ.utf8', 'latin_based' => TRUE], |
|
178 | + 'de' => ['display' => 'Deutsch', 'locale' => 'de_DE.utf8', 'latin_based' => TRUE], |
|
179 | + 'el' => ['display' => 'Ελληνικά', 'locale' => 'el_GR.utf8', 'latin_based' => FALSE], |
|
180 | + 'en' => ['display' => 'English(GB)', 'locale' => 'en_GB.utf8', 'latin_based' => TRUE], |
|
181 | + 'es' => ['display' => 'Español', 'locale' => 'es_ES.utf8', 'latin_based' => TRUE], |
|
182 | + 'et' => ['display' => 'Eesti', 'locale' => 'et_EE.utf8', 'latin_based' => TRUE], |
|
183 | + 'fr' => ['display' => 'Français', 'locale' => 'fr_FR.utf8', 'latin_based' => TRUE], |
|
184 | + 'hr' => ['display' => 'Hrvatski', 'locale' => 'hr_HR.utf8', 'latin_based' => TRUE], |
|
185 | + 'hu' => ['display' => 'Magyar', 'locale' => 'hu_HU.utf8', 'latin_based' => TRUE], |
|
186 | + 'it' => ['display' => 'Italiano', 'locale' => 'it_IT.utf8', 'latin_based' => TRUE], |
|
187 | + 'nb' => ['display' => 'Norsk', 'locale' => 'nb_NO.utf8', 'latin_based' => TRUE], |
|
188 | + 'pl' => ['display' => 'Polski', 'locale' => 'pl_PL.utf8', 'latin_based' => TRUE], |
|
189 | + 'pt' => ['display' => 'Português', 'locale' => 'pt_PT.utf8', 'latin_based' => TRUE], |
|
190 | + 'sl' => ['display' => 'Slovenščina', 'locale' => 'sl_SI.utf8', 'latin_based' => TRUE], |
|
191 | + 'sr' => ['display' => 'Srpski', 'locale' => 'sr_RS@latin', 'latin_based' => TRUE], |
|
192 | + 'fi' => ['display' => 'Suomi', 'locale' => 'fi_FI.utf8', 'latin_based' => TRUE], |
|
193 | + 'tr' => ['display' => 'Türkçe', 'locale' => 'tr_TR.utf8', 'latin_based' => TRUE], |
|
194 | 194 | |
195 | 195 | |
196 | 196 |
@@ -19,7 +19,7 @@ discard block |
||
19 | 19 | * <base_url>/copyright.php after deploying the software |
20 | 20 | */ |
21 | 21 | |
22 | -require_once __DIR__ . "/../core/Psr4Autoloader.php"; |
|
22 | +require_once __DIR__."/../core/Psr4Autoloader.php"; |
|
23 | 23 | use core\autoloader\Psr4Autoloader; |
24 | 24 | |
25 | 25 | // instantiate the loader |
@@ -30,11 +30,11 @@ discard block |
||
30 | 30 | |
31 | 31 | // register the base directories for the namespace prefix |
32 | 32 | // include CAT/core library |
33 | -$loader->addNamespace('core', __DIR__ . "/../core"); |
|
33 | +$loader->addNamespace('core', __DIR__."/../core"); |
|
34 | 34 | // include CAT/devices library |
35 | -$loader->addNamespace('devices', __DIR__ . "/../devices"); |
|
35 | +$loader->addNamespace('devices', __DIR__."/../devices"); |
|
36 | 36 | // include CAT/web library |
37 | -$loader->addNamespace('web', __DIR__ . "/../web"); |
|
37 | +$loader->addNamespace('web', __DIR__."/../web"); |
|
38 | 38 | |
39 | 39 | // include PHPMailer library |
40 | -$loader->addNamespace('PHPMailer\PHPMailer', __DIR__ . "/../core/PHPMailer/src"); |
|
40 | +$loader->addNamespace('PHPMailer\PHPMailer', __DIR__."/../core/PHPMailer/src"); |
@@ -20,7 +20,7 @@ discard block |
||
20 | 20 | */ |
21 | 21 | |
22 | 22 | require_once "autoloader.php"; |
23 | -require_once __DIR__ . "/../packageRoot.php"; |
|
23 | +require_once __DIR__."/../packageRoot.php"; |
|
24 | 24 | |
25 | 25 | /* This code block compares the template config against the actual one to find |
26 | 26 | * out which of the values are MISSING, which are still at DEFAULT and which |
@@ -88,12 +88,12 @@ discard block |
||
88 | 88 | */ |
89 | 89 | // this is the actual config |
90 | 90 | |
91 | -if (!file_exists(ROOT . "/config/config-master.php")) { |
|
91 | +if (!file_exists(ROOT."/config/config-master.php")) { |
|
92 | 92 | echo "Master configuration file not found. You need to configure the product! At least config-master.php is required!"; |
93 | 93 | throw new Exception("Master config file not found!"); |
94 | 94 | } |
95 | 95 | |
96 | -require ROOT . "/config/config-master.php"; |
|
96 | +require ROOT."/config/config-master.php"; |
|
97 | 97 | |
98 | 98 | /* as a test for the config comparison, run this, display in browser and exit |
99 | 99 | |
@@ -109,14 +109,14 @@ discard block |
||
109 | 109 | /* load sub-configs if we are dealing with those in this installation */ |
110 | 110 | |
111 | 111 | if (CONFIG['FUNCTIONALITY_LOCATIONS']['CONFASSISTANT_SILVERBULLET'] == 'LOCAL' || CONFIG['FUNCTIONALITY_LOCATIONS']['CONFASSISTANT_RADIUS'] == 'LOCAL') { |
112 | - include ROOT . "/config/config-confassistant.php"; |
|
112 | + include ROOT."/config/config-confassistant.php"; |
|
113 | 113 | } else { // we want to define the constant itself anyway, to avoid some ugly warnings on the console |
114 | 114 | // this is done with an inline include |
115 | 115 | define("CONFIG_CONFASSISTANT", []); |
116 | 116 | } |
117 | 117 | |
118 | 118 | if (CONFIG['FUNCTIONALITY_LOCATIONS']['DIAGNOSTICS'] == 'LOCAL') { |
119 | - include ROOT . "/config/config-diagnostics.php"; |
|
119 | + include ROOT."/config/config-diagnostics.php"; |
|
120 | 120 | } else { // same here |
121 | 121 | define("CONFIG_DIAGNOSTICS", []); |
122 | 122 | } |
@@ -129,7 +129,7 @@ discard block |
||
129 | 129 | function CAT_session_start() { |
130 | 130 | if (session_status() != PHP_SESSION_ACTIVE) { |
131 | 131 | session_name("CAT"); |
132 | - session_set_cookie_params(0, "/", $_SERVER['SERVER_NAME'], (isset($_SERVER['HTTPS']) ? TRUE : FALSE )); |
|
132 | + session_set_cookie_params(0, "/", $_SERVER['SERVER_NAME'], (isset($_SERVER['HTTPS']) ? TRUE : FALSE)); |
|
133 | 133 | session_start(); |
134 | 134 | } |
135 | 135 | } |
@@ -32,7 +32,7 @@ discard block |
||
32 | 32 | |
33 | 33 | namespace core; |
34 | 34 | |
35 | -require_once dirname(__DIR__) . "/config/_config.php"; |
|
35 | +require_once dirname(__DIR__)."/config/_config.php"; |
|
36 | 36 | |
37 | 37 | CAT_session_start(); |
38 | 38 | |
@@ -107,17 +107,17 @@ discard block |
||
107 | 107 | |
108 | 108 | $this->CAT_VERSION_STRING = _("Unreleased <a href='https://github.com/GEANT/CAT/tree/master/Changes.md'>Git Revision</a>"); |
109 | 109 | if (CAT::RELEASE_VERSION) { |
110 | - $temp_version = "CAT-" . CAT::VERSION_MAJOR . "." . CAT::VERSION_MINOR; |
|
111 | - $branch = "release_" . CAT::VERSION_MAJOR . "_" . CAT::VERSION_MINOR; |
|
110 | + $temp_version = "CAT-".CAT::VERSION_MAJOR.".".CAT::VERSION_MINOR; |
|
111 | + $branch = "release_".CAT::VERSION_MAJOR."_".CAT::VERSION_MINOR; |
|
112 | 112 | if (CAT::VERSION_PATCH != 0) { |
113 | - $temp_version .= "." . CAT::VERSION_PATCH; |
|
113 | + $temp_version .= ".".CAT::VERSION_PATCH; |
|
114 | 114 | } |
115 | 115 | if (CAT::VERSION_EXTRA != "") { |
116 | - $temp_version .= "-" . CAT::VERSION_EXTRA; |
|
116 | + $temp_version .= "-".CAT::VERSION_EXTRA; |
|
117 | 117 | } |
118 | - $this->CAT_VERSION_STRING = sprintf(_("Release <a href='%s'>%s</a>"), "https://github.com/GEANT/CAT/tree/" . $branch . "/Changes.md", $temp_version); |
|
118 | + $this->CAT_VERSION_STRING = sprintf(_("Release <a href='%s'>%s</a>"), "https://github.com/GEANT/CAT/tree/".$branch."/Changes.md", $temp_version); |
|
119 | 119 | } |
120 | - $this->CAT_COPYRIGHT = CONFIG['APPEARANCE']['productname'] . " - " . $this->CAT_VERSION_STRING . " © " . CAT::COPYRIGHT_MIN_YEAR . "-" . CAT::COPYRIGHT_MAX_YEAR . " " . CAT::COPYRIGHT_HOLDER . "<br/>on behalf of " . CAT::COPYRIGHT_CONSORTIA . "; and others <a href='copyright.php'>Full Copyright and Licenses</a>"; |
|
120 | + $this->CAT_COPYRIGHT = CONFIG['APPEARANCE']['productname']." - ".$this->CAT_VERSION_STRING." © ".CAT::COPYRIGHT_MIN_YEAR."-".CAT::COPYRIGHT_MAX_YEAR." ".CAT::COPYRIGHT_HOLDER."<br/>on behalf of ".CAT::COPYRIGHT_CONSORTIA."; and others <a href='copyright.php'>Full Copyright and Licenses</a>"; |
|
121 | 121 | |
122 | 122 | |
123 | 123 | /* Federations are created in DB with bootstrapFederation, and listed via listFederations |
@@ -161,7 +161,7 @@ discard block |
||
161 | 161 | * @return array list of row id's of file-based attributes which weren't deleted |
162 | 162 | */ |
163 | 163 | public function beginFlushAttributes($extracondition = "") { |
164 | - $quotedIdentifier = (!is_int($this->getRelevantIdentifier()) ? "\"" : "") . $this->getRelevantIdentifier() . (!is_int($this->getRelevantIdentifier()) ? "\"" : ""); |
|
164 | + $quotedIdentifier = (!is_int($this->getRelevantIdentifier()) ? "\"" : "").$this->getRelevantIdentifier().(!is_int($this->getRelevantIdentifier()) ? "\"" : ""); |
|
165 | 165 | $this->databaseHandle->exec("DELETE FROM $this->entityOptionTable WHERE $this->entityIdColumn = $quotedIdentifier AND option_name NOT LIKE '%_file' $extracondition"); |
166 | 166 | $this->updateFreshness(); |
167 | 167 | $execFlush = $this->databaseHandle->exec("SELECT row FROM $this->entityOptionTable WHERE $this->entityIdColumn = $quotedIdentifier $extracondition"); |
@@ -180,7 +180,7 @@ discard block |
||
180 | 180 | * @return void |
181 | 181 | */ |
182 | 182 | public function commitFlushAttributes(array $tobedeleted) { |
183 | - $quotedIdentifier = (!is_int($this->getRelevantIdentifier()) ? "\"" : "") . $this->getRelevantIdentifier() . (!is_int($this->getRelevantIdentifier()) ? "\"" : ""); |
|
183 | + $quotedIdentifier = (!is_int($this->getRelevantIdentifier()) ? "\"" : "").$this->getRelevantIdentifier().(!is_int($this->getRelevantIdentifier()) ? "\"" : ""); |
|
184 | 184 | foreach (array_keys($tobedeleted) as $row) { |
185 | 185 | $this->databaseHandle->exec("DELETE FROM $this->entityOptionTable WHERE $this->entityIdColumn = $quotedIdentifier AND row = $row"); |
186 | 186 | $this->updateFreshness(); |
@@ -207,7 +207,7 @@ discard block |
||
207 | 207 | public function addAttribute($attrName, $attrLang, $attrValue) { |
208 | 208 | $relevantId = $this->getRelevantIdentifier(); |
209 | 209 | $identifierType = (is_int($relevantId) ? "i" : "s"); |
210 | - $this->databaseHandle->exec("INSERT INTO $this->entityOptionTable ($this->entityIdColumn, option_name, option_lang, option_value) VALUES(?,?,?,?)", $identifierType . "sss", $relevantId, $attrName, $attrLang, $attrValue); |
|
210 | + $this->databaseHandle->exec("INSERT INTO $this->entityOptionTable ($this->entityIdColumn, option_name, option_lang, option_value) VALUES(?,?,?,?)", $identifierType."sss", $relevantId, $attrName, $attrLang, $attrValue); |
|
211 | 211 | $this->updateFreshness(); |
212 | 212 | } |
213 | 213 | |
@@ -261,7 +261,7 @@ discard block |
||
261 | 261 | $handle = DBConnection::handle("INST"); |
262 | 262 | $blobQuery = $handle->exec("SELECT option_value from $table WHERE row = $row"); |
263 | 263 | // SELECT -> returns resource, not boolean |
264 | - while ($returnedData = mysqli_fetch_object(/** @scrutinizer ignore-type */ $blobQuery)) { |
|
264 | + while ($returnedData = mysqli_fetch_object(/** @scrutinizer ignore-type */ $blobQuery)) { |
|
265 | 265 | $blob = $returnedData->option_value; |
266 | 266 | } |
267 | 267 | if (!isset($blob)) { |
@@ -97,10 +97,10 @@ |
||
97 | 97 | public function addNamespace($prefix, $base_dir, $prepend = false) |
98 | 98 | { |
99 | 99 | // normalize namespace prefix |
100 | - $prefix = trim($prefix, '\\') . '\\'; |
|
100 | + $prefix = trim($prefix, '\\').'\\'; |
|
101 | 101 | |
102 | 102 | // normalize the base directory with a trailing separator |
103 | - $base_dir = rtrim($base_dir, DIRECTORY_SEPARATOR) . '/'; |
|
103 | + $base_dir = rtrim($base_dir, DIRECTORY_SEPARATOR).'/'; |
|
104 | 104 | |
105 | 105 | // initialize the namespace prefix array |
106 | 106 | if (isset($this->prefixes[$prefix]) === false) { |
@@ -112,9 +112,9 @@ discard block |
||
112 | 112 | |
113 | 113 | $attributesLowLevel = array_merge($this->deviceLevelAttributes, $this->eapLevelAttributes); |
114 | 114 | |
115 | - $this->loggerInstance->debug(5, "Device-Level Attributes: " . print_r($this->deviceLevelAttributes, true)); |
|
116 | - $this->loggerInstance->debug(5, "EAP-Level Attributes: " . print_r($this->eapLevelAttributes, true)); |
|
117 | - $this->loggerInstance->debug(5, "All low-Level Attributes: " . print_r($attributesLowLevel, true)); |
|
115 | + $this->loggerInstance->debug(5, "Device-Level Attributes: ".print_r($this->deviceLevelAttributes, true)); |
|
116 | + $this->loggerInstance->debug(5, "EAP-Level Attributes: ".print_r($this->eapLevelAttributes, true)); |
|
117 | + $this->loggerInstance->debug(5, "All low-Level Attributes: ".print_r($attributesLowLevel, true)); |
|
118 | 118 | |
119 | 119 | // now fetch and merge profile-level attributes if not already set on deeper level |
120 | 120 | |
@@ -133,7 +133,7 @@ discard block |
||
133 | 133 | } |
134 | 134 | } |
135 | 135 | |
136 | - $this->loggerInstance->debug(5, "Merged Attributes: " . print_r($attributesLowLevel, true)); |
|
136 | + $this->loggerInstance->debug(5, "Merged Attributes: ".print_r($attributesLowLevel, true)); |
|
137 | 137 | |
138 | 138 | // now, fetch and merge IdP-wide attributes |
139 | 139 | |
@@ -188,7 +188,7 @@ discard block |
||
188 | 188 | "row" => $attributeQuery->row, |
189 | 189 | "flag" => $optinfo['flag'], |
190 | 190 | "device" => ($devicesOrEAPMethods == "DEVICES" ? $attributeQuery->deviceormethod : NULL), |
191 | - "eapmethod" => ($devicesOrEAPMethods == "DEVICES" ? 0 : (new \core\common\EAP($attributeQuery->deviceormethod))->getArrayRep() )]; |
|
191 | + "eapmethod" => ($devicesOrEAPMethods == "DEVICES" ? 0 : (new \core\common\EAP($attributeQuery->deviceormethod))->getArrayRep())]; |
|
192 | 192 | } |
193 | 193 | return $temparray; |
194 | 194 | } |
@@ -289,7 +289,7 @@ discard block |
||
289 | 289 | * @return void |
290 | 290 | */ |
291 | 291 | public function setAnonymousIDSupport($shallwe) { |
292 | - $this->databaseHandle->exec("UPDATE profile SET use_anon_outer = " . ($shallwe === true ? "1" : "0") . " WHERE profile_id = $this->identifier"); |
|
292 | + $this->databaseHandle->exec("UPDATE profile SET use_anon_outer = ".($shallwe === true ? "1" : "0")." WHERE profile_id = $this->identifier"); |
|
293 | 293 | } |
294 | 294 | |
295 | 295 | /** Toggle special username for realm checks |
@@ -299,8 +299,8 @@ discard block |
||
299 | 299 | * @return void |
300 | 300 | */ |
301 | 301 | public function setRealmCheckUser($shallwe, $localpart = NULL) { |
302 | - $this->databaseHandle->exec("UPDATE profile SET checkuser_outer = " . ($shallwe === true ? "1" : "0") . |
|
303 | - ( $localpart !== NULL ? ", checkuser_value = '$localpart' " : "") . |
|
302 | + $this->databaseHandle->exec("UPDATE profile SET checkuser_outer = ".($shallwe === true ? "1" : "0"). |
|
303 | + ($localpart !== NULL ? ", checkuser_value = '$localpart' " : ""). |
|
304 | 304 | " WHERE profile_id = $this->identifier"); |
305 | 305 | } |
306 | 306 | |
@@ -312,8 +312,8 @@ discard block |
||
312 | 312 | * @return void |
313 | 313 | */ |
314 | 314 | public function setInputVerificationPreference($verify, $hint) { |
315 | - $this->databaseHandle->exec("UPDATE profile SET verify_userinput_suffix = " . ($verify === true ? "1" : "0") . |
|
316 | - ", hint_userinput_suffix = " . ($hint === true ? "1" : "0") . |
|
315 | + $this->databaseHandle->exec("UPDATE profile SET verify_userinput_suffix = ".($verify === true ? "1" : "0"). |
|
316 | + ", hint_userinput_suffix = ".($hint === true ? "1" : "0"). |
|
317 | 317 | " WHERE profile_id = $this->identifier"); |
318 | 318 | } |
319 | 319 |