ERC-20
Overview
Max Total Supply
100,000,000 TRA
Holders
49
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000000005 TRAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TRA
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-29 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit( address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns ( uint amountA, uint amountB, uint liquidity ); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns ( uint amountToken, uint amountETH, uint liquidity ); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut); function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract USDCManager is Ownable { address public immutable USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; function transferUSDC(address _to) external onlyOwner { IERC20 usdcContract = IERC20(USDC); uint256 _balance = usdcContract.balanceOf(address(this)); require(usdcContract.transfer(_to, _balance) == true); } } contract TRA is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address public liquidityWallet; address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; address public immutable USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; USDCManager public usdcManager; uint256 public maxSellTransactionAmount = 100000000 * (10**18); uint256 public swapTokensAtAmount = 20000; uint256 public burnFees; uint256 public devFees; uint256 public marketingFees; address payable marketingWallet = payable(0xcBdDbCe35b217cE363C76cca47725dD5969dB21b); address payable devWallet = payable(0xcBdDbCe35b217cE363C76cca47725dD5969dB21b); uint256 public liquidityFee; uint256 public totalFees; bool public swapAndLiquifyEnabled = false; bool public limitsInEffect = true; bool public transferDelayEnabled = true; // mapping(address => uint256) private _holderLastTransferTimestamp; mapping(address => bool) public _isExcludedMaxTransactionAmount; uint256 public maxWallet; uint256 public maxTransactionAmount; // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event LiquidityWalletUpdated( address indexed newLiquidityWallet, address indexed oldLiquidityWallet ); event LiquidityFeeChanged(uint256 oldFee, uint256 newFee); event BurnFeeChanged(uint256 oldFee, uint256 newFee); event devFeeChanged(uint256 oldFee, uint256 newFee); event marketingFeeChanged(uint256 oldFee, uint256 newFee); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapETHForTokens(uint256 amountIn, address[] path); constructor() ERC20("Translucent", "TRA") { uint256 _liquidityFee = 0; uint256 _burnFees = 1; uint256 _marketingFees = 0; uint256 _devFees = 7; usdcManager = new USDCManager(); liquidityFee = _liquidityFee; burnFees = _burnFees; marketingFees = _marketingFees; devFees = _devFees; totalFees = _liquidityFee + _burnFees + _marketingFees + _devFees; liquidityWallet = owner(); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), USDC); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _setAutomatedMarketMakerPair(address(this), true); excludeFromMaxTransaction(address(_uniswapV2Router), true); excludeFromMaxTransaction(address(uniswapV2Pair), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); // exclude from paying fees or having max transaction amount excludeFromFees(liquidityWallet, true); excludeFromFees(address(this), true); _isExcludedFromFees[owner()] = true; maxWallet = (100000000 * (10**18) * 2) / 100; // 2% Max wallet maxTransactionAmount = (100000000 * (10**18) * 1) / 100; // 1% maxTransactionAmountTxn // enable owner and fixed-sale wallet to send tokens before presales are over /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 100000000 * (10**18)); } receive() external payable {} function updateUniswapV2Router(address newAddress) public onlyOwner { address _uniswapV2Router = address(uniswapV2Router); require(newAddress != _uniswapV2Router); emit UpdateUniswapV2Router(newAddress, _uniswapV2Router); uniswapV2Router = IUniswapV2Router02(newAddress); } function changeLiquidityFee(uint256 _liquidityFee) public onlyOwner { require(_liquidityFee <= 10, "Must keep fees at 10% or less"); emit LiquidityFeeChanged(liquidityFee, _liquidityFee); liquidityFee = _liquidityFee; totalFees = _liquidityFee + burnFees + marketingFees + devFees; } function changeBurnFee(uint256 _burnFee) public onlyOwner { require(_burnFee <= 10, "Must keep fees at 10% or less"); emit BurnFeeChanged(burnFees, _burnFee); burnFees = _burnFee; totalFees = liquidityFee + _burnFee + marketingFees + devFees; } function changeDevFees(uint256 _devFees) public onlyOwner { require(_devFees <= 10, "Must keep fees at 10% or less"); emit devFeeChanged(devFees, _devFees); devFees = _devFees; totalFees = liquidityFee + burnFees + marketingFees + _devFees; } function changeMarketingFees(uint256 _marketingFees) public onlyOwner { require(_marketingFees <= 10, "Must keep fees at 10% or less"); emit marketingFeeChanged(marketingFees, _marketingFees); marketingFees = _marketingFees; totalFees = liquidityFee + burnFees + _marketingFees + devFees; } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeMultipleAccountsFromFees( address[] calldata accounts, bool excluded ) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateLiquidityWallet(address newLiquidityWallet) public onlyOwner { require(newLiquidityWallet != liquidityWallet); excludeFromFees(newLiquidityWallet, true); emit LiquidityWalletUpdated(newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; transferDelayEnabled = false; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0)); require(to != address(0)); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Unable to exceed Max Wallet" ); } } } if ( !swapping && automatedMarketMakerPairs[to] && // sells only by detecting transfer to automated market maker pair from != address(uniswapV2Router) && //router -> pair is removing liquidity which shouldn't have max !_isExcludedFromFees[to] //no max for those excluded from fees ) { require(amount <= maxSellTransactionAmount); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !swapping && !automatedMarketMakerPairs[from] && from != liquidityWallet && to != liquidityWallet ) { swapping = true; uint256 swapTokens = contractTokenBalance.mul(liquidityFee).div( totalFees ); if(swapTokens>0){ swapAndLiquify(swapTokens); } uint256 sellTokens = balanceOf(address(this)); swapAndDistribute(sellTokens); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } if (takeFee) { uint256 fees = amount.mul(totalFees).div(100); amount = amount.sub(fees); super._transfer(from, address(this), fees); } super._transfer(from, to, amount); } function swapUSDCForTokens(uint256 amount) public { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = USDC; path[1] = address(this); IERC20 USDCcontract = IERC20(USDC); USDCcontract.approve(address(uniswapV2Router), amount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( amount, 0, // accept any amount of Tokens path, deadAddress, // Burn address block.timestamp.add(300) ); emit SwapETHForTokens(amount, path); } function swapAndLiquify(uint256 tokens) private { // split the contract balance into halves uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); IERC20 USDCcontract = IERC20(USDC); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = USDCcontract.balanceOf(address(this)); // swap tokens for ETH swapTokensForUSDC(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered usdcManager.transferUSDC(address(this)); // how much ETH did we just swap into? uint256 newBalance = USDCcontract.balanceOf(address(this)).sub( initialBalance ); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForUSDC(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = USDC; _approve(address(this), address(uniswapV2Router), tokenAmount * 10); // make the swap uniswapV2Router.swapExactTokensForTokens( tokenAmount, 0, // accept any amount of ETH path, address(usdcManager), block.timestamp.add(3000) ); } function addLiquidity(uint256 tokenAmount, uint256 usdcAmount) private { // approve token transfer to cover all possible scenarios IERC20 USDCcontract = IERC20(USDC); USDCcontract.approve(address(uniswapV2Router), usdcAmount); _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidity( address(this), USDC, tokenAmount, usdcAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp.add(300) ); } event FundsDistributed(uint256 dev, uint256 marketing, uint256 burn); function swapAndDistribute(uint256 tokens) private { swapTokensForUSDC(tokens); usdcManager.transferUSDC(address(this)); IERC20 USDCcontract = IERC20(USDC); address _thisContract = address(this); uint256 _balance = USDCcontract.balanceOf(_thisContract); uint256 burn = (_balance).mul(burnFees).div( totalFees.sub(liquidityFee) ); uint256 dev = (_balance).mul(devFees).div(totalFees.sub(liquidityFee)); uint256 marketing = (_balance).sub(burn).sub(dev); if(marketing>0){ USDCcontract.transfer(marketingWallet, marketing); } if(dev>0){ USDCcontract.transfer(devWallet, dev); } if(burn>0){ swapUSDCForTokens(burn); } emit FundsDistributed(dev, marketing, burn); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } }
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":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"BurnFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"dev","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"FundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LiquidityFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"devFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"marketingFeeChanged","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"changeBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFees","type":"uint256"}],"name":"changeDevFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"changeLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFees","type":"uint256"}],"name":"changeMarketingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapUSDCForTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcManager","outputs":[{"internalType":"contract USDCManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405261dead73ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1681525073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1660c09073ffffffffffffffffffffffffffffffffffffffff168152506a52b7d2dcc80cd2e4000000600955614e20600a5573cbddbce35b217ce363c76cca47725dd5969db21b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cbddbce35b217ce363c76cca47725dd5969db21b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055503480156200019d57600080fd5b506040518060400160405280600b81526020017f5472616e736c7563656e740000000000000000000000000000000000000000008152506040518060400160405280600381526020017f545241000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200022292919062000d3d565b5080600490805190602001906200023b92919062000d3d565b5050506000620002506200074d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060008060019050600080600790506040516200030b9062000dce565b604051809103906000f08015801562000328573d6000803e3d6000fd5b50600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360108190555082600b8190555081600d8190555080600c819055508082848662000395919062000e34565b620003a1919062000e34565b620003ad919062000e34565b601181905550620003c36200075560201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200046557600080fd5b505afa1580156200047a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a0919062000efb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060c0516040518363ffffffff1660e01b8152600401620004de92919062000f3e565b602060405180830381600087803b158015620004f957600080fd5b505af11580156200050e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000534919062000efb565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620005be8160016200077f60201b60201c565b620005d13060016200077f60201b60201c565b620005e48260016200087e60201b60201c565b620005f960805160016200087e60201b60201c565b6200061b6200060d6200075560201b60201c565b60016200087e60201b60201c565b6200062e3060016200087e60201b60201c565b6200064361dead60016200087e60201b60201c565b62000678600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200097b60201b60201c565b6200068b3060016200097b60201b60201c565b600160166000620006a16200075560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506a01a784379d99db4200000060148190555069d3c21bcecceda100000060158190555062000741620007296200075560201b60201c565b6a52b7d2dcc80cd2e400000062000b2660201b60201c565b5050505050506200119f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b801515601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415620007dd57600080fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200088e6200074d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000920576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009179062000fcc565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6200098b6200074d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a149062000fcc565b60405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000a7b57600080fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b1a91906200100b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b909062001078565b60405180910390fd5b62000bad6000838362000cd560201b60201c565b62000bc98160025462000cda60201b620027391790919060201c565b60028190555062000c27816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cda60201b620027391790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cc99190620010ab565b60405180910390a35050565b505050565b600080828462000ceb919062000e34565b90508381101562000d33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d2a9062001118565b60405180910390fd5b8091505092915050565b82805462000d4b9062001169565b90600052602060002090601f01602090048101928262000d6f576000855562000dbb565b82601f1062000d8a57805160ff191683800117855562000dbb565b8280016001018555821562000dbb579182015b8281111562000dba57825182559160200191906001019062000d9d565b5b50905062000dca919062000ddc565b5090565b610a6180620067cb83390190565b5b8082111562000df757600081600090555060010162000ddd565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e418262000dfb565b915062000e4e8362000dfb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e865762000e8562000e05565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ec38262000e96565b9050919050565b62000ed58162000eb6565b811462000ee157600080fd5b50565b60008151905062000ef58162000eca565b92915050565b60006020828403121562000f145762000f1362000e91565b5b600062000f248482850162000ee4565b91505092915050565b62000f388162000eb6565b82525050565b600060408201905062000f55600083018562000f2d565b62000f64602083018462000f2d565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fb460208362000f6b565b915062000fc18262000f7c565b602082019050919050565b6000602082019050818103600083015262000fe78162000fa5565b9050919050565b60008115159050919050565b620010058162000fee565b82525050565b600060208201905062001022600083018462000ffa565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001060601f8362000f6b565b91506200106d8262001028565b602082019050919050565b60006020820190508181036000830152620010938162001051565b9050919050565b620010a58162000dfb565b82525050565b6000602082019050620010c260008301846200109a565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001100601b8362000f6b565b91506200110d82620010c8565b602082019050919050565b600060208201905081810360008301526200113381620010f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200118257607f821691505b602082108114156200119957620011986200113a565b5b50919050565b60805160a05160c0516155bd6200120e600039600081816116c0015281816117800152818161195b015281816136ca0152818161399401528181613e0e01528181613fae01526140ed015260008181610e740152611895015260008181610f600152611ad801526155bd6000f3fe6080604052600436106102975760003560e01c80637571336a1161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e14610a2b578063e2f4560514610a68578063e37ba8f914610a93578063f2fde38b14610abc578063f8b45b0514610ae5578063fc5af73414610b105761029e565b8063c02466681461092f578063c492f04614610958578063c49b9a8014610981578063c876d0b9146109aa578063c8c8ebe4146109d5578063d469801614610a005761029e565b806398118cb41161011357806398118cb4146107fb5780639a7a23d614610826578063a457c2d71461084f578063a9059cbb1461088c578063aea7d773146108c9578063b62496f5146108f25761029e565b80637571336a146106fd57806376d8039a146107265780637f11871f1461075157806389a302711461077a5780638da5cb5b146107a557806395d89b41146107d05761029e565b806339307e16116101fe5780634a74bb02116101b75780634a74bb02146105ed5780634fbee1931461061857806365b8dbc01461065557806370a082311461067e578063715018a6146106bb578063751039fc146106d25761029e565b806339307e16146104db578063395093511461050657806340f6ac311461054357806349bd5a5e1461056e57806349f926c0146105995780634a62bb65146105c25761029e565b806313114a9d1161025057806313114a9d146103c75780631694505e146103f257806318160ddd1461041d57806323b872dd1461044857806327c8f83514610485578063313ce567146104b05761029e565b80630224e9a7146102a357806302259e9e146102ce57806304f8aed6146102f957806306fdde0314610322578063095ea7b31461034d57806310d5de531461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b39565b6040516102c591906141df565b60405180910390f35b3480156102da57600080fd5b506102e3610b3f565b6040516102f091906141df565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b919061423a565b610b45565b005b34801561032e57600080fd5b50610337610c93565b6040516103449190614300565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190614380565b610d25565b60405161038191906143db565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac91906143f6565b610d43565b6040516103be91906143db565b60405180910390f35b3480156103d357600080fd5b506103dc610d63565b6040516103e991906141df565b60405180910390f35b3480156103fe57600080fd5b50610407610d69565b6040516104149190614482565b60405180910390f35b34801561042957600080fd5b50610432610d8f565b60405161043f91906141df565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061449d565b610d99565b60405161047c91906143db565b60405180910390f35b34801561049157600080fd5b5061049a610e72565b6040516104a791906144ff565b60405180910390f35b3480156104bc57600080fd5b506104c5610e96565b6040516104d29190614536565b60405180910390f35b3480156104e757600080fd5b506104f0610e9f565b6040516104fd91906141df565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190614380565b610ea5565b60405161053a91906143db565b60405180910390f35b34801561054f57600080fd5b50610558610f58565b60405161056591906141df565b60405180910390f35b34801561057a57600080fd5b50610583610f5e565b60405161059091906144ff565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb919061423a565b610f82565b005b3480156105ce57600080fd5b506105d76110d0565b6040516105e491906143db565b60405180910390f35b3480156105f957600080fd5b506106026110e3565b60405161060f91906143db565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906143f6565b6110f6565b60405161064c91906143db565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906143f6565b61114c565b005b34801561068a57600080fd5b506106a560048036038101906106a091906143f6565b6112e2565b6040516106b291906141df565b60405180910390f35b3480156106c757600080fd5b506106d061132a565b005b3480156106de57600080fd5b506106e7611482565b6040516106f491906143db565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f919061457d565b611558565b005b34801561073257600080fd5b5061073b61164a565b60405161074891906145de565b60405180910390f35b34801561075d57600080fd5b506107786004803603810190610773919061423a565b611670565b005b34801561078657600080fd5b5061078f611959565b60405161079c91906144ff565b60405180910390f35b3480156107b157600080fd5b506107ba61197d565b6040516107c791906144ff565b60405180910390f35b3480156107dc57600080fd5b506107e56119a7565b6040516107f29190614300565b60405180910390f35b34801561080757600080fd5b50610810611a39565b60405161081d91906141df565b60405180910390f35b34801561083257600080fd5b5061084d6004803603810190610848919061457d565b611a3f565b005b34801561085b57600080fd5b5061087660048036038101906108719190614380565b611b3d565b60405161088391906143db565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614380565b611c0a565b6040516108c091906143db565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb919061423a565b611c28565b005b3480156108fe57600080fd5b50610919600480360381019061091491906143f6565b611d76565b60405161092691906143db565b60405180910390f35b34801561093b57600080fd5b506109566004803603810190610951919061457d565b611d96565b005b34801561096457600080fd5b5061097f600480360381019061097a919061465e565b611f33565b005b34801561098d57600080fd5b506109a860048036038101906109a391906146be565b6120aa565b005b3480156109b657600080fd5b506109bf612195565b6040516109cc91906143db565b60405180910390f35b3480156109e157600080fd5b506109ea6121a8565b6040516109f791906141df565b60405180910390f35b348015610a0c57600080fd5b50610a156121ae565b604051610a2291906144ff565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d91906146eb565b6121d4565b604051610a5f91906141df565b60405180910390f35b348015610a7457600080fd5b50610a7d61225b565b604051610a8a91906141df565b60405180910390f35b348015610a9f57600080fd5b50610aba6004803603810190610ab591906143f6565b612261565b005b348015610ac857600080fd5b50610ae36004803603810190610ade91906143f6565b61241e565b005b348015610af157600080fd5b50610afa6125e5565b604051610b0791906141df565b60405180910390f35b348015610b1c57600080fd5b50610b376004803603810190610b32919061423a565b6125eb565b005b600c5481565b60095481565b610b4d612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390614777565b60405180910390fd5b600a811115610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c17906147e3565b60405180910390fd5b7f893e791953bab7aaf5d2e117e75b7b78b90168c0466fb05757c0b389530a5ed4600c5482604051610c53929190614803565b60405180910390a180600c8190555080600d54600b54601054610c76919061485b565b610c80919061485b565b610c8a919061485b565b60118190555050565b606060038054610ca2906148e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce906148e0565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d39610d32612797565b848461279f565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60115481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610da684848461296a565b610e6784610db2612797565b610e628560405180606001604052806028815260200161553b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e18612797565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131db9092919063ffffffff16565b61279f565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006012905090565b600d5481565b6000610f4e610eb2612797565b84610f498560016000610ec3612797565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b61279f565b6001905092915050565b600b5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f8a612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614777565b60405180910390fd5b600a81111561105d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611054906147e3565b60405180910390fd5b7fce55ae62da635307b3e8b063ee85313fba87203ff90c774b44870f3debc63cb860105482604051611090929190614803565b60405180910390a180601081905550600c54600d54600b54836110b3919061485b565b6110bd919061485b565b6110c7919061485b565b60118190555050565b601260019054906101000a900460ff1681565b601260009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611154612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da90614777565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a381600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611332612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890614777565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061148c612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290614777565b60405180910390fd5b6000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506001905090565b611560612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614777565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600267ffffffffffffffff81111561168d5761168c614912565b5b6040519080825280602002602001820160405280156116bb5781602001602082028036833780820191505090505b5090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106116f3576116f2614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061174257611741614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b81526004016117fe929190614970565b602060405180830381600087803b15801561181857600080fd5b505af115801561182c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185091906149ae565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795846000857f00000000000000000000000000000000000000000000000000000000000000006118c961012c4261273990919063ffffffff16565b6040518663ffffffff1660e01b81526004016118e9959493929190614ad4565b600060405180830381600087803b15801561190357600080fd5b505af1158015611917573d6000803e3d6000fd5b505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624838360405161194c929190614b2e565b60405180910390a1505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119b6906148e0565b80601f01602080910402602001604051908101604052809291908181526020018280546119e2906148e0565b8015611a2f5780601f10611a0457610100808354040283529160200191611a2f565b820191906000526020600020905b815481529060010190602001808311611a1257829003601f168201915b5050505050905090565b60105481565b611a47612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90614777565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2f57600080fd5b611b39828261323f565b5050565b6000611c00611b4a612797565b84611bfb856040518060600160405280602581526020016155636025913960016000611b74612797565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131db9092919063ffffffff16565b61279f565b6001905092915050565b6000611c1e611c17612797565b848461296a565b6001905092915050565b611c30612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690614777565b60405180910390fd5b600a811115611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906147e3565b60405180910390fd5b7fc3f505f39b232b573620260e2cac22c8e26f7626db3df215db45de31868d2ac7600d5482604051611d36929190614803565b60405180910390a180600d81905550600c5481600b54601054611d59919061485b565b611d63919061485b565b611d6d919061485b565b60118190555050565b60176020528060005260406000206000915054906101000a900460ff1681565b611d9e612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614777565b60405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611e8a57600080fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2791906143db565b60405180910390a25050565b611f3b612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190614777565b60405180910390fd5b60005b83839050811015612069578160166000868685818110611ff057611fef614941565b5b905060200201602081019061200591906143f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061206190614b5e565b915050611fcd565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161209d93929190614c32565b60405180910390a1505050565b6120b2612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890614777565b60405180910390fd5b80601260006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161218a91906143db565b60405180910390a150565b601260029054906101000a900460ff1681565b60155481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b612269612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90614777565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561235357600080fd5b61235e816001611d96565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612426612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90614777565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90614cd6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b6125f3612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614777565b60405180910390fd5b600a8111156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd906147e3565b60405180910390fd5b7f1ad180dc6c73a702f095378bdf3146c1e741d97fc1b6c4c128ecfa22506e402c600b54826040516126f9929190614803565b60405180910390a180600b81905550600c54600d548260105461271c919061485b565b612726919061485b565b612730919061485b565b60118190555050565b6000808284612748919061485b565b90508381101561278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614d42565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614dd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561287f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287690614e66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161295d91906141df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129de57600080fd5b60008114156129f8576129f38383600061333d565b6131d6565b601260019054906101000a900460ff1615612db957612a1561197d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a835750612a5361197d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b0f5750600660149054906101000a900460ff16155b15612db857601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bb75750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1957601454612bc8836112e2565b82612bd3919061485b565b1115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614ed2565b60405180910390fd5b612db7565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cbc5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d0b57601554811115612d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfd90614f64565b60405180910390fd5b612db6565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612db557601454612d68836112e2565b82612d73919061485b565b1115612db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dab90614ed2565b60405180910390fd5b5b5b5b5b5b600660149054906101000a900460ff16158015612e1f5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612e795750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ecf5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee457600954811115612ee357600080fd5b5b6000612eef306112e2565b90506000600a548210159050808015612f155750600660149054906101000a900460ff16155b8015612f6b5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fc55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561301f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156130b3576001600660146101000a81548160ff021916908315150217905550600061306a60115461305c601054866135d290919063ffffffff16565b61364d90919063ffffffff16565b9050600081111561307f5761307e81613697565b5b600061308a306112e2565b9050613095816138fa565b6000600660146101000a81548160ff02191690831515021790555050505b6000600660149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131695750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561317357600090505b80156131c75760006131a36064613195601154886135d290919063ffffffff16565b61364d90919063ffffffff16565b90506131b88186613cbd90919063ffffffff16565b94506131c587308361333d565b505b6131d286868661333d565b5050505b505050565b6000838311158290613223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321a9190614300565b60405180910390fd5b50600083856132329190614f84565b9050809150509392505050565b801515601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561329c57600080fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a49061502a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561341d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613414906150bc565b60405180910390fd5b613428838383613d07565b61349381604051806060016040528060268152602001615515602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131db9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613526816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c591906141df565b60405180910390a3505050565b6000808314156135e55760009050613647565b600082846135f391906150dc565b90508284826136029190615165565b14613642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363990615208565b60405180910390fd5b809150505b92915050565b600061368f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d0c565b905092915050565b60006136ad60028361364d90919063ffffffff16565b905060006136c48284613cbd90919063ffffffff16565b905060007f0000000000000000000000000000000000000000000000000000000000000000905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161372691906144ff565b60206040518083038186803b15801561373e57600080fd5b505afa158015613752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613776919061523d565b905061378184613d6f565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317c4984c306040518263ffffffff1660e01b81526004016137dc91906144ff565b600060405180830381600087803b1580156137f657600080fd5b505af115801561380a573d6000803e3d6000fd5b5050505060006138ab828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161384d91906144ff565b60206040518083038186803b15801561386557600080fd5b505afa158015613879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389d919061523d565b613cbd90919063ffffffff16565b90506138b78482613faa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582866040516138ea9392919061526a565b60405180910390a1505050505050565b61390381613d6f565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317c4984c306040518263ffffffff1660e01b815260040161395e91906144ff565b600060405180830381600087803b15801561397857600080fd5b505af115801561398c573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000009050600030905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016139f591906144ff565b60206040518083038186803b158015613a0d57600080fd5b505afa158015613a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a45919061523d565b90506000613a86613a63601054601154613cbd90919063ffffffff16565b613a78600b54856135d290919063ffffffff16565b61364d90919063ffffffff16565b90506000613ac7613aa4601054601154613cbd90919063ffffffff16565b613ab9600c54866135d290919063ffffffff16565b61364d90919063ffffffff16565b90506000613af082613ae28587613cbd90919063ffffffff16565b613cbd90919063ffffffff16565b90506000811115613bac578573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613b589291906152c2565b602060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baa91906149ae565b505b6000821115613c66578573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613c129291906152c2565b602060405180830381600087803b158015613c2c57600080fd5b505af1158015613c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6491906149ae565b505b6000831115613c7957613c7883611670565b5b7fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df9828285604051613cac9392919061526a565b60405180910390a150505050505050565b6000613cff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131db565b905092915050565b505050565b60008083118290613d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4a9190614300565b60405180910390fd5b5060008385613d629190615165565b9050809150509392505050565b6000600267ffffffffffffffff811115613d8c57613d8b614912565b5b604051908082528060200260200182016040528015613dba5781602001602082028036833780820191505090505b5090503081600081518110613dd257613dd1614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110613e4157613e40614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613eb430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a85613eaf91906150dc565b61279f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed173983600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613f2e610bb84261273990919063ffffffff16565b6040518663ffffffff1660e01b8152600401613f4e959493929190614ad4565b600060405180830381600087803b158015613f6857600080fd5b505af1158015613f7c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613fa591906153fa565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161402c929190614970565b602060405180830381600087803b15801561404657600080fd5b505af115801561405a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407e91906149ae565b506140ac30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561279f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700307f00000000000000000000000000000000000000000000000000000000000000008686600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661414961012c4261273990919063ffffffff16565b6040518963ffffffff1660e01b815260040161416c989796959493929190615443565b606060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141be91906154c1565b505050505050565b6000819050919050565b6141d9816141c6565b82525050565b60006020820190506141f460008301846141d0565b92915050565b6000604051905090565b600080fd5b600080fd5b614217816141c6565b811461422257600080fd5b50565b6000813590506142348161420e565b92915050565b6000602082840312156142505761424f614204565b5b600061425e84828501614225565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142a1578082015181840152602081019050614286565b838111156142b0576000848401525b50505050565b6000601f19601f8301169050919050565b60006142d282614267565b6142dc8185614272565b93506142ec818560208601614283565b6142f5816142b6565b840191505092915050565b6000602082019050818103600083015261431a81846142c7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061434d82614322565b9050919050565b61435d81614342565b811461436857600080fd5b50565b60008135905061437a81614354565b92915050565b6000806040838503121561439757614396614204565b5b60006143a58582860161436b565b92505060206143b685828601614225565b9150509250929050565b60008115159050919050565b6143d5816143c0565b82525050565b60006020820190506143f060008301846143cc565b92915050565b60006020828403121561440c5761440b614204565b5b600061441a8482850161436b565b91505092915050565b6000819050919050565b600061444861444361443e84614322565b614423565b614322565b9050919050565b600061445a8261442d565b9050919050565b600061446c8261444f565b9050919050565b61447c81614461565b82525050565b60006020820190506144976000830184614473565b92915050565b6000806000606084860312156144b6576144b5614204565b5b60006144c48682870161436b565b93505060206144d58682870161436b565b92505060406144e686828701614225565b9150509250925092565b6144f981614342565b82525050565b600060208201905061451460008301846144f0565b92915050565b600060ff82169050919050565b6145308161451a565b82525050565b600060208201905061454b6000830184614527565b92915050565b61455a816143c0565b811461456557600080fd5b50565b60008135905061457781614551565b92915050565b6000806040838503121561459457614593614204565b5b60006145a28582860161436b565b92505060206145b385828601614568565b9150509250929050565b60006145c88261444f565b9050919050565b6145d8816145bd565b82525050565b60006020820190506145f360008301846145cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261461e5761461d6145f9565b5b8235905067ffffffffffffffff81111561463b5761463a6145fe565b5b60208301915083602082028301111561465757614656614603565b5b9250929050565b60008060006040848603121561467757614676614204565b5b600084013567ffffffffffffffff81111561469557614694614209565b5b6146a186828701614608565b935093505060206146b486828701614568565b9150509250925092565b6000602082840312156146d4576146d3614204565b5b60006146e284828501614568565b91505092915050565b6000806040838503121561470257614701614204565b5b60006147108582860161436b565b92505060206147218582860161436b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614761602083614272565b915061476c8261472b565b602082019050919050565b6000602082019050818103600083015261479081614754565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006147cd601d83614272565b91506147d882614797565b602082019050919050565b600060208201905081810360008301526147fc816147c0565b9050919050565b600060408201905061481860008301856141d0565b61482560208301846141d0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614866826141c6565b9150614871836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148a6576148a561482c565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148f857607f821691505b6020821081141561490c5761490b6148b1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061498560008301856144f0565b61499260208301846141d0565b9392505050565b6000815190506149a881614551565b92915050565b6000602082840312156149c4576149c3614204565b5b60006149d284828501614999565b91505092915050565b6000819050919050565b6000614a006149fb6149f6846149db565b614423565b6141c6565b9050919050565b614a10816149e5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a4b81614342565b82525050565b6000614a5d8383614a42565b60208301905092915050565b6000602082019050919050565b6000614a8182614a16565b614a8b8185614a21565b9350614a9683614a32565b8060005b83811015614ac7578151614aae8882614a51565b9750614ab983614a69565b925050600181019050614a9a565b5085935050505092915050565b600060a082019050614ae960008301886141d0565b614af66020830187614a07565b8181036040830152614b088186614a76565b9050614b1760608301856144f0565b614b2460808301846141d0565b9695505050505050565b6000604082019050614b4360008301856141d0565b8181036020830152614b558184614a76565b90509392505050565b6000614b69826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9c57614b9b61482c565b5b600182019050919050565b6000819050919050565b6000614bc0602084018461436b565b905092915050565b6000602082019050919050565b6000614be18385614a21565b9350614bec82614ba7565b8060005b85811015614c2557614c028284614bb1565b614c0c8882614a51565b9750614c1783614bc8565b925050600181019050614bf0565b5085925050509392505050565b60006040820190508181036000830152614c4d818587614bd5565b9050614c5c60208301846143cc565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cc0602683614272565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d2c601b83614272565b9150614d3782614cf6565b602082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614dbe602483614272565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e50602283614272565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614ebc601b83614272565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f4e603683614272565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b6000614f8f826141c6565b9150614f9a836141c6565b925082821015614fad57614fac61482c565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615014602583614272565b915061501f82614fb8565b604082019050919050565b6000602082019050818103600083015261504381615007565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150a6602383614272565b91506150b18261504a565b604082019050919050565b600060208201905081810360008301526150d581615099565b9050919050565b60006150e7826141c6565b91506150f2836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561512b5761512a61482c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615170826141c6565b915061517b836141c6565b92508261518b5761518a615136565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151f2602183614272565b91506151fd82615196565b604082019050919050565b60006020820190508181036000830152615221816151e5565b9050919050565b6000815190506152378161420e565b92915050565b60006020828403121561525357615252614204565b5b600061526184828501615228565b91505092915050565b600060608201905061527f60008301866141d0565b61528c60208301856141d0565b61529960408301846141d0565b949350505050565b60006152ac8261444f565b9050919050565b6152bc816152a1565b82525050565b60006040820190506152d760008301856152b3565b6152e460208301846141d0565b9392505050565b6152f4826142b6565b810181811067ffffffffffffffff8211171561531357615312614912565b5b80604052505050565b60006153266141fa565b905061533282826152eb565b919050565b600067ffffffffffffffff82111561535257615351614912565b5b602082029050602081019050919050565b600061537661537184615337565b61531c565b9050808382526020820190506020840283018581111561539957615398614603565b5b835b818110156153c257806153ae8882615228565b84526020840193505060208101905061539b565b5050509392505050565b600082601f8301126153e1576153e06145f9565b5b81516153f1848260208601615363565b91505092915050565b6000602082840312156154105761540f614204565b5b600082015167ffffffffffffffff81111561542e5761542d614209565b5b61543a848285016153cc565b91505092915050565b600061010082019050615459600083018b6144f0565b615466602083018a6144f0565b61547360408301896141d0565b61548060608301886141d0565b61548d6080830187614a07565b61549a60a0830186614a07565b6154a760c08301856144f0565b6154b460e08301846141d0565b9998505050505050505050565b6000806000606084860312156154da576154d9614204565b5b60006154e886828701615228565b93505060206154f986828701615228565b925050604061550a86828701615228565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e7a88788e233341e36024c0f019c8505d74da7ce0420b570a0eba572e478d4ed64736f6c6343000809003360a060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561005757600080fd5b50600061006861010b60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350610113565b600033905090565b60805161092c610135600039600081816101730152610418015261092c6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806317c4984c1461005c578063715018a61461007857806389a30271146100825780638da5cb5b146100a0578063f2fde38b146100be575b600080fd5b61007660048036038101906100719190610690565b6100da565b005b6100806102c3565b005b61008a610416565b60405161009791906106cc565b60405180910390f35b6100a861043a565b6040516100b591906106cc565b60405180910390f35b6100d860048036038101906100d39190610690565b610463565b005b6100e2610625565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461016f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016690610744565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016101cf91906106cc565b60206040518083038186803b1580156101e757600080fd5b505afa1580156101fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021f919061079a565b9050600115158273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b81526004016102609291906107d6565b602060405180830381600087803b15801561027a57600080fd5b505af115801561028e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b29190610837565b1515146102be57600080fd5b505050565b6102cb610625565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034f90610744565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61046b610625565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ef90610744565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f906108d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061065d82610632565b9050919050565b61066d81610652565b811461067857600080fd5b50565b60008135905061068a81610664565b92915050565b6000602082840312156106a6576106a561062d565b5b60006106b48482850161067b565b91505092915050565b6106c681610652565b82525050565b60006020820190506106e160008301846106bd565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061072e6020836106e7565b9150610739826106f8565b602082019050919050565b6000602082019050818103600083015261075d81610721565b9050919050565b6000819050919050565b61077781610764565b811461078257600080fd5b50565b6000815190506107948161076e565b92915050565b6000602082840312156107b0576107af61062d565b5b60006107be84828501610785565b91505092915050565b6107d081610764565b82525050565b60006040820190506107eb60008301856106bd565b6107f860208301846107c7565b9392505050565b60008115159050919050565b610814816107ff565b811461081f57600080fd5b50565b6000815190506108318161080b565b92915050565b60006020828403121561084d5761084c61062d565b5b600061085b84828501610822565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006108c06026836106e7565b91506108cb82610864565b604082019050919050565b600060208201905081810360008301526108ef816108b3565b905091905056fea2646970667358221220c227dbc5ccced630ee87ebc3fb240f06328ff1ebfbc2b42ee49b610b429d878264736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102975760003560e01c80637571336a1161015a578063c0246668116100c1578063dd62ed3e1161007a578063dd62ed3e14610a2b578063e2f4560514610a68578063e37ba8f914610a93578063f2fde38b14610abc578063f8b45b0514610ae5578063fc5af73414610b105761029e565b8063c02466681461092f578063c492f04614610958578063c49b9a8014610981578063c876d0b9146109aa578063c8c8ebe4146109d5578063d469801614610a005761029e565b806398118cb41161011357806398118cb4146107fb5780639a7a23d614610826578063a457c2d71461084f578063a9059cbb1461088c578063aea7d773146108c9578063b62496f5146108f25761029e565b80637571336a146106fd57806376d8039a146107265780637f11871f1461075157806389a302711461077a5780638da5cb5b146107a557806395d89b41146107d05761029e565b806339307e16116101fe5780634a74bb02116101b75780634a74bb02146105ed5780634fbee1931461061857806365b8dbc01461065557806370a082311461067e578063715018a6146106bb578063751039fc146106d25761029e565b806339307e16146104db578063395093511461050657806340f6ac311461054357806349bd5a5e1461056e57806349f926c0146105995780634a62bb65146105c25761029e565b806313114a9d1161025057806313114a9d146103c75780631694505e146103f257806318160ddd1461041d57806323b872dd1461044857806327c8f83514610485578063313ce567146104b05761029e565b80630224e9a7146102a357806302259e9e146102ce57806304f8aed6146102f957806306fdde0314610322578063095ea7b31461034d57806310d5de531461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b39565b6040516102c591906141df565b60405180910390f35b3480156102da57600080fd5b506102e3610b3f565b6040516102f091906141df565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b919061423a565b610b45565b005b34801561032e57600080fd5b50610337610c93565b6040516103449190614300565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190614380565b610d25565b60405161038191906143db565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac91906143f6565b610d43565b6040516103be91906143db565b60405180910390f35b3480156103d357600080fd5b506103dc610d63565b6040516103e991906141df565b60405180910390f35b3480156103fe57600080fd5b50610407610d69565b6040516104149190614482565b60405180910390f35b34801561042957600080fd5b50610432610d8f565b60405161043f91906141df565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a919061449d565b610d99565b60405161047c91906143db565b60405180910390f35b34801561049157600080fd5b5061049a610e72565b6040516104a791906144ff565b60405180910390f35b3480156104bc57600080fd5b506104c5610e96565b6040516104d29190614536565b60405180910390f35b3480156104e757600080fd5b506104f0610e9f565b6040516104fd91906141df565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190614380565b610ea5565b60405161053a91906143db565b60405180910390f35b34801561054f57600080fd5b50610558610f58565b60405161056591906141df565b60405180910390f35b34801561057a57600080fd5b50610583610f5e565b60405161059091906144ff565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb919061423a565b610f82565b005b3480156105ce57600080fd5b506105d76110d0565b6040516105e491906143db565b60405180910390f35b3480156105f957600080fd5b506106026110e3565b60405161060f91906143db565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906143f6565b6110f6565b60405161064c91906143db565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906143f6565b61114c565b005b34801561068a57600080fd5b506106a560048036038101906106a091906143f6565b6112e2565b6040516106b291906141df565b60405180910390f35b3480156106c757600080fd5b506106d061132a565b005b3480156106de57600080fd5b506106e7611482565b6040516106f491906143db565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f919061457d565b611558565b005b34801561073257600080fd5b5061073b61164a565b60405161074891906145de565b60405180910390f35b34801561075d57600080fd5b506107786004803603810190610773919061423a565b611670565b005b34801561078657600080fd5b5061078f611959565b60405161079c91906144ff565b60405180910390f35b3480156107b157600080fd5b506107ba61197d565b6040516107c791906144ff565b60405180910390f35b3480156107dc57600080fd5b506107e56119a7565b6040516107f29190614300565b60405180910390f35b34801561080757600080fd5b50610810611a39565b60405161081d91906141df565b60405180910390f35b34801561083257600080fd5b5061084d6004803603810190610848919061457d565b611a3f565b005b34801561085b57600080fd5b5061087660048036038101906108719190614380565b611b3d565b60405161088391906143db565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614380565b611c0a565b6040516108c091906143db565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb919061423a565b611c28565b005b3480156108fe57600080fd5b50610919600480360381019061091491906143f6565b611d76565b60405161092691906143db565b60405180910390f35b34801561093b57600080fd5b506109566004803603810190610951919061457d565b611d96565b005b34801561096457600080fd5b5061097f600480360381019061097a919061465e565b611f33565b005b34801561098d57600080fd5b506109a860048036038101906109a391906146be565b6120aa565b005b3480156109b657600080fd5b506109bf612195565b6040516109cc91906143db565b60405180910390f35b3480156109e157600080fd5b506109ea6121a8565b6040516109f791906141df565b60405180910390f35b348015610a0c57600080fd5b50610a156121ae565b604051610a2291906144ff565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d91906146eb565b6121d4565b604051610a5f91906141df565b60405180910390f35b348015610a7457600080fd5b50610a7d61225b565b604051610a8a91906141df565b60405180910390f35b348015610a9f57600080fd5b50610aba6004803603810190610ab591906143f6565b612261565b005b348015610ac857600080fd5b50610ae36004803603810190610ade91906143f6565b61241e565b005b348015610af157600080fd5b50610afa6125e5565b604051610b0791906141df565b60405180910390f35b348015610b1c57600080fd5b50610b376004803603810190610b32919061423a565b6125eb565b005b600c5481565b60095481565b610b4d612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390614777565b60405180910390fd5b600a811115610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c17906147e3565b60405180910390fd5b7f893e791953bab7aaf5d2e117e75b7b78b90168c0466fb05757c0b389530a5ed4600c5482604051610c53929190614803565b60405180910390a180600c8190555080600d54600b54601054610c76919061485b565b610c80919061485b565b610c8a919061485b565b60118190555050565b606060038054610ca2906148e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce906148e0565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d39610d32612797565b848461279f565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60115481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610da684848461296a565b610e6784610db2612797565b610e628560405180606001604052806028815260200161553b60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e18612797565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131db9092919063ffffffff16565b61279f565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006012905090565b600d5481565b6000610f4e610eb2612797565b84610f498560016000610ec3612797565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b61279f565b6001905092915050565b600b5481565b7f00000000000000000000000026ab939da0640060426463ae119fd541b51cc7f581565b610f8a612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614777565b60405180910390fd5b600a81111561105d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611054906147e3565b60405180910390fd5b7fce55ae62da635307b3e8b063ee85313fba87203ff90c774b44870f3debc63cb860105482604051611090929190614803565b60405180910390a180601081905550600c54600d54600b54836110b3919061485b565b6110bd919061485b565b6110c7919061485b565b60118190555050565b601260019054906101000a900460ff1681565b601260009054906101000a900460ff1681565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611154612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da90614777565b60405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561124357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a381600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611332612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b890614777565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061148c612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290614777565b60405180910390fd5b6000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506001905090565b611560612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614777565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600267ffffffffffffffff81111561168d5761168c614912565b5b6040519080825280602002602001820160405280156116bb5781602001602082028036833780820191505090505b5090507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48816000815181106116f3576116f2614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061174257611741614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4890508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b81526004016117fe929190614970565b602060405180830381600087803b15801561181857600080fd5b505af115801561182c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185091906149ae565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795846000857f000000000000000000000000000000000000000000000000000000000000dead6118c961012c4261273990919063ffffffff16565b6040518663ffffffff1660e01b81526004016118e9959493929190614ad4565b600060405180830381600087803b15801561190357600080fd5b505af1158015611917573d6000803e3d6000fd5b505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624838360405161194c929190614b2e565b60405180910390a1505050565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546119b6906148e0565b80601f01602080910402602001604051908101604052809291908181526020018280546119e2906148e0565b8015611a2f5780601f10611a0457610100808354040283529160200191611a2f565b820191906000526020600020905b815481529060010190602001808311611a1257829003601f168201915b5050505050905090565b60105481565b611a47612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd90614777565b60405180910390fd5b7f00000000000000000000000026ab939da0640060426463ae119fd541b51cc7f573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b2f57600080fd5b611b39828261323f565b5050565b6000611c00611b4a612797565b84611bfb856040518060600160405280602581526020016155636025913960016000611b74612797565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131db9092919063ffffffff16565b61279f565b6001905092915050565b6000611c1e611c17612797565b848461296a565b6001905092915050565b611c30612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690614777565b60405180910390fd5b600a811115611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906147e3565b60405180910390fd5b7fc3f505f39b232b573620260e2cac22c8e26f7626db3df215db45de31868d2ac7600d5482604051611d36929190614803565b60405180910390a180600d81905550600c5481600b54601054611d59919061485b565b611d63919061485b565b611d6d919061485b565b60118190555050565b60176020528060005260406000206000915054906101000a900460ff1681565b611d9e612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614777565b60405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611e8a57600080fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f2791906143db565b60405180910390a25050565b611f3b612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190614777565b60405180910390fd5b60005b83839050811015612069578160166000868685818110611ff057611fef614941565b5b905060200201602081019061200591906143f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061206190614b5e565b915050611fcd565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b3583838360405161209d93929190614c32565b60405180910390a1505050565b6120b2612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213890614777565b60405180910390fd5b80601260006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161218a91906143db565b60405180910390a150565b601260029054906101000a900460ff1681565b60155481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b612269612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef90614777565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561235357600080fd5b61235e816001611d96565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612426612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90614777565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90614cd6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b6125f3612797565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267990614777565b60405180910390fd5b600a8111156126c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bd906147e3565b60405180910390fd5b7f1ad180dc6c73a702f095378bdf3146c1e741d97fc1b6c4c128ecfa22506e402c600b54826040516126f9929190614803565b60405180910390a180600b81905550600c54600d548260105461271c919061485b565b612726919061485b565b612730919061485b565b60118190555050565b6000808284612748919061485b565b90508381101561278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614d42565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561280f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280690614dd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561287f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287690614e66565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161295d91906141df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129de57600080fd5b60008114156129f8576129f38383600061333d565b6131d6565b601260019054906101000a900460ff1615612db957612a1561197d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a835750612a5361197d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b0f5750600660149054906101000a900460ff16155b15612db857601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bb75750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1957601454612bc8836112e2565b82612bd3919061485b565b1115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614ed2565b60405180910390fd5b612db7565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cbc5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d0b57601554811115612d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfd90614f64565b60405180910390fd5b612db6565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612db557601454612d68836112e2565b82612d73919061485b565b1115612db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dab90614ed2565b60405180910390fd5b5b5b5b5b5b600660149054906101000a900460ff16158015612e1f5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612e795750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612ecf5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ee457600954811115612ee357600080fd5b5b6000612eef306112e2565b90506000600a548210159050808015612f155750600660149054906101000a900460ff16155b8015612f6b5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fc55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561301f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156130b3576001600660146101000a81548160ff021916908315150217905550600061306a60115461305c601054866135d290919063ffffffff16565b61364d90919063ffffffff16565b9050600081111561307f5761307e81613697565b5b600061308a306112e2565b9050613095816138fa565b6000600660146101000a81548160ff02191690831515021790555050505b6000600660149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131695750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561317357600090505b80156131c75760006131a36064613195601154886135d290919063ffffffff16565b61364d90919063ffffffff16565b90506131b88186613cbd90919063ffffffff16565b94506131c587308361333d565b505b6131d286868661333d565b5050505b505050565b6000838311158290613223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321a9190614300565b60405180910390fd5b50600083856132329190614f84565b9050809150509392505050565b801515601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561329c57600080fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a49061502a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561341d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613414906150bc565b60405180910390fd5b613428838383613d07565b61349381604051806060016040528060268152602001615515602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131db9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613526816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461273990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c591906141df565b60405180910390a3505050565b6000808314156135e55760009050613647565b600082846135f391906150dc565b90508284826136029190615165565b14613642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363990615208565b60405180910390fd5b809150505b92915050565b600061368f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d0c565b905092915050565b60006136ad60028361364d90919063ffffffff16565b905060006136c48284613cbd90919063ffffffff16565b905060007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161372691906144ff565b60206040518083038186803b15801561373e57600080fd5b505afa158015613752573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613776919061523d565b905061378184613d6f565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317c4984c306040518263ffffffff1660e01b81526004016137dc91906144ff565b600060405180830381600087803b1580156137f657600080fd5b505af115801561380a573d6000803e3d6000fd5b5050505060006138ab828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161384d91906144ff565b60206040518083038186803b15801561386557600080fd5b505afa158015613879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389d919061523d565b613cbd90919063ffffffff16565b90506138b78482613faa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582866040516138ea9392919061526a565b60405180910390a1505050505050565b61390381613d6f565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317c4984c306040518263ffffffff1660e01b815260040161395e91906144ff565b600060405180830381600087803b15801561397857600080fd5b505af115801561398c573d6000803e3d6000fd5b5050505060007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489050600030905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016139f591906144ff565b60206040518083038186803b158015613a0d57600080fd5b505afa158015613a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a45919061523d565b90506000613a86613a63601054601154613cbd90919063ffffffff16565b613a78600b54856135d290919063ffffffff16565b61364d90919063ffffffff16565b90506000613ac7613aa4601054601154613cbd90919063ffffffff16565b613ab9600c54866135d290919063ffffffff16565b61364d90919063ffffffff16565b90506000613af082613ae28587613cbd90919063ffffffff16565b613cbd90919063ffffffff16565b90506000811115613bac578573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613b589291906152c2565b602060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baa91906149ae565b505b6000821115613c66578573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613c129291906152c2565b602060405180830381600087803b158015613c2c57600080fd5b505af1158015613c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6491906149ae565b505b6000831115613c7957613c7883611670565b5b7fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df9828285604051613cac9392919061526a565b60405180910390a150505050505050565b6000613cff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131db565b905092915050565b505050565b60008083118290613d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4a9190614300565b60405180910390fd5b5060008385613d629190615165565b9050809150509392505050565b6000600267ffffffffffffffff811115613d8c57613d8b614912565b5b604051908082528060200260200182016040528015613dba5781602001602082028036833780820191505090505b5090503081600081518110613dd257613dd1614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881600181518110613e4157613e40614941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613eb430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a85613eaf91906150dc565b61279f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed173983600084600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613f2e610bb84261273990919063ffffffff16565b6040518663ffffffff1660e01b8152600401613f4e959493929190614ad4565b600060405180830381600087803b158015613f6857600080fd5b505af1158015613f7c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190613fa591906153fa565b505050565b60007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4890508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161402c929190614970565b602060405180830381600087803b15801561404657600080fd5b505af115801561405a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407e91906149ae565b506140ac30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561279f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700307f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488686600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661414961012c4261273990919063ffffffff16565b6040518963ffffffff1660e01b815260040161416c989796959493929190615443565b606060405180830381600087803b15801561418657600080fd5b505af115801561419a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141be91906154c1565b505050505050565b6000819050919050565b6141d9816141c6565b82525050565b60006020820190506141f460008301846141d0565b92915050565b6000604051905090565b600080fd5b600080fd5b614217816141c6565b811461422257600080fd5b50565b6000813590506142348161420e565b92915050565b6000602082840312156142505761424f614204565b5b600061425e84828501614225565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142a1578082015181840152602081019050614286565b838111156142b0576000848401525b50505050565b6000601f19601f8301169050919050565b60006142d282614267565b6142dc8185614272565b93506142ec818560208601614283565b6142f5816142b6565b840191505092915050565b6000602082019050818103600083015261431a81846142c7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061434d82614322565b9050919050565b61435d81614342565b811461436857600080fd5b50565b60008135905061437a81614354565b92915050565b6000806040838503121561439757614396614204565b5b60006143a58582860161436b565b92505060206143b685828601614225565b9150509250929050565b60008115159050919050565b6143d5816143c0565b82525050565b60006020820190506143f060008301846143cc565b92915050565b60006020828403121561440c5761440b614204565b5b600061441a8482850161436b565b91505092915050565b6000819050919050565b600061444861444361443e84614322565b614423565b614322565b9050919050565b600061445a8261442d565b9050919050565b600061446c8261444f565b9050919050565b61447c81614461565b82525050565b60006020820190506144976000830184614473565b92915050565b6000806000606084860312156144b6576144b5614204565b5b60006144c48682870161436b565b93505060206144d58682870161436b565b92505060406144e686828701614225565b9150509250925092565b6144f981614342565b82525050565b600060208201905061451460008301846144f0565b92915050565b600060ff82169050919050565b6145308161451a565b82525050565b600060208201905061454b6000830184614527565b92915050565b61455a816143c0565b811461456557600080fd5b50565b60008135905061457781614551565b92915050565b6000806040838503121561459457614593614204565b5b60006145a28582860161436b565b92505060206145b385828601614568565b9150509250929050565b60006145c88261444f565b9050919050565b6145d8816145bd565b82525050565b60006020820190506145f360008301846145cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261461e5761461d6145f9565b5b8235905067ffffffffffffffff81111561463b5761463a6145fe565b5b60208301915083602082028301111561465757614656614603565b5b9250929050565b60008060006040848603121561467757614676614204565b5b600084013567ffffffffffffffff81111561469557614694614209565b5b6146a186828701614608565b935093505060206146b486828701614568565b9150509250925092565b6000602082840312156146d4576146d3614204565b5b60006146e284828501614568565b91505092915050565b6000806040838503121561470257614701614204565b5b60006147108582860161436b565b92505060206147218582860161436b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614761602083614272565b915061476c8261472b565b602082019050919050565b6000602082019050818103600083015261479081614754565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006147cd601d83614272565b91506147d882614797565b602082019050919050565b600060208201905081810360008301526147fc816147c0565b9050919050565b600060408201905061481860008301856141d0565b61482560208301846141d0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614866826141c6565b9150614871836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148a6576148a561482c565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148f857607f821691505b6020821081141561490c5761490b6148b1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061498560008301856144f0565b61499260208301846141d0565b9392505050565b6000815190506149a881614551565b92915050565b6000602082840312156149c4576149c3614204565b5b60006149d284828501614999565b91505092915050565b6000819050919050565b6000614a006149fb6149f6846149db565b614423565b6141c6565b9050919050565b614a10816149e5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a4b81614342565b82525050565b6000614a5d8383614a42565b60208301905092915050565b6000602082019050919050565b6000614a8182614a16565b614a8b8185614a21565b9350614a9683614a32565b8060005b83811015614ac7578151614aae8882614a51565b9750614ab983614a69565b925050600181019050614a9a565b5085935050505092915050565b600060a082019050614ae960008301886141d0565b614af66020830187614a07565b8181036040830152614b088186614a76565b9050614b1760608301856144f0565b614b2460808301846141d0565b9695505050505050565b6000604082019050614b4360008301856141d0565b8181036020830152614b558184614a76565b90509392505050565b6000614b69826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b9c57614b9b61482c565b5b600182019050919050565b6000819050919050565b6000614bc0602084018461436b565b905092915050565b6000602082019050919050565b6000614be18385614a21565b9350614bec82614ba7565b8060005b85811015614c2557614c028284614bb1565b614c0c8882614a51565b9750614c1783614bc8565b925050600181019050614bf0565b5085925050509392505050565b60006040820190508181036000830152614c4d818587614bd5565b9050614c5c60208301846143cc565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cc0602683614272565b9150614ccb82614c64565b604082019050919050565b60006020820190508181036000830152614cef81614cb3565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d2c601b83614272565b9150614d3782614cf6565b602082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614dbe602483614272565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e50602283614272565b9150614e5b82614df4565b604082019050919050565b60006020820190508181036000830152614e7f81614e43565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000614ebc601b83614272565b9150614ec782614e86565b602082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f4e603683614272565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b6000614f8f826141c6565b9150614f9a836141c6565b925082821015614fad57614fac61482c565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615014602583614272565b915061501f82614fb8565b604082019050919050565b6000602082019050818103600083015261504381615007565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150a6602383614272565b91506150b18261504a565b604082019050919050565b600060208201905081810360008301526150d581615099565b9050919050565b60006150e7826141c6565b91506150f2836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561512b5761512a61482c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615170826141c6565b915061517b836141c6565b92508261518b5761518a615136565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151f2602183614272565b91506151fd82615196565b604082019050919050565b60006020820190508181036000830152615221816151e5565b9050919050565b6000815190506152378161420e565b92915050565b60006020828403121561525357615252614204565b5b600061526184828501615228565b91505092915050565b600060608201905061527f60008301866141d0565b61528c60208301856141d0565b61529960408301846141d0565b949350505050565b60006152ac8261444f565b9050919050565b6152bc816152a1565b82525050565b60006040820190506152d760008301856152b3565b6152e460208301846141d0565b9392505050565b6152f4826142b6565b810181811067ffffffffffffffff8211171561531357615312614912565b5b80604052505050565b60006153266141fa565b905061533282826152eb565b919050565b600067ffffffffffffffff82111561535257615351614912565b5b602082029050602081019050919050565b600061537661537184615337565b61531c565b9050808382526020820190506020840283018581111561539957615398614603565b5b835b818110156153c257806153ae8882615228565b84526020840193505060208101905061539b565b5050509392505050565b600082601f8301126153e1576153e06145f9565b5b81516153f1848260208601615363565b91505092915050565b6000602082840312156154105761540f614204565b5b600082015167ffffffffffffffff81111561542e5761542d614209565b5b61543a848285016153cc565b91505092915050565b600061010082019050615459600083018b6144f0565b615466602083018a6144f0565b61547360408301896141d0565b61548060608301886141d0565b61548d6080830187614a07565b61549a60a0830186614a07565b6154a760c08301856144f0565b6154b460e08301846141d0565b9998505050505050505050565b6000806000606084860312156154da576154d9614204565b5b60006154e886828701615228565b93505060206154f986828701615228565b925050604061550a86828701615228565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e7a88788e233341e36024c0f019c8505d74da7ce0420b570a0eba572e478d4ed64736f6c63430008090033
Deployed Bytecode Sourcemap
29030:15488:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29631:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29482:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34623:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19952:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22260:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30174:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29931:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29103:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21072:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22952:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29265:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20914:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29660:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23815:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29601:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29151:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33998:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30014:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29964:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36661:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33676:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21243:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6426:148;;;;;;;;;;;;;:::i;:::-;;36795:160;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36963:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29443:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40368:671;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29362:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5784:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20171:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29897:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35845:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24618:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21633:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34915:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30582:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35255:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35507:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44344:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30054:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30275:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29228:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21912:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29551:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36315:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6729:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30244:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34330:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29631:22;;;;:::o;29482:62::-;;;;:::o;34623:284::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34713:2:::1;34701:8;:14;;34693:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34765:32;34779:7;;34788:8;34765:32;;;;;;;:::i;:::-;;;;;;;;34818:8;34808:7;:18;;;;34891:8;34875:13;;34864:8;;34849:12;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;:50;;;;:::i;:::-;34837:9;:62;;;;34623:284:::0;:::o;19952:100::-;20006:13;20039:5;20032:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19952:100;:::o;22260:210::-;22379:4;22401:39;22410:12;:10;:12::i;:::-;22424:7;22433:6;22401:8;:39::i;:::-;22458:4;22451:11;;22260:210;;;;:::o;30174:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;29931:24::-;;;;:::o;29103:41::-;;;;;;;;;;;;;:::o;21072:108::-;21133:7;21160:12;;21153:19;;21072:108;:::o;22952:454::-;23092:4;23109:36;23119:6;23127:9;23138:6;23109:9;:36::i;:::-;23156:220;23179:6;23200:12;:10;:12::i;:::-;23227:138;23283:6;23227:138;;;;;;;;;;;;;;;;;:11;:19;23239:6;23227:19;;;;;;;;;;;;;;;:33;23247:12;:10;:12::i;:::-;23227:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;23156:8;:220::i;:::-;23394:4;23387:11;;22952:454;;;;;:::o;29265:90::-;;;:::o;20914:93::-;20972:5;20997:2;20990:9;;20914:93;:::o;29660:28::-;;;;:::o;23815:300::-;23930:4;23952:133;23975:12;:10;:12::i;:::-;24002:7;24024:50;24063:10;24024:11;:25;24036:12;:10;:12::i;:::-;24024:25;;;;;;;;;;;;;;;:34;24050:7;24024:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23952:8;:133::i;:::-;24103:4;24096:11;;23815:300;;;;:::o;29601:23::-;;;;:::o;29151:38::-;;;:::o;33998:324::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34102:2:::1;34085:13;:19;;34077:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34154:48;34174:12;;34188:13;34154:48;;;;;;;:::i;:::-;;;;;;;;34228:13;34213:12;:28;;;;34307:7;;34291:13;;34280:8;;34264:13;:24;;;;:::i;:::-;:40;;;;:::i;:::-;:50;;;;:::i;:::-;34252:9;:62;;;;33998:324:::0;:::o;30014:33::-;;;;;;;;;;;;;:::o;29964:41::-;;;;;;;;;;;;;:::o;36661:126::-;36727:4;36751:19;:28;36771:7;36751:28;;;;;;;;;;;;;;;;;;;;;;;;;36744:35;;36661:126;;;:::o;33676:314::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33755:24:::1;33790:15;;;;;;;;;;;33755:51;;33839:16;33825:30;;:10;:30;;;;33817:39;;;::::0;::::1;;33906:16;33872:51;;33894:10;33872:51;;;;;;;;;;;;33971:10;33934:15;;:48;;;;;;;;;;;;;;;;;;33744:246;33676:314:::0;:::o;21243:177::-;21362:7;21394:9;:18;21404:7;21394:18;;;;;;;;;;;;;;;;21387:25;;21243:177;;;:::o;6426:148::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6533:1:::1;6496:40;;6517:6;;;;;;;;;;;6496:40;;;;;;;;;;;;6564:1;6547:6;;:19;;;;;;;;;;;;;;;;;;6426:148::o:0;36795:160::-;36847:4;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36881:5:::1;36864:14;;:22;;;;;;;;;;;;;;;;;;36920:5;36897:20;;:28;;;;;;;;;;;;;;;;;;36943:4;36936:11;;36795:160:::0;:::o;36963:167::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37118:4:::1;37076:31;:39;37108:6;37076:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36963:167:::0;;:::o;29443:30::-;;;;;;;;;;;;;:::o;40368:671::-;40489:21;40527:1;40513:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40489:40;;40550:4;40540;40545:1;40540:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;40583:4;40565;40570:1;40565:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40599:19;40628:4;40599:34;;40644:12;:20;;;40673:15;;;;;;;;;;;40691:6;40644:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40735:15;;;;;;;;;;;:69;;;40819:6;40840:1;40887:4;40906:11;40948:24;40968:3;40948:15;:19;;:24;;;;:::i;:::-;40735:248;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41001:30;41018:6;41026:4;41001:30;;;;;;;:::i;:::-;;;;;;;;40418:621;;40368:671;:::o;29362:74::-;;;:::o;5784:79::-;5822:7;5849:6;;;;;;;;;;;5842:13;;5784:79;:::o;20171:104::-;20227:13;20260:7;20253:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20171:104;:::o;29897:27::-;;;;:::o;35845:206::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35975:13:::1;35967:21;;:4;:21;;;;35959:30;;;::::0;::::1;;36002:41;36031:4;36037:5;36002:28;:41::i;:::-;35845:206:::0;;:::o;24618:400::-;24738:4;24760:228;24783:12;:10;:12::i;:::-;24810:7;24832:145;24889:15;24832:145;;;;;;;;;;;;;;;;;:11;:25;24844:12;:10;:12::i;:::-;24832:25;;;;;;;;;;;;;;;:34;24858:7;24832:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;24760:8;:228::i;:::-;25006:4;24999:11;;24618:400;;;;:::o;21633:216::-;21755:4;21777:42;21787:12;:10;:12::i;:::-;21801:9;21812:6;21777:9;:42::i;:::-;21837:4;21830:11;;21633:216;;;;:::o;34915:332::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35023:2:::1;35005:14;:20;;34997:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35075:50;35095:13;;35110:14;35075:50;;;;;;;:::i;:::-;;;;;;;;35152:14;35136:13;:30;;;;35232:7;;35215:14;35204:8;;35189:12;;:23;;;;:::i;:::-;:40;;;;:::i;:::-;:50;;;;:::i;:::-;35177:9;:62;;;;34915:332:::0;:::o;30582:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;35255:244::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35380:8:::1;35348:40;;:19;:28;35368:7;35348:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;35340:49;;;::::0;::::1;;35431:8;35400:19;:28;35420:7;35400:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35473:7;35457:34;;;35482:8;35457:34;;;;;;:::i;:::-;;;;;;;;35255:244:::0;;:::o;35507:330::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35650:9:::1;35645:116;35669:8;;:15;;35665:1;:19;35645:116;;;35741:8;35706:19;:32;35726:8;;35735:1;35726:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35706:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;35686:3;;;;;:::i;:::-;;;;35645:116;;;;35778:51;35810:8;;35820;35778:51;;;;;;;;:::i;:::-;;;;;;;;35507:330:::0;;;:::o;44344:171::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44445:8:::1;44421:21;;:32;;;;;;;;;;;;;;;;;;44469:38;44498:8;44469:38;;;;;;:::i;:::-;;;;;;;;44344:171:::0;:::o;30054:39::-;;;;;;;;;;;;;:::o;30275:35::-;;;;:::o;29228:30::-;;;;;;;;;;;;;:::o;21912:201::-;22046:7;22078:11;:18;22090:5;22078:18;;;;;;;;;;;;;;;:27;22097:7;22078:27;;;;;;;;;;;;;;;;22071:34;;21912:201;;;;:::o;29551:41::-;;;;:::o;36315:338::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36455:15:::1;;;;;;;;;;;36433:37;;:18;:37;;;;36425:46;;;::::0;::::1;;36482:41;36498:18;36518:4;36482:15;:41::i;:::-;36582:15;;;;;;;;;;;36539:59;;36562:18;36539:59;;;;;;;;;;;;36627:18;36609:15;;:36;;;;;;;;;;;;;;;;;;36315:338:::0;:::o;6729:281::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6852:1:::1;6832:22;;:8;:22;;;;6810:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6965:8;6936:38;;6957:6;;;;;;;;;;;6936:38;;;;;;;;;;;;6994:8;6985:6;;:17;;;;;;;;;;;;;;;;;;6729:281:::0;:::o;30244:24::-;;;;:::o;34330:285::-;6006:12;:10;:12::i;:::-;5996:22;;:6;;;;;;;;;;;:22;;;5988:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34419:2:::1;34407:8;:14;;34399:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34471:34;34486:8;;34496;34471:34;;;;;;;:::i;:::-;;;;;;;;34527:8;34516;:19;;;;34600:7;;34584:13;;34573:8;34558:12;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;:49;;;;:::i;:::-;34546:9;:61;;;;34330:285:::0;:::o;325:181::-;383:7;403:9;419:1;415;:5;;;;:::i;:::-;403:17;;444:1;439;:6;;431:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;497:1;490:8;;;325:181;;;;:::o;4920:98::-;4973:7;5000:10;4993:17;;4920:98;:::o;27548:380::-;27701:1;27684:19;;:5;:19;;;;27676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27782:1;27763:21;;:7;:21;;;;27755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27866:6;27836:11;:18;27848:5;27836:18;;;;;;;;;;;;;;;:27;27855:7;27836:27;;;;;;;;;;;;;;;:36;;;;27904:7;27888:32;;27897:5;27888:32;;;27913:6;27888:32;;;;;;:::i;:::-;;;;;;;;27548:380;;;:::o;37138:3222::-;37286:1;37270:18;;:4;:18;;;;37262:27;;;;;;37322:1;37308:16;;:2;:16;;;;37300:25;;;;;;37352:1;37342:6;:11;37338:93;;;37370:28;37386:4;37392:2;37396:1;37370:15;:28::i;:::-;37413:7;;37338:93;37447:14;;;;;;;;;;;37443:1275;;;37508:7;:5;:7::i;:::-;37500:15;;:4;:15;;;;:49;;;;;37542:7;:5;:7::i;:::-;37536:13;;:2;:13;;;;37500:49;:86;;;;;37584:1;37570:16;;:2;:16;;;;37500:86;:128;;;;;37621:6;37607:21;;:2;:21;;;;37500:128;:158;;;;;37650:8;;;;;;;;;;;37649:9;37500:158;37478:1229;;;37747:25;:31;37773:4;37747:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37804:31;:35;37836:2;37804:35;;;;;;;;;;;;;;;;;;;;;;;;;37803:36;37747:92;37721:971;;;37942:9;;37925:13;37935:2;37925:9;:13::i;:::-;37916:6;:22;;;;:::i;:::-;:35;;37882:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;37721:971;;;38128:25;:29;38154:2;38128:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;38183:31;:37;38215:4;38183:37;;;;;;;;;;;;;;;;;;;;;;;;;38182:38;38128:92;38102:590;;;38307:20;;38297:6;:30;;38263:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;38102:590;;;38464:31;:35;38496:2;38464:35;;;;;;;;;;;;;;;;;;;;;;;;;38459:233;;38584:9;;38567:13;38577:2;38567:9;:13::i;:::-;38558:6;:22;;;;:::i;:::-;:35;;38524:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;38459:233;38102:590;37721:971;37478:1229;37443:1275;38749:8;;;;;;;;;;;38748:9;:55;;;;;38774:25;:29;38800:2;38774:29;;;;;;;;;;;;;;;;;;;;;;;;;38748:55;:171;;;;;38903:15;;;;;;;;;;;38887:32;;:4;:32;;;;38748:171;:276;;;;;39001:19;:23;39021:2;39001:23;;;;;;;;;;;;;;;;;;;;;;;;;39000:24;38748:276;38730:414;;;39107:24;;39097:6;:34;;39089:43;;;;;;38730:414;39156:28;39187:24;39205:4;39187:9;:24::i;:::-;39156:55;;39224:12;39263:18;;39239:20;:42;;39224:57;;39312:7;:33;;;;;39337:8;;;;;;;;;;;39336:9;39312:33;:82;;;;;39363:25;:31;39389:4;39363:31;;;;;;;;;;;;;;;;;;;;;;;;;39362:32;39312:82;:122;;;;;39419:15;;;;;;;;;;;39411:23;;:4;:23;;;;39312:122;:160;;;;;39457:15;;;;;;;;;;;39451:21;;:2;:21;;;;39312:160;39294:581;;;39510:4;39499:8;;:15;;;;;;;;;;;;;;;;;;39531:18;39552:85;39613:9;;39552:38;39577:12;;39552:20;:24;;:38;;;;:::i;:::-;:42;;:85;;;;:::i;:::-;39531:106;;39666:1;39655:10;:12;39652:73;;;39683:26;39698:10;39683:14;:26::i;:::-;39652:73;39741:18;39762:24;39780:4;39762:9;:24::i;:::-;39741:45;;39801:29;39819:10;39801:17;:29::i;:::-;39858:5;39847:8;;:16;;;;;;;;;;;;;;;;;;39484:391;;39294:581;39887:12;39903:8;;;;;;;;;;;39902:9;39887:24;;40013:19;:25;40033:4;40013:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40042:19;:23;40062:2;40042:23;;;;;;;;;;;;;;;;;;;;;;;;;40013:52;40009:100;;;40092:5;40082:15;;40009:100;40125:7;40121:186;;;40149:12;40164:30;40190:3;40164:21;40175:9;;40164:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;40149:45;;40220:16;40231:4;40220:6;:10;;:16;;;;:::i;:::-;40211:25;;40253:42;40269:4;40283;40290;40253:15;:42::i;:::-;40134:173;40121:186;40319:33;40335:4;40341:2;40345:6;40319:15;:33::i;:::-;37251:3109;;;37138:3222;;;;:::o;1228:226::-;1348:7;1381:1;1376;:6;;1384:12;1368:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1408:9;1424:1;1420;:5;;;;:::i;:::-;1408:17;;1445:1;1438:8;;;1228:226;;;;;:::o;36059:248::-;36185:5;36150:40;;:25;:31;36176:4;36150:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;36142:49;;;;;;36236:5;36202:25;:31;36228:4;36202:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36293:5;36259:40;;36287:4;36259:40;;;;;;;;;;;;36059:248;;:::o;25508:610::-;25666:1;25648:20;;:6;:20;;;;25640:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25750:1;25729:23;;:9;:23;;;;25721:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25805:47;25826:6;25834:9;25845:6;25805:20;:47::i;:::-;25885:108;25921:6;25885:108;;;;;;;;;;;;;;;;;:9;:17;25895:6;25885:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;25865:9;:17;25875:6;25865:17;;;;;;;;;;;;;;;:128;;;;26027:32;26052:6;26027:9;:20;26037:9;26027:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26004:9;:20;26014:9;26004:20;;;;;;;;;;;;;;;:55;;;;26092:9;26075:35;;26084:6;26075:35;;;26103:6;26075:35;;;;;;:::i;:::-;;;;;;;;25508:610;;;:::o;1713:471::-;1771:7;2021:1;2016;:6;2012:47;;;2046:1;2039:8;;;;2012:47;2071:9;2087:1;2083;:5;;;;:::i;:::-;2071:17;;2116:1;2111;2107;:5;;;;:::i;:::-;:10;2099:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2175:1;2168:8;;;1713:471;;;;;:::o;2660:132::-;2718:7;2745:39;2749:1;2752;2745:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2738:46;;2660:132;;;;:::o;41047:1071::-;41157:12;41172:13;41183:1;41172:6;:10;;:13;;;;:::i;:::-;41157:28;;41196:17;41216:16;41227:4;41216:6;:10;;:16;;;;:::i;:::-;41196:36;;41243:19;41272:4;41243:34;;41553:22;41578:12;:22;;;41609:4;41578:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41553:62;;41660:23;41678:4;41660:17;:23::i;:::-;41764:11;;;;;;;;;;;:24;;;41797:4;41764:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41862:18;41883:81;41939:14;41883:12;:22;;;41914:4;41883:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;:81;;;;:::i;:::-;41862:102;;42014:35;42027:9;42038:10;42014:12;:35::i;:::-;42067:43;42082:4;42088:10;42100:9;42067:43;;;;;;;;:::i;:::-;;;;;;;;41095:1023;;;;;41047:1071;:::o;43456:880::-;43518:25;43536:6;43518:17;:25::i;:::-;43554:11;;;;;;;;;;;:24;;;43587:4;43554:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43604:19;43633:4;43604:34;;43649:21;43681:4;43649:37;;43697:16;43716:12;:22;;;43739:13;43716:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43697:56;;43774:12;43789:81;43832:27;43846:12;;43832:9;;:13;;:27;;;;:::i;:::-;43789:24;43804:8;;43790;43789:14;;:24;;;;:::i;:::-;:28;;:81;;;;:::i;:::-;43774:96;;43881:11;43895:56;43923:27;43937:12;;43923:9;;:13;;:27;;;;:::i;:::-;43895:23;43910:7;;43896:8;43895:14;;:23;;;;:::i;:::-;:27;;:56;;;;:::i;:::-;43881:70;;43962:17;43982:29;44007:3;43982:20;43997:4;43983:8;43982:14;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;43962:49;;44035:1;44025:9;:11;44022:87;;;44048:12;:21;;;44070:15;;;;;;;;;;;44087:9;44048:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44022:87;44126:1;44122:3;:5;44119:67;;;44137:12;:21;;;44159:9;;;;;;;;;;;44170:3;44137:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44119:67;44213:1;44208:4;:6;44205:60;;;44230:23;44248:4;44230:17;:23::i;:::-;44205:60;44290:38;44307:3;44312:9;44323:4;44290:38;;;;;;;;:::i;:::-;;;;;;;;43507:829;;;;;;43456:880;:::o;789:136::-;847:7;874:43;878:1;881;874:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;867:50;;789:136;;;;:::o;28531:125::-;;;;:::o;3288:312::-;3408:7;3440:1;3436;:5;3443:12;3428:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3467:9;3483:1;3479;:5;;;;:::i;:::-;3467:17;;3591:1;3584:8;;;3288:312;;;;;:::o;42126:568::-;42253:21;42291:1;42277:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42253:40;;42322:4;42304;42309:1;42304:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42348:4;42338;42343:1;42338:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;42365:67;42382:4;42397:15;;;;;;;;;;;42429:2;42415:11;:16;;;;:::i;:::-;42365:8;:67::i;:::-;42471:15;;;;;;;;;;;:40;;;42526:11;42552:1;42596:4;42623:11;;;;;;;;;;;42650:25;42670:4;42650:15;:19;;:25;;;;:::i;:::-;42471:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42182:512;42126:568;:::o;42702:670::-;42851:19;42880:4;42851:34;;42896:12;:20;;;42925:15;;;;;;;;;;;42943:10;42896:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42967:62;42984:4;42999:15;;;;;;;;;;;43017:11;42967:8;:62::i;:::-;43072:15;;;;;;;;;;;:28;;;43123:4;43143;43162:11;43188:10;43213:1;43256;43299:15;;;;;;;;;;;43329:24;43349:3;43329:15;:19;;:24;;;;:::i;:::-;43072:292;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42773:599;42702:670;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:99::-;1429:6;1463:5;1457:12;1447:22;;1377:99;;;:::o;1482:169::-;1566:11;1600:6;1595:3;1588:19;1640:4;1635:3;1631:14;1616:29;;1482:169;;;;:::o;1657:307::-;1725:1;1735:113;1749:6;1746:1;1743:13;1735:113;;;1834:1;1829:3;1825:11;1819:18;1815:1;1810:3;1806:11;1799:39;1771:2;1768:1;1764:10;1759:15;;1735:113;;;1866:6;1863:1;1860:13;1857:101;;;1946:1;1937:6;1932:3;1928:16;1921:27;1857:101;1706:258;1657:307;;;:::o;1970:102::-;2011:6;2062:2;2058:7;2053:2;2046:5;2042:14;2038:28;2028:38;;1970:102;;;:::o;2078:364::-;2166:3;2194:39;2227:5;2194:39;:::i;:::-;2249:71;2313:6;2308:3;2249:71;:::i;:::-;2242:78;;2329:52;2374:6;2369:3;2362:4;2355:5;2351:16;2329:52;:::i;:::-;2406:29;2428:6;2406:29;:::i;:::-;2401:3;2397:39;2390:46;;2170:272;2078:364;;;;:::o;2448:313::-;2561:4;2599:2;2588:9;2584:18;2576:26;;2648:9;2642:4;2638:20;2634:1;2623:9;2619:17;2612:47;2676:78;2749:4;2740:6;2676:78;:::i;:::-;2668:86;;2448:313;;;;:::o;2767:126::-;2804:7;2844:42;2837:5;2833:54;2822:65;;2767:126;;;:::o;2899:96::-;2936:7;2965:24;2983:5;2965:24;:::i;:::-;2954:35;;2899:96;;;:::o;3001:122::-;3074:24;3092:5;3074:24;:::i;:::-;3067:5;3064:35;3054:63;;3113:1;3110;3103:12;3054:63;3001:122;:::o;3129:139::-;3175:5;3213:6;3200:20;3191:29;;3229:33;3256:5;3229:33;:::i;:::-;3129:139;;;;:::o;3274:474::-;3342:6;3350;3399:2;3387:9;3378:7;3374:23;3370:32;3367:119;;;3405:79;;:::i;:::-;3367:119;3525:1;3550:53;3595:7;3586:6;3575:9;3571:22;3550:53;:::i;:::-;3540:63;;3496:117;3652:2;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3623:118;3274:474;;;;;:::o;3754:90::-;3788:7;3831:5;3824:13;3817:21;3806:32;;3754:90;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:329::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:60::-;4544:3;4565:5;4558:12;;4516:60;;;:::o;4582:142::-;4632:9;4665:53;4683:34;4692:24;4710:5;4692:24;:::i;:::-;4683:34;:::i;:::-;4665:53;:::i;:::-;4652:66;;4582:142;;;:::o;4730:126::-;4780:9;4813:37;4844:5;4813:37;:::i;:::-;4800:50;;4730:126;;;:::o;4862:153::-;4939:9;4972:37;5003:5;4972:37;:::i;:::-;4959:50;;4862:153;;;:::o;5021:185::-;5135:64;5193:5;5135:64;:::i;:::-;5130:3;5123:77;5021:185;;:::o;5212:276::-;5332:4;5370:2;5359:9;5355:18;5347:26;;5383:98;5478:1;5467:9;5463:17;5454:6;5383:98;:::i;:::-;5212:276;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:146::-;7706:9;7739:37;7770:5;7739:37;:::i;:::-;7726:50;;7636:146;;;:::o;7788:171::-;7895:57;7946:5;7895:57;:::i;:::-;7890:3;7883:70;7788:171;;:::o;7965:262::-;8078:4;8116:2;8105:9;8101:18;8093:26;;8129:91;8217:1;8206:9;8202:17;8193:6;8129:91;:::i;:::-;7965:262;;;;:::o;8233:117::-;8342:1;8339;8332:12;8356:117;8465:1;8462;8455:12;8479:117;8588:1;8585;8578:12;8619:568;8692:8;8702:6;8752:3;8745:4;8737:6;8733:17;8729:27;8719:122;;8760:79;;:::i;:::-;8719:122;8873:6;8860:20;8850:30;;8903:18;8895:6;8892:30;8889:117;;;8925:79;;:::i;:::-;8889:117;9039:4;9031:6;9027:17;9015:29;;9093:3;9085:4;9077:6;9073:17;9063:8;9059:32;9056:41;9053:128;;;9100:79;;:::i;:::-;9053:128;8619:568;;;;;:::o;9193:698::-;9285:6;9293;9301;9350:2;9338:9;9329:7;9325:23;9321:32;9318:119;;;9356:79;;:::i;:::-;9318:119;9504:1;9493:9;9489:17;9476:31;9534:18;9526:6;9523:30;9520:117;;;9556:79;;:::i;:::-;9520:117;9669:80;9741:7;9732:6;9721:9;9717:22;9669:80;:::i;:::-;9651:98;;;;9447:312;9798:2;9824:50;9866:7;9857:6;9846:9;9842:22;9824:50;:::i;:::-;9814:60;;9769:115;9193:698;;;;;:::o;9897:323::-;9953:6;10002:2;9990:9;9981:7;9977:23;9973:32;9970:119;;;10008:79;;:::i;:::-;9970:119;10128:1;10153:50;10195:7;10186:6;10175:9;10171:22;10153:50;:::i;:::-;10143:60;;10099:114;9897:323;;;;:::o;10226:474::-;10294:6;10302;10351:2;10339:9;10330:7;10326:23;10322:32;10319:119;;;10357:79;;:::i;:::-;10319:119;10477:1;10502:53;10547:7;10538:6;10527:9;10523:22;10502:53;:::i;:::-;10492:63;;10448:117;10604:2;10630:53;10675:7;10666:6;10655:9;10651:22;10630:53;:::i;:::-;10620:63;;10575:118;10226:474;;;;;:::o;10706:182::-;10846:34;10842:1;10834:6;10830:14;10823:58;10706:182;:::o;10894:366::-;11036:3;11057:67;11121:2;11116:3;11057:67;:::i;:::-;11050:74;;11133:93;11222:3;11133:93;:::i;:::-;11251:2;11246:3;11242:12;11235:19;;10894:366;;;:::o;11266:419::-;11432:4;11470:2;11459:9;11455:18;11447:26;;11519:9;11513:4;11509:20;11505:1;11494:9;11490:17;11483:47;11547:131;11673:4;11547:131;:::i;:::-;11539:139;;11266:419;;;:::o;11691:179::-;11831:31;11827:1;11819:6;11815:14;11808:55;11691:179;:::o;11876:366::-;12018:3;12039:67;12103:2;12098:3;12039:67;:::i;:::-;12032:74;;12115:93;12204:3;12115:93;:::i;:::-;12233:2;12228:3;12224:12;12217:19;;11876:366;;;:::o;12248:419::-;12414:4;12452:2;12441:9;12437:18;12429:26;;12501:9;12495:4;12491:20;12487:1;12476:9;12472:17;12465:47;12529:131;12655:4;12529:131;:::i;:::-;12521:139;;12248:419;;;:::o;12673:332::-;12794:4;12832:2;12821:9;12817:18;12809:26;;12845:71;12913:1;12902:9;12898:17;12889:6;12845:71;:::i;:::-;12926:72;12994:2;12983:9;12979:18;12970:6;12926:72;:::i;:::-;12673:332;;;;;:::o;13011:180::-;13059:77;13056:1;13049:88;13156:4;13153:1;13146:15;13180:4;13177:1;13170:15;13197:305;13237:3;13256:20;13274:1;13256:20;:::i;:::-;13251:25;;13290:20;13308:1;13290:20;:::i;:::-;13285:25;;13444:1;13376:66;13372:74;13369:1;13366:81;13363:107;;;13450:18;;:::i;:::-;13363:107;13494:1;13491;13487:9;13480:16;;13197:305;;;;:::o;13508:180::-;13556:77;13553:1;13546:88;13653:4;13650:1;13643:15;13677:4;13674:1;13667:15;13694:320;13738:6;13775:1;13769:4;13765:12;13755:22;;13822:1;13816:4;13812:12;13843:18;13833:81;;13899:4;13891:6;13887:17;13877:27;;13833:81;13961:2;13953:6;13950:14;13930:18;13927:38;13924:84;;;13980:18;;:::i;:::-;13924:84;13745:269;13694:320;;;:::o;14020:180::-;14068:77;14065:1;14058:88;14165:4;14162:1;14155:15;14189:4;14186:1;14179:15;14206:180;14254:77;14251:1;14244:88;14351:4;14348:1;14341:15;14375:4;14372:1;14365:15;14392:332;14513:4;14551:2;14540:9;14536:18;14528:26;;14564:71;14632:1;14621:9;14617:17;14608:6;14564:71;:::i;:::-;14645:72;14713:2;14702:9;14698:18;14689:6;14645:72;:::i;:::-;14392:332;;;;;:::o;14730:137::-;14784:5;14815:6;14809:13;14800:22;;14831:30;14855:5;14831:30;:::i;:::-;14730:137;;;;:::o;14873:345::-;14940:6;14989:2;14977:9;14968:7;14964:23;14960:32;14957:119;;;14995:79;;:::i;:::-;14957:119;15115:1;15140:61;15193:7;15184:6;15173:9;15169:22;15140:61;:::i;:::-;15130:71;;15086:125;14873:345;;;;:::o;15224:85::-;15269:7;15298:5;15287:16;;15224:85;;;:::o;15315:158::-;15373:9;15406:61;15424:42;15433:32;15459:5;15433:32;:::i;:::-;15424:42;:::i;:::-;15406:61;:::i;:::-;15393:74;;15315:158;;;:::o;15479:147::-;15574:45;15613:5;15574:45;:::i;:::-;15569:3;15562:58;15479:147;;:::o;15632:114::-;15699:6;15733:5;15727:12;15717:22;;15632:114;;;:::o;15752:184::-;15851:11;15885:6;15880:3;15873:19;15925:4;15920:3;15916:14;15901:29;;15752:184;;;;:::o;15942:132::-;16009:4;16032:3;16024:11;;16062:4;16057:3;16053:14;16045:22;;15942:132;;;:::o;16080:108::-;16157:24;16175:5;16157:24;:::i;:::-;16152:3;16145:37;16080:108;;:::o;16194:179::-;16263:10;16284:46;16326:3;16318:6;16284:46;:::i;:::-;16362:4;16357:3;16353:14;16339:28;;16194:179;;;;:::o;16379:113::-;16449:4;16481;16476:3;16472:14;16464:22;;16379:113;;;:::o;16528:732::-;16647:3;16676:54;16724:5;16676:54;:::i;:::-;16746:86;16825:6;16820:3;16746:86;:::i;:::-;16739:93;;16856:56;16906:5;16856:56;:::i;:::-;16935:7;16966:1;16951:284;16976:6;16973:1;16970:13;16951:284;;;17052:6;17046:13;17079:63;17138:3;17123:13;17079:63;:::i;:::-;17072:70;;17165:60;17218:6;17165:60;:::i;:::-;17155:70;;17011:224;16998:1;16995;16991:9;16986:14;;16951:284;;;16955:14;17251:3;17244:10;;16652:608;;;16528:732;;;;:::o;17266:831::-;17529:4;17567:3;17556:9;17552:19;17544:27;;17581:71;17649:1;17638:9;17634:17;17625:6;17581:71;:::i;:::-;17662:80;17738:2;17727:9;17723:18;17714:6;17662:80;:::i;:::-;17789:9;17783:4;17779:20;17774:2;17763:9;17759:18;17752:48;17817:108;17920:4;17911:6;17817:108;:::i;:::-;17809:116;;17935:72;18003:2;17992:9;17988:18;17979:6;17935:72;:::i;:::-;18017:73;18085:3;18074:9;18070:19;18061:6;18017:73;:::i;:::-;17266:831;;;;;;;;:::o;18103:483::-;18274:4;18312:2;18301:9;18297:18;18289:26;;18325:71;18393:1;18382:9;18378:17;18369:6;18325:71;:::i;:::-;18443:9;18437:4;18433:20;18428:2;18417:9;18413:18;18406:48;18471:108;18574:4;18565:6;18471:108;:::i;:::-;18463:116;;18103:483;;;;;:::o;18592:233::-;18631:3;18654:24;18672:5;18654:24;:::i;:::-;18645:33;;18700:66;18693:5;18690:77;18687:103;;;18770:18;;:::i;:::-;18687:103;18817:1;18810:5;18806:13;18799:20;;18592:233;;;:::o;18831:102::-;18900:4;18923:3;18915:11;;18831:102;;;:::o;18939:122::-;18991:5;19016:39;19051:2;19046:3;19042:12;19037:3;19016:39;:::i;:::-;19007:48;;18939:122;;;;:::o;19067:115::-;19139:4;19171;19166:3;19162:14;19154:22;;19067:115;;;:::o;19218:699::-;19347:3;19370:86;19449:6;19444:3;19370:86;:::i;:::-;19363:93;;19480:58;19532:5;19480:58;:::i;:::-;19561:7;19592:1;19577:315;19602:6;19599:1;19596:13;19577:315;;;19672:42;19707:6;19698:7;19672:42;:::i;:::-;19734:63;19793:3;19778:13;19734:63;:::i;:::-;19727:70;;19820:62;19875:6;19820:62;:::i;:::-;19810:72;;19637:255;19624:1;19621;19617:9;19612:14;;19577:315;;;19581:14;19908:3;19901:10;;19352:565;;19218:699;;;;;:::o;19923:491::-;20098:4;20136:2;20125:9;20121:18;20113:26;;20185:9;20179:4;20175:20;20171:1;20160:9;20156:17;20149:47;20213:118;20326:4;20317:6;20309;20213:118;:::i;:::-;20205:126;;20341:66;20403:2;20392:9;20388:18;20379:6;20341:66;:::i;:::-;19923:491;;;;;;:::o;20420:225::-;20560:34;20556:1;20548:6;20544:14;20537:58;20629:8;20624:2;20616:6;20612:15;20605:33;20420:225;:::o;20651:366::-;20793:3;20814:67;20878:2;20873:3;20814:67;:::i;:::-;20807:74;;20890:93;20979:3;20890:93;:::i;:::-;21008:2;21003:3;20999:12;20992:19;;20651:366;;;:::o;21023:419::-;21189:4;21227:2;21216:9;21212:18;21204:26;;21276:9;21270:4;21266:20;21262:1;21251:9;21247:17;21240:47;21304:131;21430:4;21304:131;:::i;:::-;21296:139;;21023:419;;;:::o;21448:177::-;21588:29;21584:1;21576:6;21572:14;21565:53;21448:177;:::o;21631:366::-;21773:3;21794:67;21858:2;21853:3;21794:67;:::i;:::-;21787:74;;21870:93;21959:3;21870:93;:::i;:::-;21988:2;21983:3;21979:12;21972:19;;21631:366;;;:::o;22003:419::-;22169:4;22207:2;22196:9;22192:18;22184:26;;22256:9;22250:4;22246:20;22242:1;22231:9;22227:17;22220:47;22284:131;22410:4;22284:131;:::i;:::-;22276:139;;22003:419;;;:::o;22428:223::-;22568:34;22564:1;22556:6;22552:14;22545:58;22637:6;22632:2;22624:6;22620:15;22613:31;22428:223;:::o;22657:366::-;22799:3;22820:67;22884:2;22879:3;22820:67;:::i;:::-;22813:74;;22896:93;22985:3;22896:93;:::i;:::-;23014:2;23009:3;23005:12;22998:19;;22657:366;;;:::o;23029:419::-;23195:4;23233:2;23222:9;23218:18;23210:26;;23282:9;23276:4;23272:20;23268:1;23257:9;23253:17;23246:47;23310:131;23436:4;23310:131;:::i;:::-;23302:139;;23029:419;;;:::o;23454:221::-;23594:34;23590:1;23582:6;23578:14;23571:58;23663:4;23658:2;23650:6;23646:15;23639:29;23454:221;:::o;23681:366::-;23823:3;23844:67;23908:2;23903:3;23844:67;:::i;:::-;23837:74;;23920:93;24009:3;23920:93;:::i;:::-;24038:2;24033:3;24029:12;24022:19;;23681:366;;;:::o;24053:419::-;24219:4;24257:2;24246:9;24242:18;24234:26;;24306:9;24300:4;24296:20;24292:1;24281:9;24277:17;24270:47;24334:131;24460:4;24334:131;:::i;:::-;24326:139;;24053:419;;;:::o;24478:177::-;24618:29;24614:1;24606:6;24602:14;24595:53;24478:177;:::o;24661:366::-;24803:3;24824:67;24888:2;24883:3;24824:67;:::i;:::-;24817:74;;24900:93;24989:3;24900:93;:::i;:::-;25018:2;25013:3;25009:12;25002:19;;24661:366;;;:::o;25033:419::-;25199:4;25237:2;25226:9;25222:18;25214:26;;25286:9;25280:4;25276:20;25272:1;25261:9;25257:17;25250:47;25314:131;25440:4;25314:131;:::i;:::-;25306:139;;25033:419;;;:::o;25458:241::-;25598:34;25594:1;25586:6;25582:14;25575:58;25667:24;25662:2;25654:6;25650:15;25643:49;25458:241;:::o;25705:366::-;25847:3;25868:67;25932:2;25927:3;25868:67;:::i;:::-;25861:74;;25944:93;26033:3;25944:93;:::i;:::-;26062:2;26057:3;26053:12;26046:19;;25705:366;;;:::o;26077:419::-;26243:4;26281:2;26270:9;26266:18;26258:26;;26330:9;26324:4;26320:20;26316:1;26305:9;26301:17;26294:47;26358:131;26484:4;26358:131;:::i;:::-;26350:139;;26077:419;;;:::o;26502:191::-;26542:4;26562:20;26580:1;26562:20;:::i;:::-;26557:25;;26596:20;26614:1;26596:20;:::i;:::-;26591:25;;26635:1;26632;26629:8;26626:34;;;26640:18;;:::i;:::-;26626:34;26685:1;26682;26678:9;26670:17;;26502:191;;;;:::o;26699:224::-;26839:34;26835:1;26827:6;26823:14;26816:58;26908:7;26903:2;26895:6;26891:15;26884:32;26699:224;:::o;26929:366::-;27071:3;27092:67;27156:2;27151:3;27092:67;:::i;:::-;27085:74;;27168:93;27257:3;27168:93;:::i;:::-;27286:2;27281:3;27277:12;27270:19;;26929:366;;;:::o;27301:419::-;27467:4;27505:2;27494:9;27490:18;27482:26;;27554:9;27548:4;27544:20;27540:1;27529:9;27525:17;27518:47;27582:131;27708:4;27582:131;:::i;:::-;27574:139;;27301:419;;;:::o;27726:222::-;27866:34;27862:1;27854:6;27850:14;27843:58;27935:5;27930:2;27922:6;27918:15;27911:30;27726:222;:::o;27954:366::-;28096:3;28117:67;28181:2;28176:3;28117:67;:::i;:::-;28110:74;;28193:93;28282:3;28193:93;:::i;:::-;28311:2;28306:3;28302:12;28295:19;;27954:366;;;:::o;28326:419::-;28492:4;28530:2;28519:9;28515:18;28507:26;;28579:9;28573:4;28569:20;28565:1;28554:9;28550:17;28543:47;28607:131;28733:4;28607:131;:::i;:::-;28599:139;;28326:419;;;:::o;28751:348::-;28791:7;28814:20;28832:1;28814:20;:::i;:::-;28809:25;;28848:20;28866:1;28848:20;:::i;:::-;28843:25;;29036:1;28968:66;28964:74;28961:1;28958:81;28953:1;28946:9;28939:17;28935:105;28932:131;;;29043:18;;:::i;:::-;28932:131;29091:1;29088;29084:9;29073:20;;28751:348;;;;:::o;29105:180::-;29153:77;29150:1;29143:88;29250:4;29247:1;29240:15;29274:4;29271:1;29264:15;29291:185;29331:1;29348:20;29366:1;29348:20;:::i;:::-;29343:25;;29382:20;29400:1;29382:20;:::i;:::-;29377:25;;29421:1;29411:35;;29426:18;;:::i;:::-;29411:35;29468:1;29465;29461:9;29456:14;;29291:185;;;;:::o;29482:220::-;29622:34;29618:1;29610:6;29606:14;29599:58;29691:3;29686:2;29678:6;29674:15;29667:28;29482:220;:::o;29708:366::-;29850:3;29871:67;29935:2;29930:3;29871:67;:::i;:::-;29864:74;;29947:93;30036:3;29947:93;:::i;:::-;30065:2;30060:3;30056:12;30049:19;;29708:366;;;:::o;30080:419::-;30246:4;30284:2;30273:9;30269:18;30261:26;;30333:9;30327:4;30323:20;30319:1;30308:9;30304:17;30297:47;30361:131;30487:4;30361:131;:::i;:::-;30353:139;;30080:419;;;:::o;30505:143::-;30562:5;30593:6;30587:13;30578:22;;30609:33;30636:5;30609:33;:::i;:::-;30505:143;;;;:::o;30654:351::-;30724:6;30773:2;30761:9;30752:7;30748:23;30744:32;30741:119;;;30779:79;;:::i;:::-;30741:119;30899:1;30924:64;30980:7;30971:6;30960:9;30956:22;30924:64;:::i;:::-;30914:74;;30870:128;30654:351;;;;:::o;31011:442::-;31160:4;31198:2;31187:9;31183:18;31175:26;;31211:71;31279:1;31268:9;31264:17;31255:6;31211:71;:::i;:::-;31292:72;31360:2;31349:9;31345:18;31336:6;31292:72;:::i;:::-;31374;31442:2;31431:9;31427:18;31418:6;31374:72;:::i;:::-;31011:442;;;;;;:::o;31459:134::-;31517:9;31550:37;31581:5;31550:37;:::i;:::-;31537:50;;31459:134;;;:::o;31599:147::-;31694:45;31733:5;31694:45;:::i;:::-;31689:3;31682:58;31599:147;;:::o;31752:348::-;31881:4;31919:2;31908:9;31904:18;31896:26;;31932:79;32008:1;31997:9;31993:17;31984:6;31932:79;:::i;:::-;32021:72;32089:2;32078:9;32074:18;32065:6;32021:72;:::i;:::-;31752:348;;;;;:::o;32106:281::-;32189:27;32211:4;32189:27;:::i;:::-;32181:6;32177:40;32319:6;32307:10;32304:22;32283:18;32271:10;32268:34;32265:62;32262:88;;;32330:18;;:::i;:::-;32262:88;32370:10;32366:2;32359:22;32149:238;32106:281;;:::o;32393:129::-;32427:6;32454:20;;:::i;:::-;32444:30;;32483:33;32511:4;32503:6;32483:33;:::i;:::-;32393:129;;;:::o;32528:311::-;32605:4;32695:18;32687:6;32684:30;32681:56;;;32717:18;;:::i;:::-;32681:56;32767:4;32759:6;32755:17;32747:25;;32827:4;32821;32817:15;32809:23;;32528:311;;;:::o;32862:732::-;32969:5;32994:81;33010:64;33067:6;33010:64;:::i;:::-;32994:81;:::i;:::-;32985:90;;33095:5;33124:6;33117:5;33110:21;33158:4;33151:5;33147:16;33140:23;;33211:4;33203:6;33199:17;33191:6;33187:30;33240:3;33232:6;33229:15;33226:122;;;33259:79;;:::i;:::-;33226:122;33374:6;33357:231;33391:6;33386:3;33383:15;33357:231;;;33466:3;33495:48;33539:3;33527:10;33495:48;:::i;:::-;33490:3;33483:61;33573:4;33568:3;33564:14;33557:21;;33433:155;33417:4;33412:3;33408:14;33401:21;;33357:231;;;33361:21;32975:619;;32862:732;;;;;:::o;33617:385::-;33699:5;33748:3;33741:4;33733:6;33729:17;33725:27;33715:122;;33756:79;;:::i;:::-;33715:122;33866:6;33860:13;33891:105;33992:3;33984:6;33977:4;33969:6;33965:17;33891:105;:::i;:::-;33882:114;;33705:297;33617:385;;;;:::o;34008:554::-;34103:6;34152:2;34140:9;34131:7;34127:23;34123:32;34120:119;;;34158:79;;:::i;:::-;34120:119;34299:1;34288:9;34284:17;34278:24;34329:18;34321:6;34318:30;34315:117;;;34351:79;;:::i;:::-;34315:117;34456:89;34537:7;34528:6;34517:9;34513:22;34456:89;:::i;:::-;34446:99;;34249:306;34008:554;;;;:::o;34568:1029::-;34873:4;34911:3;34900:9;34896:19;34888:27;;34925:71;34993:1;34982:9;34978:17;34969:6;34925:71;:::i;:::-;35006:72;35074:2;35063:9;35059:18;35050:6;35006:72;:::i;:::-;35088;35156:2;35145:9;35141:18;35132:6;35088:72;:::i;:::-;35170;35238:2;35227:9;35223:18;35214:6;35170:72;:::i;:::-;35252:81;35328:3;35317:9;35313:19;35304:6;35252:81;:::i;:::-;35343;35419:3;35408:9;35404:19;35395:6;35343:81;:::i;:::-;35434:73;35502:3;35491:9;35487:19;35478:6;35434:73;:::i;:::-;35517;35585:3;35574:9;35570:19;35561:6;35517:73;:::i;:::-;34568:1029;;;;;;;;;;;:::o;35603:663::-;35691:6;35699;35707;35756:2;35744:9;35735:7;35731:23;35727:32;35724:119;;;35762:79;;:::i;:::-;35724:119;35882:1;35907:64;35963:7;35954:6;35943:9;35939:22;35907:64;:::i;:::-;35897:74;;35853:128;36020:2;36046:64;36102:7;36093:6;36082:9;36078:22;36046:64;:::i;:::-;36036:74;;35991:129;36159:2;36185:64;36241:7;36232:6;36221:9;36217:22;36185:64;:::i;:::-;36175:74;;36130:129;35603:663;;;;;:::o
Swarm Source
ipfs://c227dbc5ccced630ee87ebc3fb240f06328ff1ebfbc2b42ee49b610b429d8782
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.