1<?php 2/************************************************************************************* 3 * aimms.php 4 * -------- 5 * Author: Guido Diepen (guido.diepen@aimms.com) 6 * Copyright: (c) 2011 Guido Diepen (http://www.aimms.com) 7 * Release Version: 1.0.9.1 8 * Date Started: 2011/05/05 9 * 10 * AIMMS language file for GeSHi. 11 * 12 * CHANGES 13 * ------- 14 * 2004/07/14 (1.0.0) 15 * - First Release 16 * 17 * TODO (updated 2004/07/14) 18 * ------------------------- 19 * * Make sure the last few function I may have missed 20 * (like eval()) are included for highlighting 21 * * Split to several files - php4, php5 etc 22 * 23 ************************************************************************************* 24 * 25 * This file is part of GeSHi. 26 * 27 * GeSHi is free software; you can redistribute it and/or modify 28 * it under the terms of the GNU General Public License as published by 29 * the Free Software Foundation; either version 2 of the License, or 30 * (at your option) any later version. 31 * 32 * GeSHi is distributed in the hope that it will be useful, 33 * but WITHOUT ANY WARRANTY; without even the implied warranty of 34 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 35 * GNU General Public License for more details. 36 * 37 * You should have received a copy of the GNU General Public License 38 * along with GeSHi; if not, write to the Free Software 39 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 40 * 41 ************************************************************************************/ 42 43$language_data = array( 44 'LANG_NAME' => 'AIMMS3', 45 'COMMENT_SINGLE' => array(1 => '!'), 46 'COMMENT_MULTI' => array('/*' => '*/'), 47 'HARDQUOTE' => array("'", "'"), 48 'HARDESCAPE' => array("'", "\\"), 49 'HARDCHAR' => "\\", 50 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, 51 'QUOTEMARKS' => array('"'), 52 'OBJECT_SPLITTERS' => array(), 53 'REGEXPS' => array(), 54 'STRICT_MODE_APPLIES' => GESHI_MAYBE, 55 'SCRIPT_DELIMITERS' => array(), 56 'HIGHLIGHT_STRICT_BLOCK' => array(), 57 'ESCAPE_CHAR' => '', 58 'KEYWORDS' => array( 59 1 => array( 60 'if', 'then', 'else', 'endif', 'elseif', 'for', 'do', 'while' , 'endfor' , 'endwhile', 'break', 'switch', 'endswitch', 61 'display', 'return', 'in', 'apply' 62 63 ), 64 2 => array( 65 'main model' , 'declaration section', 'procedure', 'endprocedure', 'endmodel', 'endsection' , 'set', 'parameter', 66 'string parameter', 'element parameter', 'quantity' 67 ), 68 3 => array( 69 'identifier', 'index', 'index domain', 'body' 70 ), 71 4 => array( 72 'ActiveCard','Card','ConvertUnit','DistributionCumulative','DistributionDensity','DistributionDeviation', 73 'DistributionInverseCumulative','DistributionInverseDensity','DistributionKurtosis','DistributionMean', 74 'DistributionSkewness','DistributionVariance','Element','EvaluateUnit','First','FormatString','Last', 75 'Ord','Unit','Val','Aggregate','AttributeToString','CaseCompareIdentifier','CaseCreateDifferenceFile', 76 'CloseDataSource','CreateTimeTable','ConstraintVariables','ConvertReferenceDate','CloneElement', 77 'FindNthString','FindReplaceNthString','FindReplaceStrings','FindString','StringOccurrences', 78 'CurrentToMoment','CurrentToString','CurrentToTimeSlot','DaylightsavingEndDate','DaylightsavingStartDate', 79 'DeclaredSubset','DomainIndex','IndexRange','IsRunningAsViewer','ListingFileCopy','ListingFileDelete', 80 'DirectoryGetFiles','DirectoryGetSubdirectories','DirectSQL','Disaggregate','ElementCast','ElementRange', 81 'EnvironmentGetString','EnvironmentSetString','errh::Adapt','errh::Attribute','errh::Category', 82 'errh::Code','errh::Column','errh::CreationTime','errh::Filename','errh::InsideCategory', 83 'errh::IsMarkedAsHandled','errh::Line','errh::MarkAsHandled','errh::Message','errh::Multiplicity', 84 'errh::Node','errh::NumberOfLocations','errh::Severity','ExcelAddNewSheet','ExcelAssignParameter', 85 'ExcelAssignSet','ExcelAssignTable','ExcelAssignValue','ExcelClearRange','ExcelCloseWorkbook', 86 'ExcelColumnName','ExcelColumnNumber','ExcelCopyRange','ExcelCreateWorkbook','ExcelDeleteSheet', 87 'ExcelPrint','ExcelRetrieveParameter','ExcelRetrieveSet','ExcelRetrieveTable','ExcelRetrieveValue', 88 'ExcelRunMacro','ExcelSaveWorkbook','ExcelSetActiveSheet','ExcelSetUpdateLinksBehavior', 89 'ExcelSetVisibility','FindUsedElements','GenerateCUT','GMP::Coefficient::Get', 90 'GMP::Coefficient::GetQuadratic','GMP::Coefficient::Set','GMP::Coefficient::SetQuadratic', 91 'GMP::Column::Add','GMP::Column::Delete','GMP::Column::Freeze','GMP::Column::GetLowerbound', 92 'GMP::Column::GetScale','GMP::Column::GetStatus','GMP::Column::GetType','GMP::Column::GetUpperbound', 93 'GMP::Column::SetAsObjective','GMP::Column::SetLowerbound','GMP::Column::SetType', 94 'GMP::Column::SetUpperbound','GMP::Column::Unfreeze','GMP::Instance::AddIntegerEliminationRows', 95 'GMP::Instance::CalculateSubGradient','GMP::Instance::Copy','GMP::Instance::CreateDual', 96 'GMP::Instance::CreateMasterMip','GMP::Instance::CreatePresolved', 97 'GMP::SolverSession::CreateProgressCategory','GMP::Instance::CreateProgressCategory', 98 'GMP::Instance::CreateSolverSession','GMP::Stochastic::CreateBendersRootproblem', 99 'GMP::Instance::Delete','GMP::Instance::DeleteIntegerEliminationRows', 100 'GMP::Instance::DeleteSolverSession','GMP::Instance::FindApproximatelyFeasibleSolution', 101 'GMP::Instance::FixColumns','GMP::Instance::Generate','GMP::Instance::GenerateRobustCounterpart', 102 'GMP::Instance::GenerateStochasticProgram','GMP::SolverSession::GetCallbackInterruptStatus', 103 'GMP::SolverSession::WaitForCompletion','GMP::SolverSession::WaitForSingleCompletion', 104 'GMP::SolverSession::ExecutionStatus','GMP::Instance::GetDirection','GMP::Instance::GetLinearObjective', 105 'GMP::Instance::GetMathematicalProgrammingType','GMP::Instance::GetMemoryUsed', 106 'GMP::Instance::GetNumberOfColumns','GMP::Instance::GetNumberOfIndicatorRows', 107 'GMP::Instance::GetNumberOfIntegerColumns','GMP::Instance::GetNumberOfNonlinearColumns', 108 'GMP::Instance::GetNumberOfNonlinearNonzeros','GMP::Instance::GetNumberOfNonlinearRows', 109 'GMP::Instance::GetNumberOfNonzeros','GMP::Instance::GetNumberOfRows', 110 'GMP::Instance::GetNumberOfSOS1Rows','GMP::Instance::GetNumberOfSOS2Rows', 111 'GMP::Instance::GetObjective','GMP::Instance::GetOptionValue','GMP::Instance::GetSolver', 112 'GMP::Instance::GetSymbolicMathematicalProgram','GMP::Instance::MemoryStatistics', 113 'GMP::Instance::Rename','GMP::Instance::SetCallbackAddCut','GMP::Instance::SetCallbackBranch', 114 'GMP::Instance::SetCallbackHeuristic','GMP::Instance::SetCallbackIncumbent', 115 'GMP::Instance::SetCallbackIterations','GMP::Instance::SetCallbackNewIncumbent', 116 'GMP::Instance::SetCallbackStatusChange','GMP::Instance::SetCutoff','GMP::Instance::SetDirection', 117 'GMP::Instance::SetMathematicalProgrammingType','GMP::Instance::SetSolver','GMP::Instance::Solve', 118 'GMP::Stochastic::GetObjectiveBound','GMP::Stochastic::GetRelativeWeight', 119 'GMP::Stochastic::GetRepresentativeScenario','GMP::Stochastic::UpdateBendersSubproblem', 120 'GMP::Linearization::Add','GMP::Linearization::AddSingle','GMP::Linearization::Delete', 121 'GMP::Linearization::GetDeviation','GMP::Linearization::GetDeviationBound', 122 'GMP::Linearization::GetLagrangeMultiplier','GMP::Linearization::GetType', 123 'GMP::Linearization::GetWeight','GMP::Linearization::RemoveDeviation', 124 'GMP::Linearization::SetDeviationBound','GMP::Linearization::SetType', 125 'GMP::Linearization::SetWeight','GMP::ProgressWindow::DeleteCategory', 126 'GMP::ProgressWindow::DisplayLine','GMP::ProgressWindow::DisplayProgramStatus', 127 'GMP::ProgressWindow::DisplaySolver','GMP::ProgressWindow::DisplaySolverStatus', 128 'GMP::ProgressWindow::FreezeLine','GMP::ProgressWindow::UnfreezeLine', 129 'GMP::QuadraticCoefficient::Get','GMP::QuadraticCoefficient::Set','GMP::Row::Activate', 130 'GMP::Stochastic::AddBendersFeasibilityCut','GMP::Stochastic::AddBendersOptimalityCut', 131 'GMP::Stochastic::BendersFindFeasibilityReference','GMP::Stochastic::MergeSolution', 132 'GMP::Row::Add','GMP::Row::Deactivate','GMP::Row::Delete','GMP::Row::DeleteIndicatorCondition', 133 'GMP::Row::Generate','GMP::Row::GetConvex','GMP::Row::GetIndicatorColumn', 134 'GMP::Row::GetIndicatorCondition','GMP::Row::GetLeftHandSide','GMP::Row::GetRelaxationOnly', 135 'GMP::Row::GetRightHandSide','GMP::Row::GetScale','GMP::Row::GetStatus','GMP::Row::GetType', 136 'GMP::Row::SetConvex','GMP::Row::SetIndicatorCondition','GMP::Row::SetLeftHandSide', 137 'GMP::Row::SetRelaxationOnly','GMP::Row::SetRightHandSide','GMP::Row::SetType', 138 'GMP::Solution::Check','GMP::Solution::Copy','GMP::Solution::Count','GMP::Solution::Delete', 139 'GMP::Solution::DeleteAll','GMP::Solution::GetColumnValue','GMP::Solution::GetCPUSecondsUsed', 140 'GMP::Solution::GetDistance','GMP::Solution::GetFirstOrderDerivative', 141 'GMP::Solution::GetIterationsUsed','GMP::Solution::GetNodesUsed','GMP::Solution::GetLinearObjective', 142 'GMP::Solution::GetMemoryUsed','GMP::Solution::GetObjective','GMP::Solution::GetPenalizedObjective', 143 'GMP::Solution::GetProgramStatus','GMP::Solution::GetRowValue','GMP::Solution::GetSolutionsSet', 144 'GMP::Solution::GetSolverStatus','GMP::Solution::IsDualDegenerated','GMP::Solution::IsInteger', 145 'GMP::Solution::IsPrimalDegenerated','GMP::Solution::SetMIPStartFlag','GMP::Solution::Move', 146 'GMP::Solution::RandomlyGenerate','GMP::Solution::RetrieveFromModel', 147 'GMP::Solution::RetrieveFromSolverSession','GMP::Solution::SendToModel', 148 'GMP::Solution::SendToModelSelection','GMP::Solution::SendToSolverSession', 149 'GMP::Solution::SetIterationCount','GMP::Solution::SetProgramStatus','GMP::Solution::SetSolverStatus', 150 'GMP::Solution::UpdatePenaltyWeights','GMP::Solution::ConstructMean', 151 'GMP::SolverSession::AsynchronousExecute','GMP::SolverSession::Execute', 152 'GMP::SolverSession::Interrupt','GMP::SolverSession::AddLinearization', 153 'GMP::SolverSession::GenerateBranchLowerBound','GMP::SolverSession::GenerateBranchUpperBound', 154 'GMP::SolverSession::GenerateBranchRow','GMP::SolverSession::GenerateCut', 155 'GMP::SolverSession::GenerateBinaryEliminationRow','GMP::SolverSession::GetCPUSecondsUsed', 156 'GMP::SolverSession::GetHost','GMP::SolverSession::GetInstance', 157 'GMP::SolverSession::GetIterationsUsed','GMP::SolverSession::GetNodesLeft', 158 'GMP::SolverSession::GetNodesUsed','GMP::SolverSession::GetNodeNumber', 159 'GMP::SolverSession::GetNodeObjective','GMP::SolverSession::GetNumberOfBranchNodes', 160 'GMP::SolverSession::GetLinearObjective','GMP::SolverSession::GetMemoryUsed', 161 'GMP::SolverSession::GetObjective','GMP::SolverSession::GetOptionValue', 162 'GMP::SolverSession::GetProgramStatus','GMP::SolverSession::GetSolver', 163 'GMP::SolverSession::GetSolverStatus','GMP::SolverSession::RejectIncumbent', 164 'GMP::Event::Create','GMP::Event::Delete','GMP::Event::Reset','GMP::Event::Set', 165 'GMP::SolverSession::SetObjective','GMP::SolverSession::SetOptionValue', 166 'GMP::Instance::SetCPUSecondsLimit','GMP::Instance::SetIterationLimit', 167 'GMP::Instance::SetMemoryLimit','GMP::Instance::SetOptionValue','GMP::Tuning::SolveSingleMPS', 168 'GMP::Tuning::TuneMultipleMPS','GMP::Tuning::TuneSingleGMP', 169 'GMP::Solver::GetAsynchronousSessionsLimit','GMP::Robust::EvaluateAdjustableVariables', 170 'GenerateXML','GetDatasourceProperty','ReadGeneratedXML','ReadXML','ReferencedIdentifiers', 171 'WriteXML','IdentifierAttributes','IdentifierDimension','IsRuntimeIdentifier','IdentifierMemory', 172 'IdentifierMemoryStatistics','IdentifierText','IdentifierType','IdentifierUnit','ScalarValue', 173 'SectionIdentifiers','SubRange','MemoryInUse','CommitTransaction','RollbackTransaction', 174 'MemoryStatistics','me::AllowedAttribute','me::ChangeType','me::ChangeTypeAllowed','me::Children', 175 'me::ChildTypeAllowed','me::Compile','me::Create','me::CreateLibrary','me::Delete','me::ExportNode', 176 'me::GetAttribute','me::ImportLibrary','me::ImportNode','me::IsRunnable','me::Move','me::Parent', 177 'me::Rename','me::SetAttribute','MomentToString','MomentToTimeSlot','OptionGetValue', 178 'OptionGetKeywords','OptionGetString','OptionSetString','OptionSetValue','PeriodToString', 179 'ProfilerContinue','ProfilerPause','ProfilerRestart','RestoreInactiveElements', 180 'RetrieveCurrentVariableValues','SetAddRecursive','SetElementAdd','SetElementRename', 181 'SQLColumnData','SQLCreateConnectionString','SQLDriverName','SQLNumberOfColumns', 182 'SQLNumberOfDrivers','SQLNumberOfTables','SQLNumberOfViews','SQLTableName','SQLViewName', 183 'StartTransaction','StringToElement','StringToMoment','StringToTimeSlot','TestDatabaseColumn', 184 'TestDatabaseTable','TestDataSource','TestDate','TimeslotCharacteristic','TimeslotToMoment', 185 'TimeslotToString','TimeZoneOffset','VariableConstraints','PageOpen','PageOpenSingle','PageClose', 186 'PageGetActive','PageSetFocus','PageGetFocus','PageSetCursor','PageRefreshAll','PageGetChild', 187 'PageGetParent','PageGetNext','PageGetPrevious','PageGetNextInTreeWalk','PageGetUsedIdentifiers', 188 'PageGetTitle','PageGetAll','PageCopyTableToClipboard','PageCopyTableToExcel','PrintPage', 189 'PrintPageCount','PrintStartReport','PrintEndReport','PivotTableReloadState','PivotTableSaveState', 190 'PivotTableDeleteState','FileSelect','FileSelectNew','FileDelete','FileExists','FileCopy', 191 'FileMove','FileView','FileEdit','FilePrint','FileTime','FileTouch','FileAppend','FileGetSize', 192 'DirectorySelect','DirectoryCreate','DirectoryDelete','DirectoryExists','DirectoryCopy', 193 'DirectoryMove','DirectoryGetCurrent','DialogProgress','DialogMessage','DialogError', 194 'StatusMessage','DialogAsk','DialogGetString','DialogGetDate','DialogGetNumber','DialogGetElement', 195 'DialogGetElementByText','DialogGetElementByData','DialogGetPassword','DialogGetColor','CaseNew', 196 'CaseFind','CaseCreate','CaseLoadCurrent','CaseMerge','CaseLoadIntoCurrent','CaseSelect', 197 'CaseSelectNew','CaseSetCurrent','CaseSave','CaseSaveAll','CaseSaveAs','CaseSelectMultiple', 198 'CaseGetChangedStatus','CaseSetChangedStatus','CaseDelete','CaseGetType','CaseGetDatasetReference', 199 'CaseWriteToSingleFile','CaseReadFromSingleFile','DatasetNew','DatasetFind','DatasetCreate', 200 'DatasetLoadCurrent','DatasetMerge','DatasetLoadIntoCurrent','DatasetSelect','DatasetSelectNew', 201 'DatasetSetCurrent','DatasetSave','DatasetSaveAll','DatasetSaveAs','DatasetGetChangedStatus', 202 'DatasetSetChangedStatus','DatasetDelete','DatasetGetCategory','DataFileGetName', 203 'DataFileGetAcronym','DataFileSetAcronym','DataFileGetComment','DataFileSetComment', 204 'DataFileGetPath','DataFileGetTime','DataFileGetOwner','DataFileGetGroup','DataFileReadPermitted', 205 'DataFileWritePermitted','DataFileExists','DataFileCopy','DataCategoryContents','CaseTypeContents', 206 'CaseTypeCategories','Execute','OpenDocument','TestInternetConnection','GeoFindCoordinates', 207 'ShowHelpTopic','Delay','ScheduleAt','ExitAimms','SessionArgument','SessionHasVisibleGUI', 208 'ProjectDeveloperMode','DebuggerBreakpoint','ShowProgressWindow','ShowMessageWindow', 209 'SolverGetControl','SolverReleaseControl','ProfilerStart','DataManagerImport','DataManagerExport', 210 'DataManagerFileNew','DataManagerFileOpen','DataManagerFileGetCurrent','DataImport220', 211 'SecurityGetUsers','SecurityGetGroups','UserColorAdd','UserColorDelete','UserColorGetRGB', 212 'UserColorModify','LicenseNumber','LicenseType','LicenseStartDate','LicenseExpirationDate', 213 'LicenseMaintenanceExpirationDate','VARLicenseExpirationDate','AimmsRevisionString', 214 'VARLicenseCreate','HistogramCreate','HistogramDelete','HistogramSetDomain', 215 'HistogramAddObservation','HistogramGetFrequencies','HistogramGetBounds', 216 'HistogramGetObservationCount','HistogramGetAverage','HistogramGetDeviation', 217 'HistogramGetSkewness','HistogramGetKurtosis','DateDifferenceDays','DateDifferenceYearFraction', 218 'PriceFractional','PriceDecimal','RateEffective','RateNominal','DepreciationLinearLife', 219 'DepreciationLinearRate','DepreciationNonLinearSumOfYear','DepreciationNonLinearLife', 220 'DepreciationNonLinearFactor','DepreciationNonLinearRate','DepreciationSum', 221 'InvestmentConstantPresentValue','InvestmentConstantFutureValue', 222 'InvestmentConstantPeriodicPayment','InvestmentConstantInterestPayment', 223 'InvestmentConstantPrincipalPayment','InvestmentConstantCumulativePrincipalPayment', 224 'InvestmentConstantCumulativeInterestPayment','InvestmentConstantNumberPeriods', 225 'InvestmentConstantRateAll','InvestmentConstantRate','InvestmentVariablePresentValue', 226 'InvestmentVariablePresentValueInperiodic','InvestmentSingleFutureValue', 227 'InvestmentVariableInternalRateReturnAll','InvestmentVariableInternalRateReturn', 228 'InvestmentVariableInternalRateReturnInperiodicAll','InvestmentVariableInternalRateReturnInperiodic', 229 'InvestmentVariableInternalRateReturnModified','SecurityDiscountedPrice', 230 'SecurityDiscountedRedemption','SecurityDiscountedYield','SecurityDiscountedRate', 231 'TreasuryBillPrice','TreasuryBillYield','TreasuryBillBondEquivalent','SecurityMaturityPrice', 232 'SecurityMaturityCouponRate','SecurityMaturityYield','SecurityMaturityAccruedInterest', 233 'SecurityCouponNumber','SecurityCouponPreviousDate','SecurityCouponNextDate','SecurityCouponDays', 234 'SecurityCouponDaysPreSettlement','SecurityCouponDaysPostSettlement','SecurityPeriodicPrice', 235 'SecurityPeriodicRedemption','SecurityPeriodicCouponRate','SecurityPeriodicYieldAll', 236 'SecurityPeriodicYield','SecurityPeriodicAccruedInterest','SecurityPeriodicDuration', 237 'SecurityPeriodicDurationModified','Abs','AtomicUnit','Ceil','Character','CharacterNumber','Cube', 238 'Degrees','Div','Exp','FileRead','Floor','Log','Log10','Mapval','Max','Min','Mod','Power', 239 'Radians','Round','Sign','Sqr','Sqrt','StringCapitalize','StringLength','StringToLower', 240 'StringToUnit','StringToUpper','SubString','Trunc','Binomial','NegativeBinomial','Poisson', 241 'Geometric','HyperGeometric','Uniform','Normal','LogNormal','Triangular','Exponential','Weibull', 242 'Beta','Gamma','Logistic','Pareto','ExtremeValue','Precision','Factorial','Combination', 243 'Permutation','Errorf','Cos','Sin','Tan','ArcCos','ArcSin','ArcTan','Cosh','Sinh','Tanh', 244 'ArcCosh','ArcSinh','ArcTanh' 245 ) 246 ), 247 'SYMBOLS' => array( 248 0 => array( 249 '(', ')', '[', ']', '{', '}', 250 '%', '&', '|', '/', 251 '<', '>', '>=' , '<=', ':=', 252 '=', '-', '+', '*', 253 '.', ',' 254 ) 255 ), 256 'CASE_SENSITIVE' => array( 257 GESHI_COMMENTS => false, 258 1 => false, 259 2 => false, 260 3 => false, 261 4 => false 262 ), 263 'STYLES' => array( 264 'KEYWORDS' => array( 265 1 => 'color: #0000FF;', 266 2 => 'color: #000000; font-weight: bold;', 267 3 => 'color: #404040;', 268 4 => 'color: #990000; font-weight: bold;' 269 ), 270 'BRACKETS' => array( 271 0 => 'color: #009900;' 272 ), 273 'STRINGS' => array( 274 0 => 'color: #808080; font-style: italic ', 275 'HARD' => 'color: #808080; font-style: italic' 276 ), 277 'NUMBERS' => array( 278 0 => 'color: #cc66cc;', 279 GESHI_NUMBER_OCT_PREFIX => 'color: #208080;', 280 GESHI_NUMBER_HEX_PREFIX => 'color: #208080;', 281 GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;', 282 ), 283 'COMMENTS' => array( 284 1 => 'color: #008000; font-style: italic;', 285 'MULTI' => 'color: #008000; font-style: italic;' 286 ), 287 288 'METHODS' => array( 289 1 => 'color: #004000;', 290 2 => 'color: #004000;' 291 ), 292 'SYMBOLS' => array( 293 0 => 'color: #339933;', 294 1 => 'color: #000000; font-weight: bold;' 295 ), 296 'REGEXPS' => array( 297 ), 298 'SCRIPT' => array( 299 0 => '', 300 1 => '', 301 2 => '', 302 3 => '', 303 4 => '', 304 5 => '' 305 ), 306 'ESCAPE_CHAR' => array() 307 ), 308 'URLS' => array( 309 1 => '', 310 2 => '', 311 3 => '', 312 4 => '' 313 ), 314 'OOLANG' => false, 315 'TAB_WIDTH' => 4 316); 317