Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
There are no matching entriesUpdate your filters to view other transactions | |||||||||
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Fluffy
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-06-20
*/
/****
https://x.com/Cointelegraph/status/1935880496434585708
*****/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @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 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 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;
}
}
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract Fluffy is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address public constant deadAddress = address(0xdead);
address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
bool private swapping;
address public devWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = true;
uint256 public buyTotalFees;
uint256 public buyDevFee;
uint256 public buyLiquidityFee;
uint256 public sellTotalFees;
uint256 public sellDevFee;
uint256 public sellLiquidityFee;
/******************/
// exlcude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
event ExcludeFromFees(address indexed account, bool isExcluded);
event devWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
constructor() ERC20("Tether Cat", "FLUFFY") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), USDT);
excludeFromMaxTransaction(address(uniswapV2Pair), true);
uint256 _buyDevFee = 20;
uint256 _buyLiquidityFee = 0;
uint256 _sellDevFee = 20;
uint256 _sellLiquidityFee = 0;
uint256 totalSupply = 1_000_000 * 1e18;
maxTransactionAmount = totalSupply * 2 / 100; // 2% from total supply maxTransactionAmountTxn
maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet
swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet
buyDevFee = _buyDevFee;
buyLiquidityFee = _buyLiquidityFee;
buyTotalFees = buyDevFee + buyLiquidityFee;
sellDevFee = _sellDevFee;
sellLiquidityFee = _sellLiquidityFee;
sellTotalFees = sellDevFee + sellLiquidityFee;
devWallet = address(0xA1aFE06cE0232AD266228309A91cA31CDA1dd9F7);
// 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 enableTrading() external onlyOwner {
tradingActive = true;
swapEnabled = true;
}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool) {
limitsInEffect = 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() * 1) / 1000) / 1e18,
"Cannot set maxTransactionAmount lower than 0.1%"
);
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 updateBuyFees(
uint256 _devFee,
uint256 _liquidityFee
) external onlyOwner {
buyDevFee = _devFee;
buyLiquidityFee = _liquidityFee;
buyTotalFees = buyDevFee + buyLiquidityFee;
require(buyTotalFees <= 10, "Must keep fees at 10% or less");
}
function updateSellFees(
uint256 _devFee,
uint256 _liquidityFee
) external onlyOwner {
sellDevFee = _devFee;
sellLiquidityFee = _liquidityFee;
sellTotalFees = sellDevFee + sellLiquidityFee;
require(sellTotalFees <= 15, "Must keep fees at 15% or less");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function updateDevWallet(address newDevWallet)
external
onlyOwner
{
emit devWalletUpdated(newDevWallet, devWallet);
devWallet = newDevWallet;
}
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.
//when buy
if (
from == uniswapV2Pair &&
!_isExcludedMaxTransactionAmount[to]
) {
require(
amount <= maxTransactionAmount,
"Buy transfer amount exceeds the maxTransactionAmount."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
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 &&
to == uniswapV2Pair &&
!_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;
uint256 tokensForLiquidity = 0;
uint256 tokensForDev = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (to == uniswapV2Pair && sellTotalFees > 0) {
fees = amount.mul(sellTotalFees).div(100);
tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
tokensForDev = (fees * sellDevFee) / sellTotalFees;
}
// on buy
else if (from == uniswapV2Pair && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(100);
tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees;
tokensForDev = (fees * buyDevFee) / buyTotalFees;
}
if (fees> 0) {
super._transfer(from, address(this), fees);
}
if (tokensForLiquidity > 0) {
super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForUSDT(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = USDT;
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of USDT
path,
devWallet,
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
if (contractBalance == 0) {
return;
}
if (contractBalance > swapTokensAtAmount * 20) {
contractBalance = swapTokensAtAmount * 20;
}
swapTokensForUSDT(contractBalance);
}
}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":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"account","type":"address"}],"name":"balanceOf","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","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":"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":"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":[{"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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c060405273dac17f958d2ee523a2206206994597c13d831ec760065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055503480156100b2575f5ffd5b506040518060400160405280600a81526020017f54657468657220436174000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f464c554646590000000000000000000000000000000000000000000000000000815250816003908161012e9190610b6b565b50806004908161013e9190610b6b565b50505061015d6101526104c160201b60201c565b6104c860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061018681600161058b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610203573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102279190610c98565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610282929190610cd2565b6020604051808303815f875af115801561029e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c29190610c98565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061030860a051600161058b60201b60201c565b5f601490505f5f90505f601490505f5f90505f69d3c21bcecceda1000000905060646002826103379190610d26565b6103419190610d94565b60088190555060646002826103569190610d26565b6103609190610d94565b600a819055506127106005826103769190610d26565b6103809190610d94565b60098190555084600d8190555083600e81905550600e54600d546103a49190610dc4565b600c8190555082601081905550816011819055506011546010546103c89190610dc4565b600f8190555073a1afe06ce0232ad266228309a91ca31cda1dd9f760075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061044061043361066b60201b60201c565b600161069360201b60201c565b61045130600161069360201b60201c565b61046461dead600161069360201b60201c565b61048261047561066b60201b60201c565b600161058b60201b60201c565b61049330600161058b60201b60201c565b6104a661dead600161058b60201b60201c565b6104b633826107c160201b60201c565b505050505050610f32565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6105996104c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166105bd61066b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060a90610e51565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106a16104c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106c561066b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461071b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071290610e51565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107b59190610e89565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361082f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082690610eec565b60405180910390fd5b6108405f838361092460201b60201c565b8060025f8282546108519190610dc4565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108a39190610dc4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109079190610f19565b60405180910390a36109205f838361092960201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109a957607f821691505b6020821081036109bc576109bb610965565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a1e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109e3565b610a2886836109e3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a6c610a67610a6284610a40565b610a49565b610a40565b9050919050565b5f819050919050565b610a8583610a52565b610a99610a9182610a73565b8484546109ef565b825550505050565b5f5f905090565b610ab0610aa1565b610abb818484610a7c565b505050565b5b81811015610ade57610ad35f82610aa8565b600181019050610ac1565b5050565b601f821115610b2357610af4816109c2565b610afd846109d4565b81016020851015610b0c578190505b610b20610b18856109d4565b830182610ac0565b50505b505050565b5f82821c905092915050565b5f610b435f1984600802610b28565b1980831691505092915050565b5f610b5b8383610b34565b9150826002028217905092915050565b610b748261092e565b67ffffffffffffffff811115610b8d57610b8c610938565b5b610b978254610992565b610ba2828285610ae2565b5f60209050601f831160018114610bd3575f8415610bc1578287015190505b610bcb8582610b50565b865550610c32565b601f198416610be1866109c2565b5f5b82811015610c0857848901518255600182019150602085019450602081019050610be3565b86831015610c255784890151610c21601f891682610b34565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c6782610c3e565b9050919050565b610c7781610c5d565b8114610c81575f5ffd5b50565b5f81519050610c9281610c6e565b92915050565b5f60208284031215610cad57610cac610c3a565b5b5f610cba84828501610c84565b91505092915050565b610ccc81610c5d565b82525050565b5f604082019050610ce55f830185610cc3565b610cf26020830184610cc3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d3082610a40565b9150610d3b83610a40565b9250828202610d4981610a40565b91508282048414831517610d6057610d5f610cf9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610d9e82610a40565b9150610da983610a40565b925082610db957610db8610d67565b5b828204905092915050565b5f610dce82610a40565b9150610dd983610a40565b9250828201905080821115610df157610df0610cf9565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610e3b602083610df7565b9150610e4682610e07565b602082019050919050565b5f6020820190508181035f830152610e6881610e2f565b9050919050565b5f8115159050919050565b610e8381610e6f565b82525050565b5f602082019050610e9c5f830184610e7a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610ed6601f83610df7565b9150610ee182610ea2565b602082019050919050565b5f6020820190508181035f830152610f0381610eca565b9050919050565b610f1381610a40565b82525050565b5f602082019050610f2c5f830184610f0a565b92915050565b60805160a051613b37610f845f395f8181610ec401528181611efe0152818161213f015281816123420152818161240c01526124f301525f8181610b4e01528181612a0a0152612a310152613b375ff3fe608060405260043610610254575f3560e01c80638a8c523c11610138578063c18bc195116100b5578063dd62ed3e11610079578063dd62ed3e1461088d578063e2f45605146108c9578063f11a24d3146108f3578063f2fde38b1461091d578063f637434214610945578063f8b45b051461096f5761025b565b8063c18bc195146107ab578063c54e44eb146107d3578063c8c8ebe4146107fd578063d257b34f14610827578063d85ba063146108635761025b565b80639c3b4fdc116100fc5780639c3b4fdc146106c9578063a0d82dc5146106f3578063a9059cbb1461071d578063bbc0c74214610759578063c0246668146107835761025b565b80638a8c523c1461060d5780638da5cb5b146106235780638ea5220f1461064d578063924de9b71461067757806395d89b411461069f5761025b565b8063313ce567116101d15780636a486a8e116101955780636a486a8e146105155780636ddd17131461053f57806370a0823114610569578063715018a6146105a5578063751039fc146105bb5780637571336a146105e55761025b565b8063313ce5671461043357806349bd5a5e1461045d5780634a62bb65146104875780634fbee193146104b157806366ca9b83146104ed5761025b565b806318160ddd1161021857806318160ddd146103535780631816467f1461037d578063203e727e146103a557806323b872dd146103cd57806327c8f835146104095761025b565b806302dbd8f81461025f57806306fdde0314610287578063095ea7b3146102b157806310d5de53146102ed5780631694505e146103295761025b565b3661025b57005b5f5ffd5b34801561026a575f5ffd5b5061028560048036038101906102809190612b19565b610999565b005b348015610292575f5ffd5b5061029b610a82565b6040516102a89190612bc7565b60405180910390f35b3480156102bc575f5ffd5b506102d760048036038101906102d29190612c41565b610b12565b6040516102e49190612c99565b60405180910390f35b3480156102f8575f5ffd5b50610313600480360381019061030e9190612cb2565b610b2f565b6040516103209190612c99565b60405180910390f35b348015610334575f5ffd5b5061033d610b4c565b60405161034a9190612d38565b60405180910390f35b34801561035e575f5ffd5b50610367610b70565b6040516103749190612d60565b60405180910390f35b348015610388575f5ffd5b506103a3600480360381019061039e9190612cb2565b610b79565b005b3480156103b0575f5ffd5b506103cb60048036038101906103c69190612d79565b610cb3565b005b3480156103d8575f5ffd5b506103f360048036038101906103ee9190612da4565b610dc2565b6040516104009190612c99565b60405180910390f35b348015610414575f5ffd5b5061041d610eb4565b60405161042a9190612e03565b60405180910390f35b34801561043e575f5ffd5b50610447610eba565b6040516104549190612e37565b60405180910390f35b348015610468575f5ffd5b50610471610ec2565b60405161047e9190612e03565b60405180910390f35b348015610492575f5ffd5b5061049b610ee6565b6040516104a89190612c99565b60405180910390f35b3480156104bc575f5ffd5b506104d760048036038101906104d29190612cb2565b610ef8565b6040516104e49190612c99565b60405180910390f35b3480156104f8575f5ffd5b50610513600480360381019061050e9190612b19565b610f4a565b005b348015610520575f5ffd5b50610529611034565b6040516105369190612d60565b60405180910390f35b34801561054a575f5ffd5b5061055361103a565b6040516105609190612c99565b60405180910390f35b348015610574575f5ffd5b5061058f600480360381019061058a9190612cb2565b61104d565b60405161059c9190612d60565b60405180910390f35b3480156105b0575f5ffd5b506105b9611092565b005b3480156105c6575f5ffd5b506105cf611119565b6040516105dc9190612c99565b60405180910390f35b3480156105f0575f5ffd5b5061060b60048036038101906106069190612e7a565b6111b6565b005b348015610618575f5ffd5b5061062161128a565b005b34801561062e575f5ffd5b5061063761133e565b6040516106449190612e03565b60405180910390f35b348015610658575f5ffd5b50610661611366565b60405161066e9190612e03565b60405180910390f35b348015610682575f5ffd5b5061069d60048036038101906106989190612eb8565b61138b565b005b3480156106aa575f5ffd5b506106b3611424565b6040516106c09190612bc7565b60405180910390f35b3480156106d4575f5ffd5b506106dd6114b4565b6040516106ea9190612d60565b60405180910390f35b3480156106fe575f5ffd5b506107076114ba565b6040516107149190612d60565b60405180910390f35b348015610728575f5ffd5b50610743600480360381019061073e9190612c41565b6114c0565b6040516107509190612c99565b60405180910390f35b348015610764575f5ffd5b5061076d6114dd565b60405161077a9190612c99565b60405180910390f35b34801561078e575f5ffd5b506107a960048036038101906107a49190612e7a565b6114f0565b005b3480156107b6575f5ffd5b506107d160048036038101906107cc9190612d79565b611612565b005b3480156107de575f5ffd5b506107e7611721565b6040516107f49190612e03565b60405180910390f35b348015610808575f5ffd5b50610811611746565b60405161081e9190612d60565b60405180910390f35b348015610832575f5ffd5b5061084d60048036038101906108489190612d79565b61174c565b60405161085a9190612c99565b60405180910390f35b34801561086e575f5ffd5b506108776118a0565b6040516108849190612d60565b60405180910390f35b348015610898575f5ffd5b506108b360048036038101906108ae9190612ee3565b6118a6565b6040516108c09190612d60565b60405180910390f35b3480156108d4575f5ffd5b506108dd611928565b6040516108ea9190612d60565b60405180910390f35b3480156108fe575f5ffd5b5061090761192e565b6040516109149190612d60565b60405180910390f35b348015610928575f5ffd5b50610943600480360381019061093e9190612cb2565b611934565b005b348015610950575f5ffd5b50610959611a2a565b6040516109669190612d60565b60405180910390f35b34801561097a575f5ffd5b50610983611a30565b6040516109909190612d60565b60405180910390f35b6109a1611a36565b73ffffffffffffffffffffffffffffffffffffffff166109bf61133e565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90612f6b565b60405180910390fd5b8160108190555080601181905550601154601054610a339190612fb6565b600f81905550600f80541115610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590613033565b60405180910390fd5b5050565b606060038054610a919061307e565b80601f0160208091040260200160405190810160405280929190818152602001828054610abd9061307e565b8015610b085780601f10610adf57610100808354040283529160200191610b08565b820191905f5260205f20905b815481529060010190602001808311610aeb57829003601f168201915b5050505050905090565b5f610b25610b1e611a36565b8484611a3d565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610b81611a36565b73ffffffffffffffffffffffffffffffffffffffff16610b9f61133e565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90612f6b565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cbb611a36565b73ffffffffffffffffffffffffffffffffffffffff16610cd961133e565b73ffffffffffffffffffffffffffffffffffffffff1614610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690612f6b565b60405180910390fd5b670de0b6b3a76400006103e86001610d45610b70565b610d4f91906130ae565b610d59919061311c565b610d63919061311c565b811015610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906131bc565b60405180910390fd5b670de0b6b3a764000081610db991906130ae565b60088190555050565b5f610dce848484611c00565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e15611a36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061324a565b60405180910390fd5b610ea885610ea0611a36565b858403611a3d565b60019150509392505050565b61dead81565b5f6012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610f52611a36565b73ffffffffffffffffffffffffffffffffffffffff16610f7061133e565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90612f6b565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610fe49190612fb6565b600c81905550600a600c541115611030576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611027906132b2565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61109a611a36565b73ffffffffffffffffffffffffffffffffffffffff166110b861133e565b73ffffffffffffffffffffffffffffffffffffffff161461110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590612f6b565b60405180910390fd5b6111175f61253f565b565b5f611122611a36565b73ffffffffffffffffffffffffffffffffffffffff1661114061133e565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90612f6b565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6111be611a36565b73ffffffffffffffffffffffffffffffffffffffff166111dc61133e565b73ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990612f6b565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611292611a36565b73ffffffffffffffffffffffffffffffffffffffff166112b061133e565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90612f6b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611393611a36565b73ffffffffffffffffffffffffffffffffffffffff166113b161133e565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612f6b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114339061307e565b80601f016020809104026020016040519081016040528092919081815260200182805461145f9061307e565b80156114aa5780601f10611481576101008083540402835291602001916114aa565b820191905f5260205f20905b81548152906001019060200180831161148d57829003601f168201915b5050505050905090565b600d5481565b60105481565b5f6114d36114cc611a36565b8484611c00565b6001905092915050565b600b60019054906101000a900460ff1681565b6114f8611a36565b73ffffffffffffffffffffffffffffffffffffffff1661151661133e565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390612f6b565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116069190612c99565b60405180910390a25050565b61161a611a36565b73ffffffffffffffffffffffffffffffffffffffff1661163861133e565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590612f6b565b60405180910390fd5b670de0b6b3a76400006103e860056116a4610b70565b6116ae91906130ae565b6116b8919061311c565b6116c2919061311c565b811015611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613340565b60405180910390fd5b670de0b6b3a76400008161171891906130ae565b600a8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b5f611755611a36565b73ffffffffffffffffffffffffffffffffffffffff1661177361133e565b73ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090612f6b565b60405180910390fd5b620186a060016117d7610b70565b6117e191906130ae565b6117eb919061311c565b82101561182d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611824906133ce565b60405180910390fd5b6103e8600561183a610b70565b61184491906130ae565b61184e919061311c565b821115611890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118879061345c565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b61193c611a36565b73ffffffffffffffffffffffffffffffffffffffff1661195a61133e565b73ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790612f6b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a15906134ea565b60405180910390fd5b611a278161253f565b50565b60115481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613578565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1090613606565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bf39190612d60565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613694565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613722565b60405180910390fd5b5f8103611cf357611cee83835f612602565b61253a565b600b5f9054906101000a900460ff16156120ef57611d0f61133e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d7d5750611d4d61133e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611db557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611def575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e085750600660149054906101000a900460ff16155b156120ee57600b60019054906101000a900460ff16611efc5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ebc575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef29061378a565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f9e575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561204557600854811115611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90613818565b60405180910390fd5b600a54611ff48361104d565b82611fff9190612fb6565b1115612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613880565b60405180910390fd5b6120ed565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ec57600a5461209f8361104d565b826120aa9190612fb6565b11156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290613880565b60405180910390fd5b5b5b5b5b5f6120f93061104d565b90505f600954821015905080801561211d5750600b60029054906101000a900460ff165b80156121365750600660149054906101000a900460ff16155b801561218d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121e0575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612233575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612276576001600660146101000a81548160ff02191690831515021790555061225b612877565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561232e575f90505b5f5f90505f5f90505f5f90508315612528577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239c57505f600f54115b1561240a576123c960646123bb600f548a6128c590919063ffffffff16565b6128da90919063ffffffff16565b9250600f54601154846123dc91906130ae565b6123e6919061311c565b9150600f54601054846123f991906130ae565b612403919061311c565b90506124d1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561246657505f600c54115b156124d0576124936064612485600c548a6128c590919063ffffffff16565b6128da90919063ffffffff16565b9250600c54600e54846124a691906130ae565b6124b0919061311c565b9150600c54600d54846124c391906130ae565b6124cd919061311c565b90505b5b5f8311156124e5576124e4893085612602565b5b5f82111561251957612518307f000000000000000000000000000000000000000000000000000000000000000084612602565b5b8287612525919061389e565b96505b612533898989612602565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790613694565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d590613722565b60405180910390fd5b6126e98383836128ef565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561276c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276390613941565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127fa9190612fb6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161285e9190612d60565b60405180910390a36128718484846128f4565b50505050565b5f6128813061104d565b90505f810361289057506128c3565b601460095461289f91906130ae565b8111156128b85760146009546128b591906130ae565b90505b6128c1816128f9565b505b565b5f81836128d291906130ae565b905092915050565b5f81836128e7919061311c565b905092915050565b505050565b505050565b5f600267ffffffffffffffff8111156129155761291461395f565b5b6040519080825280602002602001820160405280156129435781602001602082028036833780820191505090505b50905030815f8151811061295a5761295961398c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129ca576129c961398c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a2f307f000000000000000000000000000000000000000000000000000000000000000084611a3d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ab1959493929190613aa9565b5f604051808303815f87803b158015612ac8575f5ffd5b505af1158015612ada573d5f5f3e3d5ffd5b505050505050565b5f5ffd5b5f819050919050565b612af881612ae6565b8114612b02575f5ffd5b50565b5f81359050612b1381612aef565b92915050565b5f5f60408385031215612b2f57612b2e612ae2565b5b5f612b3c85828601612b05565b9250506020612b4d85828601612b05565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b9982612b57565b612ba38185612b61565b9350612bb3818560208601612b71565b612bbc81612b7f565b840191505092915050565b5f6020820190508181035f830152612bdf8184612b8f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c1082612be7565b9050919050565b612c2081612c06565b8114612c2a575f5ffd5b50565b5f81359050612c3b81612c17565b92915050565b5f5f60408385031215612c5757612c56612ae2565b5b5f612c6485828601612c2d565b9250506020612c7585828601612b05565b9150509250929050565b5f8115159050919050565b612c9381612c7f565b82525050565b5f602082019050612cac5f830184612c8a565b92915050565b5f60208284031215612cc757612cc6612ae2565b5b5f612cd484828501612c2d565b91505092915050565b5f819050919050565b5f612d00612cfb612cf684612be7565b612cdd565b612be7565b9050919050565b5f612d1182612ce6565b9050919050565b5f612d2282612d07565b9050919050565b612d3281612d18565b82525050565b5f602082019050612d4b5f830184612d29565b92915050565b612d5a81612ae6565b82525050565b5f602082019050612d735f830184612d51565b92915050565b5f60208284031215612d8e57612d8d612ae2565b5b5f612d9b84828501612b05565b91505092915050565b5f5f5f60608486031215612dbb57612dba612ae2565b5b5f612dc886828701612c2d565b9350506020612dd986828701612c2d565b9250506040612dea86828701612b05565b9150509250925092565b612dfd81612c06565b82525050565b5f602082019050612e165f830184612df4565b92915050565b5f60ff82169050919050565b612e3181612e1c565b82525050565b5f602082019050612e4a5f830184612e28565b92915050565b612e5981612c7f565b8114612e63575f5ffd5b50565b5f81359050612e7481612e50565b92915050565b5f5f60408385031215612e9057612e8f612ae2565b5b5f612e9d85828601612c2d565b9250506020612eae85828601612e66565b9150509250929050565b5f60208284031215612ecd57612ecc612ae2565b5b5f612eda84828501612e66565b91505092915050565b5f5f60408385031215612ef957612ef8612ae2565b5b5f612f0685828601612c2d565b9250506020612f1785828601612c2d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612f55602083612b61565b9150612f6082612f21565b602082019050919050565b5f6020820190508181035f830152612f8281612f49565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fc082612ae6565b9150612fcb83612ae6565b9250828201905080821115612fe357612fe2612f89565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c6573730000005f82015250565b5f61301d601d83612b61565b915061302882612fe9565b602082019050919050565b5f6020820190508181035f83015261304a81613011565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061309557607f821691505b6020821081036130a8576130a7613051565b5b50919050565b5f6130b882612ae6565b91506130c383612ae6565b92508282026130d181612ae6565b915082820484148315176130e8576130e7612f89565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61312682612ae6565b915061313183612ae6565b925082613141576131406130ef565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6131a6602f83612b61565b91506131b18261314c565b604082019050919050565b5f6020820190508181035f8301526131d38161319a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613234602883612b61565b915061323f826131da565b604082019050919050565b5f6020820190508181035f83015261326181613228565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f61329c601d83612b61565b91506132a782613268565b602082019050919050565b5f6020820190508181035f8301526132c981613290565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61332a602483612b61565b9150613335826132d0565b604082019050919050565b5f6020820190508181035f8301526133578161331e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6133b8603583612b61565b91506133c38261335e565b604082019050919050565b5f6020820190508181035f8301526133e5816133ac565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613446603483612b61565b9150613451826133ec565b604082019050919050565b5f6020820190508181035f8301526134738161343a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6134d4602683612b61565b91506134df8261347a565b604082019050919050565b5f6020820190508181035f830152613501816134c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613562602483612b61565b915061356d82613508565b604082019050919050565b5f6020820190508181035f83015261358f81613556565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135f0602283612b61565b91506135fb82613596565b604082019050919050565b5f6020820190508181035f83015261361d816135e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61367e602583612b61565b915061368982613624565b604082019050919050565b5f6020820190508181035f8301526136ab81613672565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61370c602383612b61565b9150613717826136b2565b604082019050919050565b5f6020820190508181035f83015261373981613700565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613774601683612b61565b915061377f82613740565b602082019050919050565b5f6020820190508181035f8301526137a181613768565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613802603583612b61565b915061380d826137a8565b604082019050919050565b5f6020820190508181035f83015261382f816137f6565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61386a601383612b61565b915061387582613836565b602082019050919050565b5f6020820190508181035f8301526138978161385e565b9050919050565b5f6138a882612ae6565b91506138b383612ae6565b92508282039050818111156138cb576138ca612f89565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61392b602683612b61565b9150613936826138d1565b604082019050919050565b5f6020820190508181035f8301526139588161391f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6139dc6139d76139d2846139b9565b612cdd565b612ae6565b9050919050565b6139ec816139c2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a2481612c06565b82525050565b5f613a358383613a1b565b60208301905092915050565b5f602082019050919050565b5f613a57826139f2565b613a6181856139fc565b9350613a6c83613a0c565b805f5b83811015613a9c578151613a838882613a2a565b9750613a8e83613a41565b925050600181019050613a6f565b5085935050505092915050565b5f60a082019050613abc5f830188612d51565b613ac960208301876139e3565b8181036040830152613adb8186613a4d565b9050613aea6060830185612df4565b613af76080830184612d51565b969550505050505056fea2646970667358221220293b3a5432462c5355f99ce0b06e39c942431e34500396de2ce625082364048f64736f6c634300081e0033
Deployed Bytecode
0x608060405260043610610254575f3560e01c80638a8c523c11610138578063c18bc195116100b5578063dd62ed3e11610079578063dd62ed3e1461088d578063e2f45605146108c9578063f11a24d3146108f3578063f2fde38b1461091d578063f637434214610945578063f8b45b051461096f5761025b565b8063c18bc195146107ab578063c54e44eb146107d3578063c8c8ebe4146107fd578063d257b34f14610827578063d85ba063146108635761025b565b80639c3b4fdc116100fc5780639c3b4fdc146106c9578063a0d82dc5146106f3578063a9059cbb1461071d578063bbc0c74214610759578063c0246668146107835761025b565b80638a8c523c1461060d5780638da5cb5b146106235780638ea5220f1461064d578063924de9b71461067757806395d89b411461069f5761025b565b8063313ce567116101d15780636a486a8e116101955780636a486a8e146105155780636ddd17131461053f57806370a0823114610569578063715018a6146105a5578063751039fc146105bb5780637571336a146105e55761025b565b8063313ce5671461043357806349bd5a5e1461045d5780634a62bb65146104875780634fbee193146104b157806366ca9b83146104ed5761025b565b806318160ddd1161021857806318160ddd146103535780631816467f1461037d578063203e727e146103a557806323b872dd146103cd57806327c8f835146104095761025b565b806302dbd8f81461025f57806306fdde0314610287578063095ea7b3146102b157806310d5de53146102ed5780631694505e146103295761025b565b3661025b57005b5f5ffd5b34801561026a575f5ffd5b5061028560048036038101906102809190612b19565b610999565b005b348015610292575f5ffd5b5061029b610a82565b6040516102a89190612bc7565b60405180910390f35b3480156102bc575f5ffd5b506102d760048036038101906102d29190612c41565b610b12565b6040516102e49190612c99565b60405180910390f35b3480156102f8575f5ffd5b50610313600480360381019061030e9190612cb2565b610b2f565b6040516103209190612c99565b60405180910390f35b348015610334575f5ffd5b5061033d610b4c565b60405161034a9190612d38565b60405180910390f35b34801561035e575f5ffd5b50610367610b70565b6040516103749190612d60565b60405180910390f35b348015610388575f5ffd5b506103a3600480360381019061039e9190612cb2565b610b79565b005b3480156103b0575f5ffd5b506103cb60048036038101906103c69190612d79565b610cb3565b005b3480156103d8575f5ffd5b506103f360048036038101906103ee9190612da4565b610dc2565b6040516104009190612c99565b60405180910390f35b348015610414575f5ffd5b5061041d610eb4565b60405161042a9190612e03565b60405180910390f35b34801561043e575f5ffd5b50610447610eba565b6040516104549190612e37565b60405180910390f35b348015610468575f5ffd5b50610471610ec2565b60405161047e9190612e03565b60405180910390f35b348015610492575f5ffd5b5061049b610ee6565b6040516104a89190612c99565b60405180910390f35b3480156104bc575f5ffd5b506104d760048036038101906104d29190612cb2565b610ef8565b6040516104e49190612c99565b60405180910390f35b3480156104f8575f5ffd5b50610513600480360381019061050e9190612b19565b610f4a565b005b348015610520575f5ffd5b50610529611034565b6040516105369190612d60565b60405180910390f35b34801561054a575f5ffd5b5061055361103a565b6040516105609190612c99565b60405180910390f35b348015610574575f5ffd5b5061058f600480360381019061058a9190612cb2565b61104d565b60405161059c9190612d60565b60405180910390f35b3480156105b0575f5ffd5b506105b9611092565b005b3480156105c6575f5ffd5b506105cf611119565b6040516105dc9190612c99565b60405180910390f35b3480156105f0575f5ffd5b5061060b60048036038101906106069190612e7a565b6111b6565b005b348015610618575f5ffd5b5061062161128a565b005b34801561062e575f5ffd5b5061063761133e565b6040516106449190612e03565b60405180910390f35b348015610658575f5ffd5b50610661611366565b60405161066e9190612e03565b60405180910390f35b348015610682575f5ffd5b5061069d60048036038101906106989190612eb8565b61138b565b005b3480156106aa575f5ffd5b506106b3611424565b6040516106c09190612bc7565b60405180910390f35b3480156106d4575f5ffd5b506106dd6114b4565b6040516106ea9190612d60565b60405180910390f35b3480156106fe575f5ffd5b506107076114ba565b6040516107149190612d60565b60405180910390f35b348015610728575f5ffd5b50610743600480360381019061073e9190612c41565b6114c0565b6040516107509190612c99565b60405180910390f35b348015610764575f5ffd5b5061076d6114dd565b60405161077a9190612c99565b60405180910390f35b34801561078e575f5ffd5b506107a960048036038101906107a49190612e7a565b6114f0565b005b3480156107b6575f5ffd5b506107d160048036038101906107cc9190612d79565b611612565b005b3480156107de575f5ffd5b506107e7611721565b6040516107f49190612e03565b60405180910390f35b348015610808575f5ffd5b50610811611746565b60405161081e9190612d60565b60405180910390f35b348015610832575f5ffd5b5061084d60048036038101906108489190612d79565b61174c565b60405161085a9190612c99565b60405180910390f35b34801561086e575f5ffd5b506108776118a0565b6040516108849190612d60565b60405180910390f35b348015610898575f5ffd5b506108b360048036038101906108ae9190612ee3565b6118a6565b6040516108c09190612d60565b60405180910390f35b3480156108d4575f5ffd5b506108dd611928565b6040516108ea9190612d60565b60405180910390f35b3480156108fe575f5ffd5b5061090761192e565b6040516109149190612d60565b60405180910390f35b348015610928575f5ffd5b50610943600480360381019061093e9190612cb2565b611934565b005b348015610950575f5ffd5b50610959611a2a565b6040516109669190612d60565b60405180910390f35b34801561097a575f5ffd5b50610983611a30565b6040516109909190612d60565b60405180910390f35b6109a1611a36565b73ffffffffffffffffffffffffffffffffffffffff166109bf61133e565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90612f6b565b60405180910390fd5b8160108190555080601181905550601154601054610a339190612fb6565b600f81905550600f80541115610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7590613033565b60405180910390fd5b5050565b606060038054610a919061307e565b80601f0160208091040260200160405190810160405280929190818152602001828054610abd9061307e565b8015610b085780601f10610adf57610100808354040283529160200191610b08565b820191905f5260205f20905b815481529060010190602001808311610aeb57829003601f168201915b5050505050905090565b5f610b25610b1e611a36565b8484611a3d565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610b81611a36565b73ffffffffffffffffffffffffffffffffffffffff16610b9f61133e565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90612f6b565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cbb611a36565b73ffffffffffffffffffffffffffffffffffffffff16610cd961133e565b73ffffffffffffffffffffffffffffffffffffffff1614610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690612f6b565b60405180910390fd5b670de0b6b3a76400006103e86001610d45610b70565b610d4f91906130ae565b610d59919061311c565b610d63919061311c565b811015610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906131bc565b60405180910390fd5b670de0b6b3a764000081610db991906130ae565b60088190555050565b5f610dce848484611c00565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e15611a36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061324a565b60405180910390fd5b610ea885610ea0611a36565b858403611a3d565b60019150509392505050565b61dead81565b5f6012905090565b7f000000000000000000000000659a7ca68946950a1a1d600fe07f759b6ef6a54d81565b600b5f9054906101000a900460ff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610f52611a36565b73ffffffffffffffffffffffffffffffffffffffff16610f7061133e565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90612f6b565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610fe49190612fb6565b600c81905550600a600c541115611030576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611027906132b2565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61109a611a36565b73ffffffffffffffffffffffffffffffffffffffff166110b861133e565b73ffffffffffffffffffffffffffffffffffffffff161461110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590612f6b565b60405180910390fd5b6111175f61253f565b565b5f611122611a36565b73ffffffffffffffffffffffffffffffffffffffff1661114061133e565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90612f6b565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6111be611a36565b73ffffffffffffffffffffffffffffffffffffffff166111dc61133e565b73ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990612f6b565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611292611a36565b73ffffffffffffffffffffffffffffffffffffffff166112b061133e565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90612f6b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611393611a36565b73ffffffffffffffffffffffffffffffffffffffff166113b161133e565b73ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90612f6b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114339061307e565b80601f016020809104026020016040519081016040528092919081815260200182805461145f9061307e565b80156114aa5780601f10611481576101008083540402835291602001916114aa565b820191905f5260205f20905b81548152906001019060200180831161148d57829003601f168201915b5050505050905090565b600d5481565b60105481565b5f6114d36114cc611a36565b8484611c00565b6001905092915050565b600b60019054906101000a900460ff1681565b6114f8611a36565b73ffffffffffffffffffffffffffffffffffffffff1661151661133e565b73ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390612f6b565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116069190612c99565b60405180910390a25050565b61161a611a36565b73ffffffffffffffffffffffffffffffffffffffff1661163861133e565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590612f6b565b60405180910390fd5b670de0b6b3a76400006103e860056116a4610b70565b6116ae91906130ae565b6116b8919061311c565b6116c2919061311c565b811015611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613340565b60405180910390fd5b670de0b6b3a76400008161171891906130ae565b600a8190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b5f611755611a36565b73ffffffffffffffffffffffffffffffffffffffff1661177361133e565b73ffffffffffffffffffffffffffffffffffffffff16146117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090612f6b565b60405180910390fd5b620186a060016117d7610b70565b6117e191906130ae565b6117eb919061311c565b82101561182d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611824906133ce565b60405180910390fd5b6103e8600561183a610b70565b61184491906130ae565b61184e919061311c565b821115611890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118879061345c565b60405180910390fd5b8160098190555060019050919050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600e5481565b61193c611a36565b73ffffffffffffffffffffffffffffffffffffffff1661195a61133e565b73ffffffffffffffffffffffffffffffffffffffff16146119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790612f6b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a15906134ea565b60405180910390fd5b611a278161253f565b50565b60115481565b600a5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613578565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1090613606565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bf39190612d60565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590613694565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd390613722565b60405180910390fd5b5f8103611cf357611cee83835f612602565b61253a565b600b5f9054906101000a900460ff16156120ef57611d0f61133e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d7d5750611d4d61133e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611db557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611def575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e085750600660149054906101000a900460ff16155b156120ee57600b60019054906101000a900460ff16611efc5760125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611ebc575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef29061378a565b60405180910390fd5b5b7f000000000000000000000000659a7ca68946950a1a1d600fe07f759b6ef6a54d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f9e575060135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561204557600854811115611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90613818565b60405180910390fd5b600a54611ff48361104d565b82611fff9190612fb6565b1115612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790613880565b60405180910390fd5b6120ed565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166120ec57600a5461209f8361104d565b826120aa9190612fb6565b11156120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e290613880565b60405180910390fd5b5b5b5b5b5f6120f93061104d565b90505f600954821015905080801561211d5750600b60029054906101000a900460ff165b80156121365750600660149054906101000a900460ff16155b801561218d57507f000000000000000000000000659a7ca68946950a1a1d600fe07f759b6ef6a54d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121e0575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612233575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612276576001600660146101000a81548160ff02191690831515021790555061225b612877565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060125f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612325575060125f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561232e575f90505b5f5f90505f5f90505f5f90508315612528577f000000000000000000000000659a7ca68946950a1a1d600fe07f759b6ef6a54d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561239c57505f600f54115b1561240a576123c960646123bb600f548a6128c590919063ffffffff16565b6128da90919063ffffffff16565b9250600f54601154846123dc91906130ae565b6123e6919061311c565b9150600f54601054846123f991906130ae565b612403919061311c565b90506124d1565b7f000000000000000000000000659a7ca68946950a1a1d600fe07f759b6ef6a54d73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561246657505f600c54115b156124d0576124936064612485600c548a6128c590919063ffffffff16565b6128da90919063ffffffff16565b9250600c54600e54846124a691906130ae565b6124b0919061311c565b9150600c54600d54846124c391906130ae565b6124cd919061311c565b90505b5b5f8311156124e5576124e4893085612602565b5b5f82111561251957612518307f000000000000000000000000659a7ca68946950a1a1d600fe07f759b6ef6a54d84612602565b5b8287612525919061389e565b96505b612533898989612602565b5050505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790613694565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d590613722565b60405180910390fd5b6126e98383836128ef565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561276c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276390613941565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127fa9190612fb6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161285e9190612d60565b60405180910390a36128718484846128f4565b50505050565b5f6128813061104d565b90505f810361289057506128c3565b601460095461289f91906130ae565b8111156128b85760146009546128b591906130ae565b90505b6128c1816128f9565b505b565b5f81836128d291906130ae565b905092915050565b5f81836128e7919061311c565b905092915050565b505050565b505050565b5f600267ffffffffffffffff8111156129155761291461395f565b5b6040519080825280602002602001820160405280156129435781602001602082028036833780820191505090505b50905030815f8151811061295a5761295961398c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106129ca576129c961398c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a2f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a3d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d795835f8460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612ab1959493929190613aa9565b5f604051808303815f87803b158015612ac8575f5ffd5b505af1158015612ada573d5f5f3e3d5ffd5b505050505050565b5f5ffd5b5f819050919050565b612af881612ae6565b8114612b02575f5ffd5b50565b5f81359050612b1381612aef565b92915050565b5f5f60408385031215612b2f57612b2e612ae2565b5b5f612b3c85828601612b05565b9250506020612b4d85828601612b05565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b9982612b57565b612ba38185612b61565b9350612bb3818560208601612b71565b612bbc81612b7f565b840191505092915050565b5f6020820190508181035f830152612bdf8184612b8f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c1082612be7565b9050919050565b612c2081612c06565b8114612c2a575f5ffd5b50565b5f81359050612c3b81612c17565b92915050565b5f5f60408385031215612c5757612c56612ae2565b5b5f612c6485828601612c2d565b9250506020612c7585828601612b05565b9150509250929050565b5f8115159050919050565b612c9381612c7f565b82525050565b5f602082019050612cac5f830184612c8a565b92915050565b5f60208284031215612cc757612cc6612ae2565b5b5f612cd484828501612c2d565b91505092915050565b5f819050919050565b5f612d00612cfb612cf684612be7565b612cdd565b612be7565b9050919050565b5f612d1182612ce6565b9050919050565b5f612d2282612d07565b9050919050565b612d3281612d18565b82525050565b5f602082019050612d4b5f830184612d29565b92915050565b612d5a81612ae6565b82525050565b5f602082019050612d735f830184612d51565b92915050565b5f60208284031215612d8e57612d8d612ae2565b5b5f612d9b84828501612b05565b91505092915050565b5f5f5f60608486031215612dbb57612dba612ae2565b5b5f612dc886828701612c2d565b9350506020612dd986828701612c2d565b9250506040612dea86828701612b05565b9150509250925092565b612dfd81612c06565b82525050565b5f602082019050612e165f830184612df4565b92915050565b5f60ff82169050919050565b612e3181612e1c565b82525050565b5f602082019050612e4a5f830184612e28565b92915050565b612e5981612c7f565b8114612e63575f5ffd5b50565b5f81359050612e7481612e50565b92915050565b5f5f60408385031215612e9057612e8f612ae2565b5b5f612e9d85828601612c2d565b9250506020612eae85828601612e66565b9150509250929050565b5f60208284031215612ecd57612ecc612ae2565b5b5f612eda84828501612e66565b91505092915050565b5f5f60408385031215612ef957612ef8612ae2565b5b5f612f0685828601612c2d565b9250506020612f1785828601612c2d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612f55602083612b61565b9150612f6082612f21565b602082019050919050565b5f6020820190508181035f830152612f8281612f49565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fc082612ae6565b9150612fcb83612ae6565b9250828201905080821115612fe357612fe2612f89565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c6573730000005f82015250565b5f61301d601d83612b61565b915061302882612fe9565b602082019050919050565b5f6020820190508181035f83015261304a81613011565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061309557607f821691505b6020821081036130a8576130a7613051565b5b50919050565b5f6130b882612ae6565b91506130c383612ae6565b92508282026130d181612ae6565b915082820484148315176130e8576130e7612f89565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61312682612ae6565b915061313183612ae6565b925082613141576131406130ef565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6131a6602f83612b61565b91506131b18261314c565b604082019050919050565b5f6020820190508181035f8301526131d38161319a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613234602883612b61565b915061323f826131da565b604082019050919050565b5f6020820190508181035f83015261326181613228565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c6573730000005f82015250565b5f61329c601d83612b61565b91506132a782613268565b602082019050919050565b5f6020820190508181035f8301526132c981613290565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f61332a602483612b61565b9150613335826132d0565b604082019050919050565b5f6020820190508181035f8301526133578161331e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6133b8603583612b61565b91506133c38261335e565b604082019050919050565b5f6020820190508181035f8301526133e5816133ac565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613446603483612b61565b9150613451826133ec565b604082019050919050565b5f6020820190508181035f8301526134738161343a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6134d4602683612b61565b91506134df8261347a565b604082019050919050565b5f6020820190508181035f830152613501816134c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613562602483612b61565b915061356d82613508565b604082019050919050565b5f6020820190508181035f83015261358f81613556565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135f0602283612b61565b91506135fb82613596565b604082019050919050565b5f6020820190508181035f83015261361d816135e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61367e602583612b61565b915061368982613624565b604082019050919050565b5f6020820190508181035f8301526136ab81613672565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61370c602383612b61565b9150613717826136b2565b604082019050919050565b5f6020820190508181035f83015261373981613700565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613774601683612b61565b915061377f82613740565b602082019050919050565b5f6020820190508181035f8301526137a181613768565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613802603583612b61565b915061380d826137a8565b604082019050919050565b5f6020820190508181035f83015261382f816137f6565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61386a601383612b61565b915061387582613836565b602082019050919050565b5f6020820190508181035f8301526138978161385e565b9050919050565b5f6138a882612ae6565b91506138b383612ae6565b92508282039050818111156138cb576138ca612f89565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61392b602683612b61565b9150613936826138d1565b604082019050919050565b5f6020820190508181035f8301526139588161391f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6139dc6139d76139d2846139b9565b612cdd565b612ae6565b9050919050565b6139ec816139c2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613a2481612c06565b82525050565b5f613a358383613a1b565b60208301905092915050565b5f602082019050919050565b5f613a57826139f2565b613a6181856139fc565b9350613a6c83613a0c565b805f5b83811015613a9c578151613a838882613a2a565b9750613a8e83613a41565b925050600181019050613a6f565b5085935050505092915050565b5f60a082019050613abc5f830188612d51565b613ac960208301876139e3565b8181036040830152613adb8186613a4d565b9050613aea6060830185612df4565b613af76080830184612d51565b969550505050505056fea2646970667358221220293b3a5432462c5355f99ce0b06e39c942431e34500396de2ce625082364048f64736f6c634300081e0033
Deployed Bytecode Sourcemap
23300:10719:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28558:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8156:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10323:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24260:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23376:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9276:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29074:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27321:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10974:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23479:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9118:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23434:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23790:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29273:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28239:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24013:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23870:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9447:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1391:103;;;;;;;;;;;;;:::i;:::-;;26625:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27868:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26461:112;;;;;;;;;;;;;:::i;:::-;;740:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23642:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28131:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8375:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23943:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24048:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9787:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23830:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28884:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27604:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23539:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23675:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26816:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23909:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10025:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23717:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23974:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1649:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24080:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23757:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28558:318;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28690:7:::1;28677:10;:20;;;;28727:13;28708:16;:32;;;;28780:16;;28767:10;;:29;;;;:::i;:::-;28751:13;:45;;;;28832:2;28815:13:::0;::::1;:19;;28807:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28558:318:::0;;:::o;8156:100::-;8210:13;8243:5;8236:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8156:100;:::o;10323:169::-;10406:4;10423:39;10432:12;:10;:12::i;:::-;10446:7;10455:6;10423:8;:39::i;:::-;10480:4;10473:11;;10323:169;;;;:::o;24260:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23376:51::-;;;:::o;9276:108::-;9337:7;9364:12;;9357:19;;9276:108;:::o;29074:189::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:9:::1;;;;;;;;;;;29179:41;;29196:12;29179:41;;;;;;;;;;;;29243:12;29231:9;;:24;;;;;;;;;;;;;;;;;;29074:189:::0;:::o;27321:275::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27458:4:::1;27450;27445:1;27429:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27428:26;;;;:::i;:::-;27427:35;;;;:::i;:::-;27417:6;:45;;27395:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;27581:6;27571;:17;;;;:::i;:::-;27548:20;:40;;;;27321:275:::0;:::o;10974:492::-;11114:4;11131:36;11141:6;11149:9;11160:6;11131:9;:36::i;:::-;11180:24;11207:11;:19;11219:6;11207:19;;;;;;;;;;;;;;;:33;11227:12;:10;:12::i;:::-;11207:33;;;;;;;;;;;;;;;;11180:60;;11279:6;11259:16;:26;;11251:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11366:57;11375:6;11383:12;:10;:12::i;:::-;11416:6;11397:16;:25;11366:8;:57::i;:::-;11454:4;11447:11;;;10974:492;;;;;:::o;23479:53::-;23525:6;23479:53;:::o;9118:93::-;9176:5;9201:2;9194:9;;9118:93;:::o;23434:38::-;;;:::o;23790:33::-;;;;;;;;;;;;;:::o;29273:126::-;29339:4;29363:19;:28;29383:7;29363:28;;;;;;;;;;;;;;;;;;;;;;;;;29356:35;;29273:126;;;:::o;28239:311::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28369:7:::1;28357:9;:19;;;;28405:13;28387:15;:31;;;;28456:15;;28444:9;;:27;;;;:::i;:::-;28429:12;:42;;;;28506:2;28490:12;;:18;;28482:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28239:311:::0;;:::o;24013:28::-;;;;:::o;23870:30::-;;;;;;;;;;;;;:::o;9447:127::-;9521:7;9548:9;:18;9558:7;9548:18;;;;;;;;;;;;;;;;9541:25;;9447:127;;;:::o;1391:103::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1456:30:::1;1483:1;1456:18;:30::i;:::-;1391:103::o:0;26625:121::-;26677:4;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26711:5:::1;26694:14;;:22;;;;;;;;;;;;;;;;;;26734:4;26727:11;;26625:121:::0;:::o;27868:167::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28023:4:::1;27981:31;:39;28013:6;27981:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27868:167:::0;;:::o;26461:112::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26532:4:::1;26516:13;;:20;;;;;;;;;;;;;;;;;;26561:4;26547:11;;:18;;;;;;;;;;;;;;;;;;26461:112::o:0;740:87::-;786:7;813:6;;;;;;;;;;;806:13;;740:87;:::o;23642:24::-;;;;;;;;;;;;;:::o;28131:100::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28216:7:::1;28202:11;;:21;;;;;;;;;;;;;;;;;;28131:100:::0;:::o;8375:104::-;8431:13;8464:7;8457:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8375:104;:::o;23943:24::-;;;;:::o;24048:25::-;;;;:::o;9787:175::-;9873:4;9890:42;9900:12;:10;:12::i;:::-;9914:9;9925:6;9890:9;:42::i;:::-;9950:4;9943:11;;9787:175;;;;:::o;23830:33::-;;;;;;;;;;;;;:::o;28884:182::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29000:8:::1;28969:19;:28;28989:7;28969:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29040:7;29024:34;;;29049:8;29024:34;;;;;;:::i;:::-;;;;;;;;28884:182:::0;;:::o;27604:256::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27744:4:::1;27736;27731:1;27715:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27714:26;;;;:::i;:::-;27713:35;;;;:::i;:::-;27703:6;:45;;27681:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;27845:6;27835;:17;;;;:::i;:::-;27823:9;:29;;;;27604:256:::0;:::o;23539:64::-;;;;;;;;;;;;;:::o;23675:35::-;;;;:::o;26816:497::-;26924:4;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27003:6:::1;26998:1;26982:13;:11;:13::i;:::-;:17;;;;:::i;:::-;26981:28;;;;:::i;:::-;26968:9;:41;;26946:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;27158:4;27153:1;27137:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27136:26;;;;:::i;:::-;27123:9;:39;;27101:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;27274:9;27253:18;:30;;;;27301:4;27294:11;;26816:497:::0;;;:::o;23909:27::-;;;;:::o;10025:151::-;10114:7;10141:11;:18;10153:5;10141:18;;;;;;;;;;;;;;;:27;10160:7;10141:27;;;;;;;;;;;;;;;;10134:34;;10025:151;;;;:::o;23717:33::-;;;;:::o;23974:30::-;;;;:::o;1649:201::-;971:12;:10;:12::i;:::-;960:23;;:7;:5;:7::i;:::-;:23;;;952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1758:1:::1;1738:22;;:8;:22;;::::0;1730:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1814:28;1833:8;1814:18;:28::i;:::-;1649:201:::0;:::o;24080:31::-;;;;:::o;23757:24::-;;;;:::o;112:98::-;165:7;192:10;185:17;;112:98;:::o;13815:380::-;13968:1;13951:19;;:5;:19;;;13943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14049:1;14030:21;;:7;:21;;;14022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14133:6;14103:11;:18;14115:5;14103:18;;;;;;;;;;;;;;;:27;14122:7;14103:27;;;;;;;;;;;;;;;:36;;;;14171:7;14155:32;;14164:5;14155:32;;;14180:6;14155:32;;;;;;:::i;:::-;;;;;;;;13815:380;;;:::o;29407:3679::-;29555:1;29539:18;;:4;:18;;;29531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29632:1;29618:16;;:2;:16;;;29610:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29701:1;29691:6;:11;29687:93;;29719:28;29735:4;29741:2;29745:1;29719:15;:28::i;:::-;29762:7;;29687:93;29796:14;;;;;;;;;;;29792:1430;;;29857:7;:5;:7::i;:::-;29849:15;;:4;:15;;;;:49;;;;;29891:7;:5;:7::i;:::-;29885:13;;:2;:13;;;;29849:49;:86;;;;;29933:1;29919:16;;:2;:16;;;;29849:86;:128;;;;;29970:6;29956:21;;:2;:21;;;;29849:128;:158;;;;;29999:8;;;;;;;;;;;29998:9;29849:158;29827:1384;;;30047:13;;;;;;;;;;;30042:223;;30119:19;:25;30139:4;30119:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30148:19;:23;30168:2;30148:23;;;;;;;;;;;;;;;;;;;;;;;;;30119:52;30085:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;30042:223;30479:13;30471:21;;:4;:21;;;:82;;;;;30518:31;:35;30550:2;30518:35;;;;;;;;;;;;;;;;;;;;;;;;;30517:36;30471:82;30445:751;;;30640:20;;30630:6;:30;;30596:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30848:9;;30831:13;30841:2;30831:9;:13::i;:::-;30822:6;:22;;;;:::i;:::-;:35;;30788:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30445:751;;;30976:31;:35;31008:2;30976:35;;;;;;;;;;;;;;;;;;;;;;;;;30971:225;;31096:9;;31079:13;31089:2;31079:9;:13::i;:::-;31070:6;:22;;;;:::i;:::-;:35;;31036:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30971:225;30445:751;29827:1384;29792:1430;31234:28;31265:24;31283:4;31265:9;:24::i;:::-;31234:55;;31302:12;31341:18;;31317:20;:42;;31302:57;;31390:7;:35;;;;;31414:11;;;;;;;;;;;31390:35;:61;;;;;31443:8;;;;;;;;;;;31442:9;31390:61;:97;;;;;31474:13;31468:19;;:2;:19;;;31390:97;:140;;;;;31505:19;:25;31525:4;31505:25;;;;;;;;;;;;;;;;;;;;;;;;;31504:26;31390:140;:181;;;;;31548:19;:23;31568:2;31548:23;;;;;;;;;;;;;;;;;;;;;;;;;31547:24;31390:181;31372:313;;;31609:4;31598:8;;:15;;;;;;;;;;;;;;;;;;31630:10;:8;:10::i;:::-;31668:5;31657:8;;:16;;;;;;;;;;;;;;;;;;31372:313;31697:12;31713:8;;;;;;;;;;;31712:9;31697:24;;31823:19;:25;31843:4;31823:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31852:19;:23;31872:2;31852:23;;;;;;;;;;;;;;;;;;;;;;;;;31823:52;31819:100;;;31902:5;31892:15;;31819:100;31931:12;31946:1;31931:16;;31958:26;31987:1;31958:30;;31999:20;32022:1;31999:24;;32112:7;32108:925;;;32170:13;32164:19;;:2;:19;;;:40;;;;;32203:1;32187:13;;:17;32164:40;32160:583;;;32232:34;32262:3;32232:25;32243:13;;32232:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;32225:41;;32334:13;;32314:16;;32307:4;:23;;;;:::i;:::-;32306:41;;;;:::i;:::-;32285:62;;32403:13;;32389:10;;32382:4;:17;;;;:::i;:::-;32381:35;;;;:::i;:::-;32366:50;;32160:583;;;32486:13;32478:21;;:4;:21;;;:41;;;;;32518:1;32503:12;;:16;32478:41;32474:269;;;32547:33;32576:3;32547:24;32558:12;;32547:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;32540:40;;32647:12;;32628:15;;32621:4;:22;;;;:::i;:::-;32620:39;;;;:::i;:::-;32599:60;;32715:12;;32702:9;;32695:4;:16;;;;:::i;:::-;32694:33;;;;:::i;:::-;32679:48;;32474:269;32160:583;32769:1;32763:4;:7;32759:90;;;32791:42;32807:4;32821;32828;32791:15;:42::i;:::-;32759:90;32888:1;32867:18;:22;32863:128;;;32910:65;32934:4;32941:13;32956:18;32910:15;:65::i;:::-;32863:128;33017:4;33007:14;;;;;:::i;:::-;;;32108:925;33045:33;33061:4;33067:2;33071:6;33045:15;:33::i;:::-;29520:3566;;;;;;29407:3679;;;;:::o;2010:191::-;2084:16;2103:6;;;;;;;;;;;2084:25;;2129:8;2120:6;;:17;;;;;;;;;;;;;;;;;;2184:8;2153:40;;2174:8;2153:40;;;;;;;;;;;;2073:128;2010:191;:::o;11956:733::-;12114:1;12096:20;;:6;:20;;;12088:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12198:1;12177:23;;:9;:23;;;12169:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12253:47;12274:6;12282:9;12293:6;12253:20;:47::i;:::-;12313:21;12337:9;:17;12347:6;12337:17;;;;;;;;;;;;;;;;12313:41;;12390:6;12373:13;:23;;12365:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12511:6;12495:13;:22;12475:9;:17;12485:6;12475:17;;;;;;;;;;;;;;;:42;;;;12563:6;12539:9;:20;12549:9;12539:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12604:9;12587:35;;12596:6;12587:35;;;12615:6;12587:35;;;;;;:::i;:::-;;;;;;;;12635:46;12655:6;12663:9;12674:6;12635:19;:46::i;:::-;12077:612;11956:733;;;:::o;33674:340::-;33713:23;33739:24;33757:4;33739:9;:24::i;:::-;33713:50;;33797:1;33778:15;:20;33774:59;;33815:7;;;33774:59;33888:2;33867:18;;:23;;;;:::i;:::-;33849:15;:41;33845:115;;;33946:2;33925:18;;:23;;;;:::i;:::-;33907:41;;33845:115;33972:34;33990:15;33972:17;:34::i;:::-;33702:312;33674:340;:::o;19268:98::-;19326:7;19357:1;19353;:5;;;;:::i;:::-;19346:12;;19268:98;;;;:::o;19667:::-;19725:7;19756:1;19752;:5;;;;:::i;:::-;19745:12;;19667:98;;;;:::o;14795:125::-;;;;:::o;15524:124::-;;;;:::o;33094:572::-;33221:21;33259:1;33245:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33221:40;;33290:4;33272;33277:1;33272:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33316:4;;;;;;;;;;;33306;33311:1;33306:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33333:62;33350:4;33365:15;33383:11;33333:8;:62::i;:::-;33434:15;:69;;;33518:11;33544:1;33589:4;33608:9;;;;;;;;;;;33632:15;33434:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33150:516;33094:572;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:329::-;3878:6;3927:2;3915:9;3906:7;3902:23;3898:32;3895:119;;;3933:79;;:::i;:::-;3895:119;4053:1;4078:53;4123:7;4114:6;4103:9;4099:22;4078:53;:::i;:::-;4068:63;;4024:117;3819:329;;;;:::o;4154:60::-;4182:3;4203:5;4196:12;;4154:60;;;:::o;4220:142::-;4270:9;4303:53;4321:34;4330:24;4348:5;4330:24;:::i;:::-;4321:34;:::i;:::-;4303:53;:::i;:::-;4290:66;;4220:142;;;:::o;4368:126::-;4418:9;4451:37;4482:5;4451:37;:::i;:::-;4438:50;;4368:126;;;:::o;4500:152::-;4576:9;4609:37;4640:5;4609:37;:::i;:::-;4596:50;;4500:152;;;:::o;4658:183::-;4771:63;4828:5;4771:63;:::i;:::-;4766:3;4759:76;4658:183;;:::o;4847:274::-;4966:4;5004:2;4993:9;4989:18;4981:26;;5017:97;5111:1;5100:9;5096:17;5087:6;5017:97;:::i;:::-;4847:274;;;;:::o;5127:118::-;5214:24;5232:5;5214:24;:::i;:::-;5209:3;5202:37;5127:118;;:::o;5251:222::-;5344:4;5382:2;5371:9;5367:18;5359:26;;5395:71;5463:1;5452:9;5448:17;5439:6;5395:71;:::i;:::-;5251:222;;;;:::o;5479:329::-;5538:6;5587:2;5575:9;5566:7;5562:23;5558:32;5555:119;;;5593:79;;:::i;:::-;5555:119;5713:1;5738:53;5783:7;5774:6;5763:9;5759:22;5738:53;:::i;:::-;5728:63;;5684:117;5479:329;;;;:::o;5814:619::-;5891:6;5899;5907;5956:2;5944:9;5935:7;5931:23;5927:32;5924:119;;;5962:79;;:::i;:::-;5924:119;6082:1;6107:53;6152:7;6143:6;6132:9;6128:22;6107:53;:::i;:::-;6097:63;;6053:117;6209:2;6235:53;6280:7;6271:6;6260:9;6256:22;6235:53;:::i;:::-;6225:63;;6180:118;6337:2;6363:53;6408:7;6399:6;6388:9;6384:22;6363:53;:::i;:::-;6353:63;;6308:118;5814:619;;;;;:::o;6439:118::-;6526:24;6544:5;6526:24;:::i;:::-;6521:3;6514:37;6439:118;;:::o;6563:222::-;6656:4;6694:2;6683:9;6679:18;6671:26;;6707:71;6775:1;6764:9;6760:17;6751:6;6707:71;:::i;:::-;6563:222;;;;:::o;6791:86::-;6826:7;6866:4;6859:5;6855:16;6844:27;;6791:86;;;:::o;6883:112::-;6966:22;6982:5;6966:22;:::i;:::-;6961:3;6954:35;6883:112;;:::o;7001:214::-;7090:4;7128:2;7117:9;7113:18;7105:26;;7141:67;7205:1;7194:9;7190:17;7181:6;7141:67;:::i;:::-;7001:214;;;;:::o;7221:116::-;7291:21;7306:5;7291:21;:::i;:::-;7284:5;7281:32;7271:60;;7327:1;7324;7317:12;7271:60;7221:116;:::o;7343:133::-;7386:5;7424:6;7411:20;7402:29;;7440:30;7464:5;7440:30;:::i;:::-;7343:133;;;;:::o;7482:468::-;7547:6;7555;7604:2;7592:9;7583:7;7579:23;7575:32;7572:119;;;7610:79;;:::i;:::-;7572:119;7730:1;7755:53;7800:7;7791:6;7780:9;7776:22;7755:53;:::i;:::-;7745:63;;7701:117;7857:2;7883:50;7925:7;7916:6;7905:9;7901:22;7883:50;:::i;:::-;7873:60;;7828:115;7482:468;;;;;:::o;7956:323::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:50;8254:7;8245:6;8234:9;8230:22;8212:50;:::i;:::-;8202:60;;8158:114;7956:323;;;;:::o;8285:474::-;8353:6;8361;8410:2;8398:9;8389:7;8385:23;8381:32;8378:119;;;8416:79;;:::i;:::-;8378:119;8536:1;8561:53;8606:7;8597:6;8586:9;8582:22;8561:53;:::i;:::-;8551:63;;8507:117;8663:2;8689:53;8734:7;8725:6;8714:9;8710:22;8689:53;:::i;:::-;8679:63;;8634:118;8285:474;;;;;:::o;8765:182::-;8905:34;8901:1;8893:6;8889:14;8882:58;8765:182;:::o;8953:366::-;9095:3;9116:67;9180:2;9175:3;9116:67;:::i;:::-;9109:74;;9192:93;9281:3;9192:93;:::i;:::-;9310:2;9305:3;9301:12;9294:19;;8953:366;;;:::o;9325:419::-;9491:4;9529:2;9518:9;9514:18;9506:26;;9578:9;9572:4;9568:20;9564:1;9553:9;9549:17;9542:47;9606:131;9732:4;9606:131;:::i;:::-;9598:139;;9325:419;;;:::o;9750:180::-;9798:77;9795:1;9788:88;9895:4;9892:1;9885:15;9919:4;9916:1;9909:15;9936:191;9976:3;9995:20;10013:1;9995:20;:::i;:::-;9990:25;;10029:20;10047:1;10029:20;:::i;:::-;10024:25;;10072:1;10069;10065:9;10058:16;;10093:3;10090:1;10087:10;10084:36;;;10100:18;;:::i;:::-;10084:36;9936:191;;;;:::o;10133:179::-;10273:31;10269:1;10261:6;10257:14;10250:55;10133:179;:::o;10318:366::-;10460:3;10481:67;10545:2;10540:3;10481:67;:::i;:::-;10474:74;;10557:93;10646:3;10557:93;:::i;:::-;10675:2;10670:3;10666:12;10659:19;;10318:366;;;:::o;10690:419::-;10856:4;10894:2;10883:9;10879:18;10871:26;;10943:9;10937:4;10933:20;10929:1;10918:9;10914:17;10907:47;10971:131;11097:4;10971:131;:::i;:::-;10963:139;;10690:419;;;:::o;11115:180::-;11163:77;11160:1;11153:88;11260:4;11257:1;11250:15;11284:4;11281:1;11274:15;11301:320;11345:6;11382:1;11376:4;11372:12;11362:22;;11429:1;11423:4;11419:12;11450:18;11440:81;;11506:4;11498:6;11494:17;11484:27;;11440:81;11568:2;11560:6;11557:14;11537:18;11534:38;11531:84;;11587:18;;:::i;:::-;11531:84;11352:269;11301:320;;;:::o;11627:410::-;11667:7;11690:20;11708:1;11690:20;:::i;:::-;11685:25;;11724:20;11742:1;11724:20;:::i;:::-;11719:25;;11779:1;11776;11772:9;11801:30;11819:11;11801:30;:::i;:::-;11790:41;;11980:1;11971:7;11967:15;11964:1;11961:22;11941:1;11934:9;11914:83;11891:139;;12010:18;;:::i;:::-;11891:139;11675:362;11627:410;;;;:::o;12043:180::-;12091:77;12088:1;12081:88;12188:4;12185:1;12178:15;12212:4;12209:1;12202:15;12229:185;12269:1;12286:20;12304:1;12286:20;:::i;:::-;12281:25;;12320:20;12338:1;12320:20;:::i;:::-;12315:25;;12359:1;12349:35;;12364:18;;:::i;:::-;12349:35;12406:1;12403;12399:9;12394:14;;12229:185;;;;:::o;12420:234::-;12560:34;12556:1;12548:6;12544:14;12537:58;12629:17;12624:2;12616:6;12612:15;12605:42;12420:234;:::o;12660:366::-;12802:3;12823:67;12887:2;12882:3;12823:67;:::i;:::-;12816:74;;12899:93;12988:3;12899:93;:::i;:::-;13017:2;13012:3;13008:12;13001:19;;12660:366;;;:::o;13032:419::-;13198:4;13236:2;13225:9;13221:18;13213:26;;13285:9;13279:4;13275:20;13271:1;13260:9;13256:17;13249:47;13313:131;13439:4;13313:131;:::i;:::-;13305:139;;13032:419;;;:::o;13457:227::-;13597:34;13593:1;13585:6;13581:14;13574:58;13666:10;13661:2;13653:6;13649:15;13642:35;13457:227;:::o;13690:366::-;13832:3;13853:67;13917:2;13912:3;13853:67;:::i;:::-;13846:74;;13929:93;14018:3;13929:93;:::i;:::-;14047:2;14042:3;14038:12;14031:19;;13690:366;;;:::o;14062:419::-;14228:4;14266:2;14255:9;14251:18;14243:26;;14315:9;14309:4;14305:20;14301:1;14290:9;14286:17;14279:47;14343:131;14469:4;14343:131;:::i;:::-;14335:139;;14062:419;;;:::o;14487:179::-;14627:31;14623:1;14615:6;14611:14;14604:55;14487:179;:::o;14672:366::-;14814:3;14835:67;14899:2;14894:3;14835:67;:::i;:::-;14828:74;;14911:93;15000:3;14911:93;:::i;:::-;15029:2;15024:3;15020:12;15013:19;;14672:366;;;:::o;15044:419::-;15210:4;15248:2;15237:9;15233:18;15225:26;;15297:9;15291:4;15287:20;15283:1;15272:9;15268:17;15261:47;15325:131;15451:4;15325:131;:::i;:::-;15317:139;;15044:419;;;:::o;15469:223::-;15609:34;15605:1;15597:6;15593:14;15586:58;15678:6;15673:2;15665:6;15661:15;15654:31;15469:223;:::o;15698:366::-;15840:3;15861:67;15925:2;15920:3;15861:67;:::i;:::-;15854:74;;15937:93;16026:3;15937:93;:::i;:::-;16055:2;16050:3;16046:12;16039:19;;15698:366;;;:::o;16070:419::-;16236:4;16274:2;16263:9;16259:18;16251:26;;16323:9;16317:4;16313:20;16309:1;16298:9;16294:17;16287:47;16351:131;16477:4;16351:131;:::i;:::-;16343:139;;16070:419;;;:::o;16495:240::-;16635:34;16631:1;16623:6;16619:14;16612:58;16704:23;16699:2;16691:6;16687:15;16680:48;16495:240;:::o;16741:366::-;16883:3;16904:67;16968:2;16963:3;16904:67;:::i;:::-;16897:74;;16980:93;17069:3;16980:93;:::i;:::-;17098:2;17093:3;17089:12;17082:19;;16741:366;;;:::o;17113:419::-;17279:4;17317:2;17306:9;17302:18;17294:26;;17366:9;17360:4;17356:20;17352:1;17341:9;17337:17;17330:47;17394:131;17520:4;17394:131;:::i;:::-;17386:139;;17113:419;;;:::o;17538:239::-;17678:34;17674:1;17666:6;17662:14;17655:58;17747:22;17742:2;17734:6;17730:15;17723:47;17538:239;:::o;17783:366::-;17925:3;17946:67;18010:2;18005:3;17946:67;:::i;:::-;17939:74;;18022:93;18111:3;18022:93;:::i;:::-;18140:2;18135:3;18131:12;18124:19;;17783:366;;;:::o;18155:419::-;18321:4;18359:2;18348:9;18344:18;18336:26;;18408:9;18402:4;18398:20;18394:1;18383:9;18379:17;18372:47;18436:131;18562:4;18436:131;:::i;:::-;18428:139;;18155:419;;;:::o;18580:225::-;18720:34;18716:1;18708:6;18704:14;18697:58;18789:8;18784:2;18776:6;18772:15;18765:33;18580:225;:::o;18811:366::-;18953:3;18974:67;19038:2;19033:3;18974:67;:::i;:::-;18967:74;;19050:93;19139:3;19050:93;:::i;:::-;19168:2;19163:3;19159:12;19152:19;;18811:366;;;:::o;19183:419::-;19349:4;19387:2;19376:9;19372:18;19364:26;;19436:9;19430:4;19426:20;19422:1;19411:9;19407:17;19400:47;19464:131;19590:4;19464:131;:::i;:::-;19456:139;;19183:419;;;:::o;19608:223::-;19748:34;19744:1;19736:6;19732:14;19725:58;19817:6;19812:2;19804:6;19800:15;19793:31;19608:223;:::o;19837:366::-;19979:3;20000:67;20064:2;20059:3;20000:67;:::i;:::-;19993:74;;20076:93;20165:3;20076:93;:::i;:::-;20194:2;20189:3;20185:12;20178:19;;19837:366;;;:::o;20209:419::-;20375:4;20413:2;20402:9;20398:18;20390:26;;20462:9;20456:4;20452:20;20448:1;20437:9;20433:17;20426:47;20490:131;20616:4;20490:131;:::i;:::-;20482:139;;20209:419;;;:::o;20634:221::-;20774:34;20770:1;20762:6;20758:14;20751:58;20843:4;20838:2;20830:6;20826:15;20819:29;20634:221;:::o;20861:366::-;21003:3;21024:67;21088:2;21083:3;21024:67;:::i;:::-;21017:74;;21100:93;21189:3;21100:93;:::i;:::-;21218:2;21213:3;21209:12;21202:19;;20861:366;;;:::o;21233:419::-;21399:4;21437:2;21426:9;21422:18;21414:26;;21486:9;21480:4;21476:20;21472:1;21461:9;21457:17;21450:47;21514:131;21640:4;21514:131;:::i;:::-;21506:139;;21233:419;;;:::o;21658:224::-;21798:34;21794:1;21786:6;21782:14;21775:58;21867:7;21862:2;21854:6;21850:15;21843:32;21658:224;:::o;21888:366::-;22030:3;22051:67;22115:2;22110:3;22051:67;:::i;:::-;22044:74;;22127:93;22216:3;22127:93;:::i;:::-;22245:2;22240:3;22236:12;22229:19;;21888:366;;;:::o;22260:419::-;22426:4;22464:2;22453:9;22449:18;22441:26;;22513:9;22507:4;22503:20;22499:1;22488:9;22484:17;22477:47;22541:131;22667:4;22541:131;:::i;:::-;22533:139;;22260:419;;;:::o;22685:222::-;22825:34;22821:1;22813:6;22809:14;22802:58;22894:5;22889:2;22881:6;22877:15;22870:30;22685:222;:::o;22913:366::-;23055:3;23076:67;23140:2;23135:3;23076:67;:::i;:::-;23069:74;;23152:93;23241:3;23152:93;:::i;:::-;23270:2;23265:3;23261:12;23254:19;;22913:366;;;:::o;23285:419::-;23451:4;23489:2;23478:9;23474:18;23466:26;;23538:9;23532:4;23528:20;23524:1;23513:9;23509:17;23502:47;23566:131;23692:4;23566:131;:::i;:::-;23558:139;;23285:419;;;:::o;23710:172::-;23850:24;23846:1;23838:6;23834:14;23827:48;23710:172;:::o;23888:366::-;24030:3;24051:67;24115:2;24110:3;24051:67;:::i;:::-;24044:74;;24127:93;24216:3;24127:93;:::i;:::-;24245:2;24240:3;24236:12;24229:19;;23888:366;;;:::o;24260:419::-;24426:4;24464:2;24453:9;24449:18;24441:26;;24513:9;24507:4;24503:20;24499:1;24488:9;24484:17;24477:47;24541:131;24667:4;24541:131;:::i;:::-;24533:139;;24260:419;;;:::o;24685:240::-;24825:34;24821:1;24813:6;24809:14;24802:58;24894:23;24889:2;24881:6;24877:15;24870:48;24685:240;:::o;24931:366::-;25073:3;25094:67;25158:2;25153:3;25094:67;:::i;:::-;25087:74;;25170:93;25259:3;25170:93;:::i;:::-;25288:2;25283:3;25279:12;25272:19;;24931:366;;;:::o;25303:419::-;25469:4;25507:2;25496:9;25492:18;25484:26;;25556:9;25550:4;25546:20;25542:1;25531:9;25527:17;25520:47;25584:131;25710:4;25584:131;:::i;:::-;25576:139;;25303:419;;;:::o;25728:169::-;25868:21;25864:1;25856:6;25852:14;25845:45;25728:169;:::o;25903:366::-;26045:3;26066:67;26130:2;26125:3;26066:67;:::i;:::-;26059:74;;26142:93;26231:3;26142:93;:::i;:::-;26260:2;26255:3;26251:12;26244:19;;25903:366;;;:::o;26275:419::-;26441:4;26479:2;26468:9;26464:18;26456:26;;26528:9;26522:4;26518:20;26514:1;26503:9;26499:17;26492:47;26556:131;26682:4;26556:131;:::i;:::-;26548:139;;26275:419;;;:::o;26700:194::-;26740:4;26760:20;26778:1;26760:20;:::i;:::-;26755:25;;26794:20;26812:1;26794:20;:::i;:::-;26789:25;;26838:1;26835;26831:9;26823:17;;26862:1;26856:4;26853:11;26850:37;;;26867:18;;:::i;:::-;26850:37;26700:194;;;;:::o;26900:225::-;27040:34;27036:1;27028:6;27024:14;27017:58;27109:8;27104:2;27096:6;27092:15;27085:33;26900:225;:::o;27131:366::-;27273:3;27294:67;27358:2;27353:3;27294:67;:::i;:::-;27287:74;;27370:93;27459:3;27370:93;:::i;:::-;27488:2;27483:3;27479:12;27472:19;;27131:366;;;:::o;27503:419::-;27669:4;27707:2;27696:9;27692:18;27684:26;;27756:9;27750:4;27746:20;27742:1;27731:9;27727:17;27720:47;27784:131;27910:4;27784:131;:::i;:::-;27776:139;;27503:419;;;:::o;27928:180::-;27976:77;27973:1;27966:88;28073:4;28070:1;28063:15;28097:4;28094:1;28087:15;28114:180;28162:77;28159:1;28152:88;28259:4;28256:1;28249:15;28283:4;28280:1;28273:15;28300:85;28345:7;28374:5;28363:16;;28300:85;;;:::o;28391:158::-;28449:9;28482:61;28500:42;28509:32;28535:5;28509:32;:::i;:::-;28500:42;:::i;:::-;28482:61;:::i;:::-;28469:74;;28391:158;;;:::o;28555:147::-;28650:45;28689:5;28650:45;:::i;:::-;28645:3;28638:58;28555:147;;:::o;28708:114::-;28775:6;28809:5;28803:12;28793:22;;28708:114;;;:::o;28828:184::-;28927:11;28961:6;28956:3;28949:19;29001:4;28996:3;28992:14;28977:29;;28828:184;;;;:::o;29018:132::-;29085:4;29108:3;29100:11;;29138:4;29133:3;29129:14;29121:22;;29018:132;;;:::o;29156:108::-;29233:24;29251:5;29233:24;:::i;:::-;29228:3;29221:37;29156:108;;:::o;29270:179::-;29339:10;29360:46;29402:3;29394:6;29360:46;:::i;:::-;29438:4;29433:3;29429:14;29415:28;;29270:179;;;;:::o;29455:113::-;29525:4;29557;29552:3;29548:14;29540:22;;29455:113;;;:::o;29604:732::-;29723:3;29752:54;29800:5;29752:54;:::i;:::-;29822:86;29901:6;29896:3;29822:86;:::i;:::-;29815:93;;29932:56;29982:5;29932:56;:::i;:::-;30011:7;30042:1;30027:284;30052:6;30049:1;30046:13;30027:284;;;30128:6;30122:13;30155:63;30214:3;30199:13;30155:63;:::i;:::-;30148:70;;30241:60;30294:6;30241:60;:::i;:::-;30231:70;;30087:224;30074:1;30071;30067:9;30062:14;;30027:284;;;30031:14;30327:3;30320:10;;29728:608;;;29604:732;;;;:::o;30342:831::-;30605:4;30643:3;30632:9;30628:19;30620:27;;30657:71;30725:1;30714:9;30710:17;30701:6;30657:71;:::i;:::-;30738:80;30814:2;30803:9;30799:18;30790:6;30738:80;:::i;:::-;30865:9;30859:4;30855:20;30850:2;30839:9;30835:18;30828:48;30893:108;30996:4;30987:6;30893:108;:::i;:::-;30885:116;;31011:72;31079:2;31068:9;31064:18;31055:6;31011:72;:::i;:::-;31093:73;31161:3;31150:9;31146:19;31137:6;31093:73;:::i;:::-;30342:831;;;;;;;;:::o
Swarm Source
ipfs://293b3a5432462c5355f99ce0b06e39c942431e34500396de2ce625082364048f
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.