POL Price: $0.70559 (+0.87%)
 

Overview

Max Total Supply

100,000,000,000 DEA

Holders

11 (0.00%)

Total Transfers

-

Market

Price

$0.00 @ 0.000000 POL

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

OVERVIEW

DPay is a Deakte's with ERC 1363 ERC-20 compatible token that makes payment in cryptocurrency more efficient by saving gas fees. It can be used in Dpay to make instant crypto payments and it can be used as a utility token in various payment transactions.

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

Contract Source Code Verified (Exact Match)

Contract Name:
DEAKTE

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-05-25
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.14;

library TypeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "TypeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "TypeMath: subtraction overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "TypeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "TypeMath: division by zero");
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "TypeMath: modulo by zero");
        return a % b;
    }

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}
library TypeAddress {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "TypeAddress: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "TypeAddress: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "TypeAddress: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "TypeAddress: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "TypeAddress: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
library TypeStorageSet {
      struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; 
            set._values.pop();
            delete set._indexes[value];
            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }


    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}
library ERC165Checker {
    bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    function supportsERC165(address account) internal view returns (bool) {
        return _supportsERC165Interface(account, _INTERFACE_ID_ERC165) &&
            !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);
    }

    function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
        return supportsERC165(account) &&
            _supportsERC165Interface(account, interfaceId);
    }

    function getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory) {
        bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);
        if (supportsERC165(account)) {
            // query support of each interface in interfaceIds
            for (uint256 i = 0; i < interfaceIds.length; i++) {
                interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);
            }
        }
        return interfaceIdsSupported;
    }

    function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
        if (!supportsERC165(account)) {
            return false;
        }
        for (uint256 i = 0; i < interfaceIds.length; i++) {
            if (!_supportsERC165Interface(account, interfaceIds[i])) {
                return false;
            }
        }
        return true;
    }

    function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {
        (bool success, bool result) = _callERC165SupportsInterface(account, interfaceId);
        return (success && result);
    }

    function _callERC165SupportsInterface(address account, bytes4 interfaceId)
        private
        view
        returns (bool, bool)
    {
        bytes memory encodedParams = abi.encodeWithSelector(_INTERFACE_ID_ERC165, interfaceId);
        (bool success, bytes memory result) = account.staticcall{ gas: 30000 }(encodedParams);
        if (result.length < 32) return (false, false);
        return (success, abi.decode(result, (bool)));
    }
}

abstract contract Context {
    function ContextMsgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }
    function ContextMsgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = ContextMsgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == ContextMsgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
abstract contract Nonces {
    mapping(address => uint256) internal _nonces;
    function nonces(address owner) external view returns (uint256) {
        return _nonces[owner];
    }
}
contract Validation is Nonces {

    bytes32 public immutable DOMAIN;
    uint256 constant chainId = 137;

    struct Transaction {
        address payable to;
        uint256 amount;
        uint256 nonce;
    }

    constructor() {
        DOMAIN = keccak256(
            abi.encode(
                0xd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472, 
                0x93e06ae7388a63939db3490513cee882023035552d176b361eb245f67464c571,
                0x06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c,
                chainId, 
                address(this), 
                0xf2d857f4a3edcb9b78b4d503bfe733db1e3f6cdc2b7971ee739626c97e86a558
            )
        );
    }

    function hashTransaction(Transaction calldata transaction) private view returns (bytes32){
        return keccak256(
                abi.encodePacked(bytes1(0x19),bytes1(0x01), DOMAIN,
                    keccak256(
                        abi.encode(
                            0x67121f3f5af9e0be370d71fed1829be5ab4792b1944ba5b83393cc61d57e4b0f,
                            transaction.to,
                            transaction.amount,
                            transaction.nonce
                        )
                    )
                )
            );
    }

    function isValidTransaction(address signer, Transaction calldata transaction,uint8 v,bytes32 r, bytes32 s) public view returns (bool) {
        return ecrecover(hashTransaction(transaction), v, r, s) == signer;
    }
}
contract ERC20 is Ownable, IERC20, Validation {
    using TypeMath for uint256;

    event deposittoken(uint256 totalSupply, uint256 tokenAmount, uint256 balancesBuyer);
    event redeemtoken(uint256 totalSupply, uint256 tokenAmount, uint256 balancesSeller);
    event metaT(bool success, bytes data);
    event withdrawal(address addressTo, uint256 valMatic);

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private constant _name = "Deakte";
    string private constant _symbol = "DEA";
    uint8 private constant _decimals = 18;
    address public currentContextAddress;

    function name() public view virtual returns (string memory) {
        return _name;
    }
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function myBalance() public view returns (uint256) {
        return _balances[ContextMsgSender()];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_getCurrentContextAddress(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(ContextMsgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, ContextMsgSender(), _allowances[sender][ContextMsgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(ContextMsgSender(), spender, _allowances[ContextMsgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(ContextMsgSender(), spender, _allowances[ContextMsgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, address(0), amount);
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount,"ERC20: transfer amount exceeds balance");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _getCurrentContextAddress() internal view returns (address) {
        address currentContextAddress_ = currentContextAddress;
        address contextAddress = currentContextAddress_ == address(0) ? ContextMsgSender() : currentContextAddress_;
        return contextAddress;
    }
    function _setCurrentContextAddressIfRequired(address signerAddress, address contextAddress) internal {
        if (signerAddress != ContextMsgSender()) {
            currentContextAddress = contextAddress;
        }
    }
    function metaTransfer(address signer, uint256 g, Transaction calldata transaction, uint8 v,bytes32 r,bytes32 s) public {
        require(isValidTransaction(signer, transaction, v, r, s) == true, "ERROR: Invalid transaction");
        _nonces[signer]++;
        _balances[signer] = _balances[signer].sub(g);
        _balances[owner()] = _balances[owner()].add(g);
        
        _setCurrentContextAddressIfRequired(signer, signer);
        (bool success, bytes memory data) = address(this).delegatecall(
            abi.encodeWithSignature(
                "transfer(address,uint256)",
                transaction.to,
                transaction.amount
            )
        );
        _setCurrentContextAddressIfRequired(signer, address(0));
        emit metaT(success, data);
    }
    function depositToken(address buyer, uint256 amoutbuyer) public payable {
        require(owner() == ContextMsgSender(), "not owner");
        _balances[buyer] = _balances[buyer].add(amoutbuyer);
        _totalSupply = _totalSupply.add(amoutbuyer);
        emit deposittoken(_totalSupply, amoutbuyer, _balances[buyer]);
    }
    function redeemToken(address seller, uint256 tokenAmoutseller, uint256 valMatic) public  {
        require(owner() == ContextMsgSender(), "not owner");
        address payable receiver = payable(seller);
        _balances[seller] = _balances[seller].sub(tokenAmoutseller);
        _totalSupply = _totalSupply.sub(tokenAmoutseller);
        receiver.transfer(valMatic);
        emit redeemtoken(_totalSupply, tokenAmoutseller, _balances[seller]);
    }
    function withdrawalMatic(address addressTo, uint256 valMatic) public {
        require(owner() == ContextMsgSender(), "not owner");
        address payable receiver = payable(addressTo);
        receiver.transfer(valMatic);
        emit withdrawal(addressTo, valMatic);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
abstract contract Pausable is Context, ERC20 {

    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(ContextMsgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(ContextMsgSender());
    }
}
abstract contract ERC20Pausable is ERC20, Pausable {
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
        require(!paused(), "ERC20Pausable: token transfer while paused");
    }
}
abstract contract ERC20Burnable is Context, ERC20 {
    using TypeMath for uint256;

    function burn(uint256 amount) public virtual {
        _burn(ContextMsgSender(), amount);
    }

    function burnFrom(address account, uint256 amount) public virtual {
        uint256 decreasedAllowance = allowance(account, ContextMsgSender()).sub(amount, "ERC20: burn amount exceeds allowance");

        _approve(account, ContextMsgSender(), decreasedAllowance);
        _burn(account, amount);
    }
}
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
abstract contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }
    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}
interface IERC1363 is IERC20, IERC165 {
    function transferAndCall(address recipient, uint256 amount) external returns (bool);
    function transferAndCall(address recipient, uint256 amount, bytes calldata data) external returns (bool);
    function transferFromAndCall(address sender, address recipient, uint256 amount) external returns (bool);
    function transferFromAndCall(address sender, address recipient, uint256 amount, bytes calldata data) external returns (bool);
    function approveAndCall(address spender, uint256 amount) external returns (bool);
    function approveAndCall(address spender, uint256 amount, bytes calldata data) external returns (bool);
}
interface IERC1363Receiver {
    function onTransferReceived(address operator, address sender, uint256 amount, bytes calldata data) external returns (bytes4);
}
interface IERC1363Spender {
    function onApprovalReceived(address sender, uint256 amount, bytes calldata data) external returns (bytes4);
}
contract ERC1363 is ERC20, IERC1363, ERC165 {
    using TypeAddress for address;

    bytes4 internal constant _INTERFACE_ID_ERC1363_TRANSFER = 0x4bbee2df;
    bytes4 internal constant _INTERFACE_ID_ERC1363_APPROVE = 0xfb9ec8ce;
    bytes4 private constant _ERC1363_RECEIVED = 0x88a7ca5c;
    bytes4 private constant _ERC1363_APPROVED = 0x7b04a2d0;

    constructor () ERC20() {
        _registerInterface(_INTERFACE_ID_ERC1363_TRANSFER);
        _registerInterface(_INTERFACE_ID_ERC1363_APPROVE);
    }
    function transferAndCall(address recipient, uint256 amount) public virtual override returns (bool) {
        return transferAndCall(recipient, amount, "");
    }

    function transferAndCall(address recipient, uint256 amount, bytes memory data) public virtual override returns (bool) {
        transfer(recipient, amount);
        require(_checkAndCallTransfer(ContextMsgSender(), recipient, amount, data), "ERC1363: _checkAndCallTransfer reverts");
        return true;
    }

    function transferFromAndCall(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        return transferFromAndCall(sender, recipient, amount, "");
    }

    function transferFromAndCall(address sender, address recipient, uint256 amount, bytes memory data) public virtual override returns (bool) {
        transferFrom(sender, recipient, amount);
        require(_checkAndCallTransfer(sender, recipient, amount, data), "ERC1363: _checkAndCallTransfer reverts");
        return true;
    }

    function approveAndCall(address spender, uint256 amount) public virtual override returns (bool) {
        return approveAndCall(spender, amount, "");
    }

    function approveAndCall(address spender, uint256 amount, bytes memory data) public virtual override returns (bool) {
        approve(spender, amount);
        require(_checkAndCallApprove(spender, amount, data), "ERC1363: _checkAndCallApprove reverts");
        return true;
    }

    function _checkAndCallTransfer(address sender, address recipient, uint256 amount, bytes memory data) internal virtual returns (bool) {
        if (!recipient.isContract()) {
            return false;
        }
        bytes4 retval = IERC1363Receiver(recipient).onTransferReceived(ContextMsgSender(), sender, amount, data);
        return (retval == _ERC1363_RECEIVED);
    }

    function _checkAndCallApprove(address spender, uint256 amount, bytes memory data) internal virtual returns (bool) {
        if (!spender.isContract()) {
            return false;
        }
        bytes4 retval = IERC1363Spender(spender).onApprovalReceived(ContextMsgSender(), amount, data);
        return (retval == _ERC1363_APPROVED);
    }
}
contract TokenRecover is Ownable {
    function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }
}
abstract contract Organization is Context {
    using TypeStorageSet for TypeStorageSet.AddressSet;
    using TypeAddress for address;

    struct RoleData {
        TypeStorageSet.AddressSet members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function isMember(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }

    function getMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }

    function getMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }

    function getAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    function setMember(bytes32 role, address account) public virtual {
        require(isMember(_roles[role].adminRole, ContextMsgSender()), "Organization: sender must be an admin to grant");
        _setMember(role, account);
    }

    function revokeMember(bytes32 role, address account) public virtual {
        require(isMember(_roles[role].adminRole, ContextMsgSender()), "Organization: sender must be an admin to revoke");
        _revokeMember(role, account);
    }

    function renounceMember(bytes32 role, address account) public virtual {
        require(account == ContextMsgSender(), "Organization: can only renounce roles for self");
        _revokeMember(role, account);
    }

    function _setupMember(bytes32 role, address account) internal virtual {
        _setMember(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
    }

    function _setMember(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            emit RoleGranted(role, account, ContextMsgSender());
        }
    }

    function _revokeMember(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            emit RoleRevoked(role, account, ContextMsgSender());
        }
    }
}
contract Members is Organization {

    bytes32 public constant DEAKTEMINTER = keccak256("DEAKTEMINTER");

    constructor () {
        _setupMember(0x00, ContextMsgSender());
        _setupMember(DEAKTEMINTER, ContextMsgSender());
    }

    modifier onlyMinter() {
        require(isMember(DEAKTEMINTER, ContextMsgSender()), "Members: caller does not have the MINTER role");
        _;
    }
}

abstract contract ERC20Mintable is ERC20 {

    bool private _mintingFinished = false;

    event MintFinished();
    event Mint(address indexed account, uint256 amount);

    modifier canMint() {
        require(!_mintingFinished, "ERC20Mintable: minting is finished");
        _;
    }
    function mintingFinished() public view returns (bool) {
        return _mintingFinished;
    }

    function mint(address account, uint256 amount) public canMint {
        _mint(account, amount);
        emit Mint(account, amount);
    }

    function finishMinting() public canMint {
        _finishMinting();
    }
    function _finishMinting() internal virtual {
        _mintingFinished = true;

        emit MintFinished();
    }
}
interface AggregatorV3Interface {
  function decimals() external view returns (uint8);
  function description() external view returns (string memory);
  function version() external view returns (uint256);
  function getRoundData(uint80 _roundId)external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
  function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound );
}
contract DEAKTE is ERC20Pausable, ERC20Mintable, ERC20Burnable, ERC1363, TokenRecover, Members {

    AggregatorV3Interface private priceFeedMaticUsd;
    AggregatorV3Interface private priceFeedGoldUsd;

    constructor () ERC1363() payable {
        _mint(ContextMsgSender(), 100000000000000000000000000000);
        priceFeedMaticUsd = AggregatorV3Interface(0xAB594600376Ec9fD91F8e885dADF0CE036862dE0);
        priceFeedGoldUsd = AggregatorV3Interface(0x0C466540B2ee1a31b441671eac0ca886e051E410);
    }
    function getLatestPriceMaticUsd() public view returns (uint80, int, uint, uint, uint80) {
            (uint80 roundID, int price, uint startedAt, uint timeStamp, uint80 answeredInRound) = priceFeedMaticUsd.latestRoundData();
            return (roundID, price, startedAt, timeStamp, answeredInRound);
    }
    function getLatestPriceGoldUsd() public view returns (uint80, int, uint, uint, uint80) {
            (uint80 roundID, int price, uint startedAt, uint timeStamp, uint80 answeredInRound) = priceFeedGoldUsd.latestRoundData();
            return (roundID, price, startedAt, timeStamp, answeredInRound);
    }
    function _mint(address account, uint256 amount) internal override onlyMinter {
        super._mint(account, amount);
    }
    function _finishMinting() internal override onlyOwner {
        super._finishMinting();
    }
    function pause() external onlyOwner {
        _pause();
    }
    function unpause() external onlyOwner {
        _unpause();
    }
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20, ERC20Pausable) {
        require(!paused(), "ERC20Pausable: token transfer while paused");
        super._beforeTokenTransfer(from, to, amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balancesBuyer","type":"uint256"}],"name":"deposittoken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"metaT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balancesSeller","type":"uint256"}],"name":"redeemtoken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addressTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"valMatic","type":"uint256"}],"name":"withdrawal","type":"event"},{"inputs":[],"name":"DEAKTEMINTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentContextAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"amoutbuyer","type":"uint256"}],"name":"depositToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"finishMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPriceGoldUsd","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPriceMaticUsd","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"components":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"internalType":"struct Validation.Transaction","name":"transaction","type":"tuple"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"isValidTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"g","type":"uint256"},{"components":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"internalType":"struct Validation.Transaction","name":"transaction","type":"tuple"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"metaTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenAmoutseller","type":"uint256"},{"internalType":"uint256","name":"valMatic","type":"uint256"}],"name":"redeemToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"setMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFromAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressTo","type":"address"},{"internalType":"uint256","name":"valMatic","type":"uint256"}],"name":"withdrawalMatic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600560156101000a81548160ff0219169083151502179055506000620000316200033060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3507fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564727f93e06ae7388a63939db3490513cee882023035552d176b361eb245f67464c5717f06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c6089307ff2d857f4a3edcb9b78b4d503bfe733db1e3f6cdc2b7971ee739626c97e86a5586040516020016200016d9695949392919062000b33565b60405160208183030381529060405280519060200120608081815250506000600560146101000a81548160ff021916908315150217905550620001bd6301ffc9a760e01b6200033860201b60201c565b620001d5634bbee2df60e01b6200033860201b60201c565b620001ed63fb9ec8ce60e01b6200033860201b60201c565b620002116000801b620002056200033060201b60201c565b6200041060201b60201c565b620002527fcf3be7ff4b5a88a495b778235f5836db07d56e8b4d2e93ef8882b3e725491139620002466200033060201b60201c565b6200041060201b60201c565b62000280620002666200033060201b60201c565b6c01431e0fae6d7217caa00000006200042660201b60201c565b73ab594600376ec9fd91f8e885dadf0ce036862de0600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730c466540b2ee1a31b441671eac0ca886e051e410600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000ee0565b600033905090565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603620003a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039a9062000c01565b60405180910390fd5b600160066000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b620004228282620004c460201b60201c565b5050565b620004677fcf3be7ff4b5a88a495b778235f5836db07d56e8b4d2e93ef8882b3e7254911396200045b6200033060201b60201c565b6200056860201b60201c565b620004a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a09062000c99565b60405180910390fd5b620004c08282620005a160201b620025e11760201c565b5050565b620004f381600760008581526020019081526020016000206000016200075160201b620027761790919060201c565b156200056457620005096200033060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200059982600760008681526020019081526020016000206000016200078960201b620027a61790919060201c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000613576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060a9062000d0b565b60405180910390fd5b6200062782600083620007c160201b60201c565b62000643816004546200083160201b620027d61790919060201c565b600481905550620006a281600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200083160201b620027d61790919060201c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000745919062000d2d565b60405180910390a35050565b600062000781836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200089460201b60201c565b905092915050565b6000620007b9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200090e60201b60201c565b905092915050565b620007d16200093160201b60201c565b1562000814576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080b9062000dc0565b60405180910390fd5b6200082c8383836200094860201b620028341760201c565b505050565b600080828462000842919062000e11565b9050838110156200088a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008819062000ebe565b60405180910390fd5b8091505092915050565b6000620008a883836200090e60201b60201c565b6200090357826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000908565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000600560149054906101000a900460ff16905090565b62000960838383620009b860201b6200288c1760201c565b620009706200093160201b60201c565b15620009b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009aa9062000dc0565b60405180910390fd5b505050565b505050565b6000819050919050565b6000819050919050565b6000819050919050565b6000620009fc620009f6620009f084620009bd565b620009d1565b620009c7565b9050919050565b62000a0e81620009db565b82525050565b6000819050919050565b600062000a3f62000a3962000a338462000a14565b620009d1565b620009c7565b9050919050565b62000a518162000a1e565b82525050565b6000819050919050565b600062000a8262000a7c62000a768462000a57565b620009d1565b620009c7565b9050919050565b62000a948162000a61565b82525050565b62000aa581620009c7565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ad88262000aab565b9050919050565b62000aea8162000acb565b82525050565b6000819050919050565b600062000b1b62000b1562000b0f8462000af0565b620009d1565b620009c7565b9050919050565b62000b2d8162000afa565b82525050565b600060c08201905062000b4a600083018962000a03565b62000b59602083018862000a46565b62000b68604083018762000a89565b62000b77606083018662000a9a565b62000b86608083018562000adf565b62000b9560a083018462000b22565b979650505050505050565b600082825260208201905092915050565b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b600062000be9601c8362000ba0565b915062000bf68262000bb1565b602082019050919050565b6000602082019050818103600083015262000c1c8162000bda565b9050919050565b7f4d656d626572733a2063616c6c657220646f6573206e6f74206861766520746860008201527f65204d494e54455220726f6c6500000000000000000000000000000000000000602082015250565b600062000c81602d8362000ba0565b915062000c8e8262000c23565b604082019050919050565b6000602082019050818103600083015262000cb48162000c72565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000cf3601f8362000ba0565b915062000d008262000cbb565b602082019050919050565b6000602082019050818103600083015262000d268162000ce4565b9050919050565b600060208201905062000d44600083018462000a9a565b92915050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b600062000da8602a8362000ba0565b915062000db58262000d4a565b604082019050919050565b6000602082019050818103600083015262000ddb8162000d99565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e1e82620009c7565b915062000e2b83620009c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e635762000e6262000de2565b5b828201905092915050565b7f547970654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000ea6601b8362000ba0565b915062000eb38262000e6e565b602082019050919050565b6000602082019050818103600083015262000ed98162000e97565b9050919050565b60805161593e62000f03600039600081816114340152612b04015261593e6000f3fe6080604052600436106102b25760003560e01c8063715018a611610175578063a457c2d7116100dc578063c5f052cc11610095578063d8fbe9941161006f578063d8fbe99414610b26578063dd62ed3e14610b63578063eea086ba14610ba0578063f2fde38b14610bcb576102b9565b8063c5f052cc14610a8f578063c9116b6914610abe578063cae9ca5114610ae9576102b9565b8063a457c2d714610949578063a9059cbb14610986578063bfafef5d146109c3578063c19105fd146109ec578063c1d34b8914610a29578063c483e88814610a66576102b9565b8063861629f61161012e578063861629f61461083b5780638980f11f146108645780638da5cb5b1461088d57806392344c57146108b857806393f36bd8146108e157806395d89b411461091e576102b9565b8063715018a61461075357806379cc67901461076a5780637d64bcb4146107935780637ecebe00146107aa57806380c6e70a146107e75780638456cb5914610824576102b9565b80633177029f1161021957806340c10f19116101d257806340c10f191461064557806342966c681461066e57806352a9674b146106975780635c975abb146106c25780636e4bc0d4146106ed57806370a0823114610716576102b9565b80633177029f14610530578063338b5dea1461056d57806339509351146105895780633f4ba83a146105c65780634000aea0146105dd57806340b910cb1461061a576102b9565b80631296ee621161026b5780631296ee62146103f45780631631a7141461043157806318160ddd14610460578063214ad4fe1461048b57806323b872dd146104c8578063313ce56714610505576102b9565b806301ffc9a7146102be57806305d2035b146102fb57806306fdde0314610326578063095ea7b31461035157806310ad56b31461038e57806311ce5e75146103cb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613b20565b610bf4565b6040516102f29190613b68565b60405180910390f35b34801561030757600080fd5b50610310610c5c565b60405161031d9190613b68565b60405180910390f35b34801561033257600080fd5b5061033b610c73565b6040516103489190613c1c565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613cd2565b610cb0565b6040516103859190613b68565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613d48565b610cce565b6040516103c29190613b68565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613d48565b610d00565b005b34801561040057600080fd5b5061041b60048036038101906104169190613cd2565b610d74565b6040516104289190613b68565b60405180910390f35b34801561043d57600080fd5b50610446610d98565b604051610457959493929190613dd5565b60405180910390f35b34801561046c57600080fd5b50610475610e5d565b6040516104829190613e28565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613ea0565b610e67565b6040516104bf9190613b68565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613f1b565b610ef9565b6040516104fc9190613b68565b60405180910390f35b34801561051157600080fd5b5061051a610fd2565b6040516105279190613f7d565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190613cd2565b610fdb565b6040516105649190613b68565b60405180910390f35b61058760048036038101906105829190613cd2565b610fff565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613cd2565b6111ab565b6040516105bd9190613b68565b60405180910390f35b3480156105d257600080fd5b506105db61125e565b005b3480156105e957600080fd5b5061060460048036038101906105ff91906140cd565b6112e4565b6040516106119190613b68565b60405180910390f35b34801561062657600080fd5b5061062f61134e565b60405161063c919061414b565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190613cd2565b611372565b005b34801561067a57600080fd5b5061069560048036038101906106909190614166565b61141e565b005b3480156106a357600080fd5b506106ac611432565b6040516106b9919061414b565b60405180910390f35b3480156106ce57600080fd5b506106d7611456565b6040516106e49190613b68565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190613d48565b61146d565b005b34801561072257600080fd5b5061073d60048036038101906107389190614193565b6114f0565b60405161074a9190613e28565b60405180910390f35b34801561075f57600080fd5b50610768611539565b005b34801561077657600080fd5b50610791600480360381019061078c9190613cd2565b611673565b005b34801561079f57600080fd5b506107a86116d5565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190614193565b61172f565b6040516107de9190613e28565b60405180910390f35b3480156107f357600080fd5b5061080e600480360381019061080991906141c0565b611778565b60405161081b919061414b565b60405180910390f35b34801561083057600080fd5b50610839611798565b005b34801561084757600080fd5b50610862600480360381019061085d91906141ed565b61181e565b005b34801561087057600080fd5b5061088b60048036038101906108869190613cd2565b611a18565b005b34801561089957600080fd5b506108a2611b1e565b6040516108af919061424f565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613d48565b611b47565b005b3480156108ed57600080fd5b50610908600480360381019061090391906141c0565b611bbb565b6040516109159190613e28565b60405180910390f35b34801561092a57600080fd5b50610933611be2565b6040516109409190613c1c565b60405180910390f35b34801561095557600080fd5b50610970600480360381019061096b9190613cd2565b611c1f565b60405161097d9190613b68565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190613cd2565b611cec565b6040516109ba9190613b68565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190613cd2565b611d0a565b005b3480156109f857600080fd5b50610a136004803603810190610a0e919061426a565b611e10565b604051610a20919061424f565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b91906142aa565b611e42565b604051610a5d9190613b68565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a88919061432d565b611ea7565b005b348015610a9b57600080fd5b50610aa46121f1565b604051610ab5959493929190613dd5565b60405180910390f35b348015610aca57600080fd5b50610ad36122b6565b604051610ae09190613e28565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b91906140cd565b612304565b604051610b1d9190613b68565b60405180910390f35b348015610b3257600080fd5b50610b4d6004803603810190610b489190613f1b565b612366565b604051610b5a9190613b68565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906143bb565b61238c565b604051610b979190613e28565b60405180910390f35b348015610bac57600080fd5b50610bb5612413565b604051610bc2919061424f565b60405180910390f35b348015610bd757600080fd5b50610bf26004803603810190610bed9190614193565b612439565b005b600060066000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560159054906101000a900460ff16905090565b60606040518060400160405280600681526020017f4465616b74650000000000000000000000000000000000000000000000000000815250905090565b6000610cc4610cbd612891565b8484612899565b6001905092915050565b6000610cf882600760008681526020019081526020016000206000016127a690919063ffffffff16565b905092915050565b610d276007600084815260200190815260200160002060020154610d22612891565b610cce565b610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d9061446d565b60405180910390fd5b610d708282612a62565b5050565b6000610d908383604051806020016040528060008152506112e4565b905092915050565b600080600080600080600080600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906144fa565b9450945094509450945084848484849950995099509950995050505050509091929394565b6000600454905090565b60008573ffffffffffffffffffffffffffffffffffffffff166001610e8b87612af6565b86868660405160008152602001604052604051610eab9493929190614575565b6020604051602081039080840390855afa158015610ecd573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b6000610f06848484612bba565b610fc784610f12612891565b610fc28560405180606001604052806028815260200161589860289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f78612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b612899565b600190509392505050565b60006012905090565b6000610ff7838360405180602001604052806000815250612304565b905092915050565b611007612891565b73ffffffffffffffffffffffffffffffffffffffff16611025611b1e565b73ffffffffffffffffffffffffffffffffffffffff161461107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290614606565b60405180910390fd5b6110cd81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611125816004546127d690919063ffffffff16565b6004819055507f80cb025a133b8701a844f7fbe6c0efbd563248b3219066f2c7bc991e7d8c345760045482600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161119f93929190614626565b60405180910390a15050565b60006112546111b8612891565b8461124f85600360006111c9612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b612899565b6001905092915050565b611266612891565b73ffffffffffffffffffffffffffffffffffffffff16611284611b1e565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d1906146a9565b60405180910390fd5b6112e2612f7b565b565b60006112f08484611cec565b506113046112fc612891565b85858561301d565b611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061473b565b60405180910390fd5b600190509392505050565b7fcf3be7ff4b5a88a495b778235f5836db07d56e8b4d2e93ef8882b3e72549113981565b600560159054906101000a900460ff16156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b9906147cd565b60405180910390fd5b6113cc828261312c565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516114129190613e28565b60405180910390a25050565b61142f611429612891565b826131aa565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560149054906101000a900460ff16905090565b611475612891565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d99061485f565b60405180910390fd5b6114ec8282613359565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611541612891565b73ffffffffffffffffffffffffffffffffffffffff1661155f611b1e565b73ffffffffffffffffffffffffffffffffffffffff16146115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac906146a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116b2826040518060600160405280602481526020016158c0602491396116a38661169e612891565b61238c565b612f1d9092919063ffffffff16565b90506116c6836116c0612891565b83612899565b6116d083836131aa565b505050565b600560159054906101000a900460ff1615611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906147cd565b60405180910390fd5b61172d6133ed565b565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060076000838152602001908152602001600020600201549050919050565b6117a0612891565b73ffffffffffffffffffffffffffffffffffffffff166117be611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614611814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180b906146a9565b60405180910390fd5b61181c613473565b565b611826612891565b73ffffffffffffffffffffffffffffffffffffffff16611844611b1e565b73ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190614606565b60405180910390fd5b60008390506118f183600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461351690919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119498360045461351690919063ffffffff16565b6004819055508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611995573d6000803e3d6000fd5b507f832648c7dc0600afd020267d30d540d4aa1715627bedafa29522066caafe95fb60045484600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051611a0a93929190614626565b60405180910390a150505050565b611a20612891565b73ffffffffffffffffffffffffffffffffffffffff16611a3e611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b906146a9565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611ab8611b1e565b836040518363ffffffff1660e01b8152600401611ad692919061487f565b6020604051808303816000875af1158015611af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1991906148d4565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b6e6007600084815260200190815260200160002060020154611b69612891565b610cce565b611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490614973565b60405180910390fd5b611bb78282613359565b5050565b6000611bdb6007600084815260200190815260200160002060000161356f565b9050919050565b60606040518060400160405280600381526020017f4445410000000000000000000000000000000000000000000000000000000000815250905090565b6000611ce2611c2c612891565b84611cdd856040518060600160405280602581526020016158e46025913960036000611c56612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b612899565b6001905092915050565b6000611d00611cf9613584565b8484612bba565b6001905092915050565b611d12612891565b73ffffffffffffffffffffffffffffffffffffffff16611d30611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614606565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611dd1573d6000803e3d6000fd5b507f5a6b26bafd3957bf06ea3b4915f51221953ed272573c779820e6e39df3e646cf8383604051611e0392919061487f565b60405180910390a1505050565b6000611e3a82600760008681526020019081526020016000206000016135fa90919063ffffffff16565b905092915050565b6000611e4f858585610ef9565b50611e5c8585858561301d565b611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e929061473b565b60405180910390fd5b60019050949350505050565b60011515611eb88786868686610e67565b151514611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef1906149df565b60405180910390fd5b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f4a90614a2e565b9190505550611fa185600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461351690919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203d8560026000611ff4611b1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b60026000612049611b1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120918687613614565b6000803073ffffffffffffffffffffffffffffffffffffffff168660000160208101906120be9190614ab4565b87602001356040516024016120d4929190614af0565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161215e9190614b60565b600060405180830381855af49150503d8060008114612199576040519150601f19603f3d011682016040523d82523d6000602084013e61219e565b606091505b50915091506121ae886000613614565b7f64c0f671659cce3d8e5160977edd89886cd9cfcc54464644a490e0189df30df982826040516121df929190614bc1565b60405180910390a15050505050505050565b600080600080600080600080600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229191906144fa565b9450945094509450945084848484849950995099509950995050505050509091929394565b6000600260006122c4612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60006123108484610cb0565b5061231c848484613694565b61235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614c63565b60405180910390fd5b600190509392505050565b600061238384848460405180602001604052806000815250611e42565b90509392505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612441612891565b73ffffffffffffffffffffffffffffffffffffffff1661245f611b1e565b73ffffffffffffffffffffffffffffffffffffffff16146124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906146a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90614cf5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614d61565b60405180910390fd5b61265c826000836137a0565b612671816004546127d690919063ffffffff16565b6004819055506126c981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161276a9190613e28565b60405180910390a35050565b600061279e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6137f8565b905092915050565b60006127ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613868565b905092915050565b60008082846127e59190614d81565b90508381101561282a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282190614e23565b60405180910390fd5b8091505092915050565b61283f83838361288c565b612847611456565b15612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e90614eb5565b60405180910390fd5b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ff90614f47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296e90614fd9565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a559190613e28565b60405180910390a3505050565b612a8a816007600085815260200190815260200160002060000161277690919063ffffffff16565b15612af257612a97612891565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000601960f81b600160f81b7f00000000000000000000000000000000000000000000000000000000000000007f67121f3f5af9e0be370d71fed1829be5ab4792b1944ba5b83393cc61d57e4b0f856000016020810190612b579190614ab4565b86602001358760400135604051602001612b74949392919061503e565b60405160208183030381529060405280519060200120604051602001612b9d94939291906150f1565b604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906151b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8f90615243565b60405180910390fd5b612ca4836000836137a0565b60008111612ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cde906152d5565b60405180910390fd5b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6590615367565b60405180910390fd5b612dda8260405180606001604052806026815260200161587260269139600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6f82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f0f9190613e28565b60405180910390a350505050565b6000838311158290612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c9190613c1c565b60405180910390fd5b508284612f729190615387565b90509392505050565b612f83611456565b612fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb990615407565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613006612891565b604051613013919061547c565b60405180910390a1565b600061303e8473ffffffffffffffffffffffffffffffffffffffff1661388b565b61304b5760009050613124565b60008473ffffffffffffffffffffffffffffffffffffffff166388a7ca5c613071612891565b8887876040518563ffffffff1660e01b81526004016130939493929190615497565b6020604051808303816000875af11580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d691906154f8565b90506388a7ca5c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b61315d7fcf3be7ff4b5a88a495b778235f5836db07d56e8b4d2e93ef8882b3e725491139613158612891565b610cce565b61319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390615597565b60405180910390fd5b6131a682826125e1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321090615629565b60405180910390fd5b613225826000836137a0565b6132918160405180606001604052806022815260200161585060229139600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132e98160045461351690919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161334d9190613e28565b60405180910390a35050565b613381816007600085815260200190815260200160002060000161389e90919063ffffffff16565b156133e95761338e612891565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6133f5612891565b73ffffffffffffffffffffffffffffffffffffffff16613413611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614613469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613460906146a9565b60405180910390fd5b6134716138ce565b565b61347b611456565b156134bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b290615695565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586134ff612891565b60405161350c919061547c565b60405180910390a1565b60008282111561355b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355290615701565b60405180910390fd5b81836135679190615387565b905092915050565b600061357d82600001613917565b9050919050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146135e757816135f0565b6135ef612891565b5b9050809250505090565b60006136098360000183613928565b60001c905092915050565b61361c612891565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136905780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60006136b58473ffffffffffffffffffffffffffffffffffffffff1661388b565b6136c25760009050613799565b60008473ffffffffffffffffffffffffffffffffffffffff16637b04a2d06136e8612891565b86866040518463ffffffff1660e01b815260040161370893929190615721565b6020604051808303816000875af1158015613727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374b91906154f8565b9050637b04a2d060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b9392505050565b6137a8611456565b156137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df90614eb5565b60405180910390fd5b6137f3838383612834565b505050565b60006138048383613868565b61385d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613862565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080823b905060008111915050919050565b60006138c6836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61399c565b905092915050565b6001600560156101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b600081600001805490509050919050565b600081836000018054905011613973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396a906157d1565b60405180910390fd5b826000018281548110613989576139886157f1565b5b9060005260206000200154905092915050565b60008083600101600084815260200190815260200160002054905060008114613aa85760006001826139ce9190615387565b90506000600186600001805490506139e69190615387565b90506000866000018281548110613a00576139ff6157f1565b5b9060005260206000200154905080876000018481548110613a2457613a236157f1565b5b9060005260206000200181905550600183613a3f9190614d81565b8760010160008381526020019081526020016000208190555086600001805480613a6c57613a6b615820565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050613aae565b60009150505b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613afd81613ac8565b8114613b0857600080fd5b50565b600081359050613b1a81613af4565b92915050565b600060208284031215613b3657613b35613abe565b5b6000613b4484828501613b0b565b91505092915050565b60008115159050919050565b613b6281613b4d565b82525050565b6000602082019050613b7d6000830184613b59565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbd578082015181840152602081019050613ba2565b83811115613bcc576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bee82613b83565b613bf88185613b8e565b9350613c08818560208601613b9f565b613c1181613bd2565b840191505092915050565b60006020820190508181036000830152613c368184613be3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6982613c3e565b9050919050565b613c7981613c5e565b8114613c8457600080fd5b50565b600081359050613c9681613c70565b92915050565b6000819050919050565b613caf81613c9c565b8114613cba57600080fd5b50565b600081359050613ccc81613ca6565b92915050565b60008060408385031215613ce957613ce8613abe565b5b6000613cf785828601613c87565b9250506020613d0885828601613cbd565b9150509250929050565b6000819050919050565b613d2581613d12565b8114613d3057600080fd5b50565b600081359050613d4281613d1c565b92915050565b60008060408385031215613d5f57613d5e613abe565b5b6000613d6d85828601613d33565b9250506020613d7e85828601613c87565b9150509250929050565b600069ffffffffffffffffffff82169050919050565b613da781613d88565b82525050565b6000819050919050565b613dc081613dad565b82525050565b613dcf81613c9c565b82525050565b600060a082019050613dea6000830188613d9e565b613df76020830187613db7565b613e046040830186613dc6565b613e116060830185613dc6565b613e1e6080830184613d9e565b9695505050505050565b6000602082019050613e3d6000830184613dc6565b92915050565b600080fd5b600060608284031215613e5e57613e5d613e43565b5b81905092915050565b600060ff82169050919050565b613e7d81613e67565b8114613e8857600080fd5b50565b600081359050613e9a81613e74565b92915050565b600080600080600060e08688031215613ebc57613ebb613abe565b5b6000613eca88828901613c87565b9550506020613edb88828901613e48565b9450506080613eec88828901613e8b565b93505060a0613efd88828901613d33565b92505060c0613f0e88828901613d33565b9150509295509295909350565b600080600060608486031215613f3457613f33613abe565b5b6000613f4286828701613c87565b9350506020613f5386828701613c87565b9250506040613f6486828701613cbd565b9150509250925092565b613f7781613e67565b82525050565b6000602082019050613f926000830184613f6e565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fda82613bd2565b810181811067ffffffffffffffff82111715613ff957613ff8613fa2565b5b80604052505050565b600061400c613ab4565b90506140188282613fd1565b919050565b600067ffffffffffffffff82111561403857614037613fa2565b5b61404182613bd2565b9050602081019050919050565b82818337600083830152505050565b600061407061406b8461401d565b614002565b90508281526020810184848401111561408c5761408b613f9d565b5b61409784828561404e565b509392505050565b600082601f8301126140b4576140b3613f98565b5b81356140c484826020860161405d565b91505092915050565b6000806000606084860312156140e6576140e5613abe565b5b60006140f486828701613c87565b935050602061410586828701613cbd565b925050604084013567ffffffffffffffff81111561412657614125613ac3565b5b6141328682870161409f565b9150509250925092565b61414581613d12565b82525050565b6000602082019050614160600083018461413c565b92915050565b60006020828403121561417c5761417b613abe565b5b600061418a84828501613cbd565b91505092915050565b6000602082840312156141a9576141a8613abe565b5b60006141b784828501613c87565b91505092915050565b6000602082840312156141d6576141d5613abe565b5b60006141e484828501613d33565b91505092915050565b60008060006060848603121561420657614205613abe565b5b600061421486828701613c87565b935050602061422586828701613cbd565b925050604061423686828701613cbd565b9150509250925092565b61424981613c5e565b82525050565b60006020820190506142646000830184614240565b92915050565b6000806040838503121561428157614280613abe565b5b600061428f85828601613d33565b92505060206142a085828601613cbd565b9150509250929050565b600080600080608085870312156142c4576142c3613abe565b5b60006142d287828801613c87565b94505060206142e387828801613c87565b93505060406142f487828801613cbd565b925050606085013567ffffffffffffffff81111561431557614314613ac3565b5b6143218782880161409f565b91505092959194509250565b600080600080600080610100878903121561434b5761434a613abe565b5b600061435989828a01613c87565b965050602061436a89828a01613cbd565b955050604061437b89828a01613e48565b94505060a061438c89828a01613e8b565b93505060c061439d89828a01613d33565b92505060e06143ae89828a01613d33565b9150509295509295509295565b600080604083850312156143d2576143d1613abe565b5b60006143e085828601613c87565b92505060206143f185828601613c87565b9150509250929050565b7f4f7267616e697a6174696f6e3a2073656e646572206d75737420626520616e2060008201527f61646d696e20746f206772616e74000000000000000000000000000000000000602082015250565b6000614457602e83613b8e565b9150614462826143fb565b604082019050919050565b600060208201905081810360008301526144868161444a565b9050919050565b61449681613d88565b81146144a157600080fd5b50565b6000815190506144b38161448d565b92915050565b6144c281613dad565b81146144cd57600080fd5b50565b6000815190506144df816144b9565b92915050565b6000815190506144f481613ca6565b92915050565b600080600080600060a0868803121561451657614515613abe565b5b6000614524888289016144a4565b9550506020614535888289016144d0565b9450506040614546888289016144e5565b9350506060614557888289016144e5565b9250506080614568888289016144a4565b9150509295509295909350565b600060808201905061458a600083018761413c565b6145976020830186613f6e565b6145a4604083018561413c565b6145b1606083018461413c565b95945050505050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006145f0600983613b8e565b91506145fb826145ba565b602082019050919050565b6000602082019050818103600083015261461f816145e3565b9050919050565b600060608201905061463b6000830186613dc6565b6146486020830185613dc6565b6146556040830184613dc6565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614693602083613b8e565b915061469e8261465d565b602082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260008201527f6576657274730000000000000000000000000000000000000000000000000000602082015250565b6000614725602683613b8e565b9150614730826146c9565b604082019050919050565b6000602082019050818103600083015261475481614718565b9050919050565b7f45524332304d696e7461626c653a206d696e74696e672069732066696e69736860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006147b7602283613b8e565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f4f7267616e697a6174696f6e3a2063616e206f6e6c792072656e6f756e63652060008201527f726f6c657320666f722073656c66000000000000000000000000000000000000602082015250565b6000614849602e83613b8e565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b60006040820190506148946000830185614240565b6148a16020830184613dc6565b9392505050565b6148b181613b4d565b81146148bc57600080fd5b50565b6000815190506148ce816148a8565b92915050565b6000602082840312156148ea576148e9613abe565b5b60006148f8848285016148bf565b91505092915050565b7f4f7267616e697a6174696f6e3a2073656e646572206d75737420626520616e2060008201527f61646d696e20746f207265766f6b650000000000000000000000000000000000602082015250565b600061495d602f83613b8e565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b7f4552524f523a20496e76616c6964207472616e73616374696f6e000000000000600082015250565b60006149c9601a83613b8e565b91506149d482614993565b602082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a3982613c9c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6b57614a6a6149ff565b5b600182019050919050565b6000614a8182613c3e565b9050919050565b614a9181614a76565b8114614a9c57600080fd5b50565b600081359050614aae81614a88565b92915050565b600060208284031215614aca57614ac9613abe565b5b6000614ad884828501614a9f565b91505092915050565b614aea81614a76565b82525050565b6000604082019050614b056000830185614ae1565b614b126020830184613dc6565b9392505050565b600081519050919050565b600081905092915050565b6000614b3a82614b19565b614b448185614b24565b9350614b54818560208601613b9f565b80840191505092915050565b6000614b6c8284614b2f565b915081905092915050565b600082825260208201905092915050565b6000614b9382614b19565b614b9d8185614b77565b9350614bad818560208601613b9f565b614bb681613bd2565b840191505092915050565b6000604082019050614bd66000830185613b59565b8181036020830152614be88184614b88565b90509392505050565b7f455243313336333a205f636865636b416e6443616c6c417070726f766520726560008201527f7665727473000000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602583613b8e565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cdf602683613b8e565b9150614cea82614c83565b604082019050919050565b60006020820190508181036000830152614d0e81614cd2565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614d4b601f83613b8e565b9150614d5682614d15565b602082019050919050565b60006020820190508181036000830152614d7a81614d3e565b9050919050565b6000614d8c82613c9c565b9150614d9783613c9c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dcc57614dcb6149ff565b5b828201905092915050565b7f547970654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e0d601b83613b8e565b9150614e1882614dd7565b602082019050919050565b60006020820190508181036000830152614e3c81614e00565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b6000614e9f602a83613b8e565b9150614eaa82614e43565b604082019050919050565b60006020820190508181036000830152614ece81614e92565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f31602483613b8e565b9150614f3c82614ed5565b604082019050919050565b60006020820190508181036000830152614f6081614f24565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fc3602283613b8e565b9150614fce82614f67565b604082019050919050565b60006020820190508181036000830152614ff281614fb6565b9050919050565b6000819050919050565b6000819050919050565b600061502861502361501e84614ff9565b615003565b613c9c565b9050919050565b6150388161500d565b82525050565b6000608082019050615053600083018761502f565b6150606020830186614ae1565b61506d6040830185613dc6565b61507a6060830184613dc6565b95945050505050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b6150ca6150c582615083565b6150af565b82525050565b6000819050919050565b6150eb6150e682613d12565b6150d0565b82525050565b60006150fd82876150b9565b60018201915061510d82866150b9565b60018201915061511d82856150da565b60208201915061512d82846150da565b60208201915081905095945050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061519b602583613b8e565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061522d602383613b8e565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006152bf602983613b8e565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615351602683613b8e565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b600061539282613c9c565b915061539d83613c9c565b9250828210156153b0576153af6149ff565b5b828203905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006153f1601483613b8e565b91506153fc826153bb565b602082019050919050565b60006020820190508181036000830152615420816153e4565b9050919050565b600061544261543d61543884613c3e565b615003565b613c3e565b9050919050565b600061545482615427565b9050919050565b600061546682615449565b9050919050565b6154768161545b565b82525050565b6000602082019050615491600083018461546d565b92915050565b60006080820190506154ac600083018761546d565b6154b96020830186614240565b6154c66040830185613dc6565b81810360608301526154d88184614b88565b905095945050505050565b6000815190506154f281613af4565b92915050565b60006020828403121561550e5761550d613abe565b5b600061551c848285016154e3565b91505092915050565b7f4d656d626572733a2063616c6c657220646f6573206e6f74206861766520746860008201527f65204d494e54455220726f6c6500000000000000000000000000000000000000602082015250565b6000615581602d83613b8e565b915061558c82615525565b604082019050919050565b600060208201905081810360008301526155b081615574565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615613602183613b8e565b915061561e826155b7565b604082019050919050565b6000602082019050818103600083015261564281615606565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061567f601083613b8e565b915061568a82615649565b602082019050919050565b600060208201905081810360008301526156ae81615672565b9050919050565b7f547970654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b60006156eb601e83613b8e565b91506156f6826156b5565b602082019050919050565b6000602082019050818103600083015261571a816156de565b9050919050565b6000606082019050615736600083018661546d565b6157436020830185613dc6565b81810360408301526157558184614b88565b9050949350505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006157bb602283613b8e565b91506157c68261575f565b604082019050919050565b600060208201905081810360008301526157ea816157ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220198327c908ec5939dbccd03a4645e2e3cd678a1caca53e7e7d0afc1666603dcf64736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063715018a611610175578063a457c2d7116100dc578063c5f052cc11610095578063d8fbe9941161006f578063d8fbe99414610b26578063dd62ed3e14610b63578063eea086ba14610ba0578063f2fde38b14610bcb576102b9565b8063c5f052cc14610a8f578063c9116b6914610abe578063cae9ca5114610ae9576102b9565b8063a457c2d714610949578063a9059cbb14610986578063bfafef5d146109c3578063c19105fd146109ec578063c1d34b8914610a29578063c483e88814610a66576102b9565b8063861629f61161012e578063861629f61461083b5780638980f11f146108645780638da5cb5b1461088d57806392344c57146108b857806393f36bd8146108e157806395d89b411461091e576102b9565b8063715018a61461075357806379cc67901461076a5780637d64bcb4146107935780637ecebe00146107aa57806380c6e70a146107e75780638456cb5914610824576102b9565b80633177029f1161021957806340c10f19116101d257806340c10f191461064557806342966c681461066e57806352a9674b146106975780635c975abb146106c25780636e4bc0d4146106ed57806370a0823114610716576102b9565b80633177029f14610530578063338b5dea1461056d57806339509351146105895780633f4ba83a146105c65780634000aea0146105dd57806340b910cb1461061a576102b9565b80631296ee621161026b5780631296ee62146103f45780631631a7141461043157806318160ddd14610460578063214ad4fe1461048b57806323b872dd146104c8578063313ce56714610505576102b9565b806301ffc9a7146102be57806305d2035b146102fb57806306fdde0314610326578063095ea7b31461035157806310ad56b31461038e57806311ce5e75146103cb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613b20565b610bf4565b6040516102f29190613b68565b60405180910390f35b34801561030757600080fd5b50610310610c5c565b60405161031d9190613b68565b60405180910390f35b34801561033257600080fd5b5061033b610c73565b6040516103489190613c1c565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613cd2565b610cb0565b6040516103859190613b68565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190613d48565b610cce565b6040516103c29190613b68565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613d48565b610d00565b005b34801561040057600080fd5b5061041b60048036038101906104169190613cd2565b610d74565b6040516104289190613b68565b60405180910390f35b34801561043d57600080fd5b50610446610d98565b604051610457959493929190613dd5565b60405180910390f35b34801561046c57600080fd5b50610475610e5d565b6040516104829190613e28565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190613ea0565b610e67565b6040516104bf9190613b68565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613f1b565b610ef9565b6040516104fc9190613b68565b60405180910390f35b34801561051157600080fd5b5061051a610fd2565b6040516105279190613f7d565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190613cd2565b610fdb565b6040516105649190613b68565b60405180910390f35b61058760048036038101906105829190613cd2565b610fff565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613cd2565b6111ab565b6040516105bd9190613b68565b60405180910390f35b3480156105d257600080fd5b506105db61125e565b005b3480156105e957600080fd5b5061060460048036038101906105ff91906140cd565b6112e4565b6040516106119190613b68565b60405180910390f35b34801561062657600080fd5b5061062f61134e565b60405161063c919061414b565b60405180910390f35b34801561065157600080fd5b5061066c60048036038101906106679190613cd2565b611372565b005b34801561067a57600080fd5b5061069560048036038101906106909190614166565b61141e565b005b3480156106a357600080fd5b506106ac611432565b6040516106b9919061414b565b60405180910390f35b3480156106ce57600080fd5b506106d7611456565b6040516106e49190613b68565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f9190613d48565b61146d565b005b34801561072257600080fd5b5061073d60048036038101906107389190614193565b6114f0565b60405161074a9190613e28565b60405180910390f35b34801561075f57600080fd5b50610768611539565b005b34801561077657600080fd5b50610791600480360381019061078c9190613cd2565b611673565b005b34801561079f57600080fd5b506107a86116d5565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190614193565b61172f565b6040516107de9190613e28565b60405180910390f35b3480156107f357600080fd5b5061080e600480360381019061080991906141c0565b611778565b60405161081b919061414b565b60405180910390f35b34801561083057600080fd5b50610839611798565b005b34801561084757600080fd5b50610862600480360381019061085d91906141ed565b61181e565b005b34801561087057600080fd5b5061088b60048036038101906108869190613cd2565b611a18565b005b34801561089957600080fd5b506108a2611b1e565b6040516108af919061424f565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613d48565b611b47565b005b3480156108ed57600080fd5b50610908600480360381019061090391906141c0565b611bbb565b6040516109159190613e28565b60405180910390f35b34801561092a57600080fd5b50610933611be2565b6040516109409190613c1c565b60405180910390f35b34801561095557600080fd5b50610970600480360381019061096b9190613cd2565b611c1f565b60405161097d9190613b68565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a89190613cd2565b611cec565b6040516109ba9190613b68565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190613cd2565b611d0a565b005b3480156109f857600080fd5b50610a136004803603810190610a0e919061426a565b611e10565b604051610a20919061424f565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b91906142aa565b611e42565b604051610a5d9190613b68565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a88919061432d565b611ea7565b005b348015610a9b57600080fd5b50610aa46121f1565b604051610ab5959493929190613dd5565b60405180910390f35b348015610aca57600080fd5b50610ad36122b6565b604051610ae09190613e28565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b91906140cd565b612304565b604051610b1d9190613b68565b60405180910390f35b348015610b3257600080fd5b50610b4d6004803603810190610b489190613f1b565b612366565b604051610b5a9190613b68565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906143bb565b61238c565b604051610b979190613e28565b60405180910390f35b348015610bac57600080fd5b50610bb5612413565b604051610bc2919061424f565b60405180910390f35b348015610bd757600080fd5b50610bf26004803603810190610bed9190614193565b612439565b005b600060066000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560159054906101000a900460ff16905090565b60606040518060400160405280600681526020017f4465616b74650000000000000000000000000000000000000000000000000000815250905090565b6000610cc4610cbd612891565b8484612899565b6001905092915050565b6000610cf882600760008681526020019081526020016000206000016127a690919063ffffffff16565b905092915050565b610d276007600084815260200190815260200160002060020154610d22612891565b610cce565b610d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5d9061446d565b60405180910390fd5b610d708282612a62565b5050565b6000610d908383604051806020016040528060008152506112e4565b905092915050565b600080600080600080600080600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3891906144fa565b9450945094509450945084848484849950995099509950995050505050509091929394565b6000600454905090565b60008573ffffffffffffffffffffffffffffffffffffffff166001610e8b87612af6565b86868660405160008152602001604052604051610eab9493929190614575565b6020604051602081039080840390855afa158015610ecd573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b6000610f06848484612bba565b610fc784610f12612891565b610fc28560405180606001604052806028815260200161589860289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f78612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b612899565b600190509392505050565b60006012905090565b6000610ff7838360405180602001604052806000815250612304565b905092915050565b611007612891565b73ffffffffffffffffffffffffffffffffffffffff16611025611b1e565b73ffffffffffffffffffffffffffffffffffffffff161461107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290614606565b60405180910390fd5b6110cd81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611125816004546127d690919063ffffffff16565b6004819055507f80cb025a133b8701a844f7fbe6c0efbd563248b3219066f2c7bc991e7d8c345760045482600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161119f93929190614626565b60405180910390a15050565b60006112546111b8612891565b8461124f85600360006111c9612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b612899565b6001905092915050565b611266612891565b73ffffffffffffffffffffffffffffffffffffffff16611284611b1e565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d1906146a9565b60405180910390fd5b6112e2612f7b565b565b60006112f08484611cec565b506113046112fc612891565b85858561301d565b611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a9061473b565b60405180910390fd5b600190509392505050565b7fcf3be7ff4b5a88a495b778235f5836db07d56e8b4d2e93ef8882b3e72549113981565b600560159054906101000a900460ff16156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b9906147cd565b60405180910390fd5b6113cc828261312c565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516114129190613e28565b60405180910390a25050565b61142f611429612891565b826131aa565b50565b7fb552d6c7e4c9edecc0338644d9fc5e9316c0c7fc0e1a24447276a0373a24ac9481565b6000600560149054906101000a900460ff16905090565b611475612891565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d99061485f565b60405180910390fd5b6114ec8282613359565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611541612891565b73ffffffffffffffffffffffffffffffffffffffff1661155f611b1e565b73ffffffffffffffffffffffffffffffffffffffff16146115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac906146a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006116b2826040518060600160405280602481526020016158c0602491396116a38661169e612891565b61238c565b612f1d9092919063ffffffff16565b90506116c6836116c0612891565b83612899565b6116d083836131aa565b505050565b600560159054906101000a900460ff1615611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c906147cd565b60405180910390fd5b61172d6133ed565b565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060076000838152602001908152602001600020600201549050919050565b6117a0612891565b73ffffffffffffffffffffffffffffffffffffffff166117be611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614611814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180b906146a9565b60405180910390fd5b61181c613473565b565b611826612891565b73ffffffffffffffffffffffffffffffffffffffff16611844611b1e565b73ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190614606565b60405180910390fd5b60008390506118f183600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461351690919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119498360045461351690919063ffffffff16565b6004819055508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611995573d6000803e3d6000fd5b507f832648c7dc0600afd020267d30d540d4aa1715627bedafa29522066caafe95fb60045484600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051611a0a93929190614626565b60405180910390a150505050565b611a20612891565b73ffffffffffffffffffffffffffffffffffffffff16611a3e611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b906146a9565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611ab8611b1e565b836040518363ffffffff1660e01b8152600401611ad692919061487f565b6020604051808303816000875af1158015611af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1991906148d4565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b6e6007600084815260200190815260200160002060020154611b69612891565b610cce565b611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490614973565b60405180910390fd5b611bb78282613359565b5050565b6000611bdb6007600084815260200190815260200160002060000161356f565b9050919050565b60606040518060400160405280600381526020017f4445410000000000000000000000000000000000000000000000000000000000815250905090565b6000611ce2611c2c612891565b84611cdd856040518060600160405280602581526020016158e46025913960036000611c56612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b612899565b6001905092915050565b6000611d00611cf9613584565b8484612bba565b6001905092915050565b611d12612891565b73ffffffffffffffffffffffffffffffffffffffff16611d30611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d90614606565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611dd1573d6000803e3d6000fd5b507f5a6b26bafd3957bf06ea3b4915f51221953ed272573c779820e6e39df3e646cf8383604051611e0392919061487f565b60405180910390a1505050565b6000611e3a82600760008681526020019081526020016000206000016135fa90919063ffffffff16565b905092915050565b6000611e4f858585610ef9565b50611e5c8585858561301d565b611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e929061473b565b60405180910390fd5b60019050949350505050565b60011515611eb88786868686610e67565b151514611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef1906149df565b60405180910390fd5b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611f4a90614a2e565b9190505550611fa185600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461351690919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203d8560026000611ff4611b1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b60026000612049611b1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120918687613614565b6000803073ffffffffffffffffffffffffffffffffffffffff168660000160208101906120be9190614ab4565b87602001356040516024016120d4929190614af0565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161215e9190614b60565b600060405180830381855af49150503d8060008114612199576040519150601f19603f3d011682016040523d82523d6000602084013e61219e565b606091505b50915091506121ae886000613614565b7f64c0f671659cce3d8e5160977edd89886cd9cfcc54464644a490e0189df30df982826040516121df929190614bc1565b60405180910390a15050505050505050565b600080600080600080600080600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229191906144fa565b9450945094509450945084848484849950995099509950995050505050509091929394565b6000600260006122c4612891565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60006123108484610cb0565b5061231c848484613694565b61235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614c63565b60405180910390fd5b600190509392505050565b600061238384848460405180602001604052806000815250611e42565b90509392505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612441612891565b73ffffffffffffffffffffffffffffffffffffffff1661245f611b1e565b73ffffffffffffffffffffffffffffffffffffffff16146124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac906146a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90614cf5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614d61565b60405180910390fd5b61265c826000836137a0565b612671816004546127d690919063ffffffff16565b6004819055506126c981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161276a9190613e28565b60405180910390a35050565b600061279e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6137f8565b905092915050565b60006127ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613868565b905092915050565b60008082846127e59190614d81565b90508381101561282a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282190614e23565b60405180910390fd5b8091505092915050565b61283f83838361288c565b612847611456565b15612887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287e90614eb5565b60405180910390fd5b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ff90614f47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296e90614fd9565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a559190613e28565b60405180910390a3505050565b612a8a816007600085815260200190815260200160002060000161277690919063ffffffff16565b15612af257612a97612891565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000601960f81b600160f81b7fb552d6c7e4c9edecc0338644d9fc5e9316c0c7fc0e1a24447276a0373a24ac947f67121f3f5af9e0be370d71fed1829be5ab4792b1944ba5b83393cc61d57e4b0f856000016020810190612b579190614ab4565b86602001358760400135604051602001612b74949392919061503e565b60405160208183030381529060405280519060200120604051602001612b9d94939291906150f1565b604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c20906151b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8f90615243565b60405180910390fd5b612ca4836000836137a0565b60008111612ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cde906152d5565b60405180910390fd5b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6590615367565b60405180910390fd5b612dda8260405180606001604052806026815260200161587260269139600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e6f82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d690919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f0f9190613e28565b60405180910390a350505050565b6000838311158290612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c9190613c1c565b60405180910390fd5b508284612f729190615387565b90509392505050565b612f83611456565b612fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb990615407565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613006612891565b604051613013919061547c565b60405180910390a1565b600061303e8473ffffffffffffffffffffffffffffffffffffffff1661388b565b61304b5760009050613124565b60008473ffffffffffffffffffffffffffffffffffffffff166388a7ca5c613071612891565b8887876040518563ffffffff1660e01b81526004016130939493929190615497565b6020604051808303816000875af11580156130b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d691906154f8565b90506388a7ca5c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b61315d7fcf3be7ff4b5a88a495b778235f5836db07d56e8b4d2e93ef8882b3e725491139613158612891565b610cce565b61319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390615597565b60405180910390fd5b6131a682826125e1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321090615629565b60405180910390fd5b613225826000836137a0565b6132918160405180606001604052806022815260200161585060229139600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1d9092919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132e98160045461351690919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161334d9190613e28565b60405180910390a35050565b613381816007600085815260200190815260200160002060000161389e90919063ffffffff16565b156133e95761338e612891565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6133f5612891565b73ffffffffffffffffffffffffffffffffffffffff16613413611b1e565b73ffffffffffffffffffffffffffffffffffffffff1614613469576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613460906146a9565b60405180910390fd5b6134716138ce565b565b61347b611456565b156134bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b290615695565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586134ff612891565b60405161350c919061547c565b60405180910390a1565b60008282111561355b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355290615701565b60405180910390fd5b81836135679190615387565b905092915050565b600061357d82600001613917565b9050919050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146135e757816135f0565b6135ef612891565b5b9050809250505090565b60006136098360000183613928565b60001c905092915050565b61361c612891565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136905780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60006136b58473ffffffffffffffffffffffffffffffffffffffff1661388b565b6136c25760009050613799565b60008473ffffffffffffffffffffffffffffffffffffffff16637b04a2d06136e8612891565b86866040518463ffffffff1660e01b815260040161370893929190615721565b6020604051808303816000875af1158015613727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374b91906154f8565b9050637b04a2d060e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b9392505050565b6137a8611456565b156137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df90614eb5565b60405180910390fd5b6137f3838383612834565b505050565b60006138048383613868565b61385d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050613862565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080823b905060008111915050919050565b60006138c6836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61399c565b905092915050565b6001600560156101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b600081600001805490509050919050565b600081836000018054905011613973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396a906157d1565b60405180910390fd5b826000018281548110613989576139886157f1565b5b9060005260206000200154905092915050565b60008083600101600084815260200190815260200160002054905060008114613aa85760006001826139ce9190615387565b90506000600186600001805490506139e69190615387565b90506000866000018281548110613a00576139ff6157f1565b5b9060005260206000200154905080876000018481548110613a2457613a236157f1565b5b9060005260206000200181905550600183613a3f9190614d81565b8760010160008381526020019081526020016000208190555086600001805480613a6c57613a6b615820565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050613aae565b60009150505b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613afd81613ac8565b8114613b0857600080fd5b50565b600081359050613b1a81613af4565b92915050565b600060208284031215613b3657613b35613abe565b5b6000613b4484828501613b0b565b91505092915050565b60008115159050919050565b613b6281613b4d565b82525050565b6000602082019050613b7d6000830184613b59565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbd578082015181840152602081019050613ba2565b83811115613bcc576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bee82613b83565b613bf88185613b8e565b9350613c08818560208601613b9f565b613c1181613bd2565b840191505092915050565b60006020820190508181036000830152613c368184613be3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6982613c3e565b9050919050565b613c7981613c5e565b8114613c8457600080fd5b50565b600081359050613c9681613c70565b92915050565b6000819050919050565b613caf81613c9c565b8114613cba57600080fd5b50565b600081359050613ccc81613ca6565b92915050565b60008060408385031215613ce957613ce8613abe565b5b6000613cf785828601613c87565b9250506020613d0885828601613cbd565b9150509250929050565b6000819050919050565b613d2581613d12565b8114613d3057600080fd5b50565b600081359050613d4281613d1c565b92915050565b60008060408385031215613d5f57613d5e613abe565b5b6000613d6d85828601613d33565b9250506020613d7e85828601613c87565b9150509250929050565b600069ffffffffffffffffffff82169050919050565b613da781613d88565b82525050565b6000819050919050565b613dc081613dad565b82525050565b613dcf81613c9c565b82525050565b600060a082019050613dea6000830188613d9e565b613df76020830187613db7565b613e046040830186613dc6565b613e116060830185613dc6565b613e1e6080830184613d9e565b9695505050505050565b6000602082019050613e3d6000830184613dc6565b92915050565b600080fd5b600060608284031215613e5e57613e5d613e43565b5b81905092915050565b600060ff82169050919050565b613e7d81613e67565b8114613e8857600080fd5b50565b600081359050613e9a81613e74565b92915050565b600080600080600060e08688031215613ebc57613ebb613abe565b5b6000613eca88828901613c87565b9550506020613edb88828901613e48565b9450506080613eec88828901613e8b565b93505060a0613efd88828901613d33565b92505060c0613f0e88828901613d33565b9150509295509295909350565b600080600060608486031215613f3457613f33613abe565b5b6000613f4286828701613c87565b9350506020613f5386828701613c87565b9250506040613f6486828701613cbd565b9150509250925092565b613f7781613e67565b82525050565b6000602082019050613f926000830184613f6e565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fda82613bd2565b810181811067ffffffffffffffff82111715613ff957613ff8613fa2565b5b80604052505050565b600061400c613ab4565b90506140188282613fd1565b919050565b600067ffffffffffffffff82111561403857614037613fa2565b5b61404182613bd2565b9050602081019050919050565b82818337600083830152505050565b600061407061406b8461401d565b614002565b90508281526020810184848401111561408c5761408b613f9d565b5b61409784828561404e565b509392505050565b600082601f8301126140b4576140b3613f98565b5b81356140c484826020860161405d565b91505092915050565b6000806000606084860312156140e6576140e5613abe565b5b60006140f486828701613c87565b935050602061410586828701613cbd565b925050604084013567ffffffffffffffff81111561412657614125613ac3565b5b6141328682870161409f565b9150509250925092565b61414581613d12565b82525050565b6000602082019050614160600083018461413c565b92915050565b60006020828403121561417c5761417b613abe565b5b600061418a84828501613cbd565b91505092915050565b6000602082840312156141a9576141a8613abe565b5b60006141b784828501613c87565b91505092915050565b6000602082840312156141d6576141d5613abe565b5b60006141e484828501613d33565b91505092915050565b60008060006060848603121561420657614205613abe565b5b600061421486828701613c87565b935050602061422586828701613cbd565b925050604061423686828701613cbd565b9150509250925092565b61424981613c5e565b82525050565b60006020820190506142646000830184614240565b92915050565b6000806040838503121561428157614280613abe565b5b600061428f85828601613d33565b92505060206142a085828601613cbd565b9150509250929050565b600080600080608085870312156142c4576142c3613abe565b5b60006142d287828801613c87565b94505060206142e387828801613c87565b93505060406142f487828801613cbd565b925050606085013567ffffffffffffffff81111561431557614314613ac3565b5b6143218782880161409f565b91505092959194509250565b600080600080600080610100878903121561434b5761434a613abe565b5b600061435989828a01613c87565b965050602061436a89828a01613cbd565b955050604061437b89828a01613e48565b94505060a061438c89828a01613e8b565b93505060c061439d89828a01613d33565b92505060e06143ae89828a01613d33565b9150509295509295509295565b600080604083850312156143d2576143d1613abe565b5b60006143e085828601613c87565b92505060206143f185828601613c87565b9150509250929050565b7f4f7267616e697a6174696f6e3a2073656e646572206d75737420626520616e2060008201527f61646d696e20746f206772616e74000000000000000000000000000000000000602082015250565b6000614457602e83613b8e565b9150614462826143fb565b604082019050919050565b600060208201905081810360008301526144868161444a565b9050919050565b61449681613d88565b81146144a157600080fd5b50565b6000815190506144b38161448d565b92915050565b6144c281613dad565b81146144cd57600080fd5b50565b6000815190506144df816144b9565b92915050565b6000815190506144f481613ca6565b92915050565b600080600080600060a0868803121561451657614515613abe565b5b6000614524888289016144a4565b9550506020614535888289016144d0565b9450506040614546888289016144e5565b9350506060614557888289016144e5565b9250506080614568888289016144a4565b9150509295509295909350565b600060808201905061458a600083018761413c565b6145976020830186613f6e565b6145a4604083018561413c565b6145b1606083018461413c565b95945050505050565b7f6e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006145f0600983613b8e565b91506145fb826145ba565b602082019050919050565b6000602082019050818103600083015261461f816145e3565b9050919050565b600060608201905061463b6000830186613dc6565b6146486020830185613dc6565b6146556040830184613dc6565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614693602083613b8e565b915061469e8261465d565b602082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260008201527f6576657274730000000000000000000000000000000000000000000000000000602082015250565b6000614725602683613b8e565b9150614730826146c9565b604082019050919050565b6000602082019050818103600083015261475481614718565b9050919050565b7f45524332304d696e7461626c653a206d696e74696e672069732066696e69736860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006147b7602283613b8e565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f4f7267616e697a6174696f6e3a2063616e206f6e6c792072656e6f756e63652060008201527f726f6c657320666f722073656c66000000000000000000000000000000000000602082015250565b6000614849602e83613b8e565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b60006040820190506148946000830185614240565b6148a16020830184613dc6565b9392505050565b6148b181613b4d565b81146148bc57600080fd5b50565b6000815190506148ce816148a8565b92915050565b6000602082840312156148ea576148e9613abe565b5b60006148f8848285016148bf565b91505092915050565b7f4f7267616e697a6174696f6e3a2073656e646572206d75737420626520616e2060008201527f61646d696e20746f207265766f6b650000000000000000000000000000000000602082015250565b600061495d602f83613b8e565b915061496882614901565b604082019050919050565b6000602082019050818103600083015261498c81614950565b9050919050565b7f4552524f523a20496e76616c6964207472616e73616374696f6e000000000000600082015250565b60006149c9601a83613b8e565b91506149d482614993565b602082019050919050565b600060208201905081810360008301526149f8816149bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a3982613c9c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6b57614a6a6149ff565b5b600182019050919050565b6000614a8182613c3e565b9050919050565b614a9181614a76565b8114614a9c57600080fd5b50565b600081359050614aae81614a88565b92915050565b600060208284031215614aca57614ac9613abe565b5b6000614ad884828501614a9f565b91505092915050565b614aea81614a76565b82525050565b6000604082019050614b056000830185614ae1565b614b126020830184613dc6565b9392505050565b600081519050919050565b600081905092915050565b6000614b3a82614b19565b614b448185614b24565b9350614b54818560208601613b9f565b80840191505092915050565b6000614b6c8284614b2f565b915081905092915050565b600082825260208201905092915050565b6000614b9382614b19565b614b9d8185614b77565b9350614bad818560208601613b9f565b614bb681613bd2565b840191505092915050565b6000604082019050614bd66000830185613b59565b8181036020830152614be88184614b88565b90509392505050565b7f455243313336333a205f636865636b416e6443616c6c417070726f766520726560008201527f7665727473000000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602583613b8e565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cdf602683613b8e565b9150614cea82614c83565b604082019050919050565b60006020820190508181036000830152614d0e81614cd2565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614d4b601f83613b8e565b9150614d5682614d15565b602082019050919050565b60006020820190508181036000830152614d7a81614d3e565b9050919050565b6000614d8c82613c9c565b9150614d9783613c9c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614dcc57614dcb6149ff565b5b828201905092915050565b7f547970654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e0d601b83613b8e565b9150614e1882614dd7565b602082019050919050565b60006020820190508181036000830152614e3c81614e00565b9050919050565b7f45524332305061757361626c653a20746f6b656e207472616e7366657220776860008201527f696c652070617573656400000000000000000000000000000000000000000000602082015250565b6000614e9f602a83613b8e565b9150614eaa82614e43565b604082019050919050565b60006020820190508181036000830152614ece81614e92565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f31602483613b8e565b9150614f3c82614ed5565b604082019050919050565b60006020820190508181036000830152614f6081614f24565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fc3602283613b8e565b9150614fce82614f67565b604082019050919050565b60006020820190508181036000830152614ff281614fb6565b9050919050565b6000819050919050565b6000819050919050565b600061502861502361501e84614ff9565b615003565b613c9c565b9050919050565b6150388161500d565b82525050565b6000608082019050615053600083018761502f565b6150606020830186614ae1565b61506d6040830185613dc6565b61507a6060830184613dc6565b95945050505050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b6150ca6150c582615083565b6150af565b82525050565b6000819050919050565b6150eb6150e682613d12565b6150d0565b82525050565b60006150fd82876150b9565b60018201915061510d82866150b9565b60018201915061511d82856150da565b60208201915061512d82846150da565b60208201915081905095945050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061519b602583613b8e565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061522d602383613b8e565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006152bf602983613b8e565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615351602683613b8e565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b600061539282613c9c565b915061539d83613c9c565b9250828210156153b0576153af6149ff565b5b828203905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006153f1601483613b8e565b91506153fc826153bb565b602082019050919050565b60006020820190508181036000830152615420816153e4565b9050919050565b600061544261543d61543884613c3e565b615003565b613c3e565b9050919050565b600061545482615427565b9050919050565b600061546682615449565b9050919050565b6154768161545b565b82525050565b6000602082019050615491600083018461546d565b92915050565b60006080820190506154ac600083018761546d565b6154b96020830186614240565b6154c66040830185613dc6565b81810360608301526154d88184614b88565b905095945050505050565b6000815190506154f281613af4565b92915050565b60006020828403121561550e5761550d613abe565b5b600061551c848285016154e3565b91505092915050565b7f4d656d626572733a2063616c6c657220646f6573206e6f74206861766520746860008201527f65204d494e54455220726f6c6500000000000000000000000000000000000000602082015250565b6000615581602d83613b8e565b915061558c82615525565b604082019050919050565b600060208201905081810360008301526155b081615574565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615613602183613b8e565b915061561e826155b7565b604082019050919050565b6000602082019050818103600083015261564281615606565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061567f601083613b8e565b915061568a82615649565b602082019050919050565b600060208201905081810360008301526156ae81615672565b9050919050565b7f547970654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b60006156eb601e83613b8e565b91506156f6826156b5565b602082019050919050565b6000602082019050818103600083015261571a816156de565b9050919050565b6000606082019050615736600083018661546d565b6157436020830185613dc6565b81810360408301526157558184614b88565b9050949350505050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006157bb602283613b8e565b91506157c68261575f565b604082019050919050565b600060208201905081810360008301526157ea816157ae565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220198327c908ec5939dbccd03a4645e2e3cd678a1caca53e7e7d0afc1666603dcf64736f6c634300080e0033

Deployed Bytecode Sourcemap

33431:1818:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24842:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32457:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16424:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17431:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29758:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30297:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26714:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34265:307;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;16719:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15479:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17612:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16622:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27752:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21718:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17951:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34878:67;;;;;;;;;;;;;:::i;:::-;;26885:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31784:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32561:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24071:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14185:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23119:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30782:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16833:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12873:148;;;;;;;;;;;;;:::i;:::-;;24176:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32709:75;;;;;;;;;;;;;:::i;:::-;;14038:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30179:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34809:63;;;;;;;;;;;;;:::i;:::-;;22054:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28992:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12648:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30536:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29906:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16521:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18187:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17078:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22518:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30037:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27410:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20912:800;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33950:309;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;16966:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27917:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27207:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17274:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16379:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13027:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24842:150;24927:4;24951:20;:33;24972:11;24951:33;;;;;;;;;;;;;;;;;;;;;;;;;;;24944:40;;24842:150;;;:::o;32457:96::-;32505:4;32529:16;;;;;;;;;;;32522:23;;32457:96;:::o;16424:91::-;16469:13;16502:5;;;;;;;;;;;;;;;;;16495:12;;16424:91;:::o;17431:175::-;17514:4;17531:45;17540:18;:16;:18::i;:::-;17560:7;17569:6;17531:8;:45::i;:::-;17594:4;17587:11;;17431:175;;;;:::o;29758:140::-;29828:4;29852:38;29882:7;29852:6;:12;29859:4;29852:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;29845:45;;29758:140;;;;:::o;30297:231::-;30381:52;30390:6;:12;30397:4;30390:12;;;;;;;;;;;:22;;;30414:18;:16;:18::i;:::-;30381:8;:52::i;:::-;30373:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30495:25;30506:4;30512:7;30495:10;:25::i;:::-;30297:231;;:::o;26714:163::-;26807:4;26831:38;26847:9;26858:6;26831:38;;;;;;;;;;;;:15;:38::i;:::-;26824:45;;26714:163;;;;:::o;34265:307::-;34319:6;34327:3;34332:4;34338;34344:6;34368:14;34384:9;34395:14;34411;34427:22;34453:16;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34367:120;;;;;;;;;;34510:7;34519:5;34526:9;34537;34548:15;34502:62;;;;;;;;;;;;;;;34265:307;;;;;:::o;16719:108::-;16780:7;16807:12;;16800:19;;16719:108;:::o;15479:218::-;15607:4;15683:6;15631:58;;:48;15641:28;15657:11;15641:15;:28::i;:::-;15671:1;15674;15677;15631:48;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;15624:65;;15479:218;;;;;;;:::o;17612:333::-;17718:4;17735:36;17745:6;17753:9;17764:6;17735:9;:36::i;:::-;17782:133;17791:6;17799:18;:16;:18::i;:::-;17819:95;17863:6;17819:95;;;;;;;;;;;;;;;;;:11;:19;17831:6;17819:19;;;;;;;;;;;;;;;:39;17839:18;:16;:18::i;:::-;17819:39;;;;;;;;;;;;;;;;:43;;:95;;;;;:::i;:::-;17782:8;:133::i;:::-;17933:4;17926:11;;17612:333;;;;;:::o;16622:91::-;16671:5;16370:2;16689:16;;16622:91;:::o;27752:157::-;27842:4;27866:35;27881:7;27890:6;27866:35;;;;;;;;;;;;:14;:35::i;:::-;27859:42;;27752:157;;;;:::o;21718:330::-;21820:18;:16;:18::i;:::-;21809:29;;:7;:5;:7::i;:::-;:29;;;21801:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;21882:32;21903:10;21882:9;:16;21892:5;21882:16;;;;;;;;;;;;;;;;:20;;:32;;;;:::i;:::-;21863:9;:16;21873:5;21863:16;;;;;;;;;;;;;;;:51;;;;21940:28;21957:10;21940:12;;:16;;:28;;;;:::i;:::-;21925:12;:43;;;;21984:56;21997:12;;22011:10;22023:9;:16;22033:5;22023:16;;;;;;;;;;;;;;;;21984:56;;;;;;;;:::i;:::-;;;;;;;;21718:330;;:::o;17951:230::-;18039:4;18056:95;18065:18;:16;:18::i;:::-;18085:7;18094:56;18139:10;18094:11;:31;18106:18;:16;:18::i;:::-;18094:31;;;;;;;;;;;;;;;:40;18126:7;18094:40;;;;;;;;;;;;;;;;:44;;:56;;;;:::i;:::-;18056:8;:95::i;:::-;18169:4;18162:11;;17951:230;;;;:::o;34878:67::-;12792:18;:16;:18::i;:::-;12781:29;;:7;:5;:7::i;:::-;:29;;;12773:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34927:10:::1;:8;:10::i;:::-;34878:67::o:0;26885:314::-;26997:4;27014:27;27023:9;27034:6;27014:8;:27::i;:::-;;27060:66;27082:18;:16;:18::i;:::-;27102:9;27113:6;27121:4;27060:21;:66::i;:::-;27052:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27187:4;27180:11;;26885:314;;;;;:::o;31784:64::-;31823:25;31784:64;:::o;32561:140::-;32376:16;;;;;;;;;;;32375:17;32367:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32634:22:::1;32640:7;32649:6;32634:5;:22::i;:::-;32677:7;32672:21;;;32686:6;32672:21;;;;;;:::i;:::-;;;;;;;;32561:140:::0;;:::o;24071:97::-;24127:33;24133:18;:16;:18::i;:::-;24153:6;24127:5;:33::i;:::-;24071:97;:::o;14185:31::-;;;:::o;23119:86::-;23166:4;23190:7;;;;;;;;;;;23183:14;;23119:86;:::o;30782:216::-;30882:18;:16;:18::i;:::-;30871:29;;:7;:29;;;30863:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;30962:28;30976:4;30982:7;30962:13;:28::i;:::-;30782:216;;:::o;16833:127::-;16907:7;16934:9;:18;16944:7;16934:18;;;;;;;;;;;;;;;;16927:25;;16833:127;;;:::o;12873:148::-;12792:18;:16;:18::i;:::-;12781:29;;:7;:5;:7::i;:::-;:29;;;12773:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12980:1:::1;12943:40;;12964:6;::::0;::::1;;;;;;;;12943:40;;;;;;;;;;;;13011:1;12994:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;12873:148::o:0;24176:307::-;24253:26;24282:90;24325:6;24282:90;;;;;;;;;;;;;;;;;:38;24292:7;24301:18;:16;:18::i;:::-;24282:9;:38::i;:::-;:42;;:90;;;;;:::i;:::-;24253:119;;24385:57;24394:7;24403:18;:16;:18::i;:::-;24423;24385:8;:57::i;:::-;24453:22;24459:7;24468:6;24453:5;:22::i;:::-;24242:241;24176:307;;:::o;32709:75::-;32376:16;;;;;;;;;;;32375:17;32367:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32760:16:::1;:14;:16::i;:::-;32709:75::o:0;14038:103::-;14092:7;14119;:14;14127:5;14119:14;;;;;;;;;;;;;;;;14112:21;;14038:103;;;:::o;30179:110::-;30232:7;30259:6;:12;30266:4;30259:12;;;;;;;;;;;:22;;;30252:29;;30179:110;;;:::o;34809:63::-;12792:18;:16;:18::i;:::-;12781:29;;:7;:5;:7::i;:::-;:29;;;12773:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34856:8:::1;:6;:8::i;:::-;34809:63::o:0;22054:458::-;22173:18;:16;:18::i;:::-;22162:29;;:7;:5;:7::i;:::-;:29;;;22154:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;22216:24;22251:6;22216:42;;22289:39;22311:16;22289:9;:17;22299:6;22289:17;;;;;;;;;;;;;;;;:21;;:39;;;;:::i;:::-;22269:9;:17;22279:6;22269:17;;;;;;;;;;;;;;;:59;;;;22354:34;22371:16;22354:12;;:16;;:34;;;;:::i;:::-;22339:12;:49;;;;22399:8;:17;;:27;22417:8;22399:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22442:62;22454:12;;22468:16;22486:9;:17;22496:6;22486:17;;;;;;;;;;;;;;;;22442:62;;;;;;;;:::i;:::-;;;;;;;;22143:369;22054:458;;;:::o;28992:152::-;12792:18;:16;:18::i;:::-;12781:29;;:7;:5;:7::i;:::-;:29;;;12773:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29092:12:::1;29085:29;;;29115:7;:5;:7::i;:::-;29124:11;29085:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28992:152:::0;;:::o;12648:87::-;12694:7;12721:6;;;;;;;;;;;12714:13;;12648:87;:::o;30536:238::-;30623:52;30632:6;:12;30639:4;30632:12;;;;;;;;;;;:22;;;30656:18;:16;:18::i;:::-;30623:8;:52::i;:::-;30615:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;30738:28;30752:4;30758:7;30738:13;:28::i;:::-;30536:238;;:::o;29906:123::-;29965:7;29992:29;:6;:12;29999:4;29992:12;;;;;;;;;;;:20;;:27;:29::i;:::-;29985:36;;29906:123;;;:::o;16521:95::-;16568:13;16601:7;;;;;;;;;;;;;;;;;16594:14;;16521:95;:::o;18187:281::-;18280:4;18297:141;18306:18;:16;:18::i;:::-;18326:7;18335:102;18380:15;18335:102;;;;;;;;;;;;;;;;;:11;:31;18347:18;:16;:18::i;:::-;18335:31;;;;;;;;;;;;;;;:40;18367:7;18335:40;;;;;;;;;;;;;;;;:44;;:102;;;;;:::i;:::-;18297:8;:141::i;:::-;18456:4;18449:11;;18187:281;;;;:::o;17078:190::-;17164:4;17181:57;17191:27;:25;:27::i;:::-;17220:9;17231:6;17181:9;:57::i;:::-;17256:4;17249:11;;17078:190;;;;:::o;22518:280::-;22617:18;:16;:18::i;:::-;22606:29;;:7;:5;:7::i;:::-;:29;;;22598:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;22660:24;22695:9;22660:45;;22716:8;:17;;:27;22734:8;22716:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22759:31;22770:9;22781:8;22759:31;;;;;;;:::i;:::-;;;;;;;;22587:211;22518:280;;:::o;30037:134::-;30106:7;30133:30;30157:5;30133:6;:12;30140:4;30133:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;30126:37;;30037:134;;;;:::o;27410:334::-;27542:4;27559:39;27572:6;27580:9;27591:6;27559:12;:39::i;:::-;;27617:54;27639:6;27647:9;27658:6;27666:4;27617:21;:54::i;:::-;27609:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;27732:4;27725:11;;27410:334;;;;;;:::o;20912:800::-;21102:4;21050:56;;:48;21069:6;21077:11;21090:1;21093;21096;21050:18;:48::i;:::-;:56;;;21042:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;21148:7;:15;21156:6;21148:15;;;;;;;;;;;;;;;;:17;;;;;;;;;:::i;:::-;;;;;;21196:24;21218:1;21196:9;:17;21206:6;21196:17;;;;;;;;;;;;;;;;:21;;:24;;;;:::i;:::-;21176:9;:17;21186:6;21176:17;;;;;;;;;;;;;;;:44;;;;21252:25;21275:1;21252:9;:18;21262:7;:5;:7::i;:::-;21252:18;;;;;;;;;;;;;;;;:22;;:25;;;;:::i;:::-;21231:9;:18;21241:7;:5;:7::i;:::-;21231:18;;;;;;;;;;;;;;;:46;;;;21298:51;21334:6;21342;21298:35;:51::i;:::-;21361:12;21375:17;21404:4;21396:26;;21525:11;:14;;;;;;;;;;:::i;:::-;21558:11;:18;;;21437:154;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21396:206;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21360:242;;;;21613:55;21649:6;21665:1;21613:35;:55::i;:::-;21684:20;21690:7;21699:4;21684:20;;;;;;;:::i;:::-;;;;;;;;21031:681;;20912:800;;;;;;:::o;33950:309::-;34005:6;34013:3;34018:4;34024;34030:6;34054:14;34070:9;34081:14;34097;34113:22;34139:17;;;;;;;;;;;:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34053:121;;;;;;;;;;34197:7;34206:5;34213:9;34224;34235:15;34189:62;;;;;;;;;;;;;;;33950:309;;;;;:::o;16966:106::-;17008:7;17035:9;:29;17045:18;:16;:18::i;:::-;17035:29;;;;;;;;;;;;;;;;17028:36;;16966:106;:::o;27917:284::-;28026:4;28043:24;28051:7;28060:6;28043:7;:24::i;:::-;;28086:43;28107:7;28116:6;28124:4;28086:20;:43::i;:::-;28078:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;28189:4;28182:11;;27917:284;;;;;:::o;27207:195::-;27320:4;27344:50;27364:6;27372:9;27383:6;27344:50;;;;;;;;;;;;:19;:50::i;:::-;27337:57;;27207:195;;;;;:::o;17274:151::-;17363:7;17390:11;:18;17402:5;17390:18;;;;;;;;;;;;;;;:27;17409:7;17390:27;;;;;;;;;;;;;;;;17383:34;;17274:151;;;;:::o;16379:36::-;;;;;;;;;;;;;:::o;13027:244::-;12792:18;:16;:18::i;:::-;12781:29;;:7;:5;:7::i;:::-;:29;;;12773:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13136:1:::1;13116:22;;:8;:22;;::::0;13108:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13226:8;13197:38;;13218:6;::::0;::::1;;;;;;;;13197:38;;;;;;;;;;;;13255:8;13246:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;13027:244:::0;:::o;19231:374::-;19334:1;19315:21;;:7;:21;;;19307:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19383:49;19404:7;19421:1;19425:6;19383:20;:49::i;:::-;19458:24;19475:6;19458:12;;:16;;:24;;;;:::i;:::-;19443:12;:39;;;;19514:30;19537:6;19514:9;:18;19524:7;19514:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;19493:9;:18;19503:7;19493:18;;;;;;;;;;;;;;;:51;;;;19581:7;19560:37;;19577:1;19560:37;;;19590:6;19560:37;;;;;;:::i;:::-;;;;;;;;19231:374;;:::o;8225:152::-;8295:4;8319:50;8324:3;:10;;8360:5;8344:23;;8336:32;;8319:4;:50::i;:::-;8312:57;;8225:152;;;;:::o;8549:167::-;8629:4;8653:55;8663:3;:10;;8699:5;8683:23;;8675:32;;8653:9;:55::i;:::-;8646:62;;8549:167;;;;:::o;992:179::-;1050:7;1070:9;1086:1;1082;:5;;;;:::i;:::-;1070:17;;1111:1;1106;:6;;1098:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1162:1;1155:8;;;992:179;;;;:::o;23738:236::-;23847:44;23874:4;23880:2;23884:6;23847:26;:44::i;:::-;23911:8;:6;:8::i;:::-;23910:9;23902:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23738:236;;;:::o;22806:92::-;;;;:::o;12060:121::-;12119:15;12162:10;12147:26;;12060:121;:::o;20031:346::-;20150:1;20133:19;;:5;:19;;;20125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20231:1;20212:21;;:7;:21;;;20204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20315:6;20285:11;:18;20297:5;20285:18;;;;;;;;;;;;;;;:27;20304:7;20285:27;;;;;;;;;;;;;;;:36;;;;20353:7;20337:32;;20346:5;20337:32;;;20362:6;20337:32;;;;;;:::i;:::-;;;;;;;;20031:346;;;:::o;31335:194::-;31409:33;31434:7;31409:6;:12;31416:4;31409:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;31405:117;;;31491:18;:16;:18::i;:::-;31464:46;;31482:7;31464:46;;31476:4;31464:46;;;;;;;;;;31405:117;31335:194;;:::o;14886:585::-;14967:7;15045:4;15038:12;;15058:4;15051:12;;15065:6;15171:66;15268:11;:14;;;;;;;;;;:::i;:::-;15313:11;:18;;;15362:11;:17;;;15130:276;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15094:335;;;;;;15021:427;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14993:470;;;;;;14986:477;;14886:585;;;:::o;18474:751::-;18598:1;18580:20;;:6;:20;;;18572:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18682:1;18661:23;;:9;:23;;;18653:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18735:48;18756:6;18772:1;18776:6;18735:20;:48::i;:::-;18811:1;18802:6;:10;18794:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18871:21;18895:9;:17;18905:6;18895:17;;;;;;;;;;;;;;;;18871:41;;18948:6;18931:13;:23;;18923:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19029:71;19051:6;19029:71;;;;;;;;;;;;;;;;;:9;:17;19039:6;19029:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;19009:9;:17;19019:6;19009:17;;;;;;;;;;;;;;;:91;;;;19134:32;19159:6;19134:9;:20;19144:9;19134:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;19111:9;:20;19121:9;19111:20;;;;;;;;;;;;;;;:55;;;;19199:9;19182:35;;19191:6;19182:35;;;19210:6;19182:35;;;;;;:::i;:::-;;;;;;;;18561:664;18474:751;;;:::o;1893:166::-;1979:7;2012:1;2007;:6;;2015:12;1999:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2050:1;2046;:5;;;;:::i;:::-;2039:12;;1893:166;;;;;:::o;23549:126::-;23356:8;:6;:8::i;:::-;23348:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;23618:5:::1;23608:7;;:15;;;;;;;;;;;;;;;;;;23639:28;23648:18;:16;:18::i;:::-;23639:28;;;;;;:::i;:::-;;;;;;;;23549:126::o:0;28209:381::-;28336:4;28358:22;:9;:20;;;:22::i;:::-;28353:68;;28404:5;28397:12;;;;28353:68;28431:13;28464:9;28447:46;;;28494:18;:16;:18::i;:::-;28514:6;28522;28530:4;28447:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28431:104;;26476:10;28564:17;;28554:27;;;:6;:27;;;;28546:36;;;28209:381;;;;;;;:::o;34578:124::-;32035:42;31823:25;32058:18;:16;:18::i;:::-;32035:8;:42::i;:::-;32027:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34666:28:::1;34678:7;34687:6;34666:11;:28::i;:::-;34578:124:::0;;:::o;19611:414::-;19714:1;19695:21;;:7;:21;;;19687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19765:49;19786:7;19803:1;19807:6;19765:20;:49::i;:::-;19846:68;19869:6;19846:68;;;;;;;;;;;;;;;;;:9;:18;19856:7;19846:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;19825:9;:18;19835:7;19825:18;;;;;;;;;;;;;;;:89;;;;19940:24;19957:6;19940:12;;:16;;:24;;;;:::i;:::-;19925:12;:39;;;;20006:1;19980:37;;19989:7;19980:37;;;20010:6;19980:37;;;;;;:::i;:::-;;;;;;;;19611:414;;:::o;31537:200::-;31614:36;31642:7;31614:6;:12;31621:4;31614:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;31610:120;;;31699:18;:16;:18::i;:::-;31672:46;;31690:7;31672:46;;31684:4;31672:46;;;;;;;;;;31610:120;31537:200;;:::o;34708:95::-;12792:18;:16;:18::i;:::-;12781:29;;:7;:5;:7::i;:::-;:29;;;12773:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34773:22:::1;:20;:22::i;:::-;34708:95::o:0;23417:124::-;23258:8;:6;:8::i;:::-;23257:9;23249:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23487:4:::1;23477:7;;:14;;;;;;;;;;;;;;;;;;23507:26;23514:18;:16;:18::i;:::-;23507:26;;;;;;:::i;:::-;;;;;;;;23417:124::o:0;1179:158::-;1237:7;1270:1;1265;:6;;1257:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1328:1;1324;:5;;;;:::i;:::-;1317:12;;1179:158;;;;:::o;8724:117::-;8787:7;8814:19;8822:3;:10;;8814:7;:19::i;:::-;8807:26;;8724:117;;;:::o;20383:292::-;20443:7;20463:30;20496:21;;;;;;;;;;;20463:54;;20528:22;20587:1;20553:36;;:22;:36;;;:82;;20613:22;20553:82;;;20592:18;:16;:18::i;:::-;20553:82;20528:107;;20653:14;20646:21;;;;20383:292;:::o;8847:158::-;8921:7;8972:22;8976:3;:10;;8988:5;8972:3;:22::i;:::-;8964:31;;8941:56;;8847:158;;;;:::o;20681:225::-;20814:18;:16;:18::i;:::-;20797:35;;:13;:35;;;20793:106;;20873:14;20849:21;;:38;;;;;;;;;;;;;;;;;;20793:106;20681:225;;:::o;28598:349::-;28706:4;28728:20;:7;:18;;;:20::i;:::-;28723:66;;28772:5;28765:12;;;;28723:66;28799:13;28831:7;28815:43;;;28859:18;:16;:18::i;:::-;28879:6;28887:4;28815:77;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28799:93;;26537:10;28921:17;;28911:27;;;:6;:27;;;;28903:36;;;28598:349;;;;;;:::o;34951:258::-;35091:8;:6;:8::i;:::-;35090:9;35082:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35157:44;35184:4;35190:2;35194:6;35157:26;:44::i;:::-;34951:258;;;:::o;6059:291::-;6122:4;6144:21;6154:3;6159:5;6144:9;:21::i;:::-;6139:204;;6182:3;:11;;6199:5;6182:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6242:3;:11;;:18;;;;6220:3;:12;;:19;6233:5;6220:19;;;;;;;;;;;:40;;;;6282:4;6275:11;;;;6139:204;6326:5;6319:12;;6059:291;;;;;:::o;6963:129::-;7036:4;7083:1;7060:3;:12;;:19;7073:5;7060:19;;;;;;;;;;;;:24;;7053:31;;6963:129;;;;:::o;2437:174::-;2497:4;2514:12;2568:7;2556:20;2548:28;;2602:1;2595:4;:8;2588:15;;;2437:174;;;:::o;8383:158::-;8456:4;8480:53;8488:3;:10;;8524:5;8508:23;;8500:32;;8480:7;:53::i;:::-;8473:60;;8383:158;;;;:::o;32790:117::-;32863:4;32844:16;;:23;;;;;;;;;;;;;;;;;;32885:14;;;;;;;;;;32790:117::o;7100:109::-;7156:7;7183:3;:11;;:18;;;;7176:25;;7100:109;;;:::o;7217:204::-;7284:7;7333:5;7312:3;:11;;:18;;;;:26;7304:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7395:3;:11;;7407:5;7395:18;;;;;;;;:::i;:::-;;;;;;;;;;7388:25;;7217:204;;;;:::o;6356:599::-;6422:4;6439:18;6460:3;:12;;:19;6473:5;6460:19;;;;;;;;;;;;6439:40;;6510:1;6496:10;:15;6492:456;;6528:21;6565:1;6552:10;:14;;;;:::i;:::-;6528:38;;6581:17;6622:1;6601:3;:11;;:18;;;;:22;;;;:::i;:::-;6581:42;;6638:17;6658:3;:11;;6670:9;6658:22;;;;;;;;:::i;:::-;;;;;;;;;;6638:42;;6724:9;6695:3;:11;;6707:13;6695:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;6790:1;6774:13;:17;;;;:::i;:::-;6748:3;:12;;:23;6761:9;6748:23;;;;;;;;;;;:43;;;;6807:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6846:3;:12;;:19;6859:5;6846:19;;;;;;;;;;;6839:26;;;6887:4;6880:11;;;;;;;;6492:456;6931:5;6924:12;;;6356:599;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:126::-;2945:7;2985:42;2978:5;2974:54;2963:65;;2908:126;;;:::o;3040:96::-;3077:7;3106:24;3124:5;3106:24;:::i;:::-;3095:35;;3040:96;;;:::o;3142:122::-;3215:24;3233:5;3215:24;:::i;:::-;3208:5;3205:35;3195:63;;3254:1;3251;3244:12;3195:63;3142:122;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:77::-;3452:7;3481:5;3470:16;;3415:77;;;:::o;3498:122::-;3571:24;3589:5;3571:24;:::i;:::-;3564:5;3561:35;3551:63;;3610:1;3607;3600:12;3551:63;3498:122;:::o;3626:139::-;3672:5;3710:6;3697:20;3688:29;;3726:33;3753:5;3726:33;:::i;:::-;3626:139;;;;:::o;3771:474::-;3839:6;3847;3896:2;3884:9;3875:7;3871:23;3867:32;3864:119;;;3902:79;;:::i;:::-;3864:119;4022:1;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3993:117;4149:2;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4120:118;3771:474;;;;;:::o;4251:77::-;4288:7;4317:5;4306:16;;4251:77;;;:::o;4334:122::-;4407:24;4425:5;4407:24;:::i;:::-;4400:5;4397:35;4387:63;;4446:1;4443;4436:12;4387:63;4334:122;:::o;4462:139::-;4508:5;4546:6;4533:20;4524:29;;4562:33;4589:5;4562:33;:::i;:::-;4462:139;;;;:::o;4607:474::-;4675:6;4683;4732:2;4720:9;4711:7;4707:23;4703:32;4700:119;;;4738:79;;:::i;:::-;4700:119;4858:1;4883:53;4928:7;4919:6;4908:9;4904:22;4883:53;:::i;:::-;4873:63;;4829:117;4985:2;5011:53;5056:7;5047:6;5036:9;5032:22;5011:53;:::i;:::-;5001:63;;4956:118;4607:474;;;;;:::o;5087:105::-;5123:7;5163:22;5156:5;5152:34;5141:45;;5087:105;;;:::o;5198:115::-;5283:23;5300:5;5283:23;:::i;:::-;5278:3;5271:36;5198:115;;:::o;5319:76::-;5355:7;5384:5;5373:16;;5319:76;;;:::o;5401:115::-;5486:23;5503:5;5486:23;:::i;:::-;5481:3;5474:36;5401:115;;:::o;5522:118::-;5609:24;5627:5;5609:24;:::i;:::-;5604:3;5597:37;5522:118;;:::o;5646:652::-;5845:4;5883:3;5872:9;5868:19;5860:27;;5897:69;5963:1;5952:9;5948:17;5939:6;5897:69;:::i;:::-;5976:70;6042:2;6031:9;6027:18;6018:6;5976:70;:::i;:::-;6056:72;6124:2;6113:9;6109:18;6100:6;6056:72;:::i;:::-;6138;6206:2;6195:9;6191:18;6182:6;6138:72;:::i;:::-;6220:71;6286:3;6275:9;6271:19;6262:6;6220:71;:::i;:::-;5646:652;;;;;;;;:::o;6304:222::-;6397:4;6435:2;6424:9;6420:18;6412:26;;6448:71;6516:1;6505:9;6501:17;6492:6;6448:71;:::i;:::-;6304:222;;;;:::o;6532:117::-;6641:1;6638;6631:12;6692:235;6769:5;6810:2;6801:6;6796:3;6792:16;6788:25;6785:112;;;6816:79;;:::i;:::-;6785:112;6915:6;6906:15;;6692:235;;;;:::o;6933:86::-;6968:7;7008:4;7001:5;6997:16;6986:27;;6933:86;;;:::o;7025:118::-;7096:22;7112:5;7096:22;:::i;:::-;7089:5;7086:33;7076:61;;7133:1;7130;7123:12;7076:61;7025:118;:::o;7149:135::-;7193:5;7231:6;7218:20;7209:29;;7247:31;7272:5;7247:31;:::i;:::-;7149:135;;;;:::o;7290:971::-;7414:6;7422;7430;7438;7446;7495:3;7483:9;7474:7;7470:23;7466:33;7463:120;;;7502:79;;:::i;:::-;7463:120;7622:1;7647:53;7692:7;7683:6;7672:9;7668:22;7647:53;:::i;:::-;7637:63;;7593:117;7749:2;7775:84;7851:7;7842:6;7831:9;7827:22;7775:84;:::i;:::-;7765:94;;7720:149;7908:3;7935:51;7978:7;7969:6;7958:9;7954:22;7935:51;:::i;:::-;7925:61;;7879:117;8035:3;8062:53;8107:7;8098:6;8087:9;8083:22;8062:53;:::i;:::-;8052:63;;8006:119;8164:3;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8135:119;7290:971;;;;;;;;:::o;8267:619::-;8344:6;8352;8360;8409:2;8397:9;8388:7;8384:23;8380:32;8377:119;;;8415:79;;:::i;:::-;8377:119;8535:1;8560:53;8605:7;8596:6;8585:9;8581:22;8560:53;:::i;:::-;8550:63;;8506:117;8662:2;8688:53;8733:7;8724:6;8713:9;8709:22;8688:53;:::i;:::-;8678:63;;8633:118;8790:2;8816:53;8861:7;8852:6;8841:9;8837:22;8816:53;:::i;:::-;8806:63;;8761:118;8267:619;;;;;:::o;8892:112::-;8975:22;8991:5;8975:22;:::i;:::-;8970:3;8963:35;8892:112;;:::o;9010:214::-;9099:4;9137:2;9126:9;9122:18;9114:26;;9150:67;9214:1;9203:9;9199:17;9190:6;9150:67;:::i;:::-;9010:214;;;;:::o;9230:117::-;9339:1;9336;9329:12;9353:117;9462:1;9459;9452:12;9476:180;9524:77;9521:1;9514:88;9621:4;9618:1;9611:15;9645:4;9642:1;9635:15;9662:281;9745:27;9767:4;9745:27;:::i;:::-;9737:6;9733:40;9875:6;9863:10;9860:22;9839:18;9827:10;9824:34;9821:62;9818:88;;;9886:18;;:::i;:::-;9818:88;9926:10;9922:2;9915:22;9705:238;9662:281;;:::o;9949:129::-;9983:6;10010:20;;:::i;:::-;10000:30;;10039:33;10067:4;10059:6;10039:33;:::i;:::-;9949:129;;;:::o;10084:307::-;10145:4;10235:18;10227:6;10224:30;10221:56;;;10257:18;;:::i;:::-;10221:56;10295:29;10317:6;10295:29;:::i;:::-;10287:37;;10379:4;10373;10369:15;10361:23;;10084:307;;;:::o;10397:154::-;10481:6;10476:3;10471;10458:30;10543:1;10534:6;10529:3;10525:16;10518:27;10397:154;;;:::o;10557:410::-;10634:5;10659:65;10675:48;10716:6;10675:48;:::i;:::-;10659:65;:::i;:::-;10650:74;;10747:6;10740:5;10733:21;10785:4;10778:5;10774:16;10823:3;10814:6;10809:3;10805:16;10802:25;10799:112;;;10830:79;;:::i;:::-;10799:112;10920:41;10954:6;10949:3;10944;10920:41;:::i;:::-;10640:327;10557:410;;;;;:::o;10986:338::-;11041:5;11090:3;11083:4;11075:6;11071:17;11067:27;11057:122;;11098:79;;:::i;:::-;11057:122;11215:6;11202:20;11240:78;11314:3;11306:6;11299:4;11291:6;11287:17;11240:78;:::i;:::-;11231:87;;11047:277;10986:338;;;;:::o;11330:797::-;11416:6;11424;11432;11481:2;11469:9;11460:7;11456:23;11452:32;11449:119;;;11487:79;;:::i;:::-;11449:119;11607:1;11632:53;11677:7;11668:6;11657:9;11653:22;11632:53;:::i;:::-;11622:63;;11578:117;11734:2;11760:53;11805:7;11796:6;11785:9;11781:22;11760:53;:::i;:::-;11750:63;;11705:118;11890:2;11879:9;11875:18;11862:32;11921:18;11913:6;11910:30;11907:117;;;11943:79;;:::i;:::-;11907:117;12048:62;12102:7;12093:6;12082:9;12078:22;12048:62;:::i;:::-;12038:72;;11833:287;11330:797;;;;;:::o;12133:118::-;12220:24;12238:5;12220:24;:::i;:::-;12215:3;12208:37;12133:118;;:::o;12257:222::-;12350:4;12388:2;12377:9;12373:18;12365:26;;12401:71;12469:1;12458:9;12454:17;12445:6;12401:71;:::i;:::-;12257:222;;;;:::o;12485:329::-;12544:6;12593:2;12581:9;12572:7;12568:23;12564:32;12561:119;;;12599:79;;:::i;:::-;12561:119;12719:1;12744:53;12789:7;12780:6;12769:9;12765:22;12744:53;:::i;:::-;12734:63;;12690:117;12485:329;;;;:::o;12820:::-;12879:6;12928:2;12916:9;12907:7;12903:23;12899:32;12896:119;;;12934:79;;:::i;:::-;12896:119;13054:1;13079:53;13124:7;13115:6;13104:9;13100:22;13079:53;:::i;:::-;13069:63;;13025:117;12820:329;;;;:::o;13155:::-;13214:6;13263:2;13251:9;13242:7;13238:23;13234:32;13231:119;;;13269:79;;:::i;:::-;13231:119;13389:1;13414:53;13459:7;13450:6;13439:9;13435:22;13414:53;:::i;:::-;13404:63;;13360:117;13155:329;;;;:::o;13490:619::-;13567:6;13575;13583;13632:2;13620:9;13611:7;13607:23;13603:32;13600:119;;;13638:79;;:::i;:::-;13600:119;13758:1;13783:53;13828:7;13819:6;13808:9;13804:22;13783:53;:::i;:::-;13773:63;;13729:117;13885:2;13911:53;13956:7;13947:6;13936:9;13932:22;13911:53;:::i;:::-;13901:63;;13856:118;14013:2;14039:53;14084:7;14075:6;14064:9;14060:22;14039:53;:::i;:::-;14029:63;;13984:118;13490:619;;;;;:::o;14115:118::-;14202:24;14220:5;14202:24;:::i;:::-;14197:3;14190:37;14115:118;;:::o;14239:222::-;14332:4;14370:2;14359:9;14355:18;14347:26;;14383:71;14451:1;14440:9;14436:17;14427:6;14383:71;:::i;:::-;14239:222;;;;:::o;14467:474::-;14535:6;14543;14592:2;14580:9;14571:7;14567:23;14563:32;14560:119;;;14598:79;;:::i;:::-;14560:119;14718:1;14743:53;14788:7;14779:6;14768:9;14764:22;14743:53;:::i;:::-;14733:63;;14689:117;14845:2;14871:53;14916:7;14907:6;14896:9;14892:22;14871:53;:::i;:::-;14861:63;;14816:118;14467:474;;;;;:::o;14947:943::-;15042:6;15050;15058;15066;15115:3;15103:9;15094:7;15090:23;15086:33;15083:120;;;15122:79;;:::i;:::-;15083:120;15242:1;15267:53;15312:7;15303:6;15292:9;15288:22;15267:53;:::i;:::-;15257:63;;15213:117;15369:2;15395:53;15440:7;15431:6;15420:9;15416:22;15395:53;:::i;:::-;15385:63;;15340:118;15497:2;15523:53;15568:7;15559:6;15548:9;15544:22;15523:53;:::i;:::-;15513:63;;15468:118;15653:2;15642:9;15638:18;15625:32;15684:18;15676:6;15673:30;15670:117;;;15706:79;;:::i;:::-;15670:117;15811:62;15865:7;15856:6;15845:9;15841:22;15811:62;:::i;:::-;15801:72;;15596:287;14947:943;;;;;;;:::o;15896:1116::-;16029:6;16037;16045;16053;16061;16069;16118:3;16106:9;16097:7;16093:23;16089:33;16086:120;;;16125:79;;:::i;:::-;16086:120;16245:1;16270:53;16315:7;16306:6;16295:9;16291:22;16270:53;:::i;:::-;16260:63;;16216:117;16372:2;16398:53;16443:7;16434:6;16423:9;16419:22;16398:53;:::i;:::-;16388:63;;16343:118;16500:2;16526:84;16602:7;16593:6;16582:9;16578:22;16526:84;:::i;:::-;16516:94;;16471:149;16659:3;16686:51;16729:7;16720:6;16709:9;16705:22;16686:51;:::i;:::-;16676:61;;16630:117;16786:3;16813:53;16858:7;16849:6;16838:9;16834:22;16813:53;:::i;:::-;16803:63;;16757:119;16915:3;16942:53;16987:7;16978:6;16967:9;16963:22;16942:53;:::i;:::-;16932:63;;16886:119;15896:1116;;;;;;;;:::o;17018:474::-;17086:6;17094;17143:2;17131:9;17122:7;17118:23;17114:32;17111:119;;;17149:79;;:::i;:::-;17111:119;17269:1;17294:53;17339:7;17330:6;17319:9;17315:22;17294:53;:::i;:::-;17284:63;;17240:117;17396:2;17422:53;17467:7;17458:6;17447:9;17443:22;17422:53;:::i;:::-;17412:63;;17367:118;17018:474;;;;;:::o;17498:233::-;17638:34;17634:1;17626:6;17622:14;17615:58;17707:16;17702:2;17694:6;17690:15;17683:41;17498:233;:::o;17737:366::-;17879:3;17900:67;17964:2;17959:3;17900:67;:::i;:::-;17893:74;;17976:93;18065:3;17976:93;:::i;:::-;18094:2;18089:3;18085:12;18078:19;;17737:366;;;:::o;18109:419::-;18275:4;18313:2;18302:9;18298:18;18290:26;;18362:9;18356:4;18352:20;18348:1;18337:9;18333:17;18326:47;18390:131;18516:4;18390:131;:::i;:::-;18382:139;;18109:419;;;:::o;18534:120::-;18606:23;18623:5;18606:23;:::i;:::-;18599:5;18596:34;18586:62;;18644:1;18641;18634:12;18586:62;18534:120;:::o;18660:141::-;18716:5;18747:6;18741:13;18732:22;;18763:32;18789:5;18763:32;:::i;:::-;18660:141;;;;:::o;18807:120::-;18879:23;18896:5;18879:23;:::i;:::-;18872:5;18869:34;18859:62;;18917:1;18914;18907:12;18859:62;18807:120;:::o;18933:141::-;18989:5;19020:6;19014:13;19005:22;;19036:32;19062:5;19036:32;:::i;:::-;18933:141;;;;:::o;19080:143::-;19137:5;19168:6;19162:13;19153:22;;19184:33;19211:5;19184:33;:::i;:::-;19080:143;;;;:::o;19229:971::-;19332:6;19340;19348;19356;19364;19413:3;19401:9;19392:7;19388:23;19384:33;19381:120;;;19420:79;;:::i;:::-;19381:120;19540:1;19565:63;19620:7;19611:6;19600:9;19596:22;19565:63;:::i;:::-;19555:73;;19511:127;19677:2;19703:63;19758:7;19749:6;19738:9;19734:22;19703:63;:::i;:::-;19693:73;;19648:128;19815:2;19841:64;19897:7;19888:6;19877:9;19873:22;19841:64;:::i;:::-;19831:74;;19786:129;19954:2;19980:64;20036:7;20027:6;20016:9;20012:22;19980:64;:::i;:::-;19970:74;;19925:129;20093:3;20120:63;20175:7;20166:6;20155:9;20151:22;20120:63;:::i;:::-;20110:73;;20064:129;19229:971;;;;;;;;:::o;20206:545::-;20379:4;20417:3;20406:9;20402:19;20394:27;;20431:71;20499:1;20488:9;20484:17;20475:6;20431:71;:::i;:::-;20512:68;20576:2;20565:9;20561:18;20552:6;20512:68;:::i;:::-;20590:72;20658:2;20647:9;20643:18;20634:6;20590:72;:::i;:::-;20672;20740:2;20729:9;20725:18;20716:6;20672:72;:::i;:::-;20206:545;;;;;;;:::o;20757:159::-;20897:11;20893:1;20885:6;20881:14;20874:35;20757:159;:::o;20922:365::-;21064:3;21085:66;21149:1;21144:3;21085:66;:::i;:::-;21078:73;;21160:93;21249:3;21160:93;:::i;:::-;21278:2;21273:3;21269:12;21262:19;;20922:365;;;:::o;21293:419::-;21459:4;21497:2;21486:9;21482:18;21474:26;;21546:9;21540:4;21536:20;21532:1;21521:9;21517:17;21510:47;21574:131;21700:4;21574:131;:::i;:::-;21566:139;;21293:419;;;:::o;21718:442::-;21867:4;21905:2;21894:9;21890:18;21882:26;;21918:71;21986:1;21975:9;21971:17;21962:6;21918:71;:::i;:::-;21999:72;22067:2;22056:9;22052:18;22043:6;21999:72;:::i;:::-;22081;22149:2;22138:9;22134:18;22125:6;22081:72;:::i;:::-;21718:442;;;;;;:::o;22166:182::-;22306:34;22302:1;22294:6;22290:14;22283:58;22166:182;:::o;22354:366::-;22496:3;22517:67;22581:2;22576:3;22517:67;:::i;:::-;22510:74;;22593:93;22682:3;22593:93;:::i;:::-;22711:2;22706:3;22702:12;22695:19;;22354:366;;;:::o;22726:419::-;22892:4;22930:2;22919:9;22915:18;22907:26;;22979:9;22973:4;22969:20;22965:1;22954:9;22950:17;22943:47;23007:131;23133:4;23007:131;:::i;:::-;22999:139;;22726:419;;;:::o;23151:225::-;23291:34;23287:1;23279:6;23275:14;23268:58;23360:8;23355:2;23347:6;23343:15;23336:33;23151:225;:::o;23382:366::-;23524:3;23545:67;23609:2;23604:3;23545:67;:::i;:::-;23538:74;;23621:93;23710:3;23621:93;:::i;:::-;23739:2;23734:3;23730:12;23723:19;;23382:366;;;:::o;23754:419::-;23920:4;23958:2;23947:9;23943:18;23935:26;;24007:9;24001:4;23997:20;23993:1;23982:9;23978:17;23971:47;24035:131;24161:4;24035:131;:::i;:::-;24027:139;;23754:419;;;:::o;24179:221::-;24319:34;24315:1;24307:6;24303:14;24296:58;24388:4;24383:2;24375:6;24371:15;24364:29;24179:221;:::o;24406:366::-;24548:3;24569:67;24633:2;24628:3;24569:67;:::i;:::-;24562:74;;24645:93;24734:3;24645:93;:::i;:::-;24763:2;24758:3;24754:12;24747:19;;24406:366;;;:::o;24778:419::-;24944:4;24982:2;24971:9;24967:18;24959:26;;25031:9;25025:4;25021:20;25017:1;25006:9;25002:17;24995:47;25059:131;25185:4;25059:131;:::i;:::-;25051:139;;24778:419;;;:::o;25203:233::-;25343:34;25339:1;25331:6;25327:14;25320:58;25412:16;25407:2;25399:6;25395:15;25388:41;25203:233;:::o;25442:366::-;25584:3;25605:67;25669:2;25664:3;25605:67;:::i;:::-;25598:74;;25681:93;25770:3;25681:93;:::i;:::-;25799:2;25794:3;25790:12;25783:19;;25442:366;;;:::o;25814:419::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:332::-;26360:4;26398:2;26387:9;26383:18;26375:26;;26411:71;26479:1;26468:9;26464:17;26455:6;26411:71;:::i;:::-;26492:72;26560:2;26549:9;26545:18;26536:6;26492:72;:::i;:::-;26239:332;;;;;:::o;26577:116::-;26647:21;26662:5;26647:21;:::i;:::-;26640:5;26637:32;26627:60;;26683:1;26680;26673:12;26627:60;26577:116;:::o;26699:137::-;26753:5;26784:6;26778:13;26769:22;;26800:30;26824:5;26800:30;:::i;:::-;26699:137;;;;:::o;26842:345::-;26909:6;26958:2;26946:9;26937:7;26933:23;26929:32;26926:119;;;26964:79;;:::i;:::-;26926:119;27084:1;27109:61;27162:7;27153:6;27142:9;27138:22;27109:61;:::i;:::-;27099:71;;27055:125;26842:345;;;;:::o;27193:234::-;27333:34;27329:1;27321:6;27317:14;27310:58;27402:17;27397:2;27389:6;27385:15;27378:42;27193:234;:::o;27433:366::-;27575:3;27596:67;27660:2;27655:3;27596:67;:::i;:::-;27589:74;;27672:93;27761:3;27672:93;:::i;:::-;27790:2;27785:3;27781:12;27774:19;;27433:366;;;:::o;27805:419::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:176::-;28370:28;28366:1;28358:6;28354:14;28347:52;28230:176;:::o;28412:366::-;28554:3;28575:67;28639:2;28634:3;28575:67;:::i;:::-;28568:74;;28651:93;28740:3;28651:93;:::i;:::-;28769:2;28764:3;28760:12;28753:19;;28412:366;;;:::o;28784:419::-;28950:4;28988:2;28977:9;28973:18;28965:26;;29037:9;29031:4;29027:20;29023:1;29012:9;29008:17;29001:47;29065:131;29191:4;29065:131;:::i;:::-;29057:139;;28784:419;;;:::o;29209:180::-;29257:77;29254:1;29247:88;29354:4;29351:1;29344:15;29378:4;29375:1;29368:15;29395:233;29434:3;29457:24;29475:5;29457:24;:::i;:::-;29448:33;;29503:66;29496:5;29493:77;29490:103;;29573:18;;:::i;:::-;29490:103;29620:1;29613:5;29609:13;29602:20;;29395:233;;;:::o;29634:104::-;29679:7;29708:24;29726:5;29708:24;:::i;:::-;29697:35;;29634:104;;;:::o;29744:138::-;29825:32;29851:5;29825:32;:::i;:::-;29818:5;29815:43;29805:71;;29872:1;29869;29862:12;29805:71;29744:138;:::o;29888:155::-;29942:5;29980:6;29967:20;29958:29;;29996:41;30031:5;29996:41;:::i;:::-;29888:155;;;;:::o;30049:345::-;30116:6;30165:2;30153:9;30144:7;30140:23;30136:32;30133:119;;;30171:79;;:::i;:::-;30133:119;30291:1;30316:61;30369:7;30360:6;30349:9;30345:22;30316:61;:::i;:::-;30306:71;;30262:125;30049:345;;;;:::o;30400:142::-;30503:32;30529:5;30503:32;:::i;:::-;30498:3;30491:45;30400:142;;:::o;30548:364::-;30685:4;30723:2;30712:9;30708:18;30700:26;;30736:87;30820:1;30809:9;30805:17;30796:6;30736:87;:::i;:::-;30833:72;30901:2;30890:9;30886:18;30877:6;30833:72;:::i;:::-;30548:364;;;;;:::o;30918:98::-;30969:6;31003:5;30997:12;30987:22;;30918:98;;;:::o;31022:147::-;31123:11;31160:3;31145:18;;31022:147;;;;:::o;31175:373::-;31279:3;31307:38;31339:5;31307:38;:::i;:::-;31361:88;31442:6;31437:3;31361:88;:::i;:::-;31354:95;;31458:52;31503:6;31498:3;31491:4;31484:5;31480:16;31458:52;:::i;:::-;31535:6;31530:3;31526:16;31519:23;;31283:265;31175:373;;;;:::o;31554:271::-;31684:3;31706:93;31795:3;31786:6;31706:93;:::i;:::-;31699:100;;31816:3;31809:10;;31554:271;;;;:::o;31831:168::-;31914:11;31948:6;31943:3;31936:19;31988:4;31983:3;31979:14;31964:29;;31831:168;;;;:::o;32005:360::-;32091:3;32119:38;32151:5;32119:38;:::i;:::-;32173:70;32236:6;32231:3;32173:70;:::i;:::-;32166:77;;32252:52;32297:6;32292:3;32285:4;32278:5;32274:16;32252:52;:::i;:::-;32329:29;32351:6;32329:29;:::i;:::-;32324:3;32320:39;32313:46;;32095:270;32005:360;;;;:::o;32371:407::-;32504:4;32542:2;32531:9;32527:18;32519:26;;32555:65;32617:1;32606:9;32602:17;32593:6;32555:65;:::i;:::-;32667:9;32661:4;32657:20;32652:2;32641:9;32637:18;32630:48;32695:76;32766:4;32757:6;32695:76;:::i;:::-;32687:84;;32371:407;;;;;:::o;32784:224::-;32924:34;32920:1;32912:6;32908:14;32901:58;32993:7;32988:2;32980:6;32976:15;32969:32;32784:224;:::o;33014:366::-;33156:3;33177:67;33241:2;33236:3;33177:67;:::i;:::-;33170:74;;33253:93;33342:3;33253:93;:::i;:::-;33371:2;33366:3;33362:12;33355:19;;33014:366;;;:::o;33386:419::-;33552:4;33590:2;33579:9;33575:18;33567:26;;33639:9;33633:4;33629:20;33625:1;33614:9;33610:17;33603:47;33667:131;33793:4;33667:131;:::i;:::-;33659:139;;33386:419;;;:::o;33811:225::-;33951:34;33947:1;33939:6;33935:14;33928:58;34020:8;34015:2;34007:6;34003:15;33996:33;33811:225;:::o;34042:366::-;34184:3;34205:67;34269:2;34264:3;34205:67;:::i;:::-;34198:74;;34281:93;34370:3;34281:93;:::i;:::-;34399:2;34394:3;34390:12;34383:19;;34042:366;;;:::o;34414:419::-;34580:4;34618:2;34607:9;34603:18;34595:26;;34667:9;34661:4;34657:20;34653:1;34642:9;34638:17;34631:47;34695:131;34821:4;34695:131;:::i;:::-;34687:139;;34414:419;;;:::o;34839:181::-;34979:33;34975:1;34967:6;34963:14;34956:57;34839:181;:::o;35026:366::-;35168:3;35189:67;35253:2;35248:3;35189:67;:::i;:::-;35182:74;;35265:93;35354:3;35265:93;:::i;:::-;35383:2;35378:3;35374:12;35367:19;;35026:366;;;:::o;35398:419::-;35564:4;35602:2;35591:9;35587:18;35579:26;;35651:9;35645:4;35641:20;35637:1;35626:9;35622:17;35615:47;35679:131;35805:4;35679:131;:::i;:::-;35671:139;;35398:419;;;:::o;35823:305::-;35863:3;35882:20;35900:1;35882:20;:::i;:::-;35877:25;;35916:20;35934:1;35916:20;:::i;:::-;35911:25;;36070:1;36002:66;35998:74;35995:1;35992:81;35989:107;;;36076:18;;:::i;:::-;35989:107;36120:1;36117;36113:9;36106:16;;35823:305;;;;:::o;36134:177::-;36274:29;36270:1;36262:6;36258:14;36251:53;36134:177;:::o;36317:366::-;36459:3;36480:67;36544:2;36539:3;36480:67;:::i;:::-;36473:74;;36556:93;36645:3;36556:93;:::i;:::-;36674:2;36669:3;36665:12;36658:19;;36317:366;;;:::o;36689:419::-;36855:4;36893:2;36882:9;36878:18;36870:26;;36942:9;36936:4;36932:20;36928:1;36917:9;36913:17;36906:47;36970:131;37096:4;36970:131;:::i;:::-;36962:139;;36689:419;;;:::o;37114:229::-;37254:34;37250:1;37242:6;37238:14;37231:58;37323:12;37318:2;37310:6;37306:15;37299:37;37114:229;:::o;37349:366::-;37491:3;37512:67;37576:2;37571:3;37512:67;:::i;:::-;37505:74;;37588:93;37677:3;37588:93;:::i;:::-;37706:2;37701:3;37697:12;37690:19;;37349:366;;;:::o;37721:419::-;37887:4;37925:2;37914:9;37910:18;37902:26;;37974:9;37968:4;37964:20;37960:1;37949:9;37945:17;37938:47;38002:131;38128:4;38002:131;:::i;:::-;37994:139;;37721:419;;;:::o;38146:223::-;38286:34;38282:1;38274:6;38270:14;38263:58;38355:6;38350:2;38342:6;38338:15;38331:31;38146:223;:::o;38375:366::-;38517:3;38538:67;38602:2;38597:3;38538:67;:::i;:::-;38531:74;;38614:93;38703:3;38614:93;:::i;:::-;38732:2;38727:3;38723:12;38716:19;;38375:366;;;:::o;38747:419::-;38913:4;38951:2;38940:9;38936:18;38928:26;;39000:9;38994:4;38990:20;38986:1;38975:9;38971:17;38964:47;39028:131;39154:4;39028:131;:::i;:::-;39020:139;;38747:419;;;:::o;39172:221::-;39312:34;39308:1;39300:6;39296:14;39289:58;39381:4;39376:2;39368:6;39364:15;39357:29;39172:221;:::o;39399:366::-;39541:3;39562:67;39626:2;39621:3;39562:67;:::i;:::-;39555:74;;39638:93;39727:3;39638:93;:::i;:::-;39756:2;39751:3;39747:12;39740:19;;39399:366;;;:::o;39771:419::-;39937:4;39975:2;39964:9;39960:18;39952:26;;40024:9;40018:4;40014:20;40010:1;39999:9;39995:17;39988:47;40052:131;40178:4;40052:131;:::i;:::-;40044:139;;39771:419;;;:::o;40196:161::-;40317:7;40346:5;40335:16;;40196:161;;;:::o;40363:60::-;40391:3;40412:5;40405:12;;40363:60;;;:::o;40429:310::-;40563:9;40596:137;40614:118;40623:108;40725:5;40623:108;:::i;:::-;40614:118;:::i;:::-;40596:137;:::i;:::-;40583:150;;40429:310;;;:::o;40745:299::-;40916:121;41031:5;40916:121;:::i;:::-;40911:3;40904:134;40745:299;;:::o;41050:753::-;41327:4;41365:3;41354:9;41350:19;41342:27;;41379:155;41531:1;41520:9;41516:17;41507:6;41379:155;:::i;:::-;41544:88;41628:2;41617:9;41613:18;41604:6;41544:88;:::i;:::-;41642:72;41710:2;41699:9;41695:18;41686:6;41642:72;:::i;:::-;41724;41792:2;41781:9;41777:18;41768:6;41724:72;:::i;:::-;41050:753;;;;;;;:::o;41809:149::-;41845:7;41885:66;41878:5;41874:78;41863:89;;41809:149;;;:::o;41964:78::-;42002:7;42031:5;42020:16;;41964:78;;;:::o;42048:153::-;42151:43;42170:23;42187:5;42170:23;:::i;:::-;42151:43;:::i;:::-;42146:3;42139:56;42048:153;;:::o;42207:79::-;42246:7;42275:5;42264:16;;42207:79;;;:::o;42292:157::-;42397:45;42417:24;42435:5;42417:24;:::i;:::-;42397:45;:::i;:::-;42392:3;42385:58;42292:157;;:::o;42455:669::-;42647:3;42662:73;42731:3;42722:6;42662:73;:::i;:::-;42760:1;42755:3;42751:11;42744:18;;42772:73;42841:3;42832:6;42772:73;:::i;:::-;42870:1;42865:3;42861:11;42854:18;;42882:75;42953:3;42944:6;42882:75;:::i;:::-;42982:2;42977:3;42973:12;42966:19;;42995:75;43066:3;43057:6;42995:75;:::i;:::-;43095:2;43090:3;43086:12;43079:19;;43115:3;43108:10;;42455:669;;;;;;;:::o;43130:224::-;43270:34;43266:1;43258:6;43254:14;43247:58;43339:7;43334:2;43326:6;43322:15;43315:32;43130:224;:::o;43360:366::-;43502:3;43523:67;43587:2;43582:3;43523:67;:::i;:::-;43516:74;;43599:93;43688:3;43599:93;:::i;:::-;43717:2;43712:3;43708:12;43701:19;;43360:366;;;:::o;43732:419::-;43898:4;43936:2;43925:9;43921:18;43913:26;;43985:9;43979:4;43975:20;43971:1;43960:9;43956:17;43949:47;44013:131;44139:4;44013:131;:::i;:::-;44005:139;;43732:419;;;:::o;44157:222::-;44297:34;44293:1;44285:6;44281:14;44274:58;44366:5;44361:2;44353:6;44349:15;44342:30;44157:222;:::o;44385:366::-;44527:3;44548:67;44612:2;44607:3;44548:67;:::i;:::-;44541:74;;44624:93;44713:3;44624:93;:::i;:::-;44742:2;44737:3;44733:12;44726:19;;44385:366;;;:::o;44757:419::-;44923:4;44961:2;44950:9;44946:18;44938:26;;45010:9;45004:4;45000:20;44996:1;44985:9;44981:17;44974:47;45038:131;45164:4;45038:131;:::i;:::-;45030:139;;44757:419;;;:::o;45182:228::-;45322:34;45318:1;45310:6;45306:14;45299:58;45391:11;45386:2;45378:6;45374:15;45367:36;45182:228;:::o;45416:366::-;45558:3;45579:67;45643:2;45638:3;45579:67;:::i;:::-;45572:74;;45655:93;45744:3;45655:93;:::i;:::-;45773:2;45768:3;45764:12;45757:19;;45416:366;;;:::o;45788:419::-;45954:4;45992:2;45981:9;45977:18;45969:26;;46041:9;46035:4;46031:20;46027:1;46016:9;46012:17;46005:47;46069:131;46195:4;46069:131;:::i;:::-;46061:139;;45788:419;;;:::o;46213:225::-;46353:34;46349:1;46341:6;46337:14;46330:58;46422:8;46417:2;46409:6;46405:15;46398:33;46213:225;:::o;46444:366::-;46586:3;46607:67;46671:2;46666:3;46607:67;:::i;:::-;46600:74;;46683:93;46772:3;46683:93;:::i;:::-;46801:2;46796:3;46792:12;46785:19;;46444:366;;;:::o;46816:419::-;46982:4;47020:2;47009:9;47005:18;46997:26;;47069:9;47063:4;47059:20;47055:1;47044:9;47040:17;47033:47;47097:131;47223:4;47097:131;:::i;:::-;47089:139;;46816:419;;;:::o;47241:191::-;47281:4;47301:20;47319:1;47301:20;:::i;:::-;47296:25;;47335:20;47353:1;47335:20;:::i;:::-;47330:25;;47374:1;47371;47368:8;47365:34;;;47379:18;;:::i;:::-;47365:34;47424:1;47421;47417:9;47409:17;;47241:191;;;;:::o;47438:170::-;47578:22;47574:1;47566:6;47562:14;47555:46;47438:170;:::o;47614:366::-;47756:3;47777:67;47841:2;47836:3;47777:67;:::i;:::-;47770:74;;47853:93;47942:3;47853:93;:::i;:::-;47971:2;47966:3;47962:12;47955:19;;47614:366;;;:::o;47986:419::-;48152:4;48190:2;48179:9;48175:18;48167:26;;48239:9;48233:4;48229:20;48225:1;48214:9;48210:17;48203:47;48267:131;48393:4;48267:131;:::i;:::-;48259:139;;47986:419;;;:::o;48411:142::-;48461:9;48494:53;48512:34;48521:24;48539:5;48521:24;:::i;:::-;48512:34;:::i;:::-;48494:53;:::i;:::-;48481:66;;48411:142;;;:::o;48559:126::-;48609:9;48642:37;48673:5;48642:37;:::i;:::-;48629:50;;48559:126;;;:::o;48691:134::-;48749:9;48782:37;48813:5;48782:37;:::i;:::-;48769:50;;48691:134;;;:::o;48831:147::-;48926:45;48965:5;48926:45;:::i;:::-;48921:3;48914:58;48831:147;;:::o;48984:238::-;49085:4;49123:2;49112:9;49108:18;49100:26;;49136:79;49212:1;49201:9;49197:17;49188:6;49136:79;:::i;:::-;48984:238;;;;:::o;49228:656::-;49431:4;49469:3;49458:9;49454:19;49446:27;;49483:79;49559:1;49548:9;49544:17;49535:6;49483:79;:::i;:::-;49572:72;49640:2;49629:9;49625:18;49616:6;49572:72;:::i;:::-;49654;49722:2;49711:9;49707:18;49698:6;49654:72;:::i;:::-;49773:9;49767:4;49763:20;49758:2;49747:9;49743:18;49736:48;49801:76;49872:4;49863:6;49801:76;:::i;:::-;49793:84;;49228:656;;;;;;;:::o;49890:141::-;49946:5;49977:6;49971:13;49962:22;;49993:32;50019:5;49993:32;:::i;:::-;49890:141;;;;:::o;50037:349::-;50106:6;50155:2;50143:9;50134:7;50130:23;50126:32;50123:119;;;50161:79;;:::i;:::-;50123:119;50281:1;50306:63;50361:7;50352:6;50341:9;50337:22;50306:63;:::i;:::-;50296:73;;50252:127;50037:349;;;;:::o;50392:232::-;50532:34;50528:1;50520:6;50516:14;50509:58;50601:15;50596:2;50588:6;50584:15;50577:40;50392:232;:::o;50630:366::-;50772:3;50793:67;50857:2;50852:3;50793:67;:::i;:::-;50786:74;;50869:93;50958:3;50869:93;:::i;:::-;50987:2;50982:3;50978:12;50971:19;;50630:366;;;:::o;51002:419::-;51168:4;51206:2;51195:9;51191:18;51183:26;;51255:9;51249:4;51245:20;51241:1;51230:9;51226:17;51219:47;51283:131;51409:4;51283:131;:::i;:::-;51275:139;;51002:419;;;:::o;51427:220::-;51567:34;51563:1;51555:6;51551:14;51544:58;51636:3;51631:2;51623:6;51619:15;51612:28;51427:220;:::o;51653:366::-;51795:3;51816:67;51880:2;51875:3;51816:67;:::i;:::-;51809:74;;51892:93;51981:3;51892:93;:::i;:::-;52010:2;52005:3;52001:12;51994:19;;51653:366;;;:::o;52025:419::-;52191:4;52229:2;52218:9;52214:18;52206:26;;52278:9;52272:4;52268:20;52264:1;52253:9;52249:17;52242:47;52306:131;52432:4;52306:131;:::i;:::-;52298:139;;52025:419;;;:::o;52450:166::-;52590:18;52586:1;52578:6;52574:14;52567:42;52450:166;:::o;52622:366::-;52764:3;52785:67;52849:2;52844:3;52785:67;:::i;:::-;52778:74;;52861:93;52950:3;52861:93;:::i;:::-;52979:2;52974:3;52970:12;52963:19;;52622:366;;;:::o;52994:419::-;53160:4;53198:2;53187:9;53183:18;53175:26;;53247:9;53241:4;53237:20;53233:1;53222:9;53218:17;53211:47;53275:131;53401:4;53275:131;:::i;:::-;53267:139;;52994:419;;;:::o;53419:180::-;53559:32;53555:1;53547:6;53543:14;53536:56;53419:180;:::o;53605:366::-;53747:3;53768:67;53832:2;53827:3;53768:67;:::i;:::-;53761:74;;53844:93;53933:3;53844:93;:::i;:::-;53962:2;53957:3;53953:12;53946:19;;53605:366;;;:::o;53977:419::-;54143:4;54181:2;54170:9;54166:18;54158:26;;54230:9;54224:4;54220:20;54216:1;54205:9;54201:17;54194:47;54258:131;54384:4;54258:131;:::i;:::-;54250:139;;53977:419;;;:::o;54402:545::-;54577:4;54615:2;54604:9;54600:18;54592:26;;54628:79;54704:1;54693:9;54689:17;54680:6;54628:79;:::i;:::-;54717:72;54785:2;54774:9;54770:18;54761:6;54717:72;:::i;:::-;54836:9;54830:4;54826:20;54821:2;54810:9;54806:18;54799:48;54864:76;54935:4;54926:6;54864:76;:::i;:::-;54856:84;;54402:545;;;;;;:::o;54953:221::-;55093:34;55089:1;55081:6;55077:14;55070:58;55162:4;55157:2;55149:6;55145:15;55138:29;54953:221;:::o;55180:366::-;55322:3;55343:67;55407:2;55402:3;55343:67;:::i;:::-;55336:74;;55419:93;55508:3;55419:93;:::i;:::-;55537:2;55532:3;55528:12;55521:19;;55180:366;;;:::o;55552:419::-;55718:4;55756:2;55745:9;55741:18;55733:26;;55805:9;55799:4;55795:20;55791:1;55780:9;55776:17;55769:47;55833:131;55959:4;55833:131;:::i;:::-;55825:139;;55552:419;;;:::o;55977:180::-;56025:77;56022:1;56015:88;56122:4;56119:1;56112:15;56146:4;56143:1;56136:15;56163:180;56211:77;56208:1;56201:88;56308:4;56305:1;56298:15;56332:4;56329:1;56322:15

Swarm Source

ipfs://198327c908ec5939dbccd03a4645e2e3cd678a1caca53e7e7d0afc1666603dcf
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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