ETH Price: $2,676.67 (-1.36%)

Contract

0x2AD82A4E39Bac43A54DdfE6f94980AAf0D1409eF
Transaction Hash
Method
Block
From
To
Buy1180063672024-03-28 7:38:31327 days ago1711611511IN
0x2AD82A4E...f0D1409eF
1.177296260024904 ETH0.0000065625090.02961876
Buy1166235282024-02-25 7:23:53359 days ago1708845833IN
0x2AD82A4E...f0D1409eF
3.5277015012201 ETH0.0000411789290.00368548
Buy1141760242023-12-30 15:40:25416 days ago1703950825IN
0x2AD82A4E...f0D1409eF
3.166896099385137 ETH0.000035485560.00593759
Buy1141729802023-12-30 13:58:57416 days ago1703944737IN
0x2AD82A4E...f0D1409eF
1.751320404303082 ETH0.0000246833710.00546296
Buy1141335552023-12-29 16:04:47417 days ago1703865887IN
0x2AD82A4E...f0D1409eF
2.21553149296411 ETH0.0000712495560.00331226
Buy1139565152023-12-25 13:43:27421 days ago1703511807IN
0x2AD82A4E...f0D1409eF
1.231752667089021 ETH0.0001149595190.00428969
Buy1137387442023-12-20 12:44:25426 days ago1703076265IN
0x2AD82A4E...f0D1409eF
2.251378983 ETH0.0000971333520.00972898
Buy1136441532023-12-18 8:11:23428 days ago1702887083IN
0x2AD82A4E...f0D1409eF
1.355605876724127 ETH0.0000562580270.02438981
Buy1136441462023-12-18 8:11:09428 days ago1702887069IN
0x2AD82A4E...f0D1409eF
1.355605876724127 ETH0.0000566472190.02443541
Buy1136425462023-12-18 7:17:49428 days ago1702883869IN
0x2AD82A4E...f0D1409eF
1.357639739471967 ETH0.0000480715850.00910027
Buy1135964572023-12-17 5:41:31429 days ago1702791691IN
0x2AD82A4E...f0D1409eF
1.587920602018317 ETH0.0000486679830.0062864
Buy1135946612023-12-17 4:41:39429 days ago1702788099IN
0x2AD82A4E...f0D1409eF
1.568258038151133 ETH0.0000484294620.00758681
Buy1135945782023-12-17 4:38:53429 days ago1702787933IN
0x2AD82A4E...f0D1409eF
6.076595409364788 ETH0.0000549995950.00595823
Buy1135923452023-12-17 3:24:27429 days ago1702783467IN
0x2AD82A4E...f0D1409eF
4.346988982937559 ETH0.0000546194580.00543622
Buy1135921912023-12-17 3:19:19429 days ago1702783159IN
0x2AD82A4E...f0D1409eF
1.410989306957853 ETH0.0000540877730.00620999
Buy1135583652023-12-16 8:31:47430 days ago1702715507IN
0x2AD82A4E...f0D1409eF
1.403682465216381 ETH0.0000748367950.00667621
Buy1135449652023-12-16 1:05:07431 days ago1702688707IN
0x2AD82A4E...f0D1409eF
1.424143956365277 ETH0.0000773273690.00546799
Buy1135411632023-12-15 22:58:23431 days ago1702681103IN
0x2AD82A4E...f0D1409eF
2.857799390902554 ETH0.0000770154140.00614386
Buy1135301202023-12-15 16:50:17431 days ago1702659017IN
0x2AD82A4E...f0D1409eF
1.036118537180897 ETH0.0002263171130.1149557
Buy1135267822023-12-15 14:59:01431 days ago1702652341IN
0x2AD82A4E...f0D1409eF
1.496459026982157 ETH0.0001059021250.00595632
Buy1135247472023-12-15 13:51:11431 days ago1702648271IN
0x2AD82A4E...f0D1409eF
3.048301520881338 ETH0.0000812005090.0100917
Buy1135241862023-12-15 13:32:29431 days ago1702647149IN
0x2AD82A4E...f0D1409eF
2.192457500048371 ETH0.0000916302670.00654366
Buy1135239012023-12-15 13:22:59431 days ago1702646579IN
0x2AD82A4E...f0D1409eF
1.471243482037581 ETH0.0000900107910.00586956
Buy1135233542023-12-15 13:04:45431 days ago1702645485IN
0x2AD82A4E...f0D1409eF
1.1271792 ETH0.0001346326630.00617108
Buy1135187862023-12-15 10:32:29431 days ago1702636349IN
0x2AD82A4E...f0D1409eF
1.859981552116989 ETH0.0000768143450.00541172
VIEW ADVANCED FILTER

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1320875232025-02-17 6:30:2343 hrs ago1739773823
0x2AD82A4E...f0D1409eF
0.000314403878687 ETH
1320875232025-02-17 6:30:2343 hrs ago1739773823
0x2AD82A4E...f0D1409eF
0.006602481452437 ETH
1320865132025-02-17 5:56:4344 hrs ago1739771803
0x2AD82A4E...f0D1409eF
0.000637356870586 ETH
1320865132025-02-17 5:56:4344 hrs ago1739771803
0x2AD82A4E...f0D1409eF
0.012109780541134 ETH
1319635392025-02-14 9:37:354 days ago1739525855
0x2AD82A4E...f0D1409eF
0.000078554905046 ETH
1319635392025-02-14 9:37:354 days ago1739525855
0x2AD82A4E...f0D1409eF
0.00149254319589 ETH
1317954642025-02-10 12:15:058 days ago1739189705
0x2AD82A4E...f0D1409eF
0.000008 ETH
1317780442025-02-10 2:34:258 days ago1739154865
0x2AD82A4E...f0D1409eF
0.003118309676875 ETH
1317780442025-02-10 2:34:258 days ago1739154865
0x2AD82A4E...f0D1409eF
0.065484503214375 ETH
1312747672025-01-29 10:58:3120 days ago1738148311
0x2AD82A4E...f0D1409eF
0.000001 ETH
1308871632025-01-20 11:38:2329 days ago1737373103
0x2AD82A4E...f0D1409eF
0.000001 ETH
1308270952025-01-19 2:16:0731 days ago1737252967
0x2AD82A4E...f0D1409eF
0.000697356034171 ETH
1308270952025-01-19 2:16:0731 days ago1737252967
0x2AD82A4E...f0D1409eF
0.013249764649265 ETH
1308133612025-01-18 18:38:1931 days ago1737225499
0x2AD82A4E...f0D1409eF
0.000007 ETH
1308133542025-01-18 18:38:0531 days ago1737225485
0x2AD82A4E...f0D1409eF
0.000001 ETH
1307986462025-01-18 10:27:4931 days ago1737196069
0x2AD82A4E...f0D1409eF
0.0055689264 ETH
1307986462025-01-18 10:27:4931 days ago1737196069
0x2AD82A4E...f0D1409eF
0.1058096016 ETH
1307889572025-01-18 5:04:5131 days ago1737176691
0x2AD82A4E...f0D1409eF
0.001050670605164 ETH
1307889572025-01-18 5:04:5131 days ago1737176691
0x2AD82A4E...f0D1409eF
0.019962741498117 ETH
1305417902025-01-12 11:45:5737 days ago1736682357
0x2AD82A4E...f0D1409eF
0.000781869287968 ETH
1305417902025-01-12 11:45:5737 days ago1736682357
0x2AD82A4E...f0D1409eF
0.014855516471406 ETH
1304045912025-01-09 7:32:3940 days ago1736407959
0x2AD82A4E...f0D1409eF
0.000026 ETH
1304045912025-01-09 7:32:3940 days ago1736407959
0x2AD82A4E...f0D1409eF
0.000494 ETH
1304045822025-01-09 7:32:2140 days ago1736407941
0x2AD82A4E...f0D1409eF
0.000027 ETH
1304045822025-01-09 7:32:2140 days ago1736407941
0x2AD82A4E...f0D1409eF
0.000513 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bodhi

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Bodhi.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import {ERC1155} from "solmate/src/tokens/ERC1155.sol";
error Unauthorized();

contract Bodhi is ERC1155 {
    event Create(uint256 indexed assetId, address indexed sender, string arTxId);
    event Remove(uint256 indexed assetId, address indexed sender);
    event Trade(
        TradeType indexed tradeType,
        uint256 indexed assetId,
        address indexed sender,
        uint256 tokenAmount,
        uint256 ethAmount,
        uint256 creatorFee
    );

    struct Asset {
        uint256 id;
        string arTxId; // arweave transaction id
        address creator;
    }

    uint256 public assetIndex;
    mapping(uint256 => Asset) public assets;
    mapping(address => uint256[]) public userAssets;
    mapping(bytes32 => uint256) public txToAssetId;
    mapping(uint256 => uint256) public totalSupply;
    mapping(uint256 => uint256) public pool;
    uint256 public constant CREATOR_PREMINT = 1 ether; // 1e18
    uint256 public constant CREATOR_FEE_PERCENT = 0.05 ether; // 5%

    enum TradeType {
        Mint,
        Buy,
        Sell
    } // = 0, 1, 2

    function create(string calldata arTxId) public {
        bytes32 txHash = keccak256(abi.encodePacked(arTxId));
        require(txToAssetId[txHash] == 0, "Asset already exists");
        uint256 newAssetId = assetIndex;
        assets[newAssetId] = Asset(newAssetId, arTxId, msg.sender);
        userAssets[msg.sender].push(newAssetId);
        txToAssetId[txHash] = newAssetId;
        totalSupply[newAssetId] += CREATOR_PREMINT;
        assetIndex = newAssetId + 1;
        _mint(msg.sender, newAssetId, CREATOR_PREMINT, "");
        emit Create(newAssetId, msg.sender, arTxId);
        emit Trade(TradeType.Mint, newAssetId, msg.sender, CREATOR_PREMINT, 0, 0);
    }

    function remove(uint256 assetId) public {
        Asset memory asset = assets[assetId];
        if (asset.creator != msg.sender) {
            revert Unauthorized();
        }
        delete txToAssetId[keccak256(abi.encodePacked(asset.arTxId))];
        delete assets[assetId];
        emit Remove(assetId, msg.sender);
    }

    function getAssetIdsByAddress(address addr) public view returns (uint256[] memory) {
        return userAssets[addr];
    }

    function _curve(uint256 x) private pure returns (uint256) {
        return x <= CREATOR_PREMINT ? 0 : ((x - CREATOR_PREMINT) * (x - CREATOR_PREMINT) * (x - CREATOR_PREMINT));
    }

    function getPrice(uint256 supply, uint256 amount) public pure returns (uint256) {
        return (_curve(supply + amount) - _curve(supply)) / 1 ether / 1 ether / 50_000;
    }

    function getBuyPrice(uint256 assetId, uint256 amount) public view returns (uint256) {
        return getPrice(totalSupply[assetId], amount);
    }

    function getSellPrice(uint256 assetId, uint256 amount) public view returns (uint256) {
        return getPrice(totalSupply[assetId] - amount, amount);
    }

    function getBuyPriceAfterFee(uint256 assetId, uint256 amount) public view returns (uint256) {
        uint256 price = getBuyPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        return price + creatorFee;
    }

    function getSellPriceAfterFee(uint256 assetId, uint256 amount) public view returns (uint256) {
        uint256 price = getSellPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        return price - creatorFee;
    }

    function buy(uint256 assetId, uint256 amount) public payable {
        require(assetId < assetIndex, "Asset does not exist");
        uint256 price = getBuyPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        require(msg.value >= price + creatorFee, "Insufficient payment");
        totalSupply[assetId] += amount;
        pool[assetId] += price;
        _mint(msg.sender, assetId, amount, "");
        emit Trade(TradeType.Buy, assetId, msg.sender, amount, price, creatorFee);
        (bool creatorFeeSent, ) = payable(assets[assetId].creator).call{value: creatorFee}("");
        require(creatorFeeSent, "Failed to send Ether");
    }

    function sell(uint256 assetId, uint256 amount) public {
        require(assetId < assetIndex, "Asset does not exist");
        require(balanceOf[msg.sender][assetId] >= amount, "Insufficient balance");
        uint256 supply = totalSupply[assetId];
        require(supply - amount >= CREATOR_PREMINT, "Supply not allowed below premint amount");
        uint256 price = getSellPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        _burn(msg.sender, assetId, amount);
        totalSupply[assetId] = supply - amount;
        pool[assetId] -= price;
        emit Trade(TradeType.Sell, assetId, msg.sender, amount, price, creatorFee);
        (bool sent, ) = payable(msg.sender).call{value: price - creatorFee}("");
        (bool creatorFeeSent, ) = payable(assets[assetId].creator).call{value: creatorFee}("");
        require(sent && creatorFeeSent, "Failed to send Ether");
    }

    function uri(uint256 id) public view override returns (string memory) {
        return assets[id].arTxId;
    }
}

File 2 of 2 : ERC1155.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /*//////////////////////////////////////////////////////////////
                             ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => mapping(uint256 => uint256)) public balanceOf;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                             METADATA LOGIC
    //////////////////////////////////////////////////////////////*/

    function uri(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                              ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) public virtual {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        balanceOf[from][id] -= amount;
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i = 0; i < ids.length; ) {
            id = ids[i];
            amount = amounts[i];

            balanceOf[from][id] -= amount;
            balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[to][ids[i]] += amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchBurn(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[from][ids[i]] -= amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, address(0), ids, amounts);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        balanceOf[from][id] -= amount;

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"arTxId","type":"string"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"Remove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Bodhi.TradeType","name":"tradeType","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creatorFee","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"CREATOR_FEE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CREATOR_PREMINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"assetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"assets","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"arTxId","type":"string"},{"internalType":"address","name":"creator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"arTxId","type":"string"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAssetIdsByAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"txToAssetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50613c4d806100206000396000f3fe6080604052600436106101805760003560e01c8063b6a46b3b116100d1578063d79875eb1161008a578063e0e1b2c011610064578063e0e1b2c01461060a578063e985e9c514610647578063f242432a14610684578063fe313112146106ad57610180565b8063d79875eb1461058b578063da23eb63146105b4578063e07b098a146105df57610180565b8063b6a46b3b14610450578063bd85b03914610479578063c157253d146104b6578063cd9c7121146104f3578063cf35bdd014610530578063d6febde81461056f57610180565b80634e1273f41161013e5780637ffb25ac116101185780637ffb25ac146103825780639477d85d146103ad578063a22cb465146103ea578063b5dfd7351461041357610180565b80634e1273f4146102cb5780635cf4ee91146103085780636a8a69aa1461034557610180565b8062fdd58e1461018557806301ffc9a7146101c2578063063a741f146101ff5780630e89341c1461023c5780632eb2c2d6146102795780634cc82215146102a2575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612693565b6106ea565b6040516101b991906126e2565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190612755565b61070f565b6040516101f6919061279d565b60405180910390f35b34801561020b57600080fd5b50610226600480360381019061022191906127b8565b6107a1565b60405161023391906126e2565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906127f8565b6107f0565b60405161027091906128b5565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612992565b610898565b005b3480156102ae57600080fd5b506102c960048036038101906102c491906127f8565b610cf4565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612ac4565b610f4f565b6040516102ff9190612c03565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127b8565b6110b8565b60405161033c91906126e2565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612693565b611114565b60405161037991906126e2565b60405180910390f35b34801561038e57600080fd5b50610397611145565b6040516103a491906126e2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127b8565b611151565b6040516103e191906126e2565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612c51565b611183565b005b34801561041f57600080fd5b5061043a60048036038101906104359190612c91565b611280565b6040516104479190612c03565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612d14565b611317565b005b34801561048557600080fd5b506104a0600480360381019061049b91906127f8565b611640565b6040516104ad91906126e2565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906127b8565b611658565b6040516104ea91906126e2565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906127b8565b61167f565b60405161052791906126e2565b60405180910390f35b34801561053c57600080fd5b50610557600480360381019061055291906127f8565b6116ce565b60405161056693929190612d70565b60405180910390f35b610589600480360381019061058491906127b8565b6117a0565b005b34801561059757600080fd5b506105b260048036038101906105ad91906127b8565b611a29565b005b3480156105c057600080fd5b506105c9611dce565b6040516105d691906126e2565b60405180910390f35b3480156105eb57600080fd5b506105f4611dd9565b60405161060191906126e2565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612de4565b611ddf565b60405161063e91906126e2565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190612e11565b611df7565b60405161067b919061279d565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612e51565b611e26565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906127f8565b6121d9565b6040516106e191906126e2565b60405180910390f35b6000602052816000526040600020602052806000526040600020600091509150505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076a575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079a5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806107ae8484611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836107ce9190612f1a565b6107d89190612f8b565b905080826107e69190612fbc565b9250505092915050565b60606003600083815260200190815260200160002060010180546108139061301f565b80601f016020809104026020016040519081016040528092919081815260200182805461083f9061301f565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b50505050509050919050565b8383905086869050146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061309c565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a05750600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613108565b60405180910390fd5b60008060005b88889050811015610aff57888882818110610a0357610a02613128565b5b905060200201359250868682818110610a1f57610a1e613128565b5b905060200201359150816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a879190613157565b92505081905550816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610aed9190612fbc565b925050819055508060010190506109e5565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610b7a94939291906131f5565b60405180910390a460008973ffffffffffffffffffffffffffffffffffffffff163b14610c775763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff1663bc197c81338d8c8c8c8c8c8c6040518963ffffffff1660e01b8152600401610c0f98979695949392919061327d565b6020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ca9565b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613379565b60405180910390fd5b50505050505050505050565b60006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d2e9061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a9061301f565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008260200151604051602001610e8a91906133d5565b6040516020818303038152906040528051906020012081526020019081526020016000206000905560036000838152602001908152602001600020600080820160009055600182016000610ede9190612598565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550503373ffffffffffffffffffffffffffffffffffffffff16827fe52b7042a48e37bfb277e8a210794950be40bfaedea374e2dfbe0c6edff8791d60405160405180910390a35050565b6060828290508585905014610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061309c565b60405180910390fd5b8484905067ffffffffffffffff811115610fb657610fb56133ec565b5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b858590508110156110af5760008087878481811061100b5761100a613128565b5b90506020020160208101906110209190612c91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061106f5761106e613128565b5b9050602002013581526020019081526020016000205482828151811061109857611097613128565b5b602002602001018181525050806001019050610fea565b50949350505050565b600061c350670de0b6b3a7640000806110d0866121f1565b6110e486886110df9190612fbc565b6121f1565b6110ee9190613157565b6110f89190612f8b565b6111029190612f8b565b61110c9190612f8b565b905092915050565b6004602052816000526040600020818154811061113057600080fd5b90600052602060002001600091509150505481565b670de0b6b3a764000081565b600061117b8260066000868152602001908152602001600020546111759190613157565b836110b8565b905092915050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611274919061279d565b60405180910390a35050565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561130b57602002820191906000526020600020905b8154815260200190600101908083116112f7575b50505050509050919050565b6000828260405160200161132c929190613440565b604051602081830303815290604052805190602001209050600060056000838152602001908152602001600020541461139a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611391906134a5565b60405180910390fd5b60006002549050604051806060016040528082815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360008381526020019081526020016000206000820151816000015560208201518160010190816114489190613671565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055806005600084815260200190815260200160002081905550670de0b6b3a764000060066000838152602001908152602001600020600082825461153c9190612fbc565b925050819055506001816115509190612fbc565b6002819055506115793382670de0b6b3a764000060405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16817fb683691564ab594b1f9e9db91abaf085736871256a4741baa41bf30cb9d4f23686866040516115c2929190613770565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff1681600060028111156115f6576115f5613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e670de0b6b3a7640000600080604051611632939291906137fe565b60405180910390a450505050565b60066020528060005260406000206000915090505481565b60006116776006600085815260200190815260200160002054836110b8565b905092915050565b60008061168c8484611151565b90506000670de0b6b3a764000066b1a2bc2ec50000836116ac9190612f1a565b6116b69190612f8b565b905080826116c49190613157565b9250505092915050565b60036020528060005260406000206000915090508060000154908060010180546116f79061301f565b80601f01602080910402602001604051908101604052809291908181526020018280546117239061301f565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60025482106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613881565b60405180910390fd5b60006117f08383611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836118109190612f1a565b61181a9190612f8b565b905080826118289190612fbc565b34101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906138ed565b60405180910390fd5b8260066000868152602001908152602001600020600082825461188d9190612fbc565b92505081905550816007600086815260200190815260200160002060008282546118b79190612fbc565b925050819055506118d933858560405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16846001600281111561190557611904613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e8686866040516119389392919061390d565b60405180910390a460006003600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161199c90613975565b60006040518083038185875af1925050503d80600081146119d9576040519150601f19603f3d011682016040523d82523d6000602084013e6119de565b606091505b5050905080611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906139d6565b60405180910390fd5b5050505050565b6002548210611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613881565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690613a42565b60405180910390fd5b600060066000848152602001908152602001600020549050670de0b6b3a76400008282611b2c9190613157565b1015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613ad4565b60405180910390fd5b6000611b798484611151565b90506000670de0b6b3a764000066b1a2bc2ec5000083611b999190612f1a565b611ba39190612f8b565b9050611bb03386866124ae565b8383611bbc9190613157565b600660008781526020019081526020016000208190555081600760008781526020019081526020016000206000828254611bf69190613157565b925050819055503373ffffffffffffffffffffffffffffffffffffffff1685600280811115611c2857611c27613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e878686604051611c5b9392919061390d565b60405180910390a460003373ffffffffffffffffffffffffffffffffffffffff168284611c889190613157565b604051611c9490613975565b60006040518083038185875af1925050503d8060008114611cd1576040519150601f19603f3d011682016040523d82523d6000602084013e611cd6565b606091505b5050905060006003600088815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611d3690613975565b60006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b50509050818015611d865750805b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906139d6565b60405180910390fd5b50505050505050565b66b1a2bc2ec5000081565b60025481565b60056020528060005260406000206000915090505481565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee65750600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613108565b60405180910390fd5b826000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611f849190613157565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611fea9190612fbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612067929190613af4565b60405180910390a460008573ffffffffffffffffffffffffffffffffffffffff163b146121605763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b81526004016120f896959493929190613b1d565b6020604051808303816000875af1158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612192565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613379565b60405180910390fd5b505050505050565b60076020528060005260406000206000915090505481565b6000670de0b6b3a764000082111561225857670de0b6b3a7640000826122179190613157565b670de0b6b3a76400008361222b9190613157565b670de0b6b3a76400008461223f9190613157565b6122499190612f1a565b6122539190612f1a565b61225b565b60005b9050919050565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546122c19190612fbc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161233f929190613af4565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b146124375763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b81526004016123cf959493929190613bbd565b6020604051808303816000875af11580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613379565b60405180910390fd5b50505050565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461250d9190613157565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161258b929190613af4565b60405180910390a4505050565b5080546125a49061301f565b6000825580601f106125b657506125d5565b601f0160209004906000526020600020908101906125d491906125d8565b5b50565b5b808211156125f15760008160009055506001016125d9565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061262a826125ff565b9050919050565b61263a8161261f565b811461264557600080fd5b50565b60008135905061265781612631565b92915050565b6000819050919050565b6126708161265d565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b600080604083850312156126aa576126a96125f5565b5b60006126b885828601612648565b92505060206126c98582860161267e565b9150509250929050565b6126dc8161265d565b82525050565b60006020820190506126f760008301846126d3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612732816126fd565b811461273d57600080fd5b50565b60008135905061274f81612729565b92915050565b60006020828403121561276b5761276a6125f5565b5b600061277984828501612740565b91505092915050565b60008115159050919050565b61279781612782565b82525050565b60006020820190506127b2600083018461278e565b92915050565b600080604083850312156127cf576127ce6125f5565b5b60006127dd8582860161267e565b92505060206127ee8582860161267e565b9150509250929050565b60006020828403121561280e5761280d6125f5565b5b600061281c8482850161267e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285f578082015181840152602081019050612844565b60008484015250505050565b6000601f19601f8301169050919050565b600061288782612825565b6128918185612830565b93506128a1818560208601612841565b6128aa8161286b565b840191505092915050565b600060208201905081810360008301526128cf818461287c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128fc576128fb6128d7565b5b8235905067ffffffffffffffff811115612919576129186128dc565b5b602083019150836020820283011115612935576129346128e1565b5b9250929050565b60008083601f840112612952576129516128d7565b5b8235905067ffffffffffffffff81111561296f5761296e6128dc565b5b60208301915083600182028301111561298b5761298a6128e1565b5b9250929050565b60008060008060008060008060a0898b0312156129b2576129b16125f5565b5b60006129c08b828c01612648565b98505060206129d18b828c01612648565b975050604089013567ffffffffffffffff8111156129f2576129f16125fa565b5b6129fe8b828c016128e6565b9650965050606089013567ffffffffffffffff811115612a2157612a206125fa565b5b612a2d8b828c016128e6565b9450945050608089013567ffffffffffffffff811115612a5057612a4f6125fa565b5b612a5c8b828c0161293c565b92509250509295985092959890939650565b60008083601f840112612a8457612a836128d7565b5b8235905067ffffffffffffffff811115612aa157612aa06128dc565b5b602083019150836020820283011115612abd57612abc6128e1565b5b9250929050565b60008060008060408587031215612ade57612add6125f5565b5b600085013567ffffffffffffffff811115612afc57612afb6125fa565b5b612b0887828801612a6e565b9450945050602085013567ffffffffffffffff811115612b2b57612b2a6125fa565b5b612b37878288016128e6565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b7a8161265d565b82525050565b6000612b8c8383612b71565b60208301905092915050565b6000602082019050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bc583612b61565b8060005b83811015612bf6578151612bdd8882612b80565b9750612be883612b98565b925050600181019050612bc9565b5085935050505092915050565b60006020820190508181036000830152612c1d8184612ba5565b905092915050565b612c2e81612782565b8114612c3957600080fd5b50565b600081359050612c4b81612c25565b92915050565b60008060408385031215612c6857612c676125f5565b5b6000612c7685828601612648565b9250506020612c8785828601612c3c565b9150509250929050565b600060208284031215612ca757612ca66125f5565b5b6000612cb584828501612648565b91505092915050565b60008083601f840112612cd457612cd36128d7565b5b8235905067ffffffffffffffff811115612cf157612cf06128dc565b5b602083019150836001820283011115612d0d57612d0c6128e1565b5b9250929050565b60008060208385031215612d2b57612d2a6125f5565b5b600083013567ffffffffffffffff811115612d4957612d486125fa565b5b612d5585828601612cbe565b92509250509250929050565b612d6a8161261f565b82525050565b6000606082019050612d8560008301866126d3565b8181036020830152612d97818561287c565b9050612da66040830184612d61565b949350505050565b6000819050919050565b612dc181612dae565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b600060208284031215612dfa57612df96125f5565b5b6000612e0884828501612dcf565b91505092915050565b60008060408385031215612e2857612e276125f5565b5b6000612e3685828601612648565b9250506020612e4785828601612648565b9150509250929050565b60008060008060008060a08789031215612e6e57612e6d6125f5565b5b6000612e7c89828a01612648565b9650506020612e8d89828a01612648565b9550506040612e9e89828a0161267e565b9450506060612eaf89828a0161267e565b935050608087013567ffffffffffffffff811115612ed057612ecf6125fa565b5b612edc89828a0161293c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f258261265d565b9150612f308361265d565b9250828202612f3e8161265d565b91508282048414831517612f5557612f54612eeb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f968261265d565b9150612fa18361265d565b925082612fb157612fb0612f5c565b5b828204905092915050565b6000612fc78261265d565b9150612fd28361265d565b9250828201905080821115612fea57612fe9612eeb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061303757607f821691505b60208210810361304a57613049612ff0565b5b50919050565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b6000613086600f83612830565b915061309182613050565b602082019050919050565b600060208201905081810360008301526130b581613079565b9050919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006130f2600e83612830565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131628261265d565b915061316d8361265d565b925082820390508181111561318557613184612eeb565b5b92915050565b600080fd5b82818337505050565b60006131a58385612b50565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156131d8576131d761318b565b5b6020830292506131e9838584613190565b82840190509392505050565b60006040820190508181036000830152613210818688613199565b90508181036020830152613225818486613199565b905095945050505050565b600082825260208201905092915050565b82818337600083830152505050565b600061325c8385613230565b9350613269838584613241565b6132728361286b565b840190509392505050565b600060a082019050613292600083018b612d61565b61329f602083018a612d61565b81810360408301526132b281888a613199565b905081810360608301526132c7818688613199565b905081810360808301526132dc818486613250565b90509998505050505050505050565b6000815190506132fa81612729565b92915050565b600060208284031215613316576133156125f5565b5b6000613324848285016132eb565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b6000613363601083612830565b915061336e8261332d565b602082019050919050565b6000602082019050818103600083015261339281613356565b9050919050565b600081905092915050565b60006133af82612825565b6133b98185613399565b93506133c9818560208601612841565b80840191505092915050565b60006133e182846133a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006134278385613399565b9350613434838584613241565b82840190509392505050565b600061344d82848661341b565b91508190509392505050565b7f417373657420616c726561647920657869737473000000000000000000000000600082015250565b600061348f601483612830565b915061349a82613459565b602082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826134ea565b61353186836134ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061356e6135696135648461265d565b613549565b61265d565b9050919050565b6000819050919050565b61358883613553565b61359c61359482613575565b8484546134f7565b825550505050565b600090565b6135b16135a4565b6135bc81848461357f565b505050565b5b818110156135e0576135d56000826135a9565b6001810190506135c2565b5050565b601f821115613625576135f6816134c5565b6135ff846134da565b8101602085101561360e578190505b61362261361a856134da565b8301826135c1565b50505b505050565b600082821c905092915050565b60006136486000198460080261362a565b1980831691505092915050565b60006136618383613637565b9150826002028217905092915050565b61367a82612825565b67ffffffffffffffff811115613693576136926133ec565b5b61369d825461301f565b6136a88282856135e4565b600060209050601f8311600181146136db57600084156136c9578287015190505b6136d38582613655565b86555061373b565b601f1984166136e9866134c5565b60005b82811015613711578489015182556001820191506020850194506020810190506136ec565b8683101561372e578489015161372a601f891682613637565b8355505b6001600288020188555050505b505050505050565b600061374f8385612830565b935061375c838584613241565b6137658361286b565b840190509392505050565b6000602082019050818103600083015261378b818486613743565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b60006137e86137e36137de846137c3565b613549565b61265d565b9050919050565b6137f8816137cd565b82525050565b600060608201905061381360008301866126d3565b61382060208301856137ef565b61382d60408301846137ef565b949350505050565b7f417373657420646f6573206e6f74206578697374000000000000000000000000600082015250565b600061386b601483612830565b915061387682613835565b602082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006138d7601483612830565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060608201905061392260008301866126d3565b61392f60208301856126d3565b61393c60408301846126d3565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006139c0601483612830565b91506139cb8261398a565b602082019050919050565b600060208201905081810360008301526139ef816139b3565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613a2c601483612830565b9150613a37826139f6565b602082019050919050565b60006020820190508181036000830152613a5b81613a1f565b9050919050565b7f537570706c79206e6f7420616c6c6f7765642062656c6f77207072656d696e7460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b6000613abe602783612830565b9150613ac982613a62565b604082019050919050565b60006020820190508181036000830152613aed81613ab1565b9050919050565b6000604082019050613b0960008301856126d3565b613b1660208301846126d3565b9392505050565b600060a082019050613b326000830189612d61565b613b3f6020830188612d61565b613b4c60408301876126d3565b613b5960608301866126d3565b8181036080830152613b6c818486613250565b9050979650505050505050565b600081519050919050565b6000613b8f82613b79565b613b998185613230565b9350613ba9818560208601612841565b613bb28161286b565b840191505092915050565b600060a082019050613bd26000830188612d61565b613bdf6020830187612d61565b613bec60408301866126d3565b613bf960608301856126d3565b8181036080830152613c0b8184613b84565b9050969550505050505056fea2646970667358221220963cee2b632c111bc5d2e853038cbfeb52f85863d3119c7c9e90b9131b1ba8a664736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101805760003560e01c8063b6a46b3b116100d1578063d79875eb1161008a578063e0e1b2c011610064578063e0e1b2c01461060a578063e985e9c514610647578063f242432a14610684578063fe313112146106ad57610180565b8063d79875eb1461058b578063da23eb63146105b4578063e07b098a146105df57610180565b8063b6a46b3b14610450578063bd85b03914610479578063c157253d146104b6578063cd9c7121146104f3578063cf35bdd014610530578063d6febde81461056f57610180565b80634e1273f41161013e5780637ffb25ac116101185780637ffb25ac146103825780639477d85d146103ad578063a22cb465146103ea578063b5dfd7351461041357610180565b80634e1273f4146102cb5780635cf4ee91146103085780636a8a69aa1461034557610180565b8062fdd58e1461018557806301ffc9a7146101c2578063063a741f146101ff5780630e89341c1461023c5780632eb2c2d6146102795780634cc82215146102a2575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612693565b6106ea565b6040516101b991906126e2565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190612755565b61070f565b6040516101f6919061279d565b60405180910390f35b34801561020b57600080fd5b50610226600480360381019061022191906127b8565b6107a1565b60405161023391906126e2565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906127f8565b6107f0565b60405161027091906128b5565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612992565b610898565b005b3480156102ae57600080fd5b506102c960048036038101906102c491906127f8565b610cf4565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612ac4565b610f4f565b6040516102ff9190612c03565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127b8565b6110b8565b60405161033c91906126e2565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612693565b611114565b60405161037991906126e2565b60405180910390f35b34801561038e57600080fd5b50610397611145565b6040516103a491906126e2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127b8565b611151565b6040516103e191906126e2565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612c51565b611183565b005b34801561041f57600080fd5b5061043a60048036038101906104359190612c91565b611280565b6040516104479190612c03565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612d14565b611317565b005b34801561048557600080fd5b506104a0600480360381019061049b91906127f8565b611640565b6040516104ad91906126e2565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906127b8565b611658565b6040516104ea91906126e2565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906127b8565b61167f565b60405161052791906126e2565b60405180910390f35b34801561053c57600080fd5b50610557600480360381019061055291906127f8565b6116ce565b60405161056693929190612d70565b60405180910390f35b610589600480360381019061058491906127b8565b6117a0565b005b34801561059757600080fd5b506105b260048036038101906105ad91906127b8565b611a29565b005b3480156105c057600080fd5b506105c9611dce565b6040516105d691906126e2565b60405180910390f35b3480156105eb57600080fd5b506105f4611dd9565b60405161060191906126e2565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612de4565b611ddf565b60405161063e91906126e2565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190612e11565b611df7565b60405161067b919061279d565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612e51565b611e26565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906127f8565b6121d9565b6040516106e191906126e2565b60405180910390f35b6000602052816000526040600020602052806000526040600020600091509150505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076a575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079a5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806107ae8484611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836107ce9190612f1a565b6107d89190612f8b565b905080826107e69190612fbc565b9250505092915050565b60606003600083815260200190815260200160002060010180546108139061301f565b80601f016020809104026020016040519081016040528092919081815260200182805461083f9061301f565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b50505050509050919050565b8383905086869050146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061309c565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a05750600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613108565b60405180910390fd5b60008060005b88889050811015610aff57888882818110610a0357610a02613128565b5b905060200201359250868682818110610a1f57610a1e613128565b5b905060200201359150816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a879190613157565b92505081905550816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610aed9190612fbc565b925050819055508060010190506109e5565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610b7a94939291906131f5565b60405180910390a460008973ffffffffffffffffffffffffffffffffffffffff163b14610c775763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff1663bc197c81338d8c8c8c8c8c8c6040518963ffffffff1660e01b8152600401610c0f98979695949392919061327d565b6020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ca9565b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613379565b60405180910390fd5b50505050505050505050565b60006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d2e9061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a9061301f565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008260200151604051602001610e8a91906133d5565b6040516020818303038152906040528051906020012081526020019081526020016000206000905560036000838152602001908152602001600020600080820160009055600182016000610ede9190612598565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550503373ffffffffffffffffffffffffffffffffffffffff16827fe52b7042a48e37bfb277e8a210794950be40bfaedea374e2dfbe0c6edff8791d60405160405180910390a35050565b6060828290508585905014610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061309c565b60405180910390fd5b8484905067ffffffffffffffff811115610fb657610fb56133ec565b5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b858590508110156110af5760008087878481811061100b5761100a613128565b5b90506020020160208101906110209190612c91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061106f5761106e613128565b5b9050602002013581526020019081526020016000205482828151811061109857611097613128565b5b602002602001018181525050806001019050610fea565b50949350505050565b600061c350670de0b6b3a7640000806110d0866121f1565b6110e486886110df9190612fbc565b6121f1565b6110ee9190613157565b6110f89190612f8b565b6111029190612f8b565b61110c9190612f8b565b905092915050565b6004602052816000526040600020818154811061113057600080fd5b90600052602060002001600091509150505481565b670de0b6b3a764000081565b600061117b8260066000868152602001908152602001600020546111759190613157565b836110b8565b905092915050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611274919061279d565b60405180910390a35050565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561130b57602002820191906000526020600020905b8154815260200190600101908083116112f7575b50505050509050919050565b6000828260405160200161132c929190613440565b604051602081830303815290604052805190602001209050600060056000838152602001908152602001600020541461139a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611391906134a5565b60405180910390fd5b60006002549050604051806060016040528082815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360008381526020019081526020016000206000820151816000015560208201518160010190816114489190613671565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055806005600084815260200190815260200160002081905550670de0b6b3a764000060066000838152602001908152602001600020600082825461153c9190612fbc565b925050819055506001816115509190612fbc565b6002819055506115793382670de0b6b3a764000060405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16817fb683691564ab594b1f9e9db91abaf085736871256a4741baa41bf30cb9d4f23686866040516115c2929190613770565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff1681600060028111156115f6576115f5613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e670de0b6b3a7640000600080604051611632939291906137fe565b60405180910390a450505050565b60066020528060005260406000206000915090505481565b60006116776006600085815260200190815260200160002054836110b8565b905092915050565b60008061168c8484611151565b90506000670de0b6b3a764000066b1a2bc2ec50000836116ac9190612f1a565b6116b69190612f8b565b905080826116c49190613157565b9250505092915050565b60036020528060005260406000206000915090508060000154908060010180546116f79061301f565b80601f01602080910402602001604051908101604052809291908181526020018280546117239061301f565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60025482106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613881565b60405180910390fd5b60006117f08383611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836118109190612f1a565b61181a9190612f8b565b905080826118289190612fbc565b34101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906138ed565b60405180910390fd5b8260066000868152602001908152602001600020600082825461188d9190612fbc565b92505081905550816007600086815260200190815260200160002060008282546118b79190612fbc565b925050819055506118d933858560405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16846001600281111561190557611904613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e8686866040516119389392919061390d565b60405180910390a460006003600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161199c90613975565b60006040518083038185875af1925050503d80600081146119d9576040519150601f19603f3d011682016040523d82523d6000602084013e6119de565b606091505b5050905080611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906139d6565b60405180910390fd5b5050505050565b6002548210611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613881565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690613a42565b60405180910390fd5b600060066000848152602001908152602001600020549050670de0b6b3a76400008282611b2c9190613157565b1015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613ad4565b60405180910390fd5b6000611b798484611151565b90506000670de0b6b3a764000066b1a2bc2ec5000083611b999190612f1a565b611ba39190612f8b565b9050611bb03386866124ae565b8383611bbc9190613157565b600660008781526020019081526020016000208190555081600760008781526020019081526020016000206000828254611bf69190613157565b925050819055503373ffffffffffffffffffffffffffffffffffffffff1685600280811115611c2857611c27613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e878686604051611c5b9392919061390d565b60405180910390a460003373ffffffffffffffffffffffffffffffffffffffff168284611c889190613157565b604051611c9490613975565b60006040518083038185875af1925050503d8060008114611cd1576040519150601f19603f3d011682016040523d82523d6000602084013e611cd6565b606091505b5050905060006003600088815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611d3690613975565b60006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b50509050818015611d865750805b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906139d6565b60405180910390fd5b50505050505050565b66b1a2bc2ec5000081565b60025481565b60056020528060005260406000206000915090505481565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee65750600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613108565b60405180910390fd5b826000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611f849190613157565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611fea9190612fbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612067929190613af4565b60405180910390a460008573ffffffffffffffffffffffffffffffffffffffff163b146121605763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b81526004016120f896959493929190613b1d565b6020604051808303816000875af1158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612192565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613379565b60405180910390fd5b505050505050565b60076020528060005260406000206000915090505481565b6000670de0b6b3a764000082111561225857670de0b6b3a7640000826122179190613157565b670de0b6b3a76400008361222b9190613157565b670de0b6b3a76400008461223f9190613157565b6122499190612f1a565b6122539190612f1a565b61225b565b60005b9050919050565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546122c19190612fbc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161233f929190613af4565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b146124375763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b81526004016123cf959493929190613bbd565b6020604051808303816000875af11580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613379565b60405180910390fd5b50505050565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461250d9190613157565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161258b929190613af4565b60405180910390a4505050565b5080546125a49061301f565b6000825580601f106125b657506125d5565b601f0160209004906000526020600020908101906125d491906125d8565b5b50565b5b808211156125f15760008160009055506001016125d9565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061262a826125ff565b9050919050565b61263a8161261f565b811461264557600080fd5b50565b60008135905061265781612631565b92915050565b6000819050919050565b6126708161265d565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b600080604083850312156126aa576126a96125f5565b5b60006126b885828601612648565b92505060206126c98582860161267e565b9150509250929050565b6126dc8161265d565b82525050565b60006020820190506126f760008301846126d3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612732816126fd565b811461273d57600080fd5b50565b60008135905061274f81612729565b92915050565b60006020828403121561276b5761276a6125f5565b5b600061277984828501612740565b91505092915050565b60008115159050919050565b61279781612782565b82525050565b60006020820190506127b2600083018461278e565b92915050565b600080604083850312156127cf576127ce6125f5565b5b60006127dd8582860161267e565b92505060206127ee8582860161267e565b9150509250929050565b60006020828403121561280e5761280d6125f5565b5b600061281c8482850161267e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285f578082015181840152602081019050612844565b60008484015250505050565b6000601f19601f8301169050919050565b600061288782612825565b6128918185612830565b93506128a1818560208601612841565b6128aa8161286b565b840191505092915050565b600060208201905081810360008301526128cf818461287c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128fc576128fb6128d7565b5b8235905067ffffffffffffffff811115612919576129186128dc565b5b602083019150836020820283011115612935576129346128e1565b5b9250929050565b60008083601f840112612952576129516128d7565b5b8235905067ffffffffffffffff81111561296f5761296e6128dc565b5b60208301915083600182028301111561298b5761298a6128e1565b5b9250929050565b60008060008060008060008060a0898b0312156129b2576129b16125f5565b5b60006129c08b828c01612648565b98505060206129d18b828c01612648565b975050604089013567ffffffffffffffff8111156129f2576129f16125fa565b5b6129fe8b828c016128e6565b9650965050606089013567ffffffffffffffff811115612a2157612a206125fa565b5b612a2d8b828c016128e6565b9450945050608089013567ffffffffffffffff811115612a5057612a4f6125fa565b5b612a5c8b828c0161293c565b92509250509295985092959890939650565b60008083601f840112612a8457612a836128d7565b5b8235905067ffffffffffffffff811115612aa157612aa06128dc565b5b602083019150836020820283011115612abd57612abc6128e1565b5b9250929050565b60008060008060408587031215612ade57612add6125f5565b5b600085013567ffffffffffffffff811115612afc57612afb6125fa565b5b612b0887828801612a6e565b9450945050602085013567ffffffffffffffff811115612b2b57612b2a6125fa565b5b612b37878288016128e6565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b7a8161265d565b82525050565b6000612b8c8383612b71565b60208301905092915050565b6000602082019050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bc583612b61565b8060005b83811015612bf6578151612bdd8882612b80565b9750612be883612b98565b925050600181019050612bc9565b5085935050505092915050565b60006020820190508181036000830152612c1d8184612ba5565b905092915050565b612c2e81612782565b8114612c3957600080fd5b50565b600081359050612c4b81612c25565b92915050565b60008060408385031215612c6857612c676125f5565b5b6000612c7685828601612648565b9250506020612c8785828601612c3c565b9150509250929050565b600060208284031215612ca757612ca66125f5565b5b6000612cb584828501612648565b91505092915050565b60008083601f840112612cd457612cd36128d7565b5b8235905067ffffffffffffffff811115612cf157612cf06128dc565b5b602083019150836001820283011115612d0d57612d0c6128e1565b5b9250929050565b60008060208385031215612d2b57612d2a6125f5565b5b600083013567ffffffffffffffff811115612d4957612d486125fa565b5b612d5585828601612cbe565b92509250509250929050565b612d6a8161261f565b82525050565b6000606082019050612d8560008301866126d3565b8181036020830152612d97818561287c565b9050612da66040830184612d61565b949350505050565b6000819050919050565b612dc181612dae565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b600060208284031215612dfa57612df96125f5565b5b6000612e0884828501612dcf565b91505092915050565b60008060408385031215612e2857612e276125f5565b5b6000612e3685828601612648565b9250506020612e4785828601612648565b9150509250929050565b60008060008060008060a08789031215612e6e57612e6d6125f5565b5b6000612e7c89828a01612648565b9650506020612e8d89828a01612648565b9550506040612e9e89828a0161267e565b9450506060612eaf89828a0161267e565b935050608087013567ffffffffffffffff811115612ed057612ecf6125fa565b5b612edc89828a0161293c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f258261265d565b9150612f308361265d565b9250828202612f3e8161265d565b91508282048414831517612f5557612f54612eeb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f968261265d565b9150612fa18361265d565b925082612fb157612fb0612f5c565b5b828204905092915050565b6000612fc78261265d565b9150612fd28361265d565b9250828201905080821115612fea57612fe9612eeb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061303757607f821691505b60208210810361304a57613049612ff0565b5b50919050565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b6000613086600f83612830565b915061309182613050565b602082019050919050565b600060208201905081810360008301526130b581613079565b9050919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006130f2600e83612830565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131628261265d565b915061316d8361265d565b925082820390508181111561318557613184612eeb565b5b92915050565b600080fd5b82818337505050565b60006131a58385612b50565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156131d8576131d761318b565b5b6020830292506131e9838584613190565b82840190509392505050565b60006040820190508181036000830152613210818688613199565b90508181036020830152613225818486613199565b905095945050505050565b600082825260208201905092915050565b82818337600083830152505050565b600061325c8385613230565b9350613269838584613241565b6132728361286b565b840190509392505050565b600060a082019050613292600083018b612d61565b61329f602083018a612d61565b81810360408301526132b281888a613199565b905081810360608301526132c7818688613199565b905081810360808301526132dc818486613250565b90509998505050505050505050565b6000815190506132fa81612729565b92915050565b600060208284031215613316576133156125f5565b5b6000613324848285016132eb565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b6000613363601083612830565b915061336e8261332d565b602082019050919050565b6000602082019050818103600083015261339281613356565b9050919050565b600081905092915050565b60006133af82612825565b6133b98185613399565b93506133c9818560208601612841565b80840191505092915050565b60006133e182846133a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006134278385613399565b9350613434838584613241565b82840190509392505050565b600061344d82848661341b565b91508190509392505050565b7f417373657420616c726561647920657869737473000000000000000000000000600082015250565b600061348f601483612830565b915061349a82613459565b602082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826134ea565b61353186836134ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061356e6135696135648461265d565b613549565b61265d565b9050919050565b6000819050919050565b61358883613553565b61359c61359482613575565b8484546134f7565b825550505050565b600090565b6135b16135a4565b6135bc81848461357f565b505050565b5b818110156135e0576135d56000826135a9565b6001810190506135c2565b5050565b601f821115613625576135f6816134c5565b6135ff846134da565b8101602085101561360e578190505b61362261361a856134da565b8301826135c1565b50505b505050565b600082821c905092915050565b60006136486000198460080261362a565b1980831691505092915050565b60006136618383613637565b9150826002028217905092915050565b61367a82612825565b67ffffffffffffffff811115613693576136926133ec565b5b61369d825461301f565b6136a88282856135e4565b600060209050601f8311600181146136db57600084156136c9578287015190505b6136d38582613655565b86555061373b565b601f1984166136e9866134c5565b60005b82811015613711578489015182556001820191506020850194506020810190506136ec565b8683101561372e578489015161372a601f891682613637565b8355505b6001600288020188555050505b505050505050565b600061374f8385612830565b935061375c838584613241565b6137658361286b565b840190509392505050565b6000602082019050818103600083015261378b818486613743565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b60006137e86137e36137de846137c3565b613549565b61265d565b9050919050565b6137f8816137cd565b82525050565b600060608201905061381360008301866126d3565b61382060208301856137ef565b61382d60408301846137ef565b949350505050565b7f417373657420646f6573206e6f74206578697374000000000000000000000000600082015250565b600061386b601483612830565b915061387682613835565b602082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006138d7601483612830565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060608201905061392260008301866126d3565b61392f60208301856126d3565b61393c60408301846126d3565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006139c0601483612830565b91506139cb8261398a565b602082019050919050565b600060208201905081810360008301526139ef816139b3565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613a2c601483612830565b9150613a37826139f6565b602082019050919050565b60006020820190508181036000830152613a5b81613a1f565b9050919050565b7f537570706c79206e6f7420616c6c6f7765642062656c6f77207072656d696e7460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b6000613abe602783612830565b9150613ac982613a62565b604082019050919050565b60006020820190508181036000830152613aed81613ab1565b9050919050565b6000604082019050613b0960008301856126d3565b613b1660208301846126d3565b9392505050565b600060a082019050613b326000830189612d61565b613b3f6020830188612d61565b613b4c60408301876126d3565b613b5960608301866126d3565b8181036080830152613b6c818486613250565b9050979650505050505050565b600081519050919050565b6000613b8f82613b79565b613b998185613230565b9350613ba9818560208601612841565b613bb28161286b565b840191505092915050565b600060a082019050613bd26000830188612d61565b613bdf6020830187612d61565b613bec60408301866126d3565b613bf960608301856126d3565b8181036080830152613c0b8184613b84565b9050969550505050505056fea2646970667358221220963cee2b632c111bc5d2e853038cbfeb52f85863d3119c7c9e90b9131b1ba8a664736f6c63430008120033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.