Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,510 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 24591838 | 1 hr ago | IN | 0 ETH | 0.00001608 | ||||
| Transfer | 24591537 | 2 hrs ago | IN | 0 ETH | 0.00001534 | ||||
| Transfer | 24591236 | 3 hrs ago | IN | 0 ETH | 0.0000111 | ||||
| Transfer | 24590936 | 4 hrs ago | IN | 0 ETH | 0.00000916 | ||||
| Transfer | 24590635 | 5 hrs ago | IN | 0 ETH | 0.00001056 | ||||
| Transfer | 24590318 | 6 hrs ago | IN | 0 ETH | 0.00001386 | ||||
| Transfer | 24590018 | 7 hrs ago | IN | 0 ETH | 0.00000821 | ||||
| Transfer | 24589717 | 8 hrs ago | IN | 0 ETH | 0.00000525 | ||||
| Transfer | 24589417 | 9 hrs ago | IN | 0 ETH | 0.00000743 | ||||
| Transfer | 24589118 | 10 hrs ago | IN | 0 ETH | 0.00001028 | ||||
| Transfer | 24588818 | 11 hrs ago | IN | 0 ETH | 0.00001056 | ||||
| Transfer | 24588517 | 12 hrs ago | IN | 0 ETH | 0.00000938 | ||||
| Transfer | 24588217 | 13 hrs ago | IN | 0 ETH | 0.00001022 | ||||
| Transfer | 24587916 | 14 hrs ago | IN | 0 ETH | 0.00000724 | ||||
| Transfer | 24587616 | 15 hrs ago | IN | 0 ETH | 0.00000999 | ||||
| Transfer | 24587317 | 16 hrs ago | IN | 0 ETH | 0.00001038 | ||||
| Transfer | 24587016 | 17 hrs ago | IN | 0 ETH | 0.00000957 | ||||
| Transfer | 24586715 | 18 hrs ago | IN | 0 ETH | 0.00001294 | ||||
| Transfer | 24586415 | 19 hrs ago | IN | 0 ETH | 0.0000103 | ||||
| Transfer | 24586322 | 19 hrs ago | IN | 0 ETH | 0.0000255 | ||||
| Transfer | 24585773 | 21 hrs ago | IN | 0 ETH | 0.00002626 | ||||
| Transfer | 24584508 | 25 hrs ago | IN | 0 ETH | 0.00002315 | ||||
| Transfer | 24584195 | 26 hrs ago | IN | 0 ETH | 0.00002743 | ||||
| Transfer | 24583890 | 27 hrs ago | IN | 0 ETH | 0.00002187 | ||||
| Transfer | 24583590 | 28 hrs ago | IN | 0 ETH | 0.00000521 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Balance Of | 24591838 | 1 hr ago | 0 ETH | |||||
| Sync | 24591838 | 1 hr ago | 0 ETH | |||||
| Balance Of | 24591838 | 1 hr ago | 0 ETH | |||||
| Balance Of | 24591537 | 2 hrs ago | 0 ETH | |||||
| Sync | 24591537 | 2 hrs ago | 0 ETH | |||||
| Balance Of | 24591537 | 2 hrs ago | 0 ETH | |||||
| Balance Of | 24591236 | 3 hrs ago | 0 ETH | |||||
| Sync | 24591236 | 3 hrs ago | 0 ETH | |||||
| Balance Of | 24591236 | 3 hrs ago | 0 ETH | |||||
| Balance Of | 24590936 | 4 hrs ago | 0 ETH | |||||
| Sync | 24590936 | 4 hrs ago | 0 ETH | |||||
| Balance Of | 24590936 | 4 hrs ago | 0 ETH | |||||
| Balance Of | 24590635 | 5 hrs ago | 0 ETH | |||||
| Sync | 24590635 | 5 hrs ago | 0 ETH | |||||
| Balance Of | 24590635 | 5 hrs ago | 0 ETH | |||||
| Balance Of | 24590318 | 6 hrs ago | 0 ETH | |||||
| Sync | 24590318 | 6 hrs ago | 0 ETH | |||||
| Balance Of | 24590318 | 6 hrs ago | 0 ETH | |||||
| Balance Of | 24590018 | 7 hrs ago | 0 ETH | |||||
| Sync | 24590018 | 7 hrs ago | 0 ETH | |||||
| Balance Of | 24590018 | 7 hrs ago | 0 ETH | |||||
| Balance Of | 24589717 | 8 hrs ago | 0 ETH | |||||
| Sync | 24589717 | 8 hrs ago | 0 ETH | |||||
| Balance Of | 24589717 | 8 hrs ago | 0 ETH | |||||
| Balance Of | 24589449 | 9 hrs ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
YE
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-11-25
*/
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from,
address to,
uint256 amount
) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, 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}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, 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}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol
pragma solidity >=0.5.0;
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;
}
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol
pragma solidity >=0.5.0;
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;
}
// File: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router01.sol
pragma solidity >=0.6.2;
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);
}
// File: https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol
pragma solidity >=0.6.2;
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;
}
// File: YE.sol
pragma solidity >=0.8.10;
contract YE is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address public constant deadAddress = address(0xdead);
bool private swapping;
address public marketingWallet;
address public devWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
uint256 public percentForLPBurn = 25; // 25 = .25%
bool public lpBurnEnabled = true;
uint256 public lpBurnFrequency = 3600 seconds;
uint256 public lastLpBurnTime;
uint256 public manualBurnFrequency = 30 minutes;
uint256 public lastManualLpBurnTime;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
// Anti-bot and anti-whale mappings and variables
mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
bool public transferDelayEnabled = true;
uint256 public buyTotalFees;
uint256 public buyMarketingFee;
uint256 public buyLiquidityFee;
uint256 public buyDevFee;
uint256 public sellTotalFees;
uint256 public sellMarketingFee;
uint256 public sellLiquidityFee;
uint256 public sellDevFee;
uint256 public tokensForMarketing;
uint256 public tokensForLiquidity;
uint256 public tokensForDev;
/******************/
// exlcude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping(address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event marketingWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event devWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
event AutoNukeLP();
event ManualNukeLP();
constructor() ERC20("President Kanye Inu", "YE") {
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 = 0;
uint256 _buyLiquidityFee = 0;
uint256 _buyDevFee = 0;
uint256 _sellMarketingFee = 0;
uint256 _sellLiquidityFee = 0;
uint256 _sellDevFee = 0;
uint256 totalSupply = 1_000_000_000 * 1e18;
maxTransactionAmount = 20_000_000 * 1e18; // 2% from total supply maxTransactionAmountTxn
maxWallet = 20_000_000 * 1e18; // 3% from total supply maxWallet
swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet
buyMarketingFee = _buyMarketingFee;
buyLiquidityFee = _buyLiquidityFee;
buyDevFee = _buyDevFee;
buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
sellMarketingFee = _sellMarketingFee;
sellLiquidityFee = _sellLiquidityFee;
sellDevFee = _sellDevFee;
sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
marketingWallet = address(0x4Fd0139c52426fea27Efb1d1C25cc96226033aDf); // set as marketing wallet
devWallet = address(0x4Fd0139c52426fea27Efb1d1C25cc96226033aDf); // set as dev wallet
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(0xdead), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, totalSupply);
}
receive() external payable {}
// once enabled, can never be turned off
function enableTrading() external onlyOwner {
tradingActive = true;
swapEnabled = true;
lastLpBurnTime = block.timestamp;
}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool) {
limitsInEffect = false;
return true;
}
// disable Transfer delay - cannot be reenabled
function disableTransferDelay() external onlyOwner returns (bool) {
transferDelayEnabled = false;
return true;
}
// change the minimum amount of tokens to sell from fees
function updateSwapTokensAtAmount(uint256 newAmount)
external
onlyOwner
returns (bool)
{
require(
newAmount >= (totalSupply() * 1) / 100000,
"Swap amount cannot be lower than 0.001% total supply."
);
require(
newAmount <= (totalSupply() * 5) / 1000,
"Swap amount cannot be higher than 0.5% total supply."
);
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 1) / 1000) / 1e18,
"Cannot set maxTransactionAmount lower than 0.1%"
);
maxTransactionAmount = newNum * (10**18);
}
function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 5) / 1000) / 1e18,
"Cannot set maxWallet lower than 0.5%"
);
maxWallet = newNum * (10**18);
}
function excludeFromMaxTransaction(address updAds, bool isEx)
public
onlyOwner
{
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
// only use to disable contract sales if absolutely necessary (emergency use only)
function updateSwapEnabled(bool enabled) external onlyOwner {
swapEnabled = enabled;
}
function updateBuyFees(
uint256 _marketingFee,
uint256 _liquidityFee,
uint256 _devFee
) external onlyOwner {
buyMarketingFee = _marketingFee;
buyLiquidityFee = _liquidityFee;
buyDevFee = _devFee;
buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
require(buyTotalFees <= 11, "Must keep fees at 11% or less");
}
function updateSellFees(
uint256 _marketingFee,
uint256 _liquidityFee,
uint256 _devFee
) external onlyOwner {
sellMarketingFee = _marketingFee;
sellLiquidityFee = _liquidityFee;
sellDevFee = _devFee;
sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
require(sellTotalFees <= 11, "Must keep fees at 11% 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 updateDevWallet(address newWallet) external onlyOwner {
emit devWalletUpdated(newWallet, devWallet);
devWallet = newWallet;
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
event BoughtEarly(address indexed sniper);
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsInEffect) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
) {
if (!tradingActive) {
require(
_isExcludedFromFees[from] || _isExcludedFromFees[to],
"Trading is not active."
);
}
// at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
if (transferDelayEnabled) {
if (
to != owner() &&
to != address(uniswapV2Router) &&
to != address(uniswapV2Pair)
) {
require(
_holderLastTransferTimestamp[tx.origin] <
block.number,
"_transfer:: Transfer Delay enabled. Only one purchase per block allowed."
);
_holderLastTransferTimestamp[tx.origin] = block.number;
}
}
//when buy
if (
automatedMarketMakerPairs[from] &&
!_isExcludedMaxTransactionAmount[to]
) {
require(
amount <= maxTransactionAmount,
"Buy transfer amount exceeds the maxTransactionAmount."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] &&
!_isExcludedMaxTransactionAmount[from]
) {
require(
amount <= maxTransactionAmount,
"Sell transfer amount exceeds the maxTransactionAmount."
);
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
if (
!swapping &&
automatedMarketMakerPairs[to] &&
lpBurnEnabled &&
block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
!_isExcludedFromFees[from]
) {
autoBurnLiquidityPairTokens();
}
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);
tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
tokensForDev += (fees * sellDevFee) / sellTotalFees;
tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(100);
tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
tokensForDev += (fees * buyDevFee) / buyTotalFees;
tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
deadAddress,
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForLiquidity +
tokensForMarketing +
tokensForDev;
bool success;
if (contractBalance == 0 || totalTokensToSwap == 0) {
return;
}
if (contractBalance > swapTokensAtAmount * 20) {
contractBalance = swapTokensAtAmount * 20;
}
// Halve the amount of liquidity tokens
uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
totalTokensToSwap /
2;
uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
uint256 initialETHBalance = address(this).balance;
swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance.sub(initialETHBalance);
uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
totalTokensToSwap
);
uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
tokensForLiquidity = 0;
tokensForMarketing = 0;
tokensForDev = 0;
(success, ) = address(devWallet).call{value: ethForDev}("");
if (liquidityTokens > 0 && ethForLiquidity > 0) {
addLiquidity(liquidityTokens, ethForLiquidity);
emit SwapAndLiquify(
amountToSwapForETH,
ethForLiquidity,
tokensForLiquidity
);
}
(success, ) = address(marketingWallet).call{
value: address(this).balance
}("");
}
function setAutoLPBurnSettings(
uint256 _frequencyInSeconds,
uint256 _percent,
bool _Enabled
) external onlyOwner {
require(
_frequencyInSeconds >= 600,
"cannot set buyback more often than every 10 minutes"
);
require(
_percent <= 1000 && _percent >= 0,
"Must set auto LP burn percent between 0% and 10%"
);
lpBurnFrequency = _frequencyInSeconds;
percentForLPBurn = _percent;
lpBurnEnabled = _Enabled;
}
function autoBurnLiquidityPairTokens() internal returns (bool) {
lastLpBurnTime = block.timestamp;
// get balance of liquidity pair
uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
// calculate amount to burn
uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
10000
);
// pull tokens from pancakePair liquidity and move to dead address permanently
if (amountToBurn > 0) {
super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
}
//sync price since this is not in a swap transaction!
IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
pair.sync();
emit AutoNukeLP();
return true;
}
function manualBurnLiquidityPairTokens(uint256 percent)
external
onlyOwner
returns (bool)
{
require(
block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
"Must wait for cooldown to finish"
);
require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
lastManualLpBurnTime = block.timestamp;
// get balance of liquidity pair
uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
// calculate amount to burn
uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
// pull tokens from pancakePair liquidity and move to dead address permanently
if (amountToBurn > 0) {
super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
}
//sync price since this is not in a swap transaction!
IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
pair.sync();
emit ManualNukeLP();
return true;
}
}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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280601381526020017f507265736964656e74204b616e796520496e75000000000000000000000000008152506040518060400160405280600281526020017f594500000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000a97565b5080600490805190602001906200014792919062000a97565b5050506200016a6200015e620005c460201b60201c565b620005cc60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200069260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000bb1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000bb1565b6040518363ffffffff1660e01b8152600401620002e992919062000bf4565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000bb1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200069260201b60201c565b6200038c60a0516001620006fd60201b60201c565b60008060008060008060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006008819055506a108b2a2c28029094000000600a81905550612710600582620003dc919062000c5a565b620003e8919062000cea565b60098190555086601581905550856016819055508460178190555060175460165460155462000418919062000d22565b62000424919062000d22565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000454919062000d22565b62000460919062000d22565b601881905550734fd0139c52426fea27efb1d1c25cc96226033adf600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734fd0139c52426fea27efb1d1c25cc96226033adf600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000532620005246200079e60201b60201c565b6001620007c860201b60201c565b62000545306001620007c860201b60201c565b6200055a61dead6001620007c860201b60201c565b6200057c6200056e6200079e60201b60201c565b60016200069260201b60201c565b6200058f3060016200069260201b60201c565b620005a461dead60016200069260201b60201c565b620005b633826200088360201b60201c565b505050505050505062000f41565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006a2620009fc60201b60201c565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007d8620009fc60201b60201c565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000877919062000d9c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ed9062000e1a565b60405180910390fd5b6200090a6000838362000a8d60201b60201c565b80600260008282546200091e919062000d22565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000975919062000d22565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009dc919062000e4d565b60405180910390a3620009f86000838362000a9260201b60201c565b5050565b62000a0c620005c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a326200079e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a829062000eba565b60405180910390fd5b565b505050565b505050565b82805462000aa59062000f0b565b90600052602060002090601f01602090048101928262000ac9576000855562000b15565b82601f1062000ae457805160ff191683800117855562000b15565b8280016001018555821562000b15579182015b8281111562000b1457825182559160200191906001019062000af7565b5b50905062000b24919062000b28565b5090565b5b8082111562000b4357600081600090555060010162000b29565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b798262000b4c565b9050919050565b62000b8b8162000b6c565b811462000b9757600080fd5b50565b60008151905062000bab8162000b80565b92915050565b60006020828403121562000bca5762000bc962000b47565b5b600062000bda8482850162000b9a565b91505092915050565b62000bee8162000b6c565b82525050565b600060408201905062000c0b600083018562000be3565b62000c1a602083018462000be3565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c678262000c21565b915062000c748362000c21565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cb05762000caf62000c2b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cf78262000c21565b915062000d048362000c21565b92508262000d175762000d1662000cbb565b5b828204905092915050565b600062000d2f8262000c21565b915062000d3c8362000c21565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d745762000d7362000c2b565b5b828201905092915050565b60008115159050919050565b62000d968162000d7f565b82525050565b600060208201905062000db3600083018462000d8b565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e02601f8362000db9565b915062000e0f8262000dca565b602082019050919050565b6000602082019050818103600083015262000e358162000df3565b9050919050565b62000e478162000c21565b82525050565b600060208201905062000e64600083018462000e3c565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ea260208362000db9565b915062000eaf8262000e6a565b602082019050919050565b6000602082019050818103600083015262000ed58162000e93565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f2457607f821691505b6020821081141562000f3b5762000f3a62000edc565b5b50919050565b60805160a0516152e062000fc9600039600081816111cc0152818161163c01528181611d7701528181611e2e01528181611e5b015281816125a9015281816136ad015281816137660152613793015260008181610f950152818161255101528181613909015281816139ea01528181613a1101528181613aad0152613ad401526152e06000f3fe6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190613c1c565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613cd7565b610f51565b60405161041c9190613d32565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613d4d565b610f74565b6040516104599190613d32565b60405180910390f35b34801561046e57600080fd5b50610477610f93565b6040516104849190613dd9565b60405180910390f35b34801561049957600080fd5b506104a2610fb7565b6040516104af9190613e03565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613d4d565b610fc1565b005b3480156104ed57600080fd5b506104f6611089565b6040516105039190613e03565b60405180910390f35b34801561051857600080fd5b5061052161108f565b60405161052e9190613e03565b60405180910390f35b34801561054357600080fd5b5061054c611095565b6040516105599190613e03565b60405180910390f35b34801561056e57600080fd5b5061057761109b565b6040516105849190613e03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613e1e565b6110a1565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e4b565b61113c565b6040516105ea9190613d32565b60405180910390f35b3480156105ff57600080fd5b5061060861116b565b6040516106159190613ead565b60405180910390f35b34801561062a57600080fd5b50610633611171565b6040516106409190613e03565b60405180910390f35b34801561065557600080fd5b5061065e611177565b60405161066b9190613d32565b60405180910390f35b34801561068057600080fd5b5061068961118a565b6040516106969190613ee4565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190613cd7565b611193565b6040516106d39190613d32565b60405180910390f35b3480156106e857600080fd5b506106f16111ca565b6040516106fe9190613ead565b60405180910390f35b34801561071357600080fd5b5061071c6111ee565b6040516107299190613d32565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613d4d565b611201565b6040516107669190613d32565b60405180910390f35b34801561077b57600080fd5b50610784611257565b6040516107919190613e03565b60405180910390f35b3480156107a657600080fd5b506107af61125d565b6040516107bc9190613d32565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613d4d565b611270565b6040516107f99190613e03565b60405180910390f35b34801561080e57600080fd5b506108176112b8565b005b34801561082557600080fd5b50610840600480360381019061083b9190613f2b565b6112cc565b005b34801561084e57600080fd5b50610857611398565b6040516108649190613d32565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613f7e565b6113c4565b005b3480156108a257600080fd5b506108ab611427565b6040516108b89190613ead565b60405180910390f35b3480156108cd57600080fd5b506108d661144d565b6040516108e39190613e03565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613fbe565b611453565b005b34801561092157600080fd5b5061092a6114de565b005b34801561093857600080fd5b50610941611525565b60405161094e9190613ead565b60405180910390f35b34801561096357600080fd5b5061096c61154f565b6040516109799190613ead565b60405180910390f35b34801561098e57600080fd5b50610997611575565b6040516109a49190613e03565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190614011565b61157b565b005b3480156109e257600080fd5b506109eb6115a0565b6040516109f89190613c1c565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613f7e565b611632565b005b348015610a3657600080fd5b50610a3f6116d7565b604051610a4c9190613e03565b60405180910390f35b348015610a6157600080fd5b50610a6a6116dd565b604051610a779190613e03565b60405180910390f35b348015610a8c57600080fd5b50610a956116e3565b604051610aa29190613e03565b60405180910390f35b348015610ab757600080fd5b50610ac06116e9565b604051610acd9190613e03565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613cd7565b6116ef565b604051610b0a9190613d32565b60405180910390f35b348015610b1f57600080fd5b50610b28611766565b604051610b359190613e03565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190613cd7565b61176c565b604051610b729190613d32565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190613d4d565b61178f565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190613d4d565b611857565b604051610bd89190613d32565b60405180910390f35b348015610bed57600080fd5b50610bf6611877565b604051610c039190613d32565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613f7e565b61188a565b005b348015610c4157600080fd5b50610c5c6004803603810190610c579190613fbe565b61193b565b005b348015610c6a57600080fd5b50610c856004803603810190610c809190613e1e565b6119c6565b005b348015610c9357600080fd5b50610c9c611a61565b604051610ca99190613d32565b60405180910390f35b348015610cbe57600080fd5b50610cc7611a74565b604051610cd49190613e03565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190613e1e565b611a7a565b604051610d119190613d32565b60405180910390f35b348015610d2657600080fd5b50610d2f611b5b565b604051610d3c9190613e03565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d67919061403e565b611b61565b604051610d799190613e03565b60405180910390f35b348015610d8e57600080fd5b50610d97611be8565b604051610da49190613e03565b60405180910390f35b348015610db957600080fd5b50610dc2611bee565b604051610dcf9190613d32565b60405180910390f35b348015610de457600080fd5b50610ded611c1a565b604051610dfa9190613e03565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e259190613d4d565b611c20565b005b348015610e3857600080fd5b50610e41611ca4565b604051610e4e9190613e03565b60405180910390f35b348015610e6357600080fd5b50610e6c611caa565b604051610e799190613e03565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea49190613e1e565b611cb0565b604051610eb69190613d32565b60405180910390f35b606060038054610ece906140ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906140ad565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b600080610f5c611f14565b9050610f69818585611f1c565b600191505092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fc96120e7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110a96120e7565b670de0b6b3a76400006103e860016110bf610fb7565b6110c9919061410e565b6110d39190614197565b6110dd9190614197565b81101561111f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111169061423a565b60405180910390fd5b670de0b6b3a764000081611133919061410e565b60088190555050565b600080611147611f14565b9050611154858285612165565b61115f8585856121f1565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061119e611f14565b90506111bf8185856111b08589611b61565b6111ba919061425a565b611f1c565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c06120e7565b6112ca6000612f89565b565b6112d46120e7565b610258831015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614322565b60405180910390fd5b6103e8821115801561132c575060008210155b61136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906143b4565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006113a26120e7565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6113cc6120e7565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61145b6120e7565b826015819055508160168190555080601781905550601754601654601554611483919061425a565b61148d919061425a565b601481905550600b60145411156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614420565b60405180910390fd5b505050565b6114e66120e7565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6115836120e7565b80601160026101000a81548160ff02191690831515021790555050565b6060600480546115af906140ad565b80601f01602080910402602001604051908101604052809291908181526020018280546115db906140ad565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b61163a6120e7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c0906144b2565b60405180910390fd5b6116d3828261304f565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000806116fa611f14565b905060006117088286611b61565b90508381101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614544565b60405180910390fd5b61175a8286868403611f1c565b60019250505092915050565b600e5481565b600080611777611f14565b90506117848185856121f1565b600191505092915050565b6117976120e7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6118926120e7565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192f9190613d32565b60405180910390a25050565b6119436120e7565b8260198190555081601a8190555080601b81905550601b54601a5460195461196b919061425a565b611975919061425a565b601881905550600b60185411156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614420565b60405180910390fd5b505050565b6119ce6120e7565b670de0b6b3a76400006103e860056119e4610fb7565b6119ee919061410e565b6119f89190614197565b611a029190614197565b811015611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906145d6565b60405180910390fd5b670de0b6b3a764000081611a58919061410e565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6000611a846120e7565b620186a06001611a92610fb7565b611a9c919061410e565b611aa69190614197565b821015611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614668565b60405180910390fd5b6103e86005611af5610fb7565b611aff919061410e565b611b099190614197565b821115611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906146fa565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611bf86120e7565b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611c286120e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061478c565b60405180910390fd5b611ca181612f89565b50565b601a5481565b600a5481565b6000611cba6120e7565b600f54601054611cca919061425a565b4211611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906147f8565b60405180910390fd5b6103e8821115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d479061488a565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611db29190613ead565b602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df391906148bf565b90506000611e1e612710611e1086856130f090919063ffffffff16565b61310690919063ffffffff16565b90506000811115611e5757611e567f000000000000000000000000000000000000000000000000000000000000000061dead8361311c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f839061495e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906149f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120da9190613e03565b60405180910390a3505050565b6120ef611f14565b73ffffffffffffffffffffffffffffffffffffffff1661210d611525565b73ffffffffffffffffffffffffffffffffffffffff1614612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90614a5c565b60405180910390fd5b565b60006121718484611b61565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121eb57818110156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614ac8565b60405180910390fd5b6121ea8484848403611f1c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614bec565b60405180910390fd5b60008114156122eb576122e68383600061311c565b612f84565b601160009054906101000a900460ff16156129ae57612308611525565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123765750612346611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123af5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124025750600560149054906101000a900460ff16155b156129ad57601160019054906101000a900460ff166124fc57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124bc5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614c58565b60405180910390fd5b5b601360009054906101000a900460ff16156126c457612519611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125a057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126c35743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590614d10565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127675750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561280e576008548111156127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a890614da2565b60405180910390fd5b600a546127bd83611270565b826127c8919061425a565b1115612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090614e0e565b60405180910390fd5b6129ac565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b15750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612900576008548111156128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f290614ea0565b60405180910390fd5b6129ab565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129aa57600a5461295d83611270565b82612968919061425a565b11156129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614e0e565b60405180910390fd5b5b5b5b5b5b60006129b930611270565b9050600060095482101590508080156129de5750601160029054906101000a900460ff165b80156129f75750600560149054906101000a900460ff16155b8015612a4d5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aa35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af95750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3d576001600560146101000a81548160ff021916908315150217905550612b2161339d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612ba35750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bbb5750600c60009054906101000a900460ff165b8015612bd65750600d54600e54612bd2919061425a565b4210155b8015612c2c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3b57612c39613684565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf15750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cfb57600090505b60008115612f7457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5e57506000601854115b15612e2b57612d8b6064612d7d601854886130f090919063ffffffff16565b61310690919063ffffffff16565b9050601854601a5482612d9e919061410e565b612da89190614197565b601d6000828254612db9919061425a565b92505081905550601854601b5482612dd1919061410e565b612ddb9190614197565b601e6000828254612dec919061425a565b9250508190555060185460195482612e04919061410e565b612e0e9190614197565b601c6000828254612e1f919061425a565b92505081905550612f50565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e8657506000601454115b15612f4f57612eb36064612ea5601454886130f090919063ffffffff16565b61310690919063ffffffff16565b905060145460165482612ec6919061410e565b612ed09190614197565b601d6000828254612ee1919061425a565b9250508190555060145460175482612ef9919061410e565b612f039190614197565b601e6000828254612f14919061425a565b9250508190555060145460155482612f2c919061410e565b612f369190614197565b601c6000828254612f47919061425a565b925050819055505b5b6000811115612f6557612f6487308361311c565b5b8085612f719190614ec0565b94505b612f7f87878761311c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836130fe919061410e565b905092915050565b600081836131149190614197565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318390614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614bec565b60405180910390fd5b61320783838361384a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328490614f66565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613320919061425a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133849190613e03565b60405180910390a361339784848461384f565b50505050565b60006133a830611270565b90506000601e54601c54601d546133bf919061425a565b6133c9919061425a565b90506000808314806133db5750600082145b156133e857505050613682565b60146009546133f7919061410e565b83111561341057601460095461340d919061410e565b92505b6000600283601d5486613423919061410e565b61342d9190614197565b6134379190614197565b9050600061344e828661385490919063ffffffff16565b9050600047905061345e8261386a565b6000613473824761385490919063ffffffff16565b9050600061349e87613490601c54856130f090919063ffffffff16565b61310690919063ffffffff16565b905060006134c9886134bb601e54866130f090919063ffffffff16565b61310690919063ffffffff16565b905060008183856134da9190614ec0565b6134e49190614ec0565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354490614fb7565b60006040518083038185875af1925050503d8060008114613581576040519150601f19603f3d011682016040523d82523d6000602084013e613586565b606091505b50508098505060008711801561359c5750600081115b156135e9576135ab8782613aa7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516135e093929190614fcc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362f90614fb7565b60006040518083038185875af1925050503d806000811461366c576040519150601f19603f3d011682016040523d82523d6000602084013e613671565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016136e89190613ead565b602060405180830381865afa158015613705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372991906148bf565b90506000613756612710613748600b54856130f090919063ffffffff16565b61310690919063ffffffff16565b9050600081111561378f5761378e7f000000000000000000000000000000000000000000000000000000000000000061dead8361311c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137fc57600080fd5b505af1158015613810573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836138629190614ec0565b905092915050565b6000600267ffffffffffffffff81111561388757613886615003565b5b6040519080825280602002602001820160405280156138b55781602001602082028036833780820191505090505b50905030816000815181106138cd576138cc615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139969190615076565b816001815181106139aa576139a9615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a0f307f000000000000000000000000000000000000000000000000000000000000000084611f1c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a7195949392919061519c565b600060405180830381600087803b158015613a8b57600080fd5b505af1158015613a9f573d6000803e3d6000fd5b505050505050565b613ad2307f000000000000000000000000000000000000000000000000000000000000000084611f1c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b39969594939291906151f6565b60606040518083038185885af1158015613b57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b7c9190615257565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbd578082015181840152602081019050613ba2565b83811115613bcc576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bee82613b83565b613bf88185613b8e565b9350613c08818560208601613b9f565b613c1181613bd2565b840191505092915050565b60006020820190508181036000830152613c368184613be3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6e82613c43565b9050919050565b613c7e81613c63565b8114613c8957600080fd5b50565b600081359050613c9b81613c75565b92915050565b6000819050919050565b613cb481613ca1565b8114613cbf57600080fd5b50565b600081359050613cd181613cab565b92915050565b60008060408385031215613cee57613ced613c3e565b5b6000613cfc85828601613c8c565b9250506020613d0d85828601613cc2565b9150509250929050565b60008115159050919050565b613d2c81613d17565b82525050565b6000602082019050613d476000830184613d23565b92915050565b600060208284031215613d6357613d62613c3e565b5b6000613d7184828501613c8c565b91505092915050565b6000819050919050565b6000613d9f613d9a613d9584613c43565b613d7a565b613c43565b9050919050565b6000613db182613d84565b9050919050565b6000613dc382613da6565b9050919050565b613dd381613db8565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b613dfd81613ca1565b82525050565b6000602082019050613e186000830184613df4565b92915050565b600060208284031215613e3457613e33613c3e565b5b6000613e4284828501613cc2565b91505092915050565b600080600060608486031215613e6457613e63613c3e565b5b6000613e7286828701613c8c565b9350506020613e8386828701613c8c565b9250506040613e9486828701613cc2565b9150509250925092565b613ea781613c63565b82525050565b6000602082019050613ec26000830184613e9e565b92915050565b600060ff82169050919050565b613ede81613ec8565b82525050565b6000602082019050613ef96000830184613ed5565b92915050565b613f0881613d17565b8114613f1357600080fd5b50565b600081359050613f2581613eff565b92915050565b600080600060608486031215613f4457613f43613c3e565b5b6000613f5286828701613cc2565b9350506020613f6386828701613cc2565b9250506040613f7486828701613f16565b9150509250925092565b60008060408385031215613f9557613f94613c3e565b5b6000613fa385828601613c8c565b9250506020613fb485828601613f16565b9150509250929050565b600080600060608486031215613fd757613fd6613c3e565b5b6000613fe586828701613cc2565b9350506020613ff686828701613cc2565b925050604061400786828701613cc2565b9150509250925092565b60006020828403121561402757614026613c3e565b5b600061403584828501613f16565b91505092915050565b6000806040838503121561405557614054613c3e565b5b600061406385828601613c8c565b925050602061407485828601613c8c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140c557607f821691505b602082108114156140d9576140d861407e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061411982613ca1565b915061412483613ca1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561415d5761415c6140df565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141a282613ca1565b91506141ad83613ca1565b9250826141bd576141bc614168565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614224602f83613b8e565b915061422f826141c8565b604082019050919050565b6000602082019050818103600083015261425381614217565b9050919050565b600061426582613ca1565b915061427083613ca1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142a5576142a46140df565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061430c603383613b8e565b9150614317826142b0565b604082019050919050565b6000602082019050818103600083015261433b816142ff565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061439e603083613b8e565b91506143a982614342565b604082019050919050565b600060208201905081810360008301526143cd81614391565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b600061440a601d83613b8e565b9150614415826143d4565b602082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061449c603983613b8e565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061452e602583613b8e565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145c0602483613b8e565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614652603583613b8e565b915061465d826145f6565b604082019050919050565b6000602082019050818103600083015261468181614645565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146e4603483613b8e565b91506146ef82614688565b604082019050919050565b60006020820190508181036000830152614713816146d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614776602683613b8e565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006147e2602083613b8e565b91506147ed826147ac565b602082019050919050565b60006020820190508181036000830152614811816147d5565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614874602a83613b8e565b915061487f82614818565b604082019050919050565b600060208201905081810360008301526148a381614867565b9050919050565b6000815190506148b981613cab565b92915050565b6000602082840312156148d5576148d4613c3e565b5b60006148e3848285016148aa565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614948602483613b8e565b9150614953826148ec565b604082019050919050565b600060208201905081810360008301526149778161493b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149da602283613b8e565b91506149e58261497e565b604082019050919050565b60006020820190508181036000830152614a09816149cd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a46602083613b8e565b9150614a5182614a10565b602082019050919050565b60006020820190508181036000830152614a7581614a39565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614ab2601d83613b8e565b9150614abd82614a7c565b602082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b44602583613b8e565b9150614b4f82614ae8565b604082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd6602383613b8e565b9150614be182614b7a565b604082019050919050565b60006020820190508181036000830152614c0581614bc9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c42601683613b8e565b9150614c4d82614c0c565b602082019050919050565b60006020820190508181036000830152614c7181614c35565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cfa604983613b8e565b9150614d0582614c78565b606082019050919050565b60006020820190508181036000830152614d2981614ced565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8c603583613b8e565b9150614d9782614d30565b604082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df8601383613b8e565b9150614e0382614dc2565b602082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e8a603683613b8e565b9150614e9582614e2e565b604082019050919050565b60006020820190508181036000830152614eb981614e7d565b9050919050565b6000614ecb82613ca1565b9150614ed683613ca1565b925082821015614ee957614ee86140df565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f50602683613b8e565b9150614f5b82614ef4565b604082019050919050565b60006020820190508181036000830152614f7f81614f43565b9050919050565b600081905092915050565b50565b6000614fa1600083614f86565b9150614fac82614f91565b600082019050919050565b6000614fc282614f94565b9150819050919050565b6000606082019050614fe16000830186613df4565b614fee6020830185613df4565b614ffb6040830184613df4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061507081613c75565b92915050565b60006020828403121561508c5761508b613c3e565b5b600061509a84828501615061565b91505092915050565b6000819050919050565b60006150c86150c36150be846150a3565b613d7a565b613ca1565b9050919050565b6150d8816150ad565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61511381613c63565b82525050565b6000615125838361510a565b60208301905092915050565b6000602082019050919050565b6000615149826150de565b61515381856150e9565b935061515e836150fa565b8060005b8381101561518f5781516151768882615119565b975061518183615131565b925050600181019050615162565b5085935050505092915050565b600060a0820190506151b16000830188613df4565b6151be60208301876150cf565b81810360408301526151d0818661513e565b90506151df6060830185613e9e565b6151ec6080830184613df4565b9695505050505050565b600060c08201905061520b6000830189613e9e565b6152186020830188613df4565b61522560408301876150cf565b61523260608301866150cf565b61523f6080830185613e9e565b61524c60a0830184613df4565b979650505050505050565b6000806000606084860312156152705761526f613c3e565b5b600061527e868287016148aa565b935050602061528f868287016148aa565b92505060406152a0868287016148aa565b915050925092509256fea26469706673582212200c97be688cf8f6bfefd04f559b7dcf268903fb248d389c38b62c5f02c3702ebd64736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e03578063f637434214610e2c578063f8b45b0514610e57578063fe72b27a14610e82576103b8565b8063dd62ed3e14610d45578063e2f4560514610d82578063e884f26014610dad578063f11a24d314610dd8576103b8565b8063c876d0b9116100dc578063c876d0b914610c87578063c8c8ebe414610cb2578063d257b34f14610cdd578063d85ba06314610d1a576103b8565b8063bbc0c74214610be1578063c024666814610c0c578063c17b5b8c14610c35578063c18bc19514610c5e576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b13578063a9059cbb14610b3e578063aacebbe314610b7b578063b62496f514610ba4576103b8565b80639ec22c0e14610a555780639fccce3214610a80578063a0d82dc514610aab578063a457c2d714610ad6576103b8565b8063924de9b7116101c1578063924de9b7146109ad57806395d89b41146109d65780639a7a23d614610a015780639c3b4fdc14610a2a576103b8565b80638da5cb5b1461092c5780638ea5220f146109575780639213691314610982576103b8565b8063313ce567116102d7578063715018a61161026a57806375f0a8741161023957806375f0a874146108965780637bce5a04146108c15780638095d564146108ec5780638a8c523c14610915576103b8565b8063715018a614610802578063730c188814610819578063751039fc146108425780637571336a1461086d576103b8565b80634fbee193116102a65780634fbee193146107325780636a486a8e1461076f5780636ddd17131461079a57806370a08231146107c5576103b8565b8063313ce56714610674578063395093511461069f57806349bd5a5e146106dc5780634a62bb6514610707576103b8565b8063199ffc721161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562578063203e727e1461058d576103b8565b80631694505e1161038b5780631694505e1461046257806318160ddd1461048d5780631816467f146104b8578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ebf565b6040516103df9190613c1c565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613cd7565b610f51565b60405161041c9190613d32565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613d4d565b610f74565b6040516104599190613d32565b60405180910390f35b34801561046e57600080fd5b50610477610f93565b6040516104849190613dd9565b60405180910390f35b34801561049957600080fd5b506104a2610fb7565b6040516104af9190613e03565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613d4d565b610fc1565b005b3480156104ed57600080fd5b506104f6611089565b6040516105039190613e03565b60405180910390f35b34801561051857600080fd5b5061052161108f565b60405161052e9190613e03565b60405180910390f35b34801561054357600080fd5b5061054c611095565b6040516105599190613e03565b60405180910390f35b34801561056e57600080fd5b5061057761109b565b6040516105849190613e03565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613e1e565b6110a1565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613e4b565b61113c565b6040516105ea9190613d32565b60405180910390f35b3480156105ff57600080fd5b5061060861116b565b6040516106159190613ead565b60405180910390f35b34801561062a57600080fd5b50610633611171565b6040516106409190613e03565b60405180910390f35b34801561065557600080fd5b5061065e611177565b60405161066b9190613d32565b60405180910390f35b34801561068057600080fd5b5061068961118a565b6040516106969190613ee4565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190613cd7565b611193565b6040516106d39190613d32565b60405180910390f35b3480156106e857600080fd5b506106f16111ca565b6040516106fe9190613ead565b60405180910390f35b34801561071357600080fd5b5061071c6111ee565b6040516107299190613d32565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190613d4d565b611201565b6040516107669190613d32565b60405180910390f35b34801561077b57600080fd5b50610784611257565b6040516107919190613e03565b60405180910390f35b3480156107a657600080fd5b506107af61125d565b6040516107bc9190613d32565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613d4d565b611270565b6040516107f99190613e03565b60405180910390f35b34801561080e57600080fd5b506108176112b8565b005b34801561082557600080fd5b50610840600480360381019061083b9190613f2b565b6112cc565b005b34801561084e57600080fd5b50610857611398565b6040516108649190613d32565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613f7e565b6113c4565b005b3480156108a257600080fd5b506108ab611427565b6040516108b89190613ead565b60405180910390f35b3480156108cd57600080fd5b506108d661144d565b6040516108e39190613e03565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613fbe565b611453565b005b34801561092157600080fd5b5061092a6114de565b005b34801561093857600080fd5b50610941611525565b60405161094e9190613ead565b60405180910390f35b34801561096357600080fd5b5061096c61154f565b6040516109799190613ead565b60405180910390f35b34801561098e57600080fd5b50610997611575565b6040516109a49190613e03565b60405180910390f35b3480156109b957600080fd5b506109d460048036038101906109cf9190614011565b61157b565b005b3480156109e257600080fd5b506109eb6115a0565b6040516109f89190613c1c565b60405180910390f35b348015610a0d57600080fd5b50610a286004803603810190610a239190613f7e565b611632565b005b348015610a3657600080fd5b50610a3f6116d7565b604051610a4c9190613e03565b60405180910390f35b348015610a6157600080fd5b50610a6a6116dd565b604051610a779190613e03565b60405180910390f35b348015610a8c57600080fd5b50610a956116e3565b604051610aa29190613e03565b60405180910390f35b348015610ab757600080fd5b50610ac06116e9565b604051610acd9190613e03565b60405180910390f35b348015610ae257600080fd5b50610afd6004803603810190610af89190613cd7565b6116ef565b604051610b0a9190613d32565b60405180910390f35b348015610b1f57600080fd5b50610b28611766565b604051610b359190613e03565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190613cd7565b61176c565b604051610b729190613d32565b60405180910390f35b348015610b8757600080fd5b50610ba26004803603810190610b9d9190613d4d565b61178f565b005b348015610bb057600080fd5b50610bcb6004803603810190610bc69190613d4d565b611857565b604051610bd89190613d32565b60405180910390f35b348015610bed57600080fd5b50610bf6611877565b604051610c039190613d32565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613f7e565b61188a565b005b348015610c4157600080fd5b50610c5c6004803603810190610c579190613fbe565b61193b565b005b348015610c6a57600080fd5b50610c856004803603810190610c809190613e1e565b6119c6565b005b348015610c9357600080fd5b50610c9c611a61565b604051610ca99190613d32565b60405180910390f35b348015610cbe57600080fd5b50610cc7611a74565b604051610cd49190613e03565b60405180910390f35b348015610ce957600080fd5b50610d046004803603810190610cff9190613e1e565b611a7a565b604051610d119190613d32565b60405180910390f35b348015610d2657600080fd5b50610d2f611b5b565b604051610d3c9190613e03565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d67919061403e565b611b61565b604051610d799190613e03565b60405180910390f35b348015610d8e57600080fd5b50610d97611be8565b604051610da49190613e03565b60405180910390f35b348015610db957600080fd5b50610dc2611bee565b604051610dcf9190613d32565b60405180910390f35b348015610de457600080fd5b50610ded611c1a565b604051610dfa9190613e03565b60405180910390f35b348015610e0f57600080fd5b50610e2a6004803603810190610e259190613d4d565b611c20565b005b348015610e3857600080fd5b50610e41611ca4565b604051610e4e9190613e03565b60405180910390f35b348015610e6357600080fd5b50610e6c611caa565b604051610e799190613e03565b60405180910390f35b348015610e8e57600080fd5b50610ea96004803603810190610ea49190613e1e565b611cb0565b604051610eb69190613d32565b60405180910390f35b606060038054610ece906140ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610efa906140ad565b8015610f475780601f10610f1c57610100808354040283529160200191610f47565b820191906000526020600020905b815481529060010190602001808311610f2a57829003601f168201915b5050505050905090565b600080610f5c611f14565b9050610f69818585611f1c565b600191505092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fc96120e7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110a96120e7565b670de0b6b3a76400006103e860016110bf610fb7565b6110c9919061410e565b6110d39190614197565b6110dd9190614197565b81101561111f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111169061423a565b60405180910390fd5b670de0b6b3a764000081611133919061410e565b60088190555050565b600080611147611f14565b9050611154858285612165565b61115f8585856121f1565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b60008061119e611f14565b90506111bf8185856111b08589611b61565b6111ba919061425a565b611f1c565b600191505092915050565b7f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a81565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c06120e7565b6112ca6000612f89565b565b6112d46120e7565b610258831015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614322565b60405180910390fd5b6103e8821115801561132c575060008210155b61136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906143b4565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006113a26120e7565b6000601160006101000a81548160ff0219169083151502179055506001905090565b6113cc6120e7565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61145b6120e7565b826015819055508160168190555080601781905550601754601654601554611483919061425a565b61148d919061425a565b601481905550600b60145411156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090614420565b60405180910390fd5b505050565b6114e66120e7565b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6115836120e7565b80601160026101000a81548160ff02191690831515021790555050565b6060600480546115af906140ad565b80601f01602080910402602001604051908101604052809291908181526020018280546115db906140ad565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b5050505050905090565b61163a6120e7565b7f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c0906144b2565b60405180910390fd5b6116d3828261304f565b5050565b60175481565b60105481565b601e5481565b601b5481565b6000806116fa611f14565b905060006117088286611b61565b90508381101561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614544565b60405180910390fd5b61175a8286868403611f1c565b60019250505092915050565b600e5481565b600080611777611f14565b90506117848185856121f1565b600191505092915050565b6117976120e7565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6118926120e7565b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192f9190613d32565b60405180910390a25050565b6119436120e7565b8260198190555081601a8190555080601b81905550601b54601a5460195461196b919061425a565b611975919061425a565b601881905550600b60185411156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614420565b60405180910390fd5b505050565b6119ce6120e7565b670de0b6b3a76400006103e860056119e4610fb7565b6119ee919061410e565b6119f89190614197565b611a029190614197565b811015611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b906145d6565b60405180910390fd5b670de0b6b3a764000081611a58919061410e565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b6000611a846120e7565b620186a06001611a92610fb7565b611a9c919061410e565b611aa69190614197565b821015611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614668565b60405180910390fd5b6103e86005611af5610fb7565b611aff919061410e565b611b099190614197565b821115611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906146fa565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611bf86120e7565b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b611c286120e7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f9061478c565b60405180910390fd5b611ca181612f89565b50565b601a5481565b600a5481565b6000611cba6120e7565b600f54601054611cca919061425a565b4211611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906147f8565b60405180910390fd5b6103e8821115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d479061488a565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a6040518263ffffffff1660e01b8152600401611db29190613ead565b602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df391906148bf565b90506000611e1e612710611e1086856130f090919063ffffffff16565b61310690919063ffffffff16565b90506000811115611e5757611e567f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a61dead8361311c565b5b60007f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ec457600080fd5b505af1158015611ed8573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f839061495e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906149f0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120da9190613e03565b60405180910390a3505050565b6120ef611f14565b73ffffffffffffffffffffffffffffffffffffffff1661210d611525565b73ffffffffffffffffffffffffffffffffffffffff1614612163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215a90614a5c565b60405180910390fd5b565b60006121718484611b61565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121eb57818110156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614ac8565b60405180910390fd5b6121ea8484848403611f1c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614bec565b60405180910390fd5b60008114156122eb576122e68383600061311c565b612f84565b601160009054906101000a900460ff16156129ae57612308611525565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123765750612346611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123af5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124025750600560149054906101000a900460ff16155b156129ad57601160019054906101000a900460ff166124fc57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124bc5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614c58565b60405180910390fd5b5b601360009054906101000a900460ff16156126c457612519611525565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125a057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f857507f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126c35743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590614d10565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127675750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561280e576008548111156127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a890614da2565b60405180910390fd5b600a546127bd83611270565b826127c8919061425a565b1115612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280090614e0e565b60405180910390fd5b6129ac565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128b15750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612900576008548111156128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f290614ea0565b60405180910390fd5b6129ab565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129aa57600a5461295d83611270565b82612968919061425a565b11156129a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a090614e0e565b60405180910390fd5b5b5b5b5b5b60006129b930611270565b9050600060095482101590508080156129de5750601160029054906101000a900460ff165b80156129f75750600560149054906101000a900460ff16155b8015612a4d5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612aa35750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af95750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3d576001600560146101000a81548160ff021916908315150217905550612b2161339d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015612ba35750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612bbb5750600c60009054906101000a900460ff165b8015612bd65750600d54600e54612bd2919061425a565b4210155b8015612c2c5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c3b57612c39613684565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cf15750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cfb57600090505b60008115612f7457602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d5e57506000601854115b15612e2b57612d8b6064612d7d601854886130f090919063ffffffff16565b61310690919063ffffffff16565b9050601854601a5482612d9e919061410e565b612da89190614197565b601d6000828254612db9919061425a565b92505081905550601854601b5482612dd1919061410e565b612ddb9190614197565b601e6000828254612dec919061425a565b9250508190555060185460195482612e04919061410e565b612e0e9190614197565b601c6000828254612e1f919061425a565b92505081905550612f50565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e8657506000601454115b15612f4f57612eb36064612ea5601454886130f090919063ffffffff16565b61310690919063ffffffff16565b905060145460165482612ec6919061410e565b612ed09190614197565b601d6000828254612ee1919061425a565b9250508190555060145460175482612ef9919061410e565b612f039190614197565b601e6000828254612f14919061425a565b9250508190555060145460155482612f2c919061410e565b612f369190614197565b601c6000828254612f47919061425a565b925050819055505b5b6000811115612f6557612f6487308361311c565b5b8085612f719190614ec0565b94505b612f7f87878761311c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836130fe919061410e565b905092915050565b600081836131149190614197565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318390614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614bec565b60405180910390fd5b61320783838361384a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328490614f66565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613320919061425a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133849190613e03565b60405180910390a361339784848461384f565b50505050565b60006133a830611270565b90506000601e54601c54601d546133bf919061425a565b6133c9919061425a565b90506000808314806133db5750600082145b156133e857505050613682565b60146009546133f7919061410e565b83111561341057601460095461340d919061410e565b92505b6000600283601d5486613423919061410e565b61342d9190614197565b6134379190614197565b9050600061344e828661385490919063ffffffff16565b9050600047905061345e8261386a565b6000613473824761385490919063ffffffff16565b9050600061349e87613490601c54856130f090919063ffffffff16565b61310690919063ffffffff16565b905060006134c9886134bb601e54866130f090919063ffffffff16565b61310690919063ffffffff16565b905060008183856134da9190614ec0565b6134e49190614ec0565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354490614fb7565b60006040518083038185875af1925050503d8060008114613581576040519150601f19603f3d011682016040523d82523d6000602084013e613586565b606091505b50508098505060008711801561359c5750600081115b156135e9576135ab8782613aa7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d546040516135e093929190614fcc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362f90614fb7565b60006040518083038185875af1925050503d806000811461366c576040519150601f19603f3d011682016040523d82523d6000602084013e613671565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a6040518263ffffffff1660e01b81526004016136e89190613ead565b602060405180830381865afa158015613705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372991906148bf565b90506000613756612710613748600b54856130f090919063ffffffff16565b61310690919063ffffffff16565b9050600081111561378f5761378e7f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a61dead8361311c565b5b60007f000000000000000000000000556627a2c04c196a356a59ec593a925b56567b2a90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137fc57600080fd5b505af1158015613810573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b600081836138629190614ec0565b905092915050565b6000600267ffffffffffffffff81111561388757613886615003565b5b6040519080825280602002602001820160405280156138b55781602001602082028036833780820191505090505b50905030816000815181106138cd576138cc615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613972573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139969190615076565b816001815181106139aa576139a9615032565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a0f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a7195949392919061519c565b600060405180830381600087803b158015613a8b57600080fd5b505af1158015613a9f573d6000803e3d6000fd5b505050505050565b613ad2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f1c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b39969594939291906151f6565b60606040518083038185885af1158015613b57573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b7c9190615257565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bbd578082015181840152602081019050613ba2565b83811115613bcc576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bee82613b83565b613bf88185613b8e565b9350613c08818560208601613b9f565b613c1181613bd2565b840191505092915050565b60006020820190508181036000830152613c368184613be3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6e82613c43565b9050919050565b613c7e81613c63565b8114613c8957600080fd5b50565b600081359050613c9b81613c75565b92915050565b6000819050919050565b613cb481613ca1565b8114613cbf57600080fd5b50565b600081359050613cd181613cab565b92915050565b60008060408385031215613cee57613ced613c3e565b5b6000613cfc85828601613c8c565b9250506020613d0d85828601613cc2565b9150509250929050565b60008115159050919050565b613d2c81613d17565b82525050565b6000602082019050613d476000830184613d23565b92915050565b600060208284031215613d6357613d62613c3e565b5b6000613d7184828501613c8c565b91505092915050565b6000819050919050565b6000613d9f613d9a613d9584613c43565b613d7a565b613c43565b9050919050565b6000613db182613d84565b9050919050565b6000613dc382613da6565b9050919050565b613dd381613db8565b82525050565b6000602082019050613dee6000830184613dca565b92915050565b613dfd81613ca1565b82525050565b6000602082019050613e186000830184613df4565b92915050565b600060208284031215613e3457613e33613c3e565b5b6000613e4284828501613cc2565b91505092915050565b600080600060608486031215613e6457613e63613c3e565b5b6000613e7286828701613c8c565b9350506020613e8386828701613c8c565b9250506040613e9486828701613cc2565b9150509250925092565b613ea781613c63565b82525050565b6000602082019050613ec26000830184613e9e565b92915050565b600060ff82169050919050565b613ede81613ec8565b82525050565b6000602082019050613ef96000830184613ed5565b92915050565b613f0881613d17565b8114613f1357600080fd5b50565b600081359050613f2581613eff565b92915050565b600080600060608486031215613f4457613f43613c3e565b5b6000613f5286828701613cc2565b9350506020613f6386828701613cc2565b9250506040613f7486828701613f16565b9150509250925092565b60008060408385031215613f9557613f94613c3e565b5b6000613fa385828601613c8c565b9250506020613fb485828601613f16565b9150509250929050565b600080600060608486031215613fd757613fd6613c3e565b5b6000613fe586828701613cc2565b9350506020613ff686828701613cc2565b925050604061400786828701613cc2565b9150509250925092565b60006020828403121561402757614026613c3e565b5b600061403584828501613f16565b91505092915050565b6000806040838503121561405557614054613c3e565b5b600061406385828601613c8c565b925050602061407485828601613c8c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140c557607f821691505b602082108114156140d9576140d861407e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061411982613ca1565b915061412483613ca1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561415d5761415c6140df565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141a282613ca1565b91506141ad83613ca1565b9250826141bd576141bc614168565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614224602f83613b8e565b915061422f826141c8565b604082019050919050565b6000602082019050818103600083015261425381614217565b9050919050565b600061426582613ca1565b915061427083613ca1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142a5576142a46140df565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061430c603383613b8e565b9150614317826142b0565b604082019050919050565b6000602082019050818103600083015261433b816142ff565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061439e603083613b8e565b91506143a982614342565b604082019050919050565b600060208201905081810360008301526143cd81614391565b9050919050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b600061440a601d83613b8e565b9150614415826143d4565b602082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061449c603983613b8e565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061452e602583613b8e565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145c0602483613b8e565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614652603583613b8e565b915061465d826145f6565b604082019050919050565b6000602082019050818103600083015261468181614645565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146e4603483613b8e565b91506146ef82614688565b604082019050919050565b60006020820190508181036000830152614713816146d7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614776602683613b8e565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006147e2602083613b8e565b91506147ed826147ac565b602082019050919050565b60006020820190508181036000830152614811816147d5565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614874602a83613b8e565b915061487f82614818565b604082019050919050565b600060208201905081810360008301526148a381614867565b9050919050565b6000815190506148b981613cab565b92915050565b6000602082840312156148d5576148d4613c3e565b5b60006148e3848285016148aa565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614948602483613b8e565b9150614953826148ec565b604082019050919050565b600060208201905081810360008301526149778161493b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006149da602283613b8e565b91506149e58261497e565b604082019050919050565b60006020820190508181036000830152614a09816149cd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a46602083613b8e565b9150614a5182614a10565b602082019050919050565b60006020820190508181036000830152614a7581614a39565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614ab2601d83613b8e565b9150614abd82614a7c565b602082019050919050565b60006020820190508181036000830152614ae181614aa5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b44602583613b8e565b9150614b4f82614ae8565b604082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd6602383613b8e565b9150614be182614b7a565b604082019050919050565b60006020820190508181036000830152614c0581614bc9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c42601683613b8e565b9150614c4d82614c0c565b602082019050919050565b60006020820190508181036000830152614c7181614c35565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cfa604983613b8e565b9150614d0582614c78565b606082019050919050565b60006020820190508181036000830152614d2981614ced565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8c603583613b8e565b9150614d9782614d30565b604082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df8601383613b8e565b9150614e0382614dc2565b602082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e8a603683613b8e565b9150614e9582614e2e565b604082019050919050565b60006020820190508181036000830152614eb981614e7d565b9050919050565b6000614ecb82613ca1565b9150614ed683613ca1565b925082821015614ee957614ee86140df565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f50602683613b8e565b9150614f5b82614ef4565b604082019050919050565b60006020820190508181036000830152614f7f81614f43565b9050919050565b600081905092915050565b50565b6000614fa1600083614f86565b9150614fac82614f91565b600082019050919050565b6000614fc282614f94565b9150819050919050565b6000606082019050614fe16000830186613df4565b614fee6020830185613df4565b614ffb6040830184613df4565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061507081613c75565b92915050565b60006020828403121561508c5761508b613c3e565b5b600061509a84828501615061565b91505092915050565b6000819050919050565b60006150c86150c36150be846150a3565b613d7a565b613ca1565b9050919050565b6150d8816150ad565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61511381613c63565b82525050565b6000615125838361510a565b60208301905092915050565b6000602082019050919050565b6000615149826150de565b61515381856150e9565b935061515e836150fa565b8060005b8381101561518f5781516151768882615119565b975061518183615131565b925050600181019050615162565b5085935050505092915050565b600060a0820190506151b16000830188613df4565b6151be60208301876150cf565b81810360408301526151d0818661513e565b90506151df6060830185613e9e565b6151ec6080830184613df4565b9695505050505050565b600060c08201905061520b6000830189613e9e565b6152186020830188613df4565b61522560408301876150cf565b61523260608301866150cf565b61523f6080830185613e9e565b61524c60a0830184613df4565b979650505050505050565b6000806000606084860312156152705761526f613c3e565b5b600061527e868287016148aa565b935050602061528f868287016148aa565b92505060406152a0868287016148aa565b915050925092509256fea26469706673582212200c97be688cf8f6bfefd04f559b7dcf268903fb248d389c38b62c5f02c3702ebd64736f6c634300080a0033
Deployed Bytecode Sourcemap
35698:19447:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16394:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18745:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37322:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35771:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17514:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44473:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36336:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36151:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37106:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37066;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41787:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19526:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35874:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36246:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36207:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17356:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20230:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35829:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36434:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44638:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36921:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36514:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17685:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9817:103;;;;;;;;;;;;;:::i;:::-;;52727:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40895:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42334:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35966:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36814;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42705:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40688:155;;;;;;;;;;;;;:::i;:::-;;9169:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36003:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36956:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42597:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16613:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43726:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36888:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36390:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37146:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37032:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20971:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36298:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18018:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44234:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37543:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36474:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43536:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43116:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42070:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36732:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36036:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41282:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36780:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18274:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36078:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41077:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36851:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10075:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36994:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36118:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54086:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16394:100;16448:13;16481:5;16474:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16394:100;:::o;18745:201::-;18828:4;18845:13;18861:12;:10;:12::i;:::-;18845:28;;18884:32;18893:5;18900:7;18909:6;18884:8;:32::i;:::-;18934:4;18927:11;;;18745:201;;;;:::o;37322:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;35771:51::-;;;:::o;17514:108::-;17575:7;17602:12;;17595:19;;17514:108;:::o;44473:157::-;9055:13;:11;:13::i;:::-;44580:9:::1;;;;;;;;;;;44552:38;;44569:9;44552:38;;;;;;;;;;;;44613:9;44601;;:21;;;;;;;;;;;;;;;;;;44473:157:::0;:::o;36336:47::-;;;;:::o;36151:36::-;;;;:::o;37106:33::-;;;;:::o;37066:::-;;;;:::o;41787:275::-;9055:13;:11;:13::i;:::-;41924:4:::1;41916;41911:1;41895:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41894:26;;;;:::i;:::-;41893:35;;;;:::i;:::-;41883:6;:45;;41861:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;42047:6;42037;:17;;;;:::i;:::-;42014:20;:40;;;;41787:275:::0;:::o;19526:295::-;19657:4;19674:15;19692:12;:10;:12::i;:::-;19674:30;;19715:38;19731:4;19737:7;19746:6;19715:15;:38::i;:::-;19764:27;19774:4;19780:2;19784:6;19764:9;:27::i;:::-;19809:4;19802:11;;;19526:295;;;;;:::o;35874:53::-;35920:6;35874:53;:::o;36246:45::-;;;;:::o;36207:32::-;;;;;;;;;;;;;:::o;17356:93::-;17414:5;17439:2;17432:9;;17356:93;:::o;20230:238::-;20318:4;20335:13;20351:12;:10;:12::i;:::-;20335:28;;20374:64;20383:5;20390:7;20427:10;20399:25;20409:5;20416:7;20399:9;:25::i;:::-;:38;;;;:::i;:::-;20374:8;:64::i;:::-;20456:4;20449:11;;;20230:238;;;;:::o;35829:38::-;;;:::o;36434:33::-;;;;;;;;;;;;;:::o;44638:126::-;44704:4;44728:19;:28;44748:7;44728:28;;;;;;;;;;;;;;;;;;;;;;;;;44721:35;;44638:126;;;:::o;36921:28::-;;;;:::o;36514:31::-;;;;;;;;;;;;;:::o;17685:127::-;17759:7;17786:9;:18;17796:7;17786:18;;;;;;;;;;;;;;;;17779:25;;17685:127;;;:::o;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;52727:555::-;9055:13;:11;:13::i;:::-;52929:3:::1;52906:19;:26;;52884:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;53056:4;53044:8;:16;;:33;;;;;53076:1;53064:8;:13;;53044:33;53022:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;53182:19;53164:15;:37;;;;53231:8;53212:16;:27;;;;53266:8;53250:13;;:24;;;;;;;;;;;;;;;;;;52727:555:::0;;;:::o;40895:121::-;40947:4;9055:13;:11;:13::i;:::-;40981:5:::1;40964:14;;:22;;;;;;;;;;;;;;;;;;41004:4;40997:11;;40895:121:::0;:::o;42334:167::-;9055:13;:11;:13::i;:::-;42489:4:::1;42447:31;:39;42479:6;42447:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42334:167:::0;;:::o;35966:30::-;;;;;;;;;;;;;:::o;36814:::-;;;;:::o;42705:403::-;9055:13;:11;:13::i;:::-;42873::::1;42855:15;:31;;;;42915:13;42897:15;:31;;;;42951:7;42939:9;:19;;;;43020:9;;43002:15;;42984;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;42969:12;:60;;;;43064:2;43048:12;;:18;;43040:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42705:403:::0;;;:::o;40688:155::-;9055:13;:11;:13::i;:::-;40759:4:::1;40743:13;;:20;;;;;;;;;;;;;;;;;;40788:4;40774:11;;:18;;;;;;;;;;;;;;;;;;40820:15;40803:14;:32;;;;40688:155::o:0;9169:87::-;9215:7;9242:6;;;;;;;;;;;9235:13;;9169:87;:::o;36003:24::-;;;;;;;;;;;;;:::o;36956:31::-;;;;:::o;42597:100::-;9055:13;:11;:13::i;:::-;42682:7:::1;42668:11;;:21;;;;;;;;;;;;;;;;;;42597:100:::0;:::o;16613:104::-;16669:13;16702:7;16695:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16613:104;:::o;43726:304::-;9055:13;:11;:13::i;:::-;43870::::1;43862:21;;:4;:21;;;;43840:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;43981:41;44010:4;44016:5;43981:28;:41::i;:::-;43726:304:::0;;:::o;36888:24::-;;;;:::o;36390:35::-;;;;:::o;37146:27::-;;;;:::o;37032:25::-;;;;:::o;20971:436::-;21064:4;21081:13;21097:12;:10;:12::i;:::-;21081:28;;21120:24;21147:25;21157:5;21164:7;21147:9;:25::i;:::-;21120:52;;21211:15;21191:16;:35;;21183:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21304:60;21313:5;21320:7;21348:15;21329:16;:34;21304:8;:60::i;:::-;21395:4;21388:11;;;;20971:436;;;;:::o;36298:29::-;;;;:::o;18018:193::-;18097:4;18114:13;18130:12;:10;:12::i;:::-;18114:28;;18153;18163:5;18170:2;18174:6;18153:9;:28::i;:::-;18199:4;18192:11;;;18018:193;;;;:::o;44234:231::-;9055:13;:11;:13::i;:::-;44394:15:::1;;;;;;;;;;;44351:59;;44374:18;44351:59;;;;;;;;;;;;44439:18;44421:15;;:36;;;;;;;;;;;;;;;;;;44234:231:::0;:::o;37543:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;36474:33::-;;;;;;;;;;;;;:::o;43536:182::-;9055:13;:11;:13::i;:::-;43652:8:::1;43621:19;:28;43641:7;43621:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43692:7;43676:34;;;43701:8;43676:34;;;;;;:::i;:::-;;;;;;;;43536:182:::0;;:::o;43116:412::-;9055:13;:11;:13::i;:::-;43286::::1;43267:16;:32;;;;43329:13;43310:16;:32;;;;43366:7;43353:10;:20;;;;43438:10;;43419:16;;43400;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;43384:13;:64;;;;43484:2;43467:13;;:19;;43459:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43116:412:::0;;;:::o;42070:256::-;9055:13;:11;:13::i;:::-;42210:4:::1;42202;42197:1;42181:13;:11;:13::i;:::-;:17;;;;:::i;:::-;42180:26;;;;:::i;:::-;42179:35;;;;:::i;:::-;42169:6;:45;;42147:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;42311:6;42301;:17;;;;:::i;:::-;42289:9;:29;;;;42070:256:::0;:::o;36732:39::-;;;;;;;;;;;;;:::o;36036:35::-;;;;:::o;41282:497::-;41390:4;9055:13;:11;:13::i;:::-;41469:6:::1;41464:1;41448:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41447:28;;;;:::i;:::-;41434:9;:41;;41412:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;41624:4;41619:1;41603:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41602:26;;;;:::i;:::-;41589:9;:39;;41567:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;41740:9;41719:18;:30;;;;41767:4;41760:11;;41282:497:::0;;;:::o;36780:27::-;;;;:::o;18274:151::-;18363:7;18390:11;:18;18402:5;18390:18;;;;;;;;;;;;;;;:27;18409:7;18390:27;;;;;;;;;;;;;;;;18383:34;;18274:151;;;;:::o;36078:33::-;;;;:::o;41077:135::-;41137:4;9055:13;:11;:13::i;:::-;41177:5:::1;41154:20;;:28;;;;;;;;;;;;;;;;;;41200:4;41193:11;;41077:135:::0;:::o;36851:30::-;;;;:::o;10075:201::-;9055:13;:11;:13::i;:::-;10184:1:::1;10164:22;;:8;:22;;;;10156:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10240:28;10259:8;10240:18;:28::i;:::-;10075:201:::0;:::o;36994:31::-;;;;:::o;36118:24::-;;;;:::o;54086:1056::-;54197:4;9055:13;:11;:13::i;:::-;54282:19:::1;;54259:20;;:42;;;;:::i;:::-;54241:15;:60;54219:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;54391:4;54380:7;:15;;54372:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;54476:15;54453:20;:38;;;;54546:28;54577:4;:14;;;54592:13;54577:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54546:60;;54656:20;54679:44;54717:5;54679:33;54704:7;54679:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;54656:67;;54843:1;54828:12;:16;54824:110;;;54861:61;54877:13;54900:6;54909:12;54861:15;:61::i;:::-;54824:110;55009:19;55046:13;55009:51;;55071:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;55098:14;;;;;;;;;;55130:4;55123:11;;;;;54086:1056:::0;;;:::o;7720:98::-;7773:7;7800:10;7793:17;;7720:98;:::o;24596:380::-;24749:1;24732:19;;:5;:19;;;;24724:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24830:1;24811:21;;:7;:21;;;;24803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24914:6;24884:11;:18;24896:5;24884:18;;;;;;;;;;;;;;;:27;24903:7;24884:27;;;;;;;;;;;;;;;:36;;;;24952:7;24936:32;;24945:5;24936:32;;;24961:6;24936:32;;;;;;:::i;:::-;;;;;;;;24596:380;;;:::o;9334:132::-;9409:12;:10;:12::i;:::-;9398:23;;:7;:5;:7::i;:::-;:23;;;9390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9334:132::o;25267:453::-;25402:24;25429:25;25439:5;25446:7;25429:9;:25::i;:::-;25402:52;;25489:17;25469:16;:37;25465:248;;25551:6;25531:16;:26;;25523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25635:51;25644:5;25651:7;25679:6;25660:16;:25;25635:8;:51::i;:::-;25465:248;25391:329;25267:453;;;:::o;44822:5011::-;44970:1;44954:18;;:4;:18;;;;44946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45047:1;45033:16;;:2;:16;;;;45025:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45116:1;45106:6;:11;45102:93;;;45134:28;45150:4;45156:2;45160:1;45134:15;:28::i;:::-;45177:7;;45102:93;45211:14;;;;;;;;;;;45207:2487;;;45272:7;:5;:7::i;:::-;45264:15;;:4;:15;;;;:49;;;;;45306:7;:5;:7::i;:::-;45300:13;;:2;:13;;;;45264:49;:86;;;;;45348:1;45334:16;;:2;:16;;;;45264:86;:128;;;;;45385:6;45371:21;;:2;:21;;;;45264:128;:158;;;;;45414:8;;;;;;;;;;;45413:9;45264:158;45242:2441;;;45462:13;;;;;;;;;;;45457:223;;45534:19;:25;45554:4;45534:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45563:19;:23;45583:2;45563:23;;;;;;;;;;;;;;;;;;;;;;;;;45534:52;45500:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;45457:223;45836:20;;;;;;;;;;;45832:641;;;45917:7;:5;:7::i;:::-;45911:13;;:2;:13;;;;:72;;;;;45967:15;45953:30;;:2;:30;;;;45911:72;:129;;;;;46026:13;46012:28;;:2;:28;;;;45911:129;45881:573;;;46204:12;46129:28;:39;46158:9;46129:39;;;;;;;;;;;;;;;;:87;46091:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;46418:12;46376:28;:39;46405:9;46376:39;;;;;;;;;;;;;;;:54;;;;45881:573;45832:641;46547:25;:31;46573:4;46547:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;46604:31;:35;46636:2;46604:35;;;;;;;;;;;;;;;;;;;;;;;;;46603:36;46547:92;46521:1147;;;46726:20;;46716:6;:30;;46682:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;46934:9;;46917:13;46927:2;46917:9;:13::i;:::-;46908:6;:22;;;;:::i;:::-;:35;;46874:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;46521:1147;;;47112:25;:29;47138:2;47112:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;47167:31;:37;47199:4;47167:37;;;;;;;;;;;;;;;;;;;;;;;;;47166:38;47112:92;47086:582;;;47291:20;;47281:6;:30;;47247:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;47086:582;;;47448:31;:35;47480:2;47448:35;;;;;;;;;;;;;;;;;;;;;;;;;47443:225;;47568:9;;47551:13;47561:2;47551:9;:13::i;:::-;47542:6;:22;;;;:::i;:::-;:35;;47508:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;47443:225;47086:582;46521:1147;45242:2441;45207:2487;47706:28;47737:24;47755:4;47737:9;:24::i;:::-;47706:55;;47774:12;47813:18;;47789:20;:42;;47774:57;;47862:7;:35;;;;;47886:11;;;;;;;;;;;47862:35;:61;;;;;47915:8;;;;;;;;;;;47914:9;47862:61;:110;;;;;47941:25;:31;47967:4;47941:31;;;;;;;;;;;;;;;;;;;;;;;;;47940:32;47862:110;:153;;;;;47990:19;:25;48010:4;47990:25;;;;;;;;;;;;;;;;;;;;;;;;;47989:26;47862:153;:194;;;;;48033:19;:23;48053:2;48033:23;;;;;;;;;;;;;;;;;;;;;;;;;48032:24;47862:194;47844:326;;;48094:4;48083:8;;:15;;;;;;;;;;;;;;;;;;48115:10;:8;:10::i;:::-;48153:5;48142:8;;:16;;;;;;;;;;;;;;;;;;47844:326;48201:8;;;;;;;;;;;48200:9;:55;;;;;48226:25;:29;48252:2;48226:29;;;;;;;;;;;;;;;;;;;;;;;;;48200:55;:85;;;;;48272:13;;;;;;;;;;;48200:85;:153;;;;;48338:15;;48321:14;;:32;;;;:::i;:::-;48302:15;:51;;48200:153;:196;;;;;48371:19;:25;48391:4;48371:25;;;;;;;;;;;;;;;;;;;;;;;;;48370:26;48200:196;48182:282;;;48423:29;:27;:29::i;:::-;;48182:282;48476:12;48492:8;;;;;;;;;;;48491:9;48476:24;;48602:19;:25;48622:4;48602:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;48631:19;:23;48651:2;48631:23;;;;;;;;;;;;;;;;;;;;;;;;;48602:52;48598:100;;;48681:5;48671:15;;48598:100;48710:12;48815:7;48811:969;;;48867:25;:29;48893:2;48867:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;48916:1;48900:13;;:17;48867:50;48863:768;;;48945:34;48975:3;48945:25;48956:13;;48945:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;48938:41;;49048:13;;49028:16;;49021:4;:23;;;;:::i;:::-;49020:41;;;;:::i;:::-;48998:18;;:63;;;;;;;:::i;:::-;;;;;;;;49118:13;;49104:10;;49097:4;:17;;;;:::i;:::-;49096:35;;;;:::i;:::-;49080:12;;:51;;;;;;;:::i;:::-;;;;;;;;49200:13;;49180:16;;49173:4;:23;;;;:::i;:::-;49172:41;;;;:::i;:::-;49150:18;;:63;;;;;;;:::i;:::-;;;;;;;;48863:768;;;49275:25;:31;49301:4;49275:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;49325:1;49310:12;;:16;49275:51;49271:360;;;49354:33;49383:3;49354:24;49365:12;;49354:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;49347:40;;49455:12;;49436:15;;49429:4;:22;;;;:::i;:::-;49428:39;;;;:::i;:::-;49406:18;;:61;;;;;;;:::i;:::-;;;;;;;;49523:12;;49510:9;;49503:4;:16;;;;:::i;:::-;49502:33;;;;:::i;:::-;49486:12;;:49;;;;;;;:::i;:::-;;;;;;;;49603:12;;49584:15;;49577:4;:22;;;;:::i;:::-;49576:39;;;;:::i;:::-;49554:18;;:61;;;;;;;:::i;:::-;;;;;;;;49271:360;48863:768;49658:1;49651:4;:8;49647:91;;;49680:42;49696:4;49710;49717;49680:15;:42::i;:::-;49647:91;49764:4;49754:14;;;;;:::i;:::-;;;48811:969;49792:33;49808:4;49814:2;49818:6;49792:15;:33::i;:::-;44935:4898;;;;44822:5011;;;;:::o;10436:191::-;10510:16;10529:6;;;;;;;;;;;10510:25;;10555:8;10546:6;;:17;;;;;;;;;;;;;;;;;;10610:8;10579:40;;10600:8;10579:40;;;;;;;;;;;;10499:128;10436:191;:::o;44038:188::-;44155:5;44121:25;:31;44147:4;44121:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;44212:5;44178:40;;44206:4;44178:40;;;;;;;;;;;;44038:188;;:::o;3614:98::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;4013:::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;21877:671::-;22024:1;22008:18;;:4;:18;;;;22000:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22101:1;22087:16;;:2;:16;;;;22079:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22156:38;22177:4;22183:2;22187:6;22156:20;:38::i;:::-;22207:19;22229:9;:15;22239:4;22229:15;;;;;;;;;;;;;;;;22207:37;;22278:6;22263:11;:21;;22255:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22395:6;22381:11;:20;22363:9;:15;22373:4;22363:15;;;;;;;;;;;;;;;:38;;;;22440:6;22423:9;:13;22433:2;22423:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;22479:2;22464:26;;22473:4;22464:26;;;22483:6;22464:26;;;;;;:::i;:::-;;;;;;;;22503:37;22523:4;22529:2;22533:6;22503:19;:37::i;:::-;21989:559;21877:671;;;:::o;50963:1756::-;51002:23;51028:24;51046:4;51028:9;:24::i;:::-;51002:50;;51063:25;51159:12;;51125:18;;51091;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;51063:108;;51182:12;51230:1;51211:15;:20;:46;;;;51256:1;51235:17;:22;51211:46;51207:85;;;51274:7;;;;;51207:85;51347:2;51326:18;;:23;;;;:::i;:::-;51308:15;:41;51304:115;;;51405:2;51384:18;;:23;;;;:::i;:::-;51366:41;;51304:115;51480:23;51593:1;51560:17;51525:18;;51507:15;:36;;;;:::i;:::-;51506:71;;;;:::i;:::-;:88;;;;:::i;:::-;51480:114;;51605:26;51634:36;51654:15;51634;:19;;:36;;;;:::i;:::-;51605:65;;51683:25;51711:21;51683:49;;51745:36;51762:18;51745:16;:36::i;:::-;51794:18;51815:44;51841:17;51815:21;:25;;:44;;;;:::i;:::-;51794:65;;51872:23;51898:81;51951:17;51898:34;51913:18;;51898:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;51872:107;;51990:17;52010:51;52043:17;52010:28;52025:12;;52010:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;51990:71;;52074:23;52131:9;52113:15;52100:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;52074:66;;52174:1;52153:18;:22;;;;52207:1;52186:18;:22;;;;52234:1;52219:12;:16;;;;52270:9;;;;;;;;;;;52262:23;;52293:9;52262:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52248:59;;;;;52342:1;52324:15;:19;:42;;;;;52365:1;52347:15;:19;52324:42;52320:278;;;52383:46;52396:15;52413;52383:12;:46::i;:::-;52449:137;52482:18;52519:15;52553:18;;52449:137;;;;;;;;:::i;:::-;;;;;;;;52320:278;52632:15;;;;;;;;;;;52624:29;;52675:21;52624:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52610:101;;;;;50991:1728;;;;;;;;;;50963:1756;:::o;53290:788::-;53347:4;53381:15;53364:14;:32;;;;53451:28;53482:4;:14;;;53497:13;53482:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53451:60;;53561:20;53584:77;53645:5;53584:42;53609:16;;53584:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;53561:100;;53781:1;53766:12;:16;53762:110;;;53799:61;53815:13;53838:6;53847:12;53799:15;:61::i;:::-;53762:110;53947:19;53984:13;53947:51;;54009:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54036:12;;;;;;;;;;54066:4;54059:11;;;;;53290:788;:::o;26320:125::-;;;;:::o;27049:124::-;;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;49841:589::-;49967:21;50005:1;49991:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49967:40;;50036:4;50018;50023:1;50018:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;50062:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50052:4;50057:1;50052:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;50097:62;50114:4;50129:15;50147:11;50097:8;:62::i;:::-;50198:15;:66;;;50279:11;50305:1;50349:4;50376;50396:15;50198:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49896:534;49841:589;:::o;50438:517::-;50586:62;50603:4;50618:15;50636:11;50586:8;:62::i;:::-;50691:15;:31;;;50730:9;50763:4;50783:11;50809:1;50852;35920:6;50921:15;50691:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50438:517;;:::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:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901: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:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:180::-;10249:77;10246:1;10239:88;10346:4;10343:1;10336:15;10370:4;10367:1;10360:15;10387:348;10427:7;10450:20;10468:1;10450:20;:::i;:::-;10445:25;;10484:20;10502:1;10484:20;:::i;:::-;10479:25;;10672:1;10604:66;10600:74;10597:1;10594:81;10589:1;10582:9;10575:17;10571:105;10568:131;;;10679:18;;:::i;:::-;10568:131;10727:1;10724;10720:9;10709:20;;10387:348;;;;:::o;10741:180::-;10789:77;10786:1;10779:88;10886:4;10883:1;10876:15;10910:4;10907:1;10900:15;10927:185;10967:1;10984:20;11002:1;10984:20;:::i;:::-;10979:25;;11018:20;11036:1;11018:20;:::i;:::-;11013:25;;11057:1;11047:35;;11062:18;;:::i;:::-;11047:35;11104:1;11101;11097:9;11092:14;;10927:185;;;;:::o;11118:234::-;11258:34;11254:1;11246:6;11242:14;11235:58;11327:17;11322:2;11314:6;11310:15;11303:42;11118:234;:::o;11358:366::-;11500:3;11521:67;11585:2;11580:3;11521:67;:::i;:::-;11514:74;;11597:93;11686:3;11597:93;:::i;:::-;11715:2;11710:3;11706:12;11699:19;;11358:366;;;:::o;11730:419::-;11896:4;11934:2;11923:9;11919:18;11911:26;;11983:9;11977:4;11973:20;11969:1;11958:9;11954:17;11947:47;12011:131;12137:4;12011:131;:::i;:::-;12003:139;;11730:419;;;:::o;12155:305::-;12195:3;12214:20;12232:1;12214:20;:::i;:::-;12209:25;;12248:20;12266:1;12248:20;:::i;:::-;12243:25;;12402:1;12334:66;12330:74;12327:1;12324:81;12321:107;;;12408:18;;:::i;:::-;12321:107;12452:1;12449;12445:9;12438:16;;12155:305;;;;:::o;12466:238::-;12606:34;12602:1;12594:6;12590:14;12583:58;12675:21;12670:2;12662:6;12658:15;12651:46;12466:238;:::o;12710:366::-;12852:3;12873:67;12937:2;12932:3;12873:67;:::i;:::-;12866:74;;12949:93;13038:3;12949:93;:::i;:::-;13067:2;13062:3;13058:12;13051:19;;12710:366;;;:::o;13082:419::-;13248:4;13286:2;13275:9;13271:18;13263:26;;13335:9;13329:4;13325:20;13321:1;13310:9;13306:17;13299:47;13363:131;13489:4;13363:131;:::i;:::-;13355:139;;13082:419;;;:::o;13507:235::-;13647:34;13643:1;13635:6;13631:14;13624:58;13716:18;13711:2;13703:6;13699:15;13692:43;13507:235;:::o;13748:366::-;13890:3;13911:67;13975:2;13970:3;13911:67;:::i;:::-;13904:74;;13987:93;14076:3;13987:93;:::i;:::-;14105:2;14100:3;14096:12;14089:19;;13748:366;;;:::o;14120:419::-;14286:4;14324:2;14313:9;14309:18;14301:26;;14373:9;14367:4;14363:20;14359:1;14348:9;14344:17;14337:47;14401:131;14527:4;14401:131;:::i;:::-;14393:139;;14120:419;;;:::o;14545:179::-;14685:31;14681:1;14673:6;14669:14;14662:55;14545:179;:::o;14730:366::-;14872:3;14893:67;14957:2;14952:3;14893:67;:::i;:::-;14886:74;;14969:93;15058:3;14969:93;:::i;:::-;15087:2;15082:3;15078:12;15071:19;;14730:366;;;:::o;15102:419::-;15268:4;15306:2;15295:9;15291:18;15283:26;;15355:9;15349:4;15345:20;15341:1;15330:9;15326:17;15319:47;15383:131;15509:4;15383:131;:::i;:::-;15375:139;;15102:419;;;:::o;15527:244::-;15667:34;15663:1;15655:6;15651:14;15644:58;15736:27;15731:2;15723:6;15719:15;15712:52;15527:244;:::o;15777:366::-;15919:3;15940:67;16004:2;15999:3;15940:67;:::i;:::-;15933:74;;16016:93;16105:3;16016:93;:::i;:::-;16134:2;16129:3;16125:12;16118:19;;15777:366;;;:::o;16149:419::-;16315:4;16353:2;16342:9;16338:18;16330:26;;16402:9;16396:4;16392:20;16388:1;16377:9;16373:17;16366:47;16430:131;16556:4;16430:131;:::i;:::-;16422:139;;16149:419;;;:::o;16574:224::-;16714:34;16710:1;16702:6;16698:14;16691:58;16783:7;16778:2;16770:6;16766:15;16759:32;16574:224;:::o;16804:366::-;16946:3;16967:67;17031:2;17026:3;16967:67;:::i;:::-;16960:74;;17043:93;17132:3;17043:93;:::i;:::-;17161:2;17156:3;17152:12;17145:19;;16804:366;;;:::o;17176:419::-;17342:4;17380:2;17369:9;17365:18;17357:26;;17429:9;17423:4;17419:20;17415:1;17404:9;17400:17;17393:47;17457:131;17583:4;17457:131;:::i;:::-;17449:139;;17176:419;;;:::o;17601:223::-;17741:34;17737:1;17729:6;17725:14;17718:58;17810:6;17805:2;17797:6;17793:15;17786:31;17601:223;:::o;17830:366::-;17972:3;17993:67;18057:2;18052:3;17993:67;:::i;:::-;17986:74;;18069:93;18158:3;18069:93;:::i;:::-;18187:2;18182:3;18178:12;18171:19;;17830:366;;;:::o;18202:419::-;18368:4;18406:2;18395:9;18391:18;18383:26;;18455:9;18449:4;18445:20;18441:1;18430:9;18426:17;18419:47;18483:131;18609:4;18483:131;:::i;:::-;18475:139;;18202:419;;;:::o;18627:240::-;18767:34;18763:1;18755:6;18751:14;18744:58;18836:23;18831:2;18823:6;18819:15;18812:48;18627:240;:::o;18873:366::-;19015:3;19036:67;19100:2;19095:3;19036:67;:::i;:::-;19029:74;;19112:93;19201:3;19112:93;:::i;:::-;19230:2;19225:3;19221:12;19214:19;;18873:366;;;:::o;19245:419::-;19411:4;19449:2;19438:9;19434:18;19426:26;;19498:9;19492:4;19488:20;19484:1;19473:9;19469:17;19462:47;19526:131;19652:4;19526:131;:::i;:::-;19518:139;;19245:419;;;:::o;19670:239::-;19810:34;19806:1;19798:6;19794:14;19787:58;19879:22;19874:2;19866:6;19862:15;19855:47;19670:239;:::o;19915:366::-;20057:3;20078:67;20142:2;20137:3;20078:67;:::i;:::-;20071:74;;20154:93;20243:3;20154:93;:::i;:::-;20272:2;20267:3;20263:12;20256:19;;19915:366;;;:::o;20287:419::-;20453:4;20491:2;20480:9;20476:18;20468:26;;20540:9;20534:4;20530:20;20526:1;20515:9;20511:17;20504:47;20568:131;20694:4;20568:131;:::i;:::-;20560:139;;20287:419;;;:::o;20712:225::-;20852:34;20848:1;20840:6;20836:14;20829:58;20921:8;20916:2;20908:6;20904:15;20897:33;20712:225;:::o;20943:366::-;21085:3;21106:67;21170:2;21165:3;21106:67;:::i;:::-;21099:74;;21182:93;21271:3;21182:93;:::i;:::-;21300:2;21295:3;21291:12;21284:19;;20943:366;;;:::o;21315:419::-;21481:4;21519:2;21508:9;21504:18;21496:26;;21568:9;21562:4;21558:20;21554:1;21543:9;21539:17;21532:47;21596:131;21722:4;21596:131;:::i;:::-;21588:139;;21315:419;;;:::o;21740:182::-;21880:34;21876:1;21868:6;21864:14;21857:58;21740:182;:::o;21928:366::-;22070:3;22091:67;22155:2;22150:3;22091:67;:::i;:::-;22084:74;;22167:93;22256:3;22167:93;:::i;:::-;22285:2;22280:3;22276:12;22269:19;;21928:366;;;:::o;22300:419::-;22466:4;22504:2;22493:9;22489:18;22481:26;;22553:9;22547:4;22543:20;22539:1;22528:9;22524:17;22517:47;22581:131;22707:4;22581:131;:::i;:::-;22573:139;;22300:419;;;:::o;22725:229::-;22865:34;22861:1;22853:6;22849:14;22842:58;22934:12;22929:2;22921:6;22917:15;22910:37;22725:229;:::o;22960:366::-;23102:3;23123:67;23187:2;23182:3;23123:67;:::i;:::-;23116:74;;23199:93;23288:3;23199:93;:::i;:::-;23317:2;23312:3;23308:12;23301:19;;22960:366;;;:::o;23332:419::-;23498:4;23536:2;23525:9;23521:18;23513:26;;23585:9;23579:4;23575:20;23571:1;23560:9;23556:17;23549:47;23613:131;23739:4;23613:131;:::i;:::-;23605:139;;23332:419;;;:::o;23757:143::-;23814:5;23845:6;23839:13;23830:22;;23861:33;23888:5;23861:33;:::i;:::-;23757:143;;;;:::o;23906:351::-;23976:6;24025:2;24013:9;24004:7;24000:23;23996:32;23993:119;;;24031:79;;:::i;:::-;23993:119;24151:1;24176:64;24232:7;24223:6;24212:9;24208:22;24176:64;:::i;:::-;24166:74;;24122:128;23906:351;;;;:::o;24263:223::-;24403:34;24399:1;24391:6;24387:14;24380:58;24472:6;24467:2;24459:6;24455:15;24448:31;24263:223;:::o;24492:366::-;24634:3;24655:67;24719:2;24714:3;24655:67;:::i;:::-;24648:74;;24731:93;24820:3;24731:93;:::i;:::-;24849:2;24844:3;24840:12;24833:19;;24492:366;;;:::o;24864:419::-;25030:4;25068:2;25057:9;25053:18;25045:26;;25117:9;25111:4;25107:20;25103:1;25092:9;25088:17;25081:47;25145:131;25271:4;25145:131;:::i;:::-;25137:139;;24864:419;;;:::o;25289:221::-;25429:34;25425:1;25417:6;25413:14;25406:58;25498:4;25493:2;25485:6;25481:15;25474:29;25289:221;:::o;25516:366::-;25658:3;25679:67;25743:2;25738:3;25679:67;:::i;:::-;25672:74;;25755:93;25844:3;25755:93;:::i;:::-;25873:2;25868:3;25864:12;25857:19;;25516:366;;;:::o;25888:419::-;26054:4;26092:2;26081:9;26077:18;26069:26;;26141:9;26135:4;26131:20;26127:1;26116:9;26112:17;26105:47;26169:131;26295:4;26169:131;:::i;:::-;26161:139;;25888:419;;;:::o;26313:182::-;26453:34;26449:1;26441:6;26437:14;26430:58;26313:182;:::o;26501:366::-;26643:3;26664:67;26728:2;26723:3;26664:67;:::i;:::-;26657:74;;26740:93;26829:3;26740:93;:::i;:::-;26858:2;26853:3;26849:12;26842:19;;26501:366;;;:::o;26873:419::-;27039:4;27077:2;27066:9;27062:18;27054:26;;27126:9;27120:4;27116:20;27112:1;27101:9;27097:17;27090:47;27154:131;27280:4;27154:131;:::i;:::-;27146:139;;26873:419;;;:::o;27298:179::-;27438:31;27434:1;27426:6;27422:14;27415:55;27298:179;:::o;27483:366::-;27625:3;27646:67;27710:2;27705:3;27646:67;:::i;:::-;27639:74;;27722:93;27811:3;27722:93;:::i;:::-;27840:2;27835:3;27831:12;27824:19;;27483:366;;;:::o;27855:419::-;28021:4;28059:2;28048:9;28044:18;28036:26;;28108:9;28102:4;28098:20;28094:1;28083:9;28079:17;28072:47;28136:131;28262:4;28136:131;:::i;:::-;28128:139;;27855:419;;;:::o;28280:224::-;28420:34;28416:1;28408:6;28404:14;28397:58;28489:7;28484:2;28476:6;28472:15;28465:32;28280:224;:::o;28510:366::-;28652:3;28673:67;28737:2;28732:3;28673:67;:::i;:::-;28666:74;;28749:93;28838:3;28749:93;:::i;:::-;28867:2;28862:3;28858:12;28851:19;;28510:366;;;:::o;28882:419::-;29048:4;29086:2;29075:9;29071:18;29063:26;;29135:9;29129:4;29125:20;29121:1;29110:9;29106:17;29099:47;29163:131;29289:4;29163:131;:::i;:::-;29155:139;;28882:419;;;:::o;29307:222::-;29447:34;29443:1;29435:6;29431:14;29424:58;29516:5;29511:2;29503:6;29499:15;29492:30;29307:222;:::o;29535:366::-;29677:3;29698:67;29762:2;29757:3;29698:67;:::i;:::-;29691:74;;29774:93;29863:3;29774:93;:::i;:::-;29892:2;29887:3;29883:12;29876:19;;29535:366;;;:::o;29907:419::-;30073:4;30111:2;30100:9;30096:18;30088:26;;30160:9;30154:4;30150:20;30146:1;30135:9;30131:17;30124:47;30188:131;30314:4;30188:131;:::i;:::-;30180:139;;29907:419;;;:::o;30332:172::-;30472:24;30468:1;30460:6;30456:14;30449:48;30332:172;:::o;30510:366::-;30652:3;30673:67;30737:2;30732:3;30673:67;:::i;:::-;30666:74;;30749:93;30838:3;30749:93;:::i;:::-;30867:2;30862:3;30858:12;30851:19;;30510:366;;;:::o;30882:419::-;31048:4;31086:2;31075:9;31071:18;31063:26;;31135:9;31129:4;31125:20;31121:1;31110:9;31106:17;31099:47;31163:131;31289:4;31163:131;:::i;:::-;31155:139;;30882:419;;;:::o;31307:297::-;31447:34;31443:1;31435:6;31431:14;31424:58;31516:34;31511:2;31503:6;31499:15;31492:59;31585:11;31580:2;31572:6;31568:15;31561:36;31307:297;:::o;31610:366::-;31752:3;31773:67;31837:2;31832:3;31773:67;:::i;:::-;31766:74;;31849:93;31938:3;31849:93;:::i;:::-;31967:2;31962:3;31958:12;31951:19;;31610:366;;;:::o;31982:419::-;32148:4;32186:2;32175:9;32171:18;32163:26;;32235:9;32229:4;32225:20;32221:1;32210:9;32206:17;32199:47;32263:131;32389:4;32263:131;:::i;:::-;32255:139;;31982:419;;;:::o;32407:240::-;32547:34;32543:1;32535:6;32531:14;32524:58;32616:23;32611:2;32603:6;32599:15;32592:48;32407:240;:::o;32653:366::-;32795:3;32816:67;32880:2;32875:3;32816:67;:::i;:::-;32809:74;;32892:93;32981:3;32892:93;:::i;:::-;33010:2;33005:3;33001:12;32994:19;;32653:366;;;:::o;33025:419::-;33191:4;33229:2;33218:9;33214:18;33206:26;;33278:9;33272:4;33268:20;33264:1;33253:9;33249:17;33242:47;33306:131;33432:4;33306:131;:::i;:::-;33298:139;;33025:419;;;:::o;33450:169::-;33590:21;33586:1;33578:6;33574:14;33567:45;33450:169;:::o;33625:366::-;33767:3;33788:67;33852:2;33847:3;33788:67;:::i;:::-;33781:74;;33864:93;33953:3;33864:93;:::i;:::-;33982:2;33977:3;33973:12;33966:19;;33625:366;;;:::o;33997:419::-;34163:4;34201:2;34190:9;34186:18;34178:26;;34250:9;34244:4;34240:20;34236:1;34225:9;34221:17;34214:47;34278:131;34404:4;34278:131;:::i;:::-;34270:139;;33997:419;;;:::o;34422:241::-;34562:34;34558:1;34550:6;34546:14;34539:58;34631:24;34626:2;34618:6;34614:15;34607:49;34422:241;:::o;34669:366::-;34811:3;34832:67;34896:2;34891:3;34832:67;:::i;:::-;34825:74;;34908:93;34997:3;34908:93;:::i;:::-;35026:2;35021:3;35017:12;35010:19;;34669:366;;;:::o;35041:419::-;35207:4;35245:2;35234:9;35230:18;35222:26;;35294:9;35288:4;35284:20;35280:1;35269:9;35265:17;35258:47;35322:131;35448:4;35322:131;:::i;:::-;35314:139;;35041:419;;;:::o;35466:191::-;35506:4;35526:20;35544:1;35526:20;:::i;:::-;35521:25;;35560:20;35578:1;35560:20;:::i;:::-;35555:25;;35599:1;35596;35593:8;35590:34;;;35604:18;;:::i;:::-;35590:34;35649:1;35646;35642:9;35634:17;;35466:191;;;;:::o;35663:225::-;35803:34;35799:1;35791:6;35787:14;35780:58;35872:8;35867:2;35859:6;35855:15;35848:33;35663:225;:::o;35894:366::-;36036:3;36057:67;36121:2;36116:3;36057:67;:::i;:::-;36050:74;;36133:93;36222:3;36133:93;:::i;:::-;36251:2;36246:3;36242:12;36235:19;;35894:366;;;:::o;36266:419::-;36432:4;36470:2;36459:9;36455:18;36447:26;;36519:9;36513:4;36509:20;36505:1;36494:9;36490:17;36483:47;36547:131;36673:4;36547:131;:::i;:::-;36539:139;;36266:419;;;:::o;36691:147::-;36792:11;36829:3;36814:18;;36691:147;;;;:::o;36844:114::-;;:::o;36964:398::-;37123:3;37144:83;37225:1;37220:3;37144:83;:::i;:::-;37137:90;;37236:93;37325:3;37236:93;:::i;:::-;37354:1;37349:3;37345:11;37338:18;;36964:398;;;:::o;37368:379::-;37552:3;37574:147;37717:3;37574:147;:::i;:::-;37567:154;;37738:3;37731:10;;37368:379;;;:::o;37753:442::-;37902:4;37940:2;37929:9;37925:18;37917:26;;37953:71;38021:1;38010:9;38006:17;37997:6;37953:71;:::i;:::-;38034:72;38102:2;38091:9;38087:18;38078:6;38034:72;:::i;:::-;38116;38184:2;38173:9;38169:18;38160:6;38116:72;:::i;:::-;37753:442;;;;;;:::o;38201:180::-;38249:77;38246:1;38239:88;38346:4;38343:1;38336:15;38370:4;38367:1;38360:15;38387:180;38435:77;38432:1;38425:88;38532:4;38529:1;38522:15;38556:4;38553:1;38546:15;38573:143;38630:5;38661:6;38655:13;38646:22;;38677:33;38704:5;38677:33;:::i;:::-;38573:143;;;;:::o;38722:351::-;38792:6;38841:2;38829:9;38820:7;38816:23;38812:32;38809:119;;;38847:79;;:::i;:::-;38809:119;38967:1;38992:64;39048:7;39039:6;39028:9;39024:22;38992:64;:::i;:::-;38982:74;;38938:128;38722:351;;;;:::o;39079:85::-;39124:7;39153:5;39142:16;;39079:85;;;:::o;39170:158::-;39228:9;39261:61;39279:42;39288:32;39314:5;39288:32;:::i;:::-;39279:42;:::i;:::-;39261:61;:::i;:::-;39248:74;;39170:158;;;:::o;39334:147::-;39429:45;39468:5;39429:45;:::i;:::-;39424:3;39417:58;39334:147;;:::o;39487:114::-;39554:6;39588:5;39582:12;39572:22;;39487:114;;;:::o;39607:184::-;39706:11;39740:6;39735:3;39728:19;39780:4;39775:3;39771:14;39756:29;;39607:184;;;;:::o;39797:132::-;39864:4;39887:3;39879:11;;39917:4;39912:3;39908:14;39900:22;;39797:132;;;:::o;39935:108::-;40012:24;40030:5;40012:24;:::i;:::-;40007:3;40000:37;39935:108;;:::o;40049:179::-;40118:10;40139:46;40181:3;40173:6;40139:46;:::i;:::-;40217:4;40212:3;40208:14;40194:28;;40049:179;;;;:::o;40234:113::-;40304:4;40336;40331:3;40327:14;40319:22;;40234:113;;;:::o;40383:732::-;40502:3;40531:54;40579:5;40531:54;:::i;:::-;40601:86;40680:6;40675:3;40601:86;:::i;:::-;40594:93;;40711:56;40761:5;40711:56;:::i;:::-;40790:7;40821:1;40806:284;40831:6;40828:1;40825:13;40806:284;;;40907:6;40901:13;40934:63;40993:3;40978:13;40934:63;:::i;:::-;40927:70;;41020:60;41073:6;41020:60;:::i;:::-;41010:70;;40866:224;40853:1;40850;40846:9;40841:14;;40806:284;;;40810:14;41106:3;41099:10;;40507:608;;;40383:732;;;;:::o;41121:831::-;41384:4;41422:3;41411:9;41407:19;41399:27;;41436:71;41504:1;41493:9;41489:17;41480:6;41436:71;:::i;:::-;41517:80;41593:2;41582:9;41578:18;41569:6;41517:80;:::i;:::-;41644:9;41638:4;41634:20;41629:2;41618:9;41614:18;41607:48;41672:108;41775:4;41766:6;41672:108;:::i;:::-;41664:116;;41790:72;41858:2;41847:9;41843:18;41834:6;41790:72;:::i;:::-;41872:73;41940:3;41929:9;41925:19;41916:6;41872:73;:::i;:::-;41121:831;;;;;;;;:::o;41958:807::-;42207:4;42245:3;42234:9;42230:19;42222:27;;42259:71;42327:1;42316:9;42312:17;42303:6;42259:71;:::i;:::-;42340:72;42408:2;42397:9;42393:18;42384:6;42340:72;:::i;:::-;42422:80;42498:2;42487:9;42483:18;42474:6;42422:80;:::i;:::-;42512;42588:2;42577:9;42573:18;42564:6;42512:80;:::i;:::-;42602:73;42670:3;42659:9;42655:19;42646:6;42602:73;:::i;:::-;42685;42753:3;42742:9;42738:19;42729:6;42685:73;:::i;:::-;41958:807;;;;;;;;;:::o;42771:663::-;42859:6;42867;42875;42924:2;42912:9;42903:7;42899:23;42895:32;42892:119;;;42930:79;;:::i;:::-;42892:119;43050:1;43075:64;43131:7;43122:6;43111:9;43107:22;43075:64;:::i;:::-;43065:74;;43021:128;43188:2;43214:64;43270:7;43261:6;43250:9;43246:22;43214:64;:::i;:::-;43204:74;;43159:129;43327:2;43353:64;43409:7;43400:6;43389:9;43385:22;43353:64;:::i;:::-;43343:74;;43298:129;42771:663;;;;;:::o
Swarm Source
ipfs://0c97be688cf8f6bfefd04f559b7dcf268903fb248d389c38b62c5f02c3702ebd
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 ]
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.