ERC-20
Overview
Max Total Supply
10,000,000,000 TATSUMAKI
Holders
83
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
4,947,760.168153397 TATSUMAKIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Tastumaki
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-24 */ /** *Submitted for verification at Etherscan.io on 2021-12-28 */ pragma solidity ^0.6.12; // SPDX-License-Identifier: Unlicensed 0x7b527bd019E9f745497F2cB51C658cb10E2C914F interface IERC20 { 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 Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ 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); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { 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; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = now + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } /* To be modified before deploying this contract for a project: - Uniswap Router address if not on ETH - Dev address */ contract Tastumaki is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMax; mapping (address => bool) private _isExcluded; mapping (address => bool) isBlacklisted; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10 * 10**9 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address private _devAddress = 0x597b45E8DaEd91c6b5241A1C7290cfac357776bf; address private _burnAddress = 0x0000000000000000000000000000000000000001; string private _name = "Tatsumaki"; string private _symbol = "TATSUMAKI"; uint8 private _decimals = 9; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _devFee = 4; uint256 private _previousDevFee = _devFee; uint256 public _burnFee = 1; uint256 private _previousBurnFee = _burnFee; uint256 private _beforeLaunchFee = 99; uint256 private _previousBeforeLaunchFee = _beforeLaunchFee; uint256 public launchedAt; uint256 public launchedAtTimestamp; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; uint256 public _maxTxAmount = _tTotal.div(100).mul(1); uint256 public _maxWalletToken = _tTotal.div(50).mul(1); constructor () public { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // exclude owner, dev wallet, and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_devAddress] = true; _isExcludedFromMax[owner()] = true; _isExcludedFromMax[address(this)] = true; _isExcludedFromMax[_devAddress] = true; _isExcludedFromMax[uniswapV2Pair] = true; emit Transfer(address(0), _msgSender(), _tTotal); } 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 _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, 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 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; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function setIsBlacklisted(address account, bool blacklisted) external onlyOwner() { isBlacklisted[account] = blacklisted; } function blacklistMultipleAccounts(address[] calldata accounts, bool blacklisted) external onlyOwner() { for (uint256 i = 0; i < accounts.length; i++) { isBlacklisted[accounts[i]] = blacklisted; } } function isAccountBlacklisted(address account) external view returns (bool) { return isBlacklisted[account]; } function isExcludedFromMax(address holder, bool exempt) external onlyOwner() { _isExcludedFromMax[holder] = exempt; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function burnAddress() public view returns (address) { return _burnAddress; } function devAddress() public view returns (address) { return _devAddress; } function launch() public onlyOwner() { require(launchedAt == 0, "Already launched."); launchedAt = block.number; launchedAtTimestamp = block.timestamp; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (,uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount,,) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); (,uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); if (!deductTransferFee) { return rAmount; } else { return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner() { _burnFee = burnFee; } function setDevFeePercent(uint256 devFee) external onlyOwner() { _devFee = devFee; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() { _maxTxAmount = _tTotal.mul(maxTxPercent).div( 10**2 ); } function setMaxWalletPercent(uint256 maxWalletToken) external onlyOwner() { _maxWalletToken = _tTotal.mul(maxWalletToken).div( 10**2 ); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tDev = calculateDevFee(tAmount); uint256 tBurn = calculateBurnFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tDev); tTransferAmount = tTransferAmount.sub(tBurn); return (tTransferAmount, tFee, tDev, tBurn); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tDev, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rDev = tDev.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rDev).sub(rBurn); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeDevFee(uint256 tDev) private { uint256 currentRate = _getRate(); uint256 rDev = tDev.mul(currentRate); _rOwned[_devAddress] = _rOwned[_devAddress].add(rDev); if(_isExcluded[_devAddress]) _tOwned[_devAddress] = _tOwned[_devAddress].add(tDev); } function _takeBurnFee(uint256 tBurn) private { uint256 currentRate = _getRate(); uint256 rBurn = tBurn.mul(currentRate); _rOwned[_burnAddress] = _rOwned[_burnAddress].add(rBurn); if(_isExcluded[_burnAddress]) _tOwned[_burnAddress] = _tOwned[_burnAddress].add(tBurn); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { uint256 fee = launchedAt == 0 ? 0 : _taxFee; return _amount.mul(fee).div( 10**2 ); } function calculateDevFee(uint256 _amount) private view returns (uint256) { uint256 fee = launchedAt == 0 ? 0 : _devFee; return _amount.mul(fee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { uint256 fee = launchedAt == 0 ? _beforeLaunchFee : _burnFee; return _amount.mul(fee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _devFee == 0) return; _previousTaxFee = _taxFee; _previousDevFee = _devFee; _previousBurnFee = _burnFee; _previousBeforeLaunchFee = _beforeLaunchFee; _taxFee = 0; _devFee = 0; _burnFee = 0; _beforeLaunchFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _devFee = _previousDevFee; _burnFee = _previousBurnFee; _beforeLaunchFee = _previousBeforeLaunchFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } 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 _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!isBlacklisted[from], "Blacklisted address"); if(!_isExcludedFromMax[from] || !_isExcludedFromMax[to]) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } if (!_isExcludedFromMax[to]) { uint256 heldTokens = balanceOf(to); require((heldTokens + amount) <= _maxWalletToken, "Total Holding is currently limited, you can not buy that much."); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn fee _tokenTransfer(from,to,amount,takeFee); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee, uint256 tDev, uint256 tBurn) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tDev, tBurn, _getRate()); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeDevFee(tDev); _takeBurnFee(tBurn); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","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":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"blacklistMultipleAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAccountBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"isExcludedFromMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"setIsBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletToken","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052678ac7230489e80000600b55600b54600019816200001e57fe5b0660001903600c5573597b45e8daed91c6b5241a1c7290cfac357776bf600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600981526020017f54617473756d616b690000000000000000000000000000000000000000000000815250601090805190602001906200010a92919062000ac6565b506040518060400160405280600981526020017f54415453554d414b490000000000000000000000000000000000000000000000815250601190805190602001906200015892919062000ac6565b506009601260006101000a81548160ff021916908360ff1602179055506001601355601354601455600460155560155460165560016017556017546018556063601955601954601a55620001d86001620001c46064600b54620008ed60201b620035281790919060201c565b6200093f60201b620035721790919060201c565b601e55620002126001620001fe6032600b54620008ed60201b620035281790919060201c565b6200093f60201b620035721790919060201c565b601f553480156200022257600080fd5b50600062000235620009ca60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c5460036000620002ea620009ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038857600080fd5b505afa1580156200039d573d6000803e3d6000fd5b505050506040513d6020811015620003b457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200042857600080fd5b505afa1580156200043d573d6000803e3d6000fd5b505050506040513d60208110156200045457600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620004cf57600080fd5b505af1158015620004e4573d6000803e3d6000fd5b505050506040513d6020811015620004fb57600080fd5b8101908080519060200190929190505050601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060016006600062000599620009d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620006d2620009d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200087f620009ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35062000b6c565b60006200093783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620009fb60201b60201c565b905092915050565b600080831415620009545760009050620009c4565b60008284029050828482816200096657fe5b0414620009bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620064296021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000aab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000a6f57808201518184015260208101905062000a52565b50505050905090810190601f16801562000a9d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000ab857fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000b0957805160ff191683800117855562000b3a565b8280016001018555821562000b3a579182015b8281111562000b3957825182559160200191906001019062000b1c565b5b50905062000b49919062000b4d565b5090565b5b8082111562000b6857600081600090555060010162000b4e565b5090565b60805160601c61589f62000b8a60003980611409525061589f6000f3fe6080604052600436106102975760003560e01c8063715018a61161015a578063a9059cbb116100c1578063cea269581161007a578063cea2695814610eed578063d543dbeb14610f28578063dd46706414610f63578063dd62ed3e14610f9e578063ea2f0b3714611023578063f2fde38b146110745761029e565b8063a9059cbb14610da5578063aa45026b14610e16578063b6c5232414610e41578063bf56b37114610e6c578063c0b0fda214610e97578063c6d2577d14610ec25761029e565b80638da5cb5b116101135780638da5cb5b14610b5d57806395d89b4114610b9e578063a0e3849214610c2e578063a457c2d714610c8b578063a69df4b514610cfc578063a7b97fa914610d135761029e565b8063715018a6146109f157806378109e5414610a085780637d1db4a514610a335780637fef359414610a5e57806382bf293c14610abb57806388f8202014610af65761029e565b8063379e2919116101fe5780634549b039116101b75780634549b039146107f757806349bd5a5e1461085257806352390c02146108935780635342acb4146108e457806370a082311461094b57806370d5ae05146109b05761029e565b8063379e291914610653578063395093511461068e5780633ad10ef6146106ff5780633b124fe7146107405780633bd5d1731461076b578063437823ec146107a65761029e565b80631694505e116102505780631694505e1461048857806318160ddd146104c957806323b872dd146104f45780632d83811914610585578063313ce567146105d45780633685d419146106025761029e565b806301339c21146102a3578063061c82d0146102ba57806306fdde03146102f5578063095ea7b3146103855780630f1d76c1146103f657806313114a9d1461045d5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b86110c5565b005b3480156102c657600080fd5b506102f3600480360360208110156102dd57600080fd5b8101908080359060200190929190505050611215565b005b34801561030157600080fd5b5061030a6112e7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561034a57808201518184015260208101905061032f565b50505050905090810190601f1680156103775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039157600080fd5b506103de600480360360408110156103a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611389565b60405180821515815260200191505060405180910390f35b34801561040257600080fd5b506104456004803603602081101561041957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a7565b60405180821515815260200191505060405180910390f35b34801561046957600080fd5b506104726113fd565b6040518082815260200191505060405180910390f35b34801561049457600080fd5b5061049d611407565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104d557600080fd5b506104de61142b565b6040518082815260200191505060405180910390f35b34801561050057600080fd5b5061056d6004803603606081101561051757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611435565b60405180821515815260200191505060405180910390f35b34801561059157600080fd5b506105be600480360360208110156105a857600080fd5b810190808035906020019092919050505061150e565b6040518082815260200191505060405180910390f35b3480156105e057600080fd5b506105e9611592565b604051808260ff16815260200191505060405180910390f35b34801561060e57600080fd5b506106516004803603602081101561062557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a9565b005b34801561065f57600080fd5b5061068c6004803603602081101561067657600080fd5b8101908080359060200190929190505050611933565b005b34801561069a57600080fd5b506106e7600480360360408110156106b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a05565b60405180821515815260200191505060405180910390f35b34801561070b57600080fd5b50610714611ab8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074c57600080fd5b50610755611ae2565b6040518082815260200191505060405180910390f35b34801561077757600080fd5b506107a46004803603602081101561078e57600080fd5b8101908080359060200190929190505050611ae8565b005b3480156107b257600080fd5b506107f5600480360360208110156107c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c99565b005b34801561080357600080fd5b5061083c6004803603604081101561081a57600080fd5b8101908080359060200190929190803515159060200190929190505050611dbc565b6040518082815260200191505060405180910390f35b34801561085e57600080fd5b50610867611e88565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561089f57600080fd5b506108e2600480360360208110156108b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eae565b005b3480156108f057600080fd5b506109336004803603602081101561090757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121c8565b60405180821515815260200191505060405180910390f35b34801561095757600080fd5b5061099a6004803603602081101561096e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061221e565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109c5612309565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109fd57600080fd5b50610a06612333565b005b348015610a1457600080fd5b50610a1d6124b9565b6040518082815260200191505060405180910390f35b348015610a3f57600080fd5b50610a486124bf565b6040518082815260200191505060405180910390f35b348015610a6a57600080fd5b50610ab960048036036040811015610a8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506124c5565b005b348015610ac757600080fd5b50610af460048036036020811015610ade57600080fd5b81019080803590602001909291905050506125e8565b005b348015610b0257600080fd5b50610b4560048036036020811015610b1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126e1565b60405180821515815260200191505060405180910390f35b348015610b6957600080fd5b50610b72612737565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610baa57600080fd5b50610bb3612760565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf3578082015181840152602081019050610bd8565b50505050905090810190601f168015610c205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3a57600080fd5b50610c8960048036036040811015610c5157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612802565b005b348015610c9757600080fd5b50610ce460048036036040811015610cae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612925565b60405180821515815260200191505060405180910390f35b348015610d0857600080fd5b50610d116129f2565b005b348015610d1f57600080fd5b50610da360048036036040811015610d3657600080fd5b8101908080359060200190640100000000811115610d5357600080fd5b820183602082011115610d6557600080fd5b80359060200191846020830284011164010000000083111715610d8757600080fd5b9091929391929390803515159060200190929190505050612c0f565b005b348015610db157600080fd5b50610dfe60048036036040811015610dc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612d77565b60405180821515815260200191505060405180910390f35b348015610e2257600080fd5b50610e2b612d95565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610e56612d9b565b6040518082815260200191505060405180910390f35b348015610e7857600080fd5b50610e81612da5565b6040518082815260200191505060405180910390f35b348015610ea357600080fd5b50610eac612dab565b6040518082815260200191505060405180910390f35b348015610ece57600080fd5b50610ed7612db1565b6040518082815260200191505060405180910390f35b348015610ef957600080fd5b50610f2660048036036020811015610f1057600080fd5b8101908080359060200190929190505050612db7565b005b348015610f3457600080fd5b50610f6160048036036020811015610f4b57600080fd5b8101908080359060200190929190505050612e89565b005b348015610f6f57600080fd5b50610f9c60048036036020811015610f8657600080fd5b8101908080359060200190929190505050612f82565b005b348015610faa57600080fd5b5061100d60048036036040811015610fc157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613173565b6040518082815260200191505060405180910390f35b34801561102f57600080fd5b506110726004803603602081101561104657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131fa565b005b34801561108057600080fd5b506110c36004803603602081101561109757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331d565b005b6110cd6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601b5414611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f416c7265616479206c61756e636865642e00000000000000000000000000000081525060200191505060405180910390fd5b43601b8190555042601c81905550565b61121d6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b606060108054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561137f5780601f106113545761010080835404028352916020019161137f565b820191906000526020600020905b81548152906001019060200180831161136257829003601f168201915b5050505050905090565b600061139d6113966135f8565b8484613600565b6001905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b60006114428484846137f7565b6115038461144e6135f8565b6114fe8560405180606001604052806028815260200161571e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114b46135f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ca09092919063ffffffff16565b613600565b600190509392505050565b6000600c5482111561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615663602a913960400191505060405180910390fd5b6000611575613d60565b905061158a818461352890919063ffffffff16565b915050919050565b6000601260009054906101000a900460ff16905090565b6115b16135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611730576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b600a8054905081101561192f578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061176457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561192257600a6001600a8054905003815481106117c057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106117f857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806118e857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561192f565b8080600101915050611733565b5050565b61193b6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060158190555050565b6000611aae611a126135f8565b84611aa98560056000611a236135f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b613600565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6000611af26135f8565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806157f6602c913960400191505060405180910390fd5b6000806000611ba585613e13565b935093509350506000611bc286858585611bbd613d60565b613e95565b50509050611c1881600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c7081600c54613f4990919063ffffffff16565b600c81905550611c8b86600d54613d8b90919063ffffffff16565b600d81905550505050505050565b611ca16135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b6000806000611e4486613e13565b93509350935050600080611e6288868686611e5d613d60565b613e95565b509150915086611e79578195505050505050611e82565b80955050505050505b92915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eb66135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561210a576120c6600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461150e565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122b957600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612304565b612301600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461150e565b90505b919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61233b6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601f5481565b601e5481565b6124cd6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6125f06135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126d860646126ca83600b5461357290919063ffffffff16565b61352890919063ffffffff16565b601f8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127f85780601f106127cd576101008083540402835291602001916127f8565b820191906000526020600020905b8154815290600101906020018083116127db57829003601f168201915b5050505050905090565b61280a6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006129e86129326135f8565b846129e385604051806060016040528060258152602001615845602591396005600061295c6135f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ca09092919063ffffffff16565b613600565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806158226023913960400191505060405180910390fd5b6002544211612b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612c176135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b83839050811015612d71578160096000868685818110612cf657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612cda565b50505050565b6000612d8b612d846135f8565b84846137f7565b6001905092915050565b60155481565b6000600254905090565b601b5481565b60175481565b601c5481565b612dbf6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b612e916135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612f796064612f6b83600b5461357290919063ffffffff16565b61352890919063ffffffff16565b601e8190555050565b612f8a6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461304a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6132026135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6133256135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061568d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061356a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f93565b905092915050565b60008083141561358557600090506135f2565b600082840290508284828161359657fe5b04146135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156fd6021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613686576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806157d26024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561370c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156b36022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561387d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806157ad6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156406023913960400191505060405180910390fd5b6000811161395c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157466029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f426c61636b6c697374656420616464726573730000000000000000000000000081525060200191505060405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580613abf5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2057601e54811115613b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806156d56028913960400191505060405180910390fd5b5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613bdd576000613b7c8361221e565b9050601f548282011115613bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061576f603e913960400191505060405180910390fd5b505b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613c845750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c8e57600090505b613c9a84848484614059565b50505050565b6000838311158290613d4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d12578082015181840152602081019050613cf7565b50505050905090810190601f168015613d3f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613d6d61436a565b91509150613d84818361352890919063ffffffff16565b9250505090565b600080828401905083811015613e09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000613e24866145fb565b90506000613e3187614643565b90506000613e3e8861468b565b90506000613e6783613e59868c613f4990919063ffffffff16565b613f4990919063ffffffff16565b9050613e7c8282613f4990919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613eae858a61357290919063ffffffff16565b90506000613ec5868a61357290919063ffffffff16565b90506000613edc878a61357290919063ffffffff16565b90506000613ef3888a61357290919063ffffffff16565b90506000613f2e82613f2085613f12888a613f4990919063ffffffff16565b613f4990919063ffffffff16565b613f4990919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000613f8b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ca0565b905092915050565b6000808311829061403f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614004578082015181840152602081019050613fe9565b50505050905090810190601f1680156140315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404b57fe5b049050809150509392505050565b80614067576140666146d4565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561410a5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561411f5761411a848484614739565b614356565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156141c25750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156141d7576141d28484846149bb565b614355565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561427b5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156142905761428b848484614c3d565b614354565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156143325750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561434757614342848484614e2a565b614353565b614352848484614c3d565b5b5b5b5b8061436457614363615141565b5b50505050565b6000806000600c5490506000600b54905060005b600a805490508110156145be578260036000600a848154811061439d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061448457508160046000600a848154811061441c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561449b57600c54600b54945094505050506145f7565b61452460036000600a84815481106144af57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613f4990919063ffffffff16565b92506145af60046000600a848154811061453a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613f4990919063ffffffff16565b9150808060010191505061437e565b506145d6600b54600c5461352890919063ffffffff16565b8210156145ee57600c54600b549350935050506145f7565b81819350935050505b9091565b6000806000601b541461461057601354614613565b60005b905061463b606461462d838661357290919063ffffffff16565b61352890919063ffffffff16565b915050919050565b6000806000601b54146146585760155461465b565b60005b90506146836064614675838661357290919063ffffffff16565b61352890919063ffffffff16565b915050919050565b6000806000601b54146146a0576017546146a4565b6019545b90506146cc60646146be838661357290919063ffffffff16565b61352890919063ffffffff16565b915050919050565b60006013541480156146e857506000601554145b156146f257614737565b601354601481905550601554601681905550601754601881905550601954601a8190555060006013819055506000601581905550600060178190555060006019819055505b565b60008060008061474885613e13565b9350935093509350600080600061476988878787614764613d60565b613e95565b9250925092506147c188600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061485683600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148eb82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061493785615167565b614940846153b6565b61494a8187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806149ca85613e13565b935093509350935060008060006149eb888787876149e6613d60565b613e95565b925092509250614a4383600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ad887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b6d82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bb985615167565b614bc2846153b6565b614bcc8187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b600080600080614c4c85613e13565b93509350935093506000806000614c6d88878787614c68613d60565b613e95565b925092509250614cc583600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d5a82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614da685615167565b614daf846153b6565b614db98187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b600080600080614e3985613e13565b93509350935093506000806000614e5a88878787614e55613d60565b613e95565b925092509250614eb288600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f4783600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fdc87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061507182600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150bd85615167565b6150c6846153b6565b6150d08187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b601454601381905550601654601581905550601854601781905550601a54601981905550565b6000615171613d60565b90506000615188828461357290919063ffffffff16565b90506151fe8160036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156153b15761534b8360046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006153c0613d60565b905060006153d7828461357290919063ffffffff16565b905061544d8160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156156005761559a8360046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61561a82600c54613f4990919063ffffffff16565b600c8190555061563581600d54613d8b90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a3a8646dcb81b80880be712fda620f93e14831a248a2cfc20594276cb0f0dbc64736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77
Deployed Bytecode
0x6080604052600436106102975760003560e01c8063715018a61161015a578063a9059cbb116100c1578063cea269581161007a578063cea2695814610eed578063d543dbeb14610f28578063dd46706414610f63578063dd62ed3e14610f9e578063ea2f0b3714611023578063f2fde38b146110745761029e565b8063a9059cbb14610da5578063aa45026b14610e16578063b6c5232414610e41578063bf56b37114610e6c578063c0b0fda214610e97578063c6d2577d14610ec25761029e565b80638da5cb5b116101135780638da5cb5b14610b5d57806395d89b4114610b9e578063a0e3849214610c2e578063a457c2d714610c8b578063a69df4b514610cfc578063a7b97fa914610d135761029e565b8063715018a6146109f157806378109e5414610a085780637d1db4a514610a335780637fef359414610a5e57806382bf293c14610abb57806388f8202014610af65761029e565b8063379e2919116101fe5780634549b039116101b75780634549b039146107f757806349bd5a5e1461085257806352390c02146108935780635342acb4146108e457806370a082311461094b57806370d5ae05146109b05761029e565b8063379e291914610653578063395093511461068e5780633ad10ef6146106ff5780633b124fe7146107405780633bd5d1731461076b578063437823ec146107a65761029e565b80631694505e116102505780631694505e1461048857806318160ddd146104c957806323b872dd146104f45780632d83811914610585578063313ce567146105d45780633685d419146106025761029e565b806301339c21146102a3578063061c82d0146102ba57806306fdde03146102f5578063095ea7b3146103855780630f1d76c1146103f657806313114a9d1461045d5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b86110c5565b005b3480156102c657600080fd5b506102f3600480360360208110156102dd57600080fd5b8101908080359060200190929190505050611215565b005b34801561030157600080fd5b5061030a6112e7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561034a57808201518184015260208101905061032f565b50505050905090810190601f1680156103775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039157600080fd5b506103de600480360360408110156103a857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611389565b60405180821515815260200191505060405180910390f35b34801561040257600080fd5b506104456004803603602081101561041957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a7565b60405180821515815260200191505060405180910390f35b34801561046957600080fd5b506104726113fd565b6040518082815260200191505060405180910390f35b34801561049457600080fd5b5061049d611407565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104d557600080fd5b506104de61142b565b6040518082815260200191505060405180910390f35b34801561050057600080fd5b5061056d6004803603606081101561051757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611435565b60405180821515815260200191505060405180910390f35b34801561059157600080fd5b506105be600480360360208110156105a857600080fd5b810190808035906020019092919050505061150e565b6040518082815260200191505060405180910390f35b3480156105e057600080fd5b506105e9611592565b604051808260ff16815260200191505060405180910390f35b34801561060e57600080fd5b506106516004803603602081101561062557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a9565b005b34801561065f57600080fd5b5061068c6004803603602081101561067657600080fd5b8101908080359060200190929190505050611933565b005b34801561069a57600080fd5b506106e7600480360360408110156106b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a05565b60405180821515815260200191505060405180910390f35b34801561070b57600080fd5b50610714611ab8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561074c57600080fd5b50610755611ae2565b6040518082815260200191505060405180910390f35b34801561077757600080fd5b506107a46004803603602081101561078e57600080fd5b8101908080359060200190929190505050611ae8565b005b3480156107b257600080fd5b506107f5600480360360208110156107c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c99565b005b34801561080357600080fd5b5061083c6004803603604081101561081a57600080fd5b8101908080359060200190929190803515159060200190929190505050611dbc565b6040518082815260200191505060405180910390f35b34801561085e57600080fd5b50610867611e88565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561089f57600080fd5b506108e2600480360360208110156108b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eae565b005b3480156108f057600080fd5b506109336004803603602081101561090757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121c8565b60405180821515815260200191505060405180910390f35b34801561095757600080fd5b5061099a6004803603602081101561096e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061221e565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109c5612309565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109fd57600080fd5b50610a06612333565b005b348015610a1457600080fd5b50610a1d6124b9565b6040518082815260200191505060405180910390f35b348015610a3f57600080fd5b50610a486124bf565b6040518082815260200191505060405180910390f35b348015610a6a57600080fd5b50610ab960048036036040811015610a8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506124c5565b005b348015610ac757600080fd5b50610af460048036036020811015610ade57600080fd5b81019080803590602001909291905050506125e8565b005b348015610b0257600080fd5b50610b4560048036036020811015610b1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126e1565b60405180821515815260200191505060405180910390f35b348015610b6957600080fd5b50610b72612737565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610baa57600080fd5b50610bb3612760565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bf3578082015181840152602081019050610bd8565b50505050905090810190601f168015610c205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3a57600080fd5b50610c8960048036036040811015610c5157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612802565b005b348015610c9757600080fd5b50610ce460048036036040811015610cae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612925565b60405180821515815260200191505060405180910390f35b348015610d0857600080fd5b50610d116129f2565b005b348015610d1f57600080fd5b50610da360048036036040811015610d3657600080fd5b8101908080359060200190640100000000811115610d5357600080fd5b820183602082011115610d6557600080fd5b80359060200191846020830284011164010000000083111715610d8757600080fd5b9091929391929390803515159060200190929190505050612c0f565b005b348015610db157600080fd5b50610dfe60048036036040811015610dc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612d77565b60405180821515815260200191505060405180910390f35b348015610e2257600080fd5b50610e2b612d95565b6040518082815260200191505060405180910390f35b348015610e4d57600080fd5b50610e56612d9b565b6040518082815260200191505060405180910390f35b348015610e7857600080fd5b50610e81612da5565b6040518082815260200191505060405180910390f35b348015610ea357600080fd5b50610eac612dab565b6040518082815260200191505060405180910390f35b348015610ece57600080fd5b50610ed7612db1565b6040518082815260200191505060405180910390f35b348015610ef957600080fd5b50610f2660048036036020811015610f1057600080fd5b8101908080359060200190929190505050612db7565b005b348015610f3457600080fd5b50610f6160048036036020811015610f4b57600080fd5b8101908080359060200190929190505050612e89565b005b348015610f6f57600080fd5b50610f9c60048036036020811015610f8657600080fd5b8101908080359060200190929190505050612f82565b005b348015610faa57600080fd5b5061100d60048036036040811015610fc157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613173565b6040518082815260200191505060405180910390f35b34801561102f57600080fd5b506110726004803603602081101561104657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131fa565b005b34801561108057600080fd5b506110c36004803603602081101561109757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061331d565b005b6110cd6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601b5414611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f416c7265616479206c61756e636865642e00000000000000000000000000000081525060200191505060405180910390fd5b43601b8190555042601c81905550565b61121d6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b606060108054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561137f5780601f106113545761010080835404028352916020019161137f565b820191906000526020600020905b81548152906001019060200180831161136257829003601f168201915b5050505050905090565b600061139d6113966135f8565b8484613600565b6001905092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b60006114428484846137f7565b6115038461144e6135f8565b6114fe8560405180606001604052806028815260200161571e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114b46135f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ca09092919063ffffffff16565b613600565b600190509392505050565b6000600c5482111561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615663602a913960400191505060405180910390fd5b6000611575613d60565b905061158a818461352890919063ffffffff16565b915050919050565b6000601260009054906101000a900460ff16905090565b6115b16135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611730576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b600a8054905081101561192f578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061176457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561192257600a6001600a8054905003815481106117c057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106117f857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a8054806118e857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561192f565b8080600101915050611733565b5050565b61193b6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060158190555050565b6000611aae611a126135f8565b84611aa98560056000611a236135f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b613600565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6000611af26135f8565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806157f6602c913960400191505060405180910390fd5b6000806000611ba585613e13565b935093509350506000611bc286858585611bbd613d60565b613e95565b50509050611c1881600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c7081600c54613f4990919063ffffffff16565b600c81905550611c8b86600d54613d8b90919063ffffffff16565b600d81905550505050505050565b611ca16135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b54831115611e36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b6000806000611e4486613e13565b93509350935050600080611e6288868686611e5d613d60565b613e95565b509150915086611e79578195505050505050611e82565b80955050505050505b92915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eb66135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561210a576120c6600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461150e565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122b957600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612304565b612301600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461150e565b90505b919050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61233b6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601f5481565b601e5481565b6124cd6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6125f06135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6126d860646126ca83600b5461357290919063ffffffff16565b61352890919063ffffffff16565b601f8190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127f85780601f106127cd576101008083540402835291602001916127f8565b820191906000526020600020905b8154815290600101906020018083116127db57829003601f168201915b5050505050905090565b61280a6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006129e86129326135f8565b846129e385604051806060016040528060258152602001615845602591396005600061295c6135f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ca09092919063ffffffff16565b613600565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806158226023913960400191505060405180910390fd5b6002544211612b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b612c176135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b83839050811015612d71578160096000868685818110612cf657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050612cda565b50505050565b6000612d8b612d846135f8565b84846137f7565b6001905092915050565b60155481565b6000600254905090565b601b5481565b60175481565b601c5481565b612dbf6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b612e916135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612f796064612f6b83600b5461357290919063ffffffff16565b61352890919063ffffffff16565b601e8190555050565b612f8a6135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461304a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6132026135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6133256135f8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561346b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061568d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061356a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f93565b905092915050565b60008083141561358557600090506135f2565b600082840290508284828161359657fe5b04146135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156fd6021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613686576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806157d26024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561370c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156b36022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561387d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806157ad6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156406023913960400191505060405180910390fd5b6000811161395c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157466029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f426c61636b6c697374656420616464726573730000000000000000000000000081525060200191505060405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580613abf5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613b2057601e54811115613b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806156d56028913960400191505060405180910390fd5b5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613bdd576000613b7c8361221e565b9050601f548282011115613bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061576f603e913960400191505060405180910390fd5b505b600060019050600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613c845750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c8e57600090505b613c9a84848484614059565b50505050565b6000838311158290613d4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d12578082015181840152602081019050613cf7565b50505050905090810190601f168015613d3f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613d6d61436a565b91509150613d84818361352890919063ffffffff16565b9250505090565b600080828401905083811015613e09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000613e24866145fb565b90506000613e3187614643565b90506000613e3e8861468b565b90506000613e6783613e59868c613f4990919063ffffffff16565b613f4990919063ffffffff16565b9050613e7c8282613f4990919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613eae858a61357290919063ffffffff16565b90506000613ec5868a61357290919063ffffffff16565b90506000613edc878a61357290919063ffffffff16565b90506000613ef3888a61357290919063ffffffff16565b90506000613f2e82613f2085613f12888a613f4990919063ffffffff16565b613f4990919063ffffffff16565b613f4990919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000613f8b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ca0565b905092915050565b6000808311829061403f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614004578082015181840152602081019050613fe9565b50505050905090810190601f1680156140315780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161404b57fe5b049050809150509392505050565b80614067576140666146d4565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561410a5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561411f5761411a848484614739565b614356565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156141c25750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156141d7576141d28484846149bb565b614355565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561427b5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156142905761428b848484614c3d565b614354565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156143325750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561434757614342848484614e2a565b614353565b614352848484614c3d565b5b5b5b5b8061436457614363615141565b5b50505050565b6000806000600c5490506000600b54905060005b600a805490508110156145be578260036000600a848154811061439d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061448457508160046000600a848154811061441c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561449b57600c54600b54945094505050506145f7565b61452460036000600a84815481106144af57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613f4990919063ffffffff16565b92506145af60046000600a848154811061453a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613f4990919063ffffffff16565b9150808060010191505061437e565b506145d6600b54600c5461352890919063ffffffff16565b8210156145ee57600c54600b549350935050506145f7565b81819350935050505b9091565b6000806000601b541461461057601354614613565b60005b905061463b606461462d838661357290919063ffffffff16565b61352890919063ffffffff16565b915050919050565b6000806000601b54146146585760155461465b565b60005b90506146836064614675838661357290919063ffffffff16565b61352890919063ffffffff16565b915050919050565b6000806000601b54146146a0576017546146a4565b6019545b90506146cc60646146be838661357290919063ffffffff16565b61352890919063ffffffff16565b915050919050565b60006013541480156146e857506000601554145b156146f257614737565b601354601481905550601554601681905550601754601881905550601954601a8190555060006013819055506000601581905550600060178190555060006019819055505b565b60008060008061474885613e13565b9350935093509350600080600061476988878787614764613d60565b613e95565b9250925092506147c188600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061485683600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148eb82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061493785615167565b614940846153b6565b61494a8187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b6000806000806149ca85613e13565b935093509350935060008060006149eb888787876149e6613d60565b613e95565b925092509250614a4383600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ad887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b6d82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614bb985615167565b614bc2846153b6565b614bcc8187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b600080600080614c4c85613e13565b93509350935093506000806000614c6d88878787614c68613d60565b613e95565b925092509250614cc583600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d5a82600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614da685615167565b614daf846153b6565b614db98187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b600080600080614e3985613e13565b93509350935093506000806000614e5a88878787614e55613d60565b613e95565b925092509250614eb288600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f4783600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4990919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fdc87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061507182600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150bd85615167565b6150c6846153b6565b6150d08187615605565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518082815260200191505060405180910390a350505050505050505050565b601454601381905550601654601581905550601854601781905550601a54601981905550565b6000615171613d60565b90506000615188828461357290919063ffffffff16565b90506151fe8160036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156153b15761534b8360046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006153c0613d60565b905060006153d7828461357290919063ffffffff16565b905061544d8160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060086000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156156005761559a8360046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8b90919063ffffffff16565b60046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61561a82600c54613f4990919063ffffffff16565b600c8190555061563581600d54613d8b90919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697465642c20796f752063616e206e6f74206275792074686174206d7563682e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a3a8646dcb81b80880be712fda620f93e14831a248a2cfc20594276cb0f0dbc64736f6c634300060c0033
Deployed Bytecode Sourcemap
25848:18648:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31500:185;;;;;;;;;;;;;:::i;:::-;;34799:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28518:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29430:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30938:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31209:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27321:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28795:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29599:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32713:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28704:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33315:475;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35015:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29920:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31403:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26880:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31693:496;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34554:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32197:508;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27379:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32974:333;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39302:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28898:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31304:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16322:148;;;;;;;;;;;;;:::i;:::-;;27484:55;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27424:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31070:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35295:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30423:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15679:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28609:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30551:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30146:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17332:293;;;;;;;;;;;;;:::i;:::-;;30696:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29104:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26963:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16877:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27246:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27046:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27278:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34905:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35125:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17042:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29279:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34677:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16625:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31500:185;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31570:1:::1;31556:10;;:15;31548:45;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31617:12;31604:10;:25;;;;31662:15;31640:19;:37;;;;31500:185::o:0;34799:98::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34883:6:::1;34873:7;:16;;;;34799:98:::0;:::o;28518:83::-;28555:13;28588:5;28581:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28518:83;:::o;29430:161::-;29505:4;29522:39;29531:12;:10;:12::i;:::-;29545:7;29554:6;29522:8;:39::i;:::-;29579:4;29572:11;;29430:161;;;;:::o;30938:124::-;31008:4;31032:13;:22;31046:7;31032:22;;;;;;;;;;;;;;;;;;;;;;;;;31025:29;;30938:124;;;:::o;31209:87::-;31251:7;31278:10;;31271:17;;31209:87;:::o;27321:51::-;;;:::o;28795:95::-;28848:7;28875;;28868:14;;28795:95;:::o;29599:313::-;29697:4;29714:36;29724:6;29732:9;29743:6;29714:9;:36::i;:::-;29761:121;29770:6;29778:12;:10;:12::i;:::-;29792:89;29830:6;29792:89;;;;;;;;;;;;;;;;;:11;:19;29804:6;29792:19;;;;;;;;;;;;;;;:33;29812:12;:10;:12::i;:::-;29792:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29761:8;:121::i;:::-;29900:4;29893:11;;29599:313;;;;;:::o;32713:253::-;32779:7;32818;;32807;:18;;32799:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32883:19;32906:10;:8;:10::i;:::-;32883:33;;32934:24;32946:11;32934:7;:11;;:24;;;;:::i;:::-;32927:31;;;32713:253;;;:::o;28704:83::-;28745:5;28770:9;;;;;;;;;;;28763:16;;28704:83;:::o;33315:475::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33397:11:::1;:20;33409:7;33397:20;;;;;;;;;;;;;;;;;;;;;;;;;33389:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33461:9;33456:327;33480:9;:16;;;;33476:1;:20;33456:327;;;33538:7;33522:23;;:9;33532:1;33522:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;33518:254;;;33581:9;33610:1;33591:9;:16;;;;:20;33581:31;;;;;;;;;;;;;;;;;;;;;;;;;33566:9;33576:1;33566:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33650:1;33631:7;:16;33639:7;33631:16;;;;;;;;;;;;;;;:20;;;;33693:5;33670:11;:20;33682:7;33670:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33717:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33751:5;;33518:254;33498:3;;;;;;;33456:327;;;;33315:475:::0;:::o;35015:98::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35099:6:::1;35089:7;:16;;;;35015:98:::0;:::o;29920:218::-;30008:4;30025:83;30034:12;:10;:12::i;:::-;30048:7;30057:50;30096:10;30057:11;:25;30069:12;:10;:12::i;:::-;30057:25;;;;;;;;;;;;;;;:34;30083:7;30057:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;30025:8;:83::i;:::-;30126:4;30119:11;;29920:218;;;;:::o;31403:89::-;31446:7;31473:11;;;;;;;;;;;31466:18;;31403:89;:::o;26880:26::-;;;;:::o;31693:496::-;31745:14;31762:12;:10;:12::i;:::-;31745:29;;31794:11;:19;31806:6;31794:19;;;;;;;;;;;;;;;;;;;;;;;;;31793:20;31785:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31877:12;31891;31905:13;31922:20;31934:7;31922:11;:20::i;:::-;31875:67;;;;;;;31954:15;31975:51;31987:7;31996:4;32002;32008:5;32015:10;:8;:10::i;:::-;31975:11;:51::i;:::-;31953:73;;;;32065:28;32085:7;32065;:15;32073:6;32065:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32047:7;:15;32055:6;32047:15;;;;;;;;;;;;;;;:46;;;;32114:20;32126:7;32114;;:11;;:20;;;;:::i;:::-;32104:7;:30;;;;32158:23;32173:7;32158:10;;:14;;:23;;;;:::i;:::-;32145:10;:36;;;;31693:496;;;;;;:::o;34554:111::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34653:4:::1;34623:18;:27;34642:7;34623:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34554:111:::0;:::o;32197:508::-;32287:7;32326;;32315;:18;;32307:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32392:12;32406;32420:13;32437:20;32449:7;32437:11;:20::i;:::-;32390:67;;;;;;;32469:15;32486:23;32514:51;32526:7;32535:4;32541;32547:5;32554:10;:8;:10::i;:::-;32514:11;:51::i;:::-;32468:97;;;;;32583:17;32578:120;;32624:7;32617:14;;;;;;;;;32578:120;32671:15;32664:22;;;;;;;32197:508;;;;;:::o;27379:28::-;;;;;;;;;;;;;:::o;32974:333::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33057:11:::1;:20;33069:7;33057:20;;;;;;;;;;;;;;;;;;;;;;;;;33056:21;33048:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33142:1;33123:7;:16;33131:7;33123:16;;;;;;;;;;;;;;;;:20;33120:108;;;33179:37;33199:7;:16;33207:7;33199:16;;;;;;;;;;;;;;;;33179:19;:37::i;:::-;33160:7;:16;33168:7;33160:16;;;;;;;;;;;;;;;:56;;;;33120:108;33261:4;33238:11;:20;33250:7;33238:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33276:9;33291:7;33276:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32974:333:::0;:::o;39302:123::-;39366:4;39390:18;:27;39409:7;39390:27;;;;;;;;;;;;;;;;;;;;;;;;;39383:34;;39302:123;;;:::o;28898:198::-;28964:7;28988:11;:20;29000:7;28988:20;;;;;;;;;;;;;;;;;;;;;;;;;28984:49;;;29017:7;:16;29025:7;29017:16;;;;;;;;;;;;;;;;29010:23;;;;28984:49;29051:37;29071:7;:16;29079:7;29071:16;;;;;;;;;;;;;;;;29051:19;:37::i;:::-;29044:44;;28898:198;;;;:::o;31304:91::-;31348:7;31375:12;;;;;;;;;;;31368:19;;31304:91;:::o;16322:148::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16429:1:::1;16392:40;;16413:6;::::0;::::1;;;;;;;;16392:40;;;;;;;;;;;;16460:1;16443:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16322:148::o:0;27484:55::-;;;;:::o;27424:53::-;;;;:::o;31070:131::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31187:6:::1;31158:18;:26;31177:6;31158:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31070:131:::0;;:::o;35295:173::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35398:62:::1;35444:5;35398:27;35410:14;35398:7;;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;35380:15;:80;;;;35295:173:::0;:::o;30423:120::-;30491:4;30515:11;:20;30527:7;30515:20;;;;;;;;;;;;;;;;;;;;;;;;;30508:27;;30423:120;;;:::o;15679:79::-;15717:7;15744:6;;;;;;;;;;;15737:13;;15679:79;:::o;28609:87::-;28648:13;28681:7;28674:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28609:87;:::o;30551:137::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30669:11:::1;30644:13;:22;30658:7;30644:22;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30551:137:::0;;:::o;30146:269::-;30239:4;30256:129;30265:12;:10;:12::i;:::-;30279:7;30288:96;30327:15;30288:96;;;;;;;;;;;;;;;;;:11;:25;30300:12;:10;:12::i;:::-;30288:25;;;;;;;;;;;;;;;:34;30314:7;30288:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;30256:8;:129::i;:::-;30403:4;30396:11;;30146:269;;;;:::o;17332:293::-;17402:10;17384:28;;:14;;;;;;;;;;;:28;;;17376:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17477:9;;17471:3;:15;17463:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17568:14;;;;;;;;;;;17539:44;;17560:6;;;;;;;;;;17539:44;;;;;;;;;;;;17603:14;;;;;;;;;;;17594:6;;:23;;;;;;;;;;;;;;;;;;17332:293::o;30696:234::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30815:9:::1;30810:113;30834:8;;:15;;30830:1;:19;30810:113;;;30900:11;30871:13;:26;30885:8;;30894:1;30885:11;;;;;;;;;;;;;;;30871:26;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;30851:3;;;;;;;30810:113;;;;30696:234:::0;;;:::o;29104:167::-;29182:4;29199:42;29209:12;:10;:12::i;:::-;29223:9;29234:6;29199:9;:42::i;:::-;29259:4;29252:11;;29104:167;;;;:::o;26963:26::-;;;;:::o;16877:89::-;16922:7;16949:9;;16942:16;;16877:89;:::o;27246:25::-;;;;:::o;27046:27::-;;;;:::o;27278:34::-;;;;:::o;34905:102::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34992:7:::1;34981:8;:18;;;;34905:102:::0;:::o;35125:162::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35219:60:::1;35263:5;35219:25;35231:12;35219:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;35204:12;:75;;;;35125:162:::0;:::o;17042:214::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17123:6:::1;::::0;::::1;;;;;;;;17106:14;;:23;;;;;;;;;;;;;;;;;;17157:1;17140:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17188:4;17182:3;:10;17170:9;:22;;;;17245:1;17208:40;;17229:6;::::0;::::1;;;;;;;;17208:40;;;;;;;;;;;;17042:214:::0;:::o;29279:143::-;29360:7;29387:11;:18;29399:5;29387:18;;;;;;;;;;;;;;;:27;29406:7;29387:27;;;;;;;;;;;;;;;;29380:34;;29279:143;;;;:::o;34677:110::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34774:5:::1;34744:18;:27;34763:7;34744:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34677:110:::0;:::o;16625:244::-;15901:12;:10;:12::i;:::-;15891:22;;:6;;;;;;;;;;:22;;;15883:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16734:1:::1;16714:22;;:8;:22;;;;16706:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16824:8;16795:38;;16816:6;::::0;::::1;;;;;;;;16795:38;;;;;;;;;;;;16853:8;16844:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16625:244:::0;:::o;5895:132::-;5953:7;5980:39;5984:1;5987;5980:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5973:46;;5895:132;;;;:::o;4948:471::-;5006:7;5256:1;5251;:6;5247:47;;;5281:1;5274:8;;;;5247:47;5306:9;5322:1;5318;:5;5306:17;;5351:1;5346;5342;:5;;;;;;:10;5334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5410:1;5403:8;;;4948:471;;;;;:::o;8087:106::-;8140:15;8175:10;8168:17;;8087:106;:::o;39433:337::-;39543:1;39526:19;;:5;:19;;;;39518:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39624:1;39605:21;;:7;:21;;;;39597:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39708:6;39678:11;:18;39690:5;39678:18;;;;;;;;;;;;;;;:27;39697:7;39678:27;;;;;;;;;;;;;;;:36;;;;39746:7;39730:32;;39739:5;39730:32;;;39755:6;39730:32;;;;;;;;;;;;;;;;;;39433:337;;;:::o;39778:1223::-;39916:1;39900:18;;:4;:18;;;;39892:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39993:1;39979:16;;:2;:16;;;;39971:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40063:1;40054:6;:10;40046:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40130:13;:19;40144:4;40130:19;;;;;;;;;;;;;;;;;;;;;;;;;40129:20;40121:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40190:18;:24;40209:4;40190:24;;;;;;;;;;;;;;;;;;;;;;;;;40189:25;:52;;;;40219:18;:22;40238:2;40219:22;;;;;;;;;;;;;;;;;;;;;;;;;40218:23;40189:52;40186:159;;;40276:12;;40266:6;:22;;40258:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40186:159;40363:18;:22;40382:2;40363:22;;;;;;;;;;;;;;;;;;;;;;;;;40358:221;;40402:18;40423:13;40433:2;40423:9;:13::i;:::-;40402:34;;40485:15;;40474:6;40461:10;:19;40460:40;;40452:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40358:221;;40660:12;40675:4;40660:19;;40787:18;:24;40806:4;40787:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;40815:18;:22;40834:2;40815:22;;;;;;;;;;;;;;;;;;;;;;;;;40787:50;40784:96;;;40863:5;40853:15;;40784:96;40955:38;40970:4;40975:2;40978:6;40985:7;40955:14;:38::i;:::-;39778:1223;;;;:::o;4497:192::-;4583:7;4616:1;4611;:6;;4619:12;4603:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4643:9;4659:1;4655;:5;4643:17;;4680:1;4673:8;;;4497:192;;;;;:::o;36665:163::-;36706:7;36727:15;36744;36763:19;:17;:19::i;:::-;36726:56;;;;36800:20;36812:7;36800;:11;;:20;;;;:::i;:::-;36793:27;;;;36665:163;:::o;3594:181::-;3652:7;3672:9;3688:1;3684;:5;3672:17;;3713:1;3708;:6;;3700:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3766:1;3759:8;;;3594:181;;;;:::o;35730:439::-;35790:7;35799;35808;35817;35837:12;35852:24;35868:7;35852:15;:24::i;:::-;35837:39;;35887:12;35902:24;35918:7;35902:15;:24::i;:::-;35887:39;;35937:13;35953:25;35970:7;35953:16;:25::i;:::-;35937:41;;35989:23;36015:27;36037:4;36015:17;36027:4;36015:7;:11;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;35989:53;;36079:26;36099:5;36079:15;:19;;:26;;;;:::i;:::-;36061:44;;36126:15;36143:4;36149;36155:5;36118:43;;;;;;;;;;;;35730:439;;;;;:::o;36177:480::-;36301:7;36310;36319;36339:15;36357:24;36369:11;36357:7;:11;;:24;;;;:::i;:::-;36339:42;;36392:12;36407:21;36416:11;36407:4;:8;;:21;;;;:::i;:::-;36392:36;;36439:12;36454:21;36463:11;36454:4;:8;;:21;;;;:::i;:::-;36439:36;;36486:13;36502:22;36512:11;36502:5;:9;;:22;;;;:::i;:::-;36486:38;;36535:23;36561:38;36593:5;36561:27;36583:4;36561:17;36573:4;36561:7;:11;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;:31;;:38;;;;:::i;:::-;36535:64;;36618:7;36627:15;36644:4;36610:39;;;;;;;;;;;36177:480;;;;;;;;;:::o;4058:136::-;4116:7;4143:43;4147:1;4150;4143:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4136:50;;4058:136;;;;:::o;6523:278::-;6609:7;6641:1;6637;:5;6644:12;6629:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6668:9;6684:1;6680;:5;;;;;;6668:17;;6792:1;6785:8;;;6523:278;;;;;:::o;41679:834::-;41790:7;41786:40;;41812:14;:12;:14::i;:::-;41786:40;41851:11;:19;41863:6;41851:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41875:11;:22;41887:9;41875:22;;;;;;;;;;;;;;;;;;;;;;;;;41874:23;41851:46;41847:597;;;41914:48;41936:6;41944:9;41955:6;41914:21;:48::i;:::-;41847:597;;;41985:11;:19;41997:6;41985:19;;;;;;;;;;;;;;;;;;;;;;;;;41984:20;:46;;;;;42008:11;:22;42020:9;42008:22;;;;;;;;;;;;;;;;;;;;;;;;;41984:46;41980:464;;;42047:46;42067:6;42075:9;42086:6;42047:19;:46::i;:::-;41980:464;;;42116:11;:19;42128:6;42116:19;;;;;;;;;;;;;;;;;;;;;;;;;42115:20;:47;;;;;42140:11;:22;42152:9;42140:22;;;;;;;;;;;;;;;;;;;;;;;;;42139:23;42115:47;42111:333;;;42179:44;42197:6;42205:9;42216:6;42179:17;:44::i;:::-;42111:333;;;42245:11;:19;42257:6;42245:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42268:11;:22;42280:9;42268:22;;;;;;;;;;;;;;;;;;;;;;;;;42245:45;42241:203;;;42307:48;42329:6;42337:9;42348:6;42307:21;:48::i;:::-;42241:203;;;42388:44;42406:6;42414:9;42425:6;42388:17;:44::i;:::-;42241:203;42111:333;41980:464;41847:597;42468:7;42464:41;;42490:15;:13;:15::i;:::-;42464:41;41679:834;;;;:::o;36836:561::-;36886:7;36895;36915:15;36933:7;;36915:25;;36951:15;36969:7;;36951:25;;36998:9;36993:289;37017:9;:16;;;;37013:1;:20;36993:289;;;37083:7;37059;:21;37067:9;37077:1;37067:12;;;;;;;;;;;;;;;;;;;;;;;;;37059:21;;;;;;;;;;;;;;;;:31;:66;;;;37118:7;37094;:21;37102:9;37112:1;37102:12;;;;;;;;;;;;;;;;;;;;;;;;;37094:21;;;;;;;;;;;;;;;;:31;37059:66;37055:97;;;37135:7;;37144;;37127:25;;;;;;;;;37055:97;37177:34;37189:7;:21;37197:9;37207:1;37197:12;;;;;;;;;;;;;;;;;;;;;;;;;37189:21;;;;;;;;;;;;;;;;37177:7;:11;;:34;;;;:::i;:::-;37167:44;;37236:34;37248:7;:21;37256:9;37266:1;37256:12;;;;;;;;;;;;;;;;;;;;;;;;;37248:21;;;;;;;;;;;;;;;;37236:7;:11;;:34;;;;:::i;:::-;37226:44;;37035:3;;;;;;;36993:289;;;;37306:20;37318:7;;37306;;:11;;:20;;;;:::i;:::-;37296:7;:30;37292:61;;;37336:7;;37345;;37328:25;;;;;;;;37292:61;37372:7;37381;37364:25;;;;;;36836:561;;;:::o;38056:204::-;38120:7;38140:11;38168:1;38154:10;;:15;:29;;38176:7;;38154:29;;;38172:1;38154:29;38140:43;;38201:51;38236:5;38201:16;38213:3;38201:7;:11;;:16;;;;:::i;:::-;:20;;:51;;;;:::i;:::-;38194:58;;;38056:204;;;:::o;38268:::-;38332:7;38352:11;38380:1;38366:10;;:15;:29;;38388:7;;38366:29;;;38384:1;38366:29;38352:43;;38413:51;38448:5;38413:16;38425:3;38413:7;:11;;:16;;;;:::i;:::-;:20;;:51;;;;:::i;:::-;38406:58;;;38268:204;;;:::o;38480:221::-;38545:7;38565:11;38593:1;38579:10;;:15;:45;;38616:8;;38579:45;;;38597:16;;38579:45;38565:59;;38642:51;38677:5;38642:16;38654:3;38642:7;:11;;:16;;;;:::i;:::-;:20;;:51;;;;:::i;:::-;38635:58;;;38480:221;;;:::o;38709:372::-;38766:1;38755:7;;:12;:28;;;;;38782:1;38771:7;;:12;38755:28;38752:40;;;38785:7;;38752:40;38830:7;;38812:15;:25;;;;38866:7;;38848:15;:25;;;;38903:8;;38884:16;:27;;;;38949:16;;38922:24;:43;;;;38996:1;38986:7;:11;;;;39018:1;39008:7;:11;;;;39041:1;39030:8;:12;;;;39072:1;39053:16;:20;;;;38709:372;:::o;43829:664::-;43932:23;43957:12;43971;43985:13;44002:20;44014:7;44002:11;:20::i;:::-;43931:91;;;;;;;;44034:15;44051:23;44076:12;44092:51;44104:7;44113:4;44119;44125:5;44132:10;:8;:10::i;:::-;44092:11;:51::i;:::-;44033:110;;;;;;44174:28;44194:7;44174;:15;44182:6;44174:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44156:7;:15;44164:6;44156:15;;;;;;;;;;;;;;;:46;;;;44231:28;44251:7;44231;:15;44239:6;44231:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44213:7;:15;44221:6;44213:15;;;;;;;;;;;;;;;:46;;;;44291:39;44314:15;44291:7;:18;44299:9;44291:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44270:7;:18;44278:9;44270:18;;;;;;;;;;;;;;;:60;;;;44344:17;44356:4;44344:11;:17::i;:::-;44372:19;44385:5;44372:12;:19::i;:::-;44402:23;44414:4;44420;44402:11;:23::i;:::-;44458:9;44441:44;;44450:6;44441:44;;;44469:15;44441:44;;;;;;;;;;;;;;;;;;43829:664;;;;;;;;;;:::o;43137:684::-;43238:23;43263:12;43277;43291:13;43308:20;43320:7;43308:11;:20::i;:::-;43237:91;;;;;;;;43340:15;43357:23;43382:12;43398:51;43410:7;43419:4;43425;43431:5;43438:10;:8;:10::i;:::-;43398:11;:51::i;:::-;43339:110;;;;;;43480:28;43500:7;43480;:15;43488:6;43480:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43462:7;:15;43470:6;43462:15;;;;;;;;;;;;;;;:46;;;;43540:39;43563:15;43540:7;:18;43548:9;43540:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43519:7;:18;43527:9;43519:18;;;;;;;;;;;;;;;:60;;;;43611:39;43634:15;43611:7;:18;43619:9;43611:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43590:7;:18;43598:9;43590:18;;;;;;;;;;;;;;;:60;;;;43672:17;43684:4;43672:11;:17::i;:::-;43700:19;43713:5;43700:12;:19::i;:::-;43730:23;43742:4;43748;43730:11;:23::i;:::-;43786:9;43769:44;;43778:6;43769:44;;;43797:15;43769:44;;;;;;;;;;;;;;;;;;43137:684;;;;;;;;;;:::o;42521:608::-;42620:23;42645:12;42659;42673:13;42690:20;42702:7;42690:11;:20::i;:::-;42619:91;;;;;;;;42722:15;42739:23;42764:12;42780:51;42792:7;42801:4;42807;42813:5;42820:10;:8;:10::i;:::-;42780:11;:51::i;:::-;42721:110;;;;;;42870:28;42890:7;42870;:15;42878:6;42870:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42852:7;:15;42860:6;42852:15;;;;;;;;;;;;;;;:46;;;;42930:39;42953:15;42930:7;:18;42938:9;42930:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42909:7;:18;42917:9;42909:18;;;;;;;;;;;;;;;:60;;;;42980:17;42992:4;42980:11;:17::i;:::-;43008:19;43021:5;43008:12;:19::i;:::-;43038:23;43050:4;43056;43038:11;:23::i;:::-;43094:9;43077:44;;43086:6;43077:44;;;43105:15;43077:44;;;;;;;;;;;;;;;;;;42521:608;;;;;;;;;;:::o;33806:732::-;33909:23;33934:12;33948;33962:13;33979:20;33991:7;33979:11;:20::i;:::-;33908:91;;;;;;;;34011:15;34028:23;34053:12;34069:51;34081:7;34090:4;34096;34102:5;34109:10;:8;:10::i;:::-;34069:11;:51::i;:::-;34010:110;;;;;;34151:28;34171:7;34151;:15;34159:6;34151:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34133:7;:15;34141:6;34133:15;;;;;;;;;;;;;;;:46;;;;34208:28;34228:7;34208;:15;34216:6;34208:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34190:7;:15;34198:6;34190:15;;;;;;;;;;;;;;;:46;;;;34268:39;34291:15;34268:7;:18;34276:9;34268:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34247:7;:18;34255:9;34247:18;;;;;;;;;;;;;;;:60;;;;34339:39;34362:15;34339:7;:18;34347:9;34339:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34318:7;:18;34326:9;34318:18;;;;;;;;;;;;;;;:60;;;;34389:17;34401:4;34389:11;:17::i;:::-;34417:19;34430:5;34417:12;:19::i;:::-;34447:23;34459:4;34465;34447:11;:23::i;:::-;34503:9;34486:44;;34495:6;34486:44;;;34514:15;34486:44;;;;;;;;;;;;;;;;;;33806:732;;;;;;;;;;:::o;39089:205::-;39143:15;;39133:7;:25;;;;39179:15;;39169:7;:25;;;;39216:16;;39205:8;:27;;;;39262:24;;39243:16;:43;;;;39089:205::o;37405:312::-;37459:19;37482:10;:8;:10::i;:::-;37459:33;;37503:12;37518:21;37527:11;37518:4;:8;;:21;;;;:::i;:::-;37503:36;;37573:30;37598:4;37573:7;:20;37581:11;;;;;;;;;;;37573:20;;;;;;;;;;;;;;;;:24;;:30;;;;:::i;:::-;37550:7;:20;37558:11;;;;;;;;;;;37550:20;;;;;;;;;;;;;;;:53;;;;37617:11;:24;37629:11;;;;;;;;;;;37617:24;;;;;;;;;;;;;;;;;;;;;;;;;37614:95;;;37679:30;37704:4;37679:7;:20;37687:11;;;;;;;;;;;37679:20;;;;;;;;;;;;;;;;:24;;:30;;;;:::i;:::-;37656:7;:20;37664:11;;;;;;;;;;;37656:20;;;;;;;;;;;;;;;:53;;;;37614:95;37405:312;;;:::o;37725:323::-;37781:19;37804:10;:8;:10::i;:::-;37781:33;;37825:13;37841:22;37851:11;37841:5;:9;;:22;;;;:::i;:::-;37825:38;;37898:32;37924:5;37898:7;:21;37906:12;;;;;;;;;;;37898:21;;;;;;;;;;;;;;;;:25;;:32;;;;:::i;:::-;37874:7;:21;37882:12;;;;;;;;;;;37874:21;;;;;;;;;;;;;;;:56;;;;37944:11;:25;37956:12;;;;;;;;;;;37944:25;;;;;;;;;;;;;;;;;;;;;;;;;37941:99;;;38008:32;38034:5;38008:7;:21;38016:12;;;;;;;;;;;38008:21;;;;;;;;;;;;;;;;:25;;:32;;;;:::i;:::-;37984:7;:21;37992:12;;;;;;;;;;;37984:21;;;;;;;;;;;;;;;:56;;;;37941:99;37725:323;;;:::o;35575:147::-;35653:17;35665:4;35653:7;;:11;;:17;;;;:::i;:::-;35643:7;:27;;;;35694:20;35709:4;35694:10;;:14;;:20;;;;:::i;:::-;35681:10;:33;;;;35575:147;;:::o
Swarm Source
ipfs://8a3a8646dcb81b80880be712fda620f93e14831a248a2cfc20594276cb0f0dbc
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.