(command.CommandList children: [ (command.ShFunction keyword: <Id.KW_Function function> name_tok: <initializeDeck> name: initializeDeck body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'card='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card='> name:card) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName card)} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<53>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_ArrayLhsOpen 'deck['> pairs: [ (AssignPair left: <Id.Lit_ArrayLhsOpen 'deck['> lhs: (sh_lhs_expr.IndexedName left: <Id.Lit_ArrayLhsOpen 'deck['> name: deck index: {($ Id.VSub_DollarName card)} ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName card)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'card='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card='> name:card) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName card)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <shuffleDeck> name: shuffleDeck body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'count='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'count='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'count='> name:count) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName count)} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<53>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <pickCard> more_env: [] words: [{<pickCard>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_ArrayLhsOpen 'newdeck['> pairs: [ (AssignPair left: <Id.Lit_ArrayLhsOpen 'newdeck['> lhs: (sh_lhs_expr.IndexedName left: <Id.Lit_ArrayLhsOpen 'newdeck['> name: newdeck index: {($ Id.VSub_DollarName count)} ) op: assign_op.Equal rhs: {($ Id.VSub_DollarName picked)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'count='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'count='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'count='> name:count) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName count)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <pickCard> name: pickCard body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <local> more_env: [] words: [{<local>} {<errcount>} {<randomcard>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'threshold='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'threshold='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'threshold='> name:threshold) op: assign_op.Equal rhs: {<10>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'errcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'errcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'errcount='> name:errcount) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName errcount)} {<-lt>} {($ Id.VSub_DollarName threshold)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'randomcard='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'randomcard='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'randomcard='> name:randomcard) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Percent left: {($ Id.VSub_DollarName RANDOM)} right: {<Id.Lit_Digits 52>} ) right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'errcount='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'errcount='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'errcount='> name:errcount) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName errcount)} 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 '['>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name deck> var_name: deck bracket_op: (bracket_op.ArrayIndex expr: {($ Id.VSub_DollarName randomcard)} ) right: <Id.Right_DollarBrace '}'> ) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'picked='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'picked='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'picked='> name:picked) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name deck> var_name: deck bracket_op: (bracket_op.ArrayIndex expr: {($ Id.VSub_DollarName randomcard)} ) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_ArrayLhsOpen 'deck['> pairs: [ (AssignPair left: <Id.Lit_ArrayLhsOpen 'deck['> lhs: (sh_lhs_expr.IndexedName left: <Id.Lit_ArrayLhsOpen 'deck['> name: deck index: {($ Id.VSub_DollarName picked)} ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName picked)} ) ] spids: [245 269] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'randomcard='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'randomcard='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'randomcard='> name:randomcard) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name newdeck> var_name: newdeck bracket_op: (bracket_op.ArrayIndex expr: {($ Id.VSub_DollarName randomcard)} ) right: <Id.Right_DollarBrace '}'> ) } {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'randomcard='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'randomcard='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'randomcard='> name:randomcard) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName randomcard)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'picked='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'picked='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'picked='> name:picked) op: assign_op.Equal rhs: {($ Id.VSub_DollarName randomcard)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_ArrayLhsOpen 'deck['> pairs: [ (AssignPair left: <Id.Lit_ArrayLhsOpen 'deck['> lhs: (sh_lhs_expr.IndexedName left: <Id.Lit_ArrayLhsOpen 'deck['> name: deck index: {($ Id.VSub_DollarName picked)} ) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_DollarName picked)} ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <showCard> name: showCard body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'card='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card='> name:card) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] 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_DollarName card)} {<-lt>} {<1>} {<-o>} {($ Id.VSub_DollarName card)} {<-gt>} {<52>} {<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 <'Bad card value: '> ($ Id.VSub_DollarName card))}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [405 427] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'suit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'suit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'suit='> name:suit) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.Binary op_id: Id.Arith_Minus left: {($ Id.VSub_DollarName card)} right: {<Id.Lit_Digits 1>} ) right: {<Id.Lit_Digits 13>} ) right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'rank='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank='> name:rank) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Percent left: {($ Id.VSub_DollarName card)} right: {<Id.Lit_Digits 13>} ) right: <Id.Right_DollarDParen _> ) ) } ) ] redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName suit)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <1> pattern: (pat.Words words:[{<1>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'suit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'suit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'suit='> name:suit) op: assign_op.Equal rhs: {(DQ <Hearts>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <2> pattern: (pat.Words words:[{<2>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'suit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'suit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'suit='> name:suit) op: assign_op.Equal rhs: {(DQ <Clubs>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <3> pattern: (pat.Words words:[{<3>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'suit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'suit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'suit='> name:suit) op: assign_op.Equal rhs: {(DQ <Spades>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <4> pattern: (pat.Words words:[{<4>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'suit='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'suit='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'suit='> name:suit) op: assign_op.Equal rhs: {(DQ <Diamonds>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <Id.Lit_Star '*'> pattern: (pat.Words words:[{<Id.Lit_Star '*'>}]) middle: <Id.Right_CasePat _> action: [ (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad suit value: '> ($ Id.VSub_DollarName suit))}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.Case case_kw: <Id.KW_Case case> to_match: (case_arg.Word w:{($ Id.VSub_DollarName rank)}) arms_start: <Id.KW_In in> arms: [ (CaseArm left: <0> pattern: (pat.Words words:[{<0>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'rank='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank='> name:rank) op: assign_op.Equal rhs: {(DQ <King>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <1> pattern: (pat.Words words:[{<1>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'rank='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank='> name:rank) op: assign_op.Equal rhs: {(DQ <Ace>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <11> pattern: (pat.Words words:[{<11>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'rank='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank='> name:rank) op: assign_op.Equal rhs: {(DQ <Jack>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) (CaseArm left: <12> pattern: (pat.Words words:[{<12>}]) middle: <Id.Right_CasePat _> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'rank='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank='> name:rank) op: assign_op.Equal rhs: {(DQ <Queen>)} ) ] redirects: [] ) ] right: <Id.Op_DSemi _> ) ] arms_end: <Id.KW_Esac esac> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'cardname='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cardname='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cardname='> name:cardname) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName rank) <' of '> ($ Id.VSub_DollarName suit))} ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <dealCards> name: dealCards body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'card1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card1='> name:card1) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name newdeck> var_name: newdeck bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 1>}) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'card2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card2='> name:card2) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name newdeck> var_name: newdeck bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 2>}) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'card3='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card3='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card3='> name:card3) op: assign_op.Equal rhs: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name newdeck> var_name: newdeck bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 3>}) right: <Id.Right_DollarBrace '}'> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'rank1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank1='> name:rank1) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Percent left: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name newdeck> var_name: newdeck bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 1>}) right: <Id.Right_DollarBrace '}'> ) } right: {<Id.Lit_Digits 13>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'rank2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank2='> name:rank2) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Percent left: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name newdeck> var_name: newdeck bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 2>}) right: <Id.Right_DollarBrace '}'> ) } right: {<Id.Lit_Digits 13>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'rank3='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank3='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank3='> name:rank3) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Percent left: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name newdeck> var_name: newdeck bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 3>}) right: <Id.Right_DollarBrace '}'> ) } right: {<Id.Lit_Digits 13>} ) 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_DollarName rank1)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'rank1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank1='> name:rank1) op: assign_op.Equal rhs: {<13>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) ] spids: [762 776] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> 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_DollarName rank2)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'rank2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank2='> name:rank2) op: assign_op.Equal rhs: {<13>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) ] spids: [787 801] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> 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_DollarName rank3)} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'rank3='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank3='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank3='> name:rank3) op: assign_op.Equal rhs: {<13>} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) ] spids: [812 826] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> 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_DollarName rank1)} {<-gt>} {($ Id.VSub_DollarName rank2)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'temp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'temp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'temp='> name:temp) op: assign_op.Equal rhs: {($ Id.VSub_DollarName card1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'card1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card1='> name:card1) op: assign_op.Equal rhs: {($ Id.VSub_DollarName card2)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'card2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'card2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'card2='> name:card2) op: assign_op.Equal rhs: {($ Id.VSub_DollarName temp)} ) ] redirects: [] ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'temp='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'temp='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'temp='> name:temp) op: assign_op.Equal rhs: {($ Id.VSub_DollarName rank1)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'rank1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank1='> name:rank1) op: assign_op.Equal rhs: {($ Id.VSub_DollarName rank2)} ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'rank2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'rank2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rank2='> name:rank2) op: assign_op.Equal rhs: {($ Id.VSub_DollarName temp)} ) ] redirects: [] ) ] spids: [843 857] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <showCard> more_env: [] words: [{<showCard>} {($ Id.VSub_DollarName card1)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'cardname1='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cardname1='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cardname1='> name:cardname1) op: assign_op.Equal rhs: {($ Id.VSub_DollarName cardname)} ) ] redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <showCard> more_env: [] words: [{<showCard>} {($ Id.VSub_DollarName card2)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'cardname2='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cardname2='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cardname2='> name:cardname2) op: assign_op.Equal rhs: {($ Id.VSub_DollarName cardname)} ) ] redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <showCard> more_env: [] words: [{<showCard>} {($ Id.VSub_DollarName card3)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.ShAssignment left: <Id.Lit_VarLike 'cardname3='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'cardname3='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cardname3='> name:cardname3) op: assign_op.Equal rhs: {($ Id.VSub_DollarName cardname)} ) ] redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'I\'ve dealt:'>)}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' '> ($ Id.VSub_DollarName cardname1))}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' '> ($ Id.VSub_DollarName cardname2))}] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <introblurb> name: introblurb body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'\n'> < 'Welcome to Acey Deucey. The goal of this game is for you to correctly guess\n' > < 'whether the third card is going to be between the two cards I\'ll pull from\n' > < 'the deck. For example, if I flip up a 5 of hearts and a jack of diamonds, you\'d bet on whether the next card will have a higher rank than a 5 AND a lower rank than a jack (e.g., a 6, 7, 8, 9, or 10 of any suit).\n' > <'\n'> <'Ready? Let\'s go!\n'> <'\n'> ] ) ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'games='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'games='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'games='> name:games) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'won='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'won='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'won='> name:won) op: assign_op.Equal rhs: {<0>} ) ] 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_Pound '#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <introblurb> more_env: [] words: [{<introblurb>}] redirects: [] do_fork: T ) ] spids: [989 1003] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [{<Id.Lit_LBracket '['>} {<'/bin/true'>} {<Id.Lit_RBracket ']'>}] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <initializeDeck> more_env: [] words: [{<initializeDeck>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <shuffleDeck> more_env: [] words: [{<shuffleDeck>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <dealCards> more_env: [] words: [{<dealCards>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'splitValue='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'splitValue='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'splitValue='> name:splitValue) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: {($ Id.VSub_DollarName rank2)} right: {($ Id.VSub_DollarName rank1)} ) 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_DollarName splitValue)} {<-eq>} {<0>} {<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 <'No point in betting when they\'re the same rank!'>)}] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Continue continue> ) ] spids: [1057 1071] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <'/bin/echo'> more_env: [] words: [ {<'/bin/echo'>} {<-n>} { (DQ <'The spread is '> ($ Id.VSub_DollarName splitValue) <'. Do you think the next card will '> ) } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <'/bin/echo'> more_env: [] words: [{<'/bin/echo'>} {<-n>} {(DQ <'be between them? (y/n/q) '>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<answer>}] redirects: [] do_fork: T ) (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 '['>} {(DQ ($ Id.VSub_DollarName answer))} {<Id.Lit_Equals '='>} {(DQ <q>)} {<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 )}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'You played '> ($ Id.VSub_DollarName games) <' games and won '> ($ Id.VSub_DollarName won) <' times.'> ) } ] redirects: [] do_fork: T ) (command.ControlFlow keyword: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] spids: [1114 1132] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'I picked: '> ($ Id.VSub_DollarName cardname3))}] redirects: [] do_fork: T ) (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_DollarName rank3)} {<-gt>} {($ Id.VSub_DollarName rank1)} {<-a>} {($ Id.VSub_DollarName rank3)} {<-lt>} {($ Id.VSub_DollarName rank2)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'winner='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'winner='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'winner='> name:winner) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) ] spids: [1176 1198] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.ShAssignment left: <Id.Lit_VarLike 'winner='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'winner='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'winner='> name:winner) op: assign_op.Equal rhs: {<0>} ) ] redirects: [] ) ] fi_kw: <Id.KW_Fi fi> 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_DollarName winner)} {<-eq>} {<1>} {<-a>} {(DQ ($ Id.VSub_DollarName answer))} {<Id.Lit_Equals '='>} {(DQ <y>)} {<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 <'You bet that it would be between the two, and it is. WIN!'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'won='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'won='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'won='> name:won) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName won)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] spids: [1220 1246] ) (IfArm keyword: <Id.KW_Elif elif> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName winner)} {<-eq>} {<0>} {<-a>} {(DQ ($ Id.VSub_DollarName answer))} {<Id.Lit_Equals '='>} {(DQ <n>)} {<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 <'You bet that it would not be between the two, and it isn\'t. WIN!'>)} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'won='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'won='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'won='> name:won) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName won)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] spids: [1269 1295] ) ] else_kw: <Id.KW_Else else> else_action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Bad betting strategy. You lose.'>)}] redirects: [] do_fork: T ) ] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'games='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'games='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'games='> name:games) op: assign_op.Equal rhs: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Plus left: {($ Id.VSub_DollarName games)} right: {<Id.Lit_Digits 1>} ) right: <Id.Right_DollarDParen _> ) } ) ] redirects: [] ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] )