CRO Price: $0.09 (+0.54%)

Contract

0x6065BF700DDe379c063bF9fEE14A8EE234bE7c98

Overview

CRO Balance

Cronos Chain LogoCronos Chain LogoCronos Chain Logo0 CRO

CRO Value

$0.00

Multichain Info

No addresses found
Amount:Between 1-100k
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Token Transfers found.

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZapFrontEnd

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-10-21
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IUniswapV2Router {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB ,uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

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

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

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

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

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

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

interface IERC721Receiver {

    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721Holder is IERC721Receiver {
 
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC721 is IERC165 {
  
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

  
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

interface ZapDatabase {
    function isAdmin(address account) external view returns (uint256 value);
    function getUserRecordBal(address account) external view returns (uint256 value);
    function getUserRecordStakedTime(address account) external view returns (uint256 value);
    function getUserRecordLastClaimed(address account) external view returns (uint256 value);
    function getTotalLocked() external view returns (uint256 value);

    function updateTotalLocked(uint256 amount) external;
    function updateUserRecord(address account, uint256 _bal, uint256 _lastClaimed, uint256 _stakedTime) external;
}

contract ZapFrontEnd is Ownable, ERC721Holder {
    address public DBaddi = 0x3A59F3466eC3957604e0BC02834A8Ad5DF2ED2cf;
    address public constant ROUTER = 0x145677FC4d9b8F19B5D56d1820c48e0443049a30;
    address public WCRO = 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23;
    address public DBF = 0xA2ae6273Dd65F9fA76C3d383eDe9c1261e025DAC;
    address public PAIR = 0xd266f9eb1A93B00d068ece10682d97475439C6A3;

    uint256 public rValue = 35468936678614100;
    uint256 public multiplier = 10000;
    uint256 public enabled = 1;

    function setEnabled(uint256 _enabled) public {
        require(ZapDatabase(DBaddi).isAdmin(msg.sender) == 1, "Your not an admin");
        enabled = _enabled;
    }

    function setDBAddi(address _Addi) public {
        require(ZapDatabase(DBaddi).isAdmin(msg.sender) == 1, "Your not an admin");
        require(enabled == 1, "Contract not enabled");
        DBaddi = _Addi;
    }

    function setMultiplier(uint256 _mul) public {
        require(ZapDatabase(DBaddi).isAdmin(msg.sender) == 1, "Your not an admin");
        require(enabled == 1, "Contract not enabled");
        require(_mul >= 10000, "Multiplier must be at least 10000");
		multiplier = _mul;
	}

    function addLiquidity(uint WCROAmount, uint DBFAmount) public returns (uint){
        require(enabled == 1, "Contract not enabled");
        require(IERC20(WCRO).balanceOf(msg.sender) >= WCROAmount, "You dont have this much WCRO");
        require(IERC20(DBF).balanceOf(msg.sender) >= DBFAmount, "You dont have this much DBF");
        require(IERC20(WCRO).allowance(msg.sender, address(this)) >= WCROAmount, "Token transfer not approved");
        require(IERC20(DBF).allowance(msg.sender, address(this)) >= DBFAmount, "Token transfer not approved");
        
        IERC20(WCRO).transferFrom(msg.sender, address(this), WCROAmount);
        IERC20(DBF).transferFrom(msg.sender, address(this), DBFAmount);

        IERC20(WCRO).approve(ROUTER, WCROAmount);
        IERC20(DBF).approve(ROUTER, DBFAmount);

        (uint amountA, uint amountB, uint liquidity) = IUniswapV2Router(ROUTER)
            .addLiquidity(
                WCRO,
                DBF,
                WCROAmount,
                DBFAmount,
                1,
                1,
                msg.sender,
                block.timestamp + 300
            );

        amountA = amountA + amountB;

        return liquidity;
    }

    function removeLiquidity(uint amount) public {
        require(enabled == 1, "Contract not enabled");
        require(IERC20(PAIR).balanceOf(msg.sender) >= amount, "You dont have this much liquidity");
        require(IERC20(PAIR).allowance(msg.sender, address(this)) >= amount, "Token transfer not approved");
        
        IERC20(PAIR).transferFrom(msg.sender, address(this), amount);
        IERC20(PAIR).approve(ROUTER, amount);

        IUniswapV2Router(ROUTER)
            .removeLiquidity(
                WCRO,
                DBF,
                amount,
                1,
                1,
                msg.sender,
                block.timestamp + 300
            );
    }

    function getTokenPriceDBFTOWCRO(uint amount) public view returns(uint) {
        require(enabled == 1, "Contract not enabled");
        IUniswapV2Pair liq = IUniswapV2Pair(PAIR);
        (uint Res0, uint Res1,) = liq.getReserves();

        return((amount*Res1)/Res0);
    }

    function getTokenPriceWCROTODBF(uint amount) public view returns(uint) {
        require(enabled == 1, "Contract not enabled");
        IUniswapV2Pair liq = IUniswapV2Pair(PAIR);
        (uint Res0, uint Res1,) = liq.getReserves();

        return((amount*Res0)/Res1);
    }

    function SwapWCROFORDBF(uint amount) public {
        require(enabled == 1, "Contract not enabled");
        uint amountOut = (getTokenPriceDBFTOWCRO(amount / 100) * 98);
        
        require(IERC20(WCRO).balanceOf(msg.sender) >= amount, "You dont have this much WCRO");
        require(IERC20(WCRO).allowance(msg.sender, address(this)) >= amount, "Token transfer not approved");
        
        IERC20(WCRO).transferFrom(msg.sender, address(this), amount);
        IERC20(WCRO).approve(ROUTER, amount);

        address[] memory path;
        path = new address[](2);
        path[0] = WCRO;
        path[1] = DBF;

        IUniswapV2Router(ROUTER)
            .swapExactTokensForTokens(
                amount,
                amountOut,
                path,
                msg.sender,
                block.timestamp + 300
            );
    }

    function zapIn(uint amount) public {
        require(enabled == 1, "Contract not enabled");
        uint liquidity = zapInNoStake(amount);
        stake(liquidity);
    }

    function zapInNoStake(uint amount) public returns(uint) {
        require(enabled == 1, "Contract not enabled");
        uint amountIn = (amount / 2);
        uint amountOut = ((getTokenPriceDBFTOWCRO(amount / 2) / 100) * 98);
        
        require(IERC20(WCRO).balanceOf(msg.sender) >= amountIn, "You dont have this much WCRO");
        require(IERC20(WCRO).allowance(msg.sender, address(this)) >= amountIn, "Token transfer not approved");
        
        IERC20(WCRO).transferFrom(msg.sender, address(this), amount);
        IERC20(WCRO).approve(ROUTER, amountIn);

        address[] memory path;
        path = new address[](2);
        path[0] = WCRO;
        path[1] = DBF;

        IUniswapV2Router(ROUTER)
            .swapExactTokensForTokens(
                amountIn,
                amountOut,
                path,
                address(this),
                block.timestamp + 300
            );

        amountIn = (amountIn / 100) * 98;

        IERC20(WCRO).approve(ROUTER, amountIn);
        IERC20(DBF).approve(ROUTER, amountOut);

        (uint amountA, uint amountB, uint liquidity) = IUniswapV2Router(ROUTER)
            .addLiquidity(
                WCRO,
                DBF,
                amountIn,
                amountOut,
                1,
                1,
                msg.sender,
                block.timestamp + 300
            );

        amountA = amountA + amountB;

        return liquidity;
    }

    function zapOut(uint amount) public {
        require(enabled == 1, "Contract not enabled");
        unstake(amount);
        removeLiquidity(amount);
    }

    function stake(uint256 _theQty) public {
        require(enabled == 1, "Contract not enabled");
        require(IERC20(PAIR).balanceOf(msg.sender) >= _theQty, "You do no have enough to stake!");
        require(IERC20(PAIR).allowance(msg.sender, address(this)) >= _theQty, "Token transfer not approved");
        
        uint256 theValue = _theQty;
        if (ZapDatabase(DBaddi).getUserRecordBal(msg.sender) > 0)
        {
            uint256 rewards = calcRewards(msg.sender);
            if (rewards > 0)
            {
                require(IERC20(DBF).balanceOf(DBaddi) >= rewards, "Oops the rewards pool is empty!");
                IERC20(DBF).transferFrom(DBaddi, msg.sender, rewards);
            }

            theValue += ZapDatabase(DBaddi).getUserRecordBal(msg.sender);
        }
        IERC20(PAIR).transferFrom(msg.sender, DBaddi, _theQty);

        ZapDatabase(DBaddi).updateUserRecord(msg.sender, theValue, block.timestamp, block.timestamp);
        ZapDatabase(DBaddi).updateTotalLocked(ZapDatabase(DBaddi).getTotalLocked() + _theQty);
    }

    function unstake(uint256 _theQty) public {
        require(enabled == 1, "Contract not enabled");
        require(ZapDatabase(DBaddi).getUserRecordBal(msg.sender) >= _theQty, "You do not have this much to unstake!");
		
        uint256 theValue = 0;
        if (ZapDatabase(DBaddi).getUserRecordBal(msg.sender) > 0)
        {
            uint256 rewards = calcRewards(msg.sender);
            if (rewards > 0)
            {
                require(IERC20(DBF).balanceOf(DBaddi) >= rewards, "Oops the rewards pool is empty!");
                IERC20(DBF).transferFrom(DBaddi, msg.sender, rewards);
            }
            theValue = ZapDatabase(DBaddi).getUserRecordBal(msg.sender);
            theValue -= _theQty;
        }

        IERC20(PAIR).transferFrom(DBaddi, msg.sender, _theQty);
        
        ZapDatabase(DBaddi).updateUserRecord(msg.sender, theValue, block.timestamp, ZapDatabase(DBaddi).getUserRecordStakedTime(msg.sender));
        ZapDatabase(DBaddi).updateTotalLocked(ZapDatabase(DBaddi).getTotalLocked() - _theQty);
    }

    function claim() public {
        require(enabled == 1, "Contract not enabled");
		require(ZapDatabase(DBaddi).getUserRecordBal(msg.sender) > 0, "You do not have anything to unstake!");
        uint256 rewards = calcRewards(msg.sender);
        require(IERC20(DBF).balanceOf(DBaddi) >= rewards, "Oops the rewards pool is empty!");
        IERC20(DBF).transferFrom(DBaddi, msg.sender, rewards);
        ZapDatabase(DBaddi).updateUserRecord(msg.sender, ZapDatabase(DBaddi).getUserRecordBal(msg.sender), block.timestamp, ZapDatabase(DBaddi).getUserRecordStakedTime(msg.sender));
    }

    function calcRewards(address account) public view returns (uint256) {
        require(enabled == 1, "Contract not enabled");
        uint256 staked = ZapDatabase(DBaddi).getUserRecordBal(account);
        if (staked < 1e18)
        {
            return 0;
        }
        else
        {
            staked = staked / 1e18;
            uint256 rPerToken = rValue / (ZapDatabase(DBaddi).getTotalLocked() / 1e18);
            uint256 uSeconds = block.timestamp - ZapDatabase(DBaddi).getUserRecordLastClaimed(account);
            uint256 rSeconds = uSeconds * rPerToken;
            uint256 indvidualR = staked * rSeconds;
            indvidualR = (indvidualR * multiplier) / 10000;

            return indvidualR;
        }
    }

    function rescueTokens(address account, address _adr, uint256 amount) public {
        require(ZapDatabase(DBaddi).isAdmin(msg.sender) == 1, "Your not an admin");
        IERC20(_adr).transfer(account,amount);
    }

    function rescueNft(uint _id,address recipient, address NFT) public {
        require(ZapDatabase(DBaddi).isAdmin(msg.sender) == 1, "Your not an admin");
        ERC721(NFT).transferFrom(address(this),recipient, _id);
    }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"DBF","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DBaddi","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapWCROFORDBF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WCRO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"WCROAmount","type":"uint256"},{"internalType":"uint256","name":"DBFAmount","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"calcRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enabled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenPriceDBFTOWCRO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenPriceWCROTODBF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"NFT","type":"address"}],"name":"rescueNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"_adr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_Addi","type":"address"}],"name":"setDBAddi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_enabled","type":"uint256"}],"name":"setEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mul","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_theQty","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_theQty","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zapInNoStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zapOut","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052733a59f3466ec3957604e0bc02834a8ad5df2ed2cf600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735c7f8a570d578ed84e63fdfa7b1ee72deae1ae23600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a2ae6273dd65f9fa76c3d383ede9c1261e025dac600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d266f9eb1a93b00d068ece10682d97475439c6a3600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550667e02cf5b4a245460055561271060065560016007553480156200017b57600080fd5b506200019c62000190620001a260201b60201c565b620001aa60201b60201c565b6200026e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b615497806200027e6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637699cfb211610104578063ace3a8a7116100a2578063cea9d26f11610071578063cea9d26f146104f6578063ef55066614610512578063f2fde38b1461052e578063fe27824a1461054a576101cf565b8063ace3a8a71461045a578063ae1c786814610478578063c2b36e32146104a8578063c5da5794146104d8576101cf565b80638da5cb5b116100de5780638da5cb5b146103d45780639c8f9f23146103f25780639cd441da1461040e578063a694fc3a1461043e576101cf565b80637699cfb21461035857806376c257661461037457806385579741146103a4576101cf565b806332fe7b26116101715780634e71d92d1161014b5780634e71d92d1461030c578063641579a61461031657806370e0dd3214610332578063715018a61461034e576101cf565b806332fe7b26146102b457806335f2df57146102d257806341c5d964146102ee576101cf565b80631b3ed722116101ad5780631b3ed7221461023e5780631d470cb11461025c578063238dafe01461027a5780632e17de7814610298576101cf565b8063150b7a02146101d457806315bbb15b1461020457806315d429bf14610220575b600080fd5b6101ee60048036038101906101e99190614409565b610566565b6040516101fb91906144c7565b60405180910390f35b61021e600480360381019061021991906144e2565b61057a565b005b610228610661565b604051610235919061451e565b60405180910390f35b610246610687565b6040516102539190614548565b60405180910390f35b61026461068d565b604051610271919061451e565b60405180910390f35b6102826106b3565b60405161028f9190614548565b60405180910390f35b6102b260048036038101906102ad91906144e2565b6106b9565b005b6102bc610e2a565b6040516102c9919061451e565b60405180910390f35b6102ec60048036038101906102e79190614563565b610e42565b005b6102f6610fa8565b6040516103039190614548565b60405180910390f35b610314610fae565b005b610330600480360381019061032b91906144e2565b61146f565b005b61034c60048036038101906103479190614590565b6115e0565b005b610356611731565b005b610372600480360381019061036d91906144e2565b6117b9565b005b61038e600480360381019061038991906144e2565b611d19565b60405161039b9190614548565b60405180910390f35b6103be60048036038101906103b991906144e2565b611e3f565b6040516103cb9190614548565b60405180910390f35b6103dc611f65565b6040516103e9919061451e565b60405180910390f35b61040c600480360381019061040791906144e2565b611f8e565b005b610428600480360381019061042391906145e3565b6123db565b6040516104359190614548565b60405180910390f35b610458600480360381019061045391906144e2565b612b63565b005b61046261331a565b60405161046f919061451e565b60405180910390f35b610492600480360381019061048d9190614563565b613340565b60405161049f9190614548565b60405180910390f35b6104c260048036038101906104bd91906144e2565b613602565b6040516104cf9190614548565b60405180910390f35b6104e0613e18565b6040516104ed919061451e565b60405180910390f35b610510600480360381019061050b9190614623565b613e3e565b005b61052c600480360381019061052791906144e2565b613f9f565b005b61054860048036038101906105439190614563565b613ffe565b005b610564600480360381019061055f91906144e2565b6140f5565b005b600063150b7a0260e01b9050949350505050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b81526004016105d6919061451e565b602060405180830381865afa1580156105f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610617919061468b565b14610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e90614715565b60405180910390fd5b8060078190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6001600754146106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590614781565b60405180910390fd5b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b815260040161075a919061451e565b602060405180830381865afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b919061468b565b10156107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390614813565b60405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b815260040161083a919061451e565b602060405180830381865afa158015610857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087b919061468b565b1115610b0b57600061088c33613340565b90506000811115610a5d5780600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610915919061451e565b602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610956919061468b565b1015610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e9061487f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401610a189392919061489f565b6020604051808303816000875af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b919061490e565b505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401610ab8919061451e565b602060405180830381865afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af9919061468b565b91508282610b07919061496a565b9150505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633856040518463ffffffff1660e01b8152600401610b8c9392919061489f565b6020604051808303816000875af1158015610bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcf919061490e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663757704f1338342600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd87af6b336040518263ffffffff1660e01b8152600401610c6c919061451e565b602060405180830381865afa158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad919061468b565b6040518563ffffffff1660e01b8152600401610ccc949392919061499e565b600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637620aa5f83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4732da66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce919061468b565b610dd8919061496a565b6040518263ffffffff1660e01b8152600401610df49190614548565b600060405180830381600087803b158015610e0e57600080fd5b505af1158015610e22573d6000803e3d6000fd5b505050505050565b73145677fc4d9b8f19b5d56d1820c48e0443049a3081565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b8152600401610e9e919061451e565b602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf919061468b565b14610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690614715565b60405180910390fd5b600160075414610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90614781565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b600160075414610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90614781565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401611050919061451e565b602060405180830381865afa15801561106d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611091919061468b565b116110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614a55565b60405180910390fd5b60006110dc33613340565b905080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161115c919061451e565b602060405180830381865afa158015611179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119d919061468b565b10156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d59061487f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b815260040161125f9392919061489f565b6020604051808303816000875af115801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a2919061490e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663757704f133600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b815260040161133d919061451e565b602060405180830381865afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e919061468b565b42600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd87af6b336040518263ffffffff1660e01b81526004016113da919061451e565b602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b919061468b565b6040518563ffffffff1660e01b815260040161143a949392919061499e565b600060405180830381600087803b15801561145457600080fd5b505af1158015611468573d6000803e3d6000fd5b5050505050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b81526004016114cb919061451e565b602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150c919061468b565b1461154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390614715565b60405180910390fd5b600160075414611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614781565b60405180910390fd5b6127108110156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90614ae7565b60405180910390fd5b8060068190555050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b815260040161163c919061451e565b602060405180830381865afa158015611659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167d919061468b565b146116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b490614715565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3084866040518463ffffffff1660e01b81526004016116fa9392919061489f565b600060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b50505050505050565b61173961414f565b73ffffffffffffffffffffffffffffffffffffffff16611757611f65565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490614b53565b60405180910390fd5b6117b76000614157565b565b6001600754146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590614781565b60405180910390fd5b600060626118176064846118129190614ba2565b611e3f565b6118219190614bd3565b905081600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161187f919061451e565b602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c0919061468b565b1015611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614c61565b60405180910390fd5b81600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161195f929190614c81565b602060405180830381865afa15801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a0919061468b565b10156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614cf6565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611a409392919061489f565b6020604051808303816000875af1158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a83919061490e565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b8152600401611af5929190614d16565b6020604051808303816000875af1158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b38919061490e565b506060600267ffffffffffffffff811115611b5657611b556142de565b5b604051908082528060200260200182016040528015611b845781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110611bbe57611bbd614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611c2f57611c2e614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff166338ed17398484843361012c42611cab9190614d6e565b6040518663ffffffff1660e01b8152600401611ccb959493929190614e60565b6000604051808303816000875af1158015611cea573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d139190614f82565b50505050565b6000600160075414611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790614781565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df9919061504d565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150808286611e2b9190614bd3565b611e359190614ba2565b9350505050919050565b6000600160075414611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90614781565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f919061504d565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150818186611f519190614bd3565b611f5b9190614ba2565b9350505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160075414611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca90614781565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161202f919061451e565b602060405180830381865afa15801561204c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612070919061468b565b10156120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890615112565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161210f929190614c81565b602060405180830381865afa15801561212c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612150919061468b565b1015612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890614cf6565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016121f09392919061489f565b6020604051808303816000875af115801561220f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612233919061490e565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30836040518363ffffffff1660e01b81526004016122a5929190614d16565b6020604051808303816000875af11580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e8919061490e565b5073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff1663baa2abde600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846001803361012c426123729190614d6e565b6040518863ffffffff1660e01b81526004016123949796959493929190615177565b60408051808303816000875af11580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d691906151e6565b505050565b6000600160075414612422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241990614781565b60405180910390fd5b82600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161247e919061451e565b602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf919061468b565b1015612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f790614c61565b60405180910390fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161255c919061451e565b602060405180830381865afa158015612579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259d919061468b565b10156125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590615272565b60405180910390fd5b82600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161263c929190614c81565b602060405180830381865afa158015612659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267d919061468b565b10156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cf6565b60405180910390fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161271c929190614c81565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d919061468b565b101561279e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279590614cf6565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016127fd9392919061489f565b6020604051808303816000875af115801561281c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612840919061490e565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016128a09392919061489f565b6020604051808303816000875af11580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e3919061490e565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30856040518363ffffffff1660e01b8152600401612955929190614d16565b6020604051808303816000875af1158015612974573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612998919061490e565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b8152600401612a0a929190614d16565b6020604051808303816000875af1158015612a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4d919061490e565b50600080600073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff1663e8e33700600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689896001803361012c42612add9190614d6e565b6040518963ffffffff1660e01b8152600401612b00989796959493929190615292565b6060604051808303816000875af1158015612b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b439190615310565b9250925092508183612b559190614d6e565b925080935050505092915050565b600160075414612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614781565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612c04919061451e565b602060405180830381865afa158015612c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c45919061468b565b1015612c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d906153af565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401612ce4929190614c81565b602060405180830381865afa158015612d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d25919061468b565b1015612d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5d90614cf6565b60405180910390fd5b60008190506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401612dc8919061451e565b602060405180830381865afa158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e09919061468b565b1115613096576000612e1a33613340565b90506000811115612feb5780600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612ea3919061451e565b602060405180830381865afa158015612ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee4919061468b565b1015612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061487f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401612fa69392919061489f565b6020604051808303816000875af1158015612fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe9919061490e565b505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401613046919061451e565b602060405180830381865afa158015613063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613087919061468b565b826130929190614d6e565b9150505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b81526004016131179392919061489f565b6020604051808303816000875af1158015613136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315a919061490e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663757704f1338342426040518563ffffffff1660e01b81526004016131bc949392919061499e565b600060405180830381600087803b1580156131d657600080fd5b505af11580156131ea573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637620aa5f83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4732da66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561329a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132be919061468b565b6132c89190614d6e565b6040518263ffffffff1660e01b81526004016132e49190614548565b600060405180830381600087803b1580156132fe57600080fd5b505af1158015613312573d6000803e3d6000fd5b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160075414613387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337e90614781565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8846040518263ffffffff1660e01b81526004016133e4919061451e565b602060405180830381865afa158015613401573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613425919061468b565b9050670de0b6b3a76400008110156134415760009150506135fd565b670de0b6b3a7640000816134559190614ba2565b90506000670de0b6b3a7640000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4732da66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f3919061468b565b6134fd9190614ba2565b60055461350a9190614ba2565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8442ed6866040518263ffffffff1660e01b8152600401613569919061451e565b602060405180830381865afa158015613586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135aa919061468b565b426135b5919061496a565b9050600082826135c59190614bd3565b9050600081856135d59190614bd3565b9050612710600654826135e89190614bd3565b6135f29190614ba2565b905080955050505050505b919050565b6000600160075414613649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364090614781565b60405180910390fd5b60006002836136589190614ba2565b90506000606260646136756002876136709190614ba2565b611e3f565b61367f9190614ba2565b6136899190614bd3565b905081600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016136e7919061451e565b602060405180830381865afa158015613704573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613728919061468b565b1015613769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376090614c61565b60405180910390fd5b81600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016137c7929190614c81565b602060405180830381865afa1580156137e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613808919061468b565b1015613849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384090614cf6565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016138a89392919061489f565b6020604051808303816000875af11580156138c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138eb919061490e565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b815260040161395d929190614d16565b6020604051808303816000875af115801561397c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a0919061490e565b506060600267ffffffffffffffff8111156139be576139bd6142de565b5b6040519080825280602002602001820160405280156139ec5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110613a2657613a25614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613a9757613a96614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff166338ed17398484843061012c42613b139190614d6e565b6040518663ffffffff1660e01b8152600401613b33959493929190614e60565b6000604051808303816000875af1158015613b52573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613b7b9190614f82565b506062606484613b8b9190614ba2565b613b959190614bd3565b9250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30856040518363ffffffff1660e01b8152600401613c08929190614d16565b6020604051808303816000875af1158015613c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c4b919061490e565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b8152600401613cbd929190614d16565b6020604051808303816000875af1158015613cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d00919061490e565b50600080600073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff1663e8e33700600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689896001803361012c42613d909190614d6e565b6040518963ffffffff1660e01b8152600401613db3989796959493929190615292565b6060604051808303816000875af1158015613dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df69190615310565b9250925092508183613e089190614d6e565b9250809650505050505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b8152600401613e9a919061451e565b602060405180830381865afa158015613eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edb919061468b565b14613f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1290614715565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401613f56929190614d16565b6020604051808303816000875af1158015613f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f99919061490e565b50505050565b600160075414613fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fdb90614781565b60405180910390fd5b6000613fef82613602565b9050613ffa81612b63565b5050565b61400661414f565b73ffffffffffffffffffffffffffffffffffffffff16614024611f65565b73ffffffffffffffffffffffffffffffffffffffff161461407a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407190614b53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036140e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e090615441565b60405180910390fd5b6140f281614157565b50565b60016007541461413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413190614781565b60405180910390fd5b614143816106b9565b61414c81611f8e565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061425a8261422f565b9050919050565b61426a8161424f565b811461427557600080fd5b50565b60008135905061428781614261565b92915050565b6000819050919050565b6142a08161428d565b81146142ab57600080fd5b50565b6000813590506142bd81614297565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614316826142cd565b810181811067ffffffffffffffff82111715614335576143346142de565b5b80604052505050565b600061434861421b565b9050614354828261430d565b919050565b600067ffffffffffffffff821115614374576143736142de565b5b61437d826142cd565b9050602081019050919050565b82818337600083830152505050565b60006143ac6143a784614359565b61433e565b9050828152602081018484840111156143c8576143c76142c8565b5b6143d384828561438a565b509392505050565b600082601f8301126143f0576143ef6142c3565b5b8135614400848260208601614399565b91505092915050565b6000806000806080858703121561442357614422614225565b5b600061443187828801614278565b945050602061444287828801614278565b9350506040614453878288016142ae565b925050606085013567ffffffffffffffff8111156144745761447361422a565b5b614480878288016143db565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6144c18161448c565b82525050565b60006020820190506144dc60008301846144b8565b92915050565b6000602082840312156144f8576144f7614225565b5b6000614506848285016142ae565b91505092915050565b6145188161424f565b82525050565b6000602082019050614533600083018461450f565b92915050565b6145428161428d565b82525050565b600060208201905061455d6000830184614539565b92915050565b60006020828403121561457957614578614225565b5b600061458784828501614278565b91505092915050565b6000806000606084860312156145a9576145a8614225565b5b60006145b7868287016142ae565b93505060206145c886828701614278565b92505060406145d986828701614278565b9150509250925092565b600080604083850312156145fa576145f9614225565b5b6000614608858286016142ae565b9250506020614619858286016142ae565b9150509250929050565b60008060006060848603121561463c5761463b614225565b5b600061464a86828701614278565b935050602061465b86828701614278565b925050604061466c868287016142ae565b9150509250925092565b60008151905061468581614297565b92915050565b6000602082840312156146a1576146a0614225565b5b60006146af84828501614676565b91505092915050565b600082825260208201905092915050565b7f596f7572206e6f7420616e2061646d696e000000000000000000000000000000600082015250565b60006146ff6011836146b8565b915061470a826146c9565b602082019050919050565b6000602082019050818103600083015261472e816146f2565b9050919050565b7f436f6e7472616374206e6f7420656e61626c6564000000000000000000000000600082015250565b600061476b6014836146b8565b915061477682614735565b602082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b7f596f7520646f206e6f7420686176652074686973206d75636820746f20756e7360008201527f74616b6521000000000000000000000000000000000000000000000000000000602082015250565b60006147fd6025836146b8565b9150614808826147a1565b604082019050919050565b6000602082019050818103600083015261482c816147f0565b9050919050565b7f4f6f707320746865207265776172647320706f6f6c20697320656d7074792100600082015250565b6000614869601f836146b8565b915061487482614833565b602082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b60006060820190506148b4600083018661450f565b6148c1602083018561450f565b6148ce6040830184614539565b949350505050565b60008115159050919050565b6148eb816148d6565b81146148f657600080fd5b50565b600081519050614908816148e2565b92915050565b60006020828403121561492457614923614225565b5b6000614932848285016148f9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149758261428d565b91506149808361428d565b92508282039050818111156149985761499761493b565b5b92915050565b60006080820190506149b3600083018761450f565b6149c06020830186614539565b6149cd6040830185614539565b6149da6060830184614539565b95945050505050565b7f596f7520646f206e6f74206861766520616e797468696e6720746f20756e737460008201527f616b652100000000000000000000000000000000000000000000000000000000602082015250565b6000614a3f6024836146b8565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f4d756c7469706c696572206d757374206265206174206c65617374203130303060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ad16021836146b8565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b3d6020836146b8565b9150614b4882614b07565b602082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bad8261428d565b9150614bb88361428d565b925082614bc857614bc7614b73565b5b828204905092915050565b6000614bde8261428d565b9150614be98361428d565b9250828202614bf78161428d565b91508282048414831517614c0e57614c0d61493b565b5b5092915050565b7f596f7520646f6e7420686176652074686973206d756368205743524f00000000600082015250565b6000614c4b601c836146b8565b9150614c5682614c15565b602082019050919050565b60006020820190508181036000830152614c7a81614c3e565b9050919050565b6000604082019050614c96600083018561450f565b614ca3602083018461450f565b9392505050565b7f546f6b656e207472616e73666572206e6f7420617070726f7665640000000000600082015250565b6000614ce0601b836146b8565b9150614ceb82614caa565b602082019050919050565b60006020820190508181036000830152614d0f81614cd3565b9050919050565b6000604082019050614d2b600083018561450f565b614d386020830184614539565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d798261428d565b9150614d848361428d565b9250828201905080821115614d9c57614d9b61493b565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dd78161424f565b82525050565b6000614de98383614dce565b60208301905092915050565b6000602082019050919050565b6000614e0d82614da2565b614e178185614dad565b9350614e2283614dbe565b8060005b83811015614e53578151614e3a8882614ddd565b9750614e4583614df5565b925050600181019050614e26565b5085935050505092915050565b600060a082019050614e756000830188614539565b614e826020830187614539565b8181036040830152614e948186614e02565b9050614ea3606083018561450f565b614eb06080830184614539565b9695505050505050565b600067ffffffffffffffff821115614ed557614ed46142de565b5b602082029050602081019050919050565b600080fd5b6000614efe614ef984614eba565b61433e565b90508083825260208201905060208402830185811115614f2157614f20614ee6565b5b835b81811015614f4a5780614f368882614676565b845260208401935050602081019050614f23565b5050509392505050565b600082601f830112614f6957614f686142c3565b5b8151614f79848260208601614eeb565b91505092915050565b600060208284031215614f9857614f97614225565b5b600082015167ffffffffffffffff811115614fb657614fb561422a565b5b614fc284828501614f54565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614fee81614fcb565b8114614ff957600080fd5b50565b60008151905061500b81614fe5565b92915050565b600063ffffffff82169050919050565b61502a81615011565b811461503557600080fd5b50565b60008151905061504781615021565b92915050565b60008060006060848603121561506657615065614225565b5b600061507486828701614ffc565b935050602061508586828701614ffc565b925050604061509686828701615038565b9150509250925092565b7f596f7520646f6e7420686176652074686973206d756368206c6971756964697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b60006150fc6021836146b8565b9150615107826150a0565b604082019050919050565b6000602082019050818103600083015261512b816150ef565b9050919050565b6000819050919050565b6000819050919050565b600061516161515c61515784615132565b61513c565b61428d565b9050919050565b61517181615146565b82525050565b600060e08201905061518c600083018a61450f565b615199602083018961450f565b6151a66040830188614539565b6151b36060830187615168565b6151c06080830186615168565b6151cd60a083018561450f565b6151da60c0830184614539565b98975050505050505050565b600080604083850312156151fd576151fc614225565b5b600061520b85828601614676565b925050602061521c85828601614676565b9150509250929050565b7f596f7520646f6e7420686176652074686973206d756368204442460000000000600082015250565b600061525c601b836146b8565b915061526782615226565b602082019050919050565b6000602082019050818103600083015261528b8161524f565b9050919050565b6000610100820190506152a8600083018b61450f565b6152b5602083018a61450f565b6152c26040830189614539565b6152cf6060830188614539565b6152dc6080830187615168565b6152e960a0830186615168565b6152f660c083018561450f565b61530360e0830184614539565b9998505050505050505050565b60008060006060848603121561532957615328614225565b5b600061533786828701614676565b935050602061534886828701614676565b925050604061535986828701614676565b9150509250925092565b7f596f7520646f206e6f206861766520656e6f75676820746f207374616b652100600082015250565b6000615399601f836146b8565b91506153a482615363565b602082019050919050565b600060208201905081810360008301526153c88161538c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061542b6026836146b8565b9150615436826153cf565b604082019050919050565b6000602082019050818103600083015261545a8161541e565b905091905056fea26469706673582212200d75faae1e1e9ee8ad5d8c2f1047ee454d0e0fe7b57514f7ed75c42dd0e1d2eb64736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637699cfb211610104578063ace3a8a7116100a2578063cea9d26f11610071578063cea9d26f146104f6578063ef55066614610512578063f2fde38b1461052e578063fe27824a1461054a576101cf565b8063ace3a8a71461045a578063ae1c786814610478578063c2b36e32146104a8578063c5da5794146104d8576101cf565b80638da5cb5b116100de5780638da5cb5b146103d45780639c8f9f23146103f25780639cd441da1461040e578063a694fc3a1461043e576101cf565b80637699cfb21461035857806376c257661461037457806385579741146103a4576101cf565b806332fe7b26116101715780634e71d92d1161014b5780634e71d92d1461030c578063641579a61461031657806370e0dd3214610332578063715018a61461034e576101cf565b806332fe7b26146102b457806335f2df57146102d257806341c5d964146102ee576101cf565b80631b3ed722116101ad5780631b3ed7221461023e5780631d470cb11461025c578063238dafe01461027a5780632e17de7814610298576101cf565b8063150b7a02146101d457806315bbb15b1461020457806315d429bf14610220575b600080fd5b6101ee60048036038101906101e99190614409565b610566565b6040516101fb91906144c7565b60405180910390f35b61021e600480360381019061021991906144e2565b61057a565b005b610228610661565b604051610235919061451e565b60405180910390f35b610246610687565b6040516102539190614548565b60405180910390f35b61026461068d565b604051610271919061451e565b60405180910390f35b6102826106b3565b60405161028f9190614548565b60405180910390f35b6102b260048036038101906102ad91906144e2565b6106b9565b005b6102bc610e2a565b6040516102c9919061451e565b60405180910390f35b6102ec60048036038101906102e79190614563565b610e42565b005b6102f6610fa8565b6040516103039190614548565b60405180910390f35b610314610fae565b005b610330600480360381019061032b91906144e2565b61146f565b005b61034c60048036038101906103479190614590565b6115e0565b005b610356611731565b005b610372600480360381019061036d91906144e2565b6117b9565b005b61038e600480360381019061038991906144e2565b611d19565b60405161039b9190614548565b60405180910390f35b6103be60048036038101906103b991906144e2565b611e3f565b6040516103cb9190614548565b60405180910390f35b6103dc611f65565b6040516103e9919061451e565b60405180910390f35b61040c600480360381019061040791906144e2565b611f8e565b005b610428600480360381019061042391906145e3565b6123db565b6040516104359190614548565b60405180910390f35b610458600480360381019061045391906144e2565b612b63565b005b61046261331a565b60405161046f919061451e565b60405180910390f35b610492600480360381019061048d9190614563565b613340565b60405161049f9190614548565b60405180910390f35b6104c260048036038101906104bd91906144e2565b613602565b6040516104cf9190614548565b60405180910390f35b6104e0613e18565b6040516104ed919061451e565b60405180910390f35b610510600480360381019061050b9190614623565b613e3e565b005b61052c600480360381019061052791906144e2565b613f9f565b005b61054860048036038101906105439190614563565b613ffe565b005b610564600480360381019061055f91906144e2565b6140f5565b005b600063150b7a0260e01b9050949350505050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b81526004016105d6919061451e565b602060405180830381865afa1580156105f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610617919061468b565b14610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e90614715565b60405180910390fd5b8060078190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6001600754146106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590614781565b60405180910390fd5b80600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b815260040161075a919061451e565b602060405180830381865afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b919061468b565b10156107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d390614813565b60405180910390fd5b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b815260040161083a919061451e565b602060405180830381865afa158015610857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087b919061468b565b1115610b0b57600061088c33613340565b90506000811115610a5d5780600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610915919061451e565b602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610956919061468b565b1015610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e9061487f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401610a189392919061489f565b6020604051808303816000875af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b919061490e565b505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401610ab8919061451e565b602060405180830381865afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af9919061468b565b91508282610b07919061496a565b9150505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633856040518463ffffffff1660e01b8152600401610b8c9392919061489f565b6020604051808303816000875af1158015610bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcf919061490e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663757704f1338342600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd87af6b336040518263ffffffff1660e01b8152600401610c6c919061451e565b602060405180830381865afa158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad919061468b565b6040518563ffffffff1660e01b8152600401610ccc949392919061499e565b600060405180830381600087803b158015610ce657600080fd5b505af1158015610cfa573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637620aa5f83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4732da66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce919061468b565b610dd8919061496a565b6040518263ffffffff1660e01b8152600401610df49190614548565b600060405180830381600087803b158015610e0e57600080fd5b505af1158015610e22573d6000803e3d6000fd5b505050505050565b73145677fc4d9b8f19b5d56d1820c48e0443049a3081565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b8152600401610e9e919061451e565b602060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf919061468b565b14610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690614715565b60405180910390fd5b600160075414610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90614781565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b600160075414610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90614781565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401611050919061451e565b602060405180830381865afa15801561106d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611091919061468b565b116110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614a55565b60405180910390fd5b60006110dc33613340565b905080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161115c919061451e565b602060405180830381865afa158015611179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119d919061468b565b10156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d59061487f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b815260040161125f9392919061489f565b6020604051808303816000875af115801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a2919061490e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663757704f133600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b815260040161133d919061451e565b602060405180830381865afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e919061468b565b42600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd87af6b336040518263ffffffff1660e01b81526004016113da919061451e565b602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b919061468b565b6040518563ffffffff1660e01b815260040161143a949392919061499e565b600060405180830381600087803b15801561145457600080fd5b505af1158015611468573d6000803e3d6000fd5b5050505050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b81526004016114cb919061451e565b602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150c919061468b565b1461154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390614715565b60405180910390fd5b600160075414611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890614781565b60405180910390fd5b6127108110156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90614ae7565b60405180910390fd5b8060068190555050565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b815260040161163c919061451e565b602060405180830381865afa158015611659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167d919061468b565b146116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b490614715565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3084866040518463ffffffff1660e01b81526004016116fa9392919061489f565b600060405180830381600087803b15801561171457600080fd5b505af1158015611728573d6000803e3d6000fd5b50505050505050565b61173961414f565b73ffffffffffffffffffffffffffffffffffffffff16611757611f65565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490614b53565b60405180910390fd5b6117b76000614157565b565b6001600754146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590614781565b60405180910390fd5b600060626118176064846118129190614ba2565b611e3f565b6118219190614bd3565b905081600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161187f919061451e565b602060405180830381865afa15801561189c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c0919061468b565b1015611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614c61565b60405180910390fd5b81600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161195f929190614c81565b602060405180830381865afa15801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a0919061468b565b10156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890614cf6565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611a409392919061489f565b6020604051808303816000875af1158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a83919061490e565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b8152600401611af5929190614d16565b6020604051808303816000875af1158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b38919061490e565b506060600267ffffffffffffffff811115611b5657611b556142de565b5b604051908082528060200260200182016040528015611b845781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110611bbe57611bbd614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611c2f57611c2e614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff166338ed17398484843361012c42611cab9190614d6e565b6040518663ffffffff1660e01b8152600401611ccb959493929190614e60565b6000604051808303816000875af1158015611cea573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d139190614f82565b50505050565b6000600160075414611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790614781565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df9919061504d565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150808286611e2b9190614bd3565b611e359190614ba2565b9350505050919050565b6000600160075414611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90614781565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611efb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f919061504d565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150818186611f519190614bd3565b611f5b9190614ba2565b9350505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160075414611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca90614781565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161202f919061451e565b602060405180830381865afa15801561204c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612070919061468b565b10156120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890615112565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161210f929190614c81565b602060405180830381865afa15801561212c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612150919061468b565b1015612191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218890614cf6565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016121f09392919061489f565b6020604051808303816000875af115801561220f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612233919061490e565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30836040518363ffffffff1660e01b81526004016122a5929190614d16565b6020604051808303816000875af11580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e8919061490e565b5073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff1663baa2abde600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846001803361012c426123729190614d6e565b6040518863ffffffff1660e01b81526004016123949796959493929190615177565b60408051808303816000875af11580156123b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d691906151e6565b505050565b6000600160075414612422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241990614781565b60405180910390fd5b82600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161247e919061451e565b602060405180830381865afa15801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf919061468b565b1015612500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f790614c61565b60405180910390fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161255c919061451e565b602060405180830381865afa158015612579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259d919061468b565b10156125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590615272565b60405180910390fd5b82600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161263c929190614c81565b602060405180830381865afa158015612659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267d919061468b565b10156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590614cf6565b60405180910390fd5b81600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161271c929190614c81565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d919061468b565b101561279e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279590614cf6565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016127fd9392919061489f565b6020604051808303816000875af115801561281c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612840919061490e565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b81526004016128a09392919061489f565b6020604051808303816000875af11580156128bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e3919061490e565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30856040518363ffffffff1660e01b8152600401612955929190614d16565b6020604051808303816000875af1158015612974573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612998919061490e565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b8152600401612a0a929190614d16565b6020604051808303816000875af1158015612a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4d919061490e565b50600080600073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff1663e8e33700600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689896001803361012c42612add9190614d6e565b6040518963ffffffff1660e01b8152600401612b00989796959493929190615292565b6060604051808303816000875af1158015612b1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b439190615310565b9250925092508183612b559190614d6e565b925080935050505092915050565b600160075414612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9f90614781565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612c04919061451e565b602060405180830381865afa158015612c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c45919061468b565b1015612c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d906153af565b60405180910390fd5b80600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401612ce4929190614c81565b602060405180830381865afa158015612d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d25919061468b565b1015612d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5d90614cf6565b60405180910390fd5b60008190506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401612dc8919061451e565b602060405180830381865afa158015612de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e09919061468b565b1115613096576000612e1a33613340565b90506000811115612feb5780600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612ea3919061451e565b602060405180830381865afa158015612ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee4919061468b565b1015612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061487f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401612fa69392919061489f565b6020604051808303816000875af1158015612fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe9919061490e565b505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8336040518263ffffffff1660e01b8152600401613046919061451e565b602060405180830381865afa158015613063573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613087919061468b565b826130929190614d6e565b9150505b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b81526004016131179392919061489f565b6020604051808303816000875af1158015613136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315a919061490e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663757704f1338342426040518563ffffffff1660e01b81526004016131bc949392919061499e565b600060405180830381600087803b1580156131d657600080fd5b505af11580156131ea573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637620aa5f83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4732da66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561329a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132be919061468b565b6132c89190614d6e565b6040518263ffffffff1660e01b81526004016132e49190614548565b600060405180830381600087803b1580156132fe57600080fd5b505af1158015613312573d6000803e3d6000fd5b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160075414613387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337e90614781565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166380a324d8846040518263ffffffff1660e01b81526004016133e4919061451e565b602060405180830381865afa158015613401573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613425919061468b565b9050670de0b6b3a76400008110156134415760009150506135fd565b670de0b6b3a7640000816134559190614ba2565b90506000670de0b6b3a7640000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4732da66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f3919061468b565b6134fd9190614ba2565b60055461350a9190614ba2565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8442ed6866040518263ffffffff1660e01b8152600401613569919061451e565b602060405180830381865afa158015613586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135aa919061468b565b426135b5919061496a565b9050600082826135c59190614bd3565b9050600081856135d59190614bd3565b9050612710600654826135e89190614bd3565b6135f29190614ba2565b905080955050505050505b919050565b6000600160075414613649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364090614781565b60405180910390fd5b60006002836136589190614ba2565b90506000606260646136756002876136709190614ba2565b611e3f565b61367f9190614ba2565b6136899190614bd3565b905081600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016136e7919061451e565b602060405180830381865afa158015613704573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613728919061468b565b1015613769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376090614c61565b60405180910390fd5b81600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016137c7929190614c81565b602060405180830381865afa1580156137e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613808919061468b565b1015613849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384090614cf6565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016138a89392919061489f565b6020604051808303816000875af11580156138c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138eb919061490e565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b815260040161395d929190614d16565b6020604051808303816000875af115801561397c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a0919061490e565b506060600267ffffffffffffffff8111156139be576139bd6142de565b5b6040519080825280602002602001820160405280156139ec5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110613a2657613a25614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613a9757613a96614d3f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff166338ed17398484843061012c42613b139190614d6e565b6040518663ffffffff1660e01b8152600401613b33959493929190614e60565b6000604051808303816000875af1158015613b52573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613b7b9190614f82565b506062606484613b8b9190614ba2565b613b959190614bd3565b9250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30856040518363ffffffff1660e01b8152600401613c08929190614d16565b6020604051808303816000875af1158015613c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c4b919061490e565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b373145677fc4d9b8f19b5d56d1820c48e0443049a30846040518363ffffffff1660e01b8152600401613cbd929190614d16565b6020604051808303816000875af1158015613cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d00919061490e565b50600080600073145677fc4d9b8f19b5d56d1820c48e0443049a3073ffffffffffffffffffffffffffffffffffffffff1663e8e33700600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689896001803361012c42613d909190614d6e565b6040518963ffffffff1660e01b8152600401613db3989796959493929190615292565b6060604051808303816000875af1158015613dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df69190615310565b9250925092508183613e089190614d6e565b9250809650505050505050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166324d7806c336040518263ffffffff1660e01b8152600401613e9a919061451e565b602060405180830381865afa158015613eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edb919061468b565b14613f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1290614715565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401613f56929190614d16565b6020604051808303816000875af1158015613f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f99919061490e565b50505050565b600160075414613fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fdb90614781565b60405180910390fd5b6000613fef82613602565b9050613ffa81612b63565b5050565b61400661414f565b73ffffffffffffffffffffffffffffffffffffffff16614024611f65565b73ffffffffffffffffffffffffffffffffffffffff161461407a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407190614b53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036140e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140e090615441565b60405180910390fd5b6140f281614157565b50565b60016007541461413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413190614781565b60405180910390fd5b614143816106b9565b61414c81611f8e565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061425a8261422f565b9050919050565b61426a8161424f565b811461427557600080fd5b50565b60008135905061428781614261565b92915050565b6000819050919050565b6142a08161428d565b81146142ab57600080fd5b50565b6000813590506142bd81614297565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614316826142cd565b810181811067ffffffffffffffff82111715614335576143346142de565b5b80604052505050565b600061434861421b565b9050614354828261430d565b919050565b600067ffffffffffffffff821115614374576143736142de565b5b61437d826142cd565b9050602081019050919050565b82818337600083830152505050565b60006143ac6143a784614359565b61433e565b9050828152602081018484840111156143c8576143c76142c8565b5b6143d384828561438a565b509392505050565b600082601f8301126143f0576143ef6142c3565b5b8135614400848260208601614399565b91505092915050565b6000806000806080858703121561442357614422614225565b5b600061443187828801614278565b945050602061444287828801614278565b9350506040614453878288016142ae565b925050606085013567ffffffffffffffff8111156144745761447361422a565b5b614480878288016143db565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6144c18161448c565b82525050565b60006020820190506144dc60008301846144b8565b92915050565b6000602082840312156144f8576144f7614225565b5b6000614506848285016142ae565b91505092915050565b6145188161424f565b82525050565b6000602082019050614533600083018461450f565b92915050565b6145428161428d565b82525050565b600060208201905061455d6000830184614539565b92915050565b60006020828403121561457957614578614225565b5b600061458784828501614278565b91505092915050565b6000806000606084860312156145a9576145a8614225565b5b60006145b7868287016142ae565b93505060206145c886828701614278565b92505060406145d986828701614278565b9150509250925092565b600080604083850312156145fa576145f9614225565b5b6000614608858286016142ae565b9250506020614619858286016142ae565b9150509250929050565b60008060006060848603121561463c5761463b614225565b5b600061464a86828701614278565b935050602061465b86828701614278565b925050604061466c868287016142ae565b9150509250925092565b60008151905061468581614297565b92915050565b6000602082840312156146a1576146a0614225565b5b60006146af84828501614676565b91505092915050565b600082825260208201905092915050565b7f596f7572206e6f7420616e2061646d696e000000000000000000000000000000600082015250565b60006146ff6011836146b8565b915061470a826146c9565b602082019050919050565b6000602082019050818103600083015261472e816146f2565b9050919050565b7f436f6e7472616374206e6f7420656e61626c6564000000000000000000000000600082015250565b600061476b6014836146b8565b915061477682614735565b602082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b7f596f7520646f206e6f7420686176652074686973206d75636820746f20756e7360008201527f74616b6521000000000000000000000000000000000000000000000000000000602082015250565b60006147fd6025836146b8565b9150614808826147a1565b604082019050919050565b6000602082019050818103600083015261482c816147f0565b9050919050565b7f4f6f707320746865207265776172647320706f6f6c20697320656d7074792100600082015250565b6000614869601f836146b8565b915061487482614833565b602082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b60006060820190506148b4600083018661450f565b6148c1602083018561450f565b6148ce6040830184614539565b949350505050565b60008115159050919050565b6148eb816148d6565b81146148f657600080fd5b50565b600081519050614908816148e2565b92915050565b60006020828403121561492457614923614225565b5b6000614932848285016148f9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149758261428d565b91506149808361428d565b92508282039050818111156149985761499761493b565b5b92915050565b60006080820190506149b3600083018761450f565b6149c06020830186614539565b6149cd6040830185614539565b6149da6060830184614539565b95945050505050565b7f596f7520646f206e6f74206861766520616e797468696e6720746f20756e737460008201527f616b652100000000000000000000000000000000000000000000000000000000602082015250565b6000614a3f6024836146b8565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f4d756c7469706c696572206d757374206265206174206c65617374203130303060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ad16021836146b8565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b3d6020836146b8565b9150614b4882614b07565b602082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bad8261428d565b9150614bb88361428d565b925082614bc857614bc7614b73565b5b828204905092915050565b6000614bde8261428d565b9150614be98361428d565b9250828202614bf78161428d565b91508282048414831517614c0e57614c0d61493b565b5b5092915050565b7f596f7520646f6e7420686176652074686973206d756368205743524f00000000600082015250565b6000614c4b601c836146b8565b9150614c5682614c15565b602082019050919050565b60006020820190508181036000830152614c7a81614c3e565b9050919050565b6000604082019050614c96600083018561450f565b614ca3602083018461450f565b9392505050565b7f546f6b656e207472616e73666572206e6f7420617070726f7665640000000000600082015250565b6000614ce0601b836146b8565b9150614ceb82614caa565b602082019050919050565b60006020820190508181036000830152614d0f81614cd3565b9050919050565b6000604082019050614d2b600083018561450f565b614d386020830184614539565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d798261428d565b9150614d848361428d565b9250828201905080821115614d9c57614d9b61493b565b5b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dd78161424f565b82525050565b6000614de98383614dce565b60208301905092915050565b6000602082019050919050565b6000614e0d82614da2565b614e178185614dad565b9350614e2283614dbe565b8060005b83811015614e53578151614e3a8882614ddd565b9750614e4583614df5565b925050600181019050614e26565b5085935050505092915050565b600060a082019050614e756000830188614539565b614e826020830187614539565b8181036040830152614e948186614e02565b9050614ea3606083018561450f565b614eb06080830184614539565b9695505050505050565b600067ffffffffffffffff821115614ed557614ed46142de565b5b602082029050602081019050919050565b600080fd5b6000614efe614ef984614eba565b61433e565b90508083825260208201905060208402830185811115614f2157614f20614ee6565b5b835b81811015614f4a5780614f368882614676565b845260208401935050602081019050614f23565b5050509392505050565b600082601f830112614f6957614f686142c3565b5b8151614f79848260208601614eeb565b91505092915050565b600060208284031215614f9857614f97614225565b5b600082015167ffffffffffffffff811115614fb657614fb561422a565b5b614fc284828501614f54565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614fee81614fcb565b8114614ff957600080fd5b50565b60008151905061500b81614fe5565b92915050565b600063ffffffff82169050919050565b61502a81615011565b811461503557600080fd5b50565b60008151905061504781615021565b92915050565b60008060006060848603121561506657615065614225565b5b600061507486828701614ffc565b935050602061508586828701614ffc565b925050604061509686828701615038565b9150509250925092565b7f596f7520646f6e7420686176652074686973206d756368206c6971756964697460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b60006150fc6021836146b8565b9150615107826150a0565b604082019050919050565b6000602082019050818103600083015261512b816150ef565b9050919050565b6000819050919050565b6000819050919050565b600061516161515c61515784615132565b61513c565b61428d565b9050919050565b61517181615146565b82525050565b600060e08201905061518c600083018a61450f565b615199602083018961450f565b6151a66040830188614539565b6151b36060830187615168565b6151c06080830186615168565b6151cd60a083018561450f565b6151da60c0830184614539565b98975050505050505050565b600080604083850312156151fd576151fc614225565b5b600061520b85828601614676565b925050602061521c85828601614676565b9150509250929050565b7f596f7520646f6e7420686176652074686973206d756368204442460000000000600082015250565b600061525c601b836146b8565b915061526782615226565b602082019050919050565b6000602082019050818103600083015261528b8161524f565b9050919050565b6000610100820190506152a8600083018b61450f565b6152b5602083018a61450f565b6152c26040830189614539565b6152cf6060830188614539565b6152dc6080830187615168565b6152e960a0830186615168565b6152f660c083018561450f565b61530360e0830184614539565b9998505050505050505050565b60008060006060848603121561532957615328614225565b5b600061533786828701614676565b935050602061534886828701614676565b925050604061535986828701614676565b9150509250925092565b7f596f7520646f206e6f206861766520656e6f75676820746f207374616b652100600082015250565b6000615399601f836146b8565b91506153a482615363565b602082019050919050565b600060208201905081810360008301526153c88161538c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061542b6026836146b8565b9150615436826153cf565b604082019050919050565b6000602082019050818103600083015261545a8161541e565b905091905056fea26469706673582212200d75faae1e1e9ee8ad5d8c2f1047ee454d0e0fe7b57514f7ed75c42dd0e1d2eb64736f6c63430008110033

Deployed Bytecode Sourcemap

22734:10466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8116:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23279:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22787:66;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23204:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22942:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23244:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30324:1064;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22860:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23454:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23156:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31396:588;;;:::i;:::-;;23677:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32972:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;769:103;;;:::i;:::-;;26497:876;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26209:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25921;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;546:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25204:709;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23967:1229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29232:1084;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23083:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31992:747;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27563:1493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23013:63;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32747:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27381:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;880:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29064:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8116:207;8259:6;8285:30;;;8278:37;;8116:207;;;;;;:::o;23279:167::-;23386:1;23355:6;;;;;;;;;;;23343:27;;;23371:10;23343:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;23335:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23430:8;23420:7;:18;;;;23279:167;:::o;22787:66::-;;;;;;;;;;;;;:::o;23204:33::-;;;;:::o;22942:64::-;;;;;;;;;;;;;:::o;23244:26::-;;;;:::o;30324:1064::-;30395:1;30384:7;;:12;30376:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;30492:7;30452:6;;;;;;;;;;;30440:36;;;30477:10;30440:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;30432:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;30556:16;30642:1;30603:6;;;;;;;;;;;30591:36;;;30628:10;30591:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;30587:478;;;30669:15;30687:23;30699:10;30687:11;:23::i;:::-;30669:41;;30739:1;30729:7;:11;30725:221;;;30815:7;30789:3;;;;;;;;;;;30782:21;;;30804:6;;;;;;;;;;;30782:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;30774:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;30884:3;;;;;;;;;;;30877:24;;;30902:6;;;;;;;;;;;30910:10;30922:7;30877:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30725:221;30983:6;;;;;;;;;;;30971:36;;;31008:10;30971:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30960:59;;31046:7;31034:19;;;;;:::i;:::-;;;30654:411;30587:478;31084:4;;;;;;;;;;;31077:25;;;31103:6;;;;;;;;;;;31111:10;31123:7;31077:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31164:6;;;;;;;;;;;31152:36;;;31189:10;31201:8;31211:15;31240:6;;;;;;;;;;;31228:43;;;31272:10;31228:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31152:132;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31307:6;;;;;;;;;;;31295:37;;;31372:7;31345:6;;;;;;;;;;;31333:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;31295:85;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30365:1023;30324:1064;:::o;22860:75::-;22893:42;22860:75;:::o;23454:215::-;23557:1;23526:6;;;;;;;;;;;23514:27;;;23542:10;23514:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;23506:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23610:1;23599:7;;:12;23591:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23656:5;23647:6;;:14;;;;;;;;;;;;;;;;;;23454:215;:::o;23156:41::-;;;;:::o;31396:588::-;31450:1;31439:7;;:12;31431:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;31540:1;31501:6;;;;;;;;;;;31489:36;;;31526:10;31489:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;31481:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31593:15;31611:23;31623:10;31611:11;:23::i;:::-;31593:41;;31686:7;31660:3;;;;;;;;;;;31653:21;;;31675:6;;;;;;;;;;;31653:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;31645:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;31747:3;;;;;;;;;;;31740:24;;;31765:6;;;;;;;;;;;31773:10;31785:7;31740:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31816:6;;;;;;;;;;;31804:36;;;31841:10;31865:6;;;;;;;;;;;31853:36;;;31890:10;31853:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31903:15;31932:6;;;;;;;;;;;31920:43;;;31964:10;31920:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31804:172;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31420:564;31396:588::o;23677:282::-;23783:1;23752:6;;;;;;;;;;;23740:27;;;23768:10;23740:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;23732:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23836:1;23825:7;;:12;23817:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23889:5;23881:4;:13;;23873:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23950:4;23937:10;:17;;;;23677:282;:::o;32972:225::-;33101:1;33070:6;;;;;;;;;;;33058:27;;;33086:10;33058:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;33050:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33142:3;33135:24;;;33168:4;33174:9;33185:3;33135:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32972:225;;;:::o;769:103::-;692:12;:10;:12::i;:::-;681:23;;:7;:5;:7::i;:::-;:23;;;673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;834:30:::1;861:1;834:18;:30::i;:::-;769:103::o:0;26497:876::-;26571:1;26560:7;;:12;26552:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;26608:14;26665:2;26626:36;26658:3;26649:6;:12;;;;:::i;:::-;26626:22;:36::i;:::-;:41;;;;:::i;:::-;26608:60;;26735:6;26704:4;;;;;;;;;;;26697:22;;;26720:10;26697:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;26689:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26846:6;26800:4;;;;;;;;;;;26793:22;;;26816:10;26836:4;26793:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;26785:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;26912:4;;;;;;;;;;;26905:25;;;26931:10;26951:4;26958:6;26905:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26983:4;;;;;;;;;;;26976:20;;;22893:42;27005:6;26976:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27025:21;27078:1;27064:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27057:23;;27101:4;;;;;;;;;;;27091;27096:1;27091:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;27126:3;;;;;;;;;;;27116:4;27121:1;27116:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;22893:42;27142:63;;;27224:6;27249:9;27277:4;27300:10;27347:3;27329:15;:21;;;;:::i;:::-;27142:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26541:832;;26497:876;:::o;26209:280::-;26274:4;26310:1;26299:7;;:12;26291:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;26347:18;26383:4;;;;;;;;;;;26347:41;;26400:9;26411;26425:3;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26399:43;;;;;;;;;26476:4;26470;26463:6;:11;;;;:::i;:::-;26462:18;;;;:::i;:::-;26455:26;;;;;26209:280;;;:::o;25921:::-;25986:4;26022:1;26011:7;;:12;26003:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;26059:18;26095:4;;;;;;;;;;;26059:41;;26112:9;26123;26137:3;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26111:43;;;;;;;;;26188:4;26182;26175:6;:11;;;;:::i;:::-;26174:18;;;;:::i;:::-;26167:26;;;;;25921:280;;;:::o;546:87::-;592:7;619:6;;;;;;;;;;;612:13;;546:87;:::o;25204:709::-;25279:1;25268:7;;:12;25260:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;25362:6;25331:4;;;;;;;;;;;25324:22;;;25347:10;25324:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;25316:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25478:6;25432:4;;;;;;;;;;;25425:22;;;25448:10;25468:4;25425:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;;25417:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;25544:4;;;;;;;;;;;25537:25;;;25563:10;25583:4;25590:6;25537:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25615:4;;;;;;;;;;;25608:20;;;22893:42;25637:6;25608:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22893:42;25657:54;;;25730:4;;;;;;;;;;;25753:3;;;;;;;;;;;25775:6;25800:1;25820;25840:10;25887:3;25869:15;:21;;;;:::i;:::-;25657:248;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25204:709;:::o;23967:1229::-;24038:4;24073:1;24062:7;;:12;24054:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24156:10;24125:4;;;;;;;;;;;24118:22;;;24141:10;24118:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;24110:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;24255:9;24225:3;;;;;;;;;;;24218:21;;;24240:10;24218:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;24210:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;24368:10;24322:4;;;;;;;;;;;24315:22;;;24338:10;24358:4;24315:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;24307:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24481:9;24436:3;;;;;;;;;;;24429:21;;;24451:10;24471:4;24429:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;24421:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;24550:4;;;;;;;;;;;24543:25;;;24569:10;24589:4;24596:10;24543:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24625:3;;;;;;;;;;;24618:24;;;24643:10;24663:4;24670:9;24618:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24700:4;;;;;;;;;;;24693:20;;;22893:42;24722:10;24693:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24751:3;;;;;;;;;;;24744:19;;;22893:42;24772:9;24744:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24796:12;24810;24824:14;22893:42;24842:51;;;24912:4;;;;;;;;;;;24935:3;;;;;;;;;;;24957:10;24986:9;25014:1;25034;25054:10;25101:3;25083:15;:21;;;;:::i;:::-;24842:277;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24795:324;;;;;;25152:7;25142;:17;;;;:::i;:::-;25132:27;;25179:9;25172:16;;;;;23967:1229;;;;:::o;29232:1084::-;29301:1;29290:7;;:12;29282:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;29384:7;29353:4;;;;;;;;;;;29346:22;;;29369:10;29346:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;29338:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;29499:7;29453:4;;;;;;;;;;;29446:22;;;29469:10;29489:4;29446:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;29438:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29559:16;29578:7;29559:26;;29651:1;29612:6;;;;;;;;;;;29600:36;;;29637:10;29600:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;29596:447;;;29678:15;29696:23;29708:10;29696:11;:23::i;:::-;29678:41;;29748:1;29738:7;:11;29734:221;;;29824:7;29798:3;;;;;;;;;;;29791:21;;;29813:6;;;;;;;;;;;29791:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;29783:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;29893:3;;;;;;;;;;;29886:24;;;29911:6;;;;;;;;;;;29919:10;29931:7;29886:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29734:221;29995:6;;;;;;;;;;;29983:36;;;30020:10;29983:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29971:60;;;;;:::i;:::-;;;29663:380;29596:447;30060:4;;;;;;;;;;;30053:25;;;30079:10;30091:6;;;;;;;;;;;30099:7;30053:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30132:6;;;;;;;;;;;30120:36;;;30157:10;30169:8;30179:15;30196;30120:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30235:6;;;;;;;;;;;30223:37;;;30300:7;30273:6;;;;;;;;;;;30261:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;30223:85;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29271:1045;29232:1084;:::o;23083:64::-;;;;;;;;;;;;;:::o;31992:747::-;32051:7;32090:1;32079:7;;:12;32071:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;32127:14;32156:6;;;;;;;;;;;32144:36;;;32181:7;32144:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32127:62;;32213:4;32204:6;:13;32200:532;;;32250:1;32243:8;;;;;32200:532;32320:4;32311:6;:13;;;;:::i;:::-;32302:22;;32339:17;32408:4;32381:6;;;;;;;;;;;32369:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;;:::i;:::-;32359:6;;:54;;;;:::i;:::-;32339:74;;32428:16;32477:6;;;;;;;;;;;32465:44;;;32510:7;32465:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32447:15;:71;;;;:::i;:::-;32428:90;;32533:16;32563:9;32552:8;:20;;;;:::i;:::-;32533:39;;32587:18;32617:8;32608:6;:17;;;;:::i;:::-;32587:38;;32681:5;32667:10;;32654;:23;;;;:::i;:::-;32653:33;;;;:::i;:::-;32640:46;;32710:10;32703:17;;;;;;;31992:747;;;;:::o;27563:1493::-;27613:4;27649:1;27638:7;;:12;27630:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;27686:13;27712:1;27703:6;:10;;;;:::i;:::-;27686:28;;27725:14;27788:2;27781:3;27744:34;27776:1;27767:6;:10;;;;:::i;:::-;27744:22;:34::i;:::-;:40;;;;:::i;:::-;27743:47;;;;:::i;:::-;27725:66;;27858:8;27827:4;;;;;;;;;;;27820:22;;;27843:10;27820:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;27812:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27971:8;27925:4;;;;;;;;;;;27918:22;;;27941:10;27961:4;27918:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;27910:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;28039:4;;;;;;;;;;;28032:25;;;28058:10;28078:4;28085:6;28032:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28110:4;;;;;;;;;;;28103:20;;;22893:42;28132:8;28103:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28154:21;28207:1;28193:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28186:23;;28230:4;;;;;;;;;;;28220;28225:1;28220:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;28255:3;;;;;;;;;;;28245:4;28250:1;28245:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;22893:42;28271:63;;;28353:8;28380:9;28408:4;28439;28481:3;28463:15;:21;;;;:::i;:::-;28271:228;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28542:2;28535:3;28524:8;:14;;;;:::i;:::-;28523:21;;;;:::i;:::-;28512:32;;28564:4;;;;;;;;;;;28557:20;;;22893:42;28586:8;28557:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28613:3;;;;;;;;;;;28606:19;;;22893:42;28634:9;28606:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28658:12;28672;28686:14;22893:42;28704:51;;;28774:4;;;;;;;;;;;28797:3;;;;;;;;;;;28819:8;28846:9;28874:1;28894;28914:10;28961:3;28943:15;:21;;;;:::i;:::-;28704:275;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28657:322;;;;;;29012:7;29002;:17;;;;:::i;:::-;28992:27;;29039:9;29032:16;;;;;;;;27563:1493;;;:::o;23013:63::-;;;;;;;;;;;;;:::o;32747:217::-;32885:1;32854:6;;;;;;;;;;;32842:27;;;32870:10;32842:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;32834:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32926:4;32919:21;;;32941:7;32949:6;32919:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32747:217;;;:::o;27381:174::-;27446:1;27435:7;;:12;27427:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;27483:14;27500:20;27513:6;27500:12;:20::i;:::-;27483:37;;27531:16;27537:9;27531:5;:16::i;:::-;27416:139;27381:174;:::o;880:201::-;692:12;:10;:12::i;:::-;681:23;;:7;:5;:7::i;:::-;:23;;;673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;989:1:::1;969:22;;:8;:22;;::::0;961:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1045:28;1064:8;1045:18;:28::i;:::-;880:201:::0;:::o;29064:160::-;29130:1;29119:7;;:12;29111:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;29167:15;29175:6;29167:7;:15::i;:::-;29193:23;29209:6;29193:15;:23::i;:::-;29064:160;:::o;94:98::-;147:7;174:10;167:17;;94:98;:::o;1089:191::-;1163:16;1182:6;;;;;;;;;;;1163:25;;1208:8;1199:6;;:17;;;;;;;;;;;;;;;;;;1263:8;1232:40;;1253:8;1232:40;;;;;;;;;;;;1152:128;1089:191;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:117::-;1306:1;1303;1296:12;1320:117;1429:1;1426;1419:12;1443:102;1484:6;1535:2;1531:7;1526:2;1519:5;1515:14;1511:28;1501:38;;1443:102;;;:::o;1551:180::-;1599:77;1596:1;1589:88;1696:4;1693:1;1686:15;1720:4;1717:1;1710:15;1737:281;1820:27;1842:4;1820:27;:::i;:::-;1812:6;1808:40;1950:6;1938:10;1935:22;1914:18;1902:10;1899:34;1896:62;1893:88;;;1961:18;;:::i;:::-;1893:88;2001:10;1997:2;1990:22;1780:238;1737:281;;:::o;2024:129::-;2058:6;2085:20;;:::i;:::-;2075:30;;2114:33;2142:4;2134:6;2114:33;:::i;:::-;2024:129;;;:::o;2159:307::-;2220:4;2310:18;2302:6;2299:30;2296:56;;;2332:18;;:::i;:::-;2296:56;2370:29;2392:6;2370:29;:::i;:::-;2362:37;;2454:4;2448;2444:15;2436:23;;2159:307;;;:::o;2472:146::-;2569:6;2564:3;2559;2546:30;2610:1;2601:6;2596:3;2592:16;2585:27;2472:146;;;:::o;2624:423::-;2701:5;2726:65;2742:48;2783:6;2742:48;:::i;:::-;2726:65;:::i;:::-;2717:74;;2814:6;2807:5;2800:21;2852:4;2845:5;2841:16;2890:3;2881:6;2876:3;2872:16;2869:25;2866:112;;;2897:79;;:::i;:::-;2866:112;2987:54;3034:6;3029:3;3024;2987:54;:::i;:::-;2707:340;2624:423;;;;;:::o;3066:338::-;3121:5;3170:3;3163:4;3155:6;3151:17;3147:27;3137:122;;3178:79;;:::i;:::-;3137:122;3295:6;3282:20;3320:78;3394:3;3386:6;3379:4;3371:6;3367:17;3320:78;:::i;:::-;3311:87;;3127:277;3066:338;;;;:::o;3410:943::-;3505:6;3513;3521;3529;3578:3;3566:9;3557:7;3553:23;3549:33;3546:120;;;3585:79;;:::i;:::-;3546:120;3705:1;3730:53;3775:7;3766:6;3755:9;3751:22;3730:53;:::i;:::-;3720:63;;3676:117;3832:2;3858:53;3903:7;3894:6;3883:9;3879:22;3858:53;:::i;:::-;3848:63;;3803:118;3960:2;3986:53;4031:7;4022:6;4011:9;4007:22;3986:53;:::i;:::-;3976:63;;3931:118;4116:2;4105:9;4101:18;4088:32;4147:18;4139:6;4136:30;4133:117;;;4169:79;;:::i;:::-;4133:117;4274:62;4328:7;4319:6;4308:9;4304:22;4274:62;:::i;:::-;4264:72;;4059:287;3410:943;;;;;;;:::o;4359:149::-;4395:7;4435:66;4428:5;4424:78;4413:89;;4359:149;;;:::o;4514:115::-;4599:23;4616:5;4599:23;:::i;:::-;4594:3;4587:36;4514:115;;:::o;4635:218::-;4726:4;4764:2;4753:9;4749:18;4741:26;;4777:69;4843:1;4832:9;4828:17;4819:6;4777:69;:::i;:::-;4635:218;;;;:::o;4859:329::-;4918:6;4967:2;4955:9;4946:7;4942:23;4938:32;4935:119;;;4973:79;;:::i;:::-;4935:119;5093:1;5118:53;5163:7;5154:6;5143:9;5139:22;5118:53;:::i;:::-;5108:63;;5064:117;4859:329;;;;:::o;5194:118::-;5281:24;5299:5;5281:24;:::i;:::-;5276:3;5269:37;5194:118;;:::o;5318:222::-;5411:4;5449:2;5438:9;5434:18;5426:26;;5462:71;5530:1;5519:9;5515:17;5506:6;5462:71;:::i;:::-;5318:222;;;;:::o;5546:118::-;5633:24;5651:5;5633:24;:::i;:::-;5628:3;5621:37;5546:118;;:::o;5670:222::-;5763:4;5801:2;5790:9;5786:18;5778:26;;5814:71;5882:1;5871:9;5867:17;5858:6;5814:71;:::i;:::-;5670:222;;;;:::o;5898:329::-;5957:6;6006:2;5994:9;5985:7;5981:23;5977:32;5974:119;;;6012:79;;:::i;:::-;5974:119;6132:1;6157:53;6202:7;6193:6;6182:9;6178:22;6157:53;:::i;:::-;6147:63;;6103:117;5898:329;;;;:::o;6233:619::-;6310:6;6318;6326;6375:2;6363:9;6354:7;6350:23;6346:32;6343:119;;;6381:79;;:::i;:::-;6343:119;6501:1;6526:53;6571:7;6562:6;6551:9;6547:22;6526:53;:::i;:::-;6516:63;;6472:117;6628:2;6654:53;6699:7;6690:6;6679:9;6675:22;6654:53;:::i;:::-;6644:63;;6599:118;6756:2;6782:53;6827:7;6818:6;6807:9;6803:22;6782:53;:::i;:::-;6772:63;;6727:118;6233:619;;;;;:::o;6858:474::-;6926:6;6934;6983:2;6971:9;6962:7;6958:23;6954:32;6951:119;;;6989:79;;:::i;:::-;6951:119;7109:1;7134:53;7179:7;7170:6;7159:9;7155:22;7134:53;:::i;:::-;7124:63;;7080:117;7236:2;7262:53;7307:7;7298:6;7287:9;7283:22;7262:53;:::i;:::-;7252:63;;7207:118;6858:474;;;;;:::o;7338:619::-;7415:6;7423;7431;7480:2;7468:9;7459:7;7455:23;7451:32;7448:119;;;7486:79;;:::i;:::-;7448:119;7606:1;7631:53;7676:7;7667:6;7656:9;7652:22;7631:53;:::i;:::-;7621:63;;7577:117;7733:2;7759:53;7804:7;7795:6;7784:9;7780:22;7759:53;:::i;:::-;7749:63;;7704:118;7861:2;7887:53;7932:7;7923:6;7912:9;7908:22;7887:53;:::i;:::-;7877:63;;7832:118;7338:619;;;;;:::o;7963:143::-;8020:5;8051:6;8045:13;8036:22;;8067:33;8094:5;8067:33;:::i;:::-;7963:143;;;;:::o;8112:351::-;8182:6;8231:2;8219:9;8210:7;8206:23;8202:32;8199:119;;;8237:79;;:::i;:::-;8199:119;8357:1;8382:64;8438:7;8429:6;8418:9;8414:22;8382:64;:::i;:::-;8372:74;;8328:128;8112:351;;;;:::o;8469:169::-;8553:11;8587:6;8582:3;8575:19;8627:4;8622:3;8618:14;8603:29;;8469:169;;;;:::o;8644:167::-;8784:19;8780:1;8772:6;8768:14;8761:43;8644:167;:::o;8817:366::-;8959:3;8980:67;9044:2;9039:3;8980:67;:::i;:::-;8973:74;;9056:93;9145:3;9056:93;:::i;:::-;9174:2;9169:3;9165:12;9158:19;;8817:366;;;:::o;9189:419::-;9355:4;9393:2;9382:9;9378:18;9370:26;;9442:9;9436:4;9432:20;9428:1;9417:9;9413:17;9406:47;9470:131;9596:4;9470:131;:::i;:::-;9462:139;;9189:419;;;:::o;9614:170::-;9754:22;9750:1;9742:6;9738:14;9731:46;9614:170;:::o;9790:366::-;9932:3;9953:67;10017:2;10012:3;9953:67;:::i;:::-;9946:74;;10029:93;10118:3;10029:93;:::i;:::-;10147:2;10142:3;10138:12;10131:19;;9790:366;;;:::o;10162:419::-;10328:4;10366:2;10355:9;10351:18;10343:26;;10415:9;10409:4;10405:20;10401:1;10390:9;10386:17;10379:47;10443:131;10569:4;10443:131;:::i;:::-;10435:139;;10162:419;;;:::o;10587:224::-;10727:34;10723:1;10715:6;10711:14;10704:58;10796:7;10791:2;10783:6;10779:15;10772:32;10587:224;:::o;10817:366::-;10959:3;10980:67;11044:2;11039:3;10980:67;:::i;:::-;10973:74;;11056:93;11145:3;11056:93;:::i;:::-;11174:2;11169:3;11165:12;11158:19;;10817:366;;;:::o;11189:419::-;11355:4;11393:2;11382:9;11378:18;11370:26;;11442:9;11436:4;11432:20;11428:1;11417:9;11413:17;11406:47;11470:131;11596:4;11470:131;:::i;:::-;11462:139;;11189:419;;;:::o;11614:181::-;11754:33;11750:1;11742:6;11738:14;11731:57;11614:181;:::o;11801:366::-;11943:3;11964:67;12028:2;12023:3;11964:67;:::i;:::-;11957:74;;12040:93;12129:3;12040:93;:::i;:::-;12158:2;12153:3;12149:12;12142:19;;11801:366;;;:::o;12173:419::-;12339:4;12377:2;12366:9;12362:18;12354:26;;12426:9;12420:4;12416:20;12412:1;12401:9;12397:17;12390:47;12454:131;12580:4;12454:131;:::i;:::-;12446:139;;12173:419;;;:::o;12598:442::-;12747:4;12785:2;12774:9;12770:18;12762:26;;12798:71;12866:1;12855:9;12851:17;12842:6;12798:71;:::i;:::-;12879:72;12947:2;12936:9;12932:18;12923:6;12879:72;:::i;:::-;12961;13029:2;13018:9;13014:18;13005:6;12961:72;:::i;:::-;12598:442;;;;;;:::o;13046:90::-;13080:7;13123:5;13116:13;13109:21;13098:32;;13046:90;;;:::o;13142:116::-;13212:21;13227:5;13212:21;:::i;:::-;13205:5;13202:32;13192:60;;13248:1;13245;13238:12;13192:60;13142:116;:::o;13264:137::-;13318:5;13349:6;13343:13;13334:22;;13365:30;13389:5;13365:30;:::i;:::-;13264:137;;;;:::o;13407:345::-;13474:6;13523:2;13511:9;13502:7;13498:23;13494:32;13491:119;;;13529:79;;:::i;:::-;13491:119;13649:1;13674:61;13727:7;13718:6;13707:9;13703:22;13674:61;:::i;:::-;13664:71;;13620:125;13407:345;;;;:::o;13758:180::-;13806:77;13803:1;13796:88;13903:4;13900:1;13893:15;13927:4;13924:1;13917:15;13944:194;13984:4;14004:20;14022:1;14004:20;:::i;:::-;13999:25;;14038:20;14056:1;14038:20;:::i;:::-;14033:25;;14082:1;14079;14075:9;14067:17;;14106:1;14100:4;14097:11;14094:37;;;14111:18;;:::i;:::-;14094:37;13944:194;;;;:::o;14144:553::-;14321:4;14359:3;14348:9;14344:19;14336:27;;14373:71;14441:1;14430:9;14426:17;14417:6;14373:71;:::i;:::-;14454:72;14522:2;14511:9;14507:18;14498:6;14454:72;:::i;:::-;14536;14604:2;14593:9;14589:18;14580:6;14536:72;:::i;:::-;14618;14686:2;14675:9;14671:18;14662:6;14618:72;:::i;:::-;14144:553;;;;;;;:::o;14703:223::-;14843:34;14839:1;14831:6;14827:14;14820:58;14912:6;14907:2;14899:6;14895:15;14888:31;14703:223;:::o;14932:366::-;15074:3;15095:67;15159:2;15154:3;15095:67;:::i;:::-;15088:74;;15171:93;15260:3;15171:93;:::i;:::-;15289:2;15284:3;15280:12;15273:19;;14932:366;;;:::o;15304:419::-;15470:4;15508:2;15497:9;15493:18;15485:26;;15557:9;15551:4;15547:20;15543:1;15532:9;15528:17;15521:47;15585:131;15711:4;15585:131;:::i;:::-;15577:139;;15304:419;;;:::o;15729:220::-;15869:34;15865:1;15857:6;15853:14;15846:58;15938:3;15933:2;15925:6;15921:15;15914:28;15729:220;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:182::-;16892:34;16888:1;16880:6;16876:14;16869:58;16752:182;:::o;16940:366::-;17082:3;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17179:93;17268:3;17179:93;:::i;:::-;17297:2;17292:3;17288:12;17281:19;;16940:366;;;:::o;17312:419::-;17478:4;17516:2;17505:9;17501:18;17493:26;;17565:9;17559:4;17555:20;17551:1;17540:9;17536:17;17529:47;17593:131;17719:4;17593:131;:::i;:::-;17585:139;;17312:419;;;:::o;17737:180::-;17785:77;17782:1;17775:88;17882:4;17879:1;17872:15;17906:4;17903:1;17896:15;17923:185;17963:1;17980:20;17998:1;17980:20;:::i;:::-;17975:25;;18014:20;18032:1;18014:20;:::i;:::-;18009:25;;18053:1;18043:35;;18058:18;;:::i;:::-;18043:35;18100:1;18097;18093:9;18088:14;;17923:185;;;;:::o;18114:410::-;18154:7;18177:20;18195:1;18177:20;:::i;:::-;18172:25;;18211:20;18229:1;18211:20;:::i;:::-;18206:25;;18266:1;18263;18259:9;18288:30;18306:11;18288:30;:::i;:::-;18277:41;;18467:1;18458:7;18454:15;18451:1;18448:22;18428:1;18421:9;18401:83;18378:139;;18497:18;;:::i;:::-;18378:139;18162:362;18114:410;;;;:::o;18530:178::-;18670:30;18666:1;18658:6;18654:14;18647:54;18530:178;:::o;18714:366::-;18856:3;18877:67;18941:2;18936:3;18877:67;:::i;:::-;18870:74;;18953:93;19042:3;18953:93;:::i;:::-;19071:2;19066:3;19062:12;19055:19;;18714:366;;;:::o;19086:419::-;19252:4;19290:2;19279:9;19275:18;19267:26;;19339:9;19333:4;19329:20;19325:1;19314:9;19310:17;19303:47;19367:131;19493:4;19367:131;:::i;:::-;19359:139;;19086:419;;;:::o;19511:332::-;19632:4;19670:2;19659:9;19655:18;19647:26;;19683:71;19751:1;19740:9;19736:17;19727:6;19683:71;:::i;:::-;19764:72;19832:2;19821:9;19817:18;19808:6;19764:72;:::i;:::-;19511:332;;;;;:::o;19849:177::-;19989:29;19985:1;19977:6;19973:14;19966:53;19849:177;:::o;20032:366::-;20174:3;20195:67;20259:2;20254:3;20195:67;:::i;:::-;20188:74;;20271:93;20360:3;20271:93;:::i;:::-;20389:2;20384:3;20380:12;20373:19;;20032:366;;;:::o;20404:419::-;20570:4;20608:2;20597:9;20593:18;20585:26;;20657:9;20651:4;20647:20;20643:1;20632:9;20628:17;20621:47;20685:131;20811:4;20685:131;:::i;:::-;20677:139;;20404:419;;;:::o;20829:332::-;20950:4;20988:2;20977:9;20973:18;20965:26;;21001:71;21069:1;21058:9;21054:17;21045:6;21001:71;:::i;:::-;21082:72;21150:2;21139:9;21135:18;21126:6;21082:72;:::i;:::-;20829:332;;;;;:::o;21167:180::-;21215:77;21212:1;21205:88;21312:4;21309:1;21302:15;21336:4;21333:1;21326:15;21353:191;21393:3;21412:20;21430:1;21412:20;:::i;:::-;21407:25;;21446:20;21464:1;21446:20;:::i;:::-;21441:25;;21489:1;21486;21482:9;21475:16;;21510:3;21507:1;21504:10;21501:36;;;21517:18;;:::i;:::-;21501:36;21353:191;;;;:::o;21550:114::-;21617:6;21651:5;21645:12;21635:22;;21550:114;;;:::o;21670:184::-;21769:11;21803:6;21798:3;21791:19;21843:4;21838:3;21834:14;21819:29;;21670:184;;;;:::o;21860:132::-;21927:4;21950:3;21942:11;;21980:4;21975:3;21971:14;21963:22;;21860:132;;;:::o;21998:108::-;22075:24;22093:5;22075:24;:::i;:::-;22070:3;22063:37;21998:108;;:::o;22112:179::-;22181:10;22202:46;22244:3;22236:6;22202:46;:::i;:::-;22280:4;22275:3;22271:14;22257:28;;22112:179;;;;:::o;22297:113::-;22367:4;22399;22394:3;22390:14;22382:22;;22297:113;;;:::o;22446:732::-;22565:3;22594:54;22642:5;22594:54;:::i;:::-;22664:86;22743:6;22738:3;22664:86;:::i;:::-;22657:93;;22774:56;22824:5;22774:56;:::i;:::-;22853:7;22884:1;22869:284;22894:6;22891:1;22888:13;22869:284;;;22970:6;22964:13;22997:63;23056:3;23041:13;22997:63;:::i;:::-;22990:70;;23083:60;23136:6;23083:60;:::i;:::-;23073:70;;22929:224;22916:1;22913;22909:9;22904:14;;22869:284;;;22873:14;23169:3;23162:10;;22570:608;;;22446:732;;;;:::o;23184:815::-;23439:4;23477:3;23466:9;23462:19;23454:27;;23491:71;23559:1;23548:9;23544:17;23535:6;23491:71;:::i;:::-;23572:72;23640:2;23629:9;23625:18;23616:6;23572:72;:::i;:::-;23691:9;23685:4;23681:20;23676:2;23665:9;23661:18;23654:48;23719:108;23822:4;23813:6;23719:108;:::i;:::-;23711:116;;23837:72;23905:2;23894:9;23890:18;23881:6;23837:72;:::i;:::-;23919:73;23987:3;23976:9;23972:19;23963:6;23919:73;:::i;:::-;23184:815;;;;;;;;:::o;24005:311::-;24082:4;24172:18;24164:6;24161:30;24158:56;;;24194:18;;:::i;:::-;24158:56;24244:4;24236:6;24232:17;24224:25;;24304:4;24298;24294:15;24286:23;;24005:311;;;:::o;24322:117::-;24431:1;24428;24421:12;24462:732;24569:5;24594:81;24610:64;24667:6;24610:64;:::i;:::-;24594:81;:::i;:::-;24585:90;;24695:5;24724:6;24717:5;24710:21;24758:4;24751:5;24747:16;24740:23;;24811:4;24803:6;24799:17;24791:6;24787:30;24840:3;24832:6;24829:15;24826:122;;;24859:79;;:::i;:::-;24826:122;24974:6;24957:231;24991:6;24986:3;24983:15;24957:231;;;25066:3;25095:48;25139:3;25127:10;25095:48;:::i;:::-;25090:3;25083:61;25173:4;25168:3;25164:14;25157:21;;25033:155;25017:4;25012:3;25008:14;25001:21;;24957:231;;;24961:21;24575:619;;24462:732;;;;;:::o;25217:385::-;25299:5;25348:3;25341:4;25333:6;25329:17;25325:27;25315:122;;25356:79;;:::i;:::-;25315:122;25466:6;25460:13;25491:105;25592:3;25584:6;25577:4;25569:6;25565:17;25491:105;:::i;:::-;25482:114;;25305:297;25217:385;;;;:::o;25608:554::-;25703:6;25752:2;25740:9;25731:7;25727:23;25723:32;25720:119;;;25758:79;;:::i;:::-;25720:119;25899:1;25888:9;25884:17;25878:24;25929:18;25921:6;25918:30;25915:117;;;25951:79;;:::i;:::-;25915:117;26056:89;26137:7;26128:6;26117:9;26113:22;26056:89;:::i;:::-;26046:99;;25849:306;25608:554;;;;:::o;26168:114::-;26205:7;26245:30;26238:5;26234:42;26223:53;;26168:114;;;:::o;26288:122::-;26361:24;26379:5;26361:24;:::i;:::-;26354:5;26351:35;26341:63;;26400:1;26397;26390:12;26341:63;26288:122;:::o;26416:143::-;26473:5;26504:6;26498:13;26489:22;;26520:33;26547:5;26520:33;:::i;:::-;26416:143;;;;:::o;26565:93::-;26601:7;26641:10;26634:5;26630:22;26619:33;;26565:93;;;:::o;26664:120::-;26736:23;26753:5;26736:23;:::i;:::-;26729:5;26726:34;26716:62;;26774:1;26771;26764:12;26716:62;26664:120;:::o;26790:141::-;26846:5;26877:6;26871:13;26862:22;;26893:32;26919:5;26893:32;:::i;:::-;26790:141;;;;:::o;26937:661::-;27024:6;27032;27040;27089:2;27077:9;27068:7;27064:23;27060:32;27057:119;;;27095:79;;:::i;:::-;27057:119;27215:1;27240:64;27296:7;27287:6;27276:9;27272:22;27240:64;:::i;:::-;27230:74;;27186:128;27353:2;27379:64;27435:7;27426:6;27415:9;27411:22;27379:64;:::i;:::-;27369:74;;27324:129;27492:2;27518:63;27573:7;27564:6;27553:9;27549:22;27518:63;:::i;:::-;27508:73;;27463:128;26937:661;;;;;:::o;27604:220::-;27744:34;27740:1;27732:6;27728:14;27721:58;27813:3;27808:2;27800:6;27796:15;27789:28;27604:220;:::o;27830:366::-;27972:3;27993:67;28057:2;28052:3;27993:67;:::i;:::-;27986:74;;28069:93;28158:3;28069:93;:::i;:::-;28187:2;28182:3;28178:12;28171:19;;27830:366;;;:::o;28202:419::-;28368:4;28406:2;28395:9;28391:18;28383:26;;28455:9;28449:4;28445:20;28441:1;28430:9;28426:17;28419:47;28483:131;28609:4;28483:131;:::i;:::-;28475:139;;28202:419;;;:::o;28627:85::-;28672:7;28701:5;28690:16;;28627:85;;;:::o;28718:60::-;28746:3;28767:5;28760:12;;28718:60;;;:::o;28784:158::-;28842:9;28875:61;28893:42;28902:32;28928:5;28902:32;:::i;:::-;28893:42;:::i;:::-;28875:61;:::i;:::-;28862:74;;28784:158;;;:::o;28948:147::-;29043:45;29082:5;29043:45;:::i;:::-;29038:3;29031:58;28948:147;;:::o;29101:918::-;29378:4;29416:3;29405:9;29401:19;29393:27;;29430:71;29498:1;29487:9;29483:17;29474:6;29430:71;:::i;:::-;29511:72;29579:2;29568:9;29564:18;29555:6;29511:72;:::i;:::-;29593;29661:2;29650:9;29646:18;29637:6;29593:72;:::i;:::-;29675:80;29751:2;29740:9;29736:18;29727:6;29675:80;:::i;:::-;29765:81;29841:3;29830:9;29826:19;29817:6;29765:81;:::i;:::-;29856:73;29924:3;29913:9;29909:19;29900:6;29856:73;:::i;:::-;29939;30007:3;29996:9;29992:19;29983:6;29939:73;:::i;:::-;29101:918;;;;;;;;;;:::o;30025:507::-;30104:6;30112;30161:2;30149:9;30140:7;30136:23;30132:32;30129:119;;;30167:79;;:::i;:::-;30129:119;30287:1;30312:64;30368:7;30359:6;30348:9;30344:22;30312:64;:::i;:::-;30302:74;;30258:128;30425:2;30451:64;30507:7;30498:6;30487:9;30483:22;30451:64;:::i;:::-;30441:74;;30396:129;30025:507;;;;;:::o;30538:177::-;30678:29;30674:1;30666:6;30662:14;30655:53;30538:177;:::o;30721:366::-;30863:3;30884:67;30948:2;30943:3;30884:67;:::i;:::-;30877:74;;30960:93;31049:3;30960:93;:::i;:::-;31078:2;31073:3;31069:12;31062:19;;30721:366;;;:::o;31093:419::-;31259:4;31297:2;31286:9;31282:18;31274:26;;31346:9;31340:4;31336:20;31332:1;31321:9;31317:17;31310:47;31374:131;31500:4;31374:131;:::i;:::-;31366:139;;31093:419;;;:::o;31518:1029::-;31823:4;31861:3;31850:9;31846:19;31838:27;;31875:71;31943:1;31932:9;31928:17;31919:6;31875:71;:::i;:::-;31956:72;32024:2;32013:9;32009:18;32000:6;31956:72;:::i;:::-;32038;32106:2;32095:9;32091:18;32082:6;32038:72;:::i;:::-;32120;32188:2;32177:9;32173:18;32164:6;32120:72;:::i;:::-;32202:81;32278:3;32267:9;32263:19;32254:6;32202:81;:::i;:::-;32293;32369:3;32358:9;32354:19;32345:6;32293:81;:::i;:::-;32384:73;32452:3;32441:9;32437:19;32428:6;32384:73;:::i;:::-;32467;32535:3;32524:9;32520:19;32511:6;32467:73;:::i;:::-;31518:1029;;;;;;;;;;;:::o;32553:663::-;32641:6;32649;32657;32706:2;32694:9;32685:7;32681:23;32677:32;32674:119;;;32712:79;;:::i;:::-;32674:119;32832:1;32857:64;32913:7;32904:6;32893:9;32889:22;32857:64;:::i;:::-;32847:74;;32803:128;32970:2;32996:64;33052:7;33043:6;33032:9;33028:22;32996:64;:::i;:::-;32986:74;;32941:129;33109:2;33135:64;33191:7;33182:6;33171:9;33167:22;33135:64;:::i;:::-;33125:74;;33080:129;32553:663;;;;;:::o;33222:181::-;33362:33;33358:1;33350:6;33346:14;33339:57;33222:181;:::o;33409:366::-;33551:3;33572:67;33636:2;33631:3;33572:67;:::i;:::-;33565:74;;33648:93;33737:3;33648:93;:::i;:::-;33766:2;33761:3;33757:12;33750:19;;33409:366;;;:::o;33781:419::-;33947:4;33985:2;33974:9;33970:18;33962:26;;34034:9;34028:4;34024:20;34020:1;34009:9;34005:17;33998:47;34062:131;34188:4;34062:131;:::i;:::-;34054:139;;33781:419;;;:::o;34206:225::-;34346:34;34342:1;34334:6;34330:14;34323:58;34415:8;34410:2;34402:6;34398:15;34391:33;34206:225;:::o;34437:366::-;34579:3;34600:67;34664:2;34659:3;34600:67;:::i;:::-;34593:74;;34676:93;34765:3;34676:93;:::i;:::-;34794:2;34789:3;34785:12;34778:19;;34437:366;;;:::o;34809:419::-;34975:4;35013:2;35002:9;34998:18;34990:26;;35062:9;35056:4;35052:20;35048:1;35037:9;35033:17;35026:47;35090:131;35216:4;35090:131;:::i;:::-;35082:139;;34809:419;;;:::o

Swarm Source

ipfs://0d75faae1e1e9ee8ad5d8c2f1047ee454d0e0fe7b57514f7ed75c42dd0e1d2eb

Block Transaction Gas Used Reward
view all blocks validated

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.