x
560
1319
parameter (or (or (or (or (nat %admin_burn) (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_tokens nat) (or (list %cache_addresses address) (nat %clear_lien_flag)))) (or (or (pair %lock (address %expected_owner) (nat %token_id)) (list %mint_tokens (pair (address %address) (bytes %metadata_hash)))) (or (pair %push_metadata_hash (list %pages bytes) (nat %start_token_id)) (or (pair %push_pages (nat %expected_next_token_id) (list %pages bytes)) (pair %set_hub (option %old address) (option %new address)))))) (or (or (or (pair %set_jurisdiction (list %token_ids nat) (string %jurisdiction)) (pair %set_jurisdiction_admin (string %jurisdiction) (address %admin))) (or (pair %set_jurisdiction_uri (string %jurisdiction) (bytes %uri)) (or (nat %set_lien_flag) (pair %settle (nat %burn_token_id) (pair (string %dest_jurisdiction) (pair (bytes %metadata_hash) (address %mint_target))))))) (or (or (list %transfer (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) (or (pair %transfer_and_rebind (bytes %metadata_hash) (pair (address %new_owner) (nat %token_id))) (nat %unlock))) (or (pair %update_administrators (list %remove address) (list %add address)) (or (pair %update_contract_metadata (list %add (pair (string %key) (bytes %value))) (list %remove string)) (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))))))))));storage (pair (big_map %addr_to_index address nat) (pair (set %admins address) (pair (option %hub address) (pair (big_map %jurisdiction_admins string address) (pair (big_map %jurisdiction_of nat string) (pair (big_map %jurisdiction_uris string bytes) (pair (big_map %lien_flag nat bool) (pair (big_map %locked nat bool) (pair (big_map %metadata string bytes) (pair (bytes %metadata_base_uri) (pair (big_map %metadata_pages nat bytes) (pair (nat %next_addr_index) (pair (nat %next_token_id) (pair (big_map %operators (pair (address %owner) (pair (address %operator) (nat %token_id))) unit) (big_map %pages nat bytes)))))))))))))));code { LAMBDA (pair (pair (lambda (pair address (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) (pair (option nat) (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes))))))))))))))))) (pair address nat)) (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) (pair nat (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) { UNPAIR ; DUP ; GET 4 ; DUP 3 ; GET 25 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; PUSH nat 1024 ; DUP 2 ; EDIV ; IF_NONE { PUSH int 909 ; FAILWITH } { CAR } ; DUP 4 ; GET 28 ; SWAP ; GET ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH nat 1024 ; DIG 2 ; EDIV ; IF_NONE { PUSH int 911 ; FAILWITH } { CDR } ; LAMBDA (pair nat (pair bytes nat)) (option bytes) { DUP ; UNPAIR 3 ; DUP 2 ; SIZE ; DUP 4 ; DUP 3 ; MUL ; DUP 2 ; DUP 2 ; COMPARE ; GE ; IF { DROP 6 ; NONE bytes } { DIG 2 ; DROP ; DIG 4 ; DROP ; PUSH nat 0 ; DUP 5 ; DIG 3 ; EDIV ; IF_NONE { PUSH int 90 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "CORRUPTED_PAGE_SIZE" ; FAILWITH } ; SWAP ; DUG 2 ; SLICE ; IF_NONE { PUSH string "SLICE_OUT_OF_BOUNDS_IN_PAGE" ; FAILWITH } {} ; SOME } } ; PUSH nat 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH bytes 0x00000000 ; DUP 2 ; COMPARE ; NEQ ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; PUSH nat 0 ; DIG 2 ; DUP ; GET 3 ; SWAP ; CAR ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 3 ; IF_NONE { SWAP ; DROP } { LAMBDA bytes bytes { DUP ; SIZE ; PUSH nat 5 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "Value too long, must be 4 bytes or less" ; FAILWITH } ; PUSH nat 4 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP ; INT ; EQ ; IF { DROP 2 ; PUSH bytes 0x00000000 } { PUSH nat 1 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; PUSH bytes 0x000000 ; CONCAT } { PUSH nat 2 ; COMPARE ; EQ ; IF { PUSH bytes 0x0000 ; CONCAT } { PUSH bytes 0x00 ; CONCAT } } } } } ; DUP 2 ; BYTES ; EXEC ; DUP ; DUP 5 ; COMPARE ; EQ ; IF { DIG 2 ; DROP 4 ; PUSH nat 1 } { DROP 2 ; SWAP ; DROP } } ; PAIR } ; SWAP ; LAMBDA (pair address (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) (pair nat (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) { UNPAIR ; DUP 2 ; CAR ; DUP 2 ; MEM ; IF { DUP 2 ; CAR ; SWAP ; GET ; IF_NONE { PUSH int 23 ; FAILWITH } {} } { DUP 2 ; GET 23 ; DIG 2 ; DUP ; CAR ; DUP 3 ; SOME ; DIG 4 ; UPDATE ; UPDATE 1 ; PUSH nat 1 ; DUP 3 ; ADD ; UPDATE 23 ; SWAP } ; PAIR } ; SWAP ; LAMBDA (pair unit (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) (pair bool (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) { CDR ; DUP ; GET 3 ; SENDER ; MEM ; PAIR } ; SWAP ; LAMBDA (pair unit (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) (pair bool (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) { CDR ; PUSH bool False ; DUP 2 ; GET 5 ; IF_NONE {} { SWAP ; DROP ; SENDER ; COMPARE ; EQ } ; PAIR } ; SWAP ; LAMBDA (pair string (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) (pair bool (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) { UNPAIR ; DUP 2 ; GET 7 ; DUP 2 ; MEM ; IF { DUP 2 ; GET 7 ; SWAP ; GET ; IF_NONE { PUSH int 498 ; FAILWITH } {} ; SENDER ; COMPARE ; EQ } { DROP ; DUP ; GET 3 ; SENDER ; MEM } ; PAIR } ; SWAP ; LAMBDA (pair address (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) (pair (option nat) (pair (big_map address nat) (pair (set address) (pair (option address) (pair (big_map string address) (pair (big_map nat string) (pair (big_map string bytes) (pair (big_map nat bool) (pair (big_map nat bool) (pair (big_map string bytes) (pair bytes (pair (big_map nat bytes) (pair nat (pair nat (pair (big_map (pair address (pair address nat)) unit) (big_map nat bytes)))))))))))))))) { UNPAIR ; SWAP ; DUP ; CAR ; DIG 2 ; GET ; PAIR } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { IF_LEFT { IF_LEFT { DUP 2 ; GET 25 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 2 ; GET 15 ; DUP 2 ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "TOKEN_LOCKED" ; FAILWITH } {} ; DUP 2 ; GET 9 ; DUP 2 ; GET ; IF_NONE { PUSH string "" } {} ; DUP 5 ; DUP 2 ; SWAP ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 9 ; DUG 9 ; DUG 9 ; DUG 9 ; DIG 7 ; DIG 9 ; DIG 9 ; DIG 9 ; IF {} { PUSH string "NOT_JURISDICTION_ADMIN" ; FAILWITH } ; PUSH nat 1024 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 874 ; FAILWITH } { CAR } ; DUP 4 ; GET 28 ; DUP 2 ; GET ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH nat 1024 ; DUP 5 ; EDIV ; IF_NONE { PUSH int 876 ; FAILWITH } { CDR } ; DIG 5 ; DUP ; GET 28 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; PUSH bytes 0x00000000 ; DUP 6 ; DUP 6 ; PAIR 3 ; EXEC ; SOME ; DUP 6 ; UPDATE ; UPDATE 28 ; DUG 5 ; PUSH nat 128 ; DUP 6 ; EDIV ; IF_NONE { PUSH int 881 ; FAILWITH } { CAR } ; DUP 7 ; GET 21 ; DUP 2 ; GET ; IF_NONE { PUSH bytes 0x } {} ; PUSH nat 128 ; DUP 8 ; EDIV ; IF_NONE { PUSH int 883 ; FAILWITH } { CDR } ; PUSH nat 32 ; DUP 2 ; MUL ; DUP 3 ; SIZE ; COMPARE ; GT ; IF { DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 4 ; DUP ; GET 21 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; PUSH bytes 0x0000000000000000000000000000000000000000000000000000000000000000 ; DIG 5 ; DIG 5 ; PAIR 3 ; EXEC ; SOME ; DIG 3 ; UPDATE ; UPDATE 21 ; SWAP } { DROP 7 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } ; DUP 2 ; GET 9 ; DUP 2 ; MEM ; IF { SWAP ; DUP ; GET 9 ; NONE string ; DUP 4 ; UPDATE ; UPDATE 9 ; SWAP } {} ; DUP 2 ; GET 13 ; DUP 2 ; MEM ; IF { SWAP ; DUP ; GET 13 ; NONE bool ; DUP 4 ; UPDATE ; UPDATE 13 ; SWAP } {} ; NIL operation ; DUP 2 ; PUSH nat 0 ; PUSH int -1 ; PAIR 3 ; EMIT %total_supply_update (pair (int %diff) (pair (nat %new_total_supply) (nat %token_id))) ; CONS ; SWAP ; PUSH (option string) (Some "offline_completion") ; PAIR ; EMIT %TitleBurned (pair (option %reason string) (nat %token_id)) ; CONS } { NIL (pair (pair address nat) nat) ; DUP 2 ; CAR ; ITER { SWAP ; DUP 10 ; DUP 3 ; CDR ; DUP 4 ; CAR ; DUP 8 ; PAIR 3 ; SWAP ; DIG 5 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 10 ; DUG 10 ; DUG 10 ; DUG 10 ; DUG 10 ; DIG 7 ; DIG 10 ; DIG 10 ; DIG 10 ; DIG 10 ; DIG 2 ; PAIR ; CONS } ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; NIL operation ; DIG 2 ; CDR ; PUSH mutez 0 ; DIG 3 ; NIL (pair (pair address nat) nat) ; SWAP ; ITER { CONS } ; TRANSFER_TOKENS ; CONS } } { IF_LEFT { LAMBDA bytes bytes { DUP ; SIZE ; PUSH nat 5 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "Value too long, must be 4 bytes or less" ; FAILWITH } ; PUSH nat 4 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP ; INT ; EQ ; IF { DROP 2 ; PUSH bytes 0x00000000 } { PUSH nat 1 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; PUSH bytes 0x000000 ; CONCAT } { PUSH nat 2 ; COMPARE ; EQ ; IF { PUSH bytes 0x0000 ; CONCAT } { PUSH bytes 0x00 ; CONCAT } } } } } ; DUP 8 ; SENDER ; SWAP ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 9 ; DUG 9 ; DUG 9 ; DUG 9 ; DIG 7 ; DIG 9 ; DIG 9 ; DIG 9 ; BYTES ; EXEC ; NIL operation ; DUP 3 ; ITER { DUP 5 ; GET 25 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 5 ; GET 15 ; DUP 2 ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "TOKEN_LOCKED" ; FAILWITH } {} ; PUSH nat 1024 ; DUP 2 ; EDIV ; IF_NONE { PUSH int 452 ; FAILWITH } { CAR } ; DUP 6 ; GET 28 ; DUP 2 ; GET ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH nat 1024 ; DUP 4 ; EDIV ; IF_NONE { PUSH int 454 ; FAILWITH } { CDR } ; LAMBDA (pair nat (pair bytes nat)) (option bytes) { DUP ; UNPAIR 3 ; DUP 2 ; SIZE ; DUP 4 ; DUP 3 ; MUL ; DUP 2 ; DUP 2 ; COMPARE ; GE ; IF { DROP 6 ; NONE bytes } { DIG 2 ; DROP ; DIG 4 ; DROP ; PUSH nat 0 ; DUP 5 ; DIG 3 ; EDIV ; IF_NONE { PUSH int 90 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "CORRUPTED_PAGE_SIZE" ; FAILWITH } ; SWAP ; DUG 2 ; SLICE ; IF_NONE { PUSH string "SLICE_OUT_OF_BOUNDS_IN_PAGE" ; FAILWITH } {} ; SOME } } ; PUSH nat 4 ; DUP 4 ; DUP 4 ; PAIR 3 ; EXEC ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH bytes 0x00000000 ; DUP 2 ; COMPARE ; NEQ ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 7 ; DUP 2 ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 13 ; UNIT ; SWAP ; DIG 10 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 7 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 } ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; PUSH bytes 0x00000000 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; DUP 2 ; DUP 6 ; DUP 6 ; PAIR 3 ; EXEC ; DIG 10 ; DUP ; GET 28 ; DUP 3 ; SOME ; DUP 9 ; UPDATE ; UPDATE 28 ; DUG 10 ; DUP 8 ; DUP 8 ; SENDER ; PUSH nat 0 ; PUSH int -1 ; PAIR 4 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; EMIT %balance_update (pair (int %diff) (pair (nat %new_balance) (pair (address %owner) (nat %token_id)))) ; CONS ; SWAP ; PUSH nat 0 ; PUSH int -1 ; PAIR 3 ; EMIT %total_supply_update (pair (int %diff) (pair (nat %new_total_supply) (nat %token_id))) ; CONS } ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; MEM ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP ; ITER { DUP 8 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 7 ; DUG 7 ; DIG 6 ; DIG 7 } ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DUP 2 ; GET 25 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 2 ; GET 9 ; DUP 2 ; GET ; IF_NONE { PUSH string "" } {} ; DIG 3 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "NOT_JURISDICTION_ADMIN" ; FAILWITH } ; DUP 2 ; GET 13 ; DUP 2 ; MEM ; IF { SWAP ; DUP ; GET 13 ; PUSH (option bool) (Some False) ; DIG 3 ; UPDATE ; UPDATE 13 } { DROP } } ; NIL operation } } } { IF_LEFT { IF_LEFT { DIG 3 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 3 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 3 ; DIG 2 ; DIG 3 ; DIG 3 ; IF {} { PUSH string "NOT_HUB" ; FAILWITH } ; DUP 2 ; GET 25 ; DUP 2 ; CDR ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 2 ; GET 15 ; DUP 2 ; CDR ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "ALREADY_LOCKED" ; FAILWITH } {} ; PUSH nat 1024 ; DUP 2 ; CDR ; EDIV ; IF_NONE { PUSH int 614 ; FAILWITH } { CAR } ; DUP 3 ; GET 28 ; SWAP ; GET ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH nat 1024 ; DUP 3 ; CDR ; EDIV ; IF_NONE { PUSH int 616 ; FAILWITH } { CDR } ; LAMBDA (pair nat (pair bytes nat)) (option bytes) { DUP ; UNPAIR 3 ; DUP 2 ; SIZE ; DUP 4 ; DUP 3 ; MUL ; DUP 2 ; DUP 2 ; COMPARE ; GE ; IF { DROP 6 ; NONE bytes } { DIG 2 ; DROP ; DIG 4 ; DROP ; PUSH nat 0 ; DUP 5 ; DIG 3 ; EDIV ; IF_NONE { PUSH int 90 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "CORRUPTED_PAGE_SIZE" ; FAILWITH } ; SWAP ; DUG 2 ; SLICE ; IF_NONE { PUSH string "SLICE_OUT_OF_BOUNDS_IN_PAGE" ; FAILWITH } {} ; SOME } } ; PUSH nat 4 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; DIG 3 ; DUP 3 ; CAR ; SWAP ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 3 ; IF_NONE { PUSH string "OWNER_MISMATCH" ; FAILWITH } {} ; BYTES ; DUP ; SIZE ; PUSH nat 5 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "Value too long, must be 4 bytes or less" ; FAILWITH } ; PUSH nat 4 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP ; INT ; EQ ; IF { DROP 2 ; PUSH bytes 0x00000000 } { PUSH nat 1 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; PUSH bytes 0x000000 ; CONCAT } { PUSH nat 2 ; COMPARE ; EQ ; IF { PUSH bytes 0x0000 ; CONCAT } { PUSH bytes 0x00 ; CONCAT } } } } ; COMPARE ; EQ ; IF {} { PUSH string "OWNER_MISMATCH" ; FAILWITH } ; DUP 2 ; GET 13 ; DUP 2 ; CDR ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "LIEN_ACTIVE" ; FAILWITH } {} ; SWAP ; DUP ; GET 15 ; PUSH (option bool) (Some True) ; DIG 3 ; CDR ; UPDATE ; UPDATE 15 ; NIL operation } { DUP 6 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 8 ; DUG 8 ; DUG 8 ; DIG 7 ; DIG 8 ; DIG 8 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP 2 ; GET 25 ; PUSH nat 1024 ; DUP 2 ; EDIV ; IF_NONE { PUSH int 274 ; FAILWITH } { CAR } ; DUP 4 ; GET 28 ; DUP 2 ; GET ; IF_NONE { PUSH bytes 0x } {} ; PUSH bool True ; NIL operation ; DUP 6 ; ITER { LAMBDA bytes bytes { DUP ; SIZE ; PUSH nat 5 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "Value too long, must be 4 bytes or less" ; FAILWITH } ; PUSH nat 4 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP ; INT ; EQ ; IF { DROP 2 ; PUSH bytes 0x00000000 } { PUSH nat 1 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; PUSH bytes 0x000000 ; CONCAT } { PUSH nat 2 ; COMPARE ; EQ ; IF { PUSH bytes 0x0000 ; CONCAT } { PUSH bytes 0x00 ; CONCAT } } } } } ; DUP 14 ; DUP 3 ; CAR ; SWAP ; DIG 10 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 7 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; BYTES ; EXEC ; PUSH nat 1024 ; DUP 8 ; EDIV ; IF_NONE { PUSH int 282 ; FAILWITH } { CDR } ; DUP ; INT ; EQ ; IF { DUP 5 ; NOT } { PUSH bool False } ; IF { DIG 9 ; DUP ; GET 28 ; DIG 7 ; SOME ; DUP 9 ; UPDATE ; UPDATE 28 ; DUG 8 ; PUSH bytes 0x ; DUG 5 ; DIG 6 ; PUSH nat 1 ; ADD ; DUG 6 } {} ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; PUSH nat 4 ; PUSH nat 1 ; DUP 3 ; ADD ; MUL ; DUP 3 ; SIZE ; DUP 2 ; DUP 2 ; COMPARE ; LT ; LOOP { PUSH bytes 0x00000000 ; DIG 4 ; CONCAT ; DUG 3 ; PUSH nat 4 ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; LT } ; DROP 2 ; DIG 3 ; DROP ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; DUG 3 ; PAIR 3 ; EXEC } ; DUP 3 ; DIG 7 ; DUP 4 ; PAIR 3 ; EXEC ; DUG 5 ; PUSH nat 128 ; DUP 9 ; EDIV ; IF_NONE { PUSH int 290 ; FAILWITH } { CAR } ; PUSH nat 128 ; DUP 10 ; EDIV ; IF_NONE { PUSH int 291 ; FAILWITH } { CDR } ; DUP 12 ; GET 21 ; DUP 3 ; GET ; IF_NONE { PUSH bytes 0x } {} ; DIG 12 ; DUP ; GET 21 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; PUSH nat 32 ; PUSH nat 1 ; DUP 3 ; ADD ; MUL ; DUP 3 ; SIZE ; DUP 2 ; DUP 2 ; COMPARE ; LT ; LOOP { PUSH bytes 0x0000000000000000000000000000000000000000000000000000000000000000 ; DIG 4 ; CONCAT ; DUG 3 ; PUSH nat 32 ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; LT } ; DROP 2 ; DIG 3 ; DROP ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; DUG 3 ; PAIR 3 ; EXEC } ; DUP 9 ; CDR ; DUP 5 ; DUP 7 ; PAIR 3 ; EXEC ; SOME ; DUP 6 ; UPDATE ; UPDATE 21 ; DUG 12 ; DUP 7 ; DUP 12 ; DUP 8 ; CAR ; PUSH nat 1 ; PUSH int 1 ; PAIR 4 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; EMIT %balance_update (pair (int %diff) (pair (nat %new_balance) (pair (address %owner) (nat %token_id)))) ; CONS ; DUP 4 ; PUSH nat 1 ; PUSH int 1 ; PAIR 3 ; EMIT %total_supply_update (pair (int %diff) (pair (nat %new_total_supply) (nat %token_id))) ; CONS ; DIG 3 ; PUSH nat 1 ; ADD ; DUG 3 ; PUSH bool False ; SWAP } ; SWAP ; DROP ; DIG 4 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 4 ; DIG 4 ; UPDATE 25 ; DUP ; GET 28 ; DIG 3 ; SOME ; DIG 4 ; UPDATE ; UPDATE 28 ; SWAP } } { IF_LEFT { DUP 6 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 8 ; DUG 8 ; DUG 8 ; DIG 7 ; DIG 8 ; DIG 8 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP ; CAR ; SIZE ; DUP ; INT ; GT ; IF {} { PUSH string "EMPTY_PAGES" ; FAILWITH } ; PUSH nat 32 ; PUSH nat 128 ; MUL ; PUSH nat 128 ; DUP 4 ; CDR ; EDIV ; IF_NONE { PUSH int 405 ; FAILWITH } { CAR } ; PUSH bool True ; PUSH nat 0 ; DUP 6 ; CAR ; ITER { DUP ; SIZE ; DUP ; INT ; GT ; IF {} { PUSH string "EMPTY_PAGE" ; FAILWITH } ; PUSH nat 0 ; PUSH nat 32 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 412 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "INVALID_PAGE_SIZE" ; FAILWITH } ; DUP 6 ; DUP 2 ; COMPARE ; LE ; IF {} { PUSH string "PAGE_TOO_LARGE" ; FAILWITH } ; DIG 2 ; PUSH nat 1 ; ADD ; DUG 2 ; DUP 7 ; DUP 4 ; COMPARE ; LT ; IF { DUP 6 ; DUP 2 ; COMPARE ; EQ ; IF {} { PUSH string "INTERMEDIATE_PAGE_NOT_FULL" ; FAILWITH } } {} ; DUP 4 ; IF { DIG 3 ; DROP ; DUP 8 ; GET 21 ; DUP 5 ; GET ; IF_NONE { PUSH bytes 0x } {} ; DUP ; SIZE ; DUP ; INT ; GT ; IF { DUP ; DIG 3 ; COMPARE ; GE ; IF {} { PUSH string "PAGE_SHORTER_THAN_EXISTING" ; FAILWITH } ; SWAP ; DUP 3 ; DIG 2 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "SLICE_ERROR" ; FAILWITH } {} ; COMPARE ; EQ ; IF {} { PUSH string "OVERLAP_MISMATCH" ; FAILWITH } } { DROP 3 } ; PUSH bool False ; DUG 2 } { DROP } ; DIG 7 ; DUP ; GET 21 ; DIG 2 ; SOME ; DUP 6 ; UPDATE ; UPDATE 21 ; DUG 6 ; DIG 2 ; PUSH nat 1 ; ADD ; DUG 2 } ; DROP 6 ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP } { IF_LEFT { DUP 6 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 8 ; DUG 8 ; DUG 8 ; DIG 7 ; DIG 8 ; DIG 8 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP ; CAR ; DUP 3 ; GET 25 ; COMPARE ; EQ ; IF {} { PUSH string "RACE_CONDITION" ; FAILWITH } ; DUP ; CDR ; SIZE ; DUP ; INT ; GT ; IF {} { PUSH string "EMPTY_PAGES" ; FAILWITH } ; PUSH nat 4 ; PUSH nat 1024 ; MUL ; PUSH nat 1024 ; DUP 4 ; CAR ; EDIV ; IF_NONE { PUSH int 340 ; FAILWITH } { CAR } ; PUSH bool True ; PUSH nat 0 ; PUSH nat 0 ; DUP 7 ; CDR ; ITER { DUP ; SIZE ; DUP ; INT ; GT ; IF {} { PUSH string "EMPTY_PAGE" ; FAILWITH } ; PUSH nat 0 ; PUSH nat 4 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 348 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "INVALID_PAGE_SIZE" ; FAILWITH } ; DUP 7 ; DUP 2 ; COMPARE ; LE ; IF {} { PUSH string "PAGE_TOO_LARGE" ; FAILWITH } ; DIG 2 ; PUSH nat 1 ; ADD ; DUG 2 ; DUP 8 ; DUP 4 ; COMPARE ; LT ; IF { DUP 7 ; DUP 2 ; COMPARE ; EQ ; IF {} { PUSH string "INTERMEDIATE_PAGE_NOT_FULL" ; FAILWITH } } {} ; DUP 5 ; IF { DIG 4 ; DROP ; DUP 9 ; GET 28 ; DUP 6 ; GET ; IF_NONE { PUSH bytes 0x } {} ; DUP ; SIZE ; DUP ; INT ; GT ; IF { DIG 5 ; DROP ; DUP ; DUP 4 ; COMPARE ; GE ; IF {} { PUSH string "PAGE_SHORTER_THAN_EXISTING" ; FAILWITH } ; SWAP ; DUP 4 ; DIG 2 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "SLICE_ERROR" ; FAILWITH } {} ; COMPARE ; EQ ; IF {} { PUSH string "OVERLAP_MISMATCH" ; FAILWITH } } { DROP 2 ; DIG 3 ; DROP } ; PUSH bool False ; DUG 3 } { DIG 3 ; DROP } ; PUSH nat 4 ; SWAP ; EDIV ; IF_NONE { PUSH int 366 ; FAILWITH } { CAR } ; DUG 2 ; DIG 8 ; DUP ; GET 28 ; DIG 2 ; SOME ; DUP 7 ; UPDATE ; UPDATE 28 ; DUG 7 ; DIG 3 ; PUSH nat 1 ; ADD ; DUG 3 } ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 2 ; SWAP ; PUSH nat 1024 ; PUSH nat 1 ; DIG 4 ; SUB ; ISNAT ; IF_NONE { PUSH int 371 ; FAILWITH } {} ; MUL ; ADD ; UPDATE 25 } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP ; CAR ; DUP 3 ; GET 5 ; COMPARE ; EQ ; IF {} { PUSH string "HUB_MISMATCH" ; FAILWITH } ; CDR ; UPDATE 5 } } ; NIL operation } } } { IF_LEFT { IF_LEFT { IF_LEFT { DUP 6 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 8 ; DUG 8 ; DUG 8 ; DIG 7 ; DIG 8 ; DIG 8 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP ; CAR ; ITER { DUP 3 ; GET 25 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DIG 2 ; DUP ; GET 9 ; DUP 4 ; CDR ; SOME ; DIG 3 ; UPDATE ; UPDATE 9 ; SWAP } ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; SWAP ; DUP ; GET 7 ; DUP 3 ; CDR ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 7 } ; NIL operation } { IF_LEFT { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 2 ; SWAP ; DUP ; CAR ; DIG 2 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 5 ; DIG 5 ; DIG 5 ; DIG 4 ; DIG 5 ; DIG 5 ; IF { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; PUSH bool True } { DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 } ; IF {} { PUSH string "NOT_AUTHORIZED" ; FAILWITH } ; SWAP ; DUP ; GET 11 ; DUP 3 ; CDR ; SOME ; DUP 4 ; CAR ; UPDATE ; UPDATE 11 ; SWAP ; EMIT %JurisdictionUriSet (pair (string %jurisdiction) (bytes %uri)) ; NIL operation ; SWAP ; CONS } { IF_LEFT { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DUP 2 ; GET 25 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 2 ; GET 9 ; DUP 2 ; GET ; IF_NONE { PUSH string "" } {} ; DIG 3 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "NOT_JURISDICTION_ADMIN" ; FAILWITH } ; SWAP ; DUP ; GET 13 ; PUSH (option bool) (Some True) ; DIG 3 ; UPDATE ; UPDATE 13 ; NIL operation } { DUP 5 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 8 ; DUG 8 ; DUG 8 ; DIG 7 ; DIG 8 ; DIG 8 ; IF {} { PUSH string "NOT_HUB" ; FAILWITH } ; DUP ; CAR ; DUP 3 ; GET 25 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; PUSH nat 1024 ; DUP 2 ; EDIV ; IF_NONE { PUSH int 669 ; FAILWITH } { CAR } ; DUP 4 ; GET 28 ; DUP 2 ; GET ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH nat 1024 ; DUP 4 ; EDIV ; IF_NONE { PUSH int 671 ; FAILWITH } { CDR } ; DIG 5 ; DUP ; GET 28 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; PUSH bytes 0x00000000 ; DUP 6 ; DUP 6 ; PAIR 3 ; EXEC ; SOME ; DUP 6 ; UPDATE ; UPDATE 28 ; DUG 5 ; DUP 6 ; GET 15 ; DUP 5 ; MEM ; IF { DIG 5 ; DUP ; GET 15 ; NONE bool ; DUP 7 ; UPDATE ; UPDATE 15 ; DUG 5 } {} ; PUSH nat 128 ; DUP 5 ; EDIV ; IF_NONE { PUSH int 678 ; FAILWITH } { CAR } ; DUP 7 ; GET 21 ; DUP 2 ; GET ; IF_NONE { PUSH bytes 0x } {} ; PUSH nat 128 ; DUP 7 ; EDIV ; IF_NONE { PUSH int 682 ; FAILWITH } { CDR } ; PUSH nat 32 ; DUP 2 ; MUL ; DUP 3 ; SIZE ; COMPARE ; GT ; IF { DIG 8 ; DUP ; GET 21 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; PUSH bytes 0x0000000000000000000000000000000000000000000000000000000000000000 ; DUP 6 ; DUP 6 ; PAIR 3 ; EXEC ; SOME ; DUP 6 ; UPDATE ; UPDATE 21 ; DUG 8 } {} ; DUP 9 ; GET 9 ; DUP 8 ; MEM ; IF { DIG 8 ; DUP ; GET 9 ; NONE string ; DUP 10 ; UPDATE ; UPDATE 9 ; DUG 8 } {} ; NIL operation ; DUP 8 ; PUSH nat 0 ; PUSH int -1 ; PAIR 3 ; EMIT %total_supply_update (pair (int %diff) (pair (nat %new_total_supply) (nat %token_id))) ; CONS ; DUP 8 ; NONE string ; PAIR ; EMIT %TitleBurned (pair (option %reason string) (nat %token_id)) ; CONS ; DUP 10 ; GET 25 ; PUSH nat 1024 ; DUP 2 ; EDIV ; IF_NONE { PUSH int 706 ; FAILWITH } { CAR } ; DUP 12 ; GET 28 ; DUP 2 ; GET ; IF_NONE { PUSH bytes 0x } {} ; PUSH nat 1024 ; DUP 4 ; EDIV ; IF_NONE { PUSH int 708 ; FAILWITH } { CDR } ; DUP 19 ; DUP 14 ; GET 6 ; SWAP ; DIG 15 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 20 ; DIG 20 ; DIG 20 ; DIG 20 ; DIG 20 ; DIG 20 ; DIG 7 ; DUG 20 ; DUG 20 ; DUG 20 ; DUG 20 ; DUG 20 ; DUG 20 ; DUG 20 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; PUSH nat 4 ; PUSH nat 1 ; DUP 3 ; ADD ; MUL ; DUP 3 ; SIZE ; DUP 2 ; DUP 2 ; COMPARE ; LT ; LOOP { PUSH bytes 0x00000000 ; DIG 4 ; CONCAT ; DUG 3 ; PUSH nat 4 ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; LT } ; DROP 2 ; DIG 3 ; DROP ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; DUG 3 ; PAIR 3 ; EXEC } ; LAMBDA bytes bytes { DUP ; SIZE ; PUSH nat 5 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "Value too long, must be 4 bytes or less" ; FAILWITH } ; PUSH nat 4 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP ; INT ; EQ ; IF { DROP 2 ; PUSH bytes 0x00000000 } { PUSH nat 1 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; PUSH bytes 0x000000 ; CONCAT } { PUSH nat 2 ; COMPARE ; EQ ; IF { PUSH bytes 0x0000 ; CONCAT } { PUSH bytes 0x00 ; CONCAT } } } } } ; DUP 3 ; BYTES ; EXEC ; DIG 4 ; DUP 5 ; PAIR 3 ; EXEC ; DUG 2 ; DIG 14 ; DUP ; GET 28 ; DUP 5 ; SOME ; DUP 7 ; UPDATE ; UPDATE 28 ; PUSH nat 1 ; DUP 7 ; ADD ; UPDATE 25 ; DUP ; GET 9 ; DUP 16 ; GET 3 ; SOME ; DUP 8 ; UPDATE ; UPDATE 9 ; DUG 14 ; PUSH nat 128 ; DUP 6 ; EDIV ; IF_NONE { PUSH int 720 ; FAILWITH } { CAR } ; PUSH nat 128 ; DUP 7 ; EDIV ; IF_NONE { PUSH int 721 ; FAILWITH } { CDR } ; DUP 17 ; GET 21 ; DUP 3 ; GET ; IF_NONE { PUSH bytes 0x } {} ; DIG 17 ; DUP ; GET 21 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; PUSH nat 32 ; PUSH nat 1 ; DUP 3 ; ADD ; MUL ; DUP 3 ; SIZE ; DUP 2 ; DUP 2 ; COMPARE ; LT ; LOOP { PUSH bytes 0x0000000000000000000000000000000000000000000000000000000000000000 ; DIG 4 ; CONCAT ; DUG 3 ; PUSH nat 32 ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; LT } ; DROP 2 ; DIG 3 ; DROP ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; DUG 3 ; PAIR 3 ; EXEC } ; DUP 20 ; GET 5 ; DUP 5 ; DUP 7 ; PAIR 3 ; EXEC ; SOME ; DUP 6 ; UPDATE ; UPDATE 21 ; DUG 17 ; DUP 9 ; DUP 9 ; DUP 19 ; GET 6 ; PUSH nat 1 ; PUSH int 1 ; PAIR 4 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; DIG 5 ; DROP ; EMIT %balance_update (pair (int %diff) (pair (nat %new_balance) (pair (address %owner) (nat %token_id)))) ; CONS ; DUP 2 ; PUSH nat 1 ; PUSH int 1 ; PAIR 3 ; EMIT %total_supply_update (pair (int %diff) (pair (nat %new_total_supply) (nat %token_id))) ; CONS ; SWAP ; DIG 2 ; DUP ; GET 6 ; SWAP ; GET 3 ; PAIR 3 ; EMIT %TitleMinted (pair (string %dest_jurisdiction) (pair (address %owner) (nat %token_id))) ; CONS } } } } { IF_LEFT { IF_LEFT { PUSH string "FA2_TX_DENIED" ; FAILWITH } { IF_LEFT { DUP 2 ; GET 25 ; DUP 2 ; GET 4 ; COMPARE ; LT ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 2 ; GET 15 ; DUP 2 ; GET 4 ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "TOKEN_LOCKED" ; FAILWITH } {} ; DUP 2 ; GET 9 ; DUP 2 ; GET 4 ; GET ; IF_NONE { PUSH string "" } {} ; DUP 5 ; DUP 2 ; SWAP ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 9 ; DUG 9 ; DUG 9 ; DUG 9 ; DIG 7 ; DIG 9 ; DIG 9 ; DIG 9 ; IF {} { PUSH string "NOT_JURISDICTION_ADMIN" ; FAILWITH } ; PUSH nat 1024 ; DUP 3 ; GET 4 ; EDIV ; IF_NONE { PUSH int 772 ; FAILWITH } { CAR } ; DUP 4 ; GET 28 ; DUP 2 ; GET ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH nat 1024 ; DUP 5 ; GET 4 ; EDIV ; IF_NONE { PUSH int 774 ; FAILWITH } { CDR } ; LAMBDA (pair nat (pair bytes nat)) (option bytes) { DUP ; UNPAIR 3 ; DUP 2 ; SIZE ; DUP 4 ; DUP 3 ; MUL ; DUP 2 ; DUP 2 ; COMPARE ; GE ; IF { DROP 6 ; NONE bytes } { DIG 2 ; DROP ; DIG 4 ; DROP ; PUSH nat 0 ; DUP 5 ; DIG 3 ; EDIV ; IF_NONE { PUSH int 90 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "CORRUPTED_PAGE_SIZE" ; FAILWITH } ; SWAP ; DUG 2 ; SLICE ; IF_NONE { PUSH string "SLICE_OUT_OF_BOUNDS_IN_PAGE" ; FAILWITH } {} ; SOME } } ; PUSH nat 4 ; DUP 4 ; DUP 4 ; PAIR 3 ; EXEC ; IF_NONE { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } {} ; PUSH bytes 0x00000000 ; DUP 2 ; COMPARE ; NEQ ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 8 ; SENDER ; SWAP ; DIG 8 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 7 ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 13 ; DIG 13 ; IF_NONE { PUSH string "FA2_NOT_OWNER" ; FAILWITH } {} ; LAMBDA bytes bytes { DUP ; SIZE ; PUSH nat 5 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "Value too long, must be 4 bytes or less" ; FAILWITH } ; PUSH nat 4 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP ; INT ; EQ ; IF { DROP 2 ; PUSH bytes 0x00000000 } { PUSH nat 1 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; PUSH bytes 0x000000 ; CONCAT } { PUSH nat 2 ; COMPARE ; EQ ; IF { PUSH bytes 0x0000 ; CONCAT } { PUSH bytes 0x00 ; CONCAT } } } } } ; DUP 2 ; BYTES ; EXEC ; DUP ; DUP 4 ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; DUP 14 ; DUP 9 ; GET 3 ; SWAP ; DIG 10 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 15 ; DIG 7 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DUG 15 ; DIG 9 ; DUP ; GET 28 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; LAMBDA bytes bytes { DUP ; SIZE ; PUSH nat 5 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "Value too long, must be 4 bytes or less" ; FAILWITH } ; PUSH nat 4 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP ; INT ; EQ ; IF { DROP 2 ; PUSH bytes 0x00000000 } { PUSH nat 1 ; DUP 2 ; COMPARE ; EQ ; IF { DROP ; PUSH bytes 0x000000 ; CONCAT } { PUSH nat 2 ; COMPARE ; EQ ; IF { PUSH bytes 0x0000 ; CONCAT } { PUSH bytes 0x00 ; CONCAT } } } } } ; DUP 5 ; BYTES ; EXEC ; DUP 10 ; DUP 10 ; PAIR 3 ; EXEC ; SOME ; DUP 10 ; UPDATE ; UPDATE 28 ; DUG 9 ; PUSH nat 128 ; DUP 10 ; GET 4 ; EDIV ; IF_NONE { PUSH int 798 ; FAILWITH } { CAR } ; PUSH nat 128 ; DUP 11 ; GET 4 ; EDIV ; IF_NONE { PUSH int 799 ; FAILWITH } { CDR } ; DUP 12 ; GET 21 ; DUP 3 ; GET ; IF_NONE { PUSH bytes 0x } {} ; DIG 12 ; DUP ; GET 21 ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; PUSH nat 32 ; PUSH nat 1 ; DUP 3 ; ADD ; MUL ; DUP 3 ; SIZE ; DUP 2 ; DUP 2 ; COMPARE ; LT ; LOOP { PUSH bytes 0x0000000000000000000000000000000000000000000000000000000000000000 ; DIG 4 ; CONCAT ; DUG 3 ; PUSH nat 32 ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; LT } ; DROP 2 ; DIG 3 ; DROP ; LAMBDA (pair nat (pair bytes bytes)) bytes { DUP ; UNPAIR 3 ; DUP 3 ; SIZE ; DUP 3 ; SIZE ; PUSH nat 0 ; DUP 3 ; DUP 3 ; EDIV ; IF_NONE { PUSH int 102 ; FAILWITH } { CDR } ; COMPARE ; EQ ; IF {} { PUSH string "UPDATE_PAGE_CORRUPTED_SIZE" ; FAILWITH } ; DUP 2 ; DUP 4 ; MUL ; DUP 3 ; DUP 2 ; ADD ; DUP 2 ; INT ; EQ ; IF { PUSH bytes 0x } { DUP 6 ; DUP 3 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "UPDATE_INDEX_OUT_OF_BOUNDS" ; FAILWITH } {} } ; DUP 4 ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; CONCAT } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 5 ; DROP ; DUP 2 ; DIG 3 ; SUB ; ISNAT ; IF_NONE { PUSH string "UPDATE_SLICE_OUT_OF_BOUNDS" ; FAILWITH } {} ; DIG 3 ; SWAP ; DIG 3 ; SLICE ; IF_NONE { PUSH int 116 ; FAILWITH } {} ; NIL bytes ; SWAP ; CONS ; DIG 2 ; CONS ; SWAP ; CONS ; CONCAT } } ; DUG 3 ; PAIR 3 ; EXEC } ; DUP 15 ; CAR ; DUP 5 ; DUP 7 ; PAIR 3 ; EXEC ; SOME ; DUP 6 ; UPDATE ; UPDATE 21 ; DUG 12 ; DUP 12 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { NIL operation ; DUP ; DUP 14 ; GET 4 ; SENDER ; PUSH nat 0 ; PUSH int -1 ; PAIR 4 ; DIG 2 ; DROP ; EMIT %balance_update (pair (int %diff) (pair (nat %new_balance) (pair (address %owner) (nat %token_id)))) ; CONS ; DUP ; DUP 14 ; GET 4 ; DUP 15 ; GET 3 ; PUSH nat 1 ; PUSH int 1 ; PAIR 4 ; DIG 2 ; DROP ; EMIT %balance_update (pair (int %diff) (pair (nat %new_balance) (pair (address %owner) (nat %token_id)))) ; CONS } { NIL operation } ; DUP ; DUP 14 ; GET 4 ; DUP 15 ; GET 3 ; SENDER ; PUSH nat 1 ; PAIR 4 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; EMIT %transfer_event (pair (nat %amount) (pair (address %from_) (pair (address %to_) (nat %token_id)))) ; CONS ; SWAP ; DUP ; GET 4 ; SWAP ; GET 3 ; SENDER ; PAIR 3 ; EMIT %TitleClaimed (pair (address %from_) (pair (address %to_) (nat %token_id))) ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "NOT_HUB" ; FAILWITH } ; DUP 2 ; GET 15 ; DUP 2 ; GET ; IF_NONE { PUSH bool False } {} ; IF { SWAP ; DUP ; GET 15 ; PUSH (option bool) (Some False) ; DIG 3 ; UPDATE ; UPDATE 15 } { DROP } ; NIL operation } } } { IF_LEFT { DUP 6 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 8 ; DUG 8 ; DUG 8 ; DIG 7 ; DIG 8 ; DIG 8 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP ; CAR ; ITER { DIG 2 ; DUP ; GET 3 ; PUSH bool False ; DIG 3 ; UPDATE ; UPDATE 3 ; SWAP } ; DUP ; CDR ; ITER { DIG 2 ; DUP ; GET 3 ; PUSH bool True ; DIG 3 ; UPDATE ; UPDATE 3 ; SWAP } ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; NIL operation } { IF_LEFT { DUP 6 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 8 ; DUG 8 ; DUG 8 ; DIG 7 ; DIG 8 ; DIG 8 ; IF {} { PUSH string "FA2_NOT_ADMIN" ; FAILWITH } ; DUP ; CDR ; ITER { DIG 2 ; DUP ; GET 17 ; NONE bytes ; DIG 3 ; UPDATE ; UPDATE 17 ; SWAP } ; DUP ; CAR ; ITER { DIG 2 ; DUP ; GET 17 ; DUP 3 ; CDR ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 17 ; SWAP } ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; NIL operation } { NIL operation ; DUP 2 ; ITER { DUP ; IF_LEFT { SENDER ; DUP 2 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; DIG 4 ; DUP ; GET 27 ; PUSH (option unit) (Some Unit) ; DUP 4 ; UPDATE ; UPDATE 27 ; DUG 4 ; DUP 3 ; DUP 2 ; GET 4 ; DUP 3 ; CAR ; DUP 4 ; GET 3 ; PUSH bool True ; PAIR 4 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; EMIT %operator_update (pair (bool %is_operator) (pair (address %operator) (pair (address %owner) (nat %token_id)))) ; CONS } { SENDER ; DUP 2 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; DIG 4 ; DUP ; GET 27 ; NONE unit ; DUP 4 ; UPDATE ; UPDATE 27 ; DUG 4 ; DUP 3 ; DUP 2 ; GET 4 ; DUP 3 ; CAR ; DUP 4 ; GET 3 ; PUSH bool False ; PAIR 4 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; EMIT %operator_update (pair (bool %is_operator) (pair (address %operator) (pair (address %owner) (nat %token_id)))) ; CONS } } ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } } } } } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR }