package Ġcom . t inder Ċ Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġcom . t inder . Graph . State Ċ import Ġcom . t inder . Graph . State .* Ċ import Ġcom . t inder . Graph . Event Ċ import Ġcom . t inder . Graph . Side Effect Ċ import Ġcom . t inder . Graph . Event .* Ċ import Ġcom . t inder . Graph . Side Effect .* ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĊĠ Ġval Ġm oshi Ġ= ĠM oshi . Builder () ĊĠĠĠĠĠ Ġ. add ( Kotlin Json Adapter Factory ()) ĊĠĠĠĠĠ Ġ. build () ĊĊĠ Ġval Ġstate Machine Ġ= ĠState Machine . create < State , ĠEvent , ĠSide Effect > Ġ{ ĊĠĠĠ ĠinitialState ( Registration Value Prop ) ĊĠĠĠ Ġstate < Registration Value Prop > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( W avy Loader , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Failure ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Back ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Failure ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < W avy Loader > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Confirm Mail ing , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Confirm Mail ing > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Customer Agreement , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Action ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( In Address Flow , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Back ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Failure ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < In Address Flow > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Customer Agreement , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Confirm Mail ing , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Confirm Data > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Customer Agreement , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Back ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Confirm Mail ing , ĠGo Back ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Customer Agreement > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Customer Agreement Lim bo , ĠIn Lim bo ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Customer Agreement Denied , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Back ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Confirm Data , ĠGo Back ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Customer Agreement Lim bo > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Debit Success , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( In ID V Flow , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Customer Agreement Denied > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Customer Agreement , ĠGo Back ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Failure ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < In ID V Flow > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Debit Success , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Failure ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Debit Success > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Pin Selection Lim bo , ĠIn Lim bo ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Back ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Failure ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Pin Selection Lim bo > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( In Pin Set Flow , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Virtual Card , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < In Pin Set Flow > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Virtual Card , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Skip ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Pin Skip Completion Success , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Virtual Card > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Completion Success , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġon ( On Back ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransition To ( Debit Success , ĠShow State ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Completion Success > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Success ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġstate < Pin Skip Completion Success > Ġ{ ĊĠĠĠĠĠ Ġon ( On Next ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdont Transition ( Finish Success ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġon Transition Ġ{ ĊĠĠĠĠĠ Ġval Ġvalid Transition Ġ= Ġit Ġas ? ĠState Machine . Transition . Valid ĊĠĠĠĠĠ Ġvalid Transition ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it . side Effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠShow State Ġ-> Ġprintln (" push Fragment (${ it . to State }) ") ĊĠĠĠĠĠĠĠĠĠ ĠGo Back Ġ-> Ġprintln (" on Back Pressed ( to Ġ-> Ġ${ it . to State }) ") ĊĠĠĠĠĠĠĠĠĠ ĠIn Lim bo Ġ-> Ġprintln (" in ĠLim bo State (${ it . to State }) ") ĊĠĠĠĠĠĠĠĠĠ ĠFinish Failure Ġ-> Ġprintln (" finish Flow With Failure )") ĊĠĠĠĠĠĠĠĠĠ ĠFinish Success Ġ-> Ġprintln (" finish Flow With Success )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprintln ( state Machine . dot Diagram < State , ĠEvent >()) ĊĊĠ Ġval Ġmodel Ġ= Ġstate Machine . to Model < State , ĠEvent >() ĊĠ Ġval Ġjson Ġ= Ġm oshi . adapter ( StateMachine Model :: class . java ). toJson ( model ) ĊĊĠ Ġprintln ( json ) ĊĊĠ Ġval Ġstate Machine Model : ĠState Machine Model ? Ġ= Ġm oshi ĊĠĠĠĠĠ Ġ. adapter ( StateMachine Model :: class . java ) ĊĠĠĠĠĠ Ġ. fromJson ( json ) ĊĊĠ Ġprintln ( state Machine Model ) ĊĊĠ Ġval Ġmy StateMachine Ġ= Ġstate Machine Model ?. to StateMachine < State , ĠEvent , ĠSide Effect >() ĊĊĠ Ġprintln ( my StateMachine ?. dot Diagram < State , ĠEvent >()) Ċ }