Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 .RAR
Holders
84
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,135,008.465422342868126318 .RARValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Winrar
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-19 */ /** * SPDX-License-Identifier: MIT * https://twitter.com/WinRARonERC * https://t.me/winrarerc * https://win-rar.vip */ pragma solidity >=0.8.19; 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 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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 Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } 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 Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev 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 {} } 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 IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract Winrar is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); // Swapback bool private swapping; bool public swapbackEnb = false; uint256 public swapTokensAtAmount; uint256 public maxTokensForSwapback; //Anti-whale bool public limitsOn = true; bool public transferDelayOn = true; uint256 public maxWallets; uint256 public maxTransactionAmounts; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Fee receivers address public lpWallet; address public marketingWallet; address public devWallet; bool public tradingActive = false; uint256 public totalFeesBuy; uint256 public buyMFee; uint256 public buyLPFee; uint256 public buyDFee; uint256 public totalFeesSell; uint256 public sellMFee; uint256 public sellLPFee; uint256 public sellDFee; uint256 public tokensForMkt; uint256 public tokensForLP; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isFeeExempt; mapping(address => bool) public _isTxLimitExempt; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("Winrar", ".RAR") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); exclFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); exclFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMFee = 15; uint256 _buyLPFee = 0; uint256 _buyDFee = 0; uint256 _sellMFee = 90; uint256 _sellLPFee = 0; uint256 _sellDFee = 0; uint256 totalSupply = 1000000000 * 1e18; maxTransactionAmounts = (totalSupply * 20) / 1000; // 2% of total supply maxWallets = (totalSupply * 20) / 1000; // 2% of total supply swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapback trigger maxTokensForSwapback = (totalSupply * 5) / 100; // 5% max swapback buyMFee = _buyMFee; buyLPFee = _buyLPFee; buyDFee = _buyDFee; totalFeesBuy = buyMFee + buyLPFee + buyDFee; sellMFee = _sellMFee; sellLPFee = _sellLPFee; sellDFee = _sellDFee; totalFeesSell = sellMFee + sellLPFee + sellDFee; marketingWallet = address(msg.sender); devWallet = address(msg.sender); lpWallet = msg.sender; // exclude from paying fees or having max transaction amount exclFromFees(owner(), true); exclFromFees(address(this), true); exclFromFees(address(0xdead), true); exclFromFees(marketingWallet, true); exclFromMaxTransaction(owner(), true); exclFromMaxTransaction(address(this), true); exclFromMaxTransaction(address(0xdead), true); exclFromMaxTransaction(marketingWallet, 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 {} /// @dev Launches the token and enables trading. Irriversable. function winrar() external onlyOwner { tradingActive = true; swapbackEnb = true; } /// @dev Removes the max wallet and max transaction limits function removeTxLimits() external onlyOwner returns (bool) { limitsOn = false; return true; } /// @dev Disables the Same wallet block transfer delay function disTransferDelay() external onlyOwner returns (bool) { transferDelayOn = false; return true; } /// @dev Changes the minimum balance of tokens the contract must have before swapping tokens for ETH. Base 100000, so 0.5% = 500. function updSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= totalSupply()/ 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= 500 * totalSupply()/ 100000, "Swap amount cannot be higher than 0.5% total supply." ); require( newAmount <= maxTokensForSwapback, "Swap amount cannot be higher than maxTokensForSwapback" ); swapTokensAtAmount = newAmount; return true; } /// @dev Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50. function updMaxTokensForSwapback(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= swapTokensAtAmount, "Swap amount cannot be lower than swapTokensAtAmount" ); maxTokensForSwapback = newAmount; return true; } /// @dev Sets if a wallet is excluded from the max wallet and tx limits /// @param updAds The wallet to update /// @param isEx If the wallet is excluded or not function exclFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isTxLimitExempt[updAds] = isEx; } /// @dev Sets if the contract can sell tokens /// @param enabled set to false to disable selling function updSwapBEnabled(bool enabled) external onlyOwner { swapbackEnb = enabled; } /// @dev Sets the fees for buys /// @param _marketingFee The fee for the marketing wallet /// @param _liquidityFee The fee for the liquidity pool /// @param _devFee The fee for the dev wallet function updBuyFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { buyMFee = _marketingFee; buyLPFee = _liquidityFee; buyDFee = _devFee; totalFeesBuy = buyMFee + buyLPFee + buyDFee; require(totalFeesBuy <= 11, "Must keep fees at 11% or less"); } /// @dev Sets the fees for sells /// @param _marketingFee The fee for the marketing wallet /// @param _liquidityFee The fee for the liquidity pool /// @param _devFee The fee for the dev wallet function updSellFees( uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee ) external onlyOwner { sellMFee = _marketingFee; sellLPFee = _liquidityFee; sellDFee = _devFee; totalFeesSell = sellMFee + sellLPFee + sellDFee; require(totalFeesSell <= 11, "Must keep fees at 11% or less"); } /// @dev Sets if a wallet is excluded from fees /// @param account The wallet to update /// @param excluded If the wallet is excluded or not function exclFromFees(address account, bool excluded) public onlyOwner { _isFeeExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /// @dev Sets an address as a new liquidity pair. You probably dont want to do this. /// @param pair The new pair function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateLPWallet(address newLPWallet) external onlyOwner { lpWallet = newLPWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isFeeExempt[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 (limitsOn) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isFeeExempt[from] || _isFeeExempt[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayOn) { if ( to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair) ) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isTxLimitExempt[to] ) { require( amount <= maxTransactionAmounts, "Buy transfer amount exceeds the maxTransactionAmounts." ); require( amount + balanceOf(to) <= maxWallets, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isTxLimitExempt[from] ) { require( amount <= maxTransactionAmounts, "Sell transfer amount exceeds the maxTransactionAmounts." ); } else if (!_isTxLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallets, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapbackEnb && !swapping && !automatedMarketMakerPairs[from] && !_isFeeExempt[from] && !_isFeeExempt[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isFeeExempt[from] || _isFeeExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && totalFeesSell > 0) { fees = amount.mul(totalFeesSell).div(100); tokensForLP += (fees * sellLPFee) / totalFeesSell; tokensForDev += (fees * sellDFee) / totalFeesSell; tokensForMkt += (fees * sellMFee) / totalFeesSell; } // on buy else if (automatedMarketMakerPairs[from] && totalFeesBuy > 0) { fees = amount.mul(totalFeesBuy).div(100); tokensForLP += (fees * buyLPFee) / totalFeesBuy; tokensForDev += (fees * buyDFee) / totalFeesBuy; tokensForMkt += (fees * buyMFee) / totalFeesBuy; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, marketingWallet, block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lpWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } if (contractBalance > maxTokensForSwapback) { contractBalance = maxTokensForSwapback; } swapTokensForEth(contractBalance); tokensForLP = 0; tokensForMkt = 0; tokensForDev = 0; } }
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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exclFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exclFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensForSwapback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","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":"removeTxLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapbackEnb","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMkt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updMaxTokensForSwapback","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updSwapBEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"winrar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600e60146101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600681526020017f57696e72617200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f2e524152000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000e16565b5080600490816200010d919062000e16565b50505062000130620001246200065d60201b60201c565b6200066560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200072b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062000f67565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000f67565b6040518363ffffffff1660e01b8152600401620002af92919062000faa565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062000f67565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200072b60201b60201c565b6200035260a05160016200081560201b60201c565b6000600f90506000806000605a905060008060006b033b2e3c9fd0803ce800000090506103e860148262000387919062001006565b62000393919062001080565b600a819055506103e8601482620003ab919062001006565b620003b7919062001080565b600981905550612710600582620003cf919062001006565b620003db919062001080565b6006819055506064600582620003f2919062001006565b620003fe919062001080565b6007819055508660108190555085601181905550846012819055506012546011546010546200042e9190620010b8565b6200043a9190620010b8565b600f819055508360148190555082601581905550816016819055506016546015546014546200046a9190620010b8565b620004769190620010b8565b60138190555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200056162000553620008b660201b60201c565b6001620008e060201b60201c565b62000574306001620008e060201b60201c565b6200058961dead6001620008e060201b60201c565b620005be600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008e060201b60201c565b620005e0620005d2620008b660201b60201c565b60016200072b60201b60201c565b620005f33060016200072b60201b60201c565b6200060861dead60016200072b60201b60201c565b6200063d600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200072b60201b60201c565b6200064f338262000a1a60201b60201c565b505050505050505062001250565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200073b6200065d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000761620008b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b19062001154565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008f06200065d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000916620008b660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009669062001154565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a0e919062001193565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a839062001200565b60405180910390fd5b62000aa06000838362000b9260201b60201c565b806002600082825462000ab49190620010b8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b0b9190620010b8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b72919062001233565b60405180910390a362000b8e6000838362000b9760201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c1e57607f821691505b60208210810362000c345762000c3362000bd6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c9e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c5f565b62000caa868362000c5f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cf762000cf162000ceb8462000cc2565b62000ccc565b62000cc2565b9050919050565b6000819050919050565b62000d138362000cd6565b62000d2b62000d228262000cfe565b84845462000c6c565b825550505050565b600090565b62000d4262000d33565b62000d4f81848462000d08565b505050565b5b8181101562000d775762000d6b60008262000d38565b60018101905062000d55565b5050565b601f82111562000dc65762000d908162000c3a565b62000d9b8462000c4f565b8101602085101562000dab578190505b62000dc362000dba8562000c4f565b83018262000d54565b50505b505050565b600082821c905092915050565b600062000deb6000198460080262000dcb565b1980831691505092915050565b600062000e06838362000dd8565b9150826002028217905092915050565b62000e218262000b9c565b67ffffffffffffffff81111562000e3d5762000e3c62000ba7565b5b62000e49825462000c05565b62000e5682828562000d7b565b600060209050601f83116001811462000e8e576000841562000e79578287015190505b62000e85858262000df8565b86555062000ef5565b601f19841662000e9e8662000c3a565b60005b8281101562000ec85784890151825560018201915060208501945060208101905062000ea1565b8683101562000ee8578489015162000ee4601f89168262000dd8565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f2f8262000f02565b9050919050565b62000f418162000f22565b811462000f4d57600080fd5b50565b60008151905062000f618162000f36565b92915050565b60006020828403121562000f805762000f7f62000efd565b5b600062000f908482850162000f50565b91505092915050565b62000fa48162000f22565b82525050565b600060408201905062000fc1600083018562000f99565b62000fd0602083018462000f99565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010138262000cc2565b9150620010208362000cc2565b9250828202620010308162000cc2565b915082820484148315176200104a576200104962000fd7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200108d8262000cc2565b91506200109a8362000cc2565b925082620010ad57620010ac62001051565b5b828204905092915050565b6000620010c58262000cc2565b9150620010d28362000cc2565b9250828201905080821115620010ed57620010ec62000fd7565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200113c602083620010f3565b9150620011498262001104565b602082019050919050565b600060208201905081810360008301526200116f816200112d565b9050919050565b60008115159050919050565b6200118d8162001176565b82525050565b6000602082019050620011aa600083018462001182565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011e8601f83620010f3565b9150620011f582620011b0565b602082019050919050565b600060208201905081810360008301526200121b81620011d9565b9050919050565b6200122d8162000cc2565b82525050565b60006020820190506200124a600083018462001222565b92915050565b60805160a051614bb9620012a0600039600081816117d901528181611ce101526128b5015260008181610fd60152818161285d015281816136a20152818161378301526137aa0152614bb96000f3fe60806040526004361061036f5760003560e01c80636840aab6116101c6578063a60e799b116100f7578063c912cc4611610095578063dd62ed3e1161006f578063dd62ed3e14610cc5578063e2f4560514610d02578063f2fde38b14610d2d578063fbc10c5514610d5657610376565b8063c912cc4614610c58578063cceba87c14610c83578063d3e48cca14610cae57610376565b8063aacebbe3116100d1578063aacebbe314610b9c578063b62496f514610bc5578063bbc0c74214610c02578063c733da3b14610c2d57610376565b8063a60e799b14610b09578063a9059cbb14610b34578063aa27ad7814610b7157610376565b80638da5cb5b116101645780639a7a23d61161013e5780639a7a23d614610a3b5780639fccce3214610a64578063a0c973f114610a8f578063a457c2d714610acc57610376565b80638da5cb5b146109ba5780638ea5220f146109e557806395d89b4114610a1057610376565b8063715018a6116101a0578063715018a6146109225780637361846d1461093957806375f0a8741461096457806377c183521461098f57610376565b80636840aab6146108915780636ecd8790146108ba57806370a08231146108e557610376565b8063366d57b9116102a057806349bd5a5e1161023e5780634fbee193116102185780634fbee193146107d55780635ddf5583146108125780636303516c1461083d578063632938d81461086857610376565b806349bd5a5e146107545780634a3be4a41461077f5780634ac9e61a146107aa57610376565b80633f42e1351161027a5780633f42e13514610698578063464cdb0b146106c357806348b838e41461070057806348e134ae1461072957610376565b8063366d57b9146105f5578063395093511461061e5780633b2eccc41461065b57610376565b80631816467f1161030d57806323b872dd116102e757806323b872dd1461053757806327c8f8351461057457806330a136ad1461059f578063313ce567146105ca57610376565b80631816467f146104b857806319c59e2c146104e15780631c42047a1461050c57610376565b80630e47e822116103495780630e47e8221461040e57806311af660a146104395780631694505e1461046257806318160ddd1461048d57610376565b80630106aaef1461037b57806306fdde03146103a6578063095ea7b3146103d157610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7f565b60405161039d919061387d565b60405180910390f35b3480156103b257600080fd5b506103bb610e1f565b6040516103c89190613928565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f391906139e3565b610eb1565b604051610405919061387d565b60405180910390f35b34801561041a57600080fd5b50610423610ecf565b6040516104309190613a32565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190613a4d565b610ed5565b005b34801561046e57600080fd5b50610477610fd4565b6040516104849190613aff565b60405180910390f35b34801561049957600080fd5b506104a2610ff8565b6040516104af9190613a32565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613b1a565b611002565b005b3480156104ed57600080fd5b506104f661113e565b6040516105039190613a32565b60405180910390f35b34801561051857600080fd5b50610521611144565b60405161052e919061387d565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613b47565b611157565b60405161056b919061387d565b60405180910390f35b34801561058057600080fd5b5061058961124f565b6040516105969190613ba9565b60405180910390f35b3480156105ab57600080fd5b506105b4611255565b6040516105c19190613a32565b60405180910390f35b3480156105d657600080fd5b506105df61125b565b6040516105ec9190613be0565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613c27565b611264565b005b34801561062a57600080fd5b50610645600480360381019061064091906139e3565b6112fd565b604051610652919061387d565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190613c54565b6113a9565b60405161068f919061387d565b60405180910390f35b3480156106a457600080fd5b506106ad61147c565b6040516106ba9190613a32565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190613c54565b611482565b6040516106f7919061387d565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613c81565b611612565b005b34801561073557600080fd5b5061073e611737565b60405161074b919061387d565b60405180910390f35b34801561076057600080fd5b506107696117d7565b6040516107769190613ba9565b60405180910390f35b34801561078b57600080fd5b506107946117fb565b6040516107a19190613a32565b60405180910390f35b3480156107b657600080fd5b506107bf611801565b6040516107cc9190613a32565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613b1a565b611807565b604051610809919061387d565b60405180910390f35b34801561081e57600080fd5b5061082761185d565b6040516108349190613a32565b60405180910390f35b34801561084957600080fd5b50610852611863565b60405161085f9190613ba9565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190613a4d565b611889565b005b34801561089d57600080fd5b506108b860048036038101906108b39190613c81565b611988565b005b3480156108c657600080fd5b506108cf611a5f565b6040516108dc919061387d565b60405180910390f35b3480156108f157600080fd5b5061090c60048036038101906109079190613b1a565b611a72565b6040516109199190613a32565b60405180910390f35b34801561092e57600080fd5b50610937611aba565b005b34801561094557600080fd5b5061094e611b42565b60405161095b919061387d565b60405180910390f35b34801561097057600080fd5b50610979611b55565b6040516109869190613ba9565b60405180910390f35b34801561099b57600080fd5b506109a4611b7b565b6040516109b19190613a32565b60405180910390f35b3480156109c657600080fd5b506109cf611b81565b6040516109dc9190613ba9565b60405180910390f35b3480156109f157600080fd5b506109fa611bab565b604051610a079190613ba9565b60405180910390f35b348015610a1c57600080fd5b50610a25611bd1565b604051610a329190613928565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d9190613c81565b611c63565b005b348015610a7057600080fd5b50610a79611d7b565b604051610a869190613a32565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190613b1a565b611d81565b604051610ac3919061387d565b60405180910390f35b348015610ad857600080fd5b50610af36004803603810190610aee91906139e3565b611da1565b604051610b00919061387d565b60405180910390f35b348015610b1557600080fd5b50610b1e611e8c565b604051610b2b9190613a32565b60405180910390f35b348015610b4057600080fd5b50610b5b6004803603810190610b5691906139e3565b611e92565b604051610b68919061387d565b60405180910390f35b348015610b7d57600080fd5b50610b86611eb0565b604051610b939190613a32565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe9190613b1a565b611eb6565b005b348015610bd157600080fd5b50610bec6004803603810190610be79190613b1a565b611ff2565b604051610bf9919061387d565b60405180910390f35b348015610c0e57600080fd5b50610c17612012565b604051610c24919061387d565b60405180910390f35b348015610c3957600080fd5b50610c42612025565b604051610c4f9190613a32565b60405180910390f35b348015610c6457600080fd5b50610c6d61202b565b604051610c7a9190613a32565b60405180910390f35b348015610c8f57600080fd5b50610c98612031565b604051610ca59190613a32565b60405180910390f35b348015610cba57600080fd5b50610cc3612037565b005b348015610cd157600080fd5b50610cec6004803603810190610ce79190613cc1565b6120eb565b604051610cf99190613a32565b60405180910390f35b348015610d0e57600080fd5b50610d17612172565b604051610d249190613a32565b60405180910390f35b348015610d3957600080fd5b50610d546004803603810190610d4f9190613b1a565b612178565b005b348015610d6257600080fd5b50610d7d6004803603810190610d789190613b1a565b61226f565b005b6000610d8961232f565b73ffffffffffffffffffffffffffffffffffffffff16610da7611b81565b73ffffffffffffffffffffffffffffffffffffffff1614610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613d4d565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b606060038054610e2e90613d9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5a90613d9c565b8015610ea75780601f10610e7c57610100808354040283529160200191610ea7565b820191906000526020600020905b815481529060010190602001808311610e8a57829003601f168201915b5050505050905090565b6000610ec5610ebe61232f565b8484612337565b6001905092915050565b60135481565b610edd61232f565b73ffffffffffffffffffffffffffffffffffffffff16610efb611b81565b73ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613d4d565b60405180910390fd5b826010819055508160118190555080601281905550601254601154601054610f799190613dfc565b610f839190613dfc565b600f81905550600b600f541115610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690613e7c565b60405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61100a61232f565b73ffffffffffffffffffffffffffffffffffffffff16611028611b81565b73ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590613d4d565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600860009054906101000a900460ff1681565b6000611164848484612500565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111af61232f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690613f0e565b60405180910390fd5b6112438561123b61232f565b858403612337565b60019150509392505050565b61dead81565b60095481565b60006012905090565b61126c61232f565b73ffffffffffffffffffffffffffffffffffffffff1661128a611b81565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613d4d565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b600061139f61130a61232f565b84846001600061131861232f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461139a9190613dfc565b612337565b6001905092915050565b60006113b361232f565b73ffffffffffffffffffffffffffffffffffffffff166113d1611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90613d4d565b60405180910390fd5b60065482101561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613fa0565b60405180910390fd5b8160078190555060019050919050565b60165481565b600061148c61232f565b73ffffffffffffffffffffffffffffffffffffffff166114aa611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613d4d565b60405180910390fd5b620186a061150c610ff8565b6115169190613fef565b821015611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90614092565b60405180910390fd5b620186a0611564610ff8565b6101f461157191906140b2565b61157b9190613fef565b8211156115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490614166565b60405180910390fd5b600754821115611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f9906141f8565b60405180910390fd5b8160068190555060019050919050565b61161a61232f565b73ffffffffffffffffffffffffffffffffffffffff16611638611b81565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590613d4d565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161172b919061387d565b60405180910390a25050565b600061174161232f565b73ffffffffffffffffffffffffffffffffffffffff1661175f611b81565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613d4d565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5481565b60145481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61189161232f565b73ffffffffffffffffffffffffffffffffffffffff166118af611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613d4d565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461192d9190613dfc565b6119379190613dfc565b601381905550600b6013541115611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90613e7c565b60405180910390fd5b505050565b61199061232f565b73ffffffffffffffffffffffffffffffffffffffff166119ae611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613d4d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ac261232f565b73ffffffffffffffffffffffffffffffffffffffff16611ae0611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613d4d565b60405180910390fd5b611b406000613197565b565b600860019054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054611be090613d9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0c90613d9c565b8015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b5050505050905090565b611c6b61232f565b73ffffffffffffffffffffffffffffffffffffffff16611c89611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690613d4d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061428a565b60405180910390fd5b611d77828261325d565b5050565b60195481565b601b6020528060005260406000206000915054906101000a900460ff1681565b60008060016000611db061232f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e649061431c565b60405180910390fd5b611e81611e7861232f565b85858403612337565b600191505092915050565b60105481565b6000611ea6611e9f61232f565b8484612500565b6001905092915050565b60125481565b611ebe61232f565b73ffffffffffffffffffffffffffffffffffffffff16611edc611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990613d4d565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600e60149054906101000a900460ff1681565b60115481565b60155481565b60185481565b61203f61232f565b73ffffffffffffffffffffffffffffffffffffffff1661205d611b81565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90613d4d565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b61218061232f565b73ffffffffffffffffffffffffffffffffffffffff1661219e611b81565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613d4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a906143ae565b60405180910390fd5b61226c81613197565b50565b61227761232f565b73ffffffffffffffffffffffffffffffffffffffff16612295611b81565b73ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290613d4d565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614440565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c906144d2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124f39190613a32565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361256f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256690614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d5906145f6565b60405180910390fd5b600081036125f7576125f2838360006132fe565b613192565b600860009054906101000a900460ff1615612cba57612614611b81565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126825750612652611b81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126bb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126f5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270e5750600560149054906101000a900460ff16155b15612cb957600e60149054906101000a900460ff1661280857601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c85750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe90614662565b60405180910390fd5b5b600860019054906101000a900460ff16156129d057612825611b81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128ac57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cf5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061298a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129819061471a565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a735750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1a57600a54811115612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab4906147ac565b60405180910390fd5b600954612ac983611a72565b82612ad49190613dfc565b1115612b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0c90614818565b60405180910390fd5b612cb8565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbd5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0c57600a54811115612c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfe906148aa565b60405180910390fd5b612cb7565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cb657600954612c6983611a72565b82612c749190613dfc565b1115612cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cac90614818565b60405180910390fd5b5b5b5b5b5b6000612cc530611a72565b905060006006548210159050808015612cea5750600560159054906101000a900460ff165b8015612d035750600560149054906101000a900460ff16155b8015612d595750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612daf5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e055750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e49576001600560146101000a81548160ff021916908315150217905550612e2d61357d565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612eff5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0957600090505b6000811561318257601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6c57506000601354115b1561303957612f996064612f8b601354886135cd90919063ffffffff16565b6135e390919063ffffffff16565b905060135460155482612fac91906140b2565b612fb69190613fef565b60186000828254612fc79190613dfc565b9250508190555060135460165482612fdf91906140b2565b612fe99190613fef565b60196000828254612ffa9190613dfc565b925050819055506013546014548261301291906140b2565b61301c9190613fef565b6017600082825461302d9190613dfc565b9250508190555061315e565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561309457506000600f54115b1561315d576130c160646130b3600f54886135cd90919063ffffffff16565b6135e390919063ffffffff16565b9050600f54601154826130d491906140b2565b6130de9190613fef565b601860008282546130ef9190613dfc565b92505081905550600f546012548261310791906140b2565b6131119190613fef565b601960008282546131229190613dfc565b92505081905550600f546010548261313a91906140b2565b6131449190613fef565b601760008282546131559190613dfc565b925050819055505b5b6000811115613173576131728730836132fe565b5b808561317f91906148ca565b94505b61318d8787876132fe565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336490614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d3906145f6565b60405180910390fd5b6133e78383836135f9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346490614970565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135009190613dfc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135649190613a32565b60405180910390a36135778484846135fe565b50505050565b600061358830611a72565b90506000810361359857506135cb565b6007548111156135a85760075490505b6135b181613603565b600060188190555060006017819055506000601981905550505b565b600081836135db91906140b2565b905092915050565b600081836135f19190613fef565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156136205761361f614990565b5b60405190808252806020026020018201604052801561364e5781602001602082028036833780820191505090505b5090503081600081518110613666576136656149bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372f9190614a03565b81600181518110613743576137426149bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137a8307f000000000000000000000000000000000000000000000000000000000000000084612337565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161382c959493929190614b29565b600060405180830381600087803b15801561384657600080fd5b505af115801561385a573d6000803e3d6000fd5b505050505050565b60008115159050919050565b61387781613862565b82525050565b6000602082019050613892600083018461386e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138d25780820151818401526020810190506138b7565b60008484015250505050565b6000601f19601f8301169050919050565b60006138fa82613898565b61390481856138a3565b93506139148185602086016138b4565b61391d816138de565b840191505092915050565b6000602082019050818103600083015261394281846138ef565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061397a8261394f565b9050919050565b61398a8161396f565b811461399557600080fd5b50565b6000813590506139a781613981565b92915050565b6000819050919050565b6139c0816139ad565b81146139cb57600080fd5b50565b6000813590506139dd816139b7565b92915050565b600080604083850312156139fa576139f961394a565b5b6000613a0885828601613998565b9250506020613a19858286016139ce565b9150509250929050565b613a2c816139ad565b82525050565b6000602082019050613a476000830184613a23565b92915050565b600080600060608486031215613a6657613a6561394a565b5b6000613a74868287016139ce565b9350506020613a85868287016139ce565b9250506040613a96868287016139ce565b9150509250925092565b6000819050919050565b6000613ac5613ac0613abb8461394f565b613aa0565b61394f565b9050919050565b6000613ad782613aaa565b9050919050565b6000613ae982613acc565b9050919050565b613af981613ade565b82525050565b6000602082019050613b146000830184613af0565b92915050565b600060208284031215613b3057613b2f61394a565b5b6000613b3e84828501613998565b91505092915050565b600080600060608486031215613b6057613b5f61394a565b5b6000613b6e86828701613998565b9350506020613b7f86828701613998565b9250506040613b90868287016139ce565b9150509250925092565b613ba38161396f565b82525050565b6000602082019050613bbe6000830184613b9a565b92915050565b600060ff82169050919050565b613bda81613bc4565b82525050565b6000602082019050613bf56000830184613bd1565b92915050565b613c0481613862565b8114613c0f57600080fd5b50565b600081359050613c2181613bfb565b92915050565b600060208284031215613c3d57613c3c61394a565b5b6000613c4b84828501613c12565b91505092915050565b600060208284031215613c6a57613c6961394a565b5b6000613c78848285016139ce565b91505092915050565b60008060408385031215613c9857613c9761394a565b5b6000613ca685828601613998565b9250506020613cb785828601613c12565b9150509250929050565b60008060408385031215613cd857613cd761394a565b5b6000613ce685828601613998565b9250506020613cf785828601613998565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d376020836138a3565b9150613d4282613d01565b602082019050919050565b60006020820190508181036000830152613d6681613d2a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613db457607f821691505b602082108103613dc757613dc6613d6d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e07826139ad565b9150613e12836139ad565b9250828201905080821115613e2a57613e29613dcd565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613e66601d836138a3565b9150613e7182613e30565b602082019050919050565b60006020820190508181036000830152613e9581613e59565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ef86028836138a3565b9150613f0382613e9c565b604082019050919050565b60006020820190508181036000830152613f2781613eeb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b6000613f8a6033836138a3565b9150613f9582613f2e565b604082019050919050565b60006020820190508181036000830152613fb981613f7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ffa826139ad565b9150614005836139ad565b92508261401557614014613fc0565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061407c6035836138a3565b915061408782614020565b604082019050919050565b600060208201905081810360008301526140ab8161406f565b9050919050565b60006140bd826139ad565b91506140c8836139ad565b92508282026140d6816139ad565b915082820484148315176140ed576140ec613dcd565b5b5092915050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141506034836138a3565b915061415b826140f4565b604082019050919050565b6000602082019050818103600083015261417f81614143565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b60006141e26036836138a3565b91506141ed82614186565b604082019050919050565b60006020820190508181036000830152614211816141d5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142746039836138a3565b915061427f82614218565b604082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143066025836138a3565b9150614311826142aa565b604082019050919050565b60006020820190508181036000830152614335816142f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143986026836138a3565b91506143a38261433c565b604082019050919050565b600060208201905081810360008301526143c78161438b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061442a6024836138a3565b9150614435826143ce565b604082019050919050565b600060208201905081810360008301526144598161441d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144bc6022836138a3565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061454e6025836138a3565b9150614559826144f2565b604082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145e06023836138a3565b91506145eb82614584565b604082019050919050565b6000602082019050818103600083015261460f816145d3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061464c6016836138a3565b915061465782614616565b602082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006147046049836138a3565b915061470f82614682565b606082019050919050565b60006020820190508181036000830152614733816146f7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e74732e00000000000000000000602082015250565b60006147966036836138a3565b91506147a18261473a565b604082019050919050565b600060208201905081810360008301526147c581614789565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006148026013836138a3565b915061480d826147cc565b602082019050919050565b60006020820190508181036000830152614831816147f5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e74732e000000000000000000602082015250565b60006148946037836138a3565b915061489f82614838565b604082019050919050565b600060208201905081810360008301526148c381614887565b9050919050565b60006148d5826139ad565b91506148e0836139ad565b92508282039050818111156148f8576148f7613dcd565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061495a6026836138a3565b9150614965826148fe565b604082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149fd81613981565b92915050565b600060208284031215614a1957614a1861394a565b5b6000614a27848285016149ee565b91505092915050565b6000819050919050565b6000614a55614a50614a4b84614a30565b613aa0565b6139ad565b9050919050565b614a6581614a3a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614aa08161396f565b82525050565b6000614ab28383614a97565b60208301905092915050565b6000602082019050919050565b6000614ad682614a6b565b614ae08185614a76565b9350614aeb83614a87565b8060005b83811015614b1c578151614b038882614aa6565b9750614b0e83614abe565b925050600181019050614aef565b5085935050505092915050565b600060a082019050614b3e6000830188613a23565b614b4b6020830187614a5c565b8181036040830152614b5d8186614acb565b9050614b6c6060830185613b9a565b614b796080830184613a23565b969550505050505056fea2646970667358221220e67ffa2f88549c4e4f5c87b02c14e47e5b01195e29448348684a5168b688905564736f6c63430008130033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80636840aab6116101c6578063a60e799b116100f7578063c912cc4611610095578063dd62ed3e1161006f578063dd62ed3e14610cc5578063e2f4560514610d02578063f2fde38b14610d2d578063fbc10c5514610d5657610376565b8063c912cc4614610c58578063cceba87c14610c83578063d3e48cca14610cae57610376565b8063aacebbe3116100d1578063aacebbe314610b9c578063b62496f514610bc5578063bbc0c74214610c02578063c733da3b14610c2d57610376565b8063a60e799b14610b09578063a9059cbb14610b34578063aa27ad7814610b7157610376565b80638da5cb5b116101645780639a7a23d61161013e5780639a7a23d614610a3b5780639fccce3214610a64578063a0c973f114610a8f578063a457c2d714610acc57610376565b80638da5cb5b146109ba5780638ea5220f146109e557806395d89b4114610a1057610376565b8063715018a6116101a0578063715018a6146109225780637361846d1461093957806375f0a8741461096457806377c183521461098f57610376565b80636840aab6146108915780636ecd8790146108ba57806370a08231146108e557610376565b8063366d57b9116102a057806349bd5a5e1161023e5780634fbee193116102185780634fbee193146107d55780635ddf5583146108125780636303516c1461083d578063632938d81461086857610376565b806349bd5a5e146107545780634a3be4a41461077f5780634ac9e61a146107aa57610376565b80633f42e1351161027a5780633f42e13514610698578063464cdb0b146106c357806348b838e41461070057806348e134ae1461072957610376565b8063366d57b9146105f5578063395093511461061e5780633b2eccc41461065b57610376565b80631816467f1161030d57806323b872dd116102e757806323b872dd1461053757806327c8f8351461057457806330a136ad1461059f578063313ce567146105ca57610376565b80631816467f146104b857806319c59e2c146104e15780631c42047a1461050c57610376565b80630e47e822116103495780630e47e8221461040e57806311af660a146104395780631694505e1461046257806318160ddd1461048d57610376565b80630106aaef1461037b57806306fdde03146103a6578063095ea7b3146103d157610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d7f565b60405161039d919061387d565b60405180910390f35b3480156103b257600080fd5b506103bb610e1f565b6040516103c89190613928565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f391906139e3565b610eb1565b604051610405919061387d565b60405180910390f35b34801561041a57600080fd5b50610423610ecf565b6040516104309190613a32565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b9190613a4d565b610ed5565b005b34801561046e57600080fd5b50610477610fd4565b6040516104849190613aff565b60405180910390f35b34801561049957600080fd5b506104a2610ff8565b6040516104af9190613a32565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190613b1a565b611002565b005b3480156104ed57600080fd5b506104f661113e565b6040516105039190613a32565b60405180910390f35b34801561051857600080fd5b50610521611144565b60405161052e919061387d565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613b47565b611157565b60405161056b919061387d565b60405180910390f35b34801561058057600080fd5b5061058961124f565b6040516105969190613ba9565b60405180910390f35b3480156105ab57600080fd5b506105b4611255565b6040516105c19190613a32565b60405180910390f35b3480156105d657600080fd5b506105df61125b565b6040516105ec9190613be0565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613c27565b611264565b005b34801561062a57600080fd5b50610645600480360381019061064091906139e3565b6112fd565b604051610652919061387d565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190613c54565b6113a9565b60405161068f919061387d565b60405180910390f35b3480156106a457600080fd5b506106ad61147c565b6040516106ba9190613a32565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190613c54565b611482565b6040516106f7919061387d565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190613c81565b611612565b005b34801561073557600080fd5b5061073e611737565b60405161074b919061387d565b60405180910390f35b34801561076057600080fd5b506107696117d7565b6040516107769190613ba9565b60405180910390f35b34801561078b57600080fd5b506107946117fb565b6040516107a19190613a32565b60405180910390f35b3480156107b657600080fd5b506107bf611801565b6040516107cc9190613a32565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613b1a565b611807565b604051610809919061387d565b60405180910390f35b34801561081e57600080fd5b5061082761185d565b6040516108349190613a32565b60405180910390f35b34801561084957600080fd5b50610852611863565b60405161085f9190613ba9565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190613a4d565b611889565b005b34801561089d57600080fd5b506108b860048036038101906108b39190613c81565b611988565b005b3480156108c657600080fd5b506108cf611a5f565b6040516108dc919061387d565b60405180910390f35b3480156108f157600080fd5b5061090c60048036038101906109079190613b1a565b611a72565b6040516109199190613a32565b60405180910390f35b34801561092e57600080fd5b50610937611aba565b005b34801561094557600080fd5b5061094e611b42565b60405161095b919061387d565b60405180910390f35b34801561097057600080fd5b50610979611b55565b6040516109869190613ba9565b60405180910390f35b34801561099b57600080fd5b506109a4611b7b565b6040516109b19190613a32565b60405180910390f35b3480156109c657600080fd5b506109cf611b81565b6040516109dc9190613ba9565b60405180910390f35b3480156109f157600080fd5b506109fa611bab565b604051610a079190613ba9565b60405180910390f35b348015610a1c57600080fd5b50610a25611bd1565b604051610a329190613928565b60405180910390f35b348015610a4757600080fd5b50610a626004803603810190610a5d9190613c81565b611c63565b005b348015610a7057600080fd5b50610a79611d7b565b604051610a869190613a32565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190613b1a565b611d81565b604051610ac3919061387d565b60405180910390f35b348015610ad857600080fd5b50610af36004803603810190610aee91906139e3565b611da1565b604051610b00919061387d565b60405180910390f35b348015610b1557600080fd5b50610b1e611e8c565b604051610b2b9190613a32565b60405180910390f35b348015610b4057600080fd5b50610b5b6004803603810190610b5691906139e3565b611e92565b604051610b68919061387d565b60405180910390f35b348015610b7d57600080fd5b50610b86611eb0565b604051610b939190613a32565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe9190613b1a565b611eb6565b005b348015610bd157600080fd5b50610bec6004803603810190610be79190613b1a565b611ff2565b604051610bf9919061387d565b60405180910390f35b348015610c0e57600080fd5b50610c17612012565b604051610c24919061387d565b60405180910390f35b348015610c3957600080fd5b50610c42612025565b604051610c4f9190613a32565b60405180910390f35b348015610c6457600080fd5b50610c6d61202b565b604051610c7a9190613a32565b60405180910390f35b348015610c8f57600080fd5b50610c98612031565b604051610ca59190613a32565b60405180910390f35b348015610cba57600080fd5b50610cc3612037565b005b348015610cd157600080fd5b50610cec6004803603810190610ce79190613cc1565b6120eb565b604051610cf99190613a32565b60405180910390f35b348015610d0e57600080fd5b50610d17612172565b604051610d249190613a32565b60405180910390f35b348015610d3957600080fd5b50610d546004803603810190610d4f9190613b1a565b612178565b005b348015610d6257600080fd5b50610d7d6004803603810190610d789190613b1a565b61226f565b005b6000610d8961232f565b73ffffffffffffffffffffffffffffffffffffffff16610da7611b81565b73ffffffffffffffffffffffffffffffffffffffff1614610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613d4d565b60405180910390fd5b6000600860006101000a81548160ff0219169083151502179055506001905090565b606060038054610e2e90613d9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5a90613d9c565b8015610ea75780601f10610e7c57610100808354040283529160200191610ea7565b820191906000526020600020905b815481529060010190602001808311610e8a57829003601f168201915b5050505050905090565b6000610ec5610ebe61232f565b8484612337565b6001905092915050565b60135481565b610edd61232f565b73ffffffffffffffffffffffffffffffffffffffff16610efb611b81565b73ffffffffffffffffffffffffffffffffffffffff1614610f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4890613d4d565b60405180910390fd5b826010819055508160118190555080601281905550601254601154601054610f799190613dfc565b610f839190613dfc565b600f81905550600b600f541115610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690613e7c565b60405180910390fd5b505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61100a61232f565b73ffffffffffffffffffffffffffffffffffffffff16611028611b81565b73ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590613d4d565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600860009054906101000a900460ff1681565b6000611164848484612500565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111af61232f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690613f0e565b60405180910390fd5b6112438561123b61232f565b858403612337565b60019150509392505050565b61dead81565b60095481565b60006012905090565b61126c61232f565b73ffffffffffffffffffffffffffffffffffffffff1661128a611b81565b73ffffffffffffffffffffffffffffffffffffffff16146112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790613d4d565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b600061139f61130a61232f565b84846001600061131861232f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461139a9190613dfc565b612337565b6001905092915050565b60006113b361232f565b73ffffffffffffffffffffffffffffffffffffffff166113d1611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90613d4d565b60405180910390fd5b60065482101561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613fa0565b60405180910390fd5b8160078190555060019050919050565b60165481565b600061148c61232f565b73ffffffffffffffffffffffffffffffffffffffff166114aa611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613d4d565b60405180910390fd5b620186a061150c610ff8565b6115169190613fef565b821015611558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154f90614092565b60405180910390fd5b620186a0611564610ff8565b6101f461157191906140b2565b61157b9190613fef565b8211156115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490614166565b60405180910390fd5b600754821115611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f9906141f8565b60405180910390fd5b8160068190555060019050919050565b61161a61232f565b73ffffffffffffffffffffffffffffffffffffffff16611638611b81565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590613d4d565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161172b919061387d565b60405180910390a25050565b600061174161232f565b73ffffffffffffffffffffffffffffffffffffffff1661175f611b81565b73ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613d4d565b60405180910390fd5b6000600860016101000a81548160ff0219169083151502179055506001905090565b7f0000000000000000000000003efd0487e97254f4ed867621e5d62646e4536ea781565b600a5481565b60145481565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61189161232f565b73ffffffffffffffffffffffffffffffffffffffff166118af611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613d4d565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461192d9190613dfc565b6119379190613dfc565b601381905550600b6013541115611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90613e7c565b60405180910390fd5b505050565b61199061232f565b73ffffffffffffffffffffffffffffffffffffffff166119ae611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613d4d565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611ac261232f565b73ffffffffffffffffffffffffffffffffffffffff16611ae0611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613d4d565b60405180910390fd5b611b406000613197565b565b600860019054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054611be090613d9c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0c90613d9c565b8015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b5050505050905090565b611c6b61232f565b73ffffffffffffffffffffffffffffffffffffffff16611c89611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690613d4d565b60405180910390fd5b7f0000000000000000000000003efd0487e97254f4ed867621e5d62646e4536ea773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061428a565b60405180910390fd5b611d77828261325d565b5050565b60195481565b601b6020528060005260406000206000915054906101000a900460ff1681565b60008060016000611db061232f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e649061431c565b60405180910390fd5b611e81611e7861232f565b85858403612337565b600191505092915050565b60105481565b6000611ea6611e9f61232f565b8484612500565b6001905092915050565b60125481565b611ebe61232f565b73ffffffffffffffffffffffffffffffffffffffff16611edc611b81565b73ffffffffffffffffffffffffffffffffffffffff1614611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990613d4d565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600e60149054906101000a900460ff1681565b60115481565b60155481565b60185481565b61203f61232f565b73ffffffffffffffffffffffffffffffffffffffff1661205d611b81565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90613d4d565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b61218061232f565b73ffffffffffffffffffffffffffffffffffffffff1661219e611b81565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb90613d4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a906143ae565b60405180910390fd5b61226c81613197565b50565b61227761232f565b73ffffffffffffffffffffffffffffffffffffffff16612295611b81565b73ffffffffffffffffffffffffffffffffffffffff16146122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290613d4d565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614440565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c906144d2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124f39190613a32565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361256f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256690614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d5906145f6565b60405180910390fd5b600081036125f7576125f2838360006132fe565b613192565b600860009054906101000a900460ff1615612cba57612614611b81565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126825750612652611b81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126bb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126f5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270e5750600560149054906101000a900460ff16155b15612cb957600e60149054906101000a900460ff1661280857601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c85750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe90614662565b60405180910390fd5b5b600860019054906101000a900460ff16156129d057612825611b81565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128ac57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290457507f0000000000000000000000003efd0487e97254f4ed867621e5d62646e4536ea773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129cf5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061298a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129819061471a565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a735750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1a57600a54811115612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab4906147ac565b60405180910390fd5b600954612ac983611a72565b82612ad49190613dfc565b1115612b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0c90614818565b60405180910390fd5b612cb8565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbd5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0c57600a54811115612c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfe906148aa565b60405180910390fd5b612cb7565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cb657600954612c6983611a72565b82612c749190613dfc565b1115612cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cac90614818565b60405180910390fd5b5b5b5b5b5b6000612cc530611a72565b905060006006548210159050808015612cea5750600560159054906101000a900460ff165b8015612d035750600560149054906101000a900460ff16155b8015612d595750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612daf5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e055750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e49576001600560146101000a81548160ff021916908315150217905550612e2d61357d565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612eff5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0957600090505b6000811561318257601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6c57506000601354115b1561303957612f996064612f8b601354886135cd90919063ffffffff16565b6135e390919063ffffffff16565b905060135460155482612fac91906140b2565b612fb69190613fef565b60186000828254612fc79190613dfc565b9250508190555060135460165482612fdf91906140b2565b612fe99190613fef565b60196000828254612ffa9190613dfc565b925050819055506013546014548261301291906140b2565b61301c9190613fef565b6017600082825461302d9190613dfc565b9250508190555061315e565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561309457506000600f54115b1561315d576130c160646130b3600f54886135cd90919063ffffffff16565b6135e390919063ffffffff16565b9050600f54601154826130d491906140b2565b6130de9190613fef565b601860008282546130ef9190613dfc565b92505081905550600f546012548261310791906140b2565b6131119190613fef565b601960008282546131229190613dfc565b92505081905550600f546010548261313a91906140b2565b6131449190613fef565b601760008282546131559190613dfc565b925050819055505b5b6000811115613173576131728730836132fe565b5b808561317f91906148ca565b94505b61318d8787876132fe565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361336d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336490614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d3906145f6565b60405180910390fd5b6133e78383836135f9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561346d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346490614970565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135009190613dfc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135649190613a32565b60405180910390a36135778484846135fe565b50505050565b600061358830611a72565b90506000810361359857506135cb565b6007548111156135a85760075490505b6135b181613603565b600060188190555060006017819055506000601981905550505b565b600081836135db91906140b2565b905092915050565b600081836135f19190613fef565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156136205761361f614990565b5b60405190808252806020026020018201604052801561364e5781602001602082028036833780820191505090505b5090503081600081518110613666576136656149bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372f9190614a03565b81600181518110613743576137426149bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137a8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612337565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b815260040161382c959493929190614b29565b600060405180830381600087803b15801561384657600080fd5b505af115801561385a573d6000803e3d6000fd5b505050505050565b60008115159050919050565b61387781613862565b82525050565b6000602082019050613892600083018461386e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138d25780820151818401526020810190506138b7565b60008484015250505050565b6000601f19601f8301169050919050565b60006138fa82613898565b61390481856138a3565b93506139148185602086016138b4565b61391d816138de565b840191505092915050565b6000602082019050818103600083015261394281846138ef565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061397a8261394f565b9050919050565b61398a8161396f565b811461399557600080fd5b50565b6000813590506139a781613981565b92915050565b6000819050919050565b6139c0816139ad565b81146139cb57600080fd5b50565b6000813590506139dd816139b7565b92915050565b600080604083850312156139fa576139f961394a565b5b6000613a0885828601613998565b9250506020613a19858286016139ce565b9150509250929050565b613a2c816139ad565b82525050565b6000602082019050613a476000830184613a23565b92915050565b600080600060608486031215613a6657613a6561394a565b5b6000613a74868287016139ce565b9350506020613a85868287016139ce565b9250506040613a96868287016139ce565b9150509250925092565b6000819050919050565b6000613ac5613ac0613abb8461394f565b613aa0565b61394f565b9050919050565b6000613ad782613aaa565b9050919050565b6000613ae982613acc565b9050919050565b613af981613ade565b82525050565b6000602082019050613b146000830184613af0565b92915050565b600060208284031215613b3057613b2f61394a565b5b6000613b3e84828501613998565b91505092915050565b600080600060608486031215613b6057613b5f61394a565b5b6000613b6e86828701613998565b9350506020613b7f86828701613998565b9250506040613b90868287016139ce565b9150509250925092565b613ba38161396f565b82525050565b6000602082019050613bbe6000830184613b9a565b92915050565b600060ff82169050919050565b613bda81613bc4565b82525050565b6000602082019050613bf56000830184613bd1565b92915050565b613c0481613862565b8114613c0f57600080fd5b50565b600081359050613c2181613bfb565b92915050565b600060208284031215613c3d57613c3c61394a565b5b6000613c4b84828501613c12565b91505092915050565b600060208284031215613c6a57613c6961394a565b5b6000613c78848285016139ce565b91505092915050565b60008060408385031215613c9857613c9761394a565b5b6000613ca685828601613998565b9250506020613cb785828601613c12565b9150509250929050565b60008060408385031215613cd857613cd761394a565b5b6000613ce685828601613998565b9250506020613cf785828601613998565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d376020836138a3565b9150613d4282613d01565b602082019050919050565b60006020820190508181036000830152613d6681613d2a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613db457607f821691505b602082108103613dc757613dc6613d6d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e07826139ad565b9150613e12836139ad565b9250828201905080821115613e2a57613e29613dcd565b5b92915050565b7f4d757374206b656570206665657320617420313125206f72206c657373000000600082015250565b6000613e66601d836138a3565b9150613e7182613e30565b602082019050919050565b60006020820190508181036000830152613e9581613e59565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ef86028836138a3565b9150613f0382613e9c565b604082019050919050565b60006020820190508181036000830152613f2781613eeb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f2073776170546f6b656e734174416d6f756e7400000000000000000000000000602082015250565b6000613f8a6033836138a3565b9150613f9582613f2e565b604082019050919050565b60006020820190508181036000830152613fb981613f7d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ffa826139ad565b9150614005836139ad565b92508261401557614014613fc0565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061407c6035836138a3565b915061408782614020565b604082019050919050565b600060208201905081810360008301526140ab8161406f565b9050919050565b60006140bd826139ad565b91506140c8836139ad565b92508282026140d6816139ad565b915082820484148315176140ed576140ec613dcd565b5b5092915050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141506034836138a3565b915061415b826140f4565b604082019050919050565b6000602082019050818103600083015261417f81614143565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e206d6178546f6b656e73466f72537761706261636b00000000000000000000602082015250565b60006141e26036836138a3565b91506141ed82614186565b604082019050919050565b60006020820190508181036000830152614211816141d5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142746039836138a3565b915061427f82614218565b604082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143066025836138a3565b9150614311826142aa565b604082019050919050565b60006020820190508181036000830152614335816142f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143986026836138a3565b91506143a38261433c565b604082019050919050565b600060208201905081810360008301526143c78161438b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061442a6024836138a3565b9150614435826143ce565b604082019050919050565b600060208201905081810360008301526144598161441d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144bc6022836138a3565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061454e6025836138a3565b9150614559826144f2565b604082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145e06023836138a3565b91506145eb82614584565b604082019050919050565b6000602082019050818103600083015261460f816145d3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061464c6016836138a3565b915061465782614616565b602082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006147046049836138a3565b915061470f82614682565b606082019050919050565b60006020820190508181036000830152614733816146f7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e74732e00000000000000000000602082015250565b60006147966036836138a3565b91506147a18261473a565b604082019050919050565b600060208201905081810360008301526147c581614789565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006148026013836138a3565b915061480d826147cc565b602082019050919050565b60006020820190508181036000830152614831816147f5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e74732e000000000000000000602082015250565b60006148946037836138a3565b915061489f82614838565b604082019050919050565b600060208201905081810360008301526148c381614887565b9050919050565b60006148d5826139ad565b91506148e0836139ad565b92508282039050818111156148f8576148f7613dcd565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061495a6026836138a3565b9150614965826148fe565b604082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149fd81613981565b92915050565b600060208284031215614a1957614a1861394a565b5b6000614a27848285016149ee565b91505092915050565b6000819050919050565b6000614a55614a50614a4b84614a30565b613aa0565b6139ad565b9050919050565b614a6581614a3a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614aa08161396f565b82525050565b6000614ab28383614a97565b60208301905092915050565b6000602082019050919050565b6000614ad682614a6b565b614ae08185614a76565b9350614aeb83614a87565b8060005b83811015614b1c578151614b038882614aa6565b9750614b0e83614abe565b925050600181019050614aef565b5085935050505092915050565b600060a082019050614b3e6000830188613a23565b614b4b6020830187614a5c565b8181036040830152614b5d8186614acb565b9050614b6c6060830185613b9a565b614b796080830184613a23565b969550505050505056fea2646970667358221220e67ffa2f88549c4e4f5c87b02c14e47e5b01195e29448348684a5168b688905564736f6c63430008130033
Deployed Bytecode Sourcemap
24976:15793:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29739:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10799:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12966:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25967:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32048:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25052:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11919:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34361:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25843:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25402;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13617:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25155:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25477:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11761:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31726:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14518:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30945:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26063:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30193:636;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33174:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29924:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25110:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25509:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26002:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34526:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26095:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25699:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32635:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31462:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25262:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12090:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21823:103;;;;;;;;;;;;;:::i;:::-;;25436:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25729:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25340:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21172:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25766:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11018:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33478:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26162:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26331:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15236:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25877:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12430:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25936:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33986:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26537:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25801:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25906:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26032:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26129:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29562:105;;;;;;;;;;;;;:::i;:::-;;12668:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25300:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22081:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34225:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29739:117;29793:4;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29821:5:::1;29810:8;;:16;;;;;;;;;;;;;;;;;;29844:4;29837:11;;29739:117:::0;:::o;10799:100::-;10853:13;10886:5;10879:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10799:100;:::o;12966:169::-;13049:4;13066:39;13075:12;:10;:12::i;:::-;13089:7;13098:6;13066:8;:39::i;:::-;13123:4;13116:11;;12966:169;;;;:::o;25967:28::-;;;;:::o;32048:366::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32205:13:::1;32195:7;:23;;;;32240:13;32229:8;:24;;;;32274:7;32264;:17;;;;32328:7;;32317:8;;32307:7;;:18;;;;:::i;:::-;:28;;;;:::i;:::-;32292:12;:43;;;;32370:2;32354:12;;:18;;32346:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32048:366:::0;;;:::o;25052:51::-;;;:::o;11919:108::-;11980:7;12007:12;;12000:19;;11919:108;:::o;34361:157::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34468:9:::1;;;;;;;;;;;34440:38;;34457:9;34440:38;;;;;;;;;;;;34501:9;34489;;:21;;;;;;;;;;;;;;;;;;34361:157:::0;:::o;25843:27::-;;;;:::o;25402:::-;;;;;;;;;;;;;:::o;13617:492::-;13757:4;13774:36;13784:6;13792:9;13803:6;13774:9;:36::i;:::-;13823:24;13850:11;:19;13862:6;13850:19;;;;;;;;;;;;;;;:33;13870:12;:10;:12::i;:::-;13850:33;;;;;;;;;;;;;;;;13823:60;;13922:6;13902:16;:26;;13894:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;14009:57;14018:6;14026:12;:10;:12::i;:::-;14059:6;14040:16;:25;14009:8;:57::i;:::-;14097:4;14090:11;;;13617:492;;;;;:::o;25155:53::-;25201:6;25155:53;:::o;25477:25::-;;;;:::o;11761:93::-;11819:5;11844:2;11837:9;;11761:93;:::o;31726:98::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31809:7:::1;31795:11;;:21;;;;;;;;;;;;;;;;;;31726:98:::0;:::o;14518:215::-;14606:4;14623:80;14632:12;:10;:12::i;:::-;14646:7;14692:10;14655:11;:25;14667:12;:10;:12::i;:::-;14655:25;;;;;;;;;;;;;;;:34;14681:7;14655:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14623:8;:80::i;:::-;14721:4;14714:11;;14518:215;;;;:::o;30945:334::-;31052:4;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31109:18:::1;;31096:9;:31;;31074:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;31240:9;31217:20;:32;;;;31267:4;31260:11;;30945:334:::0;;;:::o;26063:23::-;;;;:::o;30193:636::-;30298:4;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30370:6:::1;30355:13;:11;:13::i;:::-;:21;;;;:::i;:::-;30342:9;:34;;30320:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30524:6;30509:13;:11;:13::i;:::-;30503:3;:19;;;;:::i;:::-;:27;;;;:::i;:::-;30490:9;:40;;30468:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30656:20;;30643:9;:33;;30621:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;30790:9;30769:18;:30;;;;30817:4;30810:11;;30193:636:::0;;;:::o;33174:172::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33280:8:::1;33256:12;:21;33269:7;33256:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;33320:7;33304:34;;;33329:8;33304:34;;;;;;:::i;:::-;;;;;;;;33174:172:::0;;:::o;29924:126::-;29980:4;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30015:5:::1;29997:15;;:23;;;;;;;;;;;;;;;;;;30038:4;30031:11;;29924:126:::0;:::o;25110:38::-;;;:::o;25509:36::-;;;;:::o;26002:23::-;;;;:::o;34526:119::-;34592:4;34616:12;:21;34629:7;34616:21;;;;;;;;;;;;;;;;;;;;;;;;;34609:28;;34526:119;;;:::o;26095:27::-;;;;:::o;25699:23::-;;;;;;;;;;;;;:::o;32635:375::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32794:13:::1;32783:8;:24;;;;32830:13;32818:9;:25;;;;32865:7;32854:8;:18;;;;32922:8;;32910:9;;32899:8;;:20;;;;:::i;:::-;:31;;;;:::i;:::-;32883:13;:47;;;;32966:2;32949:13;;:19;;32941:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32635:375:::0;;;:::o;31462:149::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31599:4:::1;31572:16;:24;31589:6;31572:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;31462:149:::0;;:::o;25262:31::-;;;;;;;;;;;;;:::o;12090:127::-;12164:7;12191:9;:18;12201:7;12191:18;;;;;;;;;;;;;;;;12184:25;;12090:127;;;:::o;21823:103::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21888:30:::1;21915:1;21888:18;:30::i;:::-;21823:103::o:0;25436:34::-;;;;;;;;;;;;;:::o;25729:30::-;;;;;;;;;;;;;:::o;25340:35::-;;;;:::o;21172:87::-;21218:7;21245:6;;;;;;;;;;;21238:13;;21172:87;:::o;25766:24::-;;;;;;;;;;;;;:::o;11018:104::-;11074:13;11107:7;11100:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11018:104;:::o;33478:304::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33622:13:::1;33614:21;;:4;:21;;::::0;33592:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33733:41;33762:4;33768:5;33733:28;:41::i;:::-;33478:304:::0;;:::o;26162:27::-;;;;:::o;26331:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;15236:413::-;15329:4;15346:24;15373:11;:25;15385:12;:10;:12::i;:::-;15373:25;;;;;;;;;;;;;;;:34;15399:7;15373:34;;;;;;;;;;;;;;;;15346:61;;15446:15;15426:16;:35;;15418:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15539:67;15548:12;:10;:12::i;:::-;15562:7;15590:15;15571:16;:34;15539:8;:67::i;:::-;15637:4;15630:11;;;15236:413;;;;:::o;25877:22::-;;;;:::o;12430:175::-;12516:4;12533:42;12543:12;:10;:12::i;:::-;12557:9;12568:6;12533:9;:42::i;:::-;12593:4;12586:11;;12430:175;;;;:::o;25936:22::-;;;;:::o;33986:231::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34146:15:::1;;;;;;;;;;;34103:59;;34126:18;34103:59;;;;;;;;;;;;34191:18;34173:15;;:36;;;;;;;;;;;;;;;;;;33986:231:::0;:::o;26537:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25801:33::-;;;;;;;;;;;;;:::o;25906:23::-;;;;:::o;26032:24::-;;;;:::o;26129:26::-;;;;:::o;29562:105::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29626:4:::1;29610:13;;:20;;;;;;;;;;;;;;;;;;29655:4;29641:11;;:18;;;;;;;;;;;;;;;;;;29562:105::o:0;12668:151::-;12757:7;12784:11;:18;12796:5;12784:18;;;;;;;;;;;;;;;:27;12803:7;12784:27;;;;;;;;;;;;;;;;12777:34;;12668:151;;;;:::o;25300:33::-;;;;:::o;22081:201::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22190:1:::1;22170:22;;:8;:22;;::::0;22162:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22246:28;22265:8;22246:18;:28::i;:::-;22081:201:::0;:::o;34225:128::-;21403:12;:10;:12::i;:::-;21392:23;;:7;:5;:7::i;:::-;:23;;;21384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34334:11:::1;34323:8;;:22;;;;;;;;;;;;;;;;;;34225:128:::0;:::o;9805:98::-;9858:7;9885:10;9878:17;;9805:98;:::o;18920:380::-;19073:1;19056:19;;:5;:19;;;19048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19154:1;19135:21;;:7;:21;;;19127:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19238:6;19208:11;:18;19220:5;19208:18;;;;;;;;;;;;;;;:27;19227:7;19208:27;;;;;;;;;;;;;;;:36;;;;19276:7;19260:32;;19269:5;19260:32;;;19285:6;19260:32;;;;;;:::i;:::-;;;;;;;;18920:380;;;:::o;34653:4565::-;34801:1;34785:18;;:4;:18;;;34777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34878:1;34864:16;;:2;:16;;;34856:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34947:1;34937:6;:11;34933:93;;34965:28;34981:4;34987:2;34991:1;34965:15;:28::i;:::-;35008:7;;34933:93;35042:8;;;;;;;;;;;35038:2423;;;35097:7;:5;:7::i;:::-;35089:15;;:4;:15;;;;:49;;;;;35131:7;:5;:7::i;:::-;35125:13;;:2;:13;;;;35089:49;:86;;;;;35173:1;35159:16;;:2;:16;;;;35089:86;:128;;;;;35210:6;35196:21;;:2;:21;;;;35089:128;:158;;;;;35239:8;;;;;;;;;;;35238:9;35089:158;35067:2383;;;35287:13;;;;;;;;;;;35282:209;;35359:12;:18;35372:4;35359:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;35381:12;:16;35394:2;35381:16;;;;;;;;;;;;;;;;;;;;;;;;;35359:38;35325:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;35282:209;35647:15;;;;;;;;;;;35643:636;;;35723:7;:5;:7::i;:::-;35717:13;;:2;:13;;;;:72;;;;;35773:15;35759:30;;:2;:30;;;;35717:72;:129;;;;;35832:13;35818:28;;:2;:28;;;;35717:129;35687:573;;;36010:12;35935:28;:39;35964:9;35935:39;;;;;;;;;;;;;;;;:87;35897:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36224:12;36182:28;:39;36211:9;36182:39;;;;;;;;;;;;;;;:54;;;;35687:573;35643:636;36353:25;:31;36379:4;36353:31;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;36410:16;:20;36427:2;36410:20;;;;;;;;;;;;;;;;;;;;;;;;;36409:21;36353:77;36327:1108;;;36517:21;;36507:6;:31;;36473:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;36727:10;;36710:13;36720:2;36710:9;:13::i;:::-;36701:6;:22;;;;:::i;:::-;:36;;36667:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;36327:1108;;;36906:25;:29;36932:2;36906:29;;;;;;;;;;;;;;;;;;;;;;;;;:77;;;;;36961:16;:22;36978:4;36961:22;;;;;;;;;;;;;;;;;;;;;;;;;36960:23;36906:77;36880:555;;;37070:21;;37060:6;:31;;37026:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;36880:555;;;37229:16;:20;37246:2;37229:20;;;;;;;;;;;;;;;;;;;;;;;;;37224:211;;37334:10;;37317:13;37327:2;37317:9;:13::i;:::-;37308:6;:22;;;;:::i;:::-;:36;;37274:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37224:211;36880:555;36327:1108;35067:2383;35038:2423;37473:28;37504:24;37522:4;37504:9;:24::i;:::-;37473:55;;37541:12;37580:18;;37556:20;:42;;37541:57;;37629:7;:35;;;;;37653:11;;;;;;;;;;;37629:35;:61;;;;;37682:8;;;;;;;;;;;37681:9;37629:61;:110;;;;;37708:25;:31;37734:4;37708:31;;;;;;;;;;;;;;;;;;;;;;;;;37707:32;37629:110;:146;;;;;37757:12;:18;37770:4;37757:18;;;;;;;;;;;;;;;;;;;;;;;;;37756:19;37629:146;:180;;;;;37793:12;:16;37806:2;37793:16;;;;;;;;;;;;;;;;;;;;;;;;;37792:17;37629:180;37611:312;;;37847:4;37836:8;;:15;;;;;;;;;;;;;;;;;;37868:10;:8;:10::i;:::-;37906:5;37895:8;;:16;;;;;;;;;;;;;;;;;;37611:312;37935:12;37951:8;;;;;;;;;;;37950:9;37935:24;;38061:12;:18;38074:4;38061:18;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;38083:12;:16;38096:2;38083:16;;;;;;;;;;;;;;;;;;;;;;;;;38061:38;38057:86;;;38126:5;38116:15;;38057:86;38155:12;38260:7;38256:909;;;38312:25;:29;38338:2;38312:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38361:1;38345:13;;:17;38312:50;38308:708;;;38390:34;38420:3;38390:25;38401:13;;38390:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38383:41;;38479:13;;38466:9;;38459:4;:16;;;;:::i;:::-;38458:34;;;;:::i;:::-;38443:11;;:49;;;;;;;:::i;:::-;;;;;;;;38547:13;;38535:8;;38528:4;:15;;;;:::i;:::-;38527:33;;;;:::i;:::-;38511:12;;:49;;;;;;;:::i;:::-;;;;;;;;38615:13;;38603:8;;38596:4;:15;;;;:::i;:::-;38595:33;;;;:::i;:::-;38579:12;;:49;;;;;;;:::i;:::-;;;;;;;;38308:708;;;38690:25;:31;38716:4;38690:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38740:1;38725:12;;:16;38690:51;38686:330;;;38769:33;38798:3;38769:24;38780:12;;38769:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38762:40;;38856:12;;38844:8;;38837:4;:15;;;;:::i;:::-;38836:32;;;;:::i;:::-;38821:11;;:47;;;;;;;:::i;:::-;;;;;;;;38922:12;;38911:7;;38904:4;:14;;;;:::i;:::-;38903:31;;;;:::i;:::-;38887:12;;:47;;;;;;;:::i;:::-;;;;;;;;38988:12;;38977:7;;38970:4;:14;;;;:::i;:::-;38969:31;;;;:::i;:::-;38953:12;;:47;;;;;;;:::i;:::-;;;;;;;;38686:330;38308:708;39043:1;39036:4;:8;39032:91;;;39065:42;39081:4;39095;39102;39065:15;:42::i;:::-;39032:91;39149:4;39139:14;;;;;:::i;:::-;;;38256:909;39177:33;39193:4;39199:2;39203:6;39177:15;:33::i;:::-;34766:4452;;;;34653:4565;;;;:::o;22442:191::-;22516:16;22535:6;;;;;;;;;;;22516:25;;22561:8;22552:6;;:17;;;;;;;;;;;;;;;;;;22616:8;22585:40;;22606:8;22585:40;;;;;;;;;;;;22505:128;22442:191;:::o;33790:188::-;33907:5;33873:25;:31;33899:4;33873:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33964:5;33930:40;;33958:4;33930:40;;;;;;;;;;;;33790:188;;:::o;16139:733::-;16297:1;16279:20;;:6;:20;;;16271:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16381:1;16360:23;;:9;:23;;;16352:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16436:47;16457:6;16465:9;16476:6;16436:20;:47::i;:::-;16496:21;16520:9;:17;16530:6;16520:17;;;;;;;;;;;;;;;;16496:41;;16573:6;16556:13;:23;;16548:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16694:6;16678:13;:22;16658:9;:17;16668:6;16658:17;;;;;;;;;;;;;;;:42;;;;16746:6;16722:9;:20;16732:9;16722:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16787:9;16770:35;;16779:6;16770:35;;;16798:6;16770:35;;;;;;:::i;:::-;;;;;;;;16818:46;16838:6;16846:9;16857:6;16818:19;:46::i;:::-;16260:612;16139:733;;;:::o;40347:417::-;40386:23;40412:24;40430:4;40412:9;:24::i;:::-;40386:50;;40472:1;40453:15;:20;40449:59;;40490:7;;;40449:59;40542:20;;40524:15;:38;40520:109;;;40597:20;;40579:38;;40520:109;40641:33;40658:15;40641:16;:33::i;:::-;40701:1;40687:11;:15;;;;40728:1;40713:12;:16;;;;40755:1;40740:12;:16;;;;40375:389;40347:417;:::o;3248:98::-;3306:7;3337:1;3333;:5;;;;:::i;:::-;3326:12;;3248:98;;;;:::o;3647:::-;3705:7;3736:1;3732;:5;;;;:::i;:::-;3725:12;;3647:98;;;;:::o;19900:125::-;;;;:::o;20629:124::-;;;;:::o;39226:591::-;39352:21;39390:1;39376:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39352:40;;39421:4;39403;39408:1;39403:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39447:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39437:4;39442:1;39437:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39482:62;39499:4;39514:15;39532:11;39482:8;:62::i;:::-;39583:15;:66;;;39664:11;39690:1;39734:4;39753:15;;;;;;;;;;;39783;39583:226;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39281:536;39226:591;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1857:117::-;1966:1;1963;1956:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:60::-;4451:3;4472:5;4465:12;;4423:60;;;:::o;4489:142::-;4539:9;4572:53;4590:34;4599:24;4617:5;4599:24;:::i;:::-;4590:34;:::i;:::-;4572:53;:::i;:::-;4559:66;;4489:142;;;:::o;4637:126::-;4687:9;4720:37;4751:5;4720:37;:::i;:::-;4707:50;;4637:126;;;:::o;4769:153::-;4846:9;4879:37;4910:5;4879:37;:::i;:::-;4866:50;;4769:153;;;:::o;4928:185::-;5042:64;5100:5;5042:64;:::i;:::-;5037:3;5030:77;4928:185;;:::o;5119:276::-;5239:4;5277:2;5266:9;5262:18;5254:26;;5290:98;5385:1;5374:9;5370:17;5361:6;5290:98;:::i;:::-;5119:276;;;;:::o;5401:329::-;5460:6;5509:2;5497:9;5488:7;5484:23;5480:32;5477:119;;;5515:79;;:::i;:::-;5477:119;5635:1;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5606:117;5401:329;;;;:::o;5736:619::-;5813:6;5821;5829;5878:2;5866:9;5857:7;5853:23;5849:32;5846:119;;;5884:79;;:::i;:::-;5846:119;6004:1;6029:53;6074:7;6065:6;6054:9;6050:22;6029:53;:::i;:::-;6019:63;;5975:117;6131:2;6157:53;6202:7;6193:6;6182:9;6178:22;6157:53;:::i;:::-;6147:63;;6102:118;6259:2;6285:53;6330:7;6321:6;6310:9;6306:22;6285:53;:::i;:::-;6275:63;;6230:118;5736:619;;;;;:::o;6361:118::-;6448:24;6466:5;6448:24;:::i;:::-;6443:3;6436:37;6361:118;;:::o;6485:222::-;6578:4;6616:2;6605:9;6601:18;6593:26;;6629:71;6697:1;6686:9;6682:17;6673:6;6629:71;:::i;:::-;6485:222;;;;:::o;6713:86::-;6748:7;6788:4;6781:5;6777:16;6766:27;;6713:86;;;:::o;6805:112::-;6888:22;6904:5;6888:22;:::i;:::-;6883:3;6876:35;6805:112;;:::o;6923:214::-;7012:4;7050:2;7039:9;7035:18;7027:26;;7063:67;7127:1;7116:9;7112:17;7103:6;7063:67;:::i;:::-;6923:214;;;;:::o;7143:116::-;7213:21;7228:5;7213:21;:::i;:::-;7206:5;7203:32;7193:60;;7249:1;7246;7239:12;7193:60;7143:116;:::o;7265:133::-;7308:5;7346:6;7333:20;7324:29;;7362:30;7386:5;7362:30;:::i;:::-;7265:133;;;;:::o;7404:323::-;7460:6;7509:2;7497:9;7488:7;7484:23;7480:32;7477:119;;;7515:79;;:::i;:::-;7477:119;7635:1;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7606:114;7404:323;;;;:::o;7733:329::-;7792:6;7841:2;7829:9;7820:7;7816:23;7812:32;7809:119;;;7847:79;;:::i;:::-;7809:119;7967:1;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7938:117;7733:329;;;;:::o;8068:468::-;8133:6;8141;8190:2;8178:9;8169:7;8165:23;8161:32;8158:119;;;8196:79;;:::i;:::-;8158:119;8316:1;8341:53;8386:7;8377:6;8366:9;8362:22;8341:53;:::i;:::-;8331:63;;8287:117;8443:2;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8414:115;8068:468;;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:182::-;9162:34;9158:1;9150:6;9146:14;9139:58;9022:182;:::o;9210:366::-;9352:3;9373:67;9437:2;9432:3;9373:67;:::i;:::-;9366:74;;9449:93;9538:3;9449:93;:::i;:::-;9567:2;9562:3;9558:12;9551:19;;9210:366;;;:::o;9582:419::-;9748:4;9786:2;9775:9;9771:18;9763:26;;9835:9;9829:4;9825:20;9821:1;9810:9;9806:17;9799:47;9863:131;9989:4;9863:131;:::i;:::-;9855:139;;9582:419;;;:::o;10007:180::-;10055:77;10052:1;10045:88;10152:4;10149:1;10142:15;10176:4;10173:1;10166:15;10193:320;10237:6;10274:1;10268:4;10264:12;10254:22;;10321:1;10315:4;10311:12;10342:18;10332:81;;10398:4;10390:6;10386:17;10376:27;;10332:81;10460:2;10452:6;10449:14;10429:18;10426:38;10423:84;;10479:18;;:::i;:::-;10423:84;10244:269;10193:320;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:191;10745:3;10764:20;10782:1;10764:20;:::i;:::-;10759:25;;10798:20;10816:1;10798:20;:::i;:::-;10793:25;;10841:1;10838;10834:9;10827:16;;10862:3;10859:1;10856:10;10853:36;;;10869:18;;:::i;:::-;10853:36;10705:191;;;;:::o;10902:179::-;11042:31;11038:1;11030:6;11026:14;11019:55;10902:179;:::o;11087:366::-;11229:3;11250:67;11314:2;11309:3;11250:67;:::i;:::-;11243:74;;11326:93;11415:3;11326:93;:::i;:::-;11444:2;11439:3;11435:12;11428:19;;11087:366;;;:::o;11459:419::-;11625:4;11663:2;11652:9;11648:18;11640:26;;11712:9;11706:4;11702:20;11698:1;11687:9;11683:17;11676:47;11740:131;11866:4;11740:131;:::i;:::-;11732:139;;11459:419;;;:::o;11884:227::-;12024:34;12020:1;12012:6;12008:14;12001:58;12093:10;12088:2;12080:6;12076:15;12069:35;11884:227;:::o;12117:366::-;12259:3;12280:67;12344:2;12339:3;12280:67;:::i;:::-;12273:74;;12356:93;12445:3;12356:93;:::i;:::-;12474:2;12469:3;12465:12;12458:19;;12117:366;;;:::o;12489:419::-;12655:4;12693:2;12682:9;12678:18;12670:26;;12742:9;12736:4;12732:20;12728:1;12717:9;12713:17;12706:47;12770:131;12896:4;12770:131;:::i;:::-;12762:139;;12489:419;;;:::o;12914:238::-;13054:34;13050:1;13042:6;13038:14;13031:58;13123:21;13118:2;13110:6;13106:15;13099:46;12914:238;:::o;13158:366::-;13300:3;13321:67;13385:2;13380:3;13321:67;:::i;:::-;13314:74;;13397:93;13486:3;13397:93;:::i;:::-;13515:2;13510:3;13506:12;13499:19;;13158:366;;;:::o;13530:419::-;13696:4;13734:2;13723:9;13719:18;13711:26;;13783:9;13777:4;13773:20;13769:1;13758:9;13754:17;13747:47;13811:131;13937:4;13811:131;:::i;:::-;13803:139;;13530:419;;;:::o;13955:180::-;14003:77;14000:1;13993:88;14100:4;14097:1;14090:15;14124:4;14121:1;14114:15;14141:185;14181:1;14198:20;14216:1;14198:20;:::i;:::-;14193:25;;14232:20;14250:1;14232:20;:::i;:::-;14227:25;;14271:1;14261:35;;14276:18;;:::i;:::-;14261:35;14318:1;14315;14311:9;14306:14;;14141:185;;;;:::o;14332:240::-;14472:34;14468:1;14460:6;14456:14;14449:58;14541:23;14536:2;14528:6;14524:15;14517:48;14332:240;:::o;14578:366::-;14720:3;14741:67;14805:2;14800:3;14741:67;:::i;:::-;14734:74;;14817:93;14906:3;14817:93;:::i;:::-;14935:2;14930:3;14926:12;14919:19;;14578:366;;;:::o;14950:419::-;15116:4;15154:2;15143:9;15139:18;15131:26;;15203:9;15197:4;15193:20;15189:1;15178:9;15174:17;15167:47;15231:131;15357:4;15231:131;:::i;:::-;15223:139;;14950:419;;;:::o;15375:410::-;15415:7;15438:20;15456:1;15438:20;:::i;:::-;15433:25;;15472:20;15490:1;15472:20;:::i;:::-;15467:25;;15527:1;15524;15520:9;15549:30;15567:11;15549:30;:::i;:::-;15538:41;;15728:1;15719:7;15715:15;15712:1;15709:22;15689:1;15682:9;15662:83;15639:139;;15758:18;;:::i;:::-;15639:139;15423:362;15375:410;;;;:::o;15791:239::-;15931:34;15927:1;15919:6;15915:14;15908:58;16000:22;15995:2;15987:6;15983:15;15976:47;15791:239;:::o;16036:366::-;16178:3;16199:67;16263:2;16258:3;16199:67;:::i;:::-;16192:74;;16275:93;16364:3;16275:93;:::i;:::-;16393:2;16388:3;16384:12;16377:19;;16036:366;;;:::o;16408:419::-;16574:4;16612:2;16601:9;16597:18;16589:26;;16661:9;16655:4;16651:20;16647:1;16636:9;16632:17;16625:47;16689:131;16815:4;16689:131;:::i;:::-;16681:139;;16408:419;;;:::o;16833:241::-;16973:34;16969:1;16961:6;16957:14;16950:58;17042:24;17037:2;17029:6;17025:15;17018:49;16833:241;:::o;17080:366::-;17222:3;17243:67;17307:2;17302:3;17243:67;:::i;:::-;17236:74;;17319:93;17408:3;17319:93;:::i;:::-;17437:2;17432:3;17428:12;17421:19;;17080:366;;;:::o;17452:419::-;17618:4;17656:2;17645:9;17641:18;17633:26;;17705:9;17699:4;17695:20;17691:1;17680:9;17676:17;17669:47;17733:131;17859:4;17733:131;:::i;:::-;17725:139;;17452:419;;;:::o;17877:244::-;18017:34;18013:1;18005:6;18001:14;17994:58;18086:27;18081:2;18073:6;18069:15;18062:52;17877:244;:::o;18127:366::-;18269:3;18290:67;18354:2;18349:3;18290:67;:::i;:::-;18283:74;;18366:93;18455:3;18366:93;:::i;:::-;18484:2;18479:3;18475:12;18468:19;;18127:366;;;:::o;18499:419::-;18665:4;18703:2;18692:9;18688:18;18680:26;;18752:9;18746:4;18742:20;18738:1;18727:9;18723:17;18716:47;18780:131;18906:4;18780:131;:::i;:::-;18772:139;;18499:419;;;:::o;18924:224::-;19064:34;19060:1;19052:6;19048:14;19041:58;19133:7;19128:2;19120:6;19116:15;19109:32;18924:224;:::o;19154:366::-;19296:3;19317:67;19381:2;19376:3;19317:67;:::i;:::-;19310:74;;19393:93;19482:3;19393:93;:::i;:::-;19511:2;19506:3;19502:12;19495:19;;19154:366;;;:::o;19526:419::-;19692:4;19730:2;19719:9;19715:18;19707:26;;19779:9;19773:4;19769:20;19765:1;19754:9;19750:17;19743:47;19807:131;19933:4;19807:131;:::i;:::-;19799:139;;19526:419;;;:::o;19951:225::-;20091:34;20087:1;20079:6;20075:14;20068:58;20160:8;20155:2;20147:6;20143:15;20136:33;19951:225;:::o;20182:366::-;20324:3;20345:67;20409:2;20404:3;20345:67;:::i;:::-;20338:74;;20421:93;20510:3;20421:93;:::i;:::-;20539:2;20534:3;20530:12;20523:19;;20182:366;;;:::o;20554:419::-;20720:4;20758:2;20747:9;20743:18;20735:26;;20807:9;20801:4;20797:20;20793:1;20782:9;20778:17;20771:47;20835:131;20961:4;20835:131;:::i;:::-;20827:139;;20554:419;;;:::o;20979:223::-;21119:34;21115:1;21107:6;21103:14;21096:58;21188:6;21183:2;21175:6;21171:15;21164:31;20979:223;:::o;21208:366::-;21350:3;21371:67;21435:2;21430:3;21371:67;:::i;:::-;21364:74;;21447:93;21536:3;21447:93;:::i;:::-;21565:2;21560:3;21556:12;21549:19;;21208:366;;;:::o;21580:419::-;21746:4;21784:2;21773:9;21769:18;21761:26;;21833:9;21827:4;21823:20;21819:1;21808:9;21804:17;21797:47;21861:131;21987:4;21861:131;:::i;:::-;21853:139;;21580:419;;;:::o;22005:221::-;22145:34;22141:1;22133:6;22129:14;22122:58;22214:4;22209:2;22201:6;22197:15;22190:29;22005:221;:::o;22232:366::-;22374:3;22395:67;22459:2;22454:3;22395:67;:::i;:::-;22388:74;;22471:93;22560:3;22471:93;:::i;:::-;22589:2;22584:3;22580:12;22573:19;;22232:366;;;:::o;22604:419::-;22770:4;22808:2;22797:9;22793:18;22785:26;;22857:9;22851:4;22847:20;22843:1;22832:9;22828:17;22821:47;22885:131;23011:4;22885:131;:::i;:::-;22877:139;;22604:419;;;:::o;23029:224::-;23169:34;23165:1;23157:6;23153:14;23146:58;23238:7;23233:2;23225:6;23221:15;23214:32;23029:224;:::o;23259:366::-;23401:3;23422:67;23486:2;23481:3;23422:67;:::i;:::-;23415:74;;23498:93;23587:3;23498:93;:::i;:::-;23616:2;23611:3;23607:12;23600:19;;23259:366;;;:::o;23631:419::-;23797:4;23835:2;23824:9;23820:18;23812:26;;23884:9;23878:4;23874:20;23870:1;23859:9;23855:17;23848:47;23912:131;24038:4;23912:131;:::i;:::-;23904:139;;23631:419;;;:::o;24056:222::-;24196:34;24192:1;24184:6;24180:14;24173:58;24265:5;24260:2;24252:6;24248:15;24241:30;24056:222;:::o;24284:366::-;24426:3;24447:67;24511:2;24506:3;24447:67;:::i;:::-;24440:74;;24523:93;24612:3;24523:93;:::i;:::-;24641:2;24636:3;24632:12;24625:19;;24284:366;;;:::o;24656:419::-;24822:4;24860:2;24849:9;24845:18;24837:26;;24909:9;24903:4;24899:20;24895:1;24884:9;24880:17;24873:47;24937:131;25063:4;24937:131;:::i;:::-;24929:139;;24656:419;;;:::o;25081:172::-;25221:24;25217:1;25209:6;25205:14;25198:48;25081:172;:::o;25259:366::-;25401:3;25422:67;25486:2;25481:3;25422:67;:::i;:::-;25415:74;;25498:93;25587:3;25498:93;:::i;:::-;25616:2;25611:3;25607:12;25600:19;;25259:366;;;:::o;25631:419::-;25797:4;25835:2;25824:9;25820:18;25812:26;;25884:9;25878:4;25874:20;25870:1;25859:9;25855:17;25848:47;25912:131;26038:4;25912:131;:::i;:::-;25904:139;;25631:419;;;:::o;26056:297::-;26196:34;26192:1;26184:6;26180:14;26173:58;26265:34;26260:2;26252:6;26248:15;26241:59;26334:11;26329:2;26321:6;26317:15;26310:36;26056:297;:::o;26359:366::-;26501:3;26522:67;26586:2;26581:3;26522:67;:::i;:::-;26515:74;;26598:93;26687:3;26598:93;:::i;:::-;26716:2;26711:3;26707:12;26700:19;;26359:366;;;:::o;26731:419::-;26897:4;26935:2;26924:9;26920:18;26912:26;;26984:9;26978:4;26974:20;26970:1;26959:9;26955:17;26948:47;27012:131;27138:4;27012:131;:::i;:::-;27004:139;;26731:419;;;:::o;27156:241::-;27296:34;27292:1;27284:6;27280:14;27273:58;27365:24;27360:2;27352:6;27348:15;27341:49;27156:241;:::o;27403:366::-;27545:3;27566:67;27630:2;27625:3;27566:67;:::i;:::-;27559:74;;27642:93;27731:3;27642:93;:::i;:::-;27760:2;27755:3;27751:12;27744:19;;27403:366;;;:::o;27775:419::-;27941:4;27979:2;27968:9;27964:18;27956:26;;28028:9;28022:4;28018:20;28014:1;28003:9;27999:17;27992:47;28056:131;28182:4;28056:131;:::i;:::-;28048:139;;27775:419;;;:::o;28200:169::-;28340:21;28336:1;28328:6;28324:14;28317:45;28200:169;:::o;28375:366::-;28517:3;28538:67;28602:2;28597:3;28538:67;:::i;:::-;28531:74;;28614:93;28703:3;28614:93;:::i;:::-;28732:2;28727:3;28723:12;28716:19;;28375:366;;;:::o;28747:419::-;28913:4;28951:2;28940:9;28936:18;28928:26;;29000:9;28994:4;28990:20;28986:1;28975:9;28971:17;28964:47;29028:131;29154:4;29028:131;:::i;:::-;29020:139;;28747:419;;;:::o;29172:242::-;29312:34;29308:1;29300:6;29296:14;29289:58;29381:25;29376:2;29368:6;29364:15;29357:50;29172:242;:::o;29420:366::-;29562:3;29583:67;29647:2;29642:3;29583:67;:::i;:::-;29576:74;;29659:93;29748:3;29659:93;:::i;:::-;29777:2;29772:3;29768:12;29761:19;;29420:366;;;:::o;29792:419::-;29958:4;29996:2;29985:9;29981:18;29973:26;;30045:9;30039:4;30035:20;30031:1;30020:9;30016:17;30009:47;30073:131;30199:4;30073:131;:::i;:::-;30065:139;;29792:419;;;:::o;30217:194::-;30257:4;30277:20;30295:1;30277:20;:::i;:::-;30272:25;;30311:20;30329:1;30311:20;:::i;:::-;30306:25;;30355:1;30352;30348:9;30340:17;;30379:1;30373:4;30370:11;30367:37;;;30384:18;;:::i;:::-;30367:37;30217:194;;;;:::o;30417:225::-;30557:34;30553:1;30545:6;30541:14;30534:58;30626:8;30621:2;30613:6;30609:15;30602:33;30417:225;:::o;30648:366::-;30790:3;30811:67;30875:2;30870:3;30811:67;:::i;:::-;30804:74;;30887:93;30976:3;30887:93;:::i;:::-;31005:2;31000:3;30996:12;30989:19;;30648:366;;;:::o;31020:419::-;31186:4;31224:2;31213:9;31209:18;31201:26;;31273:9;31267:4;31263:20;31259:1;31248:9;31244:17;31237:47;31301:131;31427:4;31301:131;:::i;:::-;31293:139;;31020:419;;;:::o;31445:180::-;31493:77;31490:1;31483:88;31590:4;31587:1;31580:15;31614:4;31611:1;31604:15;31631:180;31679:77;31676:1;31669:88;31776:4;31773:1;31766:15;31800:4;31797:1;31790:15;31817:143;31874:5;31905:6;31899:13;31890:22;;31921:33;31948:5;31921:33;:::i;:::-;31817:143;;;;:::o;31966:351::-;32036:6;32085:2;32073:9;32064:7;32060:23;32056:32;32053:119;;;32091:79;;:::i;:::-;32053:119;32211:1;32236:64;32292:7;32283:6;32272:9;32268:22;32236:64;:::i;:::-;32226:74;;32182:128;31966:351;;;;:::o;32323:85::-;32368:7;32397:5;32386:16;;32323:85;;;:::o;32414:158::-;32472:9;32505:61;32523:42;32532:32;32558:5;32532:32;:::i;:::-;32523:42;:::i;:::-;32505:61;:::i;:::-;32492:74;;32414:158;;;:::o;32578:147::-;32673:45;32712:5;32673:45;:::i;:::-;32668:3;32661:58;32578:147;;:::o;32731:114::-;32798:6;32832:5;32826:12;32816:22;;32731:114;;;:::o;32851:184::-;32950:11;32984:6;32979:3;32972:19;33024:4;33019:3;33015:14;33000:29;;32851:184;;;;:::o;33041:132::-;33108:4;33131:3;33123:11;;33161:4;33156:3;33152:14;33144:22;;33041:132;;;:::o;33179:108::-;33256:24;33274:5;33256:24;:::i;:::-;33251:3;33244:37;33179:108;;:::o;33293:179::-;33362:10;33383:46;33425:3;33417:6;33383:46;:::i;:::-;33461:4;33456:3;33452:14;33438:28;;33293:179;;;;:::o;33478:113::-;33548:4;33580;33575:3;33571:14;33563:22;;33478:113;;;:::o;33627:732::-;33746:3;33775:54;33823:5;33775:54;:::i;:::-;33845:86;33924:6;33919:3;33845:86;:::i;:::-;33838:93;;33955:56;34005:5;33955:56;:::i;:::-;34034:7;34065:1;34050:284;34075:6;34072:1;34069:13;34050:284;;;34151:6;34145:13;34178:63;34237:3;34222:13;34178:63;:::i;:::-;34171:70;;34264:60;34317:6;34264:60;:::i;:::-;34254:70;;34110:224;34097:1;34094;34090:9;34085:14;;34050:284;;;34054:14;34350:3;34343:10;;33751:608;;;33627:732;;;;:::o;34365:831::-;34628:4;34666:3;34655:9;34651:19;34643:27;;34680:71;34748:1;34737:9;34733:17;34724:6;34680:71;:::i;:::-;34761:80;34837:2;34826:9;34822:18;34813:6;34761:80;:::i;:::-;34888:9;34882:4;34878:20;34873:2;34862:9;34858:18;34851:48;34916:108;35019:4;35010:6;34916:108;:::i;:::-;34908:116;;35034:72;35102:2;35091:9;35087:18;35078:6;35034:72;:::i;:::-;35116:73;35184:3;35173:9;35169:19;35160:6;35116:73;:::i;:::-;34365:831;;;;;;;;:::o
Swarm Source
ipfs://e67ffa2f88549c4e4f5c87b02c14e47e5b01195e29448348684a5168b6889055
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.