"parameter (or\n            (or %fund\n              (pair :initiate %initiate (address %participant)\n                                        (pair %settings\n                                          (pair (bytes %hashed_secret) (timestamp %refund_time))\n                                          (mutez %payoff)))\n              (bytes :hashed_secret %add))\n            (or %withdraw (bytes :secret %redeem) (bytes :hashed_secret %refund)));\nstorage (pair\n          (big_map bytes\n                   (pair (pair %recipients (address %initiator) (address %participant))\n                         (pair %settings (pair (mutez %amount) (timestamp %refund_time))\n                                         (mutez %payoff))))\n          unit);\ncode { NIL @operations operation ;\n       SWAP ;\n       { { DUP ; CAR @% ; DIP { CDR } } ; DIP { { DUP ; CAR @% ; DIP { CDR @% } } } } ;\n       DIP { DUP } ;\n       IF_LEFT\n         { IF_LEFT\n             { { { DUP ; CAR @% ; DIP { CDR @% } } } ;\n               DUP ;\n               CONTRACT @participant unit ;\n               { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n               DROP ;\n               SWAP ;\n               { { DUP ; CAR ; DIP { CDR @% } } ; { DUP ; CAR @% ; DIP { CDR @% } } } ;\n               DUP ;\n               SIZE ;\n               PUSH nat 32 ;\n               { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ;\n               DIP { DIP { DUP } ;\n                     SWAP ;\n                     AMOUNT @amount ;\n                     SUB ;\n                     SENDER ;\n                     DUP ;\n                     CONTRACT @initiator unit ;\n                     { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n                     DROP ;\n                     DIP { { PAIR ; PAIR } ; SWAP } ;\n                     { PAIR ; PAIR } ;\n                     SOME @xcat ;\n                     SWAP } ;\n               DUP ;\n               DIP { MEM ; NOT ; { IF {} { { UNIT ; FAILWITH } } } } }\n             { DUP ;\n               DIP { GET ;\n                     { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n                     { { DUP ; CAR @% ; DIP { CDR @% } } } ;\n                     DIP { { { DUP ; CAR ; DIP { CDR @% } } ; { DUP ; CAR @% ; DIP { CDR @% } } } ;\n                           SWAP ;\n                           DUP ;\n                           NOW ;\n                           { { COMPARE ; LT } ; IF {} { { UNIT ; FAILWITH } } } ;\n                           SWAP ;\n                           AMOUNT @amount ;\n                           ADD } ;\n                     { DIP { PAIR } ; DIP { PAIR } ; PAIR } ;\n                     SOME @xcat } } ;\n           UPDATE ;\n           PAIR @new_storage ;\n           SWAP ;\n           PAIR }\n         { IF_LEFT\n             { DUP ;\n               SIZE ;\n               PUSH nat 32 ;\n               { { COMPARE ; EQ } ; IF {} { { UNIT ; FAILWITH } } } ;\n               SHA256 ;\n               SHA256 @hash ;\n               DUP ;\n               DIP { SWAP } ;\n               { DIP { DIP { GET ;\n                             { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n                             DUP ;\n                             { { DUP ; CAR @% ; DIP { CDR @% } } } ;\n                             CDR @% ;\n                             CONTRACT @participant unit ;\n                             { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n                             SWAP ;\n                             { CAR ; CAR @% } ;\n                             { DIP { DIP { SENDER ;\n                                           CONTRACT @sender unit ;\n                                           { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n                                           SWAP ;\n                                           CDR @% ;\n                                           { { DUP ; CAR ; DIP { CDR @% } } ;\n                                             { DUP ; CAR @% ; DIP { CDR @% } } } ;\n                                           DROP ;\n                                           NOW ;\n                                           { { COMPARE ; LT } ; IF {} { { UNIT ; FAILWITH } } } ;\n                                           DUP ;\n                                           PUSH mutez 0 ;\n                                           { COMPARE ;\n                                             LT ;\n                                             IF\n                                               { UNIT ; TRANSFER_TOKENS ; DIP { SWAP } ; CONS }\n                                               { DROP ; DROP ; SWAP } } } } } ;\n                             UNIT ;\n                             TRANSFER_TOKENS } } } }\n             { DUP ;\n               DIP { GET ;\n                     { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n                     DUP ;\n                     { CAR ; CAR @% } ;\n                     CONTRACT @initiator unit ;\n                     { IF_NONE { { UNIT ; FAILWITH } } {} } ;\n                     SWAP ;\n                     CDR ;\n                     { { DUP ; CAR ; DIP { CDR @% } } ; { DUP ; CAR @% ; DIP { CDR @% } } } ;\n                     SWAP ;\n                     NOW ;\n                     { { COMPARE ; GE } ; IF {} { { UNIT ; FAILWITH } } } ;\n                     ADD ;\n                     UNIT ;\n                     TRANSFER_TOKENS ;\n                     SWAP ;\n                     { DIP { DIP { SWAP } } } } } ;\n           NONE @none (pair (pair address address) (pair (pair mutez timestamp) mutez)) ;\n           SWAP ;\n           UPDATE @cleared_map ;\n           SWAP ;\n           DIP { SWAP ; DIP { PAIR } } ;\n           CONS ;\n           PAIR } }"