Source Code
Overview
ETH Balance
0.06 ETH
Eth Value
$117.00 (@ $1,949.94/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 999 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24312359 | 28 days ago | IN | 0 ETH | 0.00001613 | ||||
| Approve | 24169146 | 47 days ago | IN | 0 ETH | 0.0000126 | ||||
| Approve | 24169083 | 47 days ago | IN | 0 ETH | 0.00014694 | ||||
| Approve | 24130656 | 53 days ago | IN | 0 ETH | 0.00000525 | ||||
| Approve | 24121180 | 54 days ago | IN | 0 ETH | 0.00000756 | ||||
| Approve | 24109857 | 56 days ago | IN | 0 ETH | 0.00000606 | ||||
| Approve | 24067858 | 62 days ago | IN | 0 ETH | 0.00014243 | ||||
| Approve | 24011649 | 69 days ago | IN | 0 ETH | 0.00010099 | ||||
| Approve | 23662578 | 118 days ago | IN | 0 ETH | 0.00000659 | ||||
| Approve | 23632849 | 123 days ago | IN | 0 ETH | 0.0000293 | ||||
| Approve | 23614399 | 125 days ago | IN | 0 ETH | 0.00000857 | ||||
| Approve | 23577137 | 130 days ago | IN | 0 ETH | 0.00010374 | ||||
| Approve | 23531218 | 137 days ago | IN | 0 ETH | 0.00000569 | ||||
| Approve | 23488424 | 143 days ago | IN | 0 ETH | 0.00002175 | ||||
| Approve | 23428968 | 151 days ago | IN | 0 ETH | 0.0000165 | ||||
| Approve | 23413550 | 153 days ago | IN | 0 ETH | 0.00004209 | ||||
| Transfer | 23391006 | 156 days ago | IN | 0 ETH | 0.00017988 | ||||
| Approve | 23366592 | 160 days ago | IN | 0 ETH | 0.00000749 | ||||
| Approve | 23355435 | 161 days ago | IN | 0 ETH | 0.0000675 | ||||
| Approve | 23323690 | 166 days ago | IN | 0 ETH | 0.00001471 | ||||
| Approve | 23307554 | 168 days ago | IN | 0 ETH | 0.00001883 | ||||
| Approve | 23278061 | 172 days ago | IN | 0 ETH | 0.00002117 | ||||
| Approve | 23275052 | 173 days ago | IN | 0 ETH | 0.00006065 | ||||
| Approve | 23187323 | 185 days ago | IN | 0 ETH | 0.00001373 | ||||
| Approve | 23158456 | 189 days ago | IN | 0 ETH | 0.0000073 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 22484031 | 283 days ago | 1.28547836 ETH | ||||
| Transfer | 22484031 | 283 days ago | 1.28547836 ETH | ||||
| Transfer | 22484028 | 283 days ago | 3.61098424 ETH | ||||
| Transfer | 22484028 | 283 days ago | 3.61098424 ETH | ||||
| Transfer | 22484027 | 283 days ago | 3.06939475 ETH | ||||
| Transfer | 22484027 | 283 days ago | 3.06939475 ETH | ||||
| Transfer | 22484026 | 283 days ago | 4.39747259 ETH | ||||
| Transfer | 22484026 | 283 days ago | 4.39747259 ETH | ||||
| Transfer | 22484025 | 283 days ago | 0.00219084 ETH | ||||
| Transfer | 22484025 | 283 days ago | 0.00219084 ETH | ||||
| Transfer | 22484021 | 283 days ago | 0.03019712 ETH | ||||
| Transfer | 22484021 | 283 days ago | 0.03019712 ETH | ||||
| Transfer | 22484021 | 283 days ago | 0.08795726 ETH | ||||
| Transfer | 22484021 | 283 days ago | 0.08795726 ETH | ||||
| Transfer | 22484019 | 283 days ago | 2.75003827 ETH | ||||
| Transfer | 22484019 | 283 days ago | 2.75003827 ETH | ||||
| Transfer | 22484018 | 283 days ago | 0.08601822 ETH | ||||
| Transfer | 22484018 | 283 days ago | 0.08601822 ETH | ||||
| Transfer | 22484014 | 283 days ago | 3.2843563 ETH | ||||
| Transfer | 22484014 | 283 days ago | 3.2843563 ETH | ||||
| Transfer | 22484013 | 283 days ago | 0.70921139 ETH | ||||
| Transfer | 22484013 | 283 days ago | 0.70921139 ETH | ||||
| Transfer | 22484011 | 283 days ago | 0.04446148 ETH | ||||
| Transfer | 22484011 | 283 days ago | 0.04446148 ETH | ||||
| Transfer | 22484010 | 283 days ago | 0.00550739 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DOGGEN
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-05-14
*/
/*
* SPDX-License-Identifier: MIT
* https://doggensnout.vip/
* https://x.com/doggensnouts
* https://t.me/doggensnouts
*/
pragma solidity 0.8.19;
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 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
);
}
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);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
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 upd allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the upd allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the upd allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
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);
}
}
interface IDexFactory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract DOGGEN is ERC20, Ownable {
using SafeMath for uint256;
IDexRouter private immutable dexRouter;
address private immutable dexPair;
// Swapback
bool private onSwapback;
bool private isSwapbackEnabled = false;
uint256 private minSwapback;
uint256 private maxSwapback;
uint256 private lastSwapback;
//Anti-whale
bool private limitsOn = true;
uint256 private walletLimit;
uint256 private maxTx;
mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
bool private tradingEnabled = false;
// Fees
address private marketingWallet;
uint256 private buyTaxTotal;
uint256 private sellTaxTotal;
uint256 private transferTaxTotal;
/******************/
// exclude from fees and max transaction amount
mapping(address => bool) private transferTaxExempt;
mapping(address => bool) private transferLimitExempt;
mapping(address => bool) private automatedMarketMakerPairs;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event ExcludeFromFees(address indexed account, bool isExcluded);
event ExcludeFromLimits(address indexed account, bool isExcluded);
event SetPairLPool(address indexed pair, bool indexed value);
event TradingEnabled(uint256 indexed timestamp);
event LimitsRemoved(uint256 indexed timestamp);
event DisabledTransferDelay(uint256 indexed timestamp);
event SwapbackSettingsUpdated(
bool enabled,
uint256 minSwapback,
uint256 maxSwapback
);
event MaxTxUpdated(uint256 maxTx);
event MaxWalletUpdated(uint256 walletLimit);
event MarketingWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event BuyFeeUpdated(
uint256 buyTaxTotal,
uint256 buyMarketingTax,
uint256 buyProjectTax
);
event SellFeeUpdated(
uint256 sellTaxTotal,
uint256 sellMarketingTax,
uint256 sellProjectTax
);
constructor() ERC20("Doggensnout", "DOGGEN") {
IDexRouter _dexRouter = IDexRouter(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
limitsMaxExempt(address(_dexRouter), true);
dexRouter = _dexRouter;
dexPair = IDexFactory(_dexRouter.factory()).createPair(
address(this),
_dexRouter.WETH()
);
limitsMaxExempt(address(dexPair), true);
_LPset(address(dexPair), true);
uint256 _totalSupply = 690_420_000_000_000 * 10 ** decimals();
lastSwapback = block.timestamp;
maxTx = (_totalSupply * 10) / 1000;
walletLimit = (_totalSupply * 10) / 1000;
minSwapback = (_totalSupply * 1) / 1000;
maxSwapback = (_totalSupply * 2) / 100;
buyTaxTotal = 30;
sellTaxTotal = 30;
transferTaxTotal = 0;
marketingWallet = address(0xeDCb9C967C8FBb62fB042F855094714E5700Cb22);
// exclude from paying fees or having max transaction amount
taxesSetExempt(msg.sender, true);
taxesSetExempt(address(this), true);
taxesSetExempt(address(0xdead), true);
taxesSetExempt(marketingWallet, true);
limitsMaxExempt(msg.sender, true);
limitsMaxExempt(address(this), true);
limitsMaxExempt(address(0xdead), true);
limitsMaxExempt(marketingWallet, true);
transferOwnership(msg.sender);
/*
_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 {}
/**
* @notice Opens public trading for the token
* @dev onlyOwner.
*/
function openTrading() external onlyOwner {
tradingEnabled = true;
isSwapbackEnabled = true;
emit TradingEnabled(block.timestamp);
}
/**
* @notice Removes the max wallet and max transaction limits
* @dev onlyOwner.
* Emits an {LimitsRemoved} event
*/
function disableLimitNow() external onlyOwner {
limitsOn = false;
transferTaxTotal = 0;
emit LimitsRemoved(block.timestamp);
}
/**
* @notice sets if swapback is enabled and sets the minimum and maximum amounts
* @dev onlyOwner.
* Emits an {SwapbackSettingsUpdated} event
* @param _caSBcEnabled If swapback is enabled
* @param _caSBcTrigger The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
* @param _caSBcLimit The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
*/
function newSwapB(
bool _caSBcEnabled,
uint256 _caSBcTrigger,
uint256 _caSBcLimit
) external onlyOwner {
require(
_caSBcTrigger >= 1,
"Swap amount cannot be lower than 0.01% total supply."
);
require(
_caSBcLimit >= _caSBcTrigger,
"maximum amount cant be higher than minimum"
);
isSwapbackEnabled = _caSBcEnabled;
minSwapback = (totalSupply() * _caSBcTrigger) / 10000;
maxSwapback = (totalSupply() * _caSBcLimit) / 10000;
emit SwapbackSettingsUpdated(_caSBcEnabled, _caSBcTrigger, _caSBcLimit);
}
/**
* @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
* @dev onlyOwner.
* Emits an {MaxTxUpdated} event
* @param _maxTx Base 1000, so 1% = 10
*/
function limitsTxChange(uint256 _maxTx) external onlyOwner {
require(_maxTx >= 2, "Cannot set maxTx lower than 0.2%");
maxTx = (_maxTx * totalSupply()) / 1000;
emit MaxTxUpdated(maxTx);
}
/**
* @notice Changes the maximum amount of tokens a wallet can hold
* @dev onlyOwner.
* Emits an {MaxWalletUpdated} event
* @param _walletLimit Base 1000, so 1% = 10
*/
function limitsWalletChange(
uint256 _walletLimit
) external onlyOwner {
require(_walletLimit >= 5, "Cannot set walletLimit lower than 0.5%");
walletLimit = (_walletLimit * totalSupply()) / 1000;
emit MaxWalletUpdated(walletLimit);
}
/**
* @notice Sets if a wallet is excluded from the max wallet and tx limits
* @dev onlyOwner.
* Emits an {ExcludeFromLimits} event
* @param _add The wallet to update
* @param _excluded If the wallet is excluded or not
*/
function limitsMaxExempt(
address _add,
bool _excluded
) public onlyOwner {
transferLimitExempt[_add] = _excluded;
emit ExcludeFromLimits(_add, _excluded);
}
/**
* @notice Sets the fees for buys
* @dev onlyOwner.
* Emits a {BuyFeeUpdated} event
* All fees added up must be less than 100
* @param _value The fee for the marketing wallet
*/
function taxesBuyChange(uint256 _value) external onlyOwner {
buyTaxTotal = _value;
require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
emit BuyFeeUpdated(buyTaxTotal, buyTaxTotal, buyTaxTotal);
}
/**
* @notice Sets the fees for sells
* @dev onlyOwner.
* Emits a {SellFeeUpdated} event
* All fees added up must be less than 100
* @param _value The fee for the marketing wallet
*/
function taxesSellChange(uint256 _value) external onlyOwner {
sellTaxTotal = _value;
require(
sellTaxTotal <= 100,
"Total sell fee cannot be higher than 100%"
);
emit SellFeeUpdated(sellTaxTotal, sellTaxTotal, sellTaxTotal);
}
function taxesTransferChange(uint256 _value) external onlyOwner {
transferTaxTotal = _value;
require(
transferTaxTotal <= 100,
"Total transfer fee cannot be higher than 100%"
);
}
/**
* @notice Sets if an address is excluded from fees
* @dev onlyOwner.
* Emits an {ExcludeFromFees} event
* @param _add The wallet to update
* @param _excluded If the wallet is excluded or not
*/
function taxesSetExempt(
address _add,
bool _excluded
) public onlyOwner {
transferTaxExempt[_add] = _excluded;
emit ExcludeFromFees(_add, _excluded);
}
function _LPset(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetPairLPool(pair, value);
}
/**
* @notice Sets the marketing wallet
* @dev onlyOwner.
* Emits an {MarketingWalletUpdated} event
* @param _marketing The new marketing wallet
*/
function taxesReceiverNew(address _marketing) external onlyOwner {
emit MarketingWalletUpdated(_marketing, marketingWallet);
marketingWallet = _marketing;
}
/**
* @notice Information about the swapback settings
* @return _isSwapbackEnabled if swapback is enabled
* @return _caSBcackValueMin the minimum amount of tokens in the contract balance to trigger swapback
* @return _caSBcackValueMax the maximum amount of tokens in the contract balance to trigger swapback
*/
function swapBRead()
external
view
returns (
bool _isSwapbackEnabled,
uint256 _caSBcackValueMin,
uint256 _caSBcackValueMax
)
{
_isSwapbackEnabled = isSwapbackEnabled;
_caSBcackValueMin = minSwapback;
_caSBcackValueMax = maxSwapback;
}
/**
* @notice Information about the anti whale parameters
* @return _limitsOn if the wallet limits are in effect
* @return _walletLimit The maximum amount of tokens that can be held by a wallet
* @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction
*/
function maxLimsCR()
external
view
returns (bool _limitsOn, uint256 _walletLimit, uint256 _maxTx)
{
_limitsOn = limitsOn;
_walletLimit = walletLimit;
_maxTx = maxTx;
}
/**
* @notice Fees for buys, sells, and transfers
* @return _buyTaxTotal The total fee for buys
* @return _sellTaxTotal The total fee for sells
* @return _transferTaxTotal The total fee for transfers
* @return _receiver The wallet that receives the fees
*/
function taxesCVI()
external
view
returns (
uint256 _buyTaxTotal,
uint256 _sellTaxTotal,
uint256 _transferTaxTotal,
address _receiver
)
{
_buyTaxTotal = buyTaxTotal;
_sellTaxTotal = sellTaxTotal;
_transferTaxTotal = transferTaxTotal;
_receiver = marketingWallet;
}
/**
* @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
* @param _target The wallet to check
* @return _transferTaxExempt If the wallet is excluded from fees
* @return _transferLimitExempt If the wallet is excluded from max transaction amount
* @return _automatedMarketMakerPairs If the wallet is a automated market maker pair
*/
function addressPrmV(
address _target
)
external
view
returns (
bool _transferTaxExempt,
bool _transferLimitExempt,
bool _automatedMarketMakerPairs
)
{
_transferTaxExempt = transferTaxExempt[_target];
_transferLimitExempt = transferLimitExempt[_target];
_automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
}
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 (limitsOn) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!onSwapback
) {
if (!tradingEnabled) {
require(
transferTaxExempt[from] || transferTaxExempt[to],
"_transfer:: Trading is not active."
);
}
//when buy
if (
automatedMarketMakerPairs[from] && !transferLimitExempt[to]
) {
require(
amount <= maxTx,
"Buy transfer amount exceeds the maxTx."
);
require(
amount + balanceOf(to) <= walletLimit,
"Max wallet exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] && !transferLimitExempt[from]
) {
require(
amount <= maxTx,
"Sell transfer amount exceeds the maxTx."
);
} else if (!transferLimitExempt[to]) {
require(
amount + balanceOf(to) <= walletLimit,
"Max wallet exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= minSwapback;
if (
canSwap &&
isSwapbackEnabled &&
!onSwapback &&
!automatedMarketMakerPairs[from] &&
!transferTaxExempt[from] &&
!transferTaxExempt[to] &&
lastSwapback != block.timestamp
) {
onSwapback = true;
swapBack(amount);
lastSwapback = block.timestamp;
onSwapback = false;
}
bool takeFee = !onSwapback;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (transferTaxExempt[from] || transferTaxExempt[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
fees = amount.mul(sellTaxTotal).div(100);
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
fees = amount.mul(buyTaxTotal).div(100);
}
// on transfers
else if (
transferTaxTotal > 0 &&
!automatedMarketMakerPairs[from] &&
!automatedMarketMakerPairs[to]
) {
fees = amount.mul(transferTaxTotal).div(100);
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function internalSwapback(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = dexRouter.WETH();
_approve(address(this), address(dexRouter), tokenAmount);
// make the swap
dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function swapBack(uint256 amount) private {
uint256 contractBalance = balanceOf(address(this));
bool success;
if (contractBalance == 0) {
return;
}
if (contractBalance > maxSwapback) {
contractBalance = maxSwapback;
}
if (contractBalance > amount * 15) {
contractBalance = amount * 15;
}
uint256 amountToSwapForETH = contractBalance;
internalSwapback(amountToSwapForETH);
(success, ) = address(marketingWallet).call{
value: address(this).balance
}("");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletLimit","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPairLPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"minSwapback","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSwapback","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"addressPrmV","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableLimitNow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"limitsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"limitsTxChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletLimit","type":"uint256"}],"name":"limitsWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxLimsCR","outputs":[{"internalType":"bool","name":"_limitsOn","type":"bool"},{"internalType":"uint256","name":"_walletLimit","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_caSBcEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcTrigger","type":"uint256"},{"internalType":"uint256","name":"_caSBcLimit","type":"uint256"}],"name":"newSwapB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBRead","outputs":[{"internalType":"bool","name":"_isSwapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcackValueMin","type":"uint256"},{"internalType":"uint256","name":"_caSBcackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"taxesBuyChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"taxesCVI","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_transferTaxTotal","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"name":"taxesReceiverNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"taxesSellChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"taxesSetExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"taxesTransferChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600960006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600b81526020017f446f6767656e736e6f75740000000000000000000000000000000000000000008152506040518060400160405280600681526020017f444f4747454e00000000000000000000000000000000000000000000000000008152508160039081620000e0919062000ea2565b508060049081620000f2919062000ea2565b50505062000115620001096200057b60201b60201c565b6200058360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001418160016200064960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000ff3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000ff3565b6040518363ffffffff1660e01b81526004016200029492919062001036565b6020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000ff3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032260a05160016200064960201b60201c565b6200033760a05160016200078360201b60201c565b6000620003496200082460201b60201c565b600a620003579190620011f3565b660273eeeed888006200036b919062001244565b9050426008819055506103e8600a8262000386919062001244565b620003929190620012be565b600b819055506103e8600a82620003aa919062001244565b620003b69190620012be565b600a819055506103e8600182620003ce919062001244565b620003da9190620012be565b6006819055506064600282620003f1919062001244565b620003fd9190620012be565b600781905550601e600e81905550601e600f81905550600060108190555073edcb9c967c8fbb62fb042f855094714e5700cb22600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004833360016200082d60201b60201c565b620004963060016200082d60201b60201c565b620004ab61dead60016200082d60201b60201c565b620004e0600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082d60201b60201c565b620004f33360016200064960201b60201c565b620005063060016200064960201b60201c565b6200051b61dead60016200064960201b60201c565b62000550600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200064960201b60201c565b62000561336200096760201b60201c565b62000573338262000a7c60201b60201c565b505062001526565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006596200057b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200067f62000bf460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006cf9062001357565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405162000777919062001396565b60405180910390a25050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fe0f0eeda3b1247853e2a825aa40eb65c3b08879740f68ff00df4745b6bb075b260405160405180910390a35050565b60006012905090565b6200083d6200057b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200086362000bf460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b39062001357565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200095b919062001396565b60405180910390a25050565b620009776200057b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200099d62000bf460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ed9062001357565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5f9062001429565b60405180910390fd5b62000a79816200058360201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae5906200149b565b60405180910390fd5b62000b026000838362000c1e60201b60201c565b806002600082825462000b169190620014bd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b6d9190620014bd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bd4919062001509565b60405180910390a362000bf06000838362000c2360201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000caa57607f821691505b60208210810362000cc05762000cbf62000c62565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d2a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ceb565b62000d36868362000ceb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d8362000d7d62000d778462000d4e565b62000d58565b62000d4e565b9050919050565b6000819050919050565b62000d9f8362000d62565b62000db762000dae8262000d8a565b84845462000cf8565b825550505050565b600090565b62000dce62000dbf565b62000ddb81848462000d94565b505050565b5b8181101562000e035762000df760008262000dc4565b60018101905062000de1565b5050565b601f82111562000e525762000e1c8162000cc6565b62000e278462000cdb565b8101602085101562000e37578190505b62000e4f62000e468562000cdb565b83018262000de0565b50505b505050565b600082821c905092915050565b600062000e776000198460080262000e57565b1980831691505092915050565b600062000e92838362000e64565b9150826002028217905092915050565b62000ead8262000c28565b67ffffffffffffffff81111562000ec95762000ec862000c33565b5b62000ed5825462000c91565b62000ee282828562000e07565b600060209050601f83116001811462000f1a576000841562000f05578287015190505b62000f11858262000e84565b86555062000f81565b601f19841662000f2a8662000cc6565b60005b8281101562000f545784890151825560018201915060208501945060208101905062000f2d565b8683101562000f74578489015162000f70601f89168262000e64565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fbb8262000f8e565b9050919050565b62000fcd8162000fae565b811462000fd957600080fd5b50565b60008151905062000fed8162000fc2565b92915050565b6000602082840312156200100c576200100b62000f89565b5b60006200101c8482850162000fdc565b91505092915050565b620010308162000fae565b82525050565b60006040820190506200104d600083018562001025565b6200105c602083018462001025565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010f157808604811115620010c957620010c862001063565b5b6001851615620010d95780820291505b8081029050620010e98562001092565b9450620010a9565b94509492505050565b6000826200110c5760019050620011df565b816200111c5760009050620011df565b8160018114620011355760028114620011405762001176565b6001915050620011df565b60ff84111562001155576200115462001063565b5b8360020a9150848211156200116f576200116e62001063565b5b50620011df565b5060208310610133831016604e8410600b8410161715620011b05782820a905083811115620011aa57620011a962001063565b5b620011df565b620011bf84848460016200109f565b92509050818404811115620011d957620011d862001063565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012008262000d4e565b91506200120d83620011e6565b92506200123c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620010fa565b905092915050565b6000620012518262000d4e565b91506200125e8362000d4e565b92508282026200126e8162000d4e565b9150828204841483151762001288576200128762001063565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012cb8262000d4e565b9150620012d88362000d4e565b925082620012eb57620012ea6200128f565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200133f602083620012f6565b91506200134c8262001307565b602082019050919050565b60006020820190508181036000830152620013728162001330565b9050919050565b60008115159050919050565b620013908162001379565b82525050565b6000602082019050620013ad600083018462001385565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062001411602683620012f6565b91506200141e82620013b3565b604082019050919050565b60006020820190508181036000830152620014448162001402565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001483601f83620012f6565b915062001490826200144b565b602082019050919050565b60006020820190508181036000830152620014b68162001474565b9050919050565b6000620014ca8262000d4e565b9150620014d78362000d4e565b9250828201905080821115620014f257620014f162001063565b5b92915050565b620015038162000d4e565b82525050565b6000602082019050620015206000830184620014f8565b92915050565b60805160a051614202620015576000396000505060008181612c7a01528181612d5b0152612d8201526142026000f3fe6080604052600436106101c65760003560e01c806370a08231116100f7578063a457c2d711610095578063cf61629b11610064578063cf61629b14610642578063dd62ed3e1461066b578063f2fde38b146106a8578063f6caa0b2146106d1576101cd565b8063a457c2d714610588578063a9059cbb146105c5578063b3e254ff14610602578063c9567bf91461062b576101cd565b806380829424116100d157806380829424146104f25780638da5cb5b1461051b57806395d89b411461054657806399b1cee514610571576101cd565b806370a0823114610475578063715018a6146104b25780637f21b623146104c9576101cd565b806325d69c9f11610164578063395093511161013e57806339509351146103a257806353541bc5146103df57806354868ac51461041e5780635c1039e414610447576101cd565b806325d69c9f14610321578063313ce5671461034e578063368ef22614610379576101cd565b8063167ad3fd116101a0578063167ad3fd1461026357806318160ddd1461028c5780631d3fb5fb146102b757806323b872dd146102e4576101cd565b806306fdde03146101d2578063095ea7b3146101fd578063121bb6e81461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106fa565b6040516101f49190612ea8565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612f63565b61078c565b6040516102319190612fbe565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190613005565b6107aa565b005b34801561026f57600080fd5b5061028a60048036038101906102859190613058565b610953565b005b34801561029857600080fd5b506102a1610a1f565b6040516102ae9190613094565b60405180910390f35b3480156102c357600080fd5b506102cc610a29565b6040516102db939291906130af565b60405180910390f35b3480156102f057600080fd5b5061030b600480360381019061030691906130e6565b610a4f565b6040516103189190612fbe565b60405180910390f35b34801561032d57600080fd5b50610336610b47565b604051610345939291906130af565b60405180910390f35b34801561035a57600080fd5b50610363610b6d565b6040516103709190613155565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613058565b610b76565b005b3480156103ae57600080fd5b506103c960048036038101906103c49190612f63565b610c83565b6040516103d69190612fbe565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613170565b610d2f565b6040516104159392919061319d565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190613058565b610e28565b005b34801561045357600080fd5b5061045c610f35565b60405161046c94939291906131e3565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613170565b610f75565b6040516104a99190613094565b60405180910390f35b3480156104be57600080fd5b506104c7610fbd565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613170565b611045565b005b3480156104fe57600080fd5b5061051960048036038101906105149190613058565b611181565b005b34801561052757600080fd5b506105306112a3565b60405161053d9190613228565b60405180910390f35b34801561055257600080fd5b5061055b6112cd565b6040516105689190612ea8565b60405180910390f35b34801561057d57600080fd5b5061058661135f565b005b34801561059457600080fd5b506105af60048036038101906105aa9190612f63565b61142d565b6040516105bc9190612fbe565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190612f63565b611518565b6040516105f99190612fbe565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613058565b611536565b005b34801561063757600080fd5b50610640611658565b005b34801561064e57600080fd5b5061066960048036038101906106649190613243565b611739565b005b34801561067757600080fd5b50610692600480360381019061068d9190613283565b61185e565b60405161069f9190613094565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190613170565b6118e5565b005b3480156106dd57600080fd5b506106f860048036038101906106f39190613243565b6119dc565b005b606060038054610709906132f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610735906132f2565b80156107825780601f1061075757610100808354040283529160200191610782565b820191906000526020600020905b81548152906001019060200180831161076557829003601f168201915b5050505050905090565b60006107a0610799611b01565b8484611b09565b6001905092915050565b6107b2611b01565b73ffffffffffffffffffffffffffffffffffffffff166107d06112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d9061336f565b60405180910390fd5b600182101561086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190613401565b60405180910390fd5b818110156108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490613493565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826108d3610a1f565b6108dd91906134e2565b6108e79190613553565b600681905550612710816108f9610a1f565b61090391906134e2565b61090d9190613553565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051610946939291906130af565b60405180910390a1505050565b61095b611b01565b73ffffffffffffffffffffffffffffffffffffffff166109796112a3565b73ffffffffffffffffffffffffffffffffffffffff16146109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c69061336f565b60405180910390fd5b8060108190555060646010541115610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a13906135f6565b60405180910390fd5b50565b6000600254905090565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000610a5c848484611cd2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aa7611b01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613688565b60405180910390fd5b610b3b85610b33611b01565b858403611b09565b60019150509392505050565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b60006012905090565b610b7e611b01565b73ffffffffffffffffffffffffffffffffffffffff16610b9c6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061336f565b60405180910390fd5b80600e819055506064600e541115610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c369061371a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e54604051610c789392919061373a565b60405180910390a150565b6000610d25610c90611b01565b848460016000610c9e611b01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d209190613771565b611b09565b6001905092915050565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b610e30611b01565b73ffffffffffffffffffffffffffffffffffffffff16610e4e6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b9061336f565b60405180910390fd5b80600f819055506064600f541115610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890613817565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f54604051610f2a9392919061373a565b60405180910390a150565b600080600080600e549350600f5492506010549150600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090919293565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fc5611b01565b73ffffffffffffffffffffffffffffffffffffffff16610fe36112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110309061336f565b60405180910390fd5b611043600061276c565b565b61104d611b01565b73ffffffffffffffffffffffffffffffffffffffff1661106b6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b89061336f565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611189611b01565b73ffffffffffffffffffffffffffffffffffffffff166111a76112a3565b73ffffffffffffffffffffffffffffffffffffffff16146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f49061336f565b60405180910390fd5b6002811015611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613883565b60405180910390fd5b6103e861124c610a1f565b8261125791906134e2565b6112619190613553565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b546040516112989190613094565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112dc906132f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611308906132f2565b80156113555780601f1061132a57610100808354040283529160200191611355565b820191906000526020600020905b81548152906001019060200180831161133857829003601f168201915b5050505050905090565b611367611b01565b73ffffffffffffffffffffffffffffffffffffffff166113856112a3565b73ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d29061336f565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000806001600061143c611b01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090613915565b60405180910390fd5b61150d611504611b01565b85858403611b09565b600191505092915050565b600061152c611525611b01565b8484611cd2565b6001905092915050565b61153e611b01565b73ffffffffffffffffffffffffffffffffffffffff1661155c6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a99061336f565b60405180910390fd5b60058110156115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed906139a7565b60405180910390fd5b6103e8611601610a1f565b8261160c91906134e2565b6116169190613553565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a5460405161164d9190613094565b60405180910390a150565b611660611b01565b73ffffffffffffffffffffffffffffffffffffffff1661167e6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb9061336f565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611741611b01565b73ffffffffffffffffffffffffffffffffffffffff1661175f6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061336f565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118529190612fbe565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118ed611b01565b73ffffffffffffffffffffffffffffffffffffffff1661190b6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119589061336f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790613a39565b60405180910390fd5b6119d98161276c565b50565b6119e4611b01565b73ffffffffffffffffffffffffffffffffffffffff16611a026112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f9061336f565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611af59190612fbe565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613acb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90613b5d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cc59190613094565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790613c81565b60405180910390fd5b60008103611dc957611dc483836000612832565b612767565b600960009054906101000a900460ff16156122c457611de66112a3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e545750611e246112a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e8d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ec7575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ee05750600560149054906101000a900460ff16155b156122c357600d60009054906101000a900460ff16611fda57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f9a5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd090613d13565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561207d5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212457600b548111156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be90613da5565b60405180910390fd5b600a546120d383610f75565b826120de9190613771565b111561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690613e11565b60405180910390fd5b6122c2565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121c75750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561221657600b54811115612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890613ea3565b60405180910390fd5b6122c1565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c057600a5461227383610f75565b8261227e9190613771565b11156122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690613e11565b60405180910390fd5b5b5b5b5b5b60006122cf30610f75565b9050600060065482101590508080156122f45750600560159054906101000a900460ff165b801561230d5750600560149054906101000a900460ff16155b80156123635750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123b95750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561240f5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561241d57504260085414155b15612469576001600560146101000a81548160ff02191690831515021790555061244683612ab1565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061251f5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561252957600090505b6000811561275757601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561258c57506000600f54115b156125c0576125b960646125ab600f5488612ba590919063ffffffff16565b612bbb90919063ffffffff16565b9050612733565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261b57506000600e54115b1561264f57612648606461263a600e5488612ba590919063ffffffff16565b612bbb90919063ffffffff16565b9050612732565b60006010541180156126ab5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127015750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127315761272e606461272060105488612ba590919063ffffffff16565b612bbb90919063ffffffff16565b90505b5b5b600081111561274857612747873083612832565b5b80856127549190613ec3565b94505b612762878787612832565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890613bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290790613c81565b60405180910390fd5b61291b838383612bd1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299890613f69565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a349190613771565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a989190613094565b60405180910390a3612aab848484612bd6565b50505050565b6000612abc30610f75565b90506000808203612ace575050612ba2565b600754821115612ade5760075491505b600f83612aeb91906134e2565b821115612b0257600f83612aff91906134e2565b91505b6000829050612b1081612bdb565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b5690613fba565b60006040518083038185875af1925050503d8060008114612b93576040519150601f19603f3d011682016040523d82523d6000602084013e612b98565b606091505b5050809250505050505b50565b60008183612bb391906134e2565b905092915050565b60008183612bc99190613553565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bf857612bf7613fcf565b5b604051908082528060200260200182016040528015612c265781602001602082028036833780820191505090505b5090503081600081518110612c3e57612c3d613ffe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d079190614042565b81600181518110612d1b57612d1a613ffe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d80307f000000000000000000000000000000000000000000000000000000000000000084611b09565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612de2959493929190614172565b600060405180830381600087803b158015612dfc57600080fd5b505af1158015612e10573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e52578082015181840152602081019050612e37565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e7a82612e18565b612e848185612e23565b9350612e94818560208601612e34565b612e9d81612e5e565b840191505092915050565b60006020820190508181036000830152612ec28184612e6f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612efa82612ecf565b9050919050565b612f0a81612eef565b8114612f1557600080fd5b50565b600081359050612f2781612f01565b92915050565b6000819050919050565b612f4081612f2d565b8114612f4b57600080fd5b50565b600081359050612f5d81612f37565b92915050565b60008060408385031215612f7a57612f79612eca565b5b6000612f8885828601612f18565b9250506020612f9985828601612f4e565b9150509250929050565b60008115159050919050565b612fb881612fa3565b82525050565b6000602082019050612fd36000830184612faf565b92915050565b612fe281612fa3565b8114612fed57600080fd5b50565b600081359050612fff81612fd9565b92915050565b60008060006060848603121561301e5761301d612eca565b5b600061302c86828701612ff0565b935050602061303d86828701612f4e565b925050604061304e86828701612f4e565b9150509250925092565b60006020828403121561306e5761306d612eca565b5b600061307c84828501612f4e565b91505092915050565b61308e81612f2d565b82525050565b60006020820190506130a96000830184613085565b92915050565b60006060820190506130c46000830186612faf565b6130d16020830185613085565b6130de6040830184613085565b949350505050565b6000806000606084860312156130ff576130fe612eca565b5b600061310d86828701612f18565b935050602061311e86828701612f18565b925050604061312f86828701612f4e565b9150509250925092565b600060ff82169050919050565b61314f81613139565b82525050565b600060208201905061316a6000830184613146565b92915050565b60006020828403121561318657613185612eca565b5b600061319484828501612f18565b91505092915050565b60006060820190506131b26000830186612faf565b6131bf6020830185612faf565b6131cc6040830184612faf565b949350505050565b6131dd81612eef565b82525050565b60006080820190506131f86000830187613085565b6132056020830186613085565b6132126040830185613085565b61321f60608301846131d4565b95945050505050565b600060208201905061323d60008301846131d4565b92915050565b6000806040838503121561325a57613259612eca565b5b600061326885828601612f18565b925050602061327985828601612ff0565b9150509250929050565b6000806040838503121561329a57613299612eca565b5b60006132a885828601612f18565b92505060206132b985828601612f18565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061330a57607f821691505b60208210810361331d5761331c6132c3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613359602083612e23565b915061336482613323565b602082019050919050565b600060208201905081810360008301526133888161334c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006133eb603483612e23565b91506133f68261338f565b604082019050919050565b6000602082019050818103600083015261341a816133de565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061347d602a83612e23565b915061348882613421565b604082019050919050565b600060208201905081810360008301526134ac81613470565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134ed82612f2d565b91506134f883612f2d565b925082820261350681612f2d565b9150828204841483151761351d5761351c6134b3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355e82612f2d565b915061356983612f2d565b92508261357957613578613524565b5b828204905092915050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006135e0602d83612e23565b91506135eb82613584565b604082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613672602883612e23565b915061367d82613616565b604082019050919050565b600060208201905081810360008301526136a181613665565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613704602883612e23565b915061370f826136a8565b604082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b600060608201905061374f6000830186613085565b61375c6020830185613085565b6137696040830184613085565b949350505050565b600061377c82612f2d565b915061378783612f2d565b925082820190508082111561379f5761379e6134b3565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613801602983612e23565b915061380c826137a5565b604082019050919050565b60006020820190508181036000830152613830816137f4565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061386d602083612e23565b915061387882613837565b602082019050919050565b6000602082019050818103600083015261389c81613860565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138ff602583612e23565b915061390a826138a3565b604082019050919050565b6000602082019050818103600083015261392e816138f2565b9050919050565b7f43616e6e6f74207365742077616c6c65744c696d6974206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b6000613991602683612e23565b915061399c82613935565b604082019050919050565b600060208201905081810360008301526139c081613984565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a23602683612e23565b9150613a2e826139c7565b604082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ab5602483612e23565b9150613ac082613a59565b604082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b47602283612e23565b9150613b5282613aeb565b604082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613bd9602583612e23565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613c6b602383612e23565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cfd602283612e23565b9150613d0882613ca1565b604082019050919050565b60006020820190508181036000830152613d2c81613cf0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000613d8f602683612e23565b9150613d9a82613d33565b604082019050919050565b60006020820190508181036000830152613dbe81613d82565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613dfb601383612e23565b9150613e0682613dc5565b602082019050919050565b60006020820190508181036000830152613e2a81613dee565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000613e8d602783612e23565b9150613e9882613e31565b604082019050919050565b60006020820190508181036000830152613ebc81613e80565b9050919050565b6000613ece82612f2d565b9150613ed983612f2d565b9250828203905081811115613ef157613ef06134b3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f53602683612e23565b9150613f5e82613ef7565b604082019050919050565b60006020820190508181036000830152613f8281613f46565b9050919050565b600081905092915050565b50565b6000613fa4600083613f89565b9150613faf82613f94565b600082019050919050565b6000613fc582613f97565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061403c81612f01565b92915050565b60006020828403121561405857614057612eca565b5b60006140668482850161402d565b91505092915050565b6000819050919050565b6000819050919050565b600061409e6140996140948461406f565b614079565b612f2d565b9050919050565b6140ae81614083565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140e981612eef565b82525050565b60006140fb83836140e0565b60208301905092915050565b6000602082019050919050565b600061411f826140b4565b61412981856140bf565b9350614134836140d0565b8060005b8381101561416557815161414c88826140ef565b975061415783614107565b925050600181019050614138565b5085935050505092915050565b600060a0820190506141876000830188613085565b61419460208301876140a5565b81810360408301526141a68186614114565b90506141b560608301856131d4565b6141c26080830184613085565b969550505050505056fea2646970667358221220414e3ea18e974dd2f2bd69773abed60bdec4f7be8efc105eeaa60807850eaf3564736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101c65760003560e01c806370a08231116100f7578063a457c2d711610095578063cf61629b11610064578063cf61629b14610642578063dd62ed3e1461066b578063f2fde38b146106a8578063f6caa0b2146106d1576101cd565b8063a457c2d714610588578063a9059cbb146105c5578063b3e254ff14610602578063c9567bf91461062b576101cd565b806380829424116100d157806380829424146104f25780638da5cb5b1461051b57806395d89b411461054657806399b1cee514610571576101cd565b806370a0823114610475578063715018a6146104b25780637f21b623146104c9576101cd565b806325d69c9f11610164578063395093511161013e57806339509351146103a257806353541bc5146103df57806354868ac51461041e5780635c1039e414610447576101cd565b806325d69c9f14610321578063313ce5671461034e578063368ef22614610379576101cd565b8063167ad3fd116101a0578063167ad3fd1461026357806318160ddd1461028c5780631d3fb5fb146102b757806323b872dd146102e4576101cd565b806306fdde03146101d2578063095ea7b3146101fd578063121bb6e81461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106fa565b6040516101f49190612ea8565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612f63565b61078c565b6040516102319190612fbe565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190613005565b6107aa565b005b34801561026f57600080fd5b5061028a60048036038101906102859190613058565b610953565b005b34801561029857600080fd5b506102a1610a1f565b6040516102ae9190613094565b60405180910390f35b3480156102c357600080fd5b506102cc610a29565b6040516102db939291906130af565b60405180910390f35b3480156102f057600080fd5b5061030b600480360381019061030691906130e6565b610a4f565b6040516103189190612fbe565b60405180910390f35b34801561032d57600080fd5b50610336610b47565b604051610345939291906130af565b60405180910390f35b34801561035a57600080fd5b50610363610b6d565b6040516103709190613155565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613058565b610b76565b005b3480156103ae57600080fd5b506103c960048036038101906103c49190612f63565b610c83565b6040516103d69190612fbe565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613170565b610d2f565b6040516104159392919061319d565b60405180910390f35b34801561042a57600080fd5b5061044560048036038101906104409190613058565b610e28565b005b34801561045357600080fd5b5061045c610f35565b60405161046c94939291906131e3565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613170565b610f75565b6040516104a99190613094565b60405180910390f35b3480156104be57600080fd5b506104c7610fbd565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190613170565b611045565b005b3480156104fe57600080fd5b5061051960048036038101906105149190613058565b611181565b005b34801561052757600080fd5b506105306112a3565b60405161053d9190613228565b60405180910390f35b34801561055257600080fd5b5061055b6112cd565b6040516105689190612ea8565b60405180910390f35b34801561057d57600080fd5b5061058661135f565b005b34801561059457600080fd5b506105af60048036038101906105aa9190612f63565b61142d565b6040516105bc9190612fbe565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e79190612f63565b611518565b6040516105f99190612fbe565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190613058565b611536565b005b34801561063757600080fd5b50610640611658565b005b34801561064e57600080fd5b5061066960048036038101906106649190613243565b611739565b005b34801561067757600080fd5b50610692600480360381019061068d9190613283565b61185e565b60405161069f9190613094565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190613170565b6118e5565b005b3480156106dd57600080fd5b506106f860048036038101906106f39190613243565b6119dc565b005b606060038054610709906132f2565b80601f0160208091040260200160405190810160405280929190818152602001828054610735906132f2565b80156107825780601f1061075757610100808354040283529160200191610782565b820191906000526020600020905b81548152906001019060200180831161076557829003601f168201915b5050505050905090565b60006107a0610799611b01565b8484611b09565b6001905092915050565b6107b2611b01565b73ffffffffffffffffffffffffffffffffffffffff166107d06112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d9061336f565b60405180910390fd5b600182101561086a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086190613401565b60405180910390fd5b818110156108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490613493565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826108d3610a1f565b6108dd91906134e2565b6108e79190613553565b600681905550612710816108f9610a1f565b61090391906134e2565b61090d9190613553565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051610946939291906130af565b60405180910390a1505050565b61095b611b01565b73ffffffffffffffffffffffffffffffffffffffff166109796112a3565b73ffffffffffffffffffffffffffffffffffffffff16146109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c69061336f565b60405180910390fd5b8060108190555060646010541115610a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a13906135f6565b60405180910390fd5b50565b6000600254905090565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000610a5c848484611cd2565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610aa7611b01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613688565b60405180910390fd5b610b3b85610b33611b01565b858403611b09565b60019150509392505050565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b60006012905090565b610b7e611b01565b73ffffffffffffffffffffffffffffffffffffffff16610b9c6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be99061336f565b60405180910390fd5b80600e819055506064600e541115610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c369061371a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e54604051610c789392919061373a565b60405180910390a150565b6000610d25610c90611b01565b848460016000610c9e611b01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d209190613771565b611b09565b6001905092915050565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b610e30611b01565b73ffffffffffffffffffffffffffffffffffffffff16610e4e6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b9061336f565b60405180910390fd5b80600f819055506064600f541115610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890613817565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f54604051610f2a9392919061373a565b60405180910390a150565b600080600080600e549350600f5492506010549150600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090919293565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fc5611b01565b73ffffffffffffffffffffffffffffffffffffffff16610fe36112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110309061336f565b60405180910390fd5b611043600061276c565b565b61104d611b01565b73ffffffffffffffffffffffffffffffffffffffff1661106b6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b89061336f565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611189611b01565b73ffffffffffffffffffffffffffffffffffffffff166111a76112a3565b73ffffffffffffffffffffffffffffffffffffffff16146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f49061336f565b60405180910390fd5b6002811015611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613883565b60405180910390fd5b6103e861124c610a1f565b8261125791906134e2565b6112619190613553565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b546040516112989190613094565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112dc906132f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611308906132f2565b80156113555780601f1061132a57610100808354040283529160200191611355565b820191906000526020600020905b81548152906001019060200180831161133857829003601f168201915b5050505050905090565b611367611b01565b73ffffffffffffffffffffffffffffffffffffffff166113856112a3565b73ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d29061336f565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000806001600061143c611b01565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090613915565b60405180910390fd5b61150d611504611b01565b85858403611b09565b600191505092915050565b600061152c611525611b01565b8484611cd2565b6001905092915050565b61153e611b01565b73ffffffffffffffffffffffffffffffffffffffff1661155c6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a99061336f565b60405180910390fd5b60058110156115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed906139a7565b60405180910390fd5b6103e8611601610a1f565b8261160c91906134e2565b6116169190613553565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a5460405161164d9190613094565b60405180910390a150565b611660611b01565b73ffffffffffffffffffffffffffffffffffffffff1661167e6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb9061336f565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611741611b01565b73ffffffffffffffffffffffffffffffffffffffff1661175f6112a3565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061336f565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118529190612fbe565b60405180910390a25050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6118ed611b01565b73ffffffffffffffffffffffffffffffffffffffff1661190b6112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119589061336f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790613a39565b60405180910390fd5b6119d98161276c565b50565b6119e4611b01565b73ffffffffffffffffffffffffffffffffffffffff16611a026112a3565b73ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f9061336f565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611af59190612fbe565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f90613acb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90613b5d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cc59190613094565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790613c81565b60405180910390fd5b60008103611dc957611dc483836000612832565b612767565b600960009054906101000a900460ff16156122c457611de66112a3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e545750611e246112a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e8d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ec7575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ee05750600560149054906101000a900460ff16155b156122c357600d60009054906101000a900460ff16611fda57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f9a5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd090613d13565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561207d5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212457600b548111156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be90613da5565b60405180910390fd5b600a546120d383610f75565b826120de9190613771565b111561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690613e11565b60405180910390fd5b6122c2565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121c75750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561221657600b54811115612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890613ea3565b60405180910390fd5b6122c1565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c057600a5461227383610f75565b8261227e9190613771565b11156122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690613e11565b60405180910390fd5b5b5b5b5b5b60006122cf30610f75565b9050600060065482101590508080156122f45750600560159054906101000a900460ff165b801561230d5750600560149054906101000a900460ff16155b80156123635750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123b95750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561240f5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561241d57504260085414155b15612469576001600560146101000a81548160ff02191690831515021790555061244683612ab1565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061251f5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561252957600090505b6000811561275757601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561258c57506000600f54115b156125c0576125b960646125ab600f5488612ba590919063ffffffff16565b612bbb90919063ffffffff16565b9050612733565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261b57506000600e54115b1561264f57612648606461263a600e5488612ba590919063ffffffff16565b612bbb90919063ffffffff16565b9050612732565b60006010541180156126ab5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127015750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127315761272e606461272060105488612ba590919063ffffffff16565b612bbb90919063ffffffff16565b90505b5b5b600081111561274857612747873083612832565b5b80856127549190613ec3565b94505b612762878787612832565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289890613bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290790613c81565b60405180910390fd5b61291b838383612bd1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299890613f69565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a349190613771565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a989190613094565b60405180910390a3612aab848484612bd6565b50505050565b6000612abc30610f75565b90506000808203612ace575050612ba2565b600754821115612ade5760075491505b600f83612aeb91906134e2565b821115612b0257600f83612aff91906134e2565b91505b6000829050612b1081612bdb565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b5690613fba565b60006040518083038185875af1925050503d8060008114612b93576040519150601f19603f3d011682016040523d82523d6000602084013e612b98565b606091505b5050809250505050505b50565b60008183612bb391906134e2565b905092915050565b60008183612bc99190613553565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612bf857612bf7613fcf565b5b604051908082528060200260200182016040528015612c265781602001602082028036833780820191505090505b5090503081600081518110612c3e57612c3d613ffe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d079190614042565b81600181518110612d1b57612d1a613ffe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d80307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b09565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612de2959493929190614172565b600060405180830381600087803b158015612dfc57600080fd5b505af1158015612e10573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e52578082015181840152602081019050612e37565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e7a82612e18565b612e848185612e23565b9350612e94818560208601612e34565b612e9d81612e5e565b840191505092915050565b60006020820190508181036000830152612ec28184612e6f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612efa82612ecf565b9050919050565b612f0a81612eef565b8114612f1557600080fd5b50565b600081359050612f2781612f01565b92915050565b6000819050919050565b612f4081612f2d565b8114612f4b57600080fd5b50565b600081359050612f5d81612f37565b92915050565b60008060408385031215612f7a57612f79612eca565b5b6000612f8885828601612f18565b9250506020612f9985828601612f4e565b9150509250929050565b60008115159050919050565b612fb881612fa3565b82525050565b6000602082019050612fd36000830184612faf565b92915050565b612fe281612fa3565b8114612fed57600080fd5b50565b600081359050612fff81612fd9565b92915050565b60008060006060848603121561301e5761301d612eca565b5b600061302c86828701612ff0565b935050602061303d86828701612f4e565b925050604061304e86828701612f4e565b9150509250925092565b60006020828403121561306e5761306d612eca565b5b600061307c84828501612f4e565b91505092915050565b61308e81612f2d565b82525050565b60006020820190506130a96000830184613085565b92915050565b60006060820190506130c46000830186612faf565b6130d16020830185613085565b6130de6040830184613085565b949350505050565b6000806000606084860312156130ff576130fe612eca565b5b600061310d86828701612f18565b935050602061311e86828701612f18565b925050604061312f86828701612f4e565b9150509250925092565b600060ff82169050919050565b61314f81613139565b82525050565b600060208201905061316a6000830184613146565b92915050565b60006020828403121561318657613185612eca565b5b600061319484828501612f18565b91505092915050565b60006060820190506131b26000830186612faf565b6131bf6020830185612faf565b6131cc6040830184612faf565b949350505050565b6131dd81612eef565b82525050565b60006080820190506131f86000830187613085565b6132056020830186613085565b6132126040830185613085565b61321f60608301846131d4565b95945050505050565b600060208201905061323d60008301846131d4565b92915050565b6000806040838503121561325a57613259612eca565b5b600061326885828601612f18565b925050602061327985828601612ff0565b9150509250929050565b6000806040838503121561329a57613299612eca565b5b60006132a885828601612f18565b92505060206132b985828601612f18565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061330a57607f821691505b60208210810361331d5761331c6132c3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613359602083612e23565b915061336482613323565b602082019050919050565b600060208201905081810360008301526133888161334c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006133eb603483612e23565b91506133f68261338f565b604082019050919050565b6000602082019050818103600083015261341a816133de565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061347d602a83612e23565b915061348882613421565b604082019050919050565b600060208201905081810360008301526134ac81613470565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134ed82612f2d565b91506134f883612f2d565b925082820261350681612f2d565b9150828204841483151761351d5761351c6134b3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355e82612f2d565b915061356983612f2d565b92508261357957613578613524565b5b828204905092915050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006135e0602d83612e23565b91506135eb82613584565b604082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613672602883612e23565b915061367d82613616565b604082019050919050565b600060208201905081810360008301526136a181613665565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613704602883612e23565b915061370f826136a8565b604082019050919050565b60006020820190508181036000830152613733816136f7565b9050919050565b600060608201905061374f6000830186613085565b61375c6020830185613085565b6137696040830184613085565b949350505050565b600061377c82612f2d565b915061378783612f2d565b925082820190508082111561379f5761379e6134b3565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613801602983612e23565b915061380c826137a5565b604082019050919050565b60006020820190508181036000830152613830816137f4565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061386d602083612e23565b915061387882613837565b602082019050919050565b6000602082019050818103600083015261389c81613860565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006138ff602583612e23565b915061390a826138a3565b604082019050919050565b6000602082019050818103600083015261392e816138f2565b9050919050565b7f43616e6e6f74207365742077616c6c65744c696d6974206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b6000613991602683612e23565b915061399c82613935565b604082019050919050565b600060208201905081810360008301526139c081613984565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a23602683612e23565b9150613a2e826139c7565b604082019050919050565b60006020820190508181036000830152613a5281613a16565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ab5602483612e23565b9150613ac082613a59565b604082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b47602283612e23565b9150613b5282613aeb565b604082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613bd9602583612e23565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613c6b602383612e23565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cfd602283612e23565b9150613d0882613ca1565b604082019050919050565b60006020820190508181036000830152613d2c81613cf0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000613d8f602683612e23565b9150613d9a82613d33565b604082019050919050565b60006020820190508181036000830152613dbe81613d82565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613dfb601383612e23565b9150613e0682613dc5565b602082019050919050565b60006020820190508181036000830152613e2a81613dee565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000613e8d602783612e23565b9150613e9882613e31565b604082019050919050565b60006020820190508181036000830152613ebc81613e80565b9050919050565b6000613ece82612f2d565b9150613ed983612f2d565b9250828203905081811115613ef157613ef06134b3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f53602683612e23565b9150613f5e82613ef7565b604082019050919050565b60006020820190508181036000830152613f8281613f46565b9050919050565b600081905092915050565b50565b6000613fa4600083613f89565b9150613faf82613f94565b600082019050919050565b6000613fc582613f97565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061403c81612f01565b92915050565b60006020828403121561405857614057612eca565b5b60006140668482850161402d565b91505092915050565b6000819050919050565b6000819050919050565b600061409e6140996140948461406f565b614079565b612f2d565b9050919050565b6140ae81614083565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140e981612eef565b82525050565b60006140fb83836140e0565b60208301905092915050565b6000602082019050919050565b600061411f826140b4565b61412981856140bf565b9350614134836140d0565b8060005b8381101561416557815161414c88826140ef565b975061415783614107565b925050600181019050614138565b5085935050505092915050565b600060a0820190506141876000830188613085565b61419460208301876140a5565b81810360408301526141a68186614114565b90506141b560608301856131d4565b6141c26080830184613085565b969550505050505056fea2646970667358221220414e3ea18e974dd2f2bd69773abed60bdec4f7be8efc105eeaa60807850eaf3564736f6c63430008130033
Deployed Bytecode Sourcemap
25412:17233:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11010:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13243:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30500:659;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33591:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12130:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35167:346;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13915:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35857:231;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11972:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32810:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14849:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37252:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;33290:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36394:398;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;12301:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22349:103;;;;;;;;;;;;;:::i;:::-;;34623:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31395:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21698:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11229:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29856:158;;;;;;;;;;;;;:::i;:::-;;15638:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12657:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31827:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29537:164;;;;;;;;;;;;;:::i;:::-;;34075:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12920:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22607:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32377:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11010:100;11064:13;11097:5;11090:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11010:100;:::o;13243:194::-;13351:4;13368:39;13377:12;:10;:12::i;:::-;13391:7;13400:6;13368:8;:39::i;:::-;13425:4;13418:11;;13243:194;;;;:::o;30500:659::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30685:1:::1;30668:13;:18;;30646:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30814:13;30799:11;:28;;30777:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30930:13;30910:17;;:33;;;;;;;;;;;;;;;;;;31002:5;30985:13;30969;:11;:13::i;:::-;:29;;;;:::i;:::-;30968:39;;;;:::i;:::-;30954:11;:53;;;;31064:5;31049:11;31033:13;:11;:13::i;:::-;:27;;;;:::i;:::-;31032:37;;;;:::i;:::-;31018:11;:51;;;;31085:66;31109:13;31124;31139:11;31085:66;;;;;;;;:::i;:::-;;;;;;;;30500:659:::0;;;:::o;33591:237::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33685:6:::1;33666:16;:25;;;;33744:3;33724:16;;:23;;33702:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33591:237:::0;:::o;12130:108::-;12191:7;12218:12;;12211:19;;12130:108;:::o;35167:346::-;35252:23;35290:25;35330;35404:17;;;;;;;;;;;35383:38;;35452:11;;35432:31;;35494:11;;35474:31;;35167:346;;;:::o;13915:529::-;14055:4;14072:36;14082:6;14090:9;14101:6;14072:9;:36::i;:::-;14121:24;14148:11;:19;14160:6;14148:19;;;;;;;;;;;;;;;:33;14168:12;:10;:12::i;:::-;14148:33;;;;;;;;;;;;;;;;14121:60;;14234:6;14214:16;:26;;14192:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14344:57;14353:6;14361:12;:10;:12::i;:::-;14394:6;14375:16;:25;14344:8;:57::i;:::-;14432:4;14425:11;;;13915:529;;;;;:::o;35857:231::-;35928:14;35944:20;35966:14;36010:8;;;;;;;;;;;35998:20;;36044:11;;36029:26;;36075:5;;36066:14;;35857:231;;;:::o;11972:93::-;12030:5;12055:2;12048:9;;11972:93;:::o;32810:248::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32894:6:::1;32880:11;:20;;;;32934:3;32919:11;;:18;;32911:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32998:52;33012:11;;33025;;33038;;32998:52;;;;;;;;:::i;:::-;;;;;;;;32810:248:::0;:::o;14849:290::-;14962:4;14979:130;15002:12;:10;:12::i;:::-;15029:7;15088:10;15051:11;:25;15063:12;:10;:12::i;:::-;15051:25;;;;;;;;;;;;;;;:34;15077:7;15051:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14979:8;:130::i;:::-;15127:4;15120:11;;14849:290;;;;:::o;37252:446::-;37370:23;37408:25;37448:31;37528:17;:26;37546:7;37528:26;;;;;;;;;;;;;;;;;;;;;;;;;37507:47;;37588:19;:28;37608:7;37588:28;;;;;;;;;;;;;;;;;;;;;;;;;37565:51;;37656:25;:34;37682:7;37656:34;;;;;;;;;;;;;;;;;;;;;;;;;37627:63;;37252:446;;;;;:::o;33290:293::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33376:6:::1;33361:12;:21;;;;33431:3;33415:12;;:19;;33393:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33519:56;33534:12;;33548;;33562;;33519:56;;;;;;;;:::i;:::-;;;;;;;;33290:293:::0;:::o;36394:398::-;36478:20;36513:21;36549:25;36589:17;36649:11;;36634:26;;36687:12;;36671:28;;36730:16;;36710:36;;36769:15;;;;;;;;;;;36757:27;;36394:398;;;;:::o;12301:143::-;12391:7;12418:9;:18;12428:7;12418:18;;;;;;;;;;;;;;;;12411:25;;12301:143;;;:::o;22349:103::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22414:30:::1;22441:1;22414:18;:30::i;:::-;22349:103::o:0;34623:179::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34739:15:::1;;;;;;;;;;;34704:51;;34727:10;34704:51;;;;;;;;;;;;34784:10;34766:15;;:28;;;;;;;;;;;;;;;;;;34623:179:::0;:::o;31395:219::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31483:1:::1;31473:6;:11;;31465:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31567:4;31550:13;:11;:13::i;:::-;31541:6;:22;;;;:::i;:::-;31540:31;;;;:::i;:::-;31532:5;:39;;;;31587:19;31600:5;;31587:19;;;;;;:::i;:::-;;;;;;;;31395:219:::0;:::o;21698:87::-;21744:7;21771:6;;;;;;;;;;;21764:13;;21698:87;:::o;11229:104::-;11285:13;11318:7;11311:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11229:104;:::o;29856:158::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29924:5:::1;29913:8;;:16;;;;;;;;;;;;;;;;;;29959:1;29940:16;:20;;;;29990:15;29976:30;;;;;;;;;;29856:158::o:0;15638:475::-;15756:4;15773:24;15800:11;:25;15812:12;:10;:12::i;:::-;15800:25;;;;;;;;;;;;;;;:34;15826:7;15800:34;;;;;;;;;;;;;;;;15773:61;;15887:15;15867:16;:35;;15845:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16003:67;16012:12;:10;:12::i;:::-;16026:7;16054:15;16035:16;:34;16003:8;:67::i;:::-;16101:4;16094:11;;;15638:475;;;;:::o;12657:200::-;12768:4;12785:42;12795:12;:10;:12::i;:::-;12809:9;12820:6;12785:9;:42::i;:::-;12845:4;12838:11;;12657:200;;;;:::o;31827:279::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31947:1:::1;31931:12;:17;;31923:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32049:4;32032:13;:11;:13::i;:::-;32017:12;:28;;;;:::i;:::-;32016:37;;;;:::i;:::-;32002:11;:51;;;;32069:29;32086:11;;32069:29;;;;;;:::i;:::-;;;;;;;;31827:279:::0;:::o;29537:164::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29607:4:::1;29590:14;;:21;;;;;;;;;;;;;;;;;;29642:4;29622:17;;:24;;;;;;;;;;;;;;;;;;29677:15;29662:31;;;;;;;;;;29537:164::o:0;34075:198::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34208:9:::1;34182:17;:23;34200:4;34182:23;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34249:4;34233:32;;;34255:9;34233:32;;;;;;:::i;:::-;;;;;;;;34075:198:::0;;:::o;12920:176::-;13034:7;13061:11;:18;13073:5;13061:18;;;;;;;;;;;;;;;:27;13080:7;13061:27;;;;;;;;;;;;;;;;13054:34;;12920:176;;;;:::o;22607:238::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22730:1:::1;22710:22;;:8;:22;;::::0;22688:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22809:28;22828:8;22809:18;:28::i;:::-;22607:238:::0;:::o;32377:203::-;21929:12;:10;:12::i;:::-;21918:23;;:7;:5;:7::i;:::-;:23;;;21910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32513:9:::1;32485:19;:25;32505:4;32485:25;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32556:4;32538:34;;;32562:9;32538:34;;;;;;:::i;:::-;;;;;;;;32377:203:::0;;:::o;10016:98::-;10069:7;10096:10;10089:17;;10016:98;:::o;19421:380::-;19574:1;19557:19;;:5;:19;;;19549:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19655:1;19636:21;;:7;:21;;;19628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19739:6;19709:11;:18;19721:5;19709:18;;;;;;;;;;;;;;;:27;19728:7;19709:27;;;;;;;;;;;;;;;:36;;;;19777:7;19761:32;;19770:5;19761:32;;;19786:6;19761:32;;;;;;:::i;:::-;;;;;;;;19421:380;;;:::o;37706:3718::-;37854:1;37838:18;;:4;:18;;;37830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37931:1;37917:16;;:2;:16;;;37909:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38000:1;37990:6;:11;37986:93;;38018:28;38034:4;38040:2;38044:1;38018:15;:28::i;:::-;38061:7;;37986:93;38095:8;;;;;;;;;;;38091:1565;;;38150:7;:5;:7::i;:::-;38142:15;;:4;:15;;;;:49;;;;;38184:7;:5;:7::i;:::-;38178:13;;:2;:13;;;;38142:49;:86;;;;;38226:1;38212:16;;:2;:16;;;;38142:86;:128;;;;;38263:6;38249:21;;:2;:21;;;;38142:128;:160;;;;;38292:10;;;;;;;;;;;38291:11;38142:160;38120:1525;;;38342:14;;;;;;;;;;;38337:232;;38415:17;:23;38433:4;38415:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;38442:17;:21;38460:2;38442:21;;;;;;;;;;;;;;;;;;;;;;;;;38415:48;38381:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;38337:232;38643:25;:31;38669:4;38643:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;38679:19;:23;38699:2;38679:23;;;;;;;;;;;;;;;;;;;;;;;;;38678:24;38643:59;38617:1013;;;38789:5;;38779:6;:15;;38745:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;38967:11;;38950:13;38960:2;38950:9;:13::i;:::-;38941:6;:22;;;;:::i;:::-;:37;;38907:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38617:1013;;;39147:25;:29;39173:2;39147:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39181:19;:25;39201:4;39181:25;;;;;;;;;;;;;;;;;;;;;;;;;39180:26;39147:59;39121:509;;;39293:5;;39283:6;:15;;39249:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39121:509;;;39420:19;:23;39440:2;39420:23;;;;;;;;;;;;;;;;;;;;;;;;;39415:215;;39528:11;;39511:13;39521:2;39511:9;:13::i;:::-;39502:6;:22;;;;:::i;:::-;:37;;39468:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;39415:215;39121:509;38617:1013;38120:1525;38091:1565;39668:28;39699:24;39717:4;39699:9;:24::i;:::-;39668:55;;39736:12;39775:11;;39751:20;:35;;39736:50;;39817:7;:41;;;;;39841:17;;;;;;;;;;;39817:41;:69;;;;;39876:10;;;;;;;;;;;39875:11;39817:69;:118;;;;;39904:25;:31;39930:4;39904:31;;;;;;;;;;;;;;;;;;;;;;;;;39903:32;39817:118;:159;;;;;39953:17;:23;39971:4;39953:23;;;;;;;;;;;;;;;;;;;;;;;;;39952:24;39817:159;:198;;;;;39994:17;:21;40012:2;39994:21;;;;;;;;;;;;;;;;;;;;;;;;;39993:22;39817:198;:246;;;;;40048:15;40032:12;;:31;;39817:246;39799:435;;;40103:4;40090:10;;:17;;;;;;;;;;;;;;;;;;40124:16;40133:6;40124:8;:16::i;:::-;40172:15;40157:12;:30;;;;40217:5;40204:10;;:18;;;;;;;;;;;;;;;;;;39799:435;40246:12;40262:10;;;;;;;;;;;40261:11;40246:26;;40374:17;:23;40392:4;40374:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;40401:17;:21;40419:2;40401:21;;;;;;;;;;;;;;;;;;;;;;;;;40374:48;40370:96;;;40449:5;40439:15;;40370:96;40478:12;40583:7;40579:792;;;40635:25;:29;40661:2;40635:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;40683:1;40668:12;;:16;40635:49;40631:591;;;40712:33;40741:3;40712:24;40723:12;;40712:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40705:40;;40631:591;;;40807:25;:31;40833:4;40807:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40856:1;40842:11;;:15;40807:50;40803:419;;;40885:32;40913:3;40885:23;40896:11;;40885:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;40878:39;;40803:419;;;41022:1;41003:16;;:20;:73;;;;;41045:25;:31;41071:4;41045:31;;;;;;;;;;;;;;;;;;;;;;;;;41044:32;41003:73;:124;;;;;41098:25;:29;41124:2;41098:29;;;;;;;;;;;;;;;;;;;;;;;;;41097:30;41003:124;40981:241;;;41169:37;41202:3;41169:28;41180:16;;41169:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;41162:44;;40981:241;40803:419;40631:591;41249:1;41242:4;:8;41238:91;;;41271:42;41287:4;41301;41308;41271:15;:42::i;:::-;41238:91;41355:4;41345:14;;;;;:::i;:::-;;;40579:792;41383:33;41399:4;41405:2;41409:6;41383:15;:33::i;:::-;37819:3605;;;;37706:3718;;;;:::o;23005:191::-;23079:16;23098:6;;;;;;;;;;;23079:25;;23124:8;23115:6;;:17;;;;;;;;;;;;;;;;;;23179:8;23148:40;;23169:8;23148:40;;;;;;;;;;;;23068:128;23005:191;:::o;16603:770::-;16761:1;16743:20;;:6;:20;;;16735:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16845:1;16824:23;;:9;:23;;;16816:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16900:47;16921:6;16929:9;16940:6;16900:20;:47::i;:::-;16960:21;16984:9;:17;16994:6;16984:17;;;;;;;;;;;;;;;;16960:41;;17051:6;17034:13;:23;;17012:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17195:6;17179:13;:22;17159:9;:17;17169:6;17159:17;;;;;;;;;;;;;;;:42;;;;17247:6;17223:9;:20;17233:9;17223:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17288:9;17271:35;;17280:6;17271:35;;;17299:6;17271:35;;;;;;:::i;:::-;;;;;;;;17319:46;17339:6;17347:9;17358:6;17319:19;:46::i;:::-;16724:649;16603:770;;;:::o;42011:631::-;42064:23;42090:24;42108:4;42090:9;:24::i;:::-;42064:50;;42125:12;42173:1;42154:15;:20;42150:59;;42191:7;;;;42150:59;42243:11;;42225:15;:29;42221:91;;;42289:11;;42271:29;;42221:91;42355:2;42346:6;:11;;;;:::i;:::-;42328:15;:29;42324:91;;;42401:2;42392:6;:11;;;;:::i;:::-;42374:29;;42324:91;42427:26;42456:15;42427:44;;42484:36;42501:18;42484:16;:36::i;:::-;42555:15;;;;;;;;;;;42547:29;;42598:21;42547:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42533:101;;;;;42053:589;;;42011:631;;:::o;3375:98::-;3433:7;3464:1;3460;:5;;;;:::i;:::-;3453:12;;3375:98;;;;:::o;3774:::-;3832:7;3863:1;3859;:5;;;;:::i;:::-;3852:12;;3774:98;;;;:::o;20401:125::-;;;;:::o;21130:124::-;;;;:::o;41432:571::-;41558:21;41596:1;41582:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41558:40;;41627:4;41609;41614:1;41609:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41653:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41643:4;41648:1;41643:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;41682:56;41699:4;41714:9;41726:11;41682:8;:56::i;:::-;41777:9;:60;;;41852:11;41878:1;41922:4;41949;41969:15;41777:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41487:516;41432:571;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:613::-;3781:6;3789;3797;3846:2;3834:9;3825:7;3821:23;3817:32;3814:119;;;3852:79;;:::i;:::-;3814:119;3972:1;3997:50;4039:7;4030:6;4019:9;4015:22;3997:50;:::i;:::-;3987:60;;3943:114;4096:2;4122:53;4167:7;4158:6;4147:9;4143:22;4122:53;:::i;:::-;4112:63;;4067:118;4224:2;4250:53;4295:7;4286:6;4275:9;4271:22;4250:53;:::i;:::-;4240:63;;4195:118;3707:613;;;;;:::o;4326:329::-;4385:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:119;;;4440:79;;:::i;:::-;4402:119;4560:1;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4531:117;4326:329;;;;:::o;4661:118::-;4748:24;4766:5;4748:24;:::i;:::-;4743:3;4736:37;4661:118;;:::o;4785:222::-;4878:4;4916:2;4905:9;4901:18;4893:26;;4929:71;4997:1;4986:9;4982:17;4973:6;4929:71;:::i;:::-;4785:222;;;;:::o;5013:430::-;5156:4;5194:2;5183:9;5179:18;5171:26;;5207:65;5269:1;5258:9;5254:17;5245:6;5207:65;:::i;:::-;5282:72;5350:2;5339:9;5335:18;5326:6;5282:72;:::i;:::-;5364;5432:2;5421:9;5417:18;5408:6;5364:72;:::i;:::-;5013:430;;;;;;:::o;5449:619::-;5526:6;5534;5542;5591:2;5579:9;5570:7;5566:23;5562:32;5559:119;;;5597:79;;:::i;:::-;5559:119;5717:1;5742:53;5787:7;5778:6;5767:9;5763:22;5742:53;:::i;:::-;5732:63;;5688:117;5844:2;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5815:118;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;5449:619;;;;;:::o;6074:86::-;6109:7;6149:4;6142:5;6138:16;6127:27;;6074:86;;;:::o;6166:112::-;6249:22;6265:5;6249:22;:::i;:::-;6244:3;6237:35;6166:112;;:::o;6284:214::-;6373:4;6411:2;6400:9;6396:18;6388:26;;6424:67;6488:1;6477:9;6473:17;6464:6;6424:67;:::i;:::-;6284:214;;;;:::o;6504:329::-;6563:6;6612:2;6600:9;6591:7;6587:23;6583:32;6580:119;;;6618:79;;:::i;:::-;6580:119;6738:1;6763:53;6808:7;6799:6;6788:9;6784:22;6763:53;:::i;:::-;6753:63;;6709:117;6504:329;;;;:::o;6839:406::-;6970:4;7008:2;6997:9;6993:18;6985:26;;7021:65;7083:1;7072:9;7068:17;7059:6;7021:65;:::i;:::-;7096:66;7158:2;7147:9;7143:18;7134:6;7096:66;:::i;:::-;7172;7234:2;7223:9;7219:18;7210:6;7172:66;:::i;:::-;6839:406;;;;;;:::o;7251:118::-;7338:24;7356:5;7338:24;:::i;:::-;7333:3;7326:37;7251:118;;:::o;7375:553::-;7552:4;7590:3;7579:9;7575:19;7567:27;;7604:71;7672:1;7661:9;7657:17;7648:6;7604:71;:::i;:::-;7685:72;7753:2;7742:9;7738:18;7729:6;7685:72;:::i;:::-;7767;7835:2;7824:9;7820:18;7811:6;7767:72;:::i;:::-;7849;7917:2;7906:9;7902:18;7893:6;7849:72;:::i;:::-;7375:553;;;;;;;:::o;7934:222::-;8027:4;8065:2;8054:9;8050:18;8042:26;;8078:71;8146:1;8135:9;8131:17;8122:6;8078:71;:::i;:::-;7934:222;;;;:::o;8162:468::-;8227:6;8235;8284:2;8272:9;8263:7;8259:23;8255:32;8252:119;;;8290:79;;:::i;:::-;8252:119;8410:1;8435:53;8480:7;8471:6;8460:9;8456:22;8435:53;:::i;:::-;8425:63;;8381:117;8537:2;8563:50;8605:7;8596:6;8585:9;8581:22;8563:50;:::i;:::-;8553:60;;8508:115;8162:468;;;;;:::o;8636:474::-;8704:6;8712;8761:2;8749:9;8740:7;8736:23;8732:32;8729:119;;;8767:79;;:::i;:::-;8729:119;8887:1;8912:53;8957:7;8948:6;8937:9;8933:22;8912:53;:::i;:::-;8902:63;;8858:117;9014:2;9040:53;9085:7;9076:6;9065:9;9061:22;9040:53;:::i;:::-;9030:63;;8985:118;8636:474;;;;;:::o;9116:180::-;9164:77;9161:1;9154:88;9261:4;9258:1;9251:15;9285:4;9282:1;9275:15;9302:320;9346:6;9383:1;9377:4;9373:12;9363:22;;9430:1;9424:4;9420:12;9451:18;9441:81;;9507:4;9499:6;9495:17;9485:27;;9441:81;9569:2;9561:6;9558:14;9538:18;9535:38;9532:84;;9588:18;;:::i;:::-;9532:84;9353:269;9302:320;;;:::o;9628:182::-;9768:34;9764:1;9756:6;9752:14;9745:58;9628:182;:::o;9816:366::-;9958:3;9979:67;10043:2;10038:3;9979:67;:::i;:::-;9972:74;;10055:93;10144:3;10055:93;:::i;:::-;10173:2;10168:3;10164:12;10157:19;;9816:366;;;:::o;10188:419::-;10354:4;10392:2;10381:9;10377:18;10369:26;;10441:9;10435:4;10431:20;10427:1;10416:9;10412:17;10405:47;10469:131;10595:4;10469:131;:::i;:::-;10461:139;;10188:419;;;:::o;10613:239::-;10753:34;10749:1;10741:6;10737:14;10730:58;10822:22;10817:2;10809:6;10805:15;10798:47;10613:239;:::o;10858:366::-;11000:3;11021:67;11085:2;11080:3;11021:67;:::i;:::-;11014:74;;11097:93;11186:3;11097:93;:::i;:::-;11215:2;11210:3;11206:12;11199:19;;10858:366;;;:::o;11230:419::-;11396:4;11434:2;11423:9;11419:18;11411:26;;11483:9;11477:4;11473:20;11469:1;11458:9;11454:17;11447:47;11511:131;11637:4;11511:131;:::i;:::-;11503:139;;11230:419;;;:::o;11655:229::-;11795:34;11791:1;11783:6;11779:14;11772:58;11864:12;11859:2;11851:6;11847:15;11840:37;11655:229;:::o;11890:366::-;12032:3;12053:67;12117:2;12112:3;12053:67;:::i;:::-;12046:74;;12129:93;12218:3;12129:93;:::i;:::-;12247:2;12242:3;12238:12;12231:19;;11890:366;;;:::o;12262:419::-;12428:4;12466:2;12455:9;12451:18;12443:26;;12515:9;12509:4;12505:20;12501:1;12490:9;12486:17;12479:47;12543:131;12669:4;12543:131;:::i;:::-;12535:139;;12262:419;;;:::o;12687:180::-;12735:77;12732:1;12725:88;12832:4;12829:1;12822:15;12856:4;12853:1;12846:15;12873:410;12913:7;12936:20;12954:1;12936:20;:::i;:::-;12931:25;;12970:20;12988:1;12970:20;:::i;:::-;12965:25;;13025:1;13022;13018:9;13047:30;13065:11;13047:30;:::i;:::-;13036:41;;13226:1;13217:7;13213:15;13210:1;13207:22;13187:1;13180:9;13160:83;13137:139;;13256:18;;:::i;:::-;13137:139;12921:362;12873:410;;;;:::o;13289:180::-;13337:77;13334:1;13327:88;13434:4;13431:1;13424:15;13458:4;13455:1;13448:15;13475:185;13515:1;13532:20;13550:1;13532:20;:::i;:::-;13527:25;;13566:20;13584:1;13566:20;:::i;:::-;13561:25;;13605:1;13595:35;;13610:18;;:::i;:::-;13595:35;13652:1;13649;13645:9;13640:14;;13475:185;;;;:::o;13666:232::-;13806:34;13802:1;13794:6;13790:14;13783:58;13875:15;13870:2;13862:6;13858:15;13851:40;13666:232;:::o;13904:366::-;14046:3;14067:67;14131:2;14126:3;14067:67;:::i;:::-;14060:74;;14143:93;14232:3;14143:93;:::i;:::-;14261:2;14256:3;14252:12;14245:19;;13904:366;;;:::o;14276:419::-;14442:4;14480:2;14469:9;14465:18;14457:26;;14529:9;14523:4;14519:20;14515:1;14504:9;14500:17;14493:47;14557:131;14683:4;14557:131;:::i;:::-;14549:139;;14276:419;;;:::o;14701:227::-;14841:34;14837:1;14829:6;14825:14;14818:58;14910:10;14905:2;14897:6;14893:15;14886:35;14701:227;:::o;14934:366::-;15076:3;15097:67;15161:2;15156:3;15097:67;:::i;:::-;15090:74;;15173:93;15262:3;15173:93;:::i;:::-;15291:2;15286:3;15282:12;15275:19;;14934:366;;;:::o;15306:419::-;15472:4;15510:2;15499:9;15495:18;15487:26;;15559:9;15553:4;15549:20;15545:1;15534:9;15530:17;15523:47;15587:131;15713:4;15587:131;:::i;:::-;15579:139;;15306:419;;;:::o;15731:227::-;15871:34;15867:1;15859:6;15855:14;15848:58;15940:10;15935:2;15927:6;15923:15;15916:35;15731:227;:::o;15964:366::-;16106:3;16127:67;16191:2;16186:3;16127:67;:::i;:::-;16120:74;;16203:93;16292:3;16203:93;:::i;:::-;16321:2;16316:3;16312:12;16305:19;;15964:366;;;:::o;16336:419::-;16502:4;16540:2;16529:9;16525:18;16517:26;;16589:9;16583:4;16579:20;16575:1;16564:9;16560:17;16553:47;16617:131;16743:4;16617:131;:::i;:::-;16609:139;;16336:419;;;:::o;16761:442::-;16910:4;16948:2;16937:9;16933:18;16925:26;;16961:71;17029:1;17018:9;17014:17;17005:6;16961:71;:::i;:::-;17042:72;17110:2;17099:9;17095:18;17086:6;17042:72;:::i;:::-;17124;17192:2;17181:9;17177:18;17168:6;17124:72;:::i;:::-;16761:442;;;;;;:::o;17209:191::-;17249:3;17268:20;17286:1;17268:20;:::i;:::-;17263:25;;17302:20;17320:1;17302:20;:::i;:::-;17297:25;;17345:1;17342;17338:9;17331:16;;17366:3;17363:1;17360:10;17357:36;;;17373:18;;:::i;:::-;17357:36;17209:191;;;;:::o;17406:228::-;17546:34;17542:1;17534:6;17530:14;17523:58;17615:11;17610:2;17602:6;17598:15;17591:36;17406:228;:::o;17640:366::-;17782:3;17803:67;17867:2;17862:3;17803:67;:::i;:::-;17796:74;;17879:93;17968:3;17879:93;:::i;:::-;17997:2;17992:3;17988:12;17981:19;;17640:366;;;:::o;18012:419::-;18178:4;18216:2;18205:9;18201:18;18193:26;;18265:9;18259:4;18255:20;18251:1;18240:9;18236:17;18229:47;18293:131;18419:4;18293:131;:::i;:::-;18285:139;;18012:419;;;:::o;18437:182::-;18577:34;18573:1;18565:6;18561:14;18554:58;18437:182;:::o;18625:366::-;18767:3;18788:67;18852:2;18847:3;18788:67;:::i;:::-;18781:74;;18864:93;18953:3;18864:93;:::i;:::-;18982:2;18977:3;18973:12;18966:19;;18625:366;;;:::o;18997:419::-;19163:4;19201:2;19190:9;19186:18;19178:26;;19250:9;19244:4;19240:20;19236:1;19225:9;19221:17;19214:47;19278:131;19404:4;19278:131;:::i;:::-;19270:139;;18997:419;;;:::o;19422:224::-;19562:34;19558:1;19550:6;19546:14;19539:58;19631:7;19626:2;19618:6;19614:15;19607:32;19422:224;:::o;19652:366::-;19794:3;19815:67;19879:2;19874:3;19815:67;:::i;:::-;19808:74;;19891:93;19980:3;19891:93;:::i;:::-;20009:2;20004:3;20000:12;19993:19;;19652:366;;;:::o;20024:419::-;20190:4;20228:2;20217:9;20213:18;20205:26;;20277:9;20271:4;20267:20;20263:1;20252:9;20248:17;20241:47;20305:131;20431:4;20305:131;:::i;:::-;20297:139;;20024:419;;;:::o;20449:225::-;20589:34;20585:1;20577:6;20573:14;20566:58;20658:8;20653:2;20645:6;20641:15;20634:33;20449:225;:::o;20680:366::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:419::-;21218:4;21256:2;21245:9;21241:18;21233:26;;21305:9;21299:4;21295:20;21291:1;21280:9;21276:17;21269:47;21333:131;21459:4;21333:131;:::i;:::-;21325:139;;21052:419;;;:::o;21477:225::-;21617:34;21613:1;21605:6;21601:14;21594:58;21686:8;21681:2;21673:6;21669:15;21662:33;21477:225;:::o;21708:366::-;21850:3;21871:67;21935:2;21930:3;21871:67;:::i;:::-;21864:74;;21947:93;22036:3;21947:93;:::i;:::-;22065:2;22060:3;22056:12;22049:19;;21708:366;;;:::o;22080:419::-;22246:4;22284:2;22273:9;22269:18;22261:26;;22333:9;22327:4;22323:20;22319:1;22308:9;22304:17;22297:47;22361:131;22487:4;22361:131;:::i;:::-;22353:139;;22080:419;;;:::o;22505:223::-;22645:34;22641:1;22633:6;22629:14;22622:58;22714:6;22709:2;22701:6;22697:15;22690:31;22505:223;:::o;22734:366::-;22876:3;22897:67;22961:2;22956:3;22897:67;:::i;:::-;22890:74;;22973:93;23062:3;22973:93;:::i;:::-;23091:2;23086:3;23082:12;23075:19;;22734:366;;;:::o;23106:419::-;23272:4;23310:2;23299:9;23295:18;23287:26;;23359:9;23353:4;23349:20;23345:1;23334:9;23330:17;23323:47;23387:131;23513:4;23387:131;:::i;:::-;23379:139;;23106:419;;;:::o;23531:221::-;23671:34;23667:1;23659:6;23655:14;23648:58;23740:4;23735:2;23727:6;23723:15;23716:29;23531:221;:::o;23758:366::-;23900:3;23921:67;23985:2;23980:3;23921:67;:::i;:::-;23914:74;;23997:93;24086:3;23997:93;:::i;:::-;24115:2;24110:3;24106:12;24099:19;;23758:366;;;:::o;24130:419::-;24296:4;24334:2;24323:9;24319:18;24311:26;;24383:9;24377:4;24373:20;24369:1;24358:9;24354:17;24347:47;24411:131;24537:4;24411:131;:::i;:::-;24403:139;;24130:419;;;:::o;24555:224::-;24695:34;24691:1;24683:6;24679:14;24672:58;24764:7;24759:2;24751:6;24747:15;24740:32;24555:224;:::o;24785:366::-;24927:3;24948:67;25012:2;25007:3;24948:67;:::i;:::-;24941:74;;25024:93;25113:3;25024:93;:::i;:::-;25142:2;25137:3;25133:12;25126:19;;24785:366;;;:::o;25157:419::-;25323:4;25361:2;25350:9;25346:18;25338:26;;25410:9;25404:4;25400:20;25396:1;25385:9;25381:17;25374:47;25438:131;25564:4;25438:131;:::i;:::-;25430:139;;25157:419;;;:::o;25582:222::-;25722:34;25718:1;25710:6;25706:14;25699:58;25791:5;25786:2;25778:6;25774:15;25767:30;25582:222;:::o;25810:366::-;25952:3;25973:67;26037:2;26032:3;25973:67;:::i;:::-;25966:74;;26049:93;26138:3;26049:93;:::i;:::-;26167:2;26162:3;26158:12;26151:19;;25810:366;;;:::o;26182:419::-;26348:4;26386:2;26375:9;26371:18;26363:26;;26435:9;26429:4;26425:20;26421:1;26410:9;26406:17;26399:47;26463:131;26589:4;26463:131;:::i;:::-;26455:139;;26182:419;;;:::o;26607:221::-;26747:34;26743:1;26735:6;26731:14;26724:58;26816:4;26811:2;26803:6;26799:15;26792:29;26607:221;:::o;26834:366::-;26976:3;26997:67;27061:2;27056:3;26997:67;:::i;:::-;26990:74;;27073:93;27162:3;27073:93;:::i;:::-;27191:2;27186:3;27182:12;27175:19;;26834:366;;;:::o;27206:419::-;27372:4;27410:2;27399:9;27395:18;27387:26;;27459:9;27453:4;27449:20;27445:1;27434:9;27430:17;27423:47;27487:131;27613:4;27487:131;:::i;:::-;27479:139;;27206:419;;;:::o;27631:225::-;27771:34;27767:1;27759:6;27755:14;27748:58;27840:8;27835:2;27827:6;27823:15;27816:33;27631:225;:::o;27862:366::-;28004:3;28025:67;28089:2;28084:3;28025:67;:::i;:::-;28018:74;;28101:93;28190:3;28101:93;:::i;:::-;28219:2;28214:3;28210:12;28203:19;;27862:366;;;:::o;28234:419::-;28400:4;28438:2;28427:9;28423:18;28415:26;;28487:9;28481:4;28477:20;28473:1;28462:9;28458:17;28451:47;28515:131;28641:4;28515:131;:::i;:::-;28507:139;;28234:419;;;:::o;28659:169::-;28799:21;28795:1;28787:6;28783:14;28776:45;28659:169;:::o;28834:366::-;28976:3;28997:67;29061:2;29056:3;28997:67;:::i;:::-;28990:74;;29073:93;29162:3;29073:93;:::i;:::-;29191:2;29186:3;29182:12;29175:19;;28834:366;;;:::o;29206:419::-;29372:4;29410:2;29399:9;29395:18;29387:26;;29459:9;29453:4;29449:20;29445:1;29434:9;29430:17;29423:47;29487:131;29613:4;29487:131;:::i;:::-;29479:139;;29206:419;;;:::o;29631:226::-;29771:34;29767:1;29759:6;29755:14;29748:58;29840:9;29835:2;29827:6;29823:15;29816:34;29631:226;:::o;29863:366::-;30005:3;30026:67;30090:2;30085:3;30026:67;:::i;:::-;30019:74;;30102:93;30191:3;30102:93;:::i;:::-;30220:2;30215:3;30211:12;30204:19;;29863:366;;;:::o;30235:419::-;30401:4;30439:2;30428:9;30424:18;30416:26;;30488:9;30482:4;30478:20;30474:1;30463:9;30459:17;30452:47;30516:131;30642:4;30516:131;:::i;:::-;30508:139;;30235:419;;;:::o;30660:194::-;30700:4;30720:20;30738:1;30720:20;:::i;:::-;30715:25;;30754:20;30772:1;30754:20;:::i;:::-;30749:25;;30798:1;30795;30791:9;30783:17;;30822:1;30816:4;30813:11;30810:37;;;30827:18;;:::i;:::-;30810:37;30660:194;;;;:::o;30860:225::-;31000:34;30996:1;30988:6;30984:14;30977:58;31069:8;31064:2;31056:6;31052:15;31045:33;30860:225;:::o;31091:366::-;31233:3;31254:67;31318:2;31313:3;31254:67;:::i;:::-;31247:74;;31330:93;31419:3;31330:93;:::i;:::-;31448:2;31443:3;31439:12;31432:19;;31091:366;;;:::o;31463:419::-;31629:4;31667:2;31656:9;31652:18;31644:26;;31716:9;31710:4;31706:20;31702:1;31691:9;31687:17;31680:47;31744:131;31870:4;31744:131;:::i;:::-;31736:139;;31463:419;;;:::o;31888:147::-;31989:11;32026:3;32011:18;;31888:147;;;;:::o;32041:114::-;;:::o;32161:398::-;32320:3;32341:83;32422:1;32417:3;32341:83;:::i;:::-;32334:90;;32433:93;32522:3;32433:93;:::i;:::-;32551:1;32546:3;32542:11;32535:18;;32161:398;;;:::o;32565:379::-;32749:3;32771:147;32914:3;32771:147;:::i;:::-;32764:154;;32935:3;32928:10;;32565:379;;;:::o;32950:180::-;32998:77;32995:1;32988:88;33095:4;33092:1;33085:15;33119:4;33116:1;33109:15;33136:180;33184:77;33181:1;33174:88;33281:4;33278:1;33271:15;33305:4;33302:1;33295:15;33322:143;33379:5;33410:6;33404:13;33395:22;;33426:33;33453:5;33426:33;:::i;:::-;33322:143;;;;:::o;33471:351::-;33541:6;33590:2;33578:9;33569:7;33565:23;33561:32;33558:119;;;33596:79;;:::i;:::-;33558:119;33716:1;33741:64;33797:7;33788:6;33777:9;33773:22;33741:64;:::i;:::-;33731:74;;33687:128;33471:351;;;;:::o;33828:85::-;33873:7;33902:5;33891:16;;33828:85;;;:::o;33919:60::-;33947:3;33968:5;33961:12;;33919:60;;;:::o;33985:158::-;34043:9;34076:61;34094:42;34103:32;34129:5;34103:32;:::i;:::-;34094:42;:::i;:::-;34076:61;:::i;:::-;34063:74;;33985:158;;;:::o;34149:147::-;34244:45;34283:5;34244:45;:::i;:::-;34239:3;34232:58;34149:147;;:::o;34302:114::-;34369:6;34403:5;34397:12;34387:22;;34302:114;;;:::o;34422:184::-;34521:11;34555:6;34550:3;34543:19;34595:4;34590:3;34586:14;34571:29;;34422:184;;;;:::o;34612:132::-;34679:4;34702:3;34694:11;;34732:4;34727:3;34723:14;34715:22;;34612:132;;;:::o;34750:108::-;34827:24;34845:5;34827:24;:::i;:::-;34822:3;34815:37;34750:108;;:::o;34864:179::-;34933:10;34954:46;34996:3;34988:6;34954:46;:::i;:::-;35032:4;35027:3;35023:14;35009:28;;34864:179;;;;:::o;35049:113::-;35119:4;35151;35146:3;35142:14;35134:22;;35049:113;;;:::o;35198:732::-;35317:3;35346:54;35394:5;35346:54;:::i;:::-;35416:86;35495:6;35490:3;35416:86;:::i;:::-;35409:93;;35526:56;35576:5;35526:56;:::i;:::-;35605:7;35636:1;35621:284;35646:6;35643:1;35640:13;35621:284;;;35722:6;35716:13;35749:63;35808:3;35793:13;35749:63;:::i;:::-;35742:70;;35835:60;35888:6;35835:60;:::i;:::-;35825:70;;35681:224;35668:1;35665;35661:9;35656:14;;35621:284;;;35625:14;35921:3;35914:10;;35322:608;;;35198:732;;;;:::o;35936:831::-;36199:4;36237:3;36226:9;36222:19;36214:27;;36251:71;36319:1;36308:9;36304:17;36295:6;36251:71;:::i;:::-;36332:80;36408:2;36397:9;36393:18;36384:6;36332:80;:::i;:::-;36459:9;36453:4;36449:20;36444:2;36433:9;36429:18;36422:48;36487:108;36590:4;36581:6;36487:108;:::i;:::-;36479:116;;36605:72;36673:2;36662:9;36658:18;36649:6;36605:72;:::i;:::-;36687:73;36755:3;36744:9;36740:19;36731:6;36687:73;:::i;:::-;35936:831;;;;;;;;:::o
Swarm Source
ipfs://414e3ea18e974dd2f2bd69773abed60bdec4f7be8efc105eeaa60807850eaf35
Loading...
Loading
Loading...
Loading
Net Worth in USD
$117.00
Net Worth in ETH
0.06
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,949.94 | 0.06 | $117 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.