(CommandList
  children: [
    (C {(Lit_Other ":")} 
      {
        (BracedVarSub
          token: <VSub_Name MERGE_TOOLS_DIR>
          suffix_op: 
            (StringUnary
              op_id: VTest_Equals
              arg_word: 
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(git)} {(--exec-path)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [9 13]
                  ) (Lit_Slash /) (mergetools)
                }
            )
          spids: [6 16]
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{(SQ <"\n">)} spids:[19])]
      spids: [19]
    )
    (FuncDef
      name: mode_ok
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(diff_mode)})]
                  action: [(C {(can_diff)})]
                  spids: [-1 38]
                )
                (if_arm
                  cond: [(C {(merge_mode)})]
                  action: [(C {(can_merge)})]
                  spids: [44 49]
                )
              ]
              else_action: [(C {(false)})]
              spids: [55 61]
            )
          ]
          spids: [30]
        )
      spids: [25 29]
    )
    (FuncDef
      name: is_available
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:merge_tool_path)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(translate_merge_tool_path)} {(DQ ($ VSub_Number "$1"))})]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [75 81]
                          )
                        }
                      spids: [74]
                    )
                  ]
                  spids: [74]
                )
                (SimpleCommand
                  words: [{(type)} {(DQ ($ VSub_Name "$merge_tool_path"))}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(/dev/null)}
                      spids: [92]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[95])
                  ]
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [71]
        )
      spids: [66 70]
    )
    (FuncDef
      name: list_config_tools
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:section)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [109]
                )
              ]
              spids: [109]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:line_prefix)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [114 117]
                      )
                    }
                  spids: [113]
                )
              ]
              spids: [113]
            )
            (Pipeline
              children: [
                (C {(git)} {(config)} {(--get-regexp)} {($ VSub_Name "$section") (SQ <"\\..*\\.cmd">)})
                (While
                  cond: [(C {(read)} {(-r)} {(key)} {(value)})]
                  body: 
                    (DoGroup
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:toolname)
                              op: Equal
                              rhs: 
                                {
                                  (BracedVarSub
                                    token: <VSub_Name key>
                                    suffix_op: 
                                      (StringUnary
                                        op_id: VOp1_Pound
                                        arg_word: {($ VSub_Name "$section") (.)}
                                      )
                                    spids: [150 155]
                                  )
                                }
                              spids: [149]
                            )
                          ]
                          spids: [149]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:toolname)
                              op: Equal
                              rhs: 
                                {
                                  (BracedVarSub
                                    token: <VSub_Name toolname>
                                    suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.cmd)})
                                    spids: [159 163]
                                  )
                                }
                              spids: [158]
                            )
                          ]
                          spids: [158]
                        )
                        (C {(printf)} {(DQ ("%s%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} 
                          {(DQ ($ VSub_Name "$line_prefix"))} {(DQ ($ VSub_Name "$toolname"))}
                        )
                      ]
                      spids: [146 183]
                    )
                )
              ]
              negated: False
            )
          ]
          spids: [106]
        )
      spids: [101 105]
    )
    (FuncDef
      name: show_tool_names
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:condition)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(true)})
                        spids: [197 201]
                      )
                    }
                  spids: [196]
                )
                (assign_pair
                  lhs: (LhsName name:per_line_prefix)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [204 207]
                      )
                    }
                  spids: [203]
                )
                (assign_pair
                  lhs: (LhsName name:preamble)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 3>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [210 213]
                      )
                    }
                  spids: [209]
                )
              ]
              spids: [196]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:not_found_msg)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 4>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [217 220]
                      )
                    }
                  spids: [216]
                )
              ]
              spids: [216]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:extra_content)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 5>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                        spids: [224 227]
                      )
                    }
                  spids: [223]
                )
              ]
              spids: [223]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:shown_any) op:Equal rhs:{(SQ )} spids:[231])]
              spids: [231]
            )
            (Pipeline
              children: [
                (Subshell
                  child: 
                    (AndOr
                      children: [(C {(cd)} {(DQ ($ VSub_Name "$MERGE_TOOLS_DIR"))}) (C {(ls)})]
                      op_id: Op_DAmp
                    )
                  spids: [234 246]
                )
                (BraceGroup
                  children: [
                    (While
                      cond: [(C {(read)} {(toolname)})]
                      body: 
                        (DoGroup
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (AndOr
                                      children: [
                                        (SimpleCommand
                                          words: [{(setup_tool)} {(DQ ($ VSub_Name "$toolname"))}]
                                          redirects: [
                                            (Redir
                                              op_id: Redir_Great
                                              fd: 2
                                              arg_word: {(/dev/null)}
                                              spids: [271]
                                            )
                                          ]
                                        )
                                        (Subshell
                                          child: 
                                            (C {(eval)} {(DQ ($ VSub_Name "$condition"))} 
                                              {(DQ ($ VSub_Name "$toolname"))}
                                            )
                                          spids: [277 287]
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  action: [
                                    (If
                                      arms: [
                                        (if_arm
                                          cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$preamble"))})]
                                          action: [
                                            (C {(printf)} 
                                              {
                                                (DQ ("%s") 
                                                  (EscapedLiteralPart
                                                    token: <Lit_EscapedChar "\\n">
                                                  )
                                                )
                                              } {(DQ ($ VSub_Name "$preamble"))}
                                            )
                                            (Assignment
                                              keyword: Assign_None
                                              pairs: [
                                                (assign_pair
                                                  lhs: (LhsName name:preamble)
                                                  op: Equal
                                                  rhs: {(SQ )}
                                                  spids: [319]
                                                )
                                              ]
                                              spids: [319]
                                            )
                                          ]
                                          spids: [-1 304]
                                        )
                                      ]
                                      spids: [-1 322]
                                    )
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:shown_any)
                                          op: Equal
                                          rhs: {(yes)}
                                          spids: [325]
                                        )
                                      ]
                                      spids: [325]
                                    )
                                    (C {(printf)} 
                                      {
                                        (DQ ("%s%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))
                                      } {(DQ ($ VSub_Name "$per_line_prefix"))} {(DQ ($ VSub_Name "$toolname"))}
                                    )
                                  ]
                                  spids: [-1 290]
                                )
                              ]
                              spids: [-1 345]
                            )
                          ]
                          spids: [260 348]
                        )
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$extra_content"))})]
                          action: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$preamble"))})]
                                  action: [
                                    (C {(printf)} {(DQ ("%s"))} {(DQ ($ VSub_Name "$preamble"))})
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:preamble)
                                          op: Equal
                                          rhs: {(SQ )}
                                          spids: [399]
                                        )
                                      ]
                                      spids: [399]
                                    )
                                  ]
                                  spids: [-1 377]
                                )
                              ]
                              spids: [-1 402]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:shown_any)
                                  op: Equal
                                  rhs: {(yes)}
                                  spids: [405]
                                )
                              ]
                              spids: [405]
                            )
                            (C {(printf)} 
                              {
                                (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ("%s") 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar "\\n">
                                  )
                                )
                              } {(DQ ($ VSub_Name "$extra_content"))}
                            )
                          ]
                          spids: [-1 363]
                        )
                      ]
                      spids: [-1 422]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (AndOr
                              children: [
                                (C {(test)} {(-n)} {(DQ ($ VSub_Name "$preamble"))})
                                (C {(test)} {(-n)} {(DQ ($ VSub_Name "$not_found_msg"))})
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          action: [
                            (C {(printf)} 
                              {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} {(DQ ($ VSub_Name "$not_found_msg"))}
                            )
                          ]
                          spids: [-1 447]
                        )
                      ]
                      spids: [-1 462]
                    )
                    (C {(test)} {(-n)} {(DQ ($ VSub_Name "$shown_any"))})
                  ]
                  spids: [250]
                )
              ]
              negated: False
            )
          ]
          spids: [193]
        )
      spids: [188 192]
    )
    (FuncDef
      name: diff_mode
      body: 
        (BraceGroup
          children: [(C {(test)} {(DQ ($ VSub_Name "$TOOL_MODE"))} {(Lit_Other "=")} {(diff)})]
          spids: [484]
        )
      spids: [480 483]
    )
    (FuncDef
      name: merge_mode
      body: 
        (BraceGroup
          children: [(C {(test)} {(DQ ($ VSub_Name "$TOOL_MODE"))} {(Lit_Other "=")} {(merge)})]
          spids: [504]
        )
      spids: [500 503]
    )
    (FuncDef
      name: translate_merge_tool_path
      body: (BraceGroup children:[(C {(echo)} {(DQ ($ VSub_Number "$1"))})] spids:[525])
      spids: [520 524]
    )
    (FuncDef
      name: check_unchanged
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} {(DQ ($ VSub_Name "$MERGED"))} {(-nt)} {(DQ ($ VSub_Name "$BACKUP"))})
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [-1 560]
                )
              ]
              else_action: [
                (While
                  cond: [(C {(true)})]
                  body: 
                    (DoGroup
                      children: [
                        (C {(echo)} {(DQ ($ VSub_Name "$MERGED") (" seems unchanged."))})
                        (C {(printf)} {(DQ ("Was the merge successful [y/n]? "))})
                        (AndOr
                          children: [
                            (C {(read)} {(answer)})
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(1)}
                            )
                          ]
                          op_id: Op_DPipe
                        )
                        (Case
                          to_match: {(DQ ($ VSub_Name "$answer"))}
                          arms: [
                            (case_arm
                              pat_list: [{(y) (Lit_Other "*")} {(Y) (Lit_Other "*")}]
                              action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                              spids: [614 619 625 -1]
                            )
                            (case_arm
                              pat_list: [{(n) (Lit_Other "*")} {(N) (Lit_Other "*")}]
                              action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                              spids: [628 633 639 -1]
                            )
                          ]
                          spids: [605 611 642]
                        )
                      ]
                      spids: [576 645]
                    )
                )
              ]
              spids: [568 648]
            )
          ]
          spids: [542]
        )
      spids: [537 541]
    )
    (FuncDef
      name: valid_tool
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(setup_tool)} {(DQ ($ VSub_Number "$1"))})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
              ]
              op_id: Op_DAmp
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cmd)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(get_merge_tool_cmd)} {(DQ ($ VSub_Number "$1"))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [675 681]
                      )
                    }
                  spids: [674]
                )
              ]
              spids: [674]
            )
            (C {(test)} {(-n)} {(DQ ($ VSub_Name "$cmd"))})
          ]
          spids: [658]
        )
      spids: [653 657]
    )
    (FuncDef
      name: setup_user_tool
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:merge_tool_cmd)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(get_merge_tool_cmd)} {(DQ ($ VSub_Name "$tool"))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [704 710]
                      )
                    }
                  spids: [703]
                )
              ]
              spids: [703]
            )
            (AndOr
              children: [
                (C {(test)} {(-n)} {(DQ ($ VSub_Name "$merge_tool_cmd"))})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
              op_id: Op_DPipe
            )
            (FuncDef
              name: diff_cmd
              body: 
                (BraceGroup
                  children: [
                    (Subshell
                      child: (C {(eval)} {($ VSub_Name "$merge_tool_cmd")})
                      spids: [737 743]
                    )
                  ]
                  spids: [734]
                )
              spids: [729 733]
            )
            (FuncDef
              name: merge_cmd
              body: 
                (BraceGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:trust_exit_code)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (AndOr
                                        children: [
                                          (C {(git)} {(config)} {(--bool)} 
                                            {(DQ (mergetool.) ($ VSub_Number "$1") (.trustExitCode))}
                                          )
                                          (C {(echo)} {(false)})
                                        ]
                                        op_id: Op_DPipe
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [759 779]
                              )
                            }
                          spids: [758]
                        )
                      ]
                      spids: [758]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(test)} {(DQ ($ VSub_Name "$trust_exit_code"))} {(Lit_Other "=")} 
                              {(DQ (false))}
                            )
                          ]
                          action: [
                            (C {(touch)} {(DQ ($ VSub_Name "$BACKUP"))})
                            (Subshell
                              child: (C {(eval)} {($ VSub_Name "$merge_tool_cmd")})
                              spids: [807 813]
                            )
                            (C {(check_unchanged)})
                          ]
                          spids: [-1 797]
                        )
                      ]
                      else_action: [
                        (Subshell
                          child: (C {(eval)} {($ VSub_Name "$merge_tool_cmd")})
                          spids: [822 828]
                        )
                      ]
                      spids: [819 831]
                    )
                  ]
                  spids: [755]
                )
              spids: [750 754]
            )
          ]
          spids: [700]
        )
      spids: [695 699]
    )
    (FuncDef
      name: setup_tool
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tool)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [847]
                )
              ]
              spids: [847]
            )
            (FuncDef
              name: can_merge
              body: 
                (BraceGroup
                  children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [863]
                )
              spids: [858 862]
            )
            (FuncDef
              name: can_diff
              body: 
                (BraceGroup
                  children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [880]
                )
              spids: [875 879]
            )
            (FuncDef
              name: diff_cmd
              body: 
                (BraceGroup
                  children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                  spids: [897]
                )
              spids: [892 896]
            )
            (FuncDef
              name: merge_cmd
              body: 
                (BraceGroup
                  children: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                  spids: [914]
                )
              spids: [909 913]
            )
            (FuncDef
              name: translate_merge_tool_path
              body: (BraceGroup children:[(C {(echo)} {(DQ ($ VSub_Number "$1"))})] spids:[931])
              spids: [926 930]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [
                        (C {(test)} {(-f)} 
                          {(DQ ($ VSub_Name "$MERGE_TOOLS_DIR") (/) ($ VSub_Name "$tool"))}
                        )
                      ]
                      negated: True
                    )
                  ]
                  action: [
                    (C {(setup_user_tool)})
                    (ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {($ VSub_QMark "$?")}
                    )
                  ]
                  spids: [-1 960]
                )
              ]
              spids: [-1 971]
            )
            (C {(.)} {(DQ ($ VSub_Name "$MERGE_TOOLS_DIR") (/) ($ VSub_Name "$tool"))})
            (C {(setup_user_tool)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(merge_mode)})
                        (Pipeline children:[(C {(can_merge)})] negated:True)
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("error: '") ($ VSub_Name "$tool") 
                            ("' can not be used to resolve merges")
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1022])]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [-1 1011]
                )
                (if_arm
                  cond: [
                    (AndOr
                      children: [(C {(diff_mode)}) (Pipeline children:[(C {(can_diff)})] negated:True)]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("error: '") ($ VSub_Name "$tool") 
                            ("' can only be used to resolve merges")
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1053])]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [1031 1042]
                )
              ]
              spids: [-1 1062]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [844]
        )
      spids: [839 843]
    )
    (FuncDef
      name: get_merge_tool_cmd
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:merge_tool)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [1080]
                )
              ]
              spids: [1080]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(diff_mode)})]
                  action: [
                    (AndOr
                      children: [
                        (C {(git)} {(config)} {(DQ (difftool.) ($ VSub_Name "$merge_tool") (.cmd))})
                        (C {(git)} {(config)} {(DQ (mergetool.) ($ VSub_Name "$merge_tool") (.cmd))})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 1091]
                )
              ]
              else_action: [
                (C {(git)} {(config)} {(DQ (mergetool.) ($ VSub_Name "$merge_tool") (.cmd))})
              ]
              spids: [1118 1132]
            )
          ]
          spids: [1077]
        )
      spids: [1072 1076]
    )
    (FuncDef
      name: run_merge_tool
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:GIT_PREFIX)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name GIT_PREFIX>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(.)})
                        spids: [1157 1161]
                      )
                    }
                  spids: [1156]
                )
              ]
              spids: [1156]
            )
            (C {(export)} {(GIT_PREFIX)})
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:merge_tool_path)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(get_merge_tool_path)} {(DQ ($ VSub_Number "$1"))})]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [1171 1177]
                          )
                        }
                      spids: [1170]
                    )
                  ]
                  spids: [1170]
                )
                (C {(exit)})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:base_present)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$2"))}
                  spids: [1184]
                )
              ]
              spids: [1184]
            )
            (AndOr
              children: [
                (C {(setup_tool)} {(DQ ($ VSub_Number "$1"))})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
              ]
              op_id: Op_DPipe
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(merge_mode)})]
                  action: [(C {(run_merge_cmd)} {(DQ ($ VSub_Number "$1"))})]
                  spids: [-1 1214]
                )
              ]
              else_action: [(C {(run_diff_cmd)} {(DQ ($ VSub_Number "$1"))})]
              spids: [1224 1234]
            )
          ]
          spids: [1145]
        )
      spids: [1140 1144]
    )
    (FuncDef
      name: run_diff_cmd
      body: (BraceGroup children:[(C {(diff_cmd)} {(DQ ($ VSub_Number "$1"))})] spids:[1247])
      spids: [1242 1246]
    )
    (FuncDef
      name: run_merge_cmd
      body: (BraceGroup children:[(C {(merge_cmd)} {(DQ ($ VSub_Number "$1"))})] spids:[1267])
      spids: [1262 1266]
    )
    (FuncDef
      name: list_merge_tool_candidates
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(merge_mode)})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tools)
                          op: Equal
                          rhs: {(DQ (tortoisemerge))}
                          spids: [1295]
                        )
                      ]
                      spids: [1295]
                    )
                  ]
                  spids: [-1 1292]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:tools)
                      op: Equal
                      rhs: {(DQ (kompare))}
                      spids: [1304]
                    )
                  ]
                  spids: [1304]
                )
              ]
              spids: [1301 1310]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$DISPLAY"))})]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$GNOME_DESKTOP_SESSION_ID"))})]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:tools)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ ("meld opendiff kdiff3 tkdiff xxdiff ") 
                                        ($ VSub_Name "$tools")
                                      )
                                    }
                                  spids: [1341]
                                )
                              ]
                              spids: [1341]
                            )
                          ]
                          spids: [-1 1338]
                        )
                      ]
                      else_action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:tools)
                              op: Equal
                              rhs: 
                                {(DQ ("opendiff kdiff3 tkdiff xxdiff meld ") ($ VSub_Name "$tools"))}
                              spids: [1351]
                            )
                          ]
                          spids: [1351]
                        )
                      ]
                      spids: [1348 1358]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tools)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$tools") (" gvimdiff diffuse diffmerge ecmerge"))}
                          spids: [1361]
                        )
                      ]
                      spids: [1361]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tools)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$tools") (" p4merge araxis bc codecompare"))}
                          spids: [1368]
                        )
                      ]
                      spids: [1368]
                    )
                  ]
                  spids: [-1 1324]
                )
              ]
              spids: [-1 1375]
            )
            (Case
              to_match: 
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name VISUAL>
                      suffix_op: 
                        (StringUnary
                          op_id: VTest_ColonHyphen
                          arg_word: {($ VSub_Name "$EDITOR")}
                        )
                      spids: [1381 1385]
                    )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other "*") (vim) (Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tools)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$tools") (" vimdiff emerge"))}
                          spids: [1397]
                        )
                      ]
                      spids: [1397]
                    )
                  ]
                  spids: [1391 1394 1404 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tools)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$tools") (" emerge vimdiff"))}
                          spids: [1411]
                        )
                      ]
                      spids: [1411]
                    )
                  ]
                  spids: [1407 1408 1418 -1]
                )
              ]
              spids: [1378 1388 1421]
            )
          ]
          spids: [1284]
        )
      spids: [1279 1283]
    )
    (FuncDef
      name: show_tool_help
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tool_opt)
                  op: Equal
                  rhs: {(DQ ("'git ") (${ VSub_Name TOOL_MODE) ("tool --tool=<tool>'"))}
                  spids: [1434]
                )
              ]
              spids: [1434]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:tab) op:Equal rhs:{(SQ <"\t">)} spids:[1445])]
              spids: [1445]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:LF) op:Equal rhs:{(SQ <"\n">)} spids:[1451])]
              spids: [1451]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:any_shown) op:Equal rhs:{(no)} spids:[1457])]
              spids: [1457]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cmd_name)
                  op: Equal
                  rhs: {(${ VSub_Name TOOL_MODE) (tool)}
                  spids: [1462]
                )
              ]
              spids: [1462]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:config_tools)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (BraceGroup
                                    children: [
                                      (AndOr
                                        children: [
                                          (C {(diff_mode)})
                                          (C {(list_config_tools)} {(difftool)} 
                                            {(DQ ($ VSub_Name "$tab") ($ VSub_Name "$tab"))}
                                          )
                                        ]
                                        op_id: Op_DAmp
                                      )
                                      (C {(list_config_tools)} {(mergetool)} 
                                        {(DQ ($ VSub_Name "$tab") ($ VSub_Name "$tab"))}
                                      )
                                    ]
                                    spids: [1471]
                                  )
                                  (C {(sort)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1470 1503]
                      )
                    }
                  spids: [1469]
                )
              ]
              spids: [1469]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:extra_content)
                  op: Equal
                  rhs: {(SQ )}
                  spids: [1506]
                )
              ]
              spids: [1506]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Name "$config_tools"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:extra_content)
                          op: Equal
                          rhs: 
                            {
                              (DQ (${ VSub_Name tab) ("user-defined:") (${ VSub_Name LF) 
                                ($ VSub_Name "$config_tools")
                              )
                            }
                          spids: [1523]
                        )
                      ]
                      spids: [1523]
                    )
                  ]
                  spids: [-1 1520]
                )
              ]
              spids: [-1 1536]
            )
            (AndOr
              children: [
                (C {(show_tool_names)} {(SQ <"mode_ok && is_available">)} 
                  {(DQ ($ VSub_Name "$tab") ($ VSub_Name "$tab"))} {(DQ ($ VSub_Name "$tool_opt") (" may be set to one of the following:"))} 
                  {
                    (DQ ("No suitable tool for 'git ") ($ VSub_Name "$cmd_name") 
                      (" --tool=<tool>' found.")
                    )
                  } {(DQ ($ VSub_Name "$extra_content"))}
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:any_shown)
                      op: Equal
                      rhs: {(yes)}
                      spids: [1575]
                    )
                  ]
                  spids: [1575]
                )
              ]
              op_id: Op_DAmp
            )
            (AndOr
              children: [
                (C {(show_tool_names)} {(SQ <"mode_ok && ! is_available">)} 
                  {(DQ ($ VSub_Name "$tab") ($ VSub_Name "$tab"))} {(DQ (${ VSub_Name LF) ("The following tools are valid, but not currently available:"))}
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:any_shown)
                      op: Equal
                      rhs: {(yes)}
                      spids: [1603]
                    )
                  ]
                  spids: [1603]
                )
              ]
              op_id: Op_DAmp
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(DQ ($ VSub_Name "$any_shown"))} {(Lit_Other "=")} {(yes)})]
                  action: [
                    (C {(echo)})
                    (C {(echo)} {(DQ ("Some of the tools listed above only work in a windowed"))})
                    (C {(echo)} 
                      {(DQ ("environment. If run in a terminal-only session, they will fail."))}
                    )
                  ]
                  spids: [-1 1621]
                )
              ]
              spids: [-1 1641]
            )
            (C {(exit)} {(0)})
          ]
          spids: [1431]
        )
      spids: [1426 1430]
    )
    (FuncDef
      name: guess_merge_tool
      body: 
        (BraceGroup
          children: [
            (C {(list_merge_tool_candidates)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1664])
                (HereDoc
                  op_id: Redir_DLessDash
                  fd: -1
                  body: 
                    {
                      (DQ ("\n") ("This message is displayed because '") ($ VSub_Name "$TOOL_MODE") 
                        (".tool' is not configured.\n") ("See 'git ") (${ VSub_Name TOOL_MODE) ("tool --tool-help' or 'git help config' for more details.\n") 
                        ("'git ") (${ VSub_Name TOOL_MODE) ("tool' will now attempt to use one of the following tools:\n") 
                        ($ VSub_Name "$tools") ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1667]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:IFS) op:Equal rhs:{(SQ <" ">)} spids:[1692])]
              spids: [1692]
            )
            (ForEach
              iter_name: tool
              iter_words: [{($ VSub_Name "$tools")}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {(is_available)} {(DQ ($ VSub_Name "$tool"))})
                        (AndOr
                          children: [
                            (C {(echo)} {(DQ ($ VSub_Name "$tool"))})
                            (ControlFlow
                              token: <ControlFlow_Return return>
                              arg_word: {(0)}
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [1707 1731]
                )
              spids: [1703 -1]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ("No known ") (${ VSub_Name TOOL_MODE) (" tool is available."))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1737])]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [1656]
        )
      spids: [1651 1655]
    )
    (FuncDef
      name: get_configured_merge_tool
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(diff_mode)})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:merge_tool)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (AndOr
                                        children: [
                                          (C {(git)} {(config)} {(diff.tool)})
                                          (C {(git)} {(config)} {(merge.tool)})
                                        ]
                                        op_id: Op_DPipe
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1781 1795]
                              )
                            }
                          spids: [1780]
                        )
                      ]
                      spids: [1780]
                    )
                  ]
                  spids: [-1 1777]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:merge_tool)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(git)} {(config)} {(merge.tool)})]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [1802 1808]
                          )
                        }
                      spids: [1801]
                    )
                  ]
                  spids: [1801]
                )
              ]
              spids: [1798 1811]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(test)} {(-n)} {(DQ ($ VSub_Name "$merge_tool"))})
                        (Pipeline
                          children: [(C {(valid_tool)} {(DQ ($ VSub_Name "$merge_tool"))})]
                          negated: True
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("git config option ") ($ VSub_Name "$TOOL_MODE") 
                            (".tool set to unknown tool: ") ($ VSub_Name "$merge_tool")
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1840])]
                    )
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("Resetting to default..."))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1853])]
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [-1 1835]
                )
              ]
              spids: [-1 1866]
            )
            (C {(echo)} {(DQ ($ VSub_Name "$merge_tool"))})
          ]
          spids: [1761]
        )
      spids: [1756 1760]
    )
    (FuncDef
      name: get_merge_tool_path
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:merge_tool)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [1890]
                )
              ]
              spids: [1890]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [(C {(valid_tool)} {(DQ ($ VSub_Name "$merge_tool"))})]
                      negated: True
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("Unknown merge tool ") ($ VSub_Name "$merge_tool"))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1912])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 1907]
                )
              ]
              spids: [-1 1926]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(diff_mode)})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:merge_tool_path)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (AndOr
                                        children: [
                                          (C {(git)} {(config)} 
                                            {(difftool.) (DQ ($ VSub_Name "$merge_tool")) (.path)}
                                          )
                                          (C {(git)} {(config)} 
                                            {(mergetool.) (DQ ($ VSub_Name "$merge_tool")) (.path)}
                                          )
                                        ]
                                        op_id: Op_DPipe
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1938 1961]
                              )
                            }
                          spids: [1937]
                        )
                      ]
                      spids: [1937]
                    )
                  ]
                  spids: [-1 1934]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:merge_tool_path)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(git)} {(config)} 
                                    {(mergetool.) (DQ ($ VSub_Name "$merge_tool")) (.path)}
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [1968 1978]
                          )
                        }
                      spids: [1967]
                    )
                  ]
                  spids: [1967]
                )
              ]
              spids: [1964 1981]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$merge_tool_path"))})]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:merge_tool_path)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(translate_merge_tool_path)} 
                                        {(DQ ($ VSub_Name "$merge_tool"))}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [1999 2005]
                              )
                            }
                          spids: [1998]
                        )
                      ]
                      spids: [1998]
                    )
                  ]
                  spids: [-1 1995]
                )
              ]
              spids: [-1 2008]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (C {(test)} {(-z)} 
                          {
                            (DQ 
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(get_merge_tool_cmd)} {(DQ ($ VSub_Name "$merge_tool"))})
                                    ]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [2018 2024]
                              )
                            )
                          }
                        )
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(type)} {(DQ ($ VSub_Name "$merge_tool_path"))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [2038]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [2041]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("The ") ($ VSub_Name "$TOOL_MODE") (" tool ") ($ VSub_Name "$merge_tool") 
                            (" is not available as")
                          )
                        }
                        {(DQ ("'") ($ VSub_Name "$merge_tool_path") ("'"))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[2050])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 2045]
                )
              ]
              spids: [-1 2074]
            )
            (C {(echo)} {(DQ ($ VSub_Name "$merge_tool_path"))})
          ]
          spids: [1883]
        )
      spids: [1878 1882]
    )
    (FuncDef
      name: get_merge_tool
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:merge_tool)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(get_configured_merge_tool)})])
                        left_token: <Left_CommandSub "$(">
                        spids: [2099 2101]
                      )
                    }
                  spids: [2098]
                )
              ]
              spids: [2098]
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name "$merge_tool"))})]
                  action: [
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:merge_tool)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: (CommandList children:[(C {(guess_merge_tool)})])
                                    left_token: <Left_CommandSub "$(">
                                    spids: [2123 2125]
                                  )
                                }
                              spids: [2122]
                            )
                          ]
                          spids: [2122]
                        )
                        (C {(exit)})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 2119]
                )
              ]
              spids: [-1 2132]
            )
            (C {(echo)} {(DQ ($ VSub_Name "$merge_tool"))})
          ]
          spids: [2091]
        )
      spids: [2086 2090]
    )
    (FuncDef
      name: mergetool_find_win32_cmd
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:executable)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [2152]
                )
              ]
              spids: [2152]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sub_directory)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [2156]
                )
              ]
              spids: [2156]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (SimpleCommand
                      words: [{(type)} {(-p)} {(DQ ($ VSub_Name "$executable"))}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(/dev/null)}
                          spids: [2175]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 2
                          arg_word: {(1)}
                          spids: [2178]
                        )
                      ]
                    )
                  ]
                  action: [
                    (C {(printf)} {(SQ <"%s">)} {(DQ ($ VSub_Name "$executable"))})
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [-1 2182]
                )
              ]
              spids: [-1 2199]
            )
            (ForEach
              iter_name: directory
              iter_words: [
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (Pipeline
                            children: [
                              (C {(env)})
                              (C {(grep)} {(-Ei)} {(SQ <"^PROGRAM(FILES(\\(X86\\))?|W6432)=">)})
                              (C {(cut)} {(-d)} {(SQ <"=">)} {(-f)} {(2-)})
                              (C {(sort)} {(-u)})
                            ]
                            negated: False
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [2213 2246]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (AndOr
                              children: [
                                (C {(test)} {(-n)} {(DQ ($ VSub_Name "$directory"))})
                                (C {(test)} {(-x)} 
                                  {
                                    (DQ ($ VSub_Name "$directory") (/) ($ VSub_Name "$sub_directory") 
                                      (/) ($ VSub_Name "$executable")
                                    )
                                  }
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          action: [
                            (C {(printf)} {(SQ <"%s">)} 
                              {
                                (DQ ($ VSub_Name "$directory") (/) ($ VSub_Name "$sub_directory") (/) 
                                  ($ VSub_Name "$executable")
                                )
                              }
                            )
                            (ControlFlow
                              token: <ControlFlow_Return return>
                            )
                          ]
                          spids: [-1 2277]
                        )
                      ]
                      spids: [-1 2298]
                    )
                  ]
                  spids: [2249 2301]
                )
              spids: [2212 -1]
            )
            (C {(printf)} {(SQ <"%s">)} {(DQ ($ VSub_Name "$executable"))})
          ]
          spids: [2149]
        )
      spids: [2144 2148]
    )
  ]
)