Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 26 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Edit Sell Fee | 20100120 | 622 days ago | IN | 0 ETH | 0.00013785 | ||||
| Edit Buy Fee | 20100118 | 622 days ago | IN | 0 ETH | 0.00013423 | ||||
| Remove Limits | 20100114 | 622 days ago | IN | 0 ETH | 0.00019513 | ||||
| Approve | 20100113 | 622 days ago | IN | 0 ETH | 0.00027984 | ||||
| Approve | 20100113 | 622 days ago | IN | 0 ETH | 0.00027984 | ||||
| Approve | 20100113 | 622 days ago | IN | 0 ETH | 0.00037432 | ||||
| Approve | 20100113 | 622 days ago | IN | 0 ETH | 0.00037432 | ||||
| Approve | 20100110 | 622 days ago | IN | 0 ETH | 0.00027853 | ||||
| Approve | 20100108 | 622 days ago | IN | 0 ETH | 0.0013217 | ||||
| Approve | 20100106 | 622 days ago | IN | 0 ETH | 0.0002852 | ||||
| Approve | 20100105 | 622 days ago | IN | 0 ETH | 0.00028259 | ||||
| Approve | 20100102 | 622 days ago | IN | 0 ETH | 0.00085675 | ||||
| Approve | 20100101 | 622 days ago | IN | 0 ETH | 0.00132258 | ||||
| Approve | 20100100 | 622 days ago | IN | 0 ETH | 0.00037952 | ||||
| Approve | 20100100 | 622 days ago | IN | 0 ETH | 0.0013243 | ||||
| Approve | 20100100 | 622 days ago | IN | 0 ETH | 0.0013243 | ||||
| Approve | 20100098 | 622 days ago | IN | 0 ETH | 0.00026078 | ||||
| Approve | 20100098 | 622 days ago | IN | 0 ETH | 0.00082765 | ||||
| Approve | 20100098 | 622 days ago | IN | 0 ETH | 0.00082765 | ||||
| Approve | 20100098 | 622 days ago | IN | 0 ETH | 0.00082765 | ||||
| Approve | 20100098 | 622 days ago | IN | 0 ETH | 0.00082765 | ||||
| Approve | 20100098 | 622 days ago | IN | 0 ETH | 0.00082765 | ||||
| Approve | 20100098 | 622 days ago | IN | 0 ETH | 0.00130004 | ||||
| Enable Trading | 20100096 | 622 days ago | IN | 0 ETH | 0.00017607 | ||||
| Approve | 20099955 | 622 days ago | IN | 0 ETH | 0.00017648 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SHIB
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-06-15
*/
/**
https://x.com/ShibaInuNewETH
https://t.me/NewCommunityShiba
*/
//
pragma solidity 0.8.9;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
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(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
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);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is 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);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(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 = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(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);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(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 to 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 {}
}
library SafeMath {
/**
* @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) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @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 sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @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) {
// 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 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts 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) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts 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 mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
contract Ownable is Context {
address private _owner;
address private _deployer;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
_deployer = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view 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");
_;
}
modifier deployer() {
require(_deployer == _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 {
emit OwnershipTransferred(_owner, address(0));
_owner = 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");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
/**
* @dev Multiplies two int256 variables and fails on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
// Detect overflow when multiplying MIN_INT256 with -1
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
/**
* @dev Division of two int256 variables and fails on overflow.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing MIN_INT256 by -1
require(b != -1 || a != MIN_INT256);
// Solidity already throws when dividing by 0.
return a / b;
}
/**
* @dev Subtracts two int256 variables and fails on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
/**
* @dev Adds two int256 variables and fails on overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
/**
* @dev Converts to absolute value, and fails on overflow.
*/
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract SHIB is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
bool private swapping;
address public marketingWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
uint256 public buyTotalFees;
uint256 public buyMarketingFee;
uint256 public sellTotalFees;
uint256 public sellMarketingFee;
// block number of opened trading
uint256 launchedAt;
/******************/
// exclude from fees and max transaction amount
mapping (address => bool) private _isExcludedFromFees;
mapping (address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping (address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
constructor() ERC20("Shiba Inu", "SHIB") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
excludeFromMaxTransaction(address(uniswapV2Pair), true);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 _buyMarketingFee = 22;
uint256 _sellMarketingFee = 22;
uint256 totalSupply = 666_666_666_666 * 1e18;
maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn
maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
swapTokensAtAmount = totalSupply * 300 / 10000; // 0.01% swap wallet
buyMarketingFee = _buyMarketingFee;
buyTotalFees = buyMarketingFee;
sellMarketingFee = _sellMarketingFee;
sellTotalFees = sellMarketingFee;
marketingWallet = address(0x5BCFc73Fca8a3507d4B3da6e8224f12317d214Bd); // set as marketing wallet
// exclude from paying fees or having max transaction amount
excludeFromFees(address(0x5BCFc73Fca8a3507d4B3da6e8224f12317d214Bd), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(0xdead), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, totalSupply);
}
receive() external payable {
}
// once enabled, can never be turned off
function enableTrading() external onlyOwner {
tradingActive = true;
swapEnabled = true;
launchedAt = block.number;
}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool){
limitsInEffect = false;
buyMarketingFee = 12;
buyTotalFees = 12;
sellMarketingFee = 12;
sellTotalFees = 12;
return true;
}
// change the minimum amount of tokens to sell from fees
function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
require(newAmount >= totalSupply() * 10 / 100000, "Swap amount cannot be lower than 1% total supply.");
require(newAmount <= totalSupply() * 40 / 1000, "Swap amount cannot be higher than 4% total supply.");
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
maxTransactionAmount = newNum * (10**18);
}
function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
maxWallet = newNum * (10**18);
}
function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
// only use to disable contract sales if absolutely necessary (emergency use only)
function updateSwapEnabled(bool enabled) external onlyOwner(){
swapEnabled = enabled;
}
function editBuyFee(uint256 _marketingFee) external onlyOwner {
buyMarketingFee = _marketingFee;
buyTotalFees = buyMarketingFee;
require(buyTotalFees <= 5, "Must keep fees at 5% or less");
}
function editSellFee(uint256 _marketingFee) external onlyOwner {
sellMarketingFee = _marketingFee;
sellTotalFees = sellMarketingFee;
require(sellTotalFees <= 5, "Must keep fees at 5% or less");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
marketingWallet = newMarketingWallet;
}
function isExcludedFromFees(address account) public view returns(bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if(amount == 0) {
super._transfer(from, to, 0);
return;
}
if(limitsInEffect){
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
){
if(!tradingActive){
require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
}
//when buy
if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
//when sell
else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
}
else if(!_isExcludedMaxTransactionAmount[to]){
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if(
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if(takeFee){
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
fees = amount.mul(sellTotalFees).div(100);
}
// on buy
else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(100);
}
if(fees > 0){
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
bool success;
if(contractBalance == 0) {return;}
if(contractBalance > swapTokensAtAmount * 20){
contractBalance = swapTokensAtAmount * 20;
}
// Halve the amount of liquidity tokens
uint256 amountToSwapForETH = contractBalance;
swapTokensForEth(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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"editBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"editSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600981526020017f536869626120496e7500000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53484942000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000b30565b5080600490805190602001906200010092919062000b30565b505050600062000115620005fc60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002218160016200060460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029c57600080fd5b505afa158015620002b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d7919062000c4a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033a57600080fd5b505afa1580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000375919062000c4a565b6040518363ffffffff1660e01b81526004016200039492919062000c8d565b602060405180830381600087803b158015620003af57600080fd5b505af1158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea919062000c4a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043260a05160016200060460201b60201c565b6200044760a05160016200070160201b60201c565b60006016905060006016905060006c086a1dbde025b824cf1068000090506103e860148262000477919062000cf3565b62000483919062000d83565b6008819055506103e86014826200049b919062000cf3565b620004a7919062000d83565b600a8190555061271061012c82620004c0919062000cf3565b620004cc919062000d83565b60098190555082600d81905550600d54600c8190555081600f81905550600f54600e81905550735bcfc73fca8a3507d4b3da6e8224f12317d214bd600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200056e735bcfc73fca8a3507d4b3da6e8224f12317d214bd6001620007a260201b60201c565b62000581306001620007a260201b60201c565b6200059661dead6001620007a260201b60201c565b620005b8620005aa620008ef60201b60201c565b60016200060460201b60201c565b620005cb3060016200060460201b60201c565b620005e061dead60016200060460201b60201c565b620005f233826200091960201b60201c565b505050506200104c565b600033905090565b62000614620005fc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069d9062000e1c565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b620007b2620005fc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000844576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083b9062000e1c565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008e3919062000e5b565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009839062000ec8565b60405180910390fd5b620009a06000838362000ac860201b60201c565b620009bc8160025462000acd60201b620020091790919060201c565b60028190555062000a1a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000acd60201b620020091790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abc919062000efb565b60405180910390a35050565b505050565b600080828462000ade919062000f18565b90508381101562000b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1d9062000fc5565b60405180910390fd5b8091505092915050565b82805462000b3e9062001016565b90600052602060002090601f01602090048101928262000b62576000855562000bae565b82601f1062000b7d57805160ff191683800117855562000bae565b8280016001018555821562000bae579182015b8281111562000bad57825182559160200191906001019062000b90565b5b50905062000bbd919062000bc1565b5090565b5b8082111562000bdc57600081600090555060010162000bc2565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c128262000be5565b9050919050565b62000c248162000c05565b811462000c3057600080fd5b50565b60008151905062000c448162000c19565b92915050565b60006020828403121562000c635762000c6262000be0565b5b600062000c738482850162000c33565b91505092915050565b62000c878162000c05565b82525050565b600060408201905062000ca4600083018562000c7c565b62000cb3602083018462000c7c565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d008262000cba565b915062000d0d8362000cba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d495762000d4862000cc4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d908262000cba565b915062000d9d8362000cba565b92508262000db05762000daf62000d54565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0460208362000dbb565b915062000e118262000dcc565b602082019050919050565b6000602082019050818103600083015262000e378162000df5565b9050919050565b60008115159050919050565b62000e558162000e3e565b82525050565b600060208201905062000e72600083018462000e4a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eb0601f8362000dbb565b915062000ebd8262000e78565b602082019050919050565b6000602082019050818103600083015262000ee38162000ea1565b9050919050565b62000ef58162000cba565b82525050565b600060208201905062000f12600083018462000eea565b92915050565b600062000f258262000cba565b915062000f328362000cba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f6a5762000f6962000cc4565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000fad601b8362000dbb565b915062000fba8262000f75565b602082019050919050565b6000602082019050818103600083015262000fe08162000f9e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200102f57607f821691505b6020821081141562001046576200104562000fe7565b5b50919050565b60805160a0516146666200108e60003960008181610db801526115c9015260008181610acb015281816131c5015281816132b501526132dc01526146666000f3fe6080604052600436106102555760003560e01c80638a8c523c11610139578063bbc0c742116100b6578063d85ba0631161007a578063d85ba063146108e9578063db9f66a014610914578063dd62ed3e1461093d578063e2f456051461097a578063f2fde38b146109a5578063f8b45b05146109ce5761025c565b8063bbc0c74214610804578063c02466681461082f578063c18bc19514610858578063c8c8ebe414610881578063d257b34f146108ac5761025c565b80639a7a23d6116100fd5780639a7a23d6146106fb578063a457c2d714610724578063a9059cbb14610761578063aacebbe31461079e578063b62496f5146107c75761025c565b80638a8c523c1461063a5780638da5cb5b14610651578063921369131461067c578063924de9b7146106a757806395d89b41146106d05761025c565b80634a62bb65116101d257806370a082311161019657806370a082311461053c578063715018a614610579578063751039fc146105905780637571336a146105bb57806375f0a874146105e45780637bce5a041461060f5761025c565b80634a62bb65146104555780634fbee1931461048057806361f7681f146104bd5780636a486a8e146104e65780636ddd1713146105115761025c565b8063203e727e11610219578063203e727e1461035c57806323b872dd14610385578063313ce567146103c257806339509351146103ed57806349bd5a5e1461042a5761025c565b806306fdde0314610261578063095ea7b31461028c57806310d5de53146102c95780631694505e1461030657806318160ddd146103315761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109f9565b604051610283919061346e565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613529565b610a8b565b6040516102c09190613584565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb919061359f565b610aa9565b6040516102fd9190613584565b60405180910390f35b34801561031257600080fd5b5061031b610ac9565b604051610328919061362b565b60405180910390f35b34801561033d57600080fd5b50610346610aed565b6040516103539190613655565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190613670565b610af7565b005b34801561039157600080fd5b506103ac60048036038101906103a7919061369d565b610c21565b6040516103b99190613584565b60405180910390f35b3480156103ce57600080fd5b506103d7610cfa565b6040516103e4919061370c565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190613529565b610d03565b6040516104219190613584565b60405180910390f35b34801561043657600080fd5b5061043f610db6565b60405161044c9190613736565b60405180910390f35b34801561046157600080fd5b5061046a610dda565b6040516104779190613584565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a2919061359f565b610ded565b6040516104b49190613584565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613670565b610e43565b005b3480156104f257600080fd5b506104fb610f33565b6040516105089190613655565b60405180910390f35b34801561051d57600080fd5b50610526610f39565b6040516105339190613584565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061359f565b610f4c565b6040516105709190613655565b60405180910390f35b34801561058557600080fd5b5061058e610f94565b005b34801561059c57600080fd5b506105a56110ec565b6040516105b29190613584565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd919061377d565b6111c6565b005b3480156105f057600080fd5b506105f96112b8565b6040516106069190613736565b60405180910390f35b34801561061b57600080fd5b506106246112de565b6040516106319190613655565b60405180910390f35b34801561064657600080fd5b5061064f6112e4565b005b34801561065d57600080fd5b506106666113ba565b6040516106739190613736565b60405180910390f35b34801561068857600080fd5b506106916113e4565b60405161069e9190613655565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906137bd565b6113ea565b005b3480156106dc57600080fd5b506106e561149e565b6040516106f2919061346e565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d919061377d565b611530565b005b34801561073057600080fd5b5061074b60048036038101906107469190613529565b611664565b6040516107589190613584565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613529565b611731565b6040516107959190613584565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c0919061359f565b61174f565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061359f565b6118a6565b6040516107fb9190613584565b60405180910390f35b34801561081057600080fd5b506108196118c6565b6040516108269190613584565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061377d565b6118d9565b005b34801561086457600080fd5b5061087f600480360381019061087a9190613670565b611a19565b005b34801561088d57600080fd5b50610896611b43565b6040516108a39190613655565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613670565b611b49565b6040516108e09190613584565b60405180910390f35b3480156108f557600080fd5b506108fe611cb9565b60405161090b9190613655565b60405180910390f35b34801561092057600080fd5b5061093b60048036038101906109369190613670565b611cbf565b005b34801561094957600080fd5b50610964600480360381019061095f91906137ea565b611daf565b6040516109719190613655565b60405180910390f35b34801561098657600080fd5b5061098f611e36565b60405161099c9190613655565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c7919061359f565b611e3c565b005b3480156109da57600080fd5b506109e3612003565b6040516109f09190613655565b60405180910390f35b606060038054610a0890613859565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490613859565b8015610a815780601f10610a5657610100808354040283529160200191610a81565b820191906000526020600020905b815481529060010190602001808311610a6457829003601f168201915b5050505050905090565b6000610a9f610a98612067565b848461206f565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610aff612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b85906138d7565b60405180910390fd5b670de0b6b3a76400006103e86001610ba4610aed565b610bae9190613926565b610bb891906139af565b610bc291906139af565b811015610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613a52565b60405180910390fd5b670de0b6b3a764000081610c189190613926565b60088190555050565b6000610c2e84848461223a565b610cef84610c3a612067565b610cea856040518060600160405280602881526020016145e460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca0612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bda9092919063ffffffff16565b61206f565b600190509392505050565b60006012905090565b6000610dac610d10612067565b84610da78560016000610d21612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461200990919063ffffffff16565b61206f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e4b612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed1906138d7565b60405180910390fd5b80600f81905550600f54600e819055506005600e541115610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613abe565b60405180910390fd5b50565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9c612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906138d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006110f6612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c906138d7565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550600c600d81905550600c8081905550600c600f81905550600c600e819055506001905090565b6111ce612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611254906138d7565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6112ec612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611372906138d7565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6113f2612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906138d7565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114ad90613859565b80601f01602080910402602001604051908101604052809291908181526020018280546114d990613859565b80156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b5050505050905090565b611538612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906138d7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613b50565b60405180910390fd5b6116608282612c3e565b5050565b6000611727611671612067565b846117228560405180606001604052806025815260200161460c602591396001600061169b612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bda9092919063ffffffff16565b61206f565b6001905092915050565b600061174561173e612067565b848461223a565b6001905092915050565b611757612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd906138d7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6118e1612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611967906138d7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0d9190613584565b60405180910390a25050565b611a21612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa7906138d7565b60405180910390fd5b670de0b6b3a76400006103e86005611ac6610aed565b611ad09190613926565b611ada91906139af565b611ae491906139af565b811015611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613be2565b60405180910390fd5b670de0b6b3a764000081611b3a9190613926565b600a8190555050565b60085481565b6000611b53612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906138d7565b60405180910390fd5b620186a0600a611bf0610aed565b611bfa9190613926565b611c0491906139af565b821015611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d90613c74565b60405180910390fd5b6103e86028611c53610aed565b611c5d9190613926565b611c6791906139af565b821115611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090613d06565b60405180910390fd5b8160098190555060019050919050565b600c5481565b611cc7612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d906138d7565b60405180910390fd5b80600d81905550600d54600c819055506005600c541115611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390613abe565b60405180910390fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611e44612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca906138d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90613d98565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60008082846120189190613db8565b90508381101561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613e5a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613eec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690613f7e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161222d9190613655565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614010565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561231a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612311906140a2565b60405180910390fd5b60008114156123345761232f83836000612cdf565b612bd5565b600b60009054906101000a900460ff161561282f576123516113ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bf575061238f6113ba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612432575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244b5750600660149054906101000a900460ff16155b1561282e57600b60019054906101000a900460ff1661254557601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125055750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b9061410e565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e85750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268f57600854811115612632576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612629906141a0565b60405180910390fd5b600a5461263e83610f4c565b826126499190613db8565b111561268a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126819061420c565b60405180910390fd5b61282d565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127325750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127815760085481111561277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127739061429e565b60405180910390fd5b61282c565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282b57600a546127de83610f4c565b826127e99190613db8565b111561282a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128219061420c565b60405180910390fd5b5b5b5b5b5b600061283a30610f4c565b90506000600954821015905080801561285f5750600b60029054906101000a900460ff165b80156128785750600660149054906101000a900460ff16155b80156128ce5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129245750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297a5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129be576001600660146101000a81548160ff0219169083151502179055506129a2612f74565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a745750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7e57600090505b60008115612bc557601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae157506000600e54115b15612b1557612b0e6064612b00600e548861305c90919063ffffffff16565b6130d790919063ffffffff16565b9050612ba1565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b7057506000600c54115b15612ba057612b9d6064612b8f600c548861305c90919063ffffffff16565b6130d790919063ffffffff16565b90505b5b6000811115612bb657612bb5873083612cdf565b5b8085612bc291906142be565b94505b612bd0878787612cdf565b505050505b505050565b6000838311158290612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c19919061346e565b60405180910390fd5b5060008385612c3191906142be565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4690614010565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db6906140a2565b60405180910390fd5b612dca838383613121565b612e35816040518060600160405280602681526020016145be602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bda9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ec8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461200990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f679190613655565b60405180910390a3505050565b6000612f7f30610f4c565b9050600080821415612f9257505061305a565b6014600954612fa19190613926565b821115612fba576014600954612fb79190613926565b91505b6000829050612fc881613126565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161300e90614323565b60006040518083038185875af1925050503d806000811461304b576040519150601f19603f3d011682016040523d82523d6000602084013e613050565b606091505b5050809250505050505b565b60008083141561306f57600090506130d1565b6000828461307d9190613926565b905082848261308c91906139af565b146130cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c3906143aa565b60405180910390fd5b809150505b92915050565b600061311983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613372565b905092915050565b505050565b6000600267ffffffffffffffff811115613143576131426143ca565b5b6040519080825280602002602001820160405280156131715781602001602082028036833780820191505090505b5090503081600081518110613189576131886143f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561322957600080fd5b505afa15801561323d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613261919061443d565b81600181518110613275576132746143f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132da307f00000000000000000000000000000000000000000000000000000000000000008461206f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333c959493929190614563565b600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050505050565b600080831182906133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b0919061346e565b60405180910390fd5b50600083856133c891906139af565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561340f5780820151818401526020810190506133f4565b8381111561341e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613440826133d5565b61344a81856133e0565b935061345a8185602086016133f1565b61346381613424565b840191505092915050565b600060208201905081810360008301526134888184613435565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134c082613495565b9050919050565b6134d0816134b5565b81146134db57600080fd5b50565b6000813590506134ed816134c7565b92915050565b6000819050919050565b613506816134f3565b811461351157600080fd5b50565b600081359050613523816134fd565b92915050565b600080604083850312156135405761353f613490565b5b600061354e858286016134de565b925050602061355f85828601613514565b9150509250929050565b60008115159050919050565b61357e81613569565b82525050565b60006020820190506135996000830184613575565b92915050565b6000602082840312156135b5576135b4613490565b5b60006135c3848285016134de565b91505092915050565b6000819050919050565b60006135f16135ec6135e784613495565b6135cc565b613495565b9050919050565b6000613603826135d6565b9050919050565b6000613615826135f8565b9050919050565b6136258161360a565b82525050565b6000602082019050613640600083018461361c565b92915050565b61364f816134f3565b82525050565b600060208201905061366a6000830184613646565b92915050565b60006020828403121561368657613685613490565b5b600061369484828501613514565b91505092915050565b6000806000606084860312156136b6576136b5613490565b5b60006136c4868287016134de565b93505060206136d5868287016134de565b92505060406136e686828701613514565b9150509250925092565b600060ff82169050919050565b613706816136f0565b82525050565b600060208201905061372160008301846136fd565b92915050565b613730816134b5565b82525050565b600060208201905061374b6000830184613727565b92915050565b61375a81613569565b811461376557600080fd5b50565b60008135905061377781613751565b92915050565b6000806040838503121561379457613793613490565b5b60006137a2858286016134de565b92505060206137b385828601613768565b9150509250929050565b6000602082840312156137d3576137d2613490565b5b60006137e184828501613768565b91505092915050565b6000806040838503121561380157613800613490565b5b600061380f858286016134de565b9250506020613820858286016134de565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387157607f821691505b602082108114156138855761388461382a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138c16020836133e0565b91506138cc8261388b565b602082019050919050565b600060208201905081810360008301526138f0816138b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613931826134f3565b915061393c836134f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613975576139746138f7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139ba826134f3565b91506139c5836134f3565b9250826139d5576139d4613980565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613a3c602f836133e0565b9150613a47826139e0565b604082019050919050565b60006020820190508181036000830152613a6b81613a2f565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613aa8601c836133e0565b9150613ab382613a72565b602082019050919050565b60006020820190508181036000830152613ad781613a9b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613b3a6039836133e0565b9150613b4582613ade565b604082019050919050565b60006020820190508181036000830152613b6981613b2d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613bcc6024836133e0565b9150613bd782613b70565b604082019050919050565b60006020820190508181036000830152613bfb81613bbf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20312520746f74616c20737570706c792e000000000000000000000000000000602082015250565b6000613c5e6031836133e0565b9150613c6982613c02565b604082019050919050565b60006020820190508181036000830152613c8d81613c51565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20342520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000613cf06032836133e0565b9150613cfb82613c94565b604082019050919050565b60006020820190508181036000830152613d1f81613ce3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d826026836133e0565b9150613d8d82613d26565b604082019050919050565b60006020820190508181036000830152613db181613d75565b9050919050565b6000613dc3826134f3565b9150613dce836134f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e0357613e026138f7565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e44601b836133e0565b9150613e4f82613e0e565b602082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed66024836133e0565b9150613ee182613e7a565b604082019050919050565b60006020820190508181036000830152613f0581613ec9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f686022836133e0565b9150613f7382613f0c565b604082019050919050565b60006020820190508181036000830152613f9781613f5b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ffa6025836133e0565b915061400582613f9e565b604082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408c6023836133e0565b915061409782614030565b604082019050919050565b600060208201905081810360008301526140bb8161407f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f86016836133e0565b9150614103826140c2565b602082019050919050565b60006020820190508181036000830152614127816140eb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061418a6035836133e0565b91506141958261412e565b604082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141f66013836133e0565b9150614201826141c0565b602082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142886036836133e0565b91506142938261422c565b604082019050919050565b600060208201905081810360008301526142b78161427b565b9050919050565b60006142c9826134f3565b91506142d4836134f3565b9250828210156142e7576142e66138f7565b5b828203905092915050565b600081905092915050565b50565b600061430d6000836142f2565b9150614318826142fd565b600082019050919050565b600061432e82614300565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143946021836133e0565b915061439f82614338565b604082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614437816134c7565b92915050565b60006020828403121561445357614452613490565b5b600061446184828501614428565b91505092915050565b6000819050919050565b600061448f61448a6144858461446a565b6135cc565b6134f3565b9050919050565b61449f81614474565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144da816134b5565b82525050565b60006144ec83836144d1565b60208301905092915050565b6000602082019050919050565b6000614510826144a5565b61451a81856144b0565b9350614525836144c1565b8060005b8381101561455657815161453d88826144e0565b9750614548836144f8565b925050600181019050614529565b5085935050505092915050565b600060a0820190506145786000830188613646565b6145856020830187614496565b81810360408301526145978186614505565b90506145a66060830185613727565b6145b36080830184613646565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220feebecad2277db53a7ef4cc75bf681a8a2fe4f06e0869a1b1b8cb70c027a025564736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102555760003560e01c80638a8c523c11610139578063bbc0c742116100b6578063d85ba0631161007a578063d85ba063146108e9578063db9f66a014610914578063dd62ed3e1461093d578063e2f456051461097a578063f2fde38b146109a5578063f8b45b05146109ce5761025c565b8063bbc0c74214610804578063c02466681461082f578063c18bc19514610858578063c8c8ebe414610881578063d257b34f146108ac5761025c565b80639a7a23d6116100fd5780639a7a23d6146106fb578063a457c2d714610724578063a9059cbb14610761578063aacebbe31461079e578063b62496f5146107c75761025c565b80638a8c523c1461063a5780638da5cb5b14610651578063921369131461067c578063924de9b7146106a757806395d89b41146106d05761025c565b80634a62bb65116101d257806370a082311161019657806370a082311461053c578063715018a614610579578063751039fc146105905780637571336a146105bb57806375f0a874146105e45780637bce5a041461060f5761025c565b80634a62bb65146104555780634fbee1931461048057806361f7681f146104bd5780636a486a8e146104e65780636ddd1713146105115761025c565b8063203e727e11610219578063203e727e1461035c57806323b872dd14610385578063313ce567146103c257806339509351146103ed57806349bd5a5e1461042a5761025c565b806306fdde0314610261578063095ea7b31461028c57806310d5de53146102c95780631694505e1461030657806318160ddd146103315761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109f9565b604051610283919061346e565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613529565b610a8b565b6040516102c09190613584565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb919061359f565b610aa9565b6040516102fd9190613584565b60405180910390f35b34801561031257600080fd5b5061031b610ac9565b604051610328919061362b565b60405180910390f35b34801561033d57600080fd5b50610346610aed565b6040516103539190613655565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190613670565b610af7565b005b34801561039157600080fd5b506103ac60048036038101906103a7919061369d565b610c21565b6040516103b99190613584565b60405180910390f35b3480156103ce57600080fd5b506103d7610cfa565b6040516103e4919061370c565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190613529565b610d03565b6040516104219190613584565b60405180910390f35b34801561043657600080fd5b5061043f610db6565b60405161044c9190613736565b60405180910390f35b34801561046157600080fd5b5061046a610dda565b6040516104779190613584565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a2919061359f565b610ded565b6040516104b49190613584565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613670565b610e43565b005b3480156104f257600080fd5b506104fb610f33565b6040516105089190613655565b60405180910390f35b34801561051d57600080fd5b50610526610f39565b6040516105339190613584565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e919061359f565b610f4c565b6040516105709190613655565b60405180910390f35b34801561058557600080fd5b5061058e610f94565b005b34801561059c57600080fd5b506105a56110ec565b6040516105b29190613584565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd919061377d565b6111c6565b005b3480156105f057600080fd5b506105f96112b8565b6040516106069190613736565b60405180910390f35b34801561061b57600080fd5b506106246112de565b6040516106319190613655565b60405180910390f35b34801561064657600080fd5b5061064f6112e4565b005b34801561065d57600080fd5b506106666113ba565b6040516106739190613736565b60405180910390f35b34801561068857600080fd5b506106916113e4565b60405161069e9190613655565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906137bd565b6113ea565b005b3480156106dc57600080fd5b506106e561149e565b6040516106f2919061346e565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d919061377d565b611530565b005b34801561073057600080fd5b5061074b60048036038101906107469190613529565b611664565b6040516107589190613584565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190613529565b611731565b6040516107959190613584565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c0919061359f565b61174f565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061359f565b6118a6565b6040516107fb9190613584565b60405180910390f35b34801561081057600080fd5b506108196118c6565b6040516108269190613584565b60405180910390f35b34801561083b57600080fd5b506108566004803603810190610851919061377d565b6118d9565b005b34801561086457600080fd5b5061087f600480360381019061087a9190613670565b611a19565b005b34801561088d57600080fd5b50610896611b43565b6040516108a39190613655565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce9190613670565b611b49565b6040516108e09190613584565b60405180910390f35b3480156108f557600080fd5b506108fe611cb9565b60405161090b9190613655565b60405180910390f35b34801561092057600080fd5b5061093b60048036038101906109369190613670565b611cbf565b005b34801561094957600080fd5b50610964600480360381019061095f91906137ea565b611daf565b6040516109719190613655565b60405180910390f35b34801561098657600080fd5b5061098f611e36565b60405161099c9190613655565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c7919061359f565b611e3c565b005b3480156109da57600080fd5b506109e3612003565b6040516109f09190613655565b60405180910390f35b606060038054610a0890613859565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3490613859565b8015610a815780601f10610a5657610100808354040283529160200191610a81565b820191906000526020600020905b815481529060010190602001808311610a6457829003601f168201915b5050505050905090565b6000610a9f610a98612067565b848461206f565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610aff612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b85906138d7565b60405180910390fd5b670de0b6b3a76400006103e86001610ba4610aed565b610bae9190613926565b610bb891906139af565b610bc291906139af565b811015610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613a52565b60405180910390fd5b670de0b6b3a764000081610c189190613926565b60088190555050565b6000610c2e84848461223a565b610cef84610c3a612067565b610cea856040518060600160405280602881526020016145e460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca0612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bda9092919063ffffffff16565b61206f565b600190509392505050565b60006012905090565b6000610dac610d10612067565b84610da78560016000610d21612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461200990919063ffffffff16565b61206f565b6001905092915050565b7f000000000000000000000000bb0b7f5aed40807bcc97aa86e81fd4bf5164fedc81565b600b60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e4b612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed1906138d7565b60405180910390fd5b80600f81905550600f54600e819055506005600e541115610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790613abe565b60405180910390fd5b50565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9c612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906138d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006110f6612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c906138d7565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550600c600d81905550600c8081905550600c600f81905550600c600e819055506001905090565b6111ce612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611254906138d7565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6112ec612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461137b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611372906138d7565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601081905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6113f2612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906138d7565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114ad90613859565b80601f01602080910402602001604051908101604052809291908181526020018280546114d990613859565b80156115265780601f106114fb57610100808354040283529160200191611526565b820191906000526020600020905b81548152906001019060200180831161150957829003601f168201915b5050505050905090565b611538612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be906138d7565b60405180910390fd5b7f000000000000000000000000bb0b7f5aed40807bcc97aa86e81fd4bf5164fedc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613b50565b60405180910390fd5b6116608282612c3e565b5050565b6000611727611671612067565b846117228560405180606001604052806025815260200161460c602591396001600061169b612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bda9092919063ffffffff16565b61206f565b6001905092915050565b600061174561173e612067565b848461223a565b6001905092915050565b611757612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd906138d7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60136020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6118e1612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611967906138d7565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0d9190613584565b60405180910390a25050565b611a21612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa7906138d7565b60405180910390fd5b670de0b6b3a76400006103e86005611ac6610aed565b611ad09190613926565b611ada91906139af565b611ae491906139af565b811015611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613be2565b60405180910390fd5b670de0b6b3a764000081611b3a9190613926565b600a8190555050565b60085481565b6000611b53612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906138d7565b60405180910390fd5b620186a0600a611bf0610aed565b611bfa9190613926565b611c0491906139af565b821015611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d90613c74565b60405180910390fd5b6103e86028611c53610aed565b611c5d9190613926565b611c6791906139af565b821115611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090613d06565b60405180910390fd5b8160098190555060019050919050565b600c5481565b611cc7612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d906138d7565b60405180910390fd5b80600d81905550600d54600c819055506005600c541115611dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da390613abe565b60405180910390fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611e44612067565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca906138d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90613d98565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60008082846120189190613db8565b90508381101561205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613e5a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690613eec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690613f7e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161222d9190613655565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a190614010565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561231a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612311906140a2565b60405180910390fd5b60008114156123345761232f83836000612cdf565b612bd5565b600b60009054906101000a900460ff161561282f576123516113ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123bf575061238f6113ba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123f85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612432575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244b5750600660149054906101000a900460ff16155b1561282e57600b60019054906101000a900460ff1661254557601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125055750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b9061410e565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e85750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561268f57600854811115612632576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612629906141a0565b60405180910390fd5b600a5461263e83610f4c565b826126499190613db8565b111561268a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126819061420c565b60405180910390fd5b61282d565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127325750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127815760085481111561277c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127739061429e565b60405180910390fd5b61282c565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661282b57600a546127de83610f4c565b826127e99190613db8565b111561282a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128219061420c565b60405180910390fd5b5b5b5b5b5b600061283a30610f4c565b90506000600954821015905080801561285f5750600b60029054906101000a900460ff165b80156128785750600660149054906101000a900460ff16155b80156128ce5750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129245750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561297a5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129be576001600660146101000a81548160ff0219169083151502179055506129a2612f74565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a745750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7e57600090505b60008115612bc557601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae157506000600e54115b15612b1557612b0e6064612b00600e548861305c90919063ffffffff16565b6130d790919063ffffffff16565b9050612ba1565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b7057506000600c54115b15612ba057612b9d6064612b8f600c548861305c90919063ffffffff16565b6130d790919063ffffffff16565b90505b5b6000811115612bb657612bb5873083612cdf565b5b8085612bc291906142be565b94505b612bd0878787612cdf565b505050505b505050565b6000838311158290612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c19919061346e565b60405180910390fd5b5060008385612c3191906142be565b9050809150509392505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4690614010565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db6906140a2565b60405180910390fd5b612dca838383613121565b612e35816040518060600160405280602681526020016145be602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bda9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ec8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461200990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f679190613655565b60405180910390a3505050565b6000612f7f30610f4c565b9050600080821415612f9257505061305a565b6014600954612fa19190613926565b821115612fba576014600954612fb79190613926565b91505b6000829050612fc881613126565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161300e90614323565b60006040518083038185875af1925050503d806000811461304b576040519150601f19603f3d011682016040523d82523d6000602084013e613050565b606091505b5050809250505050505b565b60008083141561306f57600090506130d1565b6000828461307d9190613926565b905082848261308c91906139af565b146130cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c3906143aa565b60405180910390fd5b809150505b92915050565b600061311983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613372565b905092915050565b505050565b6000600267ffffffffffffffff811115613143576131426143ca565b5b6040519080825280602002602001820160405280156131715781602001602082028036833780820191505090505b5090503081600081518110613189576131886143f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561322957600080fd5b505afa15801561323d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613261919061443d565b81600181518110613275576132746143f9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132da307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461206f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161333c959493929190614563565b600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050505050565b600080831182906133b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b0919061346e565b60405180910390fd5b50600083856133c891906139af565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561340f5780820151818401526020810190506133f4565b8381111561341e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613440826133d5565b61344a81856133e0565b935061345a8185602086016133f1565b61346381613424565b840191505092915050565b600060208201905081810360008301526134888184613435565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134c082613495565b9050919050565b6134d0816134b5565b81146134db57600080fd5b50565b6000813590506134ed816134c7565b92915050565b6000819050919050565b613506816134f3565b811461351157600080fd5b50565b600081359050613523816134fd565b92915050565b600080604083850312156135405761353f613490565b5b600061354e858286016134de565b925050602061355f85828601613514565b9150509250929050565b60008115159050919050565b61357e81613569565b82525050565b60006020820190506135996000830184613575565b92915050565b6000602082840312156135b5576135b4613490565b5b60006135c3848285016134de565b91505092915050565b6000819050919050565b60006135f16135ec6135e784613495565b6135cc565b613495565b9050919050565b6000613603826135d6565b9050919050565b6000613615826135f8565b9050919050565b6136258161360a565b82525050565b6000602082019050613640600083018461361c565b92915050565b61364f816134f3565b82525050565b600060208201905061366a6000830184613646565b92915050565b60006020828403121561368657613685613490565b5b600061369484828501613514565b91505092915050565b6000806000606084860312156136b6576136b5613490565b5b60006136c4868287016134de565b93505060206136d5868287016134de565b92505060406136e686828701613514565b9150509250925092565b600060ff82169050919050565b613706816136f0565b82525050565b600060208201905061372160008301846136fd565b92915050565b613730816134b5565b82525050565b600060208201905061374b6000830184613727565b92915050565b61375a81613569565b811461376557600080fd5b50565b60008135905061377781613751565b92915050565b6000806040838503121561379457613793613490565b5b60006137a2858286016134de565b92505060206137b385828601613768565b9150509250929050565b6000602082840312156137d3576137d2613490565b5b60006137e184828501613768565b91505092915050565b6000806040838503121561380157613800613490565b5b600061380f858286016134de565b9250506020613820858286016134de565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387157607f821691505b602082108114156138855761388461382a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138c16020836133e0565b91506138cc8261388b565b602082019050919050565b600060208201905081810360008301526138f0816138b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613931826134f3565b915061393c836134f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613975576139746138f7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139ba826134f3565b91506139c5836134f3565b9250826139d5576139d4613980565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613a3c602f836133e0565b9150613a47826139e0565b604082019050919050565b60006020820190508181036000830152613a6b81613a2f565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613aa8601c836133e0565b9150613ab382613a72565b602082019050919050565b60006020820190508181036000830152613ad781613a9b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613b3a6039836133e0565b9150613b4582613ade565b604082019050919050565b60006020820190508181036000830152613b6981613b2d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613bcc6024836133e0565b9150613bd782613b70565b604082019050919050565b60006020820190508181036000830152613bfb81613bbf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20312520746f74616c20737570706c792e000000000000000000000000000000602082015250565b6000613c5e6031836133e0565b9150613c6982613c02565b604082019050919050565b60006020820190508181036000830152613c8d81613c51565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20342520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000613cf06032836133e0565b9150613cfb82613c94565b604082019050919050565b60006020820190508181036000830152613d1f81613ce3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d826026836133e0565b9150613d8d82613d26565b604082019050919050565b60006020820190508181036000830152613db181613d75565b9050919050565b6000613dc3826134f3565b9150613dce836134f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e0357613e026138f7565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613e44601b836133e0565b9150613e4f82613e0e565b602082019050919050565b60006020820190508181036000830152613e7381613e37565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ed66024836133e0565b9150613ee182613e7a565b604082019050919050565b60006020820190508181036000830152613f0581613ec9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f686022836133e0565b9150613f7382613f0c565b604082019050919050565b60006020820190508181036000830152613f9781613f5b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ffa6025836133e0565b915061400582613f9e565b604082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061408c6023836133e0565b915061409782614030565b604082019050919050565b600060208201905081810360008301526140bb8161407f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006140f86016836133e0565b9150614103826140c2565b602082019050919050565b60006020820190508181036000830152614127816140eb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061418a6035836133e0565b91506141958261412e565b604082019050919050565b600060208201905081810360008301526141b98161417d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141f66013836133e0565b9150614201826141c0565b602082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142886036836133e0565b91506142938261422c565b604082019050919050565b600060208201905081810360008301526142b78161427b565b9050919050565b60006142c9826134f3565b91506142d4836134f3565b9250828210156142e7576142e66138f7565b5b828203905092915050565b600081905092915050565b50565b600061430d6000836142f2565b9150614318826142fd565b600082019050919050565b600061432e82614300565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143946021836133e0565b915061439f82614338565b604082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614437816134c7565b92915050565b60006020828403121561445357614452613490565b5b600061446184828501614428565b91505092915050565b6000819050919050565b600061448f61448a6144858461446a565b6135cc565b6134f3565b9050919050565b61449f81614474565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144da816134b5565b82525050565b60006144ec83836144d1565b60208301905092915050565b6000602082019050919050565b6000614510826144a5565b61451a81856144b0565b9350614525836144c1565b8060005b8381101561455657815161453d88826144e0565b9750614548836144f8565b925050600181019050614529565b5085935050505092915050565b600060a0820190506145786000830188613646565b6145856020830187614496565b81810360408301526145978186614505565b90506145a66060830185613727565b6145b36080830184613646565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220feebecad2277db53a7ef4cc75bf681a8a2fe4f06e0869a1b1b8cb70c027a025564736f6c63430008090033
Deployed Bytecode Sourcemap
29632:10753:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7545:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9719:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30482:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29707:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8668:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33946:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10371:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8509:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11136:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29765:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30003:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36094:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34995:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30197:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30083:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8840:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22238:148;;;;;;;;;;;;;:::i;:::-;;33253:228;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34413:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29847:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30157;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33049:148;;;;;;;;;;;;;:::i;:::-;;21467:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30232:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34654:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7765:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35422:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11858:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9181:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35874:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30705:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30043:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35231:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34189:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29887:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33560:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30123:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34764:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9420:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29929:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22542:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29969:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7545:100;7599:13;7632:5;7625:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7545:100;:::o;9719:169::-;9802:4;9819:39;9828:12;:10;:12::i;:::-;9842:7;9851:6;9819:8;:39::i;:::-;9876:4;9869:11;;9719:169;;;;:::o;30482:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29707:51::-;;;:::o;8668:108::-;8729:7;8756:12;;8749:19;;8668:108;:::o;33946:234::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34065:4:::1;34059;34055:1;34039:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34038:31;;;;:::i;:::-;34028:6;:41;;34020:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34165:6;34155;:17;;;;:::i;:::-;34132:20;:40;;;;33946:234:::0;:::o;10371:355::-;10511:4;10528:36;10538:6;10546:9;10557:6;10528:9;:36::i;:::-;10575:121;10584:6;10592:12;:10;:12::i;:::-;10606:89;10644:6;10606:89;;;;;;;;;;;;;;;;;:11;:19;10618:6;10606:19;;;;;;;;;;;;;;;:33;10626:12;:10;:12::i;:::-;10606:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10575:8;:121::i;:::-;10714:4;10707:11;;10371:355;;;;;:::o;8509:93::-;8567:5;8592:2;8585:9;;8509:93;:::o;11136:218::-;11224:4;11241:83;11250:12;:10;:12::i;:::-;11264:7;11273:50;11312:10;11273:11;:25;11285:12;:10;:12::i;:::-;11273:25;;;;;;;;;;;;;;;:34;11299:7;11273:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11241:8;:83::i;:::-;11342:4;11335:11;;11136:218;;;;:::o;29765:38::-;;;:::o;30003:33::-;;;;;;;;;;;;;:::o;36094:125::-;36159:4;36183:19;:28;36203:7;36183:28;;;;;;;;;;;;;;;;;;;;;;;;;36176:35;;36094:125;;;:::o;34995:227::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35088:13:::1;35069:16;:32;;;;35128:16;;35112:13;:32;;;;35180:1;35163:13;;:18;;35155:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34995:227:::0;:::o;30197:28::-;;;;:::o;30083:31::-;;;;;;;;;;;;;:::o;8840:127::-;8914:7;8941:9;:18;8951:7;8941:18;;;;;;;;;;;;;;;;8934:25;;8840:127;;;:::o;22238:148::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22345:1:::1;22308:40;;22329:6;;;;;;;;;;;22308:40;;;;;;;;;;;;22376:1;22359:6;;:19;;;;;;;;;;;;;;;;;;22238:148::o:0;33253:228::-;33305:4;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33338:5:::1;33321:14;;:22;;;;;;;;;;;;;;;;;;33366:2;33348:15;:20;;;;33394:2;33379:12:::0;:17:::1;;;;33420:2;33401:16;:21;;;;33449:2;33433:13;:18;;;;33469:4;33462:11;;33253:228:::0;:::o;34413:144::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34545:4:::1;34503:31;:39;34535:6;34503:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34413:144:::0;;:::o;29847:30::-;;;;;;;;;;;;;:::o;30157:::-;;;;:::o;33049:148::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33120:4:::1;33104:13;;:20;;;;;;;;;;;;;;;;;;33149:4;33135:11;;:18;;;;;;;;;;;;;;;;;;33177:12;33164:10;:25;;;;33049:148::o:0;21467:79::-;21505:7;21532:6;;;;;;;;;;;21525:13;;21467:79;:::o;30232:31::-;;;;:::o;34654:101::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34740:7:::1;34726:11;;:21;;;;;;;;;;;;;;;;;;34654:101:::0;:::o;7765:104::-;7821:13;7854:7;7847:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7765:104;:::o;35422:245::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35529:13:::1;35521:21;;:4;:21;;;;35513:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35618:41;35647:4;35653:5;35618:28;:41::i;:::-;35422:245:::0;;:::o;11858:269::-;11951:4;11968:129;11977:12;:10;:12::i;:::-;11991:7;12000:96;12039:15;12000:96;;;;;;;;;;;;;;;;;:11;:25;12012:12;:10;:12::i;:::-;12000:25;;;;;;;;;;;;;;;:34;12026:7;12000:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11968:8;:129::i;:::-;12115:4;12108:11;;11858:269;;;;:::o;9181:175::-;9267:4;9284:42;9294:12;:10;:12::i;:::-;9308:9;9319:6;9284:9;:42::i;:::-;9344:4;9337:11;;9181:175;;;;:::o;35874:208::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36011:15:::1;;;;;;;;;;;35968:59;;35991:18;35968:59;;;;;;;;;;;;36056:18;36038:15;;:36;;;;;;;;;;;;;;;;;;35874:208:::0;:::o;30705:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30043:33::-;;;;;;;;;;;;;:::o;35231:182::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35347:8:::1;35316:19;:28;35336:7;35316:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35387:7;35371:34;;;35396:8;35371:34;;;;;;:::i;:::-;;;;;;;;35231:182:::0;;:::o;34189:215::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34311:4:::1;34305;34301:1;34285:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34284:31;;;;:::i;:::-;34274:6;:41;;34266:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34389:6;34379;:17;;;;:::i;:::-;34367:9;:29;;;;34189:215:::0;:::o;29887:35::-;;;;:::o;33560:377::-;33641:4;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33698:6:::1;33693:2;33677:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:27;;;;:::i;:::-;33664:9;:40;;33656:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33810:4;33805:2;33789:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;33776:9;:38;;33768:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;33900:9;33879:18;:30;;;;33926:4;33919:11;;33560:377:::0;;;:::o;30123:27::-;;;;:::o;34764:222::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34855:13:::1;34837:15;:31;;;;34894:15;;34879:12;:30;;;;34944:1;34928:12;;:17;;34920:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34764:222:::0;:::o;9420:151::-;9509:7;9536:11;:18;9548:5;9536:18;;;;;;;;;;;;;;;:27;9555:7;9536:27;;;;;;;;;;;;;;;;9529:34;;9420:151;;;;:::o;29929:33::-;;;;:::o;22542:244::-;21690:12;:10;:12::i;:::-;21680:22;;:6;;;;;;;;;;;:22;;;21672:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22651:1:::1;22631:22;;:8;:22;;;;22623:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22741:8;22712:38;;22733:6;;;;;;;;;;;22712:38;;;;;;;;;;;;22770:8;22761:6;;:17;;;;;;;;;;;;;;;;;;22542:244:::0;:::o;29969:24::-;;;;:::o;16435:182::-;16493:7;16513:9;16529:1;16525;:5;;;;:::i;:::-;16513:17;;16554:1;16549;:6;;16541:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16608:1;16601:8;;;16435:182;;;;:::o;147:98::-;200:7;227:10;220:17;;147:98;:::o;15054:381::-;15207:1;15190:19;;:5;:19;;;;15182:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15288:1;15269:21;;:7;:21;;;;15261:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15373:6;15343:11;:18;15355:5;15343:18;;;;;;;;;;;;;;;:27;15362:7;15343:27;;;;;;;;;;;;;;;:36;;;;15411:7;15395:32;;15404:5;15395:32;;;15420:6;15395:32;;;;;;:::i;:::-;;;;;;;;15054:381;;;:::o;36228:3005::-;36376:1;36360:18;;:4;:18;;;;36352:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36453:1;36439:16;;:2;:16;;;;36431:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36530:1;36520:6;:11;36517:92;;;36548:28;36564:4;36570:2;36574:1;36548:15;:28::i;:::-;36591:7;;36517:92;36626:14;;;;;;;;;;;36623:1232;;;36686:7;:5;:7::i;:::-;36678:15;;:4;:15;;;;:49;;;;;36720:7;:5;:7::i;:::-;36714:13;;:2;:13;;;;36678:49;:86;;;;;36762:1;36748:16;;:2;:16;;;;36678:86;:128;;;;;36799:6;36785:21;;:2;:21;;;;36678:128;:158;;;;;36828:8;;;;;;;;;;;36827:9;36678:158;36656:1188;;;36874:13;;;;;;;;;;;36870:148;;36919:19;:25;36939:4;36919:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36948:19;:23;36968:2;36948:23;;;;;;;;;;;;;;;;;;;;;;;;;36919:52;36911:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36870:148;37070:25;:31;37096:4;37070:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37106:31;:35;37138:2;37106:35;;;;;;;;;;;;;;;;;;;;;;;;;37105:36;37070:71;37066:763;;;37188:20;;37178:6;:30;;37170:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37327:9;;37310:13;37320:2;37310:9;:13::i;:::-;37301:6;:22;;;;:::i;:::-;:35;;37293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37066:763;;;37439:25;:29;37465:2;37439:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37473:31;:37;37505:4;37473:37;;;;;;;;;;;;;;;;;;;;;;;;;37472:38;37439:71;37435:394;;;37557:20;;37547:6;:30;;37539:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37435:394;;;37683:31;:35;37715:2;37683:35;;;;;;;;;;;;;;;;;;;;;;;;;37679:150;;37776:9;;37759:13;37769:2;37759:9;:13::i;:::-;37750:6;:22;;;;:::i;:::-;:35;;37742:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37679:150;37435:394;37066:763;36656:1188;36623:1232;37863:28;37894:24;37912:4;37894:9;:24::i;:::-;37863:55;;37929:12;37968:18;;37944:20;:42;;37929:57;;38018:7;:35;;;;;38042:11;;;;;;;;;;;38018:35;:61;;;;;38071:8;;;;;;;;;;;38070:9;38018:61;:110;;;;;38097:25;:31;38123:4;38097:31;;;;;;;;;;;;;;;;;;;;;;;;;38096:32;38018:110;:153;;;;;38146:19;:25;38166:4;38146:25;;;;;;;;;;;;;;;;;;;;;;;;;38145:26;38018:153;:194;;;;;38189:19;:23;38209:2;38189:23;;;;;;;;;;;;;;;;;;;;;;;;;38188:24;38018:194;38000:328;;;38250:4;38239:8;;:15;;;;;;;;;;;;;;;;;;38272:10;:8;:10::i;:::-;38311:5;38300:8;;:16;;;;;;;;;;;;;;;;;;38000:328;38341:12;38357:8;;;;;;;;;;;38356:9;38341:24;;38467:19;:25;38487:4;38467:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38496:19;:23;38516:2;38496:23;;;;;;;;;;;;;;;;;;;;;;;;;38467:52;38464:99;;;38546:5;38536:15;;38464:99;38576:12;38680:7;38677:501;;;38731:25;:29;38757:2;38731:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38780:1;38764:13;;:17;38731:50;38727:301;;;38808:34;38838:3;38808:25;38819:13;;38808:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38801:41;;38727:301;;;38903:25;:31;38929:4;38903:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38953:1;38938:12;;:16;38903:51;38900:128;;;38979:33;39008:3;38979:24;38990:12;;38979:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38972:40;;38900:128;38727:301;39055:1;39048:4;:8;39045:93;;;39080:42;39096:4;39110;39117;39080:15;:42::i;:::-;39045:93;39162:4;39152:14;;;;;:::i;:::-;;;38677:501;39192:33;39208:4;39214:2;39218:6;39192:15;:33::i;:::-;36341:2892;;;;36228:3005;;;;:::o;17341:193::-;17427:7;17460:1;17455;:6;;17463:12;17447:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17487:9;17503:1;17499;:5;;;;:::i;:::-;17487:17;;17525:1;17518:8;;;17341:193;;;;;:::o;35676:189::-;35793:5;35759:25;:31;35785:4;35759:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35851:5;35817:40;;35845:4;35817:40;;;;;;;;;;;;35676:189;;:::o;12618:575::-;12776:1;12758:20;;:6;:20;;;;12750:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12860:1;12839:23;;:9;:23;;;;12831:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12916:47;12937:6;12945:9;12956:6;12916:20;:47::i;:::-;12997:71;13019:6;12997:71;;;;;;;;;;;;;;;;;:9;:17;13007:6;12997:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12977:9;:17;12987:6;12977:17;;;;;;;;;;;;;;;:91;;;;13102:32;13127:6;13102:9;:20;13112:9;13102:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13079:9;:20;13089:9;13079:20;;;;;;;;;;;;;;;:55;;;;13167:9;13150:35;;13159:6;13150:35;;;13178:6;13150:35;;;;;;:::i;:::-;;;;;;;;12618:575;;;:::o;39846:536::-;39885:23;39911:24;39929:4;39911:9;:24::i;:::-;39885:50;;39946:12;39994:1;39975:15;:20;39972:34;;;39998:7;;;;39972:34;40061:2;40040:18;;:23;;;;:::i;:::-;40022:15;:41;40019:111;;;40116:2;40095:18;;:23;;;;:::i;:::-;40077:41;;40019:111;40192:26;40221:15;40192:44;;40247:36;40264:18;40247:16;:36::i;:::-;40319:15;;;;;;;;;;;40311:29;;40348:21;40311:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40298:76;;;;;39874:508;;;39846:536;:::o;17794:473::-;17852:7;18102:1;18097;:6;18093:47;;;18127:1;18120:8;;;;18093:47;18153:9;18169:1;18165;:5;;;;:::i;:::-;18153:17;;18198:1;18193;18189;:5;;;;:::i;:::-;:10;18181:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18258:1;18251:8;;;17794:473;;;;;:::o;18744:132::-;18802:7;18829:39;18833:1;18836;18829:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18822:46;;18744:132;;;;:::o;16039:125::-;;;;:::o;39243:594::-;39372:21;39410:1;39396:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39372:40;;39441:4;39423;39428:1;39423:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39467:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39457:4;39462:1;39457:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39503:62;39520:4;39535:15;39553:11;39503:8;:62::i;:::-;39605:15;:66;;;39686:11;39712:1;39756:4;39783;39803:15;39605:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39298:539;39243:594;:::o;19373:279::-;19459:7;19491:1;19487;:5;19494:12;19479:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19518:9;19534:1;19530;:5;;;;:::i;:::-;19518:17;;19643:1;19636:8;;;19373:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:182::-;9097:34;9093:1;9085:6;9081:14;9074:58;8957:182;:::o;9145:366::-;9287:3;9308:67;9372:2;9367:3;9308:67;:::i;:::-;9301:74;;9384:93;9473:3;9384:93;:::i;:::-;9502:2;9497:3;9493:12;9486:19;;9145:366;;;:::o;9517:419::-;9683:4;9721:2;9710:9;9706:18;9698:26;;9770:9;9764:4;9760:20;9756:1;9745:9;9741:17;9734:47;9798:131;9924:4;9798:131;:::i;:::-;9790:139;;9517:419;;;:::o;9942:180::-;9990:77;9987:1;9980:88;10087:4;10084:1;10077:15;10111:4;10108:1;10101:15;10128:348;10168:7;10191:20;10209:1;10191:20;:::i;:::-;10186:25;;10225:20;10243:1;10225:20;:::i;:::-;10220:25;;10413:1;10345:66;10341:74;10338:1;10335:81;10330:1;10323:9;10316:17;10312:105;10309:131;;;10420:18;;:::i;:::-;10309:131;10468:1;10465;10461:9;10450:20;;10128:348;;;;:::o;10482:180::-;10530:77;10527:1;10520:88;10627:4;10624:1;10617:15;10651:4;10648:1;10641:15;10668:185;10708:1;10725:20;10743:1;10725:20;:::i;:::-;10720:25;;10759:20;10777:1;10759:20;:::i;:::-;10754:25;;10798:1;10788:35;;10803:18;;:::i;:::-;10788:35;10845:1;10842;10838:9;10833:14;;10668:185;;;;:::o;10859:234::-;10999:34;10995:1;10987:6;10983:14;10976:58;11068:17;11063:2;11055:6;11051:15;11044:42;10859:234;:::o;11099:366::-;11241:3;11262:67;11326:2;11321:3;11262:67;:::i;:::-;11255:74;;11338:93;11427:3;11338:93;:::i;:::-;11456:2;11451:3;11447:12;11440:19;;11099:366;;;:::o;11471:419::-;11637:4;11675:2;11664:9;11660:18;11652:26;;11724:9;11718:4;11714:20;11710:1;11699:9;11695:17;11688:47;11752:131;11878:4;11752:131;:::i;:::-;11744:139;;11471:419;;;:::o;11896:178::-;12036:30;12032:1;12024:6;12020:14;12013:54;11896:178;:::o;12080:366::-;12222:3;12243:67;12307:2;12302:3;12243:67;:::i;:::-;12236:74;;12319:93;12408:3;12319:93;:::i;:::-;12437:2;12432:3;12428:12;12421:19;;12080:366;;;:::o;12452:419::-;12618:4;12656:2;12645:9;12641:18;12633:26;;12705:9;12699:4;12695:20;12691:1;12680:9;12676:17;12669:47;12733:131;12859:4;12733:131;:::i;:::-;12725:139;;12452:419;;;:::o;12877:244::-;13017:34;13013:1;13005:6;13001:14;12994:58;13086:27;13081:2;13073:6;13069:15;13062:52;12877:244;:::o;13127:366::-;13269:3;13290:67;13354:2;13349:3;13290:67;:::i;:::-;13283:74;;13366:93;13455:3;13366:93;:::i;:::-;13484:2;13479:3;13475:12;13468:19;;13127:366;;;:::o;13499:419::-;13665:4;13703:2;13692:9;13688:18;13680:26;;13752:9;13746:4;13742:20;13738:1;13727:9;13723:17;13716:47;13780:131;13906:4;13780:131;:::i;:::-;13772:139;;13499:419;;;:::o;13924:223::-;14064:34;14060:1;14052:6;14048:14;14041:58;14133:6;14128:2;14120:6;14116:15;14109:31;13924:223;:::o;14153:366::-;14295:3;14316:67;14380:2;14375:3;14316:67;:::i;:::-;14309:74;;14392:93;14481:3;14392:93;:::i;:::-;14510:2;14505:3;14501:12;14494:19;;14153:366;;;:::o;14525:419::-;14691:4;14729:2;14718:9;14714:18;14706:26;;14778:9;14772:4;14768:20;14764:1;14753:9;14749:17;14742:47;14806:131;14932:4;14806:131;:::i;:::-;14798:139;;14525:419;;;:::o;14950:236::-;15090:34;15086:1;15078:6;15074:14;15067:58;15159:19;15154:2;15146:6;15142:15;15135:44;14950:236;:::o;15192:366::-;15334:3;15355:67;15419:2;15414:3;15355:67;:::i;:::-;15348:74;;15431:93;15520:3;15431:93;:::i;:::-;15549:2;15544:3;15540:12;15533:19;;15192:366;;;:::o;15564:419::-;15730:4;15768:2;15757:9;15753:18;15745:26;;15817:9;15811:4;15807:20;15803:1;15792:9;15788:17;15781:47;15845:131;15971:4;15845:131;:::i;:::-;15837:139;;15564:419;;;:::o;15989:237::-;16129:34;16125:1;16117:6;16113:14;16106:58;16198:20;16193:2;16185:6;16181:15;16174:45;15989:237;:::o;16232:366::-;16374:3;16395:67;16459:2;16454:3;16395:67;:::i;:::-;16388:74;;16471:93;16560:3;16471:93;:::i;:::-;16589:2;16584:3;16580:12;16573:19;;16232:366;;;:::o;16604:419::-;16770:4;16808:2;16797:9;16793:18;16785:26;;16857:9;16851:4;16847:20;16843:1;16832:9;16828:17;16821:47;16885:131;17011:4;16885:131;:::i;:::-;16877:139;;16604:419;;;:::o;17029:225::-;17169:34;17165:1;17157:6;17153:14;17146:58;17238:8;17233:2;17225:6;17221:15;17214:33;17029:225;:::o;17260:366::-;17402:3;17423:67;17487:2;17482:3;17423:67;:::i;:::-;17416:74;;17499:93;17588:3;17499:93;:::i;:::-;17617:2;17612:3;17608:12;17601:19;;17260:366;;;:::o;17632:419::-;17798:4;17836:2;17825:9;17821:18;17813:26;;17885:9;17879:4;17875:20;17871:1;17860:9;17856:17;17849:47;17913:131;18039:4;17913:131;:::i;:::-;17905:139;;17632:419;;;:::o;18057:305::-;18097:3;18116:20;18134:1;18116:20;:::i;:::-;18111:25;;18150:20;18168:1;18150:20;:::i;:::-;18145:25;;18304:1;18236:66;18232:74;18229:1;18226:81;18223:107;;;18310:18;;:::i;:::-;18223:107;18354:1;18351;18347:9;18340:16;;18057:305;;;;:::o;18368:177::-;18508:29;18504:1;18496:6;18492:14;18485:53;18368:177;:::o;18551:366::-;18693:3;18714:67;18778:2;18773:3;18714:67;:::i;:::-;18707:74;;18790:93;18879:3;18790:93;:::i;:::-;18908:2;18903:3;18899:12;18892:19;;18551:366;;;:::o;18923:419::-;19089:4;19127:2;19116:9;19112:18;19104:26;;19176:9;19170:4;19166:20;19162:1;19151:9;19147:17;19140:47;19204:131;19330:4;19204:131;:::i;:::-;19196:139;;18923:419;;;:::o;19348:223::-;19488:34;19484:1;19476:6;19472:14;19465:58;19557:6;19552:2;19544:6;19540:15;19533:31;19348:223;:::o;19577:366::-;19719:3;19740:67;19804:2;19799:3;19740:67;:::i;:::-;19733:74;;19816:93;19905:3;19816:93;:::i;:::-;19934:2;19929:3;19925:12;19918:19;;19577:366;;;:::o;19949:419::-;20115:4;20153:2;20142:9;20138:18;20130:26;;20202:9;20196:4;20192:20;20188:1;20177:9;20173:17;20166:47;20230:131;20356:4;20230:131;:::i;:::-;20222:139;;19949:419;;;:::o;20374:221::-;20514:34;20510:1;20502:6;20498:14;20491:58;20583:4;20578:2;20570:6;20566:15;20559:29;20374:221;:::o;20601:366::-;20743:3;20764:67;20828:2;20823:3;20764:67;:::i;:::-;20757:74;;20840:93;20929:3;20840:93;:::i;:::-;20958:2;20953:3;20949:12;20942:19;;20601:366;;;:::o;20973:419::-;21139:4;21177:2;21166:9;21162:18;21154:26;;21226:9;21220:4;21216:20;21212:1;21201:9;21197:17;21190:47;21254:131;21380:4;21254:131;:::i;:::-;21246:139;;20973:419;;;:::o;21398:224::-;21538:34;21534:1;21526:6;21522:14;21515:58;21607:7;21602:2;21594:6;21590:15;21583:32;21398:224;:::o;21628:366::-;21770:3;21791:67;21855:2;21850:3;21791:67;:::i;:::-;21784:74;;21867:93;21956:3;21867:93;:::i;:::-;21985:2;21980:3;21976:12;21969:19;;21628:366;;;:::o;22000:419::-;22166:4;22204:2;22193:9;22189:18;22181:26;;22253:9;22247:4;22243:20;22239:1;22228:9;22224:17;22217:47;22281:131;22407:4;22281:131;:::i;:::-;22273:139;;22000:419;;;:::o;22425:222::-;22565:34;22561:1;22553:6;22549:14;22542:58;22634:5;22629:2;22621:6;22617:15;22610:30;22425:222;:::o;22653:366::-;22795:3;22816:67;22880:2;22875:3;22816:67;:::i;:::-;22809:74;;22892:93;22981:3;22892:93;:::i;:::-;23010:2;23005:3;23001:12;22994:19;;22653:366;;;:::o;23025:419::-;23191:4;23229:2;23218:9;23214:18;23206:26;;23278:9;23272:4;23268:20;23264:1;23253:9;23249:17;23242:47;23306:131;23432:4;23306:131;:::i;:::-;23298:139;;23025:419;;;:::o;23450:172::-;23590:24;23586:1;23578:6;23574:14;23567:48;23450:172;:::o;23628:366::-;23770:3;23791:67;23855:2;23850:3;23791:67;:::i;:::-;23784:74;;23867:93;23956:3;23867:93;:::i;:::-;23985:2;23980:3;23976:12;23969:19;;23628:366;;;:::o;24000:419::-;24166:4;24204:2;24193:9;24189:18;24181:26;;24253:9;24247:4;24243:20;24239:1;24228:9;24224:17;24217:47;24281:131;24407:4;24281:131;:::i;:::-;24273:139;;24000:419;;;:::o;24425:240::-;24565:34;24561:1;24553:6;24549:14;24542:58;24634:23;24629:2;24621:6;24617:15;24610:48;24425:240;:::o;24671:366::-;24813:3;24834:67;24898:2;24893:3;24834:67;:::i;:::-;24827:74;;24910:93;24999:3;24910:93;:::i;:::-;25028:2;25023:3;25019:12;25012:19;;24671:366;;;:::o;25043:419::-;25209:4;25247:2;25236:9;25232:18;25224:26;;25296:9;25290:4;25286:20;25282:1;25271:9;25267:17;25260:47;25324:131;25450:4;25324:131;:::i;:::-;25316:139;;25043:419;;;:::o;25468:169::-;25608:21;25604:1;25596:6;25592:14;25585:45;25468:169;:::o;25643:366::-;25785:3;25806:67;25870:2;25865:3;25806:67;:::i;:::-;25799:74;;25882:93;25971:3;25882:93;:::i;:::-;26000:2;25995:3;25991:12;25984:19;;25643:366;;;:::o;26015:419::-;26181:4;26219:2;26208:9;26204:18;26196:26;;26268:9;26262:4;26258:20;26254:1;26243:9;26239:17;26232:47;26296:131;26422:4;26296:131;:::i;:::-;26288:139;;26015:419;;;:::o;26440:241::-;26580:34;26576:1;26568:6;26564:14;26557:58;26649:24;26644:2;26636:6;26632:15;26625:49;26440:241;:::o;26687:366::-;26829:3;26850:67;26914:2;26909:3;26850:67;:::i;:::-;26843:74;;26926:93;27015:3;26926:93;:::i;:::-;27044:2;27039:3;27035:12;27028:19;;26687:366;;;:::o;27059:419::-;27225:4;27263:2;27252:9;27248:18;27240:26;;27312:9;27306:4;27302:20;27298:1;27287:9;27283:17;27276:47;27340:131;27466:4;27340:131;:::i;:::-;27332:139;;27059:419;;;:::o;27484:191::-;27524:4;27544:20;27562:1;27544:20;:::i;:::-;27539:25;;27578:20;27596:1;27578:20;:::i;:::-;27573:25;;27617:1;27614;27611:8;27608:34;;;27622:18;;:::i;:::-;27608:34;27667:1;27664;27660:9;27652:17;;27484:191;;;;:::o;27681:147::-;27782:11;27819:3;27804:18;;27681:147;;;;:::o;27834:114::-;;:::o;27954:398::-;28113:3;28134:83;28215:1;28210:3;28134:83;:::i;:::-;28127:90;;28226:93;28315:3;28226:93;:::i;:::-;28344:1;28339:3;28335:11;28328:18;;27954:398;;;:::o;28358:379::-;28542:3;28564:147;28707:3;28564:147;:::i;:::-;28557:154;;28728:3;28721:10;;28358:379;;;:::o;28743:220::-;28883:34;28879:1;28871:6;28867:14;28860:58;28952:3;28947:2;28939:6;28935:15;28928:28;28743:220;:::o;28969:366::-;29111:3;29132:67;29196:2;29191:3;29132:67;:::i;:::-;29125:74;;29208:93;29297:3;29208:93;:::i;:::-;29326:2;29321:3;29317:12;29310:19;;28969:366;;;:::o;29341:419::-;29507:4;29545:2;29534:9;29530:18;29522:26;;29594:9;29588:4;29584:20;29580:1;29569:9;29565:17;29558:47;29622:131;29748:4;29622:131;:::i;:::-;29614:139;;29341:419;;;:::o;29766:180::-;29814:77;29811:1;29804:88;29911:4;29908:1;29901:15;29935:4;29932:1;29925:15;29952:180;30000:77;29997:1;29990:88;30097:4;30094:1;30087:15;30121:4;30118:1;30111:15;30138:143;30195:5;30226:6;30220:13;30211:22;;30242:33;30269:5;30242:33;:::i;:::-;30138:143;;;;:::o;30287:351::-;30357:6;30406:2;30394:9;30385:7;30381:23;30377:32;30374:119;;;30412:79;;:::i;:::-;30374:119;30532:1;30557:64;30613:7;30604:6;30593:9;30589:22;30557:64;:::i;:::-;30547:74;;30503:128;30287:351;;;;:::o;30644:85::-;30689:7;30718:5;30707:16;;30644:85;;;:::o;30735:158::-;30793:9;30826:61;30844:42;30853:32;30879:5;30853:32;:::i;:::-;30844:42;:::i;:::-;30826:61;:::i;:::-;30813:74;;30735:158;;;:::o;30899:147::-;30994:45;31033:5;30994:45;:::i;:::-;30989:3;30982:58;30899:147;;:::o;31052:114::-;31119:6;31153:5;31147:12;31137:22;;31052:114;;;:::o;31172:184::-;31271:11;31305:6;31300:3;31293:19;31345:4;31340:3;31336:14;31321:29;;31172:184;;;;:::o;31362:132::-;31429:4;31452:3;31444:11;;31482:4;31477:3;31473:14;31465:22;;31362:132;;;:::o;31500:108::-;31577:24;31595:5;31577:24;:::i;:::-;31572:3;31565:37;31500:108;;:::o;31614:179::-;31683:10;31704:46;31746:3;31738:6;31704:46;:::i;:::-;31782:4;31777:3;31773:14;31759:28;;31614:179;;;;:::o;31799:113::-;31869:4;31901;31896:3;31892:14;31884:22;;31799:113;;;:::o;31948:732::-;32067:3;32096:54;32144:5;32096:54;:::i;:::-;32166:86;32245:6;32240:3;32166:86;:::i;:::-;32159:93;;32276:56;32326:5;32276:56;:::i;:::-;32355:7;32386:1;32371:284;32396:6;32393:1;32390:13;32371:284;;;32472:6;32466:13;32499:63;32558:3;32543:13;32499:63;:::i;:::-;32492:70;;32585:60;32638:6;32585:60;:::i;:::-;32575:70;;32431:224;32418:1;32415;32411:9;32406:14;;32371:284;;;32375:14;32671:3;32664:10;;32072:608;;;31948:732;;;;:::o;32686:831::-;32949:4;32987:3;32976:9;32972:19;32964:27;;33001:71;33069:1;33058:9;33054:17;33045:6;33001:71;:::i;:::-;33082:80;33158:2;33147:9;33143:18;33134:6;33082:80;:::i;:::-;33209:9;33203:4;33199:20;33194:2;33183:9;33179:18;33172:48;33237:108;33340:4;33331:6;33237:108;:::i;:::-;33229:116;;33355:72;33423:2;33412:9;33408:18;33399:6;33355:72;:::i;:::-;33437:73;33505:3;33494:9;33490:19;33481:6;33437:73;:::i;:::-;32686:831;;;;;;;;:::o
Swarm Source
ipfs://feebecad2277db53a7ef4cc75bf681a8a2fe4f06e0869a1b1b8cb70c027a0255
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.