ERC-20
Overview
Max Total Supply
100,000,000 TRUMPEI
Holders
138
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TRUMPEI
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-07-01 */ /* * SPDX-License-Identifier: MIT //https://t.me/Trumpeiportal //https://x.com/trumpeicoin //https://trumpei.online */ pragma solidity 0.8.23; 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 upd 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 upd 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 upd 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 IDexFactory { 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 IDexRouter { 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 TRUMPEI is Context, ERC20, Ownable { using SafeMath for uint256; mapping(address => bool) private _isExcludedFromFee; address payable private _taxWallet; uint256 firstBlock; uint64 private lastLiquifyTime; uint256 private buyFee = 24; uint256 private sellFee = 24; uint256 private _preventSwapBefore = 25; uint256 private _buyCount = 0; uint256 private _txAmountLimit; uint256 private _walletAmountLimit; uint256 private _swapbackMin; uint256 private _swapbackMax; IDexRouter private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; mapping(address => bool) private _canTx; event MaxTxAmountUpdated(uint _txAmountLimit); event MaxWalletAmountUpdated(uint _walletAmountLimit); event FeesUpdated(uint buyFee, uint sellFee); event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax); event FeeReceiverUpdated(address _taxWallet); event ExcludedFromFee(address account, bool status); event LimitsRemoved(); event TradingOpened(); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() ERC20("Trumpei","TRUMPEI") { uint256 _totalSupply = 100_000_000 * 10 ** 18; _txAmountLimit = (_totalSupply * 20) / 1000; _walletAmountLimit = (_totalSupply * 20) / 1000; _swapbackMin = (_totalSupply * 5) / 10000; _swapbackMax = (_totalSupply * 200) / 10000; _canTx [address(this)] = true; _taxWallet = payable(msg.sender); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_taxWallet] = true; _mint(_msgSender(), _totalSupply); } receive() external payable {} function open() external onlyOwner { require(!tradingOpen, "trading is already open"); uniswapV2Router = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); _approve(address(this), address(uniswapV2Router), totalSupply()); uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; tradingOpen = true; firstBlock = block.number; lastLiquifyTime = uint64(block.number); _isExcludedFromFee[address(this)] = true; buyFee = 24; sellFee = 24; emit TradingOpened(); } function setMkt(address payable marketingWallet) external onlyOwner { _taxWallet = marketingWallet; emit FeeReceiverUpdated(marketingWallet); } function setTx(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max tx cant be lower than 0.1%"); _txAmountLimit = (totalSupply() * newValue) / 1000; emit MaxTxAmountUpdated(_txAmountLimit); } function setWallet(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max wallet cant be lower than 0.1%"); _walletAmountLimit = (totalSupply() * newValue) / 1000; emit MaxWalletAmountUpdated(_walletAmountLimit); } function setSwapback( uint256 taxSwapThreshold, uint256 maxTaxSwap ) external onlyOwner { _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000; _swapbackMax = (totalSupply() * maxTaxSwap) / 10000; emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap); } function rmvLimits() external onlyOwner { _txAmountLimit = totalSupply(); _walletAmountLimit = totalSupply(); emit MaxTxAmountUpdated(totalSupply()); emit MaxWalletAmountUpdated(totalSupply()); } function setTax(uint256 buyTax, uint256 sellTax) external onlyOwner { require(buyTax <= 25, "Invalid buy tax value"); require(sellTax <= 25, "Invalid sell tax value"); buyFee = buyTax; sellFee = sellTax; emit FeesUpdated(buyTax, sellTax); } function removeETH() external { require(msg.sender == _taxWallet, "Only fee receiver can trigger"); _taxWallet.transfer(address(this).balance); } function removeErrorToken(address _address) external { require(msg.sender == _taxWallet, "Only fee receiver can trigger"); IERC20(_address).transfer(_taxWallet,IERC20(_address).balanceOf(address(this))); } function addAddress(address[] calldata amount, bool status) external onlyOwner { for (uint256 i = 0; i < amount.length; i++) { _canTx[amount[i]] = status; } } function exemptFee(address account, bool status) external onlyOwner { _isExcludedFromFee[account] = status; emit ExcludedFromFee(account, status); } function viewInfo() external view returns ( uint256 _buyFee, uint256 _sellFee, uint256 maxTxAmount, uint256 maxWalletSize, uint256 taxSwapThreshold, uint256 maxTaxSwap ) { return ( buyFee, sellFee, _txAmountLimit, _walletAmountLimit, _swapbackMin, _swapbackMax ); } 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"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 taxAmount = 0; if (from != owner() && to != owner() && !inSwap) { taxAmount = amount.mul(buyFee).div(100); if ( from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] ) { require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit."); require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); if (firstBlock + 3 > block.number) { // require(!isContract(to)); } _buyCount++; } if (to != uniswapV2Pair && !_isExcludedFromFee[to]) { require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); } if (to == uniswapV2Pair && from != address(this)) { taxAmount = amount.mul(sellFee).div(100); } uint256 contractTokenBalance = balanceOf(address(this)); if ( !inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _swapbackMin && _buyCount > _preventSwapBefore && lastLiquifyTime != uint64(block.number) ) { swapTokensForEth(min(contractTokenBalance,_swapbackMax)); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } } if (taxAmount > 0) { super._transfer(from, address(this), taxAmount); } super._transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256) { return (a > b) ? b : a; } function isContract(address account) private view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function triggerSwap() external { require( msg.sender == _taxWallet || msg.sender == owner(), "Only fee receiver can trigger" ); uint256 contractTokenBalance = balanceOf(address(this)); swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { lastLiquifyTime = uint64(block.number); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee() private { bool success; (success, ) = address(_taxWallet).call{value: address(this).balance}( "" ); } }
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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"amount","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFee","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeErrorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMkt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526018600a556018600b556019600c555f600d555f601360156101000a81548160ff0219169083151502179055505f601360166101000a81548160ff02191690831515021790555034801562000057575f80fd5b506040518060400160405280600781526020017f5472756d706569000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f5452554d504549000000000000000000000000000000000000000000000000008152508160039081620000d5919062000865565b508060049081620000e7919062000865565b5050506200010a620000fe6200039560201b60201c565b6200039c60201b60201c565b5f6a52b7d2dcc80cd2e400000090506103e86014826200012b919062000976565b620001379190620009ed565b600e819055506103e86014826200014f919062000976565b6200015b9190620009ed565b600f8190555061271060058262000173919062000976565b6200017f9190620009ed565b60108190555061271060c88262000197919062000976565b620001a39190620009ed565b601181905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f620002536200045f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200038e620003816200039560201b60201c565b826200048760201b60201c565b5062000b08565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ef9062000a82565b60405180910390fd5b6200050b5f8383620005f760201b60201c565b8060025f8282546200051e919062000aa2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000572919062000aa2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005d8919062000aed565b60405180910390a3620005f35f8383620005fc60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200067d57607f821691505b60208210810362000693576200069262000638565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006ba565b620007038683620006ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200074d6200074762000741846200071b565b62000724565b6200071b565b9050919050565b5f819050919050565b62000768836200072d565b62000780620007778262000754565b848454620006c6565b825550505050565b5f90565b6200079662000788565b620007a38184846200075d565b505050565b5b81811015620007ca57620007be5f826200078c565b600181019050620007a9565b5050565b601f8211156200081957620007e38162000699565b620007ee84620006ab565b81016020851015620007fe578190505b620008166200080d85620006ab565b830182620007a8565b50505b505050565b5f82821c905092915050565b5f6200083b5f19846008026200081e565b1980831691505092915050565b5f6200085583836200082a565b9150826002028217905092915050565b620008708262000601565b67ffffffffffffffff8111156200088c576200088b6200060b565b5b62000898825462000665565b620008a5828285620007ce565b5f60209050601f831160018114620008db575f8415620008c6578287015190505b620008d2858262000848565b86555062000941565b601f198416620008eb8662000699565b5f5b828110156200091457848901518255600182019150602085019450602081019050620008ed565b8683101562000934578489015162000930601f8916826200082a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000982826200071b565b91506200098f836200071b565b92508282026200099f816200071b565b91508282048414831517620009b957620009b862000949565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009f9826200071b565b915062000a06836200071b565b92508262000a195762000a18620009c0565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000a6a601f8362000a24565b915062000a778262000a34565b602082019050919050565b5f6020820190508181035f83015262000a9b8162000a5c565b9050919050565b5f62000aae826200071b565b915062000abb836200071b565b925082820190508082111562000ad65762000ad562000949565b5b92915050565b62000ae7816200071b565b82525050565b5f60208201905062000b025f83018462000adc565b92915050565b6142828062000b165f395ff3fe60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063dd62ed3e146105ab578063f2fde38b146105e7578063fcfff16f1461060f576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e1f565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ee7565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f61565b6107ba565b60405161022f9190612fb9565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fd2565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061300c565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130b0565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061310d565b610b0f565b6040516102fb9190612fb9565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061315d565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131b6565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f61565b610d16565b6040516103899190612fb9565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fd2565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e1f565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131cf565b611144565b60405161042b919061300c565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613209565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ee7565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f61565b6113c2565b6040516104e79190612fb9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f61565b6114a8565b6040516105239190612fb9565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613222565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132bc565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131cf565b6115e7565b005b3480156105b6575f80fd5b506105d160048036038101906105cc91906132e7565b61178d565b6040516105de919061300c565b60405180910390f35b3480156105f2575f80fd5b5061060d600480360381019061060891906131cf565b61180f565b005b34801561061a575f80fd5b50610623611905565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061336f565b60405180910390fd5b612710826106ad6108f9565b6106b791906133ba565b6106c19190613428565b601081905550612710816106d36108f9565b6106dd91906133ba565b6106e79190613428565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613458565b60405180910390a15050565b606060038054610739906134ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ac565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061336f565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061354c565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133ba565b6108b79190613428565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061300c565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061336f565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a161356a565b5b90506020020160208101906109b791906131cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135e1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061366f565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061336f565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061368d565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136b4565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061336f565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613731565b60405180910390fd5b6103e881610e896108f9565b610e9391906133ba565b610e9d9190613428565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061300c565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061336f565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613799565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613801565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613458565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061336f565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061300c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061300c565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061336f565b60405180910390fd5b61120e5f61272a565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e1565b60405180910390fd5b5f61130e30611144565b9050611319816127ed565b5f4790505f81111561132e5761132d612a80565b5b5050565b606060048054611341906134ac565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ac565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061388f565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061336f565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613908565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613209565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613935565b6040518363ffffffff1660e01b8152600401611749929190613960565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611789919061399b565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611817611eba565b73ffffffffffffffffffffffffffffffffffffffff16611835611210565b73ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118829061336f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613a36565b60405180910390fd5b6119028161272a565b50565b61190d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661192b611210565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061336f565b60405180910390fd5b601360149054906101000a900460ff16156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613a9e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a583060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a536108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190613ad0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b909190613ad0565b6040518363ffffffff1660e01b8152600401611bad929190613afb565b6020604051808303815f875af1158015611bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bed9190613ad0565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c7430611144565b5f80611c7e611210565b426040518863ffffffff1660e01b8152600401611ca096959493929190613b5b565b60606040518083038185885af1158015611cbc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ce19190613bba565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d81929190613c0a565b6020604051808303815f875af1158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc1919061399b565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506018600a819055506018600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061300c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e4b565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ed9565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b156126f35761225f6064612251600a5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242957600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f41565b60405180910390fd5b600f54826123b485611144565b6123be91906136b4565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fa9565b60405180910390fd5b43600360085461240f91906136b4565b5050600d5f81548092919061242390613fc7565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124cd575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252b57600f54826124df85611144565b6124e991906136b4565b111561252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190613fa9565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125e3576125e060646125d2600b5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b90505b5f6125ed30611144565b9050601360159054906101000a900460ff16158015612658575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126705750601360169054906101000a900460ff165b801561267d575060105481115b801561268c5750600c54600d54115b80156126c157504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156126f1576126da6126d582601154612b38565b6127ed565b5f4790505f8111156126ef576126ee612a80565b5b505b505b5f81111561270757612706843083612b50565b5b612724848461271f8486612dc590919063ffffffff16565b612b50565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561284c5761284b61400e565b5b60405190808252806020026020018201604052801561287a5781602001602082028036833780820191505090505b50905030815f815181106128915761289061356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129599190613ad0565b8160018151811061296d5761296c61356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129d33060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a359594939291906140f2565b5f604051808303815f87803b158015612a4c575f80fd5b505af1158015612a5e573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ac690614177565b5f6040518083038185875af1925050503d805f8114612b00576040519150601f19603f3d011682016040523d82523d5f602084013e612b05565b606091505b50508091505050565b5f8183612b1b91906133ba565b905092915050565b5f8183612b309190613428565b905092915050565b5f818311612b465782612b48565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390613e4b565b60405180910390fd5b612c37838383612dda565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb1906141fb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d4891906136b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dac919061300c565b60405180910390a3612dbf848484612ddf565b50505050565b5f8183612dd29190614219565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612dfe81612dec565b8114612e08575f80fd5b50565b5f81359050612e1981612df5565b92915050565b5f8060408385031215612e3557612e34612de4565b5b5f612e4285828601612e0b565b9250506020612e5385828601612e0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e94578082015181840152602081019050612e79565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eb982612e5d565b612ec38185612e67565b9350612ed3818560208601612e77565b612edc81612e9f565b840191505092915050565b5f6020820190508181035f830152612eff8184612eaf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f8060408385031215612f7757612f76612de4565b5b5f612f8485828601612f4d565b9250506020612f9585828601612e0b565b9150509250929050565b5f8115159050919050565b612fb381612f9f565b82525050565b5f602082019050612fcc5f830184612faa565b92915050565b5f60208284031215612fe757612fe6612de4565b5b5f612ff484828501612e0b565b91505092915050565b61300681612dec565b82525050565b5f60208201905061301f5f830184612ffd565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261304657613045613025565b5b8235905067ffffffffffffffff81111561306357613062613029565b5b60208301915083602082028301111561307f5761307e61302d565b5b9250929050565b61308f81612f9f565b8114613099575f80fd5b50565b5f813590506130aa81613086565b92915050565b5f805f604084860312156130c7576130c6612de4565b5b5f84013567ffffffffffffffff8111156130e4576130e3612de8565b5b6130f086828701613031565b935093505060206131038682870161309c565b9150509250925092565b5f805f6060848603121561312457613123612de4565b5b5f61313186828701612f4d565b935050602061314286828701612f4d565b925050604061315386828701612e0b565b9150509250925092565b5f806040838503121561317357613172612de4565b5b5f61318085828601612f4d565b92505060206131918582860161309c565b9150509250929050565b5f60ff82169050919050565b6131b08161319b565b82525050565b5f6020820190506131c95f8301846131a7565b92915050565b5f602082840312156131e4576131e3612de4565b5b5f6131f184828501612f4d565b91505092915050565b61320381612f26565b82525050565b5f60208201905061321c5f8301846131fa565b92915050565b5f60c0820190506132355f830189612ffd565b6132426020830188612ffd565b61324f6040830187612ffd565b61325c6060830186612ffd565b6132696080830185612ffd565b61327660a0830184612ffd565b979650505050505050565b5f61328b82612f07565b9050919050565b61329b81613281565b81146132a5575f80fd5b50565b5f813590506132b681613292565b92915050565b5f602082840312156132d1576132d0612de4565b5b5f6132de848285016132a8565b91505092915050565b5f80604083850312156132fd576132fc612de4565b5b5f61330a85828601612f4d565b925050602061331b85828601612f4d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613359602083612e67565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c482612dec565b91506133cf83612dec565b92508282026133dd81612dec565b915082820484148315176133f4576133f361338d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343282612dec565b915061343d83612dec565b92508261344d5761344c6133fb565b5b828204905092915050565b5f60408201905061346b5f830185612ffd565b6134786020830184612ffd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134c357607f821691505b6020821081036134d6576134d561347f565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613536602283612e67565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135cb601d83612e67565b91506135d682613597565b602082019050919050565b5f6020820190508181035f8301526135f8816135bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613659602883612e67565b9150613664826135ff565b604082019050919050565b5f6020820190508181035f8301526136868161364d565b9050919050565b5f6040820190506136a05f8301856131fa565b6136ad6020830184612faa565b9392505050565b5f6136be82612dec565b91506136c983612dec565b92508282019050808211156136e1576136e061338d565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f61371b601e83612e67565b9150613726826136e7565b602082019050919050565b5f6020820190508181035f8301526137488161370f565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613783601583612e67565b915061378e8261374f565b602082019050919050565b5f6020820190508181035f8301526137b081613777565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137eb601683612e67565b91506137f6826137b7565b602082019050919050565b5f6020820190508181035f830152613818816137df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613879602583612e67565b91506138848261381f565b604082019050919050565b5f6020820190508181035f8301526138a68161386d565b9050919050565b5f819050919050565b5f6138d06138cb6138c684612f07565b6138ad565b612f07565b9050919050565b5f6138e1826138b6565b9050919050565b5f6138f2826138d7565b9050919050565b613902816138e8565b82525050565b5f60208201905061391b5f8301846138f9565b92915050565b5f8151905061392f81612df5565b92915050565b5f6020828403121561394a57613949612de4565b5b5f61395784828501613921565b91505092915050565b5f6040820190506139735f8301856138f9565b6139806020830184612ffd565b9392505050565b5f8151905061399581613086565b92915050565b5f602082840312156139b0576139af612de4565b5b5f6139bd84828501613987565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a20602683612e67565b9150613a2b826139c6565b604082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a88601783612e67565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b5f81519050613aca81612f37565b92915050565b5f60208284031215613ae557613ae4612de4565b5b5f613af284828501613abc565b91505092915050565b5f604082019050613b0e5f8301856131fa565b613b1b60208301846131fa565b9392505050565b5f819050919050565b5f613b45613b40613b3b84613b22565b6138ad565b612dec565b9050919050565b613b5581613b2b565b82525050565b5f60c082019050613b6e5f8301896131fa565b613b7b6020830188612ffd565b613b886040830187613b4c565b613b956060830186613b4c565b613ba260808301856131fa565b613baf60a0830184612ffd565b979650505050505050565b5f805f60608486031215613bd157613bd0612de4565b5b5f613bde86828701613921565b9350506020613bef86828701613921565b9250506040613c0086828701613921565b9150509250925092565b5f604082019050613c1d5f8301856131fa565b613c2a6020830184612ffd565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483612e67565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283612e67565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583612e67565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383612e67565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ec3602983612e67565b9150613ece82613e69565b604082019050919050565b5f6020820190508181035f830152613ef081613eb7565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f2b601b83612e67565b9150613f3682613ef7565b602082019050919050565b5f6020820190508181035f830152613f5881613f1f565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613f93601a83612e67565b9150613f9e82613f5f565b602082019050919050565b5f6020820190508181035f830152613fc081613f87565b9050919050565b5f613fd182612dec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140035761400261338d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61406d81612f26565b82525050565b5f61407e8383614064565b60208301905092915050565b5f602082019050919050565b5f6140a08261403b565b6140aa8185614045565b93506140b583614055565b805f5b838110156140e55781516140cc8882614073565b97506140d78361408a565b9250506001810190506140b8565b5085935050505092915050565b5f60a0820190506141055f830188612ffd565b6141126020830187613b4c565b81810360408301526141248186614096565b905061413360608301856131fa565b6141406080830184612ffd565b9695505050505050565b5f81905092915050565b50565b5f6141625f8361414a565b915061416d82614154565b5f82019050919050565b5f61418182614157565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141e5602683612e67565b91506141f08261418b565b604082019050919050565b5f6020820190508181035f830152614212816141d9565b9050919050565b5f61422382612dec565b915061422e83612dec565b92508282039050818111156142465761424561338d565b5b9291505056fea2646970667358221220742829568f14a3bdfb2e12b920d504ef5c8074ebe89073c438256080e60a638c64736f6c63430008170033
Deployed Bytecode
0x60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063dd62ed3e146105ab578063f2fde38b146105e7578063fcfff16f1461060f576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e1f565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ee7565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f61565b6107ba565b60405161022f9190612fb9565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fd2565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061300c565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130b0565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061310d565b610b0f565b6040516102fb9190612fb9565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061315d565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131b6565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f61565b610d16565b6040516103899190612fb9565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fd2565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e1f565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131cf565b611144565b60405161042b919061300c565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613209565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ee7565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f61565b6113c2565b6040516104e79190612fb9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f61565b6114a8565b6040516105239190612fb9565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613222565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132bc565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131cf565b6115e7565b005b3480156105b6575f80fd5b506105d160048036038101906105cc91906132e7565b61178d565b6040516105de919061300c565b60405180910390f35b3480156105f2575f80fd5b5061060d600480360381019061060891906131cf565b61180f565b005b34801561061a575f80fd5b50610623611905565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061336f565b60405180910390fd5b612710826106ad6108f9565b6106b791906133ba565b6106c19190613428565b601081905550612710816106d36108f9565b6106dd91906133ba565b6106e79190613428565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613458565b60405180910390a15050565b606060038054610739906134ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ac565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061336f565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061354c565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133ba565b6108b79190613428565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061300c565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061336f565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a161356a565b5b90506020020160208101906109b791906131cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135e1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061366f565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061336f565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061368d565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136b4565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061336f565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613731565b60405180910390fd5b6103e881610e896108f9565b610e9391906133ba565b610e9d9190613428565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061300c565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061336f565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613799565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613801565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613458565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061336f565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061300c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061300c565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061336f565b60405180910390fd5b61120e5f61272a565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e1565b60405180910390fd5b5f61130e30611144565b9050611319816127ed565b5f4790505f81111561132e5761132d612a80565b5b5050565b606060048054611341906134ac565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ac565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061388f565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061336f565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613908565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613209565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613935565b6040518363ffffffff1660e01b8152600401611749929190613960565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611789919061399b565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611817611eba565b73ffffffffffffffffffffffffffffffffffffffff16611835611210565b73ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118829061336f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613a36565b60405180910390fd5b6119028161272a565b50565b61190d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661192b611210565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061336f565b60405180910390fd5b601360149054906101000a900460ff16156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613a9e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a583060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a536108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190613ad0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b909190613ad0565b6040518363ffffffff1660e01b8152600401611bad929190613afb565b6020604051808303815f875af1158015611bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bed9190613ad0565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c7430611144565b5f80611c7e611210565b426040518863ffffffff1660e01b8152600401611ca096959493929190613b5b565b60606040518083038185885af1158015611cbc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ce19190613bba565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d81929190613c0a565b6020604051808303815f875af1158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc1919061399b565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506018600a819055506018600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061300c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e4b565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ed9565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b156126f35761225f6064612251600a5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242957600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f41565b60405180910390fd5b600f54826123b485611144565b6123be91906136b4565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fa9565b60405180910390fd5b43600360085461240f91906136b4565b5050600d5f81548092919061242390613fc7565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124cd575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252b57600f54826124df85611144565b6124e991906136b4565b111561252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190613fa9565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125e3576125e060646125d2600b5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b90505b5f6125ed30611144565b9050601360159054906101000a900460ff16158015612658575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126705750601360169054906101000a900460ff165b801561267d575060105481115b801561268c5750600c54600d54115b80156126c157504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156126f1576126da6126d582601154612b38565b6127ed565b5f4790505f8111156126ef576126ee612a80565b5b505b505b5f81111561270757612706843083612b50565b5b612724848461271f8486612dc590919063ffffffff16565b612b50565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561284c5761284b61400e565b5b60405190808252806020026020018201604052801561287a5781602001602082028036833780820191505090505b50905030815f815181106128915761289061356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129599190613ad0565b8160018151811061296d5761296c61356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129d33060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a359594939291906140f2565b5f604051808303815f87803b158015612a4c575f80fd5b505af1158015612a5e573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ac690614177565b5f6040518083038185875af1925050503d805f8114612b00576040519150601f19603f3d011682016040523d82523d5f602084013e612b05565b606091505b50508091505050565b5f8183612b1b91906133ba565b905092915050565b5f8183612b309190613428565b905092915050565b5f818311612b465782612b48565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390613e4b565b60405180910390fd5b612c37838383612dda565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb1906141fb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d4891906136b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dac919061300c565b60405180910390a3612dbf848484612ddf565b50505050565b5f8183612dd29190614219565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612dfe81612dec565b8114612e08575f80fd5b50565b5f81359050612e1981612df5565b92915050565b5f8060408385031215612e3557612e34612de4565b5b5f612e4285828601612e0b565b9250506020612e5385828601612e0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e94578082015181840152602081019050612e79565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eb982612e5d565b612ec38185612e67565b9350612ed3818560208601612e77565b612edc81612e9f565b840191505092915050565b5f6020820190508181035f830152612eff8184612eaf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f8060408385031215612f7757612f76612de4565b5b5f612f8485828601612f4d565b9250506020612f9585828601612e0b565b9150509250929050565b5f8115159050919050565b612fb381612f9f565b82525050565b5f602082019050612fcc5f830184612faa565b92915050565b5f60208284031215612fe757612fe6612de4565b5b5f612ff484828501612e0b565b91505092915050565b61300681612dec565b82525050565b5f60208201905061301f5f830184612ffd565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261304657613045613025565b5b8235905067ffffffffffffffff81111561306357613062613029565b5b60208301915083602082028301111561307f5761307e61302d565b5b9250929050565b61308f81612f9f565b8114613099575f80fd5b50565b5f813590506130aa81613086565b92915050565b5f805f604084860312156130c7576130c6612de4565b5b5f84013567ffffffffffffffff8111156130e4576130e3612de8565b5b6130f086828701613031565b935093505060206131038682870161309c565b9150509250925092565b5f805f6060848603121561312457613123612de4565b5b5f61313186828701612f4d565b935050602061314286828701612f4d565b925050604061315386828701612e0b565b9150509250925092565b5f806040838503121561317357613172612de4565b5b5f61318085828601612f4d565b92505060206131918582860161309c565b9150509250929050565b5f60ff82169050919050565b6131b08161319b565b82525050565b5f6020820190506131c95f8301846131a7565b92915050565b5f602082840312156131e4576131e3612de4565b5b5f6131f184828501612f4d565b91505092915050565b61320381612f26565b82525050565b5f60208201905061321c5f8301846131fa565b92915050565b5f60c0820190506132355f830189612ffd565b6132426020830188612ffd565b61324f6040830187612ffd565b61325c6060830186612ffd565b6132696080830185612ffd565b61327660a0830184612ffd565b979650505050505050565b5f61328b82612f07565b9050919050565b61329b81613281565b81146132a5575f80fd5b50565b5f813590506132b681613292565b92915050565b5f602082840312156132d1576132d0612de4565b5b5f6132de848285016132a8565b91505092915050565b5f80604083850312156132fd576132fc612de4565b5b5f61330a85828601612f4d565b925050602061331b85828601612f4d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613359602083612e67565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c482612dec565b91506133cf83612dec565b92508282026133dd81612dec565b915082820484148315176133f4576133f361338d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343282612dec565b915061343d83612dec565b92508261344d5761344c6133fb565b5b828204905092915050565b5f60408201905061346b5f830185612ffd565b6134786020830184612ffd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134c357607f821691505b6020821081036134d6576134d561347f565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613536602283612e67565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135cb601d83612e67565b91506135d682613597565b602082019050919050565b5f6020820190508181035f8301526135f8816135bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613659602883612e67565b9150613664826135ff565b604082019050919050565b5f6020820190508181035f8301526136868161364d565b9050919050565b5f6040820190506136a05f8301856131fa565b6136ad6020830184612faa565b9392505050565b5f6136be82612dec565b91506136c983612dec565b92508282019050808211156136e1576136e061338d565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f61371b601e83612e67565b9150613726826136e7565b602082019050919050565b5f6020820190508181035f8301526137488161370f565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613783601583612e67565b915061378e8261374f565b602082019050919050565b5f6020820190508181035f8301526137b081613777565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137eb601683612e67565b91506137f6826137b7565b602082019050919050565b5f6020820190508181035f830152613818816137df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613879602583612e67565b91506138848261381f565b604082019050919050565b5f6020820190508181035f8301526138a68161386d565b9050919050565b5f819050919050565b5f6138d06138cb6138c684612f07565b6138ad565b612f07565b9050919050565b5f6138e1826138b6565b9050919050565b5f6138f2826138d7565b9050919050565b613902816138e8565b82525050565b5f60208201905061391b5f8301846138f9565b92915050565b5f8151905061392f81612df5565b92915050565b5f6020828403121561394a57613949612de4565b5b5f61395784828501613921565b91505092915050565b5f6040820190506139735f8301856138f9565b6139806020830184612ffd565b9392505050565b5f8151905061399581613086565b92915050565b5f602082840312156139b0576139af612de4565b5b5f6139bd84828501613987565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a20602683612e67565b9150613a2b826139c6565b604082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a88601783612e67565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b5f81519050613aca81612f37565b92915050565b5f60208284031215613ae557613ae4612de4565b5b5f613af284828501613abc565b91505092915050565b5f604082019050613b0e5f8301856131fa565b613b1b60208301846131fa565b9392505050565b5f819050919050565b5f613b45613b40613b3b84613b22565b6138ad565b612dec565b9050919050565b613b5581613b2b565b82525050565b5f60c082019050613b6e5f8301896131fa565b613b7b6020830188612ffd565b613b886040830187613b4c565b613b956060830186613b4c565b613ba260808301856131fa565b613baf60a0830184612ffd565b979650505050505050565b5f805f60608486031215613bd157613bd0612de4565b5b5f613bde86828701613921565b9350506020613bef86828701613921565b9250506040613c0086828701613921565b9150509250925092565b5f604082019050613c1d5f8301856131fa565b613c2a6020830184612ffd565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483612e67565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283612e67565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583612e67565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383612e67565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ec3602983612e67565b9150613ece82613e69565b604082019050919050565b5f6020820190508181035f830152613ef081613eb7565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f2b601b83612e67565b9150613f3682613ef7565b602082019050919050565b5f6020820190508181035f830152613f5881613f1f565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613f93601a83612e67565b9150613f9e82613f5f565b602082019050919050565b5f6020820190508181035f830152613fc081613f87565b9050919050565b5f613fd182612dec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140035761400261338d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61406d81612f26565b82525050565b5f61407e8383614064565b60208301905092915050565b5f602082019050919050565b5f6140a08261403b565b6140aa8185614045565b93506140b583614055565b805f5b838110156140e55781516140cc8882614073565b97506140d78361408a565b9250506001810190506140b8565b5085935050505092915050565b5f60a0820190506141055f830188612ffd565b6141126020830187613b4c565b81810360408301526141248186614096565b905061413360608301856131fa565b6141406080830184612ffd565b9695505050505050565b5f81905092915050565b50565b5f6141625f8361414a565b915061416d82614154565b5f82019050919050565b5f61418182614157565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141e5602683612e67565b91506141f08261418b565b604082019050919050565b5f6020820190508181035f830152614212816141d9565b9050919050565b5f61422382612dec565b915061422e83612dec565b92508282039050818111156142465761424561338d565b5b9291505056fea2646970667358221220742829568f14a3bdfb2e12b920d504ef5c8074ebe89073c438256080e60a638c64736f6c63430008170033
Deployed Bytecode Sourcemap
25414:9585:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29056:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11012:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13245:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28790:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12132:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30340:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29922:168;;;;;;;;;;;;;:::i;:::-;;13917:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30565:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11974:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14851:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28544:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29624:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29380:236;;;;;;;;;;;;;:::i;:::-;;12303:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22351:103;;;;;;;;;;;;;:::i;:::-;;21700:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33842:436;;;;;;;;;;;;;:::i;:::-;;11231:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15640:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12659:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30744:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28368:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30100:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12922:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27336:1024;;;;;;;;;;;;;:::i;:::-;;29056:310;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29230:5:::1;29210:16;29194:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29193:42;;;;:::i;:::-;29178:12;:57;;;;29292:5;29278:10;29262:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29261:36;;;;:::i;:::-;29246:12;:51;;;;29313:45;29329:16;29347:10;29313:45;;;;;;;:::i;:::-;;;;;;;;29056:310:::0;;:::o;11012:100::-;11066:13;11099:5;11092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;:::o;13245:194::-;13353:4;13370:39;13379:12;:10;:12::i;:::-;13393:7;13402:6;13370:8;:39::i;:::-;13427:4;13420:11;;13245:194;;;;:::o;28790:258::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28877:1:::1;28865:8;:13;;28857:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28978:4;28966:8;28950:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28949:33;;;;:::i;:::-;28928:18;:54;;;;28998:42;29021:18;;28998:42;;;;;;:::i;:::-;;;;;;;;28790:258:::0;:::o;12132:108::-;12193:7;12220:12;;12213:19;;12132:108;:::o;30340:217::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30458:9:::1;30453:97;30477:6;;:13;;30473:1;:17;30453:97;;;30532:6;30512;:17;30519:6;;30526:1;30519:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30512:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30492:3;;;;;;;30453:97;;;;30340:217:::0;;;:::o;29922:168::-;29985:10;;;;;;;;;;;29971:24;;:10;:24;;;29963:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30040:10;;;;;;;;;;;:19;;:42;30060:21;30040:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29922:168::o;13917:529::-;14057:4;14074:36;14084:6;14092:9;14103:6;14074:9;:36::i;:::-;14123:24;14150:11;:19;14162:6;14150:19;;;;;;;;;;;;;;;:33;14170:12;:10;:12::i;:::-;14150:33;;;;;;;;;;;;;;;;14123:60;;14236:6;14216:16;:26;;14194:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14346:57;14355:6;14363:12;:10;:12::i;:::-;14396:6;14377:16;:25;14346:8;:57::i;:::-;14434:4;14427:11;;;13917:529;;;;;:::o;30565:171::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30674:6:::1;30644:18;:27;30663:7;30644:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30696:32;30712:7;30721:6;30696:32;;;;;;;:::i;:::-;;;;;;;;30565:171:::0;;:::o;11974:93::-;12032:5;12057:2;12050:9;;11974:93;:::o;14851:290::-;14964:4;14981:130;15004:12;:10;:12::i;:::-;15031:7;15090:10;15053:11;:25;15065:12;:10;:12::i;:::-;15053:25;;;;;;;;;;;;;;;:34;15079:7;15053:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14981:8;:130::i;:::-;15129:4;15122:11;;14851:290;;;;:::o;28544:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28627:1:::1;28615:8;:13;;28607:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28720:4;28708:8;28692:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28691:33;;;;:::i;:::-;28674:14;:50;;;;28740:34;28759:14;;28740:34;;;;;;:::i;:::-;;;;;;;;28544:238:::0;:::o;29624:290::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29721:2:::1;29711:6;:12;;29703:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29779:2;29768:7;:13;;29760:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29828:6;29819;:15;;;;29855:7;29845;:17;;;;29878:28;29890:6;29898:7;29878:28;;;;;;;:::i;:::-;;;;;;;;29624:290:::0;;:::o;29380:236::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29448:13:::1;:11;:13::i;:::-;29431:14;:30;;;;29493:13;:11;:13::i;:::-;29472:18;:34;;;;29522:33;29541:13;:11;:13::i;:::-;29522:33;;;;;;:::i;:::-;;;;;;;;29571:37;29594:13;:11;:13::i;:::-;29571:37;;;;;;:::i;:::-;;;;;;;;29380:236::o:0;12303:143::-;12393:7;12420:9;:18;12430:7;12420:18;;;;;;;;;;;;;;;;12413:25;;12303:143;;;:::o;22351:103::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:30:::1;22443:1;22416:18;:30::i;:::-;22351:103::o:0;21700:87::-;21746:7;21773:6;;;;;;;;;;;21766:13;;21700:87;:::o;33842:436::-;33921:10;;;;;;;;;;;33907:24;;:10;:24;;;:49;;;;33949:7;:5;:7::i;:::-;33935:21;;:10;:21;;;33907:49;33885:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34024:28;34055:24;34073:4;34055:9;:24::i;:::-;34024:55;;34092:38;34109:20;34092:16;:38::i;:::-;34141:26;34170:21;34141:50;;34227:1;34206:18;:22;34202:69;;;34245:14;:12;:14::i;:::-;34202:69;33874:404;;33842:436::o;11231:104::-;11287:13;11320:7;11313:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11231:104;:::o;15640:475::-;15758:4;15775:24;15802:11;:25;15814:12;:10;:12::i;:::-;15802:25;;;;;;;;;;;;;;;:34;15828:7;15802:34;;;;;;;;;;;;;;;;15775:61;;15889:15;15869:16;:35;;15847:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16005:67;16014:12;:10;:12::i;:::-;16028:7;16056:15;16037:16;:34;16005:8;:67::i;:::-;16103:4;16096:11;;;15640:475;;;;:::o;12659:200::-;12770:4;12787:42;12797:12;:10;:12::i;:::-;12811:9;12822:6;12787:9;:42::i;:::-;12847:4;12840:11;;12659:200;;;;:::o;30744:485::-;30828:15;30858:16;30889:19;30923:21;30959:24;30998:18;31066:6;;31087:7;;31109:14;;31138:18;;31171:12;;31198;;31044:177;;;;;;;;;;;;30744:485;;;;;;:::o;28368:168::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28460:15:::1;28447:10;;:28;;;;;;;;;;;;;;;;;;28493:35;28512:15;28493:35;;;;;;:::i;:::-;;;;;;;;28368:168:::0;:::o;30100:232::-;30186:10;;;;;;;;;;;30172:24;;:10;:24;;;30164:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30248:8;30241:25;;;30267:10;;;;;;;;;;;30285:8;30278:26;;;30313:4;30278:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30241:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30100:232;:::o;12922:176::-;13036:7;13063:11;:18;13075:5;13063:18;;;;;;;;;;;;;;;:27;13082:7;13063:27;;;;;;;;;;;;;;;;13056:34;;12922:176;;;;:::o;22609:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22732:1:::1;22712:22;;:8;:22;;::::0;22690:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22811:28;22830:8;22811:18;:28::i;:::-;22609:238:::0;:::o;27336:1024::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27391:11:::1;;;;;;;;;;;27390:12;27382:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27484:42;27441:15;;:96;;;;;;;;;;;;;;;;;;27548:64;27565:4;27580:15;;;;;;;;;;;27598:13;:11;:13::i;:::-;27548:8;:64::i;:::-;27651:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27639:49;;;27711:4;27731:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27639:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27623:13;;:141;;;;;;;;;;;;;;;;;;27775:15;;;;;;;;;;;:31;;;27814:21;27859:4;27879:24;27897:4;27879:9;:24::i;:::-;27918:1;27934::::0;27950:7:::1;:5;:7::i;:::-;27972:15;27775:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28016:13;;;;;;;;;;;28009:29;;;28047:15;;;;;;;;;;;28065:14;28009:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28105:4;28091:11;;:18;;;;;;;;;;;;;;;;;;28134:4;28120:11;;:18;;;;;;;;;;;;;;;;;;28162:12;28149:10;:25;;;;28210:12;28185:15;;:38;;;;;;;;;;;;;;;;;;28270:4;28234:18;:33;28261:4;28234:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28294:2;28285:6;:11;;;;28317:2;28307:7;:12;;;;28337:15;;;;;;;;;;27336:1024::o:0;10018:98::-;10071:7;10098:10;10091:17;;10018:98;:::o;19423:380::-;19576:1;19559:19;;:5;:19;;;19551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:1;19638:21;;:7;:21;;;19630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:6;19711:11;:18;19723:5;19711:18;;;;;;;;;;;;;;;:27;19730:7;19711:27;;;;;;;;;;;;;;;:36;;;;19779:7;19763:32;;19772:5;19763:32;;;19788:6;19763:32;;;;;;:::i;:::-;;;;;;;;19423:380;;;:::o;31237:2279::-;31385:1;31369:18;;:4;:18;;;31361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31462:1;31448:16;;:2;:16;;;31440:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31532:1;31523:6;:10;31515:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31590:17;31634:7;:5;:7::i;:::-;31626:15;;:4;:15;;;;:32;;;;;31651:7;:5;:7::i;:::-;31645:13;;:2;:13;;;;31626:32;:43;;;;;31663:6;;;;;;;;;;;31662:7;31626:43;31622:1723;;;31698:27;31721:3;31698:18;31709:6;;31698;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31686:39;;31772:13;;;;;;;;;;;31764:21;;:4;:21;;;:72;;;;;31820:15;;;;;;;;;;;31806:30;;:2;:30;;;;31764:72;:116;;;;;31858:18;:22;31877:2;31858:22;;;;;;;;;;;;;;;;;;;;;;;;;31857:23;31764:116;31742:571;;;31933:14;;31923:6;:24;;31915:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32054:18;;32044:6;32028:13;32038:2;32028:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31998:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32184:12;32180:1;32167:10;;:14;;;;:::i;:::-;:29;;32286:9;;:11;;;;;;;;;:::i;:::-;;;;;;31742:571;32339:13;;;;;;;;;;;32333:19;;:2;:19;;;;:46;;;;;32357:18;:22;32376:2;32357:22;;;;;;;;;;;;;;;;;;;;;;;;;32356:23;32333:46;32329:231;;;32456:18;;32446:6;32430:13;32440:2;32430:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32400:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32329:231;32586:13;;;;;;;;;;;32580:19;;:2;:19;;;:44;;;;;32619:4;32603:21;;:4;:21;;;;32580:44;32576:125;;;32657:28;32681:3;32657:19;32668:7;;32657:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32645:40;;32576:125;32717:28;32748:24;32766:4;32748:9;:24::i;:::-;32717:55;;32810:6;;;;;;;;;;;32809:7;:47;;;;;32843:13;;;;;;;;;;;32837:19;;:2;:19;;;32809:47;:79;;;;;32877:11;;;;;;;;;;;32809:79;:135;;;;;32932:12;;32909:20;:35;32809:135;:186;;;;;32977:18;;32965:9;;:30;32809:186;:246;;;;;33042:12;33016:39;;:15;;;;;;;;;;;:39;;;;32809:246;32787:547;;;33090:56;33107:38;33111:20;33132:12;;33107:3;:38::i;:::-;33090:16;:56::i;:::-;33165:26;33194:21;33165:50;;33259:1;33238:18;:22;33234:85;;;33285:14;:12;:14::i;:::-;33234:85;33071:263;32787:547;31671:1674;31622:1723;33373:1;33361:9;:13;33357:93;;;33391:47;33407:4;33421;33428:9;33391:15;:47::i;:::-;33357:93;33460:48;33476:4;33482:2;33486:21;33497:9;33486:6;:10;;:21;;;;:::i;:::-;33460:15;:48::i;:::-;31350:2166;31237:2279;;;:::o;23007:191::-;23081:16;23100:6;;;;;;;;;;;23081:25;;23126:8;23117:6;;:17;;;;;;;;;;;;;;;;;;23181:8;23150:40;;23171:8;23150:40;;;;;;;;;;;;23070:128;23007:191;:::o;34286:532::-;26634:4;26625:6;;:13;;;;;;;;;;;;;;;;;;34389:12:::1;34364:15;;:38;;;;;;;;;;;;;;;;;;34413:21;34451:1;34437:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34413:40;;34482:4;34464;34469:1;34464:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34508:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34498:4;34503:1;34498:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34541:62;34558:4;34573:15;;;;;;;;;;;34591:11;34541:8;:62::i;:::-;34614:15;;;;;;;;;;;:66;;;34695:11;34721:1;34737:4;34764;34784:15;34614:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34353:465;26670:5:::0;26661:6;;:14;;;;;;;;;;;;;;;;;;34286:532;:::o;34826:170::-;34869:12;34914:10;;;;;;;;;;;34906:24;;34938:21;34906:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34892:96;;;;;34858:138;34826:170::o;3377:98::-;3435:7;3466:1;3462;:5;;;;:::i;:::-;3455:12;;3377:98;;;;:::o;3776:::-;3834:7;3865:1;3861;:5;;;;:::i;:::-;3854:12;;3776:98;;;;:::o;33524:107::-;33581:7;33613:1;33609;:5;33608:15;;33622:1;33608:15;;;33618:1;33608:15;33601:22;;33524:107;;;;:::o;16605:770::-;16763:1;16745:20;;:6;:20;;;16737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16847:1;16826:23;;:9;:23;;;16818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:47;16923:6;16931:9;16942:6;16902:20;:47::i;:::-;16962:21;16986:9;:17;16996:6;16986:17;;;;;;;;;;;;;;;;16962:41;;17053:6;17036:13;:23;;17014:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17197:6;17181:13;:22;17161:9;:17;17171:6;17161:17;;;;;;;;;;;;;;;:42;;;;17249:6;17225:9;:20;17235:9;17225:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17290:9;17273:35;;17282:6;17273:35;;;17301:6;17273:35;;;;;;:::i;:::-;;;;;;;;17321:46;17341:6;17349:9;17360:6;17321:19;:46::i;:::-;16726:649;16605:770;;;:::o;3020:98::-;3078:7;3109:1;3105;:5;;;;:::i;:::-;3098:12;;3020:98;;;;:::o;20403:125::-;;;;:::o;21132:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:117::-;4722:1;4719;4712:12;4736:117;4845:1;4842;4835:12;4859:117;4968:1;4965;4958:12;4999:568;5072:8;5082:6;5132:3;5125:4;5117:6;5113:17;5109:27;5099:122;;5140:79;;:::i;:::-;5099:122;5253:6;5240:20;5230:30;;5283:18;5275:6;5272:30;5269:117;;;5305:79;;:::i;:::-;5269:117;5419:4;5411:6;5407:17;5395:29;;5473:3;5465:4;5457:6;5453:17;5443:8;5439:32;5436:41;5433:128;;;5480:79;;:::i;:::-;5433:128;4999:568;;;;;:::o;5573:116::-;5643:21;5658:5;5643:21;:::i;:::-;5636:5;5633:32;5623:60;;5679:1;5676;5669:12;5623:60;5573:116;:::o;5695:133::-;5738:5;5776:6;5763:20;5754:29;;5792:30;5816:5;5792:30;:::i;:::-;5695:133;;;;:::o;5834:698::-;5926:6;5934;5942;5991:2;5979:9;5970:7;5966:23;5962:32;5959:119;;;5997:79;;:::i;:::-;5959:119;6145:1;6134:9;6130:17;6117:31;6175:18;6167:6;6164:30;6161:117;;;6197:79;;:::i;:::-;6161:117;6310:80;6382:7;6373:6;6362:9;6358:22;6310:80;:::i;:::-;6292:98;;;;6088:312;6439:2;6465:50;6507:7;6498:6;6487:9;6483:22;6465:50;:::i;:::-;6455:60;;6410:115;5834:698;;;;;:::o;6538:619::-;6615:6;6623;6631;6680:2;6668:9;6659:7;6655:23;6651:32;6648:119;;;6686:79;;:::i;:::-;6648:119;6806:1;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6777:117;6933:2;6959:53;7004:7;6995:6;6984:9;6980:22;6959:53;:::i;:::-;6949:63;;6904:118;7061:2;7087:53;7132:7;7123:6;7112:9;7108:22;7087:53;:::i;:::-;7077:63;;7032:118;6538:619;;;;;:::o;7163:468::-;7228:6;7236;7285:2;7273:9;7264:7;7260:23;7256:32;7253:119;;;7291:79;;:::i;:::-;7253:119;7411:1;7436:53;7481:7;7472:6;7461:9;7457:22;7436:53;:::i;:::-;7426:63;;7382:117;7538:2;7564:50;7606:7;7597:6;7586:9;7582:22;7564:50;:::i;:::-;7554:60;;7509:115;7163:468;;;;;:::o;7637:86::-;7672:7;7712:4;7705:5;7701:16;7690:27;;7637:86;;;:::o;7729:112::-;7812:22;7828:5;7812:22;:::i;:::-;7807:3;7800:35;7729:112;;:::o;7847:214::-;7936:4;7974:2;7963:9;7959:18;7951:26;;7987:67;8051:1;8040:9;8036:17;8027:6;7987:67;:::i;:::-;7847:214;;;;:::o;8067:329::-;8126:6;8175:2;8163:9;8154:7;8150:23;8146:32;8143:119;;;8181:79;;:::i;:::-;8143:119;8301:1;8326:53;8371:7;8362:6;8351:9;8347:22;8326:53;:::i;:::-;8316:63;;8272:117;8067:329;;;;:::o;8402:118::-;8489:24;8507:5;8489:24;:::i;:::-;8484:3;8477:37;8402:118;;:::o;8526:222::-;8619:4;8657:2;8646:9;8642:18;8634:26;;8670:71;8738:1;8727:9;8723:17;8714:6;8670:71;:::i;:::-;8526:222;;;;:::o;8754:775::-;8987:4;9025:3;9014:9;9010:19;9002:27;;9039:71;9107:1;9096:9;9092:17;9083:6;9039:71;:::i;:::-;9120:72;9188:2;9177:9;9173:18;9164:6;9120:72;:::i;:::-;9202;9270:2;9259:9;9255:18;9246:6;9202:72;:::i;:::-;9284;9352:2;9341:9;9337:18;9328:6;9284:72;:::i;:::-;9366:73;9434:3;9423:9;9419:19;9410:6;9366:73;:::i;:::-;9449;9517:3;9506:9;9502:19;9493:6;9449:73;:::i;:::-;8754:775;;;;;;;;;:::o;9535:104::-;9580:7;9609:24;9627:5;9609:24;:::i;:::-;9598:35;;9535:104;;;:::o;9645:138::-;9726:32;9752:5;9726:32;:::i;:::-;9719:5;9716:43;9706:71;;9773:1;9770;9763:12;9706:71;9645:138;:::o;9789:155::-;9843:5;9881:6;9868:20;9859:29;;9897:41;9932:5;9897:41;:::i;:::-;9789:155;;;;:::o;9950:345::-;10017:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:119;;;10072:79;;:::i;:::-;10034:119;10192:1;10217:61;10270:7;10261:6;10250:9;10246:22;10217:61;:::i;:::-;10207:71;;10163:125;9950:345;;;;:::o;10301:474::-;10369:6;10377;10426:2;10414:9;10405:7;10401:23;10397:32;10394:119;;;10432:79;;:::i;:::-;10394:119;10552:1;10577:53;10622:7;10613:6;10602:9;10598:22;10577:53;:::i;:::-;10567:63;;10523:117;10679:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10650:118;10301:474;;;;;:::o;10781:182::-;10921:34;10917:1;10909:6;10905:14;10898:58;10781:182;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;10969:366;;;:::o;11341:419::-;11507:4;11545:2;11534:9;11530:18;11522:26;;11594:9;11588:4;11584:20;11580:1;11569:9;11565:17;11558:47;11622:131;11748:4;11622:131;:::i;:::-;11614:139;;11341:419;;;:::o;11766:180::-;11814:77;11811:1;11804:88;11911:4;11908:1;11901:15;11935:4;11932:1;11925:15;11952:410;11992:7;12015:20;12033:1;12015:20;:::i;:::-;12010:25;;12049:20;12067:1;12049:20;:::i;:::-;12044:25;;12104:1;12101;12097:9;12126:30;12144:11;12126:30;:::i;:::-;12115:41;;12305:1;12296:7;12292:15;12289:1;12286:22;12266:1;12259:9;12239:83;12216:139;;12335:18;;:::i;:::-;12216:139;12000:362;11952:410;;;;:::o;12368:180::-;12416:77;12413:1;12406:88;12513:4;12510:1;12503:15;12537:4;12534:1;12527:15;12554:185;12594:1;12611:20;12629:1;12611:20;:::i;:::-;12606:25;;12645:20;12663:1;12645:20;:::i;:::-;12640:25;;12684:1;12674:35;;12689:18;;:::i;:::-;12674:35;12731:1;12728;12724:9;12719:14;;12554:185;;;;:::o;12745:332::-;12866:4;12904:2;12893:9;12889:18;12881:26;;12917:71;12985:1;12974:9;12970:17;12961:6;12917:71;:::i;:::-;12998:72;13066:2;13055:9;13051:18;13042:6;12998:72;:::i;:::-;12745:332;;;;;:::o;13083:180::-;13131:77;13128:1;13121:88;13228:4;13225:1;13218:15;13252:4;13249:1;13242:15;13269:320;13313:6;13350:1;13344:4;13340:12;13330:22;;13397:1;13391:4;13387:12;13418:18;13408:81;;13474:4;13466:6;13462:17;13452:27;;13408:81;13536:2;13528:6;13525:14;13505:18;13502:38;13499:84;;13555:18;;:::i;:::-;13499:84;13320:269;13269:320;;;:::o;13595:221::-;13735:34;13731:1;13723:6;13719:14;13712:58;13804:4;13799:2;13791:6;13787:15;13780:29;13595:221;:::o;13822:366::-;13964:3;13985:67;14049:2;14044:3;13985:67;:::i;:::-;13978:74;;14061:93;14150:3;14061:93;:::i;:::-;14179:2;14174:3;14170:12;14163:19;;13822:366;;;:::o;14194:419::-;14360:4;14398:2;14387:9;14383:18;14375:26;;14447:9;14441:4;14437:20;14433:1;14422:9;14418:17;14411:47;14475:131;14601:4;14475:131;:::i;:::-;14467:139;;14194:419;;;:::o;14619:180::-;14667:77;14664:1;14657:88;14764:4;14761:1;14754:15;14788:4;14785:1;14778:15;14805:179;14945:31;14941:1;14933:6;14929:14;14922:55;14805:179;:::o;14990:366::-;15132:3;15153:67;15217:2;15212:3;15153:67;:::i;:::-;15146:74;;15229:93;15318:3;15229:93;:::i;:::-;15347:2;15342:3;15338:12;15331:19;;14990:366;;;:::o;15362:419::-;15528:4;15566:2;15555:9;15551:18;15543:26;;15615:9;15609:4;15605:20;15601:1;15590:9;15586:17;15579:47;15643:131;15769:4;15643:131;:::i;:::-;15635:139;;15362:419;;;:::o;15787:227::-;15927:34;15923:1;15915:6;15911:14;15904:58;15996:10;15991:2;15983:6;15979:15;15972:35;15787:227;:::o;16020:366::-;16162:3;16183:67;16247:2;16242:3;16183:67;:::i;:::-;16176:74;;16259:93;16348:3;16259:93;:::i;:::-;16377:2;16372:3;16368:12;16361:19;;16020:366;;;:::o;16392:419::-;16558:4;16596:2;16585:9;16581:18;16573:26;;16645:9;16639:4;16635:20;16631:1;16620:9;16616:17;16609:47;16673:131;16799:4;16673:131;:::i;:::-;16665:139;;16392:419;;;:::o;16817:320::-;16932:4;16970:2;16959:9;16955:18;16947:26;;16983:71;17051:1;17040:9;17036:17;17027:6;16983:71;:::i;:::-;17064:66;17126:2;17115:9;17111:18;17102:6;17064:66;:::i;:::-;16817:320;;;;;:::o;17143:191::-;17183:3;17202:20;17220:1;17202:20;:::i;:::-;17197:25;;17236:20;17254:1;17236:20;:::i;:::-;17231:25;;17279:1;17276;17272:9;17265:16;;17300:3;17297:1;17294:10;17291:36;;;17307:18;;:::i;:::-;17291:36;17143:191;;;;:::o;17340:180::-;17480:32;17476:1;17468:6;17464:14;17457:56;17340:180;:::o;17526:366::-;17668:3;17689:67;17753:2;17748:3;17689:67;:::i;:::-;17682:74;;17765:93;17854:3;17765:93;:::i;:::-;17883:2;17878:3;17874:12;17867:19;;17526:366;;;:::o;17898:419::-;18064:4;18102:2;18091:9;18087:18;18079:26;;18151:9;18145:4;18141:20;18137:1;18126:9;18122:17;18115:47;18179:131;18305:4;18179:131;:::i;:::-;18171:139;;17898:419;;;:::o;18323:171::-;18463:23;18459:1;18451:6;18447:14;18440:47;18323:171;:::o;18500:366::-;18642:3;18663:67;18727:2;18722:3;18663:67;:::i;:::-;18656:74;;18739:93;18828:3;18739:93;:::i;:::-;18857:2;18852:3;18848:12;18841:19;;18500:366;;;:::o;18872:419::-;19038:4;19076:2;19065:9;19061:18;19053:26;;19125:9;19119:4;19115:20;19111:1;19100:9;19096:17;19089:47;19153:131;19279:4;19153:131;:::i;:::-;19145:139;;18872:419;;;:::o;19297:172::-;19437:24;19433:1;19425:6;19421:14;19414:48;19297:172;:::o;19475:366::-;19617:3;19638:67;19702:2;19697:3;19638:67;:::i;:::-;19631:74;;19714:93;19803:3;19714:93;:::i;:::-;19832:2;19827:3;19823:12;19816:19;;19475:366;;;:::o;19847:419::-;20013:4;20051:2;20040:9;20036:18;20028:26;;20100:9;20094:4;20090:20;20086:1;20075:9;20071:17;20064:47;20128:131;20254:4;20128:131;:::i;:::-;20120:139;;19847:419;;;:::o;20272:224::-;20412:34;20408:1;20400:6;20396:14;20389:58;20481:7;20476:2;20468:6;20464:15;20457:32;20272:224;:::o;20502:366::-;20644:3;20665:67;20729:2;20724:3;20665:67;:::i;:::-;20658:74;;20741:93;20830:3;20741:93;:::i;:::-;20859:2;20854:3;20850:12;20843:19;;20502:366;;;:::o;20874:419::-;21040:4;21078:2;21067:9;21063:18;21055:26;;21127:9;21121:4;21117:20;21113:1;21102:9;21098:17;21091:47;21155:131;21281:4;21155:131;:::i;:::-;21147:139;;20874:419;;;:::o;21299:60::-;21327:3;21348:5;21341:12;;21299:60;;;:::o;21365:142::-;21415:9;21448:53;21466:34;21475:24;21493:5;21475:24;:::i;:::-;21466:34;:::i;:::-;21448:53;:::i;:::-;21435:66;;21365:142;;;:::o;21513:126::-;21563:9;21596:37;21627:5;21596:37;:::i;:::-;21583:50;;21513:126;;;:::o;21645:134::-;21703:9;21736:37;21767:5;21736:37;:::i;:::-;21723:50;;21645:134;;;:::o;21785:147::-;21880:45;21919:5;21880:45;:::i;:::-;21875:3;21868:58;21785:147;;:::o;21938:238::-;22039:4;22077:2;22066:9;22062:18;22054:26;;22090:79;22166:1;22155:9;22151:17;22142:6;22090:79;:::i;:::-;21938:238;;;;:::o;22182:143::-;22239:5;22270:6;22264:13;22255:22;;22286:33;22313:5;22286:33;:::i;:::-;22182:143;;;;:::o;22331:351::-;22401:6;22450:2;22438:9;22429:7;22425:23;22421:32;22418:119;;;22456:79;;:::i;:::-;22418:119;22576:1;22601:64;22657:7;22648:6;22637:9;22633:22;22601:64;:::i;:::-;22591:74;;22547:128;22331:351;;;;:::o;22688:348::-;22817:4;22855:2;22844:9;22840:18;22832:26;;22868:79;22944:1;22933:9;22929:17;22920:6;22868:79;:::i;:::-;22957:72;23025:2;23014:9;23010:18;23001:6;22957:72;:::i;:::-;22688:348;;;;;:::o;23042:137::-;23096:5;23127:6;23121:13;23112:22;;23143:30;23167:5;23143:30;:::i;:::-;23042:137;;;;:::o;23185:345::-;23252:6;23301:2;23289:9;23280:7;23276:23;23272:32;23269:119;;;23307:79;;:::i;:::-;23269:119;23427:1;23452:61;23505:7;23496:6;23485:9;23481:22;23452:61;:::i;:::-;23442:71;;23398:125;23185:345;;;;:::o;23536:225::-;23676:34;23672:1;23664:6;23660:14;23653:58;23745:8;23740:2;23732:6;23728:15;23721:33;23536:225;:::o;23767:366::-;23909:3;23930:67;23994:2;23989:3;23930:67;:::i;:::-;23923:74;;24006:93;24095:3;24006:93;:::i;:::-;24124:2;24119:3;24115:12;24108:19;;23767:366;;;:::o;24139:419::-;24305:4;24343:2;24332:9;24328:18;24320:26;;24392:9;24386:4;24382:20;24378:1;24367:9;24363:17;24356:47;24420:131;24546:4;24420:131;:::i;:::-;24412:139;;24139:419;;;:::o;24564:173::-;24704:25;24700:1;24692:6;24688:14;24681:49;24564:173;:::o;24743:366::-;24885:3;24906:67;24970:2;24965:3;24906:67;:::i;:::-;24899:74;;24982:93;25071:3;24982:93;:::i;:::-;25100:2;25095:3;25091:12;25084:19;;24743:366;;;:::o;25115:419::-;25281:4;25319:2;25308:9;25304:18;25296:26;;25368:9;25362:4;25358:20;25354:1;25343:9;25339:17;25332:47;25396:131;25522:4;25396:131;:::i;:::-;25388:139;;25115:419;;;:::o;25540:143::-;25597:5;25628:6;25622:13;25613:22;;25644:33;25671:5;25644:33;:::i;:::-;25540:143;;;;:::o;25689:351::-;25759:6;25808:2;25796:9;25787:7;25783:23;25779:32;25776:119;;;25814:79;;:::i;:::-;25776:119;25934:1;25959:64;26015:7;26006:6;25995:9;25991:22;25959:64;:::i;:::-;25949:74;;25905:128;25689:351;;;;:::o;26046:332::-;26167:4;26205:2;26194:9;26190:18;26182:26;;26218:71;26286:1;26275:9;26271:17;26262:6;26218:71;:::i;:::-;26299:72;26367:2;26356:9;26352:18;26343:6;26299:72;:::i;:::-;26046:332;;;;;:::o;26384:85::-;26429:7;26458:5;26447:16;;26384:85;;;:::o;26475:158::-;26533:9;26566:61;26584:42;26593:32;26619:5;26593:32;:::i;:::-;26584:42;:::i;:::-;26566:61;:::i;:::-;26553:74;;26475:158;;;:::o;26639:147::-;26734:45;26773:5;26734:45;:::i;:::-;26729:3;26722:58;26639:147;;:::o;26792:807::-;27041:4;27079:3;27068:9;27064:19;27056:27;;27093:71;27161:1;27150:9;27146:17;27137:6;27093:71;:::i;:::-;27174:72;27242:2;27231:9;27227:18;27218:6;27174:72;:::i;:::-;27256:80;27332:2;27321:9;27317:18;27308:6;27256:80;:::i;:::-;27346;27422:2;27411:9;27407:18;27398:6;27346:80;:::i;:::-;27436:73;27504:3;27493:9;27489:19;27480:6;27436:73;:::i;:::-;27519;27587:3;27576:9;27572:19;27563:6;27519:73;:::i;:::-;26792:807;;;;;;;;;:::o;27605:663::-;27693:6;27701;27709;27758:2;27746:9;27737:7;27733:23;27729:32;27726:119;;;27764:79;;:::i;:::-;27726:119;27884:1;27909:64;27965:7;27956:6;27945:9;27941:22;27909:64;:::i;:::-;27899:74;;27855:128;28022:2;28048:64;28104:7;28095:6;28084:9;28080:22;28048:64;:::i;:::-;28038:74;;27993:129;28161:2;28187:64;28243:7;28234:6;28223:9;28219:22;28187:64;:::i;:::-;28177:74;;28132:129;27605:663;;;;;:::o;28274:332::-;28395:4;28433:2;28422:9;28418:18;28410:26;;28446:71;28514:1;28503:9;28499:17;28490:6;28446:71;:::i;:::-;28527:72;28595:2;28584:9;28580:18;28571:6;28527:72;:::i;:::-;28274:332;;;;;:::o;28612:223::-;28752:34;28748:1;28740:6;28736:14;28729:58;28821:6;28816:2;28808:6;28804:15;28797:31;28612:223;:::o;28841:366::-;28983:3;29004:67;29068:2;29063:3;29004:67;:::i;:::-;28997:74;;29080:93;29169:3;29080:93;:::i;:::-;29198:2;29193:3;29189:12;29182:19;;28841:366;;;:::o;29213:419::-;29379:4;29417:2;29406:9;29402:18;29394:26;;29466:9;29460:4;29456:20;29452:1;29441:9;29437:17;29430:47;29494:131;29620:4;29494:131;:::i;:::-;29486:139;;29213:419;;;:::o;29638:221::-;29778:34;29774:1;29766:6;29762:14;29755:58;29847:4;29842:2;29834:6;29830:15;29823:29;29638:221;:::o;29865:366::-;30007:3;30028:67;30092:2;30087:3;30028:67;:::i;:::-;30021:74;;30104:93;30193:3;30104:93;:::i;:::-;30222:2;30217:3;30213:12;30206:19;;29865:366;;;:::o;30237:419::-;30403:4;30441:2;30430:9;30426:18;30418:26;;30490:9;30484:4;30480:20;30476:1;30465:9;30461:17;30454:47;30518:131;30644:4;30518:131;:::i;:::-;30510:139;;30237:419;;;:::o;30662:224::-;30802:34;30798:1;30790:6;30786:14;30779:58;30871:7;30866:2;30858:6;30854:15;30847:32;30662:224;:::o;30892:366::-;31034:3;31055:67;31119:2;31114:3;31055:67;:::i;:::-;31048:74;;31131:93;31220:3;31131:93;:::i;:::-;31249:2;31244:3;31240:12;31233:19;;30892:366;;;:::o;31264:419::-;31430:4;31468:2;31457:9;31453:18;31445:26;;31517:9;31511:4;31507:20;31503:1;31492:9;31488:17;31481:47;31545:131;31671:4;31545:131;:::i;:::-;31537:139;;31264:419;;;:::o;31689:222::-;31829:34;31825:1;31817:6;31813:14;31806:58;31898:5;31893:2;31885:6;31881:15;31874:30;31689:222;:::o;31917:366::-;32059:3;32080:67;32144:2;32139:3;32080:67;:::i;:::-;32073:74;;32156:93;32245:3;32156:93;:::i;:::-;32274:2;32269:3;32265:12;32258:19;;31917:366;;;:::o;32289:419::-;32455:4;32493:2;32482:9;32478:18;32470:26;;32542:9;32536:4;32532:20;32528:1;32517:9;32513:17;32506:47;32570:131;32696:4;32570:131;:::i;:::-;32562:139;;32289:419;;;:::o;32714:228::-;32854:34;32850:1;32842:6;32838:14;32831:58;32923:11;32918:2;32910:6;32906:15;32899:36;32714:228;:::o;32948:366::-;33090:3;33111:67;33175:2;33170:3;33111:67;:::i;:::-;33104:74;;33187:93;33276:3;33187:93;:::i;:::-;33305:2;33300:3;33296:12;33289:19;;32948:366;;;:::o;33320:419::-;33486:4;33524:2;33513:9;33509:18;33501:26;;33573:9;33567:4;33563:20;33559:1;33548:9;33544:17;33537:47;33601:131;33727:4;33601:131;:::i;:::-;33593:139;;33320:419;;;:::o;33745:177::-;33885:29;33881:1;33873:6;33869:14;33862:53;33745:177;:::o;33928:366::-;34070:3;34091:67;34155:2;34150:3;34091:67;:::i;:::-;34084:74;;34167:93;34256:3;34167:93;:::i;:::-;34285:2;34280:3;34276:12;34269:19;;33928:366;;;:::o;34300:419::-;34466:4;34504:2;34493:9;34489:18;34481:26;;34553:9;34547:4;34543:20;34539:1;34528:9;34524:17;34517:47;34581:131;34707:4;34581:131;:::i;:::-;34573:139;;34300:419;;;:::o;34725:176::-;34865:28;34861:1;34853:6;34849:14;34842:52;34725:176;:::o;34907:366::-;35049:3;35070:67;35134:2;35129:3;35070:67;:::i;:::-;35063:74;;35146:93;35235:3;35146:93;:::i;:::-;35264:2;35259:3;35255:12;35248:19;;34907:366;;;:::o;35279:419::-;35445:4;35483:2;35472:9;35468:18;35460:26;;35532:9;35526:4;35522:20;35518:1;35507:9;35503:17;35496:47;35560:131;35686:4;35560:131;:::i;:::-;35552:139;;35279:419;;;:::o;35704:233::-;35743:3;35766:24;35784:5;35766:24;:::i;:::-;35757:33;;35812:66;35805:5;35802:77;35799:103;;35882:18;;:::i;:::-;35799:103;35929:1;35922:5;35918:13;35911:20;;35704:233;;;:::o;35943:180::-;35991:77;35988:1;35981:88;36088:4;36085:1;36078:15;36112:4;36109:1;36102:15;36129:114;36196:6;36230:5;36224:12;36214:22;;36129:114;;;:::o;36249:184::-;36348:11;36382:6;36377:3;36370:19;36422:4;36417:3;36413:14;36398:29;;36249:184;;;;:::o;36439:132::-;36506:4;36529:3;36521:11;;36559:4;36554:3;36550:14;36542:22;;36439:132;;;:::o;36577:108::-;36654:24;36672:5;36654:24;:::i;:::-;36649:3;36642:37;36577:108;;:::o;36691:179::-;36760:10;36781:46;36823:3;36815:6;36781:46;:::i;:::-;36859:4;36854:3;36850:14;36836:28;;36691:179;;;;:::o;36876:113::-;36946:4;36978;36973:3;36969:14;36961:22;;36876:113;;;:::o;37025:732::-;37144:3;37173:54;37221:5;37173:54;:::i;:::-;37243:86;37322:6;37317:3;37243:86;:::i;:::-;37236:93;;37353:56;37403:5;37353:56;:::i;:::-;37432:7;37463:1;37448:284;37473:6;37470:1;37467:13;37448:284;;;37549:6;37543:13;37576:63;37635:3;37620:13;37576:63;:::i;:::-;37569:70;;37662:60;37715:6;37662:60;:::i;:::-;37652:70;;37508:224;37495:1;37492;37488:9;37483:14;;37448:284;;;37452:14;37748:3;37741:10;;37149:608;;;37025:732;;;;:::o;37763:831::-;38026:4;38064:3;38053:9;38049:19;38041:27;;38078:71;38146:1;38135:9;38131:17;38122:6;38078:71;:::i;:::-;38159:80;38235:2;38224:9;38220:18;38211:6;38159:80;:::i;:::-;38286:9;38280:4;38276:20;38271:2;38260:9;38256:18;38249:48;38314:108;38417:4;38408:6;38314:108;:::i;:::-;38306:116;;38432:72;38500:2;38489:9;38485:18;38476:6;38432:72;:::i;:::-;38514:73;38582:3;38571:9;38567:19;38558:6;38514:73;:::i;:::-;37763:831;;;;;;;;:::o;38600:147::-;38701:11;38738:3;38723:18;;38600:147;;;;:::o;38753:114::-;;:::o;38873:398::-;39032:3;39053:83;39134:1;39129:3;39053:83;:::i;:::-;39046:90;;39145:93;39234:3;39145:93;:::i;:::-;39263:1;39258:3;39254:11;39247:18;;38873:398;;;:::o;39277:379::-;39461:3;39483:147;39626:3;39483:147;:::i;:::-;39476:154;;39647:3;39640:10;;39277:379;;;:::o;39662:225::-;39802:34;39798:1;39790:6;39786:14;39779:58;39871:8;39866:2;39858:6;39854:15;39847:33;39662:225;:::o;39893:366::-;40035:3;40056:67;40120:2;40115:3;40056:67;:::i;:::-;40049:74;;40132:93;40221:3;40132:93;:::i;:::-;40250:2;40245:3;40241:12;40234:19;;39893:366;;;:::o;40265:419::-;40431:4;40469:2;40458:9;40454:18;40446:26;;40518:9;40512:4;40508:20;40504:1;40493:9;40489:17;40482:47;40546:131;40672:4;40546:131;:::i;:::-;40538:139;;40265:419;;;:::o;40690:194::-;40730:4;40750:20;40768:1;40750:20;:::i;:::-;40745:25;;40784:20;40802:1;40784:20;:::i;:::-;40779:25;;40828:1;40825;40821:9;40813:17;;40852:1;40846:4;40843:11;40840:37;;;40857:18;;:::i;:::-;40840:37;40690:194;;;;:::o
Swarm Source
ipfs://742829568f14a3bdfb2e12b920d504ef5c8074ebe89073c438256080e60a638c
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.