(CommandList
  children: [
    (C {(set)} {(-e)})
    (AndOr
      children: [
        (SimpleCommand
          words: [{(command)} {(-v)} {(tput)}]
          redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[17])]
        )
        (C {(exec)} {(grep)} {(-v)} {(DQ ("^begin "))})
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:header_pattern)
          op: Equal
          rhs: {(SQ <"[0-9]+\\.\\.[0-9]+">)}
          spids: [33]
        )
      ]
      spids: [33]
    )
    (SimpleCommand
      words: [{(read)} {(-r)} {(header)}]
      more_env: [(env_pair name:IFS val:{(SQ )} spids:[38])]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_EqualTilde
                      left: {(DQ ($ VSub_Name "$header"))}
                      right: {($ VSub_Name "$header_pattern")}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:count)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name header>
                          suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 3)}))
                          spids: [67 71]
                        )
                      )
                    }
                  spids: [65]
                )
              ]
              spids: [65]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[75])]
              spids: [75]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:failures) op:Equal rhs:{(0)} spids:[79])]
              spids: [79]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:skipped) op:Equal rhs:{(0)} spids:[83])]
              spids: [83]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:name) op:Equal rhs:{(DQ )} spids:[87])]
              spids: [87]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:count_column_width)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: 
                              (ArithBinary
                                op_id: Arith_Star
                                left: 
                                  (ArithWord
                                    w: 
                                      {
                                        (BracedVarSub
                                          token: <VSub_Name count>
                                          prefix_op: VSub_Pound
                                          spids: [95 98]
                                        )
                                      }
                                  )
                                right: (ArithWord w:{(Lit_Digits 2)})
                              )
                            right: (ArithWord w:{(Lit_Digits 2)})
                          )
                        spids: [93 109]
                      )
                    }
                  spids: [92]
                )
              ]
              spids: [92]
            )
          ]
          spids: [-1 62]
        )
      ]
      else_action: [
        (C {(printf)} {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} 
          {(DQ ($ VSub_Name "$header"))}
        )
        (C {(exec)} {(cat)})
      ]
      spids: [111 134]
    )
    (FuncDef
      name: update_screen_width
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:screen_width)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(tput)} {(cols)})])
                          left_token: <Left_CommandSub "$(">
                          spids: [146 150]
                        )
                      )
                    }
                  spids: [144]
                )
              ]
              spids: [144]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:count_column_left)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Minus
                            left: (ArithWord w:{($ VSub_Name "$screen_width")})
                            right: (ArithWord w:{($ VSub_Name "$count_column_width")})
                          )
                        spids: [155 164]
                      )
                    }
                  spids: [154]
                )
              ]
              spids: [154]
            )
          ]
          spids: [141]
        )
      spids: [137 140]
    )
    (C {(trap)} {(update_screen_width)} {(WINCH)})
    (C {(update_screen_width)})
    (FuncDef
      name: begin
      body: 
        (BraceGroup
          children: [
            (C {(go_to_column)} {(0)})
            (C {(printf_with_truncation)} 
              {
                (ArithSubPart
                  anode: 
                    (ArithBinary
                      op_id: Arith_Minus
                      left: (ArithWord w:{($ VSub_Name "$count_column_left")})
                      right: (ArithWord w:{(Lit_Digits 1)})
                    )
                  spids: [192 201]
                )
              } {(DQ ("   %s"))} {(DQ ($ VSub_Name "$name"))}
            )
            (C {(clear_to_end_of_line)})
            (C {(go_to_column)} {($ VSub_Name "$count_column_left")})
            (C {(printf)} 
              {
                (DQ ("%") (BracedVarSub token:<VSub_Name count> prefix_op:VSub_Pound spids:[224227]) 
                  (s/) (${ VSub_Name count)
                )
              } {(DQ ($ VSub_Name "$index"))}
            )
            (C {(go_to_column)} {(1)})
          ]
          spids: [182]
        )
      spids: [178 181]
    )
    (FuncDef
      name: pass
      body: 
        (BraceGroup
          children: [
            (C {(go_to_column)} {(0)})
            (C {(printf)} {(DQ (" \u2713 %s"))} {(DQ ($ VSub_Name "$name"))})
            (C {(advance)})
          ]
          spids: [250]
        )
      spids: [246 249]
    )
    (FuncDef
      name: skip
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:reason)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [283]
                )
              ]
              spids: [281]
            )
            (AndOr
              children: [
                (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$reason"))} {(Lit_Other "]")})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:reason)
                      op: Equal
                      rhs: {(DQ (": ") ($ VSub_Name "$reason"))}
                      spids: [301]
                    )
                  ]
                  spids: [301]
                )
              ]
              op_id: Op_DPipe
            )
            (C {(go_to_column)} {(0)})
            (C {(printf)} {(DQ (" - %s (skipped%s)"))} {(DQ ($ VSub_Name "$name"))} 
              {(DQ ($ VSub_Name "$reason"))}
            )
            (C {(advance)})
          ]
          spids: [278]
        )
      spids: [274 277]
    )
    (FuncDef
      name: fail
      body: 
        (BraceGroup
          children: [
            (C {(go_to_column)} {(0)})
            (C {(set_color)} {(1)} {(bold)})
            (C {(printf)} {(DQ (" \u2717 %s"))} {(DQ ($ VSub_Name "$name"))})
            (C {(advance)})
          ]
          spids: [337]
        )
      spids: [333 336]
    )
    (FuncDef
      name: log
      body: 
        (BraceGroup
          children: [
            (C {(set_color)} {(1)})
            (C {(printf)} {(DQ ("   %s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} 
              {(DQ ($ VSub_Number "$1"))}
            )
            (C {(clear_color)})
          ]
          spids: [372]
        )
      spids: [368 371]
    )
    (FuncDef
      name: summary
      body: 
        (BraceGroup
          children: [
            (C {(printf)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ("%d test%s"))} 
              {(DQ ($ VSub_Name "$count"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(plural)} {(DQ ($ VSub_Name "$count"))})]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [416 422]
                  )
                )
              }
            )
            (C {(printf)} {(DQ (", %d failure%s"))} {(DQ ($ VSub_Name "$failures"))} 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(plural)} {(DQ ($ VSub_Name "$failures"))})]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [438 444]
                  )
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$skipped"))} {(-gt)} {(0)} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(printf)} {(DQ (", %d skipped"))} {(DQ ($ VSub_Name "$skipped"))})]
                  spids: [-1 464]
                )
              ]
              spids: [-1 478]
            )
            (C {(printf)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))})
          ]
          spids: [401]
        )
      spids: [397 400]
    )
    (FuncDef
      name: printf_with_truncation
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:width)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [500]
                )
              ]
              spids: [498]
            )
            (C {(shift)})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:string)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [(C {(printf)} {(DQ ($ VSub_At "$@"))})]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [513 519]
                        )
                      )
                    }
                  spids: [511]
                )
              ]
              spids: [509]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} 
                          {
                            (DQ 
                              (BracedVarSub
                                token: <VSub_Name string>
                                prefix_op: VSub_Pound
                                spids: [529 532]
                              )
                            )
                          } {(-gt)} {(DQ ($ VSub_Name "$width"))} {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(printf)} {(DQ ("%s..."))} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name string>
                            suffix_op: 
                              (Slice
                                begin: (ArithWord w:{(Lit_Digits 0)})
                                length: 
                                  (ArithWord
                                    w: 
                                      {
                                        (ArithSubPart
                                          anode: 
                                            (ArithBinary
                                              op_id: Arith_Minus
                                              left: (ArithWord w:{($ VSub_Name "$width")})
                                              right: (ArithWord w:{(Lit_Digits 4)})
                                            )
                                          spids: [559 568]
                                        )
                                      }
                                  )
                              )
                            spids: [554 569]
                          )
                        )
                      }
                    )
                  ]
                  spids: [-1 544]
                )
              ]
              else_action: [(C {(printf)} {(DQ ("%s"))} {(DQ ($ VSub_Name "$string"))})]
              spids: [573 587]
            )
          ]
          spids: [495]
        )
      spids: [491 494]
    )
    (FuncDef
      name: go_to_column
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:column)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [601]
                )
              ]
              spids: [599]
            )
            (C {(printf)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\x">) ("1B[%dG"))} 
              {
                (ArithSubPart
                  anode: 
                    (ArithBinary
                      op_id: Arith_Plus
                      left: (ArithWord w:{($ VSub_Name "$column")})
                      right: (ArithWord w:{(Lit_Digits 1)})
                    )
                  spids: [614 623]
                )
              }
            )
          ]
          spids: [596]
        )
      spids: [592 595]
    )
    (FuncDef
      name: clear_to_end_of_line
      body: 
        (BraceGroup
          children: [(C {(printf)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\x">) ("1B[K"))})]
          spids: [632]
        )
      spids: [628 631]
    )
    (FuncDef
      name: advance
      body: 
        (BraceGroup
          children: [(C {(clear_to_end_of_line)}) (C {(echo)}) (C {(clear_color)})]
          spids: [649]
        )
      spids: [645 648]
    )
    (FuncDef
      name: set_color
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:color)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [672]
                )
              ]
              spids: [670]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:weight)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [680]
                )
              ]
              spids: [678]
            )
            (C {(printf)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\x">) ("1B[%d;%dm"))} 
              {
                (ArithSubPart
                  anode: 
                    (ArithBinary
                      op_id: Arith_Plus
                      left: (ArithWord w:{(Lit_Digits 30)})
                      right: (ArithWord w:{($ VSub_Name "$color")})
                    )
                  spids: [693 702]
                )
              } 
              {
                (DQ 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (AndOr
                            children: [
                              (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$weight"))} {(Lit_Other "=")} 
                                {(DQ (bold))} {(Lit_Other "]")}
                              )
                              (AndOr
                                children: [(C {(echo)} {(1)}) (C {(echo)} {(22)})]
                                op_id: Op_DPipe
                              )
                            ]
                            op_id: Op_DAmp
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [705 733]
                  )
                )
              }
            )
          ]
          spids: [667]
        )
      spids: [663 666]
    )
    (FuncDef
      name: clear_color
      body: 
        (BraceGroup
          children: [(C {(printf)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\x">) ("1B[0m"))})]
          spids: [743]
        )
      spids: [739 742]
    )
    (FuncDef
      name: plural
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(Lit_Other "[")} {(DQ ($ VSub_Number "$1"))} {(-eq)} {(1)} {(Lit_Other "]")})
                (C {(echo)} {(DQ (s))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [760]
        )
      spids: [756 759]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:_buffer) op:Equal rhs:{(DQ )} spids:[786])]
      spids: [786]
    )
    (FuncDef
      name: buffer
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:_buffer)
                  op: Equal
                  rhs: 
                    {
                      (DQ (${ VSub_Name _buffer) 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(DQ ($ VSub_At "$@"))})])
                          left_token: <Left_CommandSub "$(">
                          spids: [803 807]
                        )
                      )
                    }
                  spids: [798]
                )
              ]
              spids: [798]
            )
          ]
          spids: [795]
        )
      spids: [791 794]
    )
    (FuncDef
      name: flush
      body: 
        (BraceGroup
          children: [
            (C {(printf)} {(DQ ("%s"))} {(DQ ($ VSub_Name "$_buffer"))})
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:_buffer) op:Equal rhs:{(DQ )} spids:[831])]
              spids: [831]
            )
          ]
          spids: [817]
        )
      spids: [813 816]
    )
    (FuncDef
      name: finish
      body: 
        (BraceGroup
          children: [
            (C {(flush)})
            (C {(printf)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))})
          ]
          spids: [842]
        )
      spids: [838 841]
    )
    (C {(trap)} {(finish)} {(EXIT)})
    (While
      cond: [
        (Sentence
          child: 
            (SimpleCommand
              words: [{(read)} {(-r)} {(line)}]
              more_env: [(env_pair name:IFS val:{(SQ )} spids:[866])]
            )
          terminator: <Op_Semi ";">
        )
      ]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {(DQ ($ VSub_Name "$line"))}
              arms: [
                (case_arm
                  pat_list: [{(DQ ("begin ")) (Lit_Other "*")}]
                  action: [
                    (C {(let)} {(Lit_VarLike "index+=") (1)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name line>
                                  suffix_op: 
                                    (StringUnary
                                      op_id: VOp1_Pound
                                      arg_word: {("* ") ($ VSub_Name "$index") (" ")}
                                    )
                                  spids: [903 909]
                                )
                              )
                            }
                          spids: [901]
                        )
                      ]
                      spids: [901]
                    )
                    (C {(buffer)} {(begin)})
                    (C {(flush)})
                  ]
                  spids: [888 892 921 -1]
                )
                (case_arm
                  pat_list: [{(DQ ("ok ")) (Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:skip_expr)
                          op: Equal
                          rhs: 
                            {
                              (DQ ("ok ") ($ VSub_Name "$index") (" # skip (") 
                                (EscapedLiteralPart
                                  token: <Lit_EscapedChar "\\(">
                                ) ("([^)]*)") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (")?")
                              )
                            }
                          spids: [932]
                        )
                      ]
                      spids: [932]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_EqualTilde
                                      left: {(DQ ($ VSub_Name "$line"))}
                                      right: {($ VSub_Name "$skip_expr")}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(let)} {(Lit_VarLike "skipped+=") (1)})
                            (C {(buffer)} {(skip)} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name BASH_REMATCH>
                                    bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)}))
                                    spids: [973 978]
                                  )
                                )
                              }
                            )
                          ]
                          spids: [-1 959]
                        )
                      ]
                      else_action: [(C {(buffer)} {(pass)})]
                      spids: [982 990]
                    )
                  ]
                  spids: [925 929 993 -1]
                )
                (case_arm
                  pat_list: [{(DQ ("not ok ")) (Lit_Other "*")}]
                  action: [(C {(let)} {(Lit_VarLike "failures+=") (1)}) (C {(buffer)} {(fail)})]
                  spids: [997 1001 1015 -1]
                )
                (case_arm
                  pat_list: [{(DQ ("# ")) (Lit_Other "*")}]
                  action: [
                    (C {(buffer)} {(log)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name line>
                            suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 2)}))
                            spids: [1031 1035]
                          )
                        )
                      }
                    )
                  ]
                  spids: [1019 1023 1039 -1]
                )
              ]
              spids: [878 884 1042]
            )
          ]
          spids: [875 1044]
        )
    )
    (C {(buffer)} {(summary)})
  ]
)