ETH Price: $2,522.11 (-0.73%)

Contract

0x21C1ADBbf9B7059b60329ceDB2E375a585f35405
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Poseidon122780512021-04-20 16:15:161291 days ago1618935316IN
0x21C1ADBb...585f35405
0 ETH0.03687138260
Set Whitelist122769332021-04-20 12:08:511291 days ago1618920531IN
0x21C1ADBb...585f35405
0 ETH0.01069684220
Set Whitelist122769322021-04-20 12:08:351291 days ago1618920515IN
0x21C1ADBb...585f35405
0 ETH0.01069684220
Set Whitelist122769322021-04-20 12:08:351291 days ago1618920515IN
0x21C1ADBb...585f35405
0 ETH0.01069684220
Set Sibling122769052021-04-20 12:03:561291 days ago1618920236IN
0x21C1ADBb...585f35405
0 ETH0.01093081236
Set Sibling122769032021-04-20 12:03:411291 days ago1618920221IN
0x21C1ADBb...585f35405
0 ETH0.01092798236
0x60806040122765772021-04-20 10:50:491291 days ago1618915849IN
 Create: TideParent
0 ETH0.66450239190

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TideParent

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-20
*/

/*
  The shared configuration for tidal and riptide sibling tokens
  riptide.finance

  @nightg0at
  SPDX-License-Identifier: MIT
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: 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
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/introspection/IERC165.sol



pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol



pragma solidity >=0.6.2 <0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

// File: @openzeppelin/contracts/introspection/IERC1820Registry.sol



pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the global ERC1820 Registry, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register
 * implementers for interfaces in this registry, as well as query support.
 *
 * Implementers may be shared by multiple accounts, and can also implement more
 * than a single interface for each account. Contracts can implement interfaces
 * for themselves, but externally-owned accounts (EOA) must delegate this to a
 * contract.
 *
 * {IERC165} interfaces can also be queried via the registry.
 *
 * For an in-depth explanation and source code analysis, see the EIP text.
 */
interface IERC1820Registry {
    /**
     * @dev Sets `newManager` as the manager for `account`. A manager of an
     * account is able to set interface implementers for it.
     *
     * By default, each account is its own manager. Passing a value of `0x0` in
     * `newManager` will reset the manager to this initial state.
     *
     * Emits a {ManagerChanged} event.
     *
     * Requirements:
     *
     * - the caller must be the current manager for `account`.
     */
    function setManager(address account, address newManager) external;

    /**
     * @dev Returns the manager for `account`.
     *
     * See {setManager}.
     */
    function getManager(address account) external view returns (address);

    /**
     * @dev Sets the `implementer` contract as ``account``'s implementer for
     * `interfaceHash`.
     *
     * `account` being the zero address is an alias for the caller's address.
     * The zero address can also be used in `implementer` to remove an old one.
     *
     * See {interfaceHash} to learn how these are created.
     *
     * Emits an {InterfaceImplementerSet} event.
     *
     * Requirements:
     *
     * - the caller must be the current manager for `account`.
     * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
     * end in 28 zeroes).
     * - `implementer` must implement {IERC1820Implementer} and return true when
     * queried for support, unless `implementer` is the caller. See
     * {IERC1820Implementer-canImplementInterfaceForAddress}.
     */
    function setInterfaceImplementer(address account, bytes32 _interfaceHash, address implementer) external;

    /**
     * @dev Returns the implementer of `interfaceHash` for `account`. If no such
     * implementer is registered, returns the zero address.
     *
     * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
     * zeroes), `account` will be queried for support of it.
     *
     * `account` being the zero address is an alias for the caller's address.
     */
    function getInterfaceImplementer(address account, bytes32 _interfaceHash) external view returns (address);

    /**
     * @dev Returns the interface hash for an `interfaceName`, as defined in the
     * corresponding
     * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP].
     */
    function interfaceHash(string calldata interfaceName) external pure returns (bytes32);

    /**
     *  @notice Updates the cache with whether the contract implements an ERC165 interface or not.
     *  @param account Address of the contract for which to update the cache.
     *  @param interfaceId ERC165 interface for which to update the cache.
     */
    function updateERC165Cache(address account, bytes4 interfaceId) external;

    /**
     *  @notice Checks whether a contract implements an ERC165 interface or not.
     *  If the result is not cached a direct lookup on the contract address is performed.
     *  If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
     *  {updateERC165Cache} with the contract address.
     *  @param account Address of the contract to check.
     *  @param interfaceId ERC165 interface to check.
     *  @return True if `account` implements `interfaceId`, false otherwise.
     */
    function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);

    /**
     *  @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.
     *  @param account Address of the contract to check.
     *  @param interfaceId ERC165 interface to check.
     *  @return True if `account` implements `interfaceId`, false otherwise.
     */
    function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);

    event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);

    event ManagerChanged(address indexed account, address indexed newManager);
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: @openzeppelin/contracts/GSN/Context.sol



pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol



pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/Whitelist.sol

/*
  Exemption whitelists and convenience methods for Tidal's punitive mechanisms

  @nightg0at
*/


pragma solidity 0.6.12;

contract Whitelist is Ownable {

  // protectors can be ERC20, ERC777 or ERC1155 tokens
  // ERC115 tokens have a different balanceOf() method, so we use the ERC1820 registry to identify the ERC1155 interface
  IERC1820Registry private erc1820Registry; // 0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24
  bytes4 private constant ERC1155_INTERFACE_ID = 0xd9b67a26;

  // used to identify if an address is likely to be a uniswap pair
  address private constant UNISWAP_FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;

  // tokens that offer the holder some kind of protection
  struct TokenAttributes {
    bool active;
    uint256 proportion; // proportion of incoming tokens used as burn amount (typically 1 or 0.5)
    uint256 floor; // the lowest the balance can be after a wipeout event
  }

  struct TokenID {
    address addr;
    uint256 id; // for IERC1155 tokens else 0
  }

  // addresses that have some kind of protection as if they are holding protective tokens
  struct AddressAttributes {
    bool active;
    uint256 proportion;
    uint256 floor;
  }

  // addresses that do not incur punitive burns or wipeouts as senders or receivers
  struct WhitelistAttributes {
    bool active;
    bool sendBurn;
    bool receiveBurn;
    bool sendWipeout;
    bool receiveWipeout;
  }

  uint256 public defaultProportion = 1e18;
  uint256 public defaultFloor = 0;

  constructor(
    IERC1820Registry _erc1820Registry
  ) public {
    erc1820Registry = _erc1820Registry;
    
    // premine our starting protectors. Surfboards and trident NFTs
    addProtector(0xf90AeeF57Ae8Bc85FE8d40a3f4a45042F4258c67, 0, 5e17, 0); // surfboard, 0.5x, 0 floor
    addProtector(0xd07dc4262BCDbf85190C01c996b4C06a461d2430, 78947, 1e18, 2496e14); // bronze trident , 1x, 0.2496 floor
    addProtector(0xd07dc4262BCDbf85190C01c996b4C06a461d2430, 78955, 1e18, 42e16); // silver trident, 1x, 0.42 floor
    addProtector(0xd07dc4262BCDbf85190C01c996b4C06a461d2430, 78963, 1e18, 69e16); // gold trident, 1x, 0.69 floor

  }

  mapping (address => AddressAttributes) public protectedAddress;
  TokenID[] public protectors;
  mapping (address => mapping (uint256 => TokenAttributes)) public protectorAttributes;
  mapping (address => WhitelistAttributes) public whitelist;
  

  function addProtector(address _token, uint256 _id, uint256 _proportion, uint256 _floor) public onlyOwner {
    uint256 id = isERC1155(_token) ? _id : 0;
    require(protectorAttributes[_token][id].active == false, "WIPEOUT::addProtector: Token already active");
    editProtector(_token, true, id, _proportion, _floor);
    protectors.push(TokenID(_token, id));
  }

  function editProtector(address _token, bool _active, uint256 _id, uint256 _proportion, uint256 _floor) public onlyOwner {
    protectorAttributes[_token][_id] = TokenAttributes(_active, _proportion, _floor);
  }

  function protectorLength() external view returns (uint256) {
    return protectors.length;
  }

  function getProtectorAttributes(address _addr, uint256 _id) external view returns (bool, uint256, uint256) {
    return (
      protectorAttributes[_addr][_id].active,
      protectorAttributes[_addr][_id].proportion,
      protectorAttributes[_addr][_id].floor
    );
  }


  function isERC1155(address _token) private view returns (bool) {
    return erc1820Registry.implementsERC165Interface(_token, ERC1155_INTERFACE_ID);
  }

  function hasProtector(address _addr, address _protector, uint256 _id) public view returns (bool) {
    bool has = false;
    if (isERC1155(_protector)) {
      if (IERC1155(_protector).balanceOf(_addr, _id) > 0) {
        has = true;
      }
    } else {
      if (IERC20(_protector).balanceOf(_addr) > 0) {
        has = true;
      }
    }
    return has;
  }

  function cumulativeProtectionOf(address _addr) external view returns (uint256, uint256) {
    uint256 proportion = defaultProportion;
    uint256 floor = defaultFloor;
    for (uint256 i=0; i<protectors.length; i++) {
      address protector = protectors[i].addr;
      uint256 id = protectors[i].id;
      if (hasProtector(_addr, protector, id)) {
        if (proportion > protectorAttributes[protector][id].proportion) {
          proportion = protectorAttributes[protector][id].proportion;
        }
        if (floor < protectorAttributes[protector][id].floor) {
          floor = protectorAttributes[protector][id].floor;
        }
      }
    }
    return (proportion, floor);
  }

  function setProtectedAddress(address _addr, bool _active, uint256 _proportion, uint256 _floor) public onlyOwner {
    require(_addr != address(0), "WIPEOUT::setProtector: zero address");
    protectedAddress[_addr] = AddressAttributes(_active, _proportion, _floor);
  }

  function getProtectedAddress(address _addr) external view returns (bool, uint256, uint256) {
    return (
      protectedAddress[_addr].active,
      protectedAddress[_addr].proportion,
      protectedAddress[_addr].floor
    );
  }

  function setWhitelist(
    address _whitelisted,
    bool _active,
    bool _sendBurn,
    bool _receiveBurn,
    bool _sendWipeout,
    bool _receiveWipeout
  ) public onlyOwner {
    require(_whitelisted != address(0), "WIPEOUT::setWhitelist: zero address");
    whitelist[_whitelisted] = WhitelistAttributes(_active, _sendBurn, _receiveBurn, _sendWipeout, _receiveWipeout);
  }

  function getWhitelist(address _addr) external view returns (bool, bool, bool, bool, bool) {
    return (
      whitelist[_addr].active,
      whitelist[_addr].sendBurn,
      whitelist[_addr].receiveBurn,
      whitelist[_addr].sendWipeout,
      whitelist[_addr].receiveWipeout
    );
  }

  // checks if the address is a deployed contract and if so,
  // checks if the factory() method is present and returns the uniswap factory address.
  // returns true if it is.
  // This is easy to spoof but the gains are low enough for this to be ok.
  function isUniswapTokenPair(address _addr) public view returns (bool) {
    uint32 size;
    assembly {
      size := extcodesize(_addr)
    }
    if (size == 0) {
      return false;
    } else {
      try IUniswapV2Pair(_addr).factory() returns (address _factory) {
        return _factory == UNISWAP_FACTORY ? true : false;
      } catch {
        return false;
      }
    }
  }

  function isUniswapTokenPairWith(address _pair, address _token) public view returns (bool) {
    return (IUniswapV2Pair(_pair).token0() == _token || IUniswapV2Pair(_pair).token1() == _token);
  }

  function willBurn(address _sender, address _recipient) public view returns (bool) {
    // returns true if everything is false
    return !(whitelist[_sender].sendBurn || whitelist[_recipient].receiveBurn);
  }

  function willWipeout(address _sender, address _recipient) public view returns (bool) {
    bool whitelisted = whitelist[_sender].sendWipeout || isUniswapTokenPair(_sender);
    whitelisted = whitelisted || whitelist[_recipient].receiveWipeout;
    // returns true if everything is false
    return !whitelisted;
  }

}

// File: contracts/interfaces/ITideToken.sol


pragma solidity 0.6.12;


interface ITideToken is IERC20 {
  function owner() external view returns (address);
  function mint(address _to, uint256 _amount) external;
  function setParent(address _newConfig) external;
  function wipeout(address _recipient, uint256 _amount) external;
}

// File: contracts/TideParent.sol

pragma solidity 0.6.12;

contract TideParent is Whitelist {

  address private _poseidon;
  address[2] public siblings; //0: tidal, 1: riptide

  uint256 private _burnRate = 69e15; //6.9%, 0.069
  uint256 private _transmuteRate = 42e14; //0.42%, 0.0042

  constructor(
    IERC1820Registry _erc1820Registry
  ) public Whitelist(_erc1820Registry) {}

  function setPoseidon(address _newPoseidon) public onlyOwner {
    if (whitelist[_poseidon].active) {
      setWhitelist(_poseidon, false, false, false, false, false);
    }
    if (protectedAddress[_poseidon].active) {
      setProtectedAddress(_poseidon, false, 0, 0);
    }
    setProtectedAddress(_newPoseidon, true, 5e17, 69e16);
    setWhitelist(_newPoseidon, true, true, false, true, false);
    _poseidon = _newPoseidon;
  }

  function setSibling(uint256 _index, address _token) public onlyOwner {
    require(_token != address(0), "TIDEPARENT::setToken: zero address");
    siblings[_index] = _token;
  }

  function setAddresses(address _siblingA, address _siblingB, address _newPoseidon) external onlyOwner {
    setSibling(0, _siblingA);
    setSibling(1, _siblingB);
    setPoseidon(_newPoseidon);
  }

  function setBurnRate(uint256 _newBurnRate) external onlyOwner {
    require(_newBurnRate <= 2e17, "TIDEPARENT:setBurnRate: 20% max");
    _burnRate = _newBurnRate;
  }

  function setTransmuteRate(uint256 _newTransmuteRate) external onlyOwner {
    require(_newTransmuteRate <= 1e17, "TIDEPARENT:setTransmuteRate: 10% max");
    _transmuteRate = _newTransmuteRate;
  }

  function setNewParent(address _newConfig) external onlyOwner {
    ITideToken(siblings[0]).setParent(_newConfig);
    ITideToken(siblings[1]).setParent(_newConfig);
  }

  function poseidon() public view returns (address) {
    return _poseidon;
  }

  function burnRate() public view returns (uint256) {
    return _burnRate;
  }

  function transmuteRate() public view returns (uint256) {
    return _transmuteRate;
  }

  function sibling(address _siblingCandidate) public view returns (address) {
    if (_siblingCandidate == siblings[0]) {
      return siblings[1];
    } else if (_siblingCandidate == siblings[1]) {
      return siblings[0];
    } else {
      return address(0);
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC1820Registry","name":"_erc1820Registry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_proportion","type":"uint256"},{"internalType":"uint256","name":"_floor","type":"uint256"}],"name":"addProtector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"cumulativeProtectionOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultFloor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultProportion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_active","type":"bool"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_proportion","type":"uint256"},{"internalType":"uint256","name":"_floor","type":"uint256"}],"name":"editProtector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getProtectedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getProtectorAttributes","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"address","name":"_protector","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"hasProtector","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isUniswapTokenPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"isUniswapTokenPairWith","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poseidon","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"protectedAddress","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"proportion","type":"uint256"},{"internalType":"uint256","name":"floor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"protectorAttributes","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"proportion","type":"uint256"},{"internalType":"uint256","name":"floor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectorLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"protectors","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_siblingA","type":"address"},{"internalType":"address","name":"_siblingB","type":"address"},{"internalType":"address","name":"_newPoseidon","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBurnRate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newConfig","type":"address"}],"name":"setNewParent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPoseidon","type":"address"}],"name":"setPoseidon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_active","type":"bool"},{"internalType":"uint256","name":"_proportion","type":"uint256"},{"internalType":"uint256","name":"_floor","type":"uint256"}],"name":"setProtectedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"setSibling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTransmuteRate","type":"uint256"}],"name":"setTransmuteRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelisted","type":"address"},{"internalType":"bool","name":"_active","type":"bool"},{"internalType":"bool","name":"_sendBurn","type":"bool"},{"internalType":"bool","name":"_receiveBurn","type":"bool"},{"internalType":"bool","name":"_sendWipeout","type":"bool"},{"internalType":"bool","name":"_receiveWipeout","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_siblingCandidate","type":"address"}],"name":"sibling","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"siblings","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transmuteRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"bool","name":"sendBurn","type":"bool"},{"internalType":"bool","name":"receiveBurn","type":"bool"},{"internalType":"bool","name":"sendWipeout","type":"bool"},{"internalType":"bool","name":"receiveWipeout","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"willBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"willWipeout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

6080604052670de0b6b3a7640000600255600060035566f5232269808000600b55660eebe0b40e8000600c553480156200003857600080fd5b5060405162003ac838038062003ac8833981810160405260208110156200005e57600080fd5b8101908080519060200190929190505050806000620000826200024c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200019373f90aeef57ae8bc85fe8d40a3f4a45042f4258c6760006706f05b59d3b2000060006200025460201b60201c565b620001ce73d07dc4262bcdbf85190c01c996b4c06a461d243062013463670de0b6b3a7640000670376c1e0a7f000006200025460201b60201c565b6200020973d07dc4262bcdbf85190c01c996b4c06a461d24306201346b670de0b6b3a76400006705d423c655aa00006200025460201b60201c565b6200024473d07dc4262bcdbf85190c01c996b4c06a461d243062013473670de0b6b3a76400006709935f581f0500006200025460201b60201c565b505062000748565b600033905090565b620002646200024c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000325576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006200033885620004ce60201b60201c565b6200034557600062000347565b835b905060001515600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000160009054906101000a900460ff1615151462000408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018062003a9d602b913960400191505060405180910390fd5b6200041e856001838686620005cc60201b60201c565b600560405180604001604052808773ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f712f3e88363d9b67a2660e01b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019250505060206040518083038186803b1580156200058857600080fd5b505afa1580156200059d573d6000803e3d6000fd5b505050506040513d6020811015620005b457600080fd5b81019080805190602001909291905050509050919050565b620005dc6200024c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200069d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6040518060600160405280851515815260200183815260200182815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155604082015181600201559050505050505050565b61334580620007586000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637c7e23e31161011a578063bed99850116100ad578063db12ec151161007c578063db12ec1514610b6b578063f2fde38b14610be5578063f9e074eb14610c29578063fab9041c14610ca9578063ffbaefb714610d2357610206565b8063bed9985014610a8d578063c62b919e14610aab578063c62fc33314610adf578063da367b9714610afd57610206565b80638da5cb5b116100e95780638da5cb5b1461091b5780639b19251a1461094f578063a3c67597146109cd578063beaacc0b14610a3557610206565b80637c7e23e3146107a85780637d478593146107c657806387530d591461084a57806387738462146108a957610206565b80633d2094901161019d5780635def3d9d1161016c5780635def3d9d1461065a5780635e125d0d146106c85780635f261f4f1461070c5780636bf4cccb14610770578063715018a61461079e57610206565b80633d209490146104ec5780633fa428181461053a57806345d780291461057e5780635acc85f4146105f857610206565b806330edc0f5116101d957806330edc0f51461031e5780633372fdb61461039c578063363bf964146103f65780633aef676d1461047a57610206565b80630e59ef231461020b578063131299af14610273578063189d165e14610291578063240e442f146102bf575b600080fd5b61024d6004803603602081101561022157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d41565b604051808415158152602001838152602001828152602001935050505060405180910390f35b61027b610d78565b6040518082815260200191505060405180910390f35b6102bd600480360360208110156102a757600080fd5b8101908080359060200190929190505050610d82565b005b610301600480360360208110156102d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed2565b604051808381526020018281526020019250505060405180910390f35b6103606004803603602081101561033457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110eb565b60405180861515815260200185151581526020018415158152602001831515815260200182151581526020019550505050505060405180910390f35b6103de600480360360208110156103b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611296565b60405180821515815260200191505060405180910390f35b6104786004803603606081101561040c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611399565b005b6104c66004803603604081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611485565b604051808415158152602001838152602001828152602001935050505060405180910390f35b6105386004803603604081101561050257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a0565b005b61057c6004803603602081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061173f565b005b6105e06004803603604081101561059457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196a565b60405180821515815260200191505060405180910390f35b6106586004803603608081101561060e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611ad9565b005b6106c6600480360360a081101561067057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803590602001909291908035906020019092919080359060200190929190505050611d36565b005b61070a600480360360208110156106de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea9565b005b61076e6004803603608081101561072257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291908035906020019092919080359060200190929190505050612137565b005b61079c6004803603602081101561078657600080fd5b810190808035906020019092919050505061231e565b005b6107a6612451565b005b6107b06125d7565b6040518082815260200191505060405180910390f35b610832600480360360608110156107dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125e4565b60405180821515815260200191505060405180910390f35b6108766004803603602081101561086057600080fd5b810190808035906020019092919050505061276f565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6108f5600480360360408110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127c0565b604051808415158152602001838152602001828152602001935050505060405180910390f35b610923612804565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109916004803603602081101561096557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061282d565b60405180861515815260200185151581526020018415158152602001831515815260200182151581526020019550505050505060405180910390f35b610a0f600480360360208110156109e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128a4565b604051808415158152602001838152602001828152602001935050505060405180910390f35b610a6160048036036020811015610a4b57600080fd5b810190808035906020019092919050505061298c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a956129bf565b6040518082815260200191505060405180910390f35b610ab36129c9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ae76129f3565b6040518082815260200191505060405180910390f35b610b3f60048036036020811015610b1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bcd60048036036040811015610b8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b39565b60405180821515815260200191505060405180910390f35b610c2760048036036020811015610bfb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612beb565b005b610ca7600480360360c0811015610c3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190803515159060200190929190803515159060200190929190803515159060200190929190505050612df6565b005b610d0b60048036036040811015610cbf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305f565b60405180821515815260200191505060405180910390f35b610d2b613129565b6040518082815260200191505060405180910390f35b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154905083565b6000600c54905090565b610d8a61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6702c68af0bb140000811115610ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54494445504152454e543a7365744275726e526174653a20323025206d61780081525060200191505060405180910390fd5b80600b8190555050565b600080600060025490506000600354905060005b6005805490508110156110dd57600060058281548110610f0257fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060058381548110610f4557fe5b9060005260206000209060020201600101549050610f648883836125e4565b156110ce57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000206001015485111561101b57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000206001015494505b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020600201548410156110cd57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000206002015493505b5b50508080600101915050610ee6565b508181935093505050915091565b6000806000806000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff16600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900460ff16600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160049054906101000a900460ff169450945094509450945091939590929450565b600080823b905060008163ffffffff1614156112b6576000915050611394565b8273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112fc57600080fd5b505afa92505050801561133057506040513d602081101561131c57600080fd5b810190808051906020019092919050505060015b61133e576000915050611394565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461138c57600061138f565b60015b925050505b919050565b6113a161312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61146c6000846115a0565b6114776001836115a0565b61148081611ea9565b505050565b6000806000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060000160009054906101000a900460ff16600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060010154600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020600201549250925092509250925092565b6115a861312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132336022913960400191505060405180910390fd5b80600983600281106116fc57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61174761312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960006002811061181557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631499c592826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561189f57600080fd5b505af11580156118b3573d6000803e3d6000fd5b5050505060096001600281106118c557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631499c592826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561194f57600080fd5b505af1158015611963573d6000803e3d6000fd5b5050505050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c957600080fd5b505afa1580156119dd573d6000803e3d6000fd5b505050506040513d60208110156119f357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161480611ad157508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7e57600080fd5b505afa158015611a92573d6000803e3d6000fd5b505050506040513d6020811015611aa857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b611ae161312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611bac85613137565b611bb7576000611bb9565b835b905060001515600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000160009054906101000a900460ff16151514611c78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613255602b913960400191505060405180910390fd5b611c86856001838686611d36565b600560405180604001604052808773ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550505050505050565b611d3e61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6040518060600160405280851515815260200183815260200182815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155604082015181600201559050505050505050565b611eb161312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60076000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161561201c5761201b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806000806000612df6565b5b60046000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156120c4576120c3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806000612137565b5b6120e18160016706f05b59d3b200006709935f581f050000612137565b6120f381600180600060016000612df6565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61213f61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612285576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132a66023913960400191505060405180910390fd5b6040518060600160405280841515815260200183815260200182815250600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002015590505050505050565b61232661312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b67016345785d8a0000811115612447576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132c96024913960400191505060405180910390fd5b80600c8190555050565b61245961312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600580549050905090565b600080600090506125f484613137565b156126b45760008473ffffffffffffffffffffffffffffffffffffffff1662fdd58e87866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561266957600080fd5b505afa15801561267d573d6000803e3d6000fd5b505050506040513d602081101561269357600080fd5b810190808051906020019092919050505011156126af57600190505b612764565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561271d57600080fd5b505afa158015612731573d6000803e3d6000fd5b505050506040513d602081101561274757600080fd5b8101908080519060200190929190505050111561276357600190505b5b809150509392505050565b6005818154811061277c57fe5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6006602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff16908060010154908060020154905083565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60076020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16905085565b6000806000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549250925092509193909250565b6009816002811061299957fe5b016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60006009600060028110612a0957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a95576009600160028110612a6c57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b34565b6009600160028110612aa357fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b2f576009600060028110612b0657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b34565b600090505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1680612be25750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff165b15905092915050565b612bf361312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132806026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612dfe61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ebe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132ed6023913960400191505060405180910390fd5b6040518060a001604052808615158152602001851515815260200184151581526020018315158152602001821515815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555060808201518160000160046101000a81548160ff021916908315150217905550905050505050505050565b600080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900460ff16806130c257506130c184611296565b5b9050808061311c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160049054906101000a900460ff165b9050801591505092915050565b60025481565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f712f3e88363d9b67a2660e01b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019250505060206040518083038186803b1580156131f057600080fd5b505afa158015613204573d6000803e3d6000fd5b505050506040513d602081101561321a57600080fd5b8101908080519060200190929190505050905091905056fe54494445504152454e543a3a736574546f6b656e3a207a65726f2061646472657373574950454f55543a3a61646450726f746563746f723a20546f6b656e20616c7265616479206163746976654f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373574950454f55543a3a73657450726f746563746f723a207a65726f206164647265737354494445504152454e543a7365745472616e736d757465526174653a20313025206d6178574950454f55543a3a73657457686974656c6973743a207a65726f2061646472657373a2646970667358221220620734e005ebbd82732aa3a943c11b2ffbbec33d623cee50b34ccb3a89dc923564736f6c634300060c0033574950454f55543a3a61646450726f746563746f723a20546f6b656e20616c7265616479206163746976650000000000000000000000001820a4b7618bde71dce8cdc73aab6c95905fad24

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c80637c7e23e31161011a578063bed99850116100ad578063db12ec151161007c578063db12ec1514610b6b578063f2fde38b14610be5578063f9e074eb14610c29578063fab9041c14610ca9578063ffbaefb714610d2357610206565b8063bed9985014610a8d578063c62b919e14610aab578063c62fc33314610adf578063da367b9714610afd57610206565b80638da5cb5b116100e95780638da5cb5b1461091b5780639b19251a1461094f578063a3c67597146109cd578063beaacc0b14610a3557610206565b80637c7e23e3146107a85780637d478593146107c657806387530d591461084a57806387738462146108a957610206565b80633d2094901161019d5780635def3d9d1161016c5780635def3d9d1461065a5780635e125d0d146106c85780635f261f4f1461070c5780636bf4cccb14610770578063715018a61461079e57610206565b80633d209490146104ec5780633fa428181461053a57806345d780291461057e5780635acc85f4146105f857610206565b806330edc0f5116101d957806330edc0f51461031e5780633372fdb61461039c578063363bf964146103f65780633aef676d1461047a57610206565b80630e59ef231461020b578063131299af14610273578063189d165e14610291578063240e442f146102bf575b600080fd5b61024d6004803603602081101561022157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d41565b604051808415158152602001838152602001828152602001935050505060405180910390f35b61027b610d78565b6040518082815260200191505060405180910390f35b6102bd600480360360208110156102a757600080fd5b8101908080359060200190929190505050610d82565b005b610301600480360360208110156102d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed2565b604051808381526020018281526020019250505060405180910390f35b6103606004803603602081101561033457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110eb565b60405180861515815260200185151581526020018415158152602001831515815260200182151581526020019550505050505060405180910390f35b6103de600480360360208110156103b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611296565b60405180821515815260200191505060405180910390f35b6104786004803603606081101561040c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611399565b005b6104c66004803603604081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611485565b604051808415158152602001838152602001828152602001935050505060405180910390f35b6105386004803603604081101561050257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a0565b005b61057c6004803603602081101561055057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061173f565b005b6105e06004803603604081101561059457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196a565b60405180821515815260200191505060405180910390f35b6106586004803603608081101561060e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050611ad9565b005b6106c6600480360360a081101561067057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803590602001909291908035906020019092919080359060200190929190505050611d36565b005b61070a600480360360208110156106de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea9565b005b61076e6004803603608081101561072257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291908035906020019092919080359060200190929190505050612137565b005b61079c6004803603602081101561078657600080fd5b810190808035906020019092919050505061231e565b005b6107a6612451565b005b6107b06125d7565b6040518082815260200191505060405180910390f35b610832600480360360608110156107dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125e4565b60405180821515815260200191505060405180910390f35b6108766004803603602081101561086057600080fd5b810190808035906020019092919050505061276f565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b6108f5600480360360408110156108bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127c0565b604051808415158152602001838152602001828152602001935050505060405180910390f35b610923612804565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109916004803603602081101561096557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061282d565b60405180861515815260200185151581526020018415158152602001831515815260200182151581526020019550505050505060405180910390f35b610a0f600480360360208110156109e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128a4565b604051808415158152602001838152602001828152602001935050505060405180910390f35b610a6160048036036020811015610a4b57600080fd5b810190808035906020019092919050505061298c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a956129bf565b6040518082815260200191505060405180910390f35b610ab36129c9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ae76129f3565b6040518082815260200191505060405180910390f35b610b3f60048036036020811015610b1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610bcd60048036036040811015610b8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b39565b60405180821515815260200191505060405180910390f35b610c2760048036036020811015610bfb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612beb565b005b610ca7600480360360c0811015610c3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190803515159060200190929190803515159060200190929190803515159060200190929190505050612df6565b005b610d0b60048036036040811015610cbf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305f565b60405180821515815260200191505060405180910390f35b610d2b613129565b6040518082815260200191505060405180910390f35b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154905083565b6000600c54905090565b610d8a61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6702c68af0bb140000811115610ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f54494445504152454e543a7365744275726e526174653a20323025206d61780081525060200191505060405180910390fd5b80600b8190555050565b600080600060025490506000600354905060005b6005805490508110156110dd57600060058281548110610f0257fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060058381548110610f4557fe5b9060005260206000209060020201600101549050610f648883836125e4565b156110ce57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000206001015485111561101b57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000206001015494505b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020600201548410156110cd57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008281526020019081526020016000206002015493505b5b50508080600101915050610ee6565b508181935093505050915091565b6000806000806000600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff16600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900460ff16600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160049054906101000a900460ff169450945094509450945091939590929450565b600080823b905060008163ffffffff1614156112b6576000915050611394565b8273ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112fc57600080fd5b505afa92505050801561133057506040513d602081101561131c57600080fd5b810190808051906020019092919050505060015b61133e576000915050611394565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461138c57600061138f565b60015b925050505b919050565b6113a161312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61146c6000846115a0565b6114776001836115a0565b61148081611ea9565b505050565b6000806000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060000160009054906101000a900460ff16600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060010154600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020600201549250925092509250925092565b6115a861312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611668576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806132336022913960400191505060405180910390fd5b80600983600281106116fc57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61174761312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960006002811061181557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631499c592826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561189f57600080fd5b505af11580156118b3573d6000803e3d6000fd5b5050505060096001600281106118c557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631499c592826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561194f57600080fd5b505af1158015611963573d6000803e3d6000fd5b5050505050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156119c957600080fd5b505afa1580156119dd573d6000803e3d6000fd5b505050506040513d60208110156119f357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161480611ad157508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7e57600080fd5b505afa158015611a92573d6000803e3d6000fd5b505050506040513d6020811015611aa857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b611ae161312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611bac85613137565b611bb7576000611bb9565b835b905060001515600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000160009054906101000a900460ff16151514611c78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613255602b913960400191505060405180910390fd5b611c86856001838686611d36565b600560405180604001604052808773ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550505050505050565b611d3e61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6040518060600160405280851515815260200183815260200182815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155604082015181600201559050505050505050565b611eb161312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60076000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161561201c5761201b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806000806000612df6565b5b60046000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156120c4576120c3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806000612137565b5b6120e18160016706f05b59d3b200006709935f581f050000612137565b6120f381600180600060016000612df6565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61213f61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612285576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132a66023913960400191505060405180910390fd5b6040518060600160405280841515815260200183815260200182815250600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101556040820151816002015590505050505050565b61232661312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b67016345785d8a0000811115612447576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132c96024913960400191505060405180910390fd5b80600c8190555050565b61245961312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600580549050905090565b600080600090506125f484613137565b156126b45760008473ffffffffffffffffffffffffffffffffffffffff1662fdd58e87866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561266957600080fd5b505afa15801561267d573d6000803e3d6000fd5b505050506040513d602081101561269357600080fd5b810190808051906020019092919050505011156126af57600190505b612764565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561271d57600080fd5b505afa158015612731573d6000803e3d6000fd5b505050506040513d602081101561274757600080fd5b8101908080519060200190929190505050111561276357600190505b5b809150509392505050565b6005818154811061277c57fe5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6006602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900460ff16908060010154908060020154905083565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60076020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16905085565b6000806000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549250925092509193909250565b6009816002811061299957fe5b016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60006009600060028110612a0957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a95576009600160028110612a6c57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b34565b6009600160028110612aa357fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b2f576009600060028110612b0657fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612b34565b600090505b919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff1680612be25750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff165b15905092915050565b612bf361312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132806026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612dfe61312f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ebe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132ed6023913960400191505060405180910390fd5b6040518060a001604052808615158152602001851515815260200184151581526020018315158152602001821515815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555060808201518160000160046101000a81548160ff021916908315150217905550905050505050505050565b600080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900460ff16806130c257506130c184611296565b5b9050808061311c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160049054906101000a900460ff165b9050801591505092915050565b60025481565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f712f3e88363d9b67a2660e01b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019250505060206040518083038186803b1580156131f057600080fd5b505afa158015613204573d6000803e3d6000fd5b505050506040513d602081101561321a57600080fd5b8101908080519060200190929190505050905091905056fe54494445504152454e543a3a736574546f6b656e3a207a65726f2061646472657373574950454f55543a3a61646450726f746563746f723a20546f6b656e20616c7265616479206163746976654f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373574950454f55543a3a73657450726f746563746f723a207a65726f206164647265737354494445504152454e543a7365745472616e736d757465526174653a20313025206d6178574950454f55543a3a73657457686974656c6973743a207a65726f2061646472657373a2646970667358221220620734e005ebbd82732aa3a943c11b2ffbbec33d623cee50b34ccb3a89dc923564736f6c634300060c0033

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

0000000000000000000000001820a4b7618bde71dce8cdc73aab6c95905fad24

-----Decoded View---------------
Arg [0] : _erc1820Registry (address): 0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001820a4b7618bde71dce8cdc73aab6c95905fad24


Deployed Bytecode Sourcemap

26264:2285:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20738:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28173:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27444:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22516:702;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;24142:297;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24701:396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27237:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21691:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27050:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27826:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25103:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20994:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21370:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26603:441;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23224:272;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27620:200;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17946:148;;;:::i;:::-;;21589:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22137:373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20805:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;20837:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17304:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20926:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23502:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26334:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28088:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28003;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20049:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28268:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25305:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18249:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23746:390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25524:320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20005:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20738:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28173:89::-;28219:7;28242:14;;28235:21;;28173:89;:::o;27444:170::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27537:4:::1;27521:12;:20;;27513:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27596:12;27584:9;:24;;;;27444:170:::0;:::o;22516:702::-;22586:7;22595;22611:18;22632:17;;22611:38;;22656:13;22672:12;;22656:28;;22696:9;22691:489;22711:10;:17;;;;22709:1;:19;22691:489;;;22744:17;22764:10;22775:1;22764:13;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;22744:38;;22791:10;22804;22815:1;22804:13;;;;;;;;;;;;;;;;;;:16;;;22791:29;;22833:34;22846:5;22853:9;22864:2;22833:12;:34::i;:::-;22829:344;;;22897:19;:30;22917:9;22897:30;;;;;;;;;;;;;;;:34;22928:2;22897:34;;;;;;;;;;;:45;;;22884:10;:58;22880:147;;;22970:19;:30;22990:9;22970:30;;;;;;;;;;;;;;;:34;23001:2;22970:34;;;;;;;;;;;:45;;;22957:58;;22880:147;23049:19;:30;23069:9;23049:30;;;;;;;;;;;;;;;:34;23080:2;23049:34;;;;;;;;;;;:40;;;23041:5;:48;23037:127;;;23112:19;:30;23132:9;23112:30;;;;;;;;;;;;;;;:34;23143:2;23112:34;;;;;;;;;;;:40;;;23104:48;;23037:127;22829:344;22691:489;;22730:3;;;;;;;22691:489;;;;23194:10;23206:5;23186:26;;;;;;22516:702;;;:::o;24142:297::-;24202:4;24208;24214;24220;24226;24255:9;:16;24265:5;24255:16;;;;;;;;;;;;;;;:23;;;;;;;;;;;;24287:9;:16;24297:5;24287:16;;;;;;;;;;;;;;;:25;;;;;;;;;;;;24321:9;:16;24331:5;24321:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;24358:9;:16;24368:5;24358:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;24395:9;:16;24405:5;24395:16;;;;;;;;;;;;;;;:31;;;;;;;;;;;;24239:194;;;;;;;;;;24142:297;;;;;;;:::o;24701:396::-;24765:4;24778:11;24834:5;24822:18;24814:26;;24865:1;24857:4;:9;;;24853:239;;;24884:5;24877:12;;;;;24853:239;24931:5;24916:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24912:173;;25070:5;25063:12;;;;;24912:173;19152:42;24993:27;;:8;:27;;;:42;;25030:5;24993:42;;;25023:4;24993:42;24986:49;;;;24701:396;;;;:::o;27237:201::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27345:24:::1;27356:1;27359:9;27345:10;:24::i;:::-;27376;27387:1;27390:9;27376:10;:24::i;:::-;27407:25;27419:12;27407:11;:25::i;:::-;27237:201:::0;;;:::o;21691:278::-;21774:4;21780:7;21789;21821:19;:26;21841:5;21821:26;;;;;;;;;;;;;;;:31;21848:3;21821:31;;;;;;;;;;;:38;;;;;;;;;;;;21868:19;:26;21888:5;21868:26;;;;;;;;;;;;;;;:31;21895:3;21868:31;;;;;;;;;;;:42;;;21919:19;:26;21939:5;21919:26;;;;;;;;;;;;;;;:31;21946:3;21919:31;;;;;;;;;;;:37;;;21805:158;;;;;;21691:278;;;;;:::o;27050:181::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27152:1:::1;27134:20;;:6;:20;;;;27126:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27219:6;27200:8;27209:6;27200:16;;;;;;;;;:25;;;;;;;;;;;;;;;;;;27050:181:::0;;:::o;27826:171::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27905:8:::1;27914:1;27905:11;;;;;;;;;;;;;;;;;;27894:33;;;27928:10;27894:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27957:8;27966:1;27957:11;;;;;;;;;;;;;;;;;;27946:33;;;27980:10;27946:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27826:171:::0;:::o;25103:196::-;25187:4;25242:6;25208:40;;25223:5;25208:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;:84;;;;25286:6;25252:40;;25267:5;25252:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;25208:84;25200:93;;25103:196;;;;:::o;20994:370::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21106:10:::1;21119:17;21129:6;21119:9;:17::i;:::-;:27;;21145:1;21119:27;;;21139:3;21119:27;21106:40;;21203:5;21161:47;;:19;:27;21181:6;21161:27;;;;;;;;;;;;;;;:31;21189:2;21161:31;;;;;;;;;;;:38;;;;;;;;;;;;:47;;;21153:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21263:52;21277:6;21285:4;21291:2;21295:11;21308:6;21263:13;:52::i;:::-;21322:10;21338:19;;;;;;;;21346:6;21338:19;;;;;;21354:2;21338:19;;::::0;21322:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17586:1;20994:370:::0;;;;:::o;21370:213::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21532:45:::1;;;;;;;;21548:7;21532:45;;;;;;21557:11;21532:45;;;;21570:6;21532:45;;::::0;21497:19:::1;:27;21517:6;21497:27;;;;;;;;;;;;;;;:32;21525:3;21497:32;;;;;;;;;;;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21370:213:::0;;;;;:::o;26603:441::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26674:9:::1;:20;26684:9;;;;;;;;;;;26674:20;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26670:108;;;26712:58;26725:9;;;;;;;;;;;26736:5;26743::::0;26750::::1;26757::::0;26764::::1;26712:12;:58::i;:::-;26670:108;26788:16;:27;26805:9;;;;;;;;;;;26788:27;;;;;;;;;;;;;;;:34;;;;;;;;;;;;26784:100;;;26833:43;26853:9;;;;;;;;;;;26864:5;26871:1:::0;26874::::1;26833:19;:43::i;:::-;26784:100;26890:52;26910:12;26924:4;26930;26936:5;26890:19;:52::i;:::-;26949:58;26962:12;26976:4;26982::::0;26988:5:::1;26995:4;27001:5;26949:12;:58::i;:::-;27026:12;27014:9;;:24;;;;;;;;;;;;;;;;;;26603:441:::0;:::o;23224:272::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:1:::1;23351:19;;:5;:19;;;;23343:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23443:47;;;;;;;;23461:7;23443:47;;;;;;23470:11;23443:47;;;;23483:6;23443:47;;::::0;23417:16:::1;:23;23434:5;23417:23;;;;;;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23224:272:::0;;;;:::o;27620:200::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27728:4:::1;27707:17;:25;;27699:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27797:17;27780:14;:34;;;;27620:200:::0;:::o;17946:148::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18053:1:::1;18016:40;;18037:6;::::0;::::1;;;;;;;;18016:40;;;;;;;;;;;;18084:1;18067:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17946:148::o:0;21589:96::-;21639:7;21662:10;:17;;;;21655:24;;21589:96;:::o;22137:373::-;22228:4;22241:8;22252:5;22241:16;;22268:21;22278:10;22268:9;:21::i;:::-;22264:224;;;22349:1;22313:10;22304:30;;;22335:5;22342:3;22304:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:46;22300:83;;;22369:4;22363:10;;22300:83;22264:224;;;22447:1;22416:10;22409:28;;;22438:5;22409:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:39;22405:76;;;22467:4;22461:10;;22405:76;22264:224;22501:3;22494:10;;;22137:373;;;;;:::o;20805:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20837:84::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17304:79::-;17342:7;17369:6;;;;;;;;;;;17362:13;;17304:79;:::o;20926:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23502:238::-;23569:4;23575:7;23584;23616:16;:23;23633:5;23616:23;;;;;;;;;;;;;;;:30;;;;;;;;;;;;23655:16;:23;23672:5;23655:23;;;;;;;;;;;;;;;:34;;;23698:16;:23;23715:5;23698:23;;;;;;;;;;;;;;;:29;;;23600:134;;;;;;23502:238;;;;;:::o;26334:26::-;;;;;;;;;;;;;;;;;;;;;;;:::o;28088:79::-;28129:7;28152:9;;28145:16;;28088:79;:::o;28003:::-;28044:7;28067:9;;;;;;;;;;;28060:16;;28003:79;:::o;20049:31::-;;;;:::o;28268:278::-;28333:7;28374:8;28383:1;28374:11;;;;;;;;;;;;;;;;;;28353:32;;:17;:32;;;28349:192;;;28403:8;28412:1;28403:11;;;;;;;;;;;;;;;;;;28396:18;;;;28349:192;28453:8;28462:1;28453:11;;;;;;;;;;;;;;;;;;28432:32;;:17;:32;;;28428:113;;;28482:8;28491:1;28482:11;;;;;;;;;;;;;;;;;;28475:18;;;;28428:113;28531:1;28516:17;;28268:278;;;;:::o;25305:213::-;25381:4;25447:9;:18;25457:7;25447:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:64;;;;25478:9;:21;25488:10;25478:21;;;;;;;;;;;;;;;:33;;;;;;;;;;;;25447:64;25445:67;25438:74;;25305:213;;;;:::o;18249:244::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18358:1:::1;18338:22;;:8;:22;;;;18330:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18448:8;18419:38;;18440:6;::::0;::::1;;;;;;;;18419:38;;;;;;;;;;;;18477:8;18468:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18249:244:::0;:::o;23746:390::-;17526:12;:10;:12::i;:::-;17516:22;;:6;;;;;;;;;;:22;;;17508:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23971:1:::1;23947:26;;:12;:26;;;;23939:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24046:84;;;;;;;;24066:7;24046:84;;;;;;24075:9;24046:84;;;;;;24086:12;24046:84;;;;;;24100:12;24046:84;;;;;;24114:15;24046:84;;;;::::0;24020:9:::1;:23;24030:12;24020:23;;;;;;;;;;;;;;;:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23746:390:::0;;;;;;:::o;25524:320::-;25603:4;25616:16;25635:9;:18;25645:7;25635:18;;;;;;;;;;;;;;;:30;;;;;;;;;;;;:61;;;;25669:27;25688:7;25669:18;:27::i;:::-;25635:61;25616:80;;25717:11;:51;;;;25732:9;:21;25742:10;25732:21;;;;;;;;;;;;;;;:36;;;;;;;;;;;;25717:51;25703:65;;25827:11;25826:12;25819:19;;;25524:320;;;;:::o;20005:39::-;;;;:::o;15839:106::-;15892:15;15927:10;15920:17;;15839:106;:::o;21977:154::-;22034:4;22054:15;;;;;;;;;;;:41;;;22096:6;19024:10;22104:20;;22054:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22047:78;;21977:154;;;:::o

Swarm Source

ipfs://620734e005ebbd82732aa3a943c11b2ffbbec33d623cee50b34ccb3a89dc9235

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.