ETH Price: $3,875.10 (-1.43%)
Gas: 9.31 Gwei

Token

ERC-20: God (GOD)
 

Overview

Max Total Supply

4,040 GOD

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GodCandle

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2024-03-04
*/

//SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/Strings.sol
 
pragma solidity ^0.8.0;
 
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
 
        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);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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);
    }
}

pragma solidity ^0.8.0;

abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

/// @notice ERC404
///         A gas-efficient, mixed ERC20 / ERC721 implementation
///         with native liquidity and fractionalization.
///
///         This is an experimental standard designed to integrate
///         with pre-existing ERC20 / ERC721 support as smoothly as
///         possible.
///
/// @dev    In order to support full functionality of ERC20 and ERC721
///         supply assumptions are made that slightly constraint usage.
///         Ensure decimals are sufficiently large (standard 18 recommended)
///         as ids are effectively encoded in the lowest range of amounts.
///
///         NFTs are spent on ERC20 functions in a FILO queue, this is by
///         design.
///
abstract contract ERC404 is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Errors
    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

pragma solidity ^0.8.0;

contract GodCandle is ERC404 {
    using Strings for uint256;

    uint public initialSupply = 4040;
    string public baseTokenURI;
    string public baseExtension;

    constructor() ERC404("God", "GOD", 18, initialSupply, msg.sender) {
        balanceOf[msg.sender] = initialSupply * 10 ** 18;
        setWhitelist(msg.sender, true);
        // Non-fungiblePositionManager
        setWhitelist(0xC36442b4a4522E871399CD717aBDD847Ab11FE88, true);
        // v3 UniversalRouter
        setWhitelist(0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD, true);
    }

    function setBaseTokenURI(string memory _newBaseURI, string memory _newBaseExtension) public onlyOwner {
        baseTokenURI = _newBaseURI;
        baseExtension = _newBaseExtension;
    }

    function setNameSymbol(
        string memory _name,
        string memory _symbol
    ) public onlyOwner {
        _setNameSymbol(_name, _symbol);
    }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    return bytes(baseTokenURI).length > 0
        ? string(abi.encodePacked(baseTokenURI, tokenId.toString(), baseExtension))
        : "";
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"},{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c0604052610fc8600c5534801562000016575f80fd5b506040518060400160405280600381526020017f476f6400000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f474f4400000000000000000000000000000000000000000000000000000000008152506012600c5433805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000f0576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600190816200019b9190620005e7565b508360029081620001ad9190620005e7565b508260ff1660808160ff1681525050608051600a620001cd919062000854565b82620001da9190620008a4565b60a081815250505050505050670de0b6b3a7640000600c54620001fe9190620008a4565b60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000252336001620002a660201b60201c565b6200027973c36442b4a4522e871399cd717abdd847ab11fe886001620002a660201b60201c565b620002a0733fc91a3afd70395cd496c647d5a6cc9d4b2b7fad6001620002a660201b60201c565b620008ee565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200032b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003ff57607f821691505b602082108103620004155762000414620003ba565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200043c565b6200048586836200043c565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004cf620004c9620004c3846200049d565b620004a6565b6200049d565b9050919050565b5f819050919050565b620004ea83620004af565b62000502620004f982620004d6565b84845462000448565b825550505050565b5f90565b620005186200050a565b62000525818484620004df565b505050565b5b818110156200054c57620005405f826200050e565b6001810190506200052b565b5050565b601f8211156200059b5762000565816200041b565b62000570846200042d565b8101602085101562000580578190505b620005986200058f856200042d565b8301826200052a565b50505b505050565b5f82821c905092915050565b5f620005bd5f1984600802620005a0565b1980831691505092915050565b5f620005d78383620005ac565b9150826002028217905092915050565b620005f28262000383565b67ffffffffffffffff8111156200060e576200060d6200038d565b5b6200061a8254620003e7565b6200062782828562000550565b5f60209050601f8311600181146200065d575f841562000648578287015190505b620006548582620005ca565b865550620006c3565b601f1984166200066d866200041b565b5f5b8281101562000696578489015182556001820191506020850194506020810190506200066f565b86831015620006b65784890151620006b2601f891682620005ac565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000755578086048111156200072d576200072c620006cb565b5b60018516156200073d5780820291505b80810290506200074d85620006f8565b94506200070d565b94509492505050565b5f826200076f576001905062000841565b816200077e575f905062000841565b8160018114620007975760028114620007a257620007d8565b600191505062000841565b60ff841115620007b757620007b6620006cb565b5b8360020a915084821115620007d157620007d0620006cb565b5b5062000841565b5060208310610133831016604e8410600b8410161715620008125782820a9050838111156200080c576200080b620006cb565b5b62000841565b62000821848484600162000704565b925090508184048111156200083b576200083a620006cb565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000860826200049d565b91506200086d8362000848565b92506200089c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200075e565b905092915050565b5f620008b0826200049d565b9150620008bd836200049d565b9250828202620008cd816200049d565b91508282048414831517620008e757620008e6620006cb565b5b5092915050565b60805160a051613516620009175f395f6109a001525f81816112da0152611cb001526135165ff3fe608060405234801561000f575f80fd5b50600436106101a7575f3560e01c80636352211e116100f7578063b88d4fde11610095578063d547cfb71161006f578063d547cfb7146104b9578063dd62ed3e146104d7578063e985e9c514610507578063f2fde38b14610537576101a7565b8063b88d4fde1461044f578063c66828621461046b578063c87b56dd14610489576101a7565b806395d89b41116100d157806395d89b41146103b55780639b19251a146103d3578063a22cb46514610403578063a9059cbb1461041f576101a7565b80636352211e1461033757806370a08231146103675780638da5cb5b14610397576101a7565b80632b9689581161016457806342842e0e1161013e57806342842e0e146102c55780634f02c420146102e1578063504334c2146102ff57806353d6fd591461031b576101a7565b80632b9689581461027f578063313ce56714610289578063378dc3dc146102a7576101a7565b806306fdde03146101ab578063081812fc146101c9578063095ea7b3146101f95780630b9b001c1461022957806318160ddd1461024557806323b872dd14610263575b5f80fd5b6101b3610553565b6040516101c091906126fe565b60405180910390f35b6101e360048036038101906101de9190612762565b6105df565b6040516101f091906127cc565b60405180910390f35b610213600480360381019061020e919061280f565b61060f565b6040516102209190612867565b60405180910390f35b610243600480360381019061023e91906129ac565b6108f6565b005b61024d61099e565b60405161025a9190612a31565b60405180910390f35b61027d60048036038101906102789190612a4a565b6109c2565b005b6102876111b9565b005b6102916112d8565b60405161029e9190612ab5565b60405180910390f35b6102af6112fc565b6040516102bc9190612a31565b60405180910390f35b6102df60048036038101906102da9190612a4a565b611302565b005b6102e9611431565b6040516102f69190612a31565b60405180910390f35b610319600480360381019061031491906129ac565b611437565b005b61033560048036038101906103309190612af8565b6114c9565b005b610351600480360381019061034c9190612762565b6115a5565b60405161035e91906127cc565b60405180910390f35b610381600480360381019061037c9190612b36565b611643565b60405161038e9190612a31565b60405180910390f35b61039f611658565b6040516103ac91906127cc565b60405180910390f35b6103bd61167b565b6040516103ca91906126fe565b60405180910390f35b6103ed60048036038101906103e89190612b36565b611707565b6040516103fa9190612867565b60405180910390f35b61041d60048036038101906104189190612af8565b611724565b005b6104396004803603810190610434919061280f565b61181c565b6040516104469190612867565b60405180910390f35b61046960048036038101906104649190612bbe565b611830565b005b610473611965565b60405161048091906126fe565b60405180910390f35b6104a3600480360381019061049e9190612762565b6119f1565b6040516104b091906126fe565b60405180910390f35b6104c1611a52565b6040516104ce91906126fe565b60405180910390f35b6104f160048036038101906104ec9190612c42565b611ade565b6040516104fe9190612a31565b60405180910390f35b610521600480360381019061051c9190612c42565b611afe565b60405161052e9190612867565b60405180910390f35b610551600480360381019061054c9190612b36565b611b28565b005b6001805461056090612cad565b80601f016020809104026020016040519081016040528092919081815260200182805461058c90612cad565b80156105d75780601f106105ae576101008083540402835291602001916105d7565b820191905f5260205f20905b8154815290600101906020018083116105ba57829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561062157505f82115b15610809575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610718575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561074f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516107fb9190612a31565b60405180910390a3506108ec565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108e39190612a31565b60405180910390a35b6001905092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600d90816109899190612e7a565b5080600e90816109999190612e7a565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600354811161107a5760085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a60576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac5576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b83575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610beb575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c22576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c2a611cad565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c759190612f76565b92505081905550610c84611cad565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610dda9190612f76565b81548110610deb57610dea612fa9565b5b905f5260205f20015490508060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600a5f8581526020019081526020015f205481548110610e5757610e56612fa9565b5b905f5260205f20018190555060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610eb057610eaf612fd6565b5b600190038181905f5260205f20015f90559055600a5f8381526020019081526020015f2054600a5f8381526020019081526020015f208190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610f989190612f76565b600a5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761105f611cad565b60405161106c9190612a31565b60405180910390a3506111b4565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111a65781816111299190612f76565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6111b1848484611ce0565b50505b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b61130d8383836109c2565b5f8273ffffffffffffffffffffffffffffffffffffffff163b141580156113f5575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161139393929190613036565b6020604051808303815f875af11580156113af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d391906130d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561142c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c58282612030565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461154d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163e576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6004602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805461168890612cad565b80601f01602080910402602001604051908101604052809291908181526020018280546116b490612cad565b80156116ff5780601f106116d6576101008083540402835291602001916116ff565b820191905f5260205f20905b8154815290600101906020018083116116e257829003601f168201915b505050505081565b600b602052805f5260405f205f915054906101000a900460ff1681565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118109190612867565b60405180910390a35050565b5f611828338484611ce0565b905092915050565b61183b8585856109c2565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611927575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016118c595949392919061312a565b6020604051808303815f875af11580156118e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190591906130d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561195e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600e805461197290612cad565b80601f016020809104026020016040519081016040528092919081815260200182805461199e90612cad565b80156119e95780601f106119c0576101008083540402835291602001916119e9565b820191905f5260205f20905b8154815290600101906020018083116119cc57829003601f168201915b505050505081565b60605f600d8054611a0190612cad565b905011611a1c5760405180602001604052805f815250611a4b565b600d611a2783612054565b600e604051602001611a3b93929190613230565b6040516020818303038152906040525b9050919050565b600d8054611a5f90612cad565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8b90612cad565b8015611ad65780601f10611aad57610100808354040283529160200191611ad6565b820191905f5260205f20905b815481529060010190602001808311611ab957829003601f168201915b505050505081565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c11576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a611cdb919061338f565b905090565b5f80611cea611cad565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611dba9190612f76565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ee4575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ea39190613406565b8484611eaf9190613406565b611eb99190612f76565b90505f5b81811015611ee157611ece896121ad565b8080611ed990613436565b915050611ebd565b50505b600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fbd575f8382611f3f9190613406565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f889190613406565b611f929190612f76565b90505f5b81811015611fba57611fa7886123f2565b8080611fb290613436565b915050611f96565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161201a9190612a31565b60405180910390a3600193505050509392505050565b816001908161203f9190612e7a565b50806002908161204f9190612e7a565b505050565b60605f820361209a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121a8565b5f8290505f5b5f82146120c95780806120b290613436565b915050600a826120c29190613406565b91506120a0565b5f8167ffffffffffffffff8111156120e4576120e3612888565b5b6040519080825280601f01601f1916602001820160405280156121165781602001600182028036833780820191505090505b5090505b5f85146121a15760018261212e9190612f76565b9150600a8561213d919061347d565b603061214991906134ad565b60f81b81838151811061215f5761215e612fa9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561219a9190613406565b945061211a565b8093505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612212576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061229d9190612f76565b815481106122ae576122ad612fa9565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061230657612305612fd6565b5b600190038181905f5260205f20015f90559055600a5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612457576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f81548092919060010191905055505f60035490505f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612503576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506126009190612f76565b600a5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126ab578082015181840152602081019050612690565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6126d082612674565b6126da818561267e565b93506126ea81856020860161268e565b6126f3816126b6565b840191505092915050565b5f6020820190508181035f83015261271681846126c6565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6127418161272f565b811461274b575f80fd5b50565b5f8135905061275c81612738565b92915050565b5f6020828403121561277757612776612727565b5b5f6127848482850161274e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127b68261278d565b9050919050565b6127c6816127ac565b82525050565b5f6020820190506127df5f8301846127bd565b92915050565b6127ee816127ac565b81146127f8575f80fd5b50565b5f81359050612809816127e5565b92915050565b5f806040838503121561282557612824612727565b5b5f612832858286016127fb565b92505060206128438582860161274e565b9150509250929050565b5f8115159050919050565b6128618161284d565b82525050565b5f60208201905061287a5f830184612858565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6128be826126b6565b810181811067ffffffffffffffff821117156128dd576128dc612888565b5b80604052505050565b5f6128ef61271e565b90506128fb82826128b5565b919050565b5f67ffffffffffffffff82111561291a57612919612888565b5b612923826126b6565b9050602081019050919050565b828183375f83830152505050565b5f61295061294b84612900565b6128e6565b90508281526020810184848401111561296c5761296b612884565b5b612977848285612930565b509392505050565b5f82601f83011261299357612992612880565b5b81356129a384826020860161293e565b91505092915050565b5f80604083850312156129c2576129c1612727565b5b5f83013567ffffffffffffffff8111156129df576129de61272b565b5b6129eb8582860161297f565b925050602083013567ffffffffffffffff811115612a0c57612a0b61272b565b5b612a188582860161297f565b9150509250929050565b612a2b8161272f565b82525050565b5f602082019050612a445f830184612a22565b92915050565b5f805f60608486031215612a6157612a60612727565b5b5f612a6e868287016127fb565b9350506020612a7f868287016127fb565b9250506040612a908682870161274e565b9150509250925092565b5f60ff82169050919050565b612aaf81612a9a565b82525050565b5f602082019050612ac85f830184612aa6565b92915050565b612ad78161284d565b8114612ae1575f80fd5b50565b5f81359050612af281612ace565b92915050565b5f8060408385031215612b0e57612b0d612727565b5b5f612b1b858286016127fb565b9250506020612b2c85828601612ae4565b9150509250929050565b5f60208284031215612b4b57612b4a612727565b5b5f612b58848285016127fb565b91505092915050565b5f80fd5b5f80fd5b5f8083601f840112612b7e57612b7d612880565b5b8235905067ffffffffffffffff811115612b9b57612b9a612b61565b5b602083019150836001820283011115612bb757612bb6612b65565b5b9250929050565b5f805f805f60808688031215612bd757612bd6612727565b5b5f612be4888289016127fb565b9550506020612bf5888289016127fb565b9450506040612c068882890161274e565b935050606086013567ffffffffffffffff811115612c2757612c2661272b565b5b612c3388828901612b69565b92509250509295509295909350565b5f8060408385031215612c5857612c57612727565b5b5f612c65858286016127fb565b9250506020612c76858286016127fb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612cc457607f821691505b602082108103612cd757612cd6612c80565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612d397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612cfe565b612d438683612cfe565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612d7e612d79612d748461272f565b612d5b565b61272f565b9050919050565b5f819050919050565b612d9783612d64565b612dab612da382612d85565b848454612d0a565b825550505050565b5f90565b612dbf612db3565b612dca818484612d8e565b505050565b5b81811015612ded57612de25f82612db7565b600181019050612dd0565b5050565b601f821115612e3257612e0381612cdd565b612e0c84612cef565b81016020851015612e1b578190505b612e2f612e2785612cef565b830182612dcf565b50505b505050565b5f82821c905092915050565b5f612e525f1984600802612e37565b1980831691505092915050565b5f612e6a8383612e43565b9150826002028217905092915050565b612e8382612674565b67ffffffffffffffff811115612e9c57612e9b612888565b5b612ea68254612cad565b612eb1828285612df1565b5f60209050601f831160018114612ee2575f8415612ed0578287015190505b612eda8582612e5f565b865550612f41565b601f198416612ef086612cdd565b5f5b82811015612f1757848901518255600182019150602085019450602081019050612ef2565b86831015612f345784890151612f30601f891682612e43565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f808261272f565b9150612f8b8361272f565b9250828203905081811115612fa357612fa2612f49565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f6130215f83613003565b915061302c82613013565b5f82019050919050565b5f6080820190506130495f8301866127bd565b61305660208301856127bd565b6130636040830184612a22565b818103606083015261307481613016565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130b28161307e565b81146130bc575f80fd5b50565b5f815190506130cd816130a9565b92915050565b5f602082840312156130e8576130e7612727565b5b5f6130f5848285016130bf565b91505092915050565b5f6131098385613003565b9350613116838584612930565b61311f836126b6565b840190509392505050565b5f60808201905061313d5f8301886127bd565b61314a60208301876127bd565b6131576040830186612a22565b818103606083015261316a8184866130fe565b90509695505050505050565b5f81905092915050565b5f815461318c81612cad565b6131968186613176565b9450600182165f81146131b057600181146131c5576131f7565b60ff19831686528115158202860193506131f7565b6131ce85612cdd565b5f5b838110156131ef578154818901526001820191506020810190506131d0565b838801955050505b50505092915050565b5f61320a82612674565b6132148185613176565b935061322481856020860161268e565b80840191505092915050565b5f61323b8286613180565b91506132478285613200565b91506132538284613180565b9150819050949350505050565b5f8160011c9050919050565b5f808291508390505b60018511156132b55780860481111561329157613290612f49565b5b60018516156132a05780820291505b80810290506132ae85613260565b9450613275565b94509492505050565b5f826132cd5760019050613388565b816132da575f9050613388565b81600181146132f057600281146132fa57613329565b6001915050613388565b60ff84111561330c5761330b612f49565b5b8360020a91508482111561332357613322612f49565b5b50613388565b5060208310610133831016604e8410600b841016171561335e5782820a90508381111561335957613358612f49565b5b613388565b61336b848484600161326c565b9250905081840481111561338257613381612f49565b5b81810290505b9392505050565b5f6133998261272f565b91506133a483612a9a565b92506133d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846132be565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134108261272f565b915061341b8361272f565b92508261342b5761342a6133d9565b5b828204905092915050565b5f6134408261272f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361347257613471612f49565b5b600182019050919050565b5f6134878261272f565b91506134928361272f565b9250826134a2576134a16133d9565b5b828206905092915050565b5f6134b78261272f565b91506134c28361272f565b92508282019050808211156134da576134d9612f49565b5b9291505056fea264697066735822122099503a4ee3cc2817ed86057b6261ee3d85f9149adb755054aba2ea6853f280b464736f6c63430008140033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101a7575f3560e01c80636352211e116100f7578063b88d4fde11610095578063d547cfb71161006f578063d547cfb7146104b9578063dd62ed3e146104d7578063e985e9c514610507578063f2fde38b14610537576101a7565b8063b88d4fde1461044f578063c66828621461046b578063c87b56dd14610489576101a7565b806395d89b41116100d157806395d89b41146103b55780639b19251a146103d3578063a22cb46514610403578063a9059cbb1461041f576101a7565b80636352211e1461033757806370a08231146103675780638da5cb5b14610397576101a7565b80632b9689581161016457806342842e0e1161013e57806342842e0e146102c55780634f02c420146102e1578063504334c2146102ff57806353d6fd591461031b576101a7565b80632b9689581461027f578063313ce56714610289578063378dc3dc146102a7576101a7565b806306fdde03146101ab578063081812fc146101c9578063095ea7b3146101f95780630b9b001c1461022957806318160ddd1461024557806323b872dd14610263575b5f80fd5b6101b3610553565b6040516101c091906126fe565b60405180910390f35b6101e360048036038101906101de9190612762565b6105df565b6040516101f091906127cc565b60405180910390f35b610213600480360381019061020e919061280f565b61060f565b6040516102209190612867565b60405180910390f35b610243600480360381019061023e91906129ac565b6108f6565b005b61024d61099e565b60405161025a9190612a31565b60405180910390f35b61027d60048036038101906102789190612a4a565b6109c2565b005b6102876111b9565b005b6102916112d8565b60405161029e9190612ab5565b60405180910390f35b6102af6112fc565b6040516102bc9190612a31565b60405180910390f35b6102df60048036038101906102da9190612a4a565b611302565b005b6102e9611431565b6040516102f69190612a31565b60405180910390f35b610319600480360381019061031491906129ac565b611437565b005b61033560048036038101906103309190612af8565b6114c9565b005b610351600480360381019061034c9190612762565b6115a5565b60405161035e91906127cc565b60405180910390f35b610381600480360381019061037c9190612b36565b611643565b60405161038e9190612a31565b60405180910390f35b61039f611658565b6040516103ac91906127cc565b60405180910390f35b6103bd61167b565b6040516103ca91906126fe565b60405180910390f35b6103ed60048036038101906103e89190612b36565b611707565b6040516103fa9190612867565b60405180910390f35b61041d60048036038101906104189190612af8565b611724565b005b6104396004803603810190610434919061280f565b61181c565b6040516104469190612867565b60405180910390f35b61046960048036038101906104649190612bbe565b611830565b005b610473611965565b60405161048091906126fe565b60405180910390f35b6104a3600480360381019061049e9190612762565b6119f1565b6040516104b091906126fe565b60405180910390f35b6104c1611a52565b6040516104ce91906126fe565b60405180910390f35b6104f160048036038101906104ec9190612c42565b611ade565b6040516104fe9190612a31565b60405180910390f35b610521600480360381019061051c9190612c42565b611afe565b60405161052e9190612867565b60405180910390f35b610551600480360381019061054c9190612b36565b611b28565b005b6001805461056090612cad565b80601f016020809104026020016040519081016040528092919081815260200182805461058c90612cad565b80156105d75780601f106105ae576101008083540402835291602001916105d7565b820191905f5260205f20905b8154815290600101906020018083116105ba57829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561062157505f82115b15610809575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610718575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561074f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516107fb9190612a31565b60405180910390a3506108ec565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108e39190612a31565b60405180910390a35b6001905092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600d90816109899190612e7a565b5080600e90816109999190612e7a565b505050565b7f0000000000000000000000000000000000000000000000db02434329a220000081565b600354811161107a5760085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a60576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac5576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b83575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610beb575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c22576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c2a611cad565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c759190612f76565b92505081905550610c84611cad565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610dda9190612f76565b81548110610deb57610dea612fa9565b5b905f5260205f20015490508060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600a5f8581526020019081526020015f205481548110610e5757610e56612fa9565b5b905f5260205f20018190555060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610eb057610eaf612fd6565b5b600190038181905f5260205f20015f90559055600a5f8381526020019081526020015f2054600a5f8381526020019081526020015f208190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610f989190612f76565b600a5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761105f611cad565b60405161106c9190612a31565b60405180910390a3506111b4565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111a65781816111299190612f76565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6111b1848484611ce0565b50505b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000001281565b600c5481565b61130d8383836109c2565b5f8273ffffffffffffffffffffffffffffffffffffffff163b141580156113f5575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161139393929190613036565b6020604051808303815f875af11580156113af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d391906130d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561142c576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114c58282612030565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461154d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163e576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6004602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805461168890612cad565b80601f01602080910402602001604051908101604052809291908181526020018280546116b490612cad565b80156116ff5780601f106116d6576101008083540402835291602001916116ff565b820191905f5260205f20905b8154815290600101906020018083116116e257829003601f168201915b505050505081565b600b602052805f5260405f205f915054906101000a900460ff1681565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118109190612867565b60405180910390a35050565b5f611828338484611ce0565b905092915050565b61183b8585856109c2565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611927575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016118c595949392919061312a565b6020604051808303815f875af11580156118e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190591906130d3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561195e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600e805461197290612cad565b80601f016020809104026020016040519081016040528092919081815260200182805461199e90612cad565b80156119e95780601f106119c0576101008083540402835291602001916119e9565b820191905f5260205f20905b8154815290600101906020018083116119cc57829003601f168201915b505050505081565b60605f600d8054611a0190612cad565b905011611a1c5760405180602001604052805f815250611a4b565b600d611a2783612054565b600e604051602001611a3b93929190613230565b6040516020818303038152906040525b9050919050565b600d8054611a5f90612cad565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8b90612cad565b8015611ad65780601f10611aad57610100808354040283529160200191611ad6565b820191905f5260205f20905b815481529060010190602001808311611ab957829003601f168201915b505050505081565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c11576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000012600a611cdb919061338f565b905090565b5f80611cea611cad565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611dba9190612f76565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ee4575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ea39190613406565b8484611eaf9190613406565b611eb99190612f76565b90505f5b81811015611ee157611ece896121ad565b8080611ed990613436565b915050611ebd565b50505b600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611fbd575f8382611f3f9190613406565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611f889190613406565b611f929190612f76565b90505f5b81811015611fba57611fa7886123f2565b8080611fb290613436565b915050611f96565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161201a9190612a31565b60405180910390a3600193505050509392505050565b816001908161203f9190612e7a565b50806002908161204f9190612e7a565b505050565b60605f820361209a576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121a8565b5f8290505f5b5f82146120c95780806120b290613436565b915050600a826120c29190613406565b91506120a0565b5f8167ffffffffffffffff8111156120e4576120e3612888565b5b6040519080825280601f01601f1916602001820160405280156121165781602001600182028036833780820191505090505b5090505b5f85146121a15760018261212e9190612f76565b9150600a8561213d919061347d565b603061214991906134ad565b60f81b81838151811061215f5761215e612fa9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561219a9190613406565b945061211a565b8093505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612212576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061229d9190612f76565b815481106122ae576122ad612fa9565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061230657612305612fd6565b5b600190038181905f5260205f20015f90559055600a5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612457576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f81548092919060010191905055505f60035490505f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612503576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506126009190612f76565b600a5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156126ab578082015181840152602081019050612690565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6126d082612674565b6126da818561267e565b93506126ea81856020860161268e565b6126f3816126b6565b840191505092915050565b5f6020820190508181035f83015261271681846126c6565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6127418161272f565b811461274b575f80fd5b50565b5f8135905061275c81612738565b92915050565b5f6020828403121561277757612776612727565b5b5f6127848482850161274e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127b68261278d565b9050919050565b6127c6816127ac565b82525050565b5f6020820190506127df5f8301846127bd565b92915050565b6127ee816127ac565b81146127f8575f80fd5b50565b5f81359050612809816127e5565b92915050565b5f806040838503121561282557612824612727565b5b5f612832858286016127fb565b92505060206128438582860161274e565b9150509250929050565b5f8115159050919050565b6128618161284d565b82525050565b5f60208201905061287a5f830184612858565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6128be826126b6565b810181811067ffffffffffffffff821117156128dd576128dc612888565b5b80604052505050565b5f6128ef61271e565b90506128fb82826128b5565b919050565b5f67ffffffffffffffff82111561291a57612919612888565b5b612923826126b6565b9050602081019050919050565b828183375f83830152505050565b5f61295061294b84612900565b6128e6565b90508281526020810184848401111561296c5761296b612884565b5b612977848285612930565b509392505050565b5f82601f83011261299357612992612880565b5b81356129a384826020860161293e565b91505092915050565b5f80604083850312156129c2576129c1612727565b5b5f83013567ffffffffffffffff8111156129df576129de61272b565b5b6129eb8582860161297f565b925050602083013567ffffffffffffffff811115612a0c57612a0b61272b565b5b612a188582860161297f565b9150509250929050565b612a2b8161272f565b82525050565b5f602082019050612a445f830184612a22565b92915050565b5f805f60608486031215612a6157612a60612727565b5b5f612a6e868287016127fb565b9350506020612a7f868287016127fb565b9250506040612a908682870161274e565b9150509250925092565b5f60ff82169050919050565b612aaf81612a9a565b82525050565b5f602082019050612ac85f830184612aa6565b92915050565b612ad78161284d565b8114612ae1575f80fd5b50565b5f81359050612af281612ace565b92915050565b5f8060408385031215612b0e57612b0d612727565b5b5f612b1b858286016127fb565b9250506020612b2c85828601612ae4565b9150509250929050565b5f60208284031215612b4b57612b4a612727565b5b5f612b58848285016127fb565b91505092915050565b5f80fd5b5f80fd5b5f8083601f840112612b7e57612b7d612880565b5b8235905067ffffffffffffffff811115612b9b57612b9a612b61565b5b602083019150836001820283011115612bb757612bb6612b65565b5b9250929050565b5f805f805f60808688031215612bd757612bd6612727565b5b5f612be4888289016127fb565b9550506020612bf5888289016127fb565b9450506040612c068882890161274e565b935050606086013567ffffffffffffffff811115612c2757612c2661272b565b5b612c3388828901612b69565b92509250509295509295909350565b5f8060408385031215612c5857612c57612727565b5b5f612c65858286016127fb565b9250506020612c76858286016127fb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612cc457607f821691505b602082108103612cd757612cd6612c80565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612d397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612cfe565b612d438683612cfe565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612d7e612d79612d748461272f565b612d5b565b61272f565b9050919050565b5f819050919050565b612d9783612d64565b612dab612da382612d85565b848454612d0a565b825550505050565b5f90565b612dbf612db3565b612dca818484612d8e565b505050565b5b81811015612ded57612de25f82612db7565b600181019050612dd0565b5050565b601f821115612e3257612e0381612cdd565b612e0c84612cef565b81016020851015612e1b578190505b612e2f612e2785612cef565b830182612dcf565b50505b505050565b5f82821c905092915050565b5f612e525f1984600802612e37565b1980831691505092915050565b5f612e6a8383612e43565b9150826002028217905092915050565b612e8382612674565b67ffffffffffffffff811115612e9c57612e9b612888565b5b612ea68254612cad565b612eb1828285612df1565b5f60209050601f831160018114612ee2575f8415612ed0578287015190505b612eda8582612e5f565b865550612f41565b601f198416612ef086612cdd565b5f5b82811015612f1757848901518255600182019150602085019450602081019050612ef2565b86831015612f345784890151612f30601f891682612e43565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612f808261272f565b9150612f8b8361272f565b9250828203905081811115612fa357612fa2612f49565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f6130215f83613003565b915061302c82613013565b5f82019050919050565b5f6080820190506130495f8301866127bd565b61305660208301856127bd565b6130636040830184612a22565b818103606083015261307481613016565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130b28161307e565b81146130bc575f80fd5b50565b5f815190506130cd816130a9565b92915050565b5f602082840312156130e8576130e7612727565b5b5f6130f5848285016130bf565b91505092915050565b5f6131098385613003565b9350613116838584612930565b61311f836126b6565b840190509392505050565b5f60808201905061313d5f8301886127bd565b61314a60208301876127bd565b6131576040830186612a22565b818103606083015261316a8184866130fe565b90509695505050505050565b5f81905092915050565b5f815461318c81612cad565b6131968186613176565b9450600182165f81146131b057600181146131c5576131f7565b60ff19831686528115158202860193506131f7565b6131ce85612cdd565b5f5b838110156131ef578154818901526001820191506020810190506131d0565b838801955050505b50505092915050565b5f61320a82612674565b6132148185613176565b935061322481856020860161268e565b80840191505092915050565b5f61323b8286613180565b91506132478285613200565b91506132538284613180565b9150819050949350505050565b5f8160011c9050919050565b5f808291508390505b60018511156132b55780860481111561329157613290612f49565b5b60018516156132a05780820291505b80810290506132ae85613260565b9450613275565b94509492505050565b5f826132cd5760019050613388565b816132da575f9050613388565b81600181146132f057600281146132fa57613329565b6001915050613388565b60ff84111561330c5761330b612f49565b5b8360020a91508482111561332357613322612f49565b5b50613388565b5060208310610133831016604e8410600b841016171561335e5782820a90508381111561335957613358612f49565b5b613388565b61336b848484600161326c565b9250905081840481111561338257613381612f49565b5b81810290505b9392505050565b5f6133998261272f565b91506133a483612a9a565b92506133d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846132be565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134108261272f565b915061341b8361272f565b92508261342b5761342a6133d9565b5b828204905092915050565b5f6134408261272f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361347257613471612f49565b5b600182019050919050565b5f6134878261272f565b91506134928361272f565b9250826134a2576134a16133d9565b5b828206905092915050565b5f6134b78261272f565b91506134c28361272f565b92508282019050808211156134da576134d9612f49565b5b9291505056fea264697066735822122099503a4ee3cc2817ed86057b6261ee3d85f9149adb755054aba2ea6853f280b464736f6c63430008140033

Deployed Bytecode Sourcemap

13761:1208:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4867:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5578:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7409:642;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14338:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5103:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8458:1713;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:151;;;:::i;:::-;;5003:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13831:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10467:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5238:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14537:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6738:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6921:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5344:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2305:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4921;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6189:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8102:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10230:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10967:437;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13903:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14701:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13870:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5458:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5689:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2637:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4867:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5578:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;7409:642::-;7512:4;7547:6;;7533:10;:20;;:38;;;;;7570:1;7557:10;:14;7533:38;7529:491;;;7588:13;7604:8;:20;7613:10;7604:20;;;;;;;;;;;;;;;;;;;;;7588:36;;7659:5;7645:19;;:10;:19;;;;:59;;;;;7669:16;:23;7686:5;7669:23;;;;;;;;;;;;;;;:35;7693:10;7669:35;;;;;;;;;;;;;;;;;;;;;;;;;7668:36;7645:59;7641:121;;;7732:14;;;;;;;;;;;;;;7641:121;7804:7;7778:11;:23;7790:10;7778:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;7849:7;7833:36;;7842:5;7833:36;;;7858:10;7833:36;;;;;;:::i;:::-;;;;;;;;7573:308;7529:491;;;7935:10;7902:9;:21;7912:10;7902:21;;;;;;;;;;;;;;;:30;7924:7;7902:30;;;;;;;;;;;;;;;:43;;;;7988:7;7967:41;;7976:10;7967:41;;;7997:10;7967:41;;;;;;:::i;:::-;;;;;;;;7529:491;8039:4;8032:11;;7409:642;;;;:::o;14338:191::-;2392:5;;;;;;;;;;2378:19;;:10;:19;;;2374:46;;2406:14;;;;;;;;;;;;;;2374:46;14466:11:::1;14451:12;:26;;;;;;:::i;:::-;;14504:17;14488:13;:33;;;;;;:::i;:::-;;14338:191:::0;;:::o;5103:36::-;;;:::o;8458:1713::-;8604:6;;8590:10;:20;8586:1578;;8639:8;:20;8648:10;8639:20;;;;;;;;;;;;;;;;;;;;;8631:28;;:4;:28;;;8627:91;;8687:15;;;;;;;;;;;;;;8627:91;8752:1;8738:16;;:2;:16;;;8734:82;;8782:18;;;;;;;;;;;;;;8734:82;8868:4;8854:18;;:10;:18;;;;:74;;;;;8894:16;:22;8911:4;8894:22;;;;;;;;;;;;;;;:34;8917:10;8894:34;;;;;;;;;;;;;;;;;;;;;;;;;8893:35;8854:74;:132;;;;;8963:11;:23;8975:10;8963:23;;;;;;;;;;;;;;;;;;;;;8949:37;;:10;:37;;;;8854:132;8832:226;;;9028:14;;;;;;;;;;;;;;8832:226;9093:10;:8;:10::i;:::-;9074:9;:15;9084:4;9074:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;9166:10;:8;:10::i;:::-;9149:9;:13;9159:2;9149:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;9231:2;9208:8;:20;9217:10;9208:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;9255:11;:23;9267:10;9255:23;;;;;;;;;;;;9248:30;;;;;;;;;;;9336:17;9356:6;:12;9363:4;9356:12;;;;;;;;;;;;;;;9391:1;9369:6;:12;9376:4;9369:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;9356:37;;;;;;;;:::i;:::-;;;;;;;;;;9336:57;;9448:9;9408:6;:12;9415:4;9408:12;;;;;;;;;;;;;;;9421:11;:23;9433:10;9421:23;;;;;;;;;;;;9408:37;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;9492:6;:12;9499:4;9492:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9596:11;:23;9608:10;9596:23;;;;;;;;;;;;9571:11;:22;9583:9;9571:22;;;;;;;;;;;:48;;;;9670:6;:10;9677:2;9670:10;;;;;;;;;;;;;;;9686;9670:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9800:1;9780:6;:10;9787:2;9780:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;9754:11;:23;9766:10;9754:23;;;;;;;;;;;:47;;;;9842:10;9838:2;9823:30;;9832:4;9823:30;;;;;;;;;;;;9893:2;9873:35;;9887:4;9873:35;;;9897:10;:8;:10::i;:::-;9873:35;;;;;;:::i;:::-;;;;;;;;8612:1308;8586:1578;;;9941:15;9959:9;:15;9969:4;9959:15;;;;;;;;;;;;;;;:27;9975:10;9959:27;;;;;;;;;;;;;;;;9941:45;;10018:17;10007:7;:28;10003:101;;10094:10;10084:7;:20;;;;:::i;:::-;10054:9;:15;10064:4;10054:15;;;;;;;;;;;;;;;:27;10070:10;10054:27;;;;;;;;;;;;;;;:50;;;;10003:101;10121:31;10131:4;10137:2;10141:10;10121:9;:31::i;:::-;;9926:238;8586:1578;8458:1713;;;:::o;2864:151::-;2392:5;;;;;;;;;;2378:19;;:10;:19;;;2374:46;;2406:14;;;;;;;;;;;;;;2374:46;2943:1:::1;2927:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;3004:1;2963:44;;2984:10;2963:44;;;;;;;;;;;;2864:151::o:0;5003:31::-;;;:::o;13831:32::-;;;;:::o;10467:405::-;10591:26;10604:4;10610:2;10614;10591:12;:26::i;:::-;10666:1;10648:2;:14;;;:19;;:154;;;;;10762:40;;;10684:118;;;10699:2;10684:35;;;10720:10;10732:4;10738:2;10684:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;10648:154;10630:235;;;10836:17;;;;;;;;;;;;;;10630:235;10467:405;;;:::o;5238:21::-;;;;:::o;14537:158::-;2392:5;;;;;;;;;;2378:19;;:10;:19;;;2374:46;;2406:14;;;;;;;;;;;;;;2374:46;14657:30:::1;14672:5;14679:7;14657:14;:30::i;:::-;14537:158:::0;;:::o;6738:111::-;2392:5;;;;;;;;;;2378:19;;:10;:19;;;2374:46;;2406:14;;;;;;;;;;;;;;2374:46;6836:5:::1;6816:9;:17;6826:6;6816:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;6738:111:::0;;:::o;6921:193::-;6979:13;7013:8;:12;7022:2;7013:12;;;;;;;;;;;;;;;;;;;;;7005:20;;7059:1;7042:19;;:5;:19;;;7038:69;;7085:10;;;;;;;;;;;;;;7038:69;6921:193;;;:::o;5344:44::-;;;;;;;;;;;;;;;;;:::o;2305:20::-;;;;;;;;;;;;:::o;4921:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6189:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;8102:207::-;8229:8;8188:16;:28;8205:10;8188:28;;;;;;;;;;;;;;;:38;8217:8;8188:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;8282:8;8255:46;;8270:10;8255:46;;;8292:8;8255:46;;;;;;:::i;:::-;;;;;;;;8102:207;;:::o;10230:160::-;10325:4;10349:33;10359:10;10371:2;10375:6;10349:9;:33::i;:::-;10342:40;;10230:160;;;;:::o;10967:437::-;11121:26;11134:4;11140:2;11144;11121:12;:26::i;:::-;11196:1;11178:2;:14;;;:19;;:156;;;;;11294:40;;;11214:120;;;11229:2;11214:35;;;11250:10;11262:4;11268:2;11272:4;;11214:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;11178:156;11160:237;;;11368:17;;;;;;;;;;;;;;11160:237;10967:437;;;;;:::o;13903:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14701:265::-;14799:13;14860:1;14837:12;14831:26;;;;;:::i;:::-;;;:30;:129;;;;;;;;;;;;;;;;;14897:12;14911:18;:7;:16;:18::i;:::-;14931:13;14880:65;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14831:129;14824:136;;14701:265;;;:::o;13870:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5458:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5689:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2637:219::-;2392:5;;;;;;;;;;2378:19;;:10;:19;;;2374:46;;2406:14;;;;;;;;;;;;;;2374:46;2738:1:::1;2720:20;;:6;:20;;::::0;2716:47:::1;;2749:14;;;;;;;;;;;;;;2716:47;2784:6;2776:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;2841:6;2808:40;;2829:10;2808:40;;;;;;;;;;;;2637:219:::0;:::o;12604:92::-;12647:7;12680:8;12674:2;:14;;;;:::i;:::-;12667:21;;12604:92;:::o;11472:1093::-;11585:4;11602:12;11617:10;:8;:10::i;:::-;11602:25;;11638:27;11668:9;:15;11678:4;11668:15;;;;;;;;;;;;;;;;11638:45;;11694:29;11726:9;:13;11736:2;11726:13;;;;;;;;;;;;;;;;11694:45;;11771:6;11752:9;:15;11762:4;11752:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;11832:6;11815:9;:13;11825:2;11815:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;11923:9;:15;11933:4;11923:15;;;;;;;;;;;;;;;;;;;;;;;;;11918:251;;11955:22;12047:4;12029:9;:15;12039:4;12029:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;12003:4;11981:19;:26;;;;:::i;:::-;11980:72;;;;:::i;:::-;11955:97;;12072:9;12067:91;12091:14;12087:1;:18;12067:91;;;12131:11;12137:4;12131:5;:11::i;:::-;12107:3;;;;;:::i;:::-;;;;12067:91;;;;11940:229;11918:251;12245:9;:13;12255:2;12245:13;;;;;;;;;;;;;;;;;;;;;;;;;12240:247;;12275:22;12367:4;12343:21;:28;;;;:::i;:::-;12317:4;12301:9;:13;12311:2;12301:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;12300:72;;;;:::i;:::-;12275:97;;12392:9;12387:89;12411:14;12407:1;:18;12387:89;;;12451:9;12457:2;12451:5;:9::i;:::-;12427:3;;;;;:::i;:::-;;;;12387:89;;;;12260:227;12240:247;12524:2;12504:31;;12518:4;12504:31;;;12528:6;12504:31;;;;;;:::i;:::-;;;;;;;;12553:4;12546:11;;;;;11472:1093;;;;;:::o;13567:160::-;13687:5;13680:4;:12;;;;;;:::i;:::-;;13712:7;13703:6;:16;;;;;;:::i;:::-;;13567:160;;:::o;344:724::-;400:13;631:1;622:5;:10;618:53;;649:10;;;;;;;;;;;;;;;;;;;;;618:53;681:12;696:5;681:20;;712:14;737:78;752:1;744:4;:9;737:78;;770:8;;;;;:::i;:::-;;;;801:2;793:10;;;;;:::i;:::-;;;737:78;;;825:19;857:6;847:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;825:39;;875:154;891:1;882:5;:10;875:154;;919:1;909:11;;;;;:::i;:::-;;;986:2;978:5;:10;;;;:::i;:::-;965:2;:24;;;;:::i;:::-;952:39;;935:6;942;935:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1015:2;1006:11;;;;;:::i;:::-;;;875:154;;;1053:6;1039:21;;;;;344:724;;;;:::o;13186:373::-;13263:1;13247:18;;:4;:18;;;13243:73;;13289:15;;;;;;;;;;;;;;13243:73;13328:10;13341:6;:12;13348:4;13341:12;;;;;;;;;;;;;;;13376:1;13354:6;:12;13361:4;13354:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;13341:37;;;;;;;;:::i;:::-;;;;;;;;;;13328:50;;13389:6;:12;13396:4;13389:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13425:11;:15;13437:2;13425:15;;;;;;;;;;;13418:22;;;13458:8;:12;13467:2;13458:12;;;;;;;;;;;;13451:19;;;;;;;;;;;13488:11;:15;13500:2;13488:15;;;;;;;;;;;;13481:22;;;;;;;;;;;13548:2;13544:1;13521:30;;13530:4;13521:30;;;;;;;;;;;;13232:327;13186:373;:::o;12704:474::-;12777:1;12763:16;;:2;:16;;;12759:74;;12803:18;;;;;;;;;;;;;;12759:74;12870:6;;:8;;;;;;;;;;;;;12902:10;12915:6;;12902:19;;12962:1;12938:26;;:8;:12;12947:2;12938:12;;;;;;;;;;;;;;;;;;;;;:26;;;12934:81;;12988:15;;;;;;;;;;;;;;12934:81;13042:2;13027:8;:12;13036:2;13027:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;13055:6;:10;13062:2;13055:10;;;;;;;;;;;;;;;13071:2;13055:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13123:1;13103:6;:10;13110:2;13103:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;13085:11;:15;13097:2;13085:15;;;;;;;;;;;:39;;;;13167:2;13163;13142:28;;13159:1;13142:28;;;;;;;;;;;;12748:430;12704:474;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:118::-;2688:24;2706:5;2688:24;:::i;:::-;2683:3;2676:37;2601:118;;:::o;2725:222::-;2818:4;2856:2;2845:9;2841:18;2833:26;;2869:71;2937:1;2926:9;2922:17;2913:6;2869:71;:::i;:::-;2725:222;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:117::-;4242:1;4239;4232:12;4256:117;4365:1;4362;4355:12;4379:180;4427:77;4424:1;4417:88;4524:4;4521:1;4514:15;4548:4;4545:1;4538:15;4565:281;4648:27;4670:4;4648:27;:::i;:::-;4640:6;4636:40;4778:6;4766:10;4763:22;4742:18;4730:10;4727:34;4724:62;4721:88;;;4789:18;;:::i;:::-;4721:88;4829:10;4825:2;4818:22;4608:238;4565:281;;:::o;4852:129::-;4886:6;4913:20;;:::i;:::-;4903:30;;4942:33;4970:4;4962:6;4942:33;:::i;:::-;4852:129;;;:::o;4987:308::-;5049:4;5139:18;5131:6;5128:30;5125:56;;;5161:18;;:::i;:::-;5125:56;5199:29;5221:6;5199:29;:::i;:::-;5191:37;;5283:4;5277;5273:15;5265:23;;4987:308;;;:::o;5301:146::-;5398:6;5393:3;5388;5375:30;5439:1;5430:6;5425:3;5421:16;5414:27;5301:146;;;:::o;5453:425::-;5531:5;5556:66;5572:49;5614:6;5572:49;:::i;:::-;5556:66;:::i;:::-;5547:75;;5645:6;5638:5;5631:21;5683:4;5676:5;5672:16;5721:3;5712:6;5707:3;5703:16;5700:25;5697:112;;;5728:79;;:::i;:::-;5697:112;5818:54;5865:6;5860:3;5855;5818:54;:::i;:::-;5537:341;5453:425;;;;;:::o;5898:340::-;5954:5;6003:3;5996:4;5988:6;5984:17;5980:27;5970:122;;6011:79;;:::i;:::-;5970:122;6128:6;6115:20;6153:79;6228:3;6220:6;6213:4;6205:6;6201:17;6153:79;:::i;:::-;6144:88;;5960:278;5898:340;;;;:::o;6244:834::-;6332:6;6340;6389:2;6377:9;6368:7;6364:23;6360:32;6357:119;;;6395:79;;:::i;:::-;6357:119;6543:1;6532:9;6528:17;6515:31;6573:18;6565:6;6562:30;6559:117;;;6595:79;;:::i;:::-;6559:117;6700:63;6755:7;6746:6;6735:9;6731:22;6700:63;:::i;:::-;6690:73;;6486:287;6840:2;6829:9;6825:18;6812:32;6871:18;6863:6;6860:30;6857:117;;;6893:79;;:::i;:::-;6857:117;6998:63;7053:7;7044:6;7033:9;7029:22;6998:63;:::i;:::-;6988:73;;6783:288;6244:834;;;;;:::o;7084:118::-;7171:24;7189:5;7171:24;:::i;:::-;7166:3;7159:37;7084:118;;:::o;7208:222::-;7301:4;7339:2;7328:9;7324:18;7316:26;;7352:71;7420:1;7409:9;7405:17;7396:6;7352:71;:::i;:::-;7208:222;;;;:::o;7436:619::-;7513:6;7521;7529;7578:2;7566:9;7557:7;7553:23;7549:32;7546:119;;;7584:79;;:::i;:::-;7546:119;7704:1;7729:53;7774:7;7765:6;7754:9;7750:22;7729:53;:::i;:::-;7719:63;;7675:117;7831:2;7857:53;7902:7;7893:6;7882:9;7878:22;7857:53;:::i;:::-;7847:63;;7802:118;7959:2;7985:53;8030:7;8021:6;8010:9;8006:22;7985:53;:::i;:::-;7975:63;;7930:118;7436:619;;;;;:::o;8061:86::-;8096:7;8136:4;8129:5;8125:16;8114:27;;8061:86;;;:::o;8153:112::-;8236:22;8252:5;8236:22;:::i;:::-;8231:3;8224:35;8153:112;;:::o;8271:214::-;8360:4;8398:2;8387:9;8383:18;8375:26;;8411:67;8475:1;8464:9;8460:17;8451:6;8411:67;:::i;:::-;8271:214;;;;:::o;8491:116::-;8561:21;8576:5;8561:21;:::i;:::-;8554:5;8551:32;8541:60;;8597:1;8594;8587:12;8541:60;8491:116;:::o;8613:133::-;8656:5;8694:6;8681:20;8672:29;;8710:30;8734:5;8710:30;:::i;:::-;8613:133;;;;:::o;8752:468::-;8817:6;8825;8874:2;8862:9;8853:7;8849:23;8845:32;8842:119;;;8880:79;;:::i;:::-;8842:119;9000:1;9025:53;9070:7;9061:6;9050:9;9046:22;9025:53;:::i;:::-;9015:63;;8971:117;9127:2;9153:50;9195:7;9186:6;9175:9;9171:22;9153:50;:::i;:::-;9143:60;;9098:115;8752:468;;;;;:::o;9226:329::-;9285:6;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9226:329;;;;:::o;9561:117::-;9670:1;9667;9660:12;9684:117;9793:1;9790;9783:12;9820:552;9877:8;9887:6;9937:3;9930:4;9922:6;9918:17;9914:27;9904:122;;9945:79;;:::i;:::-;9904:122;10058:6;10045:20;10035:30;;10088:18;10080:6;10077:30;10074:117;;;10110:79;;:::i;:::-;10074:117;10224:4;10216:6;10212:17;10200:29;;10278:3;10270:4;10262:6;10258:17;10248:8;10244:32;10241:41;10238:128;;;10285:79;;:::i;:::-;10238:128;9820:552;;;;;:::o;10378:963::-;10475:6;10483;10491;10499;10507;10556:3;10544:9;10535:7;10531:23;10527:33;10524:120;;;10563:79;;:::i;:::-;10524:120;10683:1;10708:53;10753:7;10744:6;10733:9;10729:22;10708:53;:::i;:::-;10698:63;;10654:117;10810:2;10836:53;10881:7;10872:6;10861:9;10857:22;10836:53;:::i;:::-;10826:63;;10781:118;10938:2;10964:53;11009:7;11000:6;10989:9;10985:22;10964:53;:::i;:::-;10954:63;;10909:118;11094:2;11083:9;11079:18;11066:32;11125:18;11117:6;11114:30;11111:117;;;11147:79;;:::i;:::-;11111:117;11260:64;11316:7;11307:6;11296:9;11292:22;11260:64;:::i;:::-;11242:82;;;;11037:297;10378:963;;;;;;;;:::o;11347:474::-;11415:6;11423;11472:2;11460:9;11451:7;11447:23;11443:32;11440:119;;;11478:79;;:::i;:::-;11440:119;11598:1;11623:53;11668:7;11659:6;11648:9;11644:22;11623:53;:::i;:::-;11613:63;;11569:117;11725:2;11751:53;11796:7;11787:6;11776:9;11772:22;11751:53;:::i;:::-;11741:63;;11696:118;11347:474;;;;;:::o;11827:180::-;11875:77;11872:1;11865:88;11972:4;11969:1;11962:15;11996:4;11993:1;11986:15;12013:320;12057:6;12094:1;12088:4;12084:12;12074:22;;12141:1;12135:4;12131:12;12162:18;12152:81;;12218:4;12210:6;12206:17;12196:27;;12152:81;12280:2;12272:6;12269:14;12249:18;12246:38;12243:84;;12299:18;;:::i;:::-;12243:84;12064:269;12013:320;;;:::o;12339:141::-;12388:4;12411:3;12403:11;;12434:3;12431:1;12424:14;12468:4;12465:1;12455:18;12447:26;;12339:141;;;:::o;12486:93::-;12523:6;12570:2;12565;12558:5;12554:14;12550:23;12540:33;;12486:93;;;:::o;12585:107::-;12629:8;12679:5;12673:4;12669:16;12648:37;;12585:107;;;;:::o;12698:393::-;12767:6;12817:1;12805:10;12801:18;12840:97;12870:66;12859:9;12840:97;:::i;:::-;12958:39;12988:8;12977:9;12958:39;:::i;:::-;12946:51;;13030:4;13026:9;13019:5;13015:21;13006:30;;13079:4;13069:8;13065:19;13058:5;13055:30;13045:40;;12774:317;;12698:393;;;;;:::o;13097:60::-;13125:3;13146:5;13139:12;;13097:60;;;:::o;13163:142::-;13213:9;13246:53;13264:34;13273:24;13291:5;13273:24;:::i;:::-;13264:34;:::i;:::-;13246:53;:::i;:::-;13233:66;;13163:142;;;:::o;13311:75::-;13354:3;13375:5;13368:12;;13311:75;;;:::o;13392:269::-;13502:39;13533:7;13502:39;:::i;:::-;13563:91;13612:41;13636:16;13612:41;:::i;:::-;13604:6;13597:4;13591:11;13563:91;:::i;:::-;13557:4;13550:105;13468:193;13392:269;;;:::o;13667:73::-;13712:3;13667:73;:::o;13746:189::-;13823:32;;:::i;:::-;13864:65;13922:6;13914;13908:4;13864:65;:::i;:::-;13799:136;13746:189;;:::o;13941:186::-;14001:120;14018:3;14011:5;14008:14;14001:120;;;14072:39;14109:1;14102:5;14072:39;:::i;:::-;14045:1;14038:5;14034:13;14025:22;;14001:120;;;13941:186;;:::o;14133:543::-;14234:2;14229:3;14226:11;14223:446;;;14268:38;14300:5;14268:38;:::i;:::-;14352:29;14370:10;14352:29;:::i;:::-;14342:8;14338:44;14535:2;14523:10;14520:18;14517:49;;;14556:8;14541:23;;14517:49;14579:80;14635:22;14653:3;14635:22;:::i;:::-;14625:8;14621:37;14608:11;14579:80;:::i;:::-;14238:431;;14223:446;14133:543;;;:::o;14682:117::-;14736:8;14786:5;14780:4;14776:16;14755:37;;14682:117;;;;:::o;14805:169::-;14849:6;14882:51;14930:1;14926:6;14918:5;14915:1;14911:13;14882:51;:::i;:::-;14878:56;14963:4;14957;14953:15;14943:25;;14856:118;14805:169;;;;:::o;14979:295::-;15055:4;15201:29;15226:3;15220:4;15201:29;:::i;:::-;15193:37;;15263:3;15260:1;15256:11;15250:4;15247:21;15239:29;;14979:295;;;;:::o;15279:1395::-;15396:37;15429:3;15396:37;:::i;:::-;15498:18;15490:6;15487:30;15484:56;;;15520:18;;:::i;:::-;15484:56;15564:38;15596:4;15590:11;15564:38;:::i;:::-;15649:67;15709:6;15701;15695:4;15649:67;:::i;:::-;15743:1;15767:4;15754:17;;15799:2;15791:6;15788:14;15816:1;15811:618;;;;16473:1;16490:6;16487:77;;;16539:9;16534:3;16530:19;16524:26;16515:35;;16487:77;16590:67;16650:6;16643:5;16590:67;:::i;:::-;16584:4;16577:81;16446:222;15781:887;;15811:618;15863:4;15859:9;15851:6;15847:22;15897:37;15929:4;15897:37;:::i;:::-;15956:1;15970:208;15984:7;15981:1;15978:14;15970:208;;;16063:9;16058:3;16054:19;16048:26;16040:6;16033:42;16114:1;16106:6;16102:14;16092:24;;16161:2;16150:9;16146:18;16133:31;;16007:4;16004:1;16000:12;15995:17;;15970:208;;;16206:6;16197:7;16194:19;16191:179;;;16264:9;16259:3;16255:19;16249:26;16307:48;16349:4;16341:6;16337:17;16326:9;16307:48;:::i;:::-;16299:6;16292:64;16214:156;16191:179;16416:1;16412;16404:6;16400:14;16396:22;16390:4;16383:36;15818:611;;;15781:887;;15371:1303;;;15279:1395;;:::o;16680:180::-;16728:77;16725:1;16718:88;16825:4;16822:1;16815:15;16849:4;16846:1;16839:15;16866:194;16906:4;16926:20;16944:1;16926:20;:::i;:::-;16921:25;;16960:20;16978:1;16960:20;:::i;:::-;16955:25;;17004:1;17001;16997:9;16989:17;;17028:1;17022:4;17019:11;17016:37;;;17033:18;;:::i;:::-;17016:37;16866:194;;;;:::o;17066:180::-;17114:77;17111:1;17104:88;17211:4;17208:1;17201:15;17235:4;17232:1;17225:15;17252:180;17300:77;17297:1;17290:88;17397:4;17394:1;17387:15;17421:4;17418:1;17411:15;17438:168;17521:11;17555:6;17550:3;17543:19;17595:4;17590:3;17586:14;17571:29;;17438:168;;;;:::o;17612:114::-;;:::o;17732:362::-;17873:3;17894:65;17957:1;17952:3;17894:65;:::i;:::-;17887:72;;17968:93;18057:3;17968:93;:::i;:::-;18086:1;18081:3;18077:11;18070:18;;17732:362;;;:::o;18100:748::-;18349:4;18387:3;18376:9;18372:19;18364:27;;18401:71;18469:1;18458:9;18454:17;18445:6;18401:71;:::i;:::-;18482:72;18550:2;18539:9;18535:18;18526:6;18482:72;:::i;:::-;18564;18632:2;18621:9;18617:18;18608:6;18564:72;:::i;:::-;18683:9;18677:4;18673:20;18668:2;18657:9;18653:18;18646:48;18711:130;18836:4;18711:130;:::i;:::-;18703:138;;18100:748;;;;;;:::o;18854:149::-;18890:7;18930:66;18923:5;18919:78;18908:89;;18854:149;;;:::o;19009:120::-;19081:23;19098:5;19081:23;:::i;:::-;19074:5;19071:34;19061:62;;19119:1;19116;19109:12;19061:62;19009:120;:::o;19135:141::-;19191:5;19222:6;19216:13;19207:22;;19238:32;19264:5;19238:32;:::i;:::-;19135:141;;;;:::o;19282:349::-;19351:6;19400:2;19388:9;19379:7;19375:23;19371:32;19368:119;;;19406:79;;:::i;:::-;19368:119;19526:1;19551:63;19606:7;19597:6;19586:9;19582:22;19551:63;:::i;:::-;19541:73;;19497:127;19282:349;;;;:::o;19659:314::-;19755:3;19776:70;19839:6;19834:3;19776:70;:::i;:::-;19769:77;;19856:56;19905:6;19900:3;19893:5;19856:56;:::i;:::-;19937:29;19959:6;19937:29;:::i;:::-;19932:3;19928:39;19921:46;;19659:314;;;;;:::o;19979:660::-;20184:4;20222:3;20211:9;20207:19;20199:27;;20236:71;20304:1;20293:9;20289:17;20280:6;20236:71;:::i;:::-;20317:72;20385:2;20374:9;20370:18;20361:6;20317:72;:::i;:::-;20399;20467:2;20456:9;20452:18;20443:6;20399:72;:::i;:::-;20518:9;20512:4;20508:20;20503:2;20492:9;20488:18;20481:48;20546:86;20627:4;20618:6;20610;20546:86;:::i;:::-;20538:94;;19979:660;;;;;;;;:::o;20645:148::-;20747:11;20784:3;20769:18;;20645:148;;;;:::o;20823:874::-;20926:3;20963:5;20957:12;20992:36;21018:9;20992:36;:::i;:::-;21044:89;21126:6;21121:3;21044:89;:::i;:::-;21037:96;;21164:1;21153:9;21149:17;21180:1;21175:166;;;;21355:1;21350:341;;;;21142:549;;21175:166;21259:4;21255:9;21244;21240:25;21235:3;21228:38;21321:6;21314:14;21307:22;21299:6;21295:35;21290:3;21286:45;21279:52;;21175:166;;21350:341;21417:38;21449:5;21417:38;:::i;:::-;21477:1;21491:154;21505:6;21502:1;21499:13;21491:154;;;21579:7;21573:14;21569:1;21564:3;21560:11;21553:35;21629:1;21620:7;21616:15;21605:26;;21527:4;21524:1;21520:12;21515:17;;21491:154;;;21674:6;21669:3;21665:16;21658:23;;21357:334;;21142:549;;20930:767;;20823:874;;;;:::o;21703:390::-;21809:3;21837:39;21870:5;21837:39;:::i;:::-;21892:89;21974:6;21969:3;21892:89;:::i;:::-;21885:96;;21990:65;22048:6;22043:3;22036:4;22029:5;22025:16;21990:65;:::i;:::-;22080:6;22075:3;22071:16;22064:23;;21813:280;21703:390;;;;:::o;22099:583::-;22321:3;22343:92;22431:3;22422:6;22343:92;:::i;:::-;22336:99;;22452:95;22543:3;22534:6;22452:95;:::i;:::-;22445:102;;22564:92;22652:3;22643:6;22564:92;:::i;:::-;22557:99;;22673:3;22666:10;;22099:583;;;;;;:::o;22688:102::-;22730:8;22777:5;22774:1;22770:13;22749:34;;22688:102;;;:::o;22796:848::-;22857:5;22864:4;22888:6;22879:15;;22912:5;22903:14;;22926:712;22947:1;22937:8;22934:15;22926:712;;;23042:4;23037:3;23033:14;23027:4;23024:24;23021:50;;;23051:18;;:::i;:::-;23021:50;23101:1;23091:8;23087:16;23084:451;;;23516:4;23509:5;23505:16;23496:25;;23084:451;23566:4;23560;23556:15;23548:23;;23596:32;23619:8;23596:32;:::i;:::-;23584:44;;22926:712;;;22796:848;;;;;;;:::o;23650:1073::-;23704:5;23895:8;23885:40;;23916:1;23907:10;;23918:5;;23885:40;23944:4;23934:36;;23961:1;23952:10;;23963:5;;23934:36;24030:4;24078:1;24073:27;;;;24114:1;24109:191;;;;24023:277;;24073:27;24091:1;24082:10;;24093:5;;;24109:191;24154:3;24144:8;24141:17;24138:43;;;24161:18;;:::i;:::-;24138:43;24210:8;24207:1;24203:16;24194:25;;24245:3;24238:5;24235:14;24232:40;;;24252:18;;:::i;:::-;24232:40;24285:5;;;24023:277;;24409:2;24399:8;24396:16;24390:3;24384:4;24381:13;24377:36;24359:2;24349:8;24346:16;24341:2;24335:4;24332:12;24328:35;24312:111;24309:246;;;24465:8;24459:4;24455:19;24446:28;;24500:3;24493:5;24490:14;24487:40;;;24507:18;;:::i;:::-;24487:40;24540:5;;24309:246;24580:42;24618:3;24608:8;24602:4;24599:1;24580:42;:::i;:::-;24565:57;;;;24654:4;24649:3;24645:14;24638:5;24635:25;24632:51;;;24663:18;;:::i;:::-;24632:51;24712:4;24705:5;24701:16;24692:25;;23650:1073;;;;;;:::o;24729:281::-;24787:5;24811:23;24829:4;24811:23;:::i;:::-;24803:31;;24855:25;24871:8;24855:25;:::i;:::-;24843:37;;24899:104;24936:66;24926:8;24920:4;24899:104;:::i;:::-;24890:113;;24729:281;;;;:::o;25016:180::-;25064:77;25061:1;25054:88;25161:4;25158:1;25151:15;25185:4;25182:1;25175:15;25202:185;25242:1;25259:20;25277:1;25259:20;:::i;:::-;25254:25;;25293:20;25311:1;25293:20;:::i;:::-;25288:25;;25332:1;25322:35;;25337:18;;:::i;:::-;25322:35;25379:1;25376;25372:9;25367:14;;25202:185;;;;:::o;25393:233::-;25432:3;25455:24;25473:5;25455:24;:::i;:::-;25446:33;;25501:66;25494:5;25491:77;25488:103;;25571:18;;:::i;:::-;25488:103;25618:1;25611:5;25607:13;25600:20;;25393:233;;;:::o;25632:176::-;25664:1;25681:20;25699:1;25681:20;:::i;:::-;25676:25;;25715:20;25733:1;25715:20;:::i;:::-;25710:25;;25754:1;25744:35;;25759:18;;:::i;:::-;25744:35;25800:1;25797;25793:9;25788:14;;25632:176;;;;:::o;25814:191::-;25854:3;25873:20;25891:1;25873:20;:::i;:::-;25868:25;;25907:20;25925:1;25907:20;:::i;:::-;25902:25;;25950:1;25947;25943:9;25936:16;;25971:3;25968:1;25965:10;25962:36;;;25978:18;;:::i;:::-;25962:36;25814:191;;;;:::o

Swarm Source

ipfs://99503a4ee3cc2817ed86057b6261ee3d85f9149adb755054aba2ea6853f280b4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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