(command.CommandList
  children: [
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [
        {<.>}
        {
          (CommandSub
            left_token: <Id.Left_DollarParen '$('>
            child: 
              (command.Simple
                blame_tok: <dirname>
                more_env: []
                words: [{<dirname>} {($ Id.VSub_Number 0)}]
                redirects: []
                do_fork: T
              )
            right: <Id.Eof_RParen _>
          ) <'/conf.sh'>
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'base='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'base='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'base='> name:base)
          op: assign_op.Equal
          rhs: 
            {
              (CommandSub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Simple
                    blame_tok: <basename>
                    more_env: []
                    words: [{<basename>} {($ Id.VSub_Number 0)}]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Backtick_Right '`'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'sectors='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'sectors='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sectors='> name:sectors)
          op: assign_op.Equal
          rhs: {<100>}
        )
      ]
      redirects: []
    )
    (command.AndOr
      children: [
        (command.ShAssignment
          left: <Id.Lit_VarLike 'keyfile='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'keyfile='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keyfile='> name:keyfile)
              op: assign_op.Equal
              rhs: 
                {
                  (CommandSub
                    left_token: <Id.Left_Backtick '`'>
                    child: 
                      (command.Simple
                        blame_tok: <mktemp>
                        more_env: []
                        words: [{<mktemp>} {($ Id.VSub_DollarName base) <.XXXXXX>}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Backtick_Right '`'>
                  )
                }
            )
          ]
          redirects: []
        )
        (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.AndOr
      children: [
        (command.ShAssignment
          left: <Id.Lit_VarLike 'rnd='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'rnd='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rnd='> name:rnd)
              op: assign_op.Equal
              rhs: 
                {
                  (CommandSub
                    left_token: <Id.Left_Backtick '`'>
                    child: 
                      (command.Simple
                        blame_tok: <mktemp>
                        more_env: []
                        words: [{<mktemp>} {($ Id.VSub_DollarName base) <.XXXXXX>}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Backtick_Right '`'>
                  )
                }
            )
          ]
          redirects: []
        )
        (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.ShFunction
      name_tok: <do_test>
      name: do_test
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'ealgo='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'ealgo='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ealgo='> name:ealgo)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'keylen='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'keylen='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keylen='> name:keylen)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 2)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'expected_ealgo='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'expected_ealgo='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected_ealgo='> name:expected_ealgo)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 3)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'expected_keylen='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'expected_keylen='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'expected_keylen='>
                      name: expected_keylen
                    )
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 4)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <geli>
              more_env: []
              words: [
                {<geli>}
                {<init>}
                {<-B>}
                {<none>}
                {<-e>}
                {($ Id.VSub_DollarName ealgo)}
                {<-l>}
                {($ Id.VSub_DollarName keylen)}
                {<-P>}
                {<-K>}
                {($ Id.VSub_DollarName keyfile)}
                {<md> (${ Id.VSub_Name no)}
              ]
              redirects: [(Redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <geli>
              more_env: []
              words: [
                {<geli>}
                {<attach>}
                {<-p>}
                {<-k>}
                {($ Id.VSub_DollarName keyfile)}
                {<md> (${ Id.VSub_Name no)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'real_ealgo='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'real_ealgo='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'real_ealgo='> name:real_ealgo)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <geli>
                                more_env: []
                                words: [{<geli>} {<list>} {<md> (${ Id.VSub_Name no) <.eli>}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <awk>
                                more_env: []
                                words: [{<awk>} {(SQ <'/EncryptionAlgorithm/ {print $2}'>)}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'real_keylen='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'real_keylen='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'real_keylen='> name:real_keylen)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <geli>
                                more_env: []
                                words: [{<geli>} {<list>} {<md> (${ Id.VSub_Name no) <.eli>}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <awk>
                                more_env: []
                                words: [{<awk>} {(SQ <'/KeyLength/ {print $2}'>)}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(${ Id.VSub_Name real_ealgo)}
                                {<Id.Lit_Equals '='>}
                                {(${ Id.VSub_Name expected_ealgo)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'ok '> ($ Id.VSub_DollarName i) <' - '> (${ Id.VSub_Name ealgo) 
                            <' aliased to '> (${ Id.VSub_Name real_ealgo)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [185 202]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (DQ <'not ok '> ($ Id.VSub_DollarName i) <' - expected '> 
                        (${ Id.VSub_Name expected_ealgo) <' but got '> (${ Id.VSub_Name real_ealgo)
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'i='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'i='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'i='> name:i)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        left: <Id.Left_DollarDParen '$(('>
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: ($ Id.Lit_ArithVarLike i)
                            right: {<Id.Lit_Digits 1>}
                          )
                        right: <Id.Right_DollarDParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(${ Id.VSub_Name real_keylen)}
                                {<Id.Lit_Equals '='>}
                                {(${ Id.VSub_Name expected_keylen)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'ok '> ($ Id.VSub_DollarName i) <' - keylen='> (${ Id.VSub_Name keylen) 
                            <' for ealgo='> (${ Id.VSub_Name ealgo) <' aliases to '> (${ Id.VSub_Name real_keylen)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [253 270]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (DQ <'not ok '> ($ Id.VSub_DollarName i) <' - expected '> 
                        (${ Id.VSub_Name expected_keylen) <' but got '> (${ Id.VSub_Name real_keylen)
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'i='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'i='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'i='> name:i)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        left: <Id.Left_DollarDParen '$(('>
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: ($ Id.Lit_ArithVarLike i)
                            right: {<Id.Lit_Digits 1>}
                          )
                        right: <Id.Right_DollarDParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <geli>
              more_env: []
              words: [{<geli>} {<detach>} {<md> (${ Id.VSub_Name no)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <echo>
      more_env: []
      words: [{<echo>} {(DQ <1..38>)}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'i='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'i='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'i='> name:i)
          op: assign_op.Equal
          rhs: {<1>}
        )
      ]
      redirects: []
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <mdconfig>
          more_env: []
          words: [{<mdconfig>} {<-a>} {<-t>} {<malloc>} {<-s>} {<1024k>} {<-u>} {($ Id.VSub_DollarName no)}]
          redirects: []
          do_fork: T
        )
        (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.Simple
      blame_tok: <dd>
      more_env: []
      words: [
        {<dd>}
        {<Id.Lit_VarLike 'if='> <'/dev/random'>}
        {<Id.Lit_VarLike 'of='> (${ Id.VSub_Name keyfile)}
        {<Id.Lit_VarLike 'bs='> <512>}
        {<Id.Lit_VarLike 'count='> <16>}
      ]
      redirects: [
        (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
        (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
      ]
      do_fork: T
    )
    (command.ForEach
      keyword: <Id.KW_For for>
      iter_names: [spec]
      iterable: 
        (for_iter.Words
          words: [
            {<aes> <Id.Lit_Colon ':'> <0> <Id.Lit_Colon ':'> <AES-XTS> <Id.Lit_Colon ':'> <128>}
            {<aes> <Id.Lit_Colon ':'> <128> <Id.Lit_Colon ':'> <AES-XTS> <Id.Lit_Colon ':'> <128>}
            {<aes> <Id.Lit_Colon ':'> <256> <Id.Lit_Colon ':'> <AES-XTS> <Id.Lit_Colon ':'> <256>}
            {<3des> <Id.Lit_Colon ':'> <0> <Id.Lit_Colon ':'> <3DES-CBC> <Id.Lit_Colon ':'> <192>}
            {<3des> <Id.Lit_Colon ':'> <192> <Id.Lit_Colon ':'> <3DES-CBC> <Id.Lit_Colon ':'> <192>}
            {<blowfish> <Id.Lit_Colon ':'> <0> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> <128>}
            {<blowfish> <Id.Lit_Colon ':'> <128> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <128>
            }
            {<blowfish> <Id.Lit_Colon ':'> <160> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <160>
            }
            {<blowfish> <Id.Lit_Colon ':'> <192> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <192>
            }
            {<blowfish> <Id.Lit_Colon ':'> <224> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <224>
            }
            {<blowfish> <Id.Lit_Colon ':'> <256> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <256>
            }
            {<blowfish> <Id.Lit_Colon ':'> <288> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <288>
            }
            {<blowfish> <Id.Lit_Colon ':'> <352> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <352>
            }
            {<blowfish> <Id.Lit_Colon ':'> <384> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <384>
            }
            {<blowfish> <Id.Lit_Colon ':'> <416> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <416>
            }
            {<blowfish> <Id.Lit_Colon ':'> <448> <Id.Lit_Colon ':'> <Blowfish-CBC> <Id.Lit_Colon ':'> 
              <448>
            }
            {<camellia> <Id.Lit_Colon ':'> <0> <Id.Lit_Colon ':'> <CAMELLIA-CBC> <Id.Lit_Colon ':'> <128>}
            {<camellia> <Id.Lit_Colon ':'> <128> <Id.Lit_Colon ':'> <CAMELLIA-CBC> <Id.Lit_Colon ':'> 
              <128>
            }
            {<camellia> <Id.Lit_Colon ':'> <256> <Id.Lit_Colon ':'> <CAMELLIA-CBC> <Id.Lit_Colon ':'> 
              <256>
            }
          ]
        )
      semi_tok: <Id.Op_Semi _>
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'ealgo='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'ealgo='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ealgo='> name:ealgo)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <echo>
                                more_env: []
                                words: [{<echo>} {($ Id.VSub_DollarName spec)}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <cut>
                                more_env: []
                                words: [{<cut>} {<-d>} {<Id.Lit_Colon ':'>} {<-f>} {<1>}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'keylen='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'keylen='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keylen='> name:keylen)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <echo>
                                more_env: []
                                words: [{<echo>} {($ Id.VSub_DollarName spec)}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <cut>
                                more_env: []
                                words: [{<cut>} {<-d>} {<Id.Lit_Colon ':'>} {<-f>} {<2>}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'expected_ealgo='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'expected_ealgo='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expected_ealgo='> name:expected_ealgo)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <echo>
                                more_env: []
                                words: [{<echo>} {($ Id.VSub_DollarName spec)}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <cut>
                                more_env: []
                                words: [{<cut>} {<-d>} {<Id.Lit_Colon ':'>} {<-f>} {<3>}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'expected_keylen='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'expected_keylen='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'expected_keylen='>
                      name: expected_keylen
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <echo>
                                more_env: []
                                words: [{<echo>} {($ Id.VSub_DollarName spec)}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <cut>
                                more_env: []
                                words: [{<cut>} {<-d>} {<Id.Lit_Colon ':'>} {<-f>} {<4>}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <do_test>
              more_env: []
              words: [
                {<do_test>}
                {($ Id.VSub_DollarName ealgo)}
                {($ Id.VSub_DollarName keylen)}
                {($ Id.VSub_DollarName expected_ealgo)}
                {($ Id.VSub_DollarName expected_keylen)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-f>} {($ Id.VSub_DollarName keyfile)}]
      redirects: []
      do_fork: T
    )
  ]
)