BscScan - Sponsored slots available. Book your slot here!
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 15,175 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 95058536 | 2 hrs ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 95058517 | 2 hrs ago | IN | 0 BNB | 0.00000159 | ||||
| Approve | 94976816 | 13 hrs ago | IN | 0 BNB | 0.00000363 | ||||
| Approve | 94936916 | 18 hrs ago | IN | 0 BNB | 0.00000197 | ||||
| Approve | 94936881 | 18 hrs ago | IN | 0 BNB | 0.00000159 | ||||
| Approve | 94821494 | 32 hrs ago | IN | 0 BNB | 0.00000696 | ||||
| Approve | 94760415 | 40 hrs ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94760391 | 40 hrs ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94760367 | 40 hrs ago | IN | 0 BNB | 0.00000159 | ||||
| Approve | 94726910 | 44 hrs ago | IN | 0 BNB | 0.00000159 | ||||
| Approve | 94624338 | 2 days ago | IN | 0 BNB | 0.00000161 | ||||
| Approve | 94623983 | 2 days ago | IN | 0 BNB | 0.00000233 | ||||
| Approve | 94611227 | 2 days ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94611198 | 2 days ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94611173 | 2 days ago | IN | 0 BNB | 0.0000016 | ||||
| Approve | 94610690 | 2 days ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94610665 | 2 days ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94610635 | 2 days ago | IN | 0 BNB | 0.00000159 | ||||
| Approve | 94602707 | 2 days ago | IN | 0 BNB | 0.00000159 | ||||
| Approve | 94602579 | 2 days ago | IN | 0 BNB | 0.00000305 | ||||
| Approve | 94583889 | 2 days ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94583862 | 2 days ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94583822 | 2 days ago | IN | 0 BNB | 0.00000159 | ||||
| Approve | 94583793 | 2 days ago | IN | 0 BNB | 0.00000173 | ||||
| Approve | 94583765 | 2 days ago | IN | 0 BNB | 0.00000173 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 68461200 | 161 days ago | Contract Creation | 0 BNB |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CAOCAO
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2025-11-17
*/
pragma solidity ^0.8.0;
//SPDX-License-Identifier: MIT
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @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);
}
/*
* @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) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
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 () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @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 guidelines: functions revert instead
* of 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 {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
contract TokenReceiver {
constructor(address token) {
IERC20(token).approve(msg.sender, type(uint256).max);
}
}
contract CAOCAO is ERC20, Ownable {
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
TokenReceiver public tokenReceiver;
bool private swapping;
address public constant ROUTER = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
address public constant USDT = 0x55d398326f99059fF775485246999027B3197955;
address public marketingAddr = 0x63Be119d6709D7cF3E44345b8AB2C9d40D7010f6;
address public tokenOwner = 0x59bfEcFBfdd905cCa1C07657Ee9E9198ab5977a6;
address public SUB;
address public SubPair;
uint256 public numTokensSellToSwap = 100 * 1e18; // u
uint256 public buyLpFee1 = 5; // usdt
uint256 public buyLpFee2 = 15;
uint256 public buyBurnFee = 5;
uint256 public buyMarketingFee = 10;
uint256 public sellLpFee1 = 5;
uint256 public sellLpFee2 = 15;
uint256 public sellBurnFee = 5;
uint256 public sellMarketingFee = 10;
uint256 public lpFee = 35;
// exlcude from fees and max transaction amount
mapping (address => bool) public isExcludedFromFees;
mapping (address => bool) public isPair;
mapping (address => bool) public isRouter;
mapping (address => bool) public blclist;
uint public startTime;
address[] public lpProviders;
mapping(address => uint256) public lpProviderIndex;
mapping(address => bool) public excludeLpProvider;
mapping (address => uint) public lpAmountOf;
uint256 public minRewardBalanceUsdt = 100 * 1e18;
uint256 public minRewardBalanceLp = 100 * 1e18;
uint256 public gasForProcessing = 200000;
uint256 public lastProcessedIndex1;
uint256 public lastProcessedIndex2;
uint256 public diff = 1e18;
uint256 public minLpValue = 100 * 1e18;
modifier lockTheSwap {
swapping = true;
_;
swapping = false;
}
constructor() ERC20("CAOCAO", "CAOCAO") {
require(address(this) > USDT);
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(ROUTER);
// Create a uniswap pair for this new token
address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), USDT);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = _uniswapV2Pair;
isPair[_uniswapV2Pair] = true;
isRouter[ROUTER] = true;
tokenReceiver = new TokenReceiver(USDT);
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(tokenOwner, true);
excludeFromFees(marketingAddr, true);
excludeFromFees(address(this), true);
_approve(address(this), ROUTER, type(uint).max);
IERC20(USDT).approve(ROUTER, type(uint).max);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(tokenOwner, 99999999 * 1e18);
}
function init(address sub, address subPair) external onlyOwner {
SUB = sub;
SubPair = subPair;
IERC20(sub).approve(ROUTER, type(uint).max);
}
function startTrade() external onlyOwner {
startTime = block.timestamp;
}
function setPair(address pair) external onlyOwner {
isPair[pair] = true;
}
function setMinLpValue(uint _minLpValue) external onlyOwner {
minLpValue = _minLpValue;
}
function setRouter(address router) external onlyOwner {
isRouter[router] = true;
}
function setMinRewardBalanceUsdt(uint256 _minRewardBalanceUsdt) external onlyOwner {
minRewardBalanceUsdt = _minRewardBalanceUsdt;
}
function setMinRewardBalanceLp(uint256 _minRewardBalanceLp) external onlyOwner {
minRewardBalanceLp = _minRewardBalanceLp;
}
function setDiff(uint _diff) external onlyOwner {
diff = _diff;
}
function setMarketingAddr(address _marketingAddr) external onlyOwner {
marketingAddr = _marketingAddr;
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
isExcludedFromFees[account] = excluded;
}
function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
for(uint256 i = 0; i < accounts.length; i++) {
isExcludedFromFees[accounts[i]] = excluded;
}
}
function setBlclist(address account, bool value) public onlyOwner {
blclist[account] = value;
}
function setMultiblclist(address[] calldata accounts, bool value) public onlyOwner {
for(uint256 i = 0; i < accounts.length; i++) {
blclist[accounts[i]] = value;
}
}
function updateMultiLpAmount(address[] calldata accounts) public onlyOwner {
for(uint256 i = 0; i < accounts.length; i++) {
address cur = accounts[i];
_addLpProvider(cur);
lpAmountOf[cur] = IERC20(uniswapV2Pair).balanceOf(cur);
}
}
function excludeMultiLPProvider(address[] calldata accounts, bool excluded) external onlyOwner {
for(uint256 i = 0; i < accounts.length; i++) {
excludeLpProvider[accounts[i]] = excluded;
}
}
function updateGasForProcessing(uint256 newValue) public onlyOwner {
gasForProcessing = newValue;
}
function setBuyFees(uint _buyLpFee1, uint _buyLpFee2, uint _buyBurnFee, uint _buyMarketingFee) external onlyOwner {
buyLpFee1 = _buyLpFee1;
buyLpFee2 = _buyLpFee2;
buyBurnFee = _buyBurnFee;
buyMarketingFee = _buyMarketingFee;
}
function setSellFees(uint _sellLpFee1, uint _sellLpFee2, uint _sellBurnFee, uint _sellMarketingFee) external onlyOwner {
sellLpFee1 = _sellLpFee1;
sellLpFee2 = _sellLpFee2;
sellBurnFee = _sellBurnFee;
sellMarketingFee = _sellMarketingFee;
}
function setLpFee(uint _lpFee) external onlyOwner {
lpFee = _lpFee;
}
function setNumTokensSellToSwap(uint256 value) external onlyOwner {
numTokensSellToSwap = value;
}
function rescueERC20(address token, address to, uint amount) external onlyOwner {
if (token == address(this)) {
super._transfer(address(this), to, amount);
} else {
IERC20(token).transfer(to, amount);
}
}
function rescueETH(address to, uint amount) external onlyOwner {
payable(to).transfer(amount);
}
function getMinTokenToSwap() public view returns (uint) {
(uint reserve0, uint reserve1,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
if (reserve0 == 0 || reserve1 == 0) return type(uint256).max;
address[] memory path = new address[](2);
path[0] = USDT;
path[1] = address(this);
uint[] memory amountsOut = IUniswapV2Router02(ROUTER).getAmountsOut(numTokensSellToSwap, path);
return amountsOut[1];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(!blclist[from], "blclist");
uint256 contractTokenBalance = balanceOf(address(this));
uint minTokenBalance = getMinTokenToSwap();
if( contractTokenBalance >= minTokenBalance &&
!swapping &&
!isPair[from]
) {
swapAndDividend(minTokenBalance);
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if(isExcludedFromFees[from] || isExcludedFromFees[to]) {
takeFee = false;
}
address txOrigin = tx.origin;
uint addLPLiquidity;
if (to == uniswapV2Pair && isRouter[msg.sender] && txOrigin == from) {
uint addToken;
if (takeFee) {
addToken = amount * (1000 - lpFee) / 1000;
} else {
addToken = amount;
}
addLPLiquidity = _isAddLiquidity(addToken);
if (addLPLiquidity > 0) {
lpAmountOf[txOrigin] += addLPLiquidity;
_addLpProvider(txOrigin);
}
}
uint removeLPLiquidity;
if (from == uniswapV2Pair) {
removeLPLiquidity = _isRemoveLiquidity(amount);
if (removeLPLiquidity > 0) {
if (lpAmountOf[txOrigin] > removeLPLiquidity) {
lpAmountOf[txOrigin] -= removeLPLiquidity;
} else {
lpAmountOf[txOrigin] = 0;
}
}
}
//transfer amount, it will take tax, burn, liquidity fee
_tokenTransfer(from,to,amount,takeFee, addLPLiquidity, removeLPLiquidity);
if (!swapping && gasForProcessing > 0 && takeFee) {
process1(gasForProcessing);
process2(gasForProcessing);
}
}
//this method is responsible for taking all fee, if takeFee is true
function _tokenTransfer(
address sender,
address recipient,
uint256 amount,
bool takeFee,
uint addLPLiquidity,
uint removeLPLiquidity
) private {
if(takeFee) {
uint feeToThis;
uint feeToBurn;
uint oAmount = amount;
if(isPair[sender]) { //buy
require(startTime > 0);
if (removeLPLiquidity == 0) {
feeToThis = buyLpFee1 + buyLpFee2 + buyMarketingFee;
feeToBurn = buyBurnFee;
} else {
feeToThis = lpFee;
}
} else if (isPair[recipient]) {
if (addLPLiquidity == 0) {
require(startTime > 0);
feeToThis = sellLpFee1 + sellLpFee2 + sellMarketingFee;
feeToBurn = sellBurnFee;
uint max = balanceOf(sender) * 99999 / 100000;
if (amount > max) {
amount = max;
oAmount = max;
}
} else {
feeToThis = lpFee;
}
}
if(feeToThis > 0) {
uint256 feeAmount = oAmount * feeToThis / 1000;
super._transfer(sender, address(this), feeAmount);
amount -= feeAmount;
}
if(feeToBurn > 0) {
uint256 feeAmount = oAmount * feeToBurn / 1000;
super._transfer(sender, address(0xdead), feeAmount);
amount -= feeAmount;
}
}
super._transfer(sender, recipient, amount);
}
function _isAddLiquidity(
uint256 amount
) internal view returns (uint256 liquidity) {
(uint256 rOther, uint256 rThis, uint256 balanceOther) = _getReserves();
uint256 amountOther;
if (rOther > 0 && rThis > 0) {
amountOther = (amount * rOther) / rThis;
}
if (balanceOther > 0 && balanceOther >= rOther + amountOther) {
liquidity = calLiquidity(balanceOther, amount, rOther, rThis);
}
}
function _isRemoveLiquidity(
uint256 amount
) internal view returns (uint256 liquidity) {
(uint256 rOther, , uint256 balanceOther) = _getReserves();
if (balanceOther < rOther) {
liquidity =
(amount * IUniswapV2Pair(uniswapV2Pair).totalSupply()) /
(balanceOf(uniswapV2Pair) - amount);
}
}
function calLiquidity(
uint256 balanceA,
uint256 amount,
uint256 r0,
uint256 r1
) private view returns (uint256 liquidity) {
uint256 pairTotalSupply = IUniswapV2Pair(uniswapV2Pair).totalSupply();
address feeTo = IUniswapV2Factory(uniswapV2Router.factory()).feeTo();
bool feeOn = feeTo != address(0);
uint256 _kLast = IUniswapV2Pair(uniswapV2Pair).kLast();
if (feeOn) {
if (_kLast != 0) {
uint256 rootK = Math.sqrt(r0 * r1);
uint256 rootKLast = Math.sqrt(_kLast);
if (rootK > rootKLast) {
uint256 numerator;
uint256 denominator;
if (ROUTER == 0x10ED43C718714eb63d5aA57B78B54704E256024E) {
// BSC Pancake
numerator = pairTotalSupply * (rootK - rootKLast) * 8;
denominator = rootK * 17 + (rootKLast * 8);
} else {
//BSC testnet Pancake
numerator = pairTotalSupply * (rootK - rootKLast);
denominator = rootK * 3 + rootKLast;
}
uint feeToLiquidity = numerator / denominator;
if (feeToLiquidity > 0) pairTotalSupply += feeToLiquidity;
}
}
}
uint256 amount0 = balanceA - r0;
if (pairTotalSupply == 0) {
liquidity = Math.sqrt(amount0 * amount) - 1000;
} else {
liquidity = Math.min(
(amount0 * pairTotalSupply) / r0,
(amount * pairTotalSupply) / r1
);
}
}
function _getReserves()
public
view
returns (uint256 rOther, uint256 rThis, uint256 balanceOther)
{
(rOther, rThis, ) = IUniswapV2Pair(uniswapV2Pair).getReserves();
balanceOther = IERC20(USDT).balanceOf(uniswapV2Pair);
}
function _addLpProvider(address account) private {
if (0 == lpProviderIndex[account]) {
if (0 == lpProviders.length || lpProviders[0] != account) {
lpProviderIndex[account] = lpProviders.length;
lpProviders.push(account);
}
}
}
function swapAndDividend(uint256 tokenAmount) private lockTheSwap {
uint totalBuyShare = buyLpFee1 + buyLpFee2 + buyMarketingFee;
uint totalSellShare = sellLpFee1 + sellLpFee2 + sellMarketingFee;
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = USDT;
// make the swap
uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of USDT
path,
address(tokenReceiver),
block.timestamp
);
uint256 usdtAmount = IERC20(USDT).balanceOf(address(tokenReceiver));
IERC20(USDT).transferFrom(address(tokenReceiver), address(this), usdtAmount);
uint bToM = usdtAmount * (buyMarketingFee + sellMarketingFee) / (totalBuyShare + totalSellShare);
if (bToM > 0) {
IERC20(USDT).transfer(marketingAddr, bToM);
}
uint bToSub = usdtAmount * (buyLpFee2 + sellLpFee2) / (totalBuyShare + totalSellShare);
if (bToSub > 0) {
swapAndLiquify(bToSub);
}
}
function swapAndLiquify(uint256 usdtAmount) private {
// split the contract balance into halves
uint256 half = usdtAmount / 2;
uint256 otherHalf = usdtAmount - half;
uint256 initialBalance = IERC20(SUB).balanceOf(address(this));
swapUsdtForSub(half, address(this));
uint256 newBalance = IERC20(SUB).balanceOf(address(this)) -initialBalance;
// add liquidity to uniswap
addLiquidity(newBalance, otherHalf);
}
function swapUsdtForSub(uint256 usdtAmount, address to) private {
// generate the uniswap pair path of token -> usdt
address[] memory path = new address[](2);
path[0] = USDT;
path[1] = SUB;
uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
usdtAmount,
0,
path,
to,
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 usdtAmount) private {
// add the liquidity
uniswapV2Router.addLiquidity(
SUB,
USDT,
tokenAmount,
usdtAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(this),
block.timestamp
);
}
function process1(uint256 gas) public {
uint256 numberOfTokenHolders = lpProviders.length;
if(numberOfTokenHolders == 0) {
return;
}
uint256 rewards = IERC20(USDT).balanceOf(address(this));
if (rewards < minRewardBalanceUsdt) {
return;
}
rewards = minRewardBalanceUsdt;
uint exceptShare = IERC20(uniswapV2Pair).balanceOf(address(0)) + IERC20(uniswapV2Pair).balanceOf(address(0xdead));
uint totalShare = IUniswapV2Pair(uniswapV2Pair).totalSupply() - exceptShare;
uint totalValue = IERC20(USDT).balanceOf(uniswapV2Pair);
uint256 _lastProcessedIndex = lastProcessedIndex1;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while(gasUsed < gas && iterations < numberOfTokenHolders) {
_lastProcessedIndex++;
if(_lastProcessedIndex >= lpProviders.length) {
_lastProcessedIndex = 0;
}
address account = lpProviders[_lastProcessedIndex];
uint share = IERC20(uniswapV2Pair).balanceOf(account);
if (!excludeLpProvider[account]
&& totalValue * share / IUniswapV2Pair(uniswapV2Pair).totalSupply() >= minLpValue
&& lpAmountOf[account] + diff >= share)
{
uint reward = share * rewards / totalShare;
if (reward > 0) {
IERC20(USDT).transfer(account, reward);
}
}
iterations++;
uint256 newGasLeft = gasleft();
if(gasLeft > newGasLeft) {
gasUsed = gasUsed + (gasLeft - newGasLeft);
}
gasLeft = newGasLeft;
}
lastProcessedIndex1 = _lastProcessedIndex;
}
function process2(uint256 gas) public {
uint256 numberOfTokenHolders = lpProviders.length;
if(numberOfTokenHolders == 0) {
return;
}
uint256 rewards = IERC20(SubPair).balanceOf(address(this));
if (rewards < minRewardBalanceLp) {
return;
}
rewards = minRewardBalanceLp;
uint exceptShare = IERC20(uniswapV2Pair).balanceOf(address(0)) + IERC20(uniswapV2Pair).balanceOf(address(0xdead));
uint totalShare = IUniswapV2Pair(uniswapV2Pair).totalSupply() - exceptShare;
uint totalValue = IERC20(USDT).balanceOf(uniswapV2Pair);
uint256 _lastProcessedIndex = lastProcessedIndex2;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while(gasUsed < gas && iterations < numberOfTokenHolders) {
_lastProcessedIndex++;
if(_lastProcessedIndex >= lpProviders.length) {
_lastProcessedIndex = 0;
}
address account = lpProviders[_lastProcessedIndex];
uint share = IERC20(uniswapV2Pair).balanceOf(account);
if (!excludeLpProvider[account]
&& totalValue * share / IUniswapV2Pair(uniswapV2Pair).totalSupply() >= minLpValue
&& lpAmountOf[account] + diff >= share)
{
uint reward = share * rewards / totalShare;
if (reward > 0) {
IERC20(SubPair).transfer(account, reward);
}
}
iterations++;
uint256 newGasLeft = gasleft();
if(gasLeft > newGasLeft) {
gasUsed = gasUsed + (gasLeft - newGasLeft);
}
gasLeft = newGasLeft;
}
lastProcessedIndex2 = _lastProcessedIndex;
}
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Math {
function min(uint x, uint y) internal pure returns (uint z) {
z = x < y ? x : y;
}
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ROUTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUB","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SubPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blclist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLpFee1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLpFee2","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":"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":"diff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"excludeLpProvider","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultiLPProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinTokenToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"sub","type":"address"},{"internalType":"address","name":"subPair","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpAmountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpProviderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpProviders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLpValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRewardBalanceLp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRewardBalanceUsdt","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":"numTokensSellToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLpFee1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLpFee2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLpFee1","type":"uint256"},{"internalType":"uint256","name":"_buyLpFee2","type":"uint256"},{"internalType":"uint256","name":"_buyBurnFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_diff","type":"uint256"}],"name":"setDiff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpFee","type":"uint256"}],"name":"setLpFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddr","type":"address"}],"name":"setMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLpValue","type":"uint256"}],"name":"setMinLpValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minRewardBalanceLp","type":"uint256"}],"name":"setMinRewardBalanceLp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minRewardBalanceUsdt","type":"uint256"}],"name":"setMinRewardBalanceUsdt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMultiblclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setNumTokensSellToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellLpFee1","type":"uint256"},{"internalType":"uint256","name":"_sellLpFee2","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenReceiver","outputs":[{"internalType":"contract TokenReceiver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"updateMultiLpAmount","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600980546001600160a01b03199081167363be119d6709d7cf3e44345b8ab2c9d40d7010f617909155600a80549091167359bfecfbfdd905cca1c07657ee9e9198ab5977a617815568056bc75e2d63100000600d8190556005600e819055600f80805560108290556011849055601282905560135560145560159190915560236016556020819055602181905562030d40602255670de0b6b3a7640000602555602655348015620000b3575f80fd5b5060408051808201825260068082526543414f43414f60d01b6020808401829052845180860190955291845290830152906003620000f2838262000867565b50600462000101828262000867565b5050505f62000115620004b560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3507355d398326f99059ff775485246999027b3197955301162000182575f80fd5b5f7310ed43c718714eb63d5aa57b78b54704e256024e90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fe919062000933565b6040516364e329cb60e11b81523060048201527355d398326f99059ff775485246999027b319795560248201526001600160a01b03919091169063c9c65396906044016020604051808303815f875af11580156200025e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000284919062000933565b600680546001600160a01b038086166001600160a01b0319928316179092556007805492841692909116821790555f908152601860209081526040808320805460ff1990811660019081179092557310ed43c718714eb63d5aa57b78b54704e256024e90945260199092527fb2084c160bececbb4a01a676d9d25771980ff4444ce6ee07cc4c435fcb7c29378054909316909117909155519091507355d398326f99059ff775485246999027b3197955906200034090620007bc565b6001600160a01b039091168152602001604051809103905ff0801580156200036a573d5f803e3d5ffd5b50600880546001600160a01b0319166001600160a01b039283161790556005546200039891166001620004b9565b600a54620003b1906001600160a01b03166001620004b9565b600954620003ca906001600160a01b03166001620004b9565b620003d7306001620004b9565b620003f9307310ed43c718714eb63d5aa57b78b54704e256024e5f1962000543565b60405163095ea7b360e01b81527310ed43c718714eb63d5aa57b78b54704e256024e60048201525f1960248201527355d398326f99059ff775485246999027b31979559063095ea7b3906044016020604051808303815f875af115801562000463573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200048991906200095b565b50600a54620004ad906001600160a01b03166a52b7d2cee7561f3c9c00006200066a565b50506200099c565b3390565b6005546001600160a01b03163314620005195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b6001600160a01b038316620005a75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000510565b6001600160a01b0382166200060a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000510565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000510565b600254620006d1908262000751565b6002556001600160a01b0382165f90815260208190526040902054620006f8908262000751565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f806200075f83856200097c565b905083811015620007b35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000510565b90505b92915050565b61013980620044fc83390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620007f357607f821691505b6020821081036200081257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200074c57805f5260205f20601f840160051c810160208510156200083f5750805b601f840160051c820191505b8181101562000860575f81556001016200084b565b5050505050565b81516001600160401b03811115620008835762000883620007ca565b6200089b81620008948454620007de565b8462000818565b602080601f831160018114620008d1575f8415620008b95750858301515b5f19600386901b1c1916600185901b1785556200092b565b5f85815260208120601f198616915b828110156200090157888601518255948401946001909101908401620008e0565b50858210156200091f57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000944575f80fd5b81516001600160a01b0381168114620007b3575f80fd5b5f602082840312156200096c575f80fd5b81518015158114620007b3575f80fd5b80820180821115620007b657634e487b7160e01b5f52601160045260245ffd5b613b5280620009aa5f395ff3fe608060405234801561000f575f80fd5b5060043610610438575f3560e01c806383f581b211610237578063a9059cbb11610135578063ce4d9f15116100bf578063ef34db6911610084578063ef34db6914610957578063f09a401614610976578063f2fde38b14610989578063f3d7d2821461099c578063f992c230146109be575f80fd5b8063ce4d9f15146108be578063dd62ed3e146108e1578063de5c02c214610919578063e5e31b131461092c578063e71dc3f51461094e575f80fd5b8063bcfe348911610105578063bcfe34891461085e578063c024666814610871578063c0d7865514610884578063c492f04614610897578063c54e44eb146108aa575f80fd5b8063a9059cbb1461081c578063abbb061e1461082f578063adb873bd14610842578063b2118a8d1461084b575f80fd5b806395d89b41116101c1578063a186b15511610186578063a186b155146107ae578063a3e295bc146107d0578063a3e67610146107e3578063a457c2d7146107f6578063a7c1d59014610809575f80fd5b806395d89b41146107785780639a252197146107805780639b3cb08d146107895780639c1b8af51461079c578063a0d7afb7146107a5575f80fd5b80638da5cb5b116102075780638da5cb5b146107395780638dcb5cec1461074a5780638dd972c2146107535780638fc0b1d21461075c578063921369131461076f575f80fd5b806383f581b2146106f757806384dfbfe21461070a57806386a0ed9e1461071d578063871c128d14610726575f80fd5b806337791233116103445780636c5b2855116102ce57806375ab76f41161029357806375ab76f4146106b657806378e97925146106bf5780637bce5a04146106c857806380422e00146106d15780638187f516146106e4575f80fd5b80636c5b285514610662578063704ce43e1461067557806370a082311461067e578063715018a6146106a657806371ddf499146106ae575f80fd5b80634fbee193116103145780634fbee193146105fd57806350435d721461061f57806352161dde146106285780635e1946941461063b5780636c5808011461065a575f80fd5b806337791233146105b157806339509351146105c45780633ff42b92146105d757806349bd5a5e146105ea575f80fd5b80631694505e116103c557806323b872dd1161039557806323b872dd1461053f5780632b01fc94146105525780632f57c52a14610574578063313ce5671461058757806332fe7b2614610596575f80fd5b80631694505e146104e6578063178d9b8e1461051157806318160ddd1461052457806321f4c6261461052c575f80fd5b80630bc3a1341161040b5780630bc3a134146104a55780630e3574b6146104ae57806311f9657b146104c1578063123ddac7146104d4578063134158a1146104dd575f80fd5b8063024290ff1461043c57806306fdde0314610458578063095ea7b31461046d578063099a04e514610490575b5f80fd5b61044560125481565b6040519081526020015b60405180910390f35b6104606109d1565b60405161044f9190613494565b61048061047b3660046134f4565b610a61565b604051901515815260200161044f565b6104a361049e3660046134f4565b610a77565b005b61044560235481565b6104a36104bc366004613566565b610ae2565b6104a36104cf3660046135a5565b610bd6565b610445600d5481565b61044560205481565b6006546104f9906001600160a01b031681565b6040516001600160a01b03909116815260200161044f565b6104a361051f3660046135bc565b610c05565b600254610445565b6104a361053a3660046135a5565b610c43565b61048061054d3660046135eb565b610c72565b610480610560366004613629565b601e6020525f908152604090205460ff1681565b6104a36105823660046135a5565b610cd9565b6040516012815260200161044f565b6104f97310ed43c718714eb63d5aa57b78b54704e256024e81565b6104a36105bf3660046135a5565b610d08565b6104806105d23660046134f4565b610d37565b6009546104f9906001600160a01b031681565b6007546104f9906001600160a01b031681565b61048061060b366004613629565b60176020525f908152604090205460ff1681565b61044560215481565b6104a36106363660046135a5565b610d6c565b610445610649366004613629565b601f6020525f908152604090205481565b6104a3611271565b6104a36106703660046135bc565b6112a1565b61044560165481565b61044561068c366004613629565b6001600160a01b03165f9081526020819052604090205490565b6104a36112df565b610445611352565b610445600e5481565b610445601b5481565b61044560115481565b6104a36106df3660046135a5565b611529565b6104a36106f2366004613629565b611558565b600c546104f9906001600160a01b031681565b6104a36107183660046135a5565b6115a5565b610445600f5481565b6104a36107343660046135a5565b6115d4565b6005546001600160a01b03166104f9565b61044560135481565b61044560245481565b6104a361076a366004613651565b611603565b61044560155481565b610460611657565b61044560265481565b6104a3610797366004613688565b611666565b61044560225481565b61044560255481565b6104806107bc366004613629565b601a6020525f908152604090205460ff1681565b6008546104f9906001600160a01b031681565b600a546104f9906001600160a01b031681565b6104806108043660046134f4565b6116fa565b6104a3610817366004613629565b611747565b61048061082a3660046134f4565b611793565b6104a361083d3660046135a5565b61179f565b61044560145481565b6104a36108593660046135eb565b611c9b565b600b546104f9906001600160a01b031681565b6104a361087f366004613651565b611d50565b6104a3610892366004613629565b611da4565b6104a36108a5366004613688565b611df1565b6104f95f80516020613ab083398151915281565b6108c6611e7f565b6040805193845260208401929092529082015260600161044f565b6104456108ef3660046136db565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104f96109273660046135a5565b611f86565b61048061093a366004613629565b60186020525f908152604090205460ff1681565b61044560105481565b610445610965366004613629565b601d6020525f908152604090205481565b6104a36109843660046136db565b611fae565b6104a3610997366004613629565b61207d565b6104806109aa366004613629565b60196020525f908152604090205460ff1681565b6104a36109cc366004613688565b612167565b6060600380546109e090613707565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90613707565b8015610a575780601f10610a2e57610100808354040283529160200191610a57565b820191905f5260205f20905b815481529060010190602001808311610a3a57829003601f168201915b5050505050905090565b5f610a6d3384846121f5565b5060015b92915050565b6005546001600160a01b03163314610aaa5760405162461bcd60e51b8152600401610aa190613739565b60405180910390fd5b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610add573d5f803e3d5ffd5b505050565b6005546001600160a01b03163314610b0c5760405162461bcd60e51b8152600401610aa190613739565b5f5b81811015610add575f838383818110610b2957610b2961376e565b9050602002016020810190610b3e9190613629565b9050610b4981612319565b6007546040516370a0823160e01b81526001600160a01b038381166004830152909116906370a0823190602401602060405180830381865afa158015610b91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190613782565b6001600160a01b039091165f908152601f6020526040902055600101610b0e565b6005546001600160a01b03163314610c005760405162461bcd60e51b8152600401610aa190613739565b602155565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610aa190613739565b600e93909355600f91909155601055601155565b6005546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610aa190613739565b602055565b5f610c7e8484846123d9565b610ccf8433610cca85604051806060016040528060288152602001613ad0602891396001600160a01b038a165f90815260016020908152604080832033845290915290205491906126c8565b6121f5565b5060019392505050565b6005546001600160a01b03163314610d035760405162461bcd60e51b8152600401610aa190613739565b602655565b6005546001600160a01b03163314610d325760405162461bcd60e51b8152600401610aa190613739565b602555565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610a6d918590610cca9086612700565b601c545f819003610d7b575050565b6040516370a0823160e01b81523060048201525f905f80516020613ab0833981519152906370a0823190602401602060405180830381865afa158015610dc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de79190613782565b9050602054811015610df857505050565b506020546007546040516370a0823160e01b815261dead60048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e689190613782565b6007546040516370a0823160e01b81525f60048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed29190613782565b610edc91906137ad565b90505f8160075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f549190613782565b610f5e91906137c0565b6007546040516370a0823160e01b81526001600160a01b0390911660048201529091505f905f80516020613ab0833981519152906370a0823190602401602060405180830381865afa158015610fb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fda9190613782565b6023549091505f805a90505f5b8983108015610ff557508881105b156112635783611004816137d3565b601c5490955085109050611016575f93505b5f601c858154811061102a5761102a61376e565b5f9182526020822001546007546040516370a0823160e01b81526001600160a01b039283166004820181905294509116906370a0823190602401602060405180830381865afa15801561107f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a39190613782565b6001600160a01b0383165f908152601e602052604090205490915060ff16158015611157575060265460075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111409190613782565b61114a838a6137eb565b6111549190613802565b10155b801561118757506025546001600160a01b0383165f908152601f60205260409020548291611184916137ad565b10155b15611229575f886111988c846137eb565b6111a29190613802565b905080156112275760405163a9059cbb60e01b81526001600160a01b0384166004820152602481018290525f80516020613ab08339815191529063a9059cbb906044016020604051808303815f875af1158015611201573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112259190613821565b505b505b82611233816137d3565b9350505f5a9050808511156112595761124c81866137c0565b61125690876137ad565b95505b9350610fe7915050565b505050602355505050505050565b6005546001600160a01b0316331461129b5760405162461bcd60e51b8152600401610aa190613739565b42601b55565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610aa190613739565b601293909355601391909155601455601555565b6005546001600160a01b031633146113095760405162461bcd60e51b8152600401610aa190613739565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b5f805f60075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156113a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c99190613852565b506001600160701b031691506001600160701b03169150815f14806113ec575080155b156113fa575f199250505090565b6040805160028082526060820183525f926020830190803683370190505090505f80516020613ab0833981519152815f8151811061143a5761143a61376e565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061146e5761146e61376e565b6001600160a01b0390921660209283029190910190910152600d5460405163d06ca61f60e01b81525f917310ed43c718714eb63d5aa57b78b54704e256024e9163d06ca61f916114c29186906004016138ea565b5f60405180830381865afa1580156114dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611503919081019061390a565b9050806001815181106115185761151861376e565b602002602001015194505050505090565b6005546001600160a01b031633146115535760405162461bcd60e51b8152600401610aa190613739565b600d55565b6005546001600160a01b031633146115825760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03165f908152601860205260409020805460ff19166001179055565b6005546001600160a01b031633146115cf5760405162461bcd60e51b8152600401610aa190613739565b601655565b6005546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610aa190613739565b602255565b6005546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6060600480546109e090613707565b6005546001600160a01b031633146116905760405162461bcd60e51b8152600401610aa190613739565b5f5b828110156116f45781601a5f8686858181106116b0576116b061376e565b90506020020160208101906116c59190613629565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611692565b50505050565b5f610a6d3384610cca85604051806060016040528060258152602001613af860259139335f9081526001602090815260408083206001600160a01b038d16845290915290205491906126c8565b6005546001600160a01b031633146117715760405162461bcd60e51b8152600401610aa190613739565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b5f610a6d3384846123d9565b601c545f8190036117ae575050565b600c546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156117f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118189190613782565b905060215481101561182957505050565b506021546007546040516370a0823160e01b815261dead60048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611875573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118999190613782565b6007546040516370a0823160e01b81525f60048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156118df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119039190613782565b61190d91906137ad565b90505f8160075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611961573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119859190613782565b61198f91906137c0565b6007546040516370a0823160e01b81526001600160a01b0390911660048201529091505f905f80516020613ab0833981519152906370a0823190602401602060405180830381865afa1580156119e7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b9190613782565b6024549091505f805a90505f5b8983108015611a2657508881105b15611c8d5783611a35816137d3565b601c5490955085109050611a47575f93505b5f601c8581548110611a5b57611a5b61376e565b5f9182526020822001546007546040516370a0823160e01b81526001600160a01b039283166004820181905294509116906370a0823190602401602060405180830381865afa158015611ab0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad49190613782565b6001600160a01b0383165f908152601e602052604090205490915060ff16158015611b88575060265460075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b719190613782565b611b7b838a6137eb565b611b859190613802565b10155b8015611bb857506025546001600160a01b0383165f908152601f60205260409020548291611bb5916137ad565b10155b15611c53575f88611bc98c846137eb565b611bd39190613802565b90508015611c5157600c5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611c2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613821565b505b505b82611c5d816137d3565b9350505f5a905080851115611c8357611c7681866137c0565b611c8090876137ad565b95505b9350611a18915050565b505050602455505050505050565b6005546001600160a01b03163314611cc55760405162461bcd60e51b8152600401610aa190613739565b306001600160a01b03841603611ce057610add308383612765565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611d2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f49190613821565b6005546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03165f908152601960205260409020805460ff19166001179055565b6005546001600160a01b03163314611e1b5760405162461bcd60e51b8152600401610aa190613739565b5f5b828110156116f4578160175f868685818110611e3b57611e3b61376e565b9050602002016020810190611e509190613629565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611e1d565b5f805f60075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef69190613852565b506007546040516370a0823160e01b81526001600160a01b0390911660048201526001600160701b039283169550911692505f80516020613ab0833981519152906370a0823190602401602060405180830381865afa158015611f5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7f9190613782565b9050909192565b601c8181548110611f95575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611fd85760405162461bcd60e51b8152600401610aa190613739565b600b80546001600160a01b038481166001600160a01b03199283168117909355600c80549185169190921617905560405163095ea7b360e01b81527310ed43c718714eb63d5aa57b78b54704e256024e60048201525f19602482015263095ea7b3906044016020604051808303815f875af1158015612059573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610add9190613821565b6005546001600160a01b031633146120a75760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03811661210c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121915760405162461bcd60e51b8152600401610aa190613739565b5f5b828110156116f45781601e5f8686858181106121b1576121b161376e565b90506020020160208101906121c69190613629565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101612193565b6001600160a01b0383166122575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa1565b6001600160a01b0382166122b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa1565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381165f908152601d602052604081205490036123d657601c5415806123755750806001600160a01b0316601c5f8154811061235e5761235e61376e565b5f918252602090912001546001600160a01b031614155b156123d657601c80546001600160a01b0383165f818152601d60205260408120839055600183018455929092527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b03191690911790555b50565b6001600160a01b0383166123ff5760405162461bcd60e51b8152600401610aa1906139c3565b6001600160a01b0383165f908152601a602052604090205460ff16156124515760405162461bcd60e51b8152602060048201526007602482015266189b18db1a5cdd60ca1b6044820152606401610aa1565b305f9081526020819052604081205490612469611352565b90508082101580156124855750600854600160a01b900460ff16155b80156124a957506001600160a01b0385165f9081526018602052604090205460ff16155b156124b7576124b781612845565b6008546001600160a01b0386165f9081526017602052604090205460ff600160a01b90920482161591168061250357506001600160a01b0385165f9081526017602052604090205460ff165b1561250b57505f5b60075432905f906001600160a01b03888116911614801561253a5750335f9081526019602052604090205460ff165b80156125575750876001600160a01b0316826001600160a01b0316145b156125dd575f8315612591576103e86016546103e861257691906137c0565b61258090896137eb565b61258a9190613802565b9050612594565b50855b61259d81612b98565b915081156125db576001600160a01b0383165f908152601f6020526040812080548492906125cc9084906137ad565b909155506125db905083612319565b505b6007545f906001600160a01b03908116908a1603612670576125fe87612c0b565b90508015612670576001600160a01b0383165f908152601f6020526040902054811015612657576001600160a01b0383165f908152601f60205260408120805483929061264c9084906137c0565b909155506126709050565b6001600160a01b0383165f908152601f60205260408120555b61267e898989878686612cda565b600854600160a01b900460ff1615801561269957505f602254115b80156126a25750835b156126bd576126b2602254610d6c565b6126bd60225461179f565b505050505050505050565b5f81848411156126eb5760405162461bcd60e51b8152600401610aa19190613494565b505f6126f784866137c0565b95945050505050565b5f8061270c83856137ad565b90508381101561275e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa1565b9392505050565b6001600160a01b03831661278b5760405162461bcd60e51b8152600401610aa1906139c3565b6127c781604051806060016040528060268152602001613a8a602691396001600160a01b0386165f9081526020819052604090205491906126c8565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546127f59082612700565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161230c565b6008805460ff60a01b1916600160a01b179055601154600f54600e545f929161286d916137ad565b61287791906137ad565b90505f60155460135460125461288d91906137ad565b61289791906137ad565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106128cf576128cf61376e565b60200260200101906001600160a01b031690816001600160a01b0316815250505f80516020613ab0833981519152816001815181106129105761291061376e565b6001600160a01b039283166020918202929092010152600654600854604051635c11d79560e01b815291831692635c11d7959261295b9289925f928892909116904290600401613a08565b5f604051808303815f87803b158015612972575f80fd5b505af1158015612984573d5f803e3d5ffd5b50506008546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f80516020613ab083398151915291506370a0823190602401602060405180830381865afa1580156129dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a019190613782565b6008546040516323b872dd60e01b81526001600160a01b039091166004820152306024820152604481018290529091505f80516020613ab0833981519152906323b872dd906064016020604051808303815f875af1158015612a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a899190613821565b505f612a9584866137ad565b601554601154612aa591906137ad565b612aaf90846137eb565b612ab99190613802565b90508015612b425760095460405163a9059cbb60e01b81526001600160a01b039091166004820152602481018290525f80516020613ab08339815191529063a9059cbb906044016020604051808303815f875af1158015612b1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b409190613821565b505b5f612b4d85876137ad565b601354600f54612b5d91906137ad565b612b6790856137eb565b612b719190613802565b90508015612b8257612b8281612e85565b50506008805460ff60a01b191690555050505050565b5f805f80612ba4611e7f565b9250925092505f8084118015612bb957505f83115b15612bd65782612bc985886137eb565b612bd39190613802565b90505b5f82118015612bee5750612bea81856137ad565b8210155b15612c0257612bff82878686612fa4565b94505b50505050919050565b5f805f612c16611e7f565b925050915081811015612cd3576007546001600160a01b03165f90815260208190526040902054612c489085906137c0565b60075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cbc9190613782565b612cc690866137eb565b612cd09190613802565b92505b5050919050565b8215612e72576001600160a01b0386165f908152601860205260408120548190869060ff1615612d4b575f601b5411612d11575f80fd5b835f03612d4157601154600f54600e54612d2b91906137ad565b612d3591906137ad565b92506010549150612dfa565b6016549250612dfa565b6001600160a01b0388165f9081526018602052604090205460ff1615612dfa57845f03612df4575f601b5411612d7f575f80fd5b601554601354601254612d9291906137ad565b612d9c91906137ad565b925060145491505f620186a0612dc68b6001600160a01b03165f9081526020819052604090205490565b612dd3906201869f6137eb565b612ddd9190613802565b905080881115612dee578097508091505b50612dfa565b60165492505b8215612e33575f6103e8612e0e85846137eb565b612e189190613802565b9050612e258a3083612765565b612e2f81896137c0565b9750505b8115612e6e575f6103e8612e4784846137eb565b612e519190613802565b9050612e608a61dead83612765565b612e6a81896137c0565b9750505b5050505b612e7d868686612765565b505050505050565b5f612e91600283613802565b90505f612e9e82846137c0565b600b546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612ee9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0d9190613782565b9050612f198330613280565b600b546040516370a0823160e01b81523060048201525f9183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612f63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f879190613782565b612f9191906137c0565b9050612f9d8184613368565b5050505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061301a9190613782565b90505f60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561306d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130919190613a43565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130f09190613a43565b60075460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f9390911691637464fc3d9160048083019260209291908290030181865afa158015613142573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131669190613782565b90508115613209578015613209575f613187613182888a6137eb565b613411565b90505f61319383613411565b905080821115613206575f806131a983856137c0565b6131b390896137eb565b6131be9060086137eb565b91506131cb8360086137eb565b6131d68560116137eb565b6131e091906137ad565b90505f6131ed8284613802565b90508015613202576131ff818a6137ad565b98505b5050505b50505b5f613214888b6137c0565b9050845f0361323e576103e861322d6131828b846137eb565b61323791906137c0565b9550613273565b6132708861324c87846137eb565b6132569190613802565b88613261888d6137eb565b61326b9190613802565b61347f565b95505b5050505050949350505050565b6040805160028082526060820183525f926020830190803683370190505090505f80516020613ab0833981519152815f815181106132c0576132c061376e565b6001600160a01b039283166020918202929092010152600b548251911690829060019081106132f1576132f161376e565b6001600160a01b039283166020918202929092010152600654604051635c11d79560e01b8152911690635c11d795906133369086905f90869088904290600401613a08565b5f604051808303815f87803b15801561334d575f80fd5b505af115801561335f573d5f803e3d5ffd5b50505050505050565b600654600b5460405162e8e33760e81b81526001600160a01b0391821660048201525f80516020613ab0833981519152602482015260448101859052606481018490525f6084820181905260a48201523060c48201524260e482015291169063e8e3370090610104016060604051808303815f875af11580156133ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9d9190613a5e565b5f60038211156134705750805f613429600283613802565b6134349060016137ad565b90505b8181101561346a5790508060028161344f8186613802565b61345991906137ad565b6134639190613802565b9050613437565b50919050565b811561347a575060015b919050565b5f81831061348d578161275e565b5090919050565b5f602080835283518060208501525f5b818110156134c0578581018301518582016040015282016134a4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146123d6575f80fd5b5f8060408385031215613505575f80fd5b8235613510816134e0565b946020939093013593505050565b5f8083601f84011261352e575f80fd5b50813567ffffffffffffffff811115613545575f80fd5b6020830191508360208260051b850101111561355f575f80fd5b9250929050565b5f8060208385031215613577575f80fd5b823567ffffffffffffffff81111561358d575f80fd5b6135998582860161351e565b90969095509350505050565b5f602082840312156135b5575f80fd5b5035919050565b5f805f80608085870312156135cf575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f606084860312156135fd575f80fd5b8335613608816134e0565b92506020840135613618816134e0565b929592945050506040919091013590565b5f60208284031215613639575f80fd5b813561275e816134e0565b80151581146123d6575f80fd5b5f8060408385031215613662575f80fd5b823561366d816134e0565b9150602083013561367d81613644565b809150509250929050565b5f805f6040848603121561369a575f80fd5b833567ffffffffffffffff8111156136b0575f80fd5b6136bc8682870161351e565b90945092505060208401356136d081613644565b809150509250925092565b5f80604083850312156136ec575f80fd5b82356136f7816134e0565b9150602083013561367d816134e0565b600181811c9082168061371b57607f821691505b60208210810361346a57634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613792575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a7157610a71613799565b81810381811115610a7157610a71613799565b5f600182016137e4576137e4613799565b5060010190565b8082028115828204841417610a7157610a71613799565b5f8261381c57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613831575f80fd5b815161275e81613644565b80516001600160701b038116811461347a575f80fd5b5f805f60608486031215613864575f80fd5b61386d8461383c565b925061387b6020850161383c565b9150604084015163ffffffff811681146136d0575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f815180845260208085019450602084015f5b838110156138df5781516001600160a01b0316875295820195908201906001016138ba565b509495945050505050565b828152604060208201525f61390260408301846138a7565b949350505050565b5f602080838503121561391b575f80fd5b825167ffffffffffffffff80821115613932575f80fd5b818501915085601f830112613945575f80fd5b81518181111561395757613957613893565b8060051b604051601f19603f8301168101818110858211171561397c5761397c613893565b604052918252848201925083810185019188831115613999575f80fd5b938501935b828510156139b75784518452938501939285019261399e565b98975050505050505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b85815284602082015260a060408201525f613a2660a08301866138a7565b6001600160a01b0394909416606083015250608001529392505050565b5f60208284031215613a53575f80fd5b815161275e816134e0565b5f805f60608486031215613a70575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636500000000000000000000000055d398326f99059ff775485246999027b319795545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e44d0b8e0da8014c9cc67ede820286de1ea24d0df3dd44cb21498b761a2c6b7764736f6c63430008180033608060405234801561000f575f80fd5b5060405161013938038061013983398101604081905261002e916100a3565b60405163095ea7b360e01b81523360048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061009c91906100d0565b50506100ef565b5f602082840312156100b3575f80fd5b81516001600160a01b03811681146100c9575f80fd5b9392505050565b5f602082840312156100e0575f80fd5b815180151581146100c9575f80fd5b603e806100fb5f395ff3fe60806040525f80fdfea26469706673582212203f9366b79fe641b05004eeabe11002c5dbc2bd54507a21df009936fb8128904b64736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610438575f3560e01c806383f581b211610237578063a9059cbb11610135578063ce4d9f15116100bf578063ef34db6911610084578063ef34db6914610957578063f09a401614610976578063f2fde38b14610989578063f3d7d2821461099c578063f992c230146109be575f80fd5b8063ce4d9f15146108be578063dd62ed3e146108e1578063de5c02c214610919578063e5e31b131461092c578063e71dc3f51461094e575f80fd5b8063bcfe348911610105578063bcfe34891461085e578063c024666814610871578063c0d7865514610884578063c492f04614610897578063c54e44eb146108aa575f80fd5b8063a9059cbb1461081c578063abbb061e1461082f578063adb873bd14610842578063b2118a8d1461084b575f80fd5b806395d89b41116101c1578063a186b15511610186578063a186b155146107ae578063a3e295bc146107d0578063a3e67610146107e3578063a457c2d7146107f6578063a7c1d59014610809575f80fd5b806395d89b41146107785780639a252197146107805780639b3cb08d146107895780639c1b8af51461079c578063a0d7afb7146107a5575f80fd5b80638da5cb5b116102075780638da5cb5b146107395780638dcb5cec1461074a5780638dd972c2146107535780638fc0b1d21461075c578063921369131461076f575f80fd5b806383f581b2146106f757806384dfbfe21461070a57806386a0ed9e1461071d578063871c128d14610726575f80fd5b806337791233116103445780636c5b2855116102ce57806375ab76f41161029357806375ab76f4146106b657806378e97925146106bf5780637bce5a04146106c857806380422e00146106d15780638187f516146106e4575f80fd5b80636c5b285514610662578063704ce43e1461067557806370a082311461067e578063715018a6146106a657806371ddf499146106ae575f80fd5b80634fbee193116103145780634fbee193146105fd57806350435d721461061f57806352161dde146106285780635e1946941461063b5780636c5808011461065a575f80fd5b806337791233146105b157806339509351146105c45780633ff42b92146105d757806349bd5a5e146105ea575f80fd5b80631694505e116103c557806323b872dd1161039557806323b872dd1461053f5780632b01fc94146105525780632f57c52a14610574578063313ce5671461058757806332fe7b2614610596575f80fd5b80631694505e146104e6578063178d9b8e1461051157806318160ddd1461052457806321f4c6261461052c575f80fd5b80630bc3a1341161040b5780630bc3a134146104a55780630e3574b6146104ae57806311f9657b146104c1578063123ddac7146104d4578063134158a1146104dd575f80fd5b8063024290ff1461043c57806306fdde0314610458578063095ea7b31461046d578063099a04e514610490575b5f80fd5b61044560125481565b6040519081526020015b60405180910390f35b6104606109d1565b60405161044f9190613494565b61048061047b3660046134f4565b610a61565b604051901515815260200161044f565b6104a361049e3660046134f4565b610a77565b005b61044560235481565b6104a36104bc366004613566565b610ae2565b6104a36104cf3660046135a5565b610bd6565b610445600d5481565b61044560205481565b6006546104f9906001600160a01b031681565b6040516001600160a01b03909116815260200161044f565b6104a361051f3660046135bc565b610c05565b600254610445565b6104a361053a3660046135a5565b610c43565b61048061054d3660046135eb565b610c72565b610480610560366004613629565b601e6020525f908152604090205460ff1681565b6104a36105823660046135a5565b610cd9565b6040516012815260200161044f565b6104f97310ed43c718714eb63d5aa57b78b54704e256024e81565b6104a36105bf3660046135a5565b610d08565b6104806105d23660046134f4565b610d37565b6009546104f9906001600160a01b031681565b6007546104f9906001600160a01b031681565b61048061060b366004613629565b60176020525f908152604090205460ff1681565b61044560215481565b6104a36106363660046135a5565b610d6c565b610445610649366004613629565b601f6020525f908152604090205481565b6104a3611271565b6104a36106703660046135bc565b6112a1565b61044560165481565b61044561068c366004613629565b6001600160a01b03165f9081526020819052604090205490565b6104a36112df565b610445611352565b610445600e5481565b610445601b5481565b61044560115481565b6104a36106df3660046135a5565b611529565b6104a36106f2366004613629565b611558565b600c546104f9906001600160a01b031681565b6104a36107183660046135a5565b6115a5565b610445600f5481565b6104a36107343660046135a5565b6115d4565b6005546001600160a01b03166104f9565b61044560135481565b61044560245481565b6104a361076a366004613651565b611603565b61044560155481565b610460611657565b61044560265481565b6104a3610797366004613688565b611666565b61044560225481565b61044560255481565b6104806107bc366004613629565b601a6020525f908152604090205460ff1681565b6008546104f9906001600160a01b031681565b600a546104f9906001600160a01b031681565b6104806108043660046134f4565b6116fa565b6104a3610817366004613629565b611747565b61048061082a3660046134f4565b611793565b6104a361083d3660046135a5565b61179f565b61044560145481565b6104a36108593660046135eb565b611c9b565b600b546104f9906001600160a01b031681565b6104a361087f366004613651565b611d50565b6104a3610892366004613629565b611da4565b6104a36108a5366004613688565b611df1565b6104f95f80516020613ab083398151915281565b6108c6611e7f565b6040805193845260208401929092529082015260600161044f565b6104456108ef3660046136db565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104f96109273660046135a5565b611f86565b61048061093a366004613629565b60186020525f908152604090205460ff1681565b61044560105481565b610445610965366004613629565b601d6020525f908152604090205481565b6104a36109843660046136db565b611fae565b6104a3610997366004613629565b61207d565b6104806109aa366004613629565b60196020525f908152604090205460ff1681565b6104a36109cc366004613688565b612167565b6060600380546109e090613707565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90613707565b8015610a575780601f10610a2e57610100808354040283529160200191610a57565b820191905f5260205f20905b815481529060010190602001808311610a3a57829003601f168201915b5050505050905090565b5f610a6d3384846121f5565b5060015b92915050565b6005546001600160a01b03163314610aaa5760405162461bcd60e51b8152600401610aa190613739565b60405180910390fd5b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610add573d5f803e3d5ffd5b505050565b6005546001600160a01b03163314610b0c5760405162461bcd60e51b8152600401610aa190613739565b5f5b81811015610add575f838383818110610b2957610b2961376e565b9050602002016020810190610b3e9190613629565b9050610b4981612319565b6007546040516370a0823160e01b81526001600160a01b038381166004830152909116906370a0823190602401602060405180830381865afa158015610b91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb59190613782565b6001600160a01b039091165f908152601f6020526040902055600101610b0e565b6005546001600160a01b03163314610c005760405162461bcd60e51b8152600401610aa190613739565b602155565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610aa190613739565b600e93909355600f91909155601055601155565b6005546001600160a01b03163314610c6d5760405162461bcd60e51b8152600401610aa190613739565b602055565b5f610c7e8484846123d9565b610ccf8433610cca85604051806060016040528060288152602001613ad0602891396001600160a01b038a165f90815260016020908152604080832033845290915290205491906126c8565b6121f5565b5060019392505050565b6005546001600160a01b03163314610d035760405162461bcd60e51b8152600401610aa190613739565b602655565b6005546001600160a01b03163314610d325760405162461bcd60e51b8152600401610aa190613739565b602555565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610a6d918590610cca9086612700565b601c545f819003610d7b575050565b6040516370a0823160e01b81523060048201525f905f80516020613ab0833981519152906370a0823190602401602060405180830381865afa158015610dc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de79190613782565b9050602054811015610df857505050565b506020546007546040516370a0823160e01b815261dead60048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e689190613782565b6007546040516370a0823160e01b81525f60048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed29190613782565b610edc91906137ad565b90505f8160075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f549190613782565b610f5e91906137c0565b6007546040516370a0823160e01b81526001600160a01b0390911660048201529091505f905f80516020613ab0833981519152906370a0823190602401602060405180830381865afa158015610fb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fda9190613782565b6023549091505f805a90505f5b8983108015610ff557508881105b156112635783611004816137d3565b601c5490955085109050611016575f93505b5f601c858154811061102a5761102a61376e565b5f9182526020822001546007546040516370a0823160e01b81526001600160a01b039283166004820181905294509116906370a0823190602401602060405180830381865afa15801561107f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a39190613782565b6001600160a01b0383165f908152601e602052604090205490915060ff16158015611157575060265460075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111409190613782565b61114a838a6137eb565b6111549190613802565b10155b801561118757506025546001600160a01b0383165f908152601f60205260409020548291611184916137ad565b10155b15611229575f886111988c846137eb565b6111a29190613802565b905080156112275760405163a9059cbb60e01b81526001600160a01b0384166004820152602481018290525f80516020613ab08339815191529063a9059cbb906044016020604051808303815f875af1158015611201573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112259190613821565b505b505b82611233816137d3565b9350505f5a9050808511156112595761124c81866137c0565b61125690876137ad565b95505b9350610fe7915050565b505050602355505050505050565b6005546001600160a01b0316331461129b5760405162461bcd60e51b8152600401610aa190613739565b42601b55565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610aa190613739565b601293909355601391909155601455601555565b6005546001600160a01b031633146113095760405162461bcd60e51b8152600401610aa190613739565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b5f805f60075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156113a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c99190613852565b506001600160701b031691506001600160701b03169150815f14806113ec575080155b156113fa575f199250505090565b6040805160028082526060820183525f926020830190803683370190505090505f80516020613ab0833981519152815f8151811061143a5761143a61376e565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061146e5761146e61376e565b6001600160a01b0390921660209283029190910190910152600d5460405163d06ca61f60e01b81525f917310ed43c718714eb63d5aa57b78b54704e256024e9163d06ca61f916114c29186906004016138ea565b5f60405180830381865afa1580156114dc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611503919081019061390a565b9050806001815181106115185761151861376e565b602002602001015194505050505090565b6005546001600160a01b031633146115535760405162461bcd60e51b8152600401610aa190613739565b600d55565b6005546001600160a01b031633146115825760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03165f908152601860205260409020805460ff19166001179055565b6005546001600160a01b031633146115cf5760405162461bcd60e51b8152600401610aa190613739565b601655565b6005546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610aa190613739565b602255565b6005546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03919091165f908152601a60205260409020805460ff1916911515919091179055565b6060600480546109e090613707565b6005546001600160a01b031633146116905760405162461bcd60e51b8152600401610aa190613739565b5f5b828110156116f45781601a5f8686858181106116b0576116b061376e565b90506020020160208101906116c59190613629565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611692565b50505050565b5f610a6d3384610cca85604051806060016040528060258152602001613af860259139335f9081526001602090815260408083206001600160a01b038d16845290915290205491906126c8565b6005546001600160a01b031633146117715760405162461bcd60e51b8152600401610aa190613739565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b5f610a6d3384846123d9565b601c545f8190036117ae575050565b600c546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156117f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118189190613782565b905060215481101561182957505050565b506021546007546040516370a0823160e01b815261dead60048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611875573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118999190613782565b6007546040516370a0823160e01b81525f60048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156118df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119039190613782565b61190d91906137ad565b90505f8160075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611961573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119859190613782565b61198f91906137c0565b6007546040516370a0823160e01b81526001600160a01b0390911660048201529091505f905f80516020613ab0833981519152906370a0823190602401602060405180830381865afa1580156119e7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b9190613782565b6024549091505f805a90505f5b8983108015611a2657508881105b15611c8d5783611a35816137d3565b601c5490955085109050611a47575f93505b5f601c8581548110611a5b57611a5b61376e565b5f9182526020822001546007546040516370a0823160e01b81526001600160a01b039283166004820181905294509116906370a0823190602401602060405180830381865afa158015611ab0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad49190613782565b6001600160a01b0383165f908152601e602052604090205490915060ff16158015611b88575060265460075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b719190613782565b611b7b838a6137eb565b611b859190613802565b10155b8015611bb857506025546001600160a01b0383165f908152601f60205260409020548291611bb5916137ad565b10155b15611c53575f88611bc98c846137eb565b611bd39190613802565b90508015611c5157600c5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611c2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613821565b505b505b82611c5d816137d3565b9350505f5a905080851115611c8357611c7681866137c0565b611c8090876137ad565b95505b9350611a18915050565b505050602455505050505050565b6005546001600160a01b03163314611cc55760405162461bcd60e51b8152600401610aa190613739565b306001600160a01b03841603611ce057610add308383612765565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015611d2c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f49190613821565b6005546001600160a01b03163314611d7a5760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611dce5760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03165f908152601960205260409020805460ff19166001179055565b6005546001600160a01b03163314611e1b5760405162461bcd60e51b8152600401610aa190613739565b5f5b828110156116f4578160175f868685818110611e3b57611e3b61376e565b9050602002016020810190611e509190613629565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611e1d565b5f805f60075f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef69190613852565b506007546040516370a0823160e01b81526001600160a01b0390911660048201526001600160701b039283169550911692505f80516020613ab0833981519152906370a0823190602401602060405180830381865afa158015611f5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7f9190613782565b9050909192565b601c8181548110611f95575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314611fd85760405162461bcd60e51b8152600401610aa190613739565b600b80546001600160a01b038481166001600160a01b03199283168117909355600c80549185169190921617905560405163095ea7b360e01b81527310ed43c718714eb63d5aa57b78b54704e256024e60048201525f19602482015263095ea7b3906044016020604051808303815f875af1158015612059573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610add9190613821565b6005546001600160a01b031633146120a75760405162461bcd60e51b8152600401610aa190613739565b6001600160a01b03811661210c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146121915760405162461bcd60e51b8152600401610aa190613739565b5f5b828110156116f45781601e5f8686858181106121b1576121b161376e565b90506020020160208101906121c69190613629565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101612193565b6001600160a01b0383166122575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa1565b6001600160a01b0382166122b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa1565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0381165f908152601d602052604081205490036123d657601c5415806123755750806001600160a01b0316601c5f8154811061235e5761235e61376e565b5f918252602090912001546001600160a01b031614155b156123d657601c80546001600160a01b0383165f818152601d60205260408120839055600183018455929092527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b03191690911790555b50565b6001600160a01b0383166123ff5760405162461bcd60e51b8152600401610aa1906139c3565b6001600160a01b0383165f908152601a602052604090205460ff16156124515760405162461bcd60e51b8152602060048201526007602482015266189b18db1a5cdd60ca1b6044820152606401610aa1565b305f9081526020819052604081205490612469611352565b90508082101580156124855750600854600160a01b900460ff16155b80156124a957506001600160a01b0385165f9081526018602052604090205460ff16155b156124b7576124b781612845565b6008546001600160a01b0386165f9081526017602052604090205460ff600160a01b90920482161591168061250357506001600160a01b0385165f9081526017602052604090205460ff165b1561250b57505f5b60075432905f906001600160a01b03888116911614801561253a5750335f9081526019602052604090205460ff165b80156125575750876001600160a01b0316826001600160a01b0316145b156125dd575f8315612591576103e86016546103e861257691906137c0565b61258090896137eb565b61258a9190613802565b9050612594565b50855b61259d81612b98565b915081156125db576001600160a01b0383165f908152601f6020526040812080548492906125cc9084906137ad565b909155506125db905083612319565b505b6007545f906001600160a01b03908116908a1603612670576125fe87612c0b565b90508015612670576001600160a01b0383165f908152601f6020526040902054811015612657576001600160a01b0383165f908152601f60205260408120805483929061264c9084906137c0565b909155506126709050565b6001600160a01b0383165f908152601f60205260408120555b61267e898989878686612cda565b600854600160a01b900460ff1615801561269957505f602254115b80156126a25750835b156126bd576126b2602254610d6c565b6126bd60225461179f565b505050505050505050565b5f81848411156126eb5760405162461bcd60e51b8152600401610aa19190613494565b505f6126f784866137c0565b95945050505050565b5f8061270c83856137ad565b90508381101561275e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa1565b9392505050565b6001600160a01b03831661278b5760405162461bcd60e51b8152600401610aa1906139c3565b6127c781604051806060016040528060268152602001613a8a602691396001600160a01b0386165f9081526020819052604090205491906126c8565b6001600160a01b038085165f9081526020819052604080822093909355908416815220546127f59082612700565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161230c565b6008805460ff60a01b1916600160a01b179055601154600f54600e545f929161286d916137ad565b61287791906137ad565b90505f60155460135460125461288d91906137ad565b61289791906137ad565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106128cf576128cf61376e565b60200260200101906001600160a01b031690816001600160a01b0316815250505f80516020613ab0833981519152816001815181106129105761291061376e565b6001600160a01b039283166020918202929092010152600654600854604051635c11d79560e01b815291831692635c11d7959261295b9289925f928892909116904290600401613a08565b5f604051808303815f87803b158015612972575f80fd5b505af1158015612984573d5f803e3d5ffd5b50506008546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f80516020613ab083398151915291506370a0823190602401602060405180830381865afa1580156129dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a019190613782565b6008546040516323b872dd60e01b81526001600160a01b039091166004820152306024820152604481018290529091505f80516020613ab0833981519152906323b872dd906064016020604051808303815f875af1158015612a65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a899190613821565b505f612a9584866137ad565b601554601154612aa591906137ad565b612aaf90846137eb565b612ab99190613802565b90508015612b425760095460405163a9059cbb60e01b81526001600160a01b039091166004820152602481018290525f80516020613ab08339815191529063a9059cbb906044016020604051808303815f875af1158015612b1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b409190613821565b505b5f612b4d85876137ad565b601354600f54612b5d91906137ad565b612b6790856137eb565b612b719190613802565b90508015612b8257612b8281612e85565b50506008805460ff60a01b191690555050505050565b5f805f80612ba4611e7f565b9250925092505f8084118015612bb957505f83115b15612bd65782612bc985886137eb565b612bd39190613802565b90505b5f82118015612bee5750612bea81856137ad565b8210155b15612c0257612bff82878686612fa4565b94505b50505050919050565b5f805f612c16611e7f565b925050915081811015612cd3576007546001600160a01b03165f90815260208190526040902054612c489085906137c0565b60075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cbc9190613782565b612cc690866137eb565b612cd09190613802565b92505b5050919050565b8215612e72576001600160a01b0386165f908152601860205260408120548190869060ff1615612d4b575f601b5411612d11575f80fd5b835f03612d4157601154600f54600e54612d2b91906137ad565b612d3591906137ad565b92506010549150612dfa565b6016549250612dfa565b6001600160a01b0388165f9081526018602052604090205460ff1615612dfa57845f03612df4575f601b5411612d7f575f80fd5b601554601354601254612d9291906137ad565b612d9c91906137ad565b925060145491505f620186a0612dc68b6001600160a01b03165f9081526020819052604090205490565b612dd3906201869f6137eb565b612ddd9190613802565b905080881115612dee578097508091505b50612dfa565b60165492505b8215612e33575f6103e8612e0e85846137eb565b612e189190613802565b9050612e258a3083612765565b612e2f81896137c0565b9750505b8115612e6e575f6103e8612e4784846137eb565b612e519190613802565b9050612e608a61dead83612765565b612e6a81896137c0565b9750505b5050505b612e7d868686612765565b505050505050565b5f612e91600283613802565b90505f612e9e82846137c0565b600b546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612ee9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0d9190613782565b9050612f198330613280565b600b546040516370a0823160e01b81523060048201525f9183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015612f63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f879190613782565b612f9191906137c0565b9050612f9d8184613368565b5050505050565b5f8060075f9054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ff6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061301a9190613782565b90505f60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561306d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130919190613a43565b6001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130f09190613a43565b60075460408051637464fc3d60e01b815290519293506001600160a01b038085161515935f9390911691637464fc3d9160048083019260209291908290030181865afa158015613142573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131669190613782565b90508115613209578015613209575f613187613182888a6137eb565b613411565b90505f61319383613411565b905080821115613206575f806131a983856137c0565b6131b390896137eb565b6131be9060086137eb565b91506131cb8360086137eb565b6131d68560116137eb565b6131e091906137ad565b90505f6131ed8284613802565b90508015613202576131ff818a6137ad565b98505b5050505b50505b5f613214888b6137c0565b9050845f0361323e576103e861322d6131828b846137eb565b61323791906137c0565b9550613273565b6132708861324c87846137eb565b6132569190613802565b88613261888d6137eb565b61326b9190613802565b61347f565b95505b5050505050949350505050565b6040805160028082526060820183525f926020830190803683370190505090505f80516020613ab0833981519152815f815181106132c0576132c061376e565b6001600160a01b039283166020918202929092010152600b548251911690829060019081106132f1576132f161376e565b6001600160a01b039283166020918202929092010152600654604051635c11d79560e01b8152911690635c11d795906133369086905f90869088904290600401613a08565b5f604051808303815f87803b15801561334d575f80fd5b505af115801561335f573d5f803e3d5ffd5b50505050505050565b600654600b5460405162e8e33760e81b81526001600160a01b0391821660048201525f80516020613ab0833981519152602482015260448101859052606481018490525f6084820181905260a48201523060c48201524260e482015291169063e8e3370090610104016060604051808303815f875af11580156133ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9d9190613a5e565b5f60038211156134705750805f613429600283613802565b6134349060016137ad565b90505b8181101561346a5790508060028161344f8186613802565b61345991906137ad565b6134639190613802565b9050613437565b50919050565b811561347a575060015b919050565b5f81831061348d578161275e565b5090919050565b5f602080835283518060208501525f5b818110156134c0578581018301518582016040015282016134a4565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146123d6575f80fd5b5f8060408385031215613505575f80fd5b8235613510816134e0565b946020939093013593505050565b5f8083601f84011261352e575f80fd5b50813567ffffffffffffffff811115613545575f80fd5b6020830191508360208260051b850101111561355f575f80fd5b9250929050565b5f8060208385031215613577575f80fd5b823567ffffffffffffffff81111561358d575f80fd5b6135998582860161351e565b90969095509350505050565b5f602082840312156135b5575f80fd5b5035919050565b5f805f80608085870312156135cf575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f606084860312156135fd575f80fd5b8335613608816134e0565b92506020840135613618816134e0565b929592945050506040919091013590565b5f60208284031215613639575f80fd5b813561275e816134e0565b80151581146123d6575f80fd5b5f8060408385031215613662575f80fd5b823561366d816134e0565b9150602083013561367d81613644565b809150509250929050565b5f805f6040848603121561369a575f80fd5b833567ffffffffffffffff8111156136b0575f80fd5b6136bc8682870161351e565b90945092505060208401356136d081613644565b809150509250925092565b5f80604083850312156136ec575f80fd5b82356136f7816134e0565b9150602083013561367d816134e0565b600181811c9082168061371b57607f821691505b60208210810361346a57634e487b7160e01b5f52602260045260245ffd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613792575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a7157610a71613799565b81810381811115610a7157610a71613799565b5f600182016137e4576137e4613799565b5060010190565b8082028115828204841417610a7157610a71613799565b5f8261381c57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613831575f80fd5b815161275e81613644565b80516001600160701b038116811461347a575f80fd5b5f805f60608486031215613864575f80fd5b61386d8461383c565b925061387b6020850161383c565b9150604084015163ffffffff811681146136d0575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f815180845260208085019450602084015f5b838110156138df5781516001600160a01b0316875295820195908201906001016138ba565b509495945050505050565b828152604060208201525f61390260408301846138a7565b949350505050565b5f602080838503121561391b575f80fd5b825167ffffffffffffffff80821115613932575f80fd5b818501915085601f830112613945575f80fd5b81518181111561395757613957613893565b8060051b604051601f19603f8301168101818110858211171561397c5761397c613893565b604052918252848201925083810185019188831115613999575f80fd5b938501935b828510156139b75784518452938501939285019261399e565b98975050505050505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b85815284602082015260a060408201525f613a2660a08301866138a7565b6001600160a01b0394909416606083015250608001529392505050565b5f60208284031215613a53575f80fd5b815161275e816134e0565b5f805f60608486031215613a70575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636500000000000000000000000055d398326f99059ff775485246999027b319795545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e44d0b8e0da8014c9cc67ede820286de1ea24d0df3dd44cb21498b761a2c6b7764736f6c63430008180033
Deployed Bytecode Sourcemap
16509:20558:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17300:29;;;;;;;;;160:25:1;;;148:2;133:18;17300:29:0;;;;;;;;7852:100;;;:::i;:::-;;;;;;;:::i;10019:169::-;;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;10019:169:0;1205:187:1;23031:110:0;;;;;;:::i;:::-;;:::i;:::-;;18130:34;;;;;;21327:293;;;;;;:::i;:::-;;:::i;20261:138::-;;;;;;:::i;:::-;;:::i;17079:47::-;;;;;;17975:48;;;;;;16550:41;;;;;-1:-1:-1;;;;;16550:41:0;;;;;;-1:-1:-1;;;;;2587:32:1;;;2569:51;;2557:2;2542:18;16550:41:0;2396:230:1;21983:268:0;;;;;;:::i;:::-;;:::i;8972:108::-;9060:12;;8972:108;;20107:146;;;;;;:::i;:::-;;:::i;10670:355::-;;;;;;:::i;:::-;;:::i;17867:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19892:103;;;;;;:::i;:::-;;:::i;8814:93::-;;;8897:2;3876:36:1;;3864:2;3849:18;8814:93:0;3734:184:1;16704:75:0;;16737:42;16704:75;;20407:79;;;;;;:::i;:::-;;:::i;11434:218::-;;;;;;:::i;:::-;;:::i;16866:73::-;;;;;-1:-1:-1;;;;;16866:73:0;;;16598:28;;;;;-1:-1:-1;;;;;16598:28:0;;;17544:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18030:46;;;;;;33314:1871;;;;;;:::i;:::-;;:::i;17923:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;19701:87;;;:::i;22259:281::-;;;;;;:::i;:::-;;:::i;17457:25::-;;;;;;9143:127;;;;;;:::i;:::-;-1:-1:-1;;;;;9244:18:0;9217:7;9244:18;;;;;;;;;;;;9143:127;5295:148;;;:::i;23149:469::-;;;:::i;17140:28::-;;;;;;17745:21;;;;;;17256:35;;;;;;22639:112;;;;;;:::i;:::-;;:::i;19796:88::-;;;;;;:::i;:::-;;:::i;17048:22::-;;;;;-1:-1:-1;;;;;17048:22:0;;;22548:83;;;;;;:::i;:::-;;:::i;17183:29::-;;;;;;21862:113;;;;;;:::i;:::-;;:::i;4653:79::-;4718:6;;-1:-1:-1;;;;;4718:6:0;4653:79;;17336:30;;;;;;18171:34;;;;;;21001:109;;;;;;:::i;:::-;;:::i;17411:36::-;;;;;;8071:104;;;:::i;18245:38::-;;;;;;21118:201;;;;;;:::i;:::-;;:::i;18083:40::-;;;;;;18212:26;;;;;;17696:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16633:34;;;;;-1:-1:-1;;;;;16633:34:0;;;16946:70;;;;;-1:-1:-1;;;;;16946:70:0;;;12155:269;;;;;;:::i;:::-;;:::i;20494:118::-;;;;;;:::i;:::-;;:::i;9483:175::-;;;;;;:::i;:::-;;:::i;35191:1873::-;;;;;;:::i;:::-;;:::i;17373:30::-;;;;;;22759:264;;;;;;:::i;:::-;;:::i;17023:18::-;;;;;-1:-1:-1;;;;;17023:18:0;;;20620:131;;;;;;:::i;:::-;;:::i;20003:96::-;;;;;;:::i;:::-;;:::i;20759:234::-;;;;;;:::i;:::-;;:::i;16786:73::-;;-1:-1:-1;;;;;;;;;;;16786:73:0;;30165:275;;;:::i;:::-;;;;5643:25:1;;;5699:2;5684:18;;5677:34;;;;5727:18;;;5720:34;5631:2;5616:18;30165:275:0;5441:319:1;9721:151:0;;;;;;:::i;:::-;-1:-1:-1;;;;;9837:18:0;;;9810:7;9837:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9721:151;17775:28;;;;;;:::i;:::-;;:::i;17602:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17219:29;;;;;;17810:50;;;;;;:::i;:::-;;;;;;;;;;;;;;19520:173;;;;;;:::i;:::-;;:::i;5598:244::-;;;;;;:::i;:::-;;:::i;17648:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21628:226;;;;;;:::i;:::-;;:::i;7852:100::-;7906:13;7939:5;7932:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7852:100;:::o;10019:169::-;10102:4;10119:39;3893:10;10142:7;10151:6;10119:8;:39::i;:::-;-1:-1:-1;10176:4:0;10019:169;;;;;:::o;23031:110::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;;;;;;;;;23105:28:::1;::::0;-1:-1:-1;;;;;23105:20:0;::::1;::::0;:28;::::1;;;::::0;23126:6;;23105:28:::1;::::0;;;23126:6;23105:20;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23031:110:::0;;:::o;21327:293::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;21417:9:::1;21413:200;21432:19:::0;;::::1;21413:200;;;21473:11;21487:8;;21496:1;21487:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21473:25;;21513:19;21528:3;21513:14;:19::i;:::-;21572:13;::::0;21565:36:::1;::::0;-1:-1:-1;;;21565:36:0;;-1:-1:-1;;;;;2587:32:1;;;21565:36:0::1;::::0;::::1;2569:51:1::0;21572:13:0;;::::1;::::0;21565:31:::1;::::0;2542:18:1;;21565:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21547:15:0;;::::1;;::::0;;;:10:::1;:15;::::0;;;;:54;21453:3:::1;;21413:200;;20261:138:::0;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;20351:18:::1;:40:::0;20261:138::o;21983:268::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;22108:9:::1;:22:::0;;;;22141:9:::1;:22:::0;;;;22174:10:::1;:24:::0;22209:15:::1;:34:::0;21983:268::o;20107:146::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;20201:20:::1;:44:::0;20107:146::o;10670:355::-;10810:4;10827:36;10837:6;10845:9;10856:6;10827:9;:36::i;:::-;10874:121;10883:6;3893:10;10905:89;10943:6;10905:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10905:19:0;;;;;;:11;:19;;;;;;;;3893:10;10905:33;;;;;;;;;;:37;:89::i;:::-;10874:8;:121::i;:::-;-1:-1:-1;11013:4:0;10670:355;;;;;:::o;19892:103::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;19963:10:::1;:24:::0;19892:103::o;20407:79::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;20466:4:::1;:12:::0;20407:79::o;11434:218::-;3893:10;11522:4;11571:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11571:34:0;;;;;;;;;;11522:4;;11539:83;;11562:7;;11571:50;;11610:10;11571:38;:50::i;33314:1871::-;33394:11;:18;33363:28;33426:25;;;33423:63;;33468:7;33314:1871;:::o;33423:63::-;33516:37;;-1:-1:-1;;;33516:37:0;;33547:4;33516:37;;;2569:51:1;33498:15:0;;-1:-1:-1;;;;;;;;;;;16817:42:0;33516:22;;2542:18:1;;33516:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33498:55;;33578:20;;33568:7;:30;33564:69;;;33615:7;;33314:1871;:::o;33564:69::-;-1:-1:-1;33653:20:0;;33756:13;;33749:48;;-1:-1:-1;;;33749:48:0;;33789:6;33749:48;;;2569:51:1;33684:16:0;;-1:-1:-1;;;;;33756:13:0;;33749:31;;2542:18:1;;33749:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33710:13;;33703:43;;-1:-1:-1;;;33703:43:0;;33710:13;33703:43;;;2569:51:1;-1:-1:-1;;;;;33710:13:0;;;;33703:31;;2542:18:1;;33703:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:94;;;;:::i;:::-;33684:113;;33808:15;33872:11;33841:13;;;;;;;;;-1:-1:-1;;;;;33841:13:0;-1:-1:-1;;;;;33826:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;:::i;:::-;33935:13;;33912:37;;-1:-1:-1;;;33912:37:0;;-1:-1:-1;;;;;33935:13:0;;;33912:37;;;2569:51:1;33808:75:0;;-1:-1:-1;33894:15:0;;-1:-1:-1;;;;;;;;;;;16817:42:0;33912:22;;2542:18:1;;33912:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33992:19;;33894:55;;-1:-1:-1;33962:27:0;;34070:9;34052:27;;34090:18;34125:999;34141:3;34131:7;:13;:50;;;;;34161:20;34148:10;:33;34131:50;34125:999;;;34198:21;;;;:::i;:::-;34260:11;:18;34198:21;;-1:-1:-1;34237:41:0;;;-1:-1:-1;34234:104:0;;34321:1;34299:23;;34234:104;34354:15;34372:11;34384:19;34372:32;;;;;;;;:::i;:::-;;;;;;;;;;34439:13;;34432:40;;-1:-1:-1;;;34432:40:0;;-1:-1:-1;;;;;34372:32:0;;;34432:40;;;2569:51:1;;;34372:32:0;-1:-1:-1;34439:13:0;;;34432:31;;2542:18:1;;34432:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34492:26:0;;;;;;:17;:26;;;;;;34419:53;;-1:-1:-1;34492:26:0;;34491:27;:127;;;;;34608:10;;34576:13;;;;;;;;;-1:-1:-1;;;;;34576:13:0;-1:-1:-1;;;;;34561:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34540:18;34553:5;34540:10;:18;:::i;:::-;:64;;;;:::i;:::-;:78;;34491:127;:183;;;;-1:-1:-1;34661:4:0;;-1:-1:-1;;;;;34639:19:0;;;;;;:10;:19;;;;;;34669:5;;34639:26;;;:::i;:::-;:35;;34491:183;34487:399;;;34709:11;34741:10;34723:15;34731:7;34723:5;:15;:::i;:::-;:28;;;;:::i;:::-;34709:42;-1:-1:-1;34774:10:0;;34770:98;;34809:38;;-1:-1:-1;;;34809:38:0;;-1:-1:-1;;;;;8347:32:1;;34809:38:0;;;8329:51:1;8396:18;;;8389:34;;;-1:-1:-1;;;;;;;;;;;16817:42:0;34809:21;;8302:18:1;;34809:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34770:98;34690:196;34487:399;34902:12;;;;:::i;:::-;;;;34929:18;34950:9;34929:30;;34989:10;34979:7;:20;34976:102;;;35041:20;35051:10;35041:7;:20;:::i;:::-;35030:32;;:7;:32;:::i;:::-;35020:42;;34976:102;35102:10;-1:-1:-1;34125:999:0;;-1:-1:-1;;34125:999:0;;-1:-1:-1;;;35136:19:0;:41;-1:-1:-1;;;;;;33314:1871:0:o;19701:87::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;19765:15:::1;19753:9;:27:::0;19701:87::o;22259:281::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;22389:10:::1;:24:::0;;;;22424:10:::1;:24:::0;;;;22459:11:::1;:26:::0;22496:16:::1;:36:::0;22259:281::o;5295:148::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;5386:6:::1;::::0;5365:40:::1;::::0;5402:1:::1;::::0;-1:-1:-1;;;;;5386:6:0::1;::::0;5365:40:::1;::::0;5402:1;;5365:40:::1;5416:6;:19:::0;;-1:-1:-1;;;;;;5416:19:0::1;::::0;;5295:148::o;23149:469::-;23199:4;23217:13;23232;23265;;;;;;;;;-1:-1:-1;;;;;23265:13:0;-1:-1:-1;;;;;23250:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23216:77;-1:-1:-1;;;;;23216:77:0;;;-1:-1:-1;;;;;23216:77:0;;;23308:8;23320:1;23308:13;:30;;;-1:-1:-1;23325:13:0;;23308:30;23304:60;;;-1:-1:-1;;23340:24:0;;;;23149:469;:::o;23304:60::-;23399:16;;;23413:1;23399:16;;;;;;;;23375:21;;23399:16;;;;;;;;;;-1:-1:-1;23399:16:0;23375:40;;-1:-1:-1;;;;;;;;;;;23426:4:0;23431:1;23426:7;;;;;;;;:::i;:::-;;;;;;:14;-1:-1:-1;;;;;23426:14:0;;;-1:-1:-1;;;;;23426:14:0;;;;;23469:4;23451;23456:1;23451:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23451:23:0;;;:7;;;;;;;;;;;:23;23553:19;;23512:67;;-1:-1:-1;;;23512:67:0;;23485:24;;16737:42;;23512:40;;:67;;23574:4;;23512:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23512:67:0;;;;;;;;;;;;:::i;:::-;23485:94;;23597:10;23608:1;23597:13;;;;;;;;:::i;:::-;;;;;;;23590:20;;;;;;23149:469;:::o;22639:112::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;22716:19:::1;:27:::0;22639:112::o;19796:88::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19857:12:0::1;;::::0;;;:6:::1;:12;::::0;;;;:19;;-1:-1:-1;;19857:19:0::1;19872:4;19857:19;::::0;;19796:88::o;22548:83::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;22609:5:::1;:14:::0;22548:83::o;21862:113::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;21940:16:::1;:27:::0;21862:113::o;21001:109::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21078:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:24;;-1:-1:-1;;21078:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21001:109::o;8071:104::-;8127:13;8160:7;8153:14;;;;;:::i;21118:201::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;21216:9:::1;21212:100;21231:19:::0;;::::1;21212:100;;;21295:5;21272:7;:20;21280:8;;21289:1;21280:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21272:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21272:20:0;:28;;-1:-1:-1;;21272:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;21252:3:0::1;21212:100;;;;21118:201:::0;;;:::o;12155:269::-;12248:4;12265:129;3893:10;12288:7;12297:96;12336:15;12297:96;;;;;;;;;;;;;;;;;3893:10;12297:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12297:34:0;;;;;;;;;;;;:38;:96::i;20494:118::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;20574:13:::1;:30:::0;;-1:-1:-1;;;;;;20574:30:0::1;-1:-1:-1::0;;;;;20574:30:0;;;::::1;::::0;;;::::1;::::0;;20494:118::o;9483:175::-;9569:4;9586:42;3893:10;9610:9;9621:6;9586:9;:42::i;35191:1873::-;35271:11;:18;35240:28;35303:25;;;35300:63;;35345:7;35191:1873;:::o;35300:63::-;35400:7;;35393:40;;-1:-1:-1;;;35393:40:0;;35427:4;35393:40;;;2569:51:1;35375:15:0;;-1:-1:-1;;;;;35400:7:0;;35393:25;;2542:18:1;;35393:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35375:58;;35458:18;;35448:7;:28;35444:67;;;35493:7;;35191:1873;:::o;35444:67::-;-1:-1:-1;35531:18:0;;35632:13;;35625:48;;-1:-1:-1;;;35625:48:0;;35665:6;35625:48;;;2569:51:1;35560:16:0;;-1:-1:-1;;;;;35632:13:0;;35625:31;;2542:18:1;;35625:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35586:13;;35579:43;;-1:-1:-1;;;35579:43:0;;35586:13;35579:43;;;2569:51:1;-1:-1:-1;;;;;35586:13:0;;;;35579:31;;2542:18:1;;35579:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:94;;;;:::i;:::-;35560:113;;35684:15;35748:11;35717:13;;;;;;;;;-1:-1:-1;;;;;35717:13:0;-1:-1:-1;;;;;35702:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;:::i;:::-;35811:13;;35788:37;;-1:-1:-1;;;35788:37:0;;-1:-1:-1;;;;;35811:13:0;;;35788:37;;;2569:51:1;35684:75:0;;-1:-1:-1;35770:15:0;;-1:-1:-1;;;;;;;;;;;16817:42:0;35788:22;;2542:18:1;;35788:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35868:19;;35770:55;;-1:-1:-1;35838:27:0;;35946:9;35928:27;;35966:18;36001:1002;36017:3;36007:7;:13;:50;;;;;36037:20;36024:10;:33;36007:50;36001:1002;;;36074:21;;;;:::i;:::-;36136:11;:18;36074:21;;-1:-1:-1;36113:41:0;;;-1:-1:-1;36110:104:0;;36197:1;36175:23;;36110:104;36230:15;36248:11;36260:19;36248:32;;;;;;;;:::i;:::-;;;;;;;;;;36315:13;;36308:40;;-1:-1:-1;;;36308:40:0;;-1:-1:-1;;;;;36248:32:0;;;36308:40;;;2569:51:1;;;36248:32:0;-1:-1:-1;36315:13:0;;;36308:31;;2542:18:1;;36308:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36368:26:0;;;;;;:17;:26;;;;;;36295:53;;-1:-1:-1;36368:26:0;;36367:27;:127;;;;;36484:10;;36452:13;;;;;;;;;-1:-1:-1;;;;;36452:13:0;-1:-1:-1;;;;;36437:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36416:18;36429:5;36416:10;:18;:::i;:::-;:64;;;;:::i;:::-;:78;;36367:127;:183;;;;-1:-1:-1;36537:4:0;;-1:-1:-1;;;;;36515:19:0;;;;;;:10;:19;;;;;;36545:5;;36515:26;;;:::i;:::-;:35;;36367:183;36363:402;;;36585:11;36617:10;36599:15;36607:7;36599:5;:15;:::i;:::-;:28;;;;:::i;:::-;36585:42;-1:-1:-1;36650:10:0;;36646:101;;36692:7;;36685:41;;-1:-1:-1;;;36685:41:0;;-1:-1:-1;;;;;8347:32:1;;;36685:41:0;;;8329:51:1;8396:18;;;8389:34;;;36692:7:0;;;;36685:24;;8302:18:1;;36685:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36646:101;36566:199;36363:402;36781:12;;;;:::i;:::-;;;;36808:18;36829:9;36808:30;;36868:10;36858:7;:20;36855:102;;;36920:20;36930:10;36920:7;:20;:::i;:::-;36909:32;;:7;:32;:::i;:::-;36899:42;;36855:102;36981:10;-1:-1:-1;36001:1002:0;;-1:-1:-1;;36001:1002:0;;-1:-1:-1;;;37015:19:0;:41;-1:-1:-1;;;;;;35191:1873:0:o;22759:264::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;22871:4:::1;-1:-1:-1::0;;;;;22854:22:0;::::1;::::0;22850:164:::1;;22893:42;22917:4;22924:2;22928:6;22893:15;:42::i;22850:164::-;22968:34;::::0;-1:-1:-1;;;22968:34:0;;-1:-1:-1;;;;;8347:32:1;;;22968:34:0::1;::::0;::::1;8329:51:1::0;8396:18;;;8389:34;;;22968:22:0;::::1;::::0;::::1;::::0;8302:18:1;;22968:34:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20620:131::-:0;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20705:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;20705:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20620:131::o;20003:96::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20068:16:0::1;;::::0;;;:8:::1;:16;::::0;;;;:23;;-1:-1:-1;;20068:23:0::1;20087:4;20068:23;::::0;;20003:96::o;20759:234::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;20876:9:::1;20872:114;20891:19:::0;;::::1;20872:114;;;20966:8;20932:18;:31;20951:8;;20960:1;20951:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20932:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20932:31:0;:42;;-1:-1:-1;;20932:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;20912:3:0::1;20872:114;;30165:275:::0;30237:14;30253:13;30268:20;30341:13;;;;;;;;;-1:-1:-1;;;;;30341:13:0;-1:-1:-1;;;;;30326:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30418:13:0;;30395:37;;-1:-1:-1;;;30395:37:0;;-1:-1:-1;;;;;30418:13:0;;;30395:37;;;2569:51:1;-1:-1:-1;;;;;30306:63:0;;;;-1:-1:-1;30306:63:0;;;-1:-1:-1;;;;;;;;;;;;16817:42:0;30395:22;;2542:18:1;;30395:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30380:52;;30165:275;;;:::o;17775:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17775:28:0;;-1:-1:-1;17775:28:0;:::o;19520:173::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;19594:3:::1;:9:::0;;-1:-1:-1;;;;;19594:9:0;;::::1;-1:-1:-1::0;;;;;;19594:9:0;;::::1;::::0;::::1;::::0;;;19614:7:::1;:17:::0;;;;::::1;::::0;;;::::1;;::::0;;19642:43:::1;::::0;-1:-1:-1;;;19642:43:0;;16737:42:::1;19642:43;::::0;::::1;8329:51:1::0;-1:-1:-1;;8396:18:1;;;8389:34;19642:19:0::1;::::0;8302:18:1;;19642:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5598:244::-:0;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5687:22:0;::::1;5679:73;;;::::0;-1:-1:-1;;;5679:73:0;;11583:2:1;5679:73:0::1;::::0;::::1;11565:21:1::0;11622:2;11602:18;;;11595:30;11661:34;11641:18;;;11634:62;-1:-1:-1;;;11712:18:1;;;11705:36;11758:19;;5679:73:0::1;11381:402:1::0;5679:73:0::1;5789:6;::::0;5768:38:::1;::::0;-1:-1:-1;;;;;5768:38:0;;::::1;::::0;5789:6:::1;::::0;5768:38:::1;::::0;5789:6:::1;::::0;5768:38:::1;5817:6;:17:::0;;-1:-1:-1;;;;;;5817:17:0::1;-1:-1:-1::0;;;;;5817:17:0;;;::::1;::::0;;;::::1;::::0;;5598:244::o;21628:226::-;4865:6;;-1:-1:-1;;;;;4865:6:0;3893:10;4865:22;4857:67;;;;-1:-1:-1;;;4857:67:0;;;;;;;:::i;:::-;21738:9:::1;21734:113;21753:19:::0;;::::1;21734:113;;;21827:8;21794:17;:30;21812:8;;21821:1;21812:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21794:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;21794:30:0;:41;;-1:-1:-1;;21794:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;21774:3:0::1;21734:113;;15259:380:::0;-1:-1:-1;;;;;15395:19:0;;15387:68;;;;-1:-1:-1;;;15387:68:0;;11990:2:1;15387:68:0;;;11972:21:1;12029:2;12009:18;;;12002:30;12068:34;12048:18;;;12041:62;-1:-1:-1;;;12119:18:1;;;12112:34;12163:19;;15387:68:0;11788:400:1;15387:68:0;-1:-1:-1;;;;;15474:21:0;;15466:68;;;;-1:-1:-1;;;15466:68:0;;12395:2:1;15466:68:0;;;12377:21:1;12434:2;12414:18;;;12407:30;12473:34;12453:18;;;12446:62;-1:-1:-1;;;12524:18:1;;;12517:32;12566:19;;15466:68:0;12193:398:1;15466:68:0;-1:-1:-1;;;;;15547:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15599:32;;160:25:1;;;15599:32:0;;133:18:1;15599:32:0;;;;;;;;15259:380;;;:::o;30448:310::-;-1:-1:-1;;;;;30517:24:0;;;;;;:15;:24;;;;;;30512:29;;30508:243;;30567:11;:18;30562:23;;:52;;;30607:7;-1:-1:-1;;;;;30589:25:0;:11;30601:1;30589:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;30589:14:0;:25;;30562:52;30558:182;;;30662:11;:18;;-1:-1:-1;;;;;30635:24:0;;;;;;:15;:24;;;;;:45;;;30699:25;;;;;;;;;;;;;-1:-1:-1;;;;;;30699:25:0;;;;;;30558:182;30448:310;:::o;23626:2072::-;-1:-1:-1;;;;;23758:18:0;;23750:68;;;;-1:-1:-1;;;23750:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23838:13:0;;;;;;:7;:13;;;;;;;;23837:14;23829:34;;;;-1:-1:-1;;;23829:34:0;;13204:2:1;23829:34:0;;;13186:21:1;13243:1;13223:18;;;13216:29;-1:-1:-1;;;13261:18:1;;;13254:37;13308:18;;23829:34:0;13002:330:1;23829:34:0;23925:4;23876:28;9244:18;;;;;;;;;;;;23965:19;:17;:19::i;:::-;23942:42;;24023:15;23999:20;:39;;:65;;;;-1:-1:-1;24056:8:0;;-1:-1:-1;;;24056:8:0;;;;24055:9;23999:65;:95;;;;-1:-1:-1;;;;;;24082:12:0;;;;;;:6;:12;;;;;;;;24081:13;23999:95;23995:170;;;24121:32;24137:15;24121;:32::i;:::-;24194:8;;-1:-1:-1;;;;;24301:24:0;;24178:12;24301:24;;;:18;:24;;;;;;24194:8;-1:-1:-1;;;24194:8:0;;;;;24193:9;;24301:24;;:50;;-1:-1:-1;;;;;;24329:22:0;;;;;;:18;:22;;;;;;;;24301:50;24298:97;;;-1:-1:-1;24378:5:0;24298:97;24486:13;;24426:9;;24407:16;;-1:-1:-1;;;;;24480:19:0;;;24486:13;;24480:19;:43;;;;-1:-1:-1;24512:10:0;24503:20;;;;:8;:20;;;;;;;;24480:43;:63;;;;;24539:4;-1:-1:-1;;;;;24527:16:0;:8;-1:-1:-1;;;;;24527:16:0;;24480:63;24476:481;;;24560:13;24592:7;24588:147;;;24657:4;24648:5;;24641:4;:12;;;;:::i;:::-;24631:23;;:6;:23;:::i;:::-;:30;;;;:::i;:::-;24620:41;;24588:147;;;-1:-1:-1;24713:6:0;24588:147;24766:25;24782:8;24766:15;:25::i;:::-;24749:42;-1:-1:-1;24810:18:0;;24806:140;;-1:-1:-1;;;;;24849:20:0;;;;;;:10;:20;;;;;:38;;24873:14;;24849:20;:38;;24873:14;;24849:38;:::i;:::-;;;;-1:-1:-1;24906:24:0;;-1:-1:-1;24921:8:0;24906:14;:24::i;:::-;24545:412;24476:481;25014:13;;24969:22;;-1:-1:-1;;;;;25014:13:0;;;25006:21;;;;25002:383;;25064:26;25083:6;25064:18;:26::i;:::-;25044:46;-1:-1:-1;25109:21:0;;25105:267;;-1:-1:-1;;;;;25155:20:0;;;;;;:10;:20;;;;;;:40;-1:-1:-1;25151:203:0;;;-1:-1:-1;;;;;25220:20:0;;;;;;:10;:20;;;;;:41;;25244:17;;25220:20;:41;;25244:17;;25220:41;:::i;:::-;;;;-1:-1:-1;25151:203:0;;-1:-1:-1;25151:203:0;;-1:-1:-1;;;;;25310:20:0;;25333:1;25310:20;;;:10;:20;;;;;:24;25151:203;25463:73;25478:4;25483:2;25486:6;25493:7;25502:14;25518:17;25463:14;:73::i;:::-;25552:8;;-1:-1:-1;;;25552:8:0;;;;25551:9;:33;;;;;25583:1;25564:16;;:20;25551:33;:44;;;;;25588:7;25551:44;25547:144;;;25612:26;25621:16;;25612:8;:26::i;:::-;25653;25662:16;;25653:8;:26::i;:::-;23739:1959;;;;;;23626:2072;;;:::o;46200:192::-;46286:7;46322:12;46314:6;;;;46306:29;;;;-1:-1:-1;;;46306:29:0;;;;;;;;:::i;:::-;-1:-1:-1;46346:9:0;46358:5;46362:1;46358;:5;:::i;:::-;46346:17;46200:192;-1:-1:-1;;;;;46200:192:0:o;45297:181::-;45355:7;;45387:5;45391:1;45387;:5;:::i;:::-;45375:17;;45416:1;45411;:6;;45403:46;;;;-1:-1:-1;;;45403:46:0;;13539:2:1;45403:46:0;;;13521:21:1;13578:2;13558:18;;;13551:30;13617:29;13597:18;;;13590:57;13664:18;;45403:46:0;13337:351:1;45403:46:0;45469:1;45297:181;-1:-1:-1;;;45297:181:0:o;12914:491::-;-1:-1:-1;;;;;13054:20:0;;13046:70;;;;-1:-1:-1;;;13046:70:0;;;;;;;:::i;:::-;13209:71;13231:6;13209:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13209:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13189:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13314:20;;;;;;;:32;;13339:6;13314:24;:32::i;:::-;-1:-1:-1;;;;;13291:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13362:35;160:25:1;;;13291:20:0;;13362:35;;;;;;133:18:1;13362:35:0;14:177:1;30766:1205:0;18324:8;:15;;-1:-1:-1;;;;18324:15:0;-1:-1:-1;;;18324:15:0;;;30888::::1;::::0;30876:9:::1;::::0;30864::::1;::::0;18324:15;;30888;30864:21:::1;::::0;::::1;:::i;:::-;:39;;;;:::i;:::-;30843:60;;30914:19;30962:16;;30949:10;;30936;;:23;;;;:::i;:::-;:42;;;;:::i;:::-;31073:16;::::0;;31087:1:::1;31073:16:::0;;;;;::::1;::::0;;30914:64;;-1:-1:-1;31049:21:0::1;::::0;31073:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;31073:16:0::1;31049:40;;31118:4;31100;31105:1;31100:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;31100:23:0::1;;;-1:-1:-1::0;;;;;31100:23:0::1;;;::::0;::::1;-1:-1:-1::0;;;;;;;;;;;31134:4:0::1;31139:1;31134:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31134:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;31187:15:::1;::::0;31369:13:::1;::::0;31187:237:::1;::::0;-1:-1:-1;;;31187:237:0;;:15;;::::1;::::0;:69:::1;::::0;:237:::1;::::0;31271:11;;31187:15:::1;::::0;31342:4;;31369:13;;::::1;::::0;31398:15:::1;::::0;31187:237:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31487:13:0::1;::::0;31456:46:::1;::::0;-1:-1:-1;;;31456:46:0;;-1:-1:-1;;;;;31487:13:0;;::::1;31456:46;::::0;::::1;2569:51:1::0;31435:18:0::1;::::0;-1:-1:-1;;;;;;;;;;;;16817:42:0;-1:-1:-1;31456:22:0::1;::::0;2542:18:1;;31456:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31547:13;::::0;31513:76:::1;::::0;-1:-1:-1;;;31513:76:0;;-1:-1:-1;;;;;31547:13:0;;::::1;31513:76;::::0;::::1;14520:34:1::0;31571:4:0::1;14570:18:1::0;;;14563:43;14622:18;;;14615:34;;;31435:67:0;;-1:-1:-1;;;;;;;;;;;;16817:42:0;31513:25:::1;::::0;14455:18:1;;31513:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31600:9:0::1;31665:30;31681:14:::0;31665:13;:30:::1;:::i;:::-;31644:16;;31626:15;;:34;;;;:::i;:::-;31612:49;::::0;:10;:49:::1;:::i;:::-;:84;;;;:::i;:::-;31600:96:::0;-1:-1:-1;31711:8:0;;31707:83:::1;;31758:13;::::0;31736:42:::1;::::0;-1:-1:-1;;;31736:42:0;;-1:-1:-1;;;;;31758:13:0;;::::1;31736:42;::::0;::::1;8329:51:1::0;8396:18;;;8389:34;;;-1:-1:-1;;;;;;;;;;;16817:42:0;31736:21:::1;::::0;8302:18:1;;31736:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31707:83;31802:11;31857:30;31873:14:::0;31857:13;:30:::1;:::i;:::-;31842:10;;31830:9;;:22;;;;:::i;:::-;31816:37;::::0;:10;:37:::1;:::i;:::-;:72;;;;:::i;:::-;31802:86:::0;-1:-1:-1;31903:10:0;;31899:65:::1;;31930:22;31945:6;31930:14;:22::i;:::-;-1:-1:-1::0;;18362:8:0;:16;;-1:-1:-1;;;;18362:16:0;;;-1:-1:-1;;;;;30766:1205:0:o;27531:483::-;27611:17;27642:14;27658:13;27673:20;27697:14;:12;:14::i;:::-;27641:70;;;;;;27722:19;27765:1;27756:6;:10;:23;;;;;27778:1;27770:5;:9;27756:23;27752:95;;;27830:5;27811:15;27820:6;27811;:15;:::i;:::-;27810:25;;;;:::i;:::-;27796:39;;27752:95;27876:1;27861:12;:16;:56;;;;-1:-1:-1;27897:20:0;27906:11;27897:6;:20;:::i;:::-;27881:12;:36;;27861:56;27857:150;;;27946:49;27959:12;27973:6;27981;27989:5;27946:12;:49::i;:::-;27934:61;;27857:150;27630:384;;;;27531:483;;;:::o;28022:380::-;28105:17;28136:14;28154:20;28178:14;:12;:14::i;:::-;28135:57;;;;;28222:6;28207:12;:21;28203:192;;;28359:13;;-1:-1:-1;;;;;28359:13:0;9217:7;9244:18;;;;;;;;;;;28349:33;;28376:6;;28349:33;:::i;:::-;28299:13;;;;;;;;;-1:-1:-1;;;;;28299:13:0;-1:-1:-1;;;;;28284:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28275:52;;:6;:52;:::i;:::-;28274:109;;;;:::i;:::-;28245:138;;28203:192;28124:278;;28022:380;;;:::o;25779:1744::-;26001:7;25998:1465;;;-1:-1:-1;;;;;26122:14:0;;26025;26122;;;:6;:14;;;;;;26025;;26098:6;;26122:14;;26119:888;;;26183:1;26171:9;;:13;26163:22;;;;;;26208:17;26229:1;26208:22;26204:233;;26291:15;;26279:9;;26267;;:21;;;;:::i;:::-;:39;;;;:::i;:::-;26255:51;;26341:10;;26329:22;;26119:888;;26204:233;26412:5;;26400:17;;26119:888;;;-1:-1:-1;;;;;26462:17:0;;;;;;:6;:17;;;;;;;;26458:549;;;26504:14;26522:1;26504:19;26500:492;;26568:1;26556:9;;:13;26548:22;;;;;;26631:16;;26618:10;;26605;;:23;;;;:::i;:::-;:42;;;;:::i;:::-;26593:54;;26682:11;;26670:23;;26718:8;26757:6;26729:17;26739:6;-1:-1:-1;;;;;9244:18:0;9217:7;9244:18;;;;;;;;;;;;9143:127;26729:17;:25;;26749:5;26729:25;:::i;:::-;:34;;;;:::i;:::-;26718:45;;26799:3;26790:6;:12;26786:121;;;26840:3;26831:12;;26880:3;26870:13;;26786:121;26525:401;26500:492;;;26967:5;;26955:17;;26500:492;27027:13;;27024:205;;27061:17;27103:4;27081:19;27091:9;27081:7;:19;:::i;:::-;:26;;;;:::i;:::-;27061:46;;27126:49;27142:6;27158:4;27165:9;27126:15;:49::i;:::-;27194:19;27204:9;27194:19;;:::i;:::-;;;27042:187;27024:205;27248:13;;27245:207;;27282:17;27324:4;27302:19;27312:9;27302:7;:19;:::i;:::-;:26;;;;:::i;:::-;27282:46;;27347:51;27363:6;27379;27388:9;27347:15;:51::i;:::-;27417:19;27427:9;27417:19;;:::i;:::-;;;27263:189;27245:207;26010:1453;;;25998:1465;27473:42;27489:6;27497:9;27508:6;27473:15;:42::i;:::-;25779:1744;;;;;;:::o;31979:488::-;32092:12;32107:14;32120:1;32107:10;:14;:::i;:::-;32092:29;-1:-1:-1;32132:17:0;32152;32092:29;32152:10;:17;:::i;:::-;32214:3;;32207:36;;-1:-1:-1;;;32207:36:0;;32237:4;32207:36;;;2569:51:1;32132:37:0;;-1:-1:-1;32182:22:0;;-1:-1:-1;;;;;32214:3:0;;;;32207:21;;2542:18:1;;32207:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32182:61;;32254:35;32269:4;32283;32254:14;:35::i;:::-;32329:3;;32322:36;;-1:-1:-1;;;32322:36:0;;32352:4;32322:36;;;2569:51:1;32301:18:0;;32360:14;;-1:-1:-1;;;;;32329:3:0;;;;32322:21;;2542:18:1;;32322:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;;:::i;:::-;32301:73;;32424:35;32437:10;32449:9;32424:12;:35::i;:::-;32031:436;;;;31979:488;:::o;28410:1747::-;28555:17;28585:23;28626:13;;;;;;;;;-1:-1:-1;;;;;28626:13:0;-1:-1:-1;;;;;28611:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28585:69;;28665:13;28699:15;;;;;;;;;-1:-1:-1;;;;;28699:15:0;-1:-1:-1;;;;;28699:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28681:50:0;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28819:13;;28804:37;;;-1:-1:-1;;;28804:37:0;;;;28665:68;;-1:-1:-1;;;;;;28757:19:0;;;;;;28744:10;;28819:13;;;;28804:35;;:37;;;;;;;;;;;;;;28819:13;28804:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28787:54;;28856:5;28852:978;;;28882:11;;28878:941;;28914:13;28930:18;28940:7;28945:2;28940;:7;:::i;:::-;28930:9;:18::i;:::-;28914:34;;28967:17;28987;28997:6;28987:9;:17::i;:::-;28967:37;;29035:9;29027:5;:17;29023:781;;;29069:17;;29307;29315:9;29307:5;:17;:::i;:::-;29288:37;;:15;:37;:::i;:::-;:41;;29328:1;29288:41;:::i;:::-;29276:53;-1:-1:-1;29384:13:0;:9;29396:1;29384:13;:::i;:::-;29370:10;:5;29378:2;29370:10;:::i;:::-;:28;;;;:::i;:::-;29356:42;;29659:19;29681:23;29693:11;29681:9;:23;:::i;:::-;29659:45;-1:-1:-1;29731:18:0;;29727:57;;29751:33;29770:14;29751:33;;:::i;:::-;;;29727:57;29046:758;;;29023:781;28895:924;;28878:941;29840:15;29858:13;29869:2;29858:8;:13;:::i;:::-;29840:31;;29886:15;29905:1;29886:20;29882:268;;29965:4;29935:27;29945:16;29955:6;29945:7;:16;:::i;29935:27::-;:34;;;;:::i;:::-;29923:46;;29882:268;;;30014:124;30071:2;30042:25;30052:15;30042:7;:25;:::i;:::-;30041:32;;;;:::i;:::-;30121:2;30093:24;30102:15;30093:6;:24;:::i;:::-;30092:31;;;;:::i;:::-;30014:8;:124::i;:::-;30002:136;;29882:268;28574:1583;;;;;28410:1747;;;;;;:::o;32475:432::-;32634:16;;;32648:1;32634:16;;;;;;;;32610:21;;32634:16;;;;;;;;;;-1:-1:-1;32634:16:0;32610:40;;-1:-1:-1;;;;;;;;;;;32661:4:0;32666:1;32661:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32661:14:0;;;:7;;;;;;;;;:14;32696:3;;32686:7;;32696:3;;;32686:4;;32696:3;;32686:7;;;;;;:::i;:::-;-1:-1:-1;;;;;32686:13:0;;;:7;;;;;;;;;:13;32712:15;;:187;;-1:-1:-1;;;32712:187:0;;:15;;;:69;;:187;;32796:10;;32712:15;;32837:4;;32856:2;;32873:15;;32712:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32539:368;32475:432;;:::o;32915:391::-;33027:15;;33070:3;;33027:271;;-1:-1:-1;;;33027:271:0;;-1:-1:-1;;;;;33070:3:0;;;33027:271;;;15313:34:1;-1:-1:-1;;;;;;;;;;;15363:18:1;;;15356:43;15415:18;;;15408:34;;;15458:18;;;15451:34;;;33027:15:0;15501:19:1;;;15494:35;;;15545:19;;;15538:35;33252:4:0;15589:19:1;;;15582:44;33272:15:0;15642:19:1;;;15635:35;33027:15:0;;;:28;;15247:19:1;;33027:271:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;49882:303::-;49927:6;49954:1;49950;:5;49946:232;;;-1:-1:-1;49976:1:0;49992:6;50001:5;50005:1;49976;50001:5;:::i;:::-;:9;;50009:1;50001:9;:::i;:::-;49992:18;;50025:92;50036:1;50032;:5;50025:92;;;50062:1;-1:-1:-1;50062:1:0;50100;50062;50087:5;50062:1;50087;:5;:::i;:::-;:9;;;;:::i;:::-;50086:15;;;;:::i;:::-;50082:19;;50025:92;;;49957:171;49882:303;;;:::o;49946:232::-;50138:6;;50134:44;;-1:-1:-1;50165:1:0;50134:44;49882:303;;;:::o;49778:96::-;49830:6;49857:1;49853;:5;:13;;49865:1;49853:13;;;-1:-1:-1;49861:1:0;;49849:17;-1:-1:-1;49778:96:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:367::-;1460:8;1470:6;1524:3;1517:4;1509:6;1505:17;1501:27;1491:55;;1542:1;1539;1532:12;1491:55;-1:-1:-1;1565:20:1;;1608:18;1597:30;;1594:50;;;1640:1;1637;1630:12;1594:50;1677:4;1669:6;1665:17;1653:29;;1737:3;1730:4;1720:6;1717:1;1713:14;1705:6;1701:27;1697:38;1694:47;1691:67;;;1754:1;1751;1744:12;1691:67;1397:367;;;;;:::o;1769:437::-;1855:6;1863;1916:2;1904:9;1895:7;1891:23;1887:32;1884:52;;;1932:1;1929;1922:12;1884:52;1972:9;1959:23;2005:18;1997:6;1994:30;1991:50;;;2037:1;2034;2027:12;1991:50;2076:70;2138:7;2129:6;2118:9;2114:22;2076:70;:::i;:::-;2165:8;;2050:96;;-1:-1:-1;1769:437:1;-1:-1:-1;;;;1769:437:1:o;2211:180::-;2270:6;2323:2;2311:9;2302:7;2298:23;2294:32;2291:52;;;2339:1;2336;2329:12;2291:52;-1:-1:-1;2362:23:1;;2211:180;-1:-1:-1;2211:180:1:o;2631:385::-;2717:6;2725;2733;2741;2794:3;2782:9;2773:7;2769:23;2765:33;2762:53;;;2811:1;2808;2801:12;2762:53;-1:-1:-1;;2834:23:1;;;2904:2;2889:18;;2876:32;;-1:-1:-1;2955:2:1;2940:18;;2927:32;;3006:2;2991:18;2978:32;;-1:-1:-1;2631:385:1;-1:-1:-1;2631:385:1:o;3021:456::-;3098:6;3106;3114;3167:2;3155:9;3146:7;3142:23;3138:32;3135:52;;;3183:1;3180;3173:12;3135:52;3222:9;3209:23;3241:31;3266:5;3241:31;:::i;:::-;3291:5;-1:-1:-1;3348:2:1;3333:18;;3320:32;3361:33;3320:32;3361:33;:::i;:::-;3021:456;;3413:7;;-1:-1:-1;;;3467:2:1;3452:18;;;;3439:32;;3021:456::o;3482:247::-;3541:6;3594:2;3582:9;3573:7;3569:23;3565:32;3562:52;;;3610:1;3607;3600:12;3562:52;3649:9;3636:23;3668:31;3693:5;3668:31;:::i;4131:118::-;4217:5;4210:13;4203:21;4196:5;4193:32;4183:60;;4239:1;4236;4229:12;4254:382;4319:6;4327;4380:2;4368:9;4359:7;4355:23;4351:32;4348:52;;;4396:1;4393;4386:12;4348:52;4435:9;4422:23;4454:31;4479:5;4454:31;:::i;:::-;4504:5;-1:-1:-1;4561:2:1;4546:18;;4533:32;4574:30;4533:32;4574:30;:::i;:::-;4623:7;4613:17;;;4254:382;;;;;:::o;4641:566::-;4733:6;4741;4749;4802:2;4790:9;4781:7;4777:23;4773:32;4770:52;;;4818:1;4815;4808:12;4770:52;4858:9;4845:23;4891:18;4883:6;4880:30;4877:50;;;4923:1;4920;4913:12;4877:50;4962:70;5024:7;5015:6;5004:9;5000:22;4962:70;:::i;:::-;5051:8;;-1:-1:-1;4936:96:1;-1:-1:-1;;5136:2:1;5121:18;;5108:32;5149:28;5108:32;5149:28;:::i;:::-;5196:5;5186:15;;;4641:566;;;;;:::o;5765:388::-;5833:6;5841;5894:2;5882:9;5873:7;5869:23;5865:32;5862:52;;;5910:1;5907;5900:12;5862:52;5949:9;5936:23;5968:31;5993:5;5968:31;:::i;:::-;6018:5;-1:-1:-1;6075:2:1;6060:18;;6047:32;6088:33;6047:32;6088:33;:::i;6158:380::-;6237:1;6233:12;;;;6280;;;6301:61;;6355:4;6347:6;6343:17;6333:27;;6301:61;6408:2;6400:6;6397:14;6377:18;6374:38;6371:161;;6454:10;6449:3;6445:20;6442:1;6435:31;6489:4;6486:1;6479:15;6517:4;6514:1;6507:15;6543:356;6745:2;6727:21;;;6764:18;;;6757:30;6823:34;6818:2;6803:18;;6796:62;6890:2;6875:18;;6543:356::o;6904:127::-;6965:10;6960:3;6956:20;6953:1;6946:31;6996:4;6993:1;6986:15;7020:4;7017:1;7010:15;7036:184;7106:6;7159:2;7147:9;7138:7;7134:23;7130:32;7127:52;;;7175:1;7172;7165:12;7127:52;-1:-1:-1;7198:16:1;;7036:184;-1:-1:-1;7036:184:1:o;7225:127::-;7286:10;7281:3;7277:20;7274:1;7267:31;7317:4;7314:1;7307:15;7341:4;7338:1;7331:15;7357:125;7422:9;;;7443:10;;;7440:36;;;7456:18;;:::i;7487:128::-;7554:9;;;7575:11;;;7572:37;;;7589:18;;:::i;7620:135::-;7659:3;7680:17;;;7677:43;;7700:18;;:::i;:::-;-1:-1:-1;7747:1:1;7736:13;;7620:135::o;7760:168::-;7833:9;;;7864;;7881:15;;;7875:22;;7861:37;7851:71;;7902:18;;:::i;7933:217::-;7973:1;7999;7989:132;;8043:10;8038:3;8034:20;8031:1;8024:31;8078:4;8075:1;8068:15;8106:4;8103:1;8096:15;7989:132;-1:-1:-1;8135:9:1;;7933:217::o;8434:245::-;8501:6;8554:2;8542:9;8533:7;8529:23;8525:32;8522:52;;;8570:1;8567;8560:12;8522:52;8602:9;8596:16;8621:28;8643:5;8621:28;:::i;8684:188::-;8763:13;;-1:-1:-1;;;;;8805:42:1;;8795:53;;8785:81;;8862:1;8859;8852:12;8877:450;8964:6;8972;8980;9033:2;9021:9;9012:7;9008:23;9004:32;9001:52;;;9049:1;9046;9039:12;9001:52;9072:40;9102:9;9072:40;:::i;:::-;9062:50;;9131:49;9176:2;9165:9;9161:18;9131:49;:::i;:::-;9121:59;;9223:2;9212:9;9208:18;9202:25;9267:10;9260:5;9256:22;9249:5;9246:33;9236:61;;9293:1;9290;9283:12;9332:127;9393:10;9388:3;9384:20;9381:1;9374:31;9424:4;9421:1;9414:15;9448:4;9445:1;9438:15;9464:465;9517:3;9555:5;9549:12;9582:6;9577:3;9570:19;9608:4;9637;9632:3;9628:14;9621:21;;9676:4;9669:5;9665:16;9699:1;9709:195;9723:6;9720:1;9717:13;9709:195;;;9788:13;;-1:-1:-1;;;;;9784:39:1;9772:52;;9844:12;;;;9879:15;;;;9820:1;9738:9;9709:195;;;-1:-1:-1;9920:3:1;;9464:465;-1:-1:-1;;;;;9464:465:1:o;9934:332::-;10141:6;10130:9;10123:25;10184:2;10179;10168:9;10164:18;10157:30;10104:4;10204:56;10256:2;10245:9;10241:18;10233:6;10204:56;:::i;:::-;10196:64;9934:332;-1:-1:-1;;;;9934:332:1:o;10271:1105::-;10366:6;10397:2;10440;10428:9;10419:7;10415:23;10411:32;10408:52;;;10456:1;10453;10446:12;10408:52;10489:9;10483:16;10518:18;10559:2;10551:6;10548:14;10545:34;;;10575:1;10572;10565:12;10545:34;10613:6;10602:9;10598:22;10588:32;;10658:7;10651:4;10647:2;10643:13;10639:27;10629:55;;10680:1;10677;10670:12;10629:55;10709:2;10703:9;10731:2;10727;10724:10;10721:36;;;10737:18;;:::i;:::-;10783:2;10780:1;10776:10;10815:2;10809:9;10878:2;10874:7;10869:2;10865;10861:11;10857:25;10849:6;10845:38;10933:6;10921:10;10918:22;10913:2;10901:10;10898:18;10895:46;10892:72;;;10944:18;;:::i;:::-;10980:2;10973:22;11030:18;;;11064:15;;;;-1:-1:-1;11106:11:1;;;11102:20;;;11134:19;;;11131:39;;;11166:1;11163;11156:12;11131:39;11190:11;;;;11210:135;11226:6;11221:3;11218:15;11210:135;;;11292:10;;11280:23;;11243:12;;;;11323;;;;11210:135;;;11364:6;10271:1105;-1:-1:-1;;;;;;;;10271:1105:1:o;12596:401::-;12798:2;12780:21;;;12837:2;12817:18;;;12810:30;12876:34;12871:2;12856:18;;12849:62;-1:-1:-1;;;12942:2:1;12927:18;;12920:35;12987:3;12972:19;;12596:401::o;13693:582::-;13992:6;13981:9;13974:25;14035:6;14030:2;14019:9;14015:18;14008:34;14078:3;14073:2;14062:9;14058:18;14051:31;13955:4;14099:57;14151:3;14140:9;14136:19;14128:6;14099:57;:::i;:::-;-1:-1:-1;;;;;14192:32:1;;;;14187:2;14172:18;;14165:60;-1:-1:-1;14256:3:1;14241:19;14234:35;14091:65;13693:582;-1:-1:-1;;;13693:582:1:o;14660:251::-;14730:6;14783:2;14771:9;14762:7;14758:23;14754:32;14751:52;;;14799:1;14796;14789:12;14751:52;14831:9;14825:16;14850:31;14875:5;14850:31;:::i;15681:306::-;15769:6;15777;15785;15838:2;15826:9;15817:7;15813:23;15809:32;15806:52;;;15854:1;15851;15844:12;15806:52;15883:9;15877:16;15867:26;;15933:2;15922:9;15918:18;15912:25;15902:35;;15977:2;15966:9;15962:18;15956:25;15946:35;;15681:306;;;;;:::o
Swarm Source
ipfs://3f9366b79fe641b05004eeabe11002c5dbc2bd54507a21df009936fb8128904b
Loading...
Loading
Loading...
Loading
Net Worth in USD
$123.71
Net Worth in BNB
Token Allocations
BSC-USD
100.00%
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BSC | 100.00% | $0.999976 | 123.715 | $123.71 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.