ERC-20
Overview
Max Total Supply
10,000,000 ERC20 ***
Holders
146
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
34,249.296630220441524182 ERC20 ***Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
BuildAI
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-01-02 */ // SPDX-License-Identifier: MIT pragma solidity >=0.8.17; pragma experimental ABIEncoderV2; ////// lib/openzeppelin-contracts/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) /* pragma solidity ^0.8.0; */ /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } ////// lib/openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) /* pragma solidity ^0.8.0; */ /* import "../utils/Context.sol"; */ /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) /* pragma solidity ^0.8.0; */ /* import "./IERC20.sol"; */ /* import "./extensions/IERC20Metadata.sol"; */ /* import "../../utils/Context.sol"; */ /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) /* pragma solidity ^0.8.0; */ // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } ////// src/IUniswapV2Factory.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract BuildAI is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; mapping (address => bool) private _blacklist; bool private swapping; address public marketingWallet; uint256 public swapTokensAtAmount; uint256 public maxBuyAmount; uint256 public maxSellAmount; 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 bool public transferDelayEnabled = true; uint256 public buyFee; uint256 public sellFee; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; //exclude from max transaction // 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 MaxTransactionExclusion(address _address, bool excluded); constructor() ERC20("0xBuildAI", "BAI") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); _excludeFromMaxTransaction(address(uniswapV2Pair),true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 1_000_0000 * 1e18; swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet maxBuyAmount = (totalSupply * 2) / 100; // 2 maxSellAmount = (totalSupply * 2) / 100; // 2 maxWallet = (totalSupply * 2) / 100; // 0.5% buyFee = 20; sellFee = 30; marketingWallet = msg.sender; // set as Development Wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); _excludeFromMaxTransaction(owner(), true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // 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; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _fee ) external onlyOwner { buyFee = _fee; } function updateSellFees( uint256 _fee ) external onlyOwner { sellFee = _fee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function _excludeFromMaxTransaction(address updAds, bool isExcluded) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner { if (!isEx) { require( updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn" ); } _isExcludedMaxTransactionAmount[updAds] = isEx; } 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 _developmentwallet) external onlyOwner { emit marketingWalletUpdated(_developmentwallet, marketingWallet); marketingWallet = _developmentwallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(!_blacklist[from] && !_blacklist[to], "You are a bot"); 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 <= maxBuyAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxSellAmount, "Sell transfer amount exceeds the max sell." ); } 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; swapBacktoETH(); 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] && sellFee > 0) { fees = amount.mul(sellFee).div(100); } // on buy else if (automatedMarketMakerPairs[from] && buyFee > 0) { fees = amount.mul(buyFee).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function addBlack(address account, bool isBlacklisted) public onlyOwner { _blacklist[account] = isBlacklisted; } 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 swapBacktoETH() private { uint256 contractBalance = balanceOf(address(this)); bool success; if (contractBalance == 0 ) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 initialETHBalance = address(this).balance; swapTokensForEth(contractBalance); uint256 deltaETH = address(this).balance.sub(initialETHBalance); // transfer to fee wallet if (deltaETH > 0) { (success,) = marketingWallet.call{value: deltaETH}(""); } } function manualSwaptoETH() public { require(msg.sender == marketingWallet, "Only Marketing Wallet Can Call this function"); swapBacktoETH(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","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":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":"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":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"addBlack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[{"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":"manualSwaptoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"sellFee","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":"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":"_fee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","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"},{"inputs":[{"internalType":"address","name":"_developmentwallet","type":"address"}],"name":"updatemarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055506001600e5f6101000a81548160ff021916908315150217905550348015610077575f80fd5b506040518060400160405280600981526020017f30784275696c64414900000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424149000000000000000000000000000000000000000000000000000000000081525081600390816100f39190610b88565b5080600490816101039190610b88565b50505061012261011761049260201b60201c565b61049960201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101db9190610cb5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610240573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102649190610cb5565b6040518363ffffffff1660e01b8152600401610281929190610cef565b6020604051808303815f875af115801561029d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c19190610cb5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061030760a051600161055c60201b60201c565b61031a60a05160016105ed60201b60201c565b5f6a084595161401484a00000090506127106005826103399190610d43565b6103439190610db1565b60088190555060646002826103589190610d43565b6103629190610db1565b60098190555060646002826103779190610d43565b6103819190610db1565b600a8190555060646002826103969190610d43565b6103a09190610db1565b600b819055506014600f81905550601e60108190555033600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061041561040861068b60201b60201c565b60016106b360201b60201c565b6104263060016106b360201b60201c565b61043961dead60016106b360201b60201c565b61045761044a61068b60201b60201c565b600161055c60201b60201c565b61046830600161055c60201b60201c565b61047b61dead600161055c60201b60201c565b61048b33826107e160201b60201c565b5050610f76565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674682826040516105e1929190610dfb565b60405180910390a15050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6106c161049260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166106e561068b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073290610e7c565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516107d59190610e9a565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690610efd565b60405180910390fd5b6108605f838361094460201b60201c565b8060025f8282546108719190610f1b565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108c39190610f1b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109279190610f5d565b60405180910390a36109405f838361094960201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806109c957607f821691505b6020821081036109dc576109db610985565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a3e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a03565b610a488683610a03565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a8c610a87610a8284610a60565b610a69565b610a60565b9050919050565b5f819050919050565b610aa583610a72565b610ab9610ab182610a93565b848454610a0f565b825550505050565b5f90565b610acd610ac1565b610ad8818484610a9c565b505050565b5b81811015610afb57610af05f82610ac5565b600181019050610ade565b5050565b601f821115610b4057610b11816109e2565b610b1a846109f4565b81016020851015610b29578190505b610b3d610b35856109f4565b830182610add565b50505b505050565b5f82821c905092915050565b5f610b605f1984600802610b45565b1980831691505092915050565b5f610b788383610b51565b9150826002028217905092915050565b610b918261094e565b67ffffffffffffffff811115610baa57610ba9610958565b5b610bb482546109b2565b610bbf828285610aff565b5f60209050601f831160018114610bf0575f8415610bde578287015190505b610be88582610b6d565b865550610c4f565b601f198416610bfe866109e2565b5f5b82811015610c2557848901518255600182019150602085019450602081019050610c00565b86831015610c425784890151610c3e601f891682610b51565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c8482610c5b565b9050919050565b610c9481610c7a565b8114610c9e575f80fd5b50565b5f81519050610caf81610c8b565b92915050565b5f60208284031215610cca57610cc9610c57565b5b5f610cd784828501610ca1565b91505092915050565b610ce981610c7a565b82525050565b5f604082019050610d025f830185610ce0565b610d0f6020830184610ce0565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d4d82610a60565b9150610d5883610a60565b9250828202610d6681610a60565b91508282048414831517610d7d57610d7c610d16565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610dbb82610a60565b9150610dc683610a60565b925082610dd657610dd5610d84565b5b828204905092915050565b5f8115159050919050565b610df581610de1565b82525050565b5f604082019050610e0e5f830185610ce0565b610e1b6020830184610dec565b9392505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610e66602083610e22565b9150610e7182610e32565b602082019050919050565b5f6020820190508181035f830152610e9381610e5a565b9050919050565b5f602082019050610ead5f830184610dec565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610ee7601f83610e22565b9150610ef282610eb3565b602082019050919050565b5f6020820190508181035f830152610f1481610edb565b9050919050565b5f610f2582610a60565b9150610f3083610a60565b9250828201905080821115610f4857610f47610d16565b5b92915050565b610f5781610a60565b82525050565b5f602082019050610f705f830184610f4e565b92915050565b60805160a05161448a610fc85f395f8181610c9601528181610fa70152818161140f015261232f01525f8181610abc015281816122d70152818161304801528181613127015261314e015261448a5ff3fe60806040526004361061025f575f3560e01c806388e765ff11610143578063bff78169116100b5578063dd62ed3e11610079578063dd62ed3e146108e6578063e2f4560514610922578063e884f2601461094c578063eba4c33314610976578063f2fde38b1461099e578063f8b45b05146109c657610266565b8063bff781691461081a578063c024666814610842578063c7105b7e1461086a578063c876d0b914610880578063d257b34f146108aa57610266565b806395d89b411161010757806395d89b41146106ea5780639a7a23d614610714578063a457c2d71461073c578063a9059cbb14610778578063b62496f5146107b4578063bbc0c742146107f057610266565b806388e765ff146106305780638a74a6b21461065a5780638a8c523c146106825780638da5cb5b14610698578063924de9b7146106c257610266565b806349bd5a5e116101dc57806370a08231116101a057806370a082311461053a578063715018a61461057657806371fc46881461058c578063751039fc146105b45780637571336a146105de57806375f0a8741461060657610266565b806349bd5a5e146104565780634a62bb65146104805780634fbee193146104aa57806366d602ae146104e65780636ddd17131461051057610266565b806323b872dd1161022357806323b872dd146103605780632b14ca561461039c578063313ce567146103c657806339509351146103f0578063470624021461042c57610266565b806306fdde031461026a578063095ea7b31461029457806310d5de53146102d05780631694505e1461030c57806318160ddd1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109f0565b60405161028b919061326d565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b5919061331e565b610a80565b6040516102c79190613376565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061338f565b610a9d565b6040516103039190613376565b60405180910390f35b348015610317575f80fd5b50610320610aba565b60405161032d9190613415565b60405180910390f35b348015610341575f80fd5b5061034a610ade565b604051610357919061343d565b60405180910390f35b34801561036b575f80fd5b5061038660048036038101906103819190613456565b610ae7565b6040516103939190613376565b60405180910390f35b3480156103a7575f80fd5b506103b0610bd9565b6040516103bd919061343d565b60405180910390f35b3480156103d1575f80fd5b506103da610bdf565b6040516103e791906134c1565b60405180910390f35b3480156103fb575f80fd5b506104166004803603810190610411919061331e565b610be7565b6040516104239190613376565b60405180910390f35b348015610437575f80fd5b50610440610c8e565b60405161044d919061343d565b60405180910390f35b348015610461575f80fd5b5061046a610c94565b60405161047791906134e9565b60405180910390f35b34801561048b575f80fd5b50610494610cb8565b6040516104a19190613376565b60405180910390f35b3480156104b5575f80fd5b506104d060048036038101906104cb919061338f565b610cca565b6040516104dd9190613376565b60405180910390f35b3480156104f1575f80fd5b506104fa610d1c565b604051610507919061343d565b60405180910390f35b34801561051b575f80fd5b50610524610d22565b6040516105319190613376565b60405180910390f35b348015610545575f80fd5b50610560600480360381019061055b919061338f565b610d35565b60405161056d919061343d565b60405180910390f35b348015610581575f80fd5b5061058a610d7a565b005b348015610597575f80fd5b506105b260048036038101906105ad9190613502565b610e01565b005b3480156105bf575f80fd5b506105c8610e87565b6040516105d59190613376565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190613557565b610f24565b005b348015610611575f80fd5b5061061a61108c565b60405161062791906134e9565b60405180910390f35b34801561063b575f80fd5b506106446110b2565b604051610651919061343d565b60405180910390f35b348015610665575f80fd5b50610680600480360381019061067b9190613557565b6110b8565b005b34801561068d575f80fd5b5061069661118c565b005b3480156106a3575f80fd5b506106ac611240565b6040516106b991906134e9565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e39190613595565b611268565b005b3480156106f5575f80fd5b506106fe611301565b60405161070b919061326d565b60405180910390f35b34801561071f575f80fd5b5061073a60048036038101906107359190613557565b611391565b005b348015610747575f80fd5b50610762600480360381019061075d919061331e565b6114a9565b60405161076f9190613376565b60405180910390f35b348015610783575f80fd5b5061079e6004803603810190610799919061331e565b61158f565b6040516107ab9190613376565b60405180910390f35b3480156107bf575f80fd5b506107da60048036038101906107d5919061338f565b6115ac565b6040516107e79190613376565b60405180910390f35b3480156107fb575f80fd5b506108046115c9565b6040516108119190613376565b60405180910390f35b348015610825575f80fd5b50610840600480360381019061083b919061338f565b6115dc565b005b34801561084d575f80fd5b5061086860048036038101906108639190613557565b611718565b005b348015610875575f80fd5b5061087e61183a565b005b34801561088b575f80fd5b506108946118d4565b6040516108a19190613376565b60405180910390f35b3480156108b5575f80fd5b506108d060048036038101906108cb9190613502565b6118e6565b6040516108dd9190613376565b60405180910390f35b3480156108f1575f80fd5b5061090c600480360381019061090791906135c0565b611a3a565b604051610919919061343d565b60405180910390f35b34801561092d575f80fd5b50610936611abc565b604051610943919061343d565b60405180910390f35b348015610957575f80fd5b50610960611ac2565b60405161096d9190613376565b60405180910390f35b348015610981575f80fd5b5061099c60048036038101906109979190613502565b611b5f565b005b3480156109a9575f80fd5b506109c460048036038101906109bf919061338f565b611be5565b005b3480156109d1575f80fd5b506109da611cdb565b6040516109e7919061343d565b60405180910390f35b6060600380546109ff9061362b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b9061362b565b8015610a765780601f10610a4d57610100808354040283529160200191610a76565b820191905f5260205f20905b815481529060010190602001808311610a5957829003601f168201915b5050505050905090565b5f610a93610a8c611ce1565b8484611ce8565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f610af3848484611eab565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b3a611ce1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906136cb565b60405180910390fd5b610bcd85610bc5611ce1565b858403611ce8565b60019150509392505050565b60105481565b5f6012905090565b5f610c84610bf3611ce1565b848460015f610c00611ce1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c7f9190613716565b611ce8565b6001905092915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5f9054906101000a900460ff1681565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600a5481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d82611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610da0611240565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded90613793565b60405180910390fd5b610dff5f612aaa565b565b610e09611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610e27611240565b73ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613793565b60405180910390fd5b80600f8190555050565b5f610e90611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610eae611240565b73ffffffffffffffffffffffffffffffffffffffff1614610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613793565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b610f2c611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610f4a611240565b73ffffffffffffffffffffffffffffffffffffffff1614610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790613793565b60405180910390fd5b80611034577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613821565b60405180910390fd5b5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6110c0611ce1565b73ffffffffffffffffffffffffffffffffffffffff166110de611240565b73ffffffffffffffffffffffffffffffffffffffff1614611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90613793565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611194611ce1565b73ffffffffffffffffffffffffffffffffffffffff166111b2611240565b73ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613793565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611270611ce1565b73ffffffffffffffffffffffffffffffffffffffff1661128e611240565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613793565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546113109061362b565b80601f016020809104026020016040519081016040528092919081815260200182805461133c9061362b565b80156113875780601f1061135e57610100808354040283529160200191611387565b820191905f5260205f20905b81548152906001019060200180831161136a57829003601f168201915b5050505050905090565b611399611ce1565b73ffffffffffffffffffffffffffffffffffffffff166113b7611240565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613793565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361149b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611492906138af565b60405180910390fd5b6114a58282612b6d565b5050565b5f8060015f6114b6611ce1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115679061393d565b60405180910390fd5b61158461157b611ce1565b85858403611ce8565b600191505092915050565b5f6115a261159b611ce1565b8484611eab565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6115e4611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611602611240565b73ffffffffffffffffffffffffffffffffffffffff1614611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613793565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611720611ce1565b73ffffffffffffffffffffffffffffffffffffffff1661173e611240565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613793565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161182e9190613376565b60405180910390a25050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906139cb565b60405180910390fd5b6118d2612c0b565b565b600e5f9054906101000a900460ff1681565b5f6118ef611ce1565b73ffffffffffffffffffffffffffffffffffffffff1661190d611240565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90613793565b60405180910390fd5b620186a06001611971610ade565b61197b91906139e9565b6119859190613a57565b8210156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90613af7565b60405180910390fd5b6103e860056119d4610ade565b6119de91906139e9565b6119e89190613a57565b821115611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613b85565b60405180910390fd5b8160088190555060019050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b5f611acb611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611ae9611240565b73ffffffffffffffffffffffffffffffffffffffff1614611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690613793565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b611b67611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611b85611240565b73ffffffffffffffffffffffffffffffffffffffff1614611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd290613793565b60405180910390fd5b8060108190555050565b611bed611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611c0b611240565b73ffffffffffffffffffffffffffffffffffffffff1614611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613793565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613c13565b60405180910390fd5b611cd881612aaa565b50565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb90613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e9e919061343d565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1090613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613e4b565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612025575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90613eb3565b60405180910390fd5b5f810361207b5761207683835f612d0c565b612aa5565b600c5f9054906101000a900460ff161561272157612097611240565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561210557506120d5611240565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561213d57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612177575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561218f575060075f9054906101000a900460ff16155b1561272057600c60019054906101000a900460ff166122835760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612243575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990613f1b565b60405180910390fd5b5b600e5f9054906101000a900460ff16156124465761229f611240565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561232657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561237e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124455743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990613fcf565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124e3575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561258a5760095481111561252d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125249061405d565b60405180910390fd5b600b5461253983610d35565b826125449190613716565b1115612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906140c5565b60405180910390fd5b61271f565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612627575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561267657600a54811115612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266890614153565b60405180910390fd5b61271e565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661271d57600b546126d083610d35565b826126db9190613716565b111561271c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612713906140c5565b60405180910390fd5b5b5b5b5b5b5f61272b30610d35565b90505f600854821015905080801561274f5750600c60029054906101000a900460ff165b8015612767575060075f9054906101000a900460ff16155b80156127ba575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561280d575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612860575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128a157600160075f6101000a81548160ff021916908315150217905550612887612c0b565b5f60075f6101000a81548160ff0219169083151502179055505b5f60075f9054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061294f575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612958575f90505b5f8115612a955760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129b657505f601054115b156129ea576129e360646129d560105488612f8190919063ffffffff16565b612f9690919063ffffffff16565b9050612a72565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a4157505f600f54115b15612a7157612a6e6064612a60600f5488612f8190919063ffffffff16565b612f9690919063ffffffff16565b90505b5b5f811115612a8657612a85873083612d0c565b5b8085612a929190614171565b94505b612aa0878787612d0c565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f612c1530610d35565b90505f808203612c26575050612d0a565b6014600854612c3591906139e9565b821115612c4e576014600854612c4b91906139e9565b91505b5f479050612c5b83612fab565b5f612c6f82476131de90919063ffffffff16565b90505f811115612d0557600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612cbf906141d1565b5f6040518083038185875af1925050503d805f8114612cf9576040519150601f19603f3d011682016040523d82523d5f602084013e612cfe565b606091505b5050809350505b505050505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddf90613e4b565b60405180910390fd5b612df38383836131f3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6d90614255565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612f049190613716565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f68919061343d565b60405180910390a3612f7b8484846131f8565b50505050565b5f8183612f8e91906139e9565b905092915050565b5f8183612fa39190613a57565b905092915050565b5f600267ffffffffffffffff811115612fc757612fc6614273565b5b604051908082528060200260200182016040528015612ff55781602001602082028036833780820191505090505b50905030815f8151811061300c5761300b6142a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130d391906142e1565b816001815181106130e7576130e66142a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061314c307f000000000000000000000000000000000000000000000000000000000000000084611ce8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131ad9594939291906143fc565b5f604051808303815f87803b1580156131c4575f80fd5b505af11580156131d6573d5f803e3d5ffd5b505050505050565b5f81836131eb9190614171565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61323f826131fd565b6132498185613207565b9350613259818560208601613217565b61326281613225565b840191505092915050565b5f6020820190508181035f8301526132858184613235565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132ba82613291565b9050919050565b6132ca816132b0565b81146132d4575f80fd5b50565b5f813590506132e5816132c1565b92915050565b5f819050919050565b6132fd816132eb565b8114613307575f80fd5b50565b5f81359050613318816132f4565b92915050565b5f80604083850312156133345761333361328d565b5b5f613341858286016132d7565b92505060206133528582860161330a565b9150509250929050565b5f8115159050919050565b6133708161335c565b82525050565b5f6020820190506133895f830184613367565b92915050565b5f602082840312156133a4576133a361328d565b5b5f6133b1848285016132d7565b91505092915050565b5f819050919050565b5f6133dd6133d86133d384613291565b6133ba565b613291565b9050919050565b5f6133ee826133c3565b9050919050565b5f6133ff826133e4565b9050919050565b61340f816133f5565b82525050565b5f6020820190506134285f830184613406565b92915050565b613437816132eb565b82525050565b5f6020820190506134505f83018461342e565b92915050565b5f805f6060848603121561346d5761346c61328d565b5b5f61347a868287016132d7565b935050602061348b868287016132d7565b925050604061349c8682870161330a565b9150509250925092565b5f60ff82169050919050565b6134bb816134a6565b82525050565b5f6020820190506134d45f8301846134b2565b92915050565b6134e3816132b0565b82525050565b5f6020820190506134fc5f8301846134da565b92915050565b5f602082840312156135175761351661328d565b5b5f6135248482850161330a565b91505092915050565b6135368161335c565b8114613540575f80fd5b50565b5f813590506135518161352d565b92915050565b5f806040838503121561356d5761356c61328d565b5b5f61357a858286016132d7565b925050602061358b85828601613543565b9150509250929050565b5f602082840312156135aa576135a961328d565b5b5f6135b784828501613543565b91505092915050565b5f80604083850312156135d6576135d561328d565b5b5f6135e3858286016132d7565b92505060206135f4858286016132d7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061364257607f821691505b602082108103613655576136546135fe565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6136b5602883613207565b91506136c08261365b565b604082019050919050565b5f6020820190508181035f8301526136e2816136a9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613720826132eb565b915061372b836132eb565b9250828201905080821115613743576137426136e9565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61377d602083613207565b915061378882613749565b602082019050919050565b5f6020820190508181035f8301526137aa81613771565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d205f8201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b5f61380b602783613207565b9150613816826137b1565b604082019050919050565b5f6020820190508181035f830152613838816137ff565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613899603983613207565b91506138a48261383f565b604082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613927602583613207565b9150613932826138cd565b604082019050919050565b5f6020820190508181035f8301526139548161391b565b9050919050565b7f4f6e6c79204d61726b6574696e672057616c6c65742043616e2043616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f6139b5602c83613207565b91506139c08261395b565b604082019050919050565b5f6020820190508181035f8301526139e2816139a9565b9050919050565b5f6139f3826132eb565b91506139fe836132eb565b9250828202613a0c816132eb565b91508282048414831517613a2357613a226136e9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a61826132eb565b9150613a6c836132eb565b925082613a7c57613a7b613a2a565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613ae1603583613207565b9150613aec82613a87565b604082019050919050565b5f6020820190508181035f830152613b0e81613ad5565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613b6f603483613207565b9150613b7a82613b15565b604082019050919050565b5f6020820190508181035f830152613b9c81613b63565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bfd602683613207565b9150613c0882613ba3565b604082019050919050565b5f6020820190508181035f830152613c2a81613bf1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483613207565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283613207565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583613207565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383613207565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f596f7520617265206120626f74000000000000000000000000000000000000005f82015250565b5f613e9d600d83613207565b9150613ea882613e69565b602082019050919050565b5f6020820190508181035f830152613eca81613e91565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f05601683613207565b9150613f1082613ed1565b602082019050919050565b5f6020820190508181035f830152613f3281613ef9565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f613fb9604983613207565b9150613fc482613f39565b606082019050919050565b5f6020820190508181035f830152613fe681613fad565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b5f614047602883613207565b915061405282613fed565b604082019050919050565b5f6020820190508181035f8301526140748161403b565b9050919050565b7f4d61782057616c6c6574204578636565646564000000000000000000000000005f82015250565b5f6140af601383613207565b91506140ba8261407b565b602082019050919050565b5f6020820190508181035f8301526140dc816140a3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b5f61413d602a83613207565b9150614148826140e3565b604082019050919050565b5f6020820190508181035f83015261416a81614131565b9050919050565b5f61417b826132eb565b9150614186836132eb565b925082820390508181111561419e5761419d6136e9565b5b92915050565b5f81905092915050565b50565b5f6141bc5f836141a4565b91506141c7826141ae565b5f82019050919050565b5f6141db826141b1565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61423f602683613207565b915061424a826141e5565b604082019050919050565b5f6020820190508181035f83015261426c81614233565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142db816132c1565b92915050565b5f602082840312156142f6576142f561328d565b5b5f614303848285016142cd565b91505092915050565b5f819050919050565b5f61432f61432a6143258461430c565b6133ba565b6132eb565b9050919050565b61433f81614315565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614377816132b0565b82525050565b5f614388838361436e565b60208301905092915050565b5f602082019050919050565b5f6143aa82614345565b6143b4818561434f565b93506143bf8361435f565b805f5b838110156143ef5781516143d6888261437d565b97506143e183614394565b9250506001810190506143c2565b5085935050505092915050565b5f60a08201905061440f5f83018861342e565b61441c6020830187614336565b818103604083015261442e81866143a0565b905061443d60608301856134da565b61444a608083018461342e565b969550505050505056fea26469706673582212207ad9ca6a61524592cc6191632f4b619fd72c0366a4cedc3eb7597fc918350e5964736f6c634300081a0033
Deployed Bytecode
0x60806040526004361061025f575f3560e01c806388e765ff11610143578063bff78169116100b5578063dd62ed3e11610079578063dd62ed3e146108e6578063e2f4560514610922578063e884f2601461094c578063eba4c33314610976578063f2fde38b1461099e578063f8b45b05146109c657610266565b8063bff781691461081a578063c024666814610842578063c7105b7e1461086a578063c876d0b914610880578063d257b34f146108aa57610266565b806395d89b411161010757806395d89b41146106ea5780639a7a23d614610714578063a457c2d71461073c578063a9059cbb14610778578063b62496f5146107b4578063bbc0c742146107f057610266565b806388e765ff146106305780638a74a6b21461065a5780638a8c523c146106825780638da5cb5b14610698578063924de9b7146106c257610266565b806349bd5a5e116101dc57806370a08231116101a057806370a082311461053a578063715018a61461057657806371fc46881461058c578063751039fc146105b45780637571336a146105de57806375f0a8741461060657610266565b806349bd5a5e146104565780634a62bb65146104805780634fbee193146104aa57806366d602ae146104e65780636ddd17131461051057610266565b806323b872dd1161022357806323b872dd146103605780632b14ca561461039c578063313ce567146103c657806339509351146103f0578063470624021461042c57610266565b806306fdde031461026a578063095ea7b31461029457806310d5de53146102d05780631694505e1461030c57806318160ddd1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109f0565b60405161028b919061326d565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b5919061331e565b610a80565b6040516102c79190613376565b60405180910390f35b3480156102db575f80fd5b506102f660048036038101906102f1919061338f565b610a9d565b6040516103039190613376565b60405180910390f35b348015610317575f80fd5b50610320610aba565b60405161032d9190613415565b60405180910390f35b348015610341575f80fd5b5061034a610ade565b604051610357919061343d565b60405180910390f35b34801561036b575f80fd5b5061038660048036038101906103819190613456565b610ae7565b6040516103939190613376565b60405180910390f35b3480156103a7575f80fd5b506103b0610bd9565b6040516103bd919061343d565b60405180910390f35b3480156103d1575f80fd5b506103da610bdf565b6040516103e791906134c1565b60405180910390f35b3480156103fb575f80fd5b506104166004803603810190610411919061331e565b610be7565b6040516104239190613376565b60405180910390f35b348015610437575f80fd5b50610440610c8e565b60405161044d919061343d565b60405180910390f35b348015610461575f80fd5b5061046a610c94565b60405161047791906134e9565b60405180910390f35b34801561048b575f80fd5b50610494610cb8565b6040516104a19190613376565b60405180910390f35b3480156104b5575f80fd5b506104d060048036038101906104cb919061338f565b610cca565b6040516104dd9190613376565b60405180910390f35b3480156104f1575f80fd5b506104fa610d1c565b604051610507919061343d565b60405180910390f35b34801561051b575f80fd5b50610524610d22565b6040516105319190613376565b60405180910390f35b348015610545575f80fd5b50610560600480360381019061055b919061338f565b610d35565b60405161056d919061343d565b60405180910390f35b348015610581575f80fd5b5061058a610d7a565b005b348015610597575f80fd5b506105b260048036038101906105ad9190613502565b610e01565b005b3480156105bf575f80fd5b506105c8610e87565b6040516105d59190613376565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190613557565b610f24565b005b348015610611575f80fd5b5061061a61108c565b60405161062791906134e9565b60405180910390f35b34801561063b575f80fd5b506106446110b2565b604051610651919061343d565b60405180910390f35b348015610665575f80fd5b50610680600480360381019061067b9190613557565b6110b8565b005b34801561068d575f80fd5b5061069661118c565b005b3480156106a3575f80fd5b506106ac611240565b6040516106b991906134e9565b60405180910390f35b3480156106cd575f80fd5b506106e860048036038101906106e39190613595565b611268565b005b3480156106f5575f80fd5b506106fe611301565b60405161070b919061326d565b60405180910390f35b34801561071f575f80fd5b5061073a60048036038101906107359190613557565b611391565b005b348015610747575f80fd5b50610762600480360381019061075d919061331e565b6114a9565b60405161076f9190613376565b60405180910390f35b348015610783575f80fd5b5061079e6004803603810190610799919061331e565b61158f565b6040516107ab9190613376565b60405180910390f35b3480156107bf575f80fd5b506107da60048036038101906107d5919061338f565b6115ac565b6040516107e79190613376565b60405180910390f35b3480156107fb575f80fd5b506108046115c9565b6040516108119190613376565b60405180910390f35b348015610825575f80fd5b50610840600480360381019061083b919061338f565b6115dc565b005b34801561084d575f80fd5b5061086860048036038101906108639190613557565b611718565b005b348015610875575f80fd5b5061087e61183a565b005b34801561088b575f80fd5b506108946118d4565b6040516108a19190613376565b60405180910390f35b3480156108b5575f80fd5b506108d060048036038101906108cb9190613502565b6118e6565b6040516108dd9190613376565b60405180910390f35b3480156108f1575f80fd5b5061090c600480360381019061090791906135c0565b611a3a565b604051610919919061343d565b60405180910390f35b34801561092d575f80fd5b50610936611abc565b604051610943919061343d565b60405180910390f35b348015610957575f80fd5b50610960611ac2565b60405161096d9190613376565b60405180910390f35b348015610981575f80fd5b5061099c60048036038101906109979190613502565b611b5f565b005b3480156109a9575f80fd5b506109c460048036038101906109bf919061338f565b611be5565b005b3480156109d1575f80fd5b506109da611cdb565b6040516109e7919061343d565b60405180910390f35b6060600380546109ff9061362b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b9061362b565b8015610a765780601f10610a4d57610100808354040283529160200191610a76565b820191905f5260205f20905b815481529060010190602001808311610a5957829003601f168201915b5050505050905090565b5f610a93610a8c611ce1565b8484611ce8565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f610af3848484611eab565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b3a611ce1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906136cb565b60405180910390fd5b610bcd85610bc5611ce1565b858403611ce8565b60019150509392505050565b60105481565b5f6012905090565b5f610c84610bf3611ce1565b848460015f610c00611ce1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610c7f9190613716565b611ce8565b6001905092915050565b600f5481565b7f000000000000000000000000f678c56ef6234681c0ab3dd2109371c77e6b15fb81565b600c5f9054906101000a900460ff1681565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600a5481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d82611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610da0611240565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded90613793565b60405180910390fd5b610dff5f612aaa565b565b610e09611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610e27611240565b73ffffffffffffffffffffffffffffffffffffffff1614610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613793565b60405180910390fd5b80600f8190555050565b5f610e90611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610eae611240565b73ffffffffffffffffffffffffffffffffffffffff1614610f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efb90613793565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b610f2c611ce1565b73ffffffffffffffffffffffffffffffffffffffff16610f4a611240565b73ffffffffffffffffffffffffffffffffffffffff1614610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790613793565b60405180910390fd5b80611034577f000000000000000000000000f678c56ef6234681c0ab3dd2109371c77e6b15fb73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613821565b60405180910390fd5b5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6110c0611ce1565b73ffffffffffffffffffffffffffffffffffffffff166110de611240565b73ffffffffffffffffffffffffffffffffffffffff1614611134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90613793565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611194611ce1565b73ffffffffffffffffffffffffffffffffffffffff166111b2611240565b73ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613793565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611270611ce1565b73ffffffffffffffffffffffffffffffffffffffff1661128e611240565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613793565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546113109061362b565b80601f016020809104026020016040519081016040528092919081815260200182805461133c9061362b565b80156113875780601f1061135e57610100808354040283529160200191611387565b820191905f5260205f20905b81548152906001019060200180831161136a57829003601f168201915b5050505050905090565b611399611ce1565b73ffffffffffffffffffffffffffffffffffffffff166113b7611240565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613793565b60405180910390fd5b7f000000000000000000000000f678c56ef6234681c0ab3dd2109371c77e6b15fb73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361149b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611492906138af565b60405180910390fd5b6114a58282612b6d565b5050565b5f8060015f6114b6611ce1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115679061393d565b60405180910390fd5b61158461157b611ce1565b85858403611ce8565b600191505092915050565b5f6115a261159b611ce1565b8484611eab565b6001905092915050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6115e4611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611602611240565b73ffffffffffffffffffffffffffffffffffffffff1614611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90613793565b60405180910390fd5b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611720611ce1565b73ffffffffffffffffffffffffffffffffffffffff1661173e611240565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613793565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161182e9190613376565b60405180910390a25050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906139cb565b60405180910390fd5b6118d2612c0b565b565b600e5f9054906101000a900460ff1681565b5f6118ef611ce1565b73ffffffffffffffffffffffffffffffffffffffff1661190d611240565b73ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90613793565b60405180910390fd5b620186a06001611971610ade565b61197b91906139e9565b6119859190613a57565b8210156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90613af7565b60405180910390fd5b6103e860056119d4610ade565b6119de91906139e9565b6119e89190613a57565b821115611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613b85565b60405180910390fd5b8160088190555060019050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b5f611acb611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611ae9611240565b73ffffffffffffffffffffffffffffffffffffffff1614611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690613793565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b611b67611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611b85611240565b73ffffffffffffffffffffffffffffffffffffffff1614611bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd290613793565b60405180910390fd5b8060108190555050565b611bed611ce1565b73ffffffffffffffffffffffffffffffffffffffff16611c0b611240565b73ffffffffffffffffffffffffffffffffffffffff1614611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613793565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613c13565b60405180910390fd5b611cd881612aaa565b50565b600b5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb90613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e9e919061343d565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1090613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613e4b565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612025575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90613eb3565b60405180910390fd5b5f810361207b5761207683835f612d0c565b612aa5565b600c5f9054906101000a900460ff161561272157612097611240565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561210557506120d5611240565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561213d57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612177575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561218f575060075f9054906101000a900460ff16155b1561272057600c60019054906101000a900460ff166122835760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612243575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990613f1b565b60405180910390fd5b5b600e5f9054906101000a900460ff16156124465761229f611240565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561232657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561237e57507f000000000000000000000000f678c56ef6234681c0ab3dd2109371c77e6b15fb73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156124455743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990613fcf565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124e3575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561258a5760095481111561252d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125249061405d565b60405180910390fd5b600b5461253983610d35565b826125449190613716565b1115612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906140c5565b60405180910390fd5b61271f565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612627575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561267657600a54811115612671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266890614153565b60405180910390fd5b61271e565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661271d57600b546126d083610d35565b826126db9190613716565b111561271c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612713906140c5565b60405180910390fd5b5b5b5b5b5b5f61272b30610d35565b90505f600854821015905080801561274f5750600c60029054906101000a900460ff165b8015612767575060075f9054906101000a900460ff16155b80156127ba575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561280d575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612860575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128a157600160075f6101000a81548160ff021916908315150217905550612887612c0b565b5f60075f6101000a81548160ff0219169083151502179055505b5f60075f9054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061294f575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612958575f90505b5f8115612a955760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129b657505f601054115b156129ea576129e360646129d560105488612f8190919063ffffffff16565b612f9690919063ffffffff16565b9050612a72565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a4157505f600f54115b15612a7157612a6e6064612a60600f5488612f8190919063ffffffff16565b612f9690919063ffffffff16565b90505b5b5f811115612a8657612a85873083612d0c565b5b8085612a929190614171565b94505b612aa0878787612d0c565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f612c1530610d35565b90505f808203612c26575050612d0a565b6014600854612c3591906139e9565b821115612c4e576014600854612c4b91906139e9565b91505b5f479050612c5b83612fab565b5f612c6f82476131de90919063ffffffff16565b90505f811115612d0557600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612cbf906141d1565b5f6040518083038185875af1925050503d805f8114612cf9576040519150601f19603f3d011682016040523d82523d5f602084013e612cfe565b606091505b5050809350505b505050505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7190613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddf90613e4b565b60405180910390fd5b612df38383836131f3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6d90614255565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612f049190613716565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f68919061343d565b60405180910390a3612f7b8484846131f8565b50505050565b5f8183612f8e91906139e9565b905092915050565b5f8183612fa39190613a57565b905092915050565b5f600267ffffffffffffffff811115612fc757612fc6614273565b5b604051908082528060200260200182016040528015612ff55781602001602082028036833780820191505090505b50905030815f8151811061300c5761300b6142a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130d391906142e1565b816001815181106130e7576130e66142a0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061314c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131ad9594939291906143fc565b5f604051808303815f87803b1580156131c4575f80fd5b505af11580156131d6573d5f803e3d5ffd5b505050505050565b5f81836131eb9190614171565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61323f826131fd565b6132498185613207565b9350613259818560208601613217565b61326281613225565b840191505092915050565b5f6020820190508181035f8301526132858184613235565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132ba82613291565b9050919050565b6132ca816132b0565b81146132d4575f80fd5b50565b5f813590506132e5816132c1565b92915050565b5f819050919050565b6132fd816132eb565b8114613307575f80fd5b50565b5f81359050613318816132f4565b92915050565b5f80604083850312156133345761333361328d565b5b5f613341858286016132d7565b92505060206133528582860161330a565b9150509250929050565b5f8115159050919050565b6133708161335c565b82525050565b5f6020820190506133895f830184613367565b92915050565b5f602082840312156133a4576133a361328d565b5b5f6133b1848285016132d7565b91505092915050565b5f819050919050565b5f6133dd6133d86133d384613291565b6133ba565b613291565b9050919050565b5f6133ee826133c3565b9050919050565b5f6133ff826133e4565b9050919050565b61340f816133f5565b82525050565b5f6020820190506134285f830184613406565b92915050565b613437816132eb565b82525050565b5f6020820190506134505f83018461342e565b92915050565b5f805f6060848603121561346d5761346c61328d565b5b5f61347a868287016132d7565b935050602061348b868287016132d7565b925050604061349c8682870161330a565b9150509250925092565b5f60ff82169050919050565b6134bb816134a6565b82525050565b5f6020820190506134d45f8301846134b2565b92915050565b6134e3816132b0565b82525050565b5f6020820190506134fc5f8301846134da565b92915050565b5f602082840312156135175761351661328d565b5b5f6135248482850161330a565b91505092915050565b6135368161335c565b8114613540575f80fd5b50565b5f813590506135518161352d565b92915050565b5f806040838503121561356d5761356c61328d565b5b5f61357a858286016132d7565b925050602061358b85828601613543565b9150509250929050565b5f602082840312156135aa576135a961328d565b5b5f6135b784828501613543565b91505092915050565b5f80604083850312156135d6576135d561328d565b5b5f6135e3858286016132d7565b92505060206135f4858286016132d7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061364257607f821691505b602082108103613655576136546135fe565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6136b5602883613207565b91506136c08261365b565b604082019050919050565b5f6020820190508181035f8301526136e2816136a9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613720826132eb565b915061372b836132eb565b9250828201905080821115613743576137426136e9565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61377d602083613207565b915061378882613749565b602082019050919050565b5f6020820190508181035f8301526137aa81613771565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d205f8201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b5f61380b602783613207565b9150613816826137b1565b604082019050919050565b5f6020820190508181035f830152613838816137ff565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613899603983613207565b91506138a48261383f565b604082019050919050565b5f6020820190508181035f8301526138c68161388d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613927602583613207565b9150613932826138cd565b604082019050919050565b5f6020820190508181035f8301526139548161391b565b9050919050565b7f4f6e6c79204d61726b6574696e672057616c6c65742043616e2043616c6c20745f8201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b5f6139b5602c83613207565b91506139c08261395b565b604082019050919050565b5f6020820190508181035f8301526139e2816139a9565b9050919050565b5f6139f3826132eb565b91506139fe836132eb565b9250828202613a0c816132eb565b91508282048414831517613a2357613a226136e9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613a61826132eb565b9150613a6c836132eb565b925082613a7c57613a7b613a2a565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613ae1603583613207565b9150613aec82613a87565b604082019050919050565b5f6020820190508181035f830152613b0e81613ad5565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613b6f603483613207565b9150613b7a82613b15565b604082019050919050565b5f6020820190508181035f830152613b9c81613b63565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613bfd602683613207565b9150613c0882613ba3565b604082019050919050565b5f6020820190508181035f830152613c2a81613bf1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483613207565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283613207565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583613207565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383613207565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f596f7520617265206120626f74000000000000000000000000000000000000005f82015250565b5f613e9d600d83613207565b9150613ea882613e69565b602082019050919050565b5f6020820190508181035f830152613eca81613e91565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613f05601683613207565b9150613f1082613ed1565b602082019050919050565b5f6020820190508181035f830152613f3281613ef9565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f613fb9604983613207565b9150613fc482613f39565b606082019050919050565b5f6020820190508181035f830152613fe681613fad565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b5f614047602883613207565b915061405282613fed565b604082019050919050565b5f6020820190508181035f8301526140748161403b565b9050919050565b7f4d61782057616c6c6574204578636565646564000000000000000000000000005f82015250565b5f6140af601383613207565b91506140ba8261407b565b602082019050919050565b5f6020820190508181035f8301526140dc816140a3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b5f61413d602a83613207565b9150614148826140e3565b604082019050919050565b5f6020820190508181035f83015261416a81614131565b9050919050565b5f61417b826132eb565b9150614186836132eb565b925082820390508181111561419e5761419d6136e9565b5b92915050565b5f81905092915050565b50565b5f6141bc5f836141a4565b91506141c7826141ae565b5f82019050919050565b5f6141db826141b1565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61423f602683613207565b915061424a826141e5565b604082019050919050565b5f6020820190508181035f83015261426c81614233565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142db816132c1565b92915050565b5f602082840312156142f6576142f561328d565b5b5f614303848285016142cd565b91505092915050565b5f819050919050565b5f61432f61432a6143258461430c565b6133ba565b6132eb565b9050919050565b61433f81614315565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614377816132b0565b82525050565b5f614388838361436e565b60208301905092915050565b5f602082019050919050565b5f6143aa82614345565b6143b4818561434f565b93506143bf8361435f565b805f5b838110156143ef5781516143d6888261437d565b97506143e183614394565b9250506001810190506143c2565b5085935050505092915050565b5f60a08201905061440f5f83018861342e565b61441c6020830187614336565b818103604083015261442e81866143a0565b905061443d60608301856134da565b61444a608083018461342e565b969550505050505056fea26469706673582212207ad9ca6a61524592cc6191632f4b619fd72c0366a4cedc3eb7597fc918350e5964736f6c634300081a0033
Deployed Bytecode Sourcemap
32121:12382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9532:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11699:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33114:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32198:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10652:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12350:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32943:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10494:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13251:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32913:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32256:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32567:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38475:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32499:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32647:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10823:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2767:103;;;;;;;;;;;;;:::i;:::-;;36735;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35645:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37379:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32384:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32465:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42936:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35481:112;;;;;;;;;;;;;:::i;:::-;;2116:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36627:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9751:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37728:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13969:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11163:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33368:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32607:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38236:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36960:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44335:165;;;;;;;;;;;;;:::i;:::-;;32865:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36032:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11401:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32423:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35827:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36846:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3025:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32534:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9532:100;9586:13;9619:5;9612:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9532:100;:::o;11699:169::-;11782:4;11799:39;11808:12;:10;:12::i;:::-;11822:7;11831:6;11799:8;:39::i;:::-;11856:4;11849:11;;11699:169;;;;:::o;33114:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32198:51::-;;;:::o;10652:108::-;10713:7;10740:12;;10733:19;;10652:108;:::o;12350:492::-;12490:4;12507:36;12517:6;12525:9;12536:6;12507:9;:36::i;:::-;12556:24;12583:11;:19;12595:6;12583:19;;;;;;;;;;;;;;;:33;12603:12;:10;:12::i;:::-;12583:33;;;;;;;;;;;;;;;;12556:60;;12655:6;12635:16;:26;;12627:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12742:57;12751:6;12759:12;:10;:12::i;:::-;12792:6;12773:16;:25;12742:8;:57::i;:::-;12830:4;12823:11;;;12350:492;;;;;:::o;32943:22::-;;;;:::o;10494:93::-;10552:5;10577:2;10570:9;;10494:93;:::o;13251:215::-;13339:4;13356:80;13365:12;:10;:12::i;:::-;13379:7;13425:10;13388:11;:25;13400:12;:10;:12::i;:::-;13388:25;;;;;;;;;;;;;;;:34;13414:7;13388:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13356:8;:80::i;:::-;13454:4;13447:11;;13251:215;;;;:::o;32913:21::-;;;;:::o;32256:38::-;;;:::o;32567:33::-;;;;;;;;;;;;;:::o;38475:126::-;38541:4;38565:19;:28;38585:7;38565:28;;;;;;;;;;;;;;;;;;;;;;;;;38558:35;;38475:126;;;:::o;32499:28::-;;;;:::o;32647:31::-;;;;;;;;;;;;;:::o;10823:127::-;10897:7;10924:9;:18;10934:7;10924:18;;;;;;;;;;;;;;;;10917:25;;10823:127;;;:::o;2767:103::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2832:30:::1;2859:1;2832:18;:30::i;:::-;2767:103::o:0;36735:::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36826:4:::1;36817:6;:13;;;;36735:103:::0;:::o;35645:121::-;35697:4;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35731:5:::1;35714:14;;:22;;;;;;;;;;;;;;;;;;35754:4;35747:11;;35645:121:::0;:::o;37379:341::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37499:4:::1;37494:162;;37556:13;37546:23;;:6;:23;;::::0;37520:124:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37494:162;37708:4;37666:31;:39;37698:6;37666:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37379:341:::0;;:::o;32384:30::-;;;;;;;;;;;;;:::o;32465:27::-;;;;:::o;42936:126::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43041:13:::1;43019:10;:19;43030:7;43019:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;42936:126:::0;;:::o;35481:112::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35552:4:::1;35536:13;;:20;;;;;;;;;;;;;;;;;;35581:4;35567:11;;:18;;;;;;;;;;;;;;;;;;35481:112::o:0;2116:87::-;2162:7;2189:6;;;;;;;;;;;2182:13;;2116:87;:::o;36627:100::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36712:7:::1;36698:11;;:21;;;;;;;;;;;;;;;;;;36627:100:::0;:::o;9751:104::-;9807:13;9840:7;9833:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9751:104;:::o;37728:304::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37872:13:::1;37864:21;;:4;:21;;::::0;37842:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37983:41;38012:4;38018:5;37983:28;:41::i;:::-;37728:304:::0;;:::o;13969:413::-;14062:4;14079:24;14106:11;:25;14118:12;:10;:12::i;:::-;14106:25;;;;;;;;;;;;;;;:34;14132:7;14106:34;;;;;;;;;;;;;;;;14079:61;;14179:15;14159:16;:35;;14151:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14272:67;14281:12;:10;:12::i;:::-;14295:7;14323:15;14304:16;:34;14272:8;:67::i;:::-;14370:4;14363:11;;;13969:413;;;;:::o;11163:175::-;11249:4;11266:42;11276:12;:10;:12::i;:::-;11290:9;11301:6;11266:9;:42::i;:::-;11326:4;11319:11;;11163:175;;;;:::o;33368:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32607:33::-;;;;;;;;;;;;;:::o;38236:231::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38396:15:::1;;;;;;;;;;;38353:59;;38376:18;38353:59;;;;;;;;;;;;38441:18;38423:15;;:36;;;;;;;;;;;;;;;;;;38236:231:::0;:::o;36960:182::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37076:8:::1;37045:19;:28;37065:7;37045:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37116:7;37100:34;;;37125:8;37100:34;;;;;;:::i;:::-;;;;;;;;36960:182:::0;;:::o;44335:165::-;44402:15;;;;;;;;;;;44388:29;;:10;:29;;;44380:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;44477:15;:13;:15::i;:::-;44335:165::o;32865:39::-;;;;;;;;;;;;;:::o;36032:497::-;36140:4;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36219:6:::1;36214:1;36198:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36197:28;;;;:::i;:::-;36184:9;:41;;36162:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;36374:4;36369:1;36353:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36352:26;;;;:::i;:::-;36339:9;:39;;36317:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;36490:9;36469:18;:30;;;;36517:4;36510:11;;36032:497:::0;;;:::o;11401:151::-;11490:7;11517:11;:18;11529:5;11517:18;;;;;;;;;;;;;;;:27;11536:7;11517:27;;;;;;;;;;;;;;;;11510:34;;11401:151;;;;:::o;32423:33::-;;;;:::o;35827:135::-;35887:4;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35927:5:::1;35904:20;;:28;;;;;;;;;;;;;;;;;;35950:4;35943:11;;35827:135:::0;:::o;36846:106::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36940:4:::1;36930:7;:14;;;;36846:106:::0;:::o;3025:201::-;2347:12;:10;:12::i;:::-;2336:23;;:7;:5;:7::i;:::-;:23;;;2328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3134:1:::1;3114:22;;:8;:22;;::::0;3106:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3190:28;3209:8;3190:18;:28::i;:::-;3025:201:::0;:::o;32534:24::-;;;;:::o;789:98::-;842:7;869:10;862:17;;789:98;:::o;17663:380::-;17816:1;17799:19;;:5;:19;;;17791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17897:1;17878:21;;:7;:21;;;17870:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17981:6;17951:11;:18;17963:5;17951:18;;;;;;;;;;;;;;;:27;17970:7;17951:27;;;;;;;;;;;;;;;:36;;;;18019:7;18003:32;;18012:5;18003:32;;;18028:6;18003:32;;;;;;:::i;:::-;;;;;;;;17663:380;;;:::o;38659:4269::-;38807:1;38791:18;;:4;:18;;;38783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38884:1;38870:16;;:2;:16;;;38862:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38946:10;:16;38957:4;38946:16;;;;;;;;;;;;;;;;;;;;;;;;;38945:17;:36;;;;;38967:10;:14;38978:2;38967:14;;;;;;;;;;;;;;;;;;;;;;;;;38966:15;38945:36;38937:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39026:1;39016:6;:11;39012:93;;39044:28;39060:4;39066:2;39070:1;39044:15;:28::i;:::-;39087:7;;39012:93;39121:14;;;;;;;;;;;39117:2447;;;39182:7;:5;:7::i;:::-;39174:15;;:4;:15;;;;:49;;;;;39216:7;:5;:7::i;:::-;39210:13;;:2;:13;;;;39174:49;:86;;;;;39258:1;39244:16;;:2;:16;;;;39174:86;:128;;;;;39295:6;39281:21;;:2;:21;;;;39174:128;:158;;;;;39324:8;;;;;;;;;;;39323:9;39174:158;39152:2401;;;39372:13;;;;;;;;;;;39367:223;;39444:19;:25;39464:4;39444:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39473:19;:23;39493:2;39473:23;;;;;;;;;;;;;;;;;;;;;;;;;39444:52;39410:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;39367:223;39746:20;;;;;;;;;;;39742:641;;;39827:7;:5;:7::i;:::-;39821:13;;:2;:13;;;;:72;;;;;39877:15;39863:30;;:2;:30;;;;39821:72;:129;;;;;39936:13;39922:28;;:2;:28;;;;39821:129;39791:573;;;40114:12;40039:28;:39;40068:9;40039:39;;;;;;;;;;;;;;;;:87;40001:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;40328:12;40286:28;:39;40315:9;40286:39;;;;;;;;;;;;;;;:54;;;;39791:573;39742:641;40457:25;:31;40483:4;40457:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;40514:31;:35;40546:2;40514:35;;;;;;;;;;;;;;;;;;;;;;;;;40513:36;40457:92;40431:1107;;;40636:12;;40626:6;:22;;40592:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;40823:9;;40806:13;40816:2;40806:9;:13::i;:::-;40797:6;:22;;;;:::i;:::-;:35;;40763:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40431:1107;;;41001:25;:29;41027:2;41001:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41056:31;:37;41088:4;41056:37;;;;;;;;;;;;;;;;;;;;;;;;;41055:38;41001:92;40975:563;;;41180:13;;41170:6;:23;;41136:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;40975:563;;;41318:31;:35;41350:2;41318:35;;;;;;;;;;;;;;;;;;;;;;;;;41313:225;;41438:9;;41421:13;41431:2;41421:9;:13::i;:::-;41412:6;:22;;;;:::i;:::-;:35;;41378:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41313:225;40975:563;40431:1107;39152:2401;39117:2447;41576:28;41607:24;41625:4;41607:9;:24::i;:::-;41576:55;;41644:12;41683:18;;41659:20;:42;;41644:57;;41732:7;:35;;;;;41756:11;;;;;;;;;;;41732:35;:61;;;;;41785:8;;;;;;;;;;;41784:9;41732:61;:110;;;;;41811:25;:31;41837:4;41811:31;;;;;;;;;;;;;;;;;;;;;;;;;41810:32;41732:110;:153;;;;;41860:19;:25;41880:4;41860:25;;;;;;;;;;;;;;;;;;;;;;;;;41859:26;41732:153;:194;;;;;41903:19;:23;41923:2;41903:23;;;;;;;;;;;;;;;;;;;;;;;;;41902:24;41732:194;41714:331;;;41964:4;41953:8;;:15;;;;;;;;;;;;;;;;;;41985;:13;:15::i;:::-;42028:5;42017:8;;:16;;;;;;;;;;;;;;;;;;41714:331;42057:12;42073:8;;;;;;;;;;;42072:9;42057:24;;42183:19;:25;42203:4;42183:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42212:19;:23;42232:2;42212:23;;;;;;;;;;;;;;;;;;;;;;;;;42183:52;42179:100;;;42262:5;42252:15;;42179:100;42291:12;42396:7;42392:483;;;42448:25;:29;42474:2;42448:29;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;42491:1;42481:7;;:11;42448:44;42444:282;;;42520:28;42544:3;42520:19;42531:7;;42520:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;42513:35;;42444:282;;;42610:25;:31;42636:4;42610:31;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42654:1;42645:6;;:10;42610:45;42606:120;;;42683:27;42706:3;42683:18;42694:6;;42683;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;42676:34;;42606:120;42444:282;42753:1;42746:4;:8;42742:91;;;42775:42;42791:4;42805;42812;42775:15;:42::i;:::-;42742:91;42859:4;42849:14;;;;;:::i;:::-;;;42392:483;42887:33;42903:4;42909:2;42913:6;42887:15;:33::i;:::-;38772:4156;;;;38659:4269;;;;:::o;3386:191::-;3460:16;3479:6;;;;;;;;;;;3460:25;;3505:8;3496:6;;:17;;;;;;;;;;;;;;;;;;3560:8;3529:40;;3550:8;3529:40;;;;;;;;;;;;3449:128;3386:191;:::o;38040:188::-;38157:5;38123:25;:31;38149:4;38123:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38214:5;38180:40;;38208:4;38180:40;;;;;;;;;;;;38040:188;;:::o;43669:658::-;43713:23;43739:24;43757:4;43739:9;:24::i;:::-;43713:50;;43774:12;43822:1;43803:15;:20;43799:60;;43841:7;;;;43799:60;43914:2;43893:18;;:23;;;;:::i;:::-;43875:15;:41;43871:115;;;43972:2;43951:18;;:23;;;;:::i;:::-;43933:41;;43871:115;43998:25;44026:21;43998:49;;44058:33;44075:15;44058:16;:33::i;:::-;44102:16;44121:44;44147:17;44121:21;:25;;:44;;;;:::i;:::-;44102:63;;44226:1;44215:8;:12;44211:99;;;44257:15;;;;;;;;;;;:20;;44285:8;44257:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44244:54;;;;;44211:99;43702:625;;;;43669:658;:::o;14872:743::-;15030:1;15012:20;;:6;:20;;;15004:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15114:1;15093:23;;:9;:23;;;15085:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15179:47;15200:6;15208:9;15219:6;15179:20;:47::i;:::-;15239:21;15263:9;:17;15273:6;15263:17;;;;;;;;;;;;;;;;15239:41;;15316:6;15299:13;:23;;15291:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15437:6;15421:13;:22;15401:9;:17;15411:6;15401:17;;;;;;;;;;;;;;;:42;;;;15489:6;15465:9;:20;15475:9;15465:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15530:9;15513:35;;15522:6;15513:35;;;15541:6;15513:35;;;;;;:::i;:::-;;;;;;;;15561:46;15581:6;15589:9;15600:6;15561:19;:46::i;:::-;14993:622;14872:743;;;:::o;23116:98::-;23174:7;23205:1;23201;:5;;;;:::i;:::-;23194:12;;23116:98;;;;:::o;23515:::-;23573:7;23604:1;23600;:5;;;;:::i;:::-;23593:12;;23515:98;;;;:::o;43070:589::-;43196:21;43234:1;43220:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43196:40;;43265:4;43247;43252:1;43247:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43291:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43281:4;43286:1;43281:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43326:62;43343:4;43358:15;43376:11;43326:8;:62::i;:::-;43427:15;:66;;;43508:11;43534:1;43578:4;43605;43625:15;43427:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43125:534;43070:589;:::o;22759:98::-;22817:7;22848:1;22844;:5;;;;:::i;:::-;22837:12;;22759:98;;;;:::o;18643:125::-;;;;:::o;19372:124::-;;;;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:60::-;3702:3;3723:5;3716:12;;3674:60;;;:::o;3740:142::-;3790:9;3823:53;3841:34;3850:24;3868:5;3850:24;:::i;:::-;3841:34;:::i;:::-;3823:53;:::i;:::-;3810:66;;3740:142;;;:::o;3888:126::-;3938:9;3971:37;4002:5;3971:37;:::i;:::-;3958:50;;3888:126;;;:::o;4020:153::-;4097:9;4130:37;4161:5;4130:37;:::i;:::-;4117:50;;4020:153;;;:::o;4179:185::-;4293:64;4351:5;4293:64;:::i;:::-;4288:3;4281:77;4179:185;;:::o;4370:276::-;4490:4;4528:2;4517:9;4513:18;4505:26;;4541:98;4636:1;4625:9;4621:17;4612:6;4541:98;:::i;:::-;4370:276;;;;:::o;4652:118::-;4739:24;4757:5;4739:24;:::i;:::-;4734:3;4727:37;4652:118;;:::o;4776:222::-;4869:4;4907:2;4896:9;4892:18;4884:26;;4920:71;4988:1;4977:9;4973:17;4964:6;4920:71;:::i;:::-;4776:222;;;;:::o;5004:619::-;5081:6;5089;5097;5146:2;5134:9;5125:7;5121:23;5117:32;5114:119;;;5152:79;;:::i;:::-;5114:119;5272:1;5297:53;5342:7;5333:6;5322:9;5318:22;5297:53;:::i;:::-;5287:63;;5243:117;5399:2;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5370:118;5527:2;5553:53;5598:7;5589:6;5578:9;5574:22;5553:53;:::i;:::-;5543:63;;5498:118;5004:619;;;;;:::o;5629:86::-;5664:7;5704:4;5697:5;5693:16;5682:27;;5629:86;;;:::o;5721:112::-;5804:22;5820:5;5804:22;:::i;:::-;5799:3;5792:35;5721:112;;:::o;5839:214::-;5928:4;5966:2;5955:9;5951:18;5943:26;;5979:67;6043:1;6032:9;6028:17;6019:6;5979:67;:::i;:::-;5839:214;;;;:::o;6059:118::-;6146:24;6164:5;6146:24;:::i;:::-;6141:3;6134:37;6059:118;;:::o;6183:222::-;6276:4;6314:2;6303:9;6299:18;6291:26;;6327:71;6395:1;6384:9;6380:17;6371:6;6327:71;:::i;:::-;6183:222;;;;:::o;6411:329::-;6470:6;6519:2;6507:9;6498:7;6494:23;6490:32;6487:119;;;6525:79;;:::i;:::-;6487:119;6645:1;6670:53;6715:7;6706:6;6695:9;6691:22;6670:53;:::i;:::-;6660:63;;6616:117;6411:329;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:468::-;7072:6;7080;7129:2;7117:9;7108:7;7104:23;7100:32;7097:119;;;7135:79;;:::i;:::-;7097:119;7255:1;7280:53;7325:7;7316:6;7305:9;7301:22;7280:53;:::i;:::-;7270:63;;7226:117;7382:2;7408:50;7450:7;7441:6;7430:9;7426:22;7408:50;:::i;:::-;7398:60;;7353:115;7007:468;;;;;:::o;7481:323::-;7537:6;7586:2;7574:9;7565:7;7561:23;7557:32;7554:119;;;7592:79;;:::i;:::-;7554:119;7712:1;7737:50;7779:7;7770:6;7759:9;7755:22;7737:50;:::i;:::-;7727:60;;7683:114;7481:323;;;;:::o;7810:474::-;7878:6;7886;7935:2;7923:9;7914:7;7910:23;7906:32;7903:119;;;7941:79;;:::i;:::-;7903:119;8061:1;8086:53;8131:7;8122:6;8111:9;8107:22;8086:53;:::i;:::-;8076:63;;8032:117;8188:2;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8159:118;7810:474;;;;;:::o;8290:180::-;8338:77;8335:1;8328:88;8435:4;8432:1;8425:15;8459:4;8456:1;8449:15;8476:320;8520:6;8557:1;8551:4;8547:12;8537:22;;8604:1;8598:4;8594:12;8625:18;8615:81;;8681:4;8673:6;8669:17;8659:27;;8615:81;8743:2;8735:6;8732:14;8712:18;8709:38;8706:84;;8762:18;;:::i;:::-;8706:84;8527:269;8476:320;;;:::o;8802:227::-;8942:34;8938:1;8930:6;8926:14;8919:58;9011:10;9006:2;8998:6;8994:15;8987:35;8802:227;:::o;9035:366::-;9177:3;9198:67;9262:2;9257:3;9198:67;:::i;:::-;9191:74;;9274:93;9363:3;9274:93;:::i;:::-;9392:2;9387:3;9383:12;9376:19;;9035:366;;;:::o;9407:419::-;9573:4;9611:2;9600:9;9596:18;9588:26;;9660:9;9654:4;9650:20;9646:1;9635:9;9631:17;9624:47;9688:131;9814:4;9688:131;:::i;:::-;9680:139;;9407:419;;;:::o;9832:180::-;9880:77;9877:1;9870:88;9977:4;9974:1;9967:15;10001:4;9998:1;9991:15;10018:191;10058:3;10077:20;10095:1;10077:20;:::i;:::-;10072:25;;10111:20;10129:1;10111:20;:::i;:::-;10106:25;;10154:1;10151;10147:9;10140:16;;10175:3;10172:1;10169:10;10166:36;;;10182:18;;:::i;:::-;10166:36;10018:191;;;;:::o;10215:182::-;10355:34;10351:1;10343:6;10339:14;10332:58;10215:182;:::o;10403:366::-;10545:3;10566:67;10630:2;10625:3;10566:67;:::i;:::-;10559:74;;10642:93;10731:3;10642:93;:::i;:::-;10760:2;10755:3;10751:12;10744:19;;10403:366;;;:::o;10775:419::-;10941:4;10979:2;10968:9;10964:18;10956:26;;11028:9;11022:4;11018:20;11014:1;11003:9;10999:17;10992:47;11056:131;11182:4;11056:131;:::i;:::-;11048:139;;10775:419;;;:::o;11200:226::-;11340:34;11336:1;11328:6;11324:14;11317:58;11409:9;11404:2;11396:6;11392:15;11385:34;11200:226;:::o;11432:366::-;11574:3;11595:67;11659:2;11654:3;11595:67;:::i;:::-;11588:74;;11671:93;11760:3;11671:93;:::i;:::-;11789:2;11784:3;11780:12;11773:19;;11432:366;;;:::o;11804:419::-;11970:4;12008:2;11997:9;11993:18;11985:26;;12057:9;12051:4;12047:20;12043:1;12032:9;12028:17;12021:47;12085:131;12211:4;12085:131;:::i;:::-;12077:139;;11804:419;;;:::o;12229:244::-;12369:34;12365:1;12357:6;12353:14;12346:58;12438:27;12433:2;12425:6;12421:15;12414:52;12229:244;:::o;12479:366::-;12621:3;12642:67;12706:2;12701:3;12642:67;:::i;:::-;12635:74;;12718:93;12807:3;12718:93;:::i;:::-;12836:2;12831:3;12827:12;12820:19;;12479:366;;;:::o;12851:419::-;13017:4;13055:2;13044:9;13040:18;13032:26;;13104:9;13098:4;13094:20;13090:1;13079:9;13075:17;13068:47;13132:131;13258:4;13132:131;:::i;:::-;13124:139;;12851:419;;;:::o;13276:224::-;13416:34;13412:1;13404:6;13400:14;13393:58;13485:7;13480:2;13472:6;13468:15;13461:32;13276:224;:::o;13506:366::-;13648:3;13669:67;13733:2;13728:3;13669:67;:::i;:::-;13662:74;;13745:93;13834:3;13745:93;:::i;:::-;13863:2;13858:3;13854:12;13847:19;;13506:366;;;:::o;13878:419::-;14044:4;14082:2;14071:9;14067:18;14059:26;;14131:9;14125:4;14121:20;14117:1;14106:9;14102:17;14095:47;14159:131;14285:4;14159:131;:::i;:::-;14151:139;;13878:419;;;:::o;14303:231::-;14443:34;14439:1;14431:6;14427:14;14420:58;14512:14;14507:2;14499:6;14495:15;14488:39;14303:231;:::o;14540:366::-;14682:3;14703:67;14767:2;14762:3;14703:67;:::i;:::-;14696:74;;14779:93;14868:3;14779:93;:::i;:::-;14897:2;14892:3;14888:12;14881:19;;14540:366;;;:::o;14912:419::-;15078:4;15116:2;15105:9;15101:18;15093:26;;15165:9;15159:4;15155:20;15151:1;15140:9;15136:17;15129:47;15193:131;15319:4;15193:131;:::i;:::-;15185:139;;14912:419;;;:::o;15337:410::-;15377:7;15400:20;15418:1;15400:20;:::i;:::-;15395:25;;15434:20;15452:1;15434:20;:::i;:::-;15429:25;;15489:1;15486;15482:9;15511:30;15529:11;15511:30;:::i;:::-;15500:41;;15690:1;15681:7;15677:15;15674:1;15671:22;15651:1;15644:9;15624:83;15601:139;;15720:18;;:::i;:::-;15601:139;15385:362;15337:410;;;;:::o;15753:180::-;15801:77;15798:1;15791:88;15898:4;15895:1;15888:15;15922:4;15919:1;15912:15;15939:185;15979:1;15996:20;16014:1;15996:20;:::i;:::-;15991:25;;16030:20;16048:1;16030:20;:::i;:::-;16025:25;;16069:1;16059:35;;16074:18;;:::i;:::-;16059:35;16116:1;16113;16109:9;16104:14;;15939:185;;;;:::o;16130:240::-;16270:34;16266:1;16258:6;16254:14;16247:58;16339:23;16334:2;16326:6;16322:15;16315:48;16130:240;:::o;16376:366::-;16518:3;16539:67;16603:2;16598:3;16539:67;:::i;:::-;16532:74;;16615:93;16704:3;16615:93;:::i;:::-;16733:2;16728:3;16724:12;16717:19;;16376:366;;;:::o;16748:419::-;16914:4;16952:2;16941:9;16937:18;16929:26;;17001:9;16995:4;16991:20;16987:1;16976:9;16972:17;16965:47;17029:131;17155:4;17029:131;:::i;:::-;17021:139;;16748:419;;;:::o;17173:239::-;17313:34;17309:1;17301:6;17297:14;17290:58;17382:22;17377:2;17369:6;17365:15;17358:47;17173:239;:::o;17418:366::-;17560:3;17581:67;17645:2;17640:3;17581:67;:::i;:::-;17574:74;;17657:93;17746:3;17657:93;:::i;:::-;17775:2;17770:3;17766:12;17759:19;;17418:366;;;:::o;17790:419::-;17956:4;17994:2;17983:9;17979:18;17971:26;;18043:9;18037:4;18033:20;18029:1;18018:9;18014:17;18007:47;18071:131;18197:4;18071:131;:::i;:::-;18063:139;;17790:419;;;:::o;18215:225::-;18355:34;18351:1;18343:6;18339:14;18332:58;18424:8;18419:2;18411:6;18407:15;18400:33;18215:225;:::o;18446:366::-;18588:3;18609:67;18673:2;18668:3;18609:67;:::i;:::-;18602:74;;18685:93;18774:3;18685:93;:::i;:::-;18803:2;18798:3;18794:12;18787:19;;18446:366;;;:::o;18818:419::-;18984:4;19022:2;19011:9;19007:18;18999:26;;19071:9;19065:4;19061:20;19057:1;19046:9;19042:17;19035:47;19099:131;19225:4;19099:131;:::i;:::-;19091:139;;18818:419;;;:::o;19243:223::-;19383:34;19379:1;19371:6;19367:14;19360:58;19452:6;19447:2;19439:6;19435:15;19428:31;19243:223;:::o;19472:366::-;19614:3;19635:67;19699:2;19694:3;19635:67;:::i;:::-;19628:74;;19711:93;19800:3;19711:93;:::i;:::-;19829:2;19824:3;19820:12;19813:19;;19472:366;;;:::o;19844:419::-;20010:4;20048:2;20037:9;20033:18;20025:26;;20097:9;20091:4;20087:20;20083:1;20072:9;20068:17;20061:47;20125:131;20251:4;20125:131;:::i;:::-;20117:139;;19844:419;;;:::o;20269:221::-;20409:34;20405:1;20397:6;20393:14;20386:58;20478:4;20473:2;20465:6;20461:15;20454:29;20269:221;:::o;20496:366::-;20638:3;20659:67;20723:2;20718:3;20659:67;:::i;:::-;20652:74;;20735:93;20824:3;20735:93;:::i;:::-;20853:2;20848:3;20844:12;20837:19;;20496:366;;;:::o;20868:419::-;21034:4;21072:2;21061:9;21057:18;21049:26;;21121:9;21115:4;21111:20;21107:1;21096:9;21092:17;21085:47;21149:131;21275:4;21149:131;:::i;:::-;21141:139;;20868:419;;;:::o;21293:224::-;21433:34;21429:1;21421:6;21417:14;21410:58;21502:7;21497:2;21489:6;21485:15;21478:32;21293:224;:::o;21523:366::-;21665:3;21686:67;21750:2;21745:3;21686:67;:::i;:::-;21679:74;;21762:93;21851:3;21762:93;:::i;:::-;21880:2;21875:3;21871:12;21864:19;;21523:366;;;:::o;21895:419::-;22061:4;22099:2;22088:9;22084:18;22076:26;;22148:9;22142:4;22138:20;22134:1;22123:9;22119:17;22112:47;22176:131;22302:4;22176:131;:::i;:::-;22168:139;;21895:419;;;:::o;22320:222::-;22460:34;22456:1;22448:6;22444:14;22437:58;22529:5;22524:2;22516:6;22512:15;22505:30;22320:222;:::o;22548:366::-;22690:3;22711:67;22775:2;22770:3;22711:67;:::i;:::-;22704:74;;22787:93;22876:3;22787:93;:::i;:::-;22905:2;22900:3;22896:12;22889:19;;22548:366;;;:::o;22920:419::-;23086:4;23124:2;23113:9;23109:18;23101:26;;23173:9;23167:4;23163:20;23159:1;23148:9;23144:17;23137:47;23201:131;23327:4;23201:131;:::i;:::-;23193:139;;22920:419;;;:::o;23345:163::-;23485:15;23481:1;23473:6;23469:14;23462:39;23345:163;:::o;23514:366::-;23656:3;23677:67;23741:2;23736:3;23677:67;:::i;:::-;23670:74;;23753:93;23842:3;23753:93;:::i;:::-;23871:2;23866:3;23862:12;23855:19;;23514:366;;;:::o;23886:419::-;24052:4;24090:2;24079:9;24075:18;24067:26;;24139:9;24133:4;24129:20;24125:1;24114:9;24110:17;24103:47;24167:131;24293:4;24167:131;:::i;:::-;24159:139;;23886:419;;;:::o;24311:172::-;24451:24;24447:1;24439:6;24435:14;24428:48;24311:172;:::o;24489:366::-;24631:3;24652:67;24716:2;24711:3;24652:67;:::i;:::-;24645:74;;24728:93;24817:3;24728:93;:::i;:::-;24846:2;24841:3;24837:12;24830:19;;24489:366;;;:::o;24861:419::-;25027:4;25065:2;25054:9;25050:18;25042:26;;25114:9;25108:4;25104:20;25100:1;25089:9;25085:17;25078:47;25142:131;25268:4;25142:131;:::i;:::-;25134:139;;24861:419;;;:::o;25286:297::-;25426:34;25422:1;25414:6;25410:14;25403:58;25495:34;25490:2;25482:6;25478:15;25471:59;25564:11;25559:2;25551:6;25547:15;25540:36;25286:297;:::o;25589:366::-;25731:3;25752:67;25816:2;25811:3;25752:67;:::i;:::-;25745:74;;25828:93;25917:3;25828:93;:::i;:::-;25946:2;25941:3;25937:12;25930:19;;25589:366;;;:::o;25961:419::-;26127:4;26165:2;26154:9;26150:18;26142:26;;26214:9;26208:4;26204:20;26200:1;26189:9;26185:17;26178:47;26242:131;26368:4;26242:131;:::i;:::-;26234:139;;25961:419;;;:::o;26386:227::-;26526:34;26522:1;26514:6;26510:14;26503:58;26595:10;26590:2;26582:6;26578:15;26571:35;26386:227;:::o;26619:366::-;26761:3;26782:67;26846:2;26841:3;26782:67;:::i;:::-;26775:74;;26858:93;26947:3;26858:93;:::i;:::-;26976:2;26971:3;26967:12;26960:19;;26619:366;;;:::o;26991:419::-;27157:4;27195:2;27184:9;27180:18;27172:26;;27244:9;27238:4;27234:20;27230:1;27219:9;27215:17;27208:47;27272:131;27398:4;27272:131;:::i;:::-;27264:139;;26991:419;;;:::o;27416:169::-;27556:21;27552:1;27544:6;27540:14;27533:45;27416:169;:::o;27591:366::-;27733:3;27754:67;27818:2;27813:3;27754:67;:::i;:::-;27747:74;;27830:93;27919:3;27830:93;:::i;:::-;27948:2;27943:3;27939:12;27932:19;;27591:366;;;:::o;27963:419::-;28129:4;28167:2;28156:9;28152:18;28144:26;;28216:9;28210:4;28206:20;28202:1;28191:9;28187:17;28180:47;28244:131;28370:4;28244:131;:::i;:::-;28236:139;;27963:419;;;:::o;28388:229::-;28528:34;28524:1;28516:6;28512:14;28505:58;28597:12;28592:2;28584:6;28580:15;28573:37;28388:229;:::o;28623:366::-;28765:3;28786:67;28850:2;28845:3;28786:67;:::i;:::-;28779:74;;28862:93;28951:3;28862:93;:::i;:::-;28980:2;28975:3;28971:12;28964:19;;28623:366;;;:::o;28995:419::-;29161:4;29199:2;29188:9;29184:18;29176:26;;29248:9;29242:4;29238:20;29234:1;29223:9;29219:17;29212:47;29276:131;29402:4;29276:131;:::i;:::-;29268:139;;28995:419;;;:::o;29420:194::-;29460:4;29480:20;29498:1;29480:20;:::i;:::-;29475:25;;29514:20;29532:1;29514:20;:::i;:::-;29509:25;;29558:1;29555;29551:9;29543:17;;29582:1;29576:4;29573:11;29570:37;;;29587:18;;:::i;:::-;29570:37;29420:194;;;;:::o;29620:147::-;29721:11;29758:3;29743:18;;29620:147;;;;:::o;29773:114::-;;:::o;29893:398::-;30052:3;30073:83;30154:1;30149:3;30073:83;:::i;:::-;30066:90;;30165:93;30254:3;30165:93;:::i;:::-;30283:1;30278:3;30274:11;30267:18;;29893:398;;;:::o;30297:379::-;30481:3;30503:147;30646:3;30503:147;:::i;:::-;30496:154;;30667:3;30660:10;;30297:379;;;:::o;30682:225::-;30822:34;30818:1;30810:6;30806:14;30799:58;30891:8;30886:2;30878:6;30874:15;30867:33;30682:225;:::o;30913:366::-;31055:3;31076:67;31140:2;31135:3;31076:67;:::i;:::-;31069:74;;31152:93;31241:3;31152:93;:::i;:::-;31270:2;31265:3;31261:12;31254:19;;30913:366;;;:::o;31285:419::-;31451:4;31489:2;31478:9;31474:18;31466:26;;31538:9;31532:4;31528:20;31524:1;31513:9;31509:17;31502:47;31566:131;31692:4;31566:131;:::i;:::-;31558:139;;31285:419;;;:::o;31710:180::-;31758:77;31755:1;31748:88;31855:4;31852:1;31845:15;31879:4;31876:1;31869:15;31896:180;31944:77;31941:1;31934:88;32041:4;32038:1;32031:15;32065:4;32062:1;32055:15;32082:143;32139:5;32170:6;32164:13;32155:22;;32186:33;32213:5;32186:33;:::i;:::-;32082:143;;;;:::o;32231:351::-;32301:6;32350:2;32338:9;32329:7;32325:23;32321:32;32318:119;;;32356:79;;:::i;:::-;32318:119;32476:1;32501:64;32557:7;32548:6;32537:9;32533:22;32501:64;:::i;:::-;32491:74;;32447:128;32231:351;;;;:::o;32588:85::-;32633:7;32662:5;32651:16;;32588:85;;;:::o;32679:158::-;32737:9;32770:61;32788:42;32797:32;32823:5;32797:32;:::i;:::-;32788:42;:::i;:::-;32770:61;:::i;:::-;32757:74;;32679:158;;;:::o;32843:147::-;32938:45;32977:5;32938:45;:::i;:::-;32933:3;32926:58;32843:147;;:::o;32996:114::-;33063:6;33097:5;33091:12;33081:22;;32996:114;;;:::o;33116:184::-;33215:11;33249:6;33244:3;33237:19;33289:4;33284:3;33280:14;33265:29;;33116:184;;;;:::o;33306:132::-;33373:4;33396:3;33388:11;;33426:4;33421:3;33417:14;33409:22;;33306:132;;;:::o;33444:108::-;33521:24;33539:5;33521:24;:::i;:::-;33516:3;33509:37;33444:108;;:::o;33558:179::-;33627:10;33648:46;33690:3;33682:6;33648:46;:::i;:::-;33726:4;33721:3;33717:14;33703:28;;33558:179;;;;:::o;33743:113::-;33813:4;33845;33840:3;33836:14;33828:22;;33743:113;;;:::o;33892:732::-;34011:3;34040:54;34088:5;34040:54;:::i;:::-;34110:86;34189:6;34184:3;34110:86;:::i;:::-;34103:93;;34220:56;34270:5;34220:56;:::i;:::-;34299:7;34330:1;34315:284;34340:6;34337:1;34334:13;34315:284;;;34416:6;34410:13;34443:63;34502:3;34487:13;34443:63;:::i;:::-;34436:70;;34529:60;34582:6;34529:60;:::i;:::-;34519:70;;34375:224;34362:1;34359;34355:9;34350:14;;34315:284;;;34319:14;34615:3;34608:10;;34016:608;;;33892:732;;;;:::o;34630:831::-;34893:4;34931:3;34920:9;34916:19;34908:27;;34945:71;35013:1;35002:9;34998:17;34989:6;34945:71;:::i;:::-;35026:80;35102:2;35091:9;35087:18;35078:6;35026:80;:::i;:::-;35153:9;35147:4;35143:20;35138:2;35127:9;35123:18;35116:48;35181:108;35284:4;35275:6;35181:108;:::i;:::-;35173:116;;35299:72;35367:2;35356:9;35352:18;35343:6;35299:72;:::i;:::-;35381:73;35449:3;35438:9;35434:19;35425:6;35381:73;:::i;:::-;34630:831;;;;;;;;:::o
Swarm Source
ipfs://7ad9ca6a61524592cc6191632f4b619fd72c0366a4cedc3eb7597fc918350e59
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.