rem: HintReplacementDetector::type1_command(int cmd)
add: SubrExpander::type1_command(int cmd)
context: HintReplacementDetector::type1_command(int cmd){    switch (cmd) {	      case CS::cCallothersubr: {	  if (size() < 2)	      goto unknown;	  int command = (int)top(0);	  int n = (int)top(1);	  if (command == CS::othcReplacehints && n == 1) {	      pop(2);	      _hint_replacements[(int)top()] = 1;	      ps_clear();	      ps_push(top());	      pop();	      break;	  } else if (command >= CS::othcMM1 && command <= CS::othcMM6) {	      pop(2);	      return mm_command(command, n);	  } else if (command >= CS::othcITC_load && command <= CS::othcITC_random) {	      pop(2);	      return itc_command(command, n);	  } else	      goto unknown;      }      case CS::cCallsubr: {	  if (size() < 1)	      return error(errUnderflow, cmd);	  int which = (int)pop();	  if (!_count_calls_below || _subr_level < _count_calls_below)	      _call_counts[which]++;     	  Charstring *subr_cs = get_subr(which);	  if (!subr_cs)	      return error(errSubr, which);	  _subr_level++;	  subr_cs->run(*this);	  _subr_level--;     	  if (error() != errOK)	      return false;	  return !done();      }      case CS::cEndchar:      case CS::cReturn:	return CharstringInterp::type1_command(cmd);          case CS::cBlend:      case CS::cAbs:      case CS::cAdd:      case CS::cSub:      case CS::cDiv:      case CS::cNeg:      case CS::cRandom:      case CS::cMul:      case CS::cSqrt:      case CS::cDrop:      case CS::cExch:      case CS::cIndex:      case CS::cRoll:      case CS::cDup:      case CS::cAnd:      case CS::cOr:      case CS::cNot:      case CS::cEq:      case CS::cIfelse:	return arith_command(cmd);      case CS::cPop:	if (ps_size() >= 1)	    push(ps_pop());	break;      default:      unknown:	clear();	break;        }    return true;}