Token Annex

DEX  

Overview CRC20

Price
$0.00 @ 0.026518 CRO (+15.08%)
Fully Diluted Market Cap
Total Supply:
1,000,000,000 ANN

Holders:
1,503 addresses
Balance
12,239,878.583837665760293589 ANN

Value
$20,383.77 ( ~324,582.3248 CRO) [1.2240%]
0xbdb223806f63fa0c4e4ed4a06d8dd2bc3816c9e9
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

A Decentralized Marketplace for Lenders and Borrowers, Swap, Auction and NFT marketplace.

Market

Volume (24H):$475.11
Market Capitalization:$0.00
Circulating Supply:0.00 ANN
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ANN

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-07
*/

pragma solidity ^0.5.16;


/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
  // Empty internal constructor, to prevent people from mistakenly deploying
  // an instance of this contract, which should be used via inheritance.
  constructor () internal { }

  function _msgSender() internal view returns (address payable) {
    return msg.sender;
  }

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

// File: @openzeppelin/contracts/access/Ownable.sol
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _authorizedNewOwner;
    event OwnershipTransferAuthorization(address indexed authorizedAddress);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @dev Returns the address of the current authorized new owner.
     */
    function authorizedNewOwner() public view returns (address) {
        return _authorizedNewOwner;
    }
    /**
     * @notice Authorizes the transfer of ownership from _owner to the provided address.
     * NOTE: No transfer will occur unless authorizedAddress calls assumeOwnership( ).
     * This authorization may be removed by another call to this function authorizing
     * the null address.
     *
     * @param authorizedAddress The address authorized to become the new owner.
     */
    function authorizeOwnershipTransfer(address authorizedAddress) external onlyOwner {
        _authorizedNewOwner = authorizedAddress;
        emit OwnershipTransferAuthorization(_authorizedNewOwner);
    }
    /**
     * @notice Transfers ownership of this contract to the _authorizedNewOwner.
     */
    function assumeOwnership() external {
        require(_msgSender() == _authorizedNewOwner, "Ownable: only the authorized new owner can accept ownership");
        emit OwnershipTransferred(_owner, _authorizedNewOwner);
        _owner = _authorizedNewOwner;
        _authorizedNewOwner = address(0);
    }
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     *
     * @param confirmAddress The address wants to give up ownership.
     */
    function renounceOwnership(address confirmAddress) public onlyOwner {
        require(confirmAddress == _owner, "Ownable: confirm address is wrong");
        emit OwnershipTransferred(_owner, address(0));
        _authorizedNewOwner = address(0);
        _owner = address(0);
    }
}

contract ANN is Ownable {
    /// @notice BEP-20 token name for this token
    string public constant name = "Annex";

    /// @notice BEP-20 token symbol for this token
    string public constant symbol = "ANN";

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

    /// @notice Total number of tokens in circulation
    uint public constant totalSupply = 1000000000e18; // 1 billion ANN

    /// @notice Reward eligible epochs
    uint32 public constant eligibleEpochs = 30; // 30 epochs

    /// @notice Allowance amounts on behalf of others
    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 transferPoint for marking balance from given epoch
    struct TransferPoint {
        uint32 epoch;
        uint96 balance;
    }

    /// @notice A epoch config for blocks or ROI per epoch
    struct EpochConfig {
        uint32 epoch;
        uint32 blocks;
        uint32 roi;
    }

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

    /// @notice A record of transfer checkpoints for each account
    mapping (address => mapping (uint32 => TransferPoint)) public transferPoints;

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

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

    /// @notice The claimed amount for each account
    mapping (address => uint96) public claimedAmounts;

    /// @notice Configs for epoch
    EpochConfig[] public epochConfigs;

    /// @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 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 An event thats emitted when a transfer point balance changes
    // event TransferPointChanged(address indexed src, uint srcBalance, address indexed dst, uint dstBalance);

    /// @notice An event thats emitted when epoch block count changes
    event EpochConfigChanged(uint32 indexed previousEpoch, uint32 previousBlocks, uint32 previousROI, uint32 indexed newEpoch, uint32 newBlocks, uint32 newROI);

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

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

    /**
     * @notice Construct a new ANN token
     * @param account The initial account to grant all the tokens
     */
    constructor(address account) public {
        EpochConfig memory newEpochConfig = EpochConfig(
            0,
            24 * 60 * 60 / 6, // 1 day blocks in BSC
            20 // 0.2% ROI increase per epoch
        );
        epochConfigs.push(newEpochConfig);
        emit EpochConfigChanged(0, 0, 0, newEpochConfig.epoch, newEpochConfig.blocks, newEpochConfig.roi);
        balances[account] = uint96(totalSupply);
        _writeTransferPoint(address(0), account, 0, 0, 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`
     * @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, "ANN::approve: amount exceeds 96 bits");
        }

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

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

    /**
     * @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, "ANN::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, "ANN::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "ANN::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), "ANN::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "ANN::delegateBySig: invalid nonce");
        require(now <= expiry, "ANN::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, "ANN::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;
    }

    /**
     * @notice Sets block counter per epoch
     * @param blocks The count of blocks per epoch
     * @param roi The interet of rate increased per epoch
     */
    function setEpochConfig(uint32 blocks, uint32 roi) public onlyOwner {
        require(blocks > 0, "ANN::setEpochConfig: zero blocks");
        require(roi < 10000, "ANN::setEpochConfig: roi exceeds max fraction");
        EpochConfig memory prevEC = epochConfigs[epochConfigs.length - 1];
        EpochConfig memory newEC = EpochConfig(getEpochs(block.number), blocks, roi);
        require(prevEC.blocks != newEC.blocks || prevEC.roi != newEC.roi, "ANN::setEpochConfig: blocks and roi same as before");
        //if (prevEC.epoch == newEC.epoch && epochConfigs.length > 1) {
        if (prevEC.epoch == newEC.epoch) {
            epochConfigs[epochConfigs.length - 1] = newEC;
        } else {
            epochConfigs.push(newEC);
        }
        emit EpochConfigChanged(prevEC.epoch, prevEC.blocks, prevEC.roi, newEC.epoch, newEC.blocks, newEC.roi);
    }

    /**
     * @notice Gets block counter per epoch
     * @return The count of blocks for current epoch
     */
    function getCurrentEpochBlocks() public view returns (uint32 blocks) {
        blocks = epochConfigs[epochConfigs.length - 1].blocks;
    }

    /**
     * @notice Gets rate of interest for current epoch
     * @return The rate of interest for current epoch
     */
    function getCurrentEpochROI() public view returns (uint32 roi) {
        roi = epochConfigs[epochConfigs.length - 1].roi;
    }

    /**
     * @notice Gets current epoch config
     * @return The EpochConfig for current epoch
     */
    function getCurrentEpochConfig() public view returns (uint32 epoch, uint32 blocks, uint32 roi) {
        EpochConfig memory ec = epochConfigs[epochConfigs.length - 1];
        epoch = ec.epoch;
        blocks = ec.blocks;
        roi = ec.roi;
    }

    /**
     * @notice Gets epoch config at given epoch index
     * @param forEpoch epoch
     * @return (index of config,
                config at epoch)
     */
    function getEpochConfig(uint32 forEpoch) public view returns (uint32 index, uint32 epoch, uint32 blocks, uint32 roi) {
        index = uint32(epochConfigs.length - 1);
        // solhint-disable-next-line no-inline-assembly
        for (; index > 0; index--) {
            if (forEpoch >= epochConfigs[index].epoch) {
                break;
            }
        }
        EpochConfig memory ec = epochConfigs[index];
        epoch = ec.epoch;
        blocks = ec.blocks;
        roi = ec.roi;
    }

    /**
     * @notice Gets epoch index at given block number
     * @param blockNumber The number of blocks
     * @return epoch index
     */
    function getEpochs(uint blockNumber) public view returns (uint32) {
        uint96 blocks = 0;
        uint96 epoch = 0;
        uint blockNum = blockNumber;
        for (uint32 i = 0; i < epochConfigs.length; i++) {
            uint96 deltaBlocks = (uint96(epochConfigs[i].epoch) - epoch) * blocks;
            if (blockNum < deltaBlocks) {
                break;
            }
            blockNum = blockNum - deltaBlocks;
            epoch = epochConfigs[i].epoch;
            blocks = epochConfigs[i].blocks;
        }

        if (blocks == 0) {
            blocks = getCurrentEpochBlocks();
        }
        epoch = epoch + uint96(blockNum / blocks);
        if (epoch >= 2**32) {
            epoch = 2**32 - 1;
        }
        return uint32(epoch);
    }

    /**
     * @notice Gets the current holding rewart amount for `account`
     * @param account The address to get holding reward amount
     * @return The number of current holding reward for `account`
     */
    function getHoldingReward(address account) public view returns (uint96) {
        // Check if account is holding more than eligible delay
        uint32 nTransferPoint = numTransferPoints[account];

        if (nTransferPoint == 0) {
            return 0;
        }

        uint32 lastEpoch = getEpochs(block.number);
        if (lastEpoch == 0) {
            return 0;
        }

        lastEpoch = lastEpoch - 1;
        if (lastEpoch < eligibleEpochs) {
            return 0;
        } else {
            uint32 lastEligibleEpoch = lastEpoch - eligibleEpochs;

            // Next check implicit zero balance
            if (transferPoints[account][0].epoch > lastEligibleEpoch) {
                return 0;
            }

            // First check most recent balance
            if (transferPoints[account][nTransferPoint - 1].epoch <= lastEligibleEpoch) {
                nTransferPoint = nTransferPoint - 1;
            } else {
                uint32 upper = nTransferPoint - 1;
                nTransferPoint = 0;
                while (upper > nTransferPoint) {
                    uint32 center = upper - (upper - nTransferPoint) / 2; // ceil, avoiding overflow
                    TransferPoint memory tp = transferPoints[account][center];
                    if (tp.epoch == lastEligibleEpoch) {
                        nTransferPoint = center;
                        break;
                    } if (tp.epoch < lastEligibleEpoch) {
                        nTransferPoint = center;
                    } else {
                        upper = center - 1;
                    }
                }
            }
        }

        // Calculate total rewards amount
        uint256 reward = 0;
        for (uint32 iTP = 0; iTP <= nTransferPoint; iTP++) {
            TransferPoint memory tp = transferPoints[account][iTP];
            (uint32 iEC,,,uint32 roi) = getEpochConfig(tp.epoch);
            uint32 startEpoch = tp.epoch;
            for (; iEC < epochConfigs.length; iEC++) {
                uint32 epoch = lastEpoch;
                bool tookNextTP = false;
                if (iEC < (epochConfigs.length - 1) && epoch > epochConfigs[iEC + 1].epoch) {
                    epoch = epochConfigs[iEC + 1].epoch;
                }
                if (iTP < nTransferPoint && epoch > transferPoints[account][iTP + 1].epoch) {
                    epoch = transferPoints[account][iTP + 1].epoch;
                    tookNextTP = true;
                }
                reward = reward + (uint256(tp.balance) * roi * sub32(epoch, startEpoch, "ANN::getHoldingReward: invalid epochs"));
                if (tookNextTP) {
                    break;
                }
                startEpoch = epoch;
                if (iEC < (epochConfigs.length - 1)) {
                    roi = epochConfigs[iEC + 1].roi;
                }
            }
        }
        uint96 amount = safe96(reward / 10000, "ANN::getHoldingReward: reward exceeds 96 bits");

        // Exclude already claimed amount
        if (claimedAmounts[account] > 0) {
            amount = sub96(amount, claimedAmounts[account], "ANN::getHoldingReward: invalid claimed amount");
        }

        return amount;
    }

    /**
     * @notice Receive the current holding rewart amount to msg.sender
     */
    function claimReward() public  {
        uint96 holdingReward = getHoldingReward(msg.sender);
        if (balances[address(this)] < holdingReward) {
            holdingReward = balances[address(this)];
        }
        claimedAmounts[msg.sender] = add96(claimedAmounts[msg.sender], holdingReward, "ANN::claimReward: invalid claimed amount");
        _transferTokens(address(this), msg.sender, holdingReward);
    }

    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), "ANN::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "ANN::_transferTokens: cannot transfer to the zero address");

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

        _moveDelegates(delegates[src], delegates[dst], amount);
        if (amount > 0) {
            _writeTransferPoint(src, dst, numTransferPoints[dst], balances[src], balances[dst]);
        }
    }

    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, "ANN::_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, "ANN::_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, "ANN::_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 _writeTransferPoint(address src, address dst, uint32 nDstPoint, uint96 srcBalance, uint96 dstBalance) internal {
        uint32 epoch = getEpochs(block.number);

        if (src != address(this)) {
            // Revoke sender in reward eligible list
            for (uint32 i = 0; i < numTransferPoints[src]; i++) {
                delete transferPoints[src][i];
            }

            // Remove claim amount
            claimedAmounts[src] = 0;

            // delete transferPoints[src];
            if (srcBalance > 0) {
                transferPoints[src][0] = TransferPoint(epoch, srcBalance);
                numTransferPoints[src] = 1;
            } else {
                numTransferPoints[src] = 0;
            }
        }

        if (dst != address(this)) {
            // Add recipient in reward eligible list
            if (nDstPoint > 0 && transferPoints[dst][nDstPoint - 1].epoch >= epoch) {
                transferPoints[dst][nDstPoint - 1].balance = dstBalance;
            } else {
                transferPoints[dst][nDstPoint] = TransferPoint(epoch, dstBalance);
                numTransferPoints[dst] = nDstPoint + 1;
            }
        }

        // emit TransferPointChanged(src, balances[src], dst, balances[dst]);
    }

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

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

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

    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;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"payable":false,"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":"uint32","name":"previousEpoch","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"previousBlocks","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"previousROI","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"newEpoch","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"newBlocks","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"newROI","type":"uint32"}],"name":"EpochConfigChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authorizedAddress","type":"address"}],"name":"OwnershipTransferAuthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"assumeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"authorizedAddress","type":"address"}],"name":"authorizeOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"authorizedNewOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"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"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedAmounts","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"eligibleEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochConfigs","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentEpochBlocks","outputs":[{"internalType":"uint32","name":"blocks","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentEpochConfig","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentEpochROI","outputs":[{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"forEpoch","type":"uint32"}],"name":"getEpochConfig","outputs":[{"internalType":"uint32","name":"index","type":"uint32"},{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHoldingReward","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numTransferPoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"confirmAddress","type":"address"}],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"blocks","type":"uint32"},{"internalType":"uint32","name":"roi","type":"uint32"}],"name":"setEpochConfig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"transferPoints","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint96","name":"balance","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620036b1380380620036b1833981810160405260208110156200003757600080fd5b505160006200004e6001600160e01b036200023d16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000a26200068e565b506040805160608082018352600080835261384060208085019182526014858701908152600a805460018101825590855286517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910180549451925163ffffffff90811668010000000000000000810263ffffffff60401b19958316640100000000810263ffffffff60201b199690941663ffffffff19909916891795909516929092179490941617905587518581529283018590528288015293810193909352935192939290917fc01a508838d7b848b9827d7aefede67746ea1738597aa80f453c99f537ab6c49919081900360800190a36001600160a01b038216600090815260036020526040812080546001600160601b0319166b033b2e3c9fd0803ce8000000908117909155620001e891908490829081906001600160e01b036200024116565b604080516b033b2e3c9fd0803ce8000000815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050620006ae565b3390565b600062000257436001600160e01b036200051f16565b90506001600160a01b0386163014620003c75760005b6001600160a01b03871660009081526008602052604090205463ffffffff9081169082161015620002d8576001600160a01b038716600090815260066020908152604080832063ffffffff85168452909152902080546001600160801b03191690556001016200026d565b506001600160a01b038616600090815260096020526040902080546001600160601b03191690556001600160601b03831615620003a35760408051808201825263ffffffff80841682526001600160601b0380871660208085019182526001600160a01b038c16600081815260068352878120818052835287812096518754945190951664010000000002600160201b600160801b03199590961663ffffffff19948516179490941694909417909455918152600890925291902080549091166001179055620003c7565b6001600160a01b0386166000908152600860205260409020805463ffffffff191690555b6001600160a01b0385163014620005175760008463ffffffff161180156200042157506001600160a01b038516600090815260066020908152604080832063ffffffff600019890181168552925290912054828216911610155b156200047d576001600160a01b0385166000908152600660209081526040808320600019880163ffffffff16845290915290208054600160201b600160801b0319166401000000006001600160601b0385160217905562000517565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600683528781208c87168252835287812096518754945190951664010000000002600160201b600160801b031995871663ffffffff19958616179590951694909417909555938252600890935292909220805460018801909316929091169190911790555b505050505050565b6000808083815b600a5463ffffffff82161015620005ee5760008484600a8463ffffffff16815481106200054f57fe5b60009182526020909120015463ffffffff16030290506001600160601b0381168310156200057e5750620005ee565b806001600160601b031683039250600a8263ffffffff1681548110620005a057fe5b600091825260209091200154600a805463ffffffff928316965090918416908110620005c857fe5b600091825260209091200154640100000000900463ffffffff1694505060010162000526565b506001600160601b0383166200061a57620006116001600160e01b036200065816565b63ffffffff1692505b826001600160601b031681816200062d57fe5b0482019150640100000000826001600160601b031610620006505763ffffffff91505b509392505050565b600a80546000919060001981019081106200066f57fe5b600091825260209091200154640100000000900463ffffffff16919050565b604080516060810182526000808252602082018190529181019190915290565b612ff380620006be6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806387f4427e11610130578063b88a802f116100b8578063dd62ed3e1161007c578063dd62ed3e14610751578063e7a324dc1461077f578063f1127ed814610787578063f2a60b61146107b9578063f665a206146107c157610227565b8063b88a802f1461067b578063c3cda52014610683578063c717d7be146106ca578063cc2740b71461071e578063cddfea471461072657610227565b806391f4cfba116100ff57806391f4cfba1461061157806395d89b4114610619578063a2c1cae214610621578063a9059cbb14610629578063b4b5ea571461065557610227565b806387f4427e146105785780638b028b7e1461059e5780638c4b553c146105c45780638da5cb5b1461060957610227565b806338bf3cfa116101b35780636fcfff45116101825780636fcfff451461049857806370a08231146104be57806371417b32146104e4578063782d6fe1146105265780637ecebe001461055257610227565b806338bf3cfa146104005780635481eed314610428578063587cde1e1461044c5780635c19a95c1461047257610227565b806320606b70116101fa57806320606b701461034257806323b872dd1461034a57806326e6760b14610380578063313ce5671461038857806332e2a55d146103a657610227565b806306fdde031461022c578063095ea7b3146102a95780630b7cbac7146102e957806318160ddd14610328575b600080fd5b6102346107de565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026e578181015183820152602001610256565b50505050905090810190601f16801561029b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360408110156102bf57600080fd5b506001600160a01b0381351690602001356107ff565b604080519115158252519081900360200190f35b61030f600480360360208110156102ff57600080fd5b50356001600160a01b03166108bd565b6040805163ffffffff9092168252519081900360200190f35b6103306108d5565b60408051918252519081900360200190f35b6103306108e5565b6102d56004803603606081101561036057600080fd5b506001600160a01b03813581169160208101359091169060400135610900565b61030f610a45565b610390610a79565b6040805160ff9092168252519081900360200190f35b6103d8600480360360408110156103bc57600080fd5b5080356001600160a01b0316906020013563ffffffff16610a7e565b6040805163ffffffff90931683526001600160601b0390911660208301528051918290030190f35b6104266004803603602081101561041657600080fd5b50356001600160a01b0316610ab3565b005b610430610bca565b604080516001600160a01b039092168252519081900360200190f35b6104306004803603602081101561046257600080fd5b50356001600160a01b0316610bd9565b6104266004803603602081101561048857600080fd5b50356001600160a01b0316610bf4565b61030f600480360360208110156104ae57600080fd5b50356001600160a01b0316610c01565b610330600480360360208110156104d457600080fd5b50356001600160a01b0316610c19565b61050a600480360360208110156104fa57600080fd5b50356001600160a01b0316610c41565b604080516001600160601b039092168252519081900360200190f35b61050a6004803603604081101561053c57600080fd5b506001600160a01b038135169060200135610c5c565b6103306004803603602081101561056857600080fd5b50356001600160a01b0316610e89565b6104266004803603602081101561058e57600080fd5b50356001600160a01b0316610e9b565b61050a600480360360208110156105b457600080fd5b50356001600160a01b0316610f5f565b6105e1600480360360208110156105da57600080fd5b5035611425565b6040805163ffffffff9485168152928416602084015292168183015290519081900360600190f35b61043061145d565b61030f61146c565b610234611471565b610426611490565b6102d56004803603604081101561063f57600080fd5b506001600160a01b03813516906020013561154d565b61050a6004803603602081101561066b57600080fd5b50356001600160a01b0316611589565b6104266115fa565b610426600480360360c081101561069957600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a001356116c2565b6106ed600480360360208110156106e057600080fd5b503563ffffffff16611968565b6040805163ffffffff9586168152938516602085015291841683830152909216606082015290519081900360800190f35b6105e1611a2e565b6104266004803603604081101561073c57600080fd5b5063ffffffff81358116916020013516611a9c565b6103306004803603604081101561076757600080fd5b506001600160a01b0381358116916020013516611e4b565b610330611e7f565b6103d86004803603604081101561079d57600080fd5b5080356001600160a01b0316906020013563ffffffff16611e9a565b61030f611ecf565b61030f600480360360208110156107d757600080fd5b5035611f03565b60405180604001604052806005815260200164082dcdccaf60db1b81525081565b600080600019831415610815575060001961083a565b61083783604051806060016040528060248152602001612c7460249139612025565b90505b3360008181526002602090815260408083206001600160a01b0389168085529083529281902080546001600160601b0319166001600160601b038716908117909155815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a360019150505b92915050565b60086020526000908152604090205463ffffffff1681565b6b033b2e3c9fd0803ce800000081565b604051806043612c9882396043019050604051809103902081565b6001600160a01b03831660009081526002602090815260408083203380855290835281842054825160608101909352602480845291936001600160601b039091169285926109589288929190612c7490830139612025565b9050866001600160a01b0316836001600160a01b03161415801561098557506001600160601b0382811614155b15610a2d5760006109af83836040518060600160405280603c8152602001612d01603c91396120bf565b6001600160a01b038981166000818152600260209081526040808320948a168084529482529182902080546001600160601b0319166001600160601b03871690811790915582519081529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b610a3887878361212c565b5060019695505050505050565b600a8054600091906000198101908110610a5b57fe5b600091825260209091200154600160201b900463ffffffff16919050565b601281565b600660209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b610abb612374565b6001600160a01b0316610acc61145d565b6001600160a01b031614610b27576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000546001600160a01b03828116911614610b735760405162461bcd60e51b8152600401808060200182810382526021815260200180612bd26021913960400191505060405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600180546001600160a01b0319908116909155600080549091169055565b6001546001600160a01b031690565b6004602052600090815260409020546001600160a01b031681565b610bfe3382612378565b50565b60076020526000908152604090205463ffffffff1681565b6001600160a01b0381166000908152600360205260409020546001600160601b03165b919050565b6009602052600090815260409020546001600160601b031681565b6000438210610c9c5760405162461bcd60e51b8152600401808060200182810382526026815260200180612f6c6026913960400191505060405180910390fd5b6001600160a01b03831660009081526007602052604090205463ffffffff1680610cca5760009150506108b7565b6001600160a01b038416600090815260056020908152604080832063ffffffff600019860181168552925290912054168310610d46576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b031690506108b7565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff16831015610d815760009150506108b7565b600060001982015b8163ffffffff168163ffffffff161115610e4457600282820363ffffffff16048103610db3612b3a565b506001600160a01b038716600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415610e1f576020015194506108b79350505050565b805163ffffffff16871115610e3657819350610e3d565b6001820392505b5050610d89565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b600b6020526000908152604090205481565b610ea3612374565b6001600160a01b0316610eb461145d565b6001600160a01b031614610f0f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383811691909117918290556040519116907fb58bcc286020502f4931905baafed22acc969c092ed724234c73361efc68839090600090a250565b6001600160a01b03811660009081526008602052604081205463ffffffff1680610f8d576000915050610c3c565b6000610f9843611f03565b905063ffffffff8116610fb057600092505050610c3c565b60001901601e63ffffffff82161015610fce57600092505050610c3c565b6001600160a01b0384166000908152600660209081526040808320838052909152902054601d1982019063ffffffff808316911611156110145760009350505050610c3c565b6001600160a01b038516600090815260066020908152604080832063ffffffff60001988018116855292529091205482821691161161105857600183039250611119565b600092600019015b8363ffffffff168163ffffffff16111561111757600284820363ffffffff1604810361108a612b3a565b506001600160a01b038716600090815260066020908152604080832063ffffffff858116855290835292819020815180830190925254808416808352600160201b9091046001600160601b03169282019290925291851614156110ef57509350611117565b805163ffffffff8086169116101561110957819550611110565b6001820392505b5050611060565b505b506000805b8363ffffffff168163ffffffff161161136b57611139612b3a565b506001600160a01b038616600090815260066020908152604080832063ffffffff8581168552908352818420825180840190935254908116808352600160201b9091046001600160601b0316928201929092529190819061119990611968565b8651939550935050505b600a5463ffffffff8416101561135b57600a5487906000906000190163ffffffff86161080156111fd5750600a8560010163ffffffff16815481106111e457fe5b60009182526020909120015463ffffffff908116908316115b1561122d57600a8560010163ffffffff168154811061121857fe5b60009182526020909120015463ffffffff1691505b8963ffffffff168763ffffffff1610801561127857506001600160a01b038c16600090815260066020908152604080832063ffffffff60018c01811685529252909120548116908316115b156112b25750506001600160a01b038a16600090815260066020908152604080832063ffffffff6001808b01821686529190935292205416905b6112d58284604051806060016040528060258152602001612b7260259139612402565b63ffffffff168463ffffffff1687602001516001600160601b0316020288019750801561130357505061135b565b600a5491925082916000190163ffffffff8616101561134e57600a8560010163ffffffff168154811061133257fe5b600091825260209091200154600160401b900463ffffffff1693505b50506001909201916111a3565b50506001909201915061111e9050565b50600061139461271083046040518060600160405280602d8152602001612bf3602d9139612025565b6001600160a01b0387166000908152600960205260409020549091506001600160601b03161561141c576114198160096000896001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160601b03166040518060600160405280602d8152602001612f92602d91396120bf565b90505b95945050505050565b600a818154811061143257fe5b60009182526020909120015463ffffffff8082169250600160201b8204811691600160401b90041683565b6000546001600160a01b031690565b601e81565b6040518060400160405280600381526020016220a72760e91b81525081565b6001546001600160a01b03166114a4612374565b6001600160a01b0316146114e95760405162461bcd60e51b815260040180806020018281038252603b815260200180612ebe603b913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60008061157283604051806060016040528060258152602001612c2060259139612025565b905061157f33858361212c565b5060019392505050565b6001600160a01b03811660009081526007602052604081205463ffffffff16806115b45760006115f3565b6001600160a01b0383166000908152600560209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b9392505050565b600061160533610f5f565b306000908152600360205260409020549091506001600160601b03808316911610156116465750306000908152600360205260409020546001600160601b03165b33600090815260096020908152604091829020548251606081019093526028808452611688936001600160601b039092169285929190612e9690830139612461565b33600081815260096020526040902080546001600160601b0319166001600160601b039390931692909217909155610bfe9030908361212c565b60006040518080612c9860439139604080519182900360430182208282019091526005825264082dcdccaf60db1b60209092019190915290507f391e0257b4d543b15773e628a3286600de26a9f641b419eeda8078cfc33bb10b6117246124cb565b3060405160200180858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200194505050505060405160208183030381529060405280519060200120905060006040518080612ef9603a91396040805191829003603a0182206020808401919091526001600160a01b038c1683830152606083018b905260808084018b90528251808503909101815260a08401835280519082012061190160f01b60c085015260c2840187905260e2808501829052835180860390910181526101028501808552815191840191909120600091829052610122860180865281905260ff8c1661014287015261016286018b905261018286018a9052935191965092945091926001926101a28083019392601f198301929081900390910190855afa158015611862573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118b45760405162461bcd60e51b8152600401808060200182810382526025815260200180612e446025913960400191505060405180910390fd5b6001600160a01b0381166000908152600b6020526040902080546001810190915589146119125760405162461bcd60e51b8152600401808060200182810382526021815260200180612df06021913960400191505060405180910390fd5b874211156119515760405162461bcd60e51b8152600401808060200182810382526025815260200180612d726025913960400191505060405180910390fd5b61195b818b612378565b505050505b505050505050565b600a5460001901600080805b63ffffffff8416156119c057600a8463ffffffff168154811061199357fe5b60009182526020909120015463ffffffff908116908616106119b4576119c0565b60001990930192611974565b6119c8612b51565b600a8563ffffffff16815481106119db57fe5b600091825260209182902060408051606081018252919092015463ffffffff808216808452600160201b83048216958401869052600160401b909204169190920181905296989097509095945092505050565b6000806000611a3b612b51565b600a80546000198101908110611a4d57fe5b600091825260209182902060408051606081018252929091015463ffffffff808216808552600160201b83048216958501869052600160401b9092041692909101829052969195509350915050565b611aa4612374565b6001600160a01b0316611ab561145d565b6001600160a01b031614611b10576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008263ffffffff1611611b6b576040805162461bcd60e51b815260206004820181905260248201527f414e4e3a3a73657445706f6368436f6e6669673a207a65726f20626c6f636b73604482015290519081900360640190fd5b6127108163ffffffff1610611bb15760405162461bcd60e51b815260040180806020018281038252602d815260200180612e69602d913960400191505060405180910390fd5b611bb9612b51565b600a80546000198101908110611bcb57fe5b600091825260209182902060408051606081018252919092015463ffffffff8082168352600160201b8204811694830194909452600160401b9004909216908201529050611c17612b51565b6040518060600160405280611c2b43611f03565b63ffffffff1681526020018563ffffffff1681526020018463ffffffff168152509050806020015163ffffffff16826020015163ffffffff16141580611c855750806040015163ffffffff16826040015163ffffffff1614155b611cc05760405162461bcd60e51b8152600401808060200182810382526032815260200180612d976032913960400191505060405180910390fd5b8051825163ffffffff90811691161415611d4d57600a80548291906000198101908110611ce957fe5b60009182526020918290208351910180549284015160409094015163ffffffff1990931663ffffffff9283161767ffffffff000000001916600160201b948316949094029390931763ffffffff60401b1916600160401b9190921602179055611dd7565b600a805460018101825560009190915281517fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910180546020840151604085015163ffffffff1990921663ffffffff9485161767ffffffff000000001916600160201b918516919091021763ffffffff60401b1916600160401b93909116929092029190911790555b805182516020808501516040808701518387015182880151835163ffffffff958616815292851695830195909552831681830152928216606084015251938116939216917fc01a508838d7b848b9827d7aefede67746ea1738597aa80f453c99f537ab6c499181900360800190a350505050565b6001600160a01b0391821660009081526002602090815260408083209390941682529190915220546001600160601b031690565b60405180603a612ef98239603a019050604051809103902081565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b600a8054600091906000198101908110611ee557fe5b600091825260209091200154600160401b900463ffffffff16919050565b6000808083815b600a5463ffffffff82161015611fca5760008484600a8463ffffffff1681548110611f3157fe5b60009182526020909120015463ffffffff16030290506001600160601b038116831015611f5e5750611fca565b806001600160601b031683039250600a8263ffffffff1681548110611f7f57fe5b600091825260209091200154600a805463ffffffff928316965090918416908110611fa657fe5b600091825260209091200154600160201b900463ffffffff16945050600101611f0a565b506001600160601b038316611fea57611fe1610a45565b63ffffffff1692505b826001600160601b03168181611ffc57fe5b0482019150600160201b826001600160601b03161061201d5763ffffffff91505b509392505050565b600081600160601b84106120b75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561207c578181015183820152602001612064565b50505050905090810190601f1680156120a95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836001600160601b0316836001600160601b0316111582906121245760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b505050900390565b6001600160a01b0383166121715760405162461bcd60e51b815260040180806020018281038252603b815260200180612b97603b913960400191505060405180910390fd5b6001600160a01b0382166121b65760405162461bcd60e51b8152600401808060200182810382526039815260200180612f336039913960400191505060405180910390fd5b6001600160a01b038316600090815260036020908152604091829020548251606081019093526035808452612201936001600160601b039092169285929190612d3d908301396120bf565b6001600160a01b03848116600090815260036020908152604080832080546001600160601b0319166001600160601b0396871617905592861682529082902054825160608101909352602f8084526122699491909116928592909190612c4590830139612461565b6001600160a01b0383811660008181526003602090815260409182902080546001600160601b0319166001600160601b039687161790558151948616855290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a36001600160a01b0380841660009081526004602052604080822054858416835291205461230c929182169116836124cf565b6001600160601b0381161561236f576001600160a01b03808316600081815260086020908152604080832054948816835260039091528082205492825290205461236f928692869263ffffffff909216916001600160601b039182169116612661565b505050565b3390565b6001600160a01b03808316600081815260046020818152604080842080546003845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46123fc8284836124cf565b50505050565b60008363ffffffff168363ffffffff16111582906121245760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b6000838301826001600160601b0380871690831610156124c25760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b50949350505050565b4690565b816001600160a01b0316836001600160a01b0316141580156124fa57506000816001600160601b0316115b1561236f576001600160a01b038316156125b2576001600160a01b03831660009081526007602052604081205463ffffffff16908161253a576000612579565b6001600160a01b0385166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006125a08285604051806060016040528060278152602001612dc9602791396120bf565b90506125ae86848484612930565b5050505b6001600160a01b0382161561236f576001600160a01b03821660009081526007602052604081205463ffffffff1690816125ed57600061262c565b6001600160a01b0384166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006126538285604051806060016040528060268152602001612cdb60269139612461565b905061196085848484612930565b600061266c43611f03565b90506001600160a01b03861630146127e05760005b6001600160a01b03871660009081526008602052604090205463ffffffff90811690821610156126f3576001600160a01b038716600090815260066020908152604080832063ffffffff85168452909152902080546fffffffffffffffffffffffffffffffff19169055600101612681565b506001600160a01b038616600090815260096020526040902080546001600160601b03191690556001600160601b038316156127bc5760408051808201825263ffffffff80841682526001600160601b0380871660208085019182526001600160a01b038c166000818152600683528781208180528352878120965187549451909516600160201b02640100000000600160801b03199590961663ffffffff199485161794909416949094179094559181526008909252919020805490911660011790556127e0565b6001600160a01b0386166000908152600860205260409020805463ffffffff191690555b6001600160a01b03851630146119605760008463ffffffff1611801561283857506001600160a01b038516600090815260066020908152604080832063ffffffff600019890181168552925290912054828216911610155b15612892576001600160a01b0385166000908152600660209081526040808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b03851602179055611960565b60408051808201825263ffffffff92831681526001600160601b0393841660208083019182526001600160a01b0398909816600081815260068a5284812089871682528a5284812093518454935163ffffffff1994851691881691909117640100000000600160801b031916600160201b91909816029690961790925590845260089096529091208054909416600190930116919091179091555050565b600061295443604051806060016040528060338152602001612e1160339139612ae5565b905060008463ffffffff1611801561299d57506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b156129f7576001600160a01b0385166000908152600560209081526040808320600019880163ffffffff16845290915290208054640100000000600160801b031916600160201b6001600160601b03851602179055612a91565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600583528781208c871682528352878120965187549451909516600160201b02640100000000600160801b031995871663ffffffff19958616179590951694909417909555938252600790935292909220805460018801909316929091169190911790555b604080516001600160601b0380861682528416602082015281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600081600160201b84106120b75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561207c578181015183820152602001612064565b604080518082019091526000808252602082015290565b60408051606081018252600080825260208201819052918101919091529056fe414e4e3a3a676574486f6c64696e675265776172643a20696e76616c69642065706f636873414e4e3a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734f776e61626c653a20636f6e6669726d20616464726573732069732077726f6e67414e4e3a3a676574486f6c64696e675265776172643a2072657761726420657863656564732039362062697473414e4e3a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473414e4e3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773414e4e3a3a617070726f76653a20616d6f756e7420657863656564732039362062697473454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429414e4e3a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773414e4e3a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365414e4e3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365414e4e3a3a64656c656761746542795369673a207369676e61747572652065787069726564414e4e3a3a73657445706f6368436f6e6669673a20626c6f636b7320616e6420726f692073616d65206173206265666f7265414e4e3a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773414e4e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365414e4e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473414e4e3a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265414e4e3a3a73657445706f6368436f6e6669673a20726f692065786365656473206d6178206672616374696f6e414e4e3a3a636c61696d5265776172643a20696e76616c696420636c61696d656420616d6f756e744f776e61626c653a206f6e6c792074686520617574686f72697a6564206e6577206f776e65722063616e20616363657074206f776e65727368697044656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929414e4e3a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f2061646472657373414e4e3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e6564414e4e3a3a676574486f6c64696e675265776172643a20696e76616c696420636c61696d656420616d6f756e74a265627a7a72315820e5d6413f6b6c25cfc8fa62f5ca311a31c2a7d724c6020ad2ecbcdb590ba7493c64736f6c6343000511003200000000000000000000000050086caf6a8b4aef941d6512ad0d2a25c48469a9

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

00000000000000000000000050086caf6a8b4aef941d6512ad0d2a25c48469a9

-----Decoded View---------------
Arg [0] : account (address): 0x50086caf6a8b4aef941d6512ad0d2a25c48469a9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000050086caf6a8b4aef941d6512ad0d2a25c48469a9


Deployed ByteCode Sourcemap

4476:23885:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4476:23885:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4557:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4557:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9730:418;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9730:418:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6357:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6357:52:0;-1:-1:-1;;;;;6357:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;4854:48;;;:::i;:::-;;;;;;;;;;;;;;;;6670:122;;;:::i;11271:671::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11271:671:0;;;;;;;;;;;;;;;;;:::i;16665:141::-;;;:::i;4755:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6091:76;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6091:76:0;;-1:-1:-1;;;;;6091:76:0;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;6091:76:0;;;;;;;;;;;;;;;;4183:286;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4183:286:0;-1:-1:-1;;;;;4183:286:0;;:::i;:::-;;2626:105;;;:::i;:::-;;;;-1:-1:-1;;;;;2626:105:0;;;;;;;;;;;;;;5338:45;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5338:45:0;-1:-1:-1;;;;;5338:45:0;;:::i;12090:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12090:103:0;-1:-1:-1;;;;;12090:103:0;;:::i;6236:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6236:49:0;-1:-1:-1;;;;;6236:49:0;;:::i;10351:108::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10351:108:0;-1:-1:-1;;;;;10351:108:0;;:::i;6471:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6471:49:0;-1:-1:-1;;;;;6471:49:0;;:::i;:::-;;;;-1:-1:-1;;;;;6471:49:0;;;;;;;;;;;;;;14268:1217;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14268:1217:0;;;;;;;;:::i;7084:39::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7084:39:0;-1:-1:-1;;;;;7084:39:0;;:::i;3135:207::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3135:207:0;-1:-1:-1;;;;;3135:207:0;;:::i;19304:3276::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19304:3276:0;-1:-1:-1;;;;;19304:3276:0;;:::i;6564:33::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6564:33:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2242:79;;;:::i;4968:42::-;;;:::i;4655:37::-;;;:::i;3447:309::-;;;:::i;10723:238::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10723:238:0;;;;;;;;:::i;13615:222::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13615:222:0;-1:-1:-1;;;;;13615:222:0;;:::i;22678:422::-;;;:::i;12627:787::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;12627:787:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17623:511::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17623:511:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17190:254;;;:::i;15667:873::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15667:873:0;;;;;;;;;;;:::i;9210:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9210:136:0;;;;;;;;;;:::i;6886:117::-;;;:::i;5945:70::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5945:70:0;;-1:-1:-1;;;;;5945:70:0;;;;;;;;:::i;16943:129::-;;;:::i;18291:787::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18291:787:0;;:::i;4557:37::-;;;;;;;;;;;;;;-1:-1:-1;;;4557:37:0;;;;:::o;9730:418::-;9798:4;9815:13;-1:-1:-1;;9843:9:0;:21;9839:172;;;-1:-1:-1;;;9839:172:0;;;9942:57;9949:9;9942:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;9933:66;;9839:172;10034:10;10023:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;10023:31:0;;;;;;;;;;;;:40;;-1:-1:-1;;;;;;10023:40:0;-1:-1:-1;;;;;10023:40:0;;;;;;;;10081:37;;;;;;;10023:31;;10034:10;10081:37;;;;;;;;;;;10136:4;10129:11;;;9730:418;;;;;:::o;6357:52::-;;;;;;;;;;;;;;;:::o;4854:48::-;4889:13;4854:48;:::o;6670:122::-;6712:80;;;;;;;;;;;;;;;;;;6670:122;:::o;11271:671::-;-1:-1:-1;;;;;11436:15:0;;11354:4;11436:15;;;:10;:15;;;;;;;;11389:10;11436:24;;;;;;;;;;11487:57;;;;;;;;;;;;11389:10;;-1:-1:-1;;;;;11436:24:0;;;;11354:4;;11487:57;;11494:9;;11487:57;;;;;;;:6;:57::i;:::-;11471:73;;11572:3;-1:-1:-1;;;;;11561:14:0;:7;-1:-1:-1;;;;;11561:14:0;;;:48;;;;-1:-1:-1;;;;;;11579:30:0;;;;;11561:48;11557:310;;;11626:19;11648:95;11654:16;11672:6;11648:95;;;;;;;;;;;;;;;;;:5;:95::i;:::-;-1:-1:-1;;;;;11758:15:0;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;:39;;-1:-1:-1;;;;;;11758:39:0;-1:-1:-1;;;;;11758:39:0;;;;;;;;11819:36;;;;;;;11758:39;;-1:-1:-1;11758:24:0;;:15;;11819:36;;;;;;;;;11557:310;;11879:33;11895:3;11900;11905:6;11879:15;:33::i;:::-;-1:-1:-1;11930:4:0;;11271:671;-1:-1:-1;;;;;;11271:671:0:o;16665:141::-;16754:12;16767:19;;16719:13;;16754:12;-1:-1:-1;;16767:23:0;;;16754:37;;;;;;;;;;;;;;;:44;-1:-1:-1;;;16754:44:0;;;;;;-1:-1:-1;16665:141:0:o;4755:35::-;4788:2;4755:35;:::o;6091:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6091:76:0;;-1:-1:-1;;;;;6091:76:0;;:::o;4183:286::-;2463:12;:10;:12::i;:::-;-1:-1:-1;;;;;2452:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2452:23:0;;2444:68;;;;;-1:-1:-1;;;2444:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:6;;-1:-1:-1;;;;;4270:24:0;;;4288:6;;4270:24;4262:70;;;;-1:-1:-1;;;4262:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4385:1;4369:6;;4348:40;;-1:-1:-1;;;;;4369:6:0;;;;4348:40;;4385:1;;4348:40;-1:-1:-1;4399:19:0;:32;;-1:-1:-1;;;;;;4399:32:0;;;;;;4429:1;4442:19;;;;;;;4183:286::o;2626:105::-;2704:19;;-1:-1:-1;;;;;2704:19:0;2626:105;:::o;5338:45::-;;;;;;;;;;;;-1:-1:-1;;;;;5338:45:0;;:::o;12090:103::-;12153:32;12163:10;12175:9;12153;:32::i;:::-;12090:103;:::o;6236:49::-;;;;;;;;;;;;;;;:::o;10351:108::-;-1:-1:-1;;;;;10434:17:0;;10410:4;10434:17;;;:8;:17;;;;;;-1:-1:-1;;;;;10434:17:0;10351:108;;;;:::o;6471:49::-;;;;;;;;;;;;-1:-1:-1;;;;;6471:49:0;;:::o;14268:1217::-;14347:6;14388:12;14374:11;:26;14366:77;;;;-1:-1:-1;;;14366:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14478:23:0;;14456:19;14478:23;;;:14;:23;;;;;;;;14516:17;14512:58;;14557:1;14550:8;;;;;14512:58;-1:-1:-1;;;;;14630:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;14651:16:0;;14630:38;;;;;;;;;:48;;:63;-1:-1:-1;14626:147:0;;-1:-1:-1;;;;;14717:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;14738:16:0;;;;14717:38;;;;;;;;:44;-1:-1:-1;;;14717:44:0;;-1:-1:-1;;;;;14717:44:0;;-1:-1:-1;14710:51:0;;14626:147;-1:-1:-1;;;;;14834:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;14830:88:0;;;14905:1;14898:8;;;;;14830:88;14930:12;-1:-1:-1;;14972:16:0;;14999:428;15014:5;15006:13;;:5;:13;;;14999:428;;;15078:1;15061:13;;;15060:19;;;15052:27;;15121:20;;:::i;:::-;-1:-1:-1;;;;;;15144:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;15121:51;;;;;;;;;;;;;;;-1:-1:-1;;;15121:51:0;;;-1:-1:-1;;;;;15121:51:0;;;;;;;;;15191:27;;15187:229;;;15246:8;;;;-1:-1:-1;15239:15:0;;-1:-1:-1;;;;15239:15:0;15187:229;15280:12;;:26;;;-1:-1:-1;15276:140:0;;;15335:6;15327:14;;15276:140;;;15399:1;15390:6;:10;15382:18;;15276:140;14999:428;;;;;-1:-1:-1;;;;;;15444:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;-1:-1:-1;;;;;;;;15444:33:0;;;;;-1:-1:-1;;14268:1217:0;;;;:::o;7084:39::-;;;;;;;;;;;;;:::o;3135:207::-;2463:12;:10;:12::i;:::-;-1:-1:-1;;;;;2452:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2452:23:0;;2444:68;;;;;-1:-1:-1;;;2444:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3228:19;:39;;-1:-1:-1;;;;;;3228:39:0;-1:-1:-1;;;;;3228:39:0;;;;;;;;;;;3283:51;;3314:19;;;3283:51;;-1:-1:-1;;3283:51:0;3135:207;:::o;19304:3276::-;-1:-1:-1;;;;;19476:26:0;;19368:6;19476:26;;;:17;:26;;;;;;;;19519:19;19515:60;;19562:1;19555:8;;;;;19515:60;19587:16;19606:23;19616:12;19606:9;:23::i;:::-;19587:42;-1:-1:-1;19644:14:0;;;19640:55;;19682:1;19675:8;;;;;;19640:55;-1:-1:-1;;19719:13:0;5008:2;19747:26;;;;19743:1238;;;19797:1;19790:8;;;;;;19743:1238;-1:-1:-1;;;;;19954:23:0;;19831:24;19954:23;;;:14;:23;;;;;;;;:26;;;;;;;;:32;-1:-1:-1;;19858:26:0;;;19954:52;;;;:32;;:52;19950:101;;;20034:1;20027:8;;;;;;;19950:101;-1:-1:-1;;;;;20119:23:0;;;;;;:14;:23;;;;;;;;:70;-1:-1:-1;;20143:18:0;;20119:43;;;;;;;;;:49;:70;;;:49;;:70;20115:855;;20244:1;20227:14;:18;20210:35;;20115:855;;;20286:12;;-1:-1:-1;;20301:18:0;20375:580;20390:14;20382:22;;:5;:22;;;20375:580;;;20480:1;20454:22;;;20453:28;;;20445:36;;20531:23;;:::i;:::-;-1:-1:-1;;;;;;20557:23:0;;;;;;:14;:23;;;;;;;;:31;;;;;;;;;;;;;20531:57;;;;;;;;;;;;;;;-1:-1:-1;;;20531:57:0;;;-1:-1:-1;;;;;20531:57:0;;;;;;;;;20615:29;;;20611:141;;;-1:-1:-1;20690:6:0;-1:-1:-1;20723:5:0;;20611:141;20757:8;;:28;;;;;;;20753:183;;;20831:6;20814:23;;20753:183;;;20911:1;20902:6;:10;20894:18;;20753:183;20375:580;;;;;20115:855;;19743:1238;21036:14;;21065:1173;21093:14;21086:21;;:3;:21;;;21065:1173;;21131:23;;:::i;:::-;-1:-1:-1;;;;;;21157:23:0;;;;;;:14;:23;;;;;;;;:28;;;;;;;;;;;;21131:54;;;;;;;;;;;;;;;-1:-1:-1;;;21131:54:0;;;-1:-1:-1;;;;;21131:54:0;;;;;;;;;21157:23;;;21228:24;;:14;:24::i;:::-;21287:8;;21200:52;;-1:-1:-1;21200:52:0;-1:-1:-1;;;21310:917:0;21323:12;:19;21317:25;;;;21310:917;;;21466:12;:19;21385:9;;21370:12;;-1:-1:-1;;21466:23:0;21459:31;;;;:70;;;;;21502:12;21515:3;21521:1;21515:7;21502:21;;;;;;;;;;;;;;;;;;;:27;;;;;21494:35;;;;21459:70;21455:154;;;21562:12;21575:3;21581:1;21575:7;21562:21;;;;;;;;;;;;;;;;;;;:27;;;;-1:-1:-1;21455:154:0;21637:14;21631:20;;:3;:20;;;:70;;;;-1:-1:-1;;;;;;21663:23:0;;;;;;:14;:23;;;;;;;;:32;21693:1;21687:7;;21663:32;;;;;;;;;:38;;;21655:46;;;;21631:70;21627:205;;;-1:-1:-1;;;;;;;21734:23:0;;;;;;:14;:23;;;;;;;;:32;21764:1;21758:7;;;21734:32;;;;;;;;;;:38;;;21627:205;21897:65;21903:5;21910:10;21897:65;;;;;;;;;;;;;;;;;:5;:65::i;:::-;21869:93;;21891:3;21869:25;;21877:2;:10;;;-1:-1:-1;;;;;21869:19:0;:25;:93;21859:6;:104;21850:113;;21986:10;21982:64;;;22021:5;;;;21982:64;22112:12;:19;22077:5;;-1:-1:-1;22077:5:0;;-1:-1:-1;;22112:23:0;22105:31;;;;22101:111;;;22167:12;22180:3;22186:1;22180:7;22167:21;;;;;;;;;;;;;;;;;;;:25;-1:-1:-1;;;22167:25:0;;;;;-1:-1:-1;22101:111:0;-1:-1:-1;;21344:5:0;;;;;21310:917;;;-1:-1:-1;;21109:5:0;;;;;-1:-1:-1;21065:1173:0;;-1:-1:-1;21065:1173:0;;-1:-1:-1;22248:13:0;22264:71;22280:5;22271:6;:14;22264:71;;;;;;;;;;;;;;;;;:6;:71::i;:::-;-1:-1:-1;;;;;22395:23:0;;22421:1;22395:23;;;:14;:23;;;;;;22248:87;;-1:-1:-1;;;;;;22395:23:0;:27;22391:156;;22448:87;22454:6;22462:14;:23;22477:7;-1:-1:-1;;;;;22462:23:0;-1:-1:-1;;;;;22462:23:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22462:23:0;22448:87;;;;;;;;;;;;;;;;;:5;:87::i;:::-;22439:96;;22391:156;22566:6;19304:3276;-1:-1:-1;;;;;19304:3276:0:o;6564:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;6564:33:0;;;;;-1:-1:-1;;;6564:33:0;;;;:::o;2242:79::-;2280:7;2307:6;-1:-1:-1;;;;;2307:6:0;2242:79;:::o;4968:42::-;5008:2;4968:42;:::o;4655:37::-;;;;;;;;;;;;;;-1:-1:-1;;;4655:37:0;;;;:::o;3447:309::-;3518:19;;-1:-1:-1;;;;;3518:19:0;3502:12;:10;:12::i;:::-;-1:-1:-1;;;;;3502:35:0;;3494:107;;;;-1:-1:-1;;;3494:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3646:19;;;3638:6;;3617:49;;-1:-1:-1;;;;;3646:19:0;;;;3638:6;;;;3617:49;;;3686:19;;;;3677:28;;-1:-1:-1;;;;;;3677:28:0;;;-1:-1:-1;;;;;3686:19:0;;3677:28;;;;3716:32;;;3447:309::o;10723:238::-;10789:4;10806:13;10822:58;10829:9;10822:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;10806:74;;10891:40;10907:10;10919:3;10924:6;10891:15;:40::i;:::-;-1:-1:-1;10949:4:0;;10723:238;-1:-1:-1;;;10723:238:0:o;13615:222::-;-1:-1:-1;;;;;13721:23:0;;13680:6;13721:23;;;:14;:23;;;;;;;;13762:16;:67;;13828:1;13762:67;;;-1:-1:-1;;;;;13781:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;13802:16:0;;13781:38;;;;;;;;;:44;-1:-1:-1;;;13781:44:0;;-1:-1:-1;;;;;13781:44:0;13762:67;13755:74;13615:222;-1:-1:-1;;;13615:222:0:o;22678:422::-;22720:20;22743:28;22760:10;22743:16;:28::i;:::-;22803:4;22786:23;;;;:8;:23;;;;;;22720:51;;-1:-1:-1;;;;;;22786:39:0;;;:23;;:39;22782:111;;;-1:-1:-1;22875:4:0;22858:23;;;;:8;:23;;;;;;-1:-1:-1;;;;;22858:23:0;22782:111;22953:10;22938:26;;;;:14;:26;;;;;;;;;;22932:92;;;;;;;;;;;;;;-1:-1:-1;;;;;22938:26:0;;;;22966:13;;22932:92;;;;;;;:5;:92::i;:::-;22918:10;22903:26;;;;:14;:26;;;;;:121;;-1:-1:-1;;;;;;22903:121:0;-1:-1:-1;;;;;22903:121:0;;;;;;;;;;;23035:57;;23059:4;;23078:13;23035:15;:57::i;12627:787::-;12744:23;6712:80;;;;;;;;;;;;;;;;;;;12824:4;;;;;;;;;-1:-1:-1;;;12824:4:0;;;;;;;;6712:80;-1:-1:-1;12808:22:0;12832:12;:10;:12::i;:::-;12854:4;12780:80;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12780:80:0;-1:-1:-1;;;;;12780:80:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12780:80:0;;;12770:91;;;;;;12744:117;;12872:18;6932:71;;;;;;;;;;;;;;;;;;;12903:57;;;;;;;;-1:-1:-1;;;;;12903:57:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12903:57:0;;;;;12893:68;;;;;;-1:-1:-1;;;12999:57:0;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12999:57:0;;;;;;12989:68;;;;;;;;;-1:-1:-1;13088:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12893:68;;-1:-1:-1;12989:68:0;;-1:-1:-1;;;13088:26:0;;;;;;;12903:57;-1:-1:-1;;13088:26:0;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;13088:26:0;;-1:-1:-1;;13088:26:0;;;-1:-1:-1;;;;;;;13133:23:0;;13125:73;;;;-1:-1:-1;;;13125:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13226:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;13217:28;;13209:74;;;;-1:-1:-1;;;13209:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13309:6;13302:3;:13;;13294:63;;;;-1:-1:-1;;;13294:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13375:31;13385:9;13396;13375;:31::i;:::-;13368:38;;;;12627:787;;;;;;;:::o;17623:511::-;17766:12;:19;-1:-1:-1;;17766:23:0;17685:12;;;17858:136;17865:9;;;;17858:136;;17916:12;17929:5;17916:19;;;;;;;;;;;;;;;;;;;:25;;;;;17904:37;;;;17900:83;;17962:5;;17900:83;-1:-1:-1;;17876:7:0;;;;17858:136;;;18004:21;;:::i;:::-;18028:12;18041:5;18028:19;;;;;;;;;;;;;;;;;;;18004:43;;;;;;;;18028:19;;;;18004:43;;;;;;;;-1:-1:-1;;;18004:43:0;;;;;;;;;;-1:-1:-1;;;18004:43:0;;;;;;;;;;;17623:511;;18004:43;;-1:-1:-1;18004:43:0;;;-1:-1:-1;17623:511:0;-1:-1:-1;;;17623:511:0:o;17190:254::-;17244:12;17258:13;17273:10;17296:21;;:::i;:::-;17320:12;17333:19;;-1:-1:-1;;17333:23:0;;;17320:37;;;;;;;;;;;;;;;17296:61;;;;;;;;17320:37;;;;17296:61;;;;;;;;-1:-1:-1;;;17296:61:0;;;;;;;;;;-1:-1:-1;;;17296:61:0;;;;;;;;;;;;;;-1:-1:-1;17296:61:0;-1:-1:-1;17296:61:0;-1:-1:-1;;17190:254:0:o;15667:873::-;2463:12;:10;:12::i;:::-;-1:-1:-1;;;;;2452:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2452:23:0;;2444:68;;;;;-1:-1:-1;;;2444:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:1;15754:6;:10;;;15746:55;;;;;-1:-1:-1;;;15746:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15826:5;15820:3;:11;;;15812:69;;;;-1:-1:-1;;;15812:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15892:25;;:::i;:::-;15920:12;15933:19;;-1:-1:-1;;15933:23:0;;;15920:37;;;;;;;;;;;;;;;15892:65;;;;;;;;15920:37;;;;15892:65;;;;;;;-1:-1:-1;;;15892:65:0;;;;;;;;;;;-1:-1:-1;;;15892:65:0;;;;;;;;;;-1:-1:-1;15968:24:0;;:::i;:::-;15995:49;;;;;;;;16007:23;16017:12;16007:9;:23::i;:::-;15995:49;;;;;;16032:6;15995:49;;;;;;16040:3;15995:49;;;;;15968:76;;16080:5;:12;;;16063:29;;:6;:13;;;:29;;;;:56;;;;16110:5;:9;;;16096:23;;:6;:10;;;:23;;;;16063:56;16055:119;;;;-1:-1:-1;;;16055:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16278:11;;16262:12;;:27;;;;;;;16258:162;;;16306:12;16319:19;;16346:5;;16306:12;-1:-1:-1;;16319:23:0;;;16306:37;;;;;;;;;;;;;;;:45;;:37;;:45;;;;;;;;;;;-1:-1:-1;;16306:45:0;;;;;;;;-1:-1:-1;;16306:45:0;-1:-1:-1;;;16306:45:0;;;;;;;;;;;-1:-1:-1;;;;16306:45:0;-1:-1:-1;;;16306:45:0;;;;;;;;16258:162;;;16384:12;27:10:-1;;39:1;23:18;;45:23;;-1:-1;16384:24:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16384:24:0;;;;;;;;-1:-1:-1;;16384:24:0;-1:-1:-1;;;16384:24:0;;;;;;;;-1:-1:-1;;;;16384:24:0;-1:-1:-1;;;16384:24:0;;;;;;;;;;;;;;16258:162;16495:11;;16454:12;;16468:13;;;;;16483:10;;;;;16508:12;;;;16522:9;;;;16435:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2523:1;;15667:873;;:::o;9210:136::-;-1:-1:-1;;;;;9310:19:0;;;9286:4;9310:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;-1:-1:-1;;;;;9310:28:0;;9210:136::o;6886:117::-;6932:71;;;;;;;;;;;;;;;;;;6886:117;:::o;5945:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5945:70:0;;-1:-1:-1;;;;;5945:70:0;;:::o;16943:129::-;17023:12;17036:19;;16994:10;;17023:12;-1:-1:-1;;17036:23:0;;;17023:37;;;;;;;;;;;;;;;:41;-1:-1:-1;;;17023:41:0;;;;;;-1:-1:-1;16943:129:0:o;18291:787::-;18349:6;;;18439:11;18349:6;18461:365;18484:12;:19;18480:23;;;;18461:365;;;18525:18;18588:6;18579:5;18554:12;18567:1;18554:15;;;;;;;;;;;;;;;;;;;:21;;;18547:37;18546:48;;-1:-1:-1;;;;;;18613:22:0;;;;18609:68;;;18656:5;;;18609:68;18713:11;-1:-1:-1;;;;;18702:22:0;:8;:22;18691:33;;18747:12;18760:1;18747:15;;;;;;;;;;;;;;;;;;;:21;18792:12;:15;;18747:21;;;;;-1:-1:-1;18792:12:0;;:15;;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;18792:22:0;;;;;-1:-1:-1;;18505:3:0;;18461:365;;;-1:-1:-1;;;;;;18842:11:0;;18838:76;;18879:23;:21;:23::i;:::-;18870:32;;;;18838:76;18958:6;-1:-1:-1;;;;;18947:17:0;:8;:17;;;;;;18932:5;:33;18924:41;;-1:-1:-1;;;18980:5:0;-1:-1:-1;;;;;18980:14:0;;18976:64;;19019:9;19011:17;;18976:64;-1:-1:-1;19064:5:0;18291:787;-1:-1:-1;;;18291:787:0:o;27667:161::-;27742:6;27780:12;-1:-1:-1;;;27769:9:0;;27761:32;;;;-1:-1:-1;;;27761:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27761:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27818:1:0;;27667:161;-1:-1:-1;;27667:161:0:o;28032:165::-;28118:6;28150:1;-1:-1:-1;;;;;28145:6:0;:1;-1:-1:-1;;;;;28145:6:0;;;28153:12;28137:29;;;;;-1:-1:-1;;;28137:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;28137:29:0;-1:-1:-1;;;28184:5:0;;;28032:165::o;23491:746::-;-1:-1:-1;;;;;23585:17:0;;23577:89;;;;-1:-1:-1;;;23577:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23685:17:0;;23677:87;;;;-1:-1:-1;;;23677:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23799:13:0;;;;;;:8;:13;;;;;;;;;;23793:85;;;;;;;;;;;;;;-1:-1:-1;;;;;23799:13:0;;;;23814:6;;23793:85;;;;;;;:5;:85::i;:::-;-1:-1:-1;;;;;23777:13:0;;;;;;;:8;:13;;;;;;;;:101;;-1:-1:-1;;;;;;23777:101:0;-1:-1:-1;;;;;23777:101:0;;;;;;23911:13;;;;;;;;;;23905:79;;;;;;;;;;;;;;23911:13;;;;;23926:6;;23905:79;;;;;;;;:5;:79::i;:::-;-1:-1:-1;;;;;23889:13:0;;;;;;;:8;:13;;;;;;;;;:95;;-1:-1:-1;;;;;;23889:95:0;-1:-1:-1;;;;;23889:95:0;;;;;;24000:26;;;;;;;;;23889:13;;24000:26;;;;;;;;;;;;;;;-1:-1:-1;;;;;24054:14:0;;;;;;;:9;:14;;;;;;;24070;;;;;;;;24039:54;;24054:14;;;;24070;24086:6;24039:14;:54::i;:::-;-1:-1:-1;;;;;24108:10:0;;;24104:126;;-1:-1:-1;;;;;24165:22:0;;;;;;;:17;:22;;;;;;;;;24189:13;;;;;:8;:13;;;;;;;24204;;;;;;24135:83;;24155:3;;24160;;24165:22;;;;;-1:-1:-1;;;;;24189:13:0;;;;24204;24135:19;:83::i;:::-;23491:746;;;:::o;747:92::-;823:10;747:92;:::o;23108:375::-;-1:-1:-1;;;;;23211:20:0;;;23185:23;23211:20;;;:9;:20;;;;;;;;;;23268:8;:19;;;;;;23298:20;;;;:32;;;-1:-1:-1;;;;;;23298:32:0;;;;;;;23348:54;;23211:20;;;;;-1:-1:-1;;;;;23268:19:0;;;;23298:32;;23211:20;;;23348:54;;23185:23;23348:54;23415:60;23430:15;23447:9;23458:16;23415:14;:60::i;:::-;23108:375;;;;:::o;27494:165::-;27580:6;27612:1;27607:6;;:1;:6;;;;27615:12;27599:29;;;;;-1:-1:-1;;;27599:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27836:188:0;27922:6;27952:5;;;27984:12;-1:-1:-1;;;;;27976:6:0;;;;;;;;27968:29;;;;-1:-1:-1;;;27968:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;27968:29:0;-1:-1:-1;28015:1:0;27836:188;-1:-1:-1;;;;27836:188:0:o;28205:153::-;28315:9;28205:153;:::o;24245:937::-;24350:6;-1:-1:-1;;;;;24340:16:0;:6;-1:-1:-1;;;;;24340:16:0;;;:30;;;;;24369:1;24360:6;-1:-1:-1;;;;;24360:10:0;;24340:30;24336:839;;;-1:-1:-1;;;;;24391:20:0;;;24387:381;;-1:-1:-1;;;;;24451:22:0;;24432:16;24451:22;;;:14;:22;;;;;;;;;24511:13;:60;;24570:1;24511:60;;;-1:-1:-1;;;;;24527:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;24547:13:0;;24527:34;;;;;;;;;:40;-1:-1:-1;;;24527:40:0;;-1:-1:-1;;;;;24527:40:0;24511:60;24492:79;;24590:16;24609:67;24615:9;24626:6;24609:67;;;;;;;;;;;;;;;;;:5;:67::i;:::-;24590:86;;24695:57;24712:6;24720:9;24731;24742;24695:16;:57::i;:::-;24387:381;;;;-1:-1:-1;;;;;24788:20:0;;;24784:380;;-1:-1:-1;;;;;24848:22:0;;24829:16;24848:22;;;:14;:22;;;;;;;;;24908:13;:60;;24967:1;24908:60;;;-1:-1:-1;;;;;24924:19:0;;;;;;:11;:19;;;;;;;;-1:-1:-1;;24944:13:0;;24924:34;;;;;;;;;:40;-1:-1:-1;;;24924:40:0;;-1:-1:-1;;;;;24924:40:0;24908:60;24889:79;;24987:16;25006:66;25012:9;25023:6;25006:66;;;;;;;;;;;;;;;;;:5;:66::i;:::-;24987:85;;25091:57;25108:6;25116:9;25127;25138;25091:16;:57::i;25826:1295::-;25957:12;25972:23;25982:12;25972:9;:23::i;:::-;25957:38;-1:-1:-1;;;;;;26012:20:0;;26027:4;26012:20;26008:582;;26108:8;26103:116;-1:-1:-1;;;;;26126:22:0;;;;;;:17;:22;;;;;;;;;;26122:26;;;;26103:116;;;-1:-1:-1;;;;;26181:19:0;;;;;;:14;:19;;;;;;;;:22;;;;;;;;;;26174:29;;-1:-1:-1;;26174:29:0;;;;26150:3;26103:116;;;-1:-1:-1;;;;;;26271:19:0;;26293:1;26271:19;;;:14;:19;;;;;:23;;-1:-1:-1;;;;;;26271:23:0;;;-1:-1:-1;;;;;26359:14:0;;;26355:224;;26419:32;;;;;;;;;;;;;;-1:-1:-1;;;;;26419:32:0;;;;;;;;;;-1:-1:-1;;;;;26394:19:0;;-1:-1:-1;26394:19:0;;;:14;:19;;;;;:22;;;;;;;;:57;;;;;;;;;-1:-1:-1;;;26394:57:0;-1:-1:-1;;;;;;26394:57:0;;;;-1:-1:-1;;26394:57:0;;;;;;;;;;;;;;;26470:22;;;:17;:22;;;;;;:26;;;;;26394:57;26470:26;;;26355:224;;;-1:-1:-1;;;;;26537:22:0;;26562:1;26537:22;;;:17;:22;;;;;:26;;-1:-1:-1;;26537:26:0;;;26355:224;-1:-1:-1;;;;;26606:20:0;;26621:4;26606:20;26602:431;;26713:1;26701:9;:13;;;:66;;;;-1:-1:-1;;;;;;26718:19:0;;;;;;:14;:19;;;;;;;;:49;-1:-1:-1;;26738:13:0;;26718:34;;;;;;;;;:40;:49;;;:40;;:49;;26701:66;26697:325;;;-1:-1:-1;;;;;26788:19:0;;;;;;:14;:19;;;;;;;;-1:-1:-1;;26808:13:0;;26788:34;;;;;;;;;:55;;-1:-1:-1;;;;;;26788:55:0;-1:-1:-1;;;;;;;;26788:55:0;;;;;;26697:325;;;26917:32;;;;;;;;;;;;;;-1:-1:-1;;;;;26917:32:0;;;;;;;;;;-1:-1:-1;;;;;26884:19:0;;;;-1:-1:-1;26884:19:0;;;:14;:19;;;;;:30;;;;;;;;;;:65;;;;;;-1:-1:-1;;26884:65:0;;;;;;;;;;-1:-1:-1;;;;;;26884:65:0;-1:-1:-1;;;26884:65:0;;;;;;;;;;;;26968:22;;;:17;:22;;;;;;:38;;;;;-1:-1:-1;26993:13:0;;;26968:38;;;;;;;;-1:-1:-1;;25826:1295:0:o;25190:628::-;25308:18;25329:75;25336:12;25329:75;;;;;;;;;;;;;;;;;:6;:75::i;:::-;25308:96;;25434:1;25419:12;:16;;;:85;;;;-1:-1:-1;;;;;;25439:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;25462:16:0;;25439:40;;;;;;;;;:50;:65;;;:50;;:65;25419:85;25415:329;;;-1:-1:-1;;;;;25519:22:0;;;;;;:11;:22;;;;;;;;-1:-1:-1;;25542:16:0;;25519:40;;;;;;;;;:57;;-1:-1:-1;;;;;;25519:57:0;-1:-1:-1;;;;;;;;25519:57:0;;;;;;25415:329;;;25644:33;;;;;;;;;;;;;;-1:-1:-1;;;;;25644:33:0;;;;;;;;;;-1:-1:-1;;;;;25605:22:0;;-1:-1:-1;25605:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;-1:-1:-1;;;25605:72:0;-1:-1:-1;;;;;;25605:72:0;;;-1:-1:-1;;25605:72:0;;;;;;;;;;;;;;;25690:25;;;:14;:25;;;;;;;:44;;25605:72;25718:16;;25690:44;;;;;;;;;;;;;25415:329;25759:51;;;-1:-1:-1;;;;;25759:51:0;;;;;;;;;;;;;-1:-1:-1;;;;;25759:51:0;;;;;;;;;;;25190:628;;;;;:::o;27129:161::-;27204:6;27242:12;-1:-1:-1;;;27231:9:0;;27223:32;;;;-1:-1:-1;;;27223:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4476:23885:0;;;;;;;;;;-1:-1:-1;4476:23885:0;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;4476:23885:0;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://e5d6413f6b6c25cfc8fa62f5ca311a31c2a7d724c6020ad2ecbcdb590ba7493c
Loading