ETH Price: $3,115.44 (+0.58%)
Gas: 4 Gwei

Contract

0x313416870A4da6F12505a550B67bB73c8E21D5d3
 

Overview

ETH Balance

385.318883844453124784 ETH

Eth Value

$1,200,436.89 (@ $3,115.44/ETH)

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Value
Receive By Ether...198979212024-05-18 16:08:3510 mins ago1716048515IN
Sora: HASHI
0 ETH0.00050483.49248018
Send Eth To Side...198977412024-05-18 15:31:5947 mins ago1716046319IN
Sora: HASHI
0.008 ETH0.000099673.82002294
Send ERC20To Sid...198975512024-05-18 14:53:231 hr ago1716044003IN
Sora: HASHI
0 ETH0.000375467.23682591
Receive By Sidec...198974782024-05-18 14:38:471 hr ago1716043127IN
Sora: HASHI
0 ETH0.000797456
Send Eth To Side...198973452024-05-18 14:12:112 hrs ago1716041531IN
Sora: HASHI
0.376 ETH0.000154195.90942773
Send Eth To Side...198972692024-05-18 13:56:592 hrs ago1716040619IN
Sora: HASHI
0.099 ETH0.000087743.36266812
Send ERC20To Sid...198971152024-05-18 13:25:592 hrs ago1716038759IN
Sora: HASHI
0 ETH0.000310966
Send ERC20To Sid...198967432024-05-18 12:11:234 hrs ago1716034283IN
Sora: HASHI
0 ETH0.000312146
Send Eth To Side...198967382024-05-18 12:10:234 hrs ago1716034223IN
Sora: HASHI
0.015 ETH0.000082443.15954823
Receive By Ether...198965602024-05-18 11:34:114 hrs ago1716032051IN
Sora: HASHI
0 ETH0.000397783.24811129
Send ERC20To Sid...198962382024-05-18 10:29:235 hrs ago1716028163IN
Sora: HASHI
0 ETH0.000283276
Send ERC20To Sid...198962372024-05-18 10:29:115 hrs ago1716028151IN
Sora: HASHI
0 ETH0.000310966
Send ERC20To Sid...198960952024-05-18 10:00:116 hrs ago1716026411IN
Sora: HASHI
0 ETH0.000162083.44260568
Send ERC20To Sid...198959052024-05-18 9:21:596 hrs ago1716024119IN
Sora: HASHI
0 ETH0.000155133.2975858
Send ERC20To Sid...198958562024-05-18 9:12:117 hrs ago1716023531IN
Sora: HASHI
0 ETH0.000181153.49158062
Send Eth To Side...198955582024-05-18 8:11:358 hrs ago1716019895IN
Sora: HASHI
1 ETH0.000087683.36196954
Send ERC20To Sid...198955542024-05-18 8:10:478 hrs ago1716019847IN
Sora: HASHI
0 ETH0.000184593.31165517
Send ERC20To Sid...198955272024-05-18 8:05:238 hrs ago1716019523IN
Sora: HASHI
0 ETH0.000310966
Receive By Ether...198952312024-05-18 7:05:359 hrs ago1716015935IN
Sora: HASHI
0 ETH0.000389243.17812662
Send ERC20To Sid...198952252024-05-18 7:04:239 hrs ago1716015863IN
Sora: HASHI
0 ETH0.00031086
Send Eth To Side...198951972024-05-18 6:58:359 hrs ago1716015515IN
Sora: HASHI
0.84 ETH0.000082583.16639796
Send Eth To Side...198943112024-05-18 3:59:4712 hrs ago1716004787IN
Sora: HASHI
0.00979684 ETH0.000117894.51840986
Receive By Ether...198942892024-05-18 3:55:1112 hrs ago1716004511IN
Sora: HASHI
0 ETH0.000496034.04998806
Receive By Sidec...198942702024-05-18 3:51:2312 hrs ago1716004283IN
Sora: HASHI
0 ETH0.001032177.04219613
Send Eth To Side...198941922024-05-18 3:35:3512 hrs ago1716003335IN
Sora: HASHI
0.00568936 ETH0.000107724.1284945
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
198965602024-05-18 11:34:114 hrs ago1716032051
Sora: HASHI
0.05318229 ETH
198952312024-05-18 7:05:359 hrs ago1716015935
Sora: HASHI
0.06542361 ETH
198942892024-05-18 3:55:1112 hrs ago1716004511
Sora: HASHI
0.04220907 ETH
198893512024-05-17 11:19:5928 hrs ago1715944799
Sora: HASHI
1.36626826 ETH
198884522024-05-17 8:18:4732 hrs ago1715933927
Sora: HASHI
1.28718861 ETH
198884252024-05-17 8:13:2332 hrs ago1715933603
Sora: HASHI
0.62937659 ETH
198882582024-05-17 7:38:5932 hrs ago1715931539
Sora: HASHI
0.135 ETH
198847612024-05-16 19:55:5944 hrs ago1715889359
Sora: HASHI
0.15965861 ETH
198847532024-05-16 19:54:2344 hrs ago1715889263
Sora: HASHI
1.70951954 ETH
198847042024-05-16 19:44:2344 hrs ago1715888663
Sora: HASHI
5.04484023 ETH
198838052024-05-16 16:43:1147 hrs ago1715877791
Sora: HASHI
0.28487826 ETH
198821952024-05-16 11:19:352 days ago1715858375
Sora: HASHI
4.005 ETH
198802872024-05-16 4:55:232 days ago1715835323
Sora: HASHI
0.9 ETH
198799922024-05-16 3:55:472 days ago1715831747
Sora: HASHI
0.24785565 ETH
198797692024-05-16 3:10:472 days ago1715829047
Sora: HASHI
0.08402071 ETH
198794512024-05-16 2:06:592 days ago1715825219
Sora: HASHI
0.15 ETH
198776332024-05-15 20:00:352 days ago1715803235
Sora: HASHI
0.06501847 ETH
198773182024-05-15 18:56:592 days ago1715799419
Sora: HASHI
1.84015279 ETH
198771602024-05-15 18:25:232 days ago1715797523
Sora: HASHI
1.02257995 ETH
198771592024-05-15 18:25:112 days ago1715797511
Sora: HASHI
0.24105183 ETH
198761332024-05-15 14:59:233 days ago1715785163
Sora: HASHI
0.50664036 ETH
198760532024-05-15 14:43:113 days ago1715784191
Sora: HASHI
0.33869028 ETH
198737862024-05-15 7:08:233 days ago1715756903
Sora: HASHI
2.09199824 ETH
198732692024-05-15 5:24:473 days ago1715750687
Sora: HASHI
0.10248246 ETH
198710362024-05-14 21:55:353 days ago1715723735
Sora: HASHI
2.89719054 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bridge

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 10 : Bridge.sol
// SPDX-License-Identifier: Apache 2.0

pragma solidity =0.8.17;

import "./MasterToken.sol";
import "./Ownable.sol";
import "./ERC20Burnable.sol";
import "./SafeERC20.sol";
import "./EthTokenReciever.sol";

/**
 * Provides functionality of the HASHI bridge
 */
contract Bridge is EthTokenReciever {
    using SafeERC20 for IERC20;

    bool internal initialized_;
    bool internal preparedForMigration_;

    mapping(address => bool) public isPeer;
    uint256 public peersCount;

    /** Substrate proofs used */
    mapping(bytes32 => bool) public used;
    mapping(address => bool) public _uniqueAddresses;

    /** White list of ERC-20 ethereum native tokens */
    mapping(address => bool) public acceptedEthTokens;

    /** White lists of ERC-20 SORA native tokens
     * We use several representations of the white list for optimisation purposes.
     */
    mapping(bytes32 => address) public _sidechainTokens;
    mapping(address => bytes32) public _sidechainTokensByAddress;
    address[] public _sidechainTokenAddressArray;

    /**
     * For XOR and VAL use old token contracts, created for SORA 1 bridge.
     * Also for XOR and VAL transfers from SORA 2 to Ethereum old bridges will be used.
     */
    address public immutable _addressVAL;
    address public immutable _addressXOR;
    /** EVM netowrk ID */
    bytes32 public immutable _networkId;

    event Withdrawal(bytes32 txHash);
    event Deposit(
        bytes32 destination,
        uint256 amount,
        address token,
        bytes32 sidechainAsset
    );
    event ChangePeers(address peerId, bool removal);
    event PreparedForMigration();
    event Migrated(address to);

    /**
     * Constructor.
     * @param initialPeers - list of initial bridge validators on substrate side.
     * @param addressVAL address of VAL token Contract
     * @param addressXOR address of XOR token Contract
     * @param networkId id of current EvM network used for bridge purpose.
     */
    constructor(
        address[] memory initialPeers,
        address[] memory sidechainTokenAddresses,
        bytes32[] memory sidechainAssetIds,
        address[] memory erc20Addresses,
        address addressVAL,
        address addressXOR,
        bytes32 networkId
    ) {
        require(
            sidechainAssetIds.length == sidechainTokenAddresses.length,
            "Length mismatch"
        );

        for (uint256 i; i < initialPeers.length; i++) {
            addPeer(initialPeers[i]);
        }
        _addressXOR = addressXOR;
        _addressVAL = addressVAL;
        _networkId = networkId;
        initialized_ = true;

        acceptedEthTokens[addressXOR] = true;
        acceptedEthTokens[addressVAL] = true;

        for (uint256 i; i < sidechainTokenAddresses.length; i++) {
            address tokenAddress = sidechainTokenAddresses[i];
            bytes32 assetId = sidechainAssetIds[i];
            _sidechainTokens[assetId] = tokenAddress;
            _sidechainTokensByAddress[tokenAddress] = assetId;
            _sidechainTokenAddressArray.push(tokenAddress);
        }
        uint256 erc20TokensCount = erc20Addresses.length;
        for (uint256 i; i < erc20TokensCount; i++) {
            acceptedEthTokens[erc20Addresses[i]] = true;
        }
    }

    modifier shouldBeInitialized() {
        require(
            initialized_ == true,
            "Contract should be initialized to use this function"
        );
        _;
    }

    modifier shouldNotBePreparedForMigration() {
        require(
            preparedForMigration_ == false,
            "Contract should not be prepared for migration to use this function"
        );
        _;
    }

    modifier shouldBePreparedForMigration() {
        require(
            preparedForMigration_ == true,
            "Contract should be prepared for migration to use this function"
        );
        _;
    }

    fallback() external {
        revert();
    }

    receive() external payable {
        revert();
    }

    /*
    Used only for migration
    */
    function receivePayment() external payable override {}

    /**
     * Adds new token to whitelist.
     * Token should not been already added.
     *
     * @param newToken new token contract address
     * @param ticker token ticker (symbol)
     * @param name token title
     * @param decimals count of token decimal places
     * @param txHash transaction hash from sidechain
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function addEthNativeToken(
        address newToken,
        string memory ticker,
        string memory name,
        uint8 decimals,
        bytes32 txHash,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized {
        require(used[txHash] == false, "txHash already used");
        require(
            acceptedEthTokens[newToken] == false,
            "ERC20 token is not whitelisted"
        );
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "addToken",
                        address(this),
                        newToken,
                        ticker,
                        name,
                        decimals,
                        txHash,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[txHash] = true;
        acceptedEthTokens[newToken] = true;
    }

    /**
     * Preparations for migration to new Bridge contract
     *
     * @param salt unique data used for signature
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function prepareForMigration(
        bytes32 salt,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized shouldNotBePreparedForMigration {
        require(used[salt] == false, "txHash already used");
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "prepareMigration",
                        address(this),
                        salt,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[salt] = true;
        preparedForMigration_ = true;
        emit PreparedForMigration();
    }

    /**
     * Shutdown this contract and migrate tokens ownership to the new contract.
     *
     * @param salt unique data used for signature generation
     * @param newContractAddress address of the new bridge contract
     * @param erc20nativeTokens list of ERC20 tokens with non zero balances for this contract. Can be taken from substrate bridge peers.
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function shutDownAndMigrate(
        bytes32 salt,
        address payable newContractAddress,
        address[] calldata erc20nativeTokens,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized shouldBePreparedForMigration {
        require(used[salt] == false, "txHash already used");
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "migrate",
                        address(this),
                        newContractAddress,
                        salt,
                        erc20nativeTokens,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[salt] = true;
        uint256 sidechainTokensCount = _sidechainTokenAddressArray.length;
        for (uint256 i; i < sidechainTokensCount; i++) {
            Ownable token = Ownable(_sidechainTokenAddressArray[i]);
            token.transferOwnership(newContractAddress);
        }
        uint256 erc20nativeTokensCount = erc20nativeTokens.length;
        for (uint256 i; i < erc20nativeTokensCount; i++) {
            IERC20 token = IERC20(erc20nativeTokens[i]);
            token.safeTransfer(
                newContractAddress,
                token.balanceOf(address(this))
            );
        }
        EthTokenReciever(newContractAddress).receivePayment{
            value: address(this).balance
        }();
        initialized_ = false;
        emit Migrated(newContractAddress);
    }

    /**
     * Add new token from sidechain to the bridge white list.
     *
     * @param name token title
     * @param symbol token symbol
     * @param decimals number of decimals
     * @param sidechainAssetId token id on the sidechain
     * @param txHash sidechain transaction hash
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function addNewSidechainToken(
        string memory name,
        string memory symbol,
        uint8 decimals,
        bytes32 sidechainAssetId,
        bytes32 txHash,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized {
        require(used[txHash] == false, "txHash already used");
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "addAsset",
                        address(this),
                        name,
                        symbol,
                        decimals,
                        sidechainAssetId,
                        txHash,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[txHash] = true;
        // Create new instance of the token
        MasterToken tokenInstance = new MasterToken(
            name,
            symbol,
            decimals,
            address(this),
            0,
            sidechainAssetId
        );
        address tokenAddress = address(tokenInstance);
        _sidechainTokens[sidechainAssetId] = tokenAddress;
        _sidechainTokensByAddress[tokenAddress] = sidechainAssetId;
        _sidechainTokenAddressArray.push(tokenAddress);
    }

    /**
     * Send Ethereum to sidechain.
     *
     * @param to destionation address on sidechain.
     */
    function sendEthToSidechain(bytes32 to)
        external
        payable
        shouldBeInitialized
        shouldNotBePreparedForMigration
    {
        require(msg.value > 0, "ETH VALUE SHOULD BE MORE THAN 0");
        bytes32 empty;
        emit Deposit(to, msg.value, address(0x0), empty);
    }

    /**
     * Send ERC-20 token to sidechain.
     *
     * @param to destination address on the sidechain
     * @param amount amount to sendERC20ToSidechain
     * @param tokenAddress contract address of token to send
     */
    function sendERC20ToSidechain(
        bytes32 to,
        uint256 amount,
        address tokenAddress
    ) external shouldBeInitialized shouldNotBePreparedForMigration {
        IERC20 token = IERC20(tokenAddress);

        bytes32 sidechainAssetId = _sidechainTokensByAddress[tokenAddress];
        if (
            sidechainAssetId != "" ||
            _addressVAL == tokenAddress ||
            _addressXOR == tokenAddress
        ) {
            ERC20Burnable mtoken = ERC20Burnable(tokenAddress);
            mtoken.burnFrom(msg.sender, amount);
        } else {
            require(
                acceptedEthTokens[tokenAddress],
                "The Token is not accepted for transfer to sidechain"
            );
            uint256 balanceBefore = token.balanceOf(address(this));
            token.safeTransferFrom(msg.sender, address(this), amount);
            uint256 balanceAfter = token.balanceOf(address(this));
            require(
                balanceAfter - balanceBefore >= amount,
                "Not enough tokens transferred"
            );
        }
        emit Deposit(to, amount, tokenAddress, sidechainAssetId);
    }

    /**
     * Add new peer using peers quorum.
     *
     * @param newPeerAddress address of the peer to add
     * @param txHash tx hash from sidechain
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function addPeerByPeer(
        address newPeerAddress,
        bytes32 txHash,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized returns (bool) {
        require(used[txHash] == false, "txHash already used");
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "addPeer",
                        address(this),
                        newPeerAddress,
                        txHash,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[txHash] = true;

        addPeer(newPeerAddress);
        emit ChangePeers(newPeerAddress, false);
        return true;
    }

    /**
     * Remove peer using peers quorum.
     *
     * @param peerAddress address of the peer to remove
     * @param txHash tx hash from sidechain
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function removePeerByPeer(
        address peerAddress,
        bytes32 txHash,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized returns (bool) {
        require(used[txHash] == false, "txHash already used");
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "removePeer",
                        address(this),
                        peerAddress,
                        txHash,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[txHash] = true;

        removePeer(peerAddress);
        emit ChangePeers(peerAddress, true);
        return true;
    }

    /**
     * Withdraws specified amount of ether or one of ERC-20 tokens to provided sidechain address
     * @param tokenAddress address of token to withdraw (0 for ether)
     * @param amount amount of tokens or ether to withdraw
     * @param to target account address
     * @param txHash hash of transaction from sidechain
     * @param from source of transfer
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function receiveByEthereumAssetAddress(
        address tokenAddress,
        uint256 amount,
        address payable to,
        address from,
        bytes32 txHash,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized {
        require(used[txHash] == false, "txHash already used");
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "transfer",
                        address(this),
                        tokenAddress,
                        amount,
                        to,
                        from,
                        txHash,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[txHash] = true;

        if (tokenAddress == address(0)) {
            // untrusted transfer, relies on provided cryptographic proof
            to.transfer(amount);
        } else {
            IERC20 coin = IERC20(tokenAddress);
            // untrusted call, relies on provided cryptographic proof
            coin.safeTransfer(to, amount);
        }
        emit Withdrawal(txHash);
    }

    /**
     * Mint new Token
     * @param sidechainAssetId id of sidechainToken to mint
     * @param amount how much to mint
     * @param to destination address
     * @param from sender address
     * @param txHash hash of transaction from Iroha
     * @param v array of signatures of tx_hash (v-component)
     * @param r array of signatures of tx_hash (r-component)
     * @param s array of signatures of tx_hash (s-component)
     */
    function receiveBySidechainAssetId(
        bytes32 sidechainAssetId,
        uint256 amount,
        address to,
        address from,
        bytes32 txHash,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) external shouldBeInitialized {
        require(
            _sidechainTokens[sidechainAssetId] != address(0x0),
            "Sidechain asset is not registered"
        );
        require(used[txHash] == false, "txHash already used");
        require(
            checkSignatures(
                keccak256(
                    abi.encode(
                        "transferOwned",
                        address(this),
                        sidechainAssetId,
                        amount,
                        to,
                        from,
                        txHash,
                        _networkId
                    )
                ),
                v,
                r,
                s
            ),
            "Peer signatures are invalid"
        );
        used[txHash] = true;

        MasterToken tokenInstance = MasterToken(
            _sidechainTokens[sidechainAssetId]
        );
        tokenInstance.mintTokens(to, amount);
        emit Withdrawal(txHash);
    }

    /**
     * Checks given addresses for duplicates and if they are peers signatures
     * @param hash unsigned data
     * @param v v-component of signature from hash
     * @param r r-component of signature from hash
     * @param s s-component of signature from hash
     * @return true if all given addresses are correct or false otherwise
     */
    function checkSignatures(
        bytes32 hash,
        uint8[] memory v,
        bytes32[] memory r,
        bytes32[] memory s
    ) private returns (bool) {
        require(peersCount >= 1, "peersCount too low");
        uint256 signatureCount = v.length;
        require(
            signatureCount == r.length,
            "signatureCount and r length mismatch"
        );
        require(
            signatureCount == s.length,
            "signatureCount and s length mismatch"
        );
        uint256 needSigs = peersCount - (peersCount - 1) / 3;
        require(signatureCount >= needSigs, "not enough signatures");

        uint256 count;
        address[] memory recoveredAddresses = new address[](signatureCount);
        for (uint256 i; i < signatureCount; ++i) {
            address recoveredAddress = recoverAddress(hash, v[i], r[i], s[i]);

            // not a peer address or not unique
            if (
                isPeer[recoveredAddress] != true ||
                _uniqueAddresses[recoveredAddress] == true
            ) {
                continue;
            }
            recoveredAddresses[count] = recoveredAddress;
            unchecked {
                count = count + 1;
            }
            _uniqueAddresses[recoveredAddress] = true;
        }

        // restore state for future usages
        for (uint256 i; i < count; ++i) {
            _uniqueAddresses[recoveredAddresses[i]] = false;
        }

        return count >= needSigs;
    }

    /**
     * Recovers address from a given single signature
     * @param hash unsigned data
     * @param v v-component of signature from hash
     * @param r r-component of signature from hash
     * @param s s-component of signature from hash
     * @return address recovered from signature
     */
    function recoverAddress(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) private pure returns (address) {
        bytes32 simple_hash = keccak256(
            abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
        );
        address res = ecrecover(simple_hash, v, r, s);
        return res;
    }

    /**
     * Adds new peer to list of signature verifiers.
     * Internal function
     * @param newAddress address of new peer
     */
    function addPeer(address newAddress) internal returns (uint256) {
        require(isPeer[newAddress] == false, "peer already added");
        isPeer[newAddress] = true;
        ++peersCount;
        return peersCount;
    }

    function removePeer(address peerAddress) internal {
        require(isPeer[peerAddress] == true, "peer does not exists");
        isPeer[peerAddress] = false;
        --peersCount;
    }
}

File 3 of 10 : MasterToken.sol
// SPDX-License-Identifier: Apache License 2.0

pragma solidity =0.8.17;

import "./ERC20Detailed.sol";
import "./ERC20Burnable.sol";
import "./Ownable.sol";

contract MasterToken is ERC20Burnable, ERC20Detailed, Ownable {
    bytes32 public _sidechainAssetId;

    /**
     * @dev Constructor that gives the specified address all of existing tokens.
     */
    constructor(
        string memory name,
        string memory symbol,
        uint8 decimals,
        address beneficiary,
        uint256 supply,
        bytes32 sidechainAssetId
    ) ERC20Detailed(name, symbol, decimals) {
        _sidechainAssetId = sidechainAssetId;
        _mint(beneficiary, supply);
    }

    fallback() external {
        revert();
    }

    function mintTokens(address beneficiary, uint256 amount) public onlyOwner {
        _mint(beneficiary, amount);
    }
}

File 4 of 10 : Ownable.sol
// SPDX-License-Identifier: Apache License 2.0

pragma solidity =0.8.17;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Not owner");
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 5 of 10 : ERC20Burnable.sol
// SPDX-License-Identifier: Apache 2.0

pragma solidity =0.8.17;

import "./ERC20.sol";

/**
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 */
contract ERC20Burnable is ERC20 {
    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of token to be burned.
     */
    function burn(uint256 value) public {
        _burn(msg.sender, value);
    }

    /**
     * @dev Burns a specific amount of tokens from the target address and decrements allowance
     * @param from address The address which you want to send tokens from
     * @param value uint256 The amount of token to be burned
     */
    function burnFrom(address from, uint256 value) public {
        _burnFrom(from, value);
    }
}

File 6 of 10 : SafeERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity =0.8.17;

import "./IERC20.sol";
import "./Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

File 7 of 10 : EthTokenReciever.sol
// SPDX-License-Identifier: Apache License 2.0

pragma solidity =0.8.17;

interface EthTokenReciever {
    function receivePayment() external payable;
}

File 8 of 10 : ERC20Detailed.sol
// SPDX-License-Identifier: Apache 2.0

pragma solidity =0.8.17;

import "./IERC20.sol";

/**
 * @title ERC20Detailed token
 * @dev The decimals are only for visualization purposes.
 * All the operations are done using the smallest and indivisible token unit,
 * just as on Ethereum all the operations are done in wei.
 */
abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    /**
     * @return the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @return the symbol of the token.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @return the number of decimals of the token.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

File 9 of 10 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity =0.8.17;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 10 of 10 : ERC20.sol
// SPDX-License-Identifier: Apache 2.0

pragma solidity =0.8.17;

import "./IERC20.sol";

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
 * Originally based on code by FirstBlood:
 * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 *
 * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for
 * all accounts just by listening to said events. Note that this isn't required by the specification, and other
 * compliant implementations may not do it.
 */
contract ERC20 is IERC20 {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowed;

    uint256 private _totalSupply;

    /**
     * @dev Total number of tokens in existence
     */
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev Gets the balance of the specified address.
     * @param owner The address to query the balance of.
     * @return An uint256 representing the amount owned by the passed address.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        return _balances[owner];
    }

    /**
     * @dev Function to check the amount of tokens that an owner allowed to a spender.
     * @param owner address The address which owns the funds.
     * @param spender address The address which will spend the funds.
     * @return A uint256 specifying the amount of tokens still available for the spender.
     */
    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowed[owner][spender];
    }

    /**
     * @dev Transfer token for a specified address
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     */
    function transfer(address to, uint256 value)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, to, value);
        return true;
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * Beware that changing an allowance with this method brings the risk that someone may use both the old
     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value)
        public
        override
        returns (bool)
    {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Transfer tokens from one address to another.
     * Note that while this function emits an Approval event, this is not required as per the specification,
     * and other compliant implementations may not emit the event.
     * @param from address The address which you want to send tokens from
     * @param to address The address which you want to transfer to
     * @param value uint256 the amount of tokens to be transferred
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) public override returns (bool) {
        _transfer(from, to, value);
        _approve(from, msg.sender, _allowed[from][msg.sender] - value);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            _allowed[msg.sender][spender] + addedValue
        );
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     * approve should be called when allowed_[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * Emits an Approval event.
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            _allowed[msg.sender][spender] - subtractedValue
        );
        return true;
    }

    /**
     * @dev Transfer token for a specified addresses
     * @param from The address to transfer from.
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     */
    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal {
        require(to != address(0));

        _balances[from] = _balances[from] - value;
        _balances[to] = _balances[to] + value;
        emit Transfer(from, to, value);
    }

    /**
     * @dev Internal function that mints an amount of the token and assigns it to
     * an account. This encapsulates the modification of balances such that the
     * proper events are emitted.
     * @param account The account that will receive the created tokens.
     * @param value The amount that will be created.
     */
    function _mint(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply + value;
        _balances[account] = _balances[account] + value;
        emit Transfer(address(0), account, value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account.
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply - value;
        _balances[account] = _balances[account] - value;
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Approve an address to spend another addresses' tokens.
     * @param owner The address that owns the tokens.
     * @param spender The address that will spend the tokens.
     * @param value The number of tokens that can be spent.
     */
    function _approve(
        address owner,
        address spender,
        uint256 value
    ) internal {
        require(spender != address(0));
        require(owner != address(0));

        _allowed[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @dev Internal function that burns an amount of the token of a given
     * account, deducting from the sender's allowance for said account. Uses the
     * internal burn function.
     * Emits an Approval event (reflecting the reduced allowance).
     * @param account The account whose tokens will be burnt.
     * @param value The amount that will be burnt.
     */
    function _burnFrom(address account, uint256 value) internal {
        _burn(account, value);
        _approve(account, msg.sender, _allowed[account][msg.sender] - value);
    }
}

File 11 of 10 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity =0.8.17;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"initialPeers","type":"address[]"},{"internalType":"address[]","name":"sidechainTokenAddresses","type":"address[]"},{"internalType":"bytes32[]","name":"sidechainAssetIds","type":"bytes32[]"},{"internalType":"address[]","name":"erc20Addresses","type":"address[]"},{"internalType":"address","name":"addressVAL","type":"address"},{"internalType":"address","name":"addressXOR","type":"address"},{"internalType":"bytes32","name":"networkId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"peerId","type":"address"},{"indexed":false,"internalType":"bool","name":"removal","type":"bool"}],"name":"ChangePeers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"destination","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bytes32","name":"sidechainAsset","type":"bytes32"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"Migrated","type":"event"},{"anonymous":false,"inputs":[],"name":"PreparedForMigration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"txHash","type":"bytes32"}],"name":"Withdrawal","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"_addressVAL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_addressXOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_networkId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_sidechainTokenAddressArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"_sidechainTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sidechainTokensByAddress","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_uniqueAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"acceptedEthTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"},{"internalType":"string","name":"ticker","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addEthNativeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"bytes32","name":"sidechainAssetId","type":"bytes32"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addNewSidechainToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPeerAddress","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"addPeerByPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"prepareForMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"receiveByEthereumAssetAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sidechainAssetId","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"receiveBySidechainAssetId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receivePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"peerAddress","type":"address"},{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"removePeerByPeer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"sendERC20ToSidechain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"to","type":"bytes32"}],"name":"sendEthToSidechain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"address payable","name":"newContractAddress","type":"address"},{"internalType":"address[]","name":"erc20nativeTokens","type":"address[]"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"shutDownAndMigrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"used","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b506040516200430438038062004304833981016040819052620000349162000484565b85518551146200007d5760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b60448201526064015b60405180910390fd5b60005b8751811015620000cd57620000b7888281518110620000a357620000a36200056c565b60200260200101516200027660201b60201c565b5080620000c48162000582565b91505062000080565b506001600160a01b0382811660a0819052908416608081905260c083905260008054600160ff1991821681178355938252600560205260408083208054831686179055928252918120805490921690921790555b8651811015620001f65760008782815181106200014257620001426200056c565b6020026020010151905060008783815181106200016357620001636200056c565b602090810291909101810151600081815260068352604080822080546001600160a01b039097166001600160a01b0319978816811790915580835260079094528120919091556008805460018101825591527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3018054909316179091555080620001ed8162000582565b91505062000121565b50835160005b8181101562000267576001600560008884815181106200022057620002206200056c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806200025e8162000582565b915050620001fc565b505050505050505050620005aa565b6001600160a01b03811660009081526001602052604081205460ff1615620002d65760405162461bcd60e51b81526020600482015260126024820152711c19595c88185b1c9958591e48185919195960721b604482015260640162000074565b6001600160a01b03821660009081526001602081905260408220805460ff19169091179055600280549091906200030d9062000582565b9091555050600254919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200035b576200035b6200031a565b604052919050565b60006001600160401b038211156200037f576200037f6200031a565b5060051b60200190565b80516001600160a01b0381168114620003a157600080fd5b919050565b600082601f830112620003b857600080fd5b81516020620003d1620003cb8362000363565b62000330565b82815260059290921b84018101918181019086841115620003f157600080fd5b8286015b848110156200041757620004098162000389565b8352918301918301620003f5565b509695505050505050565b600082601f8301126200043457600080fd5b8151602062000447620003cb8362000363565b82815260059290921b840181019181810190868411156200046757600080fd5b8286015b848110156200041757805183529183019183016200046b565b600080600080600080600060e0888a031215620004a057600080fd5b87516001600160401b0380821115620004b857600080fd5b620004c68b838c01620003a6565b985060208a0151915080821115620004dd57600080fd5b620004eb8b838c01620003a6565b975060408a01519150808211156200050257600080fd5b620005108b838c0162000422565b965060608a01519150808211156200052757600080fd5b50620005368a828b01620003a6565b945050620005476080890162000389565b92506200055760a0890162000389565b915060c0880151905092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b600060018201620005a357634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c051613ce462000620600039600081816102ea0152818161098601528181610b4301528181610da901528181610f96015281816110df0152818161126101528181611406015261176501526000818161045801526105fd01526000818161028001526105c00152613ce46000f3fe608060405260043610620001575760003560e01c8063835c19f311620000bb578063c29bb3321162000079578063c29bb3321462000444578063ca70cf6e146200047a578063cd550947146200049f578063dab4a4c614620004d0578063dfd9db8914620004f5578063fdfba25d146200051a5762000162565b8063835c19f314620001995780638505e868146200039957806389c39baf14620003d3578063ae6664e014620003f8578063b07c411f14620004105762000162565b80633b69828811620001155780633b698288146200026c5780633e44cf7814620002a25780635fde87c514620002d6578063687a82db146200031b57806375273ece146200034f57806375ff82bd14620003745762000162565b806303ef9d1f146200017457806312c6fa1b146200019b578063135f14e214620001e457806316283134146200020957806323ad7de214620002475762000162565b366200016257600080fd5b3480156200016f57600080fd5b600080fd5b3480156200018157600080fd5b506200019962000193366004620021c5565b62000531565b005b348015620001a857600080fd5b50620001cf620001ba36600462002201565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015620001f157600080fd5b50620001996200020336600462002382565b620008cb565b3480156200021657600080fd5b506200022e6200022836600462002460565b62000ab0565b6040516001600160a01b039091168152602001620001db565b3480156200025457600080fd5b506200019962000266366004620024f1565b62000adb565b3480156200027957600080fd5b506200022e7f000000000000000000000000000000000000000000000000000000000000000081565b348015620002af57600080fd5b50620001cf620002c136600462002201565b60016020526000908152604090205460ff1681565b348015620002e357600080fd5b506200030c7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001db565b3480156200032857600080fd5b50620001cf6200033a36600462002201565b60056020526000908152604090205460ff1681565b3480156200035c57600080fd5b50620001996200036e36600462002590565b62000c7a565b3480156200038157600080fd5b506200019962000393366004620025c7565b62000ed1565b348015620003a657600080fd5b506200022e620003b836600462002460565b6006602052600090815260409020546001600160a01b031681565b348015620003e057600080fd5b50620001cf620003f236600462002663565b6200103b565b3480156200040557600080fd5b506200030c60025481565b3480156200041d57600080fd5b50620001cf6200042f36600462002460565b60036020526000908152604090205460ff1681565b3480156200045157600080fd5b506200022e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156200048757600080fd5b50620001cf6200049936600462002663565b620011c0565b348015620004ac57600080fd5b506200030c620004be36600462002201565b60076020526000908152604090205481565b348015620004dd57600080fd5b5062000199620004ef36600462002763565b6200131a565b3480156200050257600080fd5b5062000199620005143660046200283f565b62001692565b620001996200052b36600462002460565b62001802565b60005460ff161515600114620005645760405162461bcd60e51b81526004016200055b90620028e7565b60405180910390fd5b600054610100900460ff16156200058f5760405162461bcd60e51b81526004016200055b906200293a565b6001600160a01b038116600090815260076020526040902054819080151580620005ea5750826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316145b80620006275750826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316145b15620006985760405163079cc67960e41b81523360048201526024810185905283906001600160a01b038216906379cc679090604401600060405180830381600087803b1580156200067857600080fd5b505af11580156200068d573d6000803e3d6000fd5b505050505062000875565b6001600160a01b03831660009081526005602052604090205460ff166200071e5760405162461bcd60e51b815260206004820152603360248201527f54686520546f6b656e206973206e6f7420616363657074656420666f7220747260448201527230b739b332b9103a379039b4b232b1b430b4b760691b60648201526084016200055b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801562000766573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200078c9190620029a2565b9050620007a56001600160a01b038416333088620018f6565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015620007ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008139190620029a2565b905085620008228383620029d2565b1015620008725760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e73207472616e7366657272656400000060448201526064016200055b565b50505b60408051868152602081018690526001600160a01b038516818301526060810183905290517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050505050565b60005460ff161515600114620008f55760405162461bcd60e51b81526004016200055b90620028e7565b60008481526003602052604090205460ff1615620009275760405162461bcd60e51b81526004016200055b90620029ee565b60408051610100602082018190526008610120830152673a3930b739b332b960c11b61014083015230928201929092526001600160a01b03808b166060830152608082018a905280891660a0830152871660c082015260e081018690527f000000000000000000000000000000000000000000000000000000000000000091810191909152620009d590610160015b6040516020818303038152906040528051906020012084848462001969565b620009f45760405162461bcd60e51b81526004016200055b9062002a1b565b6000848152600360205260409020805460ff191660011790556001600160a01b03881662000a5a576040516001600160a01b0387169088156108fc029089906000818181858888f1935050505015801562000a53573d6000803e3d6000fd5b5062000a73565b8762000a716001600160a01b038216888a62001cea565b505b6040518481527f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9060200160405180910390a15050505050505050565b6008818154811062000ac157600080fd5b6000918252602090912001546001600160a01b0316905081565b60005460ff16151560011462000b055760405162461bcd60e51b81526004016200055b90620028e7565b60008481526003602052604090205460ff161562000b375760405162461bcd60e51b81526004016200055b90620029ee565b62000b7a3089898989897f0000000000000000000000000000000000000000000000000000000000000000604051602001620009b6979695949392919062002aa6565b62000b995760405162461bcd60e51b81526004016200055b9062002a1b565b600084815260036020526040808220805460ff1916600117905551899089908990309085908b9062000bcb906200218c565b62000bdc9695949392919062002b2e565b604051809103906000f08015801562000bf9573d6000803e3d6000fd5b50600087815260066020908152604080832080546001600160a01b039095166001600160a01b0319958616811790915580845260079092528220989098556008805460018101825591527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549091169096179095555050505050505050565b60005460ff16151560011462000ca45760405162461bcd60e51b81526004016200055b90620028e7565b6000888152600660205260409020546001600160a01b031662000d145760405162461bcd60e51b815260206004820152602160248201527f53696465636861696e206173736574206973206e6f74207265676973746572656044820152601960fa1b60648201526084016200055b565b60008481526003602052604090205460ff161562000d465760405162461bcd60e51b81526004016200055b90620029ee565b6040805161010060208201819052600d6101208301526c1d1c985b9cd9995c93dddb9959609a1b6101408301523092820192909252606081018a9052608081018990526001600160a01b0380891660a0830152871660c082015260e081018690527f00000000000000000000000000000000000000000000000000000000000000009181019190915262000dde9061016001620009b6565b62000dfd5760405162461bcd60e51b81526004016200055b9062002a1b565b6000848152600360209081526040808320805460ff191660011790558a8352600690915290819020549051633c37699760e21b81526001600160a01b038881166004830152602482018a905290911690819063f0dda65c90604401600060405180830381600087803b15801562000e7357600080fd5b505af115801562000e88573d6000803e3d6000fd5b505050507f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b8560405162000ebe91815260200190565b60405180910390a1505050505050505050565b60005460ff16151560011462000efb5760405162461bcd60e51b81526004016200055b90620028e7565b600054610100900460ff161562000f265760405162461bcd60e51b81526004016200055b906200293a565b60008481526003602052604090205460ff161562000f585760405162461bcd60e51b81526004016200055b90620029ee565b60408051608060208201819052601060a08301526f383932b830b932a6b4b3b930ba34b7b760811b60c08301523092820192909252606081018690527f00000000000000000000000000000000000000000000000000000000000000009181019190915262000fca9060e001620009b6565b62000fe95760405162461bcd60e51b81526004016200055b9062002a1b565b600084815260036020526040808220805460ff19166001179055815461ff001916610100178255517f5389de9593f75e6515eefa796bd2d3324759f441f2c9b2dcda0efb25190378ff9190a150505050565b6000805460ff161515600114620010665760405162461bcd60e51b81526004016200055b90620028e7565b60008581526003602052604090205460ff1615620010985760405162461bcd60e51b81526004016200055b90620029ee565b6040805160a060208201819052600a60c0830152693932b6b7bb32a832b2b960b11b60e083015230928201929092526001600160a01b0388166060820152608081018790527f0000000000000000000000000000000000000000000000000000000000000000918101919091526200112e90610100015b6040516020818303038152906040528051906020012085858562001969565b6200114d5760405162461bcd60e51b81526004016200055b9062002a1b565b6000858152600360205260409020805460ff19166001179055620011718662001d21565b604080516001600160a01b0388168152600160208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f991015b60405180910390a150600195945050505050565b6000805460ff161515600114620011eb5760405162461bcd60e51b81526004016200055b90620028e7565b60008581526003602052604090205460ff16156200121d5760405162461bcd60e51b81526004016200055b90620029ee565b6040805160a060208201819052600760c08301526630b2322832b2b960c91b60e083015230928201929092526001600160a01b0388166060820152608081018790527f0000000000000000000000000000000000000000000000000000000000000000918101919091526200129690610100016200110f565b620012b55760405162461bcd60e51b81526004016200055b9062002a1b565b6000858152600360205260409020805460ff19166001179055620012d98662001dc1565b50604080516001600160a01b0388168152600060208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f99101620011ac565b60005460ff161515600114620013445760405162461bcd60e51b81526004016200055b90620028e7565b60005460ff610100909104161515600114620013c95760405162461bcd60e51b815260206004820152603e60248201527f436f6e74726163742073686f756c6420626520707265706172656420666f722060448201527f6d6967726174696f6e20746f2075736520746869732066756e6374696f6e000060648201526084016200055b565b60008781526003602052604090205460ff1615620013fb5760405162461bcd60e51b81526004016200055b90620029ee565b6200143c30878988887f0000000000000000000000000000000000000000000000000000000000000000604051602001620009b69695949392919062002b89565b6200145b5760405162461bcd60e51b81526004016200055b9062002a1b565b6000878152600360205260408120805460ff19166001179055600854905b818110156200151e576000600882815481106200149a576200149a62002c26565b60009182526020909120015460405163f2fde38b60e01b81526001600160a01b038b811660048301529091169150819063f2fde38b90602401600060405180830381600087803b158015620014ee57600080fd5b505af115801562001503573d6000803e3d6000fd5b50505050508080620015159062002c3c565b91505062001479565b508460005b81811015620015f757600088888381811062001543576200154362002c26565b90506020020160208101906200155a919062002201565b6040516370a0823160e01b8152306004820152909150620015e1908b906001600160a01b038416906370a0823190602401602060405180830381865afa158015620015a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015cf9190620029a2565b6001600160a01b038416919062001cea565b5080620015ee8162002c3c565b91505062001523565b50876001600160a01b031663835c19f3476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200163457600080fd5b505af115801562001649573d6000803e3d6000fd5b50506000805460ff1916905550506040516001600160a01b038a1681527fa2e7361c23d7820040603b83c0cd3f494d377bac69736377d75bb56c651a5098915060200162000ebe565b60005460ff161515600114620016bc5760405162461bcd60e51b81526004016200055b90620028e7565b60008481526003602052604090205460ff1615620016ee5760405162461bcd60e51b81526004016200055b90620029ee565b6001600160a01b03881660009081526005602052604090205460ff1615620017595760405162461bcd60e51b815260206004820152601e60248201527f455243323020746f6b656e206973206e6f742077686974656c6973746564000060448201526064016200055b565b6200179c3089898989897f0000000000000000000000000000000000000000000000000000000000000000604051602001620009b6979695949392919062002c58565b620017bb5760405162461bcd60e51b81526004016200055b9062002a1b565b5050506000908152600360209081526040808320805460ff1990811660019081179092556001600160a01b0390981684526005909252909120805490951617909355505050565b60005460ff1615156001146200182c5760405162461bcd60e51b81526004016200055b90620028e7565b600054610100900460ff1615620018575760405162461bcd60e51b81526004016200055b906200293a565b60003411620018a95760405162461bcd60e51b815260206004820152601f60248201527f4554482056414c55452053484f554c44204245204d4f5245205448414e20300060448201526064016200055b565b604080518281523460208201526000918101829052606081018290527f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89060800160405180910390a15050565b6040516001600160a01b0380851660248301528316604482015260648101829052620019639085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e65565b50505050565b600060016002541015620019b55760405162461bcd60e51b81526020600482015260126024820152717065657273436f756e7420746f6f206c6f7760701b60448201526064016200055b565b83518351811462001a155760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642072206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b8251811462001a735760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642073206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b60006003600160025462001a889190620029d2565b62001a94919062002ce1565b60025462001aa39190620029d2565b90508082101562001aef5760405162461bcd60e51b81526020600482015260156024820152746e6f7420656e6f756768207369676e61747572657360581b60448201526064016200055b565b6000808367ffffffffffffffff81111562001b0e5762001b0e62002221565b60405190808252806020026020018201604052801562001b38578160200160208202803683370190505b50905060005b8481101562001c6f57600062001bab8b8b848151811062001b635762001b6362002c26565b60200260200101518b858151811062001b805762001b8062002c26565b60200260200101518b868151811062001b9d5762001b9d62002c26565b602002602001015162001f3e565b6001600160a01b03811660009081526001602081905260409091205491925060ff909116151514158062001bfc57506001600160a01b03811660009081526004602052604090205460ff1615156001145b1562001c09575062001c5c565b8083858151811062001c1f5762001c1f62002c26565b6001600160a01b0392831660209182029290920181019190915291166000908152600490915260409020805460ff19166001908117909155909201915b62001c678162002c3c565b905062001b3e565b5060005b8281101562001cdc5760006004600084848151811062001c975762001c9762002c26565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905562001cd48162002c3c565b905062001c73565b505010159695505050505050565b6040516001600160a01b03831660248201526044810182905262001d1c90849063a9059cbb60e01b906064016200192b565b505050565b6001600160a01b03811660009081526001602081905260409091205460ff1615151462001d885760405162461bcd60e51b81526020600482015260146024820152737065657220646f6573206e6f742065786973747360601b60448201526064016200055b565b6001600160a01b0381166000908152600160205260408120805460ff191690556002805490919062001dba9062002d04565b9091555050565b6001600160a01b03811660009081526001602052604081205460ff161562001e215760405162461bcd60e51b81526020600482015260126024820152711c19595c88185b1c9958591e48185919195960721b60448201526064016200055b565b6001600160a01b03821660009081526001602081905260408220805460ff191690911790556002805490919062001e589062002c3c565b9091555050600254919050565b600062001ebc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662001ff89092919063ffffffff16565b80519091501562001d1c578080602001905181019062001edd919062002d1e565b62001d1c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200055b565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018590526000908190605c0160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801562001fe2573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b606062002009848460008562002013565b90505b9392505050565b606082471015620020765760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200055b565b6001600160a01b0385163b620020cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200055b565b600080866001600160a01b03168587604051620020ed919062002d42565b60006040518083038185875af1925050503d80600081146200212c576040519150601f19603f3d011682016040523d82523d6000602084013e62002131565b606091505b5091509150620021438282866200214e565b979650505050505050565b606083156200215f5750816200200c565b825115620021705782518084602001fd5b8160405162461bcd60e51b81526004016200055b919062002d60565b610f398062002d7683390190565b6001600160a01b0381168114620021b057600080fd5b50565b8035620021c0816200219a565b919050565b600080600060608486031215620021db57600080fd5b83359250602084013591506040840135620021f6816200219a565b809150509250925092565b6000602082840312156200221457600080fd5b81356200200c816200219a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562002263576200226362002221565b604052919050565b600067ffffffffffffffff82111562002288576200228862002221565b5060051b60200190565b803560ff81168114620021c057600080fd5b600082601f830112620022b657600080fd5b81356020620022cf620022c9836200226b565b62002237565b82815260059290921b84018101918181019086841115620022ef57600080fd5b8286015b848110156200231557620023078162002292565b8352918301918301620022f3565b509695505050505050565b600082601f8301126200233257600080fd5b8135602062002345620022c9836200226b565b82815260059290921b840181019181810190868411156200236557600080fd5b8286015b8481101562002315578035835291830191830162002369565b600080600080600080600080610100898b031215620023a057600080fd5b620023ab89620021b3565b975060208901359650620023c260408a01620021b3565b9550620023d260608a01620021b3565b94506080890135935060a089013567ffffffffffffffff80821115620023f757600080fd5b620024058c838d01620022a4565b945060c08b01359150808211156200241c57600080fd5b6200242a8c838d0162002320565b935060e08b01359150808211156200244157600080fd5b50620024508b828c0162002320565b9150509295985092959890939650565b6000602082840312156200247357600080fd5b5035919050565b600082601f8301126200248c57600080fd5b813567ffffffffffffffff811115620024a957620024a962002221565b620024be601f8201601f191660200162002237565b818152846020838601011115620024d457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156200250f57600080fd5b883567ffffffffffffffff808211156200252857600080fd5b620025368c838d016200247a565b995060208b01359150808211156200254d57600080fd5b6200255b8c838d016200247a565b98506200256b60408c0162002292565b975060608b0135965060808b0135955060a08b0135915080821115620023f757600080fd5b600080600080600080600080610100898b031215620025ae57600080fd5b8835975060208901359650620023c260408a01620021b3565b60008060008060808587031215620025de57600080fd5b84359350602085013567ffffffffffffffff80821115620025fe57600080fd5b6200260c88838901620022a4565b945060408701359150808211156200262357600080fd5b620026318883890162002320565b935060608701359150808211156200264857600080fd5b50620026578782880162002320565b91505092959194509250565b600080600080600060a086880312156200267c57600080fd5b853562002689816200219a565b945060208601359350604086013567ffffffffffffffff80821115620026ae57600080fd5b620026bc89838a01620022a4565b94506060880135915080821115620026d357600080fd5b620026e189838a0162002320565b93506080880135915080821115620026f857600080fd5b50620027078882890162002320565b9150509295509295909350565b60008083601f8401126200272757600080fd5b50813567ffffffffffffffff8111156200274057600080fd5b6020830191508360208260051b85010111156200275c57600080fd5b9250929050565b600080600080600080600060c0888a0312156200277f57600080fd5b873596506200279160208901620021b3565b9550604088013567ffffffffffffffff80821115620027af57600080fd5b620027bd8b838c0162002714565b909750955060608a0135915080821115620027d757600080fd5b620027e58b838c01620022a4565b945060808a0135915080821115620027fc57600080fd5b6200280a8b838c0162002320565b935060a08a01359150808211156200282157600080fd5b50620028308a828b0162002320565b91505092959891949750929550565b600080600080600080600080610100898b0312156200285d57600080fd5b6200286889620021b3565b9750602089013567ffffffffffffffff808211156200288657600080fd5b620028948c838d016200247a565b985060408b0135915080821115620028ab57600080fd5b620028b98c838d016200247a565b9750620028c960608c0162002292565b965060808b0135955060a08b0135915080821115620023f757600080fd5b60208082526033908201527f436f6e74726163742073686f756c6420626520696e697469616c697a6564207460408201527237903ab9b2903a3434b990333ab731ba34b7b760691b606082015260800190565b60208082526042908201527f436f6e74726163742073686f756c64206e6f742062652070726570617265642060408201527f666f72206d6967726174696f6e20746f2075736520746869732066756e63746960608201526137b760f11b608082015260a00190565b600060208284031215620029b557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115620029e857620029e8620029bc565b92915050565b6020808252601390820152721d1e12185cda08185b1c9958591e481d5cd959606a1b604082015260600190565b6020808252601b908201527f50656572207369676e6174757265732061726520696e76616c69640000000000604082015260600190565b60005b8381101562002a6f57818101518382015260200162002a55565b50506000910152565b6000815180845262002a9281602086016020860162002a52565b601f01601f19169290920160200192915050565b61010080825260089082015267185919105cdcd95d60c21b6101208201526001600160a01b03881660208201526101406040820181905260009062002aee8184018a62002a78565b9050828103606084015262002b04818962002a78565b91505060ff861660808301528460a08301528360c08301528260e083015298975050505050505050565b60c08152600062002b4360c083018962002a78565b828103602084015262002b57818962002a78565b60ff97909716604084015250506001600160a01b03939093166060840152608083019190915260a09091015292915050565b60c0808252600790820152666d69677261746560c81b60e08201526001600160a01b038781166020808401919091528782166040840152606083018790526101006080840181905283018590526000916101208401918791845b8881101562002c0e57833562002bf9816200219a565b82168552938201939282019260010162002be3565b5050505060a092909201929092529695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162002c515762002c51620029bc565b5060010190565b6101008082526008908201526730b2322a37b5b2b760c11b6101208201526001600160a01b038881166020830152871660408201526101406060820181905260009062002ca88184018962002a78565b9050828103608084015262002cbe818862002a78565b60ff9690961660a0840152505060c081019290925260e090910152949350505050565b60008262002cff57634e487b7160e01b600052601260045260246000fd5b500490565b60008162002d165762002d16620029bc565b506000190190565b60006020828403121562002d3157600080fd5b815180151581146200200c57600080fd5b6000825162002d5681846020870162002a52565b9190910192915050565b6020815260006200200c602083018462002a7856fe60806040523480156200001157600080fd5b5060405162000f3938038062000f39833981016040819052620000349162000238565b85858560036200004584826200037f565b5060046200005483826200037f565b5060058054336101009081026001600160a81b031990921660ff9094169390931717908190556040519190046001600160a01b03169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36006819055620000c58383620000d1565b50505050505062000473565b6001600160a01b038216620000e557600080fd5b80600254620000f591906200044b565b6002556001600160a01b0382166000908152602081905260409020546200011e9082906200044b565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019b57600080fd5b81516001600160401b0380821115620001b857620001b862000173565b604051601f8301601f19908116603f01168101908282118183101715620001e357620001e362000173565b816040528381526020925086838588010111156200020057600080fd5b600091505b8382101562000224578582018301518183018401529082019062000205565b600093810190920192909252949350505050565b60008060008060008060c087890312156200025257600080fd5b86516001600160401b03808211156200026a57600080fd5b620002788a838b0162000189565b975060208901519150808211156200028f57600080fd5b506200029e89828a0162000189565b955050604087015160ff81168114620002b657600080fd5b60608801519094506001600160a01b0381168114620002d457600080fd5b809350506080870151915060a087015190509295509295509295565b600181811c908216806200030557607f821691505b6020821081036200032657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037a57600081815260208120601f850160051c81016020861015620003555750805b601f850160051c820191505b81811015620003765782815560010162000361565b5050505b505050565b81516001600160401b038111156200039b576200039b62000173565b620003b381620003ac8454620002f0565b846200032c565b602080601f831160018114620003eb5760008415620003d25750858301515b600019600386901b1c1916600185901b17855562000376565b600085815260208120601f198616915b828110156200041c57888601518255948401946001909101908401620003fb565b50858210156200043b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200046d57634e487b7160e01b600052601160045260246000fd5b92915050565b610ab680620004836000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063a9059cbb11610071578063a9059cbb14610269578063dd62ed3e1461027c578063f0dda65c146102b5578063f2fde38b146102c8578063fcec35a9146102db57600080fd5b806379cc6790146101fa5780638da5cb5b1461020d5780638f32d59b1461023657806395d89b411461024e578063a457c2d71461025657600080fd5b8063313ce567116100f4578063313ce5671461018c57806339509351146101a157806342966c68146101b457806370a08231146101c9578063715018a6146101f257600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd1461016757806323b872dd14610179575b600080fd5b61012e6102e4565b60405161013b91906108a9565b60405180910390f35b610157610152366004610913565b610376565b604051901515815260200161013b565b6002545b60405190815260200161013b565b61015761018736600461093d565b61038d565b60055460405160ff909116815260200161013b565b6101576101af366004610913565b6103df565b6101c76101c2366004610979565b610416565b005b61016b6101d7366004610992565b6001600160a01b031660009081526020819052604090205490565b6101c7610423565b6101c7610208366004610913565b6104ab565b60055461010090046001600160a01b03166040516001600160a01b03909116815260200161013b565b60055461010090046001600160a01b03163314610157565b61012e6104b9565b610157610264366004610913565b6104c8565b610157610277366004610913565b6104ff565b61016b61028a3660046109b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c76102c3366004610913565b61050c565b6101c76102d6366004610992565b610545565b61016b60065481565b6060600380546102f3906109e7565b80601f016020809104026020016040519081016040528092919081815260200182805461031f906109e7565b801561036c5780601f106103415761010080835404028352916020019161036c565b820191906000526020600020905b81548152906001019060200180831161034f57829003601f168201915b5050505050905090565b600061038333848461057d565b5060015b92915050565b600061039a848484610605565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546103d59186916103d0908690610a37565b61057d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a4a565b61042033826106bd565b50565b60055461010090046001600160a01b0316331461045b5760405162461bcd60e51b815260040161045290610a5d565b60405180910390fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6104b58282610759565b5050565b6060600480546102f3906109e7565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a37565b6000610383338484610605565b60055461010090046001600160a01b0316331461053b5760405162461bcd60e51b815260040161045290610a5d565b6104b58282610799565b60055461010090046001600160a01b031633146105745760405162461bcd60e51b815260040161045290610a5d565b6104208161082f565b6001600160a01b03821661059057600080fd5b6001600160a01b0383166105a357600080fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821661061857600080fd5b6001600160a01b03831660009081526020819052604090205461063c908290610a37565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461066c908290610a4a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016105f8565b6001600160a01b0382166106d057600080fd5b806002546106de9190610a37565b6002556001600160a01b038216600090815260208190526040902054610705908290610a37565b6001600160a01b03831660008181526020818152604080832094909455925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b61076382826106bd565b6001600160a01b0382166000908152600160209081526040808320338085529252909120546104b59184916103d0908590610a37565b6001600160a01b0382166107ac57600080fd5b806002546107ba9190610a4a565b6002556001600160a01b0382166000908152602081905260409020546107e1908290610a4a565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161074d565b6001600160a01b03811661084257600080fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600060208083528351808285015260005b818110156108d6578581018301518582016040015282016108ba565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461090e57600080fd5b919050565b6000806040838503121561092657600080fd5b61092f836108f7565b946020939093013593505050565b60008060006060848603121561095257600080fd5b61095b846108f7565b9250610969602085016108f7565b9150604084013590509250925092565b60006020828403121561098b57600080fd5b5035919050565b6000602082840312156109a457600080fd5b6109ad826108f7565b9392505050565b600080604083850312156109c757600080fd5b6109d0836108f7565b91506109de602084016108f7565b90509250929050565b600181811c908216806109fb57607f821691505b602082108103610a1b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038757610387610a21565b8082018082111561038757610387610a21565b6020808252600990820152682737ba1037bbb732b960b91b60408201526060019056fea2646970667358221220d96a4ac2182a8d03954d54f90ad66e15291264e94cc7145800b0056a32cd4d4564736f6c63430008110033a2646970667358221220300a2e4d79dd7e18e73f932150c220aa1b11004ad1c46b0d2479eeccd12a358564736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e400000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a1710000000000000000000000006219d0ba6a0bafa69cd2b1b15633a3fd864dd3710000000000000000000000000000000000000000000000000000000000000005000000000000000000000000519c1001d550c0a1dae7d1fc220f7d14c2a521bb0000000000000000000000002e7b0d4f9b2eaf782ed3d160e3a0a4b1a7930ada000000000000000000000000c7d9c108d4e1dd1484d3e2568d7f74bfd763d3560000000000000000000000005e7f20e72c21f6d0bf0a2814fd4164176401cf8e000000000000000000000000c60d6662027f5797cf873bfe80bcf048e30fc35e00000000000000000000000000000000000000000000000000000000000000050200050000000000000000000000000000000000000000000000000000000000008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440020008000000000000000000000000000000000000000000000000000000000000f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674020009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9000000000000000000000000ade00c28244d5ce17d72e40330b1c318cd12b7c30000000000000000000000008ab7404063ec4dbcfd4598215992dc3f8ec853d7000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df00000000000000000000000027702a26126e0b3702af63ee09ac4d1a084ef628000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975000000000000000000000000ff20817765cb7f73d4bde2e66e067e58d11095c20000000000000000000000008290333cef9e6d528dd5618fb97a76f268f3edd4000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e000000000000000000000000a9b1eb5908cfc3cdf91f9b8b3a7410859800909600000000000000000000000018aaa7115705e8be94bffebde57af9bfc265b998000000000000000000000000f5d669627376ebd411e34b98f19c868c8aba5ada0000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f550000000000000000000000001f573d6fb3f13d689ff844b4ce37794d79a7ff1c000000000000000000000000d2dda223b2617cb616c1580db421e4cfae6a8a85000000000000000000000000cb97e65f07da24d46bcdd078ebebd7c6e6e3d750000000000000000000000000cca0c9c383076649604ee31b20248bc04fdf61ca0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c5300000000000000000000000056d811088235f11c8920698a204a5010a788f4b30000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643000000000000000000000000aaaebe6fe48e54f431b0c390cfaf0b017d09d42d0000000000000000000000004f9254c83eb525f9fcf346490bbb3ed28a81c6670000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000003506424f91fd33084466f402d5d97f05f8e3b4af000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000115ec79f1de567ec68b7ae7eda501b406626478e0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200000000000000000000000000a0b73e1ff0b80914ab6fe0444e65848c4c34450b00000000000000000000000032a7c02e79c4ea1008dd6564b35f131428673c41000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000035a18000230da775cac24873d00ff85bccded550000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc900000000000000000000000041e5560054824ea6b0732e656e3ad64e20e94e450000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003597bfd533a99c9aa083587b074434e61eb0a25800000000000000000000000084ca8bc7997272c7cfb4d0cd3d55cd942b3c941900000000000000000000000043dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd000000000000000000000000bf2179859fc6d5bee9bf9158632dc51678a4100e000000000000000000000000f629cbd94d3791c9250152bd8dfbdf380e2a3b9c000000000000000000000000bbc2ae13b23d715c30720f079fcd9b4a74093505000000000000000000000000d33d0eb1c0c0295c3a2409a9101dd511823bf217000000000000000000000000a0246c9032bc3a600820415ae600c6388619a14d000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca000000000000000000000000aea46a60368a7bd060eec7df8cba43b7ef41ad85000000000000000000000000ef3a930e1ffffacd2fc13434ac81bd278b0ecc8d000000000000000000000000f6ea0e60cee427b90aa36f327ee61d1d4cabc49f000000000000000000000000f8c3527cc04340b208c854e985240c02f7b7793f00000000000000000000000050d1c9771902476076ecfc8b2a83ad6b9355a4c9000000000000000000000000419d0d8bdd9af5e606ae2232ed285aff190e711b0000000000000000000000008c15ef5b4b21951d50e53e4fbda8298ffad250570000000000000000000000007dd9c5cba05e151c895fde1cf355c9a1d5da64290000000000000000000000006810e776880c02933d47db1b9fc05908e5386b96000000000000000000000000b1f871ae9462f1b2c6826e88a7827e76f86751d4000000000000000000000000c944e90c64b2c07662a292be6244bdf05cda44a7000000000000000000000000e66747a101bff2dba3697199dcce5b743b4547590000000000000000000000000316eb71485b0ab14103307bf65a021042c6d3800000000000000000000000006c6ee5e31d828de241282b9606c8e98ea48526e2000000000000000000000000df574c24545e5ffecb9a659c229253d4111d87e1000000000000000000000000b705268213d593b8fd88d3fdeff93aff5cbdcfae000000000000000000000000d9ec3ff1f8be459bb9369b4e79e9ebcf7141c093000000000000000000000000f34960d9d60be18cc1d5afc1a6f012a723a2881100000000000000000000000085eee30c52b0b379b046fb0f85f4f3dc3009afec000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd200000000000000000000000000cb4e8cafeda995da5cedfda5205bd5664a12b848000000000000000000000000ac1b818e9f1fb4e34413d631cb298fbc8a986f5200000000000000000000000067b6d479c7bb412c54e03dca8e1bc6740ce6b99c0000000000000000000000002af5d2ad76741191d15dfe7bf6ac92d4bd912ca30000000000000000000000003e9bc21c9b189c09df3ef1b824798658d5011937000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000b59490ab09a0f526cc7305822ac65f2ab12f972300000000000000000000000058b6a8a3302369daec383334672404ee733ab239000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba00000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc94200000000000000000000000008d967bb0134f2d07f7cfb6e246680c53927dd300000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb00000000000000000000000000cdf9acd87e940837ff21bb40c9fd55f68bba05900000000000000000000000009a3ecafa817268f77be1283176b946c4ff2e6080000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000f433089366899d83a9f26a773d59ec7ecf30355e0000000000000000000000005ca381bbfb58f0092df149bd3d243b08b9a8386e000000000000000000000000b62132e35a6c13ee1ee0f84dc5d40bad8d8152060000000000000000000000005cf04716ba20127f1e2297addcf4b5035000c9eb0000000000000000000000001776e1f26f98b1a5df9cd347953a26dd3cb46671000000000000000000000000a8c8cfb141a3bb59fea1e2ea6b79b5ecbcd7b6ca000000000000000000000000d7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b000000000000000000000000967da4048cd07ab37855c090aaf366e4ce1b9f480000000000000000000000008207c1ffc5b6804f6024322ccf34f29c3541ae2600000000000000000000000075231f58b43240c9718dd58b4967c5114342a86c000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c07000000000000000000000000ff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa0000000000000000000000000258f474786ddfd37abce6df6bbb1dd5dfc4434a0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1000000000000000000000000f59ae934f6fe444afc309586cc60a84a0f89aaea0000000000000000000000006c5ba91642f10282b576d91922ae6448c9d52f4e00000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed0000000000000000000000009992ec3cf6a55b00978cddf2b27bc6882d88d1ec000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000ea26c4ac16d4a5a106820bc8aee85fd0b7b2b6640000000000000000000000004a220e6096b25eadb88358cb44068a324825467500000000000000000000000093dfaf57d986b9ca77df9376c50878e013d9c7c8000000000000000000000000d01cb3d113a864763dd3977fe1e725860013b0ed000000000000000000000000505f5a4ff10985fe9f93f2ae3501da5fe665f08a000000000000000000000000fe3e6a25e6b192a42a44ecddcd13796471735acf000000000000000000000000408e41876cccdc0f92210600ef50372656052a38000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d000000000000000000000000221657776846890989a759ba2973e427dff5c9bb0000000000000000000000009559aaa82d9649c7a7b220e7c461d2e74c9a3593000000000000000000000000c82eb6dea0c93edb8b697b89ad1b13d19469d635000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b82620000000000000000000000003c3842c4d3037ae121d69ea1e7a0b61413be806c000000000000000000000000607f4c5bb672230e8672085532f7e901544a7375000000000000000000000000fa5047c9c78b8877af97bdcb85db743fd7313d4a000000000000000000000000ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64000000000000000000000000b4efd85c19999d84251304bda99e90b92300bd930000000000000000000000008762db106b2c2a0bccb3a80d1ed41273552616e80000000000000000000000003155ba85d5f96b2d030a4966af206230e46849cb00000000000000000000000008ad83d779bdf2bbe1ad9cc0f78aa0d24ab978020000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb00000000000000000000000000c83aecc790e8a4453e5dd3b0b4b3680501a7a7000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f0000000000000000000000000ae055097c6d159879521c384f1d2123d1f195e6000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84000000000000000000000000be9375c6a420d2eeb258962efb95551a5b722803000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac000000000000000000000000de7d85157d9714eadf595045cc12ca4a5f3e2adb000000000000000000000000e53ec727dbdeb9e2d5456c3be40cff031ab40a5500000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2000000000000000000000000cc4304a31d09258b0029ea7fe63d032f52e44efe0000000000000000000000008ce9137d39326ad0cd6491fb5cc0cba0e089b6a9000000000000000000000000467bccd9d29f223bce8043b84e8c8b282827790f0000000000000000000000003a8cccb969a61532d1e6005e2ce12c200caece87000000000000000000000000888888848b652b3e3a0f34c96e00eec0f3a23f72000000000000000000000000aa7a9ca87d3694b5755f213b5d04094b8d0f0a6f00000000000000000000000088df592f8eb5d7bd38bfef7deb0fbc02cf3778a0000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df0000000000000000000000008400d94a5cb0fa0d041a3788e395285d61c9ee5e00000000000000000000000004fa0d235c4abf4bcf4787af4cf447de572ef82800000000000000000000000061107a409fffe1965126aa456af679719695c69c0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c0000000000000000000000008806926ab68eb5a7b909dcaf6fdbe5d93271d6e2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000674c6ad92fd080e4004b2312b45f796a192d27a0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a47c8bf37f92abed4a126bda807a7b7498661acd000000000000000000000000dc9ac3c20d1ed0b540df9b1fedc10039df13f99c0000000000000000000000005af2be193a6abca9c8817001f45744777db30756000000000000000000000000f411903cbc70a74d22900a5de66a2dda665072550000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c221b7e65ffc80de234bbb6667abdd46593d34f00000000000000000000000004691937a7508860f876c9c0a2a617e7d9e945d4b000000000000000000000000892a6f9df0147e5f079b0993f486f9aca3c878810000000000000000000000006fcb6408499a7c0f242e32d77eb51ffa1dd28a7e0000000000000000000000007de91b204c1c737bcee6f000aaa6569cf7061cb70000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff42720000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000e4815ae53b124e7263f08dcdbbb757d41ed658c6000000000000000000000000aa602de53347579f86b996d2add74bb6f79462b2000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498

Deployed Bytecode

0x608060405260043610620001575760003560e01c8063835c19f311620000bb578063c29bb3321162000079578063c29bb3321462000444578063ca70cf6e146200047a578063cd550947146200049f578063dab4a4c614620004d0578063dfd9db8914620004f5578063fdfba25d146200051a5762000162565b8063835c19f314620001995780638505e868146200039957806389c39baf14620003d3578063ae6664e014620003f8578063b07c411f14620004105762000162565b80633b69828811620001155780633b698288146200026c5780633e44cf7814620002a25780635fde87c514620002d6578063687a82db146200031b57806375273ece146200034f57806375ff82bd14620003745762000162565b806303ef9d1f146200017457806312c6fa1b146200019b578063135f14e214620001e457806316283134146200020957806323ad7de214620002475762000162565b366200016257600080fd5b3480156200016f57600080fd5b600080fd5b3480156200018157600080fd5b506200019962000193366004620021c5565b62000531565b005b348015620001a857600080fd5b50620001cf620001ba36600462002201565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015620001f157600080fd5b50620001996200020336600462002382565b620008cb565b3480156200021657600080fd5b506200022e6200022836600462002460565b62000ab0565b6040516001600160a01b039091168152602001620001db565b3480156200025457600080fd5b506200019962000266366004620024f1565b62000adb565b3480156200027957600080fd5b506200022e7f000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e481565b348015620002af57600080fd5b50620001cf620002c136600462002201565b60016020526000908152604090205460ff1681565b348015620002e357600080fd5b506200030c7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001620001db565b3480156200032857600080fd5b50620001cf6200033a36600462002201565b60056020526000908152604090205460ff1681565b3480156200035c57600080fd5b50620001996200036e36600462002590565b62000c7a565b3480156200038157600080fd5b506200019962000393366004620025c7565b62000ed1565b348015620003a657600080fd5b506200022e620003b836600462002460565b6006602052600090815260409020546001600160a01b031681565b348015620003e057600080fd5b50620001cf620003f236600462002663565b6200103b565b3480156200040557600080fd5b506200030c60025481565b3480156200041d57600080fd5b50620001cf6200042f36600462002460565b60036020526000908152604090205460ff1681565b3480156200045157600080fd5b506200022e7f00000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f67781565b3480156200048757600080fd5b50620001cf6200049936600462002663565b620011c0565b348015620004ac57600080fd5b506200030c620004be36600462002201565b60076020526000908152604090205481565b348015620004dd57600080fd5b5062000199620004ef36600462002763565b6200131a565b3480156200050257600080fd5b5062000199620005143660046200283f565b62001692565b620001996200052b36600462002460565b62001802565b60005460ff161515600114620005645760405162461bcd60e51b81526004016200055b90620028e7565b60405180910390fd5b600054610100900460ff16156200058f5760405162461bcd60e51b81526004016200055b906200293a565b6001600160a01b038116600090815260076020526040902054819080151580620005ea5750826001600160a01b03167f000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e46001600160a01b0316145b80620006275750826001600160a01b03167f00000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f6776001600160a01b0316145b15620006985760405163079cc67960e41b81523360048201526024810185905283906001600160a01b038216906379cc679090604401600060405180830381600087803b1580156200067857600080fd5b505af11580156200068d573d6000803e3d6000fd5b505050505062000875565b6001600160a01b03831660009081526005602052604090205460ff166200071e5760405162461bcd60e51b815260206004820152603360248201527f54686520546f6b656e206973206e6f7420616363657074656420666f7220747260448201527230b739b332b9103a379039b4b232b1b430b4b760691b60648201526084016200055b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801562000766573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200078c9190620029a2565b9050620007a56001600160a01b038416333088620018f6565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015620007ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008139190620029a2565b905085620008228383620029d2565b1015620008725760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e73207472616e7366657272656400000060448201526064016200055b565b50505b60408051868152602081018690526001600160a01b038516818301526060810183905290517f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89181900360800190a15050505050565b60005460ff161515600114620008f55760405162461bcd60e51b81526004016200055b90620028e7565b60008481526003602052604090205460ff1615620009275760405162461bcd60e51b81526004016200055b90620029ee565b60408051610100602082018190526008610120830152673a3930b739b332b960c11b61014083015230928201929092526001600160a01b03808b166060830152608082018a905280891660a0830152871660c082015260e081018690527f000000000000000000000000000000000000000000000000000000000000000091810191909152620009d590610160015b6040516020818303038152906040528051906020012084848462001969565b620009f45760405162461bcd60e51b81526004016200055b9062002a1b565b6000848152600360205260409020805460ff191660011790556001600160a01b03881662000a5a576040516001600160a01b0387169088156108fc029089906000818181858888f1935050505015801562000a53573d6000803e3d6000fd5b5062000a73565b8762000a716001600160a01b038216888a62001cea565b505b6040518481527f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b9060200160405180910390a15050505050505050565b6008818154811062000ac157600080fd5b6000918252602090912001546001600160a01b0316905081565b60005460ff16151560011462000b055760405162461bcd60e51b81526004016200055b90620028e7565b60008481526003602052604090205460ff161562000b375760405162461bcd60e51b81526004016200055b90620029ee565b62000b7a3089898989897f0000000000000000000000000000000000000000000000000000000000000000604051602001620009b6979695949392919062002aa6565b62000b995760405162461bcd60e51b81526004016200055b9062002a1b565b600084815260036020526040808220805460ff1916600117905551899089908990309085908b9062000bcb906200218c565b62000bdc9695949392919062002b2e565b604051809103906000f08015801562000bf9573d6000803e3d6000fd5b50600087815260066020908152604080832080546001600160a01b039095166001600160a01b0319958616811790915580845260079092528220989098556008805460018101825591527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180549091169096179095555050505050505050565b60005460ff16151560011462000ca45760405162461bcd60e51b81526004016200055b90620028e7565b6000888152600660205260409020546001600160a01b031662000d145760405162461bcd60e51b815260206004820152602160248201527f53696465636861696e206173736574206973206e6f74207265676973746572656044820152601960fa1b60648201526084016200055b565b60008481526003602052604090205460ff161562000d465760405162461bcd60e51b81526004016200055b90620029ee565b6040805161010060208201819052600d6101208301526c1d1c985b9cd9995c93dddb9959609a1b6101408301523092820192909252606081018a9052608081018990526001600160a01b0380891660a0830152871660c082015260e081018690527f00000000000000000000000000000000000000000000000000000000000000009181019190915262000dde9061016001620009b6565b62000dfd5760405162461bcd60e51b81526004016200055b9062002a1b565b6000848152600360209081526040808320805460ff191660011790558a8352600690915290819020549051633c37699760e21b81526001600160a01b038881166004830152602482018a905290911690819063f0dda65c90604401600060405180830381600087803b15801562000e7357600080fd5b505af115801562000e88573d6000803e3d6000fd5b505050507f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b8560405162000ebe91815260200190565b60405180910390a1505050505050505050565b60005460ff16151560011462000efb5760405162461bcd60e51b81526004016200055b90620028e7565b600054610100900460ff161562000f265760405162461bcd60e51b81526004016200055b906200293a565b60008481526003602052604090205460ff161562000f585760405162461bcd60e51b81526004016200055b90620029ee565b60408051608060208201819052601060a08301526f383932b830b932a6b4b3b930ba34b7b760811b60c08301523092820192909252606081018690527f00000000000000000000000000000000000000000000000000000000000000009181019190915262000fca9060e001620009b6565b62000fe95760405162461bcd60e51b81526004016200055b9062002a1b565b600084815260036020526040808220805460ff19166001179055815461ff001916610100178255517f5389de9593f75e6515eefa796bd2d3324759f441f2c9b2dcda0efb25190378ff9190a150505050565b6000805460ff161515600114620010665760405162461bcd60e51b81526004016200055b90620028e7565b60008581526003602052604090205460ff1615620010985760405162461bcd60e51b81526004016200055b90620029ee565b6040805160a060208201819052600a60c0830152693932b6b7bb32a832b2b960b11b60e083015230928201929092526001600160a01b0388166060820152608081018790527f0000000000000000000000000000000000000000000000000000000000000000918101919091526200112e90610100015b6040516020818303038152906040528051906020012085858562001969565b6200114d5760405162461bcd60e51b81526004016200055b9062002a1b565b6000858152600360205260409020805460ff19166001179055620011718662001d21565b604080516001600160a01b0388168152600160208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f991015b60405180910390a150600195945050505050565b6000805460ff161515600114620011eb5760405162461bcd60e51b81526004016200055b90620028e7565b60008581526003602052604090205460ff16156200121d5760405162461bcd60e51b81526004016200055b90620029ee565b6040805160a060208201819052600760c08301526630b2322832b2b960c91b60e083015230928201929092526001600160a01b0388166060820152608081018790527f0000000000000000000000000000000000000000000000000000000000000000918101919091526200129690610100016200110f565b620012b55760405162461bcd60e51b81526004016200055b9062002a1b565b6000858152600360205260409020805460ff19166001179055620012d98662001dc1565b50604080516001600160a01b0388168152600060208201527fa9fac23eb012e72fbd1f453498e7069c380385436763ee2c1c057b170d88d9f99101620011ac565b60005460ff161515600114620013445760405162461bcd60e51b81526004016200055b90620028e7565b60005460ff610100909104161515600114620013c95760405162461bcd60e51b815260206004820152603e60248201527f436f6e74726163742073686f756c6420626520707265706172656420666f722060448201527f6d6967726174696f6e20746f2075736520746869732066756e6374696f6e000060648201526084016200055b565b60008781526003602052604090205460ff1615620013fb5760405162461bcd60e51b81526004016200055b90620029ee565b6200143c30878988887f0000000000000000000000000000000000000000000000000000000000000000604051602001620009b69695949392919062002b89565b6200145b5760405162461bcd60e51b81526004016200055b9062002a1b565b6000878152600360205260408120805460ff19166001179055600854905b818110156200151e576000600882815481106200149a576200149a62002c26565b60009182526020909120015460405163f2fde38b60e01b81526001600160a01b038b811660048301529091169150819063f2fde38b90602401600060405180830381600087803b158015620014ee57600080fd5b505af115801562001503573d6000803e3d6000fd5b50505050508080620015159062002c3c565b91505062001479565b508460005b81811015620015f757600088888381811062001543576200154362002c26565b90506020020160208101906200155a919062002201565b6040516370a0823160e01b8152306004820152909150620015e1908b906001600160a01b038416906370a0823190602401602060405180830381865afa158015620015a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015cf9190620029a2565b6001600160a01b038416919062001cea565b5080620015ee8162002c3c565b91505062001523565b50876001600160a01b031663835c19f3476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200163457600080fd5b505af115801562001649573d6000803e3d6000fd5b50506000805460ff1916905550506040516001600160a01b038a1681527fa2e7361c23d7820040603b83c0cd3f494d377bac69736377d75bb56c651a5098915060200162000ebe565b60005460ff161515600114620016bc5760405162461bcd60e51b81526004016200055b90620028e7565b60008481526003602052604090205460ff1615620016ee5760405162461bcd60e51b81526004016200055b90620029ee565b6001600160a01b03881660009081526005602052604090205460ff1615620017595760405162461bcd60e51b815260206004820152601e60248201527f455243323020746f6b656e206973206e6f742077686974656c6973746564000060448201526064016200055b565b6200179c3089898989897f0000000000000000000000000000000000000000000000000000000000000000604051602001620009b6979695949392919062002c58565b620017bb5760405162461bcd60e51b81526004016200055b9062002a1b565b5050506000908152600360209081526040808320805460ff1990811660019081179092556001600160a01b0390981684526005909252909120805490951617909355505050565b60005460ff1615156001146200182c5760405162461bcd60e51b81526004016200055b90620028e7565b600054610100900460ff1615620018575760405162461bcd60e51b81526004016200055b906200293a565b60003411620018a95760405162461bcd60e51b815260206004820152601f60248201527f4554482056414c55452053484f554c44204245204d4f5245205448414e20300060448201526064016200055b565b604080518281523460208201526000918101829052606081018290527f85c0fa492ded927d3acca961da52b0dda1debb06d8c27fe189315f06bb6e26c89060800160405180910390a15050565b6040516001600160a01b0380851660248301528316604482015260648101829052620019639085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262001e65565b50505050565b600060016002541015620019b55760405162461bcd60e51b81526020600482015260126024820152717065657273436f756e7420746f6f206c6f7760701b60448201526064016200055b565b83518351811462001a155760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642072206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b8251811462001a735760405162461bcd60e51b8152602060048201526024808201527f7369676e6174757265436f756e7420616e642073206c656e677468206d69736d6044820152630c2e8c6d60e31b60648201526084016200055b565b60006003600160025462001a889190620029d2565b62001a94919062002ce1565b60025462001aa39190620029d2565b90508082101562001aef5760405162461bcd60e51b81526020600482015260156024820152746e6f7420656e6f756768207369676e61747572657360581b60448201526064016200055b565b6000808367ffffffffffffffff81111562001b0e5762001b0e62002221565b60405190808252806020026020018201604052801562001b38578160200160208202803683370190505b50905060005b8481101562001c6f57600062001bab8b8b848151811062001b635762001b6362002c26565b60200260200101518b858151811062001b805762001b8062002c26565b60200260200101518b868151811062001b9d5762001b9d62002c26565b602002602001015162001f3e565b6001600160a01b03811660009081526001602081905260409091205491925060ff909116151514158062001bfc57506001600160a01b03811660009081526004602052604090205460ff1615156001145b1562001c09575062001c5c565b8083858151811062001c1f5762001c1f62002c26565b6001600160a01b0392831660209182029290920181019190915291166000908152600490915260409020805460ff19166001908117909155909201915b62001c678162002c3c565b905062001b3e565b5060005b8281101562001cdc5760006004600084848151811062001c975762001c9762002c26565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905562001cd48162002c3c565b905062001c73565b505010159695505050505050565b6040516001600160a01b03831660248201526044810182905262001d1c90849063a9059cbb60e01b906064016200192b565b505050565b6001600160a01b03811660009081526001602081905260409091205460ff1615151462001d885760405162461bcd60e51b81526020600482015260146024820152737065657220646f6573206e6f742065786973747360601b60448201526064016200055b565b6001600160a01b0381166000908152600160205260408120805460ff191690556002805490919062001dba9062002d04565b9091555050565b6001600160a01b03811660009081526001602052604081205460ff161562001e215760405162461bcd60e51b81526020600482015260126024820152711c19595c88185b1c9958591e48185919195960721b60448201526064016200055b565b6001600160a01b03821660009081526001602081905260408220805460ff191690911790556002805490919062001e589062002c3c565b9091555050600254919050565b600062001ebc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662001ff89092919063ffffffff16565b80519091501562001d1c578080602001905181019062001edd919062002d1e565b62001d1c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200055b565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018590526000908190605c0160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa15801562001fe2573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b606062002009848460008562002013565b90505b9392505050565b606082471015620020765760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200055b565b6001600160a01b0385163b620020cf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200055b565b600080866001600160a01b03168587604051620020ed919062002d42565b60006040518083038185875af1925050503d80600081146200212c576040519150601f19603f3d011682016040523d82523d6000602084013e62002131565b606091505b5091509150620021438282866200214e565b979650505050505050565b606083156200215f5750816200200c565b825115620021705782518084602001fd5b8160405162461bcd60e51b81526004016200055b919062002d60565b610f398062002d7683390190565b6001600160a01b0381168114620021b057600080fd5b50565b8035620021c0816200219a565b919050565b600080600060608486031215620021db57600080fd5b83359250602084013591506040840135620021f6816200219a565b809150509250925092565b6000602082840312156200221457600080fd5b81356200200c816200219a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562002263576200226362002221565b604052919050565b600067ffffffffffffffff82111562002288576200228862002221565b5060051b60200190565b803560ff81168114620021c057600080fd5b600082601f830112620022b657600080fd5b81356020620022cf620022c9836200226b565b62002237565b82815260059290921b84018101918181019086841115620022ef57600080fd5b8286015b848110156200231557620023078162002292565b8352918301918301620022f3565b509695505050505050565b600082601f8301126200233257600080fd5b8135602062002345620022c9836200226b565b82815260059290921b840181019181810190868411156200236557600080fd5b8286015b8481101562002315578035835291830191830162002369565b600080600080600080600080610100898b031215620023a057600080fd5b620023ab89620021b3565b975060208901359650620023c260408a01620021b3565b9550620023d260608a01620021b3565b94506080890135935060a089013567ffffffffffffffff80821115620023f757600080fd5b620024058c838d01620022a4565b945060c08b01359150808211156200241c57600080fd5b6200242a8c838d0162002320565b935060e08b01359150808211156200244157600080fd5b50620024508b828c0162002320565b9150509295985092959890939650565b6000602082840312156200247357600080fd5b5035919050565b600082601f8301126200248c57600080fd5b813567ffffffffffffffff811115620024a957620024a962002221565b620024be601f8201601f191660200162002237565b818152846020838601011115620024d457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156200250f57600080fd5b883567ffffffffffffffff808211156200252857600080fd5b620025368c838d016200247a565b995060208b01359150808211156200254d57600080fd5b6200255b8c838d016200247a565b98506200256b60408c0162002292565b975060608b0135965060808b0135955060a08b0135915080821115620023f757600080fd5b600080600080600080600080610100898b031215620025ae57600080fd5b8835975060208901359650620023c260408a01620021b3565b60008060008060808587031215620025de57600080fd5b84359350602085013567ffffffffffffffff80821115620025fe57600080fd5b6200260c88838901620022a4565b945060408701359150808211156200262357600080fd5b620026318883890162002320565b935060608701359150808211156200264857600080fd5b50620026578782880162002320565b91505092959194509250565b600080600080600060a086880312156200267c57600080fd5b853562002689816200219a565b945060208601359350604086013567ffffffffffffffff80821115620026ae57600080fd5b620026bc89838a01620022a4565b94506060880135915080821115620026d357600080fd5b620026e189838a0162002320565b93506080880135915080821115620026f857600080fd5b50620027078882890162002320565b9150509295509295909350565b60008083601f8401126200272757600080fd5b50813567ffffffffffffffff8111156200274057600080fd5b6020830191508360208260051b85010111156200275c57600080fd5b9250929050565b600080600080600080600060c0888a0312156200277f57600080fd5b873596506200279160208901620021b3565b9550604088013567ffffffffffffffff80821115620027af57600080fd5b620027bd8b838c0162002714565b909750955060608a0135915080821115620027d757600080fd5b620027e58b838c01620022a4565b945060808a0135915080821115620027fc57600080fd5b6200280a8b838c0162002320565b935060a08a01359150808211156200282157600080fd5b50620028308a828b0162002320565b91505092959891949750929550565b600080600080600080600080610100898b0312156200285d57600080fd5b6200286889620021b3565b9750602089013567ffffffffffffffff808211156200288657600080fd5b620028948c838d016200247a565b985060408b0135915080821115620028ab57600080fd5b620028b98c838d016200247a565b9750620028c960608c0162002292565b965060808b0135955060a08b0135915080821115620023f757600080fd5b60208082526033908201527f436f6e74726163742073686f756c6420626520696e697469616c697a6564207460408201527237903ab9b2903a3434b990333ab731ba34b7b760691b606082015260800190565b60208082526042908201527f436f6e74726163742073686f756c64206e6f742062652070726570617265642060408201527f666f72206d6967726174696f6e20746f2075736520746869732066756e63746960608201526137b760f11b608082015260a00190565b600060208284031215620029b557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115620029e857620029e8620029bc565b92915050565b6020808252601390820152721d1e12185cda08185b1c9958591e481d5cd959606a1b604082015260600190565b6020808252601b908201527f50656572207369676e6174757265732061726520696e76616c69640000000000604082015260600190565b60005b8381101562002a6f57818101518382015260200162002a55565b50506000910152565b6000815180845262002a9281602086016020860162002a52565b601f01601f19169290920160200192915050565b61010080825260089082015267185919105cdcd95d60c21b6101208201526001600160a01b03881660208201526101406040820181905260009062002aee8184018a62002a78565b9050828103606084015262002b04818962002a78565b91505060ff861660808301528460a08301528360c08301528260e083015298975050505050505050565b60c08152600062002b4360c083018962002a78565b828103602084015262002b57818962002a78565b60ff97909716604084015250506001600160a01b03939093166060840152608083019190915260a09091015292915050565b60c0808252600790820152666d69677261746560c81b60e08201526001600160a01b038781166020808401919091528782166040840152606083018790526101006080840181905283018590526000916101208401918791845b8881101562002c0e57833562002bf9816200219a565b82168552938201939282019260010162002be3565b5050505060a092909201929092529695505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162002c515762002c51620029bc565b5060010190565b6101008082526008908201526730b2322a37b5b2b760c11b6101208201526001600160a01b038881166020830152871660408201526101406060820181905260009062002ca88184018962002a78565b9050828103608084015262002cbe818862002a78565b60ff9690961660a0840152505060c081019290925260e090910152949350505050565b60008262002cff57634e487b7160e01b600052601260045260246000fd5b500490565b60008162002d165762002d16620029bc565b506000190190565b60006020828403121562002d3157600080fd5b815180151581146200200c57600080fd5b6000825162002d5681846020870162002a52565b9190910192915050565b6020815260006200200c602083018462002a7856fe60806040523480156200001157600080fd5b5060405162000f3938038062000f39833981016040819052620000349162000238565b85858560036200004584826200037f565b5060046200005483826200037f565b5060058054336101009081026001600160a81b031990921660ff9094169390931717908190556040519190046001600160a01b03169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36006819055620000c58383620000d1565b50505050505062000473565b6001600160a01b038216620000e557600080fd5b80600254620000f591906200044b565b6002556001600160a01b0382166000908152602081905260409020546200011e9082906200044b565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019b57600080fd5b81516001600160401b0380821115620001b857620001b862000173565b604051601f8301601f19908116603f01168101908282118183101715620001e357620001e362000173565b816040528381526020925086838588010111156200020057600080fd5b600091505b8382101562000224578582018301518183018401529082019062000205565b600093810190920192909252949350505050565b60008060008060008060c087890312156200025257600080fd5b86516001600160401b03808211156200026a57600080fd5b620002788a838b0162000189565b975060208901519150808211156200028f57600080fd5b506200029e89828a0162000189565b955050604087015160ff81168114620002b657600080fd5b60608801519094506001600160a01b0381168114620002d457600080fd5b809350506080870151915060a087015190509295509295509295565b600181811c908216806200030557607f821691505b6020821081036200032657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037a57600081815260208120601f850160051c81016020861015620003555750805b601f850160051c820191505b81811015620003765782815560010162000361565b5050505b505050565b81516001600160401b038111156200039b576200039b62000173565b620003b381620003ac8454620002f0565b846200032c565b602080601f831160018114620003eb5760008415620003d25750858301515b600019600386901b1c1916600185901b17855562000376565b600085815260208120601f198616915b828110156200041c57888601518255948401946001909101908401620003fb565b50858210156200043b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200046d57634e487b7160e01b600052601160045260246000fd5b92915050565b610ab680620004836000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806379cc6790116100ad578063a9059cbb11610071578063a9059cbb14610269578063dd62ed3e1461027c578063f0dda65c146102b5578063f2fde38b146102c8578063fcec35a9146102db57600080fd5b806379cc6790146101fa5780638da5cb5b1461020d5780638f32d59b1461023657806395d89b411461024e578063a457c2d71461025657600080fd5b8063313ce567116100f4578063313ce5671461018c57806339509351146101a157806342966c68146101b457806370a08231146101c9578063715018a6146101f257600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd1461016757806323b872dd14610179575b600080fd5b61012e6102e4565b60405161013b91906108a9565b60405180910390f35b610157610152366004610913565b610376565b604051901515815260200161013b565b6002545b60405190815260200161013b565b61015761018736600461093d565b61038d565b60055460405160ff909116815260200161013b565b6101576101af366004610913565b6103df565b6101c76101c2366004610979565b610416565b005b61016b6101d7366004610992565b6001600160a01b031660009081526020819052604090205490565b6101c7610423565b6101c7610208366004610913565b6104ab565b60055461010090046001600160a01b03166040516001600160a01b03909116815260200161013b565b60055461010090046001600160a01b03163314610157565b61012e6104b9565b610157610264366004610913565b6104c8565b610157610277366004610913565b6104ff565b61016b61028a3660046109b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c76102c3366004610913565b61050c565b6101c76102d6366004610992565b610545565b61016b60065481565b6060600380546102f3906109e7565b80601f016020809104026020016040519081016040528092919081815260200182805461031f906109e7565b801561036c5780601f106103415761010080835404028352916020019161036c565b820191906000526020600020905b81548152906001019060200180831161034f57829003601f168201915b5050505050905090565b600061038333848461057d565b5060015b92915050565b600061039a848484610605565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546103d59186916103d0908690610a37565b61057d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a4a565b61042033826106bd565b50565b60055461010090046001600160a01b0316331461045b5760405162461bcd60e51b815260040161045290610a5d565b60405180910390fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6104b58282610759565b5050565b6060600480546102f3906109e7565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103839185906103d0908690610a37565b6000610383338484610605565b60055461010090046001600160a01b0316331461053b5760405162461bcd60e51b815260040161045290610a5d565b6104b58282610799565b60055461010090046001600160a01b031633146105745760405162461bcd60e51b815260040161045290610a5d565b6104208161082f565b6001600160a01b03821661059057600080fd5b6001600160a01b0383166105a357600080fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03821661061857600080fd5b6001600160a01b03831660009081526020819052604090205461063c908290610a37565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461066c908290610a4a565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016105f8565b6001600160a01b0382166106d057600080fd5b806002546106de9190610a37565b6002556001600160a01b038216600090815260208190526040902054610705908290610a37565b6001600160a01b03831660008181526020818152604080832094909455925184815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b61076382826106bd565b6001600160a01b0382166000908152600160209081526040808320338085529252909120546104b59184916103d0908590610a37565b6001600160a01b0382166107ac57600080fd5b806002546107ba9190610a4a565b6002556001600160a01b0382166000908152602081905260409020546107e1908290610a4a565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161074d565b6001600160a01b03811661084257600080fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600060208083528351808285015260005b818110156108d6578581018301518582016040015282016108ba565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461090e57600080fd5b919050565b6000806040838503121561092657600080fd5b61092f836108f7565b946020939093013593505050565b60008060006060848603121561095257600080fd5b61095b846108f7565b9250610969602085016108f7565b9150604084013590509250925092565b60006020828403121561098b57600080fd5b5035919050565b6000602082840312156109a457600080fd5b6109ad826108f7565b9392505050565b600080604083850312156109c757600080fd5b6109d0836108f7565b91506109de602084016108f7565b90509250929050565b600181811c908216806109fb57607f821691505b602082108103610a1b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561038757610387610a21565b8082018082111561038757610387610a21565b6020808252600990820152682737ba1037bbb732b960b91b60408201526060019056fea2646970667358221220d96a4ac2182a8d03954d54f90ad66e15291264e94cc7145800b0056a32cd4d4564736f6c63430008110033a2646970667358221220300a2e4d79dd7e18e73f932150c220aa1b11004ad1c46b0d2479eeccd12a358564736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e400000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a1710000000000000000000000006219d0ba6a0bafa69cd2b1b15633a3fd864dd3710000000000000000000000000000000000000000000000000000000000000005000000000000000000000000519c1001d550c0a1dae7d1fc220f7d14c2a521bb0000000000000000000000002e7b0d4f9b2eaf782ed3d160e3a0a4b1a7930ada000000000000000000000000c7d9c108d4e1dd1484d3e2568d7f74bfd763d3560000000000000000000000005e7f20e72c21f6d0bf0a2814fd4164176401cf8e000000000000000000000000c60d6662027f5797cf873bfe80bcf048e30fc35e00000000000000000000000000000000000000000000000000000000000000050200050000000000000000000000000000000000000000000000000000000000008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440020008000000000000000000000000000000000000000000000000000000000000f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674020009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a70000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9000000000000000000000000ade00c28244d5ce17d72e40330b1c318cd12b7c30000000000000000000000008ab7404063ec4dbcfd4598215992dc3f8ec853d7000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df00000000000000000000000027702a26126e0b3702af63ee09ac4d1a084ef628000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975000000000000000000000000ff20817765cb7f73d4bde2e66e067e58d11095c20000000000000000000000008290333cef9e6d528dd5618fb97a76f268f3edd4000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e000000000000000000000000a9b1eb5908cfc3cdf91f9b8b3a7410859800909600000000000000000000000018aaa7115705e8be94bffebde57af9bfc265b998000000000000000000000000f5d669627376ebd411e34b98f19c868c8aba5ada0000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f550000000000000000000000001f573d6fb3f13d689ff844b4ce37794d79a7ff1c000000000000000000000000d2dda223b2617cb616c1580db421e4cfae6a8a85000000000000000000000000cb97e65f07da24d46bcdd078ebebd7c6e6e3d750000000000000000000000000cca0c9c383076649604ee31b20248bc04fdf61ca0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c5300000000000000000000000056d811088235f11c8920698a204a5010a788f4b30000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643000000000000000000000000aaaebe6fe48e54f431b0c390cfaf0b017d09d42d0000000000000000000000004f9254c83eb525f9fcf346490bbb3ed28a81c6670000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed50000000000000000000000003506424f91fd33084466f402d5d97f05f8e3b4af000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888000000000000000000000000115ec79f1de567ec68b7ae7eda501b406626478e0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200000000000000000000000000a0b73e1ff0b80914ab6fe0444e65848c4c34450b00000000000000000000000032a7c02e79c4ea1008dd6564b35f131428673c41000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd5200000000000000000000000035a18000230da775cac24873d00ff85bccded550000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc900000000000000000000000041e5560054824ea6b0732e656e3ad64e20e94e450000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000003597bfd533a99c9aa083587b074434e61eb0a25800000000000000000000000084ca8bc7997272c7cfb4d0cd3d55cd942b3c941900000000000000000000000043dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd000000000000000000000000bf2179859fc6d5bee9bf9158632dc51678a4100e000000000000000000000000f629cbd94d3791c9250152bd8dfbdf380e2a3b9c000000000000000000000000bbc2ae13b23d715c30720f079fcd9b4a74093505000000000000000000000000d33d0eb1c0c0295c3a2409a9101dd511823bf217000000000000000000000000a0246c9032bc3a600820415ae600c6388619a14d000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca000000000000000000000000aea46a60368a7bd060eec7df8cba43b7ef41ad85000000000000000000000000ef3a930e1ffffacd2fc13434ac81bd278b0ecc8d000000000000000000000000f6ea0e60cee427b90aa36f327ee61d1d4cabc49f000000000000000000000000f8c3527cc04340b208c854e985240c02f7b7793f00000000000000000000000050d1c9771902476076ecfc8b2a83ad6b9355a4c9000000000000000000000000419d0d8bdd9af5e606ae2232ed285aff190e711b0000000000000000000000008c15ef5b4b21951d50e53e4fbda8298ffad250570000000000000000000000007dd9c5cba05e151c895fde1cf355c9a1d5da64290000000000000000000000006810e776880c02933d47db1b9fc05908e5386b96000000000000000000000000b1f871ae9462f1b2c6826e88a7827e76f86751d4000000000000000000000000c944e90c64b2c07662a292be6244bdf05cda44a7000000000000000000000000e66747a101bff2dba3697199dcce5b743b4547590000000000000000000000000316eb71485b0ab14103307bf65a021042c6d3800000000000000000000000006c6ee5e31d828de241282b9606c8e98ea48526e2000000000000000000000000df574c24545e5ffecb9a659c229253d4111d87e1000000000000000000000000b705268213d593b8fd88d3fdeff93aff5cbdcfae000000000000000000000000d9ec3ff1f8be459bb9369b4e79e9ebcf7141c093000000000000000000000000f34960d9d60be18cc1d5afc1a6f012a723a2881100000000000000000000000085eee30c52b0b379b046fb0f85f4f3dc3009afec000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd200000000000000000000000000cb4e8cafeda995da5cedfda5205bd5664a12b848000000000000000000000000ac1b818e9f1fb4e34413d631cb298fbc8a986f5200000000000000000000000067b6d479c7bb412c54e03dca8e1bc6740ce6b99c0000000000000000000000002af5d2ad76741191d15dfe7bf6ac92d4bd912ca30000000000000000000000003e9bc21c9b189c09df3ef1b824798658d5011937000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000b59490ab09a0f526cc7305822ac65f2ab12f972300000000000000000000000058b6a8a3302369daec383334672404ee733ab239000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba00000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc94200000000000000000000000008d967bb0134f2d07f7cfb6e246680c53927dd300000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb00000000000000000000000000cdf9acd87e940837ff21bb40c9fd55f68bba05900000000000000000000000009a3ecafa817268f77be1283176b946c4ff2e6080000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2000000000000000000000000f433089366899d83a9f26a773d59ec7ecf30355e0000000000000000000000005ca381bbfb58f0092df149bd3d243b08b9a8386e000000000000000000000000b62132e35a6c13ee1ee0f84dc5d40bad8d8152060000000000000000000000005cf04716ba20127f1e2297addcf4b5035000c9eb0000000000000000000000001776e1f26f98b1a5df9cd347953a26dd3cb46671000000000000000000000000a8c8cfb141a3bb59fea1e2ea6b79b5ecbcd7b6ca000000000000000000000000d7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b000000000000000000000000967da4048cd07ab37855c090aaf366e4ce1b9f480000000000000000000000008207c1ffc5b6804f6024322ccf34f29c3541ae2600000000000000000000000075231f58b43240c9718dd58b4967c5114342a86c000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c07000000000000000000000000ff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa0000000000000000000000000258f474786ddfd37abce6df6bbb1dd5dfc4434a0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1000000000000000000000000f59ae934f6fe444afc309586cc60a84a0f89aaea0000000000000000000000006c5ba91642f10282b576d91922ae6448c9d52f4e00000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed0000000000000000000000009992ec3cf6a55b00978cddf2b27bc6882d88d1ec000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a000000000000000000000000ea26c4ac16d4a5a106820bc8aee85fd0b7b2b6640000000000000000000000004a220e6096b25eadb88358cb44068a324825467500000000000000000000000093dfaf57d986b9ca77df9376c50878e013d9c7c8000000000000000000000000d01cb3d113a864763dd3977fe1e725860013b0ed000000000000000000000000505f5a4ff10985fe9f93f2ae3501da5fe665f08a000000000000000000000000fe3e6a25e6b192a42a44ecddcd13796471735acf000000000000000000000000408e41876cccdc0f92210600ef50372656052a38000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d000000000000000000000000221657776846890989a759ba2973e427dff5c9bb0000000000000000000000009559aaa82d9649c7a7b220e7c461d2e74c9a3593000000000000000000000000c82eb6dea0c93edb8b697b89ad1b13d19469d635000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b82620000000000000000000000003c3842c4d3037ae121d69ea1e7a0b61413be806c000000000000000000000000607f4c5bb672230e8672085532f7e901544a7375000000000000000000000000fa5047c9c78b8877af97bdcb85db743fd7313d4a000000000000000000000000ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64000000000000000000000000b4efd85c19999d84251304bda99e90b92300bd930000000000000000000000008762db106b2c2a0bccb3a80d1ed41273552616e80000000000000000000000003155ba85d5f96b2d030a4966af206230e46849cb00000000000000000000000008ad83d779bdf2bbe1ad9cc0f78aa0d24ab978020000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d00000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb00000000000000000000000000c83aecc790e8a4453e5dd3b0b4b3680501a7a7000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f0000000000000000000000000ae055097c6d159879521c384f1d2123d1f195e6000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84000000000000000000000000be9375c6a420d2eeb258962efb95551a5b722803000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac000000000000000000000000de7d85157d9714eadf595045cc12ca4a5f3e2adb000000000000000000000000e53ec727dbdeb9e2d5456c3be40cff031ab40a5500000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f510000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2000000000000000000000000cc4304a31d09258b0029ea7fe63d032f52e44efe0000000000000000000000008ce9137d39326ad0cd6491fb5cc0cba0e089b6a9000000000000000000000000467bccd9d29f223bce8043b84e8c8b282827790f0000000000000000000000003a8cccb969a61532d1e6005e2ce12c200caece87000000000000000000000000888888848b652b3e3a0f34c96e00eec0f3a23f72000000000000000000000000aa7a9ca87d3694b5755f213b5d04094b8d0f0a6f00000000000000000000000088df592f8eb5d7bd38bfef7deb0fbc02cf3778a0000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df0000000000000000000000008400d94a5cb0fa0d041a3788e395285d61c9ee5e00000000000000000000000004fa0d235c4abf4bcf4787af4cf447de572ef82800000000000000000000000061107a409fffe1965126aa456af679719695c69c0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c0000000000000000000000008806926ab68eb5a7b909dcaf6fdbe5d93271d6e2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000674c6ad92fd080e4004b2312b45f796a192d27a0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a47c8bf37f92abed4a126bda807a7b7498661acd000000000000000000000000dc9ac3c20d1ed0b540df9b1fedc10039df13f99c0000000000000000000000005af2be193a6abca9c8817001f45744777db30756000000000000000000000000f411903cbc70a74d22900a5de66a2dda665072550000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c221b7e65ffc80de234bbb6667abdd46593d34f00000000000000000000000004691937a7508860f876c9c0a2a617e7d9e945d4b000000000000000000000000892a6f9df0147e5f079b0993f486f9aca3c878810000000000000000000000006fcb6408499a7c0f242e32d77eb51ffa1dd28a7e0000000000000000000000007de91b204c1c737bcee6f000aaa6569cf7061cb70000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff42720000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e000000000000000000000000e4815ae53b124e7263f08dcdbbb757d41ed658c6000000000000000000000000aa602de53347579f86b996d2add74bb6f79462b2000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498

-----Decoded View---------------
Arg [0] : initialPeers (address[]): 0x6C9E8391a0444c739e7e2edd37A2C6e3381b1cbF,0xEf22D478a53bc8BBe854ceF8bA2eb79C49A1a171,0x6219D0BA6A0BAfA69CD2B1B15633a3FD864Dd371
Arg [1] : sidechainTokenAddresses (address[]): 0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB,0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA,0xc7D9c108D4E1dD1484D3e2568d7f74bfD763d356,0x5E7F20e72C21f6D0Bf0A2814FD4164176401cf8e,0xC60D6662027F5797Cf873bFe80BcF048e30Fc35e
Arg [2] : sidechainAssetIds (bytes32[]): System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[]
Arg [3] : erc20Addresses (address[]): 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9,0xADE00C28244d5CE17D72E40330B1c318cD12B7c3,0x8Ab7404063Ec4DBcfd4598215992DC3F8EC853d7,0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF,0x27702a26126e0B3702af63Ee09aC4d1A084EF628,0xa1faa113cbE53436Df28FF0aEe54275c13B40975,0xfF20817765cB7f73d4bde2e66e067E58D11095C2,0x8290333ceF9e6D528dD5618Fb97a76f268f3EDD4,0xa117000000f279D81A1D3cc75430fAA017FA5A2e,0xA9B1Eb5908CfC3cdf91F9B8B3a74108598009096,0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998,0xF5D669627376EBd411E34b98F19C868c8ABA5ADA,0x3472A5A71965499acd81997a54BBA8D852C6E53d,0xba100000625a3754423978a60c9317c58a424e3D,0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55,0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C,0xD2dDa223b2617cB616c1580db421e4cFAe6a8a85,0xcB97e65F07DA24D46BcDD078EBebd7C6E6E3d750,0xcca0c9c383076649604eE31b20248BC04FdF61cA,0x4Fabb145d64652a948d72533023f6E7A623C7C53,0x56d811088235F11C8920698a204A5010a788f4b3,0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643,0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d,0x4F9254C83EB525f9FCf346490bbb3ed28a81C667,0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5,0x3506424F91fD33084466F402d5D97f05F8e3b4AF,0xc00e94Cb662C3520282E6f5717214004A7f26888,0x115eC79F1de567eC68B7AE7eDA501b406626478e,0x2ba592F78dB6436527729929AAf6c908497cB200,0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b,0x32a7C02e79c4ea1008dD6564b35F131428673c41,0xD533a949740bb3306d119CC777fa900bA034cd52,0x35A18000230DA775CAc24873d00Ff85BccdeD550,0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9,0x41e5560054824eA6B0732E656E3Ad64E20e94E45,0x6B175474E89094C44Da98b954EedeAC495271d0F,0x3597bfD533a99c9aa083587B074434E61Eb0A258,0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419,0x43Dfc4159D86F3A37A5A4B3D4580b888ad7d4DDd,0xbf2179859fc6D5BEE9Bf9158632Dc51678a4100e,0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c,0xBBc2AE13b23d715c30720F079fcd9B4a74093505,0xd33D0EB1c0c0295c3A2409a9101dd511823Bf217,0xa0246c9032bC3A600820415aE600c6388619A14D,0x956F47F50A910163D8BF957Cf5846D573E7f87CA,0xaea46A60368A7bD060eec7DF8CBa43b7EF41Ad85,0xef3A930e1FfFFAcd2fc13434aC81bD278B0ecC8d,0xF6eA0E60cee427B90aA36f327eE61d1d4CABC49F,0xf8C3527CC04340b208C854E985240c02F7B7793f,0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9,0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b,0x8c15Ef5b4B21951d50E53E4fbdA8298FFAD25057,0x7DD9c5Cba05E151C895FDe1CF355C9A1D5DA6429,0x6810e776880C02933D47DB1b9fc05908e5386b96,0xb1f871Ae9462F1b2C6826E88A7827e76f86751d4,0xc944E90C64B2c07662A292be6244BDf05Cda44a7,0xE66747a101bFF2dBA3697199DCcE5b743b454759,0x0316EB71485b0Ab14103307bf65a021042c6d380,0x6c6EE5e31d828De241282B9606C8e98Ea48526E2,0xdF574c24545E5FfEcb9a659c229253D4111d87e1,0xB705268213D593B8FD88d3FDEFF93AFF5CbDcfAE,0xD9Ec3ff1f8be459Bb9369b4E79e9Ebcf7141C093,0xf34960d9d60be18cC1D5Afc1A6F012A723a28811,0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC,0xdd974D5C2e2928deA5F71b9825b8b646686BD200,0xCb4e8CafEDa995da5cEdfda5205BD5664a12b848,0xaC1B818E9F1Fb4e34413d631cB298FBc8A986f52,0x67B6D479c7bB412C54e03dCA8E1Bc6740ce6b99C,0x2AF5D2aD76741191D15Dfe7bF6aC92d4Bd912Ca3,0x3E9BC21C9b189C09dF3eF1B824798658d5011937,0x514910771AF9Ca656af840dff83E8264EcF986CA,0xb59490aB09A0f526Cc7305822aC65f2Ab12f9723,0x58b6A8A3302369DAEc383334672404Ee733aB239,0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD,0x5f98805A4E8be255a32880FDeC7F6728C6568bA0,0x0F5D2fB29fb7d3CFeE444a200298f468908cC942,0x08d967bb0134F2d07f7cfb6E246680c53927DD30,0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0,0x0CDF9acd87E940837ff21BB40c9fd55F68bba059,0x09a3EcAFa817268f77BE1283176B946C4ff2E608,0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2,0xF433089366899D83a9f26A773D59ec7eCF30355e,0x5Ca381bBfb58f0092df149bD3D243b08B9a8386e,0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206,0x5Cf04716BA20127F1E2297AdDCf4B5035000c9eb,0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671,0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca,0xd7c49CEE7E9188cCa6AD8FF264C1DA2e69D4Cf3B,0x967da4048cD07aB37855c090aAF366e4ce1b9F48,0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26,0x75231F58b43240C9718Dd58B4967c5114342a86c,0xd26114cd6EE289AccF82350c8d8487fedB8A0C07,0xff56Cc6b1E6dEd347aA0B7676C85AB0B3D08B0FA,0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a,0x8E870D67F660D95d5be530380D0eC0bd388289E1,0xF59ae934f6fe444afC309586cC60a84a0F89Aaea,0x6c5bA91642F10282b576d91922Ae6448C9d52f4E,0x89Ab32156e46F46D02ade3FEcbe5Fc4243B9AAeD,0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC,0xd4fa1460F537bb9085d22C7bcCB5DD450Ef28e3a,0xEA26c4aC16D4a5A106820BC8AEE85fd0b7b2b664,0x4a220E6096B25EADb88358cb44068A3248254675,0x93dfaf57D986B9cA77Df9376c50878E013D9c7C8,0xD01cb3d113a864763DD3977FE1E725860013b0Ed,0x505f5a4fF10985FE9F93f2aE3501dA5fE665F08A,0xFE3E6a25e6b192A42a44ecDDCd13796471735ACf,0x408e41876cCCDC0F92210600ef50372656052a38,0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D,0x221657776846890989a759BA2973e427DfF5C9bB,0x9559Aaa82d9649C7A7b220E7c461d2E74c9a3593,0xC82eb6dEa0c93EDb8B697B89ad1b13d19469D635,0xa1d6Df714F91DeBF4e0802A542E13067f31b8262,0x3c3842c4d3037Ae121d69eA1e7a0b61413BE806C,0x607F4C5BB672230e8672085532f7e901544a7375,0xfA5047c9c78B8877af97BDcb85Db743fD7313d4a,0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64,0xB4EFd85c19999D84251304bDA99E90B92300Bd93,0x8762db106B2c2A0bccB3A80d1Ed41273552616E8,0x3155BA85D5F96b2d030a4966AF206230e46849cb,0x08AD83D779BDf2BBE1ad9cc0f78aa0D24AB97802,0x3845badAde8e6dFF049820680d1F14bD3903a5d0,0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb,0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7,0x744d70FDBE2Ba4CF95131626614a1763DF805B9E,0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F,0x0Ae055097C6d159879521C384F1D2123D1f195e6,0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84,0xbE9375C6a420D2eEB258962efB95551A5b722803,0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC,0xDe7D85157d9714EADf595045CC12Ca4A5f3E2aDb,0xe53EC727dbDEB9E2d5456c3be40cFF031AB40A55,0x57Ab1ec28D129707052df4dF418D58a2D46d5f51,0x6B3595068778DD592e39A122f4f5a5cF09C90fE2,0xCC4304A31d09258b0029eA7FE63d032f52e44EFe,0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9,0x467Bccd9d29f223BcE8043b84E8C8B282827790F,0x3A8cCCB969a61532d1E6005e2CE12C200caeCe87,0x888888848B652B3E3a0f34c96E00EEC0F3a23F72,0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F,0x88dF592F8eb5D7Bd38bFeF7dEb0fBc02cf3778a0,0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B,0x0000000000085d4780B73119b644AE5ecd22b376,0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF,0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e,0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828,0x61107a409fFFe1965126aa456Af679719695C69C,0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984,0xD13c7342e1ef687C5ad21b27c2b65D772cAb5C8c,0x8806926Ab68EB5a7b909DcAf6FdBe5d93271D6e2,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0x674C6Ad92Fd080e4004b2312b45f796a192D27a0,0xdAC17F958D2ee523a2206206994597C13D831ec7,0xa47c8bf37f92aBed4A126BDA807A7b7498661acD,0xdc9Ac3C20D1ed0B540dF9b1feDC10039Df13F99c,0x5Af2Be193a6ABCa9c8817001F45744777Db30756,0xF411903cbC70a74d22900a5DE66A2dda66507255,0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,0xc221b7E65FfC80DE234bbB6667aBDd46593D34F0,0x4691937a7508860F876c9c0a2a617E7d9E945D4B,0x892A6f9dF0147e5f079b0993F486F9acA3c87881,0x6FCb6408499a7c0f242E32D77EB51fFa1dD28a7E,0x7dE91B204C1C737bcEe6F000AAA6569Cf7061cb7,0x8798249c2E607446EfB7Ad49eC89dD1865Ff4272,0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e,0xe4815AE53B124e7263F08dcDBBB757d41Ed658c6,0xaa602dE53347579f86b996D2Add74bb6F79462b2,0xE41d2489571d322189246DaFA5ebDe1F4699F498
Arg [4] : addressVAL (address): 0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4
Arg [5] : addressXOR (address): 0x40FD72257597aA14C7231A7B1aaa29Fce868F677
Arg [6] : networkId (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000

-----Encoded View---------------
191 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [3] : 00000000000000000000000000000000000000000000000000000000000002e0
Arg [4] : 000000000000000000000000e88f8313e61a97cec1871ee37fbbe2a8bf3ed1e4
Arg [5] : 00000000000000000000000040fd72257597aa14c7231a7b1aaa29fce868f677
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 0000000000000000000000006c9e8391a0444c739e7e2edd37a2c6e3381b1cbf
Arg [9] : 000000000000000000000000ef22d478a53bc8bbe854cef8ba2eb79c49a1a171
Arg [10] : 0000000000000000000000006219d0ba6a0bafa69cd2b1b15633a3fd864dd371
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [12] : 000000000000000000000000519c1001d550c0a1dae7d1fc220f7d14c2a521bb
Arg [13] : 0000000000000000000000002e7b0d4f9b2eaf782ed3d160e3a0a4b1a7930ada
Arg [14] : 000000000000000000000000c7d9c108d4e1dd1484d3e2568d7f74bfd763d356
Arg [15] : 0000000000000000000000005e7f20e72c21f6d0bf0a2814fd4164176401cf8e
Arg [16] : 000000000000000000000000c60d6662027f5797cf873bfe80bcf048e30fc35e
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [18] : 0200050000000000000000000000000000000000000000000000000000000000
Arg [19] : 008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440
Arg [20] : 0200080000000000000000000000000000000000000000000000000000000000
Arg [21] : 00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674
Arg [22] : 0200090000000000000000000000000000000000000000000000000000000000
Arg [23] : 00000000000000000000000000000000000000000000000000000000000000a7
Arg [24] : 0000000000000000000000007fc66500c84a76ad7e9c93437bfc5ac33e2ddae9
Arg [25] : 000000000000000000000000ade00c28244d5ce17d72e40330b1c318cd12b7c3
Arg [26] : 0000000000000000000000008ab7404063ec4dbcfd4598215992dc3f8ec853d7
Arg [27] : 000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df
Arg [28] : 00000000000000000000000027702a26126e0b3702af63ee09ac4d1a084ef628
Arg [29] : 000000000000000000000000a1faa113cbe53436df28ff0aee54275c13b40975
Arg [30] : 000000000000000000000000ff20817765cb7f73d4bde2e66e067e58d11095c2
Arg [31] : 0000000000000000000000008290333cef9e6d528dd5618fb97a76f268f3edd4
Arg [32] : 000000000000000000000000a117000000f279d81a1d3cc75430faa017fa5a2e
Arg [33] : 000000000000000000000000a9b1eb5908cfc3cdf91f9b8b3a74108598009096
Arg [34] : 00000000000000000000000018aaa7115705e8be94bffebde57af9bfc265b998
Arg [35] : 000000000000000000000000f5d669627376ebd411e34b98f19c868c8aba5ada
Arg [36] : 0000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d
Arg [37] : 000000000000000000000000ba100000625a3754423978a60c9317c58a424e3d
Arg [38] : 000000000000000000000000ba11d00c5f74255f56a5e366f4f77f5a186d7f55
Arg [39] : 0000000000000000000000001f573d6fb3f13d689ff844b4ce37794d79a7ff1c
Arg [40] : 000000000000000000000000d2dda223b2617cb616c1580db421e4cfae6a8a85
Arg [41] : 000000000000000000000000cb97e65f07da24d46bcdd078ebebd7c6e6e3d750
Arg [42] : 000000000000000000000000cca0c9c383076649604ee31b20248bc04fdf61ca
Arg [43] : 0000000000000000000000004fabb145d64652a948d72533023f6e7a623c7c53
Arg [44] : 00000000000000000000000056d811088235f11c8920698a204a5010a788f4b3
Arg [45] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [46] : 000000000000000000000000aaaebe6fe48e54f431b0c390cfaf0b017d09d42d
Arg [47] : 0000000000000000000000004f9254c83eb525f9fcf346490bbb3ed28a81c667
Arg [48] : 0000000000000000000000004ddc2d193948926d02f9b1fe9e1daa0718270ed5
Arg [49] : 0000000000000000000000003506424f91fd33084466f402d5d97f05f8e3b4af
Arg [50] : 000000000000000000000000c00e94cb662c3520282e6f5717214004a7f26888
Arg [51] : 000000000000000000000000115ec79f1de567ec68b7ae7eda501b406626478e
Arg [52] : 0000000000000000000000002ba592f78db6436527729929aaf6c908497cb200
Arg [53] : 000000000000000000000000a0b73e1ff0b80914ab6fe0444e65848c4c34450b
Arg [54] : 00000000000000000000000032a7c02e79c4ea1008dd6564b35f131428673c41
Arg [55] : 000000000000000000000000d533a949740bb3306d119cc777fa900ba034cd52
Arg [56] : 00000000000000000000000035a18000230da775cac24873d00ff85bccded550
Arg [57] : 000000000000000000000000f650c3d88d12db855b8bf7d11be6c55a4e07dcc9
Arg [58] : 00000000000000000000000041e5560054824ea6b0732e656e3ad64e20e94e45
Arg [59] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [60] : 0000000000000000000000003597bfd533a99c9aa083587b074434e61eb0a258
Arg [61] : 00000000000000000000000084ca8bc7997272c7cfb4d0cd3d55cd942b3c9419
Arg [62] : 00000000000000000000000043dfc4159d86f3a37a5a4b3d4580b888ad7d4ddd
Arg [63] : 000000000000000000000000bf2179859fc6d5bee9bf9158632dc51678a4100e
Arg [64] : 000000000000000000000000f629cbd94d3791c9250152bd8dfbdf380e2a3b9c
Arg [65] : 000000000000000000000000bbc2ae13b23d715c30720f079fcd9b4a74093505
Arg [66] : 000000000000000000000000d33d0eb1c0c0295c3a2409a9101dd511823bf217
Arg [67] : 000000000000000000000000a0246c9032bc3a600820415ae600c6388619a14d
Arg [68] : 000000000000000000000000956f47f50a910163d8bf957cf5846d573e7f87ca
Arg [69] : 000000000000000000000000aea46a60368a7bd060eec7df8cba43b7ef41ad85
Arg [70] : 000000000000000000000000ef3a930e1ffffacd2fc13434ac81bd278b0ecc8d
Arg [71] : 000000000000000000000000f6ea0e60cee427b90aa36f327ee61d1d4cabc49f
Arg [72] : 000000000000000000000000f8c3527cc04340b208c854e985240c02f7b7793f
Arg [73] : 00000000000000000000000050d1c9771902476076ecfc8b2a83ad6b9355a4c9
Arg [74] : 000000000000000000000000419d0d8bdd9af5e606ae2232ed285aff190e711b
Arg [75] : 0000000000000000000000008c15ef5b4b21951d50e53e4fbda8298ffad25057
Arg [76] : 0000000000000000000000007dd9c5cba05e151c895fde1cf355c9a1d5da6429
Arg [77] : 0000000000000000000000006810e776880c02933d47db1b9fc05908e5386b96
Arg [78] : 000000000000000000000000b1f871ae9462f1b2c6826e88a7827e76f86751d4
Arg [79] : 000000000000000000000000c944e90c64b2c07662a292be6244bdf05cda44a7
Arg [80] : 000000000000000000000000e66747a101bff2dba3697199dcce5b743b454759
Arg [81] : 0000000000000000000000000316eb71485b0ab14103307bf65a021042c6d380
Arg [82] : 0000000000000000000000006c6ee5e31d828de241282b9606c8e98ea48526e2
Arg [83] : 000000000000000000000000df574c24545e5ffecb9a659c229253d4111d87e1
Arg [84] : 000000000000000000000000b705268213d593b8fd88d3fdeff93aff5cbdcfae
Arg [85] : 000000000000000000000000d9ec3ff1f8be459bb9369b4e79e9ebcf7141c093
Arg [86] : 000000000000000000000000f34960d9d60be18cc1d5afc1a6f012a723a28811
Arg [87] : 00000000000000000000000085eee30c52b0b379b046fb0f85f4f3dc3009afec
Arg [88] : 000000000000000000000000dd974d5c2e2928dea5f71b9825b8b646686bd200
Arg [89] : 000000000000000000000000cb4e8cafeda995da5cedfda5205bd5664a12b848
Arg [90] : 000000000000000000000000ac1b818e9f1fb4e34413d631cb298fbc8a986f52
Arg [91] : 00000000000000000000000067b6d479c7bb412c54e03dca8e1bc6740ce6b99c
Arg [92] : 0000000000000000000000002af5d2ad76741191d15dfe7bf6ac92d4bd912ca3
Arg [93] : 0000000000000000000000003e9bc21c9b189c09df3ef1b824798658d5011937
Arg [94] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [95] : 000000000000000000000000b59490ab09a0f526cc7305822ac65f2ab12f9723
Arg [96] : 00000000000000000000000058b6a8a3302369daec383334672404ee733ab239
Arg [97] : 000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd
Arg [98] : 0000000000000000000000005f98805a4e8be255a32880fdec7f6728c6568ba0
Arg [99] : 0000000000000000000000000f5d2fb29fb7d3cfee444a200298f468908cc942
Arg [100] : 00000000000000000000000008d967bb0134f2d07f7cfb6e246680c53927dd30
Arg [101] : 0000000000000000000000007d1afa7b718fb893db30a3abc0cfc608aacfebb0
Arg [102] : 0000000000000000000000000cdf9acd87e940837ff21bb40c9fd55f68bba059
Arg [103] : 00000000000000000000000009a3ecafa817268f77be1283176b946c4ff2e608
Arg [104] : 0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2
Arg [105] : 000000000000000000000000f433089366899d83a9f26a773d59ec7ecf30355e
Arg [106] : 0000000000000000000000005ca381bbfb58f0092df149bd3d243b08b9a8386e
Arg [107] : 000000000000000000000000b62132e35a6c13ee1ee0f84dc5d40bad8d815206
Arg [108] : 0000000000000000000000005cf04716ba20127f1e2297addcf4b5035000c9eb
Arg [109] : 0000000000000000000000001776e1f26f98b1a5df9cd347953a26dd3cb46671
Arg [110] : 000000000000000000000000a8c8cfb141a3bb59fea1e2ea6b79b5ecbcd7b6ca
Arg [111] : 000000000000000000000000d7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b
Arg [112] : 000000000000000000000000967da4048cd07ab37855c090aaf366e4ce1b9f48
Arg [113] : 0000000000000000000000008207c1ffc5b6804f6024322ccf34f29c3541ae26
Arg [114] : 00000000000000000000000075231f58b43240c9718dd58b4967c5114342a86c
Arg [115] : 000000000000000000000000d26114cd6ee289accf82350c8d8487fedb8a0c07
Arg [116] : 000000000000000000000000ff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa
Arg [117] : 0000000000000000000000000258f474786ddfd37abce6df6bbb1dd5dfc4434a
Arg [118] : 0000000000000000000000008e870d67f660d95d5be530380d0ec0bd388289e1
Arg [119] : 000000000000000000000000f59ae934f6fe444afc309586cc60a84a0f89aaea
Arg [120] : 0000000000000000000000006c5ba91642f10282b576d91922ae6448c9d52f4e
Arg [121] : 00000000000000000000000089ab32156e46f46d02ade3fecbe5fc4243b9aaed
Arg [122] : 0000000000000000000000009992ec3cf6a55b00978cddf2b27bc6882d88d1ec
Arg [123] : 000000000000000000000000d4fa1460f537bb9085d22c7bccb5dd450ef28e3a
Arg [124] : 000000000000000000000000ea26c4ac16d4a5a106820bc8aee85fd0b7b2b664
Arg [125] : 0000000000000000000000004a220e6096b25eadb88358cb44068a3248254675
Arg [126] : 00000000000000000000000093dfaf57d986b9ca77df9376c50878e013d9c7c8
Arg [127] : 000000000000000000000000d01cb3d113a864763dd3977fe1e725860013b0ed
Arg [128] : 000000000000000000000000505f5a4ff10985fe9f93f2ae3501da5fe665f08a
Arg [129] : 000000000000000000000000fe3e6a25e6b192a42a44ecddcd13796471735acf
Arg [130] : 000000000000000000000000408e41876cccdc0f92210600ef50372656052a38
Arg [131] : 000000000000000000000000eb4c2781e4eba804ce9a9803c67d0893436bb27d
Arg [132] : 000000000000000000000000221657776846890989a759ba2973e427dff5c9bb
Arg [133] : 0000000000000000000000009559aaa82d9649c7a7b220e7c461d2e74c9a3593
Arg [134] : 000000000000000000000000c82eb6dea0c93edb8b697b89ad1b13d19469d635
Arg [135] : 000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b8262
Arg [136] : 0000000000000000000000003c3842c4d3037ae121d69ea1e7a0b61413be806c
Arg [137] : 000000000000000000000000607f4c5bb672230e8672085532f7e901544a7375
Arg [138] : 000000000000000000000000fa5047c9c78b8877af97bdcb85db743fd7313d4a
Arg [139] : 000000000000000000000000ad4f86a25bbc20ffb751f2fac312a0b4d8f88c64
Arg [140] : 000000000000000000000000b4efd85c19999d84251304bda99e90b92300bd93
Arg [141] : 0000000000000000000000008762db106b2c2a0bccb3a80d1ed41273552616e8
Arg [142] : 0000000000000000000000003155ba85d5f96b2d030a4966af206230e46849cb
Arg [143] : 00000000000000000000000008ad83d779bdf2bbe1ad9cc0f78aa0d24ab97802
Arg [144] : 0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d0
Arg [145] : 0000000000000000000000005e74c9036fb86bd7ecdcb084a0673efc32ea31cb
Arg [146] : 00000000000000000000000000c83aecc790e8a4453e5dd3b0b4b3680501a7a7
Arg [147] : 000000000000000000000000744d70fdbe2ba4cf95131626614a1763df805b9e
Arg [148] : 000000000000000000000000c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f
Arg [149] : 0000000000000000000000000ae055097c6d159879521c384f1d2123d1f195e6
Arg [150] : 000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84
Arg [151] : 000000000000000000000000be9375c6a420d2eeb258962efb95551a5b722803
Arg [152] : 000000000000000000000000b64ef51c888972c908cfacf59b47c1afbc0ab8ac
Arg [153] : 000000000000000000000000de7d85157d9714eadf595045cc12ca4a5f3e2adb
Arg [154] : 000000000000000000000000e53ec727dbdeb9e2d5456c3be40cff031ab40a55
Arg [155] : 00000000000000000000000057ab1ec28d129707052df4df418d58a2d46d5f51
Arg [156] : 0000000000000000000000006b3595068778dd592e39a122f4f5a5cf09c90fe2
Arg [157] : 000000000000000000000000cc4304a31d09258b0029ea7fe63d032f52e44efe
Arg [158] : 0000000000000000000000008ce9137d39326ad0cd6491fb5cc0cba0e089b6a9
Arg [159] : 000000000000000000000000467bccd9d29f223bce8043b84e8c8b282827790f
Arg [160] : 0000000000000000000000003a8cccb969a61532d1e6005e2ce12c200caece87
Arg [161] : 000000000000000000000000888888848b652b3e3a0f34c96e00eec0f3a23f72
Arg [162] : 000000000000000000000000aa7a9ca87d3694b5755f213b5d04094b8d0f0a6f
Arg [163] : 00000000000000000000000088df592f8eb5d7bd38bfef7deb0fbc02cf3778a0
Arg [164] : 000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b
Arg [165] : 0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376
Arg [166] : 000000000000000000000000dbdb4d16eda451d0503b854cf79d55697f90c8df
Arg [167] : 0000000000000000000000008400d94a5cb0fa0d041a3788e395285d61c9ee5e
Arg [168] : 00000000000000000000000004fa0d235c4abf4bcf4787af4cf447de572ef828
Arg [169] : 00000000000000000000000061107a409fffe1965126aa456af679719695c69c
Arg [170] : 0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984
Arg [171] : 000000000000000000000000d13c7342e1ef687c5ad21b27c2b65d772cab5c8c
Arg [172] : 0000000000000000000000008806926ab68eb5a7b909dcaf6fdbe5d93271d6e2
Arg [173] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [174] : 000000000000000000000000674c6ad92fd080e4004b2312b45f796a192d27a0
Arg [175] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [176] : 000000000000000000000000a47c8bf37f92abed4a126bda807a7b7498661acd
Arg [177] : 000000000000000000000000dc9ac3c20d1ed0b540df9b1fedc10039df13f99c
Arg [178] : 0000000000000000000000005af2be193a6abca9c8817001f45744777db30756
Arg [179] : 000000000000000000000000f411903cbc70a74d22900a5de66a2dda66507255
Arg [180] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [181] : 000000000000000000000000c221b7e65ffc80de234bbb6667abdd46593d34f0
Arg [182] : 0000000000000000000000004691937a7508860f876c9c0a2a617e7d9e945d4b
Arg [183] : 000000000000000000000000892a6f9df0147e5f079b0993f486f9aca3c87881
Arg [184] : 0000000000000000000000006fcb6408499a7c0f242e32d77eb51ffa1dd28a7e
Arg [185] : 0000000000000000000000007de91b204c1c737bcee6f000aaa6569cf7061cb7
Arg [186] : 0000000000000000000000008798249c2e607446efb7ad49ec89dd1865ff4272
Arg [187] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [188] : 000000000000000000000000e4815ae53b124e7263f08dcdbbb757d41ed658c6
Arg [189] : 000000000000000000000000aa602de53347579f86b996d2add74bb6f79462b2
Arg [190] : 000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

SORA is an on-chain governance system based around the XOR token that allows producers to make proposals for funding and all token holders make decisions on how to allocate XOR so that the best goods and services get created.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
ETH
Ether (ETH)
67.14%$3,116.52385.3189$1,200,852.24
ETH19.78%$0.999964353,742.5986$353,729.86
ETH5.14%$0.99955392,037.6316$91,996.49
ETH1.13%$12.171,656.0563$20,154.21
ETH1.09%$66,8390.2908$19,433.49
ETH0.97%$16.381,055.9921$17,297.15
ETH0.51%$19,179.3328$9,197.69
ETH0.47%$0.9590118,676.9408$8,321.28
ETH0.43%$0.9999197,770.9991$7,770.37
ETH0.32%$0.7140877,924.7319$5,658.95
ETH0.29%$0.18119328,221.019$5,113.45
ETH0.24%$66,6900.0644$4,295.76
ETH0.23%$14,189.17$4,189.17
ETH0.23%$8.01511.2669$4,095.25
ETH0.21%$88.4141.5901$3,676.79
ETH0.17%$0.011044270,425.1335$2,986.68
ETH0.16%$0.00704396,156.5078$2,788.98
ETH0.12%$3.21683.1205$2,192.82
ETH0.11%$0.7309922,710.3384$1,981.24
ETH0.10%$0.3095615,508.2456$1,705.14
ETH0.09%$0.014856105,763.6046$1,571.23
ETH0.08%$0.003204456,041.1358$1,461.02
ETH0.08%$403.723.5867$1,448.03
ETH0.08%$5.88244.975$1,440.45
ETH0.07%$0.433473,029.3205$1,313.12
ETH0.07%$0.6219022,010.8678$1,250.56
ETH0.06%$1.04999.8466$1,036.84
ETH0.06%$2,808.610.3526$990.25
ETH0.05%$50.0319.294$965.28
ETH0.05%$0.1243046,804.2006$845.79
ETH0.04%$57.1213.1276$749.9
ETH0.04%$0.5071481,414.5429$717.38
ETH0.04%$0.999862700.076$699.98
ETH0.04%$56.5911.4696$649.06
ETH0.04%$0.4304291,473.6001$634.28
ETH0.04%$1.31481.9424$631.34
ETH0.03%$0.5148341,214.4466$625.24
ETH0.03%$3.64167.4004$609.34
ETH0.03%$1.11509.4182$565.45
ETH0.03%$0.002253249,765.0414$562.81
ETH0.03%$7,015.790.0788$552.83
ETH0.03%$0.004046125,690.07$508.5
ETH0.03%$0.595119847.9219$504.61
ETH0.01%$0.0586914,332.236$254.26
ETH<0.01%$0.362754320.5249$116.27
ETH<0.01%$0.0600111,243.1325$74.6
ETH<0.01%$0.0222182,844.1408$63.19
ETH<0.01%$1.6233.4778$54.23
ETH<0.01%$0.142881277.7952$39.69
ETH<0.01%$19.052.0815$39.65
ETH<0.01%$4.347.1912$31.19
ETH<0.01%$0.045285566.4$25.65
ETH<0.01%$0.071819306.0914$21.98
ETH<0.01%$0.13461584.5386$11.38
ETH<0.01%$0.045139137.6502$6.21
ETH<0.01%$0.9827613.5977$3.54
ETH<0.01%$0.8860393$2.66
ETH<0.01%$0.0012361,000$1.24
ETH<0.01%$0.0810046.8$0.5508
ETH<0.01%$0.7288070.7465$0.544
ETH<0.01%$0.000561430.6793$0.2417
ETH<0.01%$0.00343955.8808$0.1921
MATIC<0.01%$0.7151096.3887$4.57
Loading...
Loading
[ 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.