(command.CommandList
  children: [
    (C {<.>} {<'../1/library.sh'>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<3>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.Simple
              words: [
                {<echo>}
                {(DQ <'Usage: '> ($ Id.VSub_Number '$0') <' principal interest loan-duration-years'>)}
              ]
              redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [31 45]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:P)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [67]
        )
        (assign_pair
          lhs: (sh_lhs_expr.Name name:I)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [70]
        )
        (assign_pair
          lhs: (sh_lhs_expr.Name name:L)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$3')}
          spids: [73]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:J)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (C {<scriptbc>} {<-p>} {<8>} {($ Id.VSub_DollarName '$I')} {<'/'>} 
                      {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>)} {<12>} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\*'>)} {<100>} 
                      {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\)'>)}
                    )
                )
              )
            }
          spids: [76]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:N)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (word_part.ArithSub
                  anode: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Star
                      left: {($ Id.VSub_DollarName '$L')}
                      right: {<Id.Lit_Digits 12>}
                    )
                )
              )
            }
          spids: [102]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:M)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (C {<scriptbc>} {<-p>} {<8>} {($ Id.VSub_DollarName '$P')} 
                      {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\*'>)} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>)} {($ Id.VSub_DollarName '$J')} {<'/'>} 
                      {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>) <1>} {<->} {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>) <1>} {<Id.Lit_Other '+'>} 
                      {($ Id.VSub_DollarName '$J') 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\)'>
                        )
                      } {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\^'>)} 
                      {<-> ($ Id.VSub_DollarName '$N') 
                        (word_part.EscapedLiteral
                          token: <Id.Lit_EscapedChar '\\)'>
                        )
                      } {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\)'>)}
                    )
                )
              )
            }
          spids: [116]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:dollars)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Pipeline
                      children: [(C {<echo>} {($ Id.VSub_DollarName '$M')}) (C {<cut>} {<-d.>} {<-f1>})]
                      negated: F
                    )
                )
              )
            }
          spids: [164]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cents)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<echo>} {($ Id.VSub_DollarName '$M')})
                        (C {<cut>} {<-d.>} {<-f2>})
                        (C {<cut>} {<-c1-2>})
                      ]
                      negated: F
                    )
                )
              )
            }
          spids: [181]
        )
      ]
    )
    (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: 235
              stdin_parts: [
                <'A '>
                ($ Id.VSub_DollarName '$L')
                <'-year loan at '>
                ($ Id.VSub_DollarName '$I')
                <'% interest with a principal amount of '>
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<nicenumber>} {($ Id.VSub_DollarName '$P')} {<1>})
                )
                <' \n'>
                <'results in a payment of '>
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                ($ Id.VSub_DollarName '$dollars')
                <.>
                ($ Id.VSub_DollarName '$cents')
                <' each month for the duration of\n'>
                <'the loan ('>
                ($ Id.VSub_DollarName '$N')
                <' payments).\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)