ETH Price: $2,644.80 (+0.27%)

Token

veVC (veVC)

Overview

Max Total Supply

0.529424094622585635 veVC

Holders

1

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 veVC
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
VotingEscrow

Compiler Version
v0.8.17+commit.8df45f5f

ZkSolc Version
v1.3.5

Optimization Enabled:
Yes with Mode 3

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at era.zksync.network on 2024-01-03
*/

pragma solidity ^0.8.13;

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

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IVotes {
    /**
     * @dev Emitted when an account changes their delegate.
     */
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /**
     * @dev Emitted when a token transfer or delegate change results in changes to a delegate's number of votes.
     */
    event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);

    /**
     * @dev Returns the current amount of votes that `account` has.
     */
    function getVotes(address account) external view returns (uint256);

    /**
     * @dev Returns the amount of votes that `account` had at the end of a past block (`blockNumber`).
     */
    function getPastVotes(address account, uint256 blockNumber) external view returns (uint256);

    /**
     * @dev Returns the total supply of votes available at the end of a past block (`blockNumber`).
     *
     * NOTE: This value is the sum of all available votes, which is not necessarily the sum of all delegated votes.
     * Votes that have not been delegated are still part of total supply, even though they would not participate in a
     * vote.
     */
    function getPastTotalSupply(uint256 blockNumber) external view returns (uint256);

    /**
     * @dev Returns the delegate that `account` has chosen.
     */
    function delegates(address account) external view returns (address);

    /**
     * @dev Delegates votes from the sender to `delegatee`.
     */
    function delegate(address delegatee) external;

    /**
     * @dev Delegates votes from signer to `delegatee`.
     */
    function delegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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

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

    function decimals() external view returns (uint8);

    function symbol() external view returns (string memory);

    function balanceOf(address) external view returns (uint);

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

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

    function approve(address spender, uint value) external returns (bool);

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

interface IVeArtProxy {
    function _tokenURI(
        uint _tokenId,
        uint _balanceOf,
        uint _locked_end,
        uint _value
    ) external pure returns (string memory output);
}

interface IVotingEscrow {
    struct Point {
        int128 bias;
        int128 slope; // # -dweight / dt
        uint256 ts;
        uint256 blk; // block
    }

    function token() external view returns (address);

    function team() external returns (address);

    function epoch() external view returns (uint);

    function point_history(uint loc) external view returns (Point memory);

    function user_point_history(
        uint tokenId,
        uint loc
    ) external view returns (Point memory);

    function user_point_epoch(uint tokenId) external view returns (uint);

    function ownerOf(uint) external view returns (address);

    function isApprovedOrOwner(address, uint) external view returns (bool);

    function transferFrom(address, address, uint) external;

    function voting(uint tokenId) external;

    function abstain(uint tokenId) external;

    function attach(uint tokenId) external;

    function detach(uint tokenId) external;

    function checkpoint() external;

    function deposit_for(uint tokenId, uint value) external;

    function create_lock_for(uint, uint, address) external returns (uint);

    function balanceOfNFT(uint) external view returns (uint);

    function totalSupply() external view returns (uint);
}

uint256 constant VELOCORE_EPOCH_DURATION = 7 days;

/// @title Voting Escrow
/// @notice veNFT implementation that escrows ERC-20 tokens in the form of an ERC-721 NFT
/// @notice Votes have a weight depending on time, so that users are committed to the future of (whatever they are voting for)
/// @author Modified from Solidly (https://github.com/solidlyexchange/solidly/blob/master/contracts/ve.sol)
/// @author Modified from Curve (https://github.com/curvefi/curve-dao-contracts/blob/master/contracts/VotingEscrow.vy)
/// @author Modified from Nouns DAO (https://github.com/withtally/my-nft-dao-project/blob/main/contracts/ERC721Checkpointable.sol)
/// @dev Vote weight decays linearly over time. Lock time cannot be more than `MAXTIME` (4 years).
contract VotingEscrow is IERC721, IERC721Metadata, IVotes {
    enum DepositType {
        DEPOSIT_FOR_TYPE,
        CREATE_LOCK_TYPE,
        INCREASE_LOCK_AMOUNT,
        INCREASE_UNLOCK_TIME,
        MERGE_TYPE
    }

    struct LockedBalance {
        int128 amount;
        uint end;
    }

    struct Point {
        int128 bias;
        int128 slope; // # -dweight / dt
        uint ts;
        uint blk; // block
    }
    /* We cannot really do block numbers per se b/c slope is per time, not per block
     * and per block could be fairly bad b/c Ethereum changes blocktimes.
     * What we can do is to extrapolate ***At functions */

    /// @notice A checkpoint for marking delegated tokenIds from a given timestamp
    struct Checkpoint {
        uint timestamp;
        uint[] tokenIds;
    }

    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Deposit(
        address indexed provider,
        uint tokenId,
        uint value,
        uint indexed locktime,
        DepositType deposit_type,
        uint ts
    );
    event Withdraw(address indexed provider, uint tokenId, uint value, uint ts);
    event Supply(uint prevSupply, uint supply);

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    address public immutable token;
    address public voter;
    address public team;
    address public artProxy;

    mapping(uint => Point) public point_history; // epoch -> unsigned point

    /// @dev Mapping of interface id to bool about whether or not it's supported
    mapping(bytes4 => bool) internal supportedInterfaces;

    /// @dev ERC165 interface ID of ERC165
    bytes4 internal constant ERC165_INTERFACE_ID = 0x01ffc9a7;

    /// @dev ERC165 interface ID of ERC721
    bytes4 internal constant ERC721_INTERFACE_ID = 0x80ac58cd;

    /// @dev ERC165 interface ID of ERC721Metadata
    bytes4 internal constant ERC721_METADATA_INTERFACE_ID = 0x5b5e139f;

    /// @dev Current count of token
    uint internal tokenId;

    /// @notice Contract constructor
    /// @param token_addr `FLOW` token address
    constructor(address token_addr, address art_proxy) {
        token = token_addr;
        voter = msg.sender;
        team = msg.sender;
        artProxy = art_proxy;

        point_history[0].blk = block.number;
        point_history[0].ts = block.timestamp;

        supportedInterfaces[ERC165_INTERFACE_ID] = true;
        supportedInterfaces[ERC721_INTERFACE_ID] = true;
        supportedInterfaces[ERC721_METADATA_INTERFACE_ID] = true;

        // mint-ish
        emit Transfer(address(0), address(this), tokenId);
        // burn-ish
        emit Transfer(address(this), address(0), tokenId);
    }

    /*//////////////////////////////////////////////////////////////
                                MODIFIERS
    //////////////////////////////////////////////////////////////*/

    /// @dev reentrancy guard
    uint8 internal constant _not_entered = 1;
    uint8 internal constant _entered = 2;
    uint8 internal _entered_state = 1;
    modifier nonreentrant() {
        require(_entered_state == _not_entered);
        _entered_state = _entered;
        _;
        _entered_state = _not_entered;
    }

    /*///////////////////////////////////////////////////////////////
                             METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public constant name = "veVC";
    string public constant symbol = "veVC";
    string public constant version = "1.0.0";
    uint8 public constant decimals = 18;

    function setTeam(address _team) external {
        require(msg.sender == team);
        team = _team;
    }

    function setArtProxy(address _proxy) external {
        require(msg.sender == team);
        artProxy = _proxy;
    }

    /// @dev Returns current token URI metadata
    /// @param _tokenId Token ID to fetch URI for.
    function tokenURI(uint _tokenId) external view returns (string memory) {
        require(
            idToOwner[_tokenId] != address(0),
            "Query for nonexistent token"
        );
        LockedBalance memory _locked = locked[_tokenId];
        return
            IVeArtProxy(artProxy)._tokenURI(
                _tokenId,
                _balanceOfNFT(_tokenId, block.timestamp),
                _locked.end,
                uint(int256(_locked.amount))
            );
    }

    /*//////////////////////////////////////////////////////////////
                      ERC721 BALANCE/OWNER STORAGE
    //////////////////////////////////////////////////////////////*/

    /// @dev Mapping from NFT ID to the address that owns it.
    mapping(uint => address) internal idToOwner;

    /// @dev Mapping from owner address to count of his tokens.
    mapping(address => uint) internal ownerToNFTokenCount;

    /// @dev Returns the address of the owner of the NFT.
    /// @param _tokenId The identifier for an NFT.
    function ownerOf(uint _tokenId) public view returns (address) {
        return idToOwner[_tokenId];
    }

    /// @dev Returns the number of NFTs owned by `_owner`.
    ///      Throws if `_owner` is the zero address. NFTs assigned to the zero address are considered invalid.
    /// @param _owner Address for whom to query the balance.
    function _balance(address _owner) internal view returns (uint) {
        return ownerToNFTokenCount[_owner];
    }

    /// @dev Returns the number of NFTs owned by `_owner`.
    ///      Throws if `_owner` is the zero address. NFTs assigned to the zero address are considered invalid.
    /// @param _owner Address for whom to query the balance.
    function balanceOf(address _owner) external view returns (uint) {
        return _balance(_owner);
    }

    /*//////////////////////////////////////////////////////////////
                         ERC721 APPROVAL STORAGE
    //////////////////////////////////////////////////////////////*/

    /// @dev Mapping from NFT ID to approved address.
    mapping(uint => address) internal idToApprovals;

    /// @dev Mapping from owner address to mapping of operator addresses.
    mapping(address => mapping(address => bool)) internal ownerToOperators;

    mapping(uint => uint) public ownership_change;

    /// @dev Get the approved address for a single NFT.
    /// @param _tokenId ID of the NFT to query the approval of.
    function getApproved(uint _tokenId) external view returns (address) {
        return idToApprovals[_tokenId];
    }

    /// @dev Checks if `_operator` is an approved operator for `_owner`.
    /// @param _owner The address that owns the NFTs.
    /// @param _operator The address that acts on behalf of the owner.
    function isApprovedForAll(
        address _owner,
        address _operator
    ) external view returns (bool) {
        return (ownerToOperators[_owner])[_operator];
    }

    /*//////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    /// @dev Set or reaffirm the approved address for an NFT. The zero address indicates there is no approved address.
    ///      Throws unless `msg.sender` is the current NFT owner, or an authorized operator of the current owner.
    ///      Throws if `_tokenId` is not a valid NFT. (NOTE: This is not written the EIP)
    ///      Throws if `_approved` is the current owner. (NOTE: This is not written the EIP)
    /// @param _approved Address to be approved for the given NFT ID.
    /// @param _tokenId ID of the token to be approved.
    function approve(address _approved, uint _tokenId) public {
        address owner = idToOwner[_tokenId];
        // Throws if `_tokenId` is not a valid NFT
        require(owner != address(0));
        // Throws if `_approved` is the current owner
        require(_approved != owner);
        // Check requirements
        bool senderIsOwner = (idToOwner[_tokenId] == msg.sender);
        bool senderIsApprovedForAll = (ownerToOperators[owner])[msg.sender];
        require(senderIsOwner || senderIsApprovedForAll);
        // Set the approval
        idToApprovals[_tokenId] = _approved;
        emit Approval(owner, _approved, _tokenId);
    }

    /// @dev Enables or disables approval for a third party ("operator") to manage all of
    ///      `msg.sender`'s assets. It also emits the ApprovalForAll event.
    ///      Throws if `_operator` is the `msg.sender`. (NOTE: This is not written the EIP)
    /// @notice This works even if sender doesn't own any tokens at the time.
    /// @param _operator Address to add to the set of authorized operators.
    /// @param _approved True if the operators is approved, false to revoke approval.
    function setApprovalForAll(address _operator, bool _approved) external {
        // Throws if `_operator` is the `msg.sender`
        assert(_operator != msg.sender);
        ownerToOperators[msg.sender][_operator] = _approved;
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    /* TRANSFER FUNCTIONS */
    /// @dev Clear an approval of a given address
    ///      Throws if `_owner` is not the current owner.
    function _clearApproval(address _owner, uint _tokenId) internal {
        // Throws if `_owner` is not the current owner
        assert(idToOwner[_tokenId] == _owner);
        if (idToApprovals[_tokenId] != address(0)) {
            // Reset approvals
            idToApprovals[_tokenId] = address(0);
        }
    }

    /// @dev Returns whether the given spender can transfer a given token ID
    /// @param _spender address of the spender to query
    /// @param _tokenId uint ID of the token to be transferred
    /// @return bool whether the msg.sender is approved for the given token ID, is an operator of the owner, or is the owner of the token
    function _isApprovedOrOwner(
        address _spender,
        uint _tokenId
    ) internal view returns (bool) {
        address owner = idToOwner[_tokenId];
        bool spenderIsOwner = owner == _spender;
        bool spenderIsApproved = _spender == idToApprovals[_tokenId];
        bool spenderIsApprovedForAll = (ownerToOperators[owner])[_spender];
        return spenderIsOwner || spenderIsApproved || spenderIsApprovedForAll;
    }

    function isApprovedOrOwner(
        address _spender,
        uint _tokenId
    ) external view returns (bool) {
        return _isApprovedOrOwner(_spender, _tokenId);
    }

    /// @dev Exeute transfer of a NFT.
    ///      Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
    ///      address for this NFT. (NOTE: `msg.sender` not allowed in internal function so pass `_sender`.)
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_tokenId` is not a valid NFT.
    function _transferFrom(
        address _from,
        address _to,
        uint _tokenId,
        address _sender
    ) internal {
        require(attachments[_tokenId] == 0 && !voted[_tokenId], "attached");
        // Check requirements
        require(_isApprovedOrOwner(_sender, _tokenId));
        // Clear approval. Throws if `_from` is not the current owner
        _clearApproval(_from, _tokenId);
        // Remove NFT. Throws if `_tokenId` is not a valid NFT
        _removeTokenFrom(_from, _tokenId);
        // auto re-delegate
        _moveTokenDelegates(delegates(_from), delegates(_to), _tokenId);
        // Add NFT
        _addTokenTo(_to, _tokenId);
        // Set the block of ownership transfer (for Flash NFT protection)
        ownership_change[_tokenId] = block.number;
        // Log the transfer
        emit Transfer(_from, _to, _tokenId);
    }

    /// @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved address for this NFT.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_tokenId` is not a valid NFT.
    /// @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
    ///        they maybe be permanently lost.
    /// @param _from The current owner of the NFT.
    /// @param _to The new owner.
    /// @param _tokenId The NFT to transfer.
    function transferFrom(address _from, address _to, uint _tokenId) external {
        _transferFrom(_from, _to, _tokenId, msg.sender);
    }

    /// @dev Transfers the ownership of an NFT from one address to another address.
    ///      Throws unless `msg.sender` is the current owner, an authorized operator, or the
    ///      approved address for this NFT.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_tokenId` is not a valid NFT.
    ///      If `_to` is a smart contract, it calls `onERC721Received` on `_to` and throws if
    ///      the return value is not `bytes4(keccak256("onERC721Received(address,address,uint,bytes)"))`.
    /// @param _from The current owner of the NFT.
    /// @param _to The new owner.
    /// @param _tokenId The NFT to transfer.
    function safeTransferFrom(
        address _from,
        address _to,
        uint _tokenId
    ) external {
        safeTransferFrom(_from, _to, _tokenId, "");
    }

    function _isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
        uint size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /// @dev Transfers the ownership of an NFT from one address to another address.
    ///      Throws unless `msg.sender` is the current owner, an authorized operator, or the
    ///      approved address for this NFT.
    ///      Throws if `_from` is not the current owner.
    ///      Throws if `_to` is the zero address.
    ///      Throws if `_tokenId` is not a valid NFT.
    ///      If `_to` is a smart contract, it calls `onERC721Received` on `_to` and throws if
    ///      the return value is not `bytes4(keccak256("onERC721Received(address,address,uint,bytes)"))`.
    /// @param _from The current owner of the NFT.
    /// @param _to The new owner.
    /// @param _tokenId The NFT to transfer.
    /// @param _data Additional data with no specified format, sent in call to `_to`.
    function safeTransferFrom(
        address _from,
        address _to,
        uint _tokenId,
        bytes memory _data
    ) public {
        _transferFrom(_from, _to, _tokenId, msg.sender);

        if (_isContract(_to)) {
            // Throws if transfer destination is a contract which does not implement 'onERC721Received'
            try
                IERC721Receiver(_to).onERC721Received(
                    msg.sender,
                    _from,
                    _tokenId,
                    _data
                )
            returns (bytes4 response) {
                if (
                    response != IERC721Receiver(_to).onERC721Received.selector
                ) {
                    revert("ERC721: ERC721Receiver rejected tokens");
                }
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    /// @dev Interface identification is specified in ERC-165.
    /// @param _interfaceID Id of the interface
    function supportsInterface(
        bytes4 _interfaceID
    ) external view returns (bool) {
        return supportedInterfaces[_interfaceID];
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    /// @dev Mapping from owner address to mapping of index to tokenIds
    mapping(address => mapping(uint => uint)) internal ownerToNFTokenIdList;

    /// @dev Mapping from NFT ID to index of owner
    mapping(uint => uint) internal tokenToOwnerIndex;

    /// @dev  Get token by index
    function tokenOfOwnerByIndex(
        address _owner,
        uint _tokenIndex
    ) external view returns (uint) {
        return ownerToNFTokenIdList[_owner][_tokenIndex];
    }

    /// @dev Add a NFT to an index mapping to a given address
    /// @param _to address of the receiver
    /// @param _tokenId uint ID Of the token to be added
    function _addTokenToOwnerList(address _to, uint _tokenId) internal {
        uint current_count = _balance(_to);

        ownerToNFTokenIdList[_to][current_count] = _tokenId;
        tokenToOwnerIndex[_tokenId] = current_count;
    }

    /// @dev Add a NFT to a given address
    ///      Throws if `_tokenId` is owned by someone.
    function _addTokenTo(address _to, uint _tokenId) internal {
        // Throws if `_tokenId` is owned by someone
        assert(idToOwner[_tokenId] == address(0));
        // Change the owner
        idToOwner[_tokenId] = _to;
        // Update owner token index tracking
        _addTokenToOwnerList(_to, _tokenId);
        // Change count tracking
        ownerToNFTokenCount[_to] += 1;
    }

    /// @dev Function to mint tokens
    ///      Throws if `_to` is zero address.
    ///      Throws if `_tokenId` is owned by someone.
    /// @param _to The address that will receive the minted tokens.
    /// @param _tokenId The token id to mint.
    /// @return A boolean that indicates if the operation was successful.
    function _mint(address _to, uint _tokenId) internal returns (bool) {
        // Throws if `_to` is zero address
        assert(_to != address(0));
        // checkpoint for gov
        _moveTokenDelegates(address(0), delegates(_to), _tokenId);
        // Add NFT. Throws if `_tokenId` is owned by someone
        _addTokenTo(_to, _tokenId);
        emit Transfer(address(0), _to, _tokenId);
        return true;
    }

    /// @dev Remove a NFT from an index mapping to a given address
    /// @param _from address of the sender
    /// @param _tokenId uint ID Of the token to be removed
    function _removeTokenFromOwnerList(address _from, uint _tokenId) internal {
        // Delete
        uint current_count = _balance(_from) - 1;
        uint current_index = tokenToOwnerIndex[_tokenId];

        if (current_count == current_index) {
            // update ownerToNFTokenIdList
            ownerToNFTokenIdList[_from][current_count] = 0;
            // update tokenToOwnerIndex
            tokenToOwnerIndex[_tokenId] = 0;
        } else {
            uint lastTokenId = ownerToNFTokenIdList[_from][current_count];

            // Add
            // update ownerToNFTokenIdList
            ownerToNFTokenIdList[_from][current_index] = lastTokenId;
            // update tokenToOwnerIndex
            tokenToOwnerIndex[lastTokenId] = current_index;

            // Delete
            // update ownerToNFTokenIdList
            ownerToNFTokenIdList[_from][current_count] = 0;
            // update tokenToOwnerIndex
            tokenToOwnerIndex[_tokenId] = 0;
        }
    }

    /// @dev Remove a NFT from a given address
    ///      Throws if `_from` is not the current owner.
    function _removeTokenFrom(address _from, uint _tokenId) internal {
        // Throws if `_from` is not the current owner
        assert(idToOwner[_tokenId] == _from);
        // Change the owner
        idToOwner[_tokenId] = address(0);
        // Update owner token index tracking
        _removeTokenFromOwnerList(_from, _tokenId);
        // Change count tracking
        ownerToNFTokenCount[_from] -= 1;
    }

    function _burn(uint _tokenId) internal {
        require(
            _isApprovedOrOwner(msg.sender, _tokenId),
            "caller is not owner nor approved"
        );

        address owner = ownerOf(_tokenId);

        // Clear approval
        approve(address(0), _tokenId);
        // checkpoint for gov
        _moveTokenDelegates(delegates(owner), address(0), _tokenId);
        // Remove token
        _removeTokenFrom(msg.sender, _tokenId);
        emit Transfer(owner, address(0), _tokenId);
    }

    /*//////////////////////////////////////////////////////////////
                             ESCROW STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint => uint) public user_point_epoch;
    mapping(uint => Point[1000000000]) public user_point_history; // user -> Point[user_epoch]
    mapping(uint => LockedBalance) public locked;
    uint public epoch;
    mapping(uint => int128) public slope_changes; // time -> signed slope change
    uint public supply;

    uint internal constant WEEK = VELOCORE_EPOCH_DURATION;
    uint internal constant MAXTIME = 4 * 365 * 86400;
    int128 internal constant iMAXTIME = 4 * 365 * 86400;
    uint internal constant MULTIPLIER = 1 ether;

    /*//////////////////////////////////////////////////////////////
                              ESCROW LOGIC
    //////////////////////////////////////////////////////////////*/

    /// @notice Get the most recently recorded rate of voting power decrease for `_tokenId`
    /// @param _tokenId token of the NFT
    /// @return Value of the slope
    function get_last_user_slope(uint _tokenId) external view returns (int128) {
        uint uepoch = user_point_epoch[_tokenId];
        return user_point_history[_tokenId][uepoch].slope;
    }

    /// @notice Get the timestamp for checkpoint `_idx` for `_tokenId`
    /// @param _tokenId token of the NFT
    /// @param _idx User epoch number
    /// @return Epoch time of the checkpoint
    function user_point_history__ts(
        uint _tokenId,
        uint _idx
    ) external view returns (uint) {
        return user_point_history[_tokenId][_idx].ts;
    }

    /// @notice Get timestamp when `_tokenId`'s lock finishes
    /// @param _tokenId User NFT
    /// @return Epoch time of the lock end
    function locked__end(uint _tokenId) external view returns (uint) {
        return locked[_tokenId].end;
    }

    /// @notice Record global and per-user data to checkpoint
    /// @param _tokenId NFT token ID. No user checkpoint if 0
    /// @param old_locked Pevious locked amount / end lock time for the user
    /// @param new_locked New locked amount / end lock time for the user
    function _checkpoint(
        uint _tokenId,
        LockedBalance memory old_locked,
        LockedBalance memory new_locked
    ) internal {
        Point memory u_old;
        Point memory u_new;
        int128 old_dslope = 0;
        int128 new_dslope = 0;
        uint _epoch = epoch;

        if (_tokenId != 0) {
            // Calculate slopes and biases
            // Kept at zero when they have to
            if (old_locked.end > block.timestamp && old_locked.amount > 0) {
                u_old.slope = old_locked.amount / iMAXTIME;
                u_old.bias =
                    u_old.slope *
                    int128(int256(old_locked.end - block.timestamp));
            }
            if (new_locked.end > block.timestamp && new_locked.amount > 0) {
                u_new.slope = new_locked.amount / iMAXTIME;
                u_new.bias =
                    u_new.slope *
                    int128(int256(new_locked.end - block.timestamp));
            }

            // Read values of scheduled changes in the slope
            // old_locked.end can be in the past and in the future
            // new_locked.end can ONLY by in the FUTURE unless everything expired: than zeros
            old_dslope = slope_changes[old_locked.end];
            if (new_locked.end != 0) {
                if (new_locked.end == old_locked.end) {
                    new_dslope = old_dslope;
                } else {
                    new_dslope = slope_changes[new_locked.end];
                }
            }
        }

        Point memory last_point = Point({
            bias: 0,
            slope: 0,
            ts: block.timestamp,
            blk: block.number
        });
        if (_epoch > 0) {
            last_point = point_history[_epoch];
        }
        uint last_checkpoint = last_point.ts;
        // initial_last_point is used for extrapolation to calculate block number
        // (approximately, for *At methods) and save them
        // as we cannot figure that out exactly from inside the contract
        Point memory initial_last_point = last_point;
        uint block_slope = 0; // dblock/dt
        if (block.timestamp > last_point.ts) {
            block_slope =
                (MULTIPLIER * (block.number - last_point.blk)) /
                (block.timestamp - last_point.ts);
        }
        // If last point is already recorded in this block, slope=0
        // But that's ok b/c we know the block in such case

        // Go over weeks to fill history and calculate what the current point is
        {
            uint t_i = (last_checkpoint / WEEK) * WEEK;
            for (uint i = 0; i < 255; ++i) {
                // Hopefully it won't happen that this won't get used in 5 years!
                // If it does, users will be able to withdraw but vote weight will be broken
                t_i += WEEK;
                int128 d_slope = 0;
                if (t_i > block.timestamp) {
                    t_i = block.timestamp;
                } else {
                    d_slope = slope_changes[t_i];
                }
                last_point.bias -=
                    last_point.slope *
                    int128(int256(t_i - last_checkpoint));
                last_point.slope += d_slope;
                if (last_point.bias < 0) {
                    // This can happen
                    last_point.bias = 0;
                }
                if (last_point.slope < 0) {
                    // This cannot happen - just in case
                    last_point.slope = 0;
                }
                last_checkpoint = t_i;
                last_point.ts = t_i;
                last_point.blk =
                    initial_last_point.blk +
                    (block_slope * (t_i - initial_last_point.ts)) /
                    MULTIPLIER;
                _epoch += 1;
                if (t_i == block.timestamp) {
                    last_point.blk = block.number;
                    break;
                } else {
                    point_history[_epoch] = last_point;
                }
            }
        }

        epoch = _epoch;
        // Now point_history is filled until t=now

        if (_tokenId != 0) {
            // If last point was in this block, the slope change has been applied already
            // But in such case we have 0 slope(s)
            last_point.slope += (u_new.slope - u_old.slope);
            last_point.bias += (u_new.bias - u_old.bias);
            if (last_point.slope < 0) {
                last_point.slope = 0;
            }
            if (last_point.bias < 0) {
                last_point.bias = 0;
            }
        }

        // Record the changed point into history
        point_history[_epoch] = last_point;

        if (_tokenId != 0) {
            // Schedule the slope changes (slope is going down)
            // We subtract new_user_slope from [new_locked.end]
            // and add old_user_slope to [old_locked.end]
            if (old_locked.end > block.timestamp) {
                // old_dslope was <something> - u_old.slope, so we cancel that
                old_dslope += u_old.slope;
                if (new_locked.end == old_locked.end) {
                    old_dslope -= u_new.slope; // It was a new deposit, not extension
                }
                slope_changes[old_locked.end] = old_dslope;
            }

            if (new_locked.end > block.timestamp) {
                if (new_locked.end > old_locked.end) {
                    new_dslope -= u_new.slope; // old slope disappeared at this point
                    slope_changes[new_locked.end] = new_dslope;
                }
                // else: we recorded it already in old_dslope
            }
            // Now handle user history
            uint user_epoch = user_point_epoch[_tokenId] + 1;

            user_point_epoch[_tokenId] = user_epoch;
            u_new.ts = block.timestamp;
            u_new.blk = block.number;
            user_point_history[_tokenId][user_epoch] = u_new;
        }
    }

    /// @notice Deposit and lock tokens for a user
    /// @param _tokenId NFT that holds lock
    /// @param _value Amount to deposit
    /// @param unlock_time New time when to unlock the tokens, or 0 if unchanged
    /// @param locked_balance Previous locked amount / timestamp
    /// @param deposit_type The type of deposit
    function _deposit_for(
        uint _tokenId,
        uint _value,
        uint unlock_time,
        LockedBalance memory locked_balance,
        DepositType deposit_type
    ) internal {
        LockedBalance memory _locked = locked_balance;
        uint supply_before = supply;

        supply = supply_before + _value;
        LockedBalance memory old_locked;
        (old_locked.amount, old_locked.end) = (_locked.amount, _locked.end);
        // Adding to existing lock, or if a lock is expired - creating a new one
        _locked.amount += int128(int256(_value));
        if (unlock_time != 0) {
            _locked.end = unlock_time;
        }
        locked[_tokenId] = _locked;

        // Possibilities:
        // Both old_locked.end could be current or expired (>/< block.timestamp)
        // value == 0 (extend lock) or value > 0 (add to lock or extend lock)
        // _locked.end > block.timestamp (always)
        _checkpoint(_tokenId, old_locked, _locked);

        address from = msg.sender;
        if (_value != 0 && deposit_type != DepositType.MERGE_TYPE) {
            assert(IERC20(token).transferFrom(from, address(this), _value));
        }

        emit Deposit(
            from,
            _tokenId,
            _value,
            _locked.end,
            deposit_type,
            block.timestamp
        );
        emit Supply(supply_before, supply_before + _value);
    }

    function block_number() external view returns (uint) {
        return block.number;
    }

    /// @notice Record global data to checkpoint
    function checkpoint() external {
        _checkpoint(0, LockedBalance(0, 0), LockedBalance(0, 0));
    }

    /// @notice Deposit `_value` tokens for `_tokenId` and add to the lock
    /// @dev Anyone (even a smart contract) can deposit for someone else, but
    ///      cannot extend their locktime and deposit for a brand new user
    /// @param _tokenId lock NFT
    /// @param _value Amount to add to user's lock
    function deposit_for(uint _tokenId, uint _value) external nonreentrant {
        LockedBalance memory _locked = locked[_tokenId];

        require(_value > 0); // dev: need non-zero value
        require(_locked.amount > 0, "No existing lock found");
        require(
            _locked.end > block.timestamp,
            "Cannot add to expired lock. Withdraw"
        );
        _deposit_for(
            _tokenId,
            _value,
            0,
            _locked,
            DepositType.DEPOSIT_FOR_TYPE
        );
    }

    /// @notice Deposit `_value` tokens for `_to` and lock for `_lock_duration`
    /// @param _value Amount to deposit
    /// @param _lock_duration Number of seconds to lock tokens for (rounded down to nearest week)
    /// @param _to Address to deposit
    function _create_lock(
        uint _value,
        uint _lock_duration,
        address _to
    ) internal returns (uint) {
        uint unlock_time = ((block.timestamp + _lock_duration) / WEEK) * WEEK; // Locktime is rounded down to weeks

        require(_value > 0); // dev: need non-zero value
        require(
            unlock_time > block.timestamp,
            "Can only lock until time in the future"
        );
        require(
            unlock_time <= block.timestamp + MAXTIME,
            "Voting lock can be 4 years max"
        );

        ++tokenId;
        uint _tokenId = tokenId;
        _mint(_to, _tokenId);

        _deposit_for(
            _tokenId,
            _value,
            unlock_time,
            locked[_tokenId],
            DepositType.CREATE_LOCK_TYPE
        );
        return _tokenId;
    }

    /// @notice Deposit `_value` tokens for `msg.sender` and lock for `_lock_duration`
    /// @param _value Amount to deposit
    /// @param _lock_duration Number of seconds to lock tokens for (rounded down to nearest week)
    function create_lock(
        uint _value,
        uint _lock_duration
    ) external nonreentrant returns (uint) {
        return _create_lock(_value, _lock_duration, msg.sender);
    }

    /// @notice Deposit `_value` tokens for `_to` and lock for `_lock_duration`
    /// @param _value Amount to deposit
    /// @param _lock_duration Number of seconds to lock tokens for (rounded down to nearest week)
    /// @param _to Address to deposit
    function create_lock_for(
        uint _value,
        uint _lock_duration,
        address _to
    ) external nonreentrant returns (uint) {
        return _create_lock(_value, _lock_duration, _to);
    }

    /// @notice Deposit `_value` additional tokens for `_tokenId` without modifying the unlock time
    /// @param _value Amount of tokens to deposit and add to the lock
    function increase_amount(uint _tokenId, uint _value) external nonreentrant {
        assert(_isApprovedOrOwner(msg.sender, _tokenId));

        LockedBalance memory _locked = locked[_tokenId];

        assert(_value > 0); // dev: need non-zero value
        require(_locked.amount > 0, "No existing lock found");
        require(
            _locked.end > block.timestamp,
            "Cannot add to expired lock. Withdraw"
        );

        _deposit_for(
            _tokenId,
            _value,
            0,
            _locked,
            DepositType.INCREASE_LOCK_AMOUNT
        );
    }

    /// @notice Extend the unlock time for `_tokenId`
    /// @param _lock_duration New number of seconds until tokens unlock
    function increase_unlock_time(
        uint _tokenId,
        uint _lock_duration
    ) external nonreentrant {
        assert(_isApprovedOrOwner(msg.sender, _tokenId));

        LockedBalance memory _locked = locked[_tokenId];
        uint unlock_time = ((block.timestamp + _lock_duration) / WEEK) * WEEK; // Locktime is rounded down to weeks

        require(_locked.end > block.timestamp, "Lock expired");
        require(_locked.amount > 0, "Nothing is locked");
        require(unlock_time > _locked.end, "Can only increase lock duration");
        require(
            unlock_time <= block.timestamp + MAXTIME,
            "Voting lock can be 4 years max"
        );

        _deposit_for(
            _tokenId,
            0,
            unlock_time,
            _locked,
            DepositType.INCREASE_UNLOCK_TIME
        );
    }

    /// @notice Withdraw all tokens for `_tokenId`
    /// @dev Only possible if the lock has expired
    function withdraw(uint _tokenId) external nonreentrant {
        assert(_isApprovedOrOwner(msg.sender, _tokenId));
        require(attachments[_tokenId] == 0 && !voted[_tokenId], "attached");

        LockedBalance memory _locked = locked[_tokenId];
        require(block.timestamp >= _locked.end, "The lock didn't expire");
        uint value = uint(int256(_locked.amount));

        locked[_tokenId] = LockedBalance(0, 0);
        uint supply_before = supply;
        supply = supply_before - value;

        // old_locked can have either expired <= timestamp or zero end
        // _locked has only 0 end
        // Both can have >= 0 amount
        _checkpoint(_tokenId, _locked, LockedBalance(0, 0));

        assert(IERC20(token).transfer(msg.sender, value));

        // Burn the NFT
        _burn(_tokenId);

        emit Withdraw(msg.sender, _tokenId, value, block.timestamp);
        emit Supply(supply_before, supply_before - value);
    }

    /*///////////////////////////////////////////////////////////////
                           GAUGE VOTING STORAGE
    //////////////////////////////////////////////////////////////*/

    // The following ERC20/minime-compatible methods are not real balanceOf and supply!
    // They measure the weights for the purpose of voting, so they don't represent
    // real coins.

    /// @notice Binary search to estimate timestamp for block number
    /// @param _block Block to find
    /// @param max_epoch Don't go beyond this epoch
    /// @return Approximate timestamp for block
    function _find_block_epoch(
        uint _block,
        uint max_epoch
    ) internal view returns (uint) {
        // Binary search
        uint _min = 0;
        uint _max = max_epoch;
        for (uint i = 0; i < 128; ++i) {
            // Will be always enough for 128-bit numbers
            if (_min >= _max) {
                break;
            }
            uint _mid = (_min + _max + 1) / 2;
            if (point_history[_mid].blk <= _block) {
                _min = _mid;
            } else {
                _max = _mid - 1;
            }
        }
        return _min;
    }

    /// @notice Get the current voting power for `_tokenId`
    /// @dev Adheres to the ERC20 `balanceOf` interface for Aragon compatibility
    /// @param _tokenId NFT for lock
    /// @param _t Epoch time to return voting power at
    /// @return User voting power
    function _balanceOfNFT(
        uint _tokenId,
        uint _t
    ) internal view returns (uint) {
        uint _epoch = user_point_epoch[_tokenId];
        if (_epoch == 0) {
            return 0;
        } else {
            Point memory last_point = user_point_history[_tokenId][_epoch];
            last_point.bias -=
                last_point.slope *
                int128(int256(_t) - int256(last_point.ts));
            if (last_point.bias < 0) {
                last_point.bias = 0;
            }
            return uint(int256(last_point.bias));
        }
    }

    function balanceOfNFT(uint _tokenId) external view returns (uint) {
        if (ownership_change[_tokenId] == block.number) return 0;
        return _balanceOfNFT(_tokenId, block.timestamp);
    }

    function balanceOfNFTAt(
        uint _tokenId,
        uint _t
    ) external view returns (uint) {
        return _balanceOfNFT(_tokenId, _t);
    }

    /// @notice Measure voting power of `_tokenId` at block height `_block`
    /// @dev Adheres to MiniMe `balanceOfAt` interface: https://github.com/Giveth/minime
    /// @param _tokenId User's wallet NFT
    /// @param _block Block to calculate the voting power at
    /// @return Voting power
    function _balanceOfAtNFT(
        uint _tokenId,
        uint _block
    ) internal view returns (uint) {
        // Copying and pasting totalSupply code because Vyper cannot pass by
        // reference yet
        assert(_block <= block.number);

        // Binary search
        uint _min = 0;
        uint _max = user_point_epoch[_tokenId];
        for (uint i = 0; i < 128; ++i) {
            // Will be always enough for 128-bit numbers
            if (_min >= _max) {
                break;
            }
            uint _mid = (_min + _max + 1) / 2;
            if (user_point_history[_tokenId][_mid].blk <= _block) {
                _min = _mid;
            } else {
                _max = _mid - 1;
            }
        }

        Point memory upoint = user_point_history[_tokenId][_min];

        uint max_epoch = epoch;
        uint _epoch = _find_block_epoch(_block, max_epoch);
        Point memory point_0 = point_history[_epoch];
        uint d_block = 0;
        uint d_t = 0;
        if (_epoch < max_epoch) {
            Point memory point_1 = point_history[_epoch + 1];
            d_block = point_1.blk - point_0.blk;
            d_t = point_1.ts - point_0.ts;
        } else {
            d_block = block.number - point_0.blk;
            d_t = block.timestamp - point_0.ts;
        }
        uint block_time = point_0.ts;
        if (d_block != 0) {
            block_time += (d_t * (_block - point_0.blk)) / d_block;
        }

        upoint.bias -= upoint.slope * int128(int256(block_time - upoint.ts));
        if (upoint.bias >= 0) {
            return uint(uint128(upoint.bias));
        } else {
            return 0;
        }
    }

    function balanceOfAtNFT(
        uint _tokenId,
        uint _block
    ) external view returns (uint) {
        return _balanceOfAtNFT(_tokenId, _block);
    }

    /// @notice Calculate total voting power at some point in the past
    /// @param _block Block to calculate the total voting power at
    /// @return Total voting power at `_block`
    function totalSupplyAt(uint _block) external view returns (uint) {
        assert(_block <= block.number);
        uint _epoch = epoch;
        uint target_epoch = _find_block_epoch(_block, _epoch);

        Point memory point = point_history[target_epoch];
        uint dt = 0;
        if (target_epoch < _epoch) {
            Point memory point_next = point_history[target_epoch + 1];
            if (point.blk != point_next.blk) {
                dt =
                    ((_block - point.blk) * (point_next.ts - point.ts)) /
                    (point_next.blk - point.blk);
            }
        } else {
            if (point.blk != block.number) {
                dt =
                    ((_block - point.blk) * (block.timestamp - point.ts)) /
                    (block.number - point.blk);
            }
        }
        // Now dt contains info on how far are we beyond point
        return _supply_at(point, point.ts + dt);
    }

    /// @notice Calculate total voting power at some point in the past
    /// @param point The point (bias/slope) to start search from
    /// @param t Time to calculate the total voting power at
    /// @return Total voting power at that time
    function _supply_at(
        Point memory point,
        uint t
    ) internal view returns (uint) {
        Point memory last_point = point;
        uint t_i = (last_point.ts / WEEK) * WEEK;
        for (uint i = 0; i < 255; ++i) {
            t_i += WEEK;
            int128 d_slope = 0;
            if (t_i > t) {
                t_i = t;
            } else {
                d_slope = slope_changes[t_i];
            }
            last_point.bias -=
                last_point.slope *
                int128(int256(t_i - last_point.ts));
            if (t_i == t) {
                break;
            }
            last_point.slope += d_slope;
            last_point.ts = t_i;
        }

        if (last_point.bias < 0) {
            last_point.bias = 0;
        }
        return uint(uint128(last_point.bias));
    }

    function totalSupply() external view returns (uint) {
        return totalSupplyAtT(block.timestamp);
    }

    /// @notice Calculate total voting power
    /// @dev Adheres to the ERC20 `totalSupply` interface for Aragon compatibility
    /// @return Total voting power
    function totalSupplyAtT(uint t) public view returns (uint) {
        uint _epoch = epoch;
        Point memory last_point = point_history[_epoch];
        return _supply_at(last_point, t);
    }

    /*///////////////////////////////////////////////////////////////
                            GAUGE VOTING LOGIC
    //////////////////////////////////////////////////////////////*/

    mapping(uint => uint) public attachments;
    mapping(uint => bool) public voted;

    function setVoter(address _voter) external {
        require(msg.sender == voter);
        voter = _voter;
    }

    function voting(uint _tokenId) external {
        require(msg.sender == voter);
        voted[_tokenId] = true;
    }

    function abstain(uint _tokenId) external {
        require(msg.sender == voter);
        voted[_tokenId] = false;
    }

    function attach(uint _tokenId) external {
        require(msg.sender == voter);
        attachments[_tokenId] = attachments[_tokenId] + 1;
    }

    function detach(uint _tokenId) external {
        require(msg.sender == voter);
        attachments[_tokenId] = attachments[_tokenId] - 1;
    }

    function merge(uint _from, uint _to) external {
        require(attachments[_from] == 0 && !voted[_from], "attached");
        require(_from != _to);
        require(_isApprovedOrOwner(msg.sender, _from));
        require(_isApprovedOrOwner(msg.sender, _to));

        LockedBalance memory _locked0 = locked[_from];
        LockedBalance memory _locked1 = locked[_to];
        uint value0 = uint(int256(_locked0.amount));
        uint end = _locked0.end >= _locked1.end ? _locked0.end : _locked1.end;

        locked[_from] = LockedBalance(0, 0);
        _checkpoint(_from, _locked0, LockedBalance(0, 0));
        _burn(_from);
        _deposit_for(_to, value0, end, _locked1, DepositType.MERGE_TYPE);
    }

    /*///////////////////////////////////////////////////////////////
                            DAO VOTING STORAGE
    //////////////////////////////////////////////////////////////*/

    /// @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 each accounts delegate
    mapping(address => address) private _delegates;
    uint public constant MAX_DELEGATES = 1024; // avoid too much gas

    /// @notice A record of delegated token 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 A record of states for signing / validating signatures
    mapping(address => uint) public nonces;

    /**
     * @notice Overrides the standard `Comp.sol` delegates mapping to return
     * the delegator's own address if they haven't delegated.
     * This avoids having to delegate to oneself.
     */
    function delegates(address delegator) public view returns (address) {
        address current = _delegates[delegator];
        return current == address(0) ? delegator : current;
    }

    /**
     * @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 getVotes(address account) external view returns (uint) {
        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }
        uint[] storage _tokenIds = checkpoints[account][nCheckpoints - 1]
            .tokenIds;
        uint votes = 0;
        for (uint i = 0; i < _tokenIds.length; i++) {
            uint tId = _tokenIds[i];
            votes = votes + _balanceOfNFT(tId, block.timestamp);
        }
        return votes;
    }

    function getPastVotesIndex(
        address account,
        uint timestamp
    ) public view returns (uint32) {
        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }
        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].timestamp <= timestamp) {
            return (nCheckpoints - 1);
        }

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

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

    function getPastVotes(
        address account,
        uint timestamp
    ) public view returns (uint) {
        uint32 _checkIndex = getPastVotesIndex(account, timestamp);
        // Sum votes
        uint[] storage _tokenIds = checkpoints[account][_checkIndex].tokenIds;
        uint votes = 0;
        for (uint i = 0; i < _tokenIds.length; i++) {
            uint tId = _tokenIds[i];
            // Use the provided input timestamp here to get the right decay
            votes = votes + _balanceOfNFT(tId, timestamp);
        }
        return votes;
    }

    function getPastTotalSupply(
        uint256 timestamp
    ) external view returns (uint) {
        return totalSupplyAtT(timestamp);
    }

    /*///////////////////////////////////////////////////////////////
                             DAO VOTING LOGIC
    //////////////////////////////////////////////////////////////*/

    function _moveTokenDelegates(
        address srcRep,
        address dstRep,
        uint _tokenId
    ) internal {
        if (srcRep != dstRep && _tokenId > 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint[] storage srcRepOld = srcRepNum > 0
                    ? checkpoints[srcRep][srcRepNum - 1].tokenIds
                    : checkpoints[srcRep][0].tokenIds;
                uint32 nextSrcRepNum = _findWhatCheckpointToWrite(srcRep);
                uint[] storage srcRepNew = checkpoints[srcRep][nextSrcRepNum]
                    .tokenIds;
                // All the same except _tokenId
                for (uint i = 0; i < srcRepOld.length; i++) {
                    uint tId = srcRepOld[i];
                    if (tId != _tokenId) {
                        srcRepNew.push(tId);
                    }
                }

                numCheckpoints[srcRep] = srcRepNum + 1;
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint[] storage dstRepOld = dstRepNum > 0
                    ? checkpoints[dstRep][dstRepNum - 1].tokenIds
                    : checkpoints[dstRep][0].tokenIds;
                uint32 nextDstRepNum = _findWhatCheckpointToWrite(dstRep);
                uint[] storage dstRepNew = checkpoints[dstRep][nextDstRepNum]
                    .tokenIds;
                // All the same plus _tokenId
                require(
                    dstRepOld.length + 1 <= MAX_DELEGATES,
                    "dstRep would have too many tokenIds"
                );
                for (uint i = 0; i < dstRepOld.length; i++) {
                    uint tId = dstRepOld[i];
                    dstRepNew.push(tId);
                }
                dstRepNew.push(_tokenId);

                numCheckpoints[dstRep] = dstRepNum + 1;
            }
        }
    }

    function _findWhatCheckpointToWrite(
        address account
    ) internal view returns (uint32) {
        uint _timestamp = block.timestamp;
        uint32 _nCheckPoints = numCheckpoints[account];

        if (
            _nCheckPoints > 0 &&
            checkpoints[account][_nCheckPoints - 1].timestamp == _timestamp
        ) {
            return _nCheckPoints - 1;
        } else {
            return _nCheckPoints;
        }
    }

    function _moveAllDelegates(
        address owner,
        address srcRep,
        address dstRep
    ) internal {
        // You can only redelegate what you own
        if (srcRep != dstRep) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint[] storage srcRepOld = srcRepNum > 0
                    ? checkpoints[srcRep][srcRepNum - 1].tokenIds
                    : checkpoints[srcRep][0].tokenIds;
                uint32 nextSrcRepNum = _findWhatCheckpointToWrite(srcRep);
                uint[] storage srcRepNew = checkpoints[srcRep][nextSrcRepNum]
                    .tokenIds;
                // All the same except what owner owns
                for (uint i = 0; i < srcRepOld.length; i++) {
                    uint tId = srcRepOld[i];
                    if (idToOwner[tId] != owner) {
                        srcRepNew.push(tId);
                    }
                }

                numCheckpoints[srcRep] = srcRepNum + 1;
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint[] storage dstRepOld = dstRepNum > 0
                    ? checkpoints[dstRep][dstRepNum - 1].tokenIds
                    : checkpoints[dstRep][0].tokenIds;
                uint32 nextDstRepNum = _findWhatCheckpointToWrite(dstRep);
                uint[] storage dstRepNew = checkpoints[dstRep][nextDstRepNum]
                    .tokenIds;
                uint ownerTokenCount = ownerToNFTokenCount[owner];
                require(
                    dstRepOld.length + ownerTokenCount <= MAX_DELEGATES,
                    "dstRep would have too many tokenIds"
                );
                // All the same
                for (uint i = 0; i < dstRepOld.length; i++) {
                    uint tId = dstRepOld[i];
                    dstRepNew.push(tId);
                }
                // Plus all that's owned
                for (uint i = 0; i < ownerTokenCount; i++) {
                    uint tId = ownerToNFTokenIdList[owner][i];
                    dstRepNew.push(tId);
                }

                numCheckpoints[dstRep] = dstRepNum + 1;
            }
        }
    }

    function _delegate(address delegator, address delegatee) internal {
        /// @notice differs from `_delegate()` in `Comp.sol` to use `delegates` override method to simulate auto-delegation
        address currentDelegate = delegates(delegator);

        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);
        _moveAllDelegates(delegator, currentDelegate, delegatee);
    }

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

    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)),
                keccak256(bytes(version)),
                block.chainid,
                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),
            "VotingEscrow::delegateBySig: invalid signature"
        );
        require(
            nonce == nonces[signatory]++,
            "VotingEscrow::delegateBySig: invalid nonce"
        );
        require(
            block.timestamp <= expiry,
            "VotingEscrow::delegateBySig: signature expired"
        );
        return _delegate(signatory, delegatee);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"token_addr","type":"address"},{"internalType":"address","name":"art_proxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"locktime","type":"uint256"},{"indexed":false,"internalType":"enum VotingEscrow.DepositType","name":"deposit_type","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ts","type":"uint256"}],"name":"Withdraw","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":"MAX_DELEGATES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"abstain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"attach","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"attachments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"balanceOfAtNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"balanceOfNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_t","type":"uint256"}],"name":"balanceOfNFTAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"block_number","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_lock_duration","type":"uint256"}],"name":"create_lock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_lock_duration","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"create_lock_for","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"deposit_for","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"detach","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getPastTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getPastVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"getPastVotesIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"get_last_user_slope","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increase_amount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_lock_duration","type":"uint256"}],"name":"increase_unlock_time","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"locked","outputs":[{"internalType":"int128","name":"amount","type":"int128"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"locked__end","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"merge","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownership_change","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"point_history","outputs":[{"internalType":"int128","name":"bias","type":"int128"},{"internalType":"int128","name":"slope","type":"int128"},{"internalType":"uint256","name":"ts","type":"uint256"},{"internalType":"uint256","name":"blk","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"setArtProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"}],"name":"setTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"setVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"slope_changes","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_tokenIndex","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","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":"uint256","name":"_block","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"t","type":"uint256"}],"name":"totalSupplyAtT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"user_point_epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"user_point_history","outputs":[{"internalType":"int128","name":"bias","type":"int128"},{"internalType":"int128","name":"slope","type":"int128"},{"internalType":"uint256","name":"ts","type":"uint256"},{"internalType":"uint256","name":"blk","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_idx","type":"uint256"}],"name":"user_point_history__ts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"voted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"voting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

9c4d535b0000000000000000000000000000000000000000000000000000000000000000010009c19f851ecbd6ddf860c94628625ddc70d855e745e1575922fe1a679ae700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000040000000000000000000000000129c6e2d8619b3f20504dbb7188602300f4c7e160000000000000000000000007988bee87c5ae88d45a85a40e231c685548eaf09

Deployed Bytecode

0x0004000000000002000600000000000200000000030100190000006003300270000009220430019700030000004103550002000000010355000009220030019d000100000000001f00000001012001900000000c0000c13d2481017a0000040f0000000001000416000000000110004c000000cd0000c13d0000000001000031000000bf02100039000000200300008a000000000232016f0000009f0320008c0000001c0000213d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f000000400020043f0000001f0210018f000000020300036700000005041002720000002a0000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000000220000413d000000000520004c000000390000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f00000000002404350000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c000000cd0000c13d000000a00200043d000009240120009c000000cd0000213d000000c00100043d000009240310009c000000cd0000213d0000000603000039000000000403041a000001000500008a000500000005001d000000000454016f00000001044001bf000000000043041b000000800020043f000000000200041a00000925022001970000000003000411000000000232019f000000000020041b0000000104000039000000000204041a0000092502200197000000000232019f000100000004001d000000000024041b0000000202000039000000000302041a0000092503300197000000000113019f000000000012041b00000000000004350000000301000039000000200010043f0000004002000039000600000002001d00000000010000192481013e0000040f00000926020000410000000000200439000200000001001d0000800b01000039000300000001001d0000000402000039000400000002001d248101550000040f00000002020000290000000202200039000000000012041b000000000100001900000006020000292481013e0000040f00000927020000410000000000200439000200000001001d00000003010000290000000402000029248101550000040f00000002020000290000000102200039000000000012041b000009280100004100000000001004350000000401000029000000200010043f000000000100001900000006020000292481013e0000040f000000000201041a0000000503000029000000000232016f00000001022001bf000000000021041b00000929010000410000000000100435000000000100001900000006020000292481013e0000040f000000000201041a0000000503000029000000000232016f00000001022001bf000000000021041b0000092a010000410000000000100435000000000100001900000006020000292481013e0000040f000000000201041a0000000503000029000000000232016f00000001022001bf000000000021041b0000000501000039000000000701041a00000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d020000390000092c04000041000000000600041000000004030000290000000005000019000500000006001d000600000007001d248124770000040f0000000101200190000000cd0000613d00000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d0200003900000004030000390000092c04000041000000050500002900000000060000190000000607000029248124770000040f0000000101200190000000cd0000613d000000800100043d000001400000044300000160001004430000002001000039000001000010044300000001010000290000012000100443000001000100003900000080020000390000092d03000041248101670000040f00000000010000190000000002000019248101710000040f0002000000000002000200000006001d000100000005001d0000092205000041000009220630009c00000000030580190000004003300210000009220640009c00000000040580190000006004400210000000000334019f000009220410009c0000000001058019000000c001100210000000000113019f248124770000040f00000001090000290000000003010019000000600330027000000922033001970000000205000029000000000453004b00000000050340190000001f0450018f0000000505500272000000f30000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000000eb0000413d000000010220018f000000000640004c000001030000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000001020019000000000001042d0002000000000002000200000006001d000100000005001d0000092205000041000009220630009c00000000030580190000004003300210000009220640009c00000000040580190000006004400210000000000334019f000009220410009c0000000001058019000000c001100210000000000113019f2481247c0000040f00000001090000290000000003010019000000600330027000000922033001970000000205000029000000000453004b00000000050340190000001f0450018f00000005055002720000012a0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000001220000413d000000010220018f000000000640004c0000013a0000613d0000000505500210000000000651034f00000000055900190000000304400210000000000705043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f0000000000450435000100000003001f00030000000103550000000001020019000000000001042d0000092203000041000009220410009c00000000010380190000004001100210000009220420009c00000000020380190000006002200210000000000112019f0000000002000414000009220420009c0000000002038019000000c002200210000000000112019f0000092b011001c700008010020000392481247c0000040f0000000102200190000001520000613d000000000101043b000000000001042d00000000010000190000000002000019248101710000040f000000000301001900000922010000410000000004000414000009220540009c0000000001044019000000c001100210000000600220021000000000011200190000092f0110004100000000020300192481247c0000040f0000000102200190000001640000613d000000000101043b000000000001042d00000000010000190000000002000019248101710000040f0000092204000041000009220510009c000000000104801900000040011002100000000001310019000009220320009c000000000204801900000060022002100000000001210019000024820001042e0000092203000041000009220420009c0000000002038019000009220410009c000000000103801900000040011002100000006002200210000000000112019f0000248300010430000d0000000000020000008005000039000000400050043f0000000001000031000000040110008c00000e940000413d0000000201000367000000000101043b000000e001100270000009300210009c000002370000613d000009310210009c0000025f0000613d000009320210009c000002360000613d000009330210009c000002770000613d000009340210009c000002930000613d000009350210009c000002b40000613d000009360210009c000002d70000613d000009370210009c0000033c0000613d000009380210009c0000035c0000613d000009390210009c0000039e0000613d0000093a0210009c000003bb0000613d0000093b0210009c000003e00000613d0000093c0210009c000003f70000613d0000093d0210009c000004020000613d0000093e0210009c000004200000613d0000093f0210009c000004810000613d000009400210009c000004a60000613d000009410210009c000004ce0000613d000009420210009c000004e50000613d000009430210009c000005320000613d000009440210009c000005420000613d000009450210009c000005600000613d000009460210009c0000059a0000613d000009470210009c000005b20000613d000009480210009c000005d40000613d000009490210009c000005f10000613d0000094a0210009c0000060a0000613d0000094b0210009c000006230000613d0000094c0210009c000006410000613d0000094d0210009c000006580000613d0000094e0210009c000006790000613d0000094f0210009c000006a90000613d000009500210009c000006c90000613d000009510210009c000006e90000613d000009520210009c000002350000613d000009530210009c000007080000613d000009540210009c0000072d0000613d000009550210009c0000074c0000613d000009560210009c000007650000613d000009570210009c000002350000613d000009580210009c000007820000613d000009590210009c000007a50000613d0000095a0210009c000002360000613d0000095b0210009c000007bd0000613d0000095c0210009c000007e00000613d0000095d0210009c000008140000613d0000095e0210009c0000082d0000613d0000095f0210009c000008a40000613d000009600210009c000008f30000613d000009610210009c000009830000613d000009620210009c000009ad0000613d000009630210009c00000a190000613d000009640210009c00000a400000613d000009650210009c00000b520000613d000009660210009c00000c030000613d000009670210009c00000c2f0000613d000009680210009c00000ca20000613d000009690210009c00000cd90000613d0000096a0210009c00000d0d0000613d0000096b0210009c00000d2a0000613d0000096c0210009c00000d4a0000613d0000096d0210009c00000d610000613d0000096e0210009c00000d7c0000613d0000096f0210009c00000da40000613d000009700210009c00000e0c0000613d000009710210009c00000e350000613d000009720210009c00000e560000613d000009730210009c00000e830000613d000009740110009c00000e940000c13d0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000000100041a00000924011001970000000002000411000000000112004b00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000001501000039000000200010043f000000400200003900000000010000192481013e0000040f000001000200008a000000000301041a000000000223016f00000001022001bf000000000021041b000000000100001900000000020000190000000003000019248101670000040f248111be0000040f2481111f0000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d0000000401000039000d00000001001d0000000201100367000000000101043b000c00000001001d248110d30000040f0000000c01000029000009960110019700000000001004350000000d01000029000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000ff011001900000000002000019000000010200c039000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d0000001301000039000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f00000024020000390000000202200367000000000202043b248122400000040f0000092202100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000000901000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092402100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b000009240210009c00000e940000213d0000000102000039000000000302041a00000924043001970000000005000411000000000445004b00000e940000c13d0000092503300197000000000113019f000000000012041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000000402100370000000000202043b000d00000002001d000009240220009c00000e940000213d0000002401100370000000000101043b000b00000001001d00000000001004350000000701000039000a00000001001d000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092401100198000c00000001001d00000e940000613d0000000d010000290000000c02000029000000000121004b00000e940000613d0000000b0100002900000000001004350000000a01000029000000200010043f0000004002000039000a00000002001d00000000010000192481013e0000040f000000000101041a000900000001001d0000000c0100002900000000001004350000000a01000039000000200010043f00000000010000190000000a020000292481013e0000040f0000000002000411000800000002001d00000924022001970000000000200435000000200010043f00000000010000190000000a020000292481013e0000040f000000090200002900000924022001970000000803000029000000000232004b000003210000613d000000000101041a000000ff0110019000000e940000613d0000000b0100002900000000001004350000000901000039000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a00000925022001970000000d06000029000000000262019f000000000021041b00000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d02000039000000040300003900000995040000410000000c050000290000000b07000029248124770000040f000000010120019000000e940000613d000008ef0000013d0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000001401000039000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000002402100370000000000202043b000c00000002001d0000000401100370000000000101043b00000000001004350000000f01000039000000200010043f00000040020000390000000001000019000d00000005001d2481013e0000040f0000000d030000290000000c040000290000000002040019000009940440009c00000e940000213d248111600000040f000000000201041a00000977032001980000097803000041000000000403001900000000040060190000092303200197000000010500008a000009230330009c0000000003000019000000000305601900000080033002100000008005200270000000000335019f0000000d05000029000000000550004c00000000030260190000097902200197000000000224019f0000000204100039000000000504041a0000000101100039000000000401041a000000400100043d000d00000001001d2481116d0000040f0000000d03000029000000000231004900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000009270100004100000000001004390000800b010000390000000402000039248101550000040f248121bd0000040f000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000000f01000039000000200010043f000000400200003900000000010000192481013e0000040f00000024020000390000000202200367000000000202043b248111600000040f0000000101100039000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000400100043d0000098002000041000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d0000000001000031248111810000040f0000000004000411248112500000040f000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000400100043d000d00000001001d000009260100004100000000001004390000800b010000390000000402000039248101550000040f0000000d030000290000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b000d00000001001d0000000601000039000c00000001001d000000000101041a000000ff0210018f000000010220008c00000e940000c13d000001000200008a000900000002001d000000000121016f00000002011001bf0000000c02000029000000000012041b0000000001000411000a00000001001d0000000d020000292481120c0000040f000000000110004c000007d90000613d0000000d0100002900000000001004350000001401000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000000110004c00000000010000190000045d0000c13d0000000d0100002900000000001004350000001501000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000ff0110019000000000010000190000000101006039000000010110018f2481123f0000040f0000000d0100002900000000001004350000001001000039000800000001001d000000200010043f000000400200003900000000010000192481013e0000040f248111e90000040f00000927020000410000000000200439000b00000001001d0000800b010000390000000402000039248101550000040f0000000b0400002900000020024000390000000002020433000000000121004b00000fc60000813d000000400100043d0000004402100039000009930300004100000000003204350000002402100039000000160300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b000009240210009c00000e940000213d0000000102000039000000000202041a00000924022001970000000003000411000000000223004b00000e940000c13d0000000202000039000000000302041a0000092503300197000000000113019f000000000012041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f000009240110019700000000001004350000000c01000039000000200010043f0000004002000039000d00000002001d00000000010000192481013e0000040f00000024020000390000000202200367000000000202043b0000000000200435000000200010043f00000000010000190000000d020000292481013e0000040f000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000400100043d0000001202000039000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000000402100370000000000202043b0000000003020019000009240220009c00000e940000213d0000002401100370000000000201043b0000000001030019000d00000001001d000a00000002001d248122400000040f0000000d0200002900000000002004350000001702000039000000200020043f000c00000001001d0000004002000039000d00000002001d00000000010000192481013e0000040f0000000c0200002900000922022001970000000000200435000000200010043f00000000010000190000000d020000292481013e0000040f0000000101100039000900000001001d000000000101041a000b00000001001d000000000300001900000000020000190000000b01000029000000000112004b00000f990000813d000d00000003001d0000000901000029000c00000002001d248121d90000040f0000000303200210000000ff0230008c0000000002000019000005250000213d000000000101041a000000000231022f00000000010200190000000a0200002924811f7c0000040f0000000c0200002900000001022000390000000d030000290000000003310019000000000113004b000000000100001900000001010040390000000101100190000005180000613d00000e7c0000013d0000000001000416000000000110004c00000e940000c13d0000000001000031248111810000040f000000400400043d0000098a0540009c00000fce0000213d0000002005400039000000400050043f0000000000040435248113cc0000040f000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f00000024020000390000000202200367000000000202043b2481120c0000040f000000000110004c0000000002000019000000010200c039000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000000e01000039000000200010043f0000004002000039000b00000002001d0000000001000019000d00000005001d2481013e0000040f000000000101041a000c00000001001d0000000f01000039000000200010043f00000000010000190000000b020000292481013e0000040f0000000c02000029248111600000040f000000010200008a000000000101041a0000092303100197000009230330009c000000000200c01900000080022002100000008003100270000000000223019f0000000d03000029000000000330004c000000000102c0190000097802000041000009770310019800000000020060190000097901100197000000000212019f000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000000100041a0000092402100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b000009240210009c00000e940000213d000000000200041a00000924032001970000000004000411000000000334004b00000e940000c13d0000092502200197000000000112019f000000000010041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d2481119d0000040f0000002002000039000000400300043d000d00000003001d00000000002304350000002002300039248111050000040f0000000d03000029000000000231004900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d0000000201000039000000000101041a0000092402100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f248121cb0000040f0000092402100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000201043b000009240120009c00000e940000213d0000000001000411000000000320004c0000000002016019248123050000040f000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000400100043d0000040002000039000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000000701000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092402100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000006010000390000000003010019000000000101041a000000ff0210018f000000010220008c00000e940000c13d000001000200008a000d00000002001d000000000121016f00000002011001bf000c00000003001d000000000013041b00000002010003670000002402100370000000000202043b0000000401100370000000000101043b000000000300041124811c790000040f0000000c04000029000000000204041a0000000d03000029000000000232016f00000001022001bf000000000024041b000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000000b01000039000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f000009240110019700000000001004350000001801000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092202100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f000009240110019700000000001004350000000801000039000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000001201000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000097802000041000009770310019800000000020060190000097901100197000000000212019f000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f000009240110019700000000001004350000001901000039000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d0000000101000039000000000101041a0000092402100197000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000002402100370000000000202043b0000000401100370000000000101043b248120150000040f000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000001501000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000ff011001900000000002000019000000010200c039000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d0000001101000039000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004020000390000000201200367000000000101043b000d00000001001d000009260100004100000000001004390000800b01000039248101550000040f0000000d03000029000000000113004b00000ea70000a13d0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b000d00000001001d000000000100041a00000924011001970000000002000411000000000112004b00000e940000c13d0000000d0100002900000000001004350000001401000039000c00000001001d000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000000120004c00000e7c0000613d0000000d0100002900000000001004350000000c01000029000000200010043f000d00000002001d000000400200003900000000010000192481013e0000040f0000000d02000029000000010220008a000000000021041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f248121ed0000040f000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000006010000390000000004010019000000000101041a000000ff0210018f000000010220008c00000e940000c13d000001000200008a000a00000002001d000000000121016f00000002011001bf00000002020003670000002403200370000000000303043b000c00000003001d0000000402200370000000000202043b000b00000002001d000900000004001d000000000014041b00000000010004112481120c0000040f248112020000040f0000000b0100002900000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f000800000001001d000000400100043d000d00000001001d248110da0000040f0000097803000041000700000003001d0000000804000029000000000104041a0000097702100198000000000203001900000000020060190000097901100197000000000112019f0000000d0200002900000000001204350000000101400039000000000101041a0000002002200039000800000002001d00000000001204350000000c01000029000000000110004c0000000001000019000000010100c039248112020000040f0000000d0100002900000000010104330000097702100198000000070200002900000000020060190000097901100197000000000112019f0000092302000041000000000310004c000000000300001900000000030220190000092301100197000000000410004c0000000002008019000009230110009c00000000010300190000000001026019000000000110004c0000000001000019000000010100c0392481190c0000040f00000008010000290000000001010433000800000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000802000029000000000112004b000000000100001900000001010020392481191d0000040f0000000b010000290000000c020000290000000d030000292481194c0000040f0000000903000029000000000103041a0000000a02000029000000000121016f00000001011001bf000000000013041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000000402100370000000000202043b0000000003020019000009240220009c00000e940000213d0000002401100370000000000201043b000000000120004c0000000001000019000000010100c039000d00000002001d000000000112004b00000e940000c13d0000000004000411000000000143004b000007d90000613d00000000004004350000000a01000039000000200010043f0000004002000039000a00000002001d0000000001000019000c00000003001d000b00000004001d2481013e0000040f0000000c020000290000000000200435000000200010043f00000000010000190000000a020000292481013e0000040f000001000200008a000000000301041a000000000223016f0000000d03000029000000000232019f000000000021041b000000400100043d000000000031043500000922020000410000000003000414000009220430009c0000000003028019000009220410009c00000000010280190000004001100210000000c002300210000000000112019f00000988011001c70000800d02000039000000030300003900000989040000410000000b050000290000000c06000029248124770000040f000000010120019000000e940000613d000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000006010000390000000003010019000000000101041a000000ff0210018f000000010220008c00000e940000c13d000001000200008a000600000002001d000000000121016f00000002011001bf0000000402000039000d00000002001d0000000202200367000000000202043b000a00000002001d000500000003001d000000000013041b00000000010004112481120c0000040f248112020000040f0000000a0100002900000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f000b00000001001d000000400100043d000c00000001001d248110da0000040f0000097803000041000400000003001d0000000b04000029000000000104041a0000097702100198000000000203001900000000020060190000097901100197000000000112019f0000000c0200002900000000001204350000000101400039000000000101041a0000002002200039000700000002001d00000000001204350000092701000041000900000001001d00000000001004390000800b01000039000800000001001d0000000d02000029248101550000040f00000024020000390000000202200367000000000202043b248114790000040f000009862110012a248115cd0000040f00000007020000290000000002020433000300000002001d00000009020000290000000000200439000b00000001001d00000008010000290000000d02000029248101550000040f0000000302000029000000000112004b0000000001000019000000010100203924811e5d0000040f0000000c0100002900000000010104330000097702100198000000040200002900000000020060190000097901100197000000000112019f0000092302000041000000000310004c000000000300001900000000030220190000092301100197000000000410004c0000000002008019000009230110009c00000000010300190000000001026019000000000110004c0000000001000019000000010100c03924811e6e0000040f000000070100002900000000010104330000000b02000029000000000112004b0000000001000019000000010100203924811e7f0000040f0000000901000029000000000010043900000008010000290000000d02000029248101550000040f2481146e0000040f0000000b02000029000000000112004b0000000001000019000000010100a03924811c680000040f0000000a010000290000000b020000290000000c0300002924811a4f0000040f0000000503000029000000000103041a0000000602000029000000000121016f00000001011001bf000000000013041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000001001000039000000200010043f0000004002000039000d00000002001d00000000010000192481013e0000040f000000000201041a0000000101100039000000000301041a000000400100043d000000200410003900000000003404350000097803000041000009770420019800000000030060190000097902200197000000000223019f00000000002104350000000d020000290000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d0000000003000031000000040130008a0000092302000041000000800410008c000000000400001900000000040240190000092301100197000000000510004c000000000200a019000009230110009c00000000010400190000000001026019000000000110004c00000e940000c13d00000002040003670000000401400370000000000101043b000009240210009c00000e940000213d0000002402400370000000000202043b000009240520009c00000e940000213d0000006405400370000000000505043b0000097c0650009c00000e940000213d00000023065000390000092307000041000000000836004b0000000008000019000000000807801900000923033001970000092306600197000000000936004b0000000007008019000000000336013f000009230330009c00000000030800190000000003076019000000000330004c00000e940000c13d0000000403500039000000000334034f000000000303043b0000097c0430009c00000fce0000213d0000003f04300039000000200600008a000000000664016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000097c0860009c00000fce0000213d000000010770019000000fce0000c13d000000400060043f0000000000340435000000240550003900000000065300190000000007000031000000000676004b00000e940000213d0000001f0630018f00000002075003670000002005400039000000050830027200000a000000613d0000000009000019000000050a900210000000000ba50019000000000aa7034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000009f80000413d000000000960004c00000a0f0000613d0000000508800210000000000787034f00000000088500190000000306600210000000000908043300000000096901cf000000000969022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000696019f00000000006804350000000003350019000000000003043500000044030000390000000203300367000000000303043b248113cc0000040f000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000000100041a00000924011001970000000002000411000000000112004b00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000001501000039000000200010043f000000400200003900000000010000192481013e0000040f000001000200008a000000000301041a000000000223016f000000000021041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000400100043d000009760210009c00000fce0000213d0000004002100039000000400020043f000000200210003900000000000204350000000000010435000000400100043d000009760210009c00000fce0000213d0000004002100039000000400020043f0000002002100039000000000002043500000000000104352481156f0000040f2481156f0000040f0000001103000039000000000403041a000000400100043d000c00000001001d000009840110009c00000fce0000213d000100000003001d0000000c030000290000008001300039000000400010043f000000200130003900000000000104350000000000030435000009270100004100000000001004390000800b01000039000d00000001001d0000000402000039000b00000002001d000900000004001d248101550000040f0000000c020000290000004002200039000300000002001d0000000000120435000009260100004100000000001004390000000d010000290000000b02000029248101550000040f0000000c02000029000000600220003900000000001204350000000901000029000000000110004c00000a920000613d000000090100002900000000001004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f2481159e0000040f000c00000001001d0000004001100039000300000001001d0000000301000029000300000001001d0000000001010433000a00000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000a06000029000000000161004b0000000c01000029000c00000001001d0000006001100039000200000001001d00000abc0000a13d000009260100004100000000001004390000800b010000390000000402000039248101550000040f00000002020000290000000002020433000000000321004b00000e7c0000413d000000000121004900000985321000d1000009853220012a000000000112004b00000e7c0000c13d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000a0600002900000003020000290000000002020433000000000321004b00000e7c0000413d000000000121004b00000ff90000613d000009862160012a00000000052600490000000c010000290000002001100039000b00000001001d0000800b0200003900000004030000390000000004000019000800000002001d000700000003001d000000fe0140008c000010bf0000213d000500000004001d000009870150009c00000e7c0000213d000a00000006001d0000092701000041000000000010043900000008010000290000000702000029000d00000005001d248101550000040f0000000d030000290000098603300041000000000113004b00000ade0000a13d0000092701000041000000000010043900000008010000290000000702000029248101550000040f0000000004010019000600000000001d00000aed0000013d00000000003004350000001201000039000000200010043f00000040020000390000000001000019000d00000003001d2481013e0000040f0000000d04000029000000000101041a0000097802000041000009770310019800000000020060190000097901100197000000000112019f000600000001001d0000000a02000029000000000124004b00000e7c0000413d000d00000004001d000000000124004900000977021001980000097804000041000a00000004001d000000000204001900000000020060190000097901100197000000000212019f0000000b0100002900000000010104330000097703100198000000000304001900000000030060190000097901100197000000000113019f0000000c030000290000000003030433000400000003001d248115830000040f000000040300002900000977023001980000000a0200002900000000020060190000097903300197000000000232019f000000000301001900000000010200190000000002030019248115e80000040f00000977021001980000000a03000029000000000203001900000000020060190000097901100197000000000112019f0000000c0200002900000000001204350000000b0100002900000000010104330000097702100198000000000203001900000000020060190000097901100197000000000112019f0000000602000029248115fe0000040f0000000c0300002900000977021001980000000a0200002900000000020060190000097901100197000000000112019f0000000b0200002900000000001204350000000002030433000009770220019800000b2d0000613d00000000000304350000000b01000029000000000101043300000977011001980000000902000029000000030100002900000b330000613d0000000b0300002900000000000304350000000d030000290000000000310435000000010100008a000000000112004b00000e7c0000613d000009270100004100000000001004390000800b010000390000000402000039248101550000040f000000090200002900000001022000390000000d03000029000000000113004b000900000002001d000010b80000613d00000000002004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f0000000c02000029248116140000040f000000050400002900000001044000390000000d0500002900000000060500190000000802000029000000070300002900000ac60000013d0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000c00310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000000402100370000000000202043b000c00000002001d000009240220009c00000e940000213d0000004402100370000000000202043b000b00000002001d0000002402100370000000000202043b000a00000002001d0000006401100370000000000101043b000900000001001d000000ff0110008c00000e940000213d000d00000005001d248110f30000040f000000000201043300000020011000392481013e0000040f000800000001001d2481119d0000040f000000000201043300000020011000392481013e0000040f0000097f02000041000000400300043d000600000003001d0000000000200439000700000001001d0000800b010000390000000402000039248101550000040f000000000200041000000924022001970000000604000029000000a0034000390000000000230435000000000304001900000060023000390000000704000029000000000042043500000040023000390000000804000029000000000042043500000080023000390000000000120435000009800200004100000020013000390000000000210435000000a0020000390000000000230435000009810230009c00000fce0000213d000000c002300039000000400020043f00000000020304332481013e0000040f000000400200043d00000040032000390000000c04000029000000000043043500000060032000390000000a04000029000000000043043500000080032000390000000b0400002900000000004304350000000d0300002900000000003204350000097a0400004100000020032000390000000000430435000d00000001001d000009820120009c00000fce0000213d000000a001200039000000400010043f000000000202043300000000010300192481013e0000040f000000400200043d0000004203200039000000000013043500000983030000410000002001200039000000000031043500000022032000390000000d04000029000000000043043500000042030000390000000000320435000009840320009c00000fce0000213d0000008003200039000000400030043f00000000020204332481013e0000040f00000002020003670000008403200370000000000403043b000000a402200370000000000202043b000000400300043d00000060053000390000000000250435000000400230003900000000004204350000002002300039000000090400002900000000004204350000000000130435000000000000043500000000010004140000000102000039000000800400003900000020060000390000000005000019248101070000040f000000000110004c00000f190000613d0000000001000433000d00000001001d00000924011001980000000001000019000000010100c0392481243b0000040f0000000d01000029248111af0000040f000900000001001d000000000101041a000800000001001d248115dc0000040f0000000902000029000000000012041b0000000a010000290000000802000029000000000121004b000000000100001900000001010060392481244f0000040f000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000b02000029000000000121004b0000000001000019000000010100a039248124630000040f0000000d010000290000000c02000029248123050000040f000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b000d00000001001d00000000001004350000000701000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000009240110019800000ee20000c13d000000400100043d00000044021000390000097d03000041000000000032043500000024021000390000001b0300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000002402100370000000000202043b000c00000002001d0000000401100370000000000101043b000d00000001001d00000000001004350000001401000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000000110004c000000000100001900000c5c0000c13d0000000d0100002900000000001004350000001501000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000ff0110019000000000010000190000000101006039000000010110018f2481123f0000040f0000000c010000290000000d02000029000000000112004b0000000001000019000000010100c039248111e30000040f0000000001000411000b00000001001d0000000d020000292481120c0000040f248111e30000040f0000000b010000290000000c020000292481120c0000040f248111e30000040f0000000d01000029248111520000040f248111e90000040f000b00000001001d0000000c01000029248111520000040f248111e90000040f0000000b0300002900000020023000390000000002020433000900000002001d000a00000001001d00000020021000390000000001020433000800000001001d0000000001030433000700000001001d248110e60000040f000600000001001d0000002002100039000000000002043500000000000104350000000d01000029248111520000040f0000000602000029248119410000040f248110e60000040f00000000030100190000002001300039000000000001043500000000000304350000000d010000290000000b020000292481162a0000040f0000000d0100002924811e900000040f00000978010000410000000703000029000009770230019800000000010060190000097902300197000000000221019f00000009030000290000000804000029000000000143004b000000000304a0190000000c010000290000000a0400002924811acd0000040f000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000000301000039000000200010043f00000040020000390000000001000019000d00000005001d2481013e0000040f0000097802000041000000000401041a00000977034001980000000002006019000000010300008a0000092305400197000009230550009c000000000300c01900000080033002100000008005400270000000000335019f0000000d05000029000000000550004c00000000030460190000097904400197000000000242019f0000000204100039000000000504041a0000000101100039000000000401041a000000400100043d000d00000001001d2481116d0000040f0000000d03000029000000000231004900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000600310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000044010000390000000201100367000000000301043b000009240130009c00000e940000213d00000006010000390000000004010019000000000101041a000000ff0210018f000000010220008c00000e940000c13d000001000200008a000d00000002001d000000000121016f00000002011001bf000c00000004001d000000000014041b00000002010003670000002402100370000000000202043b0000000401100370000000000101043b24811c790000040f0000000c04000029000000000204041a0000000d03000029000000000232016f00000001022001bf000000000024041b000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000002402100370000000000202043b0000000401100370000000000101043b24811f7c0000040f000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000000e01000039000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d000000400100043d0000097a02000041000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b24811ff90000040f000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d248111400000040f000d00000001001d248111490000040f0000000d02000029000009240220019700000000002004350000000a02000039000000200020043f000d00000001001d000000400200003900000000010000192481013e0000040f0000000d02000029248111b70000040f000000000101041a000000ff011001900000000002000019000000010200c039000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002010003670000002402100370000000000202043b000b00000002001d0000000401100370000000000101043b000c00000001001d0000000601000039000d00000001001d000000000101041a000000ff0210018f000000010220008c00000e940000c13d000001000200008a000a00000002001d000000000121016f00000002011001bf0000000d02000029000000000012041b0000000c0100002900000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f000000400400043d000009760240009c00000fce0000213d0000004002400039000000400020043f000000000201041a0000097703200198000009780300004100000000030060190000097902200197000000000223019f0000000000240435000900000004001d00000020034000390000000101100039000000000101041a000800000003001d00000000001304350000000b01000029000000000110004c00000e940000613d0000092301000041000000000320004c000000000300001900000000030120190000092302200197000000000420004c0000000001008019000009230220009c000000000103c019000000000110004c0000000001000019000000010100c0392481190c0000040f00000008010000290000000001010433000800000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000802000029000000000112004b000000000100001900000001010020392481191d0000040f0000000c010000290000000b02000029000000090300002924811b660000040f0000000d02000029000000000102041a0000000a03000029000000000131016f00000001011001bf000000000012041b000000000100001900000000020000190000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000400310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000002020003670000000401200370000000000101043b000009240310009c00000e940000213d0000002402200370000000000202043b000d00000002001d000009220220009c00000e940000213d00000000001004350000001701000039000000200010043f000000400200003900000000010000192481013e0000040f0000000d02000029248111dc0000040f000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b00000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f0000000101100039000000000201041a000000400100043d000000000021043500000020020000390000000003000019248101670000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e940000c13d00000004010000390000000201100367000000000101043b000d00000001001d000000000100041a00000924011001970000000002000411000000000112004b00000e940000c13d0000000d0100002900000000001004350000001401000039000c00000001001d000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000010100008a000000000112004b00000f9e0000c13d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000000001000416000000000110004c00000e940000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c00000e970000613d00000000010000190000000002000019248101710000040f000000400100043d000d00000001001d0000097501000041000000000010043900000000010004120000000400100443000000240000044300008005010000390000004402000039248101550000040f00000924021001970000000d01000029000000000021043500000020020000390000000003000019248101670000040f0000001101000039000000000201041a000b00000002001d0000000001030019248121070000040f000a00000001001d00000000001004350000000301000039000900000001001d000000200010043f000000400200003900000000010000192481013e0000040f2481159e0000040f0000000a0300002900000000020100190000000b01000029000000000113004b0000004001200039000b00000001001d000c00000002001d00000fad0000813d000000010130003900000000001004350000000901000029000000200010043f000000400200003900000000010000192481013e0000040f2481159e0000040f0000000c0200002900000060022000390000000004020433000000000301001900000060013000390000000001010433000000000241004b000000000200001900000fba0000613d0000000c020000290000000d06000029000000000246004b00000e7c0000413d0000000b02000029000000000202043300000040033000390000000005030433000000000325004b00000e7c0000413d0000000003460049000000000225004900000000573200a9000800000007001d000000000546004b000010ad0000c13d0000000d04000029000000000241004b00000e7c0000413d000010b30000013d0000000d0100002900000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f248111e90000040f000b00000001001d0000000201000039000000000101041a000c00000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f00000000020100190000000d0100002924811f7c0000040f0000000b030000290000002002300039000000000603043300000000040204330000097b02000041000000400300043d000000000023043500000000020100190000004405300039000000000100041400000000004504350000002404300039000000000024043500000004023000390000000d0400002900000000004204350000097802000041000009770460019800000000020060190000097904600197000000000242019f000000640430003900000000002404350000000c020000290000092402200197000000040420008c00000f390000613d000000840400003900000000050300190000000006000019000d00000003001d248101070000040f0000000d03000029000000000110004c00000f390000c13d0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200000f280000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00000f200000413d000000000530004c00000f370000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f00000000002404350000000102000031248101710000040f000000030200036700000001010000310000001f0810018f000000050410027200000f470000613d000000000500001900000005065002100000000007630019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00000f3f0000413d000000000580004c00000f560000613d0000000504400210000000000242034f00000000044300190000000306800210000000000504043300000000056501cf000000000565022f000000000202043b0000010006600089000000000262022f00000000026201cf000000000252019f00000000002404350000001f02100039000000200a00008a0000000004a2016f0000000002340019000000000442004b000000000400001900000001040040390000097c0520009c00000fce0000213d000000010440019000000fce0000c13d0000092304000041000000200510008c000000000500001900000000050440190000092306100197000000000760004c000000000400a019000009230660009c000000000405c019000000400020043f000000000440004c00000e940000c13d00000000050304330000097c0450009c00000e940000213d000000000431001900000000053500190000001f015000390000092306000041000000000741004b0000000007000019000000000706801900000923011001970000092308400197000000000981004b0000000006008019000000000181013f000009230110009c00000000010700190000000001066019000000000110004c00000e940000c13d00000000010504330000097c0610009c00000fce0000213d0000003f061000390000000003a6016f00000000032300190000097c0630009c00000fce0000213d000000400030043f000000000012043500000020035000390000000005310019000000000445004b00000e940000213d00000020042000390000000005000019000000000615004b000010c90000813d0000000006450019000000000735001900000000070704330000000000760435000000200550003900000f910000013d000000400100043d000000000031043500000020020000390000000003000019248101670000040f0000000d0100002900000000001004350000000c01000029000000200010043f000d00000002001d000000400200003900000000010000192481013e0000040f0000000d020000290000000102200039000000000021041b000000000100001900000000020000190000000003000019248101670000040f0000006001200039000900000001001d0000000001010433000a00000001001d000009260100004100000000001004390000800b010000390000000402000039248101550000040f0000000a03000029000000000113004b000000000200001900000fd50000c13d0000000b010000290000000001010433248114790000040f00000000020100190000000c01000029248121430000040f000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f00000000020404330000097701200198000009780100004100000000010060190000097902200197000000400500043d0000098b0350009c000010000000413d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f0000000c010000290000000d01000029000000000131004b00000e7c0000413d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000d040000290000000b020000290000000003020433000000000231004b00000e7c0000413d0000000a060000290000000002640049000000000131004900000000352100a9000800000005001d000000000364004b00000fee0000613d000000080300002900000000322300d9000000000112004b00000e7c0000c13d000009260100004100000000001004390000800b010000390000000402000039248101550000040f00000009020000290000000004020433000000000241004b00000e7c0000413d000000000241004b000010b30000c13d0000092e0100004100000000001004350000001201000039000000040010043f00000024020000390000000001000019248101710000040f000000000121019f000700000001001d0000004001500039000000400010043f0000002001500039000600000001001d000000000001043500000000000504350000000d0100002900000000001004350000000801000029000000200010043f00000040020000390000000001000019000800000005001d2481013e0000040f0000000704000029000000080200002900000000020204330000098c02200197000000000301041a0000098d03300197000000000223019f000000000021041b000000010110003900000006020000290000000002020433000000000021041b0000001301000039000000000301041a000000000243004b00000e7c0000413d000800000003001d0000000002430049000600000002001d000000000021041b000000400300043d000009760130009c0000000b0200002900000fce0000213d0000004001300039000000400010043f0000002001300039000000000001043500000000000304350000000d010000292481162a0000040f0000098e01000041000000400200043d000b00000002001d000000000012043500000975010000410000000002000414000500000002001d000000000010043900000000010004120000000400100443000000240000044300008005010000390000004402000039248101550000040f0000000b040000290000002402400039000000070300002900000000003204350000000a020000290000092402200197000000040340003900000000002304350000092402100197000000040120008c000010500000613d0000004404000039000000200600003900000005010000290000000b030000290000000005030019248100d00000040f000000000110004c00000f190000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600320018f0000000b020000290000000002230019000000000332004b000000000300001900000001030040390000097c0420009c00000fce0000213d000000010330019000000fce0000c13d000000400020043f000000200110008c00000e940000413d0000000b010000290000000001010433000000000210004c0000000002000019000000010200c039000000000221004b00000e940000c13d000000000110004c0000000d01000029000007d90000613d24811e900000040f000000400100043d000b00000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000b04000029000000200240003900000007030000290000000000320435000000400240003900000000001204350000000d01000029000000000014043500000922010000410000000002000414000009220320009c0000000002018019000009220340009c00000000010440190000004001100210000000c002200210000000000112019f0000098f011001c70000800d02000039000000020300003900000990040000410000000a05000029248124770000040f000000010120019000000e940000613d000000400100043d0000002002100039000000060300002900000000003204350000000802000029000000000021043500000922020000410000000003000414000009220430009c0000000003028019000009220410009c00000000010280190000004001100210000000c002300210000000000112019f00000991011001c70000800d0200003900000001030000390000099204000041248124770000040f000000010120019000000e940000613d0000000c02000029000000000102041a0000000903000029000000000131016f00000001011001bf000000000012041b000000000100001900000000020000190000000003000019248101670000040f000000080500002900000000533500d9000000000223004b00000e7c0000c13d000000000241004b00000e7c0000413d0000000001410049000000080200002900000000121200d90000000c0100002900000fba0000013d000009260100004100000000001004390000800b010000390000000402000039248101550000040f0000000202000029000000000012043500000009010000290000000102000029000000000012041b248111590000040f0000000c02000029248116140000040f000000000100001900000000020000190000000003000019248101670000040f00000000014100190000000000010435000000400100043d000d00000001001d248111180000040f0000000d03000029000000000231004900000000010300190000000003000019248101670000040f0000099602100197000000000112004b000010d70000c13d000000000001042d00000000010000190000000002000019248101710000040f0000098b0210009c000010df0000813d0000004001100039000000400010043f000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f000000400100043d0000098b0210009c000010ec0000813d0000004002100039000000400020043f000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f000000400100043d0000098b0210009c000010fe0000813d0000004002100039000000400020043f00000020021000390000099703000041000000000032043500000004020000390000000000210435000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f0000000003010433000000000032043500000020022000390000000004000019000000000534004b000011110000813d00000000052400190000002004400039000000000614001900000000060604330000000000650435000011090000013d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d00000000030200190000002002000039000000000021043500000020021000390000000001030019248111050000040f000000000001042d00010000000000020000000001000416000000000110004c000011310000c13d000000040100008a00000000011000310000092302000041000000000310004c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c000011340000613d00000000010000190000000002000019248101710000040f248110f30000040f0000002002000039000000400300043d000100000003001d00000000002304350000002002300039248111050000040f0000000103000029000000000231004900000000010300190000000003000019248101670000040f00000004010000390000000201100367000000000101043b000009980210009c000011460000813d000000000001042d00000000010000190000000002000019248101710000040f00000024010000390000000201100367000000000101043b000009980210009c0000114f0000813d000000000001042d00000000010000190000000002000019248101710000040f00000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f000000000001042d00000000001004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f000000000001042d000009990320009c000011660000813d00000003322000c900000000011200190000000002000019000000000001042d0000092e0100004100000000001004350000003201000039000000040010043f00000024020000390000000001000019248101710000040f000000600610003900000000005604350000004005100039000000000045043500000977043001980000097804000041000000000504001900000000050060190000097903300197000000000335019f000000200510003900000000003504350000097703200198000000000304001900000000030060190000097902200197000000000223019f00000000002104350000008001100039000000000001042d000000040110008a00000923020000410000005f0310008c000000000300001900000000030220190000092301100197000000000410004c0000000002008019000009230110009c00000000010300190000000001026019000000000110004c0000119a0000613d00000002030003670000000401300370000000000101043b000009240210009c0000119a0000213d0000002402300370000000000202043b000009240420009c0000119a0000213d0000004403300370000000000303043b000000000001042d00000000010000190000000002000019248101710000040f000000400100043d0000098b0210009c000011a80000813d0000004002100039000000400020043f00000020021000390000099a03000041000000000032043500000005020000390000000000210435000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f000009240110019700000000001004350000001901000039000000200010043f000000400200003900000000010000192481013e0000040f000000000001042d00000924022001970000000000200435000000200010043f000000400200003900000000010000192481013e0000040f000000000001042d0000000001000416000000000110004c000011cf0000c13d000000040100008a00000000011000310000092302000041000000200310008c000000000300001900000000030240190000092301100197000000000410004c000000000200a019000009230110009c00000000010300190000000001026019000000000110004c000011d20000613d00000000010000190000000002000019248101710000040f00000004010000390000000201100367000000000101043b248121bd0000040f000000400300043d0000000000130435000000200200003900000000010300190000000003000019248101670000040f00000922022001970000000000200435000000200010043f000000400200003900000000010000192481013e0000040f000000000001042d000000000110004c000011e60000613d000000000001042d00000000010000190000000002000019248101710000040f0000000002010019000000400100043d0000098b0310009c000011fb0000813d0000004003100039000000400030043f000000000302041a0000097704300198000009780400004100000000040060190000097903300197000000000334019f00000000003104350000000102200039000000000202041a00000020031000390000000000230435000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f000000000110004c000012050000613d000000000001042d0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f0004000000000002000300000001001d00000000002004350000000701000039000000200010043f0000004002000039000400000002001d00000000010000192481013e0000040f000000000101041a000100000001001d0000000901000039000000200010043f000000000100001900000004020000292481013e0000040f000000000101041a000200000001001d00000001010000290000092401100197000100000001001d00000000001004350000000a01000039000000200010043f000000000100001900000004020000292481013e0000040f00000003020000290000092402200197000300000002001d0000000000200435000000200010043f000000000100001900000004020000292481013e0000040f00000001020000290000000304000029000000000242004b0000000002000019000000010200603900000002030000290000092403300197000000000334004b0000000003000019000000010300603900000000023201a0000000000101041a000000ff0110018f000000010220018f000000000102c019000000000001042d000000000110004c000012420000613d000000000001042d000000400100043d00000044021000390000099b0300004100000000003204350000002402100039000000080300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f000e000000000002000c00000004001d000a00000002001d000e00000001001d000d00000003001d00000000003004350000001401000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000000110004c0000000001000019000012680000c13d0000001501000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000000ff0110019000000000010000190000000101006039000000010110018f2481123f0000040f0000000c010000290000000d020000292481120c0000040f000000000110004c000013a10000613d0000000d0100002900000000001004350000000701000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a00000924021001970000000e010000290000092401100197000900000002001d000000000112004b000013a40000c13d0000000d0100002900000000001004350000000901000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a00000924011001980000128d0000613d000000400200003900000000010000192481013e0000040f000000000201041a0000092502200197000000000021041b0000000e010000290000000d02000029248114dd0000040f000000090100002900000000001004350000001601000039000b00000001001d000000200010043f0000004002000039000800000002001d00000000010000192481013e0000040f000000000101041a000c00000001001d0000000a010000290000092401100197000700000001001d00000000001004350000000b01000029000000200010043f000000000100001900000008020000292481013e0000040f0000000d02000029000000000101041a00000924011001980000000a03000029000000000401001900000000040360190000000c0100002900000924011001980000000e030000290000000006010019000000000603601900000924056001970000092403400197000000000135004b0000137f0000613d000000000120004c0000137f0000613d000000000150004c000800000003001d000500000004001d000013180000613d00000000005004350000001801000039000300000001001d000000200010043f0000004002000039000e00000002001d0000000001000019000600000005001d000c00000006001d2481013e0000040f000000000101041a000400000001001d000000060100002900000000001004350000001701000039000b00000001001d000000200010043f00000000010000190000000e020000292481013e0000040f00000004020000290000092202200198000200000002001d000000010220008a00000000020060190000000000200435000000200010043f00000000010000190000000e020000292481013e0000040f000000060200002900000000002004350000000b02000029000000200020043f000b00000001001d00000000010000190000000e020000292481013e0000040f000100000001001d0000000c01000029248122dd0000040f000009220110019700000000001004350000000101000029000000200010043f00000000010000190000000e020000292481013e0000040f0000000b0200002900000001032000390000000101100039000b00000001001d0000000002000019000c00000003001d000000000103041a000000000112004b000013040000813d0000000001030019000e00000002001d248121d90000040f0000000302200210000000000101041a000000000121022f000000ff0220008c000000000201001900000000020020190000000d01000029000000000112004b000013000000613d0000000b01000029248122ab0000040f0000000e0200002900000001022000390000000c03000029000012ef0000013d000000060100002900000000001004350000000301000029000000200010043f000000400200003900000000010000192481013e0000040f0000000202000029000009220220009c000013ab0000613d000000040200002900000001022000390000092202200197000000000301041a0000099c03300197000000000223019f000000000021041b0000000d0200002900000008030000290000000504000029000000000130004c0000137f0000613d00000000003004350000001801000039000400000001001d000000200010043f0000004002000039000e00000002001d00000000010000192481013e0000040f000000000101041a000600000001001d000000080100002900000000001004350000001701000039000c00000001001d000000200010043f00000000010000190000000e020000292481013e0000040f00000006020000290000092202200198000300000002001d000000010220008a00000000020060190000000000200435000000200010043f00000000010000190000000e020000292481013e0000040f000000080200002900000000002004350000000c02000029000000200020043f000c00000001001d00000000010000190000000e020000292481013e0000040f000b00000001001d0000000501000029248122dd0000040f000009220110019700000000001004350000000b01000029000000200010043f00000000010000190000000e020000292481013e0000040f0000000c020000290000000102200039000c00000002001d000000000202041a000000010300008a000000000332004b000013ab0000613d0000000101100039000b00000001001d000004000120008c00000000010000190000000101004039248122c90000040f00000000020000190000000c03000029000000000103041a000000000112004b00000000010300190000136a0000813d000e00000002001d0000000e02000029248121d90000040f0000000302200210000000000101041a000000000121022f000000ff0220008c000000000201001900000000020020190000000b01000029248122ab0000040f0000000c030000290000000e020000290000000102200039000013570000013d0000000b010000290000000d02000029248122ab0000040f000000080100002900000000001004350000000401000029000000200010043f000000400200003900000000010000192481013e0000040f0000000302000029000009220220009c000013ab0000613d000000060200002900000001022000390000092202200197000000000301041a0000099c03300197000000000223019f000000000021041b0000000d020000290000000a01000029248114870000040f0000000d0100002900000000001004350000000b01000039000000200010043f000000400200003900000000010000192481013e0000040f00000926020000410000000000200439000c00000001001d0000800b010000390000000402000039000e00000002001d248101550000040f0000000c02000029000000000012041b00000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d020000390000092c040000410000000e03000029000000090500002900000007060000290000000d07000029248124770000040f0000000101200190000013a10000613d000000000001042d00000000010000190000000002000019248101710000040f0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f00000060021000390000099d03000041000000000032043500000040021000390000099e030000410000000000320435000000200210003900000026030000390000000000320435000000200200003900000000002104350000008001100039000000000001042d00000060021000390000099f0300004100000000003204350000004002100039000009a0030000410000000000320435000000200210003900000032030000390000000000320435000000200200003900000000002104350000008001100039000000000001042d0006000000000002000500000004001d000600000002001d0000000004000411000200000001001d000300000003001d000400000004001d248112500000040f000009a10100004100000000001004390000000601000029000000040010044300008002010000390000002402000039248101550000040f000000000110004c000014190000613d000000400300043d000009a201000041000000000013043500000064013000390000000002000414000100000002001d0000008002000039000000000021043500000044013000390000000302000029000000000021043500000002010000290000092401100197000000240230003900000000001204350000000401000029000009240110019700000004023000390000000000120435000400000003001d00000084023000390000000501000029248111050000040f00000006020000290000092402200197000000040320008c000014000000613d00000004030000290000000004310049000000200600003900000001010000290000000005030019248100d00000040f000000000110004c000014260000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600220018f00000004040000290000000005420019000000000225004b000000000200001900000001020040390000097c0350009c0000000003040019000014650000213d0000000102200190000014650000c13d000000400050043f0000001f0110008c0000141a0000a13d00000000010304330000099602100197000000000212004b0000141a0000c13d000009a20110009c0000141d0000c13d000000000001042d00000000010000190000000002000019248101710000040f0000097e0100004100000000001504350000000401500039000600000005001d248113b20000040f000000060300002900000000023100490000000001030019248101710000040f00000060010000390000000102000032000014360000c13d0000000002010433000000000320004c0000146c0000c13d000000400200043d000600000002001d0000097e0100004100000000001204350000000401200039248113bf0000040f000000060300002900000000023100490000000001030019248101710000040f0000097c0120009c000014650000213d0000003f01200039000000200300008a000000000331016f000000400100043d0000000003310019000000000413004b000000000400001900000001040040390000097c0530009c000014650000213d0000000104400190000014650000c13d000000400030043f00000000002104350000002002100039000000030300036700000001050000310000001f0450018f0000000505500272000014550000613d000000000600001900000005076002100000000008720019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000144d0000413d000000000640004c000014290000613d0000000505500210000000000353034f00000000025200190000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000014290000013d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f0000002001100039248101710000040f000009a30210009c000014720000813d000009a401100041000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000000001120019000000000221004b000000000200001900000001020040390000000102200190000014800000c13d000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0005000000000002000300000001001d000400000002001d00000000002004350000000701000039000500000001001d000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092401100198000014cf0000c13d000000040100002900000000001004350000000501000029000000200010043f0000004002000039000500000002001d00000000010000192481013e0000040f00000003020000290000092403200197000200000003001d000000000201041a0000092502200197000000000232019f000000000021041b00000000003004350000000801000039000100000001001d000000200010043f000000000100001900000005020000292481013e0000040f000000000101041a000300000001001d0000000c01000039000000200010043f000000000100001900000005020000292481013e0000040f00000003020000290000000000200435000000200010043f000000000100001900000005020000292481013e0000040f0000000402000029000000000021041b00000000002004350000000d01000039000000200010043f000000000100001900000005020000292481013e0000040f0000000302000029000000000021041b000000020100002900000000001004350000000101000029000000200010043f000000000100001900000005020000292481013e0000040f000000000201041a000000010300008a000000000332004b000014d60000613d0000000102200039000000000021041b000000000001042d0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0009000000000002000700000001001d000800000002001d00000000002004350000000701000039000600000001001d000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000009240210019700000007010000290000092401100197000900000002001d000000000112004b000015680000c13d000000080100002900000000001004350000000601000029000000200010043f0000004002000039000700000002001d00000000010000192481013e0000040f000000000201041a0000092502200197000000000021041b000000090100002900000000001004350000000801000039000300000001001d000000200010043f000000000100001900000007020000292481013e0000040f000000000101041a000000000210004c000015610000613d000000010110008a000700000001001d000000080100002900000000001004350000000d01000039000400000001001d000000200010043f0000004002000039000500000002001d00000000010000192481013e0000040f000000000101041a000600000001001d000000090100002900000000001004350000000c01000039000200000001001d000000200010043f000000000100001900000005020000292481013e0000040f00000007020000290000000000200435000000200010043f000000000100001900000005020000292481013e0000040f00000007020000290000000603000029000000000232004b0000154a0000613d000000000101041a000100000001001d000000090100002900000000001004350000000201000029000000200010043f0000004002000039000500000002001d00000000010000192481013e0000040f00000006020000290000000000200435000000200010043f000000000100001900000005020000292481013e0000040f0000000102000029000000000021041b00000000002004350000000401000029000000200010043f000000000100001900000005020000292481013e0000040f0000000602000029000000000021041b000000090100002900000000001004350000000201000029000000200010043f000000000100001900000005020000292481013e0000040f00000007020000290000000000200435000000200010043f000000000100001900000005020000292481013e0000040f000000000001041b000000080100002900000000001004350000000401000029000000200010043f0000004002000039000800000002001d00000000010000192481013e0000040f000000000001041b000000090100002900000000001004350000000301000029000000200010043f000000000100001900000008020000292481013e0000040f000000000201041a000000000320004c000015610000613d000000010220008a000000000021041b000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f000000400100043d000009a50210009c0000157c0000813d0000008002100039000000400020043f0000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f00000977031001980000097803000041000000000403001900000000040060190000097901100197000000000114019f0000097704200198000000000403001900000000040060190000097902200197000000000224019f00000000211200a90000097702100198000000000203001900000000020060190000097903100197000000000232019f000000000212004b000015970000c13d000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000000002010019000000400100043d000009a50310009c000015c60000813d0000008003100039000000400030043f000000000302041a0000092304300197000000010500008a000009230440009c0000000004000019000000000405601900000080044002100000008005300270000000000445019f000000800500003a000000000403601900000978050000410000097706400198000000000605001900000000060060190000097904400197000000000446019f000000200610003900000000004604350000097704300198000000000405001900000000040060190000097903300197000000000334019f00000000003104350000000103200039000000000303041a000000400410003900000000003404350000000202200039000000000202041a00000060031000390000000000230435000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f000000000201001900000986312000d1000000000320004c000015d40000613d00000000322100d9000009860220009c000015d50000c13d000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f000000010200008a000000000221004b000015e10000613d0000000101100039000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f00000977032001980000097803000041000000000403001900000000040060190000097902200197000000000224019f000009770410019800000000030060190000097901100197000000000113019f00000000012100490000097802100041000009a60220009c000015f70000a13d000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f00000977031001980000097803000041000000000403001900000000040060190000097901100197000000000114019f000009770420019800000000030060190000097902200197000000000223019f00000000011200190000097802100041000009a60220009c0000160d0000a13d000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f00000000030204330000098c03300197000000000401041a0000098d04400197000000000334019f000000000031041b000000200320003900000000030304330000008003300210000000000401041a0000098c04400197000000000334019f000000000031041b000000400320003900000000030304330000000104100039000000000034041b000000020110003900000060022000390000000002020433000000000021041b000000000001042d0017000000000002000700000003001d001700000002001d000c00000001001d2481156f0000040f000800000001001d2481156f0000040f0000001102000039000400000002001d000000000202041a001400000002001d0000000c02000029000000000220004c000a00000001001d0000002001100039000600000001001d00000008010000290000002001100039000500000001001d0000001701000029000000200110003900000007020000290000002002200039000900000002001d00000000020000190000000004000019000b00000001001d000017000000613d0000000001010433001600000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000001602000029000000000112004b0000168f0000a13d000000170100002900000000010104330000097702100198000009780200004100000000020060190000097901100197000000000112019f0000092302000041000000000310004c000000000300001900000000030240190000092304100197000000000540004c000000000200a019000009230440009c000000000203c019000000000220004c0000168f0000c13d000000000210004c0000168f0000613d000009a42110012a0000097702100198000009780200004100000000020060190000097901100197001600000001001d001500000002001d000000000112019f000000050200002900000000001204350000000b010000290000000001010433001700000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000001703000029000000000213004b000018f00000413d000000000113004900000977021001980000097803000041001700000003001d000000000203001900000000020060190000097901100197000000000212019f00000015010000290000097701100198000000000103001900000000010060190000001603000029000000000131019f248115830000040f0000097702100198000000170200002900000000020060190000097901100197000000000112019f0000000802000029000000000012043500000009010000290000000001010433001700000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000001702000029000000000112004b000016d90000a13d000000070100002900000000010104330000097702100198000009780200004100000000020060190000097901100197000000000112019f0000092302000041000000000310004c000000000300001900000000030240190000092304100197000000000540004c000000000200a019000009230440009c000000000203c019000000000220004c000016d90000c13d000000000210004c000016d90000613d000009a42110012a0000097702100198000009780200004100000000020060190000097901100197001600000001001d001500000002001d000000000112019f0000000602000029000000000012043500000009010000290000000001010433001700000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000001703000029000000000213004b000018f00000413d000000000113004900000977021001980000097803000041001700000003001d000000000203001900000000020060190000097901100197000000000212019f00000015010000290000097701100198000000000103001900000000010060190000001603000029000000000131019f248115830000040f0000097702100198000000170200002900000000020060190000097901100197000000000112019f0000000a0200002900000000001204350000000b01000029000000000101043300000000001004350000001201000039001700000001001d000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000009780200004100000977031001980000000b0300002900000000020060190000097901100197000000000412019f00000009010000290000000001010433000000000210004c0000000002000019000017000000613d0000000002030433000000000221004b0000000002040019000017000000613d00000000001004350000001701000029000000200010043f00000040020000390000000001000019000200000004001d2481013e0000040f0000000204000029000000000101041a0000097802000041000009770310019800000000020060190000097901100197000000000212019f000200000004001d000100000002001d000000400300043d000009a50130009c000018f70000813d0000008001300039000000400010043f000000200130003900000000000104350000000000030435000009270100004100000000001004390000800b01000039001500000001001d0000000402000039001700000002001d001600000003001d248101550000040f00000016020000290000004002200039000d00000002001d00000000001204350000092601000041000000000010043900000015010000290000001702000029248101550000040f0000001603000029000000600230003900000000001204350000001402000029000000000120004c0000000d010000290000172b0000613d00000000002004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f2481159e0000040f00000000030100190000004001300039001600000003001d000d00000001001d0000000001010433001500000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f00000015060000290000001603000029000000000161004b0000006001300039000300000001001d000017550000a13d000009260100004100000000001004390000800b010000390000000402000039248101550000040f00000003020000290000000002020433000000000321004b000018f00000413d000000000121004900000985321000d1000009853220012a000000000112004b000018f00000c13d000009270100004100000000001004390000800b010000390000000402000039248101550000040f00000015060000290000000d020000290000000002020433000000000321004b000018f00000413d000000000121004b0000001603000029000019050000613d000009862160012a00000000052600490000002001300039001300000001001d0000800b0200003900000004030000390000000004000019001200000002001d001100000003001d000000fe0140008c000017ef0000213d000e00000004001d000009870150009c000018f00000213d001500000006001d0000092701000041000000000010043900000012010000290000001102000029001700000005001d248101550000040f00000017030000290000098603300041000000000113004b000017760000a13d0000092701000041000000000010043900000012010000290000001102000029248101550000040f0000000004010019001000000000001d000017850000013d00000000003004350000001201000039000000200010043f00000040020000390000000001000019001700000003001d2481013e0000040f0000001704000029000000000101041a0000097802000041000009770310019800000000020060190000097901100197000000000112019f001000000001001d0000001502000029000000000124004b0000001303000029000018f00000413d001700000004001d000000000124004900000977021001980000097804000041001500000004001d000000000204001900000000020060190000097901100197000000000212019f00000000010304330000097703100198000000000304001900000000030060190000097901100197000000000113019f00000016030000290000000003030433000f00000003001d248115830000040f0000000f030000290000097702300198000000150200002900000000020060190000097903300197000000000232019f000000000301001900000000010200190000000002030019248115e80000040f00000977021001980000001503000029000000000203001900000000020060190000097901100197000000000112019f00000016020000290000000000120435000000130100002900000000010104330000097702100198000000000203001900000000020060190000097901100197000000000112019f0000001002000029248115fe0000040f000000130400002900000016030000290000097702100198000000150200002900000000020060190000097901100197000000000112019f000000000014043500000000020304330000097702200198000017c40000613d0000000000030435000000000104043300000977011001980000001402000029000017c80000613d00000000000404350000000d0100002900000017030000290000000000310435000000010100008a000000000112004b000018f00000613d000009270100004100000000001004390000800b010000390000000402000039248101550000040f000000140200002900000001022000390000001703000029000000000113004b001400000002001d000017e80000613d00000000002004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f0000001602000029248116140000040f00000017050000290000000e0400002900000001044000390000000006050019000000120200002900000011030000290000175e0000013d000009260100004100000000001004390000800b010000390000000402000039248101550000040f0000000302000029000000000012043500000004010000290000001402000029000000000021041b0000000c01000029000000000110004c000018850000613d0000000601000029000000000101043300000977021001980000097804000041001700000004001d000000000204001900000000020060190000097901100197000000000112019f000000050200002900000000020204330000097703200198000000000304001900000000030060190000097902200197000000000223019f248115e80000040f000000130200002900000000020204330000097703200198000000170300002900000000030060190000097902200197000000000223019f000000000301001900000000010200190000000002030019248115fe0000040f00000977021001980000001704000029000000000204001900000000020060190000097901100197000000000112019f000000130200002900000000001204350000000a0100002900000000010104330000097702100198000000000204001900000000020060190000097901100197000000000112019f000000080200002900000000020204330000097703200198000000000304001900000000030060190000097902200197000000000223019f00000016030000290000000003030433001500000003001d248115e80000040f00000015030000290000097702300198000000170200002900000000020060190000097903300197000000000232019f000000000301001900000000010200190000000002030019248115fe0000040f000000130400002900000016030000290000097702100198000000170200002900000000020060190000097901100197000000000112019f000000000013043500000000020404330000097702200198000018420000613d0000000000040435000000000103043300000977011001980000001401000029000018460000613d000000000003043500000000001004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f0000001602000029248116140000040f00000927010000410000000b020000290000000002020433001700000002001d00000000001004390000800b010000390000000402000039248101550000040f0000001702000029000000000112004b0000188e0000a13d000000050100002900000000010104330000097702100198000009780200004100000000020060190000097901100197000000000212019f0000000201000029248115fe0000040f00000000030100190000000b01000029000000000201043300000007010000290000002001100039000900000001001d0000000001010433000000000121004b000018770000c13d000000060100002900000000010104330000097702100198000009780200004100000000020060190000097901100197000000000212019f0000000001030019248115e80000040f0000000b0200002900000000020204330000000003010019001700000003001d00000000002004350000001201000039000000200010043f000000400200003900000000010000192481013e0000040f00000017020000290000098c02200197000000000301041a0000098d03300197000000000223019f000000000021041b0000188e0000013d00000000002004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f0000001602000029248116140000040f000018ef0000013d00000009010000290000000001010433001700000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000001702000029000000000112004b000018b50000a13d0000000b010000290000000001010433000000000112004b000018b50000a13d0000000901000029000000000101043300000000001004350000001201000039000000200010043f000000400200003900000000010000192481013e0000040f000000060200002900000000020204330000097803000041000009770420019800000000030060190000097902200197000000000223019f001700000001001d0000000101000029248115e80000040f0000098c011001970000001703000029000000000203041a0000098d02200197000000000112019f000000000013041b0000000c0100002900000000001004350000000e01000039001600000001001d000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a000000010100008a001700000002001d000000000112004b000018f00000613d0000000c0100002900000000001004350000001601000029000000200010043f0000004002000039001600000002001d00000000010000192481013e0000040f00000017020000290000000102200039001300000002001d000000000021041b000009270100004100000000001004390000800b01000039001500000001001d0000000402000039001400000002001d248101550000040f0000000a02000029000000400220003900000000001204350000092601000041000000000010043900000015010000290000001402000029248101550000040f0000000a02000029000000600220003900000000001204350000000c0100002900000000001004350000000f01000039000000200010043f000000000100001900000016020000292481013e0000040f0000001702000029000009940220009c000018fe0000813d000000130200002900000003322000c900000000012100190000000a02000029248116140000040f000000000001042d0000092e0100004100000000001004350000000401000029000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000003201000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000001201000039000000040010043f00000024020000390000000001000019248101710000040f000000000110004c0000190f0000613d000000000001042d000000400100043d0000004402100039000009a70300004100000000003204350000002402100039000000160300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f000000000110004c000019200000613d000000000001042d000000400100043d0000006402100039000009a80300004100000000003204350000004402100039000009a90300004100000000003204350000002402100039000000240300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000008402000039248101710000040f000000400100043d0000098b0210009c0000193a0000813d0000004002100039000000400020043f000000200210003900000000000204350000000000010435000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f00000000030204330000098c03300197000000000401041a0000098d04400197000000000334019f000000000031041b000000010110003900000020022000390000000002020433000000000021041b000000000001042d0008000000000002000700000003001d000600000001001d0000001301000039000000000401041a000800000002001d0000000003240019000200000004001d000000000243004b00000000020000190000000102004039000000010220019000001a1a0000c13d000100000003001d000000000031041b248119310000040f000400000001001d000000070200002900000000040204330000002003200039000500000003001d000000000502001900000000020304330000002003100039000000000023043500000977024001980000097806000041000300000006001d000000000206001900000000020060190000097903400197000000000232019f000000000021043500000008020000290000097701200198000000000106001900000000010060190000097902200197000000000221019f00000000010504330000097703100198000000000306001900000000030060190000097901100197000000000113019f248115fe0000040f0000097702100198000000030200002900000000020060190000097901100197000000000112019f00000007020000290000000000120435000000060100002900000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f000000070300002900000000020304330000098c02200197000000000401041a0000098d04400197000000000224019f000000000021041b000000010110003900000005020000290000000002020433000000000021041b000000060100002900000004020000292481162a0000040f000000400300043d0000000801000029000000000110004c000019d90000613d000009aa0100004100000000001304350000000001000414000400000001001d0000097501000041000000000010043900000000010004120000000400100443000000240000044300008005010000390000004402000039000700000003001d248101550000040f0000000703000029000000440230003900000008050000290000000000520435000000000200041000000924022001970000002404300039000000000024043500000000020004110000092402200197000000040430003900000000002404350000092402100197000000040120008c000019bf0000613d0000006404000039000000200600003900000004010000290000000005030019248100d00000040f00000007030000290000000805000029000000000110004c00001a2f0000613d0000000102000031000000200120008c000000200100003900000000010240190000001f01100039000000600410018f0000000001340019000000000441004b000000000600001900000001060040390000097c0410009c00001a210000213d000000010460019000001a210000c13d000000400010043f0000001f0220008c00001a170000a13d0000000002030433000000000320004c0000000003000019000000010300c039000000000332004b00001a170000c13d000000000220004c000000000301001900001a280000613d000700000003001d00000005010000290000000001010433000500000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f000000070400002900000040024000390000000203000039000000000032043500000020024000390000000803000029000000000032043500000060024000390000000000120435000000060100002900000000001404350000092201000041000009220240009c000000000201001900000000020440190000000003000414000009220430009c00000000010340190000004002200210000000c001100210000000000121019f000009ab011001c70000800d020000390000000303000039000009ac0400004100000000050004110000000506000029248124770000040f000000010120019000001a170000613d000000400100043d0000002002100039000000010300002900000000003204350000000202000029000000000021043500000922020000410000000003000414000009220430009c0000000003028019000009220410009c00000000010280190000004001100210000000c002300210000000000112019f00000991011001c70000800d0200003900000001030000390000099204000041248124770000040f000000010120019000001a170000613d000000000001042d00000000010000190000000002000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001a3e0000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001a360000413d000000000530004c00001a4d0000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f00000000002404350000000102000031248101710000040f0005000000000002000400000003001d000300000002001d000500000001001d0000001301000039000000000101041a000200000001001d248119310000040f00000004040000290000000006040433000000200540003900000000020504330000002003100039000000000023043500000977026001980000097802000041000000000302001900000000030060190000097906600197000000000363019f00000000003104350000000006040433000009770360019800000000020060190000097903600197000000000332019f0000097802300041000009a60220009c00001ac60000a13d000100000001001d00000000003404350000000302000029000000000120004c00001a720000613d0000000000250435000000050100002900000000001004350000001001000039000000200010043f00000040020000390000000001000019000300000005001d2481013e0000040f000000040300002900000000020304330000098c02200197000000000401041a0000098d04400197000000000224019f000000000021041b000000010110003900000003020000290000000002020433000000000021041b000000050100002900000001020000292481162a0000040f00000003010000290000000001010433000400000001001d0000092701000041000000400200043d000300000002001d00000000001004390000800b010000390000000402000039248101550000040f000000030500002900000060025000390000000000120435000000030300003900000040015000390000000000310435000000050100002900000000001504350000002001500039000000000001043500000922010000410000000002000414000009220420009c0000000002018019000009220450009c00000000010540190000004001100210000000c002200210000000000112019f000009ab011001c70000800d02000039000009ac0400004100000000050004110000000406000029248124770000040f000000010120019000001ac30000613d000000400100043d000000200210003900000002030000290000000000320435000000000031043500000922020000410000000003000414000009220430009c0000000003028019000009220410009c00000000010280190000004001100210000000c002300210000000000112019f00000991011001c70000800d0200003900000001030000390000099204000041248124770000040f000000010120019000001ac30000613d000000000001042d00000000010000190000000002000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0009000000000002000800000004001d000500000003001d000900000001001d0000001301000039000000000401041a000600000002001d0000000003240019000400000004001d000000000243004b00000000020000190000000102004039000000010220019000001b5f0000c13d000100000003001d000000000031041b248119310000040f0000000803000029000000000403043300000020023000390000000005030019000700000002001d00000000020204330000002003100039000000000023043500000977024001980000097806000041000200000006001d000000000206001900000000020060190000097903400197000000000232019f000300000001001d000000000021043500000006020000290000097701200198000000000106001900000000010060190000097902200197000000000221019f00000000010504330000097703100198000000000306001900000000030060190000097901100197000000000113019f248115fe0000040f0000097702100198000000020200002900000000020060190000097901100197000000000112019f000000080200002900000000001204350000000502000029000000000120004c00001b080000613d00000007010000290000000000210435000000090100002900000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f000000080300002900000000020304330000098c02200197000000000401041a0000098d04400197000000000224019f000000000021041b000000010110003900000007020000290000000002020433000000000021041b000000090100002900000003020000292481162a0000040f00000007010000290000000001010433000800000001001d0000092701000041000000400200043d000700000002001d00000000001004390000800b010000390000000402000039000500000002001d248101550000040f0000000704000029000000400240003900000005030000290000000000320435000000200240003900000006030000290000000000320435000000600240003900000000001204350000000901000029000000000014043500000922010000410000000002000414000009220320009c0000000002018019000009220340009c00000000010440190000004001100210000000c002200210000000000112019f000009ab011001c70000800d020000390000000303000039000009ac0400004100000000050004110000000806000029248124770000040f000000010120019000001b5c0000613d000000400100043d0000002002100039000000010300002900000000003204350000000402000029000000000021043500000922020000410000000003000414000009220430009c0000000003028019000009220410009c00000000010280190000004001100210000000c002300210000000000112019f00000991011001c70000800d0200003900000001030000390000099204000041248124770000040f000000010120019000001b5c0000613d000000000001042d00000000010000190000000002000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0008000000000002000700000003001d000600000001001d0000001301000039000000000401041a000800000002001d0000000003240019000200000004001d000000000243004b00000000020000190000000102004039000000010220019000001c330000c13d000100000003001d000000000031041b248119310000040f000400000001001d000000070200002900000000040204330000002003200039000500000003001d000000000502001900000000020304330000002003100039000000000023043500000977024001980000097806000041000300000006001d000000000206001900000000020060190000097903400197000000000232019f000000000021043500000008020000290000097701200198000000000106001900000000010060190000097902200197000000000221019f00000000010504330000097703100198000000000306001900000000030060190000097901100197000000000113019f248115fe0000040f0000097702100198000000030200002900000000020060190000097901100197000000000112019f00000007020000290000000000120435000000060100002900000000001004350000001001000039000000200010043f000000400200003900000000010000192481013e0000040f000000070300002900000000020304330000098c02200197000000000401041a0000098d04400197000000000224019f000000000021041b000000010110003900000005020000290000000002020433000000000021041b000000060100002900000004020000292481162a0000040f000000400300043d0000000801000029000000000110004c00001bf30000613d000009aa0100004100000000001304350000000001000414000400000001001d0000097501000041000000000010043900000000010004120000000400100443000000240000044300008005010000390000004402000039000700000003001d248101550000040f0000000703000029000000440230003900000008050000290000000000520435000000000200041000000924022001970000002404300039000000000024043500000000020004110000092402200197000000040430003900000000002404350000092402100197000000040120008c00001bd90000613d0000006404000039000000200600003900000004010000290000000005030019248100d00000040f00000007030000290000000805000029000000000110004c00001c480000613d0000000102000031000000200120008c000000200100003900000000010240190000001f01100039000000600410018f0000000001340019000000000441004b000000000600001900000001060040390000097c0410009c00001c3a0000213d000000010460019000001c3a0000c13d000000400010043f0000001f0220008c00001c300000a13d0000000002030433000000000320004c0000000003000019000000010300c039000000000332004b00001c300000c13d000000000220004c000000000301001900001c410000613d000700000003001d00000005010000290000000001010433000500000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f00000007040000290000002002400039000000080300002900000000003204350000006002400039000000000012043500000006010000290000000000140435000000400140003900000000000104350000092201000041000009220240009c000000000201001900000000020440190000000003000414000009220430009c00000000010340190000004002200210000000c001100210000000000121019f000009ab011001c70000800d020000390000000303000039000009ac0400004100000000050004110000000506000029248124770000040f000000010120019000001c300000613d000000400100043d0000002002100039000000010300002900000000003204350000000202000029000000000021043500000922020000410000000003000414000009220430009c0000000003028019000009220410009c00000000010280190000004001100210000000c002300210000000000112019f00000991011001c70000800d0200003900000001030000390000099204000041248124770000040f000000010120019000001c300000613d000000000001042d00000000010000190000000002000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001c570000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001c4f0000413d000000000530004c00001c660000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f00000000002404350000000102000031248101710000040f000000000110004c00001c6b0000613d000000000001042d000000400100043d0000004402100039000009ad03000041000000000032043500000024021000390000001e0300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f000e000000000002000800000003001d000e00000002001d000a00000001001d0000092701000041000d00000001001d00000000001004390000800b01000039000c00000001001d0000000402000039000b00000002001d248101550000040f0000000d020000290000000000200439000d00000001001d0000000c010000290000000b02000029248101550000040f0000000e020000290000000d030000290000000002230019000000000121004b00001e170000213d000009861320012a0000000a03000029000000000330004c00001e140000613d0000000001120049000900000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000902000029000000000112004b00001e250000a13d000009270100004100000000001004390000800b010000390000000402000039248101550000040f000009b00210009c00001e170000213d000009a4011000410000000902000029000000000112004b0000000001000019000000010100a03924811c680000040f0000000501000039000000000201041a000000010400008a000000000342004b00001e170000613d000c00000004001d0000000102200039000000000021041b000000000101041a000b00000001001d0000000801000029000009240110019800001e1e0000613d000600000001001d00000000001004350000001601000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092401100198000000080200002900000000040100190000000004026019000009240340019800001d300000613d0000000b01000029000000000110004c00001d300000613d00000000003004350000001801000039000200000001001d000000200010043f0000004002000039000e00000002001d0000000001000019000700000003001d000d00000004001d2481013e0000040f000000000101041a000500000001001d000000070100002900000000001004350000001701000039000400000001001d000000200010043f00000000010000190000000e020000292481013e0000040f00000005020000290000092202200198000100000002001d000000010220008a00000000020060190000000000200435000000200010043f00000000010000190000000e020000292481013e0000040f000000070200002900000000002004350000000402000029000000200020043f000400000001001d00000000010000190000000e020000292481013e0000040f000300000001001d0000000d01000029248122dd0000040f000009220110019700000000001004350000000301000029000000200010043f00000000010000190000000e020000292481013e0000040f00000004020000290000000102200039000d00000002001d000000000202041a0000000c03000029000000000332004b00001e170000613d0000000101100039000c00000001001d000004000120008c00000000010000190000000101004039248122c90000040f00000000020000190000000d03000029000000000103041a000000000112004b000000000103001900001d1b0000813d000e00000002001d0000000e02000029248121d90000040f0000000302200210000000000101041a000000000121022f000000ff0220008c000000000201001900000000020020190000000c01000029248122ab0000040f0000000d030000290000000e02000029000000010220003900001d080000013d0000000c010000290000000b02000029248122ab0000040f000000070100002900000000001004350000000201000029000000200010043f000000400200003900000000010000192481013e0000040f0000000102000029000009220220009c00001e170000613d000000050200002900000001022000390000092202200197000000000301041a0000099c03300197000000000223019f000000000021041b000000080200002900000000010200190000000b02000029248114870000040f00000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d0200003900000004030000390000092c04000041000000000500001900000006060000290000000b07000029248124770000040f000000010120019000001e140000613d0000000b0100002900000000001004350000001001000039000c00000001001d000000200010043f000000400200003900000000010000192481013e0000040f248111e90000040f000e00000001001d0000001301000039000000000301041a0000000a020000290000000004230019000600000003001d000000000234004b00000000020000190000000102004039000000010220019000001e170000c13d000500000004001d000000000041041b248119310000040f000800000001001d0000000e0200002900000000040204330000002003200039000d00000003001d000000000502001900000000020304330000002003100039000000000023043500000977024001980000097806000041000700000006001d000000000206001900000000020060190000097903400197000000000232019f00000000002104350000000a020000290000097701200198000000000106001900000000010060190000097902200197000000000221019f00000000010504330000097703100198000000000306001900000000030060190000097901100197000000000113019f248115fe0000040f00000009020000290000000d0300002900000000002304350000097702100198000000070200002900000000020060190000097901100197000000000112019f0000000e0200002900000000001204350000000b0100002900000000001004350000000c01000029000000200010043f000000400200003900000000010000192481013e0000040f0000000e0300002900000000020304330000098c02200197000000000401041a0000098d04400197000000000224019f000000000021041b00000001011000390000000d020000290000000002020433000000000021041b0000000b0100002900000008020000292481162a0000040f000009aa01000041000000400200043d000e00000002001d000000000012043500000975010000410000000002000414000900000002001d000000000010043900000000010004120000000400100443000000240000044300008005010000390000004402000039248101550000040f0000000e0300002900000044023000390000000a04000029000000000042043500000000020004100000092402200197000000240430003900000000002404350000000002000411000c00000002001d0000092402200197000000040430003900000000002404350000092402100197000000040120008c00001dbc0000613d0000006404000039000000200600003900000009010000290000000e05000029248100d00000040f0000000e03000029000000000110004c00001e3d0000613d0000000101000031000000200210008c000000200200003900000000020140190000001f02200039000000600220018f0000000005320019000000000225004b000000000200001900000001020040390000097c0450009c00001e360000213d000000010220019000001e360000c13d000000400050043f000000200110008c00001e140000413d0000000001030433000000000210004c0000000002000019000000010200c039000000000221004b00001e140000c13d000e00000005001d000000000110004c00001e1e0000613d0000000d010000290000000001010433000d00000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000e0400002900000040024000390000000103000039000000000032043500000020024000390000000a030000290000000000320435000000600240003900000000001204350000000b0100002900000000001404350000092201000041000009220240009c000000000201001900000000020440190000000003000414000009220430009c00000000010340190000004002200210000000c001100210000000000121019f000009ab011001c70000800d020000390000000303000039000009ac040000410000000c050000290000000d06000029248124770000040f000000010120019000001e140000613d000000400100043d0000002002100039000000050300002900000000003204350000000602000029000000000021043500000922020000410000000003000414000009220430009c0000000003028019000009220410009c00000000010280190000004001100210000000c002300210000000000112019f00000991011001c70000800d0200003900000001030000390000099204000041248124770000040f000000010120019000001e140000613d0000000b01000029000000000001042d00000000010000190000000002000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f000000400100043d0000006402100039000009ae0300004100000000003204350000004402100039000009af0300004100000000003204350000002402100039000000260300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000008402000039248101710000040f0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f0000000302000367000000400100043d00000001040000310000001f0340018f000000050440027200001e4c0000613d000000000500001900000005065002100000000007610019000000000662034f000000000606043b00000000006704350000000105500039000000000645004b00001e440000413d000000000530004c00001e5b0000613d0000000504400210000000000242034f00000000044100190000000303300210000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f00000000002404350000000102000031248101710000040f000000000110004c00001e600000613d000000000001042d000000400100043d0000004402100039000009b103000041000000000032043500000024021000390000000c0300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f000000000110004c00001e710000613d000000000001042d000000400100043d0000004402100039000009b20300004100000000003204350000002402100039000000110300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f000000000110004c00001e820000613d000000000001042d000000400100043d0000004402100039000009b303000041000000000032043500000024021000390000001f0300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000006402000039248101710000040f000a00000000000200000000020100190000000001000411000600000001001d000900000002001d2481120c0000040f000000000110004c00001f680000613d000000090100002900000000001004350000000701000039000700000001001d000000200010043f0000004002000039000a00000002001d00000000010000192481013e0000040f000000000101041a000800000001001d00000000010000190000000a020000292481013e0000040f00000008020000290000092402200197000500000002001d000000000101041a0000092401100198000a00000001001d00001f650000613d000000090100002900000000001004350000000701000029000000200010043f0000004002000039000800000002001d00000000010000192481013e0000040f000000000101041a000700000001001d0000000a0100002900000000001004350000000a01000039000000200010043f000000000100001900000008020000292481013e0000040f000000060200002900000924022001970000000000200435000000200010043f000000000100001900000008020000292481013e0000040f000000070200002900000924022001970000000603000029000000000232004b00001ecd0000613d000000000101041a000000ff0110019000001f650000613d000000090100002900000000001004350000000901000039000000200010043f000000400200003900000000010000192481013e0000040f000000000201041a0000092502200197000000000021041b00000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d02000039000000040300003900000995040000410000000a0500002900000000060000190000000907000029248124770000040f000000010120019000001f650000613d000000050100002900000000001004350000001601000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092401100198000000050200002900000000030100190000000003026019000000000130004c000000090200002900001f530000613d000000000120004c00001f530000613d00000000003004350000001801000039000200000001001d000000200010043f0000004002000039000a00000002001d0000000001000019000400000003001d2481013e0000040f000000000101041a000300000001001d000000040100002900000000001004350000001701000039000800000001001d000000200010043f00000000010000190000000a020000292481013e0000040f00000003020000290000092202200198000100000002001d000000010220008a00000000020060190000000000200435000000200010043f00000000010000190000000a020000292481013e0000040f000000040200002900000000002004350000000802000029000000200020043f000800000001001d00000000010000190000000a020000292481013e0000040f000700000001001d0000000401000029248122dd0000040f000009220110019700000000001004350000000701000029000000200010043f00000000010000190000000a020000292481013e0000040f000000080200002900000001032000390000000101100039000700000001001d0000000002000019000800000003001d000000000103041a000000000112004b00001f410000813d0000000001030019000a00000002001d248121d90000040f0000000302200210000000000101041a000000000121022f000000ff0220008c000000000201001900000000020020190000000901000029000000000112004b00001f3d0000613d0000000701000029248122ab0000040f0000000a020000290000000102200039000000080300002900001f2c0000013d000000040100002900000000001004350000000201000029000000200010043f000000400200003900000000010000192481013e0000040f0000000102000029000009220220009c00001f750000613d000000030200002900000001022000390000092202200197000000000301041a0000099c03300197000000000223019f000000000021041b00000009020000290000000601000029248114dd0000040f00000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d0200003900000004030000390000092c04000041000000050500002900000000060000190000000907000029248124770000040f000000010120019000001f650000613d000000000001042d00000000010000190000000002000019248101710000040f000000400100043d0000004402100039000009b40300004100000000003204350000097e020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006402000039248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0003000000000002000200000002001d000300000001001d00000000001004350000000e01000039000000200010043f000000400200003900000000010000192481013e0000040f000000000301041a000000000130004c000000000100001900001fea0000613d000000030100002900000000001004350000000f01000039000000200010043f00000040020000390000000001000019000300000003001d2481013e0000040f0000000303000029000009990230009c00001feb0000813d00000003323000c900000000012100192481159e0000040f000000000901001900000040019000390000000002010433000000020a0000290000092303a00197000009230400004100000000012a00490000092305100197000000000635004b0000000006000019000000000604201900000000070000190000000007044019000000000335013f0000000005a1004b00000000050000190000000005042019000009230830009c00000000050760190000000007a1004b00000000070000190000000007044019000009230330009c00000000030700190000000003066019000000010600008a000000000662004b000000000600001900000000060420190000092307200197000009230870009c00000000040080190000092307700167000009230770009c000000000406c019000000000330004c0000000003000019000000010300c039000000ff02200270000000000232016f000000000350004c0000000003000019000000010300c039000000000440004c0000000004000019000000010400c039000000000334016f000000010330018f00000000023201a000001ff20000c13d00000977021001980000097804000041000200000004001d000000000204001900000000020060190000097901100197000000000212019f000000200190003900000000010104330000097703100198000000000304001900000000030060190000097901100197000000000113019f0000000003090433000100000003001d000300000009001d248115830000040f00000001030000290000097702300198000000020200002900000000020060190000097903300197000000000232019f000000000301001900000000010200190000000002030019248115e80000040f00000977021001980000097901100197000000000100c01900000003020000290000000000120435000000000001042d0000092e0100004100000000001004350000003201000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0002000000000002000100000001001d00000000001004350000000b01000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000200000001001d000009260100004100000000001004390000800b010000390000000402000039248101550000040f0000000202000029000000000112004b0000000001000019000020140000613d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000002010019000000010100002924811f7c0000040f000000000001042d0008000000000002000400000002001d000300000001001d000009260100004100000000001004390000800b010000390000000402000039248101550000040f0000000402000029000000000121004b000021000000413d000000030100002900000000001004350000000e01000039000000200010043f000000400200003900000000010000192481013e0000040f000000000401041a000000010100008a000100000001001d0000000f01000039000200000001001d0000000002000019000000000500001900000003030000290000007f0150008c000500000002001d0000205b0000213d000000000142004b0000205b0000813d0000000006240019000800000004001d000000000146004b000000000100001900000001010040390000000101100190000020f20000c13d0000000101000029000000000116004b000020f20000613d000600000005001d00000000003004350000000201000029000000200010043f00000040020000390000000001000019000700000006001d2481013e0000040f0000000706000029000009b50260009c000020f90000213d0000000102600039000000010220027000000003432000c900000000011300190000000201100039000000000101041a0000000403000029000000000131004b000000030300002900000008040000290000000605000029000020590000a13d000000000160004c000020f20000613d000000010420008a000000050200002900000001055000390000202f0000013d00000000003004350000000201000029000000200010043f000000400200003900000000010000192481013e0000040f00000005020000290000000003020019000009990220009c000020f90000813d00000003323000c900000000012100192481159e0000040f000800000001001d0000001101000039000000000201041a000700000002001d0000000401000029248121070000040f000600000001001d00000000001004350000000301000039000300000001001d000000200010043f000000400200003900000000010000192481013e0000040f2481159e0000040f00000006030000290000000702000029000000000223004b000500000001001d0000006001100039000700000001001d000020960000813d000000010130003900000000001004350000000301000029000000200010043f000000400200003900000000010000192481013e0000040f2481159e0000040f0000000707000029000000000207043300000060031000390000000005030433000000000325004b000020f20000413d00000005030000290000004004300039000000000304043300000040011000390000000001010433000000000631004b000020f20000413d00000000033100490000000002250049000020b00000013d000009260100004100000000001004390000800b010000390000000402000039248101550000040f00000007030000290000000002030433000600000002001d000300000001001d000000000121004b000020f20000413d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000707000029000000050200002900000040042000390000000002040433000000000321004b000020f20000413d00000000032100490000000601000029000000030200002900000000021200490000000001040433000000000420004c000020c60000613d00000000040704330000000405000029000000000554004b000020f20000213d0000000405000029000000000545004900000000643500a9000000000630004c000020bf0000613d00000000633400d9000000000353004b000020f20000c13d00000000322400d90000000001120019000000000221004b000000000200001900000001020040390000000102200190000020f20000c13d000000080200002900000040022000390000000002020433000000000321004b000020f20000413d000000000121004900000977021001980000097804000041000700000004001d000000000204001900000000020060190000097901100197000000000212019f0000000805000029000000200150003900000000010104330000097703100198000000000304001900000000030060190000097901100197000000000113019f0000000003050433000600000003001d248115830000040f00000006030000290000097702300198000000070200002900000000020060190000097903300197000000000232019f000000000301001900000000010200190000000002030019248115e80000040f0000097702100198000000070200002900000000020060190000097901100197000000000312019f000000080400002900000000003404350000097702200198000000000100c019000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000003201000039000000040010043f00000024020000390000000001000019248101710000040f0000092e0100004100000000001004350000000101000039000000040010043f00000024020000390000000001000019248101710000040f0009000000000002000300000001001d000000010100008a000400000001001d0000000301000039000200000001001d0000004001000039000100000001001d000000000100001900000000030000190000007f0430008c0000213b0000213d000000000421004b0000213b0000813d000600000001001d0000000004120019000900000002001d000000000124004b0000000001000019000000010100403900000001011001900000213c0000c13d0000000401000029000000000114004b0000213c0000613d000500000004001d00000001014000390000000101100270000700000001001d00000000001004350000000201000029000000200010043f00000000010000190000000102000029000800000003001d2481013e0000040f000000070400002900000008030000290000000201100039000000000101041a0000000302000029000000000121004b0000000902000029000021380000a13d0000000501000029000000000110004c0000213c0000613d000000010240008a000000060400002900000001033000390000000001040019000021110000013d000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0009000000000002000500000002001d0000002004100039000600000001001d0000004001100039000100000001001d0000000001010433000009863210012a00000000053100490000000003000019000700000004001d000000ff0230008c000021ad0000813d000300000003001d000009b60250009c000021b60000813d00000986065000410000000503000029000000000236004b000000000200001900000000050300190000216a0000213d00000000006004350000001201000039000000200010043f00000040020000390000000001000019000900000006001d2481013e0000040f0000000704000029000000000101041a0000097802000041000009770310019800000000020060190000097901100197000000000212019f000000010100002900000000010104330000000905000029000200000002001d000000000215004b000021b60000413d000000000115004900000977021001980000097806000041000900000006001d000000000206001900000000020060190000097901100197000000000212019f00000000010404330000097703100198000000000306001900000000030060190000097901100197000000000113019f00000006030000290000000003030433000400000003001d000800000005001d248115830000040f00000004030000290000097702300198000000090200002900000000020060190000097903300197000000000232019f000000000301001900000000010200190000000002030019248115e80000040f0000097702100198000000090200002900000000020060190000097901100197000000000112019f0000000602000029000000000012043500000005020000290000000803000029000000000223004b000021af0000613d0000000701000029000000000101043300000977021001980000097802000041000900000002001d00000000020060190000097901100197000000000112019f0000000202000029248115fe0000040f00000008050000290000097702100198000000090200002900000000020060190000097901100197000000000112019f00000007040000290000000000140435000000010100002900000000005104350000000303000029000000010330003900000000010500190000214e0000013d000000060100002900000000010104330000097702100198000021b40000613d0000000601000029000000000001043500000000010000190000098c01100197000000000001042d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0001000000000002000100000001001d0000001101000039000000000101041a00000000001004350000000301000039000000200010043f000000400200003900000000010000192481013e0000040f2481159e0000040f0000000102000029248121430000040f000000000001042d0001000000000002000100000001001d000009240210019700000000002004350000001601000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a000009240110019800000001020000290000000001026019000000000001042d0001000000000002000000000301041a000100000002001d000000000223004b000021e60000a13d0000000000100435000000200200003900000000010000192481013e0000040f000000010200002900000000012100190000000002000019000000000001042d0000092e0100004100000000001004350000003201000039000000040010043f00000024020000390000000001000019248101710000040f00080000000000020000092401100197000700000001001d00000000001004350000001801000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a0000092201100198000800000000001d0000223e0000613d000800000001001d000000070100002900000000001004350000001701000039000000200010043f0000004002000039000700000002001d00000000010000192481013e0000040f0000000802000029000000010220008a0000000000200435000000200010043f000000000100001900000007020000292481013e0000040f0000000101100039000300000001001d000000000101041a000400000001001d0000800b01000039000200000001001d0000000401000039000100000001001d000800000000001d00000000020000190000000401000029000000000112004b0000223e0000813d0000000301000029000700000002001d248121d90000040f000600000002001d000000000101041a000500000001001d0000092701000041000000000010043900000002010000290000000102000029248101550000040f000000060200002900000003022002100000000503000029000000000323022f000000ff0220008c0000000002030019000000000200201900000000030100190000000001020019000000000203001924811f7c0000040f0000000702000029000000010220003900000008030000290000000003310019000800000003001d000000000113004b000000000100001900000001010040390000000101100190000022140000613d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0000000801000029000000000001042d0008000000000002000700000002001d0000092401100197000400000001001d00000000001004350000001801000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a00000922031001980000000001000019000022770000613d000000040100002900000000001004350000001701000039000300000001001d000000200010043f0000004002000039000800000002001d0000000001000019000600000003001d2481013e0000040f0000000602000029000000010220008a000600000002001d0000000000200435000000200010043f000000000100001900000008020000292481013e0000040f000000000101041a0000000702000029000000000121004b0000000601000029000022770000a13d000000040100002900000000001004350000000301000029000000200010043f0000004002000039000800000002001d00000000010000192481013e0000040f0000000000000435000000200010043f000000000100001900000008020000292481013e0000040f000000000101041a0000000702000029000000000121004b0000000001000019000022780000a13d000000000001042d0000000001000019000200000001001d0000092204100197000100000004001d00000006010000290000092205100197000000000245004b0000000201000029000022770000a13d0000000002450049000009b70320009c000022a40000813d00000001022002700000000001250049000800000001001d000009220110009c000022a40000213d000000040100002900000000001004350000000301000029000000200010043f0000004002000039000500000002001d00000000010000192481013e0000040f00000008020000290000000000200435000000200010043f000000000100001900000005020000292481013e0000040f0000000104000029000000000301041a0000000702000029000000000223004b0000000801000029000022770000613d0000000702000029000000000223004b000022790000413d000000010110008a000600000001001d000009220110009c0000227c0000a13d0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f0001000000000002000100000002001d000000000201041a000009b80320009c000022c20000813d0000000103200039000000000031041b248121d90000040f0000000302200210000000010300008a00000000042301cf000000ff0520008c0000000004002019000000010500002900000000022501cf0000000002002019000000000242016f000000000334013f000000000401041a000000000334016f000000000223019f000000000021041b000000000001042d0000092e0100004100000000001004350000004101000039000000040010043f00000024020000390000000001000019248101710000040f000000000110004c000022cc0000613d000000000001042d000000400100043d0000006402100039000009b90300004100000000003204350000004402100039000009ba0300004100000000003204350000002402100039000000230300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000008402000039248101710000040f0003000000000002000009240110019700000000001004350000001801000039000000200010043f000000400200003900000000010000192481013e0000040f000000000101041a00000922031001980000000001000019000023040000613d0000001701000039000000200010043f0000004002000039000200000002001d0000000001000019000300000003001d2481013e0000040f0000000302000029000000010220008a000100000002001d0000000000200435000000200010043f000000000100001900000002020000292481013e0000040f000000000101041a000200000001001d000009270100004100000000001004390000800b010000390000000402000039248101550000040f0000000202000029000000000112004b0000000301000029000023040000c13d0000000101000029000000000001042d000d000000000002000400000002001d000d00000001001d0000092402100197000c00000002001d00000000002004350000001601000039000a00000001001d000000200010043f0000004002000039000900000002001d00000000010000192481013e0000040f000000000101041a000b00000001001d0000000c0100002900000000001004350000000a01000029000000200010043f000000000100001900000009020000292481013e0000040f00000004020000290000092407200197000000000201041a0000092502200197000000000272019f000000000021041b0000000b0100002900000924011001980000000d020000290000000005010019000000000502601900000922010000410000000002000414000009220320009c0000000001024019000000c0011002100000092b011001c70000800d020000390000000403000039000009bb04000041000d00000005001d00000924065001970000000c05000029000500000006001d000600000007001d248124770000040f0000000101200190000024310000613d00000006030000290000000504000029000000000134004b000024300000613d000000000140004c000023a30000613d00000000004004350000001801000039000200000001001d000000200010043f0000004002000039000a00000002001d00000000010000192481013e0000040f000000000101041a000300000001001d000000050100002900000000001004350000001701000039000b00000001001d000000200010043f00000000010000190000000a020000292481013e0000040f00000003020000290000092202200198000100000002001d000000010220008a00000000020060190000000000200435000000200010043f00000000010000190000000a020000292481013e0000040f000000050200002900000000002004350000000b02000029000000200020043f000b00000001001d00000000010000190000000a020000292481013e0000040f000900000001001d0000000d01000029248122dd0000040f000009220110019700000000001004350000000901000029000000200010043f00000000010000190000000a020000292481013e0000040f0000000b0200002900000001032000390000000101100039000700000001001d0000000701000039000800000001001d0000000002000019000900000003001d000000000103041a000000000112004b000023910000813d0000000001030019000d00000002001d248121d90000040f0000000302200210000000000101041a000000000121022f000000ff0220008c0000000001002019000b00000001001d00000000001004350000000801000029000000200010043f00000000010000190000000a020000292481013e0000040f000000000101041a00000924011001970000000c02000029000000000121004b0000238d0000613d00000007010000290000000b02000029248122ab0000040f0000000d0200002900000001022000390000000903000029000023730000013d000000050100002900000000001004350000000201000029000000200010043f000000400200003900000000010000192481013e0000040f0000000102000029000009220220009c000024340000613d000000030200002900000001022000390000092202200197000000000301041a0000099c03300197000000000223019f000000000021041b0000000603000029000000000130004c000024300000613d00000000003004350000001801000039000500000001001d000000200010043f0000004002000039000d00000002001d00000000010000192481013e0000040f000000000101041a000700000001001d000000060100002900000000001004350000001701000039000b00000001001d000000200010043f00000000010000190000000d020000292481013e0000040f00000007020000290000092202200198000300000002001d000000010220008a00000000020060190000000000200435000000200010043f00000000010000190000000d020000292481013e0000040f000000060200002900000000002004350000000b02000029000000200020043f000b00000001001d00000000010000190000000d020000292481013e0000040f000a00000001001d0000000401000029248122dd0000040f000009220110019700000000001004350000000a01000029000000200010043f00000000010000190000000d020000292481013e0000040f0000000c0200002900000000002004350000000802000039000000200020043f000800000001001d00000000010000190000000d020000292481013e0000040f0000000b020000290000000102200039000000000101041a000a00000002001d000000000202041a000900000001001d0000000001120019000000000221004b000000000200001900000001020040390000000102200190000024340000c13d00000008020000290000000102200039000b00000002001d000004010110008c00000000010000190000000101004039248122c90000040f00000000020000190000000a03000029000000000103041a000000000112004b0000000001030019000024030000813d000d00000002001d0000000d02000029248121d90000040f0000000302200210000000000101041a000000000121022f000000ff0220008c000000000201001900000000020020190000000b01000029248122ab0000040f0000000a030000290000000d020000290000000102200039000023f00000013d0000000c01000039000800000001001d0000004001000039000a00000001001d00000000030000190000000901000029000000000113004b0000241f0000813d0000000c0100002900000000001004350000000801000029000000200010043f00000000010000190000000a02000029000d00000003001d2481013e0000040f0000000d020000290000000000200435000000200010043f00000000010000190000000a020000292481013e0000040f000000000201041a0000000b01000029248122ab0000040f0000000d030000290000000103300039000024080000013d000000060100002900000000001004350000000501000029000000200010043f000000400200003900000000010000192481013e0000040f0000000302000029000009220220009c000024340000613d000000070200002900000001022000390000092202200197000000000301041a0000099c03300197000000000223019f000000000021041b000000000001042d00000000010000190000000002000019248101710000040f0000092e0100004100000000001004350000001101000039000000040010043f00000024020000390000000001000019248101710000040f000000000110004c0000243e0000613d000000000001042d000000400100043d0000006402100039000009bc0300004100000000003204350000004402100039000009bd03000041000000000032043500000024021000390000002e0300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000008402000039248101710000040f000000000110004c000024520000613d000000000001042d000000400100043d0000006402100039000009be0300004100000000003204350000004402100039000009bd03000041000000000032043500000024021000390000002a0300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000008402000039248101710000040f000000000110004c000024660000613d000000000001042d000000400100043d0000006402100039000009bf0300004100000000003204350000004402100039000009c003000041000000000032043500000024021000390000002e0300003900000000003204350000097e0200004100000000002104350000000402100039000000200300003900000000003204350000008402000039248101710000040f0000247a002104210000000102000039000000000001042d0000000002000019000024790000013d0000247f002104230000000102000039000000000001042d00000000020000190000247e0000013d0000248100000432000024820001042e0000248300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000042cbb15ccdc3cad6266b0e7a08c0454b23bf29dc2df74b6f3c209e9336465bd1796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913201ffc9a70000000000000000000000000000000000000000000000000000000080ac58cd000000000000000000000000000000000000000000000000000000005b5e139f000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef00000002000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000047fc9aa0000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000000000000000000000000758c7d800000000000000000000000000000000000000000000000000000000081812fc00000000000000000000000000000000000000000000000000000000095cf5c600000000000000000000000000000000000000000000000000000000095ea7b3000000000000000000000000000000000000000000000000000000000d6a2033000000000000000000000000000000000000000000000000000000001376f3da0000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000001c984bc30000000000000000000000000000000000000000000000000000000020606b700000000000000000000000000000000000000000000000000000000023b872dd0000000000000000000000000000000000000000000000000000000025a58b56000000000000000000000000000000000000000000000000000000002e1a7d4d000000000000000000000000000000000000000000000000000000002e720f7d000000000000000000000000000000000000000000000000000000002f745c5900000000000000000000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000003a46b1a80000000000000000000000000000000000000000000000000000000042842e0e00000000000000000000000000000000000000000000000000000000430c208100000000000000000000000000000000000000000000000000000000461f711c0000000000000000000000000000000000000000000000000000000046c96aac000000000000000000000000000000000000000000000000000000004bc2a6570000000000000000000000000000000000000000000000000000000054fd4d50000000000000000000000000000000000000000000000000000000005594a04500000000000000000000000000000000000000000000000000000000587cde1e000000000000000000000000000000000000000000000000000000005c19a95c000000000000000000000000000000000000000000000000000000005f5b0c32000000000000000000000000000000000000000000000000000000006352211e0000000000000000000000000000000000000000000000000000000065fc3873000000000000000000000000000000000000000000000000000000006f548837000000000000000000000000000000000000000000000000000000006fcfff450000000000000000000000000000000000000000000000000000000070a08231000000000000000000000000000000000000000000000000000000007116c60c0000000000000000000000000000000000000000000000000000000071197484000000000000000000000000000000000000000000000000000000007ecebe000000000000000000000000000000000000000000000000000000000085f2aef2000000000000000000000000000000000000000000000000000000008c2c9baf000000000000000000000000000000000000000000000000000000008e539e8c000000000000000000000000000000000000000000000000000000008fbb38ff00000000000000000000000000000000000000000000000000000000900cf0cf0000000000000000000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000981b24d000000000000000000000000000000000000000000000000000000000986b7d8a000000000000000000000000000000000000000000000000000000009ab24eb000000000000000000000000000000000000000000000000000000000a183af5200000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000a4d855df00000000000000000000000000000000000000000000000000000000b45a3c0e00000000000000000000000000000000000000000000000000000000b88d4fde00000000000000000000000000000000000000000000000000000000c1f0fb9f00000000000000000000000000000000000000000000000000000000c2c4c5c100000000000000000000000000000000000000000000000000000000c3cda52000000000000000000000000000000000000000000000000000000000c87b56dd00000000000000000000000000000000000000000000000000000000d1c2babb00000000000000000000000000000000000000000000000000000000d1febfb900000000000000000000000000000000000000000000000000000000d4e54c3b00000000000000000000000000000000000000000000000000000000e0514aba00000000000000000000000000000000000000000000000000000000e441135c00000000000000000000000000000000000000000000000000000000e7a324dc00000000000000000000000000000000000000000000000000000000e7e242d400000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000ee99fe2800000000000000000000000000000000000000000000000000000000f1127ed800000000000000000000000000000000000000000000000000000000f8a0576300000000000000000000000000000000000000000000000000000000fbd3a29d00000000000000000000000000000000000000000000000000000000fc0c546a00000000000000000000000000000000000000000000000000000000fd4a77f1310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e000000000000000000000000000000000000000000000000ffffffffffffffbf0000000000000000000000000000000080000000000000000000000000000000ffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adfdd9ec14900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff517565727920666f72206e6f6e6578697374656e7420746f6b656e000000000008c379a0000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000093a80fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c57f020000000000000000000000000000000000002000000000000000000000000017307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31000000000000000000000000000000000000000000000000ffffffffffffffdf000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000006000000000000000000000000002f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca9402000000000000000000000000000000000000400000000000000000000000005e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c546865206c6f636b206469646e27742065787069726500000000000000000000000000000000000000000000000000000000000000000000000000003b9ac9ff8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925ffffffff0000000000000000000000000000000000000000000000000000000076655643000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b9aca00312e302e300000000000000000000000000000000000000000000000000000006174746163686564000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000746f6b656e7300000000000000000000000000000000000000000000000000004552433732313a2045524337323152656365697665722072656a65637465642063656976657220696d706c656d656e74657200000000000000000000000000004552433732313a207472616e7366657220746f206e6f6e2045524337323152651806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83150b7a0200000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffff87b3200000000000000000000000000000000000000000000000000000000000784ce00000000000000000000000000000000000000000000000000ffffffffffffff80fffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffff4e6f206578697374696e67206c6f636b20666f756e6400000000000000000000647261770000000000000000000000000000000000000000000000000000000043616e6e6f742061646420746f2065787069726564206c6f636b2e205769746823b872dd000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000080000000000000000000000000ff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de624566f74696e67206c6f636b2063616e2062652034207965617273206d61780000667574757265000000000000000000000000000000000000000000000000000043616e206f6e6c79206c6f636b20756e74696c2074696d6520696e2074686520fffffffffffffffffffffffffffffffffffffffffffffffffffffffff87b31ff4c6f636b206578706972656400000000000000000000000000000000000000004e6f7468696e67206973206c6f636b656400000000000000000000000000000043616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e0063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656400000000000000000000000000000000000000000000000000000000773593fefffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c58000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000010000000000000000496473000000000000000000000000000000000000000000000000000000000064737452657020776f756c64206861766520746f6f206d616e7920746f6b656e3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f616c6964207369676e6174757265000000000000000000000000000000000000566f74696e67457363726f773a3a64656c656761746542795369673a20696e76616c6964206e6f6e6365000000000000000000000000000000000000000000006e61747572652065787069726564000000000000000000000000000000000000566f74696e67457363726f773a3a64656c656761746542795369673a20736967

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

0x000000000000000000000000129c6e2d8619b3f20504dbb7188602300f4c7e160000000000000000000000007988bee87c5ae88d45a85a40e231c685548eaf09

-----Decoded View---------------
Arg [0] : token_addr (address): 0x129c6e2D8619B3F20504dBB7188602300f4C7e16
Arg [1] : art_proxy (address): 0x7988beE87C5Ae88d45A85a40e231c685548eaf09

-----Encoded View---------------


[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.