ERC-20
Overview
Max Total Supply
1,000,000 OF
Holders
53
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.681070623293201152 OFValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OLDFLOKI
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-01-04 */ /** *Submitted for verification at Etherscan.io on 2022-12-21 */ // https://t.me/OldFlokiPortal // https://twitter.com/OldFlokiETH // SPDX-License-Identifier: MIT /** **/ pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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); } /** * @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); } // Safe Math Helpers // -------------------------------------------------------------- library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @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_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } /** * @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 _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: cannot send to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // Uniswap Router // -------------------------------------------------------------- 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 allPairsLength() external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } 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; } interface IUniswapV2Router01 { 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 removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // Main Contract Logic // -------------------------------------------------------------- contract OLDFLOKI is Context, IERC20, Ownable { // Imports using SafeMath for uint256; using Address for address; // Configurables ----------------------------- // Context"; string private _name = "OLD FLOKI"; string private _symbol = "OF"; uint8 private _decimals = 18; // Supply uint256 private _totalSupply = 1 * 1e6 * 1e18; uint256 private minimumTokensBeforeSwap = _totalSupply * 1 / 500; // Restrictions uint256 public _maxTxAmount = (_totalSupply * 30) / 1000; uint256 public _walletMax = (_totalSupply * 30) / 1000; bool public checkWalletLimit = true; // wallets address payable public liquidityWallet = payable(0xbe20f8B18ed364855b4D692F0dF4f4A6c9c183F1); address payable public operationsWallet = payable(0xbe20f8B18ed364855b4D692F0dF4f4A6c9c183F1); address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; // fees uint256 public liquidityFeeBuy = 0; uint256 public operationsFeeBuy = 10; uint256 public totalFeesBuy; uint256 public maxTotalFeeBuy = 10; // fees uint256 public liquidityFeeSell = 0; uint256 public operationsFeeSell = 40; uint256 public totalFeesSell; uint256 public maxTotalFeeSell = 99; // distribution ratio uint256 public _liquiditySharePercentage = 0; uint256 public _operationsSharePercentage = 100; uint256 public _totalDistributionShares; // max amounts mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public isExcludedFromFee; mapping (address => bool) public isWalletLimitExempt; mapping (address => bool) isTxLimitExempt; // Router Information mapping (address => bool) public isMarketPair; IUniswapV2Router02 public uniswapV2Router; address public uniswapPair; // toggle swap back (fees) bool inSwapAndLiquify; uint256 public tokensForLiquidity; uint256 public tokensForOperations; // Launch Settings bool public tradingOpen = false; // events event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet); event OperationsWalletUpdated(address indexed newOperationsWallet, address indexed oldOperationsWallet); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity); event SwapTokensForETH(uint256 amountIn, address[] path); // toogle to stop swap if already underway modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { // load total fees totalFeesBuy = operationsFeeBuy + liquidityFeeBuy; totalFeesSell = operationsFeeSell + liquidityFeeSell; // load total distribution _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage; // create router ------------------------------ IUniswapV2Router02 _uniswapV2Router; if (block.chainid == 1) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else if (block.chainid == 5) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); } else revert(); // Create a uniswap pair for this new token uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; isMarketPair[address(uniswapPair)] = true; // set allowances _allowances[address(this)][address(uniswapV2Router)] = _totalSupply; // exclude from paying fees or having max transaction amount isExcludedFromFee[owner()] = true; isExcludedFromFee[address(this)] = true; isExcludedFromFee[address(0xdead)] = true; isExcludedFromFee[liquidityWallet] = true; isExcludedFromFee[operationsWallet] = true; // exclude contracts from max wallet size isWalletLimitExempt[owner()] = true; isWalletLimitExempt[address(uniswapPair)] = true; isWalletLimitExempt[address(this)] = true; isWalletLimitExempt[liquidityWallet] = true; isWalletLimitExempt[operationsWallet] = true; // exclude contracts from max wallet size isTxLimitExempt[owner()] = true; isTxLimitExempt[address(this)] = true; _balances[_msgSender()] = _totalSupply; emit Transfer(address(0), _msgSender(), _totalSupply); } receive() external payable { } // @dev Public read functions start ------------------------------------- function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } // custom allowance methods function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } // get minimum tokens before swap function minimumTokensBeforeSwapAmount() public view returns (uint256) { return minimumTokensBeforeSwap; } // approve spending methods function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { 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); } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(deadAddress)); } function getBlock()public view returns (uint256) { return block.number; } // @dev Owner functions start ------------------------------------- // toogle market pair status function setMarketPairStatus(address account, bool newValue) public onlyOwner { isMarketPair[account] = newValue; } // set excluded xx limit function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner { isTxLimitExempt[holder] = exempt; } // update max tx amount function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } // set excluded tax function setIsExcludedFromFee(address account, bool newValue) public onlyOwner { isExcludedFromFee[account] = newValue; } // update fees function updateFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { operationsFeeBuy = _operationsFee; liquidityFeeBuy = _liquidityFee; totalFeesBuy = operationsFeeBuy + liquidityFeeBuy; require(totalFeesBuy <= maxTotalFeeBuy, "Must keep fees at maxTotalFeeBuy or less"); } function updateFeesSell(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { operationsFeeSell = _operationsFee; liquidityFeeSell = _liquidityFee; totalFeesSell = operationsFeeSell + liquidityFeeSell; require(totalFeesSell <= maxTotalFeeSell, "Must keep fees at maxTotalFeeSell or less"); } // set distribution settings function setDistributionSettings(uint256 newLiquidityShare, uint256 newOperationsShare) external onlyOwner() { _liquiditySharePercentage = newLiquidityShare; _operationsSharePercentage = newOperationsShare; _totalDistributionShares = _liquiditySharePercentage + _operationsSharePercentage; require(_totalDistributionShares == 100, "Distribution needs to total to 100"); } // remove wallet limit function enableDisableWalletLimit(bool newValue) external onlyOwner { checkWalletLimit = newValue; } // set excluded wallet limit function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner { isWalletLimitExempt[holder] = exempt; } // update wallet limit function setWalletLimit(uint256 newLimit) external onlyOwner { _walletMax = newLimit; } // change the minimum amount of tokens to sell from fees function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() { minimumTokensBeforeSwap = newLimit; } // sets the wallet that receives LP tokens to lock function updateLiquidityWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "Cannot set to address 0"); isExcludedFromFee[newAddress] = true; isExcludedFromFee[liquidityWallet] = false; emit LiquidityWalletUpdated(newAddress, liquidityWallet); liquidityWallet = payable(newAddress); } // updates the operations wallet (marketing, charity, etc.) function updateOperationsWallet(address newAddress) external onlyOwner { require(newAddress != address(0), "Cannot set to address 0"); isExcludedFromFee[newAddress] = true; isExcludedFromFee[operationsWallet] = false; emit OperationsWalletUpdated(newAddress, operationsWallet); operationsWallet = payable(newAddress); } // transfer amount to address function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); } // change router address function changeRouterAddress(address newRouterAddress) public onlyOwner returns(address newPairAddress) { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH()); // check if new pair deployed if(newPairAddress == address(0)) { newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); } uniswapPair = newPairAddress; uniswapV2Router = _uniswapV2Router; isWalletLimitExempt[address(uniswapPair)] = true; isMarketPair[address(uniswapPair)] = true; } // once enabled, can never be turned off function setTrading() public onlyOwner { tradingOpen = true; } // pre airdrop to any holders function airdropToWallets(address[] memory airdropWallets, uint256[] memory amount) external onlyOwner() { require(airdropWallets.length == amount.length, "airdropToWallets:: Arrays must be the same length"); for(uint256 i = 0; i < airdropWallets.length; i++){ address wallet = airdropWallets[i]; uint256 airdropAmount = amount[i]; emit Transfer(msg.sender, wallet, airdropAmount); } } // @dev Views start here ------------------------------------ // @dev User Callable Functions start here! --------------------------------------------- function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _transfer(address sender, address recipient, uint256 amount) private returns (bool) { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); // check trading open if (!tradingOpen) { require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled"); } if(inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } else { // required for wallet distribution if (sender != owner() && recipient != owner()){ _checkTxLimit(sender,amount); } // check can swap for fees and liq uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender]) { swapAndLiquify(contractTokenBalance); } // check senders balance _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? amount : takeFee(sender, recipient, amount); // check wallet holding limit if(checkWalletLimit && !isWalletLimitExempt[recipient]) require(balanceOf(recipient).add(finalAmount) <= _walletMax); // continue _balances[recipient] = _balances[recipient].add(finalAmount); emit Transfer(sender, recipient, finalAmount); return true; } } // transfer for function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } // take fee method function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeAmount = 0; if(isMarketPair[sender]) { feeAmount = amount.mul(totalFeesBuy).div(100); } else if(isMarketPair[recipient]) { feeAmount = amount.mul(totalFeesSell).div(100); } if(feeAmount > 0) { _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); } return amount.sub(feeAmount); } // swap tokens for fees and liq function swapAndLiquify(uint256 swapAmount) private lockTheSwap { // check there are currently tokens to sell uint256 tokensForLP = swapAmount.mul(_liquiditySharePercentage).div(_totalDistributionShares).div(2); uint256 tokensForSwap = swapAmount.sub(tokensForLP); // swap tokens swapTokensForEth(tokensForSwap); // received amount uint256 amountReceived = address(this).balance; // work out distribution uint256 totalFee = _totalDistributionShares.sub(_liquiditySharePercentage.div(2)); uint256 amountLiquidity = amountReceived.mul(_liquiditySharePercentage).div(totalFee).div(2); uint256 amountOperations = amountReceived.sub(amountLiquidity); if(amountOperations > 0) transferToAddressETH(operationsWallet, amountOperations); if(amountLiquidity > 0 && tokensForLP > 0){ addLiquidity(tokensForLP, amountLiquidity); emit SwapAndLiquify(tokensForSwap, amountLiquidity, tokensForLP); } } // swap tokens to eth function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } // add liqiudity function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders. function buyBackTokens(uint256 ETHAmountInWei) external onlyOwner { // generate the uniswap pair path of weth -> eth address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ETHAmountInWei}( 0, // accept any amount of Ethereum path, address(0xdead), block.timestamp ); } function _checkTxLimit(address sender, uint256 amount) private view{ require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } }
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":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperationsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldOperationsWallet","type":"address"}],"name":"OperationsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquiditySharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ETHAmountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterAddress","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":"operationsFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newOperationsShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","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":[{"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":"uniswapPair","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":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526040518060400160405280600981526020017f4f4c4420464c4f4b490000000000000000000000000000000000000000000000815250600190816200004a919062000f3a565b506040518060400160405280600281526020017f4f460000000000000000000000000000000000000000000000000000000000008152506002908162000091919062000f3a565b506012600360006101000a81548160ff021916908360ff16021790555069d3c21bcecceda10000006004556101f46001600454620000d0919062001050565b620000dc9190620010ca565b6005556103e8601e600454620000f3919062001050565b620000ff9190620010ca565b6006556103e8601e60045462000116919062001050565b620001229190620010ca565b6007556001600860006101000a81548160ff02191690831515021790555073be20f8b18ed364855b4d692f0df4f4a6c9c183f1600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073be20f8b18ed364855b4d692f0df4f4a6c9c183f1600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600a55600a600b55600a600d556000600e556028600f556063601155600060125560646013556000601f60006101000a81548160ff0219169083151502179055503480156200026f57600080fd5b5060006200028262000c8f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a54600b5462000332919062001102565b600c81905550600e54600f546200034a919062001102565b60108190555060135460125462000362919062001102565b6014819055506000600146036200039057737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003bc565b60054603620003b657737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003bb565b600080fd5b5b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000408573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042e9190620011a7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000496573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004bc9190620011a7565b6040518363ffffffff1660e01b8152600401620004db929190620011ea565b6020604051808303816000875af1158015620004fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005219190620011a7565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600454601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160176000620006d762000c9760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620008e462000c9760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600062000b1162000c9760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004546015600062000bd162000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000c1f62000c8f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000c80919062001228565b60405180910390a35062001245565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4257607f821691505b60208210810362000d585762000d5762000cfa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d83565b62000dce868362000d83565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1b62000e1562000e0f8462000de6565b62000df0565b62000de6565b9050919050565b6000819050919050565b62000e378362000dfa565b62000e4f62000e468262000e22565b84845462000d90565b825550505050565b600090565b62000e6662000e57565b62000e7381848462000e2c565b505050565b5b8181101562000e9b5762000e8f60008262000e5c565b60018101905062000e79565b5050565b601f82111562000eea5762000eb48162000d5e565b62000ebf8462000d73565b8101602085101562000ecf578190505b62000ee762000ede8562000d73565b83018262000e78565b50505b505050565b600082821c905092915050565b600062000f0f6000198460080262000eef565b1980831691505092915050565b600062000f2a838362000efc565b9150826002028217905092915050565b62000f458262000cc0565b67ffffffffffffffff81111562000f615762000f6062000ccb565b5b62000f6d825462000d29565b62000f7a82828562000e9f565b600060209050601f83116001811462000fb2576000841562000f9d578287015190505b62000fa9858262000f1c565b86555062001019565b601f19841662000fc28662000d5e565b60005b8281101562000fec5784890151825560018201915060208501945060208101905062000fc5565b868310156200100c578489015162001008601f89168262000efc565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200105d8262000de6565b91506200106a8362000de6565b92508282026200107a8162000de6565b9150828204841483151762001094576200109362001021565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010d78262000de6565b9150620010e48362000de6565b925082620010f757620010f66200109b565b5b828204905092915050565b60006200110f8262000de6565b91506200111c8362000de6565b925082820190508082111562001137576200113662001021565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200116f8262001142565b9050919050565b620011818162001162565b81146200118d57600080fd5b50565b600081519050620011a18162001176565b92915050565b600060208284031215620011c057620011bf6200113d565b5b6000620011d08482850162001190565b91505092915050565b620011e48162001162565b82525050565b6000604082019050620012016000830185620011d9565b620012106020830184620011d9565b9392505050565b620012228162000de6565b82525050565b60006020820190506200123f600083018462001217565b92915050565b6080516159536200126860003960008181611824015261185001526159536000f3fe6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d59578063fc155d1d14610d84578063fd72e22a14610dad578063ffb54a9914610dd857610397565b8063f1d5f51714610cb3578063f2fde38b14610cdc578063f84ba65d14610d05578063f872858a14610d2e57610397565b8063e37ba8f9116100dc578063e37ba8f914610c0f578063ec28438a14610c38578063eea5b63f14610c61578063ef422a1814610c8a57610397565b8063d469801614610b7c578063dd62ed3e14610ba7578063e10e9f3214610be457610397565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610aac578063ac23ca5914610ae9578063c816841b14610b14578063c867d60b14610b3f57610397565b806395d89b41146109ee578063a073d37f14610a19578063a08e671f14610a44578063a457c2d714610a6f57610397565b806382d20116116101b657806382d2011614610946578063844d591c14610971578063876b6f8e1461099a5780638da5cb5b146109c357610397565b80637c519ffb146108d95780637d1db4a5146108f0578063807c2d9c1461091b57610397565b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db794371461083157806370a082311461085a578063715018a6146108975780637849c1cd146108ae57610397565b80633b97084a146107635780633ecad2711461078c5780634b743995146107c95780635342acb4146107f457610397565b80632e97766d1161029b5780632e97766d146106a757806330d5d18d146106d2578063313ce567146106fb578063395093511461072657610397565b806327c8f835146106265780632b112e49146106515780632baa72171461067c57610397565b806318160ddd1161032e5780632198cf6c116103085780632198cf6c1461056e5780632307b4411461059757806323b872dd146105c05780632563ae83146105fd57610397565b806318160ddd146104ed57806319c59e2c146105185780631a8145bb1461054357610397565b8063095ea7b31161036a578063095ea7b31461042f5780630e47e8221461046c5780631107b3a5146104975780631694505e146104c257610397565b8063031d6cd01461039c57806304db6e68146103c757806306fdde031461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e03565b6040516103be919061444f565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906144dc565b610e09565b6040516103fb9190614518565b60405180910390f35b34801561041057600080fd5b5061041961130c565b60405161042691906145c3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614611565b61139e565b604051610463919061466c565b60405180910390f35b34801561047857600080fd5b506104816113bc565b60405161048e919061444f565b60405180910390f35b3480156104a357600080fd5b506104ac6113c2565b6040516104b9919061444f565b60405180910390f35b3480156104ce57600080fd5b506104d76113c8565b6040516104e491906146e6565b60405180910390f35b3480156104f957600080fd5b506105026113ee565b60405161050f919061444f565b60405180910390f35b34801561052457600080fd5b5061052d6113f8565b60405161053a919061444f565b60405180910390f35b34801561054f57600080fd5b506105586113fe565b604051610565919061444f565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061472d565b611404565b005b3480156105a357600080fd5b506105be60048036038101906105b99190614978565b6114f4565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906149f0565b611696565b6040516105f4919061466c565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190614a43565b611770565b005b34801561063257600080fd5b5061063b611822565b6040516106489190614518565b60405180910390f35b34801561065d57600080fd5b50610666611846565b604051610673919061444f565b60405180910390f35b34801561068857600080fd5b5061069161188a565b60405161069e919061444f565b60405180910390f35b3480156106b357600080fd5b506106bc611890565b6040516106c9919061444f565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906144dc565b611898565b005b34801561070757600080fd5b50610710611b2e565b60405161071d9190614a8c565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614611565b611b45565b60405161075a919061466c565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614aa7565b611bf8565b005b34801561079857600080fd5b506107b360048036038101906107ae91906144dc565b611c97565b6040516107c0919061466c565b60405180910390f35b3480156107d557600080fd5b506107de611cb7565b6040516107eb919061444f565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906144dc565b611cbd565b604051610828919061466c565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614ad4565b611cdd565b005b34801561086657600080fd5b50610881600480360381019061087c91906144dc565b611de1565b60405161088e919061444f565b60405180910390f35b3480156108a357600080fd5b506108ac611e2a565b005b3480156108ba57600080fd5b506108c3611f7d565b6040516108d0919061444f565b60405180910390f35b3480156108e557600080fd5b506108ee611f83565b005b3480156108fc57600080fd5b50610905612035565b604051610912919061444f565b60405180910390f35b34801561092757600080fd5b5061093061203b565b60405161093d919061444f565b60405180910390f35b34801561095257600080fd5b5061095b612041565b604051610968919061444f565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061472d565b612047565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614ad4565b612137565b005b3480156109cf57600080fd5b506109d861223b565b6040516109e59190614518565b60405180910390f35b3480156109fa57600080fd5b50610a03612264565b604051610a1091906145c3565b60405180910390f35b348015610a2557600080fd5b50610a2e6122f6565b604051610a3b919061444f565b60405180910390f35b348015610a5057600080fd5b50610a59612300565b604051610a66919061444f565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614611565b612306565b604051610aa3919061466c565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614611565b6123d3565b604051610ae0919061466c565b60405180910390f35b348015610af557600080fd5b50610afe6123f2565b604051610b0b919061444f565b60405180910390f35b348015610b2057600080fd5b50610b296123f8565b604051610b369190614518565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b6191906144dc565b61241e565b604051610b73919061466c565b60405180910390f35b348015610b8857600080fd5b50610b9161243e565b604051610b9e9190614b35565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614b50565b612464565b604051610bdb919061444f565b60405180910390f35b348015610bf057600080fd5b50610bf96124eb565b604051610c06919061444f565b60405180910390f35b348015610c1b57600080fd5b50610c366004803603810190610c3191906144dc565b6124f1565b005b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614aa7565b612787565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614ad4565b612826565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061472d565b612928565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614aa7565b612a18565b005b348015610ce857600080fd5b50610d036004803603810190610cfe91906144dc565b612ab7565b005b348015610d1157600080fd5b50610d2c6004803603810190610d27919061472d565b612c78565b005b348015610d3a57600080fd5b50610d43612d68565b604051610d50919061466c565b60405180910390f35b348015610d6557600080fd5b50610d6e612d7b565b604051610d7b919061444f565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da69190614aa7565b612d81565b005b348015610db957600080fd5b50610dc261302d565b604051610dcf9190614b35565b60405180910390f35b348015610de457600080fd5b50610ded613053565b604051610dfa919061466c565b60405180910390f35b600f5481565b6000610e13613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790614bdc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614c11565b6040518363ffffffff1660e01b8152600401610fbc929190614c3e565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190614c11565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190614c11565b6040518363ffffffff1660e01b815260040161114a929190614c3e565b6020604051808303816000875af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614c11565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60606001805461131b90614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614c96565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b5050505050905090565b60006113b26113ab613066565b848461306e565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b61140c613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090614bdc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114fc613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614bdc565b60405180910390fd5b80518251146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614d39565b60405180910390fd5b60005b82518110156116915760008382815181106115ee576115ed614d59565b5b60200260200101519050600083838151811061160d5761160c614d59565b5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611674919061444f565b60405180910390a35050808061168990614db7565b9150506115d0565b505050565b60006116a3848484613237565b50611765846116b0613066565b611760856040518060600160405280602881526020016158d160289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611716613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b600190509392505050565b611778613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614bdc565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006118856118747f0000000000000000000000000000000000000000000000000000000000000000611de1565b60045461386c90919063ffffffff16565b905090565b60135481565b600043905090565b6118a0613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611bee611b52613066565b84611be98560166000611b63613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b61306e565b6001905092915050565b611c00613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614bdc565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611ce5613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614bdc565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611d909190614e6b565b600c81905550600d54600c541115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614f11565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e32613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611f8b613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614bdc565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b61204f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614bdc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61213f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614bdc565b60405180910390fd5b81600f8190555080600e81905550600e54600f546121ea9190614e6b565b6010819055506011546010541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614fa3565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461227390614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461229f90614c96565b80156122ec5780601f106122c1576101008083540402835291602001916122ec565b820191906000526020600020905b8154815290600101906020018083116122cf57829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006123c9612313613066565b846123c4856040518060600160405280602581526020016158f9602591396016600061233d613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b6001905092915050565b60006123e76123e0613066565b8484613237565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6124f9613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257d90614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614bdc565b60405180910390fd5b8060068190555050565b61282e613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614bdc565b60405180910390fd5b81601281905550806013819055506013546012546128d99190614e6b565b601481905550606460145414612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90615035565b60405180910390fd5b5050565b612930613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614bdc565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612a20613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614bdc565b60405180910390fd5b8060078190555050565b612abf613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c80613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614bdc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612d89613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614bdc565b60405180910390fd5b6000600267ffffffffffffffff811115612e3357612e32614772565b5b604051908082528060200260200182016040528015612e615781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614c11565b81600081518110612f0957612f08614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612f5857612f57614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ff794939291906151e0565b6000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061529e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361314c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314390615330565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161322a919061444f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e906153c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90615454565b60405180910390fd5b601f60009054906101000a900460ff166133a05761333261223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461339f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613396906154e6565b60405180910390fd5b5b601c60149054906101000a900460ff16156133c7576133c0848484613914565b9050613801565b6133cf61223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561343d575061340d61223b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5761344c8483613ae7565b5b600061345830611de1565b90506000600554821015905080801561347e5750601c60149054906101000a900460ff16155b80156134d45750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e3576134e282613b84565b5b61356c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136525750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366657613661878787613d3c565b613668565b845b9050600860009054906101000a900460ff1680156136d05750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ff576007546136f3826136e589611de1565b6138b690919063ffffffff16565b11156136fe57600080fd5b5b61375181601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f1919061444f565b60405180910390a3600193505050505b9392505050565b6000838311158290613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384791906145c3565b60405180910390fd5b506000838561385f9190615506565b9050809150509392505050565b60006138ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613808565b905092915050565b60008082846138c59190614e6b565b90508381101561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190615586565b60405180910390fd5b8091505092915050565b600061399f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad4919061444f565b60405180910390a3600190509392505050565b60065481111580613b415750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906155f2565b60405180910390fd5b5050565b6001601c60146101000a81548160ff0219169083151502179055506000613bdd6002613bcf601454613bc160125487613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613bf4828461386c90919063ffffffff16565b9050613bff81614027565b60004790506000613c30613c1f6002601254613fdd90919063ffffffff16565b60145461386c90919063ffffffff16565b90506000613c6e6002613c6084613c5260125488613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613c85828561386c90919063ffffffff16565b90506000811115613cbd57613cbc600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826142a3565b5b600082118015613ccd5750600086115b15613d1857613cdc86836142ee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613d0f93929190615612565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc457613dbd6064613daf600c5486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b9050613e42565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4157613e3e6064613e3060105486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b90505b5b6000811115613f4657613e9d81601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f3d919061444f565b60405180910390a35b613f59818461386c90919063ffffffff16565b9150509392505050565b6000808303613f755760009050613fd7565b60008284613f839190615649565b9050828482613f9291906156ba565b14613fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc99061575d565b60405180910390fd5b809150505b92915050565b600061401f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143d3565b905092915050565b6000600267ffffffffffffffff81111561404457614043614772565b5b6040519080825280602002602001820160405280156140725781602001602082028036833780820191505090505b509050308160008151811061408a57614089614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141559190614c11565b8160018151811061416957614168614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d030601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161423495949392919061577d565b600060405180830381600087803b15801561424e57600080fd5b505af1158015614262573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516142979291906157d7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142e9573d6000803e3d6000fd5b505050565b61431b30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061436761223b565b426040518863ffffffff1660e01b815260040161438996959493929190615807565b60606040518083038185885af11580156143a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143cc919061587d565b5050505050565b6000808311829061441a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441191906145c3565b60405180910390fd5b506000838561442991906156ba565b9050809150509392505050565b6000819050919050565b61444981614436565b82525050565b60006020820190506144646000830184614440565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a98261447e565b9050919050565b6144b98161449e565b81146144c457600080fd5b50565b6000813590506144d6816144b0565b92915050565b6000602082840312156144f2576144f1614474565b5b6000614500848285016144c7565b91505092915050565b6145128161449e565b82525050565b600060208201905061452d6000830184614509565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456d578082015181840152602081019050614552565b60008484015250505050565b6000601f19601f8301169050919050565b600061459582614533565b61459f818561453e565b93506145af81856020860161454f565b6145b881614579565b840191505092915050565b600060208201905081810360008301526145dd818461458a565b905092915050565b6145ee81614436565b81146145f957600080fd5b50565b60008135905061460b816145e5565b92915050565b6000806040838503121561462857614627614474565b5b6000614636858286016144c7565b9250506020614647858286016145fc565b9150509250929050565b60008115159050919050565b61466681614651565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000819050919050565b60006146ac6146a76146a28461447e565b614687565b61447e565b9050919050565b60006146be82614691565b9050919050565b60006146d0826146b3565b9050919050565b6146e0816146c5565b82525050565b60006020820190506146fb60008301846146d7565b92915050565b61470a81614651565b811461471557600080fd5b50565b60008135905061472781614701565b92915050565b6000806040838503121561474457614743614474565b5b6000614752858286016144c7565b925050602061476385828601614718565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147aa82614579565b810181811067ffffffffffffffff821117156147c9576147c8614772565b5b80604052505050565b60006147dc61446a565b90506147e882826147a1565b919050565b600067ffffffffffffffff82111561480857614807614772565b5b602082029050602081019050919050565b600080fd5b600061483161482c846147ed565b6147d2565b9050808382526020820190506020840283018581111561485457614853614819565b5b835b8181101561487d578061486988826144c7565b845260208401935050602081019050614856565b5050509392505050565b600082601f83011261489c5761489b61476d565b5b81356148ac84826020860161481e565b91505092915050565b600067ffffffffffffffff8211156148d0576148cf614772565b5b602082029050602081019050919050565b60006148f46148ef846148b5565b6147d2565b9050808382526020820190506020840283018581111561491757614916614819565b5b835b81811015614940578061492c88826145fc565b845260208401935050602081019050614919565b5050509392505050565b600082601f83011261495f5761495e61476d565b5b813561496f8482602086016148e1565b91505092915050565b6000806040838503121561498f5761498e614474565b5b600083013567ffffffffffffffff8111156149ad576149ac614479565b5b6149b985828601614887565b925050602083013567ffffffffffffffff8111156149da576149d9614479565b5b6149e68582860161494a565b9150509250929050565b600080600060608486031215614a0957614a08614474565b5b6000614a17868287016144c7565b9350506020614a28868287016144c7565b9250506040614a39868287016145fc565b9150509250925092565b600060208284031215614a5957614a58614474565b5b6000614a6784828501614718565b91505092915050565b600060ff82169050919050565b614a8681614a70565b82525050565b6000602082019050614aa16000830184614a7d565b92915050565b600060208284031215614abd57614abc614474565b5b6000614acb848285016145fc565b91505092915050565b60008060408385031215614aeb57614aea614474565b5b6000614af9858286016145fc565b9250506020614b0a858286016145fc565b9150509250929050565b6000614b1f8261447e565b9050919050565b614b2f81614b14565b82525050565b6000602082019050614b4a6000830184614b26565b92915050565b60008060408385031215614b6757614b66614474565b5b6000614b75858286016144c7565b9250506020614b86858286016144c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc660208361453e565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b600081519050614c0b816144b0565b92915050565b600060208284031215614c2757614c26614474565b5b6000614c3584828501614bfc565b91505092915050565b6000604082019050614c536000830185614509565b614c606020830184614509565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cae57607f821691505b602082108103614cc157614cc0614c67565b5b50919050565b7f61697264726f70546f57616c6c6574733a3a20417272617973206d757374206260008201527f65207468652073616d65206c656e677468000000000000000000000000000000602082015250565b6000614d2360318361453e565b9150614d2e82614cc7565b604082019050919050565b60006020820190508181036000830152614d5281614d16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dc282614436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614df457614df3614d88565b5b600182019050919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614e3560178361453e565b9150614e4082614dff565b602082019050919050565b60006020820190508181036000830152614e6481614e28565b9050919050565b6000614e7682614436565b9150614e8183614436565b9250828201905080821115614e9957614e98614d88565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614efb60288361453e565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614f8d60298361453e565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061501f60228361453e565b915061502a82614fc3565b604082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b160268361453e565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b6000819050919050565b600061510c615107615102846150e7565b614687565b614436565b9050919050565b61511c816150f1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151578161449e565b82525050565b6000615169838361514e565b60208301905092915050565b6000602082019050919050565b600061518d82615122565b615197818561512d565b93506151a28361513e565b8060005b838110156151d35781516151ba888261515d565b97506151c583615175565b9250506001810190506151a6565b5085935050505092915050565b60006080820190506151f56000830187615113565b81810360208301526152078186615182565b90506152166040830185614509565b6152236060830184614440565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528860248361453e565b91506152938261522c565b604082019050919050565b600060208201905081810360008301526152b78161527b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531a60228361453e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ac60258361453e565b91506153b782615350565b604082019050919050565b600060208201905081810360008301526153db8161539f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061543e60238361453e565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006154d0603f8361453e565b91506154db82615474565b604082019050919050565b600060208201905081810360008301526154ff816154c3565b9050919050565b600061551182614436565b915061551c83614436565b925082820390508181111561553457615533614d88565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615570601b8361453e565b915061557b8261553a565b602082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006155dc60118361453e565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b60006060820190506156276000830186614440565b6156346020830185614440565b6156416040830184614440565b949350505050565b600061565482614436565b915061565f83614436565b925082820261566d81614436565b9150828204841483151761568457615683614d88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156c582614436565b91506156d083614436565b9250826156e0576156df61568b565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061574760218361453e565b9150615752826156eb565b604082019050919050565b600060208201905081810360008301526157768161573a565b9050919050565b600060a0820190506157926000830188614440565b61579f6020830187615113565b81810360408301526157b18186615182565b90506157c06060830185614509565b6157cd6080830184614440565b9695505050505050565b60006040820190506157ec6000830185614440565b81810360208301526157fe8184615182565b90509392505050565b600060c08201905061581c6000830189614509565b6158296020830188614440565b6158366040830187615113565b6158436060830186615113565b6158506080830185614509565b61585d60a0830184614440565b979650505050505050565b600081519050615877816145e5565b92915050565b60008060006060848603121561589657615895614474565b5b60006158a486828701615868565b93505060206158b586828701615868565b92505060406158c686828701615868565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122003ad6e208cb67235e38e57256ac577563cf3564bd9e2f95c015ed8ed9e6b65ad64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103905760003560e01c80637c519ffb116101dc578063d469801611610102578063f1d5f517116100a0578063fb002c971161006f578063fb002c9714610d59578063fc155d1d14610d84578063fd72e22a14610dad578063ffb54a9914610dd857610397565b8063f1d5f51714610cb3578063f2fde38b14610cdc578063f84ba65d14610d05578063f872858a14610d2e57610397565b8063e37ba8f9116100dc578063e37ba8f914610c0f578063ec28438a14610c38578063eea5b63f14610c61578063ef422a1814610c8a57610397565b8063d469801614610b7c578063dd62ed3e14610ba7578063e10e9f3214610be457610397565b806395d89b411161017a578063a9059cbb11610149578063a9059cbb14610aac578063ac23ca5914610ae9578063c816841b14610b14578063c867d60b14610b3f57610397565b806395d89b41146109ee578063a073d37f14610a19578063a08e671f14610a44578063a457c2d714610a6f57610397565b806382d20116116101b657806382d2011614610946578063844d591c14610971578063876b6f8e1461099a5780638da5cb5b146109c357610397565b80637c519ffb146108d95780637d1db4a5146108f0578063807c2d9c1461091b57610397565b806327c8f835116102c15780633b97084a1161025f5780636db794371161022e5780636db794371461083157806370a082311461085a578063715018a6146108975780637849c1cd146108ae57610397565b80633b97084a146107635780633ecad2711461078c5780634b743995146107c95780635342acb4146107f457610397565b80632e97766d1161029b5780632e97766d146106a757806330d5d18d146106d2578063313ce567146106fb578063395093511461072657610397565b806327c8f835146106265780632b112e49146106515780632baa72171461067c57610397565b806318160ddd1161032e5780632198cf6c116103085780632198cf6c1461056e5780632307b4411461059757806323b872dd146105c05780632563ae83146105fd57610397565b806318160ddd146104ed57806319c59e2c146105185780631a8145bb1461054357610397565b8063095ea7b31161036a578063095ea7b31461042f5780630e47e8221461046c5780631107b3a5146104975780631694505e146104c257610397565b8063031d6cd01461039c57806304db6e68146103c757806306fdde031461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e03565b6040516103be919061444f565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e991906144dc565b610e09565b6040516103fb9190614518565b60405180910390f35b34801561041057600080fd5b5061041961130c565b60405161042691906145c3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614611565b61139e565b604051610463919061466c565b60405180910390f35b34801561047857600080fd5b506104816113bc565b60405161048e919061444f565b60405180910390f35b3480156104a357600080fd5b506104ac6113c2565b6040516104b9919061444f565b60405180910390f35b3480156104ce57600080fd5b506104d76113c8565b6040516104e491906146e6565b60405180910390f35b3480156104f957600080fd5b506105026113ee565b60405161050f919061444f565b60405180910390f35b34801561052457600080fd5b5061052d6113f8565b60405161053a919061444f565b60405180910390f35b34801561054f57600080fd5b506105586113fe565b604051610565919061444f565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061472d565b611404565b005b3480156105a357600080fd5b506105be60048036038101906105b99190614978565b6114f4565b005b3480156105cc57600080fd5b506105e760048036038101906105e291906149f0565b611696565b6040516105f4919061466c565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190614a43565b611770565b005b34801561063257600080fd5b5061063b611822565b6040516106489190614518565b60405180910390f35b34801561065d57600080fd5b50610666611846565b604051610673919061444f565b60405180910390f35b34801561068857600080fd5b5061069161188a565b60405161069e919061444f565b60405180910390f35b3480156106b357600080fd5b506106bc611890565b6040516106c9919061444f565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f491906144dc565b611898565b005b34801561070757600080fd5b50610710611b2e565b60405161071d9190614a8c565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614611565b611b45565b60405161075a919061466c565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614aa7565b611bf8565b005b34801561079857600080fd5b506107b360048036038101906107ae91906144dc565b611c97565b6040516107c0919061466c565b60405180910390f35b3480156107d557600080fd5b506107de611cb7565b6040516107eb919061444f565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906144dc565b611cbd565b604051610828919061466c565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614ad4565b611cdd565b005b34801561086657600080fd5b50610881600480360381019061087c91906144dc565b611de1565b60405161088e919061444f565b60405180910390f35b3480156108a357600080fd5b506108ac611e2a565b005b3480156108ba57600080fd5b506108c3611f7d565b6040516108d0919061444f565b60405180910390f35b3480156108e557600080fd5b506108ee611f83565b005b3480156108fc57600080fd5b50610905612035565b604051610912919061444f565b60405180910390f35b34801561092757600080fd5b5061093061203b565b60405161093d919061444f565b60405180910390f35b34801561095257600080fd5b5061095b612041565b604051610968919061444f565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061472d565b612047565b005b3480156109a657600080fd5b506109c160048036038101906109bc9190614ad4565b612137565b005b3480156109cf57600080fd5b506109d861223b565b6040516109e59190614518565b60405180910390f35b3480156109fa57600080fd5b50610a03612264565b604051610a1091906145c3565b60405180910390f35b348015610a2557600080fd5b50610a2e6122f6565b604051610a3b919061444f565b60405180910390f35b348015610a5057600080fd5b50610a59612300565b604051610a66919061444f565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614611565b612306565b604051610aa3919061466c565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace9190614611565b6123d3565b604051610ae0919061466c565b60405180910390f35b348015610af557600080fd5b50610afe6123f2565b604051610b0b919061444f565b60405180910390f35b348015610b2057600080fd5b50610b296123f8565b604051610b369190614518565b60405180910390f35b348015610b4b57600080fd5b50610b666004803603810190610b6191906144dc565b61241e565b604051610b73919061466c565b60405180910390f35b348015610b8857600080fd5b50610b9161243e565b604051610b9e9190614b35565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190614b50565b612464565b604051610bdb919061444f565b60405180910390f35b348015610bf057600080fd5b50610bf96124eb565b604051610c06919061444f565b60405180910390f35b348015610c1b57600080fd5b50610c366004803603810190610c3191906144dc565b6124f1565b005b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190614aa7565b612787565b005b348015610c6d57600080fd5b50610c886004803603810190610c839190614ad4565b612826565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061472d565b612928565b005b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614aa7565b612a18565b005b348015610ce857600080fd5b50610d036004803603810190610cfe91906144dc565b612ab7565b005b348015610d1157600080fd5b50610d2c6004803603810190610d27919061472d565b612c78565b005b348015610d3a57600080fd5b50610d43612d68565b604051610d50919061466c565b60405180910390f35b348015610d6557600080fd5b50610d6e612d7b565b604051610d7b919061444f565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da69190614aa7565b612d81565b005b348015610db957600080fd5b50610dc261302d565b604051610dcf9190614b35565b60405180910390f35b348015610de457600080fd5b50610ded613053565b604051610dfa919061466c565b60405180910390f35b600f5481565b6000610e13613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790614bdc565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f149190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614c11565b6040518363ffffffff1660e01b8152600401610fbc929190614c3e565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190614c11565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611190578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190614c11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190614c11565b6040518363ffffffff1660e01b815260040161114a929190614c3e565b6020604051808303816000875af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190614c11565b91505b81601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60606001805461131b90614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461134790614c96565b80156113945780601f1061136957610100808354040283529160200191611394565b820191906000526020600020905b81548152906001019060200180831161137757829003601f168201915b5050505050905090565b60006113b26113ab613066565b848461306e565b6001905092915050565b60105481565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454905090565b600c5481565b601d5481565b61140c613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149090614bdc565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6114fc613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090614bdc565b60405180910390fd5b80518251146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490614d39565b60405180910390fd5b60005b82518110156116915760008382815181106115ee576115ed614d59565b5b60200260200101519050600083838151811061160d5761160c614d59565b5b602002602001015190508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611674919061444f565b60405180910390a35050808061168990614db7565b9150506115d0565b505050565b60006116a3848484613237565b50611765846116b0613066565b611760856040518060600160405280602881526020016158d160289139601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611716613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b600190509392505050565b611778613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90614bdc565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006118856118747f000000000000000000000000000000000000000000000000000000000000dead611de1565b60045461386c90919063ffffffff16565b905090565b60135481565b600043905090565b6118a0613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f086aa05ff00214e2d0c7c02b8a46b2614ad955732e6b43aa8afca69ed1ad76f860405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b6000611bee611b52613066565b84611be98560166000611b63613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b61306e565b6001905092915050565b611c00613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614bdc565b60405180910390fd5b8060058190555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b60115481565b60176020528060005260406000206000915054906101000a900460ff1681565b611ce5613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990614bdc565b60405180910390fd5b81600b8190555080600a81905550600a54600b54611d909190614e6b565b600c81905550600d54600c541115611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614f11565b60405180910390fd5b5050565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e32613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b5481565b611f8b613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614bdc565b60405180910390fd5b6001601f60006101000a81548160ff021916908315150217905550565b60065481565b60075481565b600a5481565b61204f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d390614bdc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61213f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614bdc565b60405180910390fd5b81600f8190555080600e81905550600e54600f546121ea9190614e6b565b6010819055506011546010541115612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90614fa3565b60405180910390fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461227390614c96565b80601f016020809104026020016040519081016040528092919081815260200182805461229f90614c96565b80156122ec5780601f106122c1576101008083540402835291602001916122ec565b820191906000526020600020905b8154815290600101906020018083116122cf57829003601f168201915b5050505050905090565b6000600554905090565b60145481565b60006123c9612313613066565b846123c4856040518060600160405280602581526020016158f9602591396016600061233d613066565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b61306e565b6001905092915050565b60006123e76123e0613066565b8484613237565b506001905092915050565b60125481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6124f9613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257d90614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614e4b565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e60405160405180910390a380600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61278f613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614bdc565b60405180910390fd5b8060068190555050565b61282e613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290614bdc565b60405180910390fd5b81601281905550806013819055506013546012546128d99190614e6b565b601481905550606460145414612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90615035565b60405180910390fd5b5050565b612930613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614bdc565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612a20613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa490614bdc565b60405180910390fd5b8060078190555050565b612abf613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4390614bdc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb2906150c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612c80613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0490614bdc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900460ff1681565b601e5481565b612d89613066565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d90614bdc565b60405180910390fd5b6000600267ffffffffffffffff811115612e3357612e32614772565b5b604051908082528060200260200182016040528015612e615781602001602082028036833780820191505090505b509050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef59190614c11565b81600081518110612f0957612f08614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612f5857612f57614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401612ff794939291906151e0565b6000604051808303818588803b15801561301057600080fd5b505af1158015613024573d6000803e3d6000fd5b50505050505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f60009054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d49061529e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361314c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314390615330565b60405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161322a919061444f565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e906153c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330d90615454565b60405180910390fd5b601f60009054906101000a900460ff166133a05761333261223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461339f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613396906154e6565b60405180910390fd5b5b601c60149054906101000a900460ff16156133c7576133c0848484613914565b9050613801565b6133cf61223b565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561343d575061340d61223b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561344d5761344c8483613ae7565b5b600061345830611de1565b90506000600554821015905080801561347e5750601c60149054906101000a900460ff16155b80156134d45750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134e3576134e282613b84565b5b61356c846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136525750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61366657613661878787613d3c565b613668565b845b9050600860009054906101000a900460ff1680156136d05750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136ff576007546136f3826136e589611de1565b6138b690919063ffffffff16565b11156136fe57600080fd5b5b61375181601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f1919061444f565b60405180910390a3600193505050505b9392505050565b6000838311158290613850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384791906145c3565b60405180910390fd5b506000838561385f9190615506565b9050809150509392505050565b60006138ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613808565b905092915050565b60008082846138c59190614e6b565b90508381101561390a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390190615586565b60405180910390fd5b8091505092915050565b600061399f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138089092919063ffffffff16565b601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a3482601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad4919061444f565b60405180910390a3600190509392505050565b60065481111580613b415750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b77906155f2565b60405180910390fd5b5050565b6001601c60146101000a81548160ff0219169083151502179055506000613bdd6002613bcf601454613bc160125487613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613bf4828461386c90919063ffffffff16565b9050613bff81614027565b60004790506000613c30613c1f6002601254613fdd90919063ffffffff16565b60145461386c90919063ffffffff16565b90506000613c6e6002613c6084613c5260125488613f6390919063ffffffff16565b613fdd90919063ffffffff16565b613fdd90919063ffffffff16565b90506000613c85828561386c90919063ffffffff16565b90506000811115613cbd57613cbc600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826142a3565b5b600082118015613ccd5750600086115b15613d1857613cdc86836142ee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858388604051613d0f93929190615612565b60405180910390a15b5050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc457613dbd6064613daf600c5486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b9050613e42565b601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613e4157613e3e6064613e3060105486613f6390919063ffffffff16565b613fdd90919063ffffffff16565b90505b5b6000811115613f4657613e9d81601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138b690919063ffffffff16565b601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f3d919061444f565b60405180910390a35b613f59818461386c90919063ffffffff16565b9150509392505050565b6000808303613f755760009050613fd7565b60008284613f839190615649565b9050828482613f9291906156ba565b14613fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc99061575d565b60405180910390fd5b809150505b92915050565b600061401f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143d3565b905092915050565b6000600267ffffffffffffffff81111561404457614043614772565b5b6040519080825280602002602001820160405280156140725781602001602082028036833780820191505090505b509050308160008151811061408a57614089614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141559190614c11565b8160018151811061416957614168614d59565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141d030601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161423495949392919061577d565b600060405180830381600087803b15801561424e57600080fd5b505af1158015614262573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516142979291906157d7565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142e9573d6000803e3d6000fd5b505050565b61431b30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461306e565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061436761223b565b426040518863ffffffff1660e01b815260040161438996959493929190615807565b60606040518083038185885af11580156143a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143cc919061587d565b5050505050565b6000808311829061441a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441191906145c3565b60405180910390fd5b506000838561442991906156ba565b9050809150509392505050565b6000819050919050565b61444981614436565b82525050565b60006020820190506144646000830184614440565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144a98261447e565b9050919050565b6144b98161449e565b81146144c457600080fd5b50565b6000813590506144d6816144b0565b92915050565b6000602082840312156144f2576144f1614474565b5b6000614500848285016144c7565b91505092915050565b6145128161449e565b82525050565b600060208201905061452d6000830184614509565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561456d578082015181840152602081019050614552565b60008484015250505050565b6000601f19601f8301169050919050565b600061459582614533565b61459f818561453e565b93506145af81856020860161454f565b6145b881614579565b840191505092915050565b600060208201905081810360008301526145dd818461458a565b905092915050565b6145ee81614436565b81146145f957600080fd5b50565b60008135905061460b816145e5565b92915050565b6000806040838503121561462857614627614474565b5b6000614636858286016144c7565b9250506020614647858286016145fc565b9150509250929050565b60008115159050919050565b61466681614651565b82525050565b6000602082019050614681600083018461465d565b92915050565b6000819050919050565b60006146ac6146a76146a28461447e565b614687565b61447e565b9050919050565b60006146be82614691565b9050919050565b60006146d0826146b3565b9050919050565b6146e0816146c5565b82525050565b60006020820190506146fb60008301846146d7565b92915050565b61470a81614651565b811461471557600080fd5b50565b60008135905061472781614701565b92915050565b6000806040838503121561474457614743614474565b5b6000614752858286016144c7565b925050602061476385828601614718565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6147aa82614579565b810181811067ffffffffffffffff821117156147c9576147c8614772565b5b80604052505050565b60006147dc61446a565b90506147e882826147a1565b919050565b600067ffffffffffffffff82111561480857614807614772565b5b602082029050602081019050919050565b600080fd5b600061483161482c846147ed565b6147d2565b9050808382526020820190506020840283018581111561485457614853614819565b5b835b8181101561487d578061486988826144c7565b845260208401935050602081019050614856565b5050509392505050565b600082601f83011261489c5761489b61476d565b5b81356148ac84826020860161481e565b91505092915050565b600067ffffffffffffffff8211156148d0576148cf614772565b5b602082029050602081019050919050565b60006148f46148ef846148b5565b6147d2565b9050808382526020820190506020840283018581111561491757614916614819565b5b835b81811015614940578061492c88826145fc565b845260208401935050602081019050614919565b5050509392505050565b600082601f83011261495f5761495e61476d565b5b813561496f8482602086016148e1565b91505092915050565b6000806040838503121561498f5761498e614474565b5b600083013567ffffffffffffffff8111156149ad576149ac614479565b5b6149b985828601614887565b925050602083013567ffffffffffffffff8111156149da576149d9614479565b5b6149e68582860161494a565b9150509250929050565b600080600060608486031215614a0957614a08614474565b5b6000614a17868287016144c7565b9350506020614a28868287016144c7565b9250506040614a39868287016145fc565b9150509250925092565b600060208284031215614a5957614a58614474565b5b6000614a6784828501614718565b91505092915050565b600060ff82169050919050565b614a8681614a70565b82525050565b6000602082019050614aa16000830184614a7d565b92915050565b600060208284031215614abd57614abc614474565b5b6000614acb848285016145fc565b91505092915050565b60008060408385031215614aeb57614aea614474565b5b6000614af9858286016145fc565b9250506020614b0a858286016145fc565b9150509250929050565b6000614b1f8261447e565b9050919050565b614b2f81614b14565b82525050565b6000602082019050614b4a6000830184614b26565b92915050565b60008060408385031215614b6757614b66614474565b5b6000614b75858286016144c7565b9250506020614b86858286016144c7565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bc660208361453e565b9150614bd182614b90565b602082019050919050565b60006020820190508181036000830152614bf581614bb9565b9050919050565b600081519050614c0b816144b0565b92915050565b600060208284031215614c2757614c26614474565b5b6000614c3584828501614bfc565b91505092915050565b6000604082019050614c536000830185614509565b614c606020830184614509565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cae57607f821691505b602082108103614cc157614cc0614c67565b5b50919050565b7f61697264726f70546f57616c6c6574733a3a20417272617973206d757374206260008201527f65207468652073616d65206c656e677468000000000000000000000000000000602082015250565b6000614d2360318361453e565b9150614d2e82614cc7565b604082019050919050565b60006020820190508181036000830152614d5281614d16565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dc282614436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614df457614df3614d88565b5b600182019050919050565b7f43616e6e6f742073657420746f20616464726573732030000000000000000000600082015250565b6000614e3560178361453e565b9150614e4082614dff565b602082019050919050565b60006020820190508181036000830152614e6481614e28565b9050919050565b6000614e7682614436565b9150614e8183614436565b9250828201905080821115614e9957614e98614d88565b5b92915050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656542757960008201527f206f72206c657373000000000000000000000000000000000000000000000000602082015250565b6000614efb60288361453e565b9150614f0682614e9f565b604082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f4d757374206b6565702066656573206174206d6178546f74616c46656553656c60008201527f6c206f72206c6573730000000000000000000000000000000000000000000000602082015250565b6000614f8d60298361453e565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b7f446973747269627574696f6e206e6565647320746f20746f74616c20746f203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061501f60228361453e565b915061502a82614fc3565b604082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150b160268361453e565b91506150bc82615055565b604082019050919050565b600060208201905081810360008301526150e0816150a4565b9050919050565b6000819050919050565b600061510c615107615102846150e7565b614687565b614436565b9050919050565b61511c816150f1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151578161449e565b82525050565b6000615169838361514e565b60208301905092915050565b6000602082019050919050565b600061518d82615122565b615197818561512d565b93506151a28361513e565b8060005b838110156151d35781516151ba888261515d565b97506151c583615175565b9250506001810190506151a6565b5085935050505092915050565b60006080820190506151f56000830187615113565b81810360208301526152078186615182565b90506152166040830185614509565b6152236060830184614440565b95945050505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061528860248361453e565b91506152938261522c565b604082019050919050565b600060208201905081810360008301526152b78161527b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061531a60228361453e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ac60258361453e565b91506153b782615350565b604082019050919050565b600060208201905081810360008301526153db8161539f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061543e60238361453e565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b60006154d0603f8361453e565b91506154db82615474565b604082019050919050565b600060208201905081810360008301526154ff816154c3565b9050919050565b600061551182614436565b915061551c83614436565b925082820390508181111561553457615533614d88565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615570601b8361453e565b915061557b8261553a565b602082019050919050565b6000602082019050818103600083015261559f81615563565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006155dc60118361453e565b91506155e7826155a6565b602082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b60006060820190506156276000830186614440565b6156346020830185614440565b6156416040830184614440565b949350505050565b600061565482614436565b915061565f83614436565b925082820261566d81614436565b9150828204841483151761568457615683614d88565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156c582614436565b91506156d083614436565b9250826156e0576156df61568b565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061574760218361453e565b9150615752826156eb565b604082019050919050565b600060208201905081810360008301526157768161573a565b9050919050565b600060a0820190506157926000830188614440565b61579f6020830187615113565b81810360408301526157b18186615182565b90506157c06060830185614509565b6157cd6080830184614440565b9695505050505050565b60006040820190506157ec6000830185614440565b81810360208301526157fe8184615182565b90509392505050565b600060c08201905061581c6000830189614509565b6158296020830188614440565b6158366040830187615113565b6158436060830186615113565b6158506080830185614509565b61585d60a0830184614440565b979650505050505050565b600081519050615877816145e5565b92915050565b60008060006060848603121561589657615895614474565b5b60006158a486828701615868565b93505060206158b586828701615868565b92505060406158c686828701615868565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122003ad6e208cb67235e38e57256ac577563cf3564bd9e2f95c015ed8ed9e6b65ad64736f6c63430008110033
Deployed Bytecode Sourcemap
31329:18647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32547:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42132:772;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36324:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37723:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32591:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32505:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33244:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36601:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32415:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33392:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40571:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43091:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43899:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40411:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32220:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38237:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32748:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38377:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41552:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36510:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37018:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40922:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33192:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32626:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32995:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39228:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36709:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4338:148;;;;;;;;;;;;;:::i;:::-;;32372:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42958:76;;;;;;;;;;;;;:::i;:::-;;31825:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31894:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32331:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38584:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39570:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3696:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36415:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37562:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32802:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37242:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43724:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32697:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33292:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33052:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32020:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36869:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32449:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41110:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38916:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39962:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39061:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40746:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4641:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38752:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31956:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33432:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49272:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32119:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33503:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32547:37;;;;:::o;42132:772::-;42212:22;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42249:35:::1;42306:16;42249:74;;42370:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42352:53;;;42414:4;42421:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42352:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42335:110;;42526:1;42500:28;;:14;:28;;::::0;42497:201:::1;;42590:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42572:74;;;42655:4;42662:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42572:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42555:131;;42497:201;42724:14;42710:11;;:28;;;;;;;;;;;;;;;;;;42768:16;42750:15;;:34;;;;;;;;;;;;;;;;;;42840:4;42796:19;:41;42824:11;;;;;;;;;;;42796:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;42892:4;42855:12;:34;42876:11;;;;;;;;;;;42855:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;42236:668;42132:772:::0;;;:::o;36324:83::-;36361:13;36394:5;36387:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36324:83;:::o;37723:161::-;37798:4;37815:39;37824:12;:10;:12::i;:::-;37838:7;37847:6;37815:8;:39::i;:::-;37872:4;37865:11;;37723:161;;;;:::o;32591:28::-;;;;:::o;32505:35::-;;;;:::o;33244:41::-;;;;;;;;;;;;;:::o;36601:100::-;36654:7;36681:12;;36674:19;;36601:100;:::o;32415:27::-;;;;:::o;33392:33::-;;;;:::o;40571:135::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40692:6:::1;40662:19;:27;40682:6;40662:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;40571:135:::0;;:::o;43091:456::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43240:6:::1;:13;43215:14;:21;:38;43207:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43322:9;43318:222;43341:14;:21;43337:1;:25;43318:222;;;43383:14;43400;43415:1;43400:17;;;;;;;;:::i;:::-;;;;;;;;43383:34;;43432:21;43456:6;43463:1;43456:9;;;;;;;;:::i;:::-;;;;;;;;43432:33;;43506:6;43485:43;;43494:10;43485:43;;;43514:13;43485:43;;;;;;:::i;:::-;;;;;;;;43368:172;;43364:3;;;;;:::i;:::-;;;;43318:222;;;;43091:456:::0;;:::o;43899:313::-;43997:4;44014:36;44024:6;44032:9;44043:6;44014:9;:36::i;:::-;;44061:121;44070:6;44078:12;:10;:12::i;:::-;44092:89;44130:6;44092:89;;;;;;;;;;;;;;;;;:11;:19;44104:6;44092:19;;;;;;;;;;;;;;;:33;44112:12;:10;:12::i;:::-;44092:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;44061:8;:121::i;:::-;44200:4;44193:11;;43899:313;;;;;:::o;40411:113::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40508:8:::1;40489:16;;:27;;;;;;;;;;;;;;;;;;40411:113:::0;:::o;32220:81::-;;;:::o;38237:128::-;38290:7;38317:40;38334:22;38344:11;38334:9;:22::i;:::-;38317:12;;:16;;:40;;;;:::i;:::-;38310:47;;38237:128;:::o;32748:47::-;;;;:::o;38377:87::-;38417:7;38444:12;38437:19;;38377:87;:::o;41552:369::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41664:1:::1;41642:24;;:10;:24;;::::0;41634:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41737:4;41705:17;:29;41723:10;41705:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41790:5;41752:17;:35;41770:16;;;;;;;;;;;41752:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;41847:16;;;;;;;;;;;41811:53;;41835:10;41811:53;;;;;;;;;;;;41902:10;41875:16;;:38;;;;;;;;;;;;;;;;;;41552:369:::0;:::o;36510:83::-;36551:5;36576:9;;;;;;;;;;;36569:16;;36510:83;:::o;37018:218::-;37106:4;37123:83;37132:12;:10;:12::i;:::-;37146:7;37155:50;37194:10;37155:11;:25;37167:12;:10;:12::i;:::-;37155:25;;;;;;;;;;;;;;;:34;37181:7;37155:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;37123:8;:83::i;:::-;37224:4;37217:11;;37018:218;;;;:::o;40922:124::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41030:8:::1;41004:23;:34;;;;40922:124:::0;:::o;33192:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;32626:35::-;;;;:::o;32995:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;39228:334::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39344:14:::1;39325:16;:33;;;;39387:13;39369:15;:31;;;;39445:15;;39426:16;;:34;;;;:::i;:::-;39411:12;:49;;;;39495:14;;39479:12;;:30;;39471:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39228:334:::0;;:::o;36709:119::-;36775:7;36802:9;:18;36812:7;36802:18;;;;;;;;;;;;;;;;36795:25;;36709:119;;;:::o;4338:148::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4445:1:::1;4408:40;;4429:6;::::0;::::1;;;;;;;;4408:40;;;;;;;;;;;;4476:1;4459:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4338:148::o:0;32372:36::-;;;;:::o;42958:76::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43022:4:::1;43008:11;;:18;;;;;;;;;;;;;;;;;;42958:76::o:0;31825:56::-;;;;:::o;31894:54::-;;;;:::o;32331:34::-;;;;:::o;38584:129::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38697:8:::1;38673:12;:21;38686:7;38673:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38584:129:::0;;:::o;39570:346::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39691:14:::1;39671:17;:34;;;;39735:13;39716:16;:32;;;;39795:16;;39775:17;;:36;;;;:::i;:::-;39759:13;:52;;;;39847:15;;39830:13;;:32;;39822:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39570:346:::0;;:::o;3696:79::-;3734:7;3761:6;;;;;;;;;;;3754:13;;3696:79;:::o;36415:87::-;36454:13;36487:7;36480:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36415:87;:::o;37562:120::-;37624:7;37651:23;;37644:30;;37562:120;:::o;32802:39::-;;;;:::o;37242:269::-;37335:4;37352:129;37361:12;:10;:12::i;:::-;37375:7;37384:96;37423:15;37384:96;;;;;;;;;;;;;;;;;:11;:25;37396:12;:10;:12::i;:::-;37384:25;;;;;;;;;;;;;;;:34;37410:7;37384:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;37352:8;:129::i;:::-;37499:4;37492:11;;37242:269;;;;:::o;43724:167::-;43802:4;43819:42;43829:12;:10;:12::i;:::-;43843:9;43854:6;43819:9;:42::i;:::-;;43879:4;43872:11;;43724:167;;;;:::o;32697:44::-;;;;:::o;33292:26::-;;;;;;;;;;;;;:::o;33052:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;32020:92::-;;;;;;;;;;;;;:::o;36869:143::-;36950:7;36977:11;:18;36989:5;36977:18;;;;;;;;;;;;;;;:27;36996:7;36977:27;;;;;;;;;;;;;;;;36970:34;;36869:143;;;;:::o;32449:34::-;;;;:::o;41110:365::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41221:1:::1;41199:24;;:10;:24;;::::0;41191:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41294:4;41262:17;:29;41280:10;41262:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;41346:5;41309:17;:34;41327:15;;;;;;;;;;;41309:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;41402:15;;;;;;;;;;;41367:51;;41390:10;41367:51;;;;;;;;;;;;41456:10;41429:15;;:38;;;;;;;;;;;;;;;;;;41110:365:::0;:::o;38916:111::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39008:11:::1;38993:12;:26;;;;38916:111:::0;:::o;39962:413::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40110:17:::1;40082:25;:45;;;;40167:18;40138:26;:47;;;;40252:26;;40224:25;;:54;;;;:::i;:::-;40197:24;:81;;;;40325:3;40297:24;;:31;40289:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39962:413:::0;;:::o;39061:135::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39180:8:::1;39151:17;:26;39169:7;39151:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;39061:135:::0;;:::o;40746:102::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40832:8:::1;40818:10;:22;;;;40746:102:::0;:::o;4641:244::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4750:1:::1;4730:22;;:8;:22;;::::0;4722:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4840:8;4811:38;;4832:6;::::0;::::1;;;;;;;;4811:38;;;;;;;;;;;;4869:8;4860:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4641:244:::0;:::o;38752:127::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38865:6:::1;38839:15;:23;38855:6;38839:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;38752:127:::0;;:::o;31956:35::-;;;;;;;;;;;;;:::o;33432:34::-;;;;:::o;49272:527::-;3918:12;:10;:12::i;:::-;3908:22;;:6;;;;;;;;;;:22;;;3900:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49407:21:::1;49445:1;49431:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49407:40;;49468:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49458:4;49463:1;49458:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;49519:4;49501;49506:1;49501:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;49563:15;;;;;;;;;;;:66;;;49637:14;49667:1;49716:4;49743:6;49765:15;49563:228;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;49338:461;49272:527:::0;:::o;32119:94::-;;;;;;;;;;;;;:::o;33503:31::-;;;;;;;;;;;;;:::o;253:98::-;306:7;333:10;326:17;;253:98;:::o;37890:335::-;38000:1;37983:19;;:5;:19;;;37975:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38081:1;38062:21;;:7;:21;;;38054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38163:6;38133:11;:18;38145:5;38133:18;;;;;;;;;;;;;;;:27;38152:7;38133:27;;;;;;;;;;;;;;;:36;;;;38201:7;38185:32;;38194:5;38185:32;;;38210:6;38185:32;;;;;;:::i;:::-;;;;;;;;37890:335;;;:::o;44223:1870::-;44310:4;44353:1;44335:20;;:6;:20;;;44327:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44437:1;44416:23;;:9;:23;;;44408:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44528:11;;;;;;;;;;;44523:138;;44574:7;:5;:7::i;:::-;44564:17;;:6;:17;;;44556:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;44523:138;44676:16;;;;;;;;;;;44673:1413;;;44726:41;44741:6;44749:9;44760:6;44726:14;:41::i;:::-;44719:48;;;;44673:1413;44889:7;:5;:7::i;:::-;44879:17;;:6;:17;;;;:41;;;;;44913:7;:5;:7::i;:::-;44900:20;;:9;:20;;;;44879:41;44875:111;;;44941:28;44955:6;44962;44941:13;:28::i;:::-;44875:111;45050:28;45081:24;45099:4;45081:9;:24::i;:::-;45050:55;;45120:28;45175:23;;45151:20;:47;;45120:78;;45217:23;:44;;;;;45245:16;;;;;;;;;;;45244:17;45217:44;:69;;;;;45266:12;:20;45279:6;45266:20;;;;;;;;;;;;;;;;;;;;;;;;;45265:21;45217:69;45213:164;;;45321:36;45336:20;45321:14;:36::i;:::-;45213:164;45451:53;45473:6;45451:53;;;;;;;;;;;;;;;;;:9;:17;45461:6;45451:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;45431:9;:17;45441:6;45431:17;;;;;;;;;;;;;;;:73;;;;45519:19;45542:17;:25;45560:6;45542:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;45571:17;:28;45589:9;45571:28;;;;;;;;;;;;;;;;;;;;;;;;;45542:57;45541:148;;45655:34;45663:6;45671:9;45682:6;45655:7;:34::i;:::-;45541:148;;;45646:6;45541:148;45519:170;;45752:16;;;;;;;;;;;:51;;;;;45773:19;:30;45793:9;45773:30;;;;;;;;;;;;;;;;;;;;;;;;;45772:31;45752:51;45749:133;;;45871:10;;45830:37;45855:11;45830:20;45840:9;45830;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;45822:60;;;;;;45749:133;45951:37;45976:11;45951:9;:20;45961:9;45951:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;45928:9;:20;45938:9;45928:20;;;;;;;;;;;;;;;:60;;;;46025:9;46008:40;;46017:6;46008:40;;;46036:11;46008:40;;;;;;:::i;:::-;;;;;;;;46070:4;46063:11;;;;;44223:1870;;;;;;:::o;9442:192::-;9528:7;9561:1;9556;:6;;9564:12;9548:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9588:9;9604:1;9600;:5;;;;:::i;:::-;9588:17;;9625:1;9618:8;;;9442:192;;;;;:::o;9003:136::-;9061:7;9088:43;9092:1;9095;9088:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9081:50;;9003:136;;;;:::o;8539:181::-;8597:7;8617:9;8633:1;8629;:5;;;;:::i;:::-;8617:17;;8658:1;8653;:6;;8645:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8711:1;8704:8;;;8539:181;;;;:::o;46127:330::-;46220:4;46257:53;46279:6;46257:53;;;;;;;;;;;;;;;;;:9;:17;46267:6;46257:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;46237:9;:17;46247:6;46237:17;;;;;;;;;;;;;;;:73;;;;46344:32;46369:6;46344:9;:20;46354:9;46344:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;46321:9;:20;46331:9;46321:20;;;;;;;;;;;;;;;:55;;;;46409:9;46392:35;;46401:6;46392:35;;;46420:6;46392:35;;;;;;:::i;:::-;;;;;;;;46445:4;46438:11;;46127:330;;;;;:::o;49807:166::-;49904:12;;49894:6;:22;;:49;;;;49920:15;:23;49936:6;49920:23;;;;;;;;;;;;;;;;;;;;;;;;;49894:49;49886:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49807:166;;:::o;47118:1095::-;34052:4;34033:16;;:23;;;;;;;;;;;;;;;;;;47248:19:::1;47270:78;47346:1;47270:71;47316:24;;47270:41;47285:25;;47270:10;:14;;:41;;;;:::i;:::-;:45;;:71;;;;:::i;:::-;:75;;:78;;;;:::i;:::-;47248:100;;47359:21;47383:27;47398:11;47383:10;:14;;:27;;;;:::i;:::-;47359:51;;47450:31;47467:13;47450:16;:31::i;:::-;47522:22;47547:21;47522:46;;47623:16;47642:62;47671:32;47701:1;47671:25;;:29;;:32;;;;:::i;:::-;47642:24;;:28;;:62;;;;:::i;:::-;47623:81;;47715:23;47741:66;47805:1;47741:59;47791:8;47741:45;47760:25;;47741:14;:18;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;47715:92;;47834:24;47861:35;47880:15;47861:14;:18;;:35;;;;:::i;:::-;47834:62;;47931:1;47912:16;:20;47909:94;;;47947:56;47968:16;;;;;;;;;;;47986;47947:20;:56::i;:::-;47909:94;48037:1;48019:15;:19;:38;;;;;48056:1;48042:11;:15;48019:38;48016:190;;;48073:42;48086:11;48099:15;48073:12;:42::i;:::-;48135:59;48150:13;48165:15;48182:11;48135:59;;;;;;;;:::i;:::-;;;;;;;;48016:190;47182:1031;;;;;;34098:5:::0;34079:16;;:24;;;;;;;;;;;;;;;;;;47118:1095;:::o;46493:580::-;46579:7;46599:17;46619:1;46599:21;;46634:12;:20;46647:6;46634:20;;;;;;;;;;;;;;;;;;;;;;;;;46631:213;;;46683:33;46712:3;46683:24;46694:12;;46683:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46671:45;;46631:213;;;46746:12;:23;46759:9;46746:23;;;;;;;;;;;;;;;;;;;;;;;;;46743:101;;;46798:34;46828:3;46798:25;46809:13;;46798:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46786:46;;46743:101;46631:213;46869:1;46857:9;:13;46854:173;;;46914:39;46943:9;46914;:24;46932:4;46914:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;46887:9;:24;46905:4;46887:24;;;;;;;;;;;;;;;:66;;;;46998:4;46973:42;;46982:6;46973:42;;;47005:9;46973:42;;;;;;:::i;:::-;;;;;;;;46854:173;47044:21;47055:9;47044:6;:10;;:21;;;;:::i;:::-;47037:28;;;46493:580;;;;;:::o;9893:471::-;9951:7;10201:1;10196;:6;10192:47;;10226:1;10219:8;;;;10192:47;10251:9;10267:1;10263;:5;;;;:::i;:::-;10251:17;;10296:1;10291;10287;:5;;;;:::i;:::-;:10;10279:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10355:1;10348:8;;;9893:471;;;;;:::o;10840:132::-;10898:7;10925:39;10929:1;10932;10925:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10918:46;;10840:132;;;;:::o;48248:524::-;48314:21;48352:1;48338:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48314:40;;48383:4;48365;48370:1;48365:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48409:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48399:4;48404:1;48399:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48442:62;48459:4;48474:15;;;;;;;;;;;48492:11;48442:8;:62::i;:::-;48515:15;;;;;;;;;;;:66;;;48596:11;48622:1;48639:4;48666;48687:15;48515:198;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48729:35;48746:11;48759:4;48729:35;;;;;;;:::i;:::-;;;;;;;;48303:469;48248:524;:::o;41968:126::-;42060:9;:18;;:26;42079:6;42060:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41968:126;;:::o;48803:362::-;48884:62;48901:4;48916:15;;;;;;;;;;;48934:11;48884:8;:62::i;:::-;48957:15;;;;;;;;;;;:31;;;48996:9;49029:4;49049:11;49075:1;49092;49109:7;:5;:7::i;:::-;49131:15;48957:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48803:362;;:::o;11468:278::-;11554:7;11586:1;11582;:5;11589:12;11574:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11613:9;11629:1;11625;:5;;;;:::i;:::-;11613:17;;11737:1;11730:8;;;11468:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:222::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1735:222;;;;:::o;1963:99::-;2015:6;2049:5;2043:12;2033:22;;1963:99;;;:::o;2068:169::-;2152:11;2186:6;2181:3;2174:19;2226:4;2221:3;2217:14;2202:29;;2068:169;;;;:::o;2243:246::-;2324:1;2334:113;2348:6;2345:1;2342:13;2334:113;;;2433:1;2428:3;2424:11;2418:18;2414:1;2409:3;2405:11;2398:39;2370:2;2367:1;2363:10;2358:15;;2334:113;;;2481:1;2472:6;2467:3;2463:16;2456:27;2305:184;2243:246;;;:::o;2495:102::-;2536:6;2587:2;2583:7;2578:2;2571:5;2567:14;2563:28;2553:38;;2495:102;;;:::o;2603:377::-;2691:3;2719:39;2752:5;2719:39;:::i;:::-;2774:71;2838:6;2833:3;2774:71;:::i;:::-;2767:78;;2854:65;2912:6;2907:3;2900:4;2893:5;2889:16;2854:65;:::i;:::-;2944:29;2966:6;2944:29;:::i;:::-;2939:3;2935:39;2928:46;;2695:285;2603:377;;;;:::o;2986:313::-;3099:4;3137:2;3126:9;3122:18;3114:26;;3186:9;3180:4;3176:20;3172:1;3161:9;3157:17;3150:47;3214:78;3287:4;3278:6;3214:78;:::i;:::-;3206:86;;2986:313;;;;:::o;3305:122::-;3378:24;3396:5;3378:24;:::i;:::-;3371:5;3368:35;3358:63;;3417:1;3414;3407:12;3358:63;3305:122;:::o;3433:139::-;3479:5;3517:6;3504:20;3495:29;;3533:33;3560:5;3533:33;:::i;:::-;3433:139;;;;:::o;3578:474::-;3646:6;3654;3703:2;3691:9;3682:7;3678:23;3674:32;3671:119;;;3709:79;;:::i;:::-;3671:119;3829:1;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;:::i;:::-;3844:63;;3800:117;3956:2;3982:53;4027:7;4018:6;4007:9;4003:22;3982:53;:::i;:::-;3972:63;;3927:118;3578:474;;;;;:::o;4058:90::-;4092:7;4135:5;4128:13;4121:21;4110:32;;4058:90;;;:::o;4154:109::-;4235:21;4250:5;4235:21;:::i;:::-;4230:3;4223:34;4154:109;;:::o;4269:210::-;4356:4;4394:2;4383:9;4379:18;4371:26;;4407:65;4469:1;4458:9;4454:17;4445:6;4407:65;:::i;:::-;4269:210;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:153::-;4908:9;4941:37;4972:5;4941:37;:::i;:::-;4928:50;;4831:153;;;:::o;4990:185::-;5104:64;5162:5;5104:64;:::i;:::-;5099:3;5092:77;4990:185;;:::o;5181:276::-;5301:4;5339:2;5328:9;5324:18;5316:26;;5352:98;5447:1;5436:9;5432:17;5423:6;5352:98;:::i;:::-;5181:276;;;;:::o;5463:116::-;5533:21;5548:5;5533:21;:::i;:::-;5526:5;5523:32;5513:60;;5569:1;5566;5559:12;5513:60;5463:116;:::o;5585:133::-;5628:5;5666:6;5653:20;5644:29;;5682:30;5706:5;5682:30;:::i;:::-;5585:133;;;;:::o;5724:468::-;5789:6;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:50;6167:7;6158:6;6147:9;6143:22;6125:50;:::i;:::-;6115:60;;6070:115;5724:468;;;;;:::o;6198:117::-;6307:1;6304;6297:12;6321:180;6369:77;6366:1;6359:88;6466:4;6463:1;6456:15;6490:4;6487:1;6480:15;6507:281;6590:27;6612:4;6590:27;:::i;:::-;6582:6;6578:40;6720:6;6708:10;6705:22;6684:18;6672:10;6669:34;6666:62;6663:88;;;6731:18;;:::i;:::-;6663:88;6771:10;6767:2;6760:22;6550:238;6507:281;;:::o;6794:129::-;6828:6;6855:20;;:::i;:::-;6845:30;;6884:33;6912:4;6904:6;6884:33;:::i;:::-;6794:129;;;:::o;6929:311::-;7006:4;7096:18;7088:6;7085:30;7082:56;;;7118:18;;:::i;:::-;7082:56;7168:4;7160:6;7156:17;7148:25;;7228:4;7222;7218:15;7210:23;;6929:311;;;:::o;7246:117::-;7355:1;7352;7345:12;7386:710;7482:5;7507:81;7523:64;7580:6;7523:64;:::i;:::-;7507:81;:::i;:::-;7498:90;;7608:5;7637:6;7630:5;7623:21;7671:4;7664:5;7660:16;7653:23;;7724:4;7716:6;7712:17;7704:6;7700:30;7753:3;7745:6;7742:15;7739:122;;;7772:79;;:::i;:::-;7739:122;7887:6;7870:220;7904:6;7899:3;7896:15;7870:220;;;7979:3;8008:37;8041:3;8029:10;8008:37;:::i;:::-;8003:3;7996:50;8075:4;8070:3;8066:14;8059:21;;7946:144;7930:4;7925:3;7921:14;7914:21;;7870:220;;;7874:21;7488:608;;7386:710;;;;;:::o;8119:370::-;8190:5;8239:3;8232:4;8224:6;8220:17;8216:27;8206:122;;8247:79;;:::i;:::-;8206:122;8364:6;8351:20;8389:94;8479:3;8471:6;8464:4;8456:6;8452:17;8389:94;:::i;:::-;8380:103;;8196:293;8119:370;;;;:::o;8495:311::-;8572:4;8662:18;8654:6;8651:30;8648:56;;;8684:18;;:::i;:::-;8648:56;8734:4;8726:6;8722:17;8714:25;;8794:4;8788;8784:15;8776:23;;8495:311;;;:::o;8829:710::-;8925:5;8950:81;8966:64;9023:6;8966:64;:::i;:::-;8950:81;:::i;:::-;8941:90;;9051:5;9080:6;9073:5;9066:21;9114:4;9107:5;9103:16;9096:23;;9167:4;9159:6;9155:17;9147:6;9143:30;9196:3;9188:6;9185:15;9182:122;;;9215:79;;:::i;:::-;9182:122;9330:6;9313:220;9347:6;9342:3;9339:15;9313:220;;;9422:3;9451:37;9484:3;9472:10;9451:37;:::i;:::-;9446:3;9439:50;9518:4;9513:3;9509:14;9502:21;;9389:144;9373:4;9368:3;9364:14;9357:21;;9313:220;;;9317:21;8931:608;;8829:710;;;;;:::o;9562:370::-;9633:5;9682:3;9675:4;9667:6;9663:17;9659:27;9649:122;;9690:79;;:::i;:::-;9649:122;9807:6;9794:20;9832:94;9922:3;9914:6;9907:4;9899:6;9895:17;9832:94;:::i;:::-;9823:103;;9639:293;9562:370;;;;:::o;9938:894::-;10056:6;10064;10113:2;10101:9;10092:7;10088:23;10084:32;10081:119;;;10119:79;;:::i;:::-;10081:119;10267:1;10256:9;10252:17;10239:31;10297:18;10289:6;10286:30;10283:117;;;10319:79;;:::i;:::-;10283:117;10424:78;10494:7;10485:6;10474:9;10470:22;10424:78;:::i;:::-;10414:88;;10210:302;10579:2;10568:9;10564:18;10551:32;10610:18;10602:6;10599:30;10596:117;;;10632:79;;:::i;:::-;10596:117;10737:78;10807:7;10798:6;10787:9;10783:22;10737:78;:::i;:::-;10727:88;;10522:303;9938:894;;;;;:::o;10838:619::-;10915:6;10923;10931;10980:2;10968:9;10959:7;10955:23;10951:32;10948:119;;;10986:79;;:::i;:::-;10948:119;11106:1;11131:53;11176:7;11167:6;11156:9;11152:22;11131:53;:::i;:::-;11121:63;;11077:117;11233:2;11259:53;11304:7;11295:6;11284:9;11280:22;11259:53;:::i;:::-;11249:63;;11204:118;11361:2;11387:53;11432:7;11423:6;11412:9;11408:22;11387:53;:::i;:::-;11377:63;;11332:118;10838:619;;;;;:::o;11463:323::-;11519:6;11568:2;11556:9;11547:7;11543:23;11539:32;11536:119;;;11574:79;;:::i;:::-;11536:119;11694:1;11719:50;11761:7;11752:6;11741:9;11737:22;11719:50;:::i;:::-;11709:60;;11665:114;11463:323;;;;:::o;11792:86::-;11827:7;11867:4;11860:5;11856:16;11845:27;;11792:86;;;:::o;11884:112::-;11967:22;11983:5;11967:22;:::i;:::-;11962:3;11955:35;11884:112;;:::o;12002:214::-;12091:4;12129:2;12118:9;12114:18;12106:26;;12142:67;12206:1;12195:9;12191:17;12182:6;12142:67;:::i;:::-;12002:214;;;;:::o;12222:329::-;12281:6;12330:2;12318:9;12309:7;12305:23;12301:32;12298:119;;;12336:79;;:::i;:::-;12298:119;12456:1;12481:53;12526:7;12517:6;12506:9;12502:22;12481:53;:::i;:::-;12471:63;;12427:117;12222:329;;;;:::o;12557:474::-;12625:6;12633;12682:2;12670:9;12661:7;12657:23;12653:32;12650:119;;;12688:79;;:::i;:::-;12650:119;12808:1;12833:53;12878:7;12869:6;12858:9;12854:22;12833:53;:::i;:::-;12823:63;;12779:117;12935:2;12961:53;13006:7;12997:6;12986:9;12982:22;12961:53;:::i;:::-;12951:63;;12906:118;12557:474;;;;;:::o;13037:104::-;13082:7;13111:24;13129:5;13111:24;:::i;:::-;13100:35;;13037:104;;;:::o;13147:142::-;13250:32;13276:5;13250:32;:::i;:::-;13245:3;13238:45;13147:142;;:::o;13295:254::-;13404:4;13442:2;13431:9;13427:18;13419:26;;13455:87;13539:1;13528:9;13524:17;13515:6;13455:87;:::i;:::-;13295:254;;;;:::o;13555:474::-;13623:6;13631;13680:2;13668:9;13659:7;13655:23;13651:32;13648:119;;;13686:79;;:::i;:::-;13648:119;13806:1;13831:53;13876:7;13867:6;13856:9;13852:22;13831:53;:::i;:::-;13821:63;;13777:117;13933:2;13959:53;14004:7;13995:6;13984:9;13980:22;13959:53;:::i;:::-;13949:63;;13904:118;13555:474;;;;;:::o;14035:182::-;14175:34;14171:1;14163:6;14159:14;14152:58;14035:182;:::o;14223:366::-;14365:3;14386:67;14450:2;14445:3;14386:67;:::i;:::-;14379:74;;14462:93;14551:3;14462:93;:::i;:::-;14580:2;14575:3;14571:12;14564:19;;14223:366;;;:::o;14595:419::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14848:9;14842:4;14838:20;14834:1;14823:9;14819:17;14812:47;14876:131;15002:4;14876:131;:::i;:::-;14868:139;;14595:419;;;:::o;15020:143::-;15077:5;15108:6;15102:13;15093:22;;15124:33;15151:5;15124:33;:::i;:::-;15020:143;;;;:::o;15169:351::-;15239:6;15288:2;15276:9;15267:7;15263:23;15259:32;15256:119;;;15294:79;;:::i;:::-;15256:119;15414:1;15439:64;15495:7;15486:6;15475:9;15471:22;15439:64;:::i;:::-;15429:74;;15385:128;15169:351;;;;:::o;15526:332::-;15647:4;15685:2;15674:9;15670:18;15662:26;;15698:71;15766:1;15755:9;15751:17;15742:6;15698:71;:::i;:::-;15779:72;15847:2;15836:9;15832:18;15823:6;15779:72;:::i;:::-;15526:332;;;;;:::o;15864:180::-;15912:77;15909:1;15902:88;16009:4;16006:1;15999:15;16033:4;16030:1;16023:15;16050:320;16094:6;16131:1;16125:4;16121:12;16111:22;;16178:1;16172:4;16168:12;16199:18;16189:81;;16255:4;16247:6;16243:17;16233:27;;16189:81;16317:2;16309:6;16306:14;16286:18;16283:38;16280:84;;16336:18;;:::i;:::-;16280:84;16101:269;16050:320;;;:::o;16376:236::-;16516:34;16512:1;16504:6;16500:14;16493:58;16585:19;16580:2;16572:6;16568:15;16561:44;16376:236;:::o;16618:366::-;16760:3;16781:67;16845:2;16840:3;16781:67;:::i;:::-;16774:74;;16857:93;16946:3;16857:93;:::i;:::-;16975:2;16970:3;16966:12;16959:19;;16618:366;;;:::o;16990:419::-;17156:4;17194:2;17183:9;17179:18;17171:26;;17243:9;17237:4;17233:20;17229:1;17218:9;17214:17;17207:47;17271:131;17397:4;17271:131;:::i;:::-;17263:139;;16990:419;;;:::o;17415:180::-;17463:77;17460:1;17453:88;17560:4;17557:1;17550:15;17584:4;17581:1;17574:15;17601:180;17649:77;17646:1;17639:88;17746:4;17743:1;17736:15;17770:4;17767:1;17760:15;17787:233;17826:3;17849:24;17867:5;17849:24;:::i;:::-;17840:33;;17895:66;17888:5;17885:77;17882:103;;17965:18;;:::i;:::-;17882:103;18012:1;18005:5;18001:13;17994:20;;17787:233;;;:::o;18026:173::-;18166:25;18162:1;18154:6;18150:14;18143:49;18026:173;:::o;18205:366::-;18347:3;18368:67;18432:2;18427:3;18368:67;:::i;:::-;18361:74;;18444:93;18533:3;18444:93;:::i;:::-;18562:2;18557:3;18553:12;18546:19;;18205:366;;;:::o;18577:419::-;18743:4;18781:2;18770:9;18766:18;18758:26;;18830:9;18824:4;18820:20;18816:1;18805:9;18801:17;18794:47;18858:131;18984:4;18858:131;:::i;:::-;18850:139;;18577:419;;;:::o;19002:191::-;19042:3;19061:20;19079:1;19061:20;:::i;:::-;19056:25;;19095:20;19113:1;19095:20;:::i;:::-;19090:25;;19138:1;19135;19131:9;19124:16;;19159:3;19156:1;19153:10;19150:36;;;19166:18;;:::i;:::-;19150:36;19002:191;;;;:::o;19199:227::-;19339:34;19335:1;19327:6;19323:14;19316:58;19408:10;19403:2;19395:6;19391:15;19384:35;19199:227;:::o;19432:366::-;19574:3;19595:67;19659:2;19654:3;19595:67;:::i;:::-;19588:74;;19671:93;19760:3;19671:93;:::i;:::-;19789:2;19784:3;19780:12;19773:19;;19432:366;;;:::o;19804:419::-;19970:4;20008:2;19997:9;19993:18;19985:26;;20057:9;20051:4;20047:20;20043:1;20032:9;20028:17;20021:47;20085:131;20211:4;20085:131;:::i;:::-;20077:139;;19804:419;;;:::o;20229:228::-;20369:34;20365:1;20357:6;20353:14;20346:58;20438:11;20433:2;20425:6;20421:15;20414:36;20229:228;:::o;20463:366::-;20605:3;20626:67;20690:2;20685:3;20626:67;:::i;:::-;20619:74;;20702:93;20791:3;20702:93;:::i;:::-;20820:2;20815:3;20811:12;20804:19;;20463:366;;;:::o;20835:419::-;21001:4;21039:2;21028:9;21024:18;21016:26;;21088:9;21082:4;21078:20;21074:1;21063:9;21059:17;21052:47;21116:131;21242:4;21116:131;:::i;:::-;21108:139;;20835:419;;;:::o;21260:221::-;21400:34;21396:1;21388:6;21384:14;21377:58;21469:4;21464:2;21456:6;21452:15;21445:29;21260:221;:::o;21487:366::-;21629:3;21650:67;21714:2;21709:3;21650:67;:::i;:::-;21643:74;;21726:93;21815:3;21726:93;:::i;:::-;21844:2;21839:3;21835:12;21828:19;;21487:366;;;:::o;21859:419::-;22025:4;22063:2;22052:9;22048:18;22040:26;;22112:9;22106:4;22102:20;22098:1;22087:9;22083:17;22076:47;22140:131;22266:4;22140:131;:::i;:::-;22132:139;;21859:419;;;:::o;22284:225::-;22424:34;22420:1;22412:6;22408:14;22401:58;22493:8;22488:2;22480:6;22476:15;22469:33;22284:225;:::o;22515:366::-;22657:3;22678:67;22742:2;22737:3;22678:67;:::i;:::-;22671:74;;22754:93;22843:3;22754:93;:::i;:::-;22872:2;22867:3;22863:12;22856:19;;22515:366;;;:::o;22887:419::-;23053:4;23091:2;23080:9;23076:18;23068:26;;23140:9;23134:4;23130:20;23126:1;23115:9;23111:17;23104:47;23168:131;23294:4;23168:131;:::i;:::-;23160:139;;22887:419;;;:::o;23312:85::-;23357:7;23386:5;23375:16;;23312:85;;;:::o;23403:158::-;23461:9;23494:61;23512:42;23521:32;23547:5;23521:32;:::i;:::-;23512:42;:::i;:::-;23494:61;:::i;:::-;23481:74;;23403:158;;;:::o;23567:147::-;23662:45;23701:5;23662:45;:::i;:::-;23657:3;23650:58;23567:147;;:::o;23720:114::-;23787:6;23821:5;23815:12;23805:22;;23720:114;;;:::o;23840:184::-;23939:11;23973:6;23968:3;23961:19;24013:4;24008:3;24004:14;23989:29;;23840:184;;;;:::o;24030:132::-;24097:4;24120:3;24112:11;;24150:4;24145:3;24141:14;24133:22;;24030:132;;;:::o;24168:108::-;24245:24;24263:5;24245:24;:::i;:::-;24240:3;24233:37;24168:108;;:::o;24282:179::-;24351:10;24372:46;24414:3;24406:6;24372:46;:::i;:::-;24450:4;24445:3;24441:14;24427:28;;24282:179;;;;:::o;24467:113::-;24537:4;24569;24564:3;24560:14;24552:22;;24467:113;;;:::o;24616:732::-;24735:3;24764:54;24812:5;24764:54;:::i;:::-;24834:86;24913:6;24908:3;24834:86;:::i;:::-;24827:93;;24944:56;24994:5;24944:56;:::i;:::-;25023:7;25054:1;25039:284;25064:6;25061:1;25058:13;25039:284;;;25140:6;25134:13;25167:63;25226:3;25211:13;25167:63;:::i;:::-;25160:70;;25253:60;25306:6;25253:60;:::i;:::-;25243:70;;25099:224;25086:1;25083;25079:9;25074:14;;25039:284;;;25043:14;25339:3;25332:10;;24740:608;;;24616:732;;;;:::o;25354:720::-;25589:4;25627:3;25616:9;25612:19;25604:27;;25641:79;25717:1;25706:9;25702:17;25693:6;25641:79;:::i;:::-;25767:9;25761:4;25757:20;25752:2;25741:9;25737:18;25730:48;25795:108;25898:4;25889:6;25795:108;:::i;:::-;25787:116;;25913:72;25981:2;25970:9;25966:18;25957:6;25913:72;:::i;:::-;25995;26063:2;26052:9;26048:18;26039:6;25995:72;:::i;:::-;25354:720;;;;;;;:::o;26080:223::-;26220:34;26216:1;26208:6;26204:14;26197:58;26289:6;26284:2;26276:6;26272:15;26265:31;26080:223;:::o;26309:366::-;26451:3;26472:67;26536:2;26531:3;26472:67;:::i;:::-;26465:74;;26548:93;26637:3;26548:93;:::i;:::-;26666:2;26661:3;26657:12;26650:19;;26309:366;;;:::o;26681:419::-;26847:4;26885:2;26874:9;26870:18;26862:26;;26934:9;26928:4;26924:20;26920:1;26909:9;26905:17;26898:47;26962:131;27088:4;26962:131;:::i;:::-;26954:139;;26681:419;;;:::o;27106:221::-;27246:34;27242:1;27234:6;27230:14;27223:58;27315:4;27310:2;27302:6;27298:15;27291:29;27106:221;:::o;27333:366::-;27475:3;27496:67;27560:2;27555:3;27496:67;:::i;:::-;27489:74;;27572:93;27661:3;27572:93;:::i;:::-;27690:2;27685:3;27681:12;27674:19;;27333:366;;;:::o;27705:419::-;27871:4;27909:2;27898:9;27894:18;27886:26;;27958:9;27952:4;27948:20;27944:1;27933:9;27929:17;27922:47;27986:131;28112:4;27986:131;:::i;:::-;27978:139;;27705:419;;;:::o;28130:224::-;28270:34;28266:1;28258:6;28254:14;28247:58;28339:7;28334:2;28326:6;28322:15;28315:32;28130:224;:::o;28360:366::-;28502:3;28523:67;28587:2;28582:3;28523:67;:::i;:::-;28516:74;;28599:93;28688:3;28599:93;:::i;:::-;28717:2;28712:3;28708:12;28701:19;;28360:366;;;:::o;28732:419::-;28898:4;28936:2;28925:9;28921:18;28913:26;;28985:9;28979:4;28975:20;28971:1;28960:9;28956:17;28949:47;29013:131;29139:4;29013:131;:::i;:::-;29005:139;;28732:419;;;:::o;29157:222::-;29297:34;29293:1;29285:6;29281:14;29274:58;29366:5;29361:2;29353:6;29349:15;29342:30;29157:222;:::o;29385:366::-;29527:3;29548:67;29612:2;29607:3;29548:67;:::i;:::-;29541:74;;29624:93;29713:3;29624:93;:::i;:::-;29742:2;29737:3;29733:12;29726:19;;29385:366;;;:::o;29757:419::-;29923:4;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29757:419;;;:::o;30182:250::-;30322:34;30318:1;30310:6;30306:14;30299:58;30391:33;30386:2;30378:6;30374:15;30367:58;30182:250;:::o;30438:366::-;30580:3;30601:67;30665:2;30660:3;30601:67;:::i;:::-;30594:74;;30677:93;30766:3;30677:93;:::i;:::-;30795:2;30790:3;30786:12;30779:19;;30438:366;;;:::o;30810:419::-;30976:4;31014:2;31003:9;30999:18;30991:26;;31063:9;31057:4;31053:20;31049:1;31038:9;31034:17;31027:47;31091:131;31217:4;31091:131;:::i;:::-;31083:139;;30810:419;;;:::o;31235:194::-;31275:4;31295:20;31313:1;31295:20;:::i;:::-;31290:25;;31329:20;31347:1;31329:20;:::i;:::-;31324:25;;31373:1;31370;31366:9;31358:17;;31397:1;31391:4;31388:11;31385:37;;;31402:18;;:::i;:::-;31385:37;31235:194;;;;:::o;31435:177::-;31575:29;31571:1;31563:6;31559:14;31552:53;31435:177;:::o;31618:366::-;31760:3;31781:67;31845:2;31840:3;31781:67;:::i;:::-;31774:74;;31857:93;31946:3;31857:93;:::i;:::-;31975:2;31970:3;31966:12;31959:19;;31618:366;;;:::o;31990:419::-;32156:4;32194:2;32183:9;32179:18;32171:26;;32243:9;32237:4;32233:20;32229:1;32218:9;32214:17;32207:47;32271:131;32397:4;32271:131;:::i;:::-;32263:139;;31990:419;;;:::o;32415:167::-;32555:19;32551:1;32543:6;32539:14;32532:43;32415:167;:::o;32588:366::-;32730:3;32751:67;32815:2;32810:3;32751:67;:::i;:::-;32744:74;;32827:93;32916:3;32827:93;:::i;:::-;32945:2;32940:3;32936:12;32929:19;;32588:366;;;:::o;32960:419::-;33126:4;33164:2;33153:9;33149:18;33141:26;;33213:9;33207:4;33203:20;33199:1;33188:9;33184:17;33177:47;33241:131;33367:4;33241:131;:::i;:::-;33233:139;;32960:419;;;:::o;33385:442::-;33534:4;33572:2;33561:9;33557:18;33549:26;;33585:71;33653:1;33642:9;33638:17;33629:6;33585:71;:::i;:::-;33666:72;33734:2;33723:9;33719:18;33710:6;33666:72;:::i;:::-;33748;33816:2;33805:9;33801:18;33792:6;33748:72;:::i;:::-;33385:442;;;;;;:::o;33833:410::-;33873:7;33896:20;33914:1;33896:20;:::i;:::-;33891:25;;33930:20;33948:1;33930:20;:::i;:::-;33925:25;;33985:1;33982;33978:9;34007:30;34025:11;34007:30;:::i;:::-;33996:41;;34186:1;34177:7;34173:15;34170:1;34167:22;34147:1;34140:9;34120:83;34097:139;;34216:18;;:::i;:::-;34097:139;33881:362;33833:410;;;;:::o;34249:180::-;34297:77;34294:1;34287:88;34394:4;34391:1;34384:15;34418:4;34415:1;34408:15;34435:185;34475:1;34492:20;34510:1;34492:20;:::i;:::-;34487:25;;34526:20;34544:1;34526:20;:::i;:::-;34521:25;;34565:1;34555:35;;34570:18;;:::i;:::-;34555:35;34612:1;34609;34605:9;34600:14;;34435:185;;;;:::o;34626:220::-;34766:34;34762:1;34754:6;34750:14;34743:58;34835:3;34830:2;34822:6;34818:15;34811:28;34626:220;:::o;34852:366::-;34994:3;35015:67;35079:2;35074:3;35015:67;:::i;:::-;35008:74;;35091:93;35180:3;35091:93;:::i;:::-;35209:2;35204:3;35200:12;35193:19;;34852:366;;;:::o;35224:419::-;35390:4;35428:2;35417:9;35413:18;35405:26;;35477:9;35471:4;35467:20;35463:1;35452:9;35448:17;35441:47;35505:131;35631:4;35505:131;:::i;:::-;35497:139;;35224:419;;;:::o;35649:831::-;35912:4;35950:3;35939:9;35935:19;35927:27;;35964:71;36032:1;36021:9;36017:17;36008:6;35964:71;:::i;:::-;36045:80;36121:2;36110:9;36106:18;36097:6;36045:80;:::i;:::-;36172:9;36166:4;36162:20;36157:2;36146:9;36142:18;36135:48;36200:108;36303:4;36294:6;36200:108;:::i;:::-;36192:116;;36318:72;36386:2;36375:9;36371:18;36362:6;36318:72;:::i;:::-;36400:73;36468:3;36457:9;36453:19;36444:6;36400:73;:::i;:::-;35649:831;;;;;;;;:::o;36486:483::-;36657:4;36695:2;36684:9;36680:18;36672:26;;36708:71;36776:1;36765:9;36761:17;36752:6;36708:71;:::i;:::-;36826:9;36820:4;36816:20;36811:2;36800:9;36796:18;36789:48;36854:108;36957:4;36948:6;36854:108;:::i;:::-;36846:116;;36486:483;;;;;:::o;36975:807::-;37224:4;37262:3;37251:9;37247:19;37239:27;;37276:71;37344:1;37333:9;37329:17;37320:6;37276:71;:::i;:::-;37357:72;37425:2;37414:9;37410:18;37401:6;37357:72;:::i;:::-;37439:80;37515:2;37504:9;37500:18;37491:6;37439:80;:::i;:::-;37529;37605:2;37594:9;37590:18;37581:6;37529:80;:::i;:::-;37619:73;37687:3;37676:9;37672:19;37663:6;37619:73;:::i;:::-;37702;37770:3;37759:9;37755:19;37746:6;37702:73;:::i;:::-;36975:807;;;;;;;;;:::o;37788:143::-;37845:5;37876:6;37870:13;37861:22;;37892:33;37919:5;37892:33;:::i;:::-;37788:143;;;;:::o;37937:663::-;38025:6;38033;38041;38090:2;38078:9;38069:7;38065:23;38061:32;38058:119;;;38096:79;;:::i;:::-;38058:119;38216:1;38241:64;38297:7;38288:6;38277:9;38273:22;38241:64;:::i;:::-;38231:74;;38187:128;38354:2;38380:64;38436:7;38427:6;38416:9;38412:22;38380:64;:::i;:::-;38370:74;;38325:129;38493:2;38519:64;38575:7;38566:6;38555:9;38551:22;38519:64;:::i;:::-;38509:74;;38464:129;37937:663;;;;;:::o
Swarm Source
ipfs://03ad6e208cb67235e38e57256ac577563cf3564bd9e2f95c015ed8ed9e6b65ad
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.