Token FeSwap DAO

DEX  
 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
1,000,000,000 [email protected]

Holders:
10,065 addresses
 
Balance
2,000 [email protected]

Value
$0.00
0x85Cf0915C8d3695B03DA739E3eAEfd5388eb5eEF
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

FeSwap implements AMM DEX protocol of commission-free.


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Fesw

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 999999 runs

Other Settings:
istanbul EvmVersion, MIT license
File 1 of 3 : SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.5;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction underflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, errorMessage);

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts with custom message on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 2 of 3 : FeswPatchCaller.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to the patch 
 *      using the EVM instruction `delegatecall`. The success and return data of the delegated call 
 *      will be returned back to the caller of the proxy.
 */
abstract contract FeswPatchCaller {
    // DELEGATE_TARGET = uint160(                      // downcast to match the address type.
    //                      uint256(                    // convert to uint to truncate upper digits.
    //                          keccak256(                // compute the CREATE2 hash using 4 inputs.
    //                              abi.encodePacked(       // pack all inputs to the hash together.
    //                                  hex"ff",              // start with 0xff to distinguish from RLP.
    //                                  address(this),        // this contract will be the caller.
    //                                  salt,                 // pass in the supplied salt value.
    //                                  _metamorphicContractInitializationCodeHash // the init code hash.
    //                              )
    //                          )
    //                      )
    //                   )
    //
    // salt = keccak256("Feswap Governance Token Patch") = 0xF21202953A55B2BEB9F87D04AFD3BB440DD78FE6B9FCFDC24C32DA060E867658
    // metamorphicContractInitializationCode = 0x60006020816004601c335a63aaf10f428752fa60185780fd5b808151803b80938091923cf3
    // _metamorphicContractInitializationCodeHash = keccak256(metamorphicContractInitializationCode)
    //                                            = 0x15bfb1132dc67a984de77a9eef294f7e58964d02c62a359fd6f3c0c1d443e35c 
    // address(this): 0x84e924C5E04438D2c1Df1A981f7E7104952e6de1 (Test) 
    // address(this): 0x6A8FE4753AB456e85E1379432d92ABF1fB49B5Df (Rinkeby/BSC/Polygon/Harmoney/Arbitrum/Fantom/Avalance/Heco Testnet) 
    // address(this): 0x8565570A7cB2b2508F9180AD83e8f58F25e41596 (Goerli) 
    // address(this): 0x0528D7de63aafdF748a5ef530949C80c4e8fbeC7 (Polygon Mainnet) 
   
//  address public constant DELEGATE_TARGET = 0x9b41DB1803B5b4298fc765f189aF63fcc54291D0;   // (Goerli)
//  address public constant DELEGATE_TARGET = 0x04CE51B2eBc3773B84A2a024A19BaC6b8431235d;   // (Test)
//  address public constant DELEGATE_TARGET = 0xD3dB4B2D84AF70ad6fDde50d254d8b0eD4D83eA9;   // (BSC/MATIC Testnet)
    address public constant DELEGATE_TARGET = 0x22F44d1B52088f060Cd3BF4B2171a2100C432D55;   // (Polygon Mainnet)

    /**
     * @dev Delegates the current call to `DELEGATE_TARGET`.
     *
     * This function does not return to its internall call site, it will return directly to the external caller.
     */

    receive() external virtual payable {
        revert("Refused!");
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback () external payable virtual {
       // solhint-disable-next-line no-inline-assembly
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), DELEGATE_TARGET, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 { revert(0, returndatasize()) }
            default { return(0, returndatasize()) }
        }
    }
}

File 3 of 3 : Feswap.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.5;
pragma experimental ABIEncoderV2;

import "/utils/SafeMath.sol";
import "/patch/FeswPatchCaller.sol";

contract Fesw is FeswPatchCaller{
    /// @notice EIP-20 token name for this token
    string public constant name = "FeSwap DAO";

    /// @notice EIP-20 token symbol for this token
    string public symbol;

    /// @notice EIP-20 token decimals for this token
    uint8 public constant decimals = 18;

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 1_000_000_000e18;     // 1 billion FESW

    /// @notice Address which may mint and burn FESW tokens
    address public minterBurner;

    /// @notice The timestamp after which minting may occur
    uint public mintingAllowedAfter;

    /// @notice Minimum time between mints
    uint32 public constant minimumTimeBetweenMints = 1 days * 365;

    /// @notice Cap that can be minted at each mint after 5 years
    uint public mintCap = 10_000_000e18;      // 10 million FESW

    // @notice Allowance amounts on behalf of others
    // Documentation tag @notice not valid for non-public state variables
    mapping (address => mapping (address => uint96)) internal allowances;

    // @notice Official record of token balances for each account
    mapping (address => uint96) internal balances;

    /// @notice A record of each accounts delegate
    mapping (address => address) public delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint96 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when the minterBurner address is changed
    event MinterBurnerChanged(address minterBurner, address newMinterBurner);

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @notice The standard EIP-20 approval event
    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /**
     * @notice Construct a new FESW token
     * @param account The initial account to grant all the tokens
     * @param minterBurner_ The account with minting/burning ability
     * @param mintingAllowedAfter_ The timestamp after which minting may occur
     */
    constructor(address account, address minterBurner_, uint mintingAllowedAfter_, string memory _symbol) {
        require(mintingAllowedAfter_ >= block.timestamp, "FESW::constructor: minting can only begin after deployment");

        symbol = _symbol;
        balances[account] = uint96(totalSupply);
        emit Transfer(address(0), account, totalSupply);
        minterBurner = minterBurner_;
        emit MinterBurnerChanged(address(0), minterBurner);
        mintingAllowedAfter = mintingAllowedAfter_;
    }

    /**
     * @notice Change the minter/burner address
     * @param minterBurner_ The address of the new minter/burner
     */
    function setMinterBurner(address minterBurner_) external {
        require(msg.sender == minterBurner, "FESW::setMinter: only the minter can change the minter address");
        emit MinterBurnerChanged(minterBurner, minterBurner_);
        minterBurner = minterBurner_;
    }

    /**
     * @notice Mint new tokens
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to be minted
     */
    function mint(address dst, uint rawAmount) external {
        require(msg.sender == minterBurner, "FESW::mint: only the minter can mint");
        require(block.timestamp >= mintingAllowedAfter, "FESW::mint: minting not allowed yet");
        require(dst != address(0), "FESW::mint: cannot transfer to the zero address");
        //maximum 8 times minting
        require(mintCap >= 50_000e18, "FESW::mint: minting not allowed any more");   

        // record the mint
        mintingAllowedAfter = SafeMath.add(block.timestamp, minimumTimeBetweenMints);

        // mint the amount
        uint96 amount = safe96(rawAmount, "FESW::mint: amount exceeds 96 bits");
        require(amount <= mintCap, "FESW::mint: exceeded mint cap");
        mintCap = mintCap / 2;
        totalSupply = safe96(SafeMath.add(totalSupply, amount), "FESW::mint: totalSupply exceeds 96 bits");

        // transfer the amount to the recipient
        balances[dst] = add96(balances[dst], amount, "FESW::mint: transfer amount overflows");
        emit Transfer(address(0), dst, amount);

        // move delegates
        _moveDelegates(address(0), delegates[dst], amount);
    }

    /**
     * @notice Burn some tokens
     */
    function burn() external {
        require(msg.sender == minterBurner, "FESW::burn: Only the burner can burn");

        // burn the amount
        uint96 amount = balances[minterBurner];
        require(amount != 0, "FESW::burn: No FESW token to burn");

        balances[minterBurner] = 0;
        totalSupply = SafeMath.sub(totalSupply, amount);
        emit Transfer(minterBurner, address(0), amount);

        // move delegates
        _moveDelegates(delegates[minterBurner], address(0), amount);
    }

    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender) external view returns (uint) {
        return allowances[account][spender];
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint rawAmount) external returns (bool) {
        uint96 amount;
        if (rawAmount == uint(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(rawAmount, "FESW::approve: amount exceeds 96 bits");
        }

        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /**
     * @notice Triggers an approval from owner to spends
     * @param owner The address to approve from
     * @param spender The address to be approved
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @param deadline The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function permit(address owner, address spender, uint rawAmount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        uint96 amount;
        if (rawAmount == uint(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(rawAmount, "FESW::permit: amount exceeds 96 bits");
        }

        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, rawAmount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "FESW::permit: invalid signature");
        require(signatory == owner, "FESW::permit: unauthorized");
        require(block.timestamp <= deadline, "FESW::permit: signature expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint) {
        return balances[account];
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint rawAmount) external returns (bool) {
        uint96 amount = safe96(rawAmount, "FESW::transfer: amount exceeds 96 bits");
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint rawAmount) external returns (bool) {
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(rawAmount, "FESW::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "FESW::transferFrom: transfer amount exceeds spender allowance");
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }
        
        _transferTokens(src, dst, amount);
        return true;
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee) public {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "FESW::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "FESW::delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "FESW::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint96) {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber) public view returns (uint96) {
        require(blockNumber < block.number, "FESW::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = delegates[delegator];
        uint96 delegatorBalance = balances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _transferTokens(address src, address dst, uint96 amount) internal {
        require(src != address(0), "FESW::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "FESW::_transferTokens: cannot transfer to the zero address");

        balances[src] = sub96(balances[src], amount, "FESW::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add96(balances[dst], amount, "FESW::_transferTokens: transfer amount overflows");
        emit Transfer(src, dst, amount);

        _moveDelegates(delegates[src], delegates[dst], amount);
    }

    function _moveDelegates(address srcRep, address dstRep, uint96 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint96 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint96 srcRepNew = sub96(srcRepOld, amount, "FESW::_moveVotes: vote amount underflows");
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint96 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint96 dstRepNew = add96(dstRepOld, amount, "FESW::_moveVotes: vote amount overflows");
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint96 oldVotes, uint96 newVotes) internal {
      uint32 blockNumber = safe32(block.number, "FESW::_writeCheckpoint: block number exceeds 32 bits");

      if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
          checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
      } else {
          checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
          numCheckpoints[delegatee] = nCheckpoints + 1;
      }

      emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint n, string memory errorMessage) internal pure returns (uint96) {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub96(uint96 a, uint96 b, string memory errorMessage) internal pure returns (uint96) {
        require(b <= a, errorMessage);
        return a - b;
    }

    function getChainId() internal pure returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Settings
{
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "istanbul",
  "optimizer": {
    "enabled": true,
    "runs": 999999
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"minterBurner_","type":"address"},{"internalType":"uint256","name":"mintingAllowedAfter_","type":"uint256"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minterBurner","type":"address"},{"indexed":false,"internalType":"address","name":"newMinterBurner","type":"address"}],"name":"MinterBurnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DELEGATE_TARGET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTimeBetweenMints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterBurner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingAllowedAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minterBurner_","type":"address"}],"name":"setMinterBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b033b2e3c9fd0803ce80000006001556a084595161401484a0000006004553480156200003057600080fd5b506040516200366638038062003666833981016040819052620000539162000242565b428210156200007f5760405162461bcd60e51b815260040162000076906200034b565b60405180910390fd5b80516200009490600090602084019062000179565b50600180546001600160a01b03861660008181526006602052604080822080546001600160601b0319166001600160601b0390951694909417909355925491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620001059190620003a8565b60405180910390a3600280546001600160a01b0319166001600160a01b0385811691909117918290556040517f5cd7ad3baa6b612b797d53699b140d3d862f62e268971aa522613aaecd347b5592620001649260009291169062000331565b60405180910390a15060035550620003b19050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620001b15760008555620001fc565b82601f10620001cc57805160ff1916838001178555620001fc565b82800160010185558215620001fc579182015b82811115620001fc578251825591602001919060010190620001df565b506200020a9291506200020e565b5090565b5b808211156200020a57600081556001016200020f565b80516001600160a01b03811681146200023d57600080fd5b919050565b6000806000806080858703121562000258578384fd5b620002638562000225565b935060206200027481870162000225565b6040870151606088015191955093506001600160401b038082111562000298578384fd5b818801915088601f830112620002ac578384fd5b815181811115620002b957fe5b604051601f8201601f1916810185018381118282101715620002d757fe5b60405281815283820185018b1015620002ee578586fd5b8592505b81831015620003115783830185015181840186015291840191620002f2565b818311156200032257858583830101525b979a9699509497505050505050565b6001600160a01b0392831681529116602082015260400190565b6020808252603a908201527f464553573a3a636f6e7374727563746f723a206d696e74696e672063616e206f60408201527f6e6c7920626567696e206166746572206465706c6f796d656e74000000000000606082015260800190565b90815260200190565b6132a580620003c16000396000f3fe6080604052600436106101c65760003560e01c80636fcfff45116100f7578063b17f856611610095578063dd62ed3e11610064578063dd62ed3e1461056c578063e7a324dc1461058c578063ead1be1c146105a1578063f1127ed8146105c157610232565b8063b17f8566146104f7578063b4b5ea571461050c578063c3cda5201461052c578063d505accf1461054c57610232565b8063782d6fe1116100d1578063782d6fe1146104755780637ecebe00146104a257806395d89b41146104c2578063a9059cbb146104d757610232565b80636fcfff451461042057806370a082311461044057806376c71ca11461046057610232565b806330b36cef1161016457806344df8e701161013e57806344df8e70146103a9578063587cde1e146103be5780635c11d62f146103de5780635c19a95c1461040057610232565b806330b36cef14610350578063313ce5671461036557806340c10f191461038757610232565b806320606b70116101a057806320606b70146102e457806323b872dd146102f95780632ef8c5a41461031957806330adf81f1461033b57610232565b806306fdde031461026a578063095ea7b31461029557806318160ddd146102c257610232565b3661023257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f5265667573656421000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b36600080376000803660007322f44d1b52088f060cd3bf4b2171a2100c432d555af43d6000803e808015610265573d6000f35b3d6000fd5b34801561027657600080fd5b5061027f6105ef565b60405161028c91906129eb565b60405180910390f35b3480156102a157600080fd5b506102b56102b03660046127da565b610628565b60405161028c9190612916565b3480156102ce57600080fd5b506102d761074d565b60405161028c9190612921565b3480156102f057600080fd5b506102d7610753565b34801561030557600080fd5b506102b5610314366004612736565b610777565b34801561032557600080fd5b5061032e610919565b60405161028c91906128ce565b34801561034757600080fd5b506102d7610935565b34801561035c57600080fd5b506102d7610959565b34801561037157600080fd5b5061037a61095f565b60405161028c9190613026565b34801561039357600080fd5b506103a76103a23660046127da565b610964565b005b3480156103b557600080fd5b506103a7610c96565b3480156103ca57600080fd5b5061032e6103d93660046126ea565b610e4d565b3480156103ea57600080fd5b506103f3610e75565b60405161028c9190612ff1565b34801561040c57600080fd5b506103a761041b3660046126ea565b610e7d565b34801561042c57600080fd5b506103f361043b3660046126ea565b610e87565b34801561044c57600080fd5b506102d761045b3660046126ea565b610e9f565b34801561046c57600080fd5b506102d7610ed9565b34801561048157600080fd5b506104956104903660046127da565b610edf565b60405161028c9190613034565b3480156104ae57600080fd5b506102d76104bd3660046126ea565b6111c1565b3480156104ce57600080fd5b5061027f6111d3565b3480156104e357600080fd5b506102b56104f23660046127da565b61127f565b34801561050357600080fd5b5061032e6112bb565b34801561051857600080fd5b506104956105273660046126ea565b6112d3565b34801561053857600080fd5b506103a7610547366004612803565b611382565b34801561055857600080fd5b506103a7610567366004612771565b611623565b34801561057857600080fd5b506102d7610587366004612704565b611a8c565b34801561059857600080fd5b506102d7611ad2565b3480156105ad57600080fd5b506103a76105bc3660046126ea565b611af6565b3480156105cd57600080fd5b506105e16105dc36600461285a565b611be2565b60405161028c929190613002565b6040518060400160405280600a81526020017f4665537761702044414f0000000000000000000000000000000000000000000081525081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561067a57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61069f565b61069c836040518060600160405280602581526020016130b660259139611c1d565b90505b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610739908590613034565b60405180910390a360019150505b92915050565b60015481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff9091169285926107e192889291906130b690830139611c1d565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561082d57506bffffffffffffffffffffffff82811614155b1561090157600061085783836040518060600160405280603d815260200161320e603d9139611c6f565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600560209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108f7908590613034565b60405180910390a3505b61090c878783611cd2565b5060019695505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60035481565b601281565b60025473ffffffffffffffffffffffffffffffffffffffff1633146109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612d2f565b60405180910390fd5b6003544210156109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612ea3565b73ffffffffffffffffffffffffffffffffffffffff8216610a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612c18565b690a968163f0a57b4000006004541015610a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612b27565b610a9b426301e13380611f39565b6003819055506000610ac58260405180606001604052806022815260200161306d60229139611c1d565b9050600454816bffffffffffffffffffffffff161115610b11576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612a5c565b600260045481610b1d57fe5b04600455600154610b5e90610b40906bffffffffffffffffffffffff8416611f39565b6040518060600160405280602781526020016131e760279139611c1d565b6bffffffffffffffffffffffff90811660015573ffffffffffffffffffffffffffffffffffffffff8416600090815260066020908152604091829020548251606081019093526025808452610bc3949190911692859290919061324b90830139611fad565b73ffffffffffffffffffffffffffffffffffffffff841660008181526006602052604080822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff959095169490941790935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c57908590613034565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260076020526040812054610c91921683612008565b505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610ce7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612de9565b60025473ffffffffffffffffffffffffffffffffffffffff166000908152600660205260409020546bffffffffffffffffffffffff1680610d54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612e46565b60025473ffffffffffffffffffffffffffffffffffffffff16600090815260066020526040902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169055600154610dbc906bffffffffffffffffffffffff831661224f565b60015560025460405160009173ffffffffffffffffffffffffffffffffffffffff16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e0c908590613034565b60405180910390a360025473ffffffffffffffffffffffffffffffffffffffff908116600090815260076020526040812054610e4a92169083612008565b50565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6301e1338081565b610e4a3382612291565b60096020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600660205260409020546bffffffffffffffffffffffff165b919050565b60045481565b6000438210610f1a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612b84565b73ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205463ffffffff1680610f55576000915050610747565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86018116855292529091205416831061102d5773ffffffffffffffffffffffffffffffffffffffff841660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff169050610747565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832083805290915290205463ffffffff16831015611075576000915050610747565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff16111561116957600282820363ffffffff160481036110c561269e565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260086020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff169181019190915290871415611144576020015194506107479350505050565b805163ffffffff1687111561115b57819350611162565b6001820392505b505061109b565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260086020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600a6020526000908152604090205481565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156112775780601f1061124c57610100808354040283529160200191611277565b820191906000526020600020905b81548152906001019060200180831161125a57829003601f168201915b505050505081565b6000806112a4836040518060600160405280602681526020016130db60269139611c1d565b90506112b1338583611cd2565b5060019392505050565b7322f44d1b52088f060cd3bf4b2171a2100c432d5581565b73ffffffffffffffffffffffffffffffffffffffff811660009081526009602052604081205463ffffffff168061130b57600061137b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9392505050565b60408051808201909152600a81527f4665537761702044414f0000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f62e653a995128fe1f1e39e9a507edfdee740ce379b334075caa1a2187975cd47611403612345565b30604051602001611417949392919061299c565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001611468949392919061296b565b60405160208183030381529060405280519060200120905060008282604051602001611495929190612898565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516114d294939291906129cd565b6020604051602081039080840390855afa1580156114f4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661156c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612f94565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020526040902080546001810190915589146115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612c75565b8742111561160c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612d8c565b611616818b612291565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561167457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611699565b611696866040518060600160405280602481526020016131c360249139611c1d565b90505b60408051808201909152600a81527f4665537761702044414f0000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f62e653a995128fe1f1e39e9a507edfdee740ce379b334075caa1a2187975cd4761171a612345565b3060405160200161172e949392919061299c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8d166000908152600a835292832080546001810190915590945091926117cb927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e9290918e910161292a565b604051602081830303815290604052805190602001209050600082826040516020016117f8929190612898565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161183594939291906129cd565b6020604051602081039080840390855afa158015611857573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166118cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612f5d565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611934576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612a93565b8842111561196e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612be1565b84600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051611a769190613034565b60405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526005602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b60025473ffffffffffffffffffffffffffffffffffffffff163314611b47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612aca565b6002546040517f5cd7ad3baa6b612b797d53699b140d3d862f62e268971aa522613aaecd347b5591611b939173ffffffffffffffffffffffffffffffffffffffff9091169084906128ef565b60405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600860209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6000816c010000000000000000000000008410611c67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b591906129eb565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611cca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b591906129eb565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316611d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612cd2565b73ffffffffffffffffffffffffffffffffffffffff8216611d6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590612f00565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604091829020548251606081019093526036808452611dc9936bffffffffffffffffffffffff909216928592919061318d90830139611c6f565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611e5b949190911692859290919061312990830139611fad565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600660205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ef2908590613034565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260076020526040808220548584168352912054610c9192918216911683612008565b60008282018381101561137b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000838301826bffffffffffffffffffffffff8087169083161015611fff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b591906129eb565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561205257506000816bffffffffffffffffffffffff16115b15610c915773ffffffffffffffffffffffffffffffffffffffff8316156121555773ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604081205463ffffffff1690816120ac57600061211c565b73ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b90506000612143828560405180606001604052806028815260200161310160289139611c6f565b905061215186848484612349565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615610c915773ffffffffffffffffffffffffffffffffffffffff821660009081526009602052604081205463ffffffff1690816121aa57600061221a565b73ffffffffffffffffffffffffffffffffffffffff841660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b90506000612241828560405180606001604052806027815260200161308f60279139611fad565b905061161b85848484612349565b600061137b83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506125b3565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260076020818152604080842080546006845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461233f828483612008565b50505050565b4690565b600061236d436040518060600160405280603481526020016131596034913961265c565b905060008463ffffffff161180156123e1575073ffffffffffffffffffffffffffffffffffffffff8516600090815260086020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b156124805773ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff85160217905561255c565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152600883528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252600990935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516125a492919061304d565b60405180910390a25050505050565b60008184841115611cca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612621578181015183820152602001612609565b50505050905090810190601f16801561264e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000816401000000008410611c67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b591906129eb565b604080518082019091526000808252602082015290565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ed457600080fd5b803560ff81168114610ed457600080fd5b6000602082840312156126fb578081fd5b61137b826126b5565b60008060408385031215612716578081fd5b61271f836126b5565b915061272d602084016126b5565b90509250929050565b60008060006060848603121561274a578081fd5b612753846126b5565b9250612761602085016126b5565b9150604084013590509250925092565b600080600080600080600060e0888a03121561278b578283fd5b612794886126b5565b96506127a2602089016126b5565b955060408801359450606088013593506127be608089016126d9565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156127ec578182fd5b6127f5836126b5565b946020939093013593505050565b60008060008060008060c0878903121561281b578182fd5b612824876126b5565b95506020870135945060408701359350612840606088016126d9565b92506080870135915060a087013590509295509295509295565b6000806040838503121561286c578182fd5b612875836126b5565b9150602083013563ffffffff8116811461288d578182fd5b809150509250929050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b901515815260200190565b90815260200190565b95865273ffffffffffffffffffffffffffffffffffffffff94851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845273ffffffffffffffffffffffffffffffffffffffff9290921660208401526040830152606082015260800190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015612a17578581018301518582016040015282016129fb565b81811115612a285783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6020808252601d908201527f464553573a3a6d696e743a206578636565646564206d696e7420636170000000604082015260600190565b6020808252601a908201527f464553573a3a7065726d69743a20756e617574686f72697a6564000000000000604082015260600190565b6020808252603e908201527f464553573a3a7365744d696e7465723a206f6e6c7920746865206d696e74657260408201527f2063616e206368616e676520746865206d696e74657220616464726573730000606082015260800190565b60208082526028908201527f464553573a3a6d696e743a206d696e74696e67206e6f7420616c6c6f7765642060408201527f616e79206d6f7265000000000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f464553573a3a6765745072696f72566f7465733a206e6f74207965742064657460408201527f65726d696e656400000000000000000000000000000000000000000000000000606082015260800190565b6020808252601f908201527f464553573a3a7065726d69743a207369676e6174757265206578706972656400604082015260600190565b6020808252602f908201527f464553573a3a6d696e743a2063616e6e6f74207472616e7366657220746f207460408201527f6865207a65726f20616464726573730000000000000000000000000000000000606082015260800190565b60208082526022908201527f464553573a3a64656c656761746542795369673a20696e76616c6964206e6f6e60408201527f6365000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252603c908201527f464553573a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606082015260800190565b60208082526024908201527f464553573a3a6d696e743a206f6e6c7920746865206d696e7465722063616e2060408201527f6d696e7400000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f464553573a3a64656c656761746542795369673a207369676e6174757265206560408201527f7870697265640000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f464553573a3a6275726e3a204f6e6c7920746865206275726e65722063616e2060408201527f6275726e00000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f464553573a3a6275726e3a204e6f204645535720746f6b656e20746f2062757260408201527f6e00000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526023908201527f464553573a3a6d696e743a206d696e74696e67206e6f7420616c6c6f7765642060408201527f7965740000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252603a908201527f464553573a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260408201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606082015260800190565b6020808252601f908201527f464553573a3a7065726d69743a20696e76616c6964207369676e617475726500604082015260600190565b60208082526026908201527f464553573a3a64656c656761746542795369673a20696e76616c69642073696760408201527f6e61747572650000000000000000000000000000000000000000000000000000606082015260800190565b63ffffffff91909116815260200190565b63ffffffff9290921682526bffffffffffffffffffffffff16602082015260400190565b60ff91909116815260200190565b6bffffffffffffffffffffffff91909116815260200190565b6bffffffffffffffffffffffff9283168152911660208201526040019056fe464553573a3a6d696e743a20616d6f756e7420657863656564732039362062697473464553573a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773464553573a3a617070726f76653a20616d6f756e7420657863656564732039362062697473464553573a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473464553573a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773464553573a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773464553573a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473464553573a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365464553573a3a7065726d69743a20616d6f756e7420657863656564732039362062697473464553573a3a6d696e743a20746f74616c537570706c7920657863656564732039362062697473464553573a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365464553573a3a6d696e743a207472616e7366657220616d6f756e74206f766572666c6f7773a2646970667358221220caab68a7253e686acc0a305e67a227cef26cf560ce7341a0fb7a878083e8be7764736f6c634300070500330000000000000000000000008de31b9958995792414d34f8de24713e3267de450000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000646455357404d0000000000000000000000000000000000000000000000000000

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

0000000000000000000000008de31b9958995792414d34f8de24713e3267de450000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000646455357404d0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : account (address): 0x8de31b9958995792414d34f8de24713e3267de45
Arg [1] : minterBurner_ (address): 0x0000000000000000000000000000000000000000
Arg [2] : mintingAllowedAfter_ (uint256): 115792089237316195423570985008687907853269984665640564039457584007913129639935
Arg [3] : _symbol (string): [email protected]

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000008de31b9958995792414d34f8de24713e3267de45
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 46455357404d0000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

165:18191:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2879:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;165:18191:2;3484:14:0;3481:1;3478;3465:34;3703:1;3700;3684:14;3681:1;3664:15;3657:5;3644:61;3782:16;3779:1;3776;3761:38;3822:6;3891:38;;;;3963:16;3960:1;3953:27;3891:38;3910:16;3907:1;3900:27;254:42:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7561:419;;;;;;;;;;-1:-1:-1;7561:419:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;539:42::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1988:122::-;;;;;;;;;;;;;:::i;10659:680::-;;;;;;;;;;-1:-1:-1;10659:680:2;;;;;:::i;:::-;;:::i;673:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2411:137::-;;;;;;;;;;;;;:::i;770:31::-;;;;;;;;;;;;;:::i;440:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4885:1179::-;;;;;;;;;;-1:-1:-1;4885:1179:2;;;;;:::i;:::-;;:::i;:::-;;6123:520;;;;;;;;;;;;;:::i;1438:45::-;;;;;;;;;;-1:-1:-1;1438:45:2;;;;;:::i;:::-;;:::i;854:61::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11487:102::-;;;;;;;;;;-1:-1:-1;11487:102:2;;;;;:::i;:::-;;:::i;1866:49::-;;;;;;;;;;-1:-1:-1;1866:49:2;;;;;:::i;:::-;;:::i;9739:108::-;;;;;;;;;;-1:-1:-1;9739:108:2;;;;;:::i;:::-;;:::i;991:35::-;;;;;;;;;;;;;:::i;13678:1218::-;;;;;;;;;;-1:-1:-1;13678:1218:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2629:39::-;;;;;;;;;;-1:-1:-1;2629:39:2;;;;;:::i;:::-;;:::i;357:20::-;;;;;;;;;;;;;:::i;10111:238::-;;;;;;;;;;-1:-1:-1;10111:238:2;;;;;:::i;:::-;;:::i;2513:84:0:-;;;;;;;;;;;;;:::i;13025:222:2:-;;;;;;;;;;-1:-1:-1;13025:222:2;;;;;:::i;:::-;;:::i;12023:801::-;;;;;;;;;;-1:-1:-1;12023:801:2;;;;;:::i;:::-;;:::i;8470:1066::-;;;;;;;;;;-1:-1:-1;8470:1066:2;;;;;:::i;:::-;;:::i;6947:136::-;;;;;;;;;;-1:-1:-1;6947:136:2;;;;;:::i;:::-;;:::i;2204:117::-;;;;;;;;;;;;;:::i;4430:280::-;;;;;;;;;;-1:-1:-1;4430:280:2;;;;;:::i;:::-;;:::i;1727:70::-;;;;;;;;;;-1:-1:-1;1727:70:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;254:42::-;;;;;;;;;;;;;;;;;;;:::o;7561:419::-;7629:4;7646:13;7692:2;7674:9;:21;7670:173;;;-1:-1:-1;7728:2:2;7670:173;;;7773:58;7780:9;7773:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;7764:67;;7670:173;7866:10;7855:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:40;;;;;;;;;;7913:37;;7855:31;;7866:10;7913:37;;;;7855:40;;7913:37;:::i;:::-;;;;;;;;7968:4;7961:11;;;7561:419;;;;;:::o;539:42::-;;;;:::o;1988:122::-;2030:80;1988:122;:::o;10659:680::-;10823:15;;;10741:4;10823:15;;;:10;:15;;;;;;;;10776:10;10823:24;;;;;;;;;;10874:58;;;;;;;;;;;;10776:10;;10823:24;;;;;10741:4;;10874:58;;10881:9;;10874:58;;;;;;;:6;:58::i;:::-;10858:74;;10960:3;10949:14;;:7;:14;;;;:48;;;;-1:-1:-1;10967:30:2;;;;;;10949:48;10945:311;;;11014:19;11036:96;11042:16;11060:6;11036:96;;;;;;;;;;;;;;;;;:5;:96::i;:::-;11147:15;;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;;;;;;;;;11208:36;11147:39;;-1:-1:-1;11147:24:2;;11208:36;;;;11147:39;;11208:36;:::i;:::-;;;;;;;;10945:311;;11276:33;11292:3;11297;11302:6;11276:15;:33::i;:::-;-1:-1:-1;11327:4:2;;10659:680;-1:-1:-1;;;;;;10659:680:2:o;673:27::-;;;;;;:::o;2411:137::-;2453:95;2411:137;:::o;770:31::-;;;;:::o;440:35::-;473:2;440:35;:::o;4885:1179::-;4970:12;;;;4956:10;:26;4948:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;5061:19;;5042:15;:38;;5034:86;;;;;;;;;;;;:::i;:::-;5139:17;;;5131:77;;;;;;;;;;;;:::i;:::-;5273:9;5262:7;;:20;;5254:73;;;;;;;;;;;;:::i;:::-;5393:54;5406:15;903:12;5393;:54::i;:::-;5371:19;:76;;;;5488:13;5504:55;5511:9;5504:55;;;;;;;;;;;;;;;;;:6;:55::i;:::-;5488:71;;5588:7;;5578:6;:17;;;;5570:59;;;;;;;;;;;;:::i;:::-;5660:1;5650:7;;:11;;;;;;5640:7;:21;5706:11;;5686:84;;5693:33;;;;;:12;:33::i;:::-;5686:84;;;;;;;;;;;;;;;;;:6;:84::i;:::-;5672:98;;;;:11;:98;5854:13;;;;;;;:8;:13;;;;;;;;;;5848:69;;;;;;;;;;;;;;5854:13;;;;;5869:6;;5848:69;;;;;;;;:5;:69::i;:::-;5832:13;;;;;;;:8;:13;;;;;;:85;;;;;;;;;;;;;;;;5933:33;;5832:13;;;5933:33;;;;5959:6;;5933:33;:::i;:::-;;;;;;;;6033:14;;;;6029:1;6033:14;;;:9;:14;;;;;;6006:50;;6033:14;6049:6;6006:14;:50::i;:::-;4885:1179;;;:::o;6123:520::-;6181:12;;;;6167:10;:26;6159:75;;;;;;;;;;;;:::i;:::-;6300:12;;;;6275:13;6291:22;;;:8;:22;;;;;;;;6332:11;6324:57;;;;;;;;;;;;:::i;:::-;6403:12;;;;6419:1;6394:22;;;:8;:22;;;;;:26;;;;;;6403:12;6458:11;6445:33;;6394:26;6445:33;;:12;:33::i;:::-;6431:11;:47;6503:12;;6494:42;;6525:1;;6494:42;6503:12;;6494:42;;;;6529:6;;6494:42;:::i;:::-;;;;;;;;6601:12;;;;;;6591:23;;;;:9;:23;;;;;;6576:59;;6591:23;;6628:6;6576:14;:59::i;:::-;6123:520;:::o;1438:45::-;;;;;;;;;;;;;;;:::o;854:61::-;903:12;854:61;:::o;11487:102::-;11549:32;11559:10;11571:9;11549;:32::i;1866:49::-;;;;;;;;;;;;;;;:::o;9739:108::-;9822:17;;;9798:4;9822:17;;;:8;:17;;;;;;;;9739:108;;;;:::o;991:35::-;;;;:::o;13678:1218::-;13757:6;13798:12;13784:11;:26;13776:78;;;;;;;;;;;;:::i;:::-;13889:23;;;13867:19;13889:23;;;:14;:23;;;;;;;;13927:17;13923:58;;13968:1;13961:8;;;;;13923:58;14041:20;;;;;;;:11;:20;;;;;;;;:38;14062:16;;;14041:38;;;;;;;;;:48;;:63;-1:-1:-1;14037:147:2;;14128:20;;;;;;;:11;:20;;;;;;;;14149:16;;;;;14128:38;;;;;;;;:44;;;;;;;-1:-1:-1;14121:51:2;;14037:147;14245:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;14241:88:2;;;14316:1;14309:8;;;;;14241:88;14341:12;14383:16;;;14410:428;14425:5;14417:13;;:5;:13;;;14410:428;;;14489:1;14472:13;;;14471:19;;;14463:27;;14532:20;;:::i;:::-;-1:-1:-1;14555:20:2;;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;14532:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14602:27;;14598:229;;;14657:8;;;;-1:-1:-1;14650:15:2;;-1:-1:-1;;;;14650:15:2;14598:229;14691:12;;:26;;;-1:-1:-1;14687:140:2;;;14746:6;14738:14;;14687:140;;;14810:1;14801:6;:10;14793:18;;14687:140;14410:428;;;;;-1:-1:-1;14855:20:2;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;;;;;-1:-1:-1;;13678:1218:2;;;;:::o;2629:39::-;;;;;;;;;;;;;:::o;357:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10111:238::-;10176:4;10193:13;10209:59;10216:9;10209:59;;;;;;;;;;;;;;;;;:6;:59::i;:::-;10193:75;;10279:40;10295:10;10307:3;10312:6;10279:15;:40::i;:::-;-1:-1:-1;10337:4:2;;10111:238;-1:-1:-1;;;10111:238:2:o;2513:84:0:-;2555:42;2513:84;:::o;13025:222:2:-;13131:23;;;13090:6;13131:23;;;:14;:23;;;;;;;;13172:16;:67;;13238:1;13172:67;;;13191:20;;;;;;;:11;:20;;;;;;;;13212:16;;;13191:38;;;;;;;;;:44;;;;;;13172:67;13165:74;13025:222;-1:-1:-1;;;13025:222:2:o;12023:801::-;12219:4;;;;;;;;;;;;;;;;;;12139:23;2030:80;12203:22;12227:12;:10;:12::i;:::-;12249:4;12175:80;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12165:91;;;;;;12139:117;;12267:18;2250:71;12330:9;12341:5;12348:6;12298:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12288:68;;;;;;12267:89;;12367:14;12423:15;12440:10;12394:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12384:68;;;;;;12367:85;;12463:17;12483:26;12493:6;12501:1;12504;12507;12483:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12483:26:2;;;;;;-1:-1:-1;;12528:23:2;;;12520:74;;;;;;;;;;;;:::i;:::-;12622:17;;;;;;;:6;:17;;;;;:19;;;;;;;;12613:28;;12605:75;;;;;;;;;;;;:::i;:::-;12718:6;12699:15;:25;;12691:76;;;;;;;;;;;;:::i;:::-;12785:31;12795:9;12806;12785;:31::i;:::-;12778:38;;;;12023:801;;;;;;;:::o;8470:1066::-;8600:13;8646:2;8628:9;:21;8624:172;;;-1:-1:-1;8682:2:2;8624:172;;;8727:57;8734:9;8727:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;8718:66;;8624:172;8888:4;;;;;;;;;;;;;;;;;;8808:23;2030:80;8872:22;8896:12;:10;:12::i;:::-;8918:4;8844:80;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;8834:91;;8844:80;8834:91;;;;9022:13;;;8936:18;9022:13;;;:6;:13;;;;;:15;;;;;;;;8834:91;;-1:-1:-1;8936:18:2;;8967:81;;2453:95;;8995:5;;9002:7;;9011:9;;9022:15;;9039:8;;8967:81;;:::i;:::-;;;;;;;;;;;;;8957:92;;;;;;8936:113;;9060:14;9116:15;9133:10;9087:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9077:68;;;;;;9060:85;;9156:17;9176:26;9186:6;9194:1;9197;9200;9176:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9176:26:2;;;;;;-1:-1:-1;;9221:23:2;;;9213:67;;;;;;;;;;;;:::i;:::-;9312:5;9299:18;;:9;:18;;;9291:57;;;;;;;;;;;;:::i;:::-;9386:8;9367:15;:27;;9359:71;;;;;;;;;;;;:::i;:::-;9472:6;9443:10;:17;9454:5;9443:17;;;;;;;;;;;;;;;:26;9461:7;9443:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;9512:7;9496:32;;9505:5;9496:32;;;9521:6;9496:32;;;;;;:::i;:::-;;;;;;;;8470:1066;;;;;;;;;;;;:::o;6947:136::-;7047:19;;;;7023:4;7047:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;;;6947:136::o;2204:117::-;2250:71;2204:117;:::o;4430:280::-;4520:12;;;;4506:10;:26;4498:101;;;;;;;;;;;;:::i;:::-;4635:12;;4615:48;;;;;;4635:12;;;;;4649:13;;4615:48;:::i;:::-;;;;;;;;4674:12;:28;;;;;;;;;;;;;;;4430:280::o;1727:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17662:161::-;17737:6;17775:12;17768:5;17764:9;;17756:32;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17813:1:2;;17662:161;-1:-1:-1;;17662:161:2:o;18027:165::-;18113:6;18145:1;18140:6;;:1;:6;;;;18148:12;18132:29;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;18179:5:2;;;18027:165::o;15287:614::-;15381:17;;;15373:90;;;;;;;;;;;;:::i;:::-;15482:17;;;15474:88;;;;;;;;;;;;:::i;:::-;15597:13;;;;;;;:8;:13;;;;;;;;;;15591:86;;;;;;;;;;;;;;15597:13;;;;;15612:6;;15591:86;;;;;;;:5;:86::i;:::-;15575:13;;;;;;;;:8;:13;;;;;;;;:102;;;;;;;;;;;15710:13;;;;;;;;;;15704:80;;;;;;;;;;;;;;15710:13;;;;;15725:6;;15704:80;;;;;;;;:5;:80::i;:::-;15688:13;;;;;;;;:8;:13;;;;;;;:96;;;;;;;;;;;;;;;;15800:26;;;;;;;;;;15819:6;;15800:26;:::i;:::-;;;;;;;;15854:14;;;;;;;;:9;:14;;;;;;;15870;;;;;;;;15839:54;;15854:14;;;;15870;15886:6;15839:14;:54::i;1017:181:1:-;1075:7;1107:5;;;1131:6;;;;1123:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17831:188:2;17917:6;17947:5;;;17979:12;17971:6;;;;;;;;;17963:29;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18010:1:2;17831:188;-1:-1:-1;;;;17831:188:2:o;15909:939::-;16014:6;16004:16;;:6;:16;;;;:30;;;;;16033:1;16024:6;:10;;;16004:30;16000:841;;;16055:20;;;;16051:382;;16115:22;;;16096:16;16115:22;;;:14;:22;;;;;;;;;16175:13;:60;;16234:1;16175:60;;;16191:19;;;;;;;:11;:19;;;;;;;;16211:13;;;16191:34;;;;;;;;;:40;;;;;;16175:60;16156:79;;16254:16;16273:68;16279:9;16290:6;16273:68;;;;;;;;;;;;;;;;;:5;:68::i;:::-;16254:87;;16360:57;16377:6;16385:9;16396;16407;16360:16;:57::i;:::-;16051:382;;;;16453:20;;;;16449:381;;16513:22;;;16494:16;16513:22;;;:14;:22;;;;;;;;;16573:13;:60;;16632:1;16573:60;;;16589:19;;;;;;;:11;:19;;;;;;;;16609:13;;;16589:34;;;;;;;;;:40;;;;;;16573:60;16554:79;;16652:16;16671:67;16677:9;16688:6;16671:67;;;;;;;;;;;;;;;;;:5;:67::i;:::-;16652:86;;16757:57;16774:6;16782:9;16793;16804;16757:16;:57::i;1910:137:1:-;1968:7;1995:44;1999:1;2002;1995:44;;;;;;;;;;;;;;;;;:3;:44::i;14904:375:2:-;15007:20;;;;14981:23;15007:20;;;:9;:20;;;;;;;;;;15064:8;:19;;;;;;15094:20;;;;:32;;;;;;;;;;;15144:54;;15007:20;;;;;15064:19;;;;;15094:32;;15007:20;;;15144:54;;14981:23;15144:54;15211:60;15226:15;15243:9;15254:16;15211:14;:60::i;:::-;14904:375;;;;:::o;18200:153::-;18310:9;18200:153;:::o;16856:629::-;16974:18;16995:76;17002:12;16995:76;;;;;;;;;;;;;;;;;:6;:76::i;:::-;16974:97;;17101:1;17086:12;:16;;;:85;;;;-1:-1:-1;17106:22:2;;;;;;;:11;:22;;;;;;;;:65;17129:16;;;17106:40;;;;;;;;;:50;:65;;;:50;;:65;17086:85;17082:329;;;17186:22;;;;;;;:11;:22;;;;;;;;17209:16;;;17186:40;;;;;;;;;:57;;;;;;;;;;;;17082:329;;;17311:33;;;;;;;;;;;;;;;;;;;;;;;;;17272:22;;;-1:-1:-1;17272:22:2;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17357:25;;;:14;:25;;;;;;;:44;;17272:72;17385:16;;17357:44;;;;;;;;;;;;;17082:329;17447:9;17426:51;;;17458:8;17468;17426:51;;;;;;;:::i;:::-;;;;;;;;16856:629;;;;;:::o;2336:192:1:-;2422:7;2458:12;2450:6;;;;2442:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17493:161:2;17568:6;17606:12;17599:5;17595:9;;17587:32;;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;14:198:3:-;84:20;;144:42;133:54;;123:65;;113:2;;202:1;199;192:12;217:158;285:20;;345:4;334:16;;324:27;;314:2;;365:1;362;355:12;380:198;;492:2;480:9;471:7;467:23;463:32;460:2;;;513:6;505;498:22;460:2;541:31;562:9;541:31;:::i;583:274::-;;;712:2;700:9;691:7;687:23;683:32;680:2;;;733:6;725;718:22;680:2;761:31;782:9;761:31;:::i;:::-;751:41;;811:40;847:2;836:9;832:18;811:40;:::i;:::-;801:50;;670:187;;;;;:::o;862:342::-;;;;1008:2;996:9;987:7;983:23;979:32;976:2;;;1029:6;1021;1014:22;976:2;1057:31;1078:9;1057:31;:::i;:::-;1047:41;;1107:40;1143:2;1132:9;1128:18;1107:40;:::i;:::-;1097:50;;1194:2;1183:9;1179:18;1166:32;1156:42;;966:238;;;;;:::o;1209:622::-;;;;;;;;1421:3;1409:9;1400:7;1396:23;1392:33;1389:2;;;1443:6;1435;1428:22;1389:2;1471:31;1492:9;1471:31;:::i;:::-;1461:41;;1521:40;1557:2;1546:9;1542:18;1521:40;:::i;:::-;1511:50;;1608:2;1597:9;1593:18;1580:32;1570:42;;1659:2;1648:9;1644:18;1631:32;1621:42;;1682:39;1716:3;1705:9;1701:19;1682:39;:::i;:::-;1672:49;;1768:3;1757:9;1753:19;1740:33;1730:43;;1820:3;1809:9;1805:19;1792:33;1782:43;;1379:452;;;;;;;;;;:::o;1836:266::-;;;1965:2;1953:9;1944:7;1940:23;1936:32;1933:2;;;1986:6;1978;1971:22;1933:2;2014:31;2035:9;2014:31;:::i;:::-;2004:41;2092:2;2077:18;;;;2064:32;;-1:-1:-1;;;1923:179:3:o;2107:545::-;;;;;;;2302:3;2290:9;2281:7;2277:23;2273:33;2270:2;;;2324:6;2316;2309:22;2270:2;2352:31;2373:9;2352:31;:::i;:::-;2342:41;;2430:2;2419:9;2415:18;2402:32;2392:42;;2481:2;2470:9;2466:18;2453:32;2443:42;;2504:38;2538:2;2527:9;2523:18;2504:38;:::i;:::-;2494:48;;2589:3;2578:9;2574:19;2561:33;2551:43;;2641:3;2630:9;2626:19;2613:33;2603:43;;2260:392;;;;;;;;:::o;2657:372::-;;;2785:2;2773:9;2764:7;2760:23;2756:32;2753:2;;;2806:6;2798;2791:22;2753:2;2834:31;2855:9;2834:31;:::i;:::-;2824:41;;2915:2;2904:9;2900:18;2887:32;2959:10;2952:5;2948:22;2941:5;2938:33;2928:2;;2990:6;2982;2975:22;2928:2;3018:5;3008:15;;;2743:286;;;;;:::o;3034:444::-;3304:66;3292:79;;3396:1;3387:11;;3380:27;;;;3432:2;3423:12;;3416:28;3469:2;3460:12;;3282:196::o;3483:226::-;3659:42;3647:55;;;;3629:74;;3617:2;3602:18;;3584:125::o;3714:327::-;3898:42;3967:15;;;3949:34;;4019:15;;4014:2;3999:18;;3992:43;3876:2;3861:18;;3843:198::o;4046:187::-;4211:14;;4204:22;4186:41;;4174:2;4159:18;;4141:92::o;4238:177::-;4384:25;;;4372:2;4357:18;;4339:76::o;4420:614::-;4707:25;;;4751:42;4829:15;;;4824:2;4809:18;;4802:43;4881:15;;;;4876:2;4861:18;;4854:43;4928:2;4913:18;;4906:34;4971:3;4956:19;;4949:35;;;;5015:3;5000:19;;4993:35;4694:3;4679:19;;4661:373::o;5039:440::-;5270:25;;;5343:42;5331:55;;;;5326:2;5311:18;;5304:83;5418:2;5403:18;;5396:34;5461:2;5446:18;;5439:34;5257:3;5242:19;;5224:255::o;5484:456::-;5731:25;;;5787:2;5772:18;;5765:34;;;;5830:2;5815:18;;5808:34;5890:42;5878:55;5873:2;5858:18;;5851:83;5718:3;5703:19;;5685:255::o;5945:398::-;6172:25;;;6245:4;6233:17;;;;6228:2;6213:18;;6206:45;6282:2;6267:18;;6260:34;6325:2;6310:18;;6303:34;6159:3;6144:19;;6126:217::o;6348:662::-;;6489:2;6518;6507:9;6500:21;6550:6;6544:13;6593:6;6588:2;6577:9;6573:18;6566:34;6618:4;6631:140;6645:6;6642:1;6639:13;6631:140;;;6740:14;;;6736:23;;6730:30;6706:17;;;6725:2;6702:26;6695:66;6660:10;;6631:140;;;6789:6;6786:1;6783:13;6780:2;;;6859:4;6854:2;6845:6;6834:9;6830:22;6826:31;6819:45;6780:2;-1:-1:-1;6926:2:3;6914:15;6931:66;6910:88;6895:104;;;;7001:2;6891:113;;6469:541;-1:-1:-1;;;6469:541:3:o;7015:353::-;7217:2;7199:21;;;7256:2;7236:18;;;7229:30;7295:31;7290:2;7275:18;;7268:59;7359:2;7344:18;;7189:179::o;7373:350::-;7575:2;7557:21;;;7614:2;7594:18;;;7587:30;7653:28;7648:2;7633:18;;7626:56;7714:2;7699:18;;7547:176::o;7728:426::-;7930:2;7912:21;;;7969:2;7949:18;;;7942:30;8008:34;8003:2;7988:18;;7981:62;8079:32;8074:2;8059:18;;8052:60;8144:3;8129:19;;7902:252::o;8159:404::-;8361:2;8343:21;;;8400:2;8380:18;;;8373:30;8439:34;8434:2;8419:18;;8412:62;8510:10;8505:2;8490:18;;8483:38;8553:3;8538:19;;8333:230::o;8568:403::-;8770:2;8752:21;;;8809:2;8789:18;;;8782:30;8848:34;8843:2;8828:18;;8821:62;8919:9;8914:2;8899:18;;8892:37;8961:3;8946:19;;8742:229::o;8976:355::-;9178:2;9160:21;;;9217:2;9197:18;;;9190:30;9256:33;9251:2;9236:18;;9229:61;9322:2;9307:18;;9150:181::o;9336:411::-;9538:2;9520:21;;;9577:2;9557:18;;;9550:30;9616:34;9611:2;9596:18;;9589:62;9687:17;9682:2;9667:18;;9660:45;9737:3;9722:19;;9510:237::o;9752:398::-;9954:2;9936:21;;;9993:2;9973:18;;;9966:30;10032:34;10027:2;10012:18;;10005:62;10103:4;10098:2;10083:18;;10076:32;10140:3;10125:19;;9926:224::o;10155:424::-;10357:2;10339:21;;;10396:2;10376:18;;;10369:30;10435:34;10430:2;10415:18;;10408:62;10506:30;10501:2;10486:18;;10479:58;10569:3;10554:19;;10329:250::o;10584:400::-;10786:2;10768:21;;;10825:2;10805:18;;;10798:30;10864:34;10859:2;10844:18;;10837:62;10935:6;10930:2;10915:18;;10908:34;10974:3;10959:19;;10758:226::o;10989:402::-;11191:2;11173:21;;;11230:2;11210:18;;;11203:30;11269:34;11264:2;11249:18;;11242:62;11340:8;11335:2;11320:18;;11313:36;11381:3;11366:19;;11163:228::o;11396:400::-;11598:2;11580:21;;;11637:2;11617:18;;;11610:30;11676:34;11671:2;11656:18;;11649:62;11747:6;11742:2;11727:18;;11720:34;11786:3;11771:19;;11570:226::o;11801:397::-;12003:2;11985:21;;;12042:2;12022:18;;;12015:30;12081:34;12076:2;12061:18;;12054:62;12152:3;12147:2;12132:18;;12125:31;12188:3;12173:19;;11975:223::o;12203:399::-;12405:2;12387:21;;;12444:2;12424:18;;;12417:30;12483:34;12478:2;12463:18;;12456:62;12554:5;12549:2;12534:18;;12527:33;12592:3;12577:19;;12377:225::o;12607:422::-;12809:2;12791:21;;;12848:2;12828:18;;;12821:30;12887:34;12882:2;12867:18;;12860:62;12958:28;12953:2;12938:18;;12931:56;13019:3;13004:19;;12781:248::o;13034:355::-;13236:2;13218:21;;;13275:2;13255:18;;;13248:30;13314:33;13309:2;13294:18;;13287:61;13380:2;13365:18;;13208:181::o;13394:402::-;13596:2;13578:21;;;13635:2;13615:18;;;13608:30;13674:34;13669:2;13654:18;;13647:62;13745:8;13740:2;13725:18;;13718:36;13786:3;13771:19;;13568:228::o;13983:192::-;14157:10;14145:23;;;;14127:42;;14115:2;14100:18;;14082:93::o;14180:294::-;14380:10;14368:23;;;;14350:42;;14440:26;14428:39;14423:2;14408:18;;14401:67;14338:2;14323:18;;14305:169::o;14479:184::-;14651:4;14639:17;;;;14621:36;;14609:2;14594:18;;14576:87::o;14668:209::-;14843:26;14831:39;;;;14813:58;;14801:2;14786:18;;14768:109::o;15095:309::-;15277:26;15330:15;;;15312:34;;15382:15;;15377:2;15362:18;;15355:43;15255:2;15240:18;;15222:182::o

Swarm Source

ipfs://caab68a7253e686acc0a305e67a227cef26cf560ce7341a0fb7a878083e8be77
Loading