(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tid)
          op: assign_op.Equal
          rhs: {(DQ <'connect to ssh.com server'>)}
          spids: [7]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ <X> (${ Id.VSub_Name TEST_COMBASE))} 
                      {<Id.Lit_Equals '='>} {(DQ <X>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<fatal>} {(SQ <'$TEST_COMBASE is not set'>)})]
          spids: [16 36]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSIONS)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'\n'> <'\t2.0.12\n'> <'\t2.0.13\n'> <'\t2.1.0\n'> <'\t2.2.0\n'> <'\t2.3.0\n'> 
                <'\t2.4.0\n'> <'\t3.0.0\n'> <'\t3.1.0\n'> <'\t3.2.0\n'> <'\t3.2.2\n'> <'\t3.2.3\n'> <'\t3.2.5\n'> <'\t3.2.9\n'> 
                <'\t3.2.9.1\n'> <'\t3.3.0'>
              )
            }
          spids: [48]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SRC)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<dirname>} {(${ Id.VSub_Name SCRIPT)})
              )
            }
          spids: [75]
        )
      ]
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 136
              stdin_parts: [
                <'#*:\n'>
                <'\t# Port and ListenAddress are not used.\n'>
                <'\tQuietMode\t\t\tyes\n'>
                <'\tPort\t\t\t\t4343\n'>
                <'\tListenAddress\t\t\t127.0.0.1\n'>
                <'\tUserConfigDirectory\t\t'>
                (${ Id.VSub_Name OBJ)
                <'/%U\n'>
                <'\tCiphers\t\t\t\tAnyCipher\n'>
                <'\tPubKeyAuthentication\t\tyes\n'>
                <'\t#AllowedAuthentications\t\tpublickey\n'>
                <'\tAuthorizationFile\t\tauthorization\n'>
                <'\tHostKeyFile\t\t\t'>
                (${ Id.VSub_Name SRC)
                <'/dsa_ssh2.prv\n'>
                <'\tPublicHostKeyFile\t\t'>
                (${ Id.VSub_Name SRC)
                <'/dsa_ssh2.pub\n'>
                <'\tRandomSeedFile\t\t\t'>
                (${ Id.VSub_Name OBJ)
                <'/random_seed\n'>
                <'\tMaxConnections\t\t\t0\n'>
                <'\tPermitRootLogin\t\t\tyes\n'>
                <'\tVerboseMode\t\t\tno\n'>
                <'\tCheckMail\t\t\tno\n'>
                <'\tSsh1Compatibility\t\tno\n'>
              ]
            )
        )
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/sshd2_config'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<sed>} {(DQ <'s/HostKeyAlias.*/HostKeyAlias ssh2-localhost-with-alias/'>)}]
      redirects: [
        (redir
          op: <Id.Redir_Less '<'>
          loc: (redir_loc.Fd fd:0)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config'>}
        )
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/ssh_config_com'>}
        )
      ]
      do_fork: T
    )
    (C {<rm>} {<-f>} {(${ Id.VSub_Name OBJ) <'/dsa'>} {(${ Id.VSub_Name OBJ) <'/dsa.pub'>})
    (C {(${ Id.VSub_Name SSHKEYGEN)} {<-q>} {<-N>} {(SQ )} {<-t>} {<dsa>} {<-f>} 
      {(${ Id.VSub_Name OBJ) <'/dsa'>}
    )
    (C {<mkdir>} {<-p>} {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER)})
    (C {<cp>} {<'/dev/null'>} {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER) <'/authorization'>})
    (command.ForEach
      iter_name: t
      iter_words: [{<rsa>} {<dsa>}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Simple
              words: [
                {(${ Id.VSub_Name SSHKEYGEN)}
                {<-e>}
                {<-f>}
                {(${ Id.VSub_Name OBJ) <'/'> ($ Id.VSub_DollarName '$t') <.pub>}
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: 
                    {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER) <'/'> 
                      ($ Id.VSub_DollarName '$t') <.com>
                    }
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<echo>} {<Key>} {($ Id.VSub_DollarName '$t') <.com>}]
              redirects: [
                (redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER) <'/authorization'>}
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [
                {<echo>}
                {<IdentityFile>}
                {(${ Id.VSub_Name OBJ) <'/'> ($ Id.VSub_DollarName '$t')}
              ]
              redirects: [
                (redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(${ Id.VSub_Name OBJ) <'/ssh_config_com'>}
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.Subshell
      child: 
        (command.CommandList
          children: [
            (C {<printf>} {(SQ <'ssh2-localhost-with-alias,127.0.0.1,::1 '>)})
            (C {(${ Id.VSub_Name SSHKEYGEN)} {<-if>} {(${ Id.VSub_Name SRC) <'/dsa_ssh2.pub'>})
          ]
        )
      redirects: [
        (redir
          op: <Id.Redir_DGreat '>>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/known_hosts'>}
        )
      ]
    )
    (command.ForEach
      iter_name: v
      iter_words: [{(${ Id.VSub_Name VERSIONS)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sshd2)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name TEST_COMBASE) <'/'> (${ Id.VSub_Name v) <'/sshd2'>}
                  spids: [359]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-x>} 
                              {(${ Id.VSub_Name sshd2)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(command.ControlFlow token:<Id.ControlFlow_Continue continue>)]
                  spids: [370 385]
                )
              ]
            )
            (C {<trace>} {(DQ <'sshd2 '> (${ Id.VSub_Name v))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PROXY)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'proxycommand '> (${ Id.VSub_Name sshd2) <' -qif '> (${ Id.VSub_Name OBJ) 
                        <'/sshd2_config 2> /dev/null'>
                      )
                    }
                  spids: [404]
                )
              ]
            )
            (C {(${ Id.VSub_Name SSH)} {<-qF>} {(${ Id.VSub_Name OBJ) <'/ssh_config_com'>} {<-o>} 
              {(DQ (${ Id.VSub_Name PROXY))} {<dummy>} {<Id.ControlFlow_Exit exit>} {<0>}
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<fail>} {(DQ <'ssh connect to sshd2 '> (${ Id.VSub_Name v) <' failed'>)})]
                  spids: [444 457]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ciphers)
                  op: assign_op.Equal
                  rhs: {(DQ <'3des-cbc blowfish-cbc arcfour'>)}
                  spids: [475]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:macs)
                  op: assign_op.Equal
                  rhs: {(DQ <hmac-md5>)}
                  spids: [481]
                )
              ]
            )
            (command.Case
              to_match: {($ Id.VSub_DollarName '$v')}
              arms: [
                (case_arm
                  pat_list: [{<2.4.> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ciphers)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$ciphers') <' cast128-cbc'>)}
                          spids: [499]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:macs)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName '$macs') 
                                <' hmac-sha1 hmac-sha1-96 hmac-md5-96'>
                              )
                            }
                          spids: [506]
                        )
                      ]
                    )
                  ]
                  spids: [494 496 513 -1]
                )
                (case_arm
                  pat_list: [{<3.> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ciphers)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$ciphers') <' aes128-cbc cast128-cbc'>)}
                          spids: [521]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:macs)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName '$macs') 
                                <' hmac-sha1 hmac-sha1-96 hmac-md5-96'>
                              )
                            }
                          spids: [528]
                        )
                      ]
                    )
                  ]
                  spids: [516 518 535 -1]
                )
              ]
            )
            (command.ForEach
              iter_name: m
              iter_words: [{($ Id.VSub_DollarName '$macs')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ForEach
                      iter_name: c
                      iter_words: [{($ Id.VSub_DollarName '$ciphers')}]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (C {<trace>} 
                              {
                                (DQ <'sshd2 '> (${ Id.VSub_Name v) <' cipher '> 
                                  ($ Id.VSub_DollarName '$c') <' mac '> ($ Id.VSub_DollarName '$m')
                                )
                              }
                            )
                            (C {<verbose>} 
                              {
                                (DQ <'test '> (${ Id.VSub_Name tid) <': sshd2 '> (${ Id.VSub_Name v) 
                                  <' cipher '> ($ Id.VSub_DollarName '$c') <' mac '> ($ Id.VSub_DollarName '$m')
                                )
                              }
                            )
                            (C {(${ Id.VSub_Name SSH)} {<-c>} {($ Id.VSub_DollarName '$c')} {<-m>} 
                              {($ Id.VSub_DollarName '$m')} {<-qF>} {(${ Id.VSub_Name OBJ) <'/ssh_config_com'>} {<-o>} {(DQ (${ Id.VSub_Name PROXY))} {<dummy>} 
                              {<Id.ControlFlow_Exit exit>} {<0>}
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} 
                                              {<0>} {<Id.Lit_RBracket ']'>}
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<fail>} 
                                      {
                                        (DQ <'ssh connect to sshd2 '> (${ Id.VSub_Name v) <' with '> 
                                          ($ Id.VSub_DollarName '$c') <'/'> ($ Id.VSub_DollarName '$m') <' failed'>
                                        )
                                      }
                                    )
                                  ]
                                  spids: [635 648]
                                )
                              ]
                            )
                          ]
                        )
                    )
                  ]
                )
            )
          ]
        )
    )
    (C {<rm>} {<-rf>} {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER)})
    (command.ForEach
      iter_name: i
      iter_words: [
        {<sshd_config_proxy>}
        {<ssh_config_proxy>}
        {<random_seed>}
        {<sshd2_config>}
        {<dsa.pub>}
        {<dsa>}
        {<ssh_config_com>}
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [(C {<rm>} {<-f>} {(${ Id.VSub_Name OBJ) <'/'> ($ Id.VSub_DollarName '$i')})]
        )
    )
  ]
)