ERC-20
Overview
Max Total Supply
10,000,000 AMC
Holders
19
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AMC
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-29 */ /** *Submitted for verification at Etherscan.io on 2022-12-21 */ /** 🦍💵 $AMC | Apes Millionaire Club 🦍🚬 $AMC (Apes Millionaire Club) is a decentralized version of the AMC stock that is less volatile, more secure and aims to make millionaires out of all the degen apes of defi. What makes $AMC worth investing and holding? Right now, the crypto bear market is brutally destroying the average trader. The typical degen barely holds new tokens for more than a few minutes to maybe a few hours only to sell for 2–3x profit. $AMC’s contract was intelligently designed in a way to incentive degens to hold long-term. We’ve coded a contact that contains 0% buy tax and *automatically* decreases the sell tax based on preset marketcaps to encourage holders and new buyers. Here is the structure of how our sell tax has been coded to function: The sell tax will begin at 30% until we hit 100k marketcap - 5% gets burned, 25% goes to dev/marketing wallet. Once we hit 100k marketcap the sell tax *automatically decreases* to 15% - 2% gets burned, 13% goes to dev/marketing wallet. Then sell tax will automatically decrease to 0% at 250k marketcap and remain 0% irrespective of the marketcap. Since the marketing/dev wallet will be collecting lots of funds from taxes, we will use those funds for buybacks, burning tokens, adding to liquidity, and various types of marketing. Tokenomics: Supply: 10,000,000 Taxes: Starts at 0/15 then decrease to 0/10 at 50k, 0/0 at 250k. Max Buy: 1% Max Tx: 2% Telegram: https://t.me/ApeMillionaireClub Twitter: https://twitter.com/AMC_ETH Website: https://www.apemillionaire.club ****************/ interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract AMC is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public USDC = 0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C; address public burnAddress = deadAddress; bool private swapping; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public buyLiquidityFee; uint256 public buyBurnFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public sellLiquidityFee; uint256 public sellBurnFee; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; event ExcludeFromFees(address indexed account, bool isExcluded); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("Ape Millionaire Club", "AMC") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), USDC); excludeFromMaxTransaction(address(uniswapV2Pair), true); uint256 _buyDevFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyBurnFee = 0; uint256 _sellDevFee = 14; uint256 _sellBurnFee = 1; uint256 _sellLiquidityFee = 0; uint256 totalSupply = 10_000_000 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 2% from total supply maxTransactionAmountTxn maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyDevFee = _buyDevFee; buyLiquidityFee = _buyLiquidityFee; buyBurnFee = _buyBurnFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyBurnFee; sellDevFee = _sellDevFee; sellLiquidityFee = _sellLiquidityFee; sellBurnFee = _sellBurnFee; sellTotalFees = sellDevFee + sellLiquidityFee + buyBurnFee; devWallet = address(0xCB810E1edaC097d0A366fC01Dea2a692fFE88017); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function setDeadAddress(address addy) public onlyOwner{ burnAddress = addy; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee, uint256 _burnFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyBurnFee = _burnFee; buyTotalFees = buyDevFee + buyLiquidityFee + _burnFee; require(buyTotalFees <= 10, "Must keep fees at 10% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee, uint256 _sellBurnFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellBurnFee = _sellBurnFee; sellTotalFees = sellDevFee + sellLiquidityFee; require(sellTotalFees <= 10, "Must keep fees at 10% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateDevWallet(address newDevWallet) external onlyOwner { emit devWalletUpdated(newDevWallet, devWallet); devWallet = newDevWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. //when buy if ( from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; uint256 current_mcap = getMarketCap(uniswapV2Pair, 1); if(current_mcap > 50000 * 1e18){ sellBurnFee = 1; sellDevFee = 9; }else if(current_mcap > 100000 * 1e18){ sellBurnFee = 0; sellDevFee = 5; } else if(current_mcap > 150000 * 1e18) { sellBurnFee = 0; sellDevFee = 0; } swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 tokensForLiquidity = 0; uint256 tokensForDev = 0; uint256 tokensForBurn = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (to == uniswapV2Pair && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees; tokensForDev = (fees * sellDevFee) / sellTotalFees; tokensForBurn = (fees * sellBurnFee) / sellTotalFees; } // on buy else if (from == uniswapV2Pair && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; tokensForDev = (fees * buyDevFee) / buyTotalFees; tokensForBurn = (fees * buyBurnFee) / buyTotalFees; } if (fees> 0) { super._transfer(from, address(this), fees); } if (tokensForLiquidity > 0) { super._transfer(address(this), uniswapV2Pair, tokensForLiquidity); } if(tokensForBurn > 0){ super._transfer(address(this), burnAddress, tokensForBurn); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForUSDC(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = USDC; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of USDC path, devWallet, block.timestamp ); } // calculate price based on pair reserves function getMarketCap(address pairAddress, uint amount) public view returns(uint) { IUniswapV2Pair pair = IUniswapV2Pair(pairAddress); IERC20 token1 = IERC20(pair.token0()); IERC20Metadata data1 = IERC20Metadata(pair.token0()); (uint Res0, uint Res1,) = pair.getReserves(); // decimals uint res0 = Res0*(10**data1.decimals()); return((amount*res0)/Res1) * totalSupply(); // } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } swapTokensForUSDC(contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setDeadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405273d87ba7a50b2e7e660f678a895e4b72e7cb4ccd9c600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550348015620000fa57600080fd5b506040518060400160405280601481526020017f417065204d696c6c696f6e6169726520436c75620000000000000000000000008152506040518060400160405280600381526020017f414d43000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200017f92919062000a24565b5080600490805190602001906200019892919062000a24565b505050620001bb620001af6200058560201b60201c565b6200058d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001e78160016200065360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d919062000b3e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002eb92919062000b81565b6020604051808303816000875af11580156200030b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000331919062000b3e565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037960a05160016200065360201b60201c565b600080600080600e90506000600190506000806a084595161401484a00000090506064600182620003ab919062000be7565b620003b7919062000c77565b6009819055506064600282620003ce919062000be7565b620003da919062000c77565b600b81905550612710600582620003f2919062000be7565b620003fe919062000c77565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e546200042e919062000caf565b6200043a919062000caf565b600d819055508360128190555081601381905550826014819055506010546013546012546200046a919062000caf565b62000476919062000caf565b60118190555073cb810e1edac097d0a366fc01dea2a692ffe88017600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004f3620004e56200073d60201b60201c565b60016200076760201b60201c565b620005063060016200076760201b60201c565b6200051b61dead60016200076760201b60201c565b6200053d6200052f6200073d60201b60201c565b60016200065360201b60201c565b620005503060016200065360201b60201c565b6200056561dead60016200065360201b60201c565b620005773382620008a160201b60201c565b505050505050505062000ece565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006636200058560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006896200073d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d99062000d6d565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007776200058560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200079d6200073d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ed9062000d6d565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000895919062000dac565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000914576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090b9062000e19565b60405180910390fd5b620009286000838362000a1a60201b60201c565b80600260008282546200093c919062000caf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000993919062000caf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009fa919062000e4c565b60405180910390a362000a166000838362000a1f60201b60201c565b5050565b505050565b505050565b82805462000a329062000e98565b90600052602060002090601f01602090048101928262000a56576000855562000aa2565b82601f1062000a7157805160ff191683800117855562000aa2565b8280016001018555821562000aa2579182015b8281111562000aa157825182559160200191906001019062000a84565b5b50905062000ab1919062000ab5565b5090565b5b8082111562000ad057600081600090555060010162000ab6565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b068262000ad9565b9050919050565b62000b188162000af9565b811462000b2457600080fd5b50565b60008151905062000b388162000b0d565b92915050565b60006020828403121562000b575762000b5662000ad4565b5b600062000b678482850162000b27565b91505092915050565b62000b7b8162000af9565b82525050565b600060408201905062000b98600083018562000b70565b62000ba7602083018462000b70565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000bf48262000bae565b915062000c018362000bae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c3d5762000c3c62000bb8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c848262000bae565b915062000c918362000bae565b92508262000ca45762000ca362000c48565b5b828204905092915050565b600062000cbc8262000bae565b915062000cc98362000bae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d015762000d0062000bb8565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d5560208362000d0c565b915062000d628262000d1d565b602082019050919050565b6000602082019050818103600083015262000d888162000d46565b9050919050565b60008115159050919050565b62000da68162000d8f565b82525050565b600060208201905062000dc3600083018462000d9b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e01601f8362000d0c565b915062000e0e8262000dc9565b602082019050919050565b6000602082019050818103600083015262000e348162000df2565b9050919050565b62000e468162000bae565b82525050565b600060208201905062000e63600083018462000e3b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000eb157607f821691505b6020821081141562000ec85762000ec762000e69565b5b50919050565b60805160a0516144e862000f2c60003960008181610f35015281816123e30152818161262c0152818161274d015281816128db015281816129c30152612aca015260008181610bb501528181613030015261305701526144e86000f3fe60806040526004361061028c5760003560e01c806389a302711161015a578063c17b5b8c116100c1578063e2f456051161007a578063e2f45605146109e3578063e71dc3f514610a0e578063f11a24d314610a39578063f2fde38b14610a64578063f637434214610a8d578063f8b45b0514610ab857610293565b8063c17b5b8c146108c1578063c18bc195146108ea578063c8c8ebe414610913578063d257b34f1461093e578063d85ba0631461097b578063dd62ed3e146109a657610293565b80639c3b4fdc116101135780639c3b4fdc146107af578063a0d82dc5146107da578063a9059cbb14610805578063adb873bd14610842578063bbc0c7421461086d578063c02466681461089857610293565b806389a30271146106c35780638a8c523c146106ee5780638da5cb5b146107055780638ea5220f14610730578063924de9b71461075b57806395d89b411461078457610293565b80634a62bb65116101fe57806370d5ae05116101b757806370d5ae05146105db578063715018a614610606578063751039fc1461061d5780637571336a1461064857806377975e0b146106715780638095d5641461069a57610293565b80634a62bb65146104a35780634fbee193146104ce5780635a12fd411461050b5780636a486a8e146105485780636ddd17131461057357806370a082311461059e57610293565b80631816467f116102505780631816467f14610393578063203e727e146103bc57806323b872dd146103e557806327c8f83514610422578063313ce5671461044d57806349bd5a5e1461047857610293565b806306fdde0314610298578063095ea7b3146102c357806310d5de53146103005780631694505e1461033d57806318160ddd1461036857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ae3565b6040516102ba91906131a8565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190613263565b610b75565b6040516102f791906132be565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906132d9565b610b93565b60405161033491906132be565b60405180910390f35b34801561034957600080fd5b50610352610bb3565b60405161035f9190613365565b60405180910390f35b34801561037457600080fd5b5061037d610bd7565b60405161038a919061338f565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b591906132d9565b610be1565b005b3480156103c857600080fd5b506103e360048036038101906103de91906133aa565b610d1d565b005b3480156103f157600080fd5b5061040c600480360381019061040791906133d7565b610e2c565b60405161041991906132be565b60405180910390f35b34801561042e57600080fd5b50610437610f24565b6040516104449190613439565b60405180910390f35b34801561045957600080fd5b50610462610f2a565b60405161046f9190613470565b60405180910390f35b34801561048457600080fd5b5061048d610f33565b60405161049a9190613439565b60405180910390f35b3480156104af57600080fd5b506104b8610f57565b6040516104c591906132be565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f091906132d9565b610f6a565b60405161050291906132be565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613263565b610fc0565b60405161053f919061338f565b60405180910390f35b34801561055457600080fd5b5061055d611204565b60405161056a919061338f565b60405180910390f35b34801561057f57600080fd5b5061058861120a565b60405161059591906132be565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906132d9565b61121d565b6040516105d2919061338f565b60405180910390f35b3480156105e757600080fd5b506105f0611265565b6040516105fd9190613439565b60405180910390f35b34801561061257600080fd5b5061061b61128b565b005b34801561062957600080fd5b50610632611313565b60405161063f91906132be565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a91906134b7565b6113b3565b005b34801561067d57600080fd5b50610698600480360381019061069391906132d9565b61148a565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906134f7565b61154a565b005b3480156106cf57600080fd5b506106d8611647565b6040516106e59190613439565b60405180910390f35b3480156106fa57600080fd5b5061070361166d565b005b34801561071157600080fd5b5061071a611721565b6040516107279190613439565b60405180910390f35b34801561073c57600080fd5b5061074561174b565b6040516107529190613439565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061354a565b611771565b005b34801561079057600080fd5b5061079961180a565b6040516107a691906131a8565b60405180910390f35b3480156107bb57600080fd5b506107c461189c565b6040516107d1919061338f565b60405180910390f35b3480156107e657600080fd5b506107ef6118a2565b6040516107fc919061338f565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190613263565b6118a8565b60405161083991906132be565b60405180910390f35b34801561084e57600080fd5b506108576118c6565b604051610864919061338f565b60405180910390f35b34801561087957600080fd5b506108826118cc565b60405161088f91906132be565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906134b7565b6118df565b005b3480156108cd57600080fd5b506108e860048036038101906108e391906134f7565b611a04565b005b3480156108f657600080fd5b50610911600480360381019061090c91906133aa565b611af6565b005b34801561091f57600080fd5b50610928611c05565b604051610935919061338f565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906133aa565b611c0b565b60405161097291906132be565b60405180910390f35b34801561098757600080fd5b50610990611d60565b60405161099d919061338f565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613577565b611d66565b6040516109da919061338f565b60405180910390f35b3480156109ef57600080fd5b506109f8611ded565b604051610a05919061338f565b60405180910390f35b348015610a1a57600080fd5b50610a23611df3565b604051610a30919061338f565b60405180910390f35b348015610a4557600080fd5b50610a4e611df9565b604051610a5b919061338f565b60405180910390f35b348015610a7057600080fd5b50610a8b6004803603810190610a8691906132d9565b611dff565b005b348015610a9957600080fd5b50610aa2611ef7565b604051610aaf919061338f565b60405180910390f35b348015610ac457600080fd5b50610acd611efd565b604051610ada919061338f565b60405180910390f35b606060038054610af2906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1e906135e6565b8015610b6b5780601f10610b4057610100808354040283529160200191610b6b565b820191906000526020600020905b815481529060010190602001808311610b4e57829003601f168201915b5050505050905090565b6000610b89610b82611f03565b8484611f0b565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610be9611f03565b73ffffffffffffffffffffffffffffffffffffffff16610c07611721565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613664565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d25611f03565b73ffffffffffffffffffffffffffffffffffffffff16610d43611721565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613664565b60405180910390fd5b670de0b6b3a76400006103e86001610daf610bd7565b610db991906136b3565b610dc3919061373c565b610dcd919061373c565b811015610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e06906137df565b60405180910390fd5b670de0b6b3a764000081610e2391906136b3565b60098190555050565b6000610e398484846120d6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e84611f03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613871565b60405180910390fd5b610f1885610f10611f03565b858403611f0b565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611013573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103791906138a6565b905060008273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110aa91906138a6565b90506000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190613955565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b491906139d4565b600a6111c09190613b34565b836111cb91906136b3565b90506111d5610bd7565b82828a6111e291906136b3565b6111ec919061373c565b6111f691906136b3565b965050505050505092915050565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611293611f03565b73ffffffffffffffffffffffffffffffffffffffff166112b1611721565b73ffffffffffffffffffffffffffffffffffffffff1614611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90613664565b60405180910390fd5b6113116000612b4e565b565b600061131d611f03565b73ffffffffffffffffffffffffffffffffffffffff1661133b611721565b73ffffffffffffffffffffffffffffffffffffffff1614611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890613664565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6113bb611f03565b73ffffffffffffffffffffffffffffffffffffffff166113d9611721565b73ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613664565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611492611f03565b73ffffffffffffffffffffffffffffffffffffffff166114b0611721565b73ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613664565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611552611f03565b73ffffffffffffffffffffffffffffffffffffffff16611570611721565b73ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90613664565b60405180910390fd5b82600e8190555081600f819055508060108190555080600f54600e546115ec9190613b7f565b6115f69190613b7f565b600d81905550600a600d541115611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990613c21565b60405180910390fd5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611675611f03565b73ffffffffffffffffffffffffffffffffffffffff16611693611721565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090613664565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611779611f03565b73ffffffffffffffffffffffffffffffffffffffff16611797611721565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613664565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611819906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611845906135e6565b80156118925780601f1061186757610100808354040283529160200191611892565b820191906000526020600020905b81548152906001019060200180831161187557829003601f168201915b5050505050905090565b600e5481565b60125481565b60006118bc6118b5611f03565b84846120d6565b6001905092915050565b60145481565b600c60019054906101000a900460ff1681565b6118e7611f03565b73ffffffffffffffffffffffffffffffffffffffff16611905611721565b73ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613664565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f891906132be565b60405180910390a25050565b611a0c611f03565b73ffffffffffffffffffffffffffffffffffffffff16611a2a611721565b73ffffffffffffffffffffffffffffffffffffffff1614611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613664565b60405180910390fd5b826012819055508160138190555080601481905550601354601254611aa59190613b7f565b601181905550600a6011541115611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890613c21565b60405180910390fd5b505050565b611afe611f03565b73ffffffffffffffffffffffffffffffffffffffff16611b1c611721565b73ffffffffffffffffffffffffffffffffffffffff1614611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990613664565b60405180910390fd5b670de0b6b3a76400006103e86005611b88610bd7565b611b9291906136b3565b611b9c919061373c565b611ba6919061373c565b811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90613cb3565b60405180910390fd5b670de0b6b3a764000081611bfc91906136b3565b600b8190555050565b60095481565b6000611c15611f03565b73ffffffffffffffffffffffffffffffffffffffff16611c33611721565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613664565b60405180910390fd5b620186a06001611c97610bd7565b611ca191906136b3565b611cab919061373c565b821015611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613d45565b60405180910390fd5b6103e86005611cfa610bd7565b611d0491906136b3565b611d0e919061373c565b821115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790613dd7565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b600f5481565b611e07611f03565b73ffffffffffffffffffffffffffffffffffffffff16611e25611721565b73ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290613664565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613e69565b60405180910390fd5b611ef481612b4e565b50565b60135481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613efb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613f8d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c9919061338f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d9061401f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad906140b1565b60405180910390fd5b60008114156121d0576121cb83836000612c14565b612b49565b600c60009054906101000a900460ff16156125da576121ed611721565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225b575061222b611721565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122945750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122ce575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e75750600760149054906101000a900460ff16155b156125d957600c60019054906101000a900460ff166123e157601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123a15750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061411d565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156124865750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561252d576009548111156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906141af565b60405180910390fd5b600b546124dc8361121d565b826124e79190613b7f565b1115612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251f9061421b565b60405180910390fd5b6125d8565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125d757600b5461258a8361121d565b826125959190613b7f565b11156125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd9061421b565b60405180910390fd5b5b5b5b5b60006125e53061121d565b90506000600a54821015905080801561260a5750600c60029054906101000a900460ff165b80156126235750600760149054906101000a900460ff16155b801561267a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126d05750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127265750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561280d576001600760146101000a81548160ff02191690831515021790555060006127737f00000000000000000000000000000000000000000000000000000000000000006001610fc0565b9050690a968163f0a57b40000081111561279c57600160148190555060096012819055506127e8565b69152d02c7e14af68000008111156127c357600060148190555060056012819055506127e7565b691fc3842bd1f071c000008111156127e657600060148190555060006012819055505b5b5b6127f0612e95565b6000600760146101000a81548160ff021916908315150217905550505b6000600760149054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c35750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128cd57600090505b6000806000808415612b36577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561293657506000601154115b156129c15761296360646129556011548b612ee690919063ffffffff16565b612efc90919063ffffffff16565b93506011546013548561297691906136b3565b612980919061373c565b92506011546012548561299391906136b3565b61299d919061373c565b9150601154601454856129b091906136b3565b6129ba919061373c565b9050612aa6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16148015612a1e57506000600d54115b15612aa557612a4b6064612a3d600d548b612ee690919063ffffffff16565b612efc90919063ffffffff16565b9350600d54600f5485612a5e91906136b3565b612a68919061373c565b9250600d54600e5485612a7b91906136b3565b612a85919061373c565b9150600d5460105485612a9891906136b3565b612aa2919061373c565b90505b5b6000841115612abb57612aba8a3086612c14565b5b6000831115612af057612aef307f000000000000000000000000000000000000000000000000000000000000000085612c14565b5b6000811115612b2757612b2630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612c14565b5b8388612b33919061423b565b97505b612b418a8a8a612c14565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b9061401f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb906140b1565b60405180910390fd5b612cff838383612f12565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c906142e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e189190613b7f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e7c919061338f565b60405180910390a3612e8f848484612f17565b50505050565b6000612ea03061121d565b90506000811415612eb15750612ee4565b6014600a54612ec091906136b3565b811115612ed9576014600a54612ed691906136b3565b90505b612ee281612f1c565b505b565b60008183612ef491906136b3565b905092915050565b60008183612f0a919061373c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612f3957612f38614301565b5b604051908082528060200260200182016040528015612f675781602001602082028036833780820191505090505b5090503081600081518110612f7f57612f7e614330565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612ff057612fef614330565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613055307f000000000000000000000000000000000000000000000000000000000000000084611f0b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016130d9959493929190614458565b600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561314957808201518184015260208101905061312e565b83811115613158576000848401525b50505050565b6000601f19601f8301169050919050565b600061317a8261310f565b613184818561311a565b935061319481856020860161312b565b61319d8161315e565b840191505092915050565b600060208201905081810360008301526131c2818461316f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131fa826131cf565b9050919050565b61320a816131ef565b811461321557600080fd5b50565b60008135905061322781613201565b92915050565b6000819050919050565b6132408161322d565b811461324b57600080fd5b50565b60008135905061325d81613237565b92915050565b6000806040838503121561327a576132796131ca565b5b600061328885828601613218565b92505060206132998582860161324e565b9150509250929050565b60008115159050919050565b6132b8816132a3565b82525050565b60006020820190506132d360008301846132af565b92915050565b6000602082840312156132ef576132ee6131ca565b5b60006132fd84828501613218565b91505092915050565b6000819050919050565b600061332b613326613321846131cf565b613306565b6131cf565b9050919050565b600061333d82613310565b9050919050565b600061334f82613332565b9050919050565b61335f81613344565b82525050565b600060208201905061337a6000830184613356565b92915050565b6133898161322d565b82525050565b60006020820190506133a46000830184613380565b92915050565b6000602082840312156133c0576133bf6131ca565b5b60006133ce8482850161324e565b91505092915050565b6000806000606084860312156133f0576133ef6131ca565b5b60006133fe86828701613218565b935050602061340f86828701613218565b92505060406134208682870161324e565b9150509250925092565b613433816131ef565b82525050565b600060208201905061344e600083018461342a565b92915050565b600060ff82169050919050565b61346a81613454565b82525050565b60006020820190506134856000830184613461565b92915050565b613494816132a3565b811461349f57600080fd5b50565b6000813590506134b18161348b565b92915050565b600080604083850312156134ce576134cd6131ca565b5b60006134dc85828601613218565b92505060206134ed858286016134a2565b9150509250929050565b6000806000606084860312156135105761350f6131ca565b5b600061351e8682870161324e565b935050602061352f8682870161324e565b92505060406135408682870161324e565b9150509250925092565b6000602082840312156135605761355f6131ca565b5b600061356e848285016134a2565b91505092915050565b6000806040838503121561358e5761358d6131ca565b5b600061359c85828601613218565b92505060206135ad85828601613218565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135fe57607f821691505b60208210811415613612576136116135b7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061364e60208361311a565b915061365982613618565b602082019050919050565b6000602082019050818103600083015261367d81613641565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136be8261322d565b91506136c98361322d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561370257613701613684565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137478261322d565b91506137528361322d565b9250826137625761376161370d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006137c9602f8361311a565b91506137d48261376d565b604082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061385b60288361311a565b9150613866826137ff565b604082019050919050565b6000602082019050818103600083015261388a8161384e565b9050919050565b6000815190506138a081613201565b92915050565b6000602082840312156138bc576138bb6131ca565b5b60006138ca84828501613891565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b6138f6816138d3565b811461390157600080fd5b50565b600081519050613913816138ed565b92915050565b600063ffffffff82169050919050565b61393281613919565b811461393d57600080fd5b50565b60008151905061394f81613929565b92915050565b60008060006060848603121561396e5761396d6131ca565b5b600061397c86828701613904565b935050602061398d86828701613904565b925050604061399e86828701613940565b9150509250925092565b6139b181613454565b81146139bc57600080fd5b50565b6000815190506139ce816139a8565b92915050565b6000602082840312156139ea576139e96131ca565b5b60006139f8848285016139bf565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613a5857808604811115613a3457613a33613684565b5b6001851615613a435780820291505b8081029050613a5185613a01565b9450613a18565b94509492505050565b600082613a715760019050613b2d565b81613a7f5760009050613b2d565b8160018114613a955760028114613a9f57613ace565b6001915050613b2d565b60ff841115613ab157613ab0613684565b5b8360020a915084821115613ac857613ac7613684565b5b50613b2d565b5060208310610133831016604e8410600b8410161715613b035782820a905083811115613afe57613afd613684565b5b613b2d565b613b108484846001613a0e565b92509050818404811115613b2757613b26613684565b5b81810290505b9392505050565b6000613b3f8261322d565b9150613b4a83613454565b9250613b777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a61565b905092915050565b6000613b8a8261322d565b9150613b958361322d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bca57613bc9613684565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613c0b601d8361311a565b9150613c1682613bd5565b602082019050919050565b60006020820190508181036000830152613c3a81613bfe565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613c9d60248361311a565b9150613ca882613c41565b604082019050919050565b60006020820190508181036000830152613ccc81613c90565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d2f60358361311a565b9150613d3a82613cd3565b604082019050919050565b60006020820190508181036000830152613d5e81613d22565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613dc160348361311a565b9150613dcc82613d65565b604082019050919050565b60006020820190508181036000830152613df081613db4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e5360268361311a565b9150613e5e82613df7565b604082019050919050565b60006020820190508181036000830152613e8281613e46565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ee560248361311a565b9150613ef082613e89565b604082019050919050565b60006020820190508181036000830152613f1481613ed8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f7760228361311a565b9150613f8282613f1b565b604082019050919050565b60006020820190508181036000830152613fa681613f6a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061400960258361311a565b915061401482613fad565b604082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061409b60238361311a565b91506140a68261403f565b604082019050919050565b600060208201905081810360008301526140ca8161408e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061410760168361311a565b9150614112826140d1565b602082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061419960358361311a565b91506141a48261413d565b604082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061420560138361311a565b9150614210826141cf565b602082019050919050565b60006020820190508181036000830152614234816141f8565b9050919050565b60006142468261322d565b91506142518361322d565b92508282101561426457614263613684565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006142cb60268361311a565b91506142d68261426f565b604082019050919050565b600060208201905081810360008301526142fa816142be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061438461437f61437a8461435f565b613306565b61322d565b9050919050565b61439481614369565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143cf816131ef565b82525050565b60006143e183836143c6565b60208301905092915050565b6000602082019050919050565b60006144058261439a565b61440f81856143a5565b935061441a836143b6565b8060005b8381101561444b57815161443288826143d5565b975061443d836143ed565b92505060018101905061441e565b5085935050505092915050565b600060a08201905061446d6000830188613380565b61447a602083018761438b565b818103604083015261448c81866143fa565b905061449b606083018561342a565b6144a86080830184613380565b969550505050505056fea2646970667358221220bc1b0e82aa3ca5e195449d73875ade417baaf8d851aa8b367901eb69992b0fbe64736f6c634300080c0033
Deployed Bytecode
0x60806040526004361061028c5760003560e01c806389a302711161015a578063c17b5b8c116100c1578063e2f456051161007a578063e2f45605146109e3578063e71dc3f514610a0e578063f11a24d314610a39578063f2fde38b14610a64578063f637434214610a8d578063f8b45b0514610ab857610293565b8063c17b5b8c146108c1578063c18bc195146108ea578063c8c8ebe414610913578063d257b34f1461093e578063d85ba0631461097b578063dd62ed3e146109a657610293565b80639c3b4fdc116101135780639c3b4fdc146107af578063a0d82dc5146107da578063a9059cbb14610805578063adb873bd14610842578063bbc0c7421461086d578063c02466681461089857610293565b806389a30271146106c35780638a8c523c146106ee5780638da5cb5b146107055780638ea5220f14610730578063924de9b71461075b57806395d89b411461078457610293565b80634a62bb65116101fe57806370d5ae05116101b757806370d5ae05146105db578063715018a614610606578063751039fc1461061d5780637571336a1461064857806377975e0b146106715780638095d5641461069a57610293565b80634a62bb65146104a35780634fbee193146104ce5780635a12fd411461050b5780636a486a8e146105485780636ddd17131461057357806370a082311461059e57610293565b80631816467f116102505780631816467f14610393578063203e727e146103bc57806323b872dd146103e557806327c8f83514610422578063313ce5671461044d57806349bd5a5e1461047857610293565b806306fdde0314610298578063095ea7b3146102c357806310d5de53146103005780631694505e1461033d57806318160ddd1461036857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ae3565b6040516102ba91906131a8565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190613263565b610b75565b6040516102f791906132be565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906132d9565b610b93565b60405161033491906132be565b60405180910390f35b34801561034957600080fd5b50610352610bb3565b60405161035f9190613365565b60405180910390f35b34801561037457600080fd5b5061037d610bd7565b60405161038a919061338f565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b591906132d9565b610be1565b005b3480156103c857600080fd5b506103e360048036038101906103de91906133aa565b610d1d565b005b3480156103f157600080fd5b5061040c600480360381019061040791906133d7565b610e2c565b60405161041991906132be565b60405180910390f35b34801561042e57600080fd5b50610437610f24565b6040516104449190613439565b60405180910390f35b34801561045957600080fd5b50610462610f2a565b60405161046f9190613470565b60405180910390f35b34801561048457600080fd5b5061048d610f33565b60405161049a9190613439565b60405180910390f35b3480156104af57600080fd5b506104b8610f57565b6040516104c591906132be565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f091906132d9565b610f6a565b60405161050291906132be565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613263565b610fc0565b60405161053f919061338f565b60405180910390f35b34801561055457600080fd5b5061055d611204565b60405161056a919061338f565b60405180910390f35b34801561057f57600080fd5b5061058861120a565b60405161059591906132be565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906132d9565b61121d565b6040516105d2919061338f565b60405180910390f35b3480156105e757600080fd5b506105f0611265565b6040516105fd9190613439565b60405180910390f35b34801561061257600080fd5b5061061b61128b565b005b34801561062957600080fd5b50610632611313565b60405161063f91906132be565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a91906134b7565b6113b3565b005b34801561067d57600080fd5b50610698600480360381019061069391906132d9565b61148a565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906134f7565b61154a565b005b3480156106cf57600080fd5b506106d8611647565b6040516106e59190613439565b60405180910390f35b3480156106fa57600080fd5b5061070361166d565b005b34801561071157600080fd5b5061071a611721565b6040516107279190613439565b60405180910390f35b34801561073c57600080fd5b5061074561174b565b6040516107529190613439565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061354a565b611771565b005b34801561079057600080fd5b5061079961180a565b6040516107a691906131a8565b60405180910390f35b3480156107bb57600080fd5b506107c461189c565b6040516107d1919061338f565b60405180910390f35b3480156107e657600080fd5b506107ef6118a2565b6040516107fc919061338f565b60405180910390f35b34801561081157600080fd5b5061082c60048036038101906108279190613263565b6118a8565b60405161083991906132be565b60405180910390f35b34801561084e57600080fd5b506108576118c6565b604051610864919061338f565b60405180910390f35b34801561087957600080fd5b506108826118cc565b60405161088f91906132be565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906134b7565b6118df565b005b3480156108cd57600080fd5b506108e860048036038101906108e391906134f7565b611a04565b005b3480156108f657600080fd5b50610911600480360381019061090c91906133aa565b611af6565b005b34801561091f57600080fd5b50610928611c05565b604051610935919061338f565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906133aa565b611c0b565b60405161097291906132be565b60405180910390f35b34801561098757600080fd5b50610990611d60565b60405161099d919061338f565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613577565b611d66565b6040516109da919061338f565b60405180910390f35b3480156109ef57600080fd5b506109f8611ded565b604051610a05919061338f565b60405180910390f35b348015610a1a57600080fd5b50610a23611df3565b604051610a30919061338f565b60405180910390f35b348015610a4557600080fd5b50610a4e611df9565b604051610a5b919061338f565b60405180910390f35b348015610a7057600080fd5b50610a8b6004803603810190610a8691906132d9565b611dff565b005b348015610a9957600080fd5b50610aa2611ef7565b604051610aaf919061338f565b60405180910390f35b348015610ac457600080fd5b50610acd611efd565b604051610ada919061338f565b60405180910390f35b606060038054610af2906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1e906135e6565b8015610b6b5780601f10610b4057610100808354040283529160200191610b6b565b820191906000526020600020905b815481529060010190602001808311610b4e57829003601f168201915b5050505050905090565b6000610b89610b82611f03565b8484611f0b565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610be9611f03565b73ffffffffffffffffffffffffffffffffffffffff16610c07611721565b73ffffffffffffffffffffffffffffffffffffffff1614610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613664565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610d25611f03565b73ffffffffffffffffffffffffffffffffffffffff16610d43611721565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613664565b60405180910390fd5b670de0b6b3a76400006103e86001610daf610bd7565b610db991906136b3565b610dc3919061373c565b610dcd919061373c565b811015610e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e06906137df565b60405180910390fd5b670de0b6b3a764000081610e2391906136b3565b60098190555050565b6000610e398484846120d6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e84611f03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613871565b60405180910390fd5b610f1885610f10611f03565b858403611f0b565b60019150509392505050565b61dead81565b60006012905090565b7f0000000000000000000000004fd6d48b204519d7083a00687990403d7540506581565b600c60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008083905060008173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611013573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103791906138a6565b905060008273ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110aa91906138a6565b90506000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e9190613955565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b491906139d4565b600a6111c09190613b34565b836111cb91906136b3565b90506111d5610bd7565b82828a6111e291906136b3565b6111ec919061373c565b6111f691906136b3565b965050505050505092915050565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611293611f03565b73ffffffffffffffffffffffffffffffffffffffff166112b1611721565b73ffffffffffffffffffffffffffffffffffffffff1614611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90613664565b60405180910390fd5b6113116000612b4e565b565b600061131d611f03565b73ffffffffffffffffffffffffffffffffffffffff1661133b611721565b73ffffffffffffffffffffffffffffffffffffffff1614611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890613664565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6113bb611f03565b73ffffffffffffffffffffffffffffffffffffffff166113d9611721565b73ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613664565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611492611f03565b73ffffffffffffffffffffffffffffffffffffffff166114b0611721565b73ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613664565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611552611f03565b73ffffffffffffffffffffffffffffffffffffffff16611570611721565b73ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd90613664565b60405180910390fd5b82600e8190555081600f819055508060108190555080600f54600e546115ec9190613b7f565b6115f69190613b7f565b600d81905550600a600d541115611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990613c21565b60405180910390fd5b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611675611f03565b73ffffffffffffffffffffffffffffffffffffffff16611693611721565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090613664565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611779611f03565b73ffffffffffffffffffffffffffffffffffffffff16611797611721565b73ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490613664565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611819906135e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611845906135e6565b80156118925780601f1061186757610100808354040283529160200191611892565b820191906000526020600020905b81548152906001019060200180831161187557829003601f168201915b5050505050905090565b600e5481565b60125481565b60006118bc6118b5611f03565b84846120d6565b6001905092915050565b60145481565b600c60019054906101000a900460ff1681565b6118e7611f03565b73ffffffffffffffffffffffffffffffffffffffff16611905611721565b73ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613664565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f891906132be565b60405180910390a25050565b611a0c611f03565b73ffffffffffffffffffffffffffffffffffffffff16611a2a611721565b73ffffffffffffffffffffffffffffffffffffffff1614611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790613664565b60405180910390fd5b826012819055508160138190555080601481905550601354601254611aa59190613b7f565b601181905550600a6011541115611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890613c21565b60405180910390fd5b505050565b611afe611f03565b73ffffffffffffffffffffffffffffffffffffffff16611b1c611721565b73ffffffffffffffffffffffffffffffffffffffff1614611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990613664565b60405180910390fd5b670de0b6b3a76400006103e86005611b88610bd7565b611b9291906136b3565b611b9c919061373c565b611ba6919061373c565b811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90613cb3565b60405180910390fd5b670de0b6b3a764000081611bfc91906136b3565b600b8190555050565b60095481565b6000611c15611f03565b73ffffffffffffffffffffffffffffffffffffffff16611c33611721565b73ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8090613664565b60405180910390fd5b620186a06001611c97610bd7565b611ca191906136b3565b611cab919061373c565b821015611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613d45565b60405180910390fd5b6103e86005611cfa610bd7565b611d0491906136b3565b611d0e919061373c565b821115611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790613dd7565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b600f5481565b611e07611f03565b73ffffffffffffffffffffffffffffffffffffffff16611e25611721565b73ffffffffffffffffffffffffffffffffffffffff1614611e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7290613664565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee290613e69565b60405180910390fd5b611ef481612b4e565b50565b60135481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613efb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613f8d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c9919061338f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d9061401f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad906140b1565b60405180910390fd5b60008114156121d0576121cb83836000612c14565b612b49565b600c60009054906101000a900460ff16156125da576121ed611721565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225b575061222b611721565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122945750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122ce575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e75750600760149054906101000a900460ff16155b156125d957600c60019054906101000a900460ff166123e157601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123a15750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061411d565b60405180910390fd5b5b7f0000000000000000000000004fd6d48b204519d7083a00687990403d7540506573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156124865750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561252d576009548111156124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906141af565b60405180910390fd5b600b546124dc8361121d565b826124e79190613b7f565b1115612528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251f9061421b565b60405180910390fd5b6125d8565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125d757600b5461258a8361121d565b826125959190613b7f565b11156125d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cd9061421b565b60405180910390fd5b5b5b5b5b60006125e53061121d565b90506000600a54821015905080801561260a5750600c60029054906101000a900460ff165b80156126235750600760149054906101000a900460ff16155b801561267a57507f0000000000000000000000004fd6d48b204519d7083a00687990403d7540506573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126d05750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127265750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561280d576001600760146101000a81548160ff02191690831515021790555060006127737f0000000000000000000000004fd6d48b204519d7083a00687990403d754050656001610fc0565b9050690a968163f0a57b40000081111561279c57600160148190555060096012819055506127e8565b69152d02c7e14af68000008111156127c357600060148190555060056012819055506127e7565b691fc3842bd1f071c000008111156127e657600060148190555060006012819055505b5b5b6127f0612e95565b6000600760146101000a81548160ff021916908315150217905550505b6000600760149054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128c35750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128cd57600090505b6000806000808415612b36577f0000000000000000000000004fd6d48b204519d7083a00687990403d7540506573ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561293657506000601154115b156129c15761296360646129556011548b612ee690919063ffffffff16565b612efc90919063ffffffff16565b93506011546013548561297691906136b3565b612980919061373c565b92506011546012548561299391906136b3565b61299d919061373c565b9150601154601454856129b091906136b3565b6129ba919061373c565b9050612aa6565b7f0000000000000000000000004fd6d48b204519d7083a00687990403d7540506573ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16148015612a1e57506000600d54115b15612aa557612a4b6064612a3d600d548b612ee690919063ffffffff16565b612efc90919063ffffffff16565b9350600d54600f5485612a5e91906136b3565b612a68919061373c565b9250600d54600e5485612a7b91906136b3565b612a85919061373c565b9150600d5460105485612a9891906136b3565b612aa2919061373c565b90505b5b6000841115612abb57612aba8a3086612c14565b5b6000831115612af057612aef307f0000000000000000000000004fd6d48b204519d7083a00687990403d7540506585612c14565b5b6000811115612b2757612b2630600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612c14565b5b8388612b33919061423b565b97505b612b418a8a8a612c14565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7b9061401f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb906140b1565b60405180910390fd5b612cff838383612f12565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c906142e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e189190613b7f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e7c919061338f565b60405180910390a3612e8f848484612f17565b50505050565b6000612ea03061121d565b90506000811415612eb15750612ee4565b6014600a54612ec091906136b3565b811115612ed9576014600a54612ed691906136b3565b90505b612ee281612f1c565b505b565b60008183612ef491906136b3565b905092915050565b60008183612f0a919061373c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115612f3957612f38614301565b5b604051908082528060200260200182016040528015612f675781602001602082028036833780820191505090505b5090503081600081518110612f7f57612f7e614330565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612ff057612fef614330565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613055307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f0b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016130d9959493929190614458565b600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561314957808201518184015260208101905061312e565b83811115613158576000848401525b50505050565b6000601f19601f8301169050919050565b600061317a8261310f565b613184818561311a565b935061319481856020860161312b565b61319d8161315e565b840191505092915050565b600060208201905081810360008301526131c2818461316f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131fa826131cf565b9050919050565b61320a816131ef565b811461321557600080fd5b50565b60008135905061322781613201565b92915050565b6000819050919050565b6132408161322d565b811461324b57600080fd5b50565b60008135905061325d81613237565b92915050565b6000806040838503121561327a576132796131ca565b5b600061328885828601613218565b92505060206132998582860161324e565b9150509250929050565b60008115159050919050565b6132b8816132a3565b82525050565b60006020820190506132d360008301846132af565b92915050565b6000602082840312156132ef576132ee6131ca565b5b60006132fd84828501613218565b91505092915050565b6000819050919050565b600061332b613326613321846131cf565b613306565b6131cf565b9050919050565b600061333d82613310565b9050919050565b600061334f82613332565b9050919050565b61335f81613344565b82525050565b600060208201905061337a6000830184613356565b92915050565b6133898161322d565b82525050565b60006020820190506133a46000830184613380565b92915050565b6000602082840312156133c0576133bf6131ca565b5b60006133ce8482850161324e565b91505092915050565b6000806000606084860312156133f0576133ef6131ca565b5b60006133fe86828701613218565b935050602061340f86828701613218565b92505060406134208682870161324e565b9150509250925092565b613433816131ef565b82525050565b600060208201905061344e600083018461342a565b92915050565b600060ff82169050919050565b61346a81613454565b82525050565b60006020820190506134856000830184613461565b92915050565b613494816132a3565b811461349f57600080fd5b50565b6000813590506134b18161348b565b92915050565b600080604083850312156134ce576134cd6131ca565b5b60006134dc85828601613218565b92505060206134ed858286016134a2565b9150509250929050565b6000806000606084860312156135105761350f6131ca565b5b600061351e8682870161324e565b935050602061352f8682870161324e565b92505060406135408682870161324e565b9150509250925092565b6000602082840312156135605761355f6131ca565b5b600061356e848285016134a2565b91505092915050565b6000806040838503121561358e5761358d6131ca565b5b600061359c85828601613218565b92505060206135ad85828601613218565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135fe57607f821691505b60208210811415613612576136116135b7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061364e60208361311a565b915061365982613618565b602082019050919050565b6000602082019050818103600083015261367d81613641565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136be8261322d565b91506136c98361322d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561370257613701613684565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137478261322d565b91506137528361322d565b9250826137625761376161370d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006137c9602f8361311a565b91506137d48261376d565b604082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061385b60288361311a565b9150613866826137ff565b604082019050919050565b6000602082019050818103600083015261388a8161384e565b9050919050565b6000815190506138a081613201565b92915050565b6000602082840312156138bc576138bb6131ca565b5b60006138ca84828501613891565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b6138f6816138d3565b811461390157600080fd5b50565b600081519050613913816138ed565b92915050565b600063ffffffff82169050919050565b61393281613919565b811461393d57600080fd5b50565b60008151905061394f81613929565b92915050565b60008060006060848603121561396e5761396d6131ca565b5b600061397c86828701613904565b935050602061398d86828701613904565b925050604061399e86828701613940565b9150509250925092565b6139b181613454565b81146139bc57600080fd5b50565b6000815190506139ce816139a8565b92915050565b6000602082840312156139ea576139e96131ca565b5b60006139f8848285016139bf565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613a5857808604811115613a3457613a33613684565b5b6001851615613a435780820291505b8081029050613a5185613a01565b9450613a18565b94509492505050565b600082613a715760019050613b2d565b81613a7f5760009050613b2d565b8160018114613a955760028114613a9f57613ace565b6001915050613b2d565b60ff841115613ab157613ab0613684565b5b8360020a915084821115613ac857613ac7613684565b5b50613b2d565b5060208310610133831016604e8410600b8410161715613b035782820a905083811115613afe57613afd613684565b5b613b2d565b613b108484846001613a0e565b92509050818404811115613b2757613b26613684565b5b81810290505b9392505050565b6000613b3f8261322d565b9150613b4a83613454565b9250613b777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a61565b905092915050565b6000613b8a8261322d565b9150613b958361322d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bca57613bc9613684565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613c0b601d8361311a565b9150613c1682613bd5565b602082019050919050565b60006020820190508181036000830152613c3a81613bfe565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613c9d60248361311a565b9150613ca882613c41565b604082019050919050565b60006020820190508181036000830152613ccc81613c90565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613d2f60358361311a565b9150613d3a82613cd3565b604082019050919050565b60006020820190508181036000830152613d5e81613d22565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613dc160348361311a565b9150613dcc82613d65565b604082019050919050565b60006020820190508181036000830152613df081613db4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e5360268361311a565b9150613e5e82613df7565b604082019050919050565b60006020820190508181036000830152613e8281613e46565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ee560248361311a565b9150613ef082613e89565b604082019050919050565b60006020820190508181036000830152613f1481613ed8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f7760228361311a565b9150613f8282613f1b565b604082019050919050565b60006020820190508181036000830152613fa681613f6a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061400960258361311a565b915061401482613fad565b604082019050919050565b6000602082019050818103600083015261403881613ffc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061409b60238361311a565b91506140a68261403f565b604082019050919050565b600060208201905081810360008301526140ca8161408e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061410760168361311a565b9150614112826140d1565b602082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061419960358361311a565b91506141a48261413d565b604082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061420560138361311a565b9150614210826141cf565b602082019050919050565b60006020820190508181036000830152614234816141f8565b9050919050565b60006142468261322d565b91506142518361322d565b92508282101561426457614263613684565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006142cb60268361311a565b91506142d68261426f565b604082019050919050565b600060208201905081810360008301526142fa816142be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061438461437f61437a8461435f565b613306565b61322d565b9050919050565b61439481614369565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143cf816131ef565b82525050565b60006143e183836143c6565b60208301905092915050565b6000602082019050919050565b60006144058261439a565b61440f81856143a5565b935061441a836143b6565b8060005b8381101561444b57815161443288826143d5565b975061443d836143ed565b92505060018101905061441e565b5085935050505092915050565b600060a08201905061446d6000830188613380565b61447a602083018761438b565b818103604083015261448c81866143fa565b905061449b606083018561342a565b6144a86080830184613380565b969550505050505056fea2646970667358221220bc1b0e82aa3ca5e195449d73875ade417baaf8d851aa8b367901eb69992b0fbe64736f6c634300080c0033
Deployed Bytecode Sourcemap
24766:12528:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12319:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25839:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24839:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11272:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31058:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29183:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12970:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24942:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11114:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24897:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25300:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31257:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36512:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25557:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25380:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11443:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25073:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5464:103;;;;;;;;;;;;;:::i;:::-;;28384:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29730:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28513:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30101:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25002:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28220:112;;;;;;;;;;;;;:::i;:::-;;4813:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25152:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29993:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10371:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25453:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25592:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11783:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25662:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25340:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30868:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30481:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29466:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25185:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28678:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25419:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12021:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25227:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25521:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25484:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5722:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25624:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25267:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10152:100;10206:13;10239:5;10232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10152:100;:::o;12319:169::-;12402:4;12419:39;12428:12;:10;:12::i;:::-;12442:7;12451:6;12419:8;:39::i;:::-;12476:4;12469:11;;12319:169;;;;:::o;25839:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24839:51::-;;;:::o;11272:108::-;11333:7;11360:12;;11353:19;;11272:108;:::o;31058:189::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31194:9:::1;;;;;;;;;;;31163:41;;31180:12;31163:41;;;;;;;;;;;;31227:12;31215:9;;:24;;;;;;;;;;;;;;;;;;31058:189:::0;:::o;29183:275::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29320:4:::1;29312;29307:1;29291:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29290:26;;;;:::i;:::-;29289:35;;;;:::i;:::-;29279:6;:45;;29257:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;29443:6;29433;:17;;;;:::i;:::-;29410:20;:40;;;;29183:275:::0;:::o;12970:492::-;13110:4;13127:36;13137:6;13145:9;13156:6;13127:9;:36::i;:::-;13176:24;13203:11;:19;13215:6;13203:19;;;;;;;;;;;;;;;:33;13223:12;:10;:12::i;:::-;13203:33;;;;;;;;;;;;;;;;13176:60;;13275:6;13255:16;:26;;13247:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13362:57;13371:6;13379:12;:10;:12::i;:::-;13412:6;13393:16;:25;13362:8;:57::i;:::-;13450:4;13443:11;;;12970:492;;;;;:::o;24942:53::-;24988:6;24942:53;:::o;11114:93::-;11172:5;11197:2;11190:9;;11114:93;:::o;24897:38::-;;;:::o;25300:33::-;;;;;;;;;;;;;:::o;31257:126::-;31323:4;31347:19;:28;31367:7;31347:28;;;;;;;;;;;;;;;;;;;;;;;;;31340:35;;31257:126;;;:::o;36512:427::-;36588:4;36605:19;36642:11;36605:49;;36661:13;36684:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36661:37;;36705:20;36743:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36705:52;;36767:9;36778;36792:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36766:44;;;;;;;;;36840:9;36862:5;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36858:2;:20;;;;:::i;:::-;36852:4;:27;;;;:::i;:::-;36840:39;;36915:13;:11;:13::i;:::-;36907:4;36901;36894:6;:11;;;;:::i;:::-;36893:18;;;;:::i;:::-;36892:36;;;;:::i;:::-;36886:42;;;;;;;;36512:427;;;;:::o;25557:28::-;;;;:::o;25380:30::-;;;;;;;;;;;;;:::o;11443:127::-;11517:7;11544:9;:18;11554:7;11544:18;;;;;;;;;;;;;;;;11537:25;;11443:127;;;:::o;25073:40::-;;;;;;;;;;;;;:::o;5464:103::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5529:30:::1;5556:1;5529:18;:30::i;:::-;5464:103::o:0;28384:121::-;28436:4;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28470:5:::1;28453:14;;:22;;;;;;;;;;;;;;;;;;28493:4;28486:11;;28384:121:::0;:::o;29730:167::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29885:4:::1;29843:31;:39;29875:6;29843:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29730:167:::0;;:::o;28513:95::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28596:4:::1;28582:11;;:18;;;;;;;;;;;;;;;;;;28513:95:::0;:::o;30101:372::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30249:7:::1;30237:9;:19;;;;30285:13;30267:15;:31;;;;30322:8;30309:10;:21;;;;30386:8;30368:15;;30356:9;;:27;;;;:::i;:::-;:38;;;;:::i;:::-;30341:12;:53;;;;30429:2;30413:12;;:18;;30405:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30101:372:::0;;;:::o;25002:64::-;;;;;;;;;;;;;:::o;28220:112::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28291:4:::1;28275:13;;:20;;;;;;;;;;;;;;;;;;28320:4;28306:11;;:18;;;;;;;;;;;;;;;;;;28220:112::o:0;4813:87::-;4859:7;4886:6;;;;;;;;;;;4879:13;;4813:87;:::o;25152:24::-;;;;;;;;;;;;;:::o;29993:100::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30078:7:::1;30064:11;;:21;;;;;;;;;;;;;;;;;;29993:100:::0;:::o;10371:104::-;10427:13;10460:7;10453:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10371:104;:::o;25453:24::-;;;;:::o;25592:25::-;;;;:::o;11783:175::-;11869:4;11886:42;11896:12;:10;:12::i;:::-;11910:9;11921:6;11886:9;:42::i;:::-;11946:4;11939:11;;11783:175;;;;:::o;25662:26::-;;;;:::o;25340:33::-;;;;;;;;;;;;;:::o;30868:182::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:8:::1;30953:19;:28;30973:7;30953:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31024:7;31008:34;;;31033:8;31008:34;;;;;;:::i;:::-;;;;;;;;30868:182:::0;;:::o;30481:379::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30635:7:::1;30622:10;:20;;;;30672:13;30653:16;:32;;;;30710:12;30696:11;:26;;;;30764:16;;30751:10;;:29;;;;:::i;:::-;30735:13;:45;;;;30816:2;30799:13;;:19;;30791:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30481:379:::0;;;:::o;29466:256::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29606:4:::1;29598;29593:1;29577:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29576:26;;;;:::i;:::-;29575:35;;;;:::i;:::-;29565:6;:45;;29543:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;29707:6;29697;:17;;;;:::i;:::-;29685:9;:29;;;;29466:256:::0;:::o;25185:35::-;;;;:::o;28678:497::-;28786:4;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28865:6:::1;28860:1;28844:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28843:28;;;;:::i;:::-;28830:9;:41;;28808:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29020:4;29015:1;28999:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28998:26;;;;:::i;:::-;28985:9;:39;;28963:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29136:9;29115:18;:30;;;;29163:4;29156:11;;28678:497:::0;;;:::o;25419:27::-;;;;:::o;12021:151::-;12110:7;12137:11;:18;12149:5;12137:18;;;;;;;;;;;;;;;:27;12156:7;12137:27;;;;;;;;;;;;;;;;12130:34;;12021:151;;;;:::o;25227:33::-;;;;:::o;25521:25::-;;;;:::o;25484:30::-;;;;:::o;5722:201::-;5044:12;:10;:12::i;:::-;5033:23;;:7;:5;:7::i;:::-;:23;;;5025:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5831:1:::1;5811:22;;:8;:22;;;;5803:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5887:28;5906:8;5887:18;:28::i;:::-;5722:201:::0;:::o;25624:31::-;;;;:::o;25267:24::-;;;;:::o;4189:98::-;4242:7;4269:10;4262:17;;4189:98;:::o;15811:380::-;15964:1;15947:19;;:5;:19;;;;15939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16045:1;16026:21;;:7;:21;;;;16018:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16129:6;16099:11;:18;16111:5;16099:18;;;;;;;;;;;;;;;:27;16118:7;16099:27;;;;;;;;;;;;;;;:36;;;;16167:7;16151:32;;16160:5;16151:32;;;16176:6;16151:32;;;;;;:::i;:::-;;;;;;;;15811:380;;;:::o;31391:4485::-;31539:1;31523:18;;:4;:18;;;;31515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31616:1;31602:16;;:2;:16;;;;31594:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31685:1;31675:6;:11;31671:93;;;31703:28;31719:4;31725:2;31729:1;31703:15;:28::i;:::-;31746:7;;31671:93;31780:14;;;;;;;;;;;31776:1444;;;31855:7;:5;:7::i;:::-;31847:15;;:4;:15;;;;:49;;;;;31889:7;:5;:7::i;:::-;31883:13;;:2;:13;;;;31847:49;:86;;;;;31931:1;31917:16;;:2;:16;;;;31847:86;:128;;;;;31968:6;31954:21;;:2;:21;;;;31847:128;:158;;;;;31997:8;;;;;;;;;;;31996:9;31847:158;31825:1384;;;32045:13;;;;;;;;;;;32040:223;;32117:19;:25;32137:4;32117:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32146:19;:23;32166:2;32146:23;;;;;;;;;;;;;;;;;;;;;;;;;32117:52;32083:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;32040:223;32477:13;32469:21;;:4;:21;;;:82;;;;;32516:31;:35;32548:2;32516:35;;;;;;;;;;;;;;;;;;;;;;;;;32515:36;32469:82;32443:751;;;32638:20;;32628:6;:30;;32594:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;32846:9;;32829:13;32839:2;32829:9;:13::i;:::-;32820:6;:22;;;;:::i;:::-;:35;;32786:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32443:751;;;32974:31;:35;33006:2;32974:35;;;;;;;;;;;;;;;;;;;;;;;;;32969:225;;33094:9;;33077:13;33087:2;33077:9;:13::i;:::-;33068:6;:22;;;;:::i;:::-;:35;;33034:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32969:225;32443:751;31825:1384;31776:1444;33232:28;33263:24;33281:4;33263:9;:24::i;:::-;33232:55;;33300:12;33339:18;;33315:20;:42;;33300:57;;33388:7;:35;;;;;33412:11;;;;;;;;;;;33388:35;:61;;;;;33441:8;;;;;;;;;;;33440:9;33388:61;:97;;;;;33472:13;33466:19;;:2;:19;;;33388:97;:140;;;;;33503:19;:25;33523:4;33503:25;;;;;;;;;;;;;;;;;;;;;;;;;33502:26;33388:140;:181;;;;;33546:19;:23;33566:2;33546:23;;;;;;;;;;;;;;;;;;;;;;;;;33545:24;33388:181;33370:795;;;33607:4;33596:8;;:15;;;;;;;;;;;;;;;;;;33628:20;33651:30;33664:13;33679:1;33651:12;:30::i;:::-;33628:53;;33714:12;33699;:27;33696:400;;;33764:1;33750:11;:15;;;;33801:1;33788:10;:14;;;;33696:400;;;33841:13;33826:12;:28;33823:273;;;33894:1;33880:11;:15;;;;33931:1;33918:10;:14;;;;33823:273;;;33985:13;33970:12;:28;33967:129;;;34046:1;34032:11;:15;;;;34079:1;34066:10;:14;;;;33967:129;33823:273;33696:400;34110:10;:8;:10::i;:::-;34148:5;34137:8;;:16;;;;;;;;;;;;;;;;;;33581:584;33370:795;34177:12;34193:8;;;;;;;;;;;34192:9;34177:24;;34303:19;:25;34323:4;34303:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34332:19;:23;34352:2;34332:23;;;;;;;;;;;;;;;;;;;;;;;;;34303:52;34299:100;;;34382:5;34372:15;;34299:100;34411:12;34438:26;34479:20;34514:21;34628:7;34624:1199;;;34686:13;34680:19;;:2;:19;;;:40;;;;;34719:1;34703:13;;:17;34680:40;34676:727;;;34748:34;34778:3;34748:25;34759:13;;34748:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;34741:41;;34850:13;;34830:16;;34823:4;:23;;;;:::i;:::-;34822:41;;;;:::i;:::-;34801:62;;34919:13;;34905:10;;34898:4;:17;;;;:::i;:::-;34897:35;;;;:::i;:::-;34882:50;;34990:13;;34975:11;;34968:4;:18;;;;:::i;:::-;34967:36;;;;:::i;:::-;34951:52;;34676:727;;;35075:13;35067:21;;:4;:21;;;:41;;;;;35107:1;35092:12;;:16;35067:41;35063:340;;;35136:33;35165:3;35136:24;35147:12;;35136:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35129:40;;35236:12;;35217:15;;35210:4;:22;;;;:::i;:::-;35209:39;;;;:::i;:::-;35188:60;;35304:12;;35291:9;;35284:4;:16;;;;:::i;:::-;35283:33;;;;:::i;:::-;35268:48;;35373:12;;35359:10;;35352:4;:17;;;;:::i;:::-;35351:34;;;;:::i;:::-;35335:50;;35063:340;34676:727;35429:1;35423:4;:7;35419:90;;;35451:42;35467:4;35481;35488;35451:15;:42::i;:::-;35419:90;35548:1;35527:18;:22;35523:128;;;35570:65;35594:4;35601:13;35616:18;35570:15;:65::i;:::-;35523:128;35686:1;35670:13;:17;35667:114;;;35707:58;35731:4;35738:11;;;;;;;;;;;35751:13;35707:15;:58::i;:::-;35667:114;35807:4;35797:14;;;;;:::i;:::-;;;34624:1199;35835:33;35851:4;35857:2;35861:6;35835:15;:33::i;:::-;31504:4372;;;;;;;31391:4485;;;;:::o;6083:191::-;6157:16;6176:6;;;;;;;;;;;6157:25;;6202:8;6193:6;;:17;;;;;;;;;;;;;;;;;;6257:8;6226:40;;6247:8;6226:40;;;;;;;;;;;;6146:128;6083:191;:::o;13952:733::-;14110:1;14092:20;;:6;:20;;;;14084:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14194:1;14173:23;;:9;:23;;;;14165:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:47;14270:6;14278:9;14289:6;14249:20;:47::i;:::-;14309:21;14333:9;:17;14343:6;14333:17;;;;;;;;;;;;;;;;14309:41;;14386:6;14369:13;:23;;14361:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14507:6;14491:13;:22;14471:9;:17;14481:6;14471:17;;;;;;;;;;;;;;;:42;;;;14559:6;14535:9;:20;14545:9;14535:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14600:9;14583:35;;14592:6;14583:35;;;14611:6;14583:35;;;;;;:::i;:::-;;;;;;;;14631:46;14651:6;14659:9;14670:6;14631:19;:46::i;:::-;14073:612;13952:733;;;:::o;36949:340::-;36988:23;37014:24;37032:4;37014:9;:24::i;:::-;36988:50;;37072:1;37053:15;:20;37049:59;;;37090:7;;;37049:59;37163:2;37142:18;;:23;;;;:::i;:::-;37124:15;:41;37120:115;;;37221:2;37200:18;;:23;;;;:::i;:::-;37182:41;;37120:115;37247:34;37265:15;37247:17;:34::i;:::-;36977:312;36949:340;:::o;20738:98::-;20796:7;20827:1;20823;:5;;;;:::i;:::-;20816:12;;20738:98;;;;:::o;21137:::-;21195:7;21226:1;21222;:5;;;;:::i;:::-;21215:12;;21137:98;;;;:::o;16791:125::-;;;;:::o;17520:124::-;;;;:::o;35884:572::-;36011:21;36049:1;36035:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36011:40;;36080:4;36062;36067:1;36062:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36106:4;;;;;;;;;;;36096;36101:1;36096:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;36123:62;36140:4;36155:15;36173:11;36123:8;:62::i;:::-;36224:15;:69;;;36308:11;36334:1;36379:4;36398:9;;;;;;;;;;;36422:15;36224:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35940:516;35884:572;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:227::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:10;12725:2;12717:6;12713:15;12706:35;12521:227;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12754:366;;;:::o;13126:419::-;13292:4;13330:2;13319:9;13315:18;13307:26;;13379:9;13373:4;13369:20;13365:1;13354:9;13350:17;13343:47;13407:131;13533:4;13407:131;:::i;:::-;13399:139;;13126:419;;;:::o;13551:143::-;13608:5;13639:6;13633:13;13624:22;;13655:33;13682:5;13655:33;:::i;:::-;13551:143;;;;:::o;13700:351::-;13770:6;13819:2;13807:9;13798:7;13794:23;13790:32;13787:119;;;13825:79;;:::i;:::-;13787:119;13945:1;13970:64;14026:7;14017:6;14006:9;14002:22;13970:64;:::i;:::-;13960:74;;13916:128;13700:351;;;;:::o;14057:114::-;14094:7;14134:30;14127:5;14123:42;14112:53;;14057:114;;;:::o;14177:122::-;14250:24;14268:5;14250:24;:::i;:::-;14243:5;14240:35;14230:63;;14289:1;14286;14279:12;14230:63;14177:122;:::o;14305:143::-;14362:5;14393:6;14387:13;14378:22;;14409:33;14436:5;14409:33;:::i;:::-;14305:143;;;;:::o;14454:93::-;14490:7;14530:10;14523:5;14519:22;14508:33;;14454:93;;;:::o;14553:120::-;14625:23;14642:5;14625:23;:::i;:::-;14618:5;14615:34;14605:62;;14663:1;14660;14653:12;14605:62;14553:120;:::o;14679:141::-;14735:5;14766:6;14760:13;14751:22;;14782:32;14808:5;14782:32;:::i;:::-;14679:141;;;;:::o;14826:661::-;14913:6;14921;14929;14978:2;14966:9;14957:7;14953:23;14949:32;14946:119;;;14984:79;;:::i;:::-;14946:119;15104:1;15129:64;15185:7;15176:6;15165:9;15161:22;15129:64;:::i;:::-;15119:74;;15075:128;15242:2;15268:64;15324:7;15315:6;15304:9;15300:22;15268:64;:::i;:::-;15258:74;;15213:129;15381:2;15407:63;15462:7;15453:6;15442:9;15438:22;15407:63;:::i;:::-;15397:73;;15352:128;14826:661;;;;;:::o;15493:118::-;15564:22;15580:5;15564:22;:::i;:::-;15557:5;15554:33;15544:61;;15601:1;15598;15591:12;15544:61;15493:118;:::o;15617:139::-;15672:5;15703:6;15697:13;15688:22;;15719:31;15744:5;15719:31;:::i;:::-;15617:139;;;;:::o;15762:347::-;15830:6;15879:2;15867:9;15858:7;15854:23;15850:32;15847:119;;;15885:79;;:::i;:::-;15847:119;16005:1;16030:62;16084:7;16075:6;16064:9;16060:22;16030:62;:::i;:::-;16020:72;;15976:126;15762:347;;;;:::o;16115:102::-;16157:8;16204:5;16201:1;16197:13;16176:34;;16115:102;;;:::o;16223:848::-;16284:5;16291:4;16315:6;16306:15;;16339:5;16330:14;;16353:712;16374:1;16364:8;16361:15;16353:712;;;16469:4;16464:3;16460:14;16454:4;16451:24;16448:50;;;16478:18;;:::i;:::-;16448:50;16528:1;16518:8;16514:16;16511:451;;;16943:4;16936:5;16932:16;16923:25;;16511:451;16993:4;16987;16983:15;16975:23;;17023:32;17046:8;17023:32;:::i;:::-;17011:44;;16353:712;;;16223:848;;;;;;;:::o;17077:1073::-;17131:5;17322:8;17312:40;;17343:1;17334:10;;17345:5;;17312:40;17371:4;17361:36;;17388:1;17379:10;;17390:5;;17361:36;17457:4;17505:1;17500:27;;;;17541:1;17536:191;;;;17450:277;;17500:27;17518:1;17509:10;;17520:5;;;17536:191;17581:3;17571:8;17568:17;17565:43;;;17588:18;;:::i;:::-;17565:43;17637:8;17634:1;17630:16;17621:25;;17672:3;17665:5;17662:14;17659:40;;;17679:18;;:::i;:::-;17659:40;17712:5;;;17450:277;;17836:2;17826:8;17823:16;17817:3;17811:4;17808:13;17804:36;17786:2;17776:8;17773:16;17768:2;17762:4;17759:12;17755:35;17739:111;17736:246;;;17892:8;17886:4;17882:19;17873:28;;17927:3;17920:5;17917:14;17914:40;;;17934:18;;:::i;:::-;17914:40;17967:5;;17736:246;18007:42;18045:3;18035:8;18029:4;18026:1;18007:42;:::i;:::-;17992:57;;;;18081:4;18076:3;18072:14;18065:5;18062:25;18059:51;;;18090:18;;:::i;:::-;18059:51;18139:4;18132:5;18128:16;18119:25;;17077:1073;;;;;;:::o;18156:281::-;18214:5;18238:23;18256:4;18238:23;:::i;:::-;18230:31;;18282:25;18298:8;18282:25;:::i;:::-;18270:37;;18326:104;18363:66;18353:8;18347:4;18326:104;:::i;:::-;18317:113;;18156:281;;;;:::o;18443:305::-;18483:3;18502:20;18520:1;18502:20;:::i;:::-;18497:25;;18536:20;18554:1;18536:20;:::i;:::-;18531:25;;18690:1;18622:66;18618:74;18615:1;18612:81;18609:107;;;18696:18;;:::i;:::-;18609:107;18740:1;18737;18733:9;18726:16;;18443:305;;;;:::o;18754:179::-;18894:31;18890:1;18882:6;18878:14;18871:55;18754:179;:::o;18939:366::-;19081:3;19102:67;19166:2;19161:3;19102:67;:::i;:::-;19095:74;;19178:93;19267:3;19178:93;:::i;:::-;19296:2;19291:3;19287:12;19280:19;;18939:366;;;:::o;19311:419::-;19477:4;19515:2;19504:9;19500:18;19492:26;;19564:9;19558:4;19554:20;19550:1;19539:9;19535:17;19528:47;19592:131;19718:4;19592:131;:::i;:::-;19584:139;;19311:419;;;:::o;19736:223::-;19876:34;19872:1;19864:6;19860:14;19853:58;19945:6;19940:2;19932:6;19928:15;19921:31;19736:223;:::o;19965:366::-;20107:3;20128:67;20192:2;20187:3;20128:67;:::i;:::-;20121:74;;20204:93;20293:3;20204:93;:::i;:::-;20322:2;20317:3;20313:12;20306:19;;19965:366;;;:::o;20337:419::-;20503:4;20541:2;20530:9;20526:18;20518:26;;20590:9;20584:4;20580:20;20576:1;20565:9;20561:17;20554:47;20618:131;20744:4;20618:131;:::i;:::-;20610:139;;20337:419;;;:::o;20762:240::-;20902:34;20898:1;20890:6;20886:14;20879:58;20971:23;20966:2;20958:6;20954:15;20947:48;20762:240;:::o;21008:366::-;21150:3;21171:67;21235:2;21230:3;21171:67;:::i;:::-;21164:74;;21247:93;21336:3;21247:93;:::i;:::-;21365:2;21360:3;21356:12;21349:19;;21008:366;;;:::o;21380:419::-;21546:4;21584:2;21573:9;21569:18;21561:26;;21633:9;21627:4;21623:20;21619:1;21608:9;21604:17;21597:47;21661:131;21787:4;21661:131;:::i;:::-;21653:139;;21380:419;;;:::o;21805:239::-;21945:34;21941:1;21933:6;21929:14;21922:58;22014:22;22009:2;22001:6;21997:15;21990:47;21805:239;:::o;22050:366::-;22192:3;22213:67;22277:2;22272:3;22213:67;:::i;:::-;22206:74;;22289:93;22378:3;22289:93;:::i;:::-;22407:2;22402:3;22398:12;22391:19;;22050:366;;;:::o;22422:419::-;22588:4;22626:2;22615:9;22611:18;22603:26;;22675:9;22669:4;22665:20;22661:1;22650:9;22646:17;22639:47;22703:131;22829:4;22703:131;:::i;:::-;22695:139;;22422:419;;;:::o;22847:225::-;22987:34;22983:1;22975:6;22971:14;22964:58;23056:8;23051:2;23043:6;23039:15;23032:33;22847:225;:::o;23078:366::-;23220:3;23241:67;23305:2;23300:3;23241:67;:::i;:::-;23234:74;;23317:93;23406:3;23317:93;:::i;:::-;23435:2;23430:3;23426:12;23419:19;;23078:366;;;:::o;23450:419::-;23616:4;23654:2;23643:9;23639:18;23631:26;;23703:9;23697:4;23693:20;23689:1;23678:9;23674:17;23667:47;23731:131;23857:4;23731:131;:::i;:::-;23723:139;;23450:419;;;:::o;23875:223::-;24015:34;24011:1;24003:6;23999:14;23992:58;24084:6;24079:2;24071:6;24067:15;24060:31;23875:223;:::o;24104:366::-;24246:3;24267:67;24331:2;24326:3;24267:67;:::i;:::-;24260:74;;24343:93;24432:3;24343:93;:::i;:::-;24461:2;24456:3;24452:12;24445:19;;24104:366;;;:::o;24476:419::-;24642:4;24680:2;24669:9;24665:18;24657:26;;24729:9;24723:4;24719:20;24715:1;24704:9;24700:17;24693:47;24757:131;24883:4;24757:131;:::i;:::-;24749:139;;24476:419;;;:::o;24901:221::-;25041:34;25037:1;25029:6;25025:14;25018:58;25110:4;25105:2;25097:6;25093:15;25086:29;24901:221;:::o;25128:366::-;25270:3;25291:67;25355:2;25350:3;25291:67;:::i;:::-;25284:74;;25367:93;25456:3;25367:93;:::i;:::-;25485:2;25480:3;25476:12;25469:19;;25128:366;;;:::o;25500:419::-;25666:4;25704:2;25693:9;25689:18;25681:26;;25753:9;25747:4;25743:20;25739:1;25728:9;25724:17;25717:47;25781:131;25907:4;25781:131;:::i;:::-;25773:139;;25500:419;;;:::o;25925:224::-;26065:34;26061:1;26053:6;26049:14;26042:58;26134:7;26129:2;26121:6;26117:15;26110:32;25925:224;:::o;26155:366::-;26297:3;26318:67;26382:2;26377:3;26318:67;:::i;:::-;26311:74;;26394:93;26483:3;26394:93;:::i;:::-;26512:2;26507:3;26503:12;26496:19;;26155:366;;;:::o;26527:419::-;26693:4;26731:2;26720:9;26716:18;26708:26;;26780:9;26774:4;26770:20;26766:1;26755:9;26751:17;26744:47;26808:131;26934:4;26808:131;:::i;:::-;26800:139;;26527:419;;;:::o;26952:222::-;27092:34;27088:1;27080:6;27076:14;27069:58;27161:5;27156:2;27148:6;27144:15;27137:30;26952:222;:::o;27180:366::-;27322:3;27343:67;27407:2;27402:3;27343:67;:::i;:::-;27336:74;;27419:93;27508:3;27419:93;:::i;:::-;27537:2;27532:3;27528:12;27521:19;;27180:366;;;:::o;27552:419::-;27718:4;27756:2;27745:9;27741:18;27733:26;;27805:9;27799:4;27795:20;27791:1;27780:9;27776:17;27769:47;27833:131;27959:4;27833:131;:::i;:::-;27825:139;;27552:419;;;:::o;27977:172::-;28117:24;28113:1;28105:6;28101:14;28094:48;27977:172;:::o;28155:366::-;28297:3;28318:67;28382:2;28377:3;28318:67;:::i;:::-;28311:74;;28394:93;28483:3;28394:93;:::i;:::-;28512:2;28507:3;28503:12;28496:19;;28155:366;;;:::o;28527:419::-;28693:4;28731:2;28720:9;28716:18;28708:26;;28780:9;28774:4;28770:20;28766:1;28755:9;28751:17;28744:47;28808:131;28934:4;28808:131;:::i;:::-;28800:139;;28527:419;;;:::o;28952:240::-;29092:34;29088:1;29080:6;29076:14;29069:58;29161:23;29156:2;29148:6;29144:15;29137:48;28952:240;:::o;29198:366::-;29340:3;29361:67;29425:2;29420:3;29361:67;:::i;:::-;29354:74;;29437:93;29526:3;29437:93;:::i;:::-;29555:2;29550:3;29546:12;29539:19;;29198:366;;;:::o;29570:419::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:169::-;30135:21;30131:1;30123:6;30119:14;30112:45;29995:169;:::o;30170:366::-;30312:3;30333:67;30397:2;30392:3;30333:67;:::i;:::-;30326:74;;30409:93;30498:3;30409:93;:::i;:::-;30527:2;30522:3;30518:12;30511:19;;30170:366;;;:::o;30542:419::-;30708:4;30746:2;30735:9;30731:18;30723:26;;30795:9;30789:4;30785:20;30781:1;30770:9;30766:17;30759:47;30823:131;30949:4;30823:131;:::i;:::-;30815:139;;30542:419;;;:::o;30967:191::-;31007:4;31027:20;31045:1;31027:20;:::i;:::-;31022:25;;31061:20;31079:1;31061:20;:::i;:::-;31056:25;;31100:1;31097;31094:8;31091:34;;;31105:18;;:::i;:::-;31091:34;31150:1;31147;31143:9;31135:17;;30967:191;;;;:::o;31164:225::-;31304:34;31300:1;31292:6;31288:14;31281:58;31373:8;31368:2;31360:6;31356:15;31349:33;31164:225;:::o;31395:366::-;31537:3;31558:67;31622:2;31617:3;31558:67;:::i;:::-;31551:74;;31634:93;31723:3;31634:93;:::i;:::-;31752:2;31747:3;31743:12;31736:19;;31395:366;;;:::o;31767:419::-;31933:4;31971:2;31960:9;31956:18;31948:26;;32020:9;32014:4;32010:20;32006:1;31995:9;31991:17;31984:47;32048:131;32174:4;32048:131;:::i;:::-;32040:139;;31767:419;;;:::o;32192:180::-;32240:77;32237:1;32230:88;32337:4;32334:1;32327:15;32361:4;32358:1;32351:15;32378:180;32426:77;32423:1;32416:88;32523:4;32520:1;32513:15;32547:4;32544:1;32537:15;32564:85;32609:7;32638:5;32627:16;;32564:85;;;:::o;32655:158::-;32713:9;32746:61;32764:42;32773:32;32799:5;32773:32;:::i;:::-;32764:42;:::i;:::-;32746:61;:::i;:::-;32733:74;;32655:158;;;:::o;32819:147::-;32914:45;32953:5;32914:45;:::i;:::-;32909:3;32902:58;32819:147;;:::o;32972:114::-;33039:6;33073:5;33067:12;33057:22;;32972:114;;;:::o;33092:184::-;33191:11;33225:6;33220:3;33213:19;33265:4;33260:3;33256:14;33241:29;;33092:184;;;;:::o;33282:132::-;33349:4;33372:3;33364:11;;33402:4;33397:3;33393:14;33385:22;;33282:132;;;:::o;33420:108::-;33497:24;33515:5;33497:24;:::i;:::-;33492:3;33485:37;33420:108;;:::o;33534:179::-;33603:10;33624:46;33666:3;33658:6;33624:46;:::i;:::-;33702:4;33697:3;33693:14;33679:28;;33534:179;;;;:::o;33719:113::-;33789:4;33821;33816:3;33812:14;33804:22;;33719:113;;;:::o;33868:732::-;33987:3;34016:54;34064:5;34016:54;:::i;:::-;34086:86;34165:6;34160:3;34086:86;:::i;:::-;34079:93;;34196:56;34246:5;34196:56;:::i;:::-;34275:7;34306:1;34291:284;34316:6;34313:1;34310:13;34291:284;;;34392:6;34386:13;34419:63;34478:3;34463:13;34419:63;:::i;:::-;34412:70;;34505:60;34558:6;34505:60;:::i;:::-;34495:70;;34351:224;34338:1;34335;34331:9;34326:14;;34291:284;;;34295:14;34591:3;34584:10;;33992:608;;;33868:732;;;;:::o;34606:831::-;34869:4;34907:3;34896:9;34892:19;34884:27;;34921:71;34989:1;34978:9;34974:17;34965:6;34921:71;:::i;:::-;35002:80;35078:2;35067:9;35063:18;35054:6;35002:80;:::i;:::-;35129:9;35123:4;35119:20;35114:2;35103:9;35099:18;35092:48;35157:108;35260:4;35251:6;35157:108;:::i;:::-;35149:116;;35275:72;35343:2;35332:9;35328:18;35319:6;35275:72;:::i;:::-;35357:73;35425:3;35414:9;35410:19;35401:6;35357:73;:::i;:::-;34606:831;;;;;;;;:::o
Swarm Source
ipfs://bc1b0e82aa3ca5e195449d73875ade417baaf8d851aa8b367901eb69992b0fbe
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.