text: Clazz.declarePackage ("JS");
  Clazz.load (null, "JS.ScriptTokenParser", ["java.lang.Boolean", "$.Float", "JU.Lst", "$.P3", "$.PT", "J.i18n.GT", "JS.ScriptParam", "$.T", "JU.Logger", "$.SimpleUnitCell"], function () {
  c$ = Clazz.decorateAsClass (function () {
  this.vwr = null;
  this.script = null;
  this.isStateScript = false;
  this.lineCurrent = 0;
  this.iCommand = 0;
  this.ichCurrentCommand = 0;
  this.ichComment = 0;
  this.ichEnd = 0;
  this.ichToken = 0;
  this.theToken = null;
  this.lastFlowCommand = null;
  this.tokenCommand = null;
  this.lastToken = null;
  this.tokenAndEquals = null;
  this.theTok = 0;
  this.nTokens = 0;
  this.tokCommand = 0;
  this.ptNewSetModifier = 0;
  this.isNewSet = false;
  this.haveMacro = false;
  this.logMessages = true;
  this.atokenInfix = null;
  this.itokenInfix = 0;
  this.isSetBrace = false;
  this.isMathExpressionCommand = false;
  this.isSetOrDefine = false;
  this.ltokenPostfix = null;
  this.isEmbeddedExpression = false;
  this.isCommaAsOrAllowed = false;
  this.theValue = null;
  this.htUserFunctions = null;
  this.haveString = false;
  this.residueSpecCodeGenerated = false;
  this.errorMessage = null;
  this.errorMessageUntranslated = null;
  this.errorLine = null;
  this.errorType = null;
  Clazz.instantialize (this, arguments);
  }, JS, "ScriptTokenParser");
  Clazz.defineMethod (c$, "compileExpressions", 
  function () {
  var isScriptExpression = ((this.tokCommand == 134222850 || this.tokCommand == 4124) && this.tokAt (2) == 268435472);
  this.isEmbeddedExpression = (isScriptExpression || (this.tokCommand != 0 && (this.tokCommand != 134320141 && this.tokCommand != 102436 && this.tokCommand != 364558 && this.tokCommand != 102412 || this.tokenCommand.intValue != 2147483647) && this.tokCommand != 102409 && !JS.T.tokAttr (this.tokCommand, 12288) && (this.nTokens > 2 || !JS.T.tokAttr (this.tokCommand, 20480))));
  this.isMathExpressionCommand = (this.tokCommand == 1073741824 || isScriptExpression || JS.T.tokAttr (this.tokCommand, 36864));
  var checkExpression = this.isEmbeddedExpression || (JS.T.tokAttr (this.tokCommand, 12288));
  if (this.tokAt (1) == 1073742330 && JS.T.tokAttr (this.tokCommand, 12288)) checkExpression = false;
  if (checkExpression && !this.compileExpression ()) return false;
  var size = this.atokenInfix.length;
  var nDefined = 0;
  for (var i = 1; i < size; i++) {
  if (this.tokAt (i) == 12290) nDefined++;
  }
  size -= nDefined;
  if (this.isNewSet) {
  if (size == 1) {
  this.atokenInfix[0] = JS.T.tv (134320141, 0, this.atokenInfix[0].value);
  this.isNewSet = false;
  }}if ((this.isNewSet || this.isSetBrace) && size < this.ptNewSetModifier + 2) {
  if (!this.isNewSet || !this.haveMacro) return this.commandExpected ();
  this.htUserFunctions.put (this.atokenInfix[0].value, Boolean.TRUE);
  }return (size == 1 || !JS.T.tokAttr (this.tokCommand, 262144) ? true : this.error (0));
  });
  Clazz.defineMethod (c$, "compileExpression", 
  function () {
  var firstToken = (this.isSetOrDefine && !this.isSetBrace ? 2 : 1);
  this.ltokenPostfix =  new JU.Lst ();
  this.itokenInfix = 0;
  var tokenBegin = null;
  var tok = this.tokAt (1);
  switch (this.tokCommand) {
  case 12290:
  var i = (this.tokAt (1) == 12290 ? 2 : 1);
  if (this.tokAt (i) == 2 && this.tokAt (i + 1) == 1073742336 && this.tokAt (i + 3) == 268435860) {
  this.tokCommand = 36867;
  this.isSetBrace = true;
  this.ptNewSetModifier = i + 3;
  this.isMathExpressionCommand = true;
  this.isEmbeddedExpression = true;
  this.addTokenToPostfixToken (JS.T.tokenSetProperty);
  this.addTokenToPostfixToken (JS.T.tokenExpressionBegin);
  for (var j = 0; j++ <= i; ) this.addNextToken ();
  
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  firstToken = 0;
  }break;
  case 12295:
  if (tok == 1677721602) firstToken = 2;
  break;
  case 1275082245:
  switch (tok) {
  case 1073742335:
  case 1073742334:
  tok = this.tokAt (++firstToken);
  break;
  }
  case 12294:
  case 1610625028:
  switch (tok) {
  case 1275069441:
  case 1073742119:
  tok = this.tokAt (++firstToken);
  break;
  }
  if (tok == 1086324742 && !JS.T.tokAttr (this.tokAt (firstToken + 1), 268435456)) firstToken++;
  }
  for (var i = 0; i < firstToken && this.addNextToken (); i++) {
  }
  while (this.moreTokens ()) {
  if (this.isEmbeddedExpression) {
  while (!this.isExpressionNext ()) {
  if (this.tokPeekIs (1073741824) && !(this.tokCommand == 134222849 && this.itokenInfix == 1)) {
  var name = this.atokenInfix[this.itokenInfix].value;
  var t = JS.T.getTokenFromName (name);
  if (t != null) if (!this.isMathExpressionCommand && this.lastToken.tok != 12290 || (this.lastToken.tok == 1073742336 || this.tokAt (this.itokenInfix + 1) == 268435472) && !this.isUserFunction (name)) {
  this.atokenInfix[this.itokenInfix] = t;
  }}if (!this.addNextToken ()) break;
  }
  if (!this.moreTokens ()) break;
  }if (this.lastToken.tok == 12290) {
  if (!this.clauseDefine (true, false)) return false;
  continue;
  }if (!this.isMathExpressionCommand) this.addTokenToPostfixToken (tokenBegin = JS.T.o (1073742325, "implicitExpressionBegin"));
  if (!this.clauseOr (this.isCommaAsOrAllowed || !this.isMathExpressionCommand && this.tokPeekIs (268435472))) return false;
  if (!this.isMathExpressionCommand && !(this.isEmbeddedExpression && this.lastToken === JS.T.tokenCoordinateEnd)) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  }if (this.moreTokens ()) {
  if (this.tokCommand != 1275082245 && this.tokCommand != 12291 && !this.isEmbeddedExpression) return this.error (5);
  if (this.tokCommand == 1275082245) {
  tokenBegin.intValue = 0;
  this.tokCommand = 0;
  this.isEmbeddedExpression = true;
  this.isMathExpressionCommand = true;
  this.isCommaAsOrAllowed = false;
  }}}
  this.atokenInfix = this.ltokenPostfix.toArray ( new Array (this.ltokenPostfix.size ()));
  return true;
  });
  Clazz.defineMethod (c$, "isUserFunction", 
  function (name) {
  name = name.toLowerCase ();
  return (!this.isStateScript && (this.vwr.isFunction (name) || this.htUserFunctions.containsKey (name)));
  }, "~S");
  Clazz.defineMethod (c$, "isExpressionNext", 
   function () {
  return this.tokPeekIs (1073742332) && !(this.tokAt (this.itokenInfix + 1) == 4 && this.tokAt (this.itokenInfix + 2) == 268435490) || !this.isMathExpressionCommand && this.tokPeekIs (268435472);
  });
  c$.tokenAttr = Clazz.defineMethod (c$, "tokenAttr", 
  function (token, tok) {
  return token != null && JS.T.tokAttr (token.tok, tok);
  }, "JS.T,~N");
  Clazz.defineMethod (c$, "moreTokens", 
   function () {
  return (this.itokenInfix < this.atokenInfix.length);
  });
  Clazz.defineMethod (c$, "tokAt", 
  function (i) {
  return (i < this.atokenInfix.length ? this.atokenInfix[i].tok : 0);
  }, "~N");
  Clazz.defineMethod (c$, "tokPeek", 
   function () {
  return (this.itokenInfix >= this.atokenInfix.length ? 0 : this.atokenInfix[this.itokenInfix].tok);
  });
  Clazz.defineMethod (c$, "tokPeekIs", 
   function (tok) {
  return (this.tokAt (this.itokenInfix) == tok);
  }, "~N");
  Clazz.defineMethod (c$, "intPeek", 
   function () {
  return (this.itokenInfix >= this.atokenInfix.length ? 2147483647 : this.atokenInfix[this.itokenInfix].intValue);
  });
  Clazz.defineMethod (c$, "valuePeek", 
   function () {
  return (this.moreTokens () ? this.atokenInfix[this.itokenInfix].value : "");
  });
  Clazz.defineMethod (c$, "tokenNext", 
   function () {
  return (this.itokenInfix >= this.atokenInfix.length ? null : this.atokenInfix[this.itokenInfix++]);
  });
  Clazz.defineMethod (c$, "tokenNextTok", 
   function (tok) {
  var token = this.tokenNext ();
  return (token != null && token.tok == tok);
  }, "~N");
  Clazz.defineMethod (c$, "returnToken", 
   function () {
  this.itokenInfix--;
  return false;
  });
  Clazz.defineMethod (c$, "getToken", 
   function () {
  this.theValue = ((this.theToken = this.tokenNext ()) == null ? null : this.theToken.value);
  return this.theToken;
  });
  Clazz.defineMethod (c$, "getNumericalToken", 
   function () {
  return (this.getToken () != null && (this.theToken.tok == 2 || this.theToken.tok == 3));
  });
  Clazz.defineMethod (c$, "floatValue", 
   function () {
  switch (this.theToken.tok) {
  case 2:
  return this.theToken.intValue;
  case 3:
  return (this.theValue).floatValue ();
  }
  return 0;
  });
  Clazz.defineMethod (c$, "addTokenToPostfix", 
   function (tok, value) {
  return this.addTokenToPostfixToken (JS.T.o (tok, value));
  }, "~N,~O");
  Clazz.defineMethod (c$, "addTokenToPostfixInt", 
   function (tok, intValue, value) {
  return this.addTokenToPostfixToken (JS.T.tv (tok, intValue, value));
  }, "~N,~N,~O");
  Clazz.defineMethod (c$, "addTokenToPostfixToken", 
   function (token) {
  if (token == null) return false;
  if (this.logMessages) JU.Logger.debug ("addTokenToPostfix" + token);
  if (token.tok == 268435520 && (this.lastToken.tok == 1073742336 || this.lastToken.tok == 1073742337)) {
  var ipt = this.ltokenPostfix.size () - 1;
  this.ltokenPostfix.removeItemAt (ipt);
  this.ltokenPostfix.addLast (JS.T.tokenRightParen);
  var pcount = 0;
  var tok;
  for (var i = this.ltokenPostfix.size (); --i >= 0 && pcount >= 0; ) {
  switch (tok = this.ltokenPostfix.get (i).tok) {
  case 268435473:
  case 268435521:
  pcount++;
  break;
  case 268435472:
  case 268435520:
  pcount--;
  var tok2;
  if (pcount == 1 && (tok2 = this.ltokenPostfix.get (i - 1).tok) != 268435473 && tok2 != 268435521) {
  ipt = (tok == 268435520 ? i - 1 : i);
  pcount = -10;
  }break;
  default:
  tok2 = (i == 0 ? 0 : this.ltokenPostfix.get (i - 1).tok);
  if (tok2 == 1073742336 || tok2 == 1073742337) {
  ipt = i - 1;
  break;
  }if (i == ipt - 1) {
  ipt = i;
  pcount = -10;
  }break;
  }
  }
  if (pcount == -10) {
  this.ltokenPostfix.add (ipt, JS.T.tokenLeftParen);
  }}this.ltokenPostfix.addLast (token);
  this.lastToken = token;
  return true;
  }, "JS.T");
  Clazz.defineMethod (c$, "addNextToken", 
   function () {
  return this.addTokenToPostfixToken (this.tokenNext ());
  });
  Clazz.defineMethod (c$, "addNextTokenIf", 
   function (tok) {
  return (this.tokPeekIs (tok) && this.addNextToken ());
  }, "~N");
  Clazz.defineMethod (c$, "addSubstituteTokenIf", 
   function (tok, token) {
  if (!this.tokPeekIs (tok)) return false;
  this.itokenInfix++;
  return this.addTokenToPostfixToken (token);
  }, "~N,JS.T");
  Clazz.defineMethod (c$, "clauseOr", 
   function (allowCommaAsOr) {
  this.haveString = false;
  if (!this.clauseAnd ()) return false;
  if (this.isEmbeddedExpression && this.lastToken.tok == 1073742326) return true;
  var tok;
  while ((tok = this.tokPeek ()) == 268435536 || tok == 268435537 || tok == 268435538 || allowCommaAsOr && tok == 268435504) {
  if (tok == 268435504 && !this.haveString) this.addSubstituteTokenIf (268435504, JS.T.tokenOr);
   else this.addNextToken ();
  if (!this.clauseAnd ()) return false;
  if (allowCommaAsOr && (this.lastToken.tok == 1073742338 || this.lastToken.tok == 10)) this.haveString = true;
  }
  return true;
  }, "~B");
  Clazz.defineMethod (c$, "clauseAnd", 
   function () {
  if (!this.clauseNot ()) return false;
  if (this.isEmbeddedExpression && this.lastToken.tok == 1073742326) return true;
  while (this.tokPeekIs (268435552)) {
  this.addNextToken ();
  if (!this.clauseNot ()) return false;
  }
  return true;
  });
  Clazz.defineMethod (c$, "clauseNot", 
   function () {
  if (this.tokPeekIs (268435568)) {
  this.addNextToken ();
  return this.clauseNot ();
  }return (this.clausePrimitive ());
  });
  Clazz.defineMethod (c$, "clausePrimitive", 
   function () {
  var tok = this.tokPeek ();
  switch (tok) {
  case 1073742195:
  this.itokenInfix++;
  return this.clausePrimitive ();
  case 0:
  return this.error (4);
  case 1073742327:
  case 10:
  case 268435632:
  case 136314895:
  case 2097160:
  case 2097159:
  case 2097162:
  case 1073742331:
  case 1073742333:
  case 2097184:
  return this.addNextToken ();
  case 4:
  this.haveString = true;
  return this.addNextToken ();
  case 3:
  return this.addTokenToPostfixInt (1073742359, this.fixModelSpec (this.getToken ()), this.theValue);
  case 1094713349:
  case 1094713350:
  return this.clauseCell (tok);
  case 134217736:
  case 1275203608:
  return this.clauseConnected (tok == 1275203608);
  case 134218756:
  case 134218757:
  return this.clauseSubstructure ();
  case 134217759:
  case 134353926:
  return this.clauseWithin (tok == 134217759);
  case 12290:
  return this.clauseDefine (false, false);
  case 1677721602:
  case 1745489939:
  this.addNextToken ();
  if (this.tokPeekIs (10)) this.addNextToken ();
   else if (this.tokPeekIs (12290)) return this.clauseDefine (false, false);
  return true;
  case 268435472:
  this.addNextToken ();
  if (!this.clauseOr (true)) return false;
  if (!this.addNextTokenIf (268435473)) return this.errorStr (15, ")");
  return this.checkForItemSelector (true);
  case 1073742332:
  return this.checkForCoordinate (this.isMathExpressionCommand);
  default:
  if (this.clauseResidueSpec ()) return true;
  if (this.isError ()) return false;
  if (JS.T.tokAttr (tok, 1077936128)) {
  var itemp = this.itokenInfix;
  var isOK = this.clauseComparator (true);
  if (isOK || this.itokenInfix != itemp) return isOK;
  if (tok == 1237320707) {
  return this.clauseSubstructure ();
  }}return this.addNextToken ();
  }
  });
  Clazz.defineMethod (c$, "checkForCoordinate", 
   function (isImplicitExpression) {
  var isCoordinate = false;
  var pt = this.ltokenPostfix.size ();
  if (isImplicitExpression) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionBegin);
  this.tokenNext ();
  } else if (this.isEmbeddedExpression) {
  this.tokenNext ();
  pt--;
  } else {
  this.addNextToken ();
  }var isHash = this.tokPeekIs (4);
  if (isHash) {
  isImplicitExpression = false;
  this.returnToken ();
  this.ltokenPostfix.removeItemAt (this.ltokenPostfix.size () - 1);
  this.addNextToken ();
  var nBrace = 1;
  while (nBrace != 0) {
  if (this.tokPeekIs (1073742332)) {
  if (this.isExpressionNext ()) {
  this.addTokenToPostfixToken (JS.T.o (1073742325, "implicitExpressionBegin"));
  if (!this.clauseOr (false)) return false;
  if (this.lastToken !== JS.T.tokenCoordinateEnd) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  }} else {
  nBrace++;
  }}if (this.tokPeekIs (1073742338)) nBrace--;
  this.addNextToken ();
  }
  } else {
  if (!this.tokPeekIs (1073742338) && !this.clauseOr (false)) return false;
  var n = 1;
  while (!this.tokPeekIs (1073742338)) {
  var haveComma = this.addNextTokenIf (268435504);
  if (!this.clauseOr (false)) return (haveComma || n < 3 ? false : this.errorStr (15, "}"));
  n++;
  }
  isCoordinate = (n >= 2);
  }if (isCoordinate && (isImplicitExpression || this.isEmbeddedExpression)) {
  this.ltokenPostfix.set (pt, JS.T.tokenCoordinateBegin);
  this.addTokenToPostfixToken (JS.T.tokenCoordinateEnd);
  this.tokenNext ();
  } else if (isImplicitExpression) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  this.tokenNext ();
  } else if (this.isEmbeddedExpression) {
  if (!isHash) this.tokenNext ();
  } else {
  this.addNextToken ();
  }return this.checkForItemSelector (!isHash);
  }, "~B");
  Clazz.defineMethod (c$, "checkForItemSelector", 
   function (allowNumeric) {
  var tok;
  if ((tok = this.tokAt (this.itokenInfix + 1)) == 268435520 || allowNumeric && tok == 1073742332) return true;
  while (true) {
  if (!this.addNextTokenIf (268435520)) break;
  if (!this.clauseItemSelector ()) return false;
  if (!this.addNextTokenIf (268435521)) return this.errorStr (15, "]");
  }
  return true;
  }, "~B");
  Clazz.defineMethod (c$, "clauseWithin", 
   function (isWithin) {
  this.addNextToken ();
  if (!this.addNextTokenIf (268435472)) return false;
  if (this.getToken () == null) return false;
  var distance = 3.4028235E38;
  var key = null;
  var allowComma = isWithin;
  var tok;
  var tok0 = this.theToken.tok;
  if (!isWithin) {
  tok = -1;
  for (var i = this.itokenInfix; tok != 0; i++) {
  switch (tok = this.tokAt (i)) {
  case 268435504:
  tok = 0;
  break;
  case 1073742332:
  case 268435472:
  case 268435473:
  distance = 100;
  this.returnToken ();
  tok0 = tok = 0;
  break;
  }
  }
  }switch (tok0) {
  case 268435616:
  if (this.getToken () == null) return false;
  if (this.theToken.tok != 2) return this.error (12);
  distance = -this.theToken.intValue;
  break;
  case 2:
  case 3:
  distance = this.floatValue ();
  break;
  case 12290:
  this.addTokenToPostfixToken (this.theToken);
  if (!this.clauseDefine (true, false)) return false;
  key = "";
  allowComma = false;
  break;
  }
  if (isWithin && distance == 3.4028235E38) switch (tok0) {
  case 12290:
  break;
  case 1111490587:
  case 1073742128:
  case 134218756:
  case 134218757:
  case 1237320707:
  case 1073741925:
  case 1073742189:
  this.addTokenToPostfix (4, this.theValue);
  if (!this.addNextTokenIf (268435504)) return false;
  allowComma = false;
  tok = this.tokPeek ();
  switch (tok) {
  case 0:
  return false;
  case 4:
  this.addNextToken ();
  key = "";
  break;
  case 12290:
  if (!this.clauseDefine (false, true)) return false;
  key = "";
  break;
  default:
  return false;
  }
  break;
  case 1073742328:
  allowComma = false;
  case 1086326785:
  case 1086326786:
  case 1073741863:
  case 1678381065:
  case 1086326788:
  case 1073742329:
  case 1086326789:
  case 1086324742:
  case 1814695966:
  case 136314895:
  case 1094717454:
  case 1094713360:
  case 134217750:
  case 134219265:
  case 1094713362:
  case 1086324744:
  case 2097184:
  case 1094713366:
  case 1639976963:
  case 4:
  case 1648363544:
  key = this.theValue;
  break;
  default:
  key = (this.theValue).toLowerCase ();
  break;
  }
  if (key == null) this.addTokenToPostfix (3, Float.$valueOf (distance));
   else if (key.length > 0) this.addTokenToPostfix (4, key);
  var done = false;
  while (!done) {
  if (tok0 != 0 && !this.addNextTokenIf (268435504)) break;
  if (tok0 == 0) tok0 = 134353926;
  var isCoordOrPlane = false;
  tok = this.tokPeek ();
  if (isWithin) {
  switch (tok0) {
  case 2:
  case 3:
  if (tok == 1073742335 || tok == 1073742334) {
  this.addTokenToPostfixToken (this.getToken ());
  if (!this.addNextTokenIf (268435504)) break;
  tok = this.tokPeek ();
  }break;
  }
  if (key == null) {
  switch (tok) {
  case 134219265:
  case 1073742329:
  case 134217750:
  isCoordOrPlane = true;
  this.addNextToken ();
  break;
  case 1073742330:
  this.getToken ();
  this.getToken ();
  this.addTokenToPostfix (4, "$" + this.theValue);
  done = true;
  break;
  case 1086324742:
  case 1648363544:
  case 1814695966:
  this.getToken ();
  this.addTokenToPostfix (4, JS.T.nameOf (tok));
  break;
  case 1073742332:
  this.returnToken ();
  isCoordOrPlane = true;
  this.addTokenToPostfixToken (JS.T.getTokenFromName (distance == 3.4028235E38 ? "plane" : "coord"));
  }
  if (!done) this.addNextTokenIf (268435504);
  }}tok = this.tokPeek ();
  if (done) break;
  if (isCoordOrPlane) {
  while (!this.tokPeekIs (268435473)) {
  switch (this.tokPeek ()) {
  case 0:
  return this.error (4);
  case 268435472:
  this.addTokenToPostfixToken (JS.T.tokenExpressionBegin);
  this.addNextToken ();
  if (!this.clauseOr (false)) return this.errorIntStr2 (18, "WITHIN", ": ?");
  if (!this.addNextTokenIf (268435473)) return this.errorStr (15, ", / )");
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  break;
  case 12290:
  if (!this.clauseDefine (false, false)) return false;
  break;
  default:
  this.addTokenToPostfixToken (this.getToken ());
  }
  }
  } else if (!this.clauseOr (allowComma)) {
  }}
  if (!this.addNextTokenIf (268435473)) return this.errorStr (15, ")");
  return true;
  }, "~B");
  Clazz.defineMethod (c$, "clauseConnected", 
   function (isPolyhedra) {
  this.addNextToken ();
  if (!this.addNextTokenIf (268435472)) {
  this.addTokenToPostfixToken (JS.T.tokenLeftParen);
  this.addTokenToPostfixToken (JS.T.tokenRightParen);
  return true;
  }while (true) {
  if (this.addNextTokenIf (2)) {
  if (!this.addNextTokenIf (268435504)) {
  break;
  }if (isPolyhedra) {
  this.returnToken ();
  break;
  }} else if (isPolyhedra && (this.addNextTokenIf (4) || this.addNextTokenIf (1073741824))) {
  break;
  }if (this.addNextTokenIf (2)) if (!this.addNextTokenIf (268435504)) break;
  if (this.addNextTokenIf (3)) if (!this.addNextTokenIf (268435504)) break;
  if (this.addNextTokenIf (3)) if (!this.addNextTokenIf (268435504)) break;
  var o = this.getToken ().value;
  var strOrder = (Clazz.instanceOf (o, String) ? o : " ");
  var intType = JS.ScriptParam.getBondOrderFromString (strOrder);
  if (intType == 131071) {
  this.returnToken ();
  } else {
  this.addTokenToPostfix (4, strOrder);
  if (!this.addNextTokenIf (268435504)) break;
  }if (this.addNextTokenIf (268435473)) return true;
  if (!this.clauseOr (this.tokPeekIs (268435472))) return false;
  if (this.addNextTokenIf (268435473)) return true;
  if (!this.addNextTokenIf (268435504)) return false;
  if (!this.clauseOr (this.tokPeekIs (268435472))) return false;
  break;
  }
  if (!this.addNextTokenIf (268435473)) return this.errorStr (15, ")");
  return true;
  }, "~B");
  Clazz.defineMethod (c$, "clauseSubstructure", 
   function () {
  this.addNextToken ();
  if (!this.addNextTokenIf (268435472)) return false;
  if (this.tokPeekIs (12290)) {
  if (!this.clauseDefine (false, true)) return false;
  } else if (!this.addNextTokenIf (4)) {
  return this.errorStr (15, "\"...\"");
  }if (this.addNextTokenIf (268435504)) if (!this.clauseOr (this.tokPeekIs (268435472))) return false;
  if (!this.addNextTokenIf (268435473)) return this.errorStr (15, ")");
  return true;
  });
  Clazz.defineMethod (c$, "clauseItemSelector", 
   function () {
  var tok;
  var nparen = 0;
  while ((tok = this.tokPeek ()) != 0 && tok != 268435521) {
  this.addNextToken ();
  if (tok == 268435520) nparen++;
  if (this.tokPeek () == 268435521 && nparen-- > 0) this.addNextToken ();
  }
  return true;
  });
  Clazz.defineMethod (c$, "clauseComparator", 
   function (isOptional) {
  var tokenAtomProperty = this.tokenNext ();
  var tokenComparator = this.tokenNext ();
  if (!JS.ScriptTokenParser.tokenAttr (tokenComparator, 268435712)) {
  if (!isOptional) return this.errorStr (15, "== != < > <= >=");
  if (tokenComparator != null) this.returnToken ();
  this.returnToken ();
  return false;
  }if (JS.ScriptTokenParser.tokenAttr (tokenAtomProperty, 1086324736) && tokenComparator.tok != 268435860 && tokenComparator.tok != 268435862 && tokenComparator.tok != 268435861) return this.errorStr (15, "== !=");
  if (this.tokPeek () == 268435520) {
  this.getToken ();
  this.addTokenToPostfixToken (JS.T.tokenLeftParen);
  while (true) {
  if (!this.addCompare (tokenAtomProperty, tokenComparator)) return false;
  if (this.tokPeek () == 268435504) this.getToken ();
   else if (this.tokPeek () == 268435521) break;
  this.addTokenToPostfixToken (tokenComparator.tok == 268435861 ? JS.T.tokenAnd : JS.T.tokenOr);
  }
  this.getToken ();
  this.addTokenToPostfixToken (JS.T.tokenRightParen);
  return true;
  }return this.addCompare (tokenAtomProperty, tokenComparator);
  }, "~B");
  Clazz.defineMethod (c$, "addCompare", 
   function (tokenAtomProperty, tokenComparator) {
  if (this.getToken () == null) return this.errorStr (17, "" + this.valuePeek ());
  var isNegative = (this.theToken.tok == 268435616);
  if (isNegative && this.getToken () == null) return this.error (12);
  switch (this.theToken.tok) {
  case 2:
  case 3:
  case 1073741824:
  case 4:
  case 1073742332:
  case 12290:
  break;
  default:
  if (!JS.T.tokAttr (this.theToken.tok, 1073741824)) return this.error (13);
  }
  this.addTokenToPostfixInt (tokenComparator.tok, tokenAtomProperty.tok, tokenComparator.value + (isNegative ? " -" : ""));
  if (tokenAtomProperty.tok == 1715472409) this.addTokenToPostfixToken (tokenAtomProperty);
  if (this.theToken.tok == 1073742332) {
  this.returnToken ();
  return this.clausePrimitive ();
  }this.addTokenToPostfixToken (this.theToken);
  if (this.theToken.tok == 12290) return this.clauseDefine (true, false);
  return true;
  }, "JS.T,JS.T");
  Clazz.defineMethod (c$, "clauseCell", 
   function (tok) {
  var cell =  new JU.P3 ();
  this.tokenNext ();
  if (!this.tokenNextTok (268435860)) return this.errorStr (15, "=");
  if (this.getToken () == null) return this.error (3);
  if (this.theToken.tok == 2) {
  JU.SimpleUnitCell.ijkToPoint3f (this.theToken.intValue, cell, 1);
  return this.addTokenToPostfix (tok, cell);
  }if (this.theToken.tok != 1073742332 || !this.getNumericalToken ()) return this.error (3);
  cell.x = this.floatValue ();
  if (this.tokPeekIs (268435504)) this.tokenNext ();
  if (!this.getNumericalToken ()) return this.error (3);
  cell.y = this.floatValue ();
  if (this.tokPeekIs (268435504)) this.tokenNext ();
  if (!this.getNumericalToken () || !this.tokenNextTok (1073742338)) return this.error (3);
  cell.z = this.floatValue ();
  return this.addTokenToPostfix (tok, cell);
  }, "~N");
  Clazz.defineMethod (c$, "clauseDefine", 
   function (haveToken, forceString) {
  if (!haveToken) {
  var token = this.tokenNext ();
  if (forceString) token = JS.T.tokenDefineString;
  this.addTokenToPostfixToken (token);
  }if (this.tokPeekIs (0)) return this.error (4);
  if (!this.addSubstituteTokenIf (1073742332, JS.T.tokenExpressionBegin)) {
  if (this.tokPeek () == 12290) this.addNextToken ();
  return this.addNextToken () && this.checkForItemSelector (true);
  }while (this.moreTokens () && !this.tokPeekIs (1073742338)) {
  if (this.tokPeekIs (1073742332)) {
  if (!this.checkForCoordinate (true)) return false;
  } else {
  this.addNextToken ();
  }}
  return this.addSubstituteTokenIf (1073742338, JS.T.tokenExpressionEnd) && this.checkForItemSelector (true);
  }, "~B,~B");
  Clazz.defineMethod (c$, "generateResidueSpecCode", 
   function (token) {
  if (this.residueSpecCodeGenerated) this.addTokenToPostfixToken (JS.T.tokenAndSpec);
  this.addTokenToPostfixToken (token);
  this.residueSpecCodeGenerated = true;
  return true;
  }, "JS.T");
  Clazz.defineMethod (c$, "clauseResidueSpec", 
   function () {
  var tok = this.tokPeek ();
  this.residueSpecCodeGenerated = false;
  var checkResNameSpec = false;
  switch (tok) {
  case 0:
  case 2097156:
  case 2097174:
  return false;
  case 2:
  case 268435490:
  case 268435634:
  case 5:
  break;
  case 268435633:
  case 268435520:
  case 1073741824:
  checkResNameSpec = true;
  break;
  default:
  if (JS.T.tokAttr (tok, 268435712)) return false;
  var str = "" + this.valuePeek ();
  checkResNameSpec = (str.length == 2 || str.length == 3);
  if (!checkResNameSpec) return false;
  }
  var specSeen = false;
  if (checkResNameSpec) {
  if (!this.clauseResNameSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 2 || tok == 268435633 || tok == 5) {
  if (!this.clauseSequenceSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 268435490) {
  if (!this.clauseChainSpec (tok)) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 1073742336) {
  if (!this.clauseAtomSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 268435634) {
  if (!this.clauseAlternateSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 268435632) {
  if (!this.clauseModelSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (!specSeen) return this.error (14);
  if (!this.residueSpecCodeGenerated) {
  this.addTokenToPostfixToken (JS.T.tokenAll);
  }return true;
  });
  Clazz.defineMethod (c$, "clauseResNameSpec", 
   function () {
  this.getToken ();
  var tok = this.tokPeek ();
  switch (this.theToken.tok) {
  case 268435633:
  return true;
  case 268435520:
  var strSpec = "";
  while (this.getToken () != null && this.theToken.tok != 268435521) strSpec += this.theValue;
  
  if (this.theToken == null) return false;
  if (strSpec === "") return true;
  var pt;
  return (strSpec.length > 0 && (pt = strSpec.indexOf ("*")) >= 0 && pt != strSpec.length - 1 ? this.error (14) : this.generateResidueSpecCode (JS.T.o (1073742360, strSpec.toUpperCase ())));
  default:
  if (JS.T.tokAttr (tok, 268435712)) {
  this.returnToken ();
  return false;
  }var res = this.theValue;
  if (tok == 268435633) {
  res = this.theValue + "*";
  this.getToken ();
  }return this.generateResidueSpecCode (JS.T.o (1073741824, res));
  }
  });
  Clazz.defineMethod (c$, "clauseSequenceSpec", 
   function () {
  if (this.tokPeek () == 268435633) return (this.getToken () != null);
  var seqToken = this.getSequenceCode (false);
  if (seqToken == null) return false;
  var tok = this.tokPeek ();
  if (tok == 268435616 || tok == 2 && this.intPeek () < 0) {
  if (tok == 268435616) {
  this.tokenNext ();
  } else {
  var i = -this.intPeek ();
  this.tokenNext ().intValue = i;
  this.returnToken ();
  }seqToken.tok = 1073742363;
  this.generateResidueSpecCode (seqToken);
  return this.addTokenToPostfixToken (this.getSequenceCode (true));
  }return this.generateResidueSpecCode (seqToken);
  });
  Clazz.defineMethod (c$, "getSequenceCode", 
   function (isSecond) {
  var seqcode = 2147483647;
  var seqvalue = 2147483647;
  switch (this.tokPeek ()) {
  case 5:
  seqcode = this.tokenNext ().intValue;
  break;
  case 2:
  seqvalue = this.tokenNext ().intValue;
  break;
  default:
  if (!isSecond) return null;
  }
  return JS.T.tv (1073742362, seqvalue, Integer.$valueOf (seqcode));
  }, "~B");
  Clazz.defineMethod (c$, "clauseChainSpec", 
   function (tok) {
  this.tokenNext ();
  tok = this.tokPeek ();
  var strChain;
  if (this.isTerminator (tok)) {
  strChain = " ";
  } else {
  switch (tok) {
  case 268435633:
  return (this.getToken () != null);
  case 2:
  this.getToken ();
  var val = this.theToken.intValue;
  if (val < 0 || val > 9999) return this.error (8);
  strChain = "" + val;
  break;
  case 4:
  this.vwr.getChainID ("a", true);
  default:
  strChain = "" + this.getToken ().value;
  break;
  }
  if (strChain.length == 0) strChain = " ";
   else if (strChain.equals ("?")) return true;
  }var chain = this.vwr.getChainID (strChain, false);
  return this.generateResidueSpecCode (JS.T.tv (1073742357, chain, "spec_chain"));
  }, "~N");
  Clazz.defineMethod (c$, "clauseAlternateSpec", 
   function () {
  this.tokenNext ();
  if (this.isTerminator (this.tokPeek ())) return this.generateResidueSpecCode (JS.T.o (1073742355, null));
  switch (this.getToken ().tok) {
  case 268435633:
  case 4:
  case 2:
  case 1073741824:
  case 805306401:
  case 1111492629:
  case 1111492630:
  case 1111492631:
  case 1140850705:
  break;
  default:
  return this.error (10);
  }
  return this.generateResidueSpecCode (JS.T.o (1073742355, this.theToken.value));
  });
  Clazz.defineMethod (c$, "isTerminator", 
   function (tok) {
  switch (tok) {
  case 0:
  case 268435632:
  case 268435552:
  case 268435536:
  case 268435568:
  case 268435504:
  case 268435473:
  case 1073742338:
  return true;
  default:
  return false;
  }
  }, "~N");
  Clazz.defineMethod (c$, "clauseModelSpec", 
   function () {
  this.getToken ();
  switch (this.tokPeek ()) {
  case 268435633:
  this.getToken ();
  return true;
  case 2:
  return this.generateResidueSpecCode (JS.T.o (1073742358, Integer.$valueOf (this.getToken ().intValue)));
  case 3:
  return this.generateResidueSpecCode (JS.T.tv (1073742358, this.fixModelSpec (this.getToken ()), this.theValue));
  case 268435504:
  case 1073742338:
  case 0:
  return this.generateResidueSpecCode (JS.T.o (1073742358, Integer.$valueOf (1)));
  }
  return this.error (10);
  });
  Clazz.defineMethod (c$, "fixModelSpec", 
   function (token) {
  var ival = token.intValue;
  if (ival == 2147483647) {
  var f = (this.theValue).floatValue ();
  if (f == Clazz.floatToInt (f)) ival = (Clazz.floatToInt (f)) * 1000000;
  if (ival < 0) ival = 2147483647;
  }return ival;
  }, "JS.T");
  Clazz.defineMethod (c$, "clauseAtomSpec", 
   function () {
  if (!this.tokenNextTok (1073742336)) return this.error (7);
  if (this.getToken () == null) return true;
  var atomSpec = "";
  if (this.theToken.tok == 2) {
  atomSpec += "" + this.theToken.intValue;
  if (this.getToken () == null) return this.error (7);
  }if (this.theToken.tok == 268435633) return true;
  atomSpec += "" + this.theToken.value;
  if (this.tokPeekIs (268435633)) {
  this.tokenNext ();
  atomSpec += "'";
  }return this.generateResidueSpecCode (JS.T.tv (1073742356, this.vwr.getJBR ().lookupSpecialAtomID (atomSpec.toUpperCase ()), atomSpec));
  });
  c$.errorString = Clazz.defineMethod (c$, "errorString", 
  function (iError, value, more, translated) {
  var doTranslate = false;
  if (!translated && (doTranslate = J.i18n.GT.getDoTranslate ()) == true) J.i18n.GT.setDoTranslate (false);
  var msg;
  switch (iError) {
  default:
  msg = "Unknown compiler error message number: " + iError;
  break;
  case 0:
  msg = J.i18n.GT._ ("bad argument count");
  break;
  case 1:
  msg = J.i18n.GT._ ("invalid context for {0}");
  break;
  case 2:
  msg = J.i18n.GT._ ("command expected");
  break;
  case 3:
  msg = J.i18n.GT._ ("{ number number number } expected");
  break;
  case 4:
  msg = J.i18n.GT._ ("unexpected end of script command");
  break;
  case 5:
  msg = J.i18n.GT._ ("end of expression expected");
  break;
  case 6:
  msg = J.i18n.GT._ ("identifier or residue specification expected");
  break;
  case 7:
  msg = J.i18n.GT._ ("invalid atom specification");
  break;
  case 8:
  msg = J.i18n.GT._ ("invalid chain specification");
  break;
  case 9:
  msg = J.i18n.GT._ ("invalid expression token: {0}");
  break;
  case 10:
  msg = J.i18n.GT._ ("invalid model specification");
  break;
  case 11:
  msg = J.i18n.GT._ ("missing END for {0}");
  break;
  case 12:
  msg = J.i18n.GT._ ("number expected");
  break;
  case 13:
  msg = J.i18n.GT._ ("number or variable name expected");
  break;
  case 14:
  msg = J.i18n.GT._ ("residue specification (ALA, AL?, A*) expected");
  break;
  case 15:
  msg = J.i18n.GT._ ("{0} expected");
  break;
  case 16:
  msg = J.i18n.GT._ ("{0} unexpected");
  break;
  case 17:
  msg = J.i18n.GT._ ("unrecognized expression token: {0}");
  break;
  case 18:
  msg = J.i18n.GT._ ("unrecognized {0} parameter");
  break;
  case 19:
  msg = J.i18n.GT._ ("unrecognized token: {0}");
  break;
  }
  if (msg.indexOf ("{0}") < 0) {
  if (value != null) msg += ": " + value;
  } else {
  msg = JU.PT.rep (msg, "{0}", value);
  if (msg.indexOf ("{1}") >= 0) msg = JU.PT.rep (msg, "{1}", more);
   else if (more != null) msg += ": " + more;
  }if (!translated) J.i18n.GT.setDoTranslate (doTranslate);
  return msg;
  }, "~N,~S,~S,~B");
  Clazz.defineMethod (c$, "commandExpected", 
  function () {
  this.ichToken = this.ichCurrentCommand;
  return this.error (2);
  });
  Clazz.defineMethod (c$, "error", 
  function (error) {
  return this.errorIntStr2 (error, null, null);
  }, "~N");
  Clazz.defineMethod (c$, "errorStr", 
  function (error, value) {
  return this.errorIntStr2 (error, value, null);
  }, "~N,~S");
  Clazz.defineMethod (c$, "errorIntStr2", 
  function (iError, value, more) {
  var strError = JS.ScriptTokenParser.errorString (iError, value, more, true);
  var strUntranslated = (J.i18n.GT.getDoTranslate () ? JS.ScriptTokenParser.errorString (iError, value, more, false) : null);
  return this.errorStr2 (strError, strUntranslated);
  }, "~N,~S,~S");
  Clazz.defineMethod (c$, "isError", 
   function () {
  return this.errorMessage != null;
  });
  Clazz.defineMethod (c$, "errorStr2", 
  function (errorMessage, strUntranslated) {
  this.errorMessage = errorMessage;
  this.errorMessageUntranslated = strUntranslated;
  return false;
  }, "~S,~S");
  Clazz.defineStatics (c$,
  "ERROR_badArgumentCount", 0,
  "ERROR_badContext", 1,
  "ERROR_commandExpected", 2,
  "ERROR_endOfCommandUnexpected", 4,
  "ERROR_invalidExpressionToken", 9,
  "ERROR_missingEnd", 11,
  "ERROR_tokenExpected", 15,
  "ERROR_tokenUnexpected", 16,
  "ERROR_unrecognizedParameter", 18,
  "ERROR_unrecognizedToken", 19,
  "ERROR_coordinateExpected", 3,
  "ERROR_endOfExpressionExpected", 5,
  "ERROR_identifierOrResidueSpecificationExpected", 6,
  "ERROR_invalidAtomSpecification", 7,
  "ERROR_invalidChainSpecification", 8,
  "ERROR_invalidModelSpecification", 10,
  "ERROR_numberExpected", 12,
  "ERROR_numberOrVariableNameExpected", 13,
  "ERROR_residueSpecificationExpected", 14,
  "ERROR_unrecognizedExpressionToken", 17);
  });
  