Contract 0xB41bd4C99dA73510d9e081C5FADBE7A27Ac1F814 1

 

Contract Overview

Ideamarket: IMO Token
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x77848a6ba74f7ba6f3a739cc90865f0d16cafc1d59675ae7b65c65fddf9b0fc0Transfer129558732022-05-25 23:24:183 hrs 11 mins ago0x93f9707adb26d98cfc6d73c8840425010afa968b IN  Ideamarket: IMO Token0 ETH0.00020429643 ETH
0x56bd6b8ec7d41b6b80c2d2cb5032e918f886167ffdcde57135e95f21ef7bbef4Approve129256382022-05-25 11:38:4314 hrs 57 mins ago0xf33855cf4d2cf07ebf7a7ee8a95512969b9c3251 IN  Ideamarket: IMO Token0 ETH0.000136256397 ETH
0x6771c34174501f85a185b96d562bba7d83f1a223226c7f74f5361e359294a69eApprove129221352022-05-25 10:42:5115 hrs 53 mins ago0x55f64bf9605ef933f4379c95a704c2ce54fc1f6e IN  Ideamarket: IMO Token0 ETH0.000145186086 ETH
0xc4fd36d207f4e9b969a741687ef46a6919d127a134b57a7253534d034691da5bApprove129217942022-05-25 10:37:1115 hrs 58 mins ago0xe36f482dae63c8d88ea875afa15ba6093c2effb7 IN  Ideamarket: IMO Token0 ETH0.000145186086 ETH
0x4a87ddcfafeb7afd7d091d53e4668fd09481a31435b0f955a31128f719dcc8adApprove129213592022-05-25 10:30:5716 hrs 5 mins ago0x457a1fb868ee90acd32e0f9d7740ccc2c23261a7 IN  Ideamarket: IMO Token0 ETH0.000144485277 ETH
0xc85f4f58070f5214ad1c3e84d8a18a1eb31c79ff07171c1781db61fce332d440Approve129212662022-05-25 10:29:0516 hrs 6 mins ago0xb4a263d58d841d5c53db629e49d1faae2135dae9 IN  Ideamarket: IMO Token0 ETH0.000144828318 ETH
0x8ec334a592ed580fffc6cb1aea8f7280560197fd0cbf834ed56be0a46f9ab8b5Approve129060032022-05-25 6:01:5520 hrs 34 mins ago0x95d723ad8556c8abe02912dde50400d311ffe222 IN  Ideamarket: IMO Token0 ETH0.000171368534 ETH
0x0066379e241aea517ac92102619f3e802ca3bae856ad4104e66e3da0d67b2dc8Approve129047302022-05-25 5:41:0320 hrs 54 mins ago0x3cd5478df1fb747f98a457afca753a5299b1c70c IN  Ideamarket: IMO Token0 ETH0.000170954928 ETH
0x71cff442c3135af54212d9bcf52b7e71d66e791c53f50c7360433b451dbad070Approve129034052022-05-25 5:10:2921 hrs 25 mins ago0x078b65df50ef1b25576cdcc7f1f736a98d1033bc IN  Ideamarket: IMO Token0 ETH0.000170954928 ETH
0x97069d98257f176e8966225f4550d982e48e4e56bf38a42f5831fd45cf242fe2Approve129024682022-05-25 4:47:1721 hrs 48 mins ago0xae79686cce4346790b1b937bd51e23d926cc2c1a IN  Ideamarket: IMO Token0 ETH0.000170959124 ETH
0x6707f8185deb2a09f60772f4cac86203be5b659b2fb0ec33fdb4458f98a1d535Approve129016752022-05-25 4:23:5822 hrs 12 mins ago0x9384357bf0d28f524d2ae271cb45574c7cbfceef IN  Ideamarket: IMO Token0 ETH0.000173303391 ETH
0xd483ab1a40dd17659ffcefcba85c85fc0c53288d977a526ba2fc8e75fbb81c6fApprove128949682022-05-25 2:30:501 day 5 mins ago0x273cf2ea40e1ee4fedd89eca6ae899aca41dad6e IN  Ideamarket: IMO Token0 ETH0.00018419603 ETH
0x6629c00d664886449d1fc2f3637a6bd73003da165aa9a647c840b64ff3c10753Approve128920292022-05-25 1:29:011 day 1 hr ago0xac82d6a9e995b3b8dcc24456218b816e5e5832aa IN  Ideamarket: IMO Token0 ETH0.000181325713 ETH
0xb2539b41ac2b3907018d2ba949384ed270cc2a0e0cb539a8255a24454746686aApprove128787332022-05-24 19:20:291 day 7 hrs ago0xb1db41aa2484e3f5f5a510e07003c29fd1b0f115 IN  Ideamarket: IMO Token0 ETH0.000212786405 ETH
0xece17c6125d91f6aa28a2b63d69b05405ca77b616bc319be0589d59323d4d81dApprove128751422022-05-24 17:54:591 day 8 hrs ago0xdd5e2d51630a01b56decf26c45c4b76bfc3fa880 IN  Ideamarket: IMO Token0 ETH0.00019793525 ETH
0x50ce75dfece64a9fe83cb1d977b9f6ab08a12166932be4a02bd917801b4ff539Approve128724832022-05-24 16:54:531 day 9 hrs ago0xbb23cb905e714737ac7b26b1c5dc570e18523b87 IN  Ideamarket: IMO Token0 ETH0.000184393586 ETH
0xb5e60ad33d9b0f2110da95f15d5b4196396e14d661672476d39d84def41e1709Transfer128663642022-05-24 14:56:431 day 11 hrs ago0x93f9707adb26d98cfc6d73c8840425010afa968b IN  Ideamarket: IMO Token0 ETH0.00011859156 ETH
0x47e6d0dc30076ab93dc17382ea870a71975fad59d83b8a23db302a927fae38b8Approve128598532022-05-24 13:20:041 day 13 hrs ago0x4db55dd2c3140a33304944e97e3c1c4e320f4278 IN  Ideamarket: IMO Token0 ETH0.000117636065 ETH
0x66e9e76afbefd4be72158ea48139fa8e4a81d422a3923dfc8cf1c0bf16e88f94Approve128462392022-05-24 9:17:151 day 17 hrs ago0xfd78f7826c7d25aca601dfd2c02d586791c17bae IN  Ideamarket: IMO Token0 ETH0.000115284333 ETH
0x16e14d52e6b0938d388faa55b573eef8aaf3b58b09b6fa1544d9f99445e94556Approve128393452022-05-24 7:27:271 day 19 hrs ago0x28b8fbcebdc3114dd7ce20eb0642015ea3a21718 IN  Ideamarket: IMO Token0 ETH0.000120411675 ETH
0x72e1b4dffbe90cf0142be1d29478463f158d20fe2e42a494da663c68237454aaApprove128347382022-05-24 6:04:461 day 20 hrs ago0xafaaac3a21306a13d0bd6ff229d58338d45f71fd IN  Ideamarket: IMO Token0 ETH0.000128819491 ETH
0xea6760b845ea06f1a57aaff8bd431a0ee89a530fccbb1be9dbebd00d745db94dApprove128341902022-05-24 5:53:571 day 20 hrs ago0x8a9b989d61499bb1693e03608eb5fea24c3b7711 IN  Ideamarket: IMO Token0 ETH0.000128510382 ETH
0xf5faab222749d70fdb126c5d77f707016b37a94136a5671ade22fd50860fdcacApprove128336162022-05-24 5:41:391 day 20 hrs ago0xdc330540a78a2854d8132386bcdb9e4481514ef9 IN  Ideamarket: IMO Token0 ETH0.00013265704 ETH
0xbf42651bcd85a96cdb99e9d340fb4db6ad180df0e991943a48dc89289f62bef9Approve128313052022-05-24 4:45:471 day 21 hrs ago0x8c0902317358e2ba7528c0d5ec71f489fbb15ea0 IN  Ideamarket: IMO Token0 ETH0.000130633288 ETH
0x7276008706916b5a190aa1e335a15e64761020dca7bd291c607d8f79d9866cedApprove128278542022-05-24 3:38:471 day 22 hrs ago0x8370c496131456fd4bed6ee1e94757ed0eacefeb IN  Ideamarket: IMO Token0 ETH0.000130948187 ETH
[ Download CSV Export 

OVERVIEW

Ideamarket uses markets to measure the value of information and create public narratives without trusted third parties.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x1a1e13c07a572f57965485fe9761a98ae1e20a213feb9a50b33b59f6f8c92853129554062022-05-25 23:04:423 hrs 31 mins ago 0x0cf2c86de59bb616de9366fb0640b357de774f0f Ideamarket: IMO Token0 ETH
0x77f10066d34eefa93803ca72c1a9b856cddd61baa4840bb07a4c47a947d46029129417602022-05-25 16:29:2210 hrs 6 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x77f10066d34eefa93803ca72c1a9b856cddd61baa4840bb07a4c47a947d46029129417602022-05-25 16:29:2210 hrs 6 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x77f10066d34eefa93803ca72c1a9b856cddd61baa4840bb07a4c47a947d46029129417602022-05-25 16:29:2210 hrs 6 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x77f10066d34eefa93803ca72c1a9b856cddd61baa4840bb07a4c47a947d46029129417602022-05-25 16:29:2210 hrs 6 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x77f10066d34eefa93803ca72c1a9b856cddd61baa4840bb07a4c47a947d46029129417602022-05-25 16:29:2210 hrs 6 mins ago 0x10df97d3533f9f55473c766bf445dd60892452e1 Ideamarket: IMO Token0 ETH
0x77f10066d34eefa93803ca72c1a9b856cddd61baa4840bb07a4c47a947d46029129417602022-05-25 16:29:2210 hrs 6 mins ago 0x10df97d3533f9f55473c766bf445dd60892452e1 Ideamarket: IMO Token0 ETH
0x279a26f3f5523e29511f094b9bd60294a128b34a04cd9d4289cc73f75fd67f93129351942022-05-25 14:15:2712 hrs 20 mins ago 0x9eae34faa17caf99d2109f513edc5a6e3a7435b5 Ideamarket: IMO Token0 ETH
0x279a26f3f5523e29511f094b9bd60294a128b34a04cd9d4289cc73f75fd67f93129351942022-05-25 14:15:2712 hrs 20 mins ago 0x9eae34faa17caf99d2109f513edc5a6e3a7435b5 Ideamarket: IMO Token0 ETH
0x85798cea69b2335f3c6e7ac5ef1b16f8680f64a640a20035e3f7bd40676517c8129292472022-05-25 12:40:0513 hrs 55 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x85798cea69b2335f3c6e7ac5ef1b16f8680f64a640a20035e3f7bd40676517c8129292472022-05-25 12:40:0513 hrs 55 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x85798cea69b2335f3c6e7ac5ef1b16f8680f64a640a20035e3f7bd40676517c8129292472022-05-25 12:40:0513 hrs 55 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x85798cea69b2335f3c6e7ac5ef1b16f8680f64a640a20035e3f7bd40676517c8129292472022-05-25 12:40:0513 hrs 55 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0x85798cea69b2335f3c6e7ac5ef1b16f8680f64a640a20035e3f7bd40676517c8129292472022-05-25 12:40:0513 hrs 55 mins ago 0x10df97d3533f9f55473c766bf445dd60892452e1 Ideamarket: IMO Token0 ETH
0x85798cea69b2335f3c6e7ac5ef1b16f8680f64a640a20035e3f7bd40676517c8129292472022-05-25 12:40:0513 hrs 55 mins ago 0x10df97d3533f9f55473c766bf445dd60892452e1 Ideamarket: IMO Token0 ETH
0x60f5beef8d1e77a222acabe7fb2eebdbd9364ee2362d1871af1755f9bff46a1d129292092022-05-25 12:40:0513 hrs 55 mins ago 0x9eae34faa17caf99d2109f513edc5a6e3a7435b5 Ideamarket: IMO Token0 ETH
0x60f5beef8d1e77a222acabe7fb2eebdbd9364ee2362d1871af1755f9bff46a1d129292092022-05-25 12:40:0513 hrs 55 mins ago 0x9eae34faa17caf99d2109f513edc5a6e3a7435b5 Ideamarket: IMO Token0 ETH
0xcb0cd0bde7dbbdbc394734e693b2e1b707518d42ea43da5363237f7937670673129256502022-05-25 11:38:4314 hrs 57 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0xcb0cd0bde7dbbdbc394734e693b2e1b707518d42ea43da5363237f7937670673129256502022-05-25 11:38:4314 hrs 57 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0xcb0cd0bde7dbbdbc394734e693b2e1b707518d42ea43da5363237f7937670673129256502022-05-25 11:38:4314 hrs 57 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0xcb0cd0bde7dbbdbc394734e693b2e1b707518d42ea43da5363237f7937670673129256502022-05-25 11:38:4314 hrs 57 mins ago 0x00f55e3c367ece718e05ea5d5c5ffac81681862e Ideamarket: IMO Token0 ETH
0xcb0cd0bde7dbbdbc394734e693b2e1b707518d42ea43da5363237f7937670673129256502022-05-25 11:38:4314 hrs 57 mins ago 0x10df97d3533f9f55473c766bf445dd60892452e1 Ideamarket: IMO Token0 ETH
0xcb0cd0bde7dbbdbc394734e693b2e1b707518d42ea43da5363237f7937670673129256502022-05-25 11:38:4314 hrs 57 mins ago 0x10df97d3533f9f55473c766bf445dd60892452e1 Ideamarket: IMO Token0 ETH
0xa023558cda2aec74994701df2a9981094a62c49bfb613d56358a1fb8e8cc180c129256092022-05-25 11:38:4314 hrs 57 mins ago 0x9eae34faa17caf99d2109f513edc5a6e3a7435b5 Ideamarket: IMO Token0 ETH
0xa023558cda2aec74994701df2a9981094a62c49bfb613d56358a1fb8e8cc180c129256092022-05-25 11:38:4314 hrs 57 mins ago 0x9eae34faa17caf99d2109f513edc5a6e3a7435b5 Ideamarket: IMO Token0 ETH
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xc6c77506134cfc29e62cf35ceb2b964be313fbc9

Contract Name:
IMO

Compiler Version
v0.6.9+commit.3e3065ac

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: IMO.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

import "./SafeMath.sol";

// Forked from UNI
// https://etherscan.io/address/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984#code
// Modifications: Remove everything related to minting

contract IMO {
    /// @notice EIP-20 token name for this token
    string public constant name = "Ideamarket";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "IMO";

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

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 100_000_000e18;

    mapping (address => mapping (address => uint96)) internal allowances;

    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 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 IMO token
     * @param account The initial account to grant all the tokens
     */
    constructor(address account) public {
        balances[account] = uint96(totalSupply);
        emit Transfer(address(0), account, totalSupply);
    }

    /**
     * @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, "IMO::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, "IMO::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), "IMO::permit: invalid signature");
        require(signatory == owner, "IMO::permit: unauthorized");
        require(now <= deadline, "IMO::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, "IMO::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, "IMO::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "IMO::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), "IMO::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "IMO::delegateBySig: invalid nonce");
        require(now <= expiry, "IMO::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, "IMO::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), "IMO::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "IMO::_transferTokens: cannot transfer to the zero address");

        balances[src] = sub96(balances[src], amount, "IMO::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add96(balances[dst], amount, "IMO::_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, "IMO::_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, "IMO::_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, "IMO::_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;
    }
}

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

pragma solidity >=0.6.0 <0.8.0;

/**
 * @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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @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 subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"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":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"},{"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":[{"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":"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":[],"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"}]

60806040526a52b7d2dcc80cd2e40000006000553480156200002057600080fd5b506040516200369f3803806200369f83398181016040528101906200004691906200013e565b600054600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000546040516200011891906200017b565b60405180910390a350620001f0565b6000815190506200013881620001d6565b92915050565b6000602082840312156200015157600080fd5b6000620001618482850162000127565b91505092915050565b6200017581620001cc565b82525050565b60006020820190506200019260008301846200016a565b92915050565b6000620001a582620001ac565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620001e18162000198565b8114620001ed57600080fd5b50565b61349f80620002006000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063b4b5ea571161007c578063b4b5ea571461038c578063c3cda520146103bc578063d505accf146103d8578063dd62ed3e146103f4578063e7a324dc14610424578063f1127ed81461044257610137565b806370a08231146102ae578063782d6fe1146102de5780637ecebe001461030e57806395d89b411461033e578063a9059cbb1461035c57610137565b806330adf81f116100ff57806330adf81f146101f6578063313ce56714610214578063587cde1e146102325780635c19a95c146102625780636fcfff451461027e57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806320606b70146101a857806323b872dd146101c6575b600080fd5b610144610473565b6040516101519190612f41565b60405180910390f35b610174600480360381019061016f919061269f565b6104ac565b6040516101819190612ddb565b60405180910390f35b61019261063f565b60405161019f9190613083565b60405180910390f35b6101b0610645565b6040516101bd9190612df6565b60405180910390f35b6101e060048036038101906101db91906125b2565b61065c565b6040516101ed9190612ddb565b60405180910390f35b6101fe6108f0565b60405161020b9190612df6565b60405180910390f35b61021c610907565b60405161022991906130e2565b60405180910390f35b61024c6004803603810190610247919061254d565b61090c565b6040516102599190612dc0565b60405180910390f35b61027c6004803603810190610277919061254d565b61093f565b005b6102986004803603810190610293919061254d565b61094c565b6040516102a5919061309e565b60405180910390f35b6102c860048036038101906102c3919061254d565b61096f565b6040516102d59190613083565b60405180910390f35b6102f860048036038101906102f3919061269f565b6109de565b6040516103059190613118565b60405180910390f35b6103286004803603810190610323919061254d565b610df1565b6040516103359190613083565b60405180910390f35b610346610e09565b6040516103539190612f41565b60405180910390f35b6103766004803603810190610371919061269f565b610e42565b6040516103839190612ddb565b60405180910390f35b6103a660048036038101906103a1919061254d565b610e7f565b6040516103b39190613118565b60405180910390f35b6103d660048036038101906103d191906126db565b610f6d565b005b6103f260048036038101906103ed9190612601565b611210565b005b61040e60048036038101906104099190612576565b611662565b60405161041b9190613083565b60405180910390f35b61042c61170f565b6040516104399190612df6565b60405180910390f35b61045c60048036038101906104579190612764565b611726565b60405161046a9291906130b9565b60405180910390f35b6040518060400160405280600a81526020017f496465616d61726b65740000000000000000000000000000000000000000000081525081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156104ff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610524565b610521836040518060600160405280602481526020016134206024913961177f565b90505b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161062c91906130fd565b60405180910390a3600191505092915050565b60005481565b60405161065190612d96565b604051809103902081565b6000803390506000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff169050600061071f856040518060600160405280602481526020016134206024913961177f565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561079957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6bffffffffffffffffffffffff16826bffffffffffffffffffffffff1614155b156108d75760006107c383836040518060600160405280603c8152602001613359603c91396117dd565b905080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108cd91906130fd565b60405180910390a3505b6108e287878361184e565b600193505050509392505050565b6040516108fc90612d81565b604051809103902081565b601281565b60036020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109493382611c2f565b50565b60056020528060005260406000206000915054906101000a900463ffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050919050565b6000438210610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1990613043565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610a8f576000915050610deb565b82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610b9157600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff16915050610deb565b82600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c12576000915050610deb565b600080905060006001830390505b8163ffffffff168163ffffffff161115610d6d576000600283830363ffffffff1681610c4857fe5b0482039050610c556124b6565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905086816000015163ffffffff161415610d4557806020015195505050505050610deb565b86816000015163ffffffff161015610d5f57819350610d66565b6001820392505b5050610c20565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff1693505050505b92915050565b60066020528060005260406000206000915090505481565b6040518060400160405280600381526020017f494d4f000000000000000000000000000000000000000000000000000000000081525081565b600080610e67836040518060600160405280602581526020016132de6025913961177f565b9050610e7433858361184e565b600191505092915050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611610ee9576000610f65565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b915050919050565b6000604051610f7b90612d96565b60405180910390206040518060400160405280600a81526020017f496465616d61726b65740000000000000000000000000000000000000000000081525080519060200120610fc8611def565b30604051602001610fdc9493929190612eb7565b604051602081830303815290604052805190602001209050600060405161100290612dab565b60405180910390208888886040516020016110209493929190612e72565b6040516020818303038152906040528051906020012090506000828260405160200161104d929190612d4a565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161108a9493929190612efc565b6020604051602081039080840390855afa1580156110ac573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90612f83565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505589146111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae90612fe3565b60405180910390fd5b874211156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613023565b60405180910390fd5b611204818b611c2f565b50505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415611262577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050611287565b611284866040518060600160405280602381526020016133fd6023913961177f565b90505b600060405161129590612d96565b60405180910390206040518060400160405280600a81526020017f496465616d61726b657400000000000000000000000000000000000000000000815250805190602001206112e2611def565b306040516020016112f69493929190612eb7565b604051602081830303815290604052805190602001209050600060405161131c90612d81565b60405180910390208a8a8a600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b60405160200161138b96959493929190612e11565b604051602081830303815290604052805190602001209050600082826040516020016113b8929190612d4a565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516113f59493929190612efc565b6020604051602081039080840390855afa158015611417573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613003565b60405180910390fd5b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f890612fa3565b60405180910390fd5b88421115611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613063565b60405180910390fd5b84600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161164c91906130fd565b60405180910390a3505050505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16905092915050565b60405161171b90612dab565b604051809103902081565b6004602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060000160049054906101000a90046bffffffffffffffffffffffff16905082565b60006c01000000000000000000000000831082906117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca9190612f41565b60405180910390fd5b5082905092915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118389190612f41565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b590612fc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192590612f63565b60405180910390fd5b6119a8600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16826040518060600160405280603581526020016133c8603591396117dd565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550611a8f600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16826040518060600160405280602f815260200161332a602f9139611dfc565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b5991906130fd565b60405180910390a3611c2a600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e72565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16905082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611de9828483611e72565b50505050565b6000804690508091505090565b6000808385019050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d9190612f41565b60405180910390fd5b50809150509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611ebc57506000816bffffffffffffffffffffffff16115b1561216857600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612014576000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611f5f576000611fdb565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b905060006120028285604051806060016040528060278152602001613303602791396117dd565b90506120108684848461216d565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612167576000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116120b257600061212e565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160049054906101000a90046bffffffffffffffffffffffff165b90506000612155828560405180606001604052806026815260200161344460269139611dfc565b90506121638584848461216d565b5050505b5b505050565b60006121914360405180606001604052806033815260200161339560339139612460565b905060008463ffffffff1611801561222657508063ffffffff16600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156122c15781600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550612409565b60405180604001604052808263ffffffff168152602001836bffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505060018401600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612451929190613133565b60405180910390a25050505050565b6000640100000000831082906124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a39190612f41565b60405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160006bffffffffffffffffffffffff1681525090565b6000813590506124f38161326a565b92915050565b60008135905061250881613281565b92915050565b60008135905061251d81613298565b92915050565b600081359050612532816132af565b92915050565b600081359050612547816132c6565b92915050565b60006020828403121561255f57600080fd5b600061256d848285016124e4565b91505092915050565b6000806040838503121561258957600080fd5b6000612597858286016124e4565b92505060206125a8858286016124e4565b9150509250929050565b6000806000606084860312156125c757600080fd5b60006125d5868287016124e4565b93505060206125e6868287016124e4565b92505060406125f78682870161250e565b9150509250925092565b600080600080600080600060e0888a03121561261c57600080fd5b600061262a8a828b016124e4565b975050602061263b8a828b016124e4565b965050604061264c8a828b0161250e565b955050606061265d8a828b0161250e565b945050608061266e8a828b01612538565b93505060a061267f8a828b016124f9565b92505060c06126908a828b016124f9565b91505092959891949750929550565b600080604083850312156126b257600080fd5b60006126c0858286016124e4565b92505060206126d18582860161250e565b9150509250929050565b60008060008060008060c087890312156126f457600080fd5b600061270289828a016124e4565b965050602061271389828a0161250e565b955050604061272489828a0161250e565b945050606061273589828a01612538565b935050608061274689828a016124f9565b92505060a061275789828a016124f9565b9150509295509295509295565b6000806040838503121561277757600080fd5b6000612785858286016124e4565b925050602061279685828601612523565b9150509250929050565b6127a981613183565b82525050565b6127b881613195565b82525050565b6127c7816131a1565b82525050565b6127de6127d9826131a1565b61324f565b82525050565b60006127ef8261315c565b6127f98185613167565b935061280981856020860161321c565b61281281613259565b840191505092915050565b600061282a603983613167565b91507f494d4f3a3a5f7472616e73666572546f6b656e733a2063616e6e6f742074726160008301527f6e7366657220746f20746865207a65726f2061646472657373000000000000006020830152604082019050919050565b6000612890602583613167565b91507f494d4f3a3a64656c656761746542795369673a20696e76616c6964207369676e60008301527f61747572650000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006128f6601983613167565b91507f494d4f3a3a7065726d69743a20756e617574686f72697a6564000000000000006000830152602082019050919050565b6000612936600283613178565b91507f19010000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b6000612976603b83613167565b91507f494d4f3a3a5f7472616e73666572546f6b656e733a2063616e6e6f742074726160008301527f6e736665722066726f6d20746865207a65726f206164647265737300000000006020830152604082019050919050565b60006129dc605283613178565b91507f5065726d69742861646472657373206f776e65722c616464726573732073706560008301527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e636560208301527f2c75696e7432353620646561646c696e652900000000000000000000000000006040830152605282019050919050565b6000612a68602183613167565b91507f494d4f3a3a64656c656761746542795369673a20696e76616c6964206e6f6e6360008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ace601e83613167565b91507f494d4f3a3a7065726d69743a20696e76616c6964207369676e617475726500006000830152602082019050919050565b6000612b0e604383613178565b91507f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353660008301527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208301527f63742900000000000000000000000000000000000000000000000000000000006040830152604382019050919050565b6000612b9a602583613167565b91507f494d4f3a3a64656c656761746542795369673a207369676e617475726520657860008301527f70697265640000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c00602683613167565b91507f494d4f3a3a6765745072696f72566f7465733a206e6f7420796574206465746560008301527f726d696e656400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612c66601e83613167565b91507f494d4f3a3a7065726d69743a207369676e6174757265206578706972656400006000830152602082019050919050565b6000612ca6603a83613178565b91507f44656c65676174696f6e28616464726573732064656c6567617465652c75696e60008301527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020830152603a82019050919050565b612d08816131cb565b82525050565b612d17816131d5565b82525050565b612d26816131e5565b82525050565b612d358161320a565b82525050565b612d44816131f2565b82525050565b6000612d5582612929565b9150612d6182856127cd565b602082019150612d7182846127cd565b6020820191508190509392505050565b6000612d8c826129cf565b9150819050919050565b6000612da182612b01565b9150819050919050565b6000612db682612c99565b9150819050919050565b6000602082019050612dd560008301846127a0565b92915050565b6000602082019050612df060008301846127af565b92915050565b6000602082019050612e0b60008301846127be565b92915050565b600060c082019050612e2660008301896127be565b612e3360208301886127a0565b612e4060408301876127a0565b612e4d6060830186612cff565b612e5a6080830185612cff565b612e6760a0830184612cff565b979650505050505050565b6000608082019050612e8760008301876127be565b612e9460208301866127a0565b612ea16040830185612cff565b612eae6060830184612cff565b95945050505050565b6000608082019050612ecc60008301876127be565b612ed960208301866127be565b612ee66040830185612cff565b612ef360608301846127a0565b95945050505050565b6000608082019050612f1160008301876127be565b612f1e6020830186612d1d565b612f2b60408301856127be565b612f3860608301846127be565b95945050505050565b60006020820190508181036000830152612f5b81846127e4565b905092915050565b60006020820190508181036000830152612f7c8161281d565b9050919050565b60006020820190508181036000830152612f9c81612883565b9050919050565b60006020820190508181036000830152612fbc816128e9565b9050919050565b60006020820190508181036000830152612fdc81612969565b9050919050565b60006020820190508181036000830152612ffc81612a5b565b9050919050565b6000602082019050818103600083015261301c81612ac1565b9050919050565b6000602082019050818103600083015261303c81612b8d565b9050919050565b6000602082019050818103600083015261305c81612bf3565b9050919050565b6000602082019050818103600083015261307c81612c59565b9050919050565b60006020820190506130986000830184612cff565b92915050565b60006020820190506130b36000830184612d0e565b92915050565b60006040820190506130ce6000830185612d0e565b6130db6020830184612d3b565b9392505050565b60006020820190506130f76000830184612d1d565b92915050565b60006020820190506131126000830184612d2c565b92915050565b600060208201905061312d6000830184612d3b565b92915050565b60006040820190506131486000830185612d2c565b6131556020830184612d2c565b9392505050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061318e826131ab565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b6000613215826131f2565b9050919050565b60005b8381101561323a57808201518184015260208101905061321f565b83811115613249576000848401525b50505050565b6000819050919050565b6000601f19601f8301169050919050565b61327381613183565b811461327e57600080fd5b50565b61328a816131a1565b811461329557600080fd5b50565b6132a1816131cb565b81146132ac57600080fd5b50565b6132b8816131d5565b81146132c357600080fd5b50565b6132cf816131e5565b81146132da57600080fd5b5056fe494d4f3a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473494d4f3a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773494d4f3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773494d4f3a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365494d4f3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473494d4f3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365494d4f3a3a7065726d69743a20616d6f756e7420657863656564732039362062697473494d4f3a3a617070726f76653a20616d6f756e7420657863656564732039362062697473494d4f3a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773a26469706673582212208a05da557aa94a16293d84eedd2dd7395c84fc2274251d664dfe145a26e6f89564736f6c63430006090033000000000000000000000000e9b3c292904114e6e6f04a363ae4c0f800f3236d

Deployed ByteCode Sourcemap

281:14435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;351:42;;;:::i;:::-;;;;;;;;;;;;;;;;3972:418;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;653:40;;;:::i;:::-;;;;;;;;;;;;;;;;1435:122;;;:::i;:::-;;;;;;;;;;;;;;;;7052:670;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1858:137;;;:::i;:::-;;;;;;;;;;;;;;;;554:35;;;:::i;:::-;;;;;;;;;;;;;;;;885:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7870:102;;;;;;;;;;;;;;;;:::i;:::-;;1313:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6133:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10046:1217;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2076:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;454:37;;;:::i;:::-;;;;;;;;;;;;;;;;6505:237;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9393:222;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8406:786;;;;;;;;;;;;;;;;:::i;:::-;;4880:1050;;;;;;;;;;;;;;;;:::i;:::-;;3358:136;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1651:117;;;:::i;:::-;;;;;;;;;;;;;;;;1174:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;351:42;;;;;;;;;;;;;;;;;;;:::o;3972:418::-;4040:4;4057:13;4103:2;4085:9;:21;4081:172;;;4139:2;4123:19;;4081:172;;;4184:57;4191:9;4184:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;4175:66;;4081:172;4299:6;4265:10;:22;4276:10;4265:22;;;;;;;;;;;;;;;:31;4288:7;4265:31;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;4344:7;4323:37;;4332:10;4323:37;;;4353:6;4323:37;;;;;;;;;;;;;;;4378:4;4371:11;;;3972:418;;;;:::o;653:40::-;;;;:::o;1435:122::-;1477:80;;;;;;;;;;;;;;1435:122;:::o;7052:670::-;7134:4;7151:15;7169:10;7151:28;;7190:23;7216:10;:15;7227:3;7216:15;;;;;;;;;;;;;;;:24;7232:7;7216:24;;;;;;;;;;;;;;;;;;;;;;;;;7190:50;;7251:13;7267:57;7274:9;7267:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;7251:73;;7352:3;7341:14;;:7;:14;;;;:48;;;;;7386:2;7359:30;;:16;:30;;;;7341:48;7337:310;;;7406:19;7428:95;7434:16;7452:6;7428:95;;;;;;;;;;;;;;;;;:5;:95::i;:::-;7406:117;;7565:12;7538:10;:15;7549:3;7538:15;;;;;;;;;;;;;;;:24;7554:7;7538:24;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7613:7;7599:36;;7608:3;7599:36;;;7622:12;7599:36;;;;;;;;;;;;;;;7337:310;;7659:33;7675:3;7680;7685:6;7659:15;:33::i;:::-;7710:4;7703:11;;;;;7052:670;;;;;:::o;1858:137::-;1900:95;;;;;;;;;;;;;;1858:137;:::o;554:35::-;587:2;554:35;:::o;885:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;7870:102::-;7932:32;7942:10;7954:9;7932;:32::i;:::-;7870:102;:::o;1313:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;6133:108::-;6192:4;6216:8;:17;6225:7;6216:17;;;;;;;;;;;;;;;;;;;;;;;;;6209:24;;;;6133:108;;;:::o;10046:1217::-;10125:6;10166:12;10152:11;:26;10144:77;;;;;;;;;;;;;;;;;;;;;;10234:19;10256:14;:23;10271:7;10256:23;;;;;;;;;;;;;;;;;;;;;;;;;10234:45;;10310:1;10294:12;:17;;;10290:58;;;10335:1;10328:8;;;;;10290:58;10460:11;10408;:20;10420:7;10408:20;;;;;;;;;;;;;;;:38;10444:1;10429:12;:16;10408:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;10404:147;;10495:11;:20;10507:7;10495:20;;;;;;;;;;;;;;;:38;10531:1;10516:12;:16;10495:38;;;;;;;;;;;;;;;:44;;;;;;;;;;;;10488:51;;;;;10404:147;10648:11;10612;:20;10624:7;10612:20;;;;;;;;;;;;;;;:23;10633:1;10612:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;10608:88;;;10683:1;10676:8;;;;;10608:88;10708:12;10723:1;10708:16;;10735:12;10765:1;10750:12;:16;10735:31;;10777:428;10792:5;10784:13;;:5;:13;;;10777:428;;;10814:13;10856:1;10847:5;10839;:13;10838:19;;;;;;;;10830:5;:27;10814:43;;10899:20;;:::i;:::-;10922:11;:20;10934:7;10922:20;;;;;;;;;;;;;;;:28;10943:6;10922:28;;;;;;;;;;;;;;;10899:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10985:11;10969:2;:12;;;:27;;;10965:229;;;11024:2;:8;;;11017:15;;;;;;;;;10965:229;11073:11;11058:2;:12;;;:26;;;11054:140;;;11113:6;11105:14;;11054:140;;;11177:1;11168:6;:10;11160:18;;11054:140;10777:428;;;;;11222:11;:20;11234:7;11222:20;;;;;;;;;;;;;;;:27;11243:5;11222:27;;;;;;;;;;;;;;;:33;;;;;;;;;;;;11215:40;;;;;10046:1217;;;;;:::o;2076:39::-;;;;;;;;;;;;;;;;;:::o;454:37::-;;;;;;;;;;;;;;;;;;;:::o;6505:237::-;6570:4;6587:13;6603:58;6610:9;6603:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;6587:74;;6672:40;6688:10;6700:3;6705:6;6672:15;:40::i;:::-;6730:4;6723:11;;;6505:237;;;;:::o;9393:222::-;9458:6;9477:19;9499:14;:23;9514:7;9499:23;;;;;;;;;;;;;;;;;;;;;;;;;9477:45;;9555:1;9540:12;:16;;;:67;;9606:1;9540:67;;;9559:11;:20;9571:7;9559:20;;;;;;;;;;;;;;;:38;9595:1;9580:12;:16;9559:38;;;;;;;;;;;;;;;:44;;;;;;;;;;;;9540:67;9533:74;;;9393:222;;;:::o;8406:786::-;8522:23;1477:80;;;;;;;;;;;;;;8602:4;;;;;;;;;;;;;;;;;8586:22;;;;;;8610:12;:10;:12::i;:::-;8632:4;8558:80;;;;;;;;;;;;;;;;;;;;;;;;;8548:91;;;;;;8522:117;;8650:18;1697:71;;;;;;;;;;;;;;8713:9;8724:5;8731:6;8681:57;;;;;;;;;;;;;;;;;;;;;;;;;8671:68;;;;;;8650:89;;8750:14;8806:15;8823:10;8777:57;;;;;;;;;;;;;;;;;;;;;;;8767:68;;;;;;8750:85;;8846:17;8866:26;8876:6;8884:1;8887;8890;8866:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8846:46;;8932:1;8911:23;;:9;:23;;;;8903:73;;;;;;;;;;;;;;;;;;;;;;9004:6;:17;9011:9;9004:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;8995:5;:28;8987:74;;;;;;;;;;;;;;;;;;;;;;9087:6;9080:3;:13;;9072:63;;;;;;;;;;;;;;;;;;;;;;9153:31;9163:9;9174;9153;:31::i;:::-;9146:38;;;;8406:786;;;;;;:::o;4880:1050::-;5010:13;5056:2;5038:9;:21;5034:171;;;5092:2;5076:19;;5034:171;;;5137:56;5144:9;5137:56;;;;;;;;;;;;;;;;;:6;:56::i;:::-;5128:65;;5034:171;5217:23;1477:80;;;;;;;;;;;;;;5297:4;;;;;;;;;;;;;;;;;5281:22;;;;;;5305:12;:10;:12::i;:::-;5327:4;5253:80;;;;;;;;;;;;;;;;;;;;;;;;;5243:91;;;;;;5217:117;;5345:18;1900:95;;;;;;;;;;;;;;5404:5;5411:7;5420:9;5431:6;:13;5438:5;5431:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;5448:8;5376:81;;;;;;;;;;;;;;;;;;;;;;;;;;;5366:92;;;;;;5345:113;;5469:14;5525:15;5542:10;5496:57;;;;;;;;;;;;;;;;;;;;;;;5486:68;;;;;;5469:85;;5565:17;5585:26;5595:6;5603:1;5606;5609;5585:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5565:46;;5651:1;5630:23;;:9;:23;;;;5622:66;;;;;;;;;;;;;;;;;;;;;;5720:5;5707:18;;:9;:18;;;5699:56;;;;;;;;;;;;;;;;;;;;;;5781:8;5774:3;:15;;5766:58;;;;;;;;;;;;;;;;;;;;;;5866:6;5837:10;:17;5848:5;5837:17;;;;;;;;;;;;;;;:26;5855:7;5837:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;5906:7;5890:32;;5899:5;5890:32;;;5915:6;5890:32;;;;;;;;;;;;;;;4880:1050;;;;;;;;;;;;:::o;3358:136::-;3434:4;3458:10;:19;3469:7;3458:19;;;;;;;;;;;;;;;:28;3478:7;3458:28;;;;;;;;;;;;;;;;;;;;;;;;;3451:35;;;;3358:136;;;;:::o;1651:117::-;1697:71;;;;;;;;;;;;;;1651:117;:::o;1174:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14022:161::-;14097:6;14128:5;14124:1;:9;14135:12;14116:32;;;;;;;;;;;;;;;;;;;;;;;;;14173:1;14159:16;;14022:161;;;;:::o;14387:165::-;14473:6;14505:1;14500:6;;:1;:6;;;;14508:12;14492:29;;;;;;;;;;;;;;;;;;;;;;;;;14543:1;14539;:5;14532:12;;14387:165;;;;;:::o;11654:610::-;11763:1;11748:17;;:3;:17;;;;11740:89;;;;;;;;;;;;;;;;;;;;;;11863:1;11848:17;;:3;:17;;;;11840:87;;;;;;;;;;;;;;;;;;;;;;11956:85;11962:8;:13;11971:3;11962:13;;;;;;;;;;;;;;;;;;;;;;;;;11977:6;11956:85;;;;;;;;;;;;;;;;;:5;:85::i;:::-;11940:8;:13;11949:3;11940:13;;;;;;;;;;;;;;;;:101;;;;;;;;;;;;;;;;;;12068:79;12074:8;:13;12083:3;12074:13;;;;;;;;;;;;;;;;;;;;;;;;;12089:6;12068:79;;;;;;;;;;;;;;;;;:5;:79::i;:::-;12052:8;:13;12061:3;12052:13;;;;;;;;;;;;;;;;:95;;;;;;;;;;;;;;;;;;12177:3;12163:26;;12172:3;12163:26;;;12182:6;12163:26;;;;;;;;;;;;;;;12202:54;12217:9;:14;12227:3;12217:14;;;;;;;;;;;;;;;;;;;;;;;;;12233:9;:14;12243:3;12233:14;;;;;;;;;;;;;;;;;;;;;;;;;12249:6;12202:14;:54::i;:::-;11654:610;;;:::o;11271:375::-;11348:23;11374:9;:20;11384:9;11374:20;;;;;;;;;;;;;;;;;;;;;;;;;11348:46;;11405:23;11431:8;:19;11440:9;11431:19;;;;;;;;;;;;;;;;;;;;;;;;;11405:45;;11484:9;11461;:20;11471:9;11461:20;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;11555:9;11511:54;;11538:15;11511:54;;11527:9;11511:54;;;;;;;;;;;;11578:60;11593:15;11610:9;11621:16;11578:14;:60::i;:::-;11271:375;;;;:::o;14560:153::-;14605:4;14622:15;14670:9;14659:20;;14698:7;14691:14;;;14560:153;:::o;14191:188::-;14277:6;14296:8;14311:1;14307;:5;14296:16;;14336:1;14331:6;;:1;:6;;;;14339:12;14323:29;;;;;;;;;;;;;;;;;;;;;;;;;14370:1;14363:8;;;14191:188;;;;;:::o;12272:937::-;12377:6;12367:16;;:6;:16;;;;:30;;;;;12396:1;12387:6;:10;;;12367:30;12363:839;;;12436:1;12418:20;;:6;:20;;;12414:381;;12459:16;12478:14;:22;12493:6;12478:22;;;;;;;;;;;;;;;;;;;;;;;;;12459:41;;12519:16;12550:1;12538:9;:13;;;:60;;12597:1;12538:60;;;12554:11;:19;12566:6;12554:19;;;;;;;;;;;;;;;:34;12586:1;12574:9;:13;12554:34;;;;;;;;;;;;;;;:40;;;;;;;;;;;;12538:60;12519:79;;12617:16;12636:67;12642:9;12653:6;12636:67;;;;;;;;;;;;;;;;;:5;:67::i;:::-;12617:86;;12722:57;12739:6;12747:9;12758;12769;12722:16;:57::i;:::-;12414:381;;;;12833:1;12815:20;;:6;:20;;;12811:380;;12856:16;12875:14;:22;12890:6;12875:22;;;;;;;;;;;;;;;;;;;;;;;;;12856:41;;12916:16;12947:1;12935:9;:13;;;:60;;12994:1;12935:60;;;12951:11;:19;12963:6;12951:19;;;;;;;;;;;;;;;:34;12983:1;12971:9;:13;12951:34;;;;;;;;;;;;;;;:40;;;;;;;;;;;;12935:60;12916:79;;13014:16;13033:66;13039:9;13050:6;13033:66;;;;;;;;;;;;;;;;;:5;:66::i;:::-;13014:85;;13118:57;13135:6;13143:9;13154;13165;13118:16;:57::i;:::-;12811:380;;;;12363:839;12272:937;;;:::o;13217:628::-;13335:18;13356:75;13363:12;13356:75;;;;;;;;;;;;;;;;;:6;:75::i;:::-;13335:96;;13461:1;13446:12;:16;;;:85;;;;;13520:11;13466:65;;:11;:22;13478:9;13466:22;;;;;;;;;;;;;;;:40;13504:1;13489:12;:16;13466:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;13446:85;13442:329;;;13595:8;13546:11;:22;13558:9;13546:22;;;;;;;;;;;;;;;:40;13584:1;13569:12;:16;13546:40;;;;;;;;;;;;;;;:46;;;:57;;;;;;;;;;;;;;;;;;13442:329;;;13671:33;;;;;;;;13682:11;13671:33;;;;;;13695:8;13671:33;;;;;13632:11;:22;13644:9;13632:22;;;;;;;;;;;;;;;:36;13655:12;13632:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13760:1;13745:12;:16;13717:14;:25;13732:9;13717:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;13442:329;13807:9;13786:51;;;13818:8;13828;13786:51;;;;;;;;;;;;;;;;13217:628;;;;;:::o;13853:161::-;13928:6;13959:5;13955:1;:9;13966:12;13947:32;;;;;;;;;;;;;;;;;;;;;;;;;14004:1;13990:16;;13853:161;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:130;;222:6;209:20;200:29;;234:33;261:5;234:33;;;194:78;;;;;279:130;;359:6;346:20;337:29;;371:33;398:5;371:33;;;331:78;;;;;416:128;;495:6;482:20;473:29;;507:32;533:5;507:32;;;467:77;;;;;551:126;;629:6;616:20;607:29;;641:31;666:5;641:31;;;601:76;;;;;684:241;;788:2;776:9;767:7;763:23;759:32;756:2;;;804:1;801;794:12;756:2;839:1;856:53;901:7;892:6;881:9;877:22;856:53;;;846:63;;818:97;750:175;;;;;932:366;;;1053:2;1041:9;1032:7;1028:23;1024:32;1021:2;;;1069:1;1066;1059:12;1021:2;1104:1;1121:53;1166:7;1157:6;1146:9;1142:22;1121:53;;;1111:63;;1083:97;1211:2;1229:53;1274:7;1265:6;1254:9;1250:22;1229:53;;;1219:63;;1190:98;1015:283;;;;;;1305:491;;;;1443:2;1431:9;1422:7;1418:23;1414:32;1411:2;;;1459:1;1456;1449:12;1411:2;1494:1;1511:53;1556:7;1547:6;1536:9;1532:22;1511:53;;;1501:63;;1473:97;1601:2;1619:53;1664:7;1655:6;1644:9;1640:22;1619:53;;;1609:63;;1580:98;1709:2;1727:53;1772:7;1763:6;1752:9;1748:22;1727:53;;;1717:63;;1688:98;1405:391;;;;;;1803:991;;;;;;;;2007:3;1995:9;1986:7;1982:23;1978:33;1975:2;;;2024:1;2021;2014:12;1975:2;2059:1;2076:53;2121:7;2112:6;2101:9;2097:22;2076:53;;;2066:63;;2038:97;2166:2;2184:53;2229:7;2220:6;2209:9;2205:22;2184:53;;;2174:63;;2145:98;2274:2;2292:53;2337:7;2328:6;2317:9;2313:22;2292:53;;;2282:63;;2253:98;2382:2;2400:53;2445:7;2436:6;2425:9;2421:22;2400:53;;;2390:63;;2361:98;2490:3;2509:51;2552:7;2543:6;2532:9;2528:22;2509:51;;;2499:61;;2469:97;2597:3;2616:53;2661:7;2652:6;2641:9;2637:22;2616:53;;;2606:63;;2576:99;2706:3;2725:53;2770:7;2761:6;2750:9;2746:22;2725:53;;;2715:63;;2685:99;1969:825;;;;;;;;;;;2801:366;;;2922:2;2910:9;2901:7;2897:23;2893:32;2890:2;;;2938:1;2935;2928:12;2890:2;2973:1;2990:53;3035:7;3026:6;3015:9;3011:22;2990:53;;;2980:63;;2952:97;3080:2;3098:53;3143:7;3134:6;3123:9;3119:22;3098:53;;;3088:63;;3059:98;2884:283;;;;;;3174:865;;;;;;;3361:3;3349:9;3340:7;3336:23;3332:33;3329:2;;;3378:1;3375;3368:12;3329:2;3413:1;3430:53;3475:7;3466:6;3455:9;3451:22;3430:53;;;3420:63;;3392:97;3520:2;3538:53;3583:7;3574:6;3563:9;3559:22;3538:53;;;3528:63;;3499:98;3628:2;3646:53;3691:7;3682:6;3671:9;3667:22;3646:53;;;3636:63;;3607:98;3736:2;3754:51;3797:7;3788:6;3777:9;3773:22;3754:51;;;3744:61;;3715:96;3842:3;3861:53;3906:7;3897:6;3886:9;3882:22;3861:53;;;3851:63;;3821:99;3951:3;3970:53;4015:7;4006:6;3995:9;3991:22;3970:53;;;3960:63;;3930:99;3323:716;;;;;;;;;4046:364;;;4166:2;4154:9;4145:7;4141:23;4137:32;4134:2;;;4182:1;4179;4172:12;4134:2;4217:1;4234:53;4279:7;4270:6;4259:9;4255:22;4234:53;;;4224:63;;4196:97;4324:2;4342:52;4386:7;4377:6;4366:9;4362:22;4342:52;;;4332:62;;4303:97;4128:282;;;;;;4417:113;4500:24;4518:5;4500:24;;;4495:3;4488:37;4482:48;;;4537:104;4614:21;4629:5;4614:21;;;4609:3;4602:34;4596:45;;;4648:113;4731:24;4749:5;4731:24;;;4726:3;4719:37;4713:48;;;4768:152;4869:45;4889:24;4907:5;4889:24;;;4869:45;;;4864:3;4857:58;4851:69;;;4927:347;;5039:39;5072:5;5039:39;;;5090:71;5154:6;5149:3;5090:71;;;5083:78;;5166:52;5211:6;5206:3;5199:4;5192:5;5188:16;5166:52;;;5239:29;5261:6;5239:29;;;5234:3;5230:39;5223:46;;5019:255;;;;;;5282:394;;5442:67;5506:2;5501:3;5442:67;;;5435:74;;5542:34;5538:1;5533:3;5529:11;5522:55;5611:27;5606:2;5601:3;5597:12;5590:49;5667:2;5662:3;5658:12;5651:19;;5428:248;;;;5685:374;;5845:67;5909:2;5904:3;5845:67;;;5838:74;;5945:34;5941:1;5936:3;5932:11;5925:55;6014:7;6009:2;6004:3;6000:12;5993:29;6050:2;6045:3;6041:12;6034:19;;5831:228;;;;6068:325;;6228:67;6292:2;6287:3;6228:67;;;6221:74;;6328:27;6324:1;6319:3;6315:11;6308:48;6384:2;6379:3;6375:12;6368:19;;6214:179;;;;6402:398;;6580:84;6662:1;6657:3;6580:84;;;6573:91;;6697:66;6693:1;6688:3;6684:11;6677:87;6792:1;6787:3;6783:11;6776:18;;6566:234;;;;6809:396;;6969:67;7033:2;7028:3;6969:67;;;6962:74;;7069:34;7065:1;7060:3;7056:11;7049:55;7138:29;7133:2;7128:3;7124:12;7117:51;7196:2;7191:3;7187:12;7180:19;;6955:250;;;;7214:492;;7392:85;7474:2;7469:3;7392:85;;;7385:92;;7510:34;7506:1;7501:3;7497:11;7490:55;7579:34;7574:2;7569:3;7565:12;7558:56;7648:20;7643:2;7638:3;7634:12;7627:42;7697:2;7692:3;7688:12;7681:19;;7378:328;;;;7715:370;;7875:67;7939:2;7934:3;7875:67;;;7868:74;;7975:34;7971:1;7966:3;7962:11;7955:55;8044:3;8039:2;8034:3;8030:12;8023:25;8076:2;8071:3;8067:12;8060:19;;7861:224;;;;8094:330;;8254:67;8318:2;8313:3;8254:67;;;8247:74;;8354:32;8350:1;8345:3;8341:11;8334:53;8415:2;8410:3;8406:12;8399:19;;8240:184;;;;8433:477;;8611:85;8693:2;8688:3;8611:85;;;8604:92;;8729:34;8725:1;8720:3;8716:11;8709:55;8798:34;8793:2;8788:3;8784:12;8777:56;8867:5;8862:2;8857:3;8853:12;8846:27;8901:2;8896:3;8892:12;8885:19;;8597:313;;;;8919:374;;9079:67;9143:2;9138:3;9079:67;;;9072:74;;9179:34;9175:1;9170:3;9166:11;9159:55;9248:7;9243:2;9238:3;9234:12;9227:29;9284:2;9279:3;9275:12;9268:19;;9065:228;;;;9302:375;;9462:67;9526:2;9521:3;9462:67;;;9455:74;;9562:34;9558:1;9553:3;9549:11;9542:55;9631:8;9626:2;9621:3;9617:12;9610:30;9668:2;9663:3;9659:12;9652:19;;9448:229;;;;9686:330;;9846:67;9910:2;9905:3;9846:67;;;9839:74;;9946:32;9942:1;9937:3;9933:11;9926:53;10007:2;10002:3;9998:12;9991:19;;9832:184;;;;10025:431;;10203:85;10285:2;10280:3;10203:85;;;10196:92;;10321:34;10317:1;10312:3;10308:11;10301:55;10390:28;10385:2;10380:3;10376:12;10369:50;10447:2;10442:3;10438:12;10431:19;;10189:267;;;;10464:113;10547:24;10565:5;10547:24;;;10542:3;10535:37;10529:48;;;10584:110;10665:23;10682:5;10665:23;;;10660:3;10653:36;10647:47;;;10701:107;10780:22;10796:5;10780:22;;;10775:3;10768:35;10762:46;;;10815:124;10897:36;10927:5;10897:36;;;10892:3;10885:49;10879:60;;;10946:110;11027:23;11044:5;11027:23;;;11022:3;11015:36;11009:47;;;11063:659;;11327:148;11471:3;11327:148;;;11320:155;;11486:75;11557:3;11548:6;11486:75;;;11583:2;11578:3;11574:12;11567:19;;11597:75;11668:3;11659:6;11597:75;;;11694:2;11689:3;11685:12;11678:19;;11714:3;11707:10;;11308:414;;;;;;11729:381;;11937:148;12081:3;11937:148;;;11930:155;;12102:3;12095:10;;11918:192;;;;12117:381;;12325:148;12469:3;12325:148;;;12318:155;;12490:3;12483:10;;12306:192;;;;12505:381;;12713:148;12857:3;12713:148;;;12706:155;;12878:3;12871:10;;12694:192;;;;12893:222;;13020:2;13009:9;13005:18;12997:26;;13034:71;13102:1;13091:9;13087:17;13078:6;13034:71;;;12991:124;;;;;13122:210;;13243:2;13232:9;13228:18;13220:26;;13257:65;13319:1;13308:9;13304:17;13295:6;13257:65;;;13214:118;;;;;13339:222;;13466:2;13455:9;13451:18;13443:26;;13480:71;13548:1;13537:9;13533:17;13524:6;13480:71;;;13437:124;;;;;13568:780;;13835:3;13824:9;13820:19;13812:27;;13850:71;13918:1;13907:9;13903:17;13894:6;13850:71;;;13932:72;14000:2;13989:9;13985:18;13976:6;13932:72;;;14015;14083:2;14072:9;14068:18;14059:6;14015:72;;;14098;14166:2;14155:9;14151:18;14142:6;14098:72;;;14181:73;14249:3;14238:9;14234:19;14225:6;14181:73;;;14265;14333:3;14322:9;14318:19;14309:6;14265:73;;;13806:542;;;;;;;;;;14355:556;;14566:3;14555:9;14551:19;14543:27;;14581:71;14649:1;14638:9;14634:17;14625:6;14581:71;;;14663:72;14731:2;14720:9;14716:18;14707:6;14663:72;;;14746;14814:2;14803:9;14799:18;14790:6;14746:72;;;14829;14897:2;14886:9;14882:18;14873:6;14829:72;;;14537:374;;;;;;;;14918:556;;15129:3;15118:9;15114:19;15106:27;;15144:71;15212:1;15201:9;15197:17;15188:6;15144:71;;;15226:72;15294:2;15283:9;15279:18;15270:6;15226:72;;;15309;15377:2;15366:9;15362:18;15353:6;15309:72;;;15392;15460:2;15449:9;15445:18;15436:6;15392:72;;;15100:374;;;;;;;;15481:548;;15688:3;15677:9;15673:19;15665:27;;15703:71;15771:1;15760:9;15756:17;15747:6;15703:71;;;15785:68;15849:2;15838:9;15834:18;15825:6;15785:68;;;15864:72;15932:2;15921:9;15917:18;15908:6;15864:72;;;15947;16015:2;16004:9;16000:18;15991:6;15947:72;;;15659:370;;;;;;;;16036:310;;16183:2;16172:9;16168:18;16160:26;;16233:9;16227:4;16223:20;16219:1;16208:9;16204:17;16197:47;16258:78;16331:4;16322:6;16258:78;;;16250:86;;16154:192;;;;;16353:416;;16553:2;16542:9;16538:18;16530:26;;16603:9;16597:4;16593:20;16589:1;16578:9;16574:17;16567:47;16628:131;16754:4;16628:131;;;16620:139;;16524:245;;;;16776:416;;16976:2;16965:9;16961:18;16953:26;;17026:9;17020:4;17016:20;17012:1;17001:9;16997:17;16990:47;17051:131;17177:4;17051:131;;;17043:139;;16947:245;;;;17199:416;;17399:2;17388:9;17384:18;17376:26;;17449:9;17443:4;17439:20;17435:1;17424:9;17420:17;17413:47;17474:131;17600:4;17474:131;;;17466:139;;17370:245;;;;17622:416;;17822:2;17811:9;17807:18;17799:26;;17872:9;17866:4;17862:20;17858:1;17847:9;17843:17;17836:47;17897:131;18023:4;17897:131;;;17889:139;;17793:245;;;;18045:416;;18245:2;18234:9;18230:18;18222:26;;18295:9;18289:4;18285:20;18281:1;18270:9;18266:17;18259:47;18320:131;18446:4;18320:131;;;18312:139;;18216:245;;;;18468:416;;18668:2;18657:9;18653:18;18645:26;;18718:9;18712:4;18708:20;18704:1;18693:9;18689:17;18682:47;18743:131;18869:4;18743:131;;;18735:139;;18639:245;;;;18891:416;;19091:2;19080:9;19076:18;19068:26;;19141:9;19135:4;19131:20;19127:1;19116:9;19112:17;19105:47;19166:131;19292:4;19166:131;;;19158:139;;19062:245;;;;19314:416;;19514:2;19503:9;19499:18;19491:26;;19564:9;19558:4;19554:20;19550:1;19539:9;19535:17;19528:47;19589:131;19715:4;19589:131;;;19581:139;;19485:245;;;;19737:416;;19937:2;19926:9;19922:18;19914:26;;19987:9;19981:4;19977:20;19973:1;19962:9;19958:17;19951:47;20012:131;20138:4;20012:131;;;20004:139;;19908:245;;;;20160:222;;20287:2;20276:9;20272:18;20264:26;;20301:71;20369:1;20358:9;20354:17;20345:6;20301:71;;;20258:124;;;;;20389:218;;20514:2;20503:9;20499:18;20491:26;;20528:69;20594:1;20583:9;20579:17;20570:6;20528:69;;;20485:122;;;;;20614:325;;20765:2;20754:9;20750:18;20742:26;;20779:69;20845:1;20834:9;20830:17;20821:6;20779:69;;;20859:70;20925:2;20914:9;20910:18;20901:6;20859:70;;;20736:203;;;;;;20946:214;;21069:2;21058:9;21054:18;21046:26;;21083:67;21147:1;21136:9;21132:17;21123:6;21083:67;;;21040:120;;;;;21167:220;;21293:2;21282:9;21278:18;21270:26;;21307:70;21374:1;21363:9;21359:17;21350:6;21307:70;;;21264:123;;;;;21394:218;;21519:2;21508:9;21504:18;21496:26;;21533:69;21599:1;21588:9;21584:17;21575:6;21533:69;;;21490:122;;;;;21619:329;;21772:2;21761:9;21757:18;21749:26;;21786:70;21853:1;21842:9;21838:17;21829:6;21786:70;;;21867:71;21934:2;21923:9;21919:18;21910:6;21867:71;;;21743:205;;;;;;21955:122;;22049:5;22043:12;22033:22;;22014:63;;;;22085:163;;22200:6;22195:3;22188:19;22237:4;22232:3;22228:14;22213:29;;22181:67;;;;;22257:145;;22393:3;22378:18;;22371:31;;;;;22410:91;;22472:24;22490:5;22472:24;;;22461:35;;22455:46;;;;22508:85;;22581:5;22574:13;22567:21;22556:32;;22550:43;;;;22600:72;;22662:5;22651:16;;22645:27;;;;22679:121;;22752:42;22745:5;22741:54;22730:65;;22724:76;;;;22807:72;;22869:5;22858:16;;22852:27;;;;22886:88;;22958:10;22951:5;22947:22;22936:33;;22930:44;;;;22981:81;;23052:4;23045:5;23041:16;23030:27;;23024:38;;;;23069:104;;23141:26;23134:5;23130:38;23119:49;;23113:60;;;;23180:106;;23258:23;23275:5;23258:23;;;23245:36;;23239:47;;;;23294:268;23359:1;23366:101;23380:6;23377:1;23374:13;23366:101;;;23456:1;23451:3;23447:11;23441:18;23437:1;23432:3;23428:11;23421:39;23402:2;23399:1;23395:10;23390:15;;23366:101;;;23482:6;23479:1;23476:13;23473:2;;;23547:1;23538:6;23533:3;23529:16;23522:27;23473:2;23343:219;;;;;23570:74;;23634:5;23623:16;;23617:27;;;;23651:97;;23739:2;23735:7;23730:2;23723:5;23719:14;23715:28;23705:38;;23699:49;;;;23756:117;23825:24;23843:5;23825:24;;;23818:5;23815:35;23805:2;;23864:1;23861;23854:12;23805:2;23799:74;;23880:117;23949:24;23967:5;23949:24;;;23942:5;23939:35;23929:2;;23988:1;23985;23978:12;23929:2;23923:74;;24004:117;24073:24;24091:5;24073:24;;;24066:5;24063:35;24053:2;;24112:1;24109;24102:12;24053:2;24047:74;;24128:115;24196:23;24213:5;24196:23;;;24189:5;24186:34;24176:2;;24234:1;24231;24224:12;24176:2;24170:73;;24250:113;24317:22;24333:5;24317:22;;;24310:5;24307:33;24297:2;;24354:1;24351;24344:12;24297:2;24291:72;

Swarm Source

ipfs://8a05da557aa94a16293d84eedd2dd7395c84fc2274251d664dfe145a26e6f895
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.