{
  "asp":
  {
    "\[(?<time>\d+)\] dispatch to task (?<id>\d+)\." :
    [
      {
        "$EXIST{Task(state==RUNNING)}" :
        [
          "[${time}]$RES_NAME{Task(state==RUNNING)}.preempt()",
          "[${time}]$RES_NAME{Task(state==RUNNING)}.state=RUNNABLE"
        ]
      },
      "[${time}]$RES_NAME{Task(id==${id})}.dispatch()",
      "[${time}]$RES_NAME{Task(id==${id})}.state=RUNNING"
    ],
    "\[(?<time>\d+)\] task (?<id>\d+) becomes (?<state>[^\.]+)\." :
    [
      {
        "$ATTR{Task(id==${id}).state}==DORMANT && ${state}==RUNNABLE"
          :"[${time}]$RES_NAME{Task(id==${id})}.activate()",
        "$ATTR{Task(id==${id}).state}==RUNNING && ${state}==DORMANT"
          :"[${time}]$RES_NAME{Task(id==${id})}.exit()",
        "$ATTR{Task(id==${id}).state}==RUNNING && ${state}==WAITING"
          :"[${time}]$RES_NAME{Task(id==${id})}.wait()",
        "$ATTR{Task(id==${id}).state}==RUNNABLE && ${state}==SUSPENDED"
          :"[${time}]$RES_NAME{Task(id==${id})}.suspend()",
        "$ATTR{Task(id==${id}).state}==WAITING && ${state}==WAITING-SUSPENDED"
          :"[${time}]$RES_NAME{Task(id==${id})}.suspend()",
        "$ATTR{Task(id==${id}).state}==SUSPENDED && ${state}==RUNNABLE"
          :"[${time}]$RES_NAME{Task(id==${id})}.resume()",
        "$ATTR{Task(id==${id}).state}==WAITING-SUSPENDED && ${state}==WAITING"
          :"[${time}]$RES_NAME{Task(id==${id})}.resume()",
        "$ATTR{Task(id==${id}).state}==WAITING && ${state}==RUNNABLE"
          :"[${time}]$RES_NAME{Task(id==${id})}.releaseFromWaiting()",
        "$ATTR{Task(id==${id}).state}==WAITING-SUSPENDED && ${state}==SUSPENDED"
          :"[${time}]$RES_NAME{Task(id==${id})}.releaseFromWaiting()",
        "$ATTR{Task(id==${id}).state}==SUSPENDED && ${state}==DORMANT"
          :"[${time}]$RES_NAME{Task(id==${id})}.terminate()",
        "$ATTR{Task(id==${id}).state}==WAITING-SUSPENDED && ${state}==DORMANT"
          :"[${time}]$RES_NAME{Task(id==${id})}.terminate()",
        "$ATTR{Task(id==${id}).state}==WAITING && ${state}==DORMANT"
          :"[${time}]$RES_NAME{Task(id==${id})}.terminate()",
        "$ATTR{Task(id==${id}).state}==RUNNABLE && ${state}==DORMANT"
          :"[${time}]$RES_NAME{Task(id==${id})}.terminate()"
      },
      "[${time}]$RES_NAME{Task(id==${id})}.state=${state}"
    ],
    "\[(?<time>\d+)\] enter to (?<name>\w+)( (?<args>.+))?\.?":
    {
      "$EXIST{Task(state==RUNNING)}"
        :"[${time}]$RES_NAME{Task(state==RUNNING)}.enterSVC(${name}, ${args})"
    },
    "\[(?<time>\d+)\] leave to (?<name>\w+)( (?<args>.+))?\.?"  :
    {
      "$EXIST{Task(state==RUNNING)}"
        :"[${time}]$RES_NAME{Task(state==RUNNING)}.leaveSVC(${name}, ${args})"
    }
  }
}
