Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 18 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Balance Of | 14123543 | 1488 days ago | 0 ETH | |||||
| Transfer | 14123543 | 1488 days ago | 0 ETH | |||||
| Transfer | 14115854 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115854 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115854 | 1489 days ago | 0 ETH | |||||
| Transfer | 14115854 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115854 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115670 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115670 | 1489 days ago | 0 ETH | |||||
| Transfer | 14115670 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115670 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115669 | 1489 days ago | 0 ETH | |||||
| Transfer | 14115669 | 1489 days ago | 0 ETH | |||||
| Balance Of | 14115657 | 1489 days ago | 0 ETH | |||||
| Transfer From | 14115657 | 1489 days ago | 0 ETH | |||||
| Create Pair | 14115639 | 1489 days ago | 0 ETH | |||||
| WETH | 14115639 | 1489 days ago | 0 ETH | |||||
| Factory | 14115639 | 1489 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PushinP
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-01-31
*/
/**
https://t.me/pushinpeth
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by 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;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
contract Ownable is Context {
address private _owner;
address private _previousOwner;
uint256 private _lockTime;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event 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 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;
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// pragma solidity >=0.6.2;
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract PushinP is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
address payable private marketingWallet = payable(0x67F4d8460c0c6f7eA47371F90486aF1945D8F3E3);
address payable private ecosystemWallet = payable(0x67F4d8460c0c6f7eA47371F90486aF1945D8F3E3);
address payable private devWallet = payable (0x67F4d8460c0c6f7eA47371F90486aF1945D8F3E3);
mapping (address => uint256) private _rOwned;
mapping (address => uint256) private _tOwned;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) private _isSniper;
uint256 public deadBlocks = 2;
uint256 public launchedAt = 0;
mapping (address => bool) private _isExcludedFromFee;
mapping (address => bool) private _isMaxWalletExempt;
mapping (address => bool) private _isExcluded;
mapping (address => bool) private _isTrusted;
address[] private _excluded;
address DEAD = 0x000000000000000000000000000000000000dEaD;
uint8 private _decimals = 9;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal = 1000000000 * 10**_decimals;
uint256 private _rTotal = (MAX - (MAX % _tTotal));
uint256 private _tFeeTotal;
string private _name = "Pushin P";
string private _symbol = "PushinP";
uint256 public _maxWalletToken = _tTotal.div(100).mul(2);
uint256 public _buyLiquidityFee = 20; //2%
uint256 public _buyDevFee = 10; //1%
uint256 public _buyMarketingFee = 50; //5%
uint256 public _buyReflectionFee = 0;
uint256 public _sellLiquidityFee = 0;
uint256 public _sellMarketingFee = 100; //10%
uint256 public _sellDevFee = 20; //10%
uint256 public _sellReflectionFee = 0;
uint256 private ecosystemFee = 30; //3%
uint256 private liquidityFee = _buyLiquidityFee;
uint256 private marketingFee = _buyMarketingFee;
uint256 private devFee = _buyDevFee;
uint256 private reflectionFee=_buyReflectionFee;
uint256 private totalFee =
liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);
uint256 private currenttotalFee = totalFee;
uint256 public swapThreshold = _tTotal.div(10000).mul(5); //0.05%
IUniswapV2Router02 public uniswapV2Router;
address public uniswapV2Pair;
bool inSwap;
bool public tradingOpen = false;
bool public zeroBuyTaxmode = false;
bool private antiBotmode = true;
event SwapETHForTokens(
uint256 amountIn,
address[] path
);
event SwapTokensForETH(
uint256 amountIn,
address[] path
);
modifier lockTheSwap {
inSwap = true;
_;
inSwap = false;
}
constructor () {
_rOwned[_msgSender()] = _rTotal;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
uniswapV2Router = _uniswapV2Router;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
_isMaxWalletExempt[owner()] = true;
_isMaxWalletExempt[address(this)] = true;
_isMaxWalletExempt[uniswapV2Pair] = true;
_isMaxWalletExempt[DEAD] = true;
_isTrusted[owner()] = true;
_isTrusted[uniswapV2Pair] = true;
emit Transfer(address(0), _msgSender(), _tTotal);
}
function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
tradingOpen = _status;
excludeFromReward(address(this));
excludeFromReward(uniswapV2Pair);
if(tradingOpen && launchedAt == 0){
launchedAt = block.number;
deadBlocks = _deadBlocks;
}
}
function setZeroBuyTaxmode(bool _status) external onlyOwner() {
zeroBuyTaxmode=_status;
}
function setAntiBotmode(bool _status) external onlyOwner() {
antiBotmode=_status;
}
function setNewRouter(address newRouter) external onlyOwner() {
IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
if (get_pair == address(0)) {
uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
}
else {
uniswapV2Pair = get_pair;
}
uniswapV2Router = _newRouter;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
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;
}
function isExcludedFromReward(address account) public view returns (bool) {
return _isExcluded[account];
}
function totalFees() public view returns (uint256) {
return _tFeeTotal;
}
function deliver(uint256 tAmount) public {
address sender = _msgSender();
require(!_isExcluded[sender], "Excluded addresses cannot call this function");
(uint256 rAmount,,,,,) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rTotal = _rTotal.sub(rAmount);
_tFeeTotal = _tFeeTotal.add(tAmount);
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
(uint256 rAmount,,,,,) = _getValues(tAmount);
return rAmount;
} else {
(,uint256 rTransferAmount,,,,) = _getValues(tAmount);
return rTransferAmount;
}
}
function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
require(rAmount <= _rTotal, "Amount must be less than total reflections");
uint256 currentRate = _getRate();
return rAmount.div(currentRate);
}
function excludeFromReward(address account) public onlyOwner() {
if(_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeInReward(address account) external onlyOwner() {
require(_isExcluded[account], "Account is already excluded");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
}
function _approve(address owner, address spender, uint256 amount) private {
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);
}
function _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
require(!_isSniper[from], "You have no power here!");
if (from!= owner() && to!= owner()) require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
bool takeFee = false;
//take fee only on swaps
if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
takeFee = true;
}
if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && !((launchedAt + deadBlocks) > block.number)){
require(amount+ balanceOf(to)<=_maxWalletToken,
"Total Holding is currently limited");
}
currenttotalFee=totalFee;
reflectionFee=_buyReflectionFee;
if(tradingOpen && to == uniswapV2Pair) { //sell
currenttotalFee= _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
reflectionFee=_sellReflectionFee;
}
//antibot - first 2 blocks
if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
_isSniper[to]=true;
}
//Punish high slippage bots for next - only bot txns go through here
if(launchedAt>0 && from!= owner() && block.number >= (launchedAt + deadBlocks) && antiBotmode){
currenttotalFee=990;
}
if(zeroBuyTaxmode){
if(tradingOpen && from == uniswapV2Pair) { //buys
currenttotalFee=0;
}
}
//sell
if (!inSwap && tradingOpen && to == uniswapV2Pair) {
uint256 contractTokenBalance = balanceOf(address(this));
if(contractTokenBalance>=swapThreshold){
contractTokenBalance = swapThreshold;
swapTokens(contractTokenBalance);
}
}
_tokenTransfer(from,to,amount,takeFee);
}
function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
uint256 amountToLiquify = contractTokenBalance
.mul(liquidityFee)
.div(totalFee)
.div(2);
uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);
swapTokensForEth(amountToSwap);
uint256 amountETH = address(this).balance;
uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));
uint256 amountETHLiquidity = amountETH
.mul(liquidityFee)
.div(totalETHFee)
.div(2);
uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
totalETHFee
);
uint256 amountETHEcosystem = amountETH.mul(ecosystemFee).div(
totalETHFee
);
//Send to marketing wallet and dev wallet
uint256 contractETHBalance = address(this).balance;
if(contractETHBalance > 0) {
sendETHToFee(amountETHMarketing,marketingWallet);
sendETHToFee(amountETHEcosystem,ecosystemWallet);
sendETHToFee(amountETHdev,devWallet);
}
if (amountToLiquify > 0) {
addLiquidity(amountToLiquify,amountETHLiquidity);
}
}
function sendETHToFee(uint256 amount,address payable wallet) private {
wallet.transfer(amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this), // The contract
block.timestamp
);
emit SwapTokensForETH(tokenAmount, path);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
owner(),
block.timestamp
);
}
function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
uint256 _previousReflectionFee=reflectionFee;
uint256 _previousTotalFee=currenttotalFee;
if(!takeFee){
reflectionFee = 0;
currenttotalFee=0;
}
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, amount);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount);
} else {
_transferStandard(sender, recipient, amount);
}
if(!takeFee){
reflectionFee = _previousReflectionFee;
currenttotalFee=_previousTotalFee;
}
}
function _transferStandard(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
_takeLiquidity(tLiquidity);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal.sub(rFee);
_tFeeTotal = _tFeeTotal.add(tFee);
}
function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
(uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
}
function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
uint256 tFee = calculateTaxFee(tAmount);
uint256 tLiquidity = calculateLiquidityFee(tAmount);
uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
return (tTransferAmount, tFee, tLiquidity);
}
function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
uint256 rAmount = tAmount.mul(currentRate);
uint256 rFee = tFee.mul(currentRate);
uint256 rLiquidity = tLiquidity.mul(currentRate);
uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
return (rAmount, rTransferAmount, rFee);
}
function _getRate() private view returns(uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply.div(tSupply);
}
function _getCurrentSupply() private view returns(uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
rSupply = rSupply.sub(_rOwned[_excluded[i]]);
tSupply = tSupply.sub(_tOwned[_excluded[i]]);
}
if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function _takeLiquidity(uint256 tLiquidity) private {
uint256 currentRate = _getRate();
uint256 rLiquidity = tLiquidity.mul(currentRate);
_rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
if(_isExcluded[address(this)])
_tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
}
function calculateTaxFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(reflectionFee).div(
10**3
);
}
function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
return _amount.mul(currenttotalFee).div(
10**3
);
}
function excludeMultiple(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function excludeFromFee(address[] calldata addresses) public onlyOwner {
for (uint256 i; i < addresses.length; ++i) {
_isExcludedFromFee[addresses[i]] = true;
}
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function setWallets(address _marketingWallet,address _devWallet) external onlyOwner() {
marketingWallet = payable(_marketingWallet);
devWallet = payable(_devWallet);
}
function transferToAddressETH(address payable recipient, uint256 amount) private {
recipient.transfer(amount);
}
function isSniper(address account) public view returns (bool) {
return _isSniper[account];
}
function manage_Snipers(address[] calldata addresses, bool status) public onlyOwner {
for (uint256 i; i < addresses.length; ++i) {
if(!_isTrusted[addresses[i]]){
_isSniper[addresses[i]] = status;
}
}
}
function manage_trusted(address[] calldata addresses) public onlyOwner {
for (uint256 i; i < addresses.length; ++i) {
_isTrusted[addresses[i]]=true;
}
}
function withDrawLeftoverETH(address payable receipient) public onlyOwner {
receipient.transfer(address(this).balance);
}
function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
uint256 balance = token.balanceOf(address(this));
token.transfer(to, balance);
}
function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
_maxWalletToken = _tTotal.div(1000).mul(maxWallPercent_base1000);
}
function setMaxWalletExempt(address _addr) external onlyOwner {
_isMaxWalletExempt[_addr] = true;
}
function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor) external onlyOwner {
swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
}
function airdrop(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {
require(addresses.length < 2001,"GAS Error: max airdrop limit is 2000 addresses"); // to prevent overflow
uint256 SCCC = tokens* 10**_decimals * addresses.length;
require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");
for(uint i=0; i < addresses.length; i++){
_transfer(from,addresses[i],(tokens* 10**_decimals));
}
}
function setTaxesBuy(uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee,uint256 _ecosystemFee) external onlyOwner {
_buyLiquidityFee = _liquidityFee;
_buyMarketingFee = _marketingFee;
_buyDevFee = _devFee;
_buyReflectionFee= _reflectionFee;
reflectionFee= _reflectionFee;
liquidityFee = _liquidityFee;
devFee = _devFee;
marketingFee = _marketingFee;
ecosystemFee=_ecosystemFee;
totalFee = liquidityFee.add(marketingFee).add(devFee).add(ecosystemFee);
}
function setTaxesSell(uint256 _reflectionFee,uint256 _liquidityFee, uint256 _marketingFee,uint256 _devFee) external onlyOwner {
_sellLiquidityFee = _liquidityFee;
_sellMarketingFee = _marketingFee;
_sellDevFee = _devFee;
_sellReflectionFee= _reflectionFee;
}
receive() external payable {}
}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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_ecosystemFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052600380546001600160a01b03199081167367f4d8460c0c6f7ea47371f90486af1945d8f3e3908117909255600480548216831790556005805490911690911790556002600a9081556000600b55601180547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200009391600160a01b90910460ff169062000908565b620000a390633b9aca00620009c7565b6012819055620000b69060001962000a40565b620000c490600019620009e9565b60135560408051808201909152600880825267050757368696e20560c41b6020909201918252620000f89160159162000768565b5060408051808201909152600780825266050757368696e560cc1b6020909201918252620001299160169162000768565b506200016160026200014d6064601254620005eb60201b62001f781790919060201c565b6200063e60201b62001fba1790919060201c565b6017556014601855600a6019556032601a556000601b556000601c556064601d556014601e556000601f55601e602055601854602155601a54602255601954602355601b54602455620001e9602054620001d5602354620001d5602254602154620006c960201b620020391790919060201c565b620006c960201b620020391790919060201c565b6025556025546026556200021660056200014d612710601254620005eb60201b62001f781790919060201c565b6027556029805462ffffff60a81b1916600160b81b1790553480156200023b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002df57600080fd5b505afa158015620002f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031a91906200080e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036357600080fd5b505afa15801562000378573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039e91906200080e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003e757600080fd5b505af1158015620003fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042291906200080e565b602980546001600160a01b03199081166001600160a01b0393841617909155602880549091169183169190911790556001600c60006200046a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600c909252812080549092166001908117909255600d90620004c36000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155602954821684528284208054861682179055601154909116835290822080549093168117909255600f90620005456000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556029549091168152600f909252902080549091166001179055620005943390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601254604051620005dc91815260200190565b60405180910390a35062000a83565b60006200063583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200072c60201b60201c565b90505b92915050565b6000826200064f5750600062000638565b60006200065d8385620009c7565b9050826200066c8583620008a8565b14620006355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006d883856200088d565b905083811015620006355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006c0565b60008183620007505760405162461bcd60e51b8152600401620006c0919062000837565b5060006200075f8486620008a8565b95945050505050565b828054620007769062000a03565b90600052602060002090601f0160209004810192826200079a5760008555620007e5565b82601f10620007b557805160ff1916838001178555620007e5565b82800160010185558215620007e5579182015b82811115620007e5578251825591602001919060010190620007c8565b50620007f3929150620007f7565b5090565b5b80821115620007f35760008155600101620007f8565b60006020828403121562000820578081fd5b81516001600160a01b038116811462000635578182fd5b6000602080835283518082850152825b81811015620008655785810183015185820160400152820162000847565b81811115620008775783604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620008a357620008a362000a57565b500190565b600082620008ba57620008ba62000a6d565b500490565b600181815b8085111562000900578160001904821115620008e457620008e462000a57565b80851615620008f257918102915b93841c9390800290620008c4565b509250929050565b60006200063560ff841683600082620009245750600162000638565b81620009335750600062000638565b81600181146200094c5760028114620009575762000977565b600191505062000638565b60ff8411156200096b576200096b62000a57565b50506001821b62000638565b5060208310610133831016604e8410600b84101617156200099c575081810a62000638565b620009a88383620008bf565b8060001904821115620009bf57620009bf62000a57565b029392505050565b6000816000190483118215151615620009e457620009e462000a57565b500290565b600082821015620009fe57620009fe62000a57565b500390565b600181811c9082168062000a1857607f821691505b6020821081141562000a3a57634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a525762000a5262000a6d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613a378062000a936000396000f3fe60806040526004361061036f5760003560e01c8063715018a6116101c6578063a9059cbb116100f7578063dd62ed3e11610095578063f259c57b1161006f578063f259c57b14610a03578063f2fde38b14610a23578063fabb0b4f14610a43578063ffb54a9914610a5957600080fd5b8063dd62ed3e1461097d578063ea2f0b37146109c3578063eafb5a3c146109e357600080fd5b8063c8607952116100d1578063c86079521461091b578063c9cf778914610931578063d3f6a15714610947578063dc44b6a01461096757600080fd5b8063a9059cbb146108cf578063bf56b371146108ef578063c5d241891461090557600080fd5b806388f820201161016457806395d89b411161013e57806395d89b411461085a578063a1ac727f1461086f578063a3b84b6b1461088f578063a457c2d7146108af57600080fd5b806388f82020146107e35780638da5cb5b1461081c5780638f4590d21461083a57600080fd5b80637598f8bc116101a05780637598f8bc1461078157806378109e541461079757806384530c46146107ad57806388790a68146107cd57600080fd5b8063715018a61461072c57806371b9189c14610741578063743942b61461076157600080fd5b8063313ce567116102a057806349bd5a5e1161023e5780635d54c0af116102185780635d54c0af146106b657806362015852146106d65780636ce37fa0146106ec57806370a082311461070c57600080fd5b806349bd5a5e146106565780634b01547f1461067657806352390c021461069657600080fd5b80633bd5d1731161027a5780633bd5d173146105e05780633ddf65ab14610600578063401aa5c0146106205780634549b0391461063657600080fd5b8063313ce567146105745780633685d419146105a057806339509351146105c057600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104f35780632d4103d6146105145780632d838119146105345780632dd5efe71461055457600080fd5b806318160ddd1461049e57806323b872dd146104b357806325b86edf146104d357600080fd5b8063095ea7b311610349578063095ea7b3146103e85780630f3a325f1461041857806313114a9d146104515780631694505e1461046657600080fd5b80630445b6671461037b57806306fdde03146103a457806309302dc6146103c657600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160275481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506103b9610a7a565b60405161039b91906136e1565b3480156103d257600080fd5b506103e66103e1366004613591565b610b0c565b005b3480156103f457600080fd5b5061040861040336600461346a565b610b66565b604051901515815260200161039b565b34801561042457600080fd5b50610408610433366004613360565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561045d57600080fd5b50601454610391565b34801561047257600080fd5b50602854610486906001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b3480156104aa57600080fd5b50601254610391565b3480156104bf57600080fd5b506104086104ce3660046133d0565b610b7d565b3480156104df57600080fd5b506103e66104ee36600461357f565b610be6565b3480156104ff57600080fd5b5060295461040890600160b01b900460ff1681565b34801561052057600080fd5b506103e661052f366004613562565b610d16565b34801561054057600080fd5b5061039161054f366004613591565b610da1565b34801561056057600080fd5b506103e661056f366004613360565b610e25565b34801561058057600080fd5b50601154600160a01b900460ff1660405160ff909116815260200161039b565b3480156105ac57600080fd5b506103e66105bb366004613360565b610e73565b3480156105cc57600080fd5b506104086105db36600461346a565b61105e565b3480156105ec57600080fd5b506103e66105fb366004613591565b611094565b34801561060c57600080fd5b506103e661061b36600461352a565b61117e565b34801561062c57600080fd5b50610391601b5481565b34801561064257600080fd5b506103916106513660046135c1565b6111c6565b34801561066257600080fd5b50602954610486906001600160a01b031681565b34801561068257600080fd5b506103e661069136600461352a565b611253565b3480156106a257600080fd5b506103e66106b1366004613360565b61129b565b3480156106c257600080fd5b506103e66106d13660046134d5565b611385565b3480156106e257600080fd5b5061039160195481565b3480156106f857600080fd5b506103e6610707366004613633565b611487565b34801561071857600080fd5b50610391610727366004613360565b6114c2565b34801561073857600080fd5b506103e6611521565b34801561074d57600080fd5b506103e661075c366004613495565b611595565b34801561076d57600080fd5b506103e661077c366004613360565b611642565b34801561078d57600080fd5b50610391601f5481565b3480156107a357600080fd5b5061039160175481565b3480156107b957600080fd5b506103e66107c8366004613495565b6116a1565b3480156107d957600080fd5b50610391601c5481565b3480156107ef57600080fd5b506104086107fe366004613360565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561082857600080fd5b506000546001600160a01b0316610486565b34801561084657600080fd5b506103e66108553660046135e5565b611749565b34801561086657600080fd5b506103b9611793565b34801561087b57600080fd5b506103e661088a366004613410565b6117a2565b34801561089b57600080fd5b506103e66108aa366004613664565b611944565b3480156108bb57600080fd5b506104086108ca36600461346a565b6119bb565b3480156108db57600080fd5b506104086108ea36600461346a565b611a0a565b3480156108fb57600080fd5b50610391600b5481565b34801561091157600080fd5b50610391601a5481565b34801561092757600080fd5b50610391601d5481565b34801561093d57600080fd5b50610391601e5481565b34801561095357600080fd5b506103e6610962366004613398565b611a17565b34801561097357600080fd5b5061039160185481565b34801561098957600080fd5b50610391610998366004613398565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109cf57600080fd5b506103e66109de366004613360565b611a6f565b3480156109ef57600080fd5b506103e66109fe366004613360565b611aba565b348015610a0f57600080fd5b506103e6610a1e366004613360565b611e40565b348015610a2f57600080fd5b506103e6610a3e366004613360565b611e8e565b348015610a4f57600080fd5b50610391600a5481565b348015610a6557600080fd5b5060295461040890600160a81b900460ff1681565b606060158054610a8990613922565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab590613922565b8015610b025780601f10610ad757610100808354040283529160200191610b02565b820191906000526020600020905b815481529060010190602001808311610ae557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b8152600401610b3690613734565b60405180910390fd5b610b6081610b5a6103e8601254611f7890919063ffffffff16565b90611fba565b60175550565b6000610b73338484612098565b5060015b92915050565b6000610b8a8484846121bc565b610bdc8433610bd7856040518060600160405280602881526020016139b5602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906126df565b612098565b5060019392505050565b6000546001600160a01b03163314610c105760405162461bcd60e51b8152600401610b3690613734565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c5257600080fd5b505afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906135a9565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610cd857600080fd5b505af1158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d109190613546565b50505050565b6000546001600160a01b03163314610d405760405162461bcd60e51b8152600401610b3690613734565b6029805460ff60a81b1916600160a81b84151502179055610d603061129b565b602954610d75906001600160a01b031661129b565b602954600160a81b900460ff168015610d8e5750600b54155b15610d9d5743600b55600a8190555b5050565b6000601354821115610e085760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b36565b6000610e12612719565b9050610e1e8382611f78565b9392505050565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b0381166000908152600e602052604090205460ff16610f055760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b36565b60005b601054811015610d9d57816001600160a01b031660108281548110610f3d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561104c5760108054610f689060019061390b565b81548110610f8657634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110610fc057634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055601080548061102657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110568161395d565b915050610f08565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b73918590610bd79086612039565b336000818152600e602052604090205460ff16156111095760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b36565b60006111148361273c565b505050506001600160a01b0384166000908152600660205260409020549192506111409190508261278b565b6001600160a01b038316600090815260066020526040902055601354611166908261278b565b6013556014546111769084612039565b601455505050565b6000546001600160a01b031633146111a85760405162461bcd60e51b8152600401610b3690613734565b60298054911515600160b81b0260ff60b81b19909216919091179055565b600060125483111561121a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b36565b8161123957600061122a8461273c565b50939550610b77945050505050565b60006112448461273c565b50929550610b77945050505050565b6000546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610b3690613734565b60298054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112c55760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b0381166000908152600660205260409020541561131f576001600160a01b03811660009081526006602052604090205461130590610da1565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146113af5760405162461bcd60e51b8152600401610b3690613734565b60005b82811015610d1057600f60008585848181106113de57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113f39190613360565b6001600160a01b0316815260208101919091526040016000205460ff1661147757816009600086868581811061143957634e487b7160e01b600052603260045260246000fd5b905060200201602081019061144e9190613360565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6114808161395d565b90506113b2565b6000546001600160a01b031633146114b15760405162461bcd60e51b8152600401610b3690613734565b601c92909255601d55601e55601f55565b6001600160a01b0381166000908152600e602052604081205460ff16156114ff57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b7790610da1565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610b3690613734565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115bf5760405162461bcd60e51b8152600401610b3690613734565b60005b8181101561163d576001600c60008585858181106115f057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116059190613360565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116368161395d565b90506115c2565b505050565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610b3690613734565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d9d573d6000803e3d6000fd5b6000546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610b3690613734565b60005b8181101561163d576001600f60008585858181106116fc57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117119190613360565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117428161395d565b90506116ce565b6000546001600160a01b031633146117735760405162461bcd60e51b8152600401610b3690613734565b808260125461178291906138ec565b61178c91906137de565b6027555050565b606060168054610a8990613922565b6000546001600160a01b031633146117cc5760405162461bcd60e51b8152600401610b3690613734565b6107d182106118345760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b36565b601154600090839061185190600160a01b900460ff16600a613841565b61185b90846138ec565b61186591906138ec565b905080611871866114c2565b10156118bf5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b36565b60005b8381101561193c5761192a868686848181106118ee57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119039190613360565b60115461191b90600160a01b900460ff16600a613841565b61192590876138ec565b6121bc565b806119348161395d565b9150506118c2565b505050505050565b6000546001600160a01b0316331461196e5760405162461bcd60e51b8152600401610b3690613734565b6018849055601a8390556019829055601b859055602485905560218490556023829055602283905560208190556119b1816119ab84818888612039565b90612039565b6025555050505050565b6000610b733384610bd7856040518060600160405280602581526020016139dd602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906126df565b6000610b733384846121bc565b6000546001600160a01b03163314611a415760405162461bcd60e51b8152600401610b3690613734565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611a995760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611ae45760405162461bcd60e51b8152600401610b3690613734565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2457600080fd5b505afa158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c919061337c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba457600080fd5b505afa158015611bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdc919061337c565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611c2257600080fd5b505afa158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a919061337c565b90506001600160a01b038116611e0057816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ca357600080fd5b505afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb919061337c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2357600080fd5b505afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061337c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611da357600080fd5b505af1158015611db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddb919061337c565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e1c565b602980546001600160a01b0319166001600160a01b0383161790555b50602880546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e6a5760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611eb85760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b038116611f1d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b36565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e1e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127cd565b600082611fc957506000610b77565b6000611fd583856138ec565b905082611fe285836137de565b14610e1e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b36565b60008061204683856137c6565b905083811015610e1e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b36565b6001600160a01b0383166120fa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b36565b6001600160a01b03821661215b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b36565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b36565b6001600160a01b0382166122825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b36565b600081116122e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b36565b6001600160a01b03831660009081526009602052604090205460ff161561234d5760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b36565b6000546001600160a01b0384811691161480159061237957506000546001600160a01b03838116911614155b156123d757602954600160a81b900460ff166123d75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b36565b6029546000906001600160a01b038581169116148061240357506029546001600160a01b038481169116145b801561244b57506001600160a01b0384166000908152600c602052604090205460ff168061244957506001600160a01b0383166000908152600c602052604090205460ff165b155b15612454575060015b6000600b5411801561249857506001600160a01b0383166000908152600d602052604090205460ff1615801561249857506000546001600160a01b03858116911614155b80156124b3575043600a54600b546124b091906137c6565b11155b15612527576017546124c4846114c2565b6124ce90846137c6565b11156125275760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b36565b602554602655601b54602455602954600160a81b900460ff16801561255957506029546001600160a01b038481169116145b156125855761257b601e546119ab601d54601c5461203990919063ffffffff16565b602655601f546024555b6000600b541180156125a5575043600a54600b546125a391906137c6565b115b156125ce576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b541180156125ee57506000546001600160a01b03858116911614155b80156126095750600a54600b5461260591906137c6565b4310155b801561261e5750602954600160b81b900460ff165b1561262a576103de6026555b602954600160b01b900460ff161561266d57602954600160a81b900460ff16801561266257506029546001600160a01b038581169116145b1561266d5760006026555b602954600160a01b900460ff161580156126905750602954600160a81b900460ff165b80156126a957506029546001600160a01b038481169116145b156126d35760006126b9306114c2565b905060275481106126d157506027546126d1816127fb565b505b610d108484848461295a565b600081848411156127035760405162461bcd60e51b8152600401610b3691906136e1565b506000612710848661390b565b95945050505050565b6000806000612726612a86565b90925090506127358282611f78565b9250505090565b60008060008060008060008060006127538a612c40565b92509250925060008060006127718d868661276c612719565b612c82565b919f909e50909c50959a5093985091965092945050505050565b6000610e1e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126df565b600081836127ee5760405162461bcd60e51b8152600401610b3691906136e1565b50600061271084866137de565b6029805460ff60a01b1916600160a01b1790556025546021546000916128319160029161282b9182908790611fba565b90611f78565b9050600061283f838361278b565b905061284a81612cd2565b602154479060009061286a90612861906002611f78565b6025549061278b565b9050600061288c600261282b8461282b60215488611fba90919063ffffffff16565b905060006128a98361282b60235487611fba90919063ffffffff16565b905060006128c68461282b60225488611fba90919063ffffffff16565b905060006128e38561282b60205489611fba90919063ffffffff16565b9050478015612931576003546129039084906001600160a01b0316612e90565b60045461291a9083906001600160a01b0316612e90565b6005546129319085906001600160a01b0316612e90565b8815612941576129418986612ec6565b50506029805460ff60a01b191690555050505050505050565b6024546026548261297057600060248190556026555b6001600160a01b0386166000908152600e602052604090205460ff1680156129b157506001600160a01b0385166000908152600e602052604090205460ff16155b156129c6576129c1868686612faa565b612a72565b6001600160a01b0386166000908152600e602052604090205460ff16158015612a0757506001600160a01b0385166000908152600e602052604090205460ff165b15612a17576129c18686866130d0565b6001600160a01b0386166000908152600e602052604090205460ff168015612a5757506001600160a01b0385166000908152600e602052604090205460ff165b15612a67576129c1868686613179565b612a728686866131ec565b8261193c5760249190915560265550505050565b6013546012546000918291825b601054811015612c1057826006600060108481548110612ac357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b3c5750816007600060108481548110612b1557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b5257601354601254945094505050509091565b612ba66006600060108481548110612b7a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061278b565b9250612bfc6007600060108481548110612bd057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061278b565b915080612c088161395d565b915050612a93565b50601254601354612c2091611f78565b821015612c37576013546012549350935050509091565b90939092509050565b600080600080612c4f85613230565b90506000612c5c8661324d565b90506000612c7482612c6e898661278b565b9061278b565b979296509094509092505050565b6000808080612c918886611fba565b90506000612c9f8887611fba565b90506000612cad8888611fba565b90506000612cbf82612c6e868661278b565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d1557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d6957600080fd5b505afa158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da1919061337c565b81600181518110612dc257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602854612de89130911684612098565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e2190859060009086903090429060040161378a565b600060405180830381600087803b158015612e3b57600080fd5b505af1158015612e4f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e84929190613769565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561163d573d6000803e3d6000fd5b602854612ede9030906001600160a01b031684612098565b6028546001600160a01b031663f305d719823085600080612f076000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fa39190613606565b5050505050565b600080600080600080612fbc8761273c565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612fee908861278b565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461301d908761278b565b6001600160a01b03808b1660009081526006602052604080822093909355908a168152205461304c9086612039565b6001600160a01b03891660009081526006602052604090205561306e8161326a565b61307884836132f2565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130bd91815260200190565b60405180910390a3505050505050505050565b6000806000806000806130e28761273c565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613114908761278b565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461314a9084612039565b6001600160a01b03891660009081526007602090815260408083209390935560069052205461304c9086612039565b60008060008060008061318b8761273c565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506131bd908861278b565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613114908761278b565b6000806000806000806131fe8761273c565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061301d908761278b565b6000610b776103e861282b60245485611fba90919063ffffffff16565b6000610b776103e861282b60265485611fba90919063ffffffff16565b6000613274612719565b905060006132828383611fba565b3060009081526006602052604090205490915061329f9082612039565b30600090815260066020908152604080832093909355600e9052205460ff161561163d57306000908152600760205260409020546132dd9084612039565b30600090815260076020526040902055505050565b6013546132ff908361278b565b60135560145461330f9082612039565b6014555050565b60008083601f840112613327578182fd5b50813567ffffffffffffffff81111561333e578182fd5b6020830191508360208260051b850101111561335957600080fd5b9250929050565b600060208284031215613371578081fd5b8135610e1e8161398e565b60006020828403121561338d578081fd5b8151610e1e8161398e565b600080604083850312156133aa578081fd5b82356133b58161398e565b915060208301356133c58161398e565b809150509250929050565b6000806000606084860312156133e4578081fd5b83356133ef8161398e565b925060208401356133ff8161398e565b929592945050506040919091013590565b60008060008060608587031215613425578081fd5b84356134308161398e565b9350602085013567ffffffffffffffff81111561344b578182fd5b61345787828801613316565b9598909750949560400135949350505050565b6000806040838503121561347c578182fd5b82356134878161398e565b946020939093013593505050565b600080602083850312156134a7578182fd5b823567ffffffffffffffff8111156134bd578283fd5b6134c985828601613316565b90969095509350505050565b6000806000604084860312156134e9578283fd5b833567ffffffffffffffff8111156134ff578384fd5b61350b86828701613316565b909450925050602084013561351f816139a6565b809150509250925092565b60006020828403121561353b578081fd5b8135610e1e816139a6565b600060208284031215613557578081fd5b8151610e1e816139a6565b60008060408385031215613574578182fd5b8235613487816139a6565b600080604083850312156133aa578182fd5b6000602082840312156135a2578081fd5b5035919050565b6000602082840312156135ba578081fd5b5051919050565b600080604083850312156135d3578182fd5b8235915060208301356133c5816139a6565b600080604083850312156135f7578182fd5b50508035926020909101359150565b60008060006060848603121561361a578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613648578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561367b578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b838110156136d65781516001600160a01b0316875295820195908201906001016136b1565b509495945050505050565b6000602080835283518082850152825b8181101561370d578581018301518582016040015282016136f1565b8181111561371e5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613782604083018461369e565b949350505050565b85815284602082015260a0604082015260006137a960a083018661369e565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156137d9576137d9613978565b500190565b6000826137f957634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561383957816000190482111561381f5761381f613978565b8085161561382c57918102915b93841c9390800290613803565b509250929050565b6000610e1e60ff84168360008261385a57506001610b77565b8161386757506000610b77565b816001811461387d5760028114613887576138a3565b6001915050610b77565b60ff84111561389857613898613978565b50506001821b610b77565b5060208310610133831016604e8410600b84101617156138c6575081810a610b77565b6138d083836137fe565b80600019048211156138e4576138e4613978565b029392505050565b600081600019048311821515161561390657613906613978565b500290565b60008282101561391d5761391d613978565b500390565b600181811c9082168061393657607f821691505b6020821081141561395757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561397157613971613978565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146139a357600080fd5b50565b80151581146139a357600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c30a33deb759b2243c9768106722fac37774a9761e5821824ed4f2d42e0b56e264736f6c63430008040033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c8063715018a6116101c6578063a9059cbb116100f7578063dd62ed3e11610095578063f259c57b1161006f578063f259c57b14610a03578063f2fde38b14610a23578063fabb0b4f14610a43578063ffb54a9914610a5957600080fd5b8063dd62ed3e1461097d578063ea2f0b37146109c3578063eafb5a3c146109e357600080fd5b8063c8607952116100d1578063c86079521461091b578063c9cf778914610931578063d3f6a15714610947578063dc44b6a01461096757600080fd5b8063a9059cbb146108cf578063bf56b371146108ef578063c5d241891461090557600080fd5b806388f820201161016457806395d89b411161013e57806395d89b411461085a578063a1ac727f1461086f578063a3b84b6b1461088f578063a457c2d7146108af57600080fd5b806388f82020146107e35780638da5cb5b1461081c5780638f4590d21461083a57600080fd5b80637598f8bc116101a05780637598f8bc1461078157806378109e541461079757806384530c46146107ad57806388790a68146107cd57600080fd5b8063715018a61461072c57806371b9189c14610741578063743942b61461076157600080fd5b8063313ce567116102a057806349bd5a5e1161023e5780635d54c0af116102185780635d54c0af146106b657806362015852146106d65780636ce37fa0146106ec57806370a082311461070c57600080fd5b806349bd5a5e146106565780634b01547f1461067657806352390c021461069657600080fd5b80633bd5d1731161027a5780633bd5d173146105e05780633ddf65ab14610600578063401aa5c0146106205780634549b0391461063657600080fd5b8063313ce567146105745780633685d419146105a057806339509351146105c057600080fd5b806318160ddd1161030d5780632691bc80116102e75780632691bc80146104f35780632d4103d6146105145780632d838119146105345780632dd5efe71461055457600080fd5b806318160ddd1461049e57806323b872dd146104b357806325b86edf146104d357600080fd5b8063095ea7b311610349578063095ea7b3146103e85780630f3a325f1461041857806313114a9d146104515780631694505e1461046657600080fd5b80630445b6671461037b57806306fdde03146103a457806309302dc6146103c657600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160275481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506103b9610a7a565b60405161039b91906136e1565b3480156103d257600080fd5b506103e66103e1366004613591565b610b0c565b005b3480156103f457600080fd5b5061040861040336600461346a565b610b66565b604051901515815260200161039b565b34801561042457600080fd5b50610408610433366004613360565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561045d57600080fd5b50601454610391565b34801561047257600080fd5b50602854610486906001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b3480156104aa57600080fd5b50601254610391565b3480156104bf57600080fd5b506104086104ce3660046133d0565b610b7d565b3480156104df57600080fd5b506103e66104ee36600461357f565b610be6565b3480156104ff57600080fd5b5060295461040890600160b01b900460ff1681565b34801561052057600080fd5b506103e661052f366004613562565b610d16565b34801561054057600080fd5b5061039161054f366004613591565b610da1565b34801561056057600080fd5b506103e661056f366004613360565b610e25565b34801561058057600080fd5b50601154600160a01b900460ff1660405160ff909116815260200161039b565b3480156105ac57600080fd5b506103e66105bb366004613360565b610e73565b3480156105cc57600080fd5b506104086105db36600461346a565b61105e565b3480156105ec57600080fd5b506103e66105fb366004613591565b611094565b34801561060c57600080fd5b506103e661061b36600461352a565b61117e565b34801561062c57600080fd5b50610391601b5481565b34801561064257600080fd5b506103916106513660046135c1565b6111c6565b34801561066257600080fd5b50602954610486906001600160a01b031681565b34801561068257600080fd5b506103e661069136600461352a565b611253565b3480156106a257600080fd5b506103e66106b1366004613360565b61129b565b3480156106c257600080fd5b506103e66106d13660046134d5565b611385565b3480156106e257600080fd5b5061039160195481565b3480156106f857600080fd5b506103e6610707366004613633565b611487565b34801561071857600080fd5b50610391610727366004613360565b6114c2565b34801561073857600080fd5b506103e6611521565b34801561074d57600080fd5b506103e661075c366004613495565b611595565b34801561076d57600080fd5b506103e661077c366004613360565b611642565b34801561078d57600080fd5b50610391601f5481565b3480156107a357600080fd5b5061039160175481565b3480156107b957600080fd5b506103e66107c8366004613495565b6116a1565b3480156107d957600080fd5b50610391601c5481565b3480156107ef57600080fd5b506104086107fe366004613360565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561082857600080fd5b506000546001600160a01b0316610486565b34801561084657600080fd5b506103e66108553660046135e5565b611749565b34801561086657600080fd5b506103b9611793565b34801561087b57600080fd5b506103e661088a366004613410565b6117a2565b34801561089b57600080fd5b506103e66108aa366004613664565b611944565b3480156108bb57600080fd5b506104086108ca36600461346a565b6119bb565b3480156108db57600080fd5b506104086108ea36600461346a565b611a0a565b3480156108fb57600080fd5b50610391600b5481565b34801561091157600080fd5b50610391601a5481565b34801561092757600080fd5b50610391601d5481565b34801561093d57600080fd5b50610391601e5481565b34801561095357600080fd5b506103e6610962366004613398565b611a17565b34801561097357600080fd5b5061039160185481565b34801561098957600080fd5b50610391610998366004613398565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156109cf57600080fd5b506103e66109de366004613360565b611a6f565b3480156109ef57600080fd5b506103e66109fe366004613360565b611aba565b348015610a0f57600080fd5b506103e6610a1e366004613360565b611e40565b348015610a2f57600080fd5b506103e6610a3e366004613360565b611e8e565b348015610a4f57600080fd5b50610391600a5481565b348015610a6557600080fd5b5060295461040890600160a81b900460ff1681565b606060158054610a8990613922565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab590613922565b8015610b025780601f10610ad757610100808354040283529160200191610b02565b820191906000526020600020905b815481529060010190602001808311610ae557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b3f5760405162461bcd60e51b8152600401610b3690613734565b60405180910390fd5b610b6081610b5a6103e8601254611f7890919063ffffffff16565b90611fba565b60175550565b6000610b73338484612098565b5060015b92915050565b6000610b8a8484846121bc565b610bdc8433610bd7856040518060600160405280602881526020016139b5602891396001600160a01b038a16600090815260086020908152604080832033845290915290205491906126df565b612098565b5060019392505050565b6000546001600160a01b03163314610c105760405162461bcd60e51b8152600401610b3690613734565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c5257600080fd5b505afa158015610c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8a91906135a9565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b158015610cd857600080fd5b505af1158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d109190613546565b50505050565b6000546001600160a01b03163314610d405760405162461bcd60e51b8152600401610b3690613734565b6029805460ff60a81b1916600160a81b84151502179055610d603061129b565b602954610d75906001600160a01b031661129b565b602954600160a81b900460ff168015610d8e5750600b54155b15610d9d5743600b55600a8190555b5050565b6000601354821115610e085760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b36565b6000610e12612719565b9050610e1e8382611f78565b9392505050565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b0381166000908152600e602052604090205460ff16610f055760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b36565b60005b601054811015610d9d57816001600160a01b031660108281548110610f3d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561104c5760108054610f689060019061390b565b81548110610f8657634e487b7160e01b600052603260045260246000fd5b600091825260209091200154601080546001600160a01b039092169183908110610fc057634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600e90925220805460ff19169055601080548061102657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110568161395d565b915050610f08565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610b73918590610bd79086612039565b336000818152600e602052604090205460ff16156111095760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b36565b60006111148361273c565b505050506001600160a01b0384166000908152600660205260409020549192506111409190508261278b565b6001600160a01b038316600090815260066020526040902055601354611166908261278b565b6013556014546111769084612039565b601455505050565b6000546001600160a01b031633146111a85760405162461bcd60e51b8152600401610b3690613734565b60298054911515600160b81b0260ff60b81b19909216919091179055565b600060125483111561121a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b36565b8161123957600061122a8461273c565b50939550610b77945050505050565b60006112448461273c565b50929550610b77945050505050565b6000546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610b3690613734565b60298054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146112c55760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b0381166000908152600660205260409020541561131f576001600160a01b03811660009081526006602052604090205461130590610da1565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600e60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b6000546001600160a01b031633146113af5760405162461bcd60e51b8152600401610b3690613734565b60005b82811015610d1057600f60008585848181106113de57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113f39190613360565b6001600160a01b0316815260208101919091526040016000205460ff1661147757816009600086868581811061143957634e487b7160e01b600052603260045260246000fd5b905060200201602081019061144e9190613360565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6114808161395d565b90506113b2565b6000546001600160a01b031633146114b15760405162461bcd60e51b8152600401610b3690613734565b601c92909255601d55601e55601f55565b6001600160a01b0381166000908152600e602052604081205460ff16156114ff57506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610b7790610da1565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610b3690613734565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146115bf5760405162461bcd60e51b8152600401610b3690613734565b60005b8181101561163d576001600c60008585858181106115f057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116059190613360565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116368161395d565b90506115c2565b505050565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610b3690613734565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610d9d573d6000803e3d6000fd5b6000546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610b3690613734565b60005b8181101561163d576001600f60008585858181106116fc57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117119190613360565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117428161395d565b90506116ce565b6000546001600160a01b031633146117735760405162461bcd60e51b8152600401610b3690613734565b808260125461178291906138ec565b61178c91906137de565b6027555050565b606060168054610a8990613922565b6000546001600160a01b031633146117cc5760405162461bcd60e51b8152600401610b3690613734565b6107d182106118345760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d323030302061646472657373657360901b6064820152608401610b36565b601154600090839061185190600160a01b900460ff16600a613841565b61185b90846138ec565b61186591906138ec565b905080611871866114c2565b10156118bf5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b36565b60005b8381101561193c5761192a868686848181106118ee57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119039190613360565b60115461191b90600160a01b900460ff16600a613841565b61192590876138ec565b6121bc565b806119348161395d565b9150506118c2565b505050505050565b6000546001600160a01b0316331461196e5760405162461bcd60e51b8152600401610b3690613734565b6018849055601a8390556019829055601b859055602485905560218490556023829055602283905560208190556119b1816119ab84818888612039565b90612039565b6025555050505050565b6000610b733384610bd7856040518060600160405280602581526020016139dd602591393360009081526008602090815260408083206001600160a01b038d16845290915290205491906126df565b6000610b733384846121bc565b6000546001600160a01b03163314611a415760405162461bcd60e51b8152600401610b3690613734565b600380546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055565b6000546001600160a01b03163314611a995760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611ae45760405162461bcd60e51b8152600401610b3690613734565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2457600080fd5b505afa158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c919061337c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba457600080fd5b505afa158015611bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdc919061337c565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611c2257600080fd5b505afa158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a919061337c565b90506001600160a01b038116611e0057816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ca357600080fd5b505afa158015611cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdb919061337c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2357600080fd5b505afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b919061337c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611da357600080fd5b505af1158015611db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddb919061337c565b602980546001600160a01b0319166001600160a01b0392909216919091179055611e1c565b602980546001600160a01b0319166001600160a01b0383161790555b50602880546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611e6a5760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314611eb85760405162461bcd60e51b8152600401610b3690613734565b6001600160a01b038116611f1d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b36565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e1e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127cd565b600082611fc957506000610b77565b6000611fd583856138ec565b905082611fe285836137de565b14610e1e5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b36565b60008061204683856137c6565b905083811015610e1e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b36565b6001600160a01b0383166120fa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b36565b6001600160a01b03821661215b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b36565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b36565b6001600160a01b0382166122825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b36565b600081116122e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b36565b6001600160a01b03831660009081526009602052604090205460ff161561234d5760405162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f20706f7765722068657265210000000000000000006044820152606401610b36565b6000546001600160a01b0384811691161480159061237957506000546001600160a01b03838116911614155b156123d757602954600160a81b900460ff166123d75760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e00000000000000006044820152606401610b36565b6029546000906001600160a01b038581169116148061240357506029546001600160a01b038481169116145b801561244b57506001600160a01b0384166000908152600c602052604090205460ff168061244957506001600160a01b0383166000908152600c602052604090205460ff165b155b15612454575060015b6000600b5411801561249857506001600160a01b0383166000908152600d602052604090205460ff1615801561249857506000546001600160a01b03858116911614155b80156124b3575043600a54600b546124b091906137c6565b11155b15612527576017546124c4846114c2565b6124ce90846137c6565b11156125275760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b36565b602554602655601b54602455602954600160a81b900460ff16801561255957506029546001600160a01b038481169116145b156125855761257b601e546119ab601d54601c5461203990919063ffffffff16565b602655601f546024555b6000600b541180156125a5575043600a54600b546125a391906137c6565b115b156125ce576001600160a01b0383166000908152600960205260409020805460ff191660011790555b6000600b541180156125ee57506000546001600160a01b03858116911614155b80156126095750600a54600b5461260591906137c6565b4310155b801561261e5750602954600160b81b900460ff165b1561262a576103de6026555b602954600160b01b900460ff161561266d57602954600160a81b900460ff16801561266257506029546001600160a01b038581169116145b1561266d5760006026555b602954600160a01b900460ff161580156126905750602954600160a81b900460ff165b80156126a957506029546001600160a01b038481169116145b156126d35760006126b9306114c2565b905060275481106126d157506027546126d1816127fb565b505b610d108484848461295a565b600081848411156127035760405162461bcd60e51b8152600401610b3691906136e1565b506000612710848661390b565b95945050505050565b6000806000612726612a86565b90925090506127358282611f78565b9250505090565b60008060008060008060008060006127538a612c40565b92509250925060008060006127718d868661276c612719565b612c82565b919f909e50909c50959a5093985091965092945050505050565b6000610e1e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126df565b600081836127ee5760405162461bcd60e51b8152600401610b3691906136e1565b50600061271084866137de565b6029805460ff60a01b1916600160a01b1790556025546021546000916128319160029161282b9182908790611fba565b90611f78565b9050600061283f838361278b565b905061284a81612cd2565b602154479060009061286a90612861906002611f78565b6025549061278b565b9050600061288c600261282b8461282b60215488611fba90919063ffffffff16565b905060006128a98361282b60235487611fba90919063ffffffff16565b905060006128c68461282b60225488611fba90919063ffffffff16565b905060006128e38561282b60205489611fba90919063ffffffff16565b9050478015612931576003546129039084906001600160a01b0316612e90565b60045461291a9083906001600160a01b0316612e90565b6005546129319085906001600160a01b0316612e90565b8815612941576129418986612ec6565b50506029805460ff60a01b191690555050505050505050565b6024546026548261297057600060248190556026555b6001600160a01b0386166000908152600e602052604090205460ff1680156129b157506001600160a01b0385166000908152600e602052604090205460ff16155b156129c6576129c1868686612faa565b612a72565b6001600160a01b0386166000908152600e602052604090205460ff16158015612a0757506001600160a01b0385166000908152600e602052604090205460ff165b15612a17576129c18686866130d0565b6001600160a01b0386166000908152600e602052604090205460ff168015612a5757506001600160a01b0385166000908152600e602052604090205460ff165b15612a67576129c1868686613179565b612a728686866131ec565b8261193c5760249190915560265550505050565b6013546012546000918291825b601054811015612c1057826006600060108481548110612ac357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612b3c5750816007600060108481548110612b1557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612b5257601354601254945094505050509091565b612ba66006600060108481548110612b7a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061278b565b9250612bfc6007600060108481548110612bd057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061278b565b915080612c088161395d565b915050612a93565b50601254601354612c2091611f78565b821015612c37576013546012549350935050509091565b90939092509050565b600080600080612c4f85613230565b90506000612c5c8661324d565b90506000612c7482612c6e898661278b565b9061278b565b979296509094509092505050565b6000808080612c918886611fba565b90506000612c9f8887611fba565b90506000612cad8888611fba565b90506000612cbf82612c6e868661278b565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d1557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d6957600080fd5b505afa158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da1919061337c565b81600181518110612dc257634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602854612de89130911684612098565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e2190859060009086903090429060040161378a565b600060405180830381600087803b158015612e3b57600080fd5b505af1158015612e4f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612e84929190613769565b60405180910390a15050565b6040516001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561163d573d6000803e3d6000fd5b602854612ede9030906001600160a01b031684612098565b6028546001600160a01b031663f305d719823085600080612f076000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fa39190613606565b5050505050565b600080600080600080612fbc8761273c565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150612fee908861278b565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461301d908761278b565b6001600160a01b03808b1660009081526006602052604080822093909355908a168152205461304c9086612039565b6001600160a01b03891660009081526006602052604090205561306e8161326a565b61307884836132f2565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516130bd91815260200190565b60405180910390a3505050505050505050565b6000806000806000806130e28761273c565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613114908761278b565b6001600160a01b03808b16600090815260066020908152604080832094909455918b1681526007909152205461314a9084612039565b6001600160a01b03891660009081526007602090815260408083209390935560069052205461304c9086612039565b60008060008060008061318b8761273c565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506131bd908861278b565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613114908761278b565b6000806000806000806131fe8761273c565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061301d908761278b565b6000610b776103e861282b60245485611fba90919063ffffffff16565b6000610b776103e861282b60265485611fba90919063ffffffff16565b6000613274612719565b905060006132828383611fba565b3060009081526006602052604090205490915061329f9082612039565b30600090815260066020908152604080832093909355600e9052205460ff161561163d57306000908152600760205260409020546132dd9084612039565b30600090815260076020526040902055505050565b6013546132ff908361278b565b60135560145461330f9082612039565b6014555050565b60008083601f840112613327578182fd5b50813567ffffffffffffffff81111561333e578182fd5b6020830191508360208260051b850101111561335957600080fd5b9250929050565b600060208284031215613371578081fd5b8135610e1e8161398e565b60006020828403121561338d578081fd5b8151610e1e8161398e565b600080604083850312156133aa578081fd5b82356133b58161398e565b915060208301356133c58161398e565b809150509250929050565b6000806000606084860312156133e4578081fd5b83356133ef8161398e565b925060208401356133ff8161398e565b929592945050506040919091013590565b60008060008060608587031215613425578081fd5b84356134308161398e565b9350602085013567ffffffffffffffff81111561344b578182fd5b61345787828801613316565b9598909750949560400135949350505050565b6000806040838503121561347c578182fd5b82356134878161398e565b946020939093013593505050565b600080602083850312156134a7578182fd5b823567ffffffffffffffff8111156134bd578283fd5b6134c985828601613316565b90969095509350505050565b6000806000604084860312156134e9578283fd5b833567ffffffffffffffff8111156134ff578384fd5b61350b86828701613316565b909450925050602084013561351f816139a6565b809150509250925092565b60006020828403121561353b578081fd5b8135610e1e816139a6565b600060208284031215613557578081fd5b8151610e1e816139a6565b60008060408385031215613574578182fd5b8235613487816139a6565b600080604083850312156133aa578182fd5b6000602082840312156135a2578081fd5b5035919050565b6000602082840312156135ba578081fd5b5051919050565b600080604083850312156135d3578182fd5b8235915060208301356133c5816139a6565b600080604083850312156135f7578182fd5b50508035926020909101359150565b60008060006060848603121561361a578081fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613648578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561367b578283fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000815180845260208085019450808401835b838110156136d65781516001600160a01b0316875295820195908201906001016136b1565b509495945050505050565b6000602080835283518082850152825b8181101561370d578581018301518582016040015282016136f1565b8181111561371e5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000613782604083018461369e565b949350505050565b85815284602082015260a0604082015260006137a960a083018661369e565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156137d9576137d9613978565b500190565b6000826137f957634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561383957816000190482111561381f5761381f613978565b8085161561382c57918102915b93841c9390800290613803565b509250929050565b6000610e1e60ff84168360008261385a57506001610b77565b8161386757506000610b77565b816001811461387d5760028114613887576138a3565b6001915050610b77565b60ff84111561389857613898613978565b50506001821b610b77565b5060208310610133831016604e8410600b84101617156138c6575081810a610b77565b6138d083836137fe565b80600019048211156138e4576138e4613978565b029392505050565b600081600019048311821515161561390657613906613978565b500290565b60008282101561391d5761391d613978565b500390565b600181811c9082168061393657607f821691505b6020821081141561395757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561397157613971613978565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146139a357600080fd5b50565b80151581146139a357600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c30a33deb759b2243c9768106722fac37774a9761e5821824ed4f2d42e0b56e264736f6c63430008040033
Deployed Bytecode Sourcemap
14439:23894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16687:56;;;;;;;;;;;;;;;;;;;17591:25:1;;;17579:2;17564:18;16687:56:0;;;;;;;;19191:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36387:175::-;;;;;;;;;;-1:-1:-1;36387:175:0;;;;;:::i;:::-;;:::i;:::-;;20103:161;;;;;;;;;;-1:-1:-1;20103:161:0;;;;;:::i;:::-;;:::i;:::-;;;9602:14:1;;9595:22;9577:41;;9565:2;9550:18;20103:161:0;9532:92:1;35458:106:0;;;;;;;;;;-1:-1:-1;35458:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;35538:18:0;35514:4;35538:18;;;:9;:18;;;;;;;;;35458:106;21224:87;;;;;;;;;;-1:-1:-1;21293:10:0;;21224:87;;16763:41;;;;;;;;;;-1:-1:-1;16763:41:0;;;;-1:-1:-1;;;;;16763:41:0;;;;;;-1:-1:-1;;;;;8193:32:1;;;8175:51;;8163:2;8148:18;16763:41:0;8130:102:1;19468:95:0;;;;;;;;;;-1:-1:-1;19548:7:0;;19468:95;;20272:313;;;;;;;;;;-1:-1:-1;20272:313:0;;;;;:::i;:::-;;:::i;36202:177::-;;;;;;;;;;-1:-1:-1;36202:177:0;;;;;:::i;:::-;;:::i;16914:34::-;;;;;;;;;;-1:-1:-1;16914:34:0;;;;-1:-1:-1;;;16914:34:0;;;;;;18089:337;;;;;;;;;;-1:-1:-1;18089:337:0;;;;;:::i;:::-;;:::i;22156:253::-;;;;;;;;;;-1:-1:-1;22156:253:0;;;;;:::i;:::-;;:::i;36570:113::-;;;;;;;;;;-1:-1:-1;36570:113:0;;;;;:::i;:::-;;:::i;19377:83::-;;;;;;;;;;-1:-1:-1;19443:9:0;;-1:-1:-1;;;19443:9:0;;;;19377:83;;18723:4:1;18711:17;;;18693:36;;18681:2;18666:18;19377:83:0;18648:87:1;22688:479:0;;;;;;;;;;-1:-1:-1;22688:479:0;;;;;:::i;:::-;;:::i;20593:218::-;;;;;;;;;;-1:-1:-1;20593:218:0;;;;;:::i;:::-;;:::i;21323:377::-;;;;;;;;;;-1:-1:-1;21323:377:0;;;;;:::i;:::-;;:::i;18550:96::-;;;;;;;;;;-1:-1:-1;18550:96:0;;;;;:::i;:::-;;:::i;16038:36::-;;;;;;;;;;;;;;;;21712:436;;;;;;;;;;-1:-1:-1;21712:436:0;;;;;:::i;:::-;;:::i;16811:28::-;;;;;;;;;;-1:-1:-1;16811:28:0;;;;-1:-1:-1;;;;;16811:28:0;;;18440:102;;;;;;;;;;-1:-1:-1;18440:102:0;;;;;:::i;:::-;;:::i;22417:263::-;;;;;;;;;;-1:-1:-1;22417:263:0;;;;;:::i;:::-;;:::i;35576:267::-;;;;;;;;;;-1:-1:-1;35576:267:0;;;;;:::i;:::-;;:::i;15941:30::-;;;;;;;;;;;;;;;;37990:299;;;;;;;;;;-1:-1:-1;37990:299:0;;;;;:::i;:::-;;:::i;19571:198::-;;;;;;;;;;-1:-1:-1;19571:198:0;;;;;:::i;:::-;;:::i;6070:148::-;;;;;;;;;;;;;:::i;34782:198::-;;;;;;;;;;-1:-1:-1;34782:198:0;;;;;:::i;:::-;;:::i;36059:135::-;;;;;;;;;;-1:-1:-1;36059:135:0;;;;;:::i;:::-;;:::i;16224:37::-;;;;;;;;;;;;;;;;15828:56;;;;;;;;;;;;;;;;35855:188;;;;;;;;;;-1:-1:-1;35855:188:0;;;;;:::i;:::-;;:::i;16083:36::-;;;;;;;;;;;;;;;;21096:120;;;;;;;;;;-1:-1:-1;21096:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21188:20:0;21164:4;21188:20;;;:11;:20;;;;;;;;;21096:120;5845:79;;;;;;;;;;-1:-1:-1;5883:7:0;5910:6;-1:-1:-1;;;;;5910:6:0;5845:79;;36691:178;;;;;;;;;;-1:-1:-1;36691:178:0;;;;;:::i;:::-;;:::i;19282:87::-;;;;;;;;;;;;;:::i;36877:500::-;;;;;;;;;;-1:-1:-1;36877:500:0;;;;;:::i;:::-;;:::i;37386:596::-;;;;;;;;;;-1:-1:-1;37386:596:0;;;;;:::i;:::-;;:::i;20819:269::-;;;;;;;;;;-1:-1:-1;20819:269:0;;;;;:::i;:::-;;:::i;19777:167::-;;;;;;;;;;-1:-1:-1;19777:167:0;;;;;:::i;:::-;;:::i;15130:29::-;;;;;;;;;;;;;;;;15988:36;;;;;;;;;;;;;;;;16126:38;;;;;;;;;;;;;;;;16178:31;;;;;;;;;;;;;;;;35120:190;;;;;;;;;;-1:-1:-1;35120:190:0;;;;;:::i;:::-;;:::i;15893:36::-;;;;;;;;;;;;;;;;19952:143;;;;;;;;;;-1:-1:-1;19952:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20060:18:0;;;20033:7;20060:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19952:143;34998:110;;;;;;;;;;-1:-1:-1;34998:110:0;;;;;:::i;:::-;;:::i;18660:523::-;;;;;;;;;;-1:-1:-1;18660:523:0;;;;;:::i;:::-;;:::i;34662:112::-;;;;;;;;;;-1:-1:-1;34662:112:0;;;;;:::i;:::-;;:::i;6226:244::-;;;;;;;;;;-1:-1:-1;6226:244:0;;;;;:::i;:::-;;:::i;15094:29::-;;;;;;;;;;;;;;;;16876:31;;;;;;;;;;-1:-1:-1;16876:31:0;;;;-1:-1:-1;;;16876:31:0;;;;;;19191:83;19228:13;19261:5;19254:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19191:83;:::o;36387:175::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;;;;;;;;;36508:46:::1;36530:23;36508:17;36520:4;36508:7;;:11;;:17;;;;:::i;:::-;:21:::0;::::1;:46::i;:::-;36490:15;:64:::0;-1:-1:-1;36387:175:0:o;20103:161::-;20178:4;20195:39;229:10;20218:7;20227:6;20195:8;:39::i;:::-;-1:-1:-1;20252:4:0;20103:161;;;;;:::o;20272:313::-;20370:4;20387:36;20397:6;20405:9;20416:6;20387:9;:36::i;:::-;20434:121;20443:6;229:10;20465:89;20503:6;20465:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20465:19:0;;;;;;:11;:19;;;;;;;;229:10;20465:33;;;;;;;;;;:37;:89::i;:::-;20434:8;:121::i;:::-;-1:-1:-1;20573:4:0;20272:313;;;;;:::o;36202:177::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;36303:30:::1;::::0;-1:-1:-1;;;36303:30:0;;36327:4:::1;36303:30;::::0;::::1;8175:51:1::0;36285:15:0::1;::::0;-1:-1:-1;;;;;36303:15:0;::::1;::::0;::::1;::::0;8148:18:1;;36303:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36344:27;::::0;-1:-1:-1;;;36344:27:0;;-1:-1:-1;;;;;8738:32:1;;;36344:27:0::1;::::0;::::1;8720:51:1::0;8787:18;;;8780:34;;;36285:48:0;;-1:-1:-1;36344:14:0;;::::1;::::0;::::1;::::0;8693:18:1;;36344:27:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6049:1;36202:177:::0;;:::o;18089:337::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;18176:11:::1;:21:::0;;-1:-1:-1;;;;18176:21:0::1;-1:-1:-1::0;;;18176:21:0;::::1;;;;::::0;;18208:32:::1;18234:4;18208:17;:32::i;:::-;18269:13;::::0;18251:32:::1;::::0;-1:-1:-1;;;;;18269:13:0::1;18251:17;:32::i;:::-;18297:11;::::0;-1:-1:-1;;;18297:11:0;::::1;;;:30:::0;::::1;;;-1:-1:-1::0;18312:10:0::1;::::0;:15;18297:30:::1;18294:125;;;18356:12;18343:10;:25:::0;18383:10:::1;:24:::0;;;18294:125:::1;18089:337:::0;;:::o;22156:253::-;22222:7;22261;;22250;:18;;22242:73;;;;-1:-1:-1;;;22242:73:0;;11078:2:1;22242:73:0;;;11060:21:1;11117:2;11097:18;;;11090:30;11156:34;11136:18;;;11129:62;-1:-1:-1;;;11207:18:1;;;11200:40;11257:19;;22242:73:0;11050:232:1;22242:73:0;22326:19;22349:10;:8;:10::i;:::-;22326:33;-1:-1:-1;22377:24:0;:7;22326:33;22377:11;:24::i;:::-;22370:31;22156:253;-1:-1:-1;;;22156:253:0:o;36570:113::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36643:25:0::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;36643:32:0::1;36671:4;36643:32;::::0;;36570:113::o;22688:479::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22770:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22762:60;;;::::0;-1:-1:-1;;;22762:60:0;;12655:2:1;22762:60:0::1;::::0;::::1;12637:21:1::0;12694:2;12674:18;;;12667:30;12733:29;12713:18;;;12706:57;12780:18;;22762:60:0::1;12627:177:1::0;22762:60:0::1;22838:9;22833:327;22857:9;:16:::0;22853:20;::::1;22833:327;;;22915:7;-1:-1:-1::0;;;;;22899:23:0::1;:9;22909:1;22899:12;;;;;;-1:-1:-1::0;;;22899:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22899:12:0::1;:23;22895:254;;;22958:9;22968:16:::0;;:20:::1;::::0;22987:1:::1;::::0;22968:20:::1;:::i;:::-;22958:31;;;;;;-1:-1:-1::0;;;22958:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22943:9:::1;:12:::0;;-1:-1:-1;;;;;22958:31:0;;::::1;::::0;22953:1;;22943:12;::::1;;;-1:-1:-1::0;;;22943:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22943:46:0::1;-1:-1:-1::0;;;;;22943:46:0;;::::1;;::::0;;23008:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23047:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23047:28:0::1;::::0;;23094:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;23094:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23094:15:0;;;;;-1:-1:-1;;;;;;23094:15:0::1;::::0;;;;;18089:337;;:::o;22895:254::-:1;22875:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22833:327;;20593:218:::0;229:10;20681:4;20730:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20730:34:0;;;;;;;;;;20681:4;;20698:83;;20721:7;;20730:50;;20769:10;20730:38;:50::i;21323:377::-;229:10;21375:14;21424:19;;;:11;:19;;;;;;;;21423:20;21415:77;;;;-1:-1:-1;;;21415:77:0;;16882:2:1;21415:77:0;;;16864:21:1;16921:2;16901:18;;;16894:30;16960:34;16940:18;;;16933:62;-1:-1:-1;;;17011:18:1;;;17004:42;17063:19;;21415:77:0;16854:234:1;21415:77:0;21504:15;21528:19;21539:7;21528:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21576:15:0;;;;;;:7;:15;;;;;;21503:44;;-1:-1:-1;21576:28:0;;:15;-1:-1:-1;21503:44:0;21576:19;:28::i;:::-;-1:-1:-1;;;;;21558:15:0;;;;;;:7;:15;;;;;:46;21625:7;;:20;;21637:7;21625:11;:20::i;:::-;21615:7;:30;21669:10;;:23;;21684:7;21669:14;:23::i;:::-;21656:10;:36;-1:-1:-1;;;21323:377:0:o;18550:96::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;18619:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;18619:19:0::1;-1:-1:-1::0;;;;18619:19:0;;::::1;::::0;;;::::1;::::0;;18550:96::o;21712:436::-;21802:7;21841;;21830;:18;;21822:62;;;;-1:-1:-1;;;21822:62:0;;13367:2:1;21822:62:0;;;13349:21:1;13406:2;13386:18;;;13379:30;13445:33;13425:18;;;13418:61;13496:18;;21822:62:0;13339:181:1;21822:62:0;21900:17;21895:246;;21935:15;21959:19;21970:7;21959:10;:19::i;:::-;-1:-1:-1;21934:44:0;;-1:-1:-1;21993:14:0;;-1:-1:-1;;;;;21993:14:0;21895:246;22042:23;22073:19;22084:7;22073:10;:19::i;:::-;-1:-1:-1;22040:52:0;;-1:-1:-1;22107:22:0;;-1:-1:-1;;;;;22107:22:0;18440:102;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;18512:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;18512:22:0::1;-1:-1:-1::0;;;;18512:22:0;;::::1;::::0;;;::::1;::::0;;18440:102::o;22417:263::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22496:16:0;::::1;22515:1;22496:16:::0;;;:7:::1;:16;::::0;;;;;:20;22493:108:::1;;-1:-1:-1::0;;;;;22572:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22552:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22533:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22493:108:::1;-1:-1:-1::0;;;;;22611:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22611:27:0::1;22634:4;22611:27:::0;;::::1;::::0;;;22649:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22649:23:0::1;::::0;;::::1;::::0;;22417:263::o;35576:267::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;35676:9:::1;35671:165;35687:20:::0;;::::1;35671:165;;;35733:10;:24;35744:9;;35754:1;35744:12;;;;;-1:-1:-1::0;;;35744:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35733:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35733:24:0;;::::1;;35729:96;;35803:6;35777:9;:23;35787:9;;35797:1;35787:12;;;;;-1:-1:-1::0;;;35787:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35777:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35777:23:0;:32;;-1:-1:-1;;35777:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35729:96:::1;35709:3;::::0;::::1;:::i;:::-;;;35671:165;;37990:299:::0;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;38127:17:::1;:33:::0;;;;38171:17:::1;:33:::0;38215:11:::1;:21:::0;38247:18:::1;:34:::0;37990:299::o;19571:198::-;-1:-1:-1;;;;;19661:20:0;;19637:7;19661:20;;;:11;:20;;;;;;;;19657:49;;;-1:-1:-1;;;;;;19690:16:0;;;;;:7;:16;;;;;;;19571:198::o;19657:49::-;-1:-1:-1;;;;;19744:16:0;;;;;;:7;:16;;;;;;19724:37;;:19;:37::i;6070:148::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;6177:1:::1;6161:6:::0;;6140:40:::1;::::0;-1:-1:-1;;;;;6161:6:0;;::::1;::::0;6140:40:::1;::::0;6177:1;;6140:40:::1;6208:1;6191:19:::0;;-1:-1:-1;;;;;;6191:19:0::1;::::0;;6070:148::o;34782:198::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;34869:9:::1;34864:109;34880:20:::0;;::::1;34864:109;;;34957:4;34922:18;:32;34941:9;;34951:1;34941:12;;;;;-1:-1:-1::0;;;34941:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34922:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34922:32:0;:39;;-1:-1:-1;;34922:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34902:3:::1;::::0;::::1;:::i;:::-;;;34864:109;;;;34782:198:::0;;:::o;36059:135::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;36144:42:::1;::::0;-1:-1:-1;;;;;36144:19:0;::::1;::::0;36164:21:::1;36144:42:::0;::::1;;;::::0;::::1;::::0;;;36164:21;36144:19;:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;35855:188:::0;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;35942:9:::1;35937:99;35953:20:::0;;::::1;35937:99;;;36020:4;35995:10;:24;36006:9;;36016:1;36006:12;;;;;-1:-1:-1::0;;;36006:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35995:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35995:24:0;:29;;-1:-1:-1;;35995:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35975:3:::1;::::0;::::1;:::i;:::-;;;35937:99;;36691:178:::0;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;36845:16:::1;36825;36815:7;;:26;;;;:::i;:::-;36814:47;;;;:::i;:::-;36798:13;:63:::0;-1:-1:-1;;36691:178:0:o;19282:87::-;19321:13;19354:7;19347:14;;;;;:::i;36877:500::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;37013:4:::1;36994:23:::0;::::1;36986:81;;;::::0;-1:-1:-1;;;36986:81:0;;13727:2:1;36986:81:0::1;::::0;::::1;13709:21:1::0;13766:2;13746:18;;;13739:30;13805:34;13785:18;;;13778:62;-1:-1:-1;;;13856:18:1;;;13849:44;13910:19;;36986:81:0::1;13699:236:1::0;36986:81:0::1;37130:9;::::0;37103:12:::1;::::0;37142:9;;37126:13:::1;::::0;-1:-1:-1;;;37130:9:0;::::1;;;37126:2;:13;:::i;:::-;37118:21;::::0;:6;:21:::1;:::i;:::-;:40;;;;:::i;:::-;37103:55;;37198:4;37179:15;37189:4;37179:9;:15::i;:::-;:23;;37171:63;;;::::0;-1:-1:-1;;;37171:63:0;;13011:2:1;37171:63:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;13089:29;13069:18;;;13062:57;13136:18;;37171:63:0::1;12983:177:1::0;37171:63:0::1;37251:6;37247:123;37261:20:::0;;::::1;37247:123;;;37302:52;37312:4;37317:9;;37327:1;37317:12;;;;;-1:-1:-1::0;;;37317:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37343:9;::::0;37339:13:::1;::::0;-1:-1:-1;;;37343:9:0;::::1;;;37339:2;:13;:::i;:::-;37331:21;::::0;:6;:21:::1;:::i;:::-;37302:9;:52::i;:::-;37283:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37247:123;;;;6049:1;36877:500:::0;;;;:::o;37386:596::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;37554:16:::1;:32:::0;;;37597:16:::1;:32:::0;;;37640:10:::1;:20:::0;;;37671:17:::1;:33:::0;;;37717:13:::1;:29:::0;;;37757:12:::1;:28:::0;;;37796:6:::1;:16:::0;;;37823:12:::1;:28:::0;;;37862:12:::1;:26:::0;;;37912:60:::1;37875:13:::0;37912:42:::1;37653:7:::0;37912:42;37573:13;37616;37912:16:::1;:30::i;:::-;:34:::0;::::1;:42::i;:60::-;37901:8;:71:::0;-1:-1:-1;;;;;37386:596:0:o;20819:269::-;20912:4;20929:129;229:10;20952:7;20961:96;21000:15;20961:96;;;;;;;;;;;;;;;;;229:10;20961:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20961:34:0;;;;;;;;;;;;:38;:96::i;19777:167::-;19855:4;19872:42;229:10;19896:9;19907:6;19872:9;:42::i;35120:190::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;35217:15:::1;:43:::0;;-1:-1:-1;;;;;35217:43:0;;::::1;-1:-1:-1::0;;;;;;35217:43:0;;::::1;;::::0;;;35271:9:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;35120:190::o;34998:110::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35065:27:0::1;35095:5;35065:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35065:35:0::1;::::0;;34998:110::o;18660:523::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;18733:29:::1;18784:9;18733:61;;18805:16;18842:10;-1:-1:-1::0;;;;;18842:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18824:47:0::1;;18880:4;18887:10;-1:-1:-1::0;;;;;18887:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18824:81;::::0;-1:-1:-1;;;;;;18824:81:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;18824:81:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;18824:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18805:100:::0;-1:-1:-1;;;;;;18920:22:0;::::1;18916:221;;18993:10;-1:-1:-1::0;;;;;18993:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18975:50:0::1;;19034:4;19041:10;-1:-1:-1::0;;;;;19041:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18975:84;::::0;-1:-1:-1;;;;;;18975:84:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:15:1;;;18975:84:0::1;::::0;::::1;8449:34:1::0;8519:15;;8499:18;;;8492:43;8384:18;;18975:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18959:13;:100:::0;;-1:-1:-1;;;;;;18959:100:0::1;-1:-1:-1::0;;;;;18959:100:0;;;::::1;::::0;;;::::1;::::0;;18916:221:::1;;;19101:13;:24:::0;;-1:-1:-1;;;;;;19101:24:0::1;-1:-1:-1::0;;;;;19101:24:0;::::1;;::::0;;18916:221:::1;-1:-1:-1::0;19147:15:0::1;:28:::0;;-1:-1:-1;;;;;;19147:28:0::1;-1:-1:-1::0;;;;;19147:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;18660:523:0:o;34662:112::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34732:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34732:34:0::1;34762:4;34732:34;::::0;;34662:112::o;6226:244::-;5979:6;;-1:-1:-1;;;;;5979:6:0;229:10;5979:22;5971:67;;;;-1:-1:-1;;;5971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6315:22:0;::::1;6307:73;;;::::0;-1:-1:-1;;;6307:73:0;;11489:2:1;6307:73:0::1;::::0;::::1;11471:21:1::0;11528:2;11508:18;;;11501:30;11567:34;11547:18;;;11540:62;-1:-1:-1;;;11618:18:1;;;11611:36;11664:19;;6307:73:0::1;11461:228:1::0;6307:73:0::1;6417:6;::::0;;6396:38:::1;::::0;-1:-1:-1;;;;;6396:38:0;;::::1;::::0;6417:6;::::1;::::0;6396:38:::1;::::0;::::1;6445:6;:17:::0;;-1:-1:-1;;;;;;6445:17:0::1;-1:-1:-1::0;;;;;6445:17:0;;;::::1;::::0;;;::::1;::::0;;6226:244::o;2004:132::-;2062:7;2089:39;2093:1;2096;2089:39;;;;;;;;;;;;;;;;;:3;:39::i;1744:250::-;1802:7;1826:6;1822:47;;-1:-1:-1;1856:1:0;1849:8;;1822:47;1881:9;1893:5;1897:1;1893;:5;:::i;:::-;1881:17;-1:-1:-1;1926:1:0;1917:5;1921:1;1881:17;1917:5;:::i;:::-;:10;1909:56;;;;-1:-1:-1;;;1909:56:0;;14142:2:1;1909:56:0;;;14124:21:1;14181:2;14161:18;;;14154:30;14220:34;14200:18;;;14193:62;-1:-1:-1;;;14271:18:1;;;14264:31;14312:19;;1909:56:0;14114:223:1;1211:181:0;1269:7;;1301:5;1305:1;1301;:5;:::i;:::-;1289:17;;1330:1;1325;:6;;1317:46;;;;-1:-1:-1;;;1317:46:0;;12299:2:1;1317:46:0;;;12281:21:1;12338:2;12318:18;;;12311:30;12377:29;12357:18;;;12350:57;12424:18;;1317:46:0;12271:177:1;23175:337:0;-1:-1:-1;;;;;23268:19:0;;23260:68;;;;-1:-1:-1;;;23260:68:0;;16124:2:1;23260:68:0;;;16106:21:1;16163:2;16143:18;;;16136:30;16202:34;16182:18;;;16175:62;-1:-1:-1;;;16253:18:1;;;16246:34;16297:19;;23260:68:0;16096:226:1;23260:68:0;-1:-1:-1;;;;;23347:21:0;;23339:68;;;;-1:-1:-1;;;23339:68:0;;11896:2:1;23339:68:0;;;11878:21:1;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:32;12067:19;;23339:68:0;11868:224:1;23339:68:0;-1:-1:-1;;;;;23420:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23472:32;;17591:25:1;;;23472:32:0;;17564:18:1;23472:32:0;;;;;;;23175:337;;;:::o;23520:2324::-;-1:-1:-1;;;;;23642:18:0;;23634:68;;;;-1:-1:-1;;;23634:68:0;;15315:2:1;23634:68:0;;;15297:21:1;15354:2;15334:18;;;15327:30;15393:34;15373:18;;;15366:62;-1:-1:-1;;;15444:18:1;;;15437:35;15489:19;;23634:68:0;15287:227:1;23634:68:0;-1:-1:-1;;;;;23721:16:0;;23713:64;;;;-1:-1:-1;;;23713:64:0;;10674:2:1;23713:64:0;;;10656:21:1;10713:2;10693:18;;;10686:30;10752:34;10732:18;;;10725:62;-1:-1:-1;;;10803:18:1;;;10796:33;10846:19;;23713:64:0;10646:225:1;23713:64:0;23805:1;23796:6;:10;23788:64;;;;-1:-1:-1;;;23788:64:0;;14905:2:1;23788:64:0;;;14887:21:1;14944:2;14924:18;;;14917:30;14983:34;14963:18;;;14956:62;-1:-1:-1;;;15034:18:1;;;15027:39;15083:19;;23788:64:0;14877:231:1;23788:64:0;-1:-1:-1;;;;;23872:15:0;;;;;;:9;:15;;;;;;;;23871:16;23863:52;;;;-1:-1:-1;;;23863:52:0;;17295:2:1;23863:52:0;;;17277:21:1;17334:2;17314:18;;;17307:30;17373:25;17353:18;;;17346:53;17416:18;;23863:52:0;17267:173:1;23863:52:0;5883:7;5910:6;-1:-1:-1;;;;;23930:14:0;;;5910:6;;23930:14;;;;:30;;-1:-1:-1;5883:7:0;5910:6;-1:-1:-1;;;;;23948:12:0;;;5910:6;;23948:12;;23930:30;23926:84;;;23970:11;;-1:-1:-1;;;23970:11:0;;;;23962:48;;;;-1:-1:-1;;;23962:48:0;;16529:2:1;23962:48:0;;;16511:21:1;16568:2;16548:18;;;16541:30;16607:26;16587:18;;;16580:54;16651:18;;23962:48:0;16501:174:1;23962:48:0;24149:13;;24072:12;;-1:-1:-1;;;;;24143:19:0;;;24149:13;;24143:19;;:40;;-1:-1:-1;24170:13:0;;-1:-1:-1;;;;;24166:17:0;;;24170:13;;24166:17;24143:40;24142:99;;;;-1:-1:-1;;;;;;24190:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24218:22:0;;;;;;:18;:22;;;;;;;;24190:50;24188:53;24142:99;24137:148;;;-1:-1:-1;24269:4:0;24137:148;24311:1;24300:10;;:12;:59;;;;-1:-1:-1;;;;;;24318:22:0;;;;;;:18;:22;;;;;;;;24317:23;:41;;;;-1:-1:-1;5883:7:0;5910:6;-1:-1:-1;;;;;24344:14:0;;;5910:6;;24344:14;;24317:41;24300:106;;;;;24393:12;24379:10;;24366;;:23;;;;:::i;:::-;24365:40;24363:43;24300:106;24297:247;;;24457:15;;24442:13;24452:2;24442:9;:13::i;:::-;24434:21;;:6;:21;:::i;:::-;:38;;24426:106;;;;-1:-1:-1;;;24426:106:0;;15721:2:1;24426:106:0;;;15703:21:1;15760:2;15740:18;;;15733:30;15799:34;15779:18;;;15772:62;-1:-1:-1;;;15850:18:1;;;15843:32;15892:19;;24426:106:0;15693:224:1;24426:106:0;24582:8;;24566:15;:24;24615:17;;24601:13;:31;24648:11;;-1:-1:-1;;;24648:11:0;;;;:34;;;;-1:-1:-1;24669:13:0;;-1:-1:-1;;;;;24663:19:0;;;24669:13;;24663:19;24648:34;24645:194;;;24723:57;24768:11;;24723:40;24745:17;;24723;;:21;;:40;;;;:::i;:57::-;24706:15;:74;24809:18;;24795:13;:32;24645:194;24909:1;24898:10;;:12;:56;;;;;24942:12;24928:10;;24915;;:23;;;;:::i;:::-;24914:40;24898:56;24895:109;;;-1:-1:-1;;;;;24974:13:0;;;;;;:9;:13;;;;;:18;;-1:-1:-1;;24974:18:0;24988:4;24974:18;;;24895:109;25116:1;25105:10;;:12;:30;;;;-1:-1:-1;5883:7:0;5910:6;-1:-1:-1;;;;;25121:14:0;;;5910:6;;25121:14;;25105:30;:75;;;;;25169:10;;25156;;:23;;;;:::i;:::-;25139:12;:41;;25105:75;:91;;;;-1:-1:-1;25185:11:0;;-1:-1:-1;;;25185:11:0;;;;25105:91;25102:146;;;25232:3;25216:15;:19;25102:146;25263:14;;-1:-1:-1;;;25263:14:0;;;;25260:150;;;25297:11;;-1:-1:-1;;;25297:11:0;;;;:36;;;;-1:-1:-1;25320:13:0;;-1:-1:-1;;;;;25312:21:0;;;25320:13;;25312:21;25297:36;25294:105;;;25381:1;25365:15;:17;25294:105;25443:6;;-1:-1:-1;;;25443:6:0;;;;25442:7;:22;;;;-1:-1:-1;25453:11:0;;-1:-1:-1;;;25453:11:0;;;;25442:22;:45;;;;-1:-1:-1;25474:13:0;;-1:-1:-1;;;;;25468:19:0;;;25474:13;;25468:19;25442:45;25438:350;;;25512:28;25543:24;25561:4;25543:9;:24::i;:::-;25512:55;;25621:13;;25599:20;:35;25596:169;;-1:-1:-1;25681:13:0;;25717:32;25681:13;25717:10;:32::i;:::-;25438:350;;25798:38;25813:4;25818:2;25821:6;25828:7;25798:14;:38::i;1544:192::-;1630:7;1666:12;1658:6;;;;1650:29;;;;-1:-1:-1;;;1650:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1690:9:0;1702:5;1706:1;1702;:5;:::i;:::-;1690:17;1544:192;-1:-1:-1;;;;;1544:192:0:o;33199:163::-;33240:7;33261:15;33278;33297:19;:17;:19::i;:::-;33260:56;;-1:-1:-1;33260:56:0;-1:-1:-1;33334:20:0;33260:56;;33334:11;:20::i;:::-;33327:27;;;;33199:163;:::o;31997:419::-;32056:7;32065;32074;32083;32092;32101;32122:23;32147:12;32161:18;32183:20;32195:7;32183:11;:20::i;:::-;32121:82;;;;;;32215:15;32232:23;32257:12;32273:50;32285:7;32294:4;32300:10;32312;:8;:10::i;:::-;32273:11;:50::i;:::-;32214:109;;;;-1:-1:-1;32214:109:0;;-1:-1:-1;32374:15:0;;-1:-1:-1;32391:4:0;;-1:-1:-1;32397:10:0;;-1:-1:-1;31997:419:0;;-1:-1:-1;;;;;31997:419:0:o;1400:136::-;1458:7;1485:43;1489:1;1492;1485:43;;;;;;;;;;;;;;;;;:3;:43::i;2144:278::-;2230:7;2265:12;2258:5;2250:28;;;;-1:-1:-1;;;2250:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2289:9:0;2301:5;2305:1;2301;:5;:::i;25852:1372::-;17219:6;:13;;-1:-1:-1;;;;17219:13:0;-1:-1:-1;;;17219:13:0;;;26050:8:::1;::::0;26018:12:::1;::::0;17219:13;;25979:101:::1;::::0;26078:1:::1;::::0;25979:80:::1;::::0;;;:20;;:38:::1;:52::i;:::-;:70:::0;::::1;:80::i;:101::-;25953:127:::0;-1:-1:-1;26093:20:0::1;26116:41;:20:::0;25953:127;26116:24:::1;:41::i;:::-;26093:64;;26178:30;26195:12;26178:16;:30::i;:::-;26310:12;::::0;26241:21:::1;::::0;26221:17:::1;::::0;26297:33:::1;::::0;26310:19:::1;::::0;26327:1:::1;26310:16;:19::i;:::-;26297:8;::::0;;:12:::1;:33::i;:::-;26275:55;;26343:26;26372:93;26463:1;26372:72;26432:11;26372:41;26400:12;;26372:9;:27;;:41;;;;:::i;:93::-;26343:122;;26486:20;26509:38;26535:11;26509:21;26523:6;;26509:9;:13;;:21;;;;:::i;:38::-;26486:61;;26558:26;26587:68;26633:11;26587:27;26601:12;;26587:9;:13;;:27;;;;:::i;:68::-;26558:97;;26667:26;26696:68;26742:11;26696:27;26710:12;;26696:9;:13;;:27;;;;:::i;:68::-;26667:97:::0;-1:-1:-1;26855:21:0::1;26890:22:::0;;26887:216:::1;;26961:15;::::0;26929:48:::1;::::0;26942:18;;-1:-1:-1;;;;;26961:15:0::1;26929:12;:48::i;:::-;27024:15;::::0;26992:48:::1;::::0;27005:18;;-1:-1:-1;;;;;27024:15:0::1;26992:12;:48::i;:::-;27081:9;::::0;27055:36:::1;::::0;27068:12;;-1:-1:-1;;;;;27081:9:0::1;27055:12;:36::i;:::-;27117:19:::0;;27113:104:::1;;27157:48;27170:15;27186:18;27157:12;:48::i;:::-;-1:-1:-1::0;;17255:6:0;:14;;-1:-1:-1;;;;17255:14:0;;;-1:-1:-1;;;;;;;;25852:1372:0:o;28563:943::-;28703:13;;28753:15;;28783:7;28779:88;;28822:1;28806:13;:17;;;28838:15;:17;28779:88;-1:-1:-1;;;;;28891:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28915:22:0;;;;;;:11;:22;;;;;;;;28914:23;28891:46;28887:467;;;28954:48;28976:6;28984:9;28995:6;28954:21;:48::i;:::-;28887:467;;;-1:-1:-1;;;;;29025:19:0;;;;;;:11;:19;;;;;;;;29024:20;:46;;;;-1:-1:-1;;;;;;29048:22:0;;;;;;:11;:22;;;;;;;;29024:46;29020:334;;;29087:46;29107:6;29115:9;29126:6;29087:19;:46::i;29020:334::-;-1:-1:-1;;;;;29155:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29178:22:0;;;;;;:11;:22;;;;;;;;29155:45;29151:203;;;29217:48;29239:6;29247:9;29258:6;29217:21;:48::i;29151:203::-;29298:44;29316:6;29324:9;29335:6;29298:17;:44::i;:::-;29378:7;29374:125;;29401:13;:38;;;;29454:15;:33;-1:-1:-1;;;;28563:943:0:o;33370:561::-;33467:7;;33503;;33420;;;;;33527:289;33551:9;:16;33547:20;;33527:289;;;33617:7;33593;:21;33601:9;33611:1;33601:12;;;;;;-1:-1:-1;;;33601:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33601:12:0;33593:21;;;;;;;;;;;;;:31;;:66;;;33652:7;33628;:21;33636:9;33646:1;33636:12;;;;;;-1:-1:-1;;;33636:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33636:12:0;33628:21;;;;;;;;;;;;;:31;33593:66;33589:97;;;33669:7;;33678;;33661:25;;;;;;;33370:561;;:::o;33589:97::-;33711:34;33723:7;:21;33731:9;33741:1;33731:12;;;;;;-1:-1:-1;;;33731:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33731:12:0;33723:21;;;;;;;;;;;;;33711:7;;:11;:34::i;:::-;33701:44;;33770:34;33782:7;:21;33790:9;33800:1;33790:12;;;;;;-1:-1:-1;;;33790:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33790:12:0;33782:21;;;;;;;;;;;;;33770:7;;:11;:34::i;:::-;33760:44;-1:-1:-1;33569:3:0;;;;:::i;:::-;;;;33527:289;;;-1:-1:-1;33852:7:0;;33840;;:20;;:11;:20::i;:::-;33830:7;:30;33826:61;;;33870:7;;33879;;33862:25;;;;;;33370:561;;:::o;33826:61::-;33906:7;;33915;;-1:-1:-1;33370:561:0;-1:-1:-1;33370:561:0:o;32424:330::-;32484:7;32493;32502;32522:12;32537:24;32553:7;32537:15;:24::i;:::-;32522:39;;32572:18;32593:30;32615:7;32593:21;:30::i;:::-;32572:51;-1:-1:-1;32634:23:0;32660:33;32572:51;32660:17;:7;32672:4;32660:11;:17::i;:::-;:21;;:33::i;:::-;32634:59;32729:4;;-1:-1:-1;32735:10:0;;-1:-1:-1;32424:330:0;;-1:-1:-1;;;32424:330:0:o;32762:429::-;32877:7;;;;32933:24;:7;32945:11;32933;:24::i;:::-;32915:42;-1:-1:-1;32968:12:0;32983:21;:4;32992:11;32983:8;:21::i;:::-;32968:36;-1:-1:-1;33015:18:0;33036:27;:10;33051:11;33036:14;:27::i;:::-;33015:48;-1:-1:-1;33074:23:0;33100:33;33015:48;33100:17;:7;33112:4;33100:11;:17::i;:33::-;33152:7;;;;-1:-1:-1;33178:4:0;;-1:-1:-1;32762:429:0;;-1:-1:-1;;;;;;;32762:429:0:o;27362:666::-;27512:16;;;27526:1;27512:16;;;;;;;;27488:21;;27512:16;;;;;;;;;;-1:-1:-1;27512:16:0;27488:40;;27557:4;27539;27544:1;27539:7;;;;;;-1:-1:-1;;;27539:7:0;;;;;;;;;-1:-1:-1;;;;;27539:23:0;;;:7;;;;;;;;;;:23;;;;27583:15;;:22;;;-1:-1:-1;;;27583:22:0;;;;:15;;;;;:20;;:22;;;;;27539:7;;27583:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27573:4;27578:1;27573:7;;;;;;-1:-1:-1;;;27573:7:0;;;;;;;;;-1:-1:-1;;;;;27573:32:0;;;:7;;;;;;;;;:32;27650:15;;27618:62;;27635:4;;27650:15;27668:11;27618:8;:62::i;:::-;27719:15;;:240;;-1:-1:-1;;;27719:240:0;;-1:-1:-1;;;;;27719:15:0;;;;:66;;:240;;27800:11;;27719:15;;27870:4;;27897;;27933:15;;27719:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27985:35;28002:11;28015:4;27985:35;;;;;;;:::i;:::-;;;;;;;;27362:666;;:::o;27236:111::-;27316:23;;-1:-1:-1;;;;;27316:15:0;;;:23;;;;;27332:6;;27316:23;;;;27332:6;27316:15;:23;;;;;;;;;;;;;;;;;;;28042:513;28222:15;;28190:62;;28207:4;;-1:-1:-1;;;;;28222:15:0;28240:11;28190:8;:62::i;:::-;28295:15;;-1:-1:-1;;;;;28295:15:0;:31;28334:9;28367:4;28387:11;28295:15;;28499:7;5883;5910:6;-1:-1:-1;;;;;5910:6:0;;5845:79;28499:7;28295:252;;;;;;-1:-1:-1;;;;;;28295:252:0;;;-1:-1:-1;;;;;9184:15:1;;;28295:252:0;;;9166:34:1;9216:18;;;9209:34;;;;9259:18;;;9252:34;;;;9302:18;;;9295:34;9366:15;;;9345:19;;;9338:44;28521:15:0;9398:19:1;;;9391:35;9100:19;;28295:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28042:513;;:::o;30618:566::-;30721:15;30738:23;30763:12;30777:23;30802:12;30816:18;30838:19;30849:7;30838:10;:19::i;:::-;-1:-1:-1;;;;;30886:15:0;;;;;;:7;:15;;;;;;30720:137;;-1:-1:-1;30720:137:0;;-1:-1:-1;30720:137:0;;-1:-1:-1;30720:137:0;-1:-1:-1;30720:137:0;-1:-1:-1;30720:137:0;-1:-1:-1;30886:28:0;;30906:7;30886:19;:28::i;:::-;-1:-1:-1;;;;;30868:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30943:7;:15;;;;:28;;30963:7;30943:19;:28::i;:::-;-1:-1:-1;;;;;30925:15:0;;;;;;;:7;:15;;;;;;:46;;;;31003:18;;;;;;;:39;;31026:15;31003:22;:39::i;:::-;-1:-1:-1;;;;;30982:18:0;;;;;;:7;:18;;;;;:60;31056:26;31071:10;31056:14;:26::i;:::-;31093:23;31105:4;31111;31093:11;:23::i;:::-;31149:9;-1:-1:-1;;;;;31132:44:0;31141:6;-1:-1:-1;;;;;31132:44:0;;31160:15;31132:44;;;;17591:25:1;;17579:2;17564:18;;17546:76;31132:44:0;;;;;;;;30618:566;;;;;;;;;:::o;30024:586::-;30125:15;30142:23;30167:12;30181:23;30206:12;30220:18;30242:19;30253:7;30242:10;:19::i;:::-;-1:-1:-1;;;;;30290:15:0;;;;;;:7;:15;;;;;;30124:137;;-1:-1:-1;30124:137:0;;-1:-1:-1;30124:137:0;;-1:-1:-1;30124:137:0;-1:-1:-1;30124:137:0;-1:-1:-1;30124:137:0;-1:-1:-1;30290:28:0;;30124:137;30290:19;:28::i;:::-;-1:-1:-1;;;;;30272:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30350:18;;;;;:7;:18;;;;;:39;;30373:15;30350:22;:39::i;:::-;-1:-1:-1;;;;;30329:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30421:7;:18;;;;:39;;30444:15;30421:22;:39::i;31192:642::-;31295:15;31312:23;31337:12;31351:23;31376:12;31390:18;31412:19;31423:7;31412:10;:19::i;:::-;-1:-1:-1;;;;;31460:15:0;;;;;;:7;:15;;;;;;31294:137;;-1:-1:-1;31294:137:0;;-1:-1:-1;31294:137:0;;-1:-1:-1;31294:137:0;-1:-1:-1;31294:137:0;-1:-1:-1;31294:137:0;-1:-1:-1;31460:28:0;;31480:7;31460:19;:28::i;:::-;-1:-1:-1;;;;;31442:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31517:7;:15;;;;:28;;31537:7;31517:19;:28::i;29514:502::-;29613:15;29630:23;29655:12;29669:23;29694:12;29708:18;29730:19;29741:7;29730:10;:19::i;:::-;-1:-1:-1;;;;;29778:15:0;;;;;;:7;:15;;;;;;29612:137;;-1:-1:-1;29612:137:0;;-1:-1:-1;29612:137:0;;-1:-1:-1;29612:137:0;-1:-1:-1;29612:137:0;-1:-1:-1;29612:137:0;-1:-1:-1;29778:28:0;;29612:137;29778:19;:28::i;34310:160::-;34374:7;34401:61;34446:5;34401:26;34413:13;;34401:7;:11;;:26;;;;:::i;34482:168::-;34552:7;34579:63;34626:5;34579:28;34591:15;;34579:7;:11;;:28;;;;:::i;33943:355::-;34006:19;34029:10;:8;:10::i;:::-;34006:33;-1:-1:-1;34050:18:0;34071:27;:10;34006:33;34071:14;:27::i;:::-;34150:4;34134:22;;;;:7;:22;;;;;;34050:48;;-1:-1:-1;34134:38:0;;34050:48;34134:26;:38::i;:::-;34125:4;34109:22;;;;:7;:22;;;;;;;;:63;;;;34186:11;:26;;;;;;34183:107;;;34268:4;34252:22;;;;:7;:22;;;;;;:38;;34279:10;34252:26;:38::i;:::-;34243:4;34227:22;;;;:7;:22;;;;;:63;33943:355;;;:::o;31842:147::-;31920:7;;:17;;31932:4;31920:11;:17::i;:::-;31910:7;:27;31961:10;;:20;;31976:4;31961:14;:20::i;:::-;31948:10;:33;-1:-1:-1;;31842:147:0:o;14:395:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:660::-;2190:6;2198;2206;2214;2267:2;2255:9;2246:7;2242:23;2238:32;2235:2;;;2288:6;2280;2273:22;2235:2;2332:9;2319:23;2351:31;2376:5;2351:31;:::i;:::-;2401:5;-1:-1:-1;2457:2:1;2442:18;;2429:32;2484:18;2473:30;;2470:2;;;2521:6;2513;2506:22;2470:2;2565:70;2627:7;2618:6;2607:9;2603:22;2565:70;:::i;:::-;2225:521;;2654:8;;-1:-1:-1;2539:96:1;;2736:2;2721:18;2708:32;;2225:521;-1:-1:-1;;;;2225:521:1:o;2751:325::-;2819:6;2827;2880:2;2868:9;2859:7;2855:23;2851:32;2848:2;;;2901:6;2893;2886:22;2848:2;2945:9;2932:23;2964:31;2989:5;2964:31;:::i;:::-;3014:5;3066:2;3051:18;;;;3038:32;;-1:-1:-1;;;2838:238:1:o;3081:457::-;3167:6;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:2;;;3249:6;3241;3234:22;3196:2;3294:9;3281:23;3327:18;3319:6;3316:30;3313:2;;;3364:6;3356;3349:22;3313:2;3408:70;3470:7;3461:6;3450:9;3446:22;3408:70;:::i;:::-;3497:8;;3382:96;;-1:-1:-1;3186:352:1;-1:-1:-1;;;;3186:352:1:o;3543:586::-;3635:6;3643;3651;3704:2;3692:9;3683:7;3679:23;3675:32;3672:2;;;3725:6;3717;3710:22;3672:2;3770:9;3757:23;3803:18;3795:6;3792:30;3789:2;;;3840:6;3832;3825:22;3789:2;3884:70;3946:7;3937:6;3926:9;3922:22;3884:70;:::i;:::-;3973:8;;-1:-1:-1;3858:96:1;-1:-1:-1;;4058:2:1;4043:18;;4030:32;4071:28;4030:32;4071:28;:::i;:::-;4118:5;4108:15;;;3662:467;;;;;:::o;4134:251::-;4190:6;4243:2;4231:9;4222:7;4218:23;4214:32;4211:2;;;4264:6;4256;4249:22;4211:2;4308:9;4295:23;4327:28;4349:5;4327:28;:::i;4390:255::-;4457:6;4510:2;4498:9;4489:7;4485:23;4481:32;4478:2;;;4531:6;4523;4516:22;4478:2;4568:9;4562:16;4587:28;4609:5;4587:28;:::i;4650:319::-;4715:6;4723;4776:2;4764:9;4755:7;4751:23;4747:32;4744:2;;;4797:6;4789;4782:22;4744:2;4841:9;4828:23;4860:28;4882:5;4860:28;:::i;4974:411::-;5055:6;5063;5116:2;5104:9;5095:7;5091:23;5087:32;5084:2;;;5137:6;5129;5122:22;5390:190;5449:6;5502:2;5490:9;5481:7;5477:23;5473:32;5470:2;;;5523:6;5515;5508:22;5470:2;-1:-1:-1;5551:23:1;;5460:120;-1:-1:-1;5460:120:1:o;5585:194::-;5655:6;5708:2;5696:9;5687:7;5683:23;5679:32;5676:2;;;5729:6;5721;5714:22;5676:2;-1:-1:-1;5757:16:1;;5666:113;-1:-1:-1;5666:113:1:o;5784:319::-;5849:6;5857;5910:2;5898:9;5889:7;5885:23;5881:32;5878:2;;;5931:6;5923;5916:22;5878:2;5972:9;5959:23;5949:33;;6032:2;6021:9;6017:18;6004:32;6045:28;6067:5;6045:28;:::i;6108:258::-;6176:6;6184;6237:2;6225:9;6216:7;6212:23;6208:32;6205:2;;;6258:6;6250;6243:22;6205:2;-1:-1:-1;;6286:23:1;;;6356:2;6341:18;;;6328:32;;-1:-1:-1;6195:171:1:o;6371:316::-;6459:6;6467;6475;6528:2;6516:9;6507:7;6503:23;6499:32;6496:2;;;6549:6;6541;6534:22;6496:2;6583:9;6577:16;6567:26;;6633:2;6622:9;6618:18;6612:25;6602:35;;6677:2;6666:9;6662:18;6656:25;6646:35;;6486:201;;;;;:::o;6692:395::-;6778:6;6786;6794;6802;6855:3;6843:9;6834:7;6830:23;6826:33;6823:2;;;6877:6;6869;6862:22;6823:2;-1:-1:-1;;6905:23:1;;;6975:2;6960:18;;6947:32;;-1:-1:-1;7026:2:1;7011:18;;6998:32;;7077:2;7062:18;7049:32;;-1:-1:-1;6813:274:1;-1:-1:-1;6813:274:1:o;7092:464::-;7187:6;7195;7203;7211;7219;7272:3;7260:9;7251:7;7247:23;7243:33;7240:2;;;7294:6;7286;7279:22;7240:2;-1:-1:-1;;7322:23:1;;;7392:2;7377:18;;7364:32;;-1:-1:-1;7443:2:1;7428:18;;7415:32;;7494:2;7479:18;;7466:32;;-1:-1:-1;7545:3:1;7530:19;7517:33;;-1:-1:-1;7230:326:1;-1:-1:-1;7230:326:1:o;7561:463::-;7614:3;7652:5;7646:12;7679:6;7674:3;7667:19;7705:4;7734:2;7729:3;7725:12;7718:19;;7771:2;7764:5;7760:14;7792:3;7804:195;7818:6;7815:1;7812:13;7804:195;;;7883:13;;-1:-1:-1;;;;;7879:39:1;7867:52;;7939:12;;;;7974:15;;;;7915:1;7833:9;7804:195;;;-1:-1:-1;8015:3:1;;7622:402;-1:-1:-1;;;;;7622:402:1:o;9864:603::-;9976:4;10005:2;10034;10023:9;10016:21;10066:6;10060:13;10109:6;10104:2;10093:9;10089:18;10082:34;10134:4;10147:140;10161:6;10158:1;10155:13;10147:140;;;10256:14;;;10252:23;;10246:30;10222:17;;;10241:2;10218:26;10211:66;10176:10;;10147:140;;;10305:6;10302:1;10299:13;10296:2;;;10375:4;10370:2;10361:6;10350:9;10346:22;10342:31;10335:45;10296:2;-1:-1:-1;10451:2:1;10430:15;-1:-1:-1;;10426:29:1;10411:45;;;;10458:2;10407:54;;9985:482;-1:-1:-1;;;9985:482:1:o;14342:356::-;14544:2;14526:21;;;14563:18;;;14556:30;14622:34;14617:2;14602:18;;14595:62;14689:2;14674:18;;14516:182::o;17627:332::-;17834:6;17823:9;17816:25;17877:2;17872;17861:9;17857:18;17850:30;17797:4;17897:56;17949:2;17938:9;17934:18;17926:6;17897:56;:::i;:::-;17889:64;17806:153;-1:-1:-1;;;;17806:153:1:o;17964:582::-;18263:6;18252:9;18245:25;18306:6;18301:2;18290:9;18286:18;18279:34;18349:3;18344:2;18333:9;18329:18;18322:31;18226:4;18370:57;18422:3;18411:9;18407:19;18399:6;18370:57;:::i;:::-;-1:-1:-1;;;;;18463:32:1;;;;18458:2;18443:18;;18436:60;-1:-1:-1;18527:3:1;18512:19;18505:35;18362:65;18235:311;-1:-1:-1;;;18235:311:1:o;18740:128::-;18780:3;18811:1;18807:6;18804:1;18801:13;18798:2;;;18817:18;;:::i;:::-;-1:-1:-1;18853:9:1;;18788:80::o;18873:217::-;18913:1;18939;18929:2;;-1:-1:-1;;;18964:31:1;;19018:4;19015:1;19008:15;19046:4;18971:1;19036:15;18929:2;-1:-1:-1;19075:9:1;;18919:171::o;19095:422::-;19184:1;19227:5;19184:1;19241:270;19262:7;19252:8;19249:21;19241:270;;;19321:4;19317:1;19313:6;19309:17;19303:4;19300:27;19297:2;;;19330:18;;:::i;:::-;19380:7;19370:8;19366:22;19363:2;;;19400:16;;;;19363:2;19479:22;;;;19439:15;;;;19241:270;;;19245:3;19159:358;;;;;:::o;19522:140::-;19580:5;19609:47;19650:4;19640:8;19636:19;19630:4;19716:5;19746:8;19736:2;;-1:-1:-1;19787:1:1;19801:5;;19736:2;19835:4;19825:2;;-1:-1:-1;19872:1:1;19886:5;;19825:2;19917:4;19935:1;19930:59;;;;20003:1;19998:130;;;;19910:218;;19930:59;19960:1;19951:10;;19974:5;;;19998:130;20035:3;20025:8;20022:17;20019:2;;;20042:18;;:::i;:::-;-1:-1:-1;;20098:1:1;20084:16;;20113:5;;19910:218;;20212:2;20202:8;20199:16;20193:3;20187:4;20184:13;20180:36;20174:2;20164:8;20161:16;20156:2;20150:4;20147:12;20143:35;20140:77;20137:2;;;-1:-1:-1;20249:19:1;;;20281:5;;20137:2;20328:34;20353:8;20347:4;20328:34;:::i;:::-;20398:6;20394:1;20390:6;20386:19;20377:7;20374:32;20371:2;;;20409:18;;:::i;:::-;20447:20;;19726:747;-1:-1:-1;;;19726:747:1:o;20478:168::-;20518:7;20584:1;20580;20576:6;20572:14;20569:1;20566:21;20561:1;20554:9;20547:17;20543:45;20540:2;;;20591:18;;:::i;:::-;-1:-1:-1;20631:9:1;;20530:116::o;20651:125::-;20691:4;20719:1;20716;20713:8;20710:2;;;20724:18;;:::i;:::-;-1:-1:-1;20761:9:1;;20700:76::o;20781:380::-;20860:1;20856:12;;;;20903;;;20924:2;;20978:4;20970:6;20966:17;20956:27;;20924:2;21031;21023:6;21020:14;21000:18;20997:38;20994:2;;;21077:10;21072:3;21068:20;21065:1;21058:31;21112:4;21109:1;21102:15;21140:4;21137:1;21130:15;20994:2;;20836:325;;;:::o;21166:135::-;21205:3;-1:-1:-1;;21226:17:1;;21223:2;;;21246:18;;:::i;:::-;-1:-1:-1;21293:1:1;21282:13;;21213:88::o;21306:127::-;21367:10;21362:3;21358:20;21355:1;21348:31;21398:4;21395:1;21388:15;21422:4;21419:1;21412:15;21438:131;-1:-1:-1;;;;;21513:31:1;;21503:42;;21493:2;;21559:1;21556;21549:12;21493:2;21483:86;:::o;21574:118::-;21660:5;21653:13;21646:21;21639:5;21636:32;21626:2;;21682:1;21679;21672:12
Swarm Source
ipfs://c30a33deb759b2243c9768106722fac37774a9761e5821824ed4f2d42e0b56e2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.