ERC-20
Overview
Max Total Supply
100,000,000 X23
Holders
28
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,600,000 X23Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
X23
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-30 */ /** x23 - The rest is history. Telegram: t.me/x23token Twitter: twitter.com/x23token Website: x23.best */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; 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; } } 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 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. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be 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 {} } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // 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; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } 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); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract X23 is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0x000000000000000000000000000000000000dEaD); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch // Seller Map mapping (address => uint256) private _holderFirstBuyTimestamp; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public feeDenominator; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; // block number of opened trading uint256 launchedAt; /******************/ // exclude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("X23", "X23") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); // tax is higher at launch to prevent from bot attack, final tax will be 4/5 uint256 _buyMarketingFee = 10; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 10; uint256 _sellMarketingFee = 33; uint256 _sellLiquidityFee = 0; uint256 _sellDevFee = 13; uint256 _feeDenominator = 100; uint256 totalSupply = 100_000_000 * 1e18; maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn maxWallet = totalSupply * 20 / 1000; // 2% maxWallet swapTokensAtAmount = totalSupply * 3 / 10000; // 0.03% swap wallet feeDenominator = _feeDenominator; buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(0x6c26C4286BA29Bb54fd9a9EdA91eA3124bb6Eee9); // set as marketing wallet devWallet = address(0x6c26C4286BA29Bb54fd9a9EdA91eA3124bb6Eee9); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(devWallet, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(devWallet, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; launchedAt = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxWallet lower than 1.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees.div(feeDenominator) <= 10, "Must keep fees at 10% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees.div(feeDenominator) <= 20, "Must keep fees at 20% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled) { if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //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, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(feeDenominator); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(feeDenominator); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600381526020017f58323300000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f583233000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000c39565b5080600490805190602001906200011b92919062000c39565b5050506000620001306200070560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200070d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000d53565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000d53565b6040518363ffffffff1660e01b81526004016200036e92919062000d96565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000d53565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200070d60201b60201c565b6200042160a05160016200080a60201b60201c565b6000600a9050600080600a9050600060219050600080600d905060006064905060006a52b7d2dcc80cd2e400000090506103e860148262000463919062000dfc565b6200046f919062000e8c565b6008819055506103e860148262000487919062000dfc565b62000493919062000e8c565b600a81905550612710600382620004ab919062000dfc565b620004b7919062000e8c565b60098190555081601781905550876010819055508660118190555085601281905550601254601154601054620004ee919062000ec4565b620004fa919062000ec4565b600f819055508460148190555083601581905550826016819055506016546015546014546200052a919062000ec4565b62000536919062000ec4565b601381905550736c26c4286ba29bb54fd9a9eda91ea3124bb6eee9600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736c26c4286ba29bb54fd9a9eda91ea3124bb6eee9600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000608620005fa620008ab60201b60201c565b6001620008d560201b60201c565b6200063d600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008d560201b60201c565b62000650306001620008d560201b60201c565b6200066561dead6001620008d560201b60201c565b6200068762000679620008ab60201b60201c565b60016200070d60201b60201c565b620006bc600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070d60201b60201c565b620006cf3060016200070d60201b60201c565b620006e461dead60016200070d60201b60201c565b620006f6338262000a2260201b60201c565b50505050505050505062001155565b600033905090565b6200071d6200070560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a69062000f82565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008e56200070560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096e9062000f82565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a16919062000fc1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8c906200102e565b60405180910390fd5b62000aa96000838362000bd160201b60201c565b62000ac58160025462000bd660201b620026131790919060201c565b60028190555062000b23816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000bd660201b620026131790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bc5919062001061565b60405180910390a35050565b505050565b600080828462000be7919062000ec4565b90508381101562000c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c2690620010ce565b60405180910390fd5b8091505092915050565b82805462000c47906200111f565b90600052602060002090601f01602090048101928262000c6b576000855562000cb7565b82601f1062000c8657805160ff191683800117855562000cb7565b8280016001018555821562000cb7579182015b8281111562000cb657825182559160200191906001019062000c99565b5b50905062000cc6919062000cca565b5090565b5b8082111562000ce557600081600090555060010162000ccb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d1b8262000cee565b9050919050565b62000d2d8162000d0e565b811462000d3957600080fd5b50565b60008151905062000d4d8162000d22565b92915050565b60006020828403121562000d6c5762000d6b62000ce9565b5b600062000d7c8482850162000d3c565b91505092915050565b62000d908162000d0e565b82525050565b600060408201905062000dad600083018562000d85565b62000dbc602083018462000d85565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e098262000dc3565b915062000e168362000dc3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e525762000e5162000dcd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e998262000dc3565b915062000ea68362000dc3565b92508262000eb95762000eb862000e5d565b5b828204905092915050565b600062000ed18262000dc3565b915062000ede8362000dc3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f165762000f1562000dcd565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f6a60208362000f21565b915062000f778262000f32565b602082019050919050565b6000602082019050818103600083015262000f9d8162000f5b565b9050919050565b60008115159050919050565b62000fbb8162000fa4565b82525050565b600060208201905062000fd8600083018462000fb0565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001016601f8362000f21565b9150620010238262000fde565b602082019050919050565b60006020820190508181036000830152620010498162001007565b9050919050565b6200105b8162000dc3565b82525050565b600060208201905062001078600083018462001050565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620010b6601b8362000f21565b9150620010c3826200107e565b602082019050919050565b60006020820190508181036000830152620010e981620010a7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200113857607f821691505b602082108114156200114f576200114e620010f0565b5b50919050565b60805160a051615517620011b36000396000818161125301528181611aa90152612bfc015260008181610df701528181612ba401528181613d7701528181613e6701528181613e8e01528181613f2a0152613f5101526155176000f3fe6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610c7b578063f2fde38b14610ca6578063f637434214610ccf578063f8b45b0514610cfa5761035b565b8063dd62ed3e14610be8578063e2f4560514610c25578063e884f26014610c505761035b565b8063c876d0b9116100d1578063c876d0b914610b2a578063c8c8ebe414610b55578063d257b34f14610b80578063d85ba06314610bbd5761035b565b8063c024666814610aaf578063c17b5b8c14610ad8578063c18bc19514610b015761035b565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb146109e1578063aacebbe314610a1e578063b62496f514610a47578063bbc0c74214610a845761035b565b80639fccce321461094e578063a0d82dc514610979578063a457c2d7146109a45761035b565b8063924de9b7116101a0578063924de9b7146108a657806395d89b41146108cf5780639a7a23d6146108fa5780639c3b4fdc146109235761035b565b80638da5cb5b146108255780638ea5220f14610850578063921369131461087b5761035b565b806339509351116102a0578063715018a61161023e57806375f0a8741161021857806375f0a8741461078f5780637bce5a04146107ba5780638095d564146107e55780638a8c523c1461080e5761035b565b8063715018a614610724578063751039fc1461073b5780637571336a146107665761035b565b80634fbee1931161027a5780634fbee193146106545780636a486a8e146106915780636ddd1713146106bc57806370a08231146106e75761035b565b806339509351146105c157806349bd5a5e146105fe5780634a62bb65146106295761035b565b80631816467f1161030d578063203e727e116102e7578063203e727e1461050557806323b872dd1461052e57806327c8f8351461056b578063313ce567146105965761035b565b80631816467f146104865780631a8145bb146104af5780631f3fed8f146104da5761035b565b806306fdde0314610360578063095ea7b31461038b57806310d5de53146103c85780631694505e14610405578063180b0d7e1461043057806318160ddd1461045b5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d25565b60405161038291906140a8565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190614163565b610db7565b6040516103bf91906141be565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906141d9565b610dd5565b6040516103fc91906141be565b60405180910390f35b34801561041157600080fd5b5061041a610df5565b6040516104279190614265565b60405180910390f35b34801561043c57600080fd5b50610445610e19565b604051610452919061428f565b60405180910390f35b34801561046757600080fd5b50610470610e1f565b60405161047d919061428f565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906141d9565b610e29565b005b3480156104bb57600080fd5b506104c4610f80565b6040516104d1919061428f565b60405180910390f35b3480156104e657600080fd5b506104ef610f86565b6040516104fc919061428f565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906142aa565b610f8c565b005b34801561053a57600080fd5b50610555600480360381019061055091906142d7565b6110b6565b60405161056291906141be565b60405180910390f35b34801561057757600080fd5b5061058061118f565b60405161058d9190614339565b60405180910390f35b3480156105a257600080fd5b506105ab611195565b6040516105b89190614370565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190614163565b61119e565b6040516105f591906141be565b60405180910390f35b34801561060a57600080fd5b50610613611251565b6040516106209190614339565b60405180910390f35b34801561063557600080fd5b5061063e611275565b60405161064b91906141be565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906141d9565b611288565b60405161068891906141be565b60405180910390f35b34801561069d57600080fd5b506106a66112de565b6040516106b3919061428f565b60405180910390f35b3480156106c857600080fd5b506106d16112e4565b6040516106de91906141be565b60405180910390f35b3480156106f357600080fd5b5061070e600480360381019061070991906141d9565b6112f7565b60405161071b919061428f565b60405180910390f35b34801561073057600080fd5b5061073961133f565b005b34801561074757600080fd5b50610750611497565b60405161075d91906141be565b60405180910390f35b34801561077257600080fd5b5061078d600480360381019061078891906143b7565b611552565b005b34801561079b57600080fd5b506107a4611644565b6040516107b19190614339565b60405180910390f35b3480156107c657600080fd5b506107cf61166a565b6040516107dc919061428f565b60405180910390f35b3480156107f157600080fd5b5061080c600480360381019061080791906143f7565b611670565b005b34801561081a57600080fd5b5061082361179e565b005b34801561083157600080fd5b5061083a611874565b6040516108479190614339565b60405180910390f35b34801561085c57600080fd5b5061086561189e565b6040516108729190614339565b60405180910390f35b34801561088757600080fd5b506108906118c4565b60405161089d919061428f565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c8919061444a565b6118ca565b005b3480156108db57600080fd5b506108e461197e565b6040516108f191906140a8565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c91906143b7565b611a10565b005b34801561092f57600080fd5b50610938611b44565b604051610945919061428f565b60405180910390f35b34801561095a57600080fd5b50610963611b4a565b604051610970919061428f565b60405180910390f35b34801561098557600080fd5b5061098e611b50565b60405161099b919061428f565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614163565b611b56565b6040516109d891906141be565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190614163565b611c23565b604051610a1591906141be565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906141d9565b611c41565b005b348015610a5357600080fd5b50610a6e6004803603810190610a6991906141d9565b611d98565b604051610a7b91906141be565b60405180910390f35b348015610a9057600080fd5b50610a99611db8565b604051610aa691906141be565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad191906143b7565b611dcb565b005b348015610ae457600080fd5b50610aff6004803603810190610afa91906143f7565b611f0b565b005b348015610b0d57600080fd5b50610b286004803603810190610b2391906142aa565b612039565b005b348015610b3657600080fd5b50610b3f612163565b604051610b4c91906141be565b60405180910390f35b348015610b6157600080fd5b50610b6a612176565b604051610b77919061428f565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba291906142aa565b61217c565b604051610bb491906141be565b60405180910390f35b348015610bc957600080fd5b50610bd26122ec565b604051610bdf919061428f565b60405180910390f35b348015610bf457600080fd5b50610c0f6004803603810190610c0a9190614477565b6122f2565b604051610c1c919061428f565b60405180910390f35b348015610c3157600080fd5b50610c3a612379565b604051610c47919061428f565b60405180910390f35b348015610c5c57600080fd5b50610c6561237f565b604051610c7291906141be565b60405180910390f35b348015610c8757600080fd5b50610c9061243a565b604051610c9d919061428f565b60405180910390f35b348015610cb257600080fd5b50610ccd6004803603810190610cc891906141d9565b612440565b005b348015610cdb57600080fd5b50610ce4612607565b604051610cf1919061428f565b60405180910390f35b348015610d0657600080fd5b50610d0f61260d565b604051610d1c919061428f565b60405180910390f35b606060038054610d34906144e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d60906144e6565b8015610dad5780601f10610d8257610100808354040283529160200191610dad565b820191906000526020600020905b815481529060010190602001808311610d9057829003601f168201915b5050505050905090565b6000610dcb610dc4612671565b8484612679565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60175481565b6000600254905090565b610e31612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb790614564565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610f94612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614564565b60405180910390fd5b670de0b6b3a76400006103e86005611039610e1f565b61104391906145b3565b61104d919061463c565b611057919061463c565b811015611099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611090906146df565b60405180910390fd5b670de0b6b3a7640000816110ad91906145b3565b60088190555050565b60006110c3848484612844565b611184846110cf612671565b61117f8560405180606001604052806028815260200161549560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611135612671565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09092919063ffffffff16565b612679565b600190509392505050565b61dead81565b60006012905090565b60006112476111ab612671565b8461124285600160006111bc612671565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261390919063ffffffff16565b612679565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611347612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114a1612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614564565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61155a612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090614564565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611678612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90614564565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461172f91906146ff565b61173991906146ff565b600f81905550600a611758601754600f5461354490919063ffffffff16565b1115611799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611790906147a1565b60405180910390fd5b505050565b6117a6612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90614564565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118d2612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614564565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461198d906144e6565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906144e6565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050905090565b611a18612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614564565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90614833565b60405180910390fd5b611b40828261358e565b5050565b60125481565b601a5481565b60165481565b6000611c19611b63612671565b84611c14856040518060600160405280602581526020016154bd6025913960016000611b8d612671565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09092919063ffffffff16565b612679565b6001905092915050565b6000611c37611c30612671565b8484612844565b6001905092915050565b611c49612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf90614564565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611dd3612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990614564565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eff91906141be565b60405180910390a25050565b611f13612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614564565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611fca91906146ff565b611fd491906146ff565b6013819055506014611ff360175460135461354490919063ffffffff16565b1115612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b9061489f565b60405180910390fd5b505050565b612041612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614564565b60405180910390fd5b670de0b6b3a76400006103e8600f6120e6610e1f565b6120f091906145b3565b6120fa919061463c565b612104919061463c565b811015612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90614931565b60405180910390fd5b670de0b6b3a76400008161215a91906145b3565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612186612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90614564565b60405180910390fd5b620186a06001612223610e1f565b61222d91906145b3565b612237919061463c565b821015612279576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612270906149c3565b60405180910390fd5b6103e86005612286610e1f565b61229091906145b3565b61229a919061463c565b8211156122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d390614a55565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612389612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90614564565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b612448612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce90614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614ae7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600080828461262291906146ff565b905083811015612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e90614b53565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614be5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275090614c77565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612837919061428f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab90614d09565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90614d9b565b60405180910390fd5b600081141561293e576129398383600061362f565b6134db565b600b60009054906101000a900460ff16156130015761295b611874565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129c95750612999611874565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a025750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a555750600560149054906101000a900460ff16155b1561300057600b60019054906101000a900460ff16612b4f57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b0f5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4590614e07565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d1757612b6c611874565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612bf357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c4b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d165743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614ebf565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dba5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6157600854811115612e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfb90614f51565b60405180910390fd5b600a54612e10836112f7565b82612e1b91906146ff565b1115612e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5390614fbd565b60405180910390fd5b612fff565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f045750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f5357600854811115612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f459061504f565b60405180910390fd5b612ffe565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ffd57600a54612fb0836112f7565b82612fbb91906146ff565b1115612ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff390614fbd565b60405180910390fd5b5b5b5b5b5b600061300c306112f7565b9050600060095482101590508080156130315750600b60029054906101000a900460ff165b801561304a5750600560149054906101000a900460ff16155b80156130a05750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130f65750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561314c5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613190576001600560146101000a81548160ff0219169083151502179055506131746138c4565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132465750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561325057600090505b600081156134cb57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b357506000601354115b15613381576132e16017546132d360135488613bab90919063ffffffff16565b61354490919063ffffffff16565b9050601354601554826132f491906145b3565b6132fe919061463c565b6019600082825461330f91906146ff565b925050819055506013546016548261332791906145b3565b613331919061463c565b601a600082825461334291906146ff565b925050819055506013546014548261335a91906145b3565b613364919061463c565b6018600082825461337591906146ff565b925050819055506134a7565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133dc57506000600f54115b156134a65761340a6017546133fc600f5488613bab90919063ffffffff16565b61354490919063ffffffff16565b9050600f546011548261341d91906145b3565b613427919061463c565b6019600082825461343891906146ff565b92505081905550600f546012548261345091906145b3565b61345a919061463c565b601a600082825461346b91906146ff565b92505081905550600f546010548261348391906145b3565b61348d919061463c565b6018600082825461349e91906146ff565b925050819055505b5b60008111156134bc576134bb87308361362f565b5b80856134c8919061506f565b94505b6134d687878761362f565b505050505b505050565b6000838311158290613528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351f91906140a8565b60405180910390fd5b5060008385613537919061506f565b9050809150509392505050565b600061358683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c26565b905092915050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561369f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369690614d09565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561370f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370690614d9b565b60405180910390fd5b61371a838383613c89565b6137858160405180606001604052806026815260200161546f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613818816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138b7919061428f565b60405180910390a3505050565b60006138cf306112f7565b90506000601a546018546019546138e691906146ff565b6138f091906146ff565b90506000808314806139025750600082145b1561390f57505050613ba9565b601460095461391e91906145b3565b83111561393757601460095461393491906145b3565b92505b60006002836019548661394a91906145b3565b613954919061463c565b61395e919061463c565b905060006139758286613c8e90919063ffffffff16565b9050600047905061398582613cd8565b600061399a8247613c8e90919063ffffffff16565b905060006139c5876139b760185485613bab90919063ffffffff16565b61354490919063ffffffff16565b905060006139f0886139e2601a5486613bab90919063ffffffff16565b61354490919063ffffffff16565b90506000818385613a01919061506f565b613a0b919061506f565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a6b906150d4565b60006040518083038185875af1925050503d8060008114613aa8576040519150601f19603f3d011682016040523d82523d6000602084013e613aad565b606091505b505080985050600087118015613ac35750600081115b15613b1057613ad28782613f24565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613b07939291906150e9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b56906150d4565b60006040518083038185875af1925050503d8060008114613b93576040519150601f19603f3d011682016040523d82523d6000602084013e613b98565b606091505b505080985050505050505050505050505b565b600080831415613bbe5760009050613c20565b60008284613bcc91906145b3565b9050828482613bdb919061463c565b14613c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1290615192565b60405180910390fd5b809150505b92915050565b60008083118290613c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6491906140a8565b60405180910390fd5b5060008385613c7c919061463c565b9050809150509392505050565b505050565b6000613cd083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134e0565b905092915050565b6000600267ffffffffffffffff811115613cf557613cf46151b2565b5b604051908082528060200260200182016040528015613d235781602001602082028036833780820191505090505b5090503081600081518110613d3b57613d3a6151e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ddb57600080fd5b505afa158015613def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e139190615225565b81600181518110613e2757613e266151e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e8c307f000000000000000000000000000000000000000000000000000000000000000084612679565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613eee95949392919061534b565b600060405180830381600087803b158015613f0857600080fd5b505af1158015613f1c573d6000803e3d6000fd5b505050505050565b613f4f307f000000000000000000000000000000000000000000000000000000000000000084612679565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613fb6969594939291906153a5565b6060604051808303818588803b158015613fcf57600080fd5b505af1158015613fe3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614008919061541b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561404957808201518184015260208101905061402e565b83811115614058576000848401525b50505050565b6000601f19601f8301169050919050565b600061407a8261400f565b614084818561401a565b935061409481856020860161402b565b61409d8161405e565b840191505092915050565b600060208201905081810360008301526140c2818461406f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140fa826140cf565b9050919050565b61410a816140ef565b811461411557600080fd5b50565b60008135905061412781614101565b92915050565b6000819050919050565b6141408161412d565b811461414b57600080fd5b50565b60008135905061415d81614137565b92915050565b6000806040838503121561417a576141796140ca565b5b600061418885828601614118565b92505060206141998582860161414e565b9150509250929050565b60008115159050919050565b6141b8816141a3565b82525050565b60006020820190506141d360008301846141af565b92915050565b6000602082840312156141ef576141ee6140ca565b5b60006141fd84828501614118565b91505092915050565b6000819050919050565b600061422b614226614221846140cf565b614206565b6140cf565b9050919050565b600061423d82614210565b9050919050565b600061424f82614232565b9050919050565b61425f81614244565b82525050565b600060208201905061427a6000830184614256565b92915050565b6142898161412d565b82525050565b60006020820190506142a46000830184614280565b92915050565b6000602082840312156142c0576142bf6140ca565b5b60006142ce8482850161414e565b91505092915050565b6000806000606084860312156142f0576142ef6140ca565b5b60006142fe86828701614118565b935050602061430f86828701614118565b92505060406143208682870161414e565b9150509250925092565b614333816140ef565b82525050565b600060208201905061434e600083018461432a565b92915050565b600060ff82169050919050565b61436a81614354565b82525050565b60006020820190506143856000830184614361565b92915050565b614394816141a3565b811461439f57600080fd5b50565b6000813590506143b18161438b565b92915050565b600080604083850312156143ce576143cd6140ca565b5b60006143dc85828601614118565b92505060206143ed858286016143a2565b9150509250929050565b6000806000606084860312156144105761440f6140ca565b5b600061441e8682870161414e565b935050602061442f8682870161414e565b92505060406144408682870161414e565b9150509250925092565b6000602082840312156144605761445f6140ca565b5b600061446e848285016143a2565b91505092915050565b6000806040838503121561448e5761448d6140ca565b5b600061449c85828601614118565b92505060206144ad85828601614118565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144fe57607f821691505b60208210811415614512576145116144b7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061454e60208361401a565b915061455982614518565b602082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145be8261412d565b91506145c98361412d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561460257614601614584565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146478261412d565b91506146528361412d565b9250826146625761466161460d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006146c9602f8361401a565b91506146d48261466d565b604082019050919050565b600060208201905081810360008301526146f8816146bc565b9050919050565b600061470a8261412d565b91506147158361412d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561474a57614749614584565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061478b601d8361401a565b915061479682614755565b602082019050919050565b600060208201905081810360008301526147ba8161477e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061481d60398361401a565b9150614828826147c1565b604082019050919050565b6000602082019050818103600083015261484c81614810565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614889601d8361401a565b915061489482614853565b602082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b600061491b60248361401a565b9150614926826148bf565b604082019050919050565b6000602082019050818103600083015261494a8161490e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149ad60358361401a565b91506149b882614951565b604082019050919050565b600060208201905081810360008301526149dc816149a0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a3f60348361401a565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ad160268361401a565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b3d601b8361401a565b9150614b4882614b07565b602082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bcf60248361401a565b9150614bda82614b73565b604082019050919050565b60006020820190508181036000830152614bfe81614bc2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6160228361401a565b9150614c6c82614c05565b604082019050919050565b60006020820190508181036000830152614c9081614c54565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cf360258361401a565b9150614cfe82614c97565b604082019050919050565b60006020820190508181036000830152614d2281614ce6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8560238361401a565b9150614d9082614d29565b604082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614df160168361401a565b9150614dfc82614dbb565b602082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060208201527f616c6c6f7765642e000000000000000000000000000000000000000000000000604082015250565b6000614ea960488361401a565b9150614eb482614e27565b606082019050919050565b60006020820190508181036000830152614ed881614e9c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f3b60358361401a565b9150614f4682614edf565b604082019050919050565b60006020820190508181036000830152614f6a81614f2e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fa760138361401a565b9150614fb282614f71565b602082019050919050565b60006020820190508181036000830152614fd681614f9a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061503960368361401a565b915061504482614fdd565b604082019050919050565b600060208201905081810360008301526150688161502c565b9050919050565b600061507a8261412d565b91506150858361412d565b92508282101561509857615097614584565b5b828203905092915050565b600081905092915050565b50565b60006150be6000836150a3565b91506150c9826150ae565b600082019050919050565b60006150df826150b1565b9150819050919050565b60006060820190506150fe6000830186614280565b61510b6020830185614280565b6151186040830184614280565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061517c60218361401a565b915061518782615120565b604082019050919050565b600060208201905081810360008301526151ab8161516f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061521f81614101565b92915050565b60006020828403121561523b5761523a6140ca565b5b600061524984828501615210565b91505092915050565b6000819050919050565b600061527761527261526d84615252565b614206565b61412d565b9050919050565b6152878161525c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152c2816140ef565b82525050565b60006152d483836152b9565b60208301905092915050565b6000602082019050919050565b60006152f88261528d565b6153028185615298565b935061530d836152a9565b8060005b8381101561533e57815161532588826152c8565b9750615330836152e0565b925050600181019050615311565b5085935050505092915050565b600060a0820190506153606000830188614280565b61536d602083018761527e565b818103604083015261537f81866152ed565b905061538e606083018561432a565b61539b6080830184614280565b9695505050505050565b600060c0820190506153ba600083018961432a565b6153c76020830188614280565b6153d4604083018761527e565b6153e1606083018661527e565b6153ee608083018561432a565b6153fb60a0830184614280565b979650505050505050565b60008151905061541581614137565b92915050565b600080600060608486031215615434576154336140ca565b5b600061544286828701615406565b935050602061545386828701615406565b925050604061546486828701615406565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a498eba9f4a456ad93bf8f77fc2bbc261c27b5fde5465dfc0555ddd481333c264736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0246668116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610c7b578063f2fde38b14610ca6578063f637434214610ccf578063f8b45b0514610cfa5761035b565b8063dd62ed3e14610be8578063e2f4560514610c25578063e884f26014610c505761035b565b8063c876d0b9116100d1578063c876d0b914610b2a578063c8c8ebe414610b55578063d257b34f14610b80578063d85ba06314610bbd5761035b565b8063c024666814610aaf578063c17b5b8c14610ad8578063c18bc19514610b015761035b565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb146109e1578063aacebbe314610a1e578063b62496f514610a47578063bbc0c74214610a845761035b565b80639fccce321461094e578063a0d82dc514610979578063a457c2d7146109a45761035b565b8063924de9b7116101a0578063924de9b7146108a657806395d89b41146108cf5780639a7a23d6146108fa5780639c3b4fdc146109235761035b565b80638da5cb5b146108255780638ea5220f14610850578063921369131461087b5761035b565b806339509351116102a0578063715018a61161023e57806375f0a8741161021857806375f0a8741461078f5780637bce5a04146107ba5780638095d564146107e55780638a8c523c1461080e5761035b565b8063715018a614610724578063751039fc1461073b5780637571336a146107665761035b565b80634fbee1931161027a5780634fbee193146106545780636a486a8e146106915780636ddd1713146106bc57806370a08231146106e75761035b565b806339509351146105c157806349bd5a5e146105fe5780634a62bb65146106295761035b565b80631816467f1161030d578063203e727e116102e7578063203e727e1461050557806323b872dd1461052e57806327c8f8351461056b578063313ce567146105965761035b565b80631816467f146104865780631a8145bb146104af5780631f3fed8f146104da5761035b565b806306fdde0314610360578063095ea7b31461038b57806310d5de53146103c85780631694505e14610405578063180b0d7e1461043057806318160ddd1461045b5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d25565b60405161038291906140a8565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190614163565b610db7565b6040516103bf91906141be565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906141d9565b610dd5565b6040516103fc91906141be565b60405180910390f35b34801561041157600080fd5b5061041a610df5565b6040516104279190614265565b60405180910390f35b34801561043c57600080fd5b50610445610e19565b604051610452919061428f565b60405180910390f35b34801561046757600080fd5b50610470610e1f565b60405161047d919061428f565b60405180910390f35b34801561049257600080fd5b506104ad60048036038101906104a891906141d9565b610e29565b005b3480156104bb57600080fd5b506104c4610f80565b6040516104d1919061428f565b60405180910390f35b3480156104e657600080fd5b506104ef610f86565b6040516104fc919061428f565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906142aa565b610f8c565b005b34801561053a57600080fd5b50610555600480360381019061055091906142d7565b6110b6565b60405161056291906141be565b60405180910390f35b34801561057757600080fd5b5061058061118f565b60405161058d9190614339565b60405180910390f35b3480156105a257600080fd5b506105ab611195565b6040516105b89190614370565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190614163565b61119e565b6040516105f591906141be565b60405180910390f35b34801561060a57600080fd5b50610613611251565b6040516106209190614339565b60405180910390f35b34801561063557600080fd5b5061063e611275565b60405161064b91906141be565b60405180910390f35b34801561066057600080fd5b5061067b600480360381019061067691906141d9565b611288565b60405161068891906141be565b60405180910390f35b34801561069d57600080fd5b506106a66112de565b6040516106b3919061428f565b60405180910390f35b3480156106c857600080fd5b506106d16112e4565b6040516106de91906141be565b60405180910390f35b3480156106f357600080fd5b5061070e600480360381019061070991906141d9565b6112f7565b60405161071b919061428f565b60405180910390f35b34801561073057600080fd5b5061073961133f565b005b34801561074757600080fd5b50610750611497565b60405161075d91906141be565b60405180910390f35b34801561077257600080fd5b5061078d600480360381019061078891906143b7565b611552565b005b34801561079b57600080fd5b506107a4611644565b6040516107b19190614339565b60405180910390f35b3480156107c657600080fd5b506107cf61166a565b6040516107dc919061428f565b60405180910390f35b3480156107f157600080fd5b5061080c600480360381019061080791906143f7565b611670565b005b34801561081a57600080fd5b5061082361179e565b005b34801561083157600080fd5b5061083a611874565b6040516108479190614339565b60405180910390f35b34801561085c57600080fd5b5061086561189e565b6040516108729190614339565b60405180910390f35b34801561088757600080fd5b506108906118c4565b60405161089d919061428f565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c8919061444a565b6118ca565b005b3480156108db57600080fd5b506108e461197e565b6040516108f191906140a8565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c91906143b7565b611a10565b005b34801561092f57600080fd5b50610938611b44565b604051610945919061428f565b60405180910390f35b34801561095a57600080fd5b50610963611b4a565b604051610970919061428f565b60405180910390f35b34801561098557600080fd5b5061098e611b50565b60405161099b919061428f565b60405180910390f35b3480156109b057600080fd5b506109cb60048036038101906109c69190614163565b611b56565b6040516109d891906141be565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190614163565b611c23565b604051610a1591906141be565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a4091906141d9565b611c41565b005b348015610a5357600080fd5b50610a6e6004803603810190610a6991906141d9565b611d98565b604051610a7b91906141be565b60405180910390f35b348015610a9057600080fd5b50610a99611db8565b604051610aa691906141be565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad191906143b7565b611dcb565b005b348015610ae457600080fd5b50610aff6004803603810190610afa91906143f7565b611f0b565b005b348015610b0d57600080fd5b50610b286004803603810190610b2391906142aa565b612039565b005b348015610b3657600080fd5b50610b3f612163565b604051610b4c91906141be565b60405180910390f35b348015610b6157600080fd5b50610b6a612176565b604051610b77919061428f565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba291906142aa565b61217c565b604051610bb491906141be565b60405180910390f35b348015610bc957600080fd5b50610bd26122ec565b604051610bdf919061428f565b60405180910390f35b348015610bf457600080fd5b50610c0f6004803603810190610c0a9190614477565b6122f2565b604051610c1c919061428f565b60405180910390f35b348015610c3157600080fd5b50610c3a612379565b604051610c47919061428f565b60405180910390f35b348015610c5c57600080fd5b50610c6561237f565b604051610c7291906141be565b60405180910390f35b348015610c8757600080fd5b50610c9061243a565b604051610c9d919061428f565b60405180910390f35b348015610cb257600080fd5b50610ccd6004803603810190610cc891906141d9565b612440565b005b348015610cdb57600080fd5b50610ce4612607565b604051610cf1919061428f565b60405180910390f35b348015610d0657600080fd5b50610d0f61260d565b604051610d1c919061428f565b60405180910390f35b606060038054610d34906144e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d60906144e6565b8015610dad5780601f10610d8257610100808354040283529160200191610dad565b820191906000526020600020905b815481529060010190602001808311610d9057829003601f168201915b5050505050905090565b6000610dcb610dc4612671565b8484612679565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60175481565b6000600254905090565b610e31612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb790614564565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610f94612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614564565b60405180910390fd5b670de0b6b3a76400006103e86005611039610e1f565b61104391906145b3565b61104d919061463c565b611057919061463c565b811015611099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611090906146df565b60405180910390fd5b670de0b6b3a7640000816110ad91906145b3565b60088190555050565b60006110c3848484612844565b611184846110cf612671565b61117f8560405180606001604052806028815260200161549560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611135612671565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09092919063ffffffff16565b612679565b600190509392505050565b61dead81565b60006012905090565b60006112476111ab612671565b8461124285600160006111bc612671565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261390919063ffffffff16565b612679565b6001905092915050565b7f000000000000000000000000edd042cdd023238739095c8bec87634d99a45ea381565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611347612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114a1612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152790614564565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61155a612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090614564565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b611678612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90614564565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461172f91906146ff565b61173991906146ff565b600f81905550600a611758601754600f5461354490919063ffffffff16565b1115611799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611790906147a1565b60405180910390fd5b505050565b6117a6612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90614564565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118d2612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614564565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461198d906144e6565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906144e6565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050905090565b611a18612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90614564565b60405180910390fd5b7f000000000000000000000000edd042cdd023238739095c8bec87634d99a45ea373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90614833565b60405180910390fd5b611b40828261358e565b5050565b60125481565b601a5481565b60165481565b6000611c19611b63612671565b84611c14856040518060600160405280602581526020016154bd6025913960016000611b8d612671565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09092919063ffffffff16565b612679565b6001905092915050565b6000611c37611c30612671565b8484612844565b6001905092915050565b611c49612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf90614564565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611dd3612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990614564565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eff91906141be565b60405180910390a25050565b611f13612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614564565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611fca91906146ff565b611fd491906146ff565b6013819055506014611ff360175460135461354490919063ffffffff16565b1115612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b9061489f565b60405180910390fd5b505050565b612041612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614564565b60405180910390fd5b670de0b6b3a76400006103e8600f6120e6610e1f565b6120f091906145b3565b6120fa919061463c565b612104919061463c565b811015612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90614931565b60405180910390fd5b670de0b6b3a76400008161215a91906145b3565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000612186612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c90614564565b60405180910390fd5b620186a06001612223610e1f565b61222d91906145b3565b612237919061463c565b821015612279576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612270906149c3565b60405180910390fd5b6103e86005612286610e1f565b61229091906145b3565b61229a919061463c565b8211156122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d390614a55565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612389612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90614564565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b612448612671565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce90614564565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614ae7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600080828461262291906146ff565b905083811015612667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265e90614b53565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e090614be5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275090614c77565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612837919061428f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab90614d09565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90614d9b565b60405180910390fd5b600081141561293e576129398383600061362f565b6134db565b600b60009054906101000a900460ff16156130015761295b611874565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129c95750612999611874565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a025750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a555750600560149054906101000a900460ff16155b1561300057600b60019054906101000a900460ff16612b4f57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b0f5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4590614e07565b60405180910390fd5b5b600e60009054906101000a900460ff1615612d1757612b6c611874565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612bf357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c4b57507f000000000000000000000000edd042cdd023238739095c8bec87634d99a45ea373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d165743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614ebf565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dba5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e6157600854811115612e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfb90614f51565b60405180910390fd5b600a54612e10836112f7565b82612e1b91906146ff565b1115612e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5390614fbd565b60405180910390fd5b612fff565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f045750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f5357600854811115612f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f459061504f565b60405180910390fd5b612ffe565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ffd57600a54612fb0836112f7565b82612fbb91906146ff565b1115612ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff390614fbd565b60405180910390fd5b5b5b5b5b5b600061300c306112f7565b9050600060095482101590508080156130315750600b60029054906101000a900460ff165b801561304a5750600560149054906101000a900460ff16155b80156130a05750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130f65750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561314c5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613190576001600560146101000a81548160ff0219169083151502179055506131746138c4565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132465750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561325057600090505b600081156134cb57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b357506000601354115b15613381576132e16017546132d360135488613bab90919063ffffffff16565b61354490919063ffffffff16565b9050601354601554826132f491906145b3565b6132fe919061463c565b6019600082825461330f91906146ff565b925050819055506013546016548261332791906145b3565b613331919061463c565b601a600082825461334291906146ff565b925050819055506013546014548261335a91906145b3565b613364919061463c565b6018600082825461337591906146ff565b925050819055506134a7565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133dc57506000600f54115b156134a65761340a6017546133fc600f5488613bab90919063ffffffff16565b61354490919063ffffffff16565b9050600f546011548261341d91906145b3565b613427919061463c565b6019600082825461343891906146ff565b92505081905550600f546012548261345091906145b3565b61345a919061463c565b601a600082825461346b91906146ff565b92505081905550600f546010548261348391906145b3565b61348d919061463c565b6018600082825461349e91906146ff565b925050819055505b5b60008111156134bc576134bb87308361362f565b5b80856134c8919061506f565b94505b6134d687878761362f565b505050505b505050565b6000838311158290613528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351f91906140a8565b60405180910390fd5b5060008385613537919061506f565b9050809150509392505050565b600061358683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c26565b905092915050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561369f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369690614d09565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561370f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370690614d9b565b60405180910390fd5b61371a838383613c89565b6137858160405180606001604052806026815260200161546f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613818816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461261390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138b7919061428f565b60405180910390a3505050565b60006138cf306112f7565b90506000601a546018546019546138e691906146ff565b6138f091906146ff565b90506000808314806139025750600082145b1561390f57505050613ba9565b601460095461391e91906145b3565b83111561393757601460095461393491906145b3565b92505b60006002836019548661394a91906145b3565b613954919061463c565b61395e919061463c565b905060006139758286613c8e90919063ffffffff16565b9050600047905061398582613cd8565b600061399a8247613c8e90919063ffffffff16565b905060006139c5876139b760185485613bab90919063ffffffff16565b61354490919063ffffffff16565b905060006139f0886139e2601a5486613bab90919063ffffffff16565b61354490919063ffffffff16565b90506000818385613a01919061506f565b613a0b919061506f565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a6b906150d4565b60006040518083038185875af1925050503d8060008114613aa8576040519150601f19603f3d011682016040523d82523d6000602084013e613aad565b606091505b505080985050600087118015613ac35750600081115b15613b1057613ad28782613f24565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613b07939291906150e9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b56906150d4565b60006040518083038185875af1925050503d8060008114613b93576040519150601f19603f3d011682016040523d82523d6000602084013e613b98565b606091505b505080985050505050505050505050505b565b600080831415613bbe5760009050613c20565b60008284613bcc91906145b3565b9050828482613bdb919061463c565b14613c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1290615192565b60405180910390fd5b809150505b92915050565b60008083118290613c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6491906140a8565b60405180910390fd5b5060008385613c7c919061463c565b9050809150509392505050565b505050565b6000613cd083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134e0565b905092915050565b6000600267ffffffffffffffff811115613cf557613cf46151b2565b5b604051908082528060200260200182016040528015613d235781602001602082028036833780820191505090505b5090503081600081518110613d3b57613d3a6151e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ddb57600080fd5b505afa158015613def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e139190615225565b81600181518110613e2757613e266151e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e8c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612679565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613eee95949392919061534b565b600060405180830381600087803b158015613f0857600080fd5b505af1158015613f1c573d6000803e3d6000fd5b505050505050565b613f4f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612679565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613fb6969594939291906153a5565b6060604051808303818588803b158015613fcf57600080fd5b505af1158015613fe3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614008919061541b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561404957808201518184015260208101905061402e565b83811115614058576000848401525b50505050565b6000601f19601f8301169050919050565b600061407a8261400f565b614084818561401a565b935061409481856020860161402b565b61409d8161405e565b840191505092915050565b600060208201905081810360008301526140c2818461406f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140fa826140cf565b9050919050565b61410a816140ef565b811461411557600080fd5b50565b60008135905061412781614101565b92915050565b6000819050919050565b6141408161412d565b811461414b57600080fd5b50565b60008135905061415d81614137565b92915050565b6000806040838503121561417a576141796140ca565b5b600061418885828601614118565b92505060206141998582860161414e565b9150509250929050565b60008115159050919050565b6141b8816141a3565b82525050565b60006020820190506141d360008301846141af565b92915050565b6000602082840312156141ef576141ee6140ca565b5b60006141fd84828501614118565b91505092915050565b6000819050919050565b600061422b614226614221846140cf565b614206565b6140cf565b9050919050565b600061423d82614210565b9050919050565b600061424f82614232565b9050919050565b61425f81614244565b82525050565b600060208201905061427a6000830184614256565b92915050565b6142898161412d565b82525050565b60006020820190506142a46000830184614280565b92915050565b6000602082840312156142c0576142bf6140ca565b5b60006142ce8482850161414e565b91505092915050565b6000806000606084860312156142f0576142ef6140ca565b5b60006142fe86828701614118565b935050602061430f86828701614118565b92505060406143208682870161414e565b9150509250925092565b614333816140ef565b82525050565b600060208201905061434e600083018461432a565b92915050565b600060ff82169050919050565b61436a81614354565b82525050565b60006020820190506143856000830184614361565b92915050565b614394816141a3565b811461439f57600080fd5b50565b6000813590506143b18161438b565b92915050565b600080604083850312156143ce576143cd6140ca565b5b60006143dc85828601614118565b92505060206143ed858286016143a2565b9150509250929050565b6000806000606084860312156144105761440f6140ca565b5b600061441e8682870161414e565b935050602061442f8682870161414e565b92505060406144408682870161414e565b9150509250925092565b6000602082840312156144605761445f6140ca565b5b600061446e848285016143a2565b91505092915050565b6000806040838503121561448e5761448d6140ca565b5b600061449c85828601614118565b92505060206144ad85828601614118565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144fe57607f821691505b60208210811415614512576145116144b7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061454e60208361401a565b915061455982614518565b602082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145be8261412d565b91506145c98361412d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561460257614601614584565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146478261412d565b91506146528361412d565b9250826146625761466161460d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006146c9602f8361401a565b91506146d48261466d565b604082019050919050565b600060208201905081810360008301526146f8816146bc565b9050919050565b600061470a8261412d565b91506147158361412d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561474a57614749614584565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061478b601d8361401a565b915061479682614755565b602082019050919050565b600060208201905081810360008301526147ba8161477e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061481d60398361401a565b9150614828826147c1565b604082019050919050565b6000602082019050818103600083015261484c81614810565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614889601d8361401a565b915061489482614853565b602082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b600061491b60248361401a565b9150614926826148bf565b604082019050919050565b6000602082019050818103600083015261494a8161490e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006149ad60358361401a565b91506149b882614951565b604082019050919050565b600060208201905081810360008301526149dc816149a0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a3f60348361401a565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ad160268361401a565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b3d601b8361401a565b9150614b4882614b07565b602082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bcf60248361401a565b9150614bda82614b73565b604082019050919050565b60006020820190508181036000830152614bfe81614bc2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6160228361401a565b9150614c6c82614c05565b604082019050919050565b60006020820190508181036000830152614c9081614c54565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cf360258361401a565b9150614cfe82614c97565b604082019050919050565b60006020820190508181036000830152614d2281614ce6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8560238361401a565b9150614d9082614d29565b604082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614df160168361401a565b9150614dfc82614dbb565b602082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060208201527f616c6c6f7765642e000000000000000000000000000000000000000000000000604082015250565b6000614ea960488361401a565b9150614eb482614e27565b606082019050919050565b60006020820190508181036000830152614ed881614e9c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614f3b60358361401a565b9150614f4682614edf565b604082019050919050565b60006020820190508181036000830152614f6a81614f2e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614fa760138361401a565b9150614fb282614f71565b602082019050919050565b60006020820190508181036000830152614fd681614f9a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061503960368361401a565b915061504482614fdd565b604082019050919050565b600060208201905081810360008301526150688161502c565b9050919050565b600061507a8261412d565b91506150858361412d565b92508282101561509857615097614584565b5b828203905092915050565b600081905092915050565b50565b60006150be6000836150a3565b91506150c9826150ae565b600082019050919050565b60006150df826150b1565b9150819050919050565b60006060820190506150fe6000830186614280565b61510b6020830185614280565b6151186040830184614280565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061517c60218361401a565b915061518782615120565b604082019050919050565b600060208201905081810360008301526151ab8161516f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061521f81614101565b92915050565b60006020828403121561523b5761523a6140ca565b5b600061524984828501615210565b91505092915050565b6000819050919050565b600061527761527261526d84615252565b614206565b61412d565b9050919050565b6152878161525c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152c2816140ef565b82525050565b60006152d483836152b9565b60208301905092915050565b6000602082019050919050565b60006152f88261528d565b6153028185615298565b935061530d836152a9565b8060005b8381101561533e57815161532588826152c8565b9750615330836152e0565b925050600181019050615311565b5085935050505092915050565b600060a0820190506153606000830188614280565b61536d602083018761527e565b818103604083015261537f81866152ed565b905061538e606083018561432a565b61539b6080830184614280565b9695505050505050565b600060c0820190506153ba600083018961432a565b6153c76020830188614280565b6153d4604083018761527e565b6153e1606083018661527e565b6153ee608083018561432a565b6153fb60a0830184614280565b979650505050505050565b60008151905061541581614137565b92915050565b600080600060608486031215615434576154336140ca565b5b600061544286828701615406565b935050602061545386828701615406565b925050604061546486828701615406565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a498eba9f4a456ad93bf8f77fc2bbc261c27b5fde5465dfc0555ddd481333c264736f6c63430008090033
Deployed Bytecode Sourcemap
25297:15626:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7610:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9784:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26885:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25371:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26520:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8733:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33875:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26599:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26559;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31391:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10436:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25474:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8574:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11201:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25429:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25791:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34040:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26375:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25871:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8905:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18466:148;;;;;;;;;;;;;:::i;:::-;;30613:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31859:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25604:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26267;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32210:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30412:148;;;;;;;;;;;;;:::i;:::-;;18250:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25641:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26410:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32100:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7830:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33206:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26341:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26639:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26486:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11923:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9246:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33658:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27108:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25831:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33015:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32608:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31634:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26184:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25675:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31001:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26233:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9485:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25717:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30795:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26304:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18622:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26448:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25757:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7610:100;7664:13;7697:5;7690:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7610:100;:::o;9784:169::-;9867:4;9884:39;9893:12;:10;:12::i;:::-;9907:7;9916:6;9884:8;:39::i;:::-;9941:4;9934:11;;9784:169;;;;:::o;26885:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;25371:51::-;;;:::o;26520:29::-;;;;:::o;8733:108::-;8794:7;8821:12;;8814:19;;8733:108;:::o;33875:157::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33982:9:::1;;;;;;;;;;;33954:38;;33971:9;33954:38;;;;;;;;;;;;34015:9;34003;;:21;;;;;;;;;;;;;;;;;;33875:157:::0;:::o;26599:33::-;;;;:::o;26559:::-;;;;:::o;31391:234::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31510:4:::1;31504;31500:1;31484:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;31483:31;;;;:::i;:::-;31473:6;:41;;31465:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31610:6;31600;:17;;;;:::i;:::-;31577:20;:40;;;;31391:234:::0;:::o;10436:355::-;10576:4;10593:36;10603:6;10611:9;10622:6;10593:9;:36::i;:::-;10640:121;10649:6;10657:12;:10;:12::i;:::-;10671:89;10709:6;10671:89;;;;;;;;;;;;;;;;;:11;:19;10683:6;10671:19;;;;;;;;;;;;;;;:33;10691:12;:10;:12::i;:::-;10671:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10640:8;:121::i;:::-;10779:4;10772:11;;10436:355;;;;;:::o;25474:89::-;25520:42;25474:89;:::o;8574:93::-;8632:5;8657:2;8650:9;;8574:93;:::o;11201:218::-;11289:4;11306:83;11315:12;:10;:12::i;:::-;11329:7;11338:50;11377:10;11338:11;:25;11350:12;:10;:12::i;:::-;11338:25;;;;;;;;;;;;;;;:34;11364:7;11338:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11306:8;:83::i;:::-;11407:4;11400:11;;11201:218;;;;:::o;25429:38::-;;;:::o;25791:33::-;;;;;;;;;;;;;:::o;34040:125::-;34105:4;34129:19;:28;34149:7;34129:28;;;;;;;;;;;;;;;;;;;;;;;;;34122:35;;34040:125;;;:::o;26375:28::-;;;;:::o;25871:31::-;;;;;;;;;;;;;:::o;8905:127::-;8979:7;9006:9;:18;9016:7;9006:18;;;;;;;;;;;;;;;;8999:25;;8905:127;;;:::o;18466:148::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18573:1:::1;18536:40;;18557:6;;;;;;;;;;;18536:40;;;;;;;;;;;;18604:1;18587:6;;:19;;;;;;;;;;;;;;;;;;18466:148::o:0;30613:120::-;30665:4;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30698:5:::1;30681:14;;:22;;;;;;;;;;;;;;;;;;30721:4;30714:11;;30613:120:::0;:::o;31859:144::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31991:4:::1;31949:31;:39;31981:6;31949:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31859:144:::0;;:::o;25604:30::-;;;;;;;;;;;;;:::o;26267:::-;;;;:::o;32210:389::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32344:13:::1;32326:15;:31;;;;32386:13;32368:15;:31;;;;32422:7;32410:9;:19;;;;32491:9;;32473:15;;32455;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;32440:12;:60;;;;32555:2;32519:32;32536:14;;32519:12;;:16;;:32;;;;:::i;:::-;:38;;32511:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32210:389:::0;;;:::o;30412:148::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30483:4:::1;30467:13;;:20;;;;;;;;;;;;;;;;;;30512:4;30498:11;;:18;;;;;;;;;;;;;;;;;;30540:12;30527:10;:25;;;;30412:148::o:0;18250:79::-;18288:7;18315:6;;;;;;;;;;;18308:13;;18250:79;:::o;25641:24::-;;;;;;;;;;;;;:::o;26410:31::-;;;;:::o;32100:101::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32186:7:::1;32172:11;;:21;;;;;;;;;;;;;;;;;;32100:101:::0;:::o;7830:104::-;7886:13;7919:7;7912:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7830:104;:::o;33206:245::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33313:13:::1;33305:21;;:4;:21;;;;33297:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;33402:41;33431:4;33437:5;33402:28;:41::i;:::-;33206:245:::0;;:::o;26341:24::-;;;;:::o;26639:27::-;;;;:::o;26486:25::-;;;;:::o;11923:269::-;12016:4;12033:129;12042:12;:10;:12::i;:::-;12056:7;12065:96;12104:15;12065:96;;;;;;;;;;;;;;;;;:11;:25;12077:12;:10;:12::i;:::-;12065:25;;;;;;;;;;;;;;;:34;12091:7;12065:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12033:8;:129::i;:::-;12180:4;12173:11;;11923:269;;;;:::o;9246:175::-;9332:4;9349:42;9359:12;:10;:12::i;:::-;9373:9;9384:6;9349:9;:42::i;:::-;9409:4;9402:11;;9246:175;;;;:::o;33658:208::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33795:15:::1;;;;;;;;;;;33752:59;;33775:18;33752:59;;;;;;;;;;;;33840:18;33822:15;;:36;;;;;;;;;;;;;;;;;;33658:208:::0;:::o;27108:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25831:33::-;;;;;;;;;;;;;:::o;33015:182::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33131:8:::1;33100:19;:28;33120:7;33100:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33171:7;33155:34;;;33180:8;33155:34;;;;;;:::i;:::-;;;;;;;;33015:182:::0;;:::o;32608:398::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32744:13:::1;32725:16;:32;;;;32787:13;32768:16;:32;;;;32824:7;32811:10;:20;;;;32896:10;;32877:16;;32858;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;32842:13;:64;;;;32962:2;32925:33;32943:14;;32925:13;;:17;;:33;;;;:::i;:::-;:39;;32917:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32608:398:::0;;;:::o;31634:216::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31757:4:::1;31751;31746:2;31730:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;31729:32;;;;:::i;:::-;31719:6;:42;;31711:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;31835:6;31825;:17;;;;:::i;:::-;31813:9;:29;;;;31634:216:::0;:::o;26184:39::-;;;;;;;;;;;;;:::o;25675:35::-;;;;:::o;31001:381::-;31082:4;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31138:6:::1;31134:1;31118:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;31105:9;:39;;31097:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;31253:4;31249:1;31233:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;31220:9;:37;;31212:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;31345:9;31324:18;:30;;;;31371:4;31364:11;;31001:381:::0;;;:::o;26233:27::-;;;;:::o;9485:151::-;9574:7;9601:11;:18;9613:5;9601:18;;;;;;;;;;;;;;;:27;9620:7;9601:27;;;;;;;;;;;;;;;;9594:34;;9485:151;;;;:::o;25717:33::-;;;;:::o;30795:134::-;30855:4;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30894:5:::1;30871:20;;:28;;;;;;;;;;;;;;;;;;30917:4;30910:11;;30795:134:::0;:::o;26304:30::-;;;;:::o;18622:244::-;18388:12;:10;:12::i;:::-;18378:22;;:6;;;;;;;;;;;:22;;;18370:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18731:1:::1;18711:22;;:8;:22;;;;18703:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18821:8;18792:38;;18813:6;;;;;;;;;;;18792:38;;;;;;;;;;;;18850:8;18841:6;;:17;;;;;;;;;;;;;;;;;;18622:244:::0;:::o;26448:31::-;;;;:::o;25757:24::-;;;;:::o;16261:182::-;16319:7;16339:9;16355:1;16351;:5;;;;:::i;:::-;16339:17;;16380:1;16375;:6;;16367:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16434:1;16427:8;;;16261:182;;;;:::o;212:98::-;265:7;292:10;285:17;;212:98;:::o;15119:381::-;15272:1;15255:19;;:5;:19;;;;15247:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15353:1;15334:21;;:7;:21;;;;15326:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15438:6;15408:11;:18;15420:5;15408:18;;;;;;;;;;;;;;;:27;15427:7;15408:27;;;;;;;;;;;;;;;:36;;;;15476:7;15460:32;;15469:5;15460:32;;;15485:6;15460:32;;;;;;:::i;:::-;;;;;;;;15119:381;;;:::o;34174:4042::-;34322:1;34306:18;;:4;:18;;;;34298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34399:1;34385:16;;:2;:16;;;;34377:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34465:1;34455:6;:11;34452:92;;;34483:28;34499:4;34505:2;34509:1;34483:15;:28::i;:::-;34526:7;;34452:92;34560:14;;;;;;;;;;;34557:1811;;;34620:7;:5;:7::i;:::-;34612:15;;:4;:15;;;;:49;;;;;34654:7;:5;:7::i;:::-;34648:13;;:2;:13;;;;34612:49;:86;;;;;34696:1;34682:16;;:2;:16;;;;34612:86;:128;;;;;34733:6;34719:21;;:2;:21;;;;34612:128;:158;;;;;34762:8;;;;;;;;;;;34761:9;34612:158;34590:1767;;;34808:13;;;;;;;;;;;34804:148;;34853:19;:25;34873:4;34853:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34882:19;:23;34902:2;34882:23;;;;;;;;;;;;;;;;;;;;;;;;;34853:52;34845:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34804:148;35111:20;;;;;;;;;;;35107:423;;;35166:7;:5;:7::i;:::-;35160:13;;:2;:13;;;;:47;;;;;35191:15;35177:30;;:2;:30;;;;35160:47;:79;;;;;35225:13;35211:28;;:2;:28;;;;35160:79;35156:355;;;35317:12;35275:28;:39;35304:9;35275:39;;;;;;;;;;;;;;;;:54;35267:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;35475:12;35433:28;:39;35462:9;35433:39;;;;;;;;;;;;;;;:54;;;;35156:355;35107:423;35583:25;:31;35609:4;35583:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35619:31;:35;35651:2;35619:35;;;;;;;;;;;;;;;;;;;;;;;;;35618:36;35583:71;35579:763;;;35701:20;;35691:6;:30;;35683:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;35840:9;;35823:13;35833:2;35823:9;:13::i;:::-;35814:6;:22;;;;:::i;:::-;:35;;35806:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35579:763;;;35952:25;:29;35978:2;35952:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35986:31;:37;36018:4;35986:37;;;;;;;;;;;;;;;;;;;;;;;;;35985:38;35952:71;35948:394;;;36070:20;;36060:6;:30;;36052:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;35948:394;;;36196:31;:35;36228:2;36196:35;;;;;;;;;;;;;;;;;;;;;;;;;36192:150;;36289:9;;36272:13;36282:2;36272:9;:13::i;:::-;36263:6;:22;;;;:::i;:::-;:35;;36255:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36192:150;35948:394;35579:763;34590:1767;34557:1811;36375:28;36406:24;36424:4;36406:9;:24::i;:::-;36375:55;;36444:12;36483:18;;36459:20;:42;;36444:57;;36533:7;:35;;;;;36557:11;;;;;;;;;;;36533:35;:61;;;;;36586:8;;;;;;;;;;;36585:9;36533:61;:110;;;;;36612:25;:31;36638:4;36612:31;;;;;;;;;;;;;;;;;;;;;;;;;36611:32;36533:110;:153;;;;;36661:19;:25;36681:4;36661:25;;;;;;;;;;;;;;;;;;;;;;;;;36660:26;36533:153;:194;;;;;36704:19;:23;36724:2;36704:23;;;;;;;;;;;;;;;;;;;;;;;;;36703:24;36533:194;36515:328;;;36765:4;36754:8;;:15;;;;;;;;;;;;;;;;;;36787:10;:8;:10::i;:::-;36826:5;36815:8;;:16;;;;;;;;;;;;;;;;;;36515:328;36856:12;36872:8;;;;;;;;;;;36871:9;36856:24;;36982:19;:25;37002:4;36982:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37011:19;:23;37031:2;37011:23;;;;;;;;;;;;;;;;;;;;;;;;;36982:52;36979:99;;;37061:5;37051:15;;36979:99;37091:12;37195:7;37192:970;;;37246:25;:29;37272:2;37246:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;37295:1;37279:13;;:17;37246:50;37242:770;;;37323:45;37353:14;;37323:25;37334:13;;37323:6;:10;;:25;;;;:::i;:::-;:29;;:45;;;;:::i;:::-;37316:52;;37435:13;;37416:16;;37409:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;37387:18;;:61;;;;;;;:::i;:::-;;;;;;;;37503:13;;37490:10;;37483:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;37467:12;;:49;;;;;;;:::i;:::-;;;;;;;;37583:13;;37564:16;;37557:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;37535:18;;:61;;;;;;;:::i;:::-;;;;;;;;37242:770;;;37657:25;:31;37683:4;37657:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;37707:1;37692:12;;:16;37657:51;37654:358;;;37733:44;37762:14;;37733:24;37744:12;;37733:6;:10;;:24;;;;:::i;:::-;:28;;:44;;;;:::i;:::-;37726:51;;37840:12;;37822:15;;37815:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37793:18;;:59;;;;;;;:::i;:::-;;;;;;;;37906:12;;37894:9;;37887:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;37871:12;;:47;;;;;;;:::i;:::-;;;;;;;;37984:12;;37966:15;;37959:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;37937:18;;:59;;;;;;;:::i;:::-;;;;;;;;37654:358;37242:770;38039:1;38032:4;:8;38029:93;;;38064:42;38080:4;38094;38101;38064:15;:42::i;:::-;38029:93;38146:4;38136:14;;;;;:::i;:::-;;;37192:970;38175:33;38191:4;38197:2;38201:6;38175:15;:33::i;:::-;34287:3929;;;;34174:4042;;;;:::o;16595:193::-;16681:7;16714:1;16709;:6;;16717:12;16701:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16741:9;16757:1;16753;:5;;;;:::i;:::-;16741:17;;16779:1;16772:8;;;16595:193;;;;;:::o;17277:132::-;17335:7;17362:39;17366:1;17369;17362:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17355:46;;17277:132;;;;:::o;33460:189::-;33577:5;33543:25;:31;33569:4;33543:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33635:5;33601:40;;33629:4;33601:40;;;;;;;;;;;;33460:189;;:::o;12683:575::-;12841:1;12823:20;;:6;:20;;;;12815:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12925:1;12904:23;;:9;:23;;;;12896:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12981:47;13002:6;13010:9;13021:6;12981:20;:47::i;:::-;13062:71;13084:6;13062:71;;;;;;;;;;;;;;;;;:9;:17;13072:6;13062:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13042:9;:17;13052:6;13042:17;;;;;;;;;;;;;;;:91;;;;13167:32;13192:6;13167:9;:20;13177:9;13167:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13144:9;:20;13154:9;13144:20;;;;;;;;;;;;;;;:55;;;;13232:9;13215:35;;13224:6;13215:35;;;13243:6;13215:35;;;;;;:::i;:::-;;;;;;;;12683:575;;;:::o;39352:1568::-;39391:23;39417:24;39435:4;39417:9;:24::i;:::-;39391:50;;39452:25;39522:12;;39501:18;;39480;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;39452:82;;39545:12;39593:1;39574:15;:20;:46;;;;39619:1;39598:17;:22;39574:46;39571:60;;;39623:7;;;;;39571:60;39686:2;39665:18;;:23;;;;:::i;:::-;39647:15;:41;39644:111;;;39741:2;39720:18;;:23;;;;:::i;:::-;39702:41;;39644:111;39817:23;39902:1;39882:17;39861:18;;39843:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;39817:86;;39914:26;39943:36;39963:15;39943;:19;;:36;;;;:::i;:::-;39914:65;;39993:25;40021:21;39993:49;;40056:36;40073:18;40056:16;:36::i;:::-;40107:18;40128:44;40154:17;40128:21;:25;;:44;;;;:::i;:::-;40107:65;;40186:23;40212:57;40251:17;40212:34;40227:18;;40212:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;40186:83;;40280:17;40300:51;40333:17;40300:28;40315:12;;40300:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;40280:71;;40365:23;40422:9;40404:15;40391:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;40365:66;;40466:1;40445:18;:22;;;;40499:1;40478:18;:22;;;;40526:1;40511:12;:16;;;;40562:9;;;;;;;;;;;40554:23;;40585:9;40554:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40541:58;;;;;40634:1;40616:15;:19;:42;;;;;40657:1;40639:15;:19;40616:42;40613:210;;;40674:46;40687:15;40704;40674:12;:46::i;:::-;40740:71;40755:18;40775:15;40792:18;;40740:71;;;;;;;;:::i;:::-;;;;;;;;40613:210;40857:15;;;;;;;;;;;40849:29;;40886:21;40849:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40836:76;;;;;39380:1540;;;;;;;;;;39352:1568;:::o;16796:473::-;16854:7;17104:1;17099;:6;17095:47;;;17129:1;17122:8;;;;17095:47;17155:9;17171:1;17167;:5;;;;:::i;:::-;17155:17;;17200:1;17195;17191;:5;;;;:::i;:::-;:10;17183:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17260:1;17253:8;;;16796:473;;;;;:::o;17417:191::-;17503:7;17535:1;17531;:5;17538:12;17523:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17562:9;17578:1;17574;:5;;;;:::i;:::-;17562:17;;17599:1;17592:8;;;17417:191;;;;;:::o;16104:125::-;;;;:::o;16451:136::-;16509:7;16536:43;16540:1;16543;16536:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16529:50;;16451:136;;;;:::o;38225:591::-;38351:21;38389:1;38375:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38351:40;;38420:4;38402;38407:1;38402:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;38446:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38436:4;38441:1;38436:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;38482:62;38499:4;38514:15;38532:11;38482:8;:62::i;:::-;38584:15;:66;;;38665:11;38691:1;38735:4;38762;38782:15;38584:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38280:536;38225:591;:::o;38825:518::-;38973:62;38990:4;39005:15;39023:11;38973:8;:62::i;:::-;39079:15;:31;;;39118:9;39151:4;39171:11;39197:1;39240;25520:42;39309:15;39079:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38825:518;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:179::-;12972:31;12968:1;12960:6;12956:14;12949:55;12832:179;:::o;13017:366::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:419::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:244::-;13954:34;13950:1;13942:6;13938:14;13931:58;14023:27;14018:2;14010:6;14006:15;13999:52;13814:244;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:179::-;15001:31;14997:1;14989:6;14985:14;14978:55;14861:179;:::o;15046:366::-;15188:3;15209:67;15273:2;15268:3;15209:67;:::i;:::-;15202:74;;15285:93;15374:3;15285:93;:::i;:::-;15403:2;15398:3;15394:12;15387:19;;15046:366;;;:::o;15418:419::-;15584:4;15622:2;15611:9;15607:18;15599:26;;15671:9;15665:4;15661:20;15657:1;15646:9;15642:17;15635:47;15699:131;15825:4;15699:131;:::i;:::-;15691:139;;15418:419;;;:::o;15843:223::-;15983:34;15979:1;15971:6;15967:14;15960:58;16052:6;16047:2;16039:6;16035:15;16028:31;15843:223;:::o;16072:366::-;16214:3;16235:67;16299:2;16294:3;16235:67;:::i;:::-;16228:74;;16311:93;16400:3;16311:93;:::i;:::-;16429:2;16424:3;16420:12;16413:19;;16072:366;;;:::o;16444:419::-;16610:4;16648:2;16637:9;16633:18;16625:26;;16697:9;16691:4;16687:20;16683:1;16672:9;16668:17;16661:47;16725:131;16851:4;16725:131;:::i;:::-;16717:139;;16444:419;;;:::o;16869:240::-;17009:34;17005:1;16997:6;16993:14;16986:58;17078:23;17073:2;17065:6;17061:15;17054:48;16869:240;:::o;17115:366::-;17257:3;17278:67;17342:2;17337:3;17278:67;:::i;:::-;17271:74;;17354:93;17443:3;17354:93;:::i;:::-;17472:2;17467:3;17463:12;17456:19;;17115:366;;;:::o;17487:419::-;17653:4;17691:2;17680:9;17676:18;17668:26;;17740:9;17734:4;17730:20;17726:1;17715:9;17711:17;17704:47;17768:131;17894:4;17768:131;:::i;:::-;17760:139;;17487:419;;;:::o;17912:239::-;18052:34;18048:1;18040:6;18036:14;18029:58;18121:22;18116:2;18108:6;18104:15;18097:47;17912:239;:::o;18157:366::-;18299:3;18320:67;18384:2;18379:3;18320:67;:::i;:::-;18313:74;;18396:93;18485:3;18396:93;:::i;:::-;18514:2;18509:3;18505:12;18498:19;;18157:366;;;:::o;18529:419::-;18695:4;18733:2;18722:9;18718:18;18710:26;;18782:9;18776:4;18772:20;18768:1;18757:9;18753:17;18746:47;18810:131;18936:4;18810:131;:::i;:::-;18802:139;;18529:419;;;:::o;18954:225::-;19094:34;19090:1;19082:6;19078:14;19071:58;19163:8;19158:2;19150:6;19146:15;19139:33;18954:225;:::o;19185:366::-;19327:3;19348:67;19412:2;19407:3;19348:67;:::i;:::-;19341:74;;19424:93;19513:3;19424:93;:::i;:::-;19542:2;19537:3;19533:12;19526:19;;19185:366;;;:::o;19557:419::-;19723:4;19761:2;19750:9;19746:18;19738:26;;19810:9;19804:4;19800:20;19796:1;19785:9;19781:17;19774:47;19838:131;19964:4;19838:131;:::i;:::-;19830:139;;19557:419;;;:::o;19982:177::-;20122:29;20118:1;20110:6;20106:14;20099:53;19982:177;:::o;20165:366::-;20307:3;20328:67;20392:2;20387:3;20328:67;:::i;:::-;20321:74;;20404:93;20493:3;20404:93;:::i;:::-;20522:2;20517:3;20513:12;20506:19;;20165:366;;;:::o;20537:419::-;20703:4;20741:2;20730:9;20726:18;20718:26;;20790:9;20784:4;20780:20;20776:1;20765:9;20761:17;20754:47;20818:131;20944:4;20818:131;:::i;:::-;20810:139;;20537:419;;;:::o;20962:223::-;21102:34;21098:1;21090:6;21086:14;21079:58;21171:6;21166:2;21158:6;21154:15;21147:31;20962:223;:::o;21191:366::-;21333:3;21354:67;21418:2;21413:3;21354:67;:::i;:::-;21347:74;;21430:93;21519:3;21430:93;:::i;:::-;21548:2;21543:3;21539:12;21532:19;;21191:366;;;:::o;21563:419::-;21729:4;21767:2;21756:9;21752:18;21744:26;;21816:9;21810:4;21806:20;21802:1;21791:9;21787:17;21780:47;21844:131;21970:4;21844:131;:::i;:::-;21836:139;;21563:419;;;:::o;21988:221::-;22128:34;22124:1;22116:6;22112:14;22105:58;22197:4;22192:2;22184:6;22180:15;22173:29;21988:221;:::o;22215:366::-;22357:3;22378:67;22442:2;22437:3;22378:67;:::i;:::-;22371:74;;22454:93;22543:3;22454:93;:::i;:::-;22572:2;22567:3;22563:12;22556:19;;22215:366;;;:::o;22587:419::-;22753:4;22791:2;22780:9;22776:18;22768:26;;22840:9;22834:4;22830:20;22826:1;22815:9;22811:17;22804:47;22868:131;22994:4;22868:131;:::i;:::-;22860:139;;22587:419;;;:::o;23012:224::-;23152:34;23148:1;23140:6;23136:14;23129:58;23221:7;23216:2;23208:6;23204:15;23197:32;23012:224;:::o;23242:366::-;23384:3;23405:67;23469:2;23464:3;23405:67;:::i;:::-;23398:74;;23481:93;23570:3;23481:93;:::i;:::-;23599:2;23594:3;23590:12;23583:19;;23242:366;;;:::o;23614:419::-;23780:4;23818:2;23807:9;23803:18;23795:26;;23867:9;23861:4;23857:20;23853:1;23842:9;23838:17;23831:47;23895:131;24021:4;23895:131;:::i;:::-;23887:139;;23614:419;;;:::o;24039:222::-;24179:34;24175:1;24167:6;24163:14;24156:58;24248:5;24243:2;24235:6;24231:15;24224:30;24039:222;:::o;24267:366::-;24409:3;24430:67;24494:2;24489:3;24430:67;:::i;:::-;24423:74;;24506:93;24595:3;24506:93;:::i;:::-;24624:2;24619:3;24615:12;24608:19;;24267:366;;;:::o;24639:419::-;24805:4;24843:2;24832:9;24828:18;24820:26;;24892:9;24886:4;24882:20;24878:1;24867:9;24863:17;24856:47;24920:131;25046:4;24920:131;:::i;:::-;24912:139;;24639:419;;;:::o;25064:172::-;25204:24;25200:1;25192:6;25188:14;25181:48;25064:172;:::o;25242:366::-;25384:3;25405:67;25469:2;25464:3;25405:67;:::i;:::-;25398:74;;25481:93;25570:3;25481:93;:::i;:::-;25599:2;25594:3;25590:12;25583:19;;25242:366;;;:::o;25614:419::-;25780:4;25818:2;25807:9;25803:18;25795:26;;25867:9;25861:4;25857:20;25853:1;25842:9;25838:17;25831:47;25895:131;26021:4;25895:131;:::i;:::-;25887:139;;25614:419;;;:::o;26039:296::-;26179:34;26175:1;26167:6;26163:14;26156:58;26248:34;26243:2;26235:6;26231:15;26224:59;26317:10;26312:2;26304:6;26300:15;26293:35;26039:296;:::o;26341:366::-;26483:3;26504:67;26568:2;26563:3;26504:67;:::i;:::-;26497:74;;26580:93;26669:3;26580:93;:::i;:::-;26698:2;26693:3;26689:12;26682:19;;26341:366;;;:::o;26713:419::-;26879:4;26917:2;26906:9;26902:18;26894:26;;26966:9;26960:4;26956:20;26952:1;26941:9;26937:17;26930:47;26994:131;27120:4;26994:131;:::i;:::-;26986:139;;26713:419;;;:::o;27138:240::-;27278:34;27274:1;27266:6;27262:14;27255:58;27347:23;27342:2;27334:6;27330:15;27323:48;27138:240;:::o;27384:366::-;27526:3;27547:67;27611:2;27606:3;27547:67;:::i;:::-;27540:74;;27623:93;27712:3;27623:93;:::i;:::-;27741:2;27736:3;27732:12;27725:19;;27384:366;;;:::o;27756:419::-;27922:4;27960:2;27949:9;27945:18;27937:26;;28009:9;28003:4;27999:20;27995:1;27984:9;27980:17;27973:47;28037:131;28163:4;28037:131;:::i;:::-;28029:139;;27756:419;;;:::o;28181:169::-;28321:21;28317:1;28309:6;28305:14;28298:45;28181:169;:::o;28356:366::-;28498:3;28519:67;28583:2;28578:3;28519:67;:::i;:::-;28512:74;;28595:93;28684:3;28595:93;:::i;:::-;28713:2;28708:3;28704:12;28697:19;;28356:366;;;:::o;28728:419::-;28894:4;28932:2;28921:9;28917:18;28909:26;;28981:9;28975:4;28971:20;28967:1;28956:9;28952:17;28945:47;29009:131;29135:4;29009:131;:::i;:::-;29001:139;;28728:419;;;:::o;29153:241::-;29293:34;29289:1;29281:6;29277:14;29270:58;29362:24;29357:2;29349:6;29345:15;29338:49;29153:241;:::o;29400:366::-;29542:3;29563:67;29627:2;29622:3;29563:67;:::i;:::-;29556:74;;29639:93;29728:3;29639:93;:::i;:::-;29757:2;29752:3;29748:12;29741:19;;29400:366;;;:::o;29772:419::-;29938:4;29976:2;29965:9;29961:18;29953:26;;30025:9;30019:4;30015:20;30011:1;30000:9;29996:17;29989:47;30053:131;30179:4;30053:131;:::i;:::-;30045:139;;29772:419;;;:::o;30197:191::-;30237:4;30257:20;30275:1;30257:20;:::i;:::-;30252:25;;30291:20;30309:1;30291:20;:::i;:::-;30286:25;;30330:1;30327;30324:8;30321:34;;;30335:18;;:::i;:::-;30321:34;30380:1;30377;30373:9;30365:17;;30197:191;;;;:::o;30394:147::-;30495:11;30532:3;30517:18;;30394:147;;;;:::o;30547:114::-;;:::o;30667:398::-;30826:3;30847:83;30928:1;30923:3;30847:83;:::i;:::-;30840:90;;30939:93;31028:3;30939:93;:::i;:::-;31057:1;31052:3;31048:11;31041:18;;30667:398;;;:::o;31071:379::-;31255:3;31277:147;31420:3;31277:147;:::i;:::-;31270:154;;31441:3;31434:10;;31071:379;;;:::o;31456:442::-;31605:4;31643:2;31632:9;31628:18;31620:26;;31656:71;31724:1;31713:9;31709:17;31700:6;31656:71;:::i;:::-;31737:72;31805:2;31794:9;31790:18;31781:6;31737:72;:::i;:::-;31819;31887:2;31876:9;31872:18;31863:6;31819:72;:::i;:::-;31456:442;;;;;;:::o;31904:220::-;32044:34;32040:1;32032:6;32028:14;32021:58;32113:3;32108:2;32100:6;32096:15;32089:28;31904:220;:::o;32130:366::-;32272:3;32293:67;32357:2;32352:3;32293:67;:::i;:::-;32286:74;;32369:93;32458:3;32369:93;:::i;:::-;32487:2;32482:3;32478:12;32471:19;;32130:366;;;:::o;32502:419::-;32668:4;32706:2;32695:9;32691:18;32683:26;;32755:9;32749:4;32745:20;32741:1;32730:9;32726:17;32719:47;32783:131;32909:4;32783:131;:::i;:::-;32775:139;;32502:419;;;:::o;32927:180::-;32975:77;32972:1;32965:88;33072:4;33069:1;33062:15;33096:4;33093:1;33086:15;33113:180;33161:77;33158:1;33151:88;33258:4;33255:1;33248:15;33282:4;33279:1;33272:15;33299:143;33356:5;33387:6;33381:13;33372:22;;33403:33;33430:5;33403:33;:::i;:::-;33299:143;;;;:::o;33448:351::-;33518:6;33567:2;33555:9;33546:7;33542:23;33538:32;33535:119;;;33573:79;;:::i;:::-;33535:119;33693:1;33718:64;33774:7;33765:6;33754:9;33750:22;33718:64;:::i;:::-;33708:74;;33664:128;33448:351;;;;:::o;33805:85::-;33850:7;33879:5;33868:16;;33805:85;;;:::o;33896:158::-;33954:9;33987:61;34005:42;34014:32;34040:5;34014:32;:::i;:::-;34005:42;:::i;:::-;33987:61;:::i;:::-;33974:74;;33896:158;;;:::o;34060:147::-;34155:45;34194:5;34155:45;:::i;:::-;34150:3;34143:58;34060:147;;:::o;34213:114::-;34280:6;34314:5;34308:12;34298:22;;34213:114;;;:::o;34333:184::-;34432:11;34466:6;34461:3;34454:19;34506:4;34501:3;34497:14;34482:29;;34333:184;;;;:::o;34523:132::-;34590:4;34613:3;34605:11;;34643:4;34638:3;34634:14;34626:22;;34523:132;;;:::o;34661:108::-;34738:24;34756:5;34738:24;:::i;:::-;34733:3;34726:37;34661:108;;:::o;34775:179::-;34844:10;34865:46;34907:3;34899:6;34865:46;:::i;:::-;34943:4;34938:3;34934:14;34920:28;;34775:179;;;;:::o;34960:113::-;35030:4;35062;35057:3;35053:14;35045:22;;34960:113;;;:::o;35109:732::-;35228:3;35257:54;35305:5;35257:54;:::i;:::-;35327:86;35406:6;35401:3;35327:86;:::i;:::-;35320:93;;35437:56;35487:5;35437:56;:::i;:::-;35516:7;35547:1;35532:284;35557:6;35554:1;35551:13;35532:284;;;35633:6;35627:13;35660:63;35719:3;35704:13;35660:63;:::i;:::-;35653:70;;35746:60;35799:6;35746:60;:::i;:::-;35736:70;;35592:224;35579:1;35576;35572:9;35567:14;;35532:284;;;35536:14;35832:3;35825:10;;35233:608;;;35109:732;;;;:::o;35847:831::-;36110:4;36148:3;36137:9;36133:19;36125:27;;36162:71;36230:1;36219:9;36215:17;36206:6;36162:71;:::i;:::-;36243:80;36319:2;36308:9;36304:18;36295:6;36243:80;:::i;:::-;36370:9;36364:4;36360:20;36355:2;36344:9;36340:18;36333:48;36398:108;36501:4;36492:6;36398:108;:::i;:::-;36390:116;;36516:72;36584:2;36573:9;36569:18;36560:6;36516:72;:::i;:::-;36598:73;36666:3;36655:9;36651:19;36642:6;36598:73;:::i;:::-;35847:831;;;;;;;;:::o;36684:807::-;36933:4;36971:3;36960:9;36956:19;36948:27;;36985:71;37053:1;37042:9;37038:17;37029:6;36985:71;:::i;:::-;37066:72;37134:2;37123:9;37119:18;37110:6;37066:72;:::i;:::-;37148:80;37224:2;37213:9;37209:18;37200:6;37148:80;:::i;:::-;37238;37314:2;37303:9;37299:18;37290:6;37238:80;:::i;:::-;37328:73;37396:3;37385:9;37381:19;37372:6;37328:73;:::i;:::-;37411;37479:3;37468:9;37464:19;37455:6;37411:73;:::i;:::-;36684:807;;;;;;;;;:::o;37497:143::-;37554:5;37585:6;37579:13;37570:22;;37601:33;37628:5;37601:33;:::i;:::-;37497:143;;;;:::o;37646:663::-;37734:6;37742;37750;37799:2;37787:9;37778:7;37774:23;37770:32;37767:119;;;37805:79;;:::i;:::-;37767:119;37925:1;37950:64;38006:7;37997:6;37986:9;37982:22;37950:64;:::i;:::-;37940:74;;37896:128;38063:2;38089:64;38145:7;38136:6;38125:9;38121:22;38089:64;:::i;:::-;38079:74;;38034:129;38202:2;38228:64;38284:7;38275:6;38264:9;38260:22;38228:64;:::i;:::-;38218:74;;38173:129;37646:663;;;;;:::o
Swarm Source
ipfs://8a498eba9f4a456ad93bf8f77fc2bbc261c27b5fde5465dfc0555ddd481333c2
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.