Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 63 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 17749382 | 957 days ago | IN | 0 ETH | 0.00096358 | ||||
| Approve | 17749361 | 957 days ago | IN | 0 ETH | 0.00104649 | ||||
| Approve | 17749348 | 957 days ago | IN | 0 ETH | 0.0011821 | ||||
| Approve | 17749337 | 957 days ago | IN | 0 ETH | 0.00108672 | ||||
| Approve | 17749318 | 957 days ago | IN | 0 ETH | 0.0011102 | ||||
| Approve | 17749318 | 957 days ago | IN | 0 ETH | 0.00120742 | ||||
| Approve | 17749317 | 957 days ago | IN | 0 ETH | 0.00129796 | ||||
| Approve | 17749308 | 957 days ago | IN | 0 ETH | 0.00128469 | ||||
| Approve | 17749307 | 957 days ago | IN | 0 ETH | 0.00133406 | ||||
| Renounce Ownersh... | 17749302 | 957 days ago | IN | 0 ETH | 0.00059607 | ||||
| Approve | 17749296 | 957 days ago | IN | 0 ETH | 0.00133059 | ||||
| Approve | 17749295 | 957 days ago | IN | 0 ETH | 0.00140506 | ||||
| Update Sell Fees | 17749294 | 957 days ago | IN | 0 ETH | 0.00112738 | ||||
| Set Fees | 17749292 | 957 days ago | IN | 0 ETH | 0.00120529 | ||||
| Set Fees | 17749288 | 957 days ago | IN | 0 ETH | 0.00114242 | ||||
| Approve | 17749287 | 957 days ago | IN | 0 ETH | 0.00157375 | ||||
| Approve | 17749287 | 957 days ago | IN | 0 ETH | 0.00157375 | ||||
| Approve | 17749284 | 957 days ago | IN | 0 ETH | 0.00157848 | ||||
| Set Fees | 17749283 | 957 days ago | IN | 0 ETH | 0.00135182 | ||||
| Approve | 17749276 | 957 days ago | IN | 0 ETH | 0.0012518 | ||||
| Approve | 17749276 | 957 days ago | IN | 0 ETH | 0.00134637 | ||||
| Approve | 17749276 | 957 days ago | IN | 0 ETH | 0.00134637 | ||||
| Approve | 17749275 | 957 days ago | IN | 0 ETH | 0.00128835 | ||||
| Approve | 17749275 | 957 days ago | IN | 0 ETH | 0.00128835 | ||||
| Approve | 17749274 | 957 days ago | IN | 0 ETH | 0.00131654 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 17754721 | 956 days ago | 0.00084836 ETH | ||||
| Transfer | 17754721 | 956 days ago | 0.00084836 ETH | ||||
| Transfer | 17754721 | 956 days ago | 0.00169673 ETH | ||||
| Transfer | 17751141 | 956 days ago | 0.00090121 ETH | ||||
| Transfer | 17751141 | 956 days ago | 0.00090121 ETH | ||||
| Transfer | 17751141 | 956 days ago | 0.00180242 ETH | ||||
| Transfer | 17749820 | 957 days ago | 0.00097642 ETH | ||||
| Transfer | 17749820 | 957 days ago | 0.00097642 ETH | ||||
| Transfer | 17749820 | 957 days ago | 0.00195285 ETH | ||||
| Transfer | 17749763 | 957 days ago | 0.00105704 ETH | ||||
| Transfer | 17749763 | 957 days ago | 0.00105704 ETH | ||||
| Transfer | 17749763 | 957 days ago | 0.00211408 ETH | ||||
| Transfer | 17749763 | 957 days ago | 0.00105877 ETH | ||||
| Transfer | 17749763 | 957 days ago | 0.00105877 ETH | ||||
| Transfer | 17749763 | 957 days ago | 0.00211755 ETH | ||||
| Transfer | 17749403 | 957 days ago | 0.0013388 ETH | ||||
| Transfer | 17749403 | 957 days ago | 0.0013388 ETH | ||||
| Transfer | 17749403 | 957 days ago | 0.00267761 ETH | ||||
| Transfer | 17749379 | 957 days ago | 0.00151963 ETH | ||||
| Transfer | 17749379 | 957 days ago | 0.00151963 ETH | ||||
| Transfer | 17749379 | 957 days ago | 0.00303926 ETH | ||||
| Transfer | 17749369 | 957 days ago | 0.00153186 ETH | ||||
| Transfer | 17749369 | 957 days ago | 0.00153186 ETH | ||||
| Transfer | 17749369 | 957 days ago | 0.00306373 ETH | ||||
| Transfer | 17749369 | 957 days ago | 0.00169409 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TETA
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-07-22
*/
/*
https://t.me/TetaETH
https://twitter.com/TetaTokenETH
*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;
////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
/* pragma solidity ^0.8.0; */
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)
/* pragma solidity ^0.8.0; */
/* import "../utils/Context.sol"; */
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)
/* pragma solidity ^0.8.0; */
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)
/* pragma solidity ^0.8.0; */
/* import "../IERC20.sol"; */
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)
/* pragma solidity ^0.8.0; */
/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
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, recipient, amount);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
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);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)
/* pragma solidity ^0.8.0; */
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to)
external
returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
/* pragma solidity >=0.8.10; */
/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */
contract TETA is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address public constant deadAddress = address(0xdead);
bool private swapping;
address public charityWallet;
address public marketingWallet;
address public devWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = true;
// Anti-bot and anti-whale mappings and variables
mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
bool public transferDelayEnabled = true;
uint256 public buyTotalFees;
uint256 public buyCharityFee;
uint256 public buyMarketingFee;
uint256 public buyLiquidityFee;
uint256 public buyDevFee;
uint256 public sellTotalFees;
uint256 public sellCharityFee;
uint256 public sellMarketingFee;
uint256 public sellLiquidityFee;
uint256 public sellDevFee;
uint256 public tokensForCharity;
uint256 public tokensForMarketing;
uint256 public tokensForLiquidity;
uint256 public tokensForDev;
/******************/
// exlcude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping(address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
constructor() ERC20("Token for the Ethical Treatment of Animals", "TETA") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
excludeFromMaxTransaction(address(uniswapV2Pair), true);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 _buyCharityFee = 2;
uint256 _buyMarketingFee = 18;
uint256 _buyLiquidityFee = 0;
uint256 _buyDevFee = 0;
uint256 _sellCharityFee = 2;
uint256 _sellMarketingFee = 28;
uint256 _sellLiquidityFee = 1;
uint256 _sellDevFee = 0;
uint256 totalSupply = 100_000_000 * 1e18;
maxTransactionAmount = 2_000_000 * 1e18; //2% from total supply maxTransactionAmountTxn
maxWallet =2_000_000 * 1e18; // 2% from total supply maxWallet
swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet
buyCharityFee = _buyCharityFee;
buyMarketingFee = _buyMarketingFee;
buyLiquidityFee = _buyLiquidityFee;
buyDevFee = _buyDevFee;
buyTotalFees = buyCharityFee + buyMarketingFee + buyLiquidityFee + buyDevFee;
sellCharityFee = _sellCharityFee;
sellMarketingFee = _sellMarketingFee;
sellLiquidityFee = _sellLiquidityFee;
sellDevFee = _sellDevFee;
sellTotalFees = sellCharityFee + sellMarketingFee + sellLiquidityFee + sellDevFee;
charityWallet = address(0x5476D5815D997c1C53a1CeE769906BFb6b412d02); // set as charity wallet
marketingWallet = address(0x2AAAc521332d54ab99979c1250bB82aDf5128aA6); // set as marketing wallet
devWallet = address(0x2AAAc521332d54ab99979c1250bB82aDf5128aA6); // set as dev wallet
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(0xdead), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, totalSupply);
}
receive() external payable {}
// once enabled, can never be turned off
function enableTrade() external onlyOwner {
tradingActive = true;
swapEnabled = true;
}
// remove limits after token is stable
function vanishLimits() external onlyOwner returns (bool) {
limitsInEffect = false;
return true;
}
// disable Transfer delay - cannot be reenabled
function disableTransferDelay() external onlyOwner returns (bool) {
transferDelayEnabled = false;
return true;
}
// change the minimum amount of tokens to sell from fees
function updateSwapTokensAtAmount(uint256 newAmount)
external
onlyOwner
returns (bool)
{
require(
newAmount >= (totalSupply() * 1) / 100000,
"Swap amount cannot be lower than 0.001% total supply."
);
require(
newAmount <= (totalSupply() * 5) / 1000,
"Swap amount cannot be higher than 0.5% total supply."
);
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 5) / 1000) / 1e18,
"Cannot set maxTransactionAmount lower than 0.5%"
);
maxTransactionAmount = newNum * (10**18);
}
function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 5) / 1000) / 1e18,
"Cannot set maxWallet lower than 0.5%"
);
maxWallet = newNum * (10**18);
}
function excludeFromMaxTransaction(address updAds, bool isEx)
public
onlyOwner
{
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
// only use to disable contract sales if absolutely necessary (emergency use only)
function updateSwapEnabled(bool enabled) external onlyOwner {
swapEnabled = enabled;
}
function setFees(
uint256 _charityFee,
uint256 _marketingFee,
uint256 _liquidityFee,
uint256 _devFee
) external onlyOwner {
require((_charityFee + _marketingFee + _liquidityFee + _devFee) <= 10, "Max BuyFee 10%");
buyCharityFee = _charityFee;
buyMarketingFee = _marketingFee;
buyLiquidityFee = _liquidityFee;
buyDevFee = _devFee;
buyTotalFees = buyCharityFee + buyMarketingFee + buyLiquidityFee + buyDevFee;
}
function updateSellFees(
uint256 _charityFee,
uint256 _marketingFee,
uint256 _liquidityFee,
uint256 _devFee
) external onlyOwner {
require((_charityFee + _marketingFee + _liquidityFee + _devFee) <= 10, "Max SellFee 10%");
sellCharityFee = _charityFee;
sellMarketingFee = _marketingFee;
sellLiquidityFee = _liquidityFee;
sellDevFee = _devFee;
sellTotalFees = sellCharityFee + sellMarketingFee + sellLiquidityFee + sellDevFee;
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
require(
pair != uniswapV2Pair,
"The pair cannot be removed from automatedMarketMakerPairs"
);
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsInEffect) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
) {
if (!tradingActive) {
require(
_isExcludedFromFees[from] || _isExcludedFromFees[to],
"Trading is not active."
);
}
// at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
if (transferDelayEnabled) {
if (
to != owner() &&
to != address(uniswapV2Router) &&
to != address(uniswapV2Pair)
) {
require(
_holderLastTransferTimestamp[tx.origin] <
block.number,
"_transfer:: Transfer Delay enabled. Only one purchase per block allowed."
);
_holderLastTransferTimestamp[tx.origin] = block.number;
}
}
//when buy
if (
automatedMarketMakerPairs[from] &&
!_isExcludedMaxTransactionAmount[to]
) {
require(
amount <= maxTransactionAmount,
"Buy transfer amount exceeds the maxTransactionAmount."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] &&
!_isExcludedMaxTransactionAmount[from]
) {
require(
amount <= maxTransactionAmount,
"Sell transfer amount exceeds the maxTransactionAmount."
);
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
fees = amount.mul(sellTotalFees).div(100);
tokensForCharity += (fees * sellCharityFee) / sellTotalFees;
tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
tokensForDev += (fees * sellDevFee) / sellTotalFees;
tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(100);
tokensForCharity += (fees * buyCharityFee) / buyTotalFees;
tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
tokensForDev += (fees * buyDevFee) / buyTotalFees;
tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
devWallet,
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForCharity + tokensForLiquidity + tokensForMarketing + tokensForDev;
bool success;
if (contractBalance == 0 || totalTokensToSwap == 0) {
return;
}
if (contractBalance > swapTokensAtAmount * 20) {
contractBalance = swapTokensAtAmount * 20;
}
// Halve the amount of liquidity tokens
uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
uint256 initialETHBalance = address(this).balance;
swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance.sub(initialETHBalance);
uint256 ethForCharity = ethBalance.mul(tokensForCharity).div(totalTokensToSwap);
uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
uint256 ethForLiquidity = ethBalance - ethForCharity - ethForMarketing - ethForDev;
tokensForLiquidity = 0;
tokensForCharity = 0;
tokensForMarketing = 0;
tokensForDev = 0;
(success, ) = address(devWallet).call{value: ethForDev}("");
(success, ) = address(marketingWallet).call{value: ethForMarketing}("");
if (liquidityTokens > 0 && ethForLiquidity > 0) {
addLiquidity(liquidityTokens, ethForLiquidity);
emit SwapAndLiquify(
amountToSwapForETH,
ethForLiquidity,
tokensForLiquidity
);
}
(success, ) = address(charityWallet).call{value: address(this).balance}("");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","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":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vanishLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060600160405280602a81526020016200612d602a91396040518060400160405280600481526020017f54455441000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e692919062000b57565b508060049080519060200190620000ff92919062000b57565b50505062000122620001166200061760201b60201c565b6200061f60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014e816001620006e560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f4919062000c71565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000282919062000c71565b6040518363ffffffff1660e01b8152600401620002a192919062000cb4565b6020604051808303816000875af1158015620002c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000c71565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032f60a0516001620006e560201b60201c565b6200034460a0516001620007cf60201b60201c565b6000600290506000601290506000806000600290506000601c90506000600190506000806a52b7d2dcc80cd2e400000090506a01a784379d99db420000006009819055506a01a784379d99db42000000600b81905550612710600a82620003ac919062000d1a565b620003b8919062000daa565b600a8190555088601081905550876011819055508660128190555085601381905550601354601254601154601054620003f2919062000de2565b620003fe919062000de2565b6200040a919062000de2565b600f819055508460158190555083601681905550826017819055508160188190555060185460175460165460155462000444919062000de2565b62000450919062000de2565b6200045c919062000de2565b601481905550735476d5815d997c1c53a1cee769906bfb6b412d02600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732aaac521332d54ab99979c1250bb82adf5128aa6600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732aaac521332d54ab99979c1250bb82adf5128aa6600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000583620005756200087060201b60201c565b60016200089a60201b60201c565b620005963060016200089a60201b60201c565b620005ab61dead60016200089a60201b60201c565b620005cd620005bf6200087060201b60201c565b6001620006e560201b60201c565b620005e0306001620006e560201b60201c565b620005f561dead6001620006e560201b60201c565b620006073382620009d460201b60201c565b5050505050505050505062001001565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006f56200061760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200071b6200087060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000774576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200076b9062000ea0565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008aa6200061760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008d06200087060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000929576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009209062000ea0565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009c8919062000edf565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3e9062000f4c565b60405180910390fd5b62000a5b6000838362000b4d60201b60201c565b806002600082825462000a6f919062000de2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ac6919062000de2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2d919062000f7f565b60405180910390a362000b496000838362000b5260201b60201c565b5050565b505050565b505050565b82805462000b659062000fcb565b90600052602060002090601f01602090048101928262000b89576000855562000bd5565b82601f1062000ba457805160ff191683800117855562000bd5565b8280016001018555821562000bd5579182015b8281111562000bd457825182559160200191906001019062000bb7565b5b50905062000be4919062000be8565b5090565b5b8082111562000c0357600081600090555060010162000be9565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c398262000c0c565b9050919050565b62000c4b8162000c2c565b811462000c5757600080fd5b50565b60008151905062000c6b8162000c40565b92915050565b60006020828403121562000c8a5762000c8962000c07565b5b600062000c9a8482850162000c5a565b91505092915050565b62000cae8162000c2c565b82525050565b600060408201905062000ccb600083018562000ca3565b62000cda602083018462000ca3565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d278262000ce1565b915062000d348362000ce1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d705762000d6f62000ceb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000db78262000ce1565b915062000dc48362000ce1565b92508262000dd75762000dd662000d7b565b5b828204905092915050565b600062000def8262000ce1565b915062000dfc8362000ce1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e345762000e3362000ceb565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e8860208362000e3f565b915062000e958262000e50565b602082019050919050565b6000602082019050818103600083015262000ebb8162000e79565b9050919050565b60008115159050919050565b62000ed98162000ec2565b82525050565b600060208201905062000ef6600083018462000ece565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f34601f8362000e3f565b915062000f418262000efc565b602082019050919050565b6000602082019050818103600083015262000f678162000f25565b9050919050565b62000f798162000ce1565b82525050565b600060208201905062000f96600083018462000f6e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fe457607f821691505b6020821081141562000ffb5762000ffa62000f9c565b5b50919050565b60805160a0516150ce6200105f600039600081816111fc015281816117cb01526126f7015260008181610efa0152818161269f015281816138d3015281816139b4015281816139db01528181613a770152613a9e01526150ce6000f3fe60806040526004361061036e5760003560e01c80638ea5220f116101c6578063c18bc195116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610cc4578063f2fde38b14610cef578063f637434214610d18578063f8b45b0514610d4357610375565b8063e2f4560514610c45578063e7ad9fcd14610c70578063e884f26014610c9957610375565b8063d257b34f116100d1578063d257b34f14610b75578063d85ba06314610bb2578063dd62ed3e14610bdd578063e11d22cf14610c1a57610375565b8063c18bc19514610af6578063c876d0b914610b1f578063c8c8ebe414610b4a57610375565b8063a0d82dc511610164578063a9059cbb1161013e578063a9059cbb14610a28578063b62496f514610a65578063bbc0c74214610aa2578063c024666814610acd57610375565b8063a0d82dc514610995578063a1dc92bc146109c0578063a457c2d7146109eb57610375565b806395d89b41116101a057806395d89b41146108eb5780639a7a23d6146109165780639c3b4fdc1461093f5780639fccce321461096a57610375565b80638ea5220f1461086c5780639213691314610897578063924de9b7146108c257610375565b806344249f04116102a057806370a082311161023e57806375f0a8741161021857806375f0a874146107c05780637b208769146107eb5780637bce5a04146108165780638da5cb5b1461084157610375565b806370a0823114610743578063715018a6146107805780637571336a1461079757610375565b80634fbee1931161027a5780634fbee193146106875780636a486a8e146106c45780636ddd1713146106ef5780636fcba3771461071a57610375565b806344249f041461060657806349bd5a5e146106315780634a62bb651461065c57610375565b80631a8145bb1161030d57806323b872dd116102e757806323b872dd1461053657806327c8f83514610573578063313ce5671461059e57806339509351146105c957610375565b80631a8145bb146104b75780631f3fed8f146104e2578063203e727e1461050d57610375565b80630d7f1441116103495780630d7f1441146103f957806310d5de53146104245780631694505e1461046157806318160ddd1461048c57610375565b806299d3861461037a57806306fdde0314610391578063095ea7b3146103bc57610375565b3661037557005b600080fd5b34801561038657600080fd5b5061038f610d6e565b005b34801561039d57600080fd5b506103a6610e22565b6040516103b39190613c06565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613cc1565b610eb4565b6040516103f09190613d1c565b60405180910390f35b34801561040557600080fd5b5061040e610ed2565b60405161041b9190613d46565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190613d61565b610ed8565b6040516104589190613d1c565b60405180910390f35b34801561046d57600080fd5b50610476610ef8565b6040516104839190613ded565b60405180910390f35b34801561049857600080fd5b506104a1610f1c565b6040516104ae9190613d46565b60405180910390f35b3480156104c357600080fd5b506104cc610f26565b6040516104d99190613d46565b60405180910390f35b3480156104ee57600080fd5b506104f7610f2c565b6040516105049190613d46565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613e08565b610f32565b005b34801561054257600080fd5b5061055d60048036038101906105589190613e35565b611041565b60405161056a9190613d1c565b60405180910390f35b34801561057f57600080fd5b50610588611139565b6040516105959190613e97565b60405180910390f35b3480156105aa57600080fd5b506105b361113f565b6040516105c09190613ece565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613cc1565b611148565b6040516105fd9190613d1c565b60405180910390f35b34801561061257600080fd5b5061061b6111f4565b6040516106289190613d46565b60405180910390f35b34801561063d57600080fd5b506106466111fa565b6040516106539190613e97565b60405180910390f35b34801561066857600080fd5b5061067161121e565b60405161067e9190613d1c565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613d61565b611231565b6040516106bb9190613d1c565b60405180910390f35b3480156106d057600080fd5b506106d9611287565b6040516106e69190613d46565b60405180910390f35b3480156106fb57600080fd5b5061070461128d565b6040516107119190613d1c565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613ee9565b6112a0565b005b34801561074f57600080fd5b5061076a60048036038101906107659190613d61565b6113d3565b6040516107779190613d46565b60405180910390f35b34801561078c57600080fd5b5061079561141b565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613f7c565b6114a3565b005b3480156107cc57600080fd5b506107d561157a565b6040516107e29190613e97565b60405180910390f35b3480156107f757600080fd5b506108006115a0565b60405161080d9190613e97565b60405180910390f35b34801561082257600080fd5b5061082b6115c6565b6040516108389190613d46565b60405180910390f35b34801561084d57600080fd5b506108566115cc565b6040516108639190613e97565b60405180910390f35b34801561087857600080fd5b506108816115f6565b60405161088e9190613e97565b60405180910390f35b3480156108a357600080fd5b506108ac61161c565b6040516108b99190613d46565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190613fbc565b611622565b005b3480156108f757600080fd5b506109006116bb565b60405161090d9190613c06565b60405180910390f35b34801561092257600080fd5b5061093d60048036038101906109389190613f7c565b61174d565b005b34801561094b57600080fd5b50610954611866565b6040516109619190613d46565b60405180910390f35b34801561097657600080fd5b5061097f61186c565b60405161098c9190613d46565b60405180910390f35b3480156109a157600080fd5b506109aa611872565b6040516109b79190613d46565b60405180910390f35b3480156109cc57600080fd5b506109d5611878565b6040516109e29190613d46565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d9190613cc1565b61187e565b604051610a1f9190613d1c565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613cc1565b611969565b604051610a5c9190613d1c565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a879190613d61565b611987565b604051610a999190613d1c565b60405180910390f35b348015610aae57600080fd5b50610ab76119a7565b604051610ac49190613d1c565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190613f7c565b6119ba565b005b348015610b0257600080fd5b50610b1d6004803603810190610b189190613e08565b611adf565b005b348015610b2b57600080fd5b50610b34611bee565b604051610b419190613d1c565b60405180910390f35b348015610b5657600080fd5b50610b5f611c01565b604051610b6c9190613d46565b60405180910390f35b348015610b8157600080fd5b50610b9c6004803603810190610b979190613e08565b611c07565b604051610ba99190613d1c565b60405180910390f35b348015610bbe57600080fd5b50610bc7611d5c565b604051610bd49190613d46565b60405180910390f35b348015610be957600080fd5b50610c046004803603810190610bff9190613fe9565b611d62565b604051610c119190613d46565b60405180910390f35b348015610c2657600080fd5b50610c2f611de9565b604051610c3c9190613d1c565b60405180910390f35b348015610c5157600080fd5b50610c5a611e89565b604051610c679190613d46565b60405180910390f35b348015610c7c57600080fd5b50610c976004803603810190610c929190613ee9565b611e8f565b005b348015610ca557600080fd5b50610cae611fc2565b604051610cbb9190613d1c565b60405180910390f35b348015610cd057600080fd5b50610cd9612062565b604051610ce69190613d46565b60405180910390f35b348015610cfb57600080fd5b50610d166004803603810190610d119190613d61565b612068565b005b348015610d2457600080fd5b50610d2d612160565b604051610d3a9190613d46565b60405180910390f35b348015610d4f57600080fd5b50610d58612166565b604051610d659190613d46565b60405180910390f35b610d7661216c565b73ffffffffffffffffffffffffffffffffffffffff16610d946115cc565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190614075565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b606060038054610e31906140c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5d906140c4565b8015610eaa5780601f10610e7f57610100808354040283529160200191610eaa565b820191906000526020600020905b815481529060010190602001808311610e8d57829003601f168201915b5050505050905090565b6000610ec8610ec161216c565b8484612174565b6001905092915050565b60155481565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601b5481565b601a5481565b610f3a61216c565b73ffffffffffffffffffffffffffffffffffffffff16610f586115cc565b73ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590614075565b60405180910390fd5b670de0b6b3a76400006103e86005610fc4610f1c565b610fce9190614125565b610fd891906141ae565b610fe291906141ae565b811015611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90614251565b60405180910390fd5b670de0b6b3a7640000816110389190614125565b60098190555050565b600061104e84848461233f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061109961216c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611110906142e3565b60405180910390fd5b61112d8561112561216c565b858403612174565b60019150509392505050565b61dead81565b60006012905090565b60006111ea61115561216c565b84846001600061116361216c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e59190614303565b612174565b6001905092915050565b60195481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600c60029054906101000a900460ff1681565b6112a861216c565b73ffffffffffffffffffffffffffffffffffffffff166112c66115cc565b73ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614075565b60405180910390fd5b600a8183858761132c9190614303565b6113369190614303565b6113409190614303565b1115611381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611378906143a5565b60405180910390fd5b836010819055508260118190555081601281905550806013819055506013546012546011546010546113b39190614303565b6113bd9190614303565b6113c79190614303565b600f8190555050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142361216c565b73ffffffffffffffffffffffffffffffffffffffff166114416115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614075565b60405180910390fd5b6114a1600061303f565b565b6114ab61216c565b73ffffffffffffffffffffffffffffffffffffffff166114c96115cc565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690614075565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b61162a61216c565b73ffffffffffffffffffffffffffffffffffffffff166116486115cc565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590614075565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546116ca906140c4565b80601f01602080910402602001604051908101604052809291908181526020018280546116f6906140c4565b80156117435780601f1061171857610100808354040283529160200191611743565b820191906000526020600020905b81548152906001019060200180831161172657829003601f168201915b5050505050905090565b61175561216c565b73ffffffffffffffffffffffffffffffffffffffff166117736115cc565b73ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614075565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90614437565b60405180910390fd5b6118628282613105565b5050565b60135481565b601c5481565b60185481565b60105481565b6000806001600061188d61216c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561194a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611941906144c9565b60405180910390fd5b61195e61195561216c565b85858403612174565b600191505092915050565b600061197d61197661216c565b848461233f565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6119c261216c565b73ffffffffffffffffffffffffffffffffffffffff166119e06115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614075565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ad39190613d1c565b60405180910390a25050565b611ae761216c565b73ffffffffffffffffffffffffffffffffffffffff16611b056115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5290614075565b60405180910390fd5b670de0b6b3a76400006103e86005611b71610f1c565b611b7b9190614125565b611b8591906141ae565b611b8f91906141ae565b811015611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89061455b565b60405180910390fd5b670de0b6b3a764000081611be59190614125565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b6000611c1161216c565b73ffffffffffffffffffffffffffffffffffffffff16611c2f6115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c90614075565b60405180910390fd5b620186a06001611c93610f1c565b611c9d9190614125565b611ca791906141ae565b821015611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce0906145ed565b60405180910390fd5b6103e86005611cf6610f1c565b611d009190614125565b611d0a91906141ae565b821115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d439061467f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611df361216c565b73ffffffffffffffffffffffffffffffffffffffff16611e116115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e90614075565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600a5481565b611e9761216c565b73ffffffffffffffffffffffffffffffffffffffff16611eb56115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290614075565b60405180910390fd5b600a81838587611f1b9190614303565b611f259190614303565b611f2f9190614303565b1115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906146eb565b60405180910390fd5b83601581905550826016819055508160178190555080601881905550601854601754601654601554611fa29190614303565b611fac9190614303565b611fb69190614303565b60148190555050505050565b6000611fcc61216c565b73ffffffffffffffffffffffffffffffffffffffff16611fea6115cc565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790614075565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61207061216c565b73ffffffffffffffffffffffffffffffffffffffff1661208e6115cc565b73ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90614075565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b9061477d565b60405180910390fd5b61215d8161303f565b50565b60175481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db9061480f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906148a1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123329190613d46565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690614933565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561241f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612416906149c5565b60405180910390fd5b600081141561243957612434838360006131a6565b61303a565b600c60009054906101000a900460ff1615612afc576124566115cc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124c457506124946115cc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124fd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612537575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125505750600560149054906101000a900460ff16155b15612afb57600c60019054906101000a900460ff1661264a57601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061260a5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264090614a31565b60405180910390fd5b5b600e60009054906101000a900460ff1615612812576126676115cc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126ee57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128115743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c390614ae9565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b55750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295c576009548111156128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614b7b565b60405180910390fd5b600b5461290b836113d3565b826129169190614303565b1115612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90614be7565b60405180910390fd5b612afa565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129ff5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a4e57600954811115612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614c79565b60405180910390fd5b612af9565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612af857600b54612aab836113d3565b82612ab69190614303565b1115612af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aee90614be7565b60405180910390fd5b5b5b5b5b5b6000612b07306113d3565b90506000600a548210159050808015612b2c5750600c60029054906101000a900460ff165b8015612b455750600560149054906101000a900460ff16155b8015612b9b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bf15750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c475750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8b576001600560146101000a81548160ff021916908315150217905550612c6f613427565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d415750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4b57600090505b6000811561302a57601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dae57506000601454115b15612eae57612ddb6064612dcd601454886137e890919063ffffffff16565b6137fe90919063ffffffff16565b905060145460155482612dee9190614125565b612df891906141ae565b60196000828254612e099190614303565b9250508190555060145460175482612e219190614125565b612e2b91906141ae565b601b6000828254612e3c9190614303565b9250508190555060145460185482612e549190614125565b612e5e91906141ae565b601c6000828254612e6f9190614303565b9250508190555060145460165482612e879190614125565b612e9191906141ae565b601a6000828254612ea29190614303565b92505081905550613006565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f0957506000600f54115b1561300557612f366064612f28600f54886137e890919063ffffffff16565b6137fe90919063ffffffff16565b9050600f5460105482612f499190614125565b612f5391906141ae565b60196000828254612f649190614303565b92505081905550600f5460125482612f7c9190614125565b612f8691906141ae565b601b6000828254612f979190614303565b92505081905550600f5460135482612faf9190614125565b612fb991906141ae565b601c6000828254612fca9190614303565b92505081905550600f5460115482612fe29190614125565b612fec91906141ae565b601a6000828254612ffd9190614303565b925050819055505b5b600081111561301b5761301a8730836131a6565b5b80856130279190614c99565b94505b6130358787876131a6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320d90614933565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327d906149c5565b60405180910390fd5b613291838383613814565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e90614d3f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133aa9190614303565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161340e9190613d46565b60405180910390a3613421848484613819565b50505050565b6000613432306113d3565b90506000601c54601a54601b5460195461344c9190614303565b6134569190614303565b6134609190614303565b90506000808314806134725750600082145b1561347f575050506137e6565b6014600a5461348e9190614125565b8311156134a7576014600a546134a49190614125565b92505b6000600283601b54866134ba9190614125565b6134c491906141ae565b6134ce91906141ae565b905060006134e5828661381e90919063ffffffff16565b905060004790506134f582613834565b600061350a824761381e90919063ffffffff16565b9050600061353587613527601954856137e890919063ffffffff16565b6137fe90919063ffffffff16565b9050600061356088613552601a54866137e890919063ffffffff16565b6137fe90919063ffffffff16565b9050600061358b8961357d601c54876137e890919063ffffffff16565b6137fe90919063ffffffff16565b905060008183858761359d9190614c99565b6135a79190614c99565b6135b19190614c99565b90506000601b8190555060006019819055506000601a819055506000601c81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161361990614d90565b60006040518083038185875af1925050503d8060008114613656576040519150601f19603f3d011682016040523d82523d6000602084013e61365b565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516136a790614d90565b60006040518083038185875af1925050503d80600081146136e4576040519150601f19603f3d011682016040523d82523d6000602084013e6136e9565b606091505b5050809950506000881180156136ff5750600081115b1561374c5761370e8882613a71565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601b5460405161374393929190614da5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161379290614d90565b60006040518083038185875af1925050503d80600081146137cf576040519150601f19603f3d011682016040523d82523d6000602084013e6137d4565b606091505b50508099505050505050505050505050505b565b600081836137f69190614125565b905092915050565b6000818361380c91906141ae565b905092915050565b505050565b505050565b6000818361382c9190614c99565b905092915050565b6000600267ffffffffffffffff81111561385157613850614ddc565b5b60405190808252806020026020018201604052801561387f5781602001602082028036833780820191505090505b509050308160008151811061389757613896614e0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561393c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139609190614e4f565b8160018151811061397457613973614e0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139d9307f000000000000000000000000000000000000000000000000000000000000000084612174565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a3b959493929190614f75565b600060405180830381600087803b158015613a5557600080fd5b505af1158015613a69573d6000803e3d6000fd5b505050505050565b613a9c307f000000000000000000000000000000000000000000000000000000000000000084612174565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b2396959493929190614fcf565b60606040518083038185885af1158015613b41573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b669190615045565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ba7578082015181840152602081019050613b8c565b83811115613bb6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bd882613b6d565b613be28185613b78565b9350613bf2818560208601613b89565b613bfb81613bbc565b840191505092915050565b60006020820190508181036000830152613c208184613bcd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c5882613c2d565b9050919050565b613c6881613c4d565b8114613c7357600080fd5b50565b600081359050613c8581613c5f565b92915050565b6000819050919050565b613c9e81613c8b565b8114613ca957600080fd5b50565b600081359050613cbb81613c95565b92915050565b60008060408385031215613cd857613cd7613c28565b5b6000613ce685828601613c76565b9250506020613cf785828601613cac565b9150509250929050565b60008115159050919050565b613d1681613d01565b82525050565b6000602082019050613d316000830184613d0d565b92915050565b613d4081613c8b565b82525050565b6000602082019050613d5b6000830184613d37565b92915050565b600060208284031215613d7757613d76613c28565b5b6000613d8584828501613c76565b91505092915050565b6000819050919050565b6000613db3613dae613da984613c2d565b613d8e565b613c2d565b9050919050565b6000613dc582613d98565b9050919050565b6000613dd782613dba565b9050919050565b613de781613dcc565b82525050565b6000602082019050613e026000830184613dde565b92915050565b600060208284031215613e1e57613e1d613c28565b5b6000613e2c84828501613cac565b91505092915050565b600080600060608486031215613e4e57613e4d613c28565b5b6000613e5c86828701613c76565b9350506020613e6d86828701613c76565b9250506040613e7e86828701613cac565b9150509250925092565b613e9181613c4d565b82525050565b6000602082019050613eac6000830184613e88565b92915050565b600060ff82169050919050565b613ec881613eb2565b82525050565b6000602082019050613ee36000830184613ebf565b92915050565b60008060008060808587031215613f0357613f02613c28565b5b6000613f1187828801613cac565b9450506020613f2287828801613cac565b9350506040613f3387828801613cac565b9250506060613f4487828801613cac565b91505092959194509250565b613f5981613d01565b8114613f6457600080fd5b50565b600081359050613f7681613f50565b92915050565b60008060408385031215613f9357613f92613c28565b5b6000613fa185828601613c76565b9250506020613fb285828601613f67565b9150509250929050565b600060208284031215613fd257613fd1613c28565b5b6000613fe084828501613f67565b91505092915050565b6000806040838503121561400057613fff613c28565b5b600061400e85828601613c76565b925050602061401f85828601613c76565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405f602083613b78565b915061406a82614029565b602082019050919050565b6000602082019050818103600083015261408e81614052565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140dc57607f821691505b602082108114156140f0576140ef614095565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061413082613c8b565b915061413b83613c8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614174576141736140f6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141b982613c8b565b91506141c483613c8b565b9250826141d4576141d361417f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061423b602f83613b78565b9150614246826141df565b604082019050919050565b6000602082019050818103600083015261426a8161422e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142cd602883613b78565b91506142d882614271565b604082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b600061430e82613c8b565b915061431983613c8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561434e5761434d6140f6565b5b828201905092915050565b7f4d61782042757946656520313025000000000000000000000000000000000000600082015250565b600061438f600e83613b78565b915061439a82614359565b602082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614421603983613b78565b915061442c826143c5565b604082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006144b3602583613b78565b91506144be82614457565b604082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614545602483613b78565b9150614550826144e9565b604082019050919050565b6000602082019050818103600083015261457481614538565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006145d7603583613b78565b91506145e28261457b565b604082019050919050565b60006020820190508181036000830152614606816145ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614669603483613b78565b91506146748261460d565b604082019050919050565b600060208201905081810360008301526146988161465c565b9050919050565b7f4d61782053656c6c466565203130250000000000000000000000000000000000600082015250565b60006146d5600f83613b78565b91506146e08261469f565b602082019050919050565b60006020820190508181036000830152614704816146c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614767602683613b78565b91506147728261470b565b604082019050919050565b600060208201905081810360008301526147968161475a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f9602483613b78565b91506148048261479d565b604082019050919050565b60006020820190508181036000830152614828816147ec565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061488b602283613b78565b91506148968261482f565b604082019050919050565b600060208201905081810360008301526148ba8161487e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061491d602583613b78565b9150614928826148c1565b604082019050919050565b6000602082019050818103600083015261494c81614910565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006149af602383613b78565b91506149ba82614953565b604082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614a1b601683613b78565b9150614a26826149e5565b602082019050919050565b60006020820190508181036000830152614a4a81614a0e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614ad3604983613b78565b9150614ade82614a51565b606082019050919050565b60006020820190508181036000830152614b0281614ac6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614b65603583613b78565b9150614b7082614b09565b604082019050919050565b60006020820190508181036000830152614b9481614b58565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614bd1601383613b78565b9150614bdc82614b9b565b602082019050919050565b60006020820190508181036000830152614c0081614bc4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614c63603683613b78565b9150614c6e82614c07565b604082019050919050565b60006020820190508181036000830152614c9281614c56565b9050919050565b6000614ca482613c8b565b9150614caf83613c8b565b925082821015614cc257614cc16140f6565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d29602683613b78565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b600081905092915050565b50565b6000614d7a600083614d5f565b9150614d8582614d6a565b600082019050919050565b6000614d9b82614d6d565b9150819050919050565b6000606082019050614dba6000830186613d37565b614dc76020830185613d37565b614dd46040830184613d37565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614e4981613c5f565b92915050565b600060208284031215614e6557614e64613c28565b5b6000614e7384828501614e3a565b91505092915050565b6000819050919050565b6000614ea1614e9c614e9784614e7c565b613d8e565b613c8b565b9050919050565b614eb181614e86565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614eec81613c4d565b82525050565b6000614efe8383614ee3565b60208301905092915050565b6000602082019050919050565b6000614f2282614eb7565b614f2c8185614ec2565b9350614f3783614ed3565b8060005b83811015614f68578151614f4f8882614ef2565b9750614f5a83614f0a565b925050600181019050614f3b565b5085935050505092915050565b600060a082019050614f8a6000830188613d37565b614f976020830187614ea8565b8181036040830152614fa98186614f17565b9050614fb86060830185613e88565b614fc56080830184613d37565b9695505050505050565b600060c082019050614fe46000830189613e88565b614ff16020830188613d37565b614ffe6040830187614ea8565b61500b6060830186614ea8565b6150186080830185613e88565b61502560a0830184613d37565b979650505050505050565b60008151905061503f81613c95565b92915050565b60008060006060848603121561505e5761505d613c28565b5b600061506c86828701615030565b935050602061507d86828701615030565b925050604061508e86828701615030565b915050925092509256fea26469706673582212209e86096bf8eb8e2c07891880414d6fc1c54aff95f6abcd1a94c3fce93af8196464736f6c634300080a0033546f6b656e20666f7220746865204574686963616c2054726561746d656e74206f6620416e696d616c73
Deployed Bytecode
0x60806040526004361061036e5760003560e01c80638ea5220f116101c6578063c18bc195116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610cc4578063f2fde38b14610cef578063f637434214610d18578063f8b45b0514610d4357610375565b8063e2f4560514610c45578063e7ad9fcd14610c70578063e884f26014610c9957610375565b8063d257b34f116100d1578063d257b34f14610b75578063d85ba06314610bb2578063dd62ed3e14610bdd578063e11d22cf14610c1a57610375565b8063c18bc19514610af6578063c876d0b914610b1f578063c8c8ebe414610b4a57610375565b8063a0d82dc511610164578063a9059cbb1161013e578063a9059cbb14610a28578063b62496f514610a65578063bbc0c74214610aa2578063c024666814610acd57610375565b8063a0d82dc514610995578063a1dc92bc146109c0578063a457c2d7146109eb57610375565b806395d89b41116101a057806395d89b41146108eb5780639a7a23d6146109165780639c3b4fdc1461093f5780639fccce321461096a57610375565b80638ea5220f1461086c5780639213691314610897578063924de9b7146108c257610375565b806344249f04116102a057806370a082311161023e57806375f0a8741161021857806375f0a874146107c05780637b208769146107eb5780637bce5a04146108165780638da5cb5b1461084157610375565b806370a0823114610743578063715018a6146107805780637571336a1461079757610375565b80634fbee1931161027a5780634fbee193146106875780636a486a8e146106c45780636ddd1713146106ef5780636fcba3771461071a57610375565b806344249f041461060657806349bd5a5e146106315780634a62bb651461065c57610375565b80631a8145bb1161030d57806323b872dd116102e757806323b872dd1461053657806327c8f83514610573578063313ce5671461059e57806339509351146105c957610375565b80631a8145bb146104b75780631f3fed8f146104e2578063203e727e1461050d57610375565b80630d7f1441116103495780630d7f1441146103f957806310d5de53146104245780631694505e1461046157806318160ddd1461048c57610375565b806299d3861461037a57806306fdde0314610391578063095ea7b3146103bc57610375565b3661037557005b600080fd5b34801561038657600080fd5b5061038f610d6e565b005b34801561039d57600080fd5b506103a6610e22565b6040516103b39190613c06565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613cc1565b610eb4565b6040516103f09190613d1c565b60405180910390f35b34801561040557600080fd5b5061040e610ed2565b60405161041b9190613d46565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190613d61565b610ed8565b6040516104589190613d1c565b60405180910390f35b34801561046d57600080fd5b50610476610ef8565b6040516104839190613ded565b60405180910390f35b34801561049857600080fd5b506104a1610f1c565b6040516104ae9190613d46565b60405180910390f35b3480156104c357600080fd5b506104cc610f26565b6040516104d99190613d46565b60405180910390f35b3480156104ee57600080fd5b506104f7610f2c565b6040516105049190613d46565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190613e08565b610f32565b005b34801561054257600080fd5b5061055d60048036038101906105589190613e35565b611041565b60405161056a9190613d1c565b60405180910390f35b34801561057f57600080fd5b50610588611139565b6040516105959190613e97565b60405180910390f35b3480156105aa57600080fd5b506105b361113f565b6040516105c09190613ece565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613cc1565b611148565b6040516105fd9190613d1c565b60405180910390f35b34801561061257600080fd5b5061061b6111f4565b6040516106289190613d46565b60405180910390f35b34801561063d57600080fd5b506106466111fa565b6040516106539190613e97565b60405180910390f35b34801561066857600080fd5b5061067161121e565b60405161067e9190613d1c565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a99190613d61565b611231565b6040516106bb9190613d1c565b60405180910390f35b3480156106d057600080fd5b506106d9611287565b6040516106e69190613d46565b60405180910390f35b3480156106fb57600080fd5b5061070461128d565b6040516107119190613d1c565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613ee9565b6112a0565b005b34801561074f57600080fd5b5061076a60048036038101906107659190613d61565b6113d3565b6040516107779190613d46565b60405180910390f35b34801561078c57600080fd5b5061079561141b565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613f7c565b6114a3565b005b3480156107cc57600080fd5b506107d561157a565b6040516107e29190613e97565b60405180910390f35b3480156107f757600080fd5b506108006115a0565b60405161080d9190613e97565b60405180910390f35b34801561082257600080fd5b5061082b6115c6565b6040516108389190613d46565b60405180910390f35b34801561084d57600080fd5b506108566115cc565b6040516108639190613e97565b60405180910390f35b34801561087857600080fd5b506108816115f6565b60405161088e9190613e97565b60405180910390f35b3480156108a357600080fd5b506108ac61161c565b6040516108b99190613d46565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190613fbc565b611622565b005b3480156108f757600080fd5b506109006116bb565b60405161090d9190613c06565b60405180910390f35b34801561092257600080fd5b5061093d60048036038101906109389190613f7c565b61174d565b005b34801561094b57600080fd5b50610954611866565b6040516109619190613d46565b60405180910390f35b34801561097657600080fd5b5061097f61186c565b60405161098c9190613d46565b60405180910390f35b3480156109a157600080fd5b506109aa611872565b6040516109b79190613d46565b60405180910390f35b3480156109cc57600080fd5b506109d5611878565b6040516109e29190613d46565b60405180910390f35b3480156109f757600080fd5b50610a126004803603810190610a0d9190613cc1565b61187e565b604051610a1f9190613d1c565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613cc1565b611969565b604051610a5c9190613d1c565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a879190613d61565b611987565b604051610a999190613d1c565b60405180910390f35b348015610aae57600080fd5b50610ab76119a7565b604051610ac49190613d1c565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190613f7c565b6119ba565b005b348015610b0257600080fd5b50610b1d6004803603810190610b189190613e08565b611adf565b005b348015610b2b57600080fd5b50610b34611bee565b604051610b419190613d1c565b60405180910390f35b348015610b5657600080fd5b50610b5f611c01565b604051610b6c9190613d46565b60405180910390f35b348015610b8157600080fd5b50610b9c6004803603810190610b979190613e08565b611c07565b604051610ba99190613d1c565b60405180910390f35b348015610bbe57600080fd5b50610bc7611d5c565b604051610bd49190613d46565b60405180910390f35b348015610be957600080fd5b50610c046004803603810190610bff9190613fe9565b611d62565b604051610c119190613d46565b60405180910390f35b348015610c2657600080fd5b50610c2f611de9565b604051610c3c9190613d1c565b60405180910390f35b348015610c5157600080fd5b50610c5a611e89565b604051610c679190613d46565b60405180910390f35b348015610c7c57600080fd5b50610c976004803603810190610c929190613ee9565b611e8f565b005b348015610ca557600080fd5b50610cae611fc2565b604051610cbb9190613d1c565b60405180910390f35b348015610cd057600080fd5b50610cd9612062565b604051610ce69190613d46565b60405180910390f35b348015610cfb57600080fd5b50610d166004803603810190610d119190613d61565b612068565b005b348015610d2457600080fd5b50610d2d612160565b604051610d3a9190613d46565b60405180910390f35b348015610d4f57600080fd5b50610d58612166565b604051610d659190613d46565b60405180910390f35b610d7661216c565b73ffffffffffffffffffffffffffffffffffffffff16610d946115cc565b73ffffffffffffffffffffffffffffffffffffffff1614610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190614075565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b606060038054610e31906140c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5d906140c4565b8015610eaa5780601f10610e7f57610100808354040283529160200191610eaa565b820191906000526020600020905b815481529060010190602001808311610e8d57829003601f168201915b5050505050905090565b6000610ec8610ec161216c565b8484612174565b6001905092915050565b60155481565b601e6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601b5481565b601a5481565b610f3a61216c565b73ffffffffffffffffffffffffffffffffffffffff16610f586115cc565b73ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa590614075565b60405180910390fd5b670de0b6b3a76400006103e86005610fc4610f1c565b610fce9190614125565b610fd891906141ae565b610fe291906141ae565b811015611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90614251565b60405180910390fd5b670de0b6b3a7640000816110389190614125565b60098190555050565b600061104e84848461233f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061109961216c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611110906142e3565b60405180910390fd5b61112d8561112561216c565b858403612174565b60019150509392505050565b61dead81565b60006012905090565b60006111ea61115561216c565b84846001600061116361216c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e59190614303565b612174565b6001905092915050565b60195481565b7f000000000000000000000000488c5970a4a6bc06cecab6e2ab485f618b6b2be881565b600c60009054906101000a900460ff1681565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600c60029054906101000a900460ff1681565b6112a861216c565b73ffffffffffffffffffffffffffffffffffffffff166112c66115cc565b73ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131390614075565b60405180910390fd5b600a8183858761132c9190614303565b6113369190614303565b6113409190614303565b1115611381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611378906143a5565b60405180910390fd5b836010819055508260118190555081601281905550806013819055506013546012546011546010546113b39190614303565b6113bd9190614303565b6113c79190614303565b600f8190555050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142361216c565b73ffffffffffffffffffffffffffffffffffffffff166114416115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614075565b60405180910390fd5b6114a1600061303f565b565b6114ab61216c565b73ffffffffffffffffffffffffffffffffffffffff166114c96115cc565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690614075565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b61162a61216c565b73ffffffffffffffffffffffffffffffffffffffff166116486115cc565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590614075565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546116ca906140c4565b80601f01602080910402602001604051908101604052809291908181526020018280546116f6906140c4565b80156117435780601f1061171857610100808354040283529160200191611743565b820191906000526020600020905b81548152906001019060200180831161172657829003601f168201915b5050505050905090565b61175561216c565b73ffffffffffffffffffffffffffffffffffffffff166117736115cc565b73ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614075565b60405180910390fd5b7f000000000000000000000000488c5970a4a6bc06cecab6e2ab485f618b6b2be873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90614437565b60405180910390fd5b6118628282613105565b5050565b60135481565b601c5481565b60185481565b60105481565b6000806001600061188d61216c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561194a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611941906144c9565b60405180910390fd5b61195e61195561216c565b85858403612174565b600191505092915050565b600061197d61197661216c565b848461233f565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6119c261216c565b73ffffffffffffffffffffffffffffffffffffffff166119e06115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614075565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ad39190613d1c565b60405180910390a25050565b611ae761216c565b73ffffffffffffffffffffffffffffffffffffffff16611b056115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5290614075565b60405180910390fd5b670de0b6b3a76400006103e86005611b71610f1c565b611b7b9190614125565b611b8591906141ae565b611b8f91906141ae565b811015611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89061455b565b60405180910390fd5b670de0b6b3a764000081611be59190614125565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b6000611c1161216c565b73ffffffffffffffffffffffffffffffffffffffff16611c2f6115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c90614075565b60405180910390fd5b620186a06001611c93610f1c565b611c9d9190614125565b611ca791906141ae565b821015611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce0906145ed565b60405180910390fd5b6103e86005611cf6610f1c565b611d009190614125565b611d0a91906141ae565b821115611d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d439061467f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611df361216c565b73ffffffffffffffffffffffffffffffffffffffff16611e116115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e90614075565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600a5481565b611e9761216c565b73ffffffffffffffffffffffffffffffffffffffff16611eb56115cc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290614075565b60405180910390fd5b600a81838587611f1b9190614303565b611f259190614303565b611f2f9190614303565b1115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906146eb565b60405180910390fd5b83601581905550826016819055508160178190555080601881905550601854601754601654601554611fa29190614303565b611fac9190614303565b611fb69190614303565b60148190555050505050565b6000611fcc61216c565b73ffffffffffffffffffffffffffffffffffffffff16611fea6115cc565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790614075565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61207061216c565b73ffffffffffffffffffffffffffffffffffffffff1661208e6115cc565b73ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db90614075565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b9061477d565b60405180910390fd5b61215d8161303f565b50565b60175481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db9061480f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906148a1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123329190613d46565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690614933565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561241f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612416906149c5565b60405180910390fd5b600081141561243957612434838360006131a6565b61303a565b600c60009054906101000a900460ff1615612afc576124566115cc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124c457506124946115cc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124fd5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612537575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125505750600560149054906101000a900460ff16155b15612afb57600c60019054906101000a900460ff1661264a57601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061260a5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264090614a31565b60405180910390fd5b5b600e60009054906101000a900460ff1615612812576126676115cc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126ee57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561274657507f000000000000000000000000488c5970a4a6bc06cecab6e2ab485f618b6b2be873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156128115743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106127cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c390614ae9565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b55750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561295c576009548111156128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614b7b565b60405180910390fd5b600b5461290b836113d3565b826129169190614303565b1115612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e90614be7565b60405180910390fd5b612afa565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129ff5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a4e57600954811115612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614c79565b60405180910390fd5b612af9565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612af857600b54612aab836113d3565b82612ab69190614303565b1115612af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aee90614be7565b60405180910390fd5b5b5b5b5b5b6000612b07306113d3565b90506000600a548210159050808015612b2c5750600c60029054906101000a900460ff165b8015612b455750600560149054906101000a900460ff16155b8015612b9b5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bf15750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c475750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8b576001600560146101000a81548160ff021916908315150217905550612c6f613427565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d415750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d4b57600090505b6000811561302a57601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dae57506000601454115b15612eae57612ddb6064612dcd601454886137e890919063ffffffff16565b6137fe90919063ffffffff16565b905060145460155482612dee9190614125565b612df891906141ae565b60196000828254612e099190614303565b9250508190555060145460175482612e219190614125565b612e2b91906141ae565b601b6000828254612e3c9190614303565b9250508190555060145460185482612e549190614125565b612e5e91906141ae565b601c6000828254612e6f9190614303565b9250508190555060145460165482612e879190614125565b612e9191906141ae565b601a6000828254612ea29190614303565b92505081905550613006565b601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f0957506000600f54115b1561300557612f366064612f28600f54886137e890919063ffffffff16565b6137fe90919063ffffffff16565b9050600f5460105482612f499190614125565b612f5391906141ae565b60196000828254612f649190614303565b92505081905550600f5460125482612f7c9190614125565b612f8691906141ae565b601b6000828254612f979190614303565b92505081905550600f5460135482612faf9190614125565b612fb991906141ae565b601c6000828254612fca9190614303565b92505081905550600f5460115482612fe29190614125565b612fec91906141ae565b601a6000828254612ffd9190614303565b925050819055505b5b600081111561301b5761301a8730836131a6565b5b80856130279190614c99565b94505b6130358787876131a6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320d90614933565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327d906149c5565b60405180910390fd5b613291838383613814565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e90614d3f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133aa9190614303565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161340e9190613d46565b60405180910390a3613421848484613819565b50505050565b6000613432306113d3565b90506000601c54601a54601b5460195461344c9190614303565b6134569190614303565b6134609190614303565b90506000808314806134725750600082145b1561347f575050506137e6565b6014600a5461348e9190614125565b8311156134a7576014600a546134a49190614125565b92505b6000600283601b54866134ba9190614125565b6134c491906141ae565b6134ce91906141ae565b905060006134e5828661381e90919063ffffffff16565b905060004790506134f582613834565b600061350a824761381e90919063ffffffff16565b9050600061353587613527601954856137e890919063ffffffff16565b6137fe90919063ffffffff16565b9050600061356088613552601a54866137e890919063ffffffff16565b6137fe90919063ffffffff16565b9050600061358b8961357d601c54876137e890919063ffffffff16565b6137fe90919063ffffffff16565b905060008183858761359d9190614c99565b6135a79190614c99565b6135b19190614c99565b90506000601b8190555060006019819055506000601a819055506000601c81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161361990614d90565b60006040518083038185875af1925050503d8060008114613656576040519150601f19603f3d011682016040523d82523d6000602084013e61365b565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516136a790614d90565b60006040518083038185875af1925050503d80600081146136e4576040519150601f19603f3d011682016040523d82523d6000602084013e6136e9565b606091505b5050809950506000881180156136ff5750600081115b1561374c5761370e8882613a71565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601b5460405161374393929190614da5565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161379290614d90565b60006040518083038185875af1925050503d80600081146137cf576040519150601f19603f3d011682016040523d82523d6000602084013e6137d4565b606091505b50508099505050505050505050505050505b565b600081836137f69190614125565b905092915050565b6000818361380c91906141ae565b905092915050565b505050565b505050565b6000818361382c9190614c99565b905092915050565b6000600267ffffffffffffffff81111561385157613850614ddc565b5b60405190808252806020026020018201604052801561387f5781602001602082028036833780820191505090505b509050308160008151811061389757613896614e0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561393c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139609190614e4f565b8160018151811061397457613973614e0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139d9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612174565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a3b959493929190614f75565b600060405180830381600087803b158015613a5557600080fd5b505af1158015613a69573d6000803e3d6000fd5b505050505050565b613a9c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612174565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b2396959493929190614fcf565b60606040518083038185885af1158015613b41573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b669190615045565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ba7578082015181840152602081019050613b8c565b83811115613bb6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bd882613b6d565b613be28185613b78565b9350613bf2818560208601613b89565b613bfb81613bbc565b840191505092915050565b60006020820190508181036000830152613c208184613bcd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c5882613c2d565b9050919050565b613c6881613c4d565b8114613c7357600080fd5b50565b600081359050613c8581613c5f565b92915050565b6000819050919050565b613c9e81613c8b565b8114613ca957600080fd5b50565b600081359050613cbb81613c95565b92915050565b60008060408385031215613cd857613cd7613c28565b5b6000613ce685828601613c76565b9250506020613cf785828601613cac565b9150509250929050565b60008115159050919050565b613d1681613d01565b82525050565b6000602082019050613d316000830184613d0d565b92915050565b613d4081613c8b565b82525050565b6000602082019050613d5b6000830184613d37565b92915050565b600060208284031215613d7757613d76613c28565b5b6000613d8584828501613c76565b91505092915050565b6000819050919050565b6000613db3613dae613da984613c2d565b613d8e565b613c2d565b9050919050565b6000613dc582613d98565b9050919050565b6000613dd782613dba565b9050919050565b613de781613dcc565b82525050565b6000602082019050613e026000830184613dde565b92915050565b600060208284031215613e1e57613e1d613c28565b5b6000613e2c84828501613cac565b91505092915050565b600080600060608486031215613e4e57613e4d613c28565b5b6000613e5c86828701613c76565b9350506020613e6d86828701613c76565b9250506040613e7e86828701613cac565b9150509250925092565b613e9181613c4d565b82525050565b6000602082019050613eac6000830184613e88565b92915050565b600060ff82169050919050565b613ec881613eb2565b82525050565b6000602082019050613ee36000830184613ebf565b92915050565b60008060008060808587031215613f0357613f02613c28565b5b6000613f1187828801613cac565b9450506020613f2287828801613cac565b9350506040613f3387828801613cac565b9250506060613f4487828801613cac565b91505092959194509250565b613f5981613d01565b8114613f6457600080fd5b50565b600081359050613f7681613f50565b92915050565b60008060408385031215613f9357613f92613c28565b5b6000613fa185828601613c76565b9250506020613fb285828601613f67565b9150509250929050565b600060208284031215613fd257613fd1613c28565b5b6000613fe084828501613f67565b91505092915050565b6000806040838503121561400057613fff613c28565b5b600061400e85828601613c76565b925050602061401f85828601613c76565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405f602083613b78565b915061406a82614029565b602082019050919050565b6000602082019050818103600083015261408e81614052565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140dc57607f821691505b602082108114156140f0576140ef614095565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061413082613c8b565b915061413b83613c8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614174576141736140f6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141b982613c8b565b91506141c483613c8b565b9250826141d4576141d361417f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061423b602f83613b78565b9150614246826141df565b604082019050919050565b6000602082019050818103600083015261426a8161422e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142cd602883613b78565b91506142d882614271565b604082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b600061430e82613c8b565b915061431983613c8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561434e5761434d6140f6565b5b828201905092915050565b7f4d61782042757946656520313025000000000000000000000000000000000000600082015250565b600061438f600e83613b78565b915061439a82614359565b602082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614421603983613b78565b915061442c826143c5565b604082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006144b3602583613b78565b91506144be82614457565b604082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614545602483613b78565b9150614550826144e9565b604082019050919050565b6000602082019050818103600083015261457481614538565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006145d7603583613b78565b91506145e28261457b565b604082019050919050565b60006020820190508181036000830152614606816145ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614669603483613b78565b91506146748261460d565b604082019050919050565b600060208201905081810360008301526146988161465c565b9050919050565b7f4d61782053656c6c466565203130250000000000000000000000000000000000600082015250565b60006146d5600f83613b78565b91506146e08261469f565b602082019050919050565b60006020820190508181036000830152614704816146c8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614767602683613b78565b91506147728261470b565b604082019050919050565b600060208201905081810360008301526147968161475a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147f9602483613b78565b91506148048261479d565b604082019050919050565b60006020820190508181036000830152614828816147ec565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061488b602283613b78565b91506148968261482f565b604082019050919050565b600060208201905081810360008301526148ba8161487e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061491d602583613b78565b9150614928826148c1565b604082019050919050565b6000602082019050818103600083015261494c81614910565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006149af602383613b78565b91506149ba82614953565b604082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614a1b601683613b78565b9150614a26826149e5565b602082019050919050565b60006020820190508181036000830152614a4a81614a0e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614ad3604983613b78565b9150614ade82614a51565b606082019050919050565b60006020820190508181036000830152614b0281614ac6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614b65603583613b78565b9150614b7082614b09565b604082019050919050565b60006020820190508181036000830152614b9481614b58565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614bd1601383613b78565b9150614bdc82614b9b565b602082019050919050565b60006020820190508181036000830152614c0081614bc4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614c63603683613b78565b9150614c6e82614c07565b604082019050919050565b60006020820190508181036000830152614c9281614c56565b9050919050565b6000614ca482613c8b565b9150614caf83613c8b565b925082821015614cc257614cc16140f6565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d29602683613b78565b9150614d3482614ccd565b604082019050919050565b60006020820190508181036000830152614d5881614d1c565b9050919050565b600081905092915050565b50565b6000614d7a600083614d5f565b9150614d8582614d6a565b600082019050919050565b6000614d9b82614d6d565b9150819050919050565b6000606082019050614dba6000830186613d37565b614dc76020830185613d37565b614dd46040830184613d37565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614e4981613c5f565b92915050565b600060208284031215614e6557614e64613c28565b5b6000614e7384828501614e3a565b91505092915050565b6000819050919050565b6000614ea1614e9c614e9784614e7c565b613d8e565b613c8b565b9050919050565b614eb181614e86565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614eec81613c4d565b82525050565b6000614efe8383614ee3565b60208301905092915050565b6000602082019050919050565b6000614f2282614eb7565b614f2c8185614ec2565b9350614f3783614ed3565b8060005b83811015614f68578151614f4f8882614ef2565b9750614f5a83614f0a565b925050600181019050614f3b565b5085935050505092915050565b600060a082019050614f8a6000830188613d37565b614f976020830187614ea8565b8181036040830152614fa98186614f17565b9050614fb86060830185613e88565b614fc56080830184613d37565b9695505050505050565b600060c082019050614fe46000830189613e88565b614ff16020830188613d37565b614ffe6040830187614ea8565b61500b6060830186614ea8565b6150186080830185613e88565b61502560a0830184613d37565b979650505050505050565b60008151905061503f81613c95565b92915050565b60008060006060848603121561505e5761505d613c28565b5b600061506c86828701615030565b935050602061507d86828701615030565b925050604061508e86828701615030565b915050925092509256fea26469706673582212209e86096bf8eb8e2c07891880414d6fc1c54aff95f6abcd1a94c3fce93af8196464736f6c634300080a0033
Deployed Bytecode Sourcemap
32704:16526:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37547:110;;;;;;;;;;;;;:::i;:::-;;9631:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11798:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33740:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34177:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32778:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10751:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33961:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33921;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38601:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12449:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32881:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10593:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13350:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33883:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32836:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33190:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41234:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33708:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33270:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39520:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10922:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2866:103;;;;;;;;;;;;;:::i;:::-;;39149:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33005:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32970:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33601:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2215:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33042:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33776:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39412:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9850:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40726:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33675:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34001:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33852:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33566:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14068:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11262:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34398:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33230:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40536:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38884:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33487:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33075:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38096:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33535:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11500:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37709:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33117:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40020:508;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37891:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33638:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3124:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33814:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33157:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37547:110;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37616:4:::1;37600:13;;:20;;;;;;;;;;;;;;;;;;37645:4;37631:11;;:18;;;;;;;;;;;;;;;;;;37547:110::o:0;9631:100::-;9685:13;9718:5;9711:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9631:100;:::o;11798:169::-;11881:4;11898:39;11907:12;:10;:12::i;:::-;11921:7;11930:6;11898:8;:39::i;:::-;11955:4;11948:11;;11798:169;;;;:::o;33740:29::-;;;;:::o;34177:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32778:51::-;;;:::o;10751:108::-;10812:7;10839:12;;10832:19;;10751:108;:::o;33961:33::-;;;;:::o;33921:::-;;;;:::o;38601:275::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38738:4:::1;38730;38725:1;38709:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38708:26;;;;:::i;:::-;38707:35;;;;:::i;:::-;38697:6;:45;;38675:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38861:6;38851;:17;;;;:::i;:::-;38828:20;:40;;;;38601:275:::0;:::o;12449:492::-;12589:4;12606:36;12616:6;12624:9;12635:6;12606:9;:36::i;:::-;12655:24;12682:11;:19;12694:6;12682:19;;;;;;;;;;;;;;;:33;12702:12;:10;:12::i;:::-;12682:33;;;;;;;;;;;;;;;;12655:60;;12754:6;12734:16;:26;;12726:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12841:57;12850:6;12858:12;:10;:12::i;:::-;12891:6;12872:16;:25;12841:8;:57::i;:::-;12929:4;12922:11;;;12449:492;;;;;:::o;32881:53::-;32927:6;32881:53;:::o;10593:93::-;10651:5;10676:2;10669:9;;10593:93;:::o;13350:215::-;13438:4;13455:80;13464:12;:10;:12::i;:::-;13478:7;13524:10;13487:11;:25;13499:12;:10;:12::i;:::-;13487:25;;;;;;;;;;;;;;;:34;13513:7;13487:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13455:8;:80::i;:::-;13553:4;13546:11;;13350:215;;;;:::o;33883:31::-;;;;:::o;32836:38::-;;;:::o;33190:33::-;;;;;;;;;;;;;:::o;41234:126::-;41300:4;41324:19;:28;41344:7;41324:28;;;;;;;;;;;;;;;;;;;;;;;;;41317:35;;41234:126;;;:::o;33708:28::-;;;;:::o;33270:30::-;;;;;;;;;;;;;:::o;39520:492::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39749:2:::1;39737:7;39721:13;39705;39691:11;:27;;;;:::i;:::-;:43;;;;:::i;:::-;:53;;;;:::i;:::-;39690:61;;39682:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;39791:11;39775:13;:27;;;;39831:13;39813:15;:31;;;;39873:13;39855:15;:31;;;;39909:7;39897:9;:19;;;;39994:9;;39976:15;;39958;;39942:13;;:31;;;;:::i;:::-;:49;;;;:::i;:::-;:61;;;;:::i;:::-;39927:12;:76;;;;39520:492:::0;;;;:::o;10922:127::-;10996:7;11023:9;:18;11033:7;11023:18;;;;;;;;;;;;;;;;11016:25;;10922:127;;;:::o;2866:103::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2931:30:::1;2958:1;2931:18;:30::i;:::-;2866:103::o:0;39149:167::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:4:::1;39262:31;:39;39294:6;39262:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39149:167:::0;;:::o;33005:30::-;;;;;;;;;;;;;:::o;32970:28::-;;;;;;;;;;;;;:::o;33601:30::-;;;;:::o;2215:87::-;2261:7;2288:6;;;;;;;;;;;2281:13;;2215:87;:::o;33042:24::-;;;;;;;;;;;;;:::o;33776:31::-;;;;:::o;39412:100::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39497:7:::1;39483:11;;:21;;;;;;;;;;;;;;;;;;39412:100:::0;:::o;9850:104::-;9906:13;9939:7;9932:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9850:104;:::o;40726:304::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40870:13:::1;40862:21;;:4;:21;;;;40840:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;40981:41;41010:4;41016:5;40981:28;:41::i;:::-;40726:304:::0;;:::o;33675:24::-;;;;:::o;34001:27::-;;;;:::o;33852:25::-;;;;:::o;33566:28::-;;;;:::o;14068:413::-;14161:4;14178:24;14205:11;:25;14217:12;:10;:12::i;:::-;14205:25;;;;;;;;;;;;;;;:34;14231:7;14205:34;;;;;;;;;;;;;;;;14178:61;;14278:15;14258:16;:35;;14250:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14371:67;14380:12;:10;:12::i;:::-;14394:7;14422:15;14403:16;:34;14371:8;:67::i;:::-;14469:4;14462:11;;;14068:413;;;;:::o;11262:175::-;11348:4;11365:42;11375:12;:10;:12::i;:::-;11389:9;11400:6;11365:9;:42::i;:::-;11425:4;11418:11;;11262:175;;;;:::o;34398:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33230:33::-;;;;;;;;;;;;;:::o;40536:182::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40652:8:::1;40621:19;:28;40641:7;40621:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40692:7;40676:34;;;40701:8;40676:34;;;;;;:::i;:::-;;;;;;;;40536:182:::0;;:::o;38884:256::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39024:4:::1;39016;39011:1;38995:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38994:26;;;;:::i;:::-;38993:35;;;;:::i;:::-;38983:6;:45;;38961:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39125:6;39115;:17;;;;:::i;:::-;39103:9;:29;;;;38884:256:::0;:::o;33487:39::-;;;;;;;;;;;;;:::o;33075:35::-;;;;:::o;38096:497::-;38204:4;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38283:6:::1;38278:1;38262:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38261:28;;;;:::i;:::-;38248:9;:41;;38226:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;38438:4;38433:1;38417:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38416:26;;;;:::i;:::-;38403:9;:39;;38381:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38554:9;38533:18;:30;;;;38581:4;38574:11;;38096:497:::0;;;:::o;33535:27::-;;;;:::o;11500:151::-;11589:7;11616:11;:18;11628:5;11616:18;;;;;;;;;;;;;;;:27;11635:7;11616:27;;;;;;;;;;;;;;;;11609:34;;11500:151;;;;:::o;37709:121::-;37761:4;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37795:5:::1;37778:14;;:22;;;;;;;;;;;;;;;;;;37818:4;37811:11;;37709:121:::0;:::o;33117:33::-;;;;:::o;40020:508::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40256:2:::1;40244:7;40228:13;40212;40198:11;:27;;;;:::i;:::-;:43;;;;:::i;:::-;:53;;;;:::i;:::-;40197:61;;40189:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40300:11;40283:14;:28;;;;40341:13;40322:16;:32;;;;40384:13;40365:16;:32;;;;40421:7;40408:10;:20;;;;40510:10;;40491:16;;40472;;40455:14;;:33;;;;:::i;:::-;:52;;;;:::i;:::-;:65;;;;:::i;:::-;40439:13;:81;;;;40020:508:::0;;;;:::o;37891:135::-;37951:4;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37991:5:::1;37968:20;;:28;;;;;;;;;;;;;;;;;;38014:4;38007:11;;37891:135:::0;:::o;33638:30::-;;;;:::o;3124:201::-;2446:12;:10;:12::i;:::-;2435:23;;:7;:5;:7::i;:::-;:23;;;2427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3233:1:::1;3213:22;;:8;:22;;;;3205:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3289:28;3308:8;3289:18;:28::i;:::-;3124:201:::0;:::o;33814:31::-;;;;:::o;33157:24::-;;;;:::o;888:98::-;941:7;968:10;961:17;;888:98;:::o;17752:380::-;17905:1;17888:19;;:5;:19;;;;17880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17986:1;17967:21;;:7;:21;;;;17959:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18070:6;18040:11;:18;18052:5;18040:18;;;;;;;;;;;;;;;:27;18059:7;18040:27;;;;;;;;;;;;;;;:36;;;;18108:7;18092:32;;18101:5;18092:32;;;18117:6;18092:32;;;;;;:::i;:::-;;;;;;;;17752:380;;;:::o;41368:4847::-;41516:1;41500:18;;:4;:18;;;;41492:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41593:1;41579:16;;:2;:16;;;;41571:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41662:1;41652:6;:11;41648:93;;;41680:28;41696:4;41702:2;41706:1;41680:15;:28::i;:::-;41723:7;;41648:93;41757:14;;;;;;;;;;;41753:2487;;;41818:7;:5;:7::i;:::-;41810:15;;:4;:15;;;;:49;;;;;41852:7;:5;:7::i;:::-;41846:13;;:2;:13;;;;41810:49;:86;;;;;41894:1;41880:16;;:2;:16;;;;41810:86;:128;;;;;41931:6;41917:21;;:2;:21;;;;41810:128;:158;;;;;41960:8;;;;;;;;;;;41959:9;41810:158;41788:2441;;;42008:13;;;;;;;;;;;42003:223;;42080:19;:25;42100:4;42080:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42109:19;:23;42129:2;42109:23;;;;;;;;;;;;;;;;;;;;;;;;;42080:52;42046:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;42003:223;42382:20;;;;;;;;;;;42378:641;;;42463:7;:5;:7::i;:::-;42457:13;;:2;:13;;;;:72;;;;;42513:15;42499:30;;:2;:30;;;;42457:72;:129;;;;;42572:13;42558:28;;:2;:28;;;;42457:129;42427:573;;;42750:12;42675:28;:39;42704:9;42675:39;;;;;;;;;;;;;;;;:87;42637:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42964:12;42922:28;:39;42951:9;42922:39;;;;;;;;;;;;;;;:54;;;;42427:573;42378:641;43093:25;:31;43119:4;43093:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43150:31;:35;43182:2;43150:35;;;;;;;;;;;;;;;;;;;;;;;;;43149:36;43093:92;43067:1147;;;43272:20;;43262:6;:30;;43228:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;43480:9;;43463:13;43473:2;43463:9;:13::i;:::-;43454:6;:22;;;;:::i;:::-;:35;;43420:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43067:1147;;;43658:25;:29;43684:2;43658:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43713:31;:37;43745:4;43713:37;;;;;;;;;;;;;;;;;;;;;;;;;43712:38;43658:92;43632:582;;;43837:20;;43827:6;:30;;43793:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;43632:582;;;43994:31;:35;44026:2;43994:35;;;;;;;;;;;;;;;;;;;;;;;;;43989:225;;44114:9;;44097:13;44107:2;44097:9;:13::i;:::-;44088:6;:22;;;;:::i;:::-;:35;;44054:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43989:225;43632:582;43067:1147;41788:2441;41753:2487;44252:28;44283:24;44301:4;44283:9;:24::i;:::-;44252:55;;44320:12;44359:18;;44335:20;:42;;44320:57;;44408:7;:35;;;;;44432:11;;;;;;;;;;;44408:35;:61;;;;;44461:8;;;;;;;;;;;44460:9;44408:61;:110;;;;;44487:25;:31;44513:4;44487:31;;;;;;;;;;;;;;;;;;;;;;;;;44486:32;44408:110;:153;;;;;44536:19;:25;44556:4;44536:25;;;;;;;;;;;;;;;;;;;;;;;;;44535:26;44408:153;:194;;;;;44579:19;:23;44599:2;44579:23;;;;;;;;;;;;;;;;;;;;;;;;;44578:24;44408:194;44390:326;;;44640:4;44629:8;;:15;;;;;;;;;;;;;;;;;;44661:10;:8;:10::i;:::-;44699:5;44688:8;;:16;;;;;;;;;;;;;;;;;;44390:326;44728:12;44744:8;;;;;;;;;;;44743:9;44728:24;;44854:19;:25;44874:4;44854:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44883:19;:23;44903:2;44883:23;;;;;;;;;;;;;;;;;;;;;;;;;44854:52;44850:100;;;44933:5;44923:15;;44850:100;44962:12;45067:7;45063:1099;;;45119:25;:29;45145:2;45119:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45168:1;45152:13;;:17;45119:50;45115:898;;;45197:34;45227:3;45197:25;45208:13;;45197:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45190:41;;45284:13;;45266:14;;45259:4;:21;;;;:::i;:::-;45258:39;;;;:::i;:::-;45238:16;;:59;;;;;;;:::i;:::-;;;;;;;;45366:13;;45346:16;;45339:4;:23;;;;:::i;:::-;45338:41;;;;:::i;:::-;45316:18;;:63;;;;;;;:::i;:::-;;;;;;;;45436:13;;45422:10;;45415:4;:17;;;;:::i;:::-;45414:35;;;;:::i;:::-;45398:12;;:51;;;;;;;:::i;:::-;;;;;;;;45518:13;;45498:16;;45491:4;:23;;;;:::i;:::-;45490:41;;;;:::i;:::-;45468:18;;:63;;;;;;;:::i;:::-;;;;;;;;45115:898;;;45593:25;:31;45619:4;45593:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;45643:1;45628:12;;:16;45593:51;45589:424;;;45672:33;45701:3;45672:24;45683:12;;45672:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45665:40;;45757:12;;45740:13;;45733:4;:20;;;;:::i;:::-;45732:37;;;;:::i;:::-;45712:16;;:57;;;;;;;:::i;:::-;;;;;;;;45837:12;;45818:15;;45811:4;:22;;;;:::i;:::-;45810:39;;;;:::i;:::-;45788:18;;:61;;;;;;;:::i;:::-;;;;;;;;45905:12;;45892:9;;45885:4;:16;;;;:::i;:::-;45884:33;;;;:::i;:::-;45868:12;;:49;;;;;;;:::i;:::-;;;;;;;;45985:12;;45966:15;;45959:4;:22;;;;:::i;:::-;45958:39;;;;:::i;:::-;45936:18;;:61;;;;;;;:::i;:::-;;;;;;;;45589:424;45115:898;46040:1;46033:4;:8;46029:91;;;46062:42;46078:4;46092;46099;46062:15;:42::i;:::-;46029:91;46146:4;46136:14;;;;;:::i;:::-;;;45063:1099;46174:33;46190:4;46196:2;46200:6;46174:15;:33::i;:::-;41481:4734;;;;41368:4847;;;;:::o;3485:191::-;3559:16;3578:6;;;;;;;;;;;3559:25;;3604:8;3595:6;;:17;;;;;;;;;;;;;;;;;;3659:8;3628:40;;3649:8;3628:40;;;;;;;;;;;;3548:128;3485:191;:::o;41038:188::-;41155:5;41121:25;:31;41147:4;41121:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41212:5;41178:40;;41206:4;41178:40;;;;;;;;;;;;41038:188;;:::o;14971:733::-;15129:1;15111:20;;:6;:20;;;;15103:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15213:1;15192:23;;:9;:23;;;;15184:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15268:47;15289:6;15297:9;15308:6;15268:20;:47::i;:::-;15328:21;15352:9;:17;15362:6;15352:17;;;;;;;;;;;;;;;;15328:41;;15405:6;15388:13;:23;;15380:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15526:6;15510:13;:22;15490:9;:17;15500:6;15490:17;;;;;;;;;;;;;;;:42;;;;15578:6;15554:9;:20;15564:9;15554:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15619:9;15602:35;;15611:6;15602:35;;;15630:6;15602:35;;;;;;:::i;:::-;;;;;;;;15650:46;15670:6;15678:9;15689:6;15650:19;:46::i;:::-;15092:612;14971:733;;;:::o;47343:1882::-;47382:23;47408:24;47426:4;47408:9;:24::i;:::-;47382:50;;47443:25;47532:12;;47511:18;;47490;;47471:16;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:73;;;;:::i;:::-;47443:101;;47555:12;47603:1;47584:15;:20;:46;;;;47629:1;47608:17;:22;47584:46;47580:85;;;47647:7;;;;;47580:85;47720:2;47699:18;;:23;;;;:::i;:::-;47681:15;:41;47677:115;;;47778:2;47757:18;;:23;;;;:::i;:::-;47739:41;;47677:115;47853:23;47940:1;47920:17;47898:18;;47880:15;:36;;;;:::i;:::-;47879:58;;;;:::i;:::-;:62;;;;:::i;:::-;47853:88;;47952:26;47981:36;48001:15;47981;:19;;:36;;;;:::i;:::-;47952:65;;48030:25;48058:21;48030:49;;48092:36;48109:18;48092:16;:36::i;:::-;48141:18;48162:44;48188:17;48162:21;:25;;:44;;;;:::i;:::-;48141:65;;48213:21;48237:55;48274:17;48237:32;48252:16;;48237:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;48213:79;;48303:23;48329:57;48368:17;48329:34;48344:18;;48329:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;48303:83;;48397:17;48417:51;48450:17;48417:28;48432:12;;48417:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;48397:71;;48481:23;48554:9;48536:15;48520:13;48507:10;:26;;;;:::i;:::-;:44;;;;:::i;:::-;:56;;;;:::i;:::-;48481:82;;48597:1;48576:18;:22;;;;48622:1;48603:16;:20;;;;48655:1;48634:18;:22;;;;48682:1;48667:12;:16;;;;48718:9;;;;;;;;;;;48710:23;;48741:9;48710:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48696:59;;;;;48788:15;;;;;;;;;;;48780:29;;48817:15;48780:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48766:71;;;;;48874:1;48856:15;:19;:42;;;;;48897:1;48879:15;:19;48856:42;48852:278;;;48915:46;48928:15;48945;48915:12;:46::i;:::-;48981:137;49014:18;49051:15;49085:18;;48981:137;;;;;;;;:::i;:::-;;;;;;;;48852:278;49164:13;;;;;;;;;;;49156:27;;49191:21;49156:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49142:75;;;;;47371:1854;;;;;;;;;;;47343:1882;:::o;23205:98::-;23263:7;23294:1;23290;:5;;;;:::i;:::-;23283:12;;23205:98;;;;:::o;23604:::-;23662:7;23693:1;23689;:5;;;;:::i;:::-;23682:12;;23604:98;;;;:::o;18732:125::-;;;;:::o;19461:124::-;;;;:::o;22848:98::-;22906:7;22937:1;22933;:5;;;;:::i;:::-;22926:12;;22848:98;;;;:::o;46223:589::-;46349:21;46387:1;46373:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46349:40;;46418:4;46400;46405:1;46400:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46444:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46434:4;46439:1;46434:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46479:62;46496:4;46511:15;46529:11;46479:8;:62::i;:::-;46580:15;:66;;;46661:11;46687:1;46731:4;46758;46778:15;46580:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46278:534;46223:589;:::o;46820:515::-;46968:62;46985:4;47000:15;47018:11;46968:8;:62::i;:::-;47073:15;:31;;;47112:9;47145:4;47165:11;47191:1;47234;47277:9;;;;;;;;;;;47301:15;47073:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46820:515;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:765::-;6987:6;6995;7003;7011;7060:3;7048:9;7039:7;7035:23;7031:33;7028:120;;;7067:79;;:::i;:::-;7028:120;7187:1;7212:53;7257:7;7248:6;7237:9;7233:22;7212:53;:::i;:::-;7202:63;;7158:117;7314:2;7340:53;7385:7;7376:6;7365:9;7361:22;7340:53;:::i;:::-;7330:63;;7285:118;7442:2;7468:53;7513:7;7504:6;7493:9;7489:22;7468:53;:::i;:::-;7458:63;;7413:118;7570:2;7596:53;7641:7;7632:6;7621:9;7617:22;7596:53;:::i;:::-;7586:63;;7541:118;6901:765;;;;;;;:::o;7672:116::-;7742:21;7757:5;7742:21;:::i;:::-;7735:5;7732:32;7722:60;;7778:1;7775;7768:12;7722:60;7672:116;:::o;7794:133::-;7837:5;7875:6;7862:20;7853:29;;7891:30;7915:5;7891:30;:::i;:::-;7794:133;;;;:::o;7933:468::-;7998:6;8006;8055:2;8043:9;8034:7;8030:23;8026:32;8023:119;;;8061:79;;:::i;:::-;8023:119;8181:1;8206:53;8251:7;8242:6;8231:9;8227:22;8206:53;:::i;:::-;8196:63;;8152:117;8308:2;8334:50;8376:7;8367:6;8356:9;8352:22;8334:50;:::i;:::-;8324:60;;8279:115;7933:468;;;;;:::o;8407:323::-;8463:6;8512:2;8500:9;8491:7;8487:23;8483:32;8480:119;;;8518:79;;:::i;:::-;8480:119;8638:1;8663:50;8705:7;8696:6;8685:9;8681:22;8663:50;:::i;:::-;8653:60;;8609:114;8407:323;;;;:::o;8736:474::-;8804:6;8812;8861:2;8849:9;8840:7;8836:23;8832:32;8829:119;;;8867:79;;:::i;:::-;8829:119;8987:1;9012:53;9057:7;9048:6;9037:9;9033:22;9012:53;:::i;:::-;9002:63;;8958:117;9114:2;9140:53;9185:7;9176:6;9165:9;9161:22;9140:53;:::i;:::-;9130:63;;9085:118;8736:474;;;;;:::o;9216:182::-;9356:34;9352:1;9344:6;9340:14;9333:58;9216:182;:::o;9404:366::-;9546:3;9567:67;9631:2;9626:3;9567:67;:::i;:::-;9560:74;;9643:93;9732:3;9643:93;:::i;:::-;9761:2;9756:3;9752:12;9745:19;;9404:366;;;:::o;9776:419::-;9942:4;9980:2;9969:9;9965:18;9957:26;;10029:9;10023:4;10019:20;10015:1;10004:9;10000:17;9993:47;10057:131;10183:4;10057:131;:::i;:::-;10049:139;;9776:419;;;:::o;10201:180::-;10249:77;10246:1;10239:88;10346:4;10343:1;10336:15;10370:4;10367:1;10360:15;10387:320;10431:6;10468:1;10462:4;10458:12;10448:22;;10515:1;10509:4;10505:12;10536:18;10526:81;;10592:4;10584:6;10580:17;10570:27;;10526:81;10654:2;10646:6;10643:14;10623:18;10620:38;10617:84;;;10673:18;;:::i;:::-;10617:84;10438:269;10387:320;;;:::o;10713:180::-;10761:77;10758:1;10751:88;10858:4;10855:1;10848:15;10882:4;10879:1;10872:15;10899:348;10939:7;10962:20;10980:1;10962:20;:::i;:::-;10957:25;;10996:20;11014:1;10996:20;:::i;:::-;10991:25;;11184:1;11116:66;11112:74;11109:1;11106:81;11101:1;11094:9;11087:17;11083:105;11080:131;;;11191:18;;:::i;:::-;11080:131;11239:1;11236;11232:9;11221:20;;10899:348;;;;:::o;11253:180::-;11301:77;11298:1;11291:88;11398:4;11395:1;11388:15;11422:4;11419:1;11412:15;11439:185;11479:1;11496:20;11514:1;11496:20;:::i;:::-;11491:25;;11530:20;11548:1;11530:20;:::i;:::-;11525:25;;11569:1;11559:35;;11574:18;;:::i;:::-;11559:35;11616:1;11613;11609:9;11604:14;;11439:185;;;;:::o;11630:234::-;11770:34;11766:1;11758:6;11754:14;11747:58;11839:17;11834:2;11826:6;11822:15;11815:42;11630:234;:::o;11870:366::-;12012:3;12033:67;12097:2;12092:3;12033:67;:::i;:::-;12026:74;;12109:93;12198:3;12109:93;:::i;:::-;12227:2;12222:3;12218:12;12211:19;;11870:366;;;:::o;12242:419::-;12408:4;12446:2;12435:9;12431:18;12423:26;;12495:9;12489:4;12485:20;12481:1;12470:9;12466:17;12459:47;12523:131;12649:4;12523:131;:::i;:::-;12515:139;;12242:419;;;:::o;12667:227::-;12807:34;12803:1;12795:6;12791:14;12784:58;12876:10;12871:2;12863:6;12859:15;12852:35;12667:227;:::o;12900:366::-;13042:3;13063:67;13127:2;13122:3;13063:67;:::i;:::-;13056:74;;13139:93;13228:3;13139:93;:::i;:::-;13257:2;13252:3;13248:12;13241:19;;12900:366;;;:::o;13272:419::-;13438:4;13476:2;13465:9;13461:18;13453:26;;13525:9;13519:4;13515:20;13511:1;13500:9;13496:17;13489:47;13553:131;13679:4;13553:131;:::i;:::-;13545:139;;13272:419;;;:::o;13697:305::-;13737:3;13756:20;13774:1;13756:20;:::i;:::-;13751:25;;13790:20;13808:1;13790:20;:::i;:::-;13785:25;;13944:1;13876:66;13872:74;13869:1;13866:81;13863:107;;;13950:18;;:::i;:::-;13863:107;13994:1;13991;13987:9;13980:16;;13697:305;;;;:::o;14008:164::-;14148:16;14144:1;14136:6;14132:14;14125:40;14008:164;:::o;14178:366::-;14320:3;14341:67;14405:2;14400:3;14341:67;:::i;:::-;14334:74;;14417:93;14506:3;14417:93;:::i;:::-;14535:2;14530:3;14526:12;14519:19;;14178:366;;;:::o;14550:419::-;14716:4;14754:2;14743:9;14739:18;14731:26;;14803:9;14797:4;14793:20;14789:1;14778:9;14774:17;14767:47;14831:131;14957:4;14831:131;:::i;:::-;14823:139;;14550:419;;;:::o;14975:244::-;15115:34;15111:1;15103:6;15099:14;15092:58;15184:27;15179:2;15171:6;15167:15;15160:52;14975:244;:::o;15225:366::-;15367:3;15388:67;15452:2;15447:3;15388:67;:::i;:::-;15381:74;;15464:93;15553:3;15464:93;:::i;:::-;15582:2;15577:3;15573:12;15566:19;;15225:366;;;:::o;15597:419::-;15763:4;15801:2;15790:9;15786:18;15778:26;;15850:9;15844:4;15840:20;15836:1;15825:9;15821:17;15814:47;15878:131;16004:4;15878:131;:::i;:::-;15870:139;;15597:419;;;:::o;16022:224::-;16162:34;16158:1;16150:6;16146:14;16139:58;16231:7;16226:2;16218:6;16214:15;16207:32;16022:224;:::o;16252:366::-;16394:3;16415:67;16479:2;16474:3;16415:67;:::i;:::-;16408:74;;16491:93;16580:3;16491:93;:::i;:::-;16609:2;16604:3;16600:12;16593:19;;16252:366;;;:::o;16624:419::-;16790:4;16828:2;16817:9;16813:18;16805:26;;16877:9;16871:4;16867:20;16863:1;16852:9;16848:17;16841:47;16905:131;17031:4;16905:131;:::i;:::-;16897:139;;16624:419;;;:::o;17049:223::-;17189:34;17185:1;17177:6;17173:14;17166:58;17258:6;17253:2;17245:6;17241:15;17234:31;17049:223;:::o;17278:366::-;17420:3;17441:67;17505:2;17500:3;17441:67;:::i;:::-;17434:74;;17517:93;17606:3;17517:93;:::i;:::-;17635:2;17630:3;17626:12;17619:19;;17278:366;;;:::o;17650:419::-;17816:4;17854:2;17843:9;17839:18;17831:26;;17903:9;17897:4;17893:20;17889:1;17878:9;17874:17;17867:47;17931:131;18057:4;17931:131;:::i;:::-;17923:139;;17650:419;;;:::o;18075:240::-;18215:34;18211:1;18203:6;18199:14;18192:58;18284:23;18279:2;18271:6;18267:15;18260:48;18075:240;:::o;18321:366::-;18463:3;18484:67;18548:2;18543:3;18484:67;:::i;:::-;18477:74;;18560:93;18649:3;18560:93;:::i;:::-;18678:2;18673:3;18669:12;18662:19;;18321:366;;;:::o;18693:419::-;18859:4;18897:2;18886:9;18882:18;18874:26;;18946:9;18940:4;18936:20;18932:1;18921:9;18917:17;18910:47;18974:131;19100:4;18974:131;:::i;:::-;18966:139;;18693:419;;;:::o;19118:239::-;19258:34;19254:1;19246:6;19242:14;19235:58;19327:22;19322:2;19314:6;19310:15;19303:47;19118:239;:::o;19363:366::-;19505:3;19526:67;19590:2;19585:3;19526:67;:::i;:::-;19519:74;;19602:93;19691:3;19602:93;:::i;:::-;19720:2;19715:3;19711:12;19704:19;;19363:366;;;:::o;19735:419::-;19901:4;19939:2;19928:9;19924:18;19916:26;;19988:9;19982:4;19978:20;19974:1;19963:9;19959:17;19952:47;20016:131;20142:4;20016:131;:::i;:::-;20008:139;;19735:419;;;:::o;20160:165::-;20300:17;20296:1;20288:6;20284:14;20277:41;20160:165;:::o;20331:366::-;20473:3;20494:67;20558:2;20553:3;20494:67;:::i;:::-;20487:74;;20570:93;20659:3;20570:93;:::i;:::-;20688:2;20683:3;20679:12;20672:19;;20331:366;;;:::o;20703:419::-;20869:4;20907:2;20896:9;20892:18;20884:26;;20956:9;20950:4;20946:20;20942:1;20931:9;20927:17;20920:47;20984:131;21110:4;20984:131;:::i;:::-;20976:139;;20703:419;;;:::o;21128:225::-;21268:34;21264:1;21256:6;21252:14;21245:58;21337:8;21332:2;21324:6;21320:15;21313:33;21128:225;:::o;21359:366::-;21501:3;21522:67;21586:2;21581:3;21522:67;:::i;:::-;21515:74;;21598:93;21687:3;21598:93;:::i;:::-;21716:2;21711:3;21707:12;21700:19;;21359:366;;;:::o;21731:419::-;21897:4;21935:2;21924:9;21920:18;21912:26;;21984:9;21978:4;21974:20;21970:1;21959:9;21955:17;21948:47;22012:131;22138:4;22012:131;:::i;:::-;22004:139;;21731:419;;;:::o;22156:223::-;22296:34;22292:1;22284:6;22280:14;22273:58;22365:6;22360:2;22352:6;22348:15;22341:31;22156:223;:::o;22385:366::-;22527:3;22548:67;22612:2;22607:3;22548:67;:::i;:::-;22541:74;;22624:93;22713:3;22624:93;:::i;:::-;22742:2;22737:3;22733:12;22726:19;;22385:366;;;:::o;22757:419::-;22923:4;22961:2;22950:9;22946:18;22938:26;;23010:9;23004:4;23000:20;22996:1;22985:9;22981:17;22974:47;23038:131;23164:4;23038:131;:::i;:::-;23030:139;;22757:419;;;:::o;23182:221::-;23322:34;23318:1;23310:6;23306:14;23299:58;23391:4;23386:2;23378:6;23374:15;23367:29;23182:221;:::o;23409:366::-;23551:3;23572:67;23636:2;23631:3;23572:67;:::i;:::-;23565:74;;23648:93;23737:3;23648:93;:::i;:::-;23766:2;23761:3;23757:12;23750:19;;23409:366;;;:::o;23781:419::-;23947:4;23985:2;23974:9;23970:18;23962:26;;24034:9;24028:4;24024:20;24020:1;24009:9;24005:17;23998:47;24062:131;24188:4;24062:131;:::i;:::-;24054:139;;23781:419;;;:::o;24206:224::-;24346:34;24342:1;24334:6;24330:14;24323:58;24415:7;24410:2;24402:6;24398:15;24391:32;24206:224;:::o;24436:366::-;24578:3;24599:67;24663:2;24658:3;24599:67;:::i;:::-;24592:74;;24675:93;24764:3;24675:93;:::i;:::-;24793:2;24788:3;24784:12;24777:19;;24436:366;;;:::o;24808:419::-;24974:4;25012:2;25001:9;24997:18;24989:26;;25061:9;25055:4;25051:20;25047:1;25036:9;25032:17;25025:47;25089:131;25215:4;25089:131;:::i;:::-;25081:139;;24808:419;;;:::o;25233:222::-;25373:34;25369:1;25361:6;25357:14;25350:58;25442:5;25437:2;25429:6;25425:15;25418:30;25233:222;:::o;25461:366::-;25603:3;25624:67;25688:2;25683:3;25624:67;:::i;:::-;25617:74;;25700:93;25789:3;25700:93;:::i;:::-;25818:2;25813:3;25809:12;25802:19;;25461:366;;;:::o;25833:419::-;25999:4;26037:2;26026:9;26022:18;26014:26;;26086:9;26080:4;26076:20;26072:1;26061:9;26057:17;26050:47;26114:131;26240:4;26114:131;:::i;:::-;26106:139;;25833:419;;;:::o;26258:172::-;26398:24;26394:1;26386:6;26382:14;26375:48;26258:172;:::o;26436:366::-;26578:3;26599:67;26663:2;26658:3;26599:67;:::i;:::-;26592:74;;26675:93;26764:3;26675:93;:::i;:::-;26793:2;26788:3;26784:12;26777:19;;26436:366;;;:::o;26808:419::-;26974:4;27012:2;27001:9;26997:18;26989:26;;27061:9;27055:4;27051:20;27047:1;27036:9;27032:17;27025:47;27089:131;27215:4;27089:131;:::i;:::-;27081:139;;26808:419;;;:::o;27233:297::-;27373:34;27369:1;27361:6;27357:14;27350:58;27442:34;27437:2;27429:6;27425:15;27418:59;27511:11;27506:2;27498:6;27494:15;27487:36;27233:297;:::o;27536:366::-;27678:3;27699:67;27763:2;27758:3;27699:67;:::i;:::-;27692:74;;27775:93;27864:3;27775:93;:::i;:::-;27893:2;27888:3;27884:12;27877:19;;27536:366;;;:::o;27908:419::-;28074:4;28112:2;28101:9;28097:18;28089:26;;28161:9;28155:4;28151:20;28147:1;28136:9;28132:17;28125:47;28189:131;28315:4;28189:131;:::i;:::-;28181:139;;27908:419;;;:::o;28333:240::-;28473:34;28469:1;28461:6;28457:14;28450:58;28542:23;28537:2;28529:6;28525:15;28518:48;28333:240;:::o;28579:366::-;28721:3;28742:67;28806:2;28801:3;28742:67;:::i;:::-;28735:74;;28818:93;28907:3;28818:93;:::i;:::-;28936:2;28931:3;28927:12;28920:19;;28579:366;;;:::o;28951:419::-;29117:4;29155:2;29144:9;29140:18;29132:26;;29204:9;29198:4;29194:20;29190:1;29179:9;29175:17;29168:47;29232:131;29358:4;29232:131;:::i;:::-;29224:139;;28951:419;;;:::o;29376:169::-;29516:21;29512:1;29504:6;29500:14;29493:45;29376:169;:::o;29551:366::-;29693:3;29714:67;29778:2;29773:3;29714:67;:::i;:::-;29707:74;;29790:93;29879:3;29790:93;:::i;:::-;29908:2;29903:3;29899:12;29892:19;;29551:366;;;:::o;29923:419::-;30089:4;30127:2;30116:9;30112:18;30104:26;;30176:9;30170:4;30166:20;30162:1;30151:9;30147:17;30140:47;30204:131;30330:4;30204:131;:::i;:::-;30196:139;;29923:419;;;:::o;30348:241::-;30488:34;30484:1;30476:6;30472:14;30465:58;30557:24;30552:2;30544:6;30540:15;30533:49;30348:241;:::o;30595:366::-;30737:3;30758:67;30822:2;30817:3;30758:67;:::i;:::-;30751:74;;30834:93;30923:3;30834:93;:::i;:::-;30952:2;30947:3;30943:12;30936:19;;30595:366;;;:::o;30967:419::-;31133:4;31171:2;31160:9;31156:18;31148:26;;31220:9;31214:4;31210:20;31206:1;31195:9;31191:17;31184:47;31248:131;31374:4;31248:131;:::i;:::-;31240:139;;30967:419;;;:::o;31392:191::-;31432:4;31452:20;31470:1;31452:20;:::i;:::-;31447:25;;31486:20;31504:1;31486:20;:::i;:::-;31481:25;;31525:1;31522;31519:8;31516:34;;;31530:18;;:::i;:::-;31516:34;31575:1;31572;31568:9;31560:17;;31392:191;;;;:::o;31589:225::-;31729:34;31725:1;31717:6;31713:14;31706:58;31798:8;31793:2;31785:6;31781:15;31774:33;31589:225;:::o;31820:366::-;31962:3;31983:67;32047:2;32042:3;31983:67;:::i;:::-;31976:74;;32059:93;32148:3;32059:93;:::i;:::-;32177:2;32172:3;32168:12;32161:19;;31820:366;;;:::o;32192:419::-;32358:4;32396:2;32385:9;32381:18;32373:26;;32445:9;32439:4;32435:20;32431:1;32420:9;32416:17;32409:47;32473:131;32599:4;32473:131;:::i;:::-;32465:139;;32192:419;;;:::o;32617:147::-;32718:11;32755:3;32740:18;;32617:147;;;;:::o;32770:114::-;;:::o;32890:398::-;33049:3;33070:83;33151:1;33146:3;33070:83;:::i;:::-;33063:90;;33162:93;33251:3;33162:93;:::i;:::-;33280:1;33275:3;33271:11;33264:18;;32890:398;;;:::o;33294:379::-;33478:3;33500:147;33643:3;33500:147;:::i;:::-;33493:154;;33664:3;33657:10;;33294:379;;;:::o;33679:442::-;33828:4;33866:2;33855:9;33851:18;33843:26;;33879:71;33947:1;33936:9;33932:17;33923:6;33879:71;:::i;:::-;33960:72;34028:2;34017:9;34013:18;34004:6;33960:72;:::i;:::-;34042;34110:2;34099:9;34095:18;34086:6;34042:72;:::i;:::-;33679:442;;;;;;:::o;34127:180::-;34175:77;34172:1;34165:88;34272:4;34269:1;34262:15;34296:4;34293:1;34286:15;34313:180;34361:77;34358:1;34351:88;34458:4;34455:1;34448:15;34482:4;34479:1;34472:15;34499:143;34556:5;34587:6;34581:13;34572:22;;34603:33;34630:5;34603:33;:::i;:::-;34499:143;;;;:::o;34648:351::-;34718:6;34767:2;34755:9;34746:7;34742:23;34738:32;34735:119;;;34773:79;;:::i;:::-;34735:119;34893:1;34918:64;34974:7;34965:6;34954:9;34950:22;34918:64;:::i;:::-;34908:74;;34864:128;34648:351;;;;:::o;35005:85::-;35050:7;35079:5;35068:16;;35005:85;;;:::o;35096:158::-;35154:9;35187:61;35205:42;35214:32;35240:5;35214:32;:::i;:::-;35205:42;:::i;:::-;35187:61;:::i;:::-;35174:74;;35096:158;;;:::o;35260:147::-;35355:45;35394:5;35355:45;:::i;:::-;35350:3;35343:58;35260:147;;:::o;35413:114::-;35480:6;35514:5;35508:12;35498:22;;35413:114;;;:::o;35533:184::-;35632:11;35666:6;35661:3;35654:19;35706:4;35701:3;35697:14;35682:29;;35533:184;;;;:::o;35723:132::-;35790:4;35813:3;35805:11;;35843:4;35838:3;35834:14;35826:22;;35723:132;;;:::o;35861:108::-;35938:24;35956:5;35938:24;:::i;:::-;35933:3;35926:37;35861:108;;:::o;35975:179::-;36044:10;36065:46;36107:3;36099:6;36065:46;:::i;:::-;36143:4;36138:3;36134:14;36120:28;;35975:179;;;;:::o;36160:113::-;36230:4;36262;36257:3;36253:14;36245:22;;36160:113;;;:::o;36309:732::-;36428:3;36457:54;36505:5;36457:54;:::i;:::-;36527:86;36606:6;36601:3;36527:86;:::i;:::-;36520:93;;36637:56;36687:5;36637:56;:::i;:::-;36716:7;36747:1;36732:284;36757:6;36754:1;36751:13;36732:284;;;36833:6;36827:13;36860:63;36919:3;36904:13;36860:63;:::i;:::-;36853:70;;36946:60;36999:6;36946:60;:::i;:::-;36936:70;;36792:224;36779:1;36776;36772:9;36767:14;;36732:284;;;36736:14;37032:3;37025:10;;36433:608;;;36309:732;;;;:::o;37047:831::-;37310:4;37348:3;37337:9;37333:19;37325:27;;37362:71;37430:1;37419:9;37415:17;37406:6;37362:71;:::i;:::-;37443:80;37519:2;37508:9;37504:18;37495:6;37443:80;:::i;:::-;37570:9;37564:4;37560:20;37555:2;37544:9;37540:18;37533:48;37598:108;37701:4;37692:6;37598:108;:::i;:::-;37590:116;;37716:72;37784:2;37773:9;37769:18;37760:6;37716:72;:::i;:::-;37798:73;37866:3;37855:9;37851:19;37842:6;37798:73;:::i;:::-;37047:831;;;;;;;;:::o;37884:807::-;38133:4;38171:3;38160:9;38156:19;38148:27;;38185:71;38253:1;38242:9;38238:17;38229:6;38185:71;:::i;:::-;38266:72;38334:2;38323:9;38319:18;38310:6;38266:72;:::i;:::-;38348:80;38424:2;38413:9;38409:18;38400:6;38348:80;:::i;:::-;38438;38514:2;38503:9;38499:18;38490:6;38438:80;:::i;:::-;38528:73;38596:3;38585:9;38581:19;38572:6;38528:73;:::i;:::-;38611;38679:3;38668:9;38664:19;38655:6;38611:73;:::i;:::-;37884:807;;;;;;;;;:::o;38697:143::-;38754:5;38785:6;38779:13;38770:22;;38801:33;38828:5;38801:33;:::i;:::-;38697:143;;;;:::o;38846:663::-;38934:6;38942;38950;38999:2;38987:9;38978:7;38974:23;38970:32;38967:119;;;39005:79;;:::i;:::-;38967:119;39125:1;39150:64;39206:7;39197:6;39186:9;39182:22;39150:64;:::i;:::-;39140:74;;39096:128;39263:2;39289:64;39345:7;39336:6;39325:9;39321:22;39289:64;:::i;:::-;39279:74;;39234:129;39402:2;39428:64;39484:7;39475:6;39464:9;39460:22;39428:64;:::i;:::-;39418:74;;39373:129;38846:663;;;;;:::o
Swarm Source
ipfs://9e86096bf8eb8e2c07891880414d6fc1c54aff95f6abcd1a94c3fce93af81964
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.