x
801
1553
{ parameter (or (or (or (or (unit %accept_admin) (pair %balance_of (list %requests (pair (address %owner) (nat %token_id))) (contract %callback (list (pair (pair %request (address %owner) (nat %token_id)) (nat %balance)))))) (or (list %burn (pair (address %from_) (pair (nat %token_id) (nat %amount)))) (pair %collect (nat %amount) (nat %collect_id)))) (or (or (pair %create_listing (nat %token_id) (pair (timestamp %start_time) (pair (option %end_time timestamp) (pair (mutez %token_price) (pair (nat %max_editions_per_wallet) (pair (list %sale_split (pair (address %address) (nat %royalties))) (option %special_split (list (pair (address %address) (mutez %amount)))))))))) (list %create_tokens (pair (map %metadata string bytes) (list %royalties (pair (address %address) (nat %royalties)))))) (or (nat %delete_oe_listing) (list %mint (pair (nat %token_id) (list %recipients (pair (address %address) (nat %amount)))))))) (or (or (or (address %propose_admin) (bool %set_collect_oe_pause)) (or (map %set_metadata string bytes) (list %transfer (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))))) (or (or (map %update_helper address bool) (list %update_info_maps (pair (address %address) (pair (list %token_ids nat) (pair (bool %delete) (bool %is_temp)))))) (or (list %update_operators (or (pair %add_operator (address %owner) (pair (address %operator) (nat %token_id))) (pair %remove_operator (address %owner) (pair (address %operator) (nat %token_id))))) (or (pair %update_token_metadata (nat %token_id) (map %new_metadata string bytes)) (pair %withdraw_mutez (address %address) (mutez %amount))))))) ; storage (pair (pair (pair (big_map %additional_infos (pair address nat) unit) (pair (address %admin) (bool %collect_oe_paused))) (pair (pair (big_map %helper address unit) (nat %last_token_id)) (pair (big_map %ledger (pair address nat) nat) (big_map %metadata string bytes)))) (pair (pair (big_map %oe_infos nat (pair (pair (pair (address %creator) (option %end_time timestamp)) (pair (nat %max_editions_per_wallet) (list %sale_split (pair (address %address) (nat %royalties))))) (pair (pair (option %special_split (list (pair (address %address) (mutez %amount)))) (timestamp %start_time)) (pair (nat %token_id) (mutez %token_price))))) (pair (big_map %operators (pair (address %owner) (pair (address %operator) (nat %token_id))) unit) (option %proposed_admin address))) (pair (pair (big_map %supply nat nat) (big_map %temp_infos (pair address nat) unit)) (pair (big_map %token_metadata nat (pair (nat %token_id) (map %token_info string bytes))) (big_map %token_royalties nat (list (pair (address %address) (nat %royalties)))))))) ; code { UNPAIR ; IF_LEFT { IF_LEFT { IF_LEFT { IF_LEFT { DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP ; GET 3 ; GET 4 ; IF_NONE { PUSH string "NO_ADMIN_PROPOSED" ; FAILWITH } { DROP } ; DUP ; GET 3 ; GET 4 ; IF_NONE { PUSH int 523 ; FAILWITH } {} ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_PROPOSED_ADMIN" ; FAILWITH } ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; CDR ; SENDER ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; CAR ; NONE address ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; NIL operation ; DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; PAIR ; EMIT %admin_accepted (pair (address %new_admin) (address %old_admin)) ; CONS } { NIL operation ; DUP ; DUP 3 ; CDR ; PUSH mutez 0 ; DUP 5 ; CAR ; MAP { DUP 7 ; GET 7 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 7 ; CAR ; GET 5 ; DUP 2 ; CDR ; DUP 3 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SWAP ; PAIR } ; DIG 4 ; DROP ; DIG 4 ; DROP ; TRANSFER_TOKENS ; CONS } } { IF_LEFT { DUP ; ITER { DUP 3 ; GET 7 ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP ; CAR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 3 ; GET 3 ; GET 3 ; DUP 2 ; GET 3 ; SENDER ; DUP 4 ; CAR ; PAIR 3 ; MEM } ; IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ; DUP 3 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP 6 ; GET 4 ; DIG 8 ; CAR ; GET 5 ; DUP 8 ; GET 3 ; DUP 9 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; SOME ; DUP 7 ; GET 3 ; DUP 8 ; CAR ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 ; DUP ; GET 4 ; DUP 4 ; GET 5 ; CAR ; DUP 3 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; PUSH (option nat) (Some 0) ; DIG 6 ; GET 3 ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP } { DIG 3 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DIG 5 ; SOME ; DIG 6 ; GET 3 ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP } } ; DROP ; NIL operation } { DUP 2 ; CAR ; CAR ; GET 4 ; IF { PUSH string "COLLECT_OE_PAUSED" ; FAILWITH } {} ; PUSH nat 0 ; DUP 2 ; CAR ; COMPARE ; GT ; IF {} { PUSH string "ZERO_AMOUNT_NOT_ALLOWED" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; DUP 2 ; CDR ; SENDER ; PAIR ; MEM ; IF { PUSH string "NOT_ALLOWED" ; FAILWITH } {} ; DUP 2 ; GET 3 ; CAR ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "COLLECT_ID_UNDEFINED" ; FAILWITH } ; DUP 2 ; GET 3 ; CAR ; DUP 2 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 3 ; CDR ; NOW ; COMPARE ; GE ; IF {} { PUSH string "SALE_NOT_STARTED" ; FAILWITH } ; DUP 2 ; GET 3 ; CAR ; DUP 2 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; CAR ; CAR ; CDR ; IF_NONE {} { DROP ; DUP 2 ; GET 3 ; CAR ; DUP 2 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; CAR ; CAR ; CDR ; IF_NONE { PUSH int 225 ; FAILWITH } {} ; NOW ; COMPARE ; LE ; IF {} { PUSH string "SALE_ENDED" ; FAILWITH } } ; PUSH mutez 0 ; DUP 3 ; GET 3 ; CAR ; DUP 3 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE {} { DROP ; DUP 3 ; GET 3 ; CAR ; DUP 3 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE { PUSH int 231 ; FAILWITH } {} ; ITER { CDR ; DUP 3 ; CAR ; MUL ; ADD } } ; DUP ; DUP 4 ; GET 3 ; CAR ; DUP 4 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 6 ; DUP 4 ; CAR ; MUL ; ADD ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "INCORRECT_AMOUNT_SENT" ; FAILWITH } ; PUSH mutez 0 ; DUP 2 ; DUP 5 ; GET 3 ; CAR ; DUP 5 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 6 ; DUP 5 ; CAR ; MUL ; ADD ; COMPARE ; GT ; IF { DUP 3 ; GET 3 ; CAR ; DUP 3 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE { NIL operation } { DROP ; NIL operation ; DUP 4 ; GET 3 ; CAR ; DUP 4 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE { PUSH int 231 ; FAILWITH } {} ; ITER { SWAP ; DUP 2 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; DIG 2 ; CDR ; DUP 5 ; CAR ; MUL ; UNIT ; TRANSFER_TOKENS ; CONS } } ; PUSH mutez 0 ; DUP 5 ; GET 3 ; CAR ; DUP 5 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 6 ; COMPARE ; GT ; IF { DUP 4 ; GET 3 ; CAR ; DUP 4 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; CAR ; GET 4 ; ITER { SWAP ; DUP 2 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 256 ; FAILWITH } {} ; PUSH nat 10000 ; DIG 3 ; CDR ; DUP 7 ; GET 3 ; CAR ; DUP 7 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 6 ; DUP 7 ; CAR ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; CAR ; UNIT ; TRANSFER_TOKENS ; CONS } ; SWAP ; DROP } { SWAP ; DROP } } { DROP ; NIL operation } ; PUSH nat 0 ; DUP 4 ; GET 3 ; CAR ; DUP 4 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; CAR ; GET 3 ; COMPARE ; NEQ ; IF { DUP 3 ; GET 3 ; CAR ; DUP 3 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; CAR ; GET 3 ; DUP 3 ; CAR ; DUP 5 ; CAR ; GET 5 ; DUP 6 ; GET 3 ; CAR ; DUP 6 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 5 ; SENDER ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; COMPARE ; LE ; IF {} { PUSH string "MAX_EDITIONS_EXCEEDED" ; FAILWITH } } {} ; DUP 3 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP 7 ; CAR ; DUP 9 ; CAR ; GET 5 ; DUP 10 ; GET 3 ; CAR ; DUP 10 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 5 ; SENDER ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DIG 8 ; GET 3 ; CAR ; DUP 9 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 5 ; SENDER ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 ; DUP 3 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DUP ; DIG 8 ; GET 3 ; CAR ; DUP 9 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 5 ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 267 ; FAILWITH } {} ; DUP 9 ; CAR ; ADD ; SOME ; SWAP ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUG 2 ; AMOUNT ; DUP 4 ; GET 3 ; CAR ; DUP 4 ; CDR ; GET ; IF_NONE { PUSH int 218 ; FAILWITH } {} ; GET 5 ; PAIR ; SENDER ; DIG 3 ; CAR ; PAIR ; PAIR ; EMIT %collect (pair (pair (nat %amount) (address %collector)) (pair (nat %token_id) (mutez %total_paid))) ; CONS } } } { IF_LEFT { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; DUP 2 ; GET 3 ; CAR ; DUP 2 ; CAR ; MEM ; IF { PUSH string "LISTING_EXISTS" ; FAILWITH } {} ; PUSH nat 0 ; EMPTY_SET address ; PUSH nat 30 ; DUP 4 ; GET 11 ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_SALE_SPLITS" ; FAILWITH } ; DUP 3 ; GET 11 ; ITER { DUP 2 ; DUP 2 ; CAR ; MEM ; IF { PUSH string "DUPLICATE_SPLIT_ADDRESS" ; FAILWITH } {} ; SWAP ; PUSH bool True ; DUP 3 ; CAR ; UPDATE ; SWAP ; DIG 2 ; SWAP ; CDR ; ADD ; SWAP } ; PUSH nat 10000 ; DUP 3 ; COMPARE ; EQ ; IF {} { PUSH string "SALE_SPLIT_NOT_100" ; FAILWITH } ; DUP 3 ; GET 12 ; IF_NONE { DROP 2 } { DROP ; SWAP ; DROP ; PUSH nat 10 ; DUP 3 ; GET 12 ; IF_NONE { PUSH int 171 ; FAILWITH } {} ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_SPECIAL_SPLITS" ; FAILWITH } ; DUP 2 ; GET 12 ; IF_NONE { PUSH int 171 ; FAILWITH } {} ; ITER { DUP 2 ; DUP 2 ; CAR ; MEM ; IF { PUSH string "DUPLICATE_SPLIT_ADDRESS" ; FAILWITH } {} ; SWAP ; PUSH bool True ; DUP 3 ; CAR ; UPDATE ; SWAP ; CDR ; PUSH mutez 0 ; COMPARE ; LT ; IF {} { PUSH string "SOME_SPECIAL_SPLIT_IS_ZERO" ; FAILWITH } } ; DROP } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DUP 5 ; GET 7 ; DUP 6 ; CAR ; PAIR ; DUP 6 ; GET 3 ; DUP 7 ; GET 12 ; PAIR ; PAIR ; DUP 6 ; GET 11 ; DUP 7 ; GET 9 ; PAIR ; DUP 7 ; GET 5 ; SENDER ; PAIR ; PAIR ; PAIR ; SOME ; DUP 6 ; CAR ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; NIL operation ; SWAP ; SENDER ; PAIR ; EMIT %create_listing (pair (address %creator) (pair %listing (nat %token_id) (pair (timestamp %start_time) (pair (option %end_time timestamp) (pair (mutez %token_price) (pair (nat %max_editions_per_wallet) (pair (list %sale_split (pair (address %address) (nat %royalties))) (option %special_split (list (pair (address %address) (mutez %amount))))))))))) ; CONS } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; PUSH nat 20 ; DUP 2 ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_TOKENS_IN_BATCH" ; FAILWITH } ; DUP ; ITER { PUSH nat 40 ; DUP 2 ; CDR ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_ROYALTY_RECIPIENTS" ; FAILWITH } ; PUSH nat 0 ; EMPTY_SET address ; DUP 3 ; CDR ; ITER { DUP 2 ; DUP 2 ; CAR ; MEM ; IF { PUSH string "DUPLICATE_SPLIT_ADDRESS" ; FAILWITH } {} ; SWAP ; PUSH bool True ; DUP 3 ; CAR ; UPDATE ; SWAP ; DIG 2 ; SWAP ; CDR ; ADD ; SWAP } ; DROP ; PUSH nat 10000 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "ROYALTIES_EXCEED_MAX_PERCENTAGE" ; FAILWITH } ; DUP 3 ; CAR ; GET 3 ; CDR ; DIG 3 ; DUP ; GET 7 ; DUP 4 ; CAR ; DUP 4 ; PAIR ; SOME ; DUP 4 ; UPDATE ; UPDATE 7 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; PUSH (option nat) (Some 0) ; DUP 7 ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUP ; GET 8 ; DIG 3 ; CDR ; SOME ; DIG 3 ; UPDATE ; UPDATE 8 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; PUSH nat 1 ; ADD ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } ; DROP ; NIL operation } } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; DUP 2 ; GET 3 ; CAR ; DUP 2 ; MEM ; IF {} { PUSH string "OE_LISTING_NOT_FOUND" ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; NONE (pair (pair (pair address (option timestamp)) (pair nat (list (pair address nat)))) (pair (pair (option (list (pair address mutez))) timestamp) (pair nat mutez))) ; DIG 5 ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; NIL operation } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; NIL operation ; DUP 2 ; ITER { DUP 4 ; GET 5 ; CAR ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 4 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 4 ; CAR ; GET 3 ; CAR ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DUP ; CDR ; ITER { DUP 5 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP 6 ; CDR ; DIG 10 ; CAR ; GET 5 ; DUP 9 ; CAR ; DUP 9 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DUP 8 ; CAR ; DUP 8 ; CAR ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 4 ; DUP 5 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; DUP 6 ; CDR ; DIG 10 ; GET 5 ; CAR ; DUP 9 ; CAR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DUP 8 ; CAR ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUG 4 ; DIG 2 ; DUP 3 ; CAR ; DUP 3 ; CAR ; PAIR ; SENDER ; DIG 3 ; CDR ; PAIR ; PAIR ; EMIT %mint (pair (pair (nat %amount) (address %minter)) (pair (address %recipient) (nat %token_id))) ; CONS ; SWAP } ; DROP } ; SWAP ; DROP } } } } { IF_LEFT { IF_LEFT { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; CAR ; DUP 5 ; SOME ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; NIL operation ; SWAP ; DUP 3 ; CAR ; CAR ; GET 3 ; PAIR ; EMIT %admin_proposed (pair (address %current_admin) (address %proposed_admin)) ; CONS } { DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; CAR ; DIG 4 ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; NIL operation } } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; DUP ; ITER { DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP 6 ; CDR ; SOME ; DIG 6 ; CAR ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } ; DROP ; NIL operation ; SENDER ; EMIT %metadata_updated address ; CONS } { DUP ; ITER { DUP ; CDR ; ITER { DUP 4 ; CAR ; CAR ; CAR ; DUP 2 ; GET 3 ; DUP 3 ; CAR ; PAIR ; MEM ; IF { PUSH string "RESTRICTED_OPERATOR" ; FAILWITH } {} ; DUP 4 ; GET 5 ; CDR ; DUP 2 ; GET 3 ; DUP 3 ; CAR ; PAIR ; MEM ; IF { DUP 4 ; GET 3 ; CAR ; DUP 2 ; GET 3 ; GET ; IF_NONE { PUSH int 445 ; FAILWITH } {} ; CAR ; CAR ; CDR ; IF_NONE {} { DROP ; DUP 4 ; GET 3 ; CAR ; DUP 2 ; GET 3 ; GET ; IF_NONE { PUSH int 445 ; FAILWITH } {} ; CAR ; CAR ; CDR ; IF_NONE { PUSH int 447 ; FAILWITH } {} ; NOW ; COMPARE ; GE ; IF {} { PUSH string "SALE_ONGOING" ; FAILWITH } } } {} ; DUP 4 ; GET 7 ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 2 ; CAR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 4 ; GET 3 ; GET 3 ; DUP 2 ; GET 3 ; SENDER ; DUP 5 ; CAR ; PAIR 3 ; MEM } ; IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ; PUSH nat 0 ; DUP 2 ; GET 4 ; COMPARE ; GT ; IF { DUP 4 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP 6 ; GET 4 ; DIG 9 ; CAR ; GET 5 ; DUP 8 ; GET 3 ; DUP 10 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; SOME ; DUP 7 ; GET 3 ; DUP 9 ; CAR ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 3 ; DUP 4 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; DUP 6 ; GET 4 ; DIG 9 ; CAR ; GET 5 ; DUP 8 ; GET 3 ; DUP 9 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DUP 7 ; GET 3 ; DIG 7 ; CAR ; PAIR ; UPDATE ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 } { DROP } } ; DROP } ; DROP ; NIL operation } } } { IF_LEFT { IF_LEFT { DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; DUP ; ITER { DUP ; CDR ; IF { DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; PUSH (option unit) (Some Unit) ; DIG 6 ; CAR ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } { DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; NONE unit ; DIG 6 ; CAR ; UPDATE ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } } ; DROP } { DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; DUP ; ITER { DUP ; GET 3 ; ITER { DUP 2 ; GET 6 ; IF { DUP 2 ; GET 5 ; IF { DIG 3 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; NONE unit ; DIG 6 ; DUP 8 ; CAR ; PAIR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUG 2 } { DIG 3 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; PUSH (option unit) (Some Unit) ; DIG 6 ; DUP 8 ; CAR ; PAIR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUG 2 } } { DUP 2 ; GET 5 ; IF { DIG 3 ; UNPAIR ; UNPAIR ; UNPAIR ; NONE unit ; DIG 5 ; DUP 7 ; CAR ; PAIR ; UPDATE ; PAIR ; PAIR ; PAIR ; DUG 2 } { DIG 3 ; UNPAIR ; UNPAIR ; UNPAIR ; PUSH (option unit) (Some Unit) ; DIG 5 ; DUP 7 ; CAR ; PAIR ; UPDATE ; PAIR ; PAIR ; PAIR ; DUG 2 } } } ; DROP } ; DROP } ; NIL operation } { IF_LEFT { DUP ; ITER { DUP ; IF_LEFT { DUP 4 ; CAR ; CAR ; CAR ; DUP 2 ; GET 4 ; DUP 3 ; GET 3 ; PAIR ; MEM ; IF { PUSH string "RESTRICTED_OPERATOR" ; FAILWITH } {} ; DUP 4 ; GET 5 ; CDR ; DUP 2 ; GET 4 ; DUP 3 ; GET 3 ; PAIR ; MEM ; IF { DUP 4 ; GET 3 ; CAR ; DUP 2 ; GET 4 ; GET ; IF_NONE { PUSH int 424 ; FAILWITH } {} ; CAR ; CAR ; CDR ; IF_NONE { SWAP ; DROP } { DROP ; SWAP ; DROP ; DUP 3 ; GET 3 ; CAR ; DUP 2 ; GET 4 ; GET ; IF_NONE { PUSH int 424 ; FAILWITH } {} ; CAR ; CAR ; CDR ; IF_NONE { PUSH int 426 ; FAILWITH } {} ; NOW ; COMPARE ; GE ; IF {} { PUSH string "SALE_ONGOING" ; FAILWITH } } } { SWAP ; DROP } ; SENDER ; DUP 2 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; PUSH (option unit) (Some Unit) ; DIG 6 ; UPDATE ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP } { SWAP ; DROP ; SENDER ; DUP 2 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; NONE unit ; DIG 6 ; UPDATE ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP } } ; DROP ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 2 ; CAR ; GET 3 ; CAR ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DUP 2 ; GET 5 ; CAR ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; SWAP ; DUP ; GET 7 ; DUP ; DUP 4 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 311 ; FAILWITH } {} ; DIG 4 ; CDR ; UPDATE 2 ; SOME ; SWAP ; UPDATE ; UPDATE 7 ; NIL operation } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; GET 3 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ALLOWED" ; FAILWITH } ; NIL operation ; DUP 2 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 480 ; FAILWITH } {} ; DIG 2 ; CDR ; UNIT ; TRANSFER_TOKENS ; CONS } } } } } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR } ; view "get_balance_of" (list (pair (address %owner) (nat %token_id))) (list (pair (pair %request (address %owner) (nat %token_id)) (nat %balance))) { UNPAIR ; DUP ; MAP { DUP 3 ; GET 7 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 3 ; CAR ; GET 5 ; DUP 2 ; CDR ; DUP 3 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SWAP ; PAIR } ; SWAP ; DROP ; SWAP ; DROP } ; view "token_royalties" nat (list (pair (address %address) (nat %royalties))) { UNPAIR ; SWAP ; GET 8 ; SWAP ; GET ; IF_NONE { PUSH int 569 ; FAILWITH } {} } }