ERC-20
Overview
Max Total Supply
6,942,069,420 SS
Holders
51
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
43,893,765.383012254 SSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
SenatorShiba
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-16 */ /** *Submitted for verification at Etherscan.io on 2021-12-14 */ /* Senator Shiba https://t.me/senatorshiba */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; 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) { function _msgSender() internal view virtual returns (address) { 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() { 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 = block.timestamp + 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(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract SenatorShiba 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 _isExcluded; address[] private _excluded; bool public canTrade = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 6942069420 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address public marketingWallet; string private _name = "Senator Shiba"; string private _symbol = "SS"; uint8 private _decimals = 9; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 12; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 69420000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 69420000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); //Mainnet & Testnet ETH // 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 and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = 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 totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , , ) = _getValues(tAmount); _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"); if (!deductTransferFee) { (uint256 rAmount, , , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , , ) = _getValues(tAmount); 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(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); 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 already 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 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _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 setMarketingWallet(address walletAddress) public onlyOwner { marketingWallet = walletAddress; } function upliftTxAmount() external onlyOwner { _maxTxAmount = 69420000 * 10**9; } function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner { require( SwapThresholdAmount > 69420000, "Swap Threshold Amount cannot be less than 69 Million" ); numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9; } function claimTokens() public onlyOwner { payable(marketingWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner { tokenAddress.transfer( walletaddress, tokenAddress.balanceOf(address(this)) ); } function clearStuckBalance(address payable walletaddress) external onlyOwner { walletaddress.transfer(address(this).balance); } function allowtrading() external onlyOwner { canTrade = true; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { ( uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tLiquidity, _getRate() ); return ( rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity ); } function _getTValues(uint256 tAmount) private view returns ( uint256, uint256, uint256 ) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); 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 _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div(10**2); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div(10**2); } function removeAllFee() private { if (_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } 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"); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //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, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves // add the marketing wallet uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingshare = newBalance.mul(75).div(100); payable(marketingWallet).transfer(marketingshare); newBalance -= marketingshare; // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), 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 (!canTrade) { require(sender == owner()); // only owner allowed to trade or add liquidity } 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 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_liquidityFee","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":"_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":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","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":[{"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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"inputs":[],"name":"upliftTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600960006101000a81548160ff0219169083151502179055506760572f5b5933b800600a55600a546000196200003d9190620006cf565b6000196200004c919062000736565b600b556040518060400160405280600d81526020017f53656e61746f7220536869626100000000000000000000000000000000000000815250600e90805190602001906200009c929190620005e6565b506040518060400160405280600281526020017f5353000000000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000ea929190620005e6565b506009601060006101000a81548160ff021916908360ff1602179055506001601155601154601255600c6013556013546014556001601560016101000a81548160ff02191690831515021790555066f6a11f484ec00060165566f6a11f484ec0006017553480156200015b57600080fd5b5060006200016e620005b560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b546003600062000223620005b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c157600080fd5b505afa158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc9190620007db565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035f57600080fd5b505afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620007db565b6040518363ffffffff1660e01b8152600401620003b99291906200081e565b602060405180830381600087803b158015620003d457600080fd5b505af1158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f9190620007db565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600660006200048c620005bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000545620005b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620005a691906200085c565b60405180910390a350620008de565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620005f490620008a8565b90600052602060002090601f01602090048101928262000618576000855562000664565b82601f106200063357805160ff191683800117855562000664565b8280016001018555821562000664579182015b828111156200066357825182559160200191906001019062000646565b5b50905062000673919062000677565b5090565b5b808211156200069257600081600090555060010162000678565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620006dc8262000696565b9150620006e98362000696565b925082620006fc57620006fb620006a0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007438262000696565b9150620007508362000696565b92508282101562000766576200076562000707565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007a38262000776565b9050919050565b620007b58162000796565b8114620007c157600080fd5b50565b600081519050620007d581620007aa565b92915050565b600060208284031215620007f457620007f362000771565b5b60006200080484828501620007c4565b91505092915050565b620008188162000796565b82525050565b60006040820190506200083560008301856200080d565b6200084460208301846200080d565b9392505050565b620008568162000696565b82525050565b60006020820190506200087360008301846200084b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008c157607f821691505b60208210811415620008d857620008d762000879565b5b50919050565b60805160a051615df06200092e6000396000818161171a0152612da1015260008181610ae101528181613a3401528181613b2401528181613b4b01528181613c620152613c890152615df06000f3fe60806040526004361061026b5760003560e01c80635d098b3811610144578063a6334231116100b6578063d12a76881161007a578063d12a76881461092b578063dd46706414610956578063dd62ed3e1461097f578063e8c4c43c146109bc578063ea2f0b37146109d3578063f2fde38b146109fc57610272565b8063a63342311461086c578063a69df4b514610883578063a9059cbb1461089a578063b6c52324146108d7578063c49b9a801461090257610272565b8063764d72bf11610108578063764d72bf146107485780637d1db4a51461077157806388f820201461079c5780638da5cb5b146107d957806395d89b4114610804578063a457c2d71461082f57610272565b80635d098b38146106755780636bc87c3a1461069e57806370a08231146106c9578063715018a61461070657806375f0a8741461071d57610272565b806339509351116101dd5780634549b039116101a15780634549b0391461056557806348c54b9d146105a257806349bd5a5e146105b95780634a74bb02146105e457806352390c021461060f5780635342acb41461063857610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e85780633bd5d17314610513578063437823ec1461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a25565b60405161029991906149fd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614ab8565b610ab7565b6040516102d69190614b13565b60405180910390f35b3480156102eb57600080fd5b506102f4610ad5565b6040516103019190614b3d565b60405180910390f35b34801561031657600080fd5b5061031f610adf565b60405161032c9190614bb7565b60405180910390f35b34801561034157600080fd5b5061034a610b03565b6040516103579190614b3d565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614bd2565b610b0d565b6040516103949190614b13565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614c25565b610be6565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614c25565b610cda565b6040516103fa9190614b3d565b60405180910390f35b34801561040f57600080fd5b50610418610d48565b6040516104259190614b13565b60405180910390f35b34801561043a57600080fd5b50610443610d5b565b6040516104509190614c6e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614c89565b610d72565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614ab8565b6110c1565b6040516104b69190614b13565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614cf4565b611174565b005b3480156104f457600080fd5b506104fd611323565b60405161050a9190614b3d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614c25565b611329565b005b34801561054857600080fd5b50610563600480360381019061055e9190614c89565b6114a4565b005b34801561057157600080fd5b5061058c60048036038101906105879190614d60565b611594565b6040516105999190614b3d565b60405180910390f35b3480156105ae57600080fd5b506105b7611618565b005b3480156105c557600080fd5b506105ce611718565b6040516105db9190614daf565b60405180910390f35b3480156105f057600080fd5b506105f961173c565b6040516106069190614b13565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190614c89565b61174f565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614c89565b611a03565b60405161066c9190614b13565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190614c89565b611a59565b005b3480156106aa57600080fd5b506106b3611b32565b6040516106c09190614b3d565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190614c89565b611b38565b6040516106fd9190614b3d565b60405180910390f35b34801561071257600080fd5b5061071b611c23565b005b34801561072957600080fd5b50610732611d76565b60405161073f9190614daf565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190614e08565b611d9c565b005b34801561077d57600080fd5b50610786611e7b565b6040516107939190614b3d565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190614c89565b611e81565b6040516107d09190614b13565b60405180910390f35b3480156107e557600080fd5b506107ee611ed7565b6040516107fb9190614daf565b60405180910390f35b34801561081057600080fd5b50610819611f00565b60405161082691906149fd565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614ab8565b611f92565b6040516108639190614b13565b60405180910390f35b34801561087857600080fd5b5061088161205f565b005b34801561088f57600080fd5b50610898612111565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190614ab8565b6122e5565b6040516108ce9190614b13565b60405180910390f35b3480156108e357600080fd5b506108ec612303565b6040516108f99190614b3d565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190614e35565b61230d565b005b34801561093757600080fd5b506109406123f6565b60405161094d9190614b3d565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190614c25565b6123fc565b005b34801561098b57600080fd5b506109a660048036038101906109a19190614e62565b6125c3565b6040516109b39190614b3d565b60405180910390f35b3480156109c857600080fd5b506109d161264a565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614c89565b6126ef565b005b348015610a0857600080fd5b50610a236004803603810190610a1e9190614c89565b6127df565b005b6060600e8054610a3490614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6090614ed1565b8015610aad5780601f10610a8257610100808354040283529160200191610aad565b820191906000526020600020905b815481529060010190602001808311610a9057829003601f168201915b5050505050905090565b6000610acb610ac46129a1565b84846129a9565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610b1a848484612b74565b610bdb84610b266129a1565b610bd685604051806060016040528060288152602001615d6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b600190509392505050565b610bee6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290614f4f565b60405180910390fd5b63042343e08111610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890614fe1565b60405180910390fd5b633b9aca0081610cd19190615030565b60178190555050565b6000600b54821115610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906150fc565b60405180910390fd5b6000610d2b612f45565b9050610d408184612f7090919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d7a6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90615168565b60405180910390fd5b60005b6008805490508110156110bd578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ece57610ecd615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110aa5760086001600880549050610f2991906151b7565b81548110610f3a57610f39615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f7957610f78615188565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806110705761106f6151eb565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110bd565b80806110b59061521a565b915050610e96565b5050565b600061116a6110ce6129a1565b8461116585600560006110df6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b6129a9565b6001905092915050565b61117c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614f4f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161125f9190614daf565b60206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190615278565b6040518363ffffffff1660e01b81526004016112cc9291906152a5565b602060405180830381600087803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e91906152e3565b505050565b60115481565b60006113336129a1565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990615382565b60405180910390fd5b60006113cd83613018565b5050505050905061142681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061147e81600b5461307490919063ffffffff16565b600b8190555061149983600c54612fba90919063ffffffff16565b600c81905550505050565b6114ac6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614f4f565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906153ee565b60405180910390fd5b816115fb5760006115eb84613018565b5050505050905080915050611612565b600061160684613018565b50505050915050809150505b92915050565b6116206129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f4f565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611715573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b6117576129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890615168565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561194557611901600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611a616129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590614f4f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bd357600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c1e565b611c1b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b90505b919050565b611c2b6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611da46129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2890614f4f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e77573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611f0f90614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3b90614ed1565b8015611f885780601f10611f5d57610100808354040283529160200191611f88565b820191906000526020600020905b815481529060010190602001808311611f6b57829003601f168201915b5050505050905090565b6000612055611f9f6129a1565b8461205085604051806060016040528060258152602001615d966025913960056000611fc96129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b6001905092915050565b6120676129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614f4f565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890615480565b60405180910390fd5b60025442116121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906154ec565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122f96122f26129a1565b8484612b74565b6001905092915050565b6000600254905090565b6123156129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614f4f565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123eb9190614b13565b60405180910390a150565b60175481565b6124046129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248890614f4f565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261253f919061550c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126526129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614f4f565b60405180910390fd5b66f6a11f484ec000601681905550565b6126f76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614f4f565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127e76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db906155d4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090615666565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a80906156f8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b679190614b3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061578a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b9061581c565b60405180910390fd5b60008111612c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8e906158ae565b60405180910390fd5b612c9f611ed7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d0d5750612cdd611ed7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d5857601654811115612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90615940565b60405180910390fd5b5b6000612d6330611b38565b90506016548110612d745760165490505b60006017548210159050808015612d985750601560009054906101000a900460ff16155b8015612df057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e085750601560019054906101000a900460ff165b15612e1c576017549150612e1b826130be565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec35750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ecd57600090505b612ed986868684613237565b505050505050565b6000838311158290612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2091906149fd565b60405180910390fd5b5060008385612f3891906151b7565b9050809150509392505050565b6000806000612f5261359c565b91509150612f698183612f7090919063ffffffff16565b9250505090565b6000612fb283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061384f565b905092915050565b6000808284612fc9919061550c565b90508381101561300e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613005906159ac565b60405180910390fd5b8091505092915050565b600080600080600080600080600061302f8a6138b2565b925092509250600080600061304d8d8686613048612f45565b61390c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006130b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee1565b905092915050565b6001601560006101000a81548160ff02191690831515021790555060006130ef600283612f7090919063ffffffff16565b90506000613106828461307490919063ffffffff16565b9050600047905061311683613995565b600061312b824761307490919063ffffffff16565b905060006131566064613148604b85613be190919063ffffffff16565b612f7090919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131c0573d6000803e3d6000fd5b5080826131cd91906151b7565b91506131d98483613c5c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161320c939291906159cc565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1661328b57613253611ed7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461328a57600080fd5b5b8061329957613298613d4c565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515761334c848484613d8f565b613588565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133f45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561340957613404848484613fef565b613587565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ad5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c2576134bd84848461424f565b613586565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135645750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135795761357484848461441a565b613585565b61358484848461424f565b5b5b5b5b806135965761359561470f565b5b50505050565b6000806000600b5490506000600a54905060005b600880549050811015613812578260036000600884815481106135d6576135d5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806136c4575081600460006008848154811061365c5761365b615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136db57600b54600a549450945050505061384b565b61376b60036000600884815481106136f6576136f5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461307490919063ffffffff16565b92506137fd600460006008848154811061378857613787615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361307490919063ffffffff16565b9150808061380a9061521a565b9150506135b0565b5061382a600a54600b54612f7090919063ffffffff16565b82101561384257600b54600a5493509350505061384b565b81819350935050505b9091565b60008083118290613896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388d91906149fd565b60405180910390fd5b50600083856138a59190615a32565b9050809150509392505050565b6000806000806138c185614723565b905060006138ce86614754565b905060006138f7826138e9858a61307490919063ffffffff16565b61307490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139258589613be190919063ffffffff16565b9050600061393c8689613be190919063ffffffff16565b905060006139538789613be190919063ffffffff16565b9050600061397c8261396e858761307490919063ffffffff16565b61307490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156139b2576139b1615a63565b5b6040519080825280602002602001820160405280156139e05781602001602082028036833780820191505090505b50905030816000815181106139f8576139f7615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a9857600080fd5b505afa158015613aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad09190615aa7565b81600181518110613ae457613ae3615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b49307f0000000000000000000000000000000000000000000000000000000000000000846129a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bab959493929190615bcd565b600060405180830381600087803b158015613bc557600080fd5b505af1158015613bd9573d6000803e3d6000fd5b505050505050565b600080831415613bf45760009050613c56565b60008284613c029190615030565b9050828482613c119190615a32565b14613c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4890615c99565b60405180910390fd5b809150505b92915050565b613c87307f0000000000000000000000000000000000000000000000000000000000000000846129a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cd1611ed7565b426040518863ffffffff1660e01b8152600401613cf396959493929190615cb9565b6060604051808303818588803b158015613d0c57600080fd5b505af1158015613d20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d459190615d1a565b5050505050565b6000601154148015613d6057506000601354145b15613d6a57613d8d565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613da187613018565b955095509550955095509550613dff87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7581614785565b613f7f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fdc9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061400187613018565b95509550955095509550955061405f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140f483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d581614785565b6141df848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161423c9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061426187613018565b9550955095509550955095506142bf86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a081614785565b6143aa848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144079190614b3d565b60405180910390a3505050505050505050565b60008060008060008061442c87613018565b95509550955095509550955061448a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145b483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061469581614785565b61469f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146fc9190614b3d565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b600061474d606461473f60115485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061477e606461477060135485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061478f612f45565b905060006147a68284613be190919063ffffffff16565b90506147fa81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614925576148e183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61493f82600b5461307490919063ffffffff16565b600b8190555061495a81600c54612fba90919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499e578082015181840152602081019050614983565b838111156149ad576000848401525b50505050565b6000601f19601f8301169050919050565b60006149cf82614964565b6149d9818561496f565b93506149e9818560208601614980565b6149f2816149b3565b840191505092915050565b60006020820190508181036000830152614a1781846149c4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a4f82614a24565b9050919050565b614a5f81614a44565b8114614a6a57600080fd5b50565b600081359050614a7c81614a56565b92915050565b6000819050919050565b614a9581614a82565b8114614aa057600080fd5b50565b600081359050614ab281614a8c565b92915050565b60008060408385031215614acf57614ace614a1f565b5b6000614add85828601614a6d565b9250506020614aee85828601614aa3565b9150509250929050565b60008115159050919050565b614b0d81614af8565b82525050565b6000602082019050614b286000830184614b04565b92915050565b614b3781614a82565b82525050565b6000602082019050614b526000830184614b2e565b92915050565b6000819050919050565b6000614b7d614b78614b7384614a24565b614b58565b614a24565b9050919050565b6000614b8f82614b62565b9050919050565b6000614ba182614b84565b9050919050565b614bb181614b96565b82525050565b6000602082019050614bcc6000830184614ba8565b92915050565b600080600060608486031215614beb57614bea614a1f565b5b6000614bf986828701614a6d565b9350506020614c0a86828701614a6d565b9250506040614c1b86828701614aa3565b9150509250925092565b600060208284031215614c3b57614c3a614a1f565b5b6000614c4984828501614aa3565b91505092915050565b600060ff82169050919050565b614c6881614c52565b82525050565b6000602082019050614c836000830184614c5f565b92915050565b600060208284031215614c9f57614c9e614a1f565b5b6000614cad84828501614a6d565b91505092915050565b6000614cc182614a44565b9050919050565b614cd181614cb6565b8114614cdc57600080fd5b50565b600081359050614cee81614cc8565b92915050565b60008060408385031215614d0b57614d0a614a1f565b5b6000614d1985828601614cdf565b9250506020614d2a85828601614a6d565b9150509250929050565b614d3d81614af8565b8114614d4857600080fd5b50565b600081359050614d5a81614d34565b92915050565b60008060408385031215614d7757614d76614a1f565b5b6000614d8585828601614aa3565b9250506020614d9685828601614d4b565b9150509250929050565b614da981614a44565b82525050565b6000602082019050614dc46000830184614da0565b92915050565b6000614dd582614a24565b9050919050565b614de581614dca565b8114614df057600080fd5b50565b600081359050614e0281614ddc565b92915050565b600060208284031215614e1e57614e1d614a1f565b5b6000614e2c84828501614df3565b91505092915050565b600060208284031215614e4b57614e4a614a1f565b5b6000614e5984828501614d4b565b91505092915050565b60008060408385031215614e7957614e78614a1f565b5b6000614e8785828601614a6d565b9250506020614e9885828601614a6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ee957607f821691505b60208210811415614efd57614efc614ea2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f3960208361496f565b9150614f4482614f03565b602082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614fcb60348361496f565b9150614fd682614f6f565b604082019050919050565b60006020820190508181036000830152614ffa81614fbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061503b82614a82565b915061504683614a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561507f5761507e615001565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006150e6602a8361496f565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615152601b8361496f565b915061515d8261511c565b602082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151c282614a82565b91506151cd83614a82565b9250828210156151e0576151df615001565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061522582614a82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561525857615257615001565b5b600182019050919050565b60008151905061527281614a8c565b92915050565b60006020828403121561528e5761528d614a1f565b5b600061529c84828501615263565b91505092915050565b60006040820190506152ba6000830185614da0565b6152c76020830184614b2e565b9392505050565b6000815190506152dd81614d34565b92915050565b6000602082840312156152f9576152f8614a1f565b5b6000615307848285016152ce565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061536c602c8361496f565b915061537782615310565b604082019050919050565b6000602082019050818103600083015261539b8161535f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006153d8601f8361496f565b91506153e3826153a2565b602082019050919050565b60006020820190508181036000830152615407816153cb565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061546a60238361496f565b91506154758261540e565b604082019050919050565b600060208201905081810360008301526154998161545d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006154d6601f8361496f565b91506154e1826154a0565b602082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b600061551782614a82565b915061552283614a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561555757615556615001565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155be60268361496f565b91506155c982615562565b604082019050919050565b600060208201905081810360008301526155ed816155b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565060248361496f565b915061565b826155f4565b604082019050919050565b6000602082019050818103600083015261567f81615643565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e260228361496f565b91506156ed82615686565b604082019050919050565b60006020820190508181036000830152615711816156d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061577460258361496f565b915061577f82615718565b604082019050919050565b600060208201905081810360008301526157a381615767565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061580660238361496f565b9150615811826157aa565b604082019050919050565b60006020820190508181036000830152615835816157f9565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061589860298361496f565b91506158a38261583c565b604082019050919050565b600060208201905081810360008301526158c78161588b565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061592a60288361496f565b9150615935826158ce565b604082019050919050565b600060208201905081810360008301526159598161591d565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615996601b8361496f565b91506159a182615960565b602082019050919050565b600060208201905081810360008301526159c581615989565b9050919050565b60006060820190506159e16000830186614b2e565b6159ee6020830185614b2e565b6159fb6040830184614b2e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a3d82614a82565b9150615a4883614a82565b925082615a5857615a57615a03565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615aa181614a56565b92915050565b600060208284031215615abd57615abc614a1f565b5b6000615acb84828501615a92565b91505092915050565b6000819050919050565b6000615af9615af4615aef84615ad4565b614b58565b614a82565b9050919050565b615b0981615ade565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4481614a44565b82525050565b6000615b568383615b3b565b60208301905092915050565b6000602082019050919050565b6000615b7a82615b0f565b615b848185615b1a565b9350615b8f83615b2b565b8060005b83811015615bc0578151615ba78882615b4a565b9750615bb283615b62565b925050600181019050615b93565b5085935050505092915050565b600060a082019050615be26000830188614b2e565b615bef6020830187615b00565b8181036040830152615c018186615b6f565b9050615c106060830185614da0565b615c1d6080830184614b2e565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c8360218361496f565b9150615c8e82615c27565b604082019050919050565b60006020820190508181036000830152615cb281615c76565b9050919050565b600060c082019050615cce6000830189614da0565b615cdb6020830188614b2e565b615ce86040830187615b00565b615cf56060830186615b00565b615d026080830185614da0565b615d0f60a0830184614b2e565b979650505050505050565b600080600060608486031215615d3357615d32614a1f565b5b6000615d4186828701615263565b9350506020615d5286828701615263565b9250506040615d6386828701615263565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204200aa9f0c223c271399a8163fbe4266f2e2090958b02b4baddde8a628f3577b64736f6c63430008090033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c80635d098b3811610144578063a6334231116100b6578063d12a76881161007a578063d12a76881461092b578063dd46706414610956578063dd62ed3e1461097f578063e8c4c43c146109bc578063ea2f0b37146109d3578063f2fde38b146109fc57610272565b8063a63342311461086c578063a69df4b514610883578063a9059cbb1461089a578063b6c52324146108d7578063c49b9a801461090257610272565b8063764d72bf11610108578063764d72bf146107485780637d1db4a51461077157806388f820201461079c5780638da5cb5b146107d957806395d89b4114610804578063a457c2d71461082f57610272565b80635d098b38146106755780636bc87c3a1461069e57806370a08231146106c9578063715018a61461070657806375f0a8741461071d57610272565b806339509351116101dd5780634549b039116101a15780634549b0391461056557806348c54b9d146105a257806349bd5a5e146105b95780634a74bb02146105e457806352390c021461060f5780635342acb41461063857610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e85780633bd5d17314610513578063437823ec1461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a25565b60405161029991906149fd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614ab8565b610ab7565b6040516102d69190614b13565b60405180910390f35b3480156102eb57600080fd5b506102f4610ad5565b6040516103019190614b3d565b60405180910390f35b34801561031657600080fd5b5061031f610adf565b60405161032c9190614bb7565b60405180910390f35b34801561034157600080fd5b5061034a610b03565b6040516103579190614b3d565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614bd2565b610b0d565b6040516103949190614b13565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614c25565b610be6565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614c25565b610cda565b6040516103fa9190614b3d565b60405180910390f35b34801561040f57600080fd5b50610418610d48565b6040516104259190614b13565b60405180910390f35b34801561043a57600080fd5b50610443610d5b565b6040516104509190614c6e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614c89565b610d72565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614ab8565b6110c1565b6040516104b69190614b13565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614cf4565b611174565b005b3480156104f457600080fd5b506104fd611323565b60405161050a9190614b3d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614c25565b611329565b005b34801561054857600080fd5b50610563600480360381019061055e9190614c89565b6114a4565b005b34801561057157600080fd5b5061058c60048036038101906105879190614d60565b611594565b6040516105999190614b3d565b60405180910390f35b3480156105ae57600080fd5b506105b7611618565b005b3480156105c557600080fd5b506105ce611718565b6040516105db9190614daf565b60405180910390f35b3480156105f057600080fd5b506105f961173c565b6040516106069190614b13565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190614c89565b61174f565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614c89565b611a03565b60405161066c9190614b13565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190614c89565b611a59565b005b3480156106aa57600080fd5b506106b3611b32565b6040516106c09190614b3d565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190614c89565b611b38565b6040516106fd9190614b3d565b60405180910390f35b34801561071257600080fd5b5061071b611c23565b005b34801561072957600080fd5b50610732611d76565b60405161073f9190614daf565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190614e08565b611d9c565b005b34801561077d57600080fd5b50610786611e7b565b6040516107939190614b3d565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190614c89565b611e81565b6040516107d09190614b13565b60405180910390f35b3480156107e557600080fd5b506107ee611ed7565b6040516107fb9190614daf565b60405180910390f35b34801561081057600080fd5b50610819611f00565b60405161082691906149fd565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614ab8565b611f92565b6040516108639190614b13565b60405180910390f35b34801561087857600080fd5b5061088161205f565b005b34801561088f57600080fd5b50610898612111565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190614ab8565b6122e5565b6040516108ce9190614b13565b60405180910390f35b3480156108e357600080fd5b506108ec612303565b6040516108f99190614b3d565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190614e35565b61230d565b005b34801561093757600080fd5b506109406123f6565b60405161094d9190614b3d565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190614c25565b6123fc565b005b34801561098b57600080fd5b506109a660048036038101906109a19190614e62565b6125c3565b6040516109b39190614b3d565b60405180910390f35b3480156109c857600080fd5b506109d161264a565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614c89565b6126ef565b005b348015610a0857600080fd5b50610a236004803603810190610a1e9190614c89565b6127df565b005b6060600e8054610a3490614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6090614ed1565b8015610aad5780601f10610a8257610100808354040283529160200191610aad565b820191906000526020600020905b815481529060010190602001808311610a9057829003601f168201915b5050505050905090565b6000610acb610ac46129a1565b84846129a9565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610b1a848484612b74565b610bdb84610b266129a1565b610bd685604051806060016040528060288152602001615d6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b600190509392505050565b610bee6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290614f4f565b60405180910390fd5b63042343e08111610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890614fe1565b60405180910390fd5b633b9aca0081610cd19190615030565b60178190555050565b6000600b54821115610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906150fc565b60405180910390fd5b6000610d2b612f45565b9050610d408184612f7090919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d7a6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90615168565b60405180910390fd5b60005b6008805490508110156110bd578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ece57610ecd615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110aa5760086001600880549050610f2991906151b7565b81548110610f3a57610f39615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f7957610f78615188565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806110705761106f6151eb565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110bd565b80806110b59061521a565b915050610e96565b5050565b600061116a6110ce6129a1565b8461116585600560006110df6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b6129a9565b6001905092915050565b61117c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614f4f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161125f9190614daf565b60206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190615278565b6040518363ffffffff1660e01b81526004016112cc9291906152a5565b602060405180830381600087803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e91906152e3565b505050565b60115481565b60006113336129a1565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990615382565b60405180910390fd5b60006113cd83613018565b5050505050905061142681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061147e81600b5461307490919063ffffffff16565b600b8190555061149983600c54612fba90919063ffffffff16565b600c81905550505050565b6114ac6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614f4f565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906153ee565b60405180910390fd5b816115fb5760006115eb84613018565b5050505050905080915050611612565b600061160684613018565b50505050915050809150505b92915050565b6116206129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f4f565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611715573d6000803e3d6000fd5b50565b7f0000000000000000000000004938c11bda652c5fb832b8bba41dfdd7f29af73c81565b601560019054906101000a900460ff1681565b6117576129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890615168565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561194557611901600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611a616129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590614f4f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bd357600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c1e565b611c1b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b90505b919050565b611c2b6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611da46129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2890614f4f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e77573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611f0f90614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3b90614ed1565b8015611f885780601f10611f5d57610100808354040283529160200191611f88565b820191906000526020600020905b815481529060010190602001808311611f6b57829003601f168201915b5050505050905090565b6000612055611f9f6129a1565b8461205085604051806060016040528060258152602001615d966025913960056000611fc96129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b6001905092915050565b6120676129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614f4f565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890615480565b60405180910390fd5b60025442116121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906154ec565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122f96122f26129a1565b8484612b74565b6001905092915050565b6000600254905090565b6123156129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614f4f565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123eb9190614b13565b60405180910390a150565b60175481565b6124046129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248890614f4f565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261253f919061550c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126526129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614f4f565b60405180910390fd5b66f6a11f484ec000601681905550565b6126f76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614f4f565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127e76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db906155d4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090615666565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a80906156f8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b679190614b3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061578a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b9061581c565b60405180910390fd5b60008111612c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8e906158ae565b60405180910390fd5b612c9f611ed7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d0d5750612cdd611ed7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d5857601654811115612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90615940565b60405180910390fd5b5b6000612d6330611b38565b90506016548110612d745760165490505b60006017548210159050808015612d985750601560009054906101000a900460ff16155b8015612df057507f0000000000000000000000004938c11bda652c5fb832b8bba41dfdd7f29af73c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e085750601560019054906101000a900460ff165b15612e1c576017549150612e1b826130be565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec35750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ecd57600090505b612ed986868684613237565b505050505050565b6000838311158290612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2091906149fd565b60405180910390fd5b5060008385612f3891906151b7565b9050809150509392505050565b6000806000612f5261359c565b91509150612f698183612f7090919063ffffffff16565b9250505090565b6000612fb283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061384f565b905092915050565b6000808284612fc9919061550c565b90508381101561300e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613005906159ac565b60405180910390fd5b8091505092915050565b600080600080600080600080600061302f8a6138b2565b925092509250600080600061304d8d8686613048612f45565b61390c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006130b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee1565b905092915050565b6001601560006101000a81548160ff02191690831515021790555060006130ef600283612f7090919063ffffffff16565b90506000613106828461307490919063ffffffff16565b9050600047905061311683613995565b600061312b824761307490919063ffffffff16565b905060006131566064613148604b85613be190919063ffffffff16565b612f7090919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131c0573d6000803e3d6000fd5b5080826131cd91906151b7565b91506131d98483613c5c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161320c939291906159cc565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1661328b57613253611ed7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461328a57600080fd5b5b8061329957613298613d4c565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515761334c848484613d8f565b613588565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133f45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561340957613404848484613fef565b613587565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ad5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c2576134bd84848461424f565b613586565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135645750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135795761357484848461441a565b613585565b61358484848461424f565b5b5b5b5b806135965761359561470f565b5b50505050565b6000806000600b5490506000600a54905060005b600880549050811015613812578260036000600884815481106135d6576135d5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806136c4575081600460006008848154811061365c5761365b615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136db57600b54600a549450945050505061384b565b61376b60036000600884815481106136f6576136f5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461307490919063ffffffff16565b92506137fd600460006008848154811061378857613787615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361307490919063ffffffff16565b9150808061380a9061521a565b9150506135b0565b5061382a600a54600b54612f7090919063ffffffff16565b82101561384257600b54600a5493509350505061384b565b81819350935050505b9091565b60008083118290613896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388d91906149fd565b60405180910390fd5b50600083856138a59190615a32565b9050809150509392505050565b6000806000806138c185614723565b905060006138ce86614754565b905060006138f7826138e9858a61307490919063ffffffff16565b61307490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139258589613be190919063ffffffff16565b9050600061393c8689613be190919063ffffffff16565b905060006139538789613be190919063ffffffff16565b9050600061397c8261396e858761307490919063ffffffff16565b61307490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156139b2576139b1615a63565b5b6040519080825280602002602001820160405280156139e05781602001602082028036833780820191505090505b50905030816000815181106139f8576139f7615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a9857600080fd5b505afa158015613aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad09190615aa7565b81600181518110613ae457613ae3615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b49307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bab959493929190615bcd565b600060405180830381600087803b158015613bc557600080fd5b505af1158015613bd9573d6000803e3d6000fd5b505050505050565b600080831415613bf45760009050613c56565b60008284613c029190615030565b9050828482613c119190615a32565b14613c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4890615c99565b60405180910390fd5b809150505b92915050565b613c87307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cd1611ed7565b426040518863ffffffff1660e01b8152600401613cf396959493929190615cb9565b6060604051808303818588803b158015613d0c57600080fd5b505af1158015613d20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d459190615d1a565b5050505050565b6000601154148015613d6057506000601354145b15613d6a57613d8d565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613da187613018565b955095509550955095509550613dff87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7581614785565b613f7f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fdc9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061400187613018565b95509550955095509550955061405f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140f483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d581614785565b6141df848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161423c9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061426187613018565b9550955095509550955095506142bf86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a081614785565b6143aa848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144079190614b3d565b60405180910390a3505050505050505050565b60008060008060008061442c87613018565b95509550955095509550955061448a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145b483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061469581614785565b61469f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146fc9190614b3d565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b600061474d606461473f60115485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061477e606461477060135485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061478f612f45565b905060006147a68284613be190919063ffffffff16565b90506147fa81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614925576148e183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61493f82600b5461307490919063ffffffff16565b600b8190555061495a81600c54612fba90919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499e578082015181840152602081019050614983565b838111156149ad576000848401525b50505050565b6000601f19601f8301169050919050565b60006149cf82614964565b6149d9818561496f565b93506149e9818560208601614980565b6149f2816149b3565b840191505092915050565b60006020820190508181036000830152614a1781846149c4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a4f82614a24565b9050919050565b614a5f81614a44565b8114614a6a57600080fd5b50565b600081359050614a7c81614a56565b92915050565b6000819050919050565b614a9581614a82565b8114614aa057600080fd5b50565b600081359050614ab281614a8c565b92915050565b60008060408385031215614acf57614ace614a1f565b5b6000614add85828601614a6d565b9250506020614aee85828601614aa3565b9150509250929050565b60008115159050919050565b614b0d81614af8565b82525050565b6000602082019050614b286000830184614b04565b92915050565b614b3781614a82565b82525050565b6000602082019050614b526000830184614b2e565b92915050565b6000819050919050565b6000614b7d614b78614b7384614a24565b614b58565b614a24565b9050919050565b6000614b8f82614b62565b9050919050565b6000614ba182614b84565b9050919050565b614bb181614b96565b82525050565b6000602082019050614bcc6000830184614ba8565b92915050565b600080600060608486031215614beb57614bea614a1f565b5b6000614bf986828701614a6d565b9350506020614c0a86828701614a6d565b9250506040614c1b86828701614aa3565b9150509250925092565b600060208284031215614c3b57614c3a614a1f565b5b6000614c4984828501614aa3565b91505092915050565b600060ff82169050919050565b614c6881614c52565b82525050565b6000602082019050614c836000830184614c5f565b92915050565b600060208284031215614c9f57614c9e614a1f565b5b6000614cad84828501614a6d565b91505092915050565b6000614cc182614a44565b9050919050565b614cd181614cb6565b8114614cdc57600080fd5b50565b600081359050614cee81614cc8565b92915050565b60008060408385031215614d0b57614d0a614a1f565b5b6000614d1985828601614cdf565b9250506020614d2a85828601614a6d565b9150509250929050565b614d3d81614af8565b8114614d4857600080fd5b50565b600081359050614d5a81614d34565b92915050565b60008060408385031215614d7757614d76614a1f565b5b6000614d8585828601614aa3565b9250506020614d9685828601614d4b565b9150509250929050565b614da981614a44565b82525050565b6000602082019050614dc46000830184614da0565b92915050565b6000614dd582614a24565b9050919050565b614de581614dca565b8114614df057600080fd5b50565b600081359050614e0281614ddc565b92915050565b600060208284031215614e1e57614e1d614a1f565b5b6000614e2c84828501614df3565b91505092915050565b600060208284031215614e4b57614e4a614a1f565b5b6000614e5984828501614d4b565b91505092915050565b60008060408385031215614e7957614e78614a1f565b5b6000614e8785828601614a6d565b9250506020614e9885828601614a6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ee957607f821691505b60208210811415614efd57614efc614ea2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f3960208361496f565b9150614f4482614f03565b602082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614fcb60348361496f565b9150614fd682614f6f565b604082019050919050565b60006020820190508181036000830152614ffa81614fbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061503b82614a82565b915061504683614a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561507f5761507e615001565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006150e6602a8361496f565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615152601b8361496f565b915061515d8261511c565b602082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151c282614a82565b91506151cd83614a82565b9250828210156151e0576151df615001565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061522582614a82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561525857615257615001565b5b600182019050919050565b60008151905061527281614a8c565b92915050565b60006020828403121561528e5761528d614a1f565b5b600061529c84828501615263565b91505092915050565b60006040820190506152ba6000830185614da0565b6152c76020830184614b2e565b9392505050565b6000815190506152dd81614d34565b92915050565b6000602082840312156152f9576152f8614a1f565b5b6000615307848285016152ce565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061536c602c8361496f565b915061537782615310565b604082019050919050565b6000602082019050818103600083015261539b8161535f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006153d8601f8361496f565b91506153e3826153a2565b602082019050919050565b60006020820190508181036000830152615407816153cb565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061546a60238361496f565b91506154758261540e565b604082019050919050565b600060208201905081810360008301526154998161545d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006154d6601f8361496f565b91506154e1826154a0565b602082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b600061551782614a82565b915061552283614a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561555757615556615001565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155be60268361496f565b91506155c982615562565b604082019050919050565b600060208201905081810360008301526155ed816155b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565060248361496f565b915061565b826155f4565b604082019050919050565b6000602082019050818103600083015261567f81615643565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e260228361496f565b91506156ed82615686565b604082019050919050565b60006020820190508181036000830152615711816156d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061577460258361496f565b915061577f82615718565b604082019050919050565b600060208201905081810360008301526157a381615767565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061580660238361496f565b9150615811826157aa565b604082019050919050565b60006020820190508181036000830152615835816157f9565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061589860298361496f565b91506158a38261583c565b604082019050919050565b600060208201905081810360008301526158c78161588b565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061592a60288361496f565b9150615935826158ce565b604082019050919050565b600060208201905081810360008301526159598161591d565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615996601b8361496f565b91506159a182615960565b602082019050919050565b600060208201905081810360008301526159c581615989565b9050919050565b60006060820190506159e16000830186614b2e565b6159ee6020830185614b2e565b6159fb6040830184614b2e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a3d82614a82565b9150615a4883614a82565b925082615a5857615a57615a03565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615aa181614a56565b92915050565b600060208284031215615abd57615abc614a1f565b5b6000615acb84828501615a92565b91505092915050565b6000819050919050565b6000615af9615af4615aef84615ad4565b614b58565b614a82565b9050919050565b615b0981615ade565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4481614a44565b82525050565b6000615b568383615b3b565b60208301905092915050565b6000602082019050919050565b6000615b7a82615b0f565b615b848185615b1a565b9350615b8f83615b2b565b8060005b83811015615bc0578151615ba78882615b4a565b9750615bb283615b62565b925050600181019050615b93565b5085935050505092915050565b600060a082019050615be26000830188614b2e565b615bef6020830187615b00565b8181036040830152615c018186615b6f565b9050615c106060830185614da0565b615c1d6080830184614b2e565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c8360218361496f565b9150615c8e82615c27565b604082019050919050565b60006020820190508181036000830152615cb281615c76565b9050919050565b600060c082019050615cce6000830189614da0565b615cdb6020830188614b2e565b615ce86040830187615b00565b615cf56060830186615b00565b615d026080830185614da0565b615d0f60a0830184614b2e565b979650505050505050565b600080600060608486031215615d3357615d32614a1f565b5b6000615d4186828701615263565b9350506020615d5286828701615263565b9250506040615d6386828701615263565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204200aa9f0c223c271399a8163fbe4266f2e2090958b02b4baddde8a628f3577b64736f6c63430008090033
Deployed Bytecode Sourcemap
27814:21128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30254:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31239:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32738:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30531:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31440:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36247:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33747:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28261:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30440:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34531:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31894:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36702:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28643:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32833:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35781:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33260:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36579:115;;;;;;;;;;;;;:::i;:::-;;28886:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28961:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34077:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41213:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36018:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28726:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30634:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17068:148;;;;;;;;;;;;;:::i;:::-;;28487:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36953:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29010:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32610:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16426:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30345:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32202:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37125:77;;;;;;;;;;;;;:::i;:::-;;18123:341;;;;;;;;;;;;;:::i;:::-;;30840:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17660:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37210:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29063:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17825:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31047:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36144:95;;;;;;;;;;;;;:::i;:::-;;35900:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17371:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30254:83;30291:13;30324:5;30317:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30254:83;:::o;31239:193::-;31341:4;31363:39;31372:12;:10;:12::i;:::-;31386:7;31395:6;31363:8;:39::i;:::-;31420:4;31413:11;;31239:193;;;;:::o;32738:87::-;32780:7;32807:10;;32800:17;;32738:87;:::o;28828:51::-;;;:::o;30531:95::-;30584:7;30611;;30604:14;;30531:95;:::o;31440:446::-;31572:4;31589:36;31599:6;31607:9;31618:6;31589:9;:36::i;:::-;31636:220;31659:6;31680:12;:10;:12::i;:::-;31707:138;31763:6;31707:138;;;;;;;;;;;;;;;;;:11;:19;31719:6;31707:19;;;;;;;;;;;;;;;:33;31727:12;:10;:12::i;:::-;31707:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;31636:8;:220::i;:::-;31874:4;31867:11;;31440:446;;;;;:::o;36247:324::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36405:8:::1;36383:19;:30;36361:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;36558:5;36536:19;:27;;;;:::i;:::-;36504:29;:59;;;;36247:324:::0;:::o;33747:322::-;33841:7;33899;;33888;:18;;33866:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33987:19;34009:10;:8;:10::i;:::-;33987:32;;34037:24;34049:11;34037:7;:11;;:24;;;;:::i;:::-;34030:31;;;33747:322;;;:::o;28261:28::-;;;;;;;;;;;;;:::o;30440:83::-;30481:5;30506:9;;;;;;;;;;;30499:16;;30440:83;:::o;34531:477::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34611:11:::1;:20;34623:7;34611:20;;;;;;;;;;;;;;;;;;;;;;;;;34603:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34679:9;34674:327;34698:9;:16;;;;34694:1;:20;34674:327;;;34756:7;34740:23;;:9;34750:1;34740:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;34736:254;;;34799:9;34828:1;34809:9;:16;;;;:20;;;;:::i;:::-;34799:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34784:9;34794:1;34784:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34868:1;34849:7;:16;34857:7;34849:16;;;;;;;;;;;;;;;:20;;;;34911:5;34888:11;:20;34900:7;34888:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34935:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34969:5;;34736:254;34716:3;;;;;:::i;:::-;;;;34674:327;;;;34531:477:::0;:::o;31894:300::-;32009:4;32031:133;32054:12;:10;:12::i;:::-;32081:7;32103:50;32142:10;32103:11;:25;32115:12;:10;:12::i;:::-;32103:25;;;;;;;;;;;;;;;:34;32129:7;32103:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32031:8;:133::i;:::-;32182:4;32175:11;;31894:300;;;;:::o;36702:243::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36825:12:::1;:21;;;36861:13;36889:12;:22;;;36920:4;36889:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36825:112;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36702:243:::0;;:::o;28643:26::-;;;;:::o;32833:419::-;32885:14;32902:12;:10;:12::i;:::-;32885:29;;32948:11;:19;32960:6;32948:19;;;;;;;;;;;;;;;;;;;;;;;;;32947:20;32925:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33051:15;33080:19;33091:7;33080:10;:19::i;:::-;33050:49;;;;;;;33128:28;33148:7;33128;:15;33136:6;33128:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33110:7;:15;33118:6;33110:15;;;;;;;;;;;;;;;:46;;;;33177:20;33189:7;33177;;:11;;:20;;;;:::i;:::-;33167:7;:30;;;;33221:23;33236:7;33221:10;;:14;;:23;;;;:::i;:::-;33208:10;:36;;;;32874:378;;32833:419;:::o;35781:111::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35880:4:::1;35850:18;:27;35869:7;35850:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35781:111:::0;:::o;33260:479::-;33378:7;33422;;33411;:18;;33403:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33481:17;33476:256;;33516:15;33545:19;33556:7;33545:10;:19::i;:::-;33515:49;;;;;;;33586:7;33579:14;;;;;33476:256;33629:23;33664:19;33675:7;33664:10;:19::i;:::-;33626:57;;;;;;;33705:15;33698:22;;;33260:479;;;;;:::o;36579:115::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36638:15:::1;;;;;;;;;;;36630:33;;:56;36664:21;36630:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36579:115::o:0;28886:38::-;;;:::o;28961:40::-;;;;;;;;;;;;;:::o;34077:446::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34272:11:::1;:20;34284:7;34272:20;;;;;;;;;;;;;;;;;;;;;;;;;34271:21;34263:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34358:1;34339:7;:16;34347:7;34339:16;;;;;;;;;;;;;;;;:20;34335:109;;;34395:37;34415:7;:16;34423:7;34415:16;;;;;;;;;;;;;;;;34395:19;:37::i;:::-;34376:7;:16;34384:7;34376:16;;;;;;;;;;;;;;;:56;;;;34335:109;34477:4;34454:11;:20;34466:7;34454:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34492:9;34507:7;34492:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34077:446:::0;:::o;41213:124::-;41278:4;41302:18;:27;41321:7;41302:27;;;;;;;;;;;;;;;;;;;;;;;;;41295:34;;41213:124;;;:::o;36018:118::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36115:13:::1;36097:15;;:31;;;;;;;;;;;;;;;;;;36018:118:::0;:::o;28726:33::-;;;;:::o;30634:198::-;30700:7;30724:11;:20;30736:7;30724:20;;;;;;;;;;;;;;;;;;;;;;;;;30720:49;;;30753:7;:16;30761:7;30753:16;;;;;;;;;;;;;;;;30746:23;;;;30720:49;30787:37;30807:7;:16;30815:7;30807:16;;;;;;;;;;;;;;;;30787:19;:37::i;:::-;30780:44;;30634:198;;;;:::o;17068:148::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17175:1:::1;17138:40;;17159:6;::::0;::::1;;;;;;;;17138:40;;;;;;;;;;;;17206:1;17189:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17068:148::o:0;28487:30::-;;;;;;;;;;;;;:::o;36953:164::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37064:13:::1;:22;;:45;37087:21;37064:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36953:164:::0;:::o;29010:46::-;;;;:::o;32610:120::-;32678:4;32702:11;:20;32714:7;32702:20;;;;;;;;;;;;;;;;;;;;;;;;;32695:27;;32610:120;;;:::o;16426:79::-;16464:7;16491:6;;;;;;;;;;;16484:13;;16426:79;:::o;30345:87::-;30384:13;30417:7;30410:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30345:87;:::o;32202:400::-;32322:4;32344:228;32367:12;:10;:12::i;:::-;32394:7;32416:145;32473:15;32416:145;;;;;;;;;;;;;;;;;:11;:25;32428:12;:10;:12::i;:::-;32416:25;;;;;;;;;;;;;;;:34;32442:7;32416:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;32344:8;:228::i;:::-;32590:4;32583:11;;32202:400;;;;:::o;37125:77::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37190:4:::1;37179:8;;:15;;;;;;;;;;;;;;;;;;37125:77::o:0;18123:341::-;18207:10;18189:28;;:14;;;;;;;;;;;:28;;;18167:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;18317:9;;18299:15;:27;18291:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18407:14;;;;;;;;;;;18378:44;;18399:6;;;;;;;;;;18378:44;;;;;;;;;;;;18442:14;;;;;;;;;;;18433:6;;:23;;;;;;;;;;;;;;;;;;18123:341::o;30840:199::-;30945:4;30967:42;30977:12;:10;:12::i;:::-;30991:9;31002:6;30967:9;:42::i;:::-;31027:4;31020:11;;30840:199;;;;:::o;17660:89::-;17705:7;17732:9;;17725:16;;17660:89;:::o;37210:171::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37311:8:::1;37287:21;;:32;;;;;;;;;;;;;;;;;;37335:38;37364:8;37335:38;;;;;;:::i;:::-;;;;;;;;37210:171:::0;:::o;29063:72::-;;;;:::o;17825:226::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17906:6:::1;::::0;::::1;;;;;;;;17889:14;;:23;;;;;;;;;;;;;;;;;;17940:1;17923:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17983:4;17965:15;:22;;;;:::i;:::-;17953:9;:34;;;;18040:1;18003:40;;18024:6;::::0;::::1;;;;;;;;18003:40;;;;;;;;;;;;17825:226:::0;:::o;31047:184::-;31164:7;31196:11;:18;31208:5;31196:18;;;;;;;;;;;;;;;:27;31215:7;31196:27;;;;;;;;;;;;;;;;31189:34;;31047:184;;;;:::o;36144:95::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36215:16:::1;36200:12;:31;;;;36144:95::o:0;35900:110::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35997:5:::1;35967:18;:27;35986:7;35967:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35900:110:::0;:::o;17371:281::-;16648:12;:10;:12::i;:::-;16638:22;;:6;;;;;;;;;;:22;;;16630:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17494:1:::1;17474:22;;:8;:22;;;;17452:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;17607:8;17578:38;;17599:6;::::0;::::1;;;;;;;;17578:38;;;;;;;;;;;;17636:8;17627:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17371:281:::0;:::o;8401:98::-;8454:7;8481:10;8474:17;;8401:98;:::o;41345:371::-;41489:1;41472:19;;:5;:19;;;;41464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41570:1;41551:21;;:7;:21;;;;41543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41654:6;41624:11;:18;41636:5;41624:18;;;;;;;;;;;;;;;:27;41643:7;41624:27;;;;;;;;;;;;;;;:36;;;;41692:7;41676:32;;41685:5;41676:32;;;41701:6;41676:32;;;;;;:::i;:::-;;;;;;;;41345:371;;;:::o;41724:1833::-;41862:1;41846:18;;:4;:18;;;;41838:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41939:1;41925:16;;:2;:16;;;;41917:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42009:1;42000:6;:10;41992:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42079:7;:5;:7::i;:::-;42071:15;;:4;:15;;;;:32;;;;;42096:7;:5;:7::i;:::-;42090:13;;:2;:13;;;;42071:32;42067:175;;;42154:12;;42144:6;:22;;42118:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;42067:175;42537:28;42568:24;42586:4;42568:9;:24::i;:::-;42537:55;;42633:12;;42609:20;:36;42605:104;;42685:12;;42662:35;;42605:104;42721:24;42785:29;;42748:20;:66;;42721:93;;42843:19;:53;;;;;42880:16;;;;;;;;;;;42879:17;42843:53;:91;;;;;42921:13;42913:21;;:4;:21;;;;42843:91;:129;;;;;42951:21;;;;;;;;;;;42843:129;42825:318;;;43022:29;;42999:52;;43095:36;43110:20;43095:14;:36::i;:::-;42825:318;43216:12;43231:4;43216:19;;43336:18;:24;43355:4;43336:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;43364:18;:22;43383:2;43364:22;;;;;;;;;;;;;;;;;;;;;;;;;43336:50;43332:98;;;43413:5;43403:15;;43332:98;43508:41;43523:4;43529:2;43533:6;43541:7;43508:14;:41::i;:::-;41827:1730;;;41724:1833;;;:::o;4630:226::-;4750:7;4783:1;4778;:6;;4786:12;4770:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4810:9;4826:1;4822;:5;;;;:::i;:::-;4810:17;;4847:1;4840:8;;;4630:226;;;;;:::o;39369:164::-;39411:7;39432:15;39449;39468:19;:17;:19::i;:::-;39431:56;;;;39505:20;39517:7;39505;:11;;:20;;;;:::i;:::-;39498:27;;;;39369:164;:::o;6062:132::-;6120:7;6147:39;6151:1;6154;6147:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6140:46;;6062:132;;;;:::o;3727:181::-;3785:7;3805:9;3821:1;3817;:5;;;;:::i;:::-;3805:17;;3846:1;3841;:6;;3833:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3899:1;3892:8;;;3727:181;;;;:::o;37637:742::-;37737:7;37759;37781;37803;37825;37847;37897:23;37935:12;37962:18;37994:20;38006:7;37994:11;:20::i;:::-;37882:132;;;;;;38026:15;38043:23;38068:12;38084:113;38110:7;38132:4;38151:10;38176;:8;:10::i;:::-;38084:11;:113::i;:::-;38025:172;;;;;;38230:7;38252:15;38282:4;38301:15;38331:4;38350:10;38208:163;;;;;;;;;;;;;;;;;;37637:742;;;;;;;:::o;4191:136::-;4249:7;4276:43;4280:1;4283;4276:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4269:50;;4191:136;;;;:::o;43565:1174::-;29455:4;29436:16;;:23;;;;;;;;;;;;;;;;;;43738:12:::1;43753:27;43778:1;43753:20;:24;;:27;;;;:::i;:::-;43738:42;;43791:17;43811:30;43836:4;43811:20;:24;;:30;;;;:::i;:::-;43791:50;;44119:22;44144:21;44119:46;;44210:22;44227:4;44210:16;:22::i;:::-;44363:18;44384:41;44410:14;44384:21;:25;;:41;;;;:::i;:::-;44363:62;;44436:22;44461:27;44484:3;44461:18;44476:2;44461:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;44436:52;;44507:15;;;;;;;;;;;44499:33;;:49;44533:14;44499:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44573:14;44559:28;;;;;:::i;:::-;;;44635:35;44648:9;44659:10;44635:12;:35::i;:::-;44688:43;44703:4;44709:10;44721:9;44688:43;;;;;;;;:::i;:::-;;;;;;;;43639:1100;;;;;29501:5:::0;29482:16;;:24;;;;;;;;;;;;;;;;;;43565:1174;:::o;45938:968::-;46094:8;;;;;;;;;;;46089:116;;46137:7;:5;:7::i;:::-;46127:17;;:6;:17;;;46119:26;;;;;;46089:116;46224:7;46219:28;;46233:14;:12;:14::i;:::-;46219:28;46264:11;:19;46276:6;46264:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;46288:11;:22;46300:9;46288:22;;;;;;;;;;;;;;;;;;;;;;;;;46287:23;46264:46;46260:597;;;46327:48;46349:6;46357:9;46368:6;46327:21;:48::i;:::-;46260:597;;;46398:11;:19;46410:6;46398:19;;;;;;;;;;;;;;;;;;;;;;;;;46397:20;:46;;;;;46421:11;:22;46433:9;46421:22;;;;;;;;;;;;;;;;;;;;;;;;;46397:46;46393:464;;;46460:46;46480:6;46488:9;46499:6;46460:19;:46::i;:::-;46393:464;;;46529:11;:19;46541:6;46529:19;;;;;;;;;;;;;;;;;;;;;;;;;46528:20;:47;;;;;46553:11;:22;46565:9;46553:22;;;;;;;;;;;;;;;;;;;;;;;;;46552:23;46528:47;46524:333;;;46592:44;46610:6;46618:9;46629:6;46592:17;:44::i;:::-;46524:333;;;46658:11;:19;46670:6;46658:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;46681:11;:22;46693:9;46681:22;;;;;;;;;;;;;;;;;;;;;;;;;46658:45;46654:203;;;46720:48;46742:6;46750:9;46761:6;46720:21;:48::i;:::-;46654:203;;;46801:44;46819:6;46827:9;46838:6;46801:17;:44::i;:::-;46654:203;46524:333;46393:464;46260:597;46874:7;46869:29;;46883:15;:13;:15::i;:::-;46869:29;45938:968;;;;:::o;39541:605::-;39592:7;39601;39621:15;39639:7;;39621:25;;39657:15;39675:7;;39657:25;;39698:9;39693:338;39717:9;:16;;;;39713:1;:20;39693:338;;;39801:7;39777;:21;39785:9;39795:1;39785:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39777:21;;;;;;;;;;;;;;;;:31;:83;;;;39853:7;39829;:21;39837:9;39847:1;39837:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39829:21;;;;;;;;;;;;;;;;:31;39777:83;39755:146;;;39884:7;;39893;;39876:25;;;;;;;;;39755:146;39926:34;39938:7;:21;39946:9;39956:1;39946:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39938:21;;;;;;;;;;;;;;;;39926:7;:11;;:34;;;;:::i;:::-;39916:44;;39985:34;39997:7;:21;40005:9;40015:1;40005:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39997:21;;;;;;;;;;;;;;;;39985:7;:11;;:34;;;;:::i;:::-;39975:44;;39735:3;;;;;:::i;:::-;;;;39693:338;;;;40055:20;40067:7;;40055;;:11;;:20;;;;:::i;:::-;40045:7;:30;40041:61;;;40085:7;;40094;;40077:25;;;;;;;;40041:61;40121:7;40130;40113:25;;;;;;39541:605;;;:::o;6690:312::-;6810:7;6842:1;6838;:5;6845:12;6830:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6869:9;6885:1;6881;:5;;;;:::i;:::-;6869:17;;6993:1;6986:8;;;6690:312;;;;;:::o;38387:412::-;38488:7;38510;38532;38567:12;38582:24;38598:7;38582:15;:24::i;:::-;38567:39;;38617:18;38638:30;38660:7;38638:21;:30::i;:::-;38617:51;;38679:23;38705:33;38727:10;38705:17;38717:4;38705:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;38679:59;;38757:15;38774:4;38780:10;38749:42;;;;;;;;;38387:412;;;;;:::o;38807:554::-;39006:7;39028;39050;39085:15;39103:24;39115:11;39103:7;:11;;:24;;;;:::i;:::-;39085:42;;39138:12;39153:21;39162:11;39153:4;:8;;:21;;;;:::i;:::-;39138:36;;39185:18;39206:27;39221:11;39206:10;:14;;:27;;;;:::i;:::-;39185:48;;39244:23;39270:33;39292:10;39270:17;39282:4;39270:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;39244:59;;39322:7;39331:15;39348:4;39314:39;;;;;;;;;;38807:554;;;;;;;;:::o;44747:589::-;44873:21;44911:1;44897:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44873:40;;44942:4;44924;44929:1;44924:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44968:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44958:4;44963:1;44958:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45003:62;45020:4;45035:15;45053:11;45003:8;:62::i;:::-;45104:15;:66;;;45185:11;45211:1;45255:4;45282;45302:15;45104:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44802:534;44747:589;:::o;5115:471::-;5173:7;5423:1;5418;:6;5414:47;;;5448:1;5441:8;;;;5414:47;5473:9;5489:1;5485;:5;;;;:::i;:::-;5473:17;;5518:1;5513;5509;:5;;;;:::i;:::-;:10;5501:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5577:1;5570:8;;;5115:471;;;;;:::o;45344:513::-;45492:62;45509:4;45524:15;45542:11;45492:8;:62::i;:::-;45597:15;:31;;;45636:9;45669:4;45689:11;45715:1;45758;45801:7;:5;:7::i;:::-;45823:15;45597:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45344:513;;:::o;40837:235::-;40895:1;40884:7;;:12;:34;;;;;40917:1;40900:13;;:18;40884:34;40880:47;;;40920:7;;40880:47;40957:7;;40939:15;:25;;;;40999:13;;40975:21;:37;;;;41035:1;41025:7;:11;;;;41063:1;41047:13;:17;;;;40837:235;:::o;48253:686::-;48404:15;48434:23;48472:12;48499:23;48537:12;48564:18;48596:19;48607:7;48596:10;:19::i;:::-;48389:226;;;;;;;;;;;;48644:28;48664:7;48644;:15;48652:6;48644:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48626:7;:15;48634:6;48626:15;;;;;;;;;;;;;;;:46;;;;48701:28;48721:7;48701;:15;48709:6;48701:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48683:7;:15;48691:6;48683:15;;;;;;;;;;;;;;;:46;;;;48761:39;48784:15;48761:7;:18;48769:9;48761:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48740:7;:18;48748:9;48740:18;;;;;;;;;;;;;;;:60;;;;48811:26;48826:10;48811:14;:26::i;:::-;48848:23;48860:4;48866;48848:11;:23::i;:::-;48904:9;48887:44;;48896:6;48887:44;;;48915:15;48887:44;;;;;;:::i;:::-;;;;;;;;48378:561;;;;;;48253:686;;;:::o;47547:698::-;47696:15;47726:23;47764:12;47791:23;47829:12;47856:18;47888:19;47899:7;47888:10;:19::i;:::-;47681:226;;;;;;;;;;;;47936:28;47956:7;47936;:15;47944:6;47936:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47918:7;:15;47926:6;47918:15;;;;;;;;;;;;;;;:46;;;;47996:39;48019:15;47996:7;:18;48004:9;47996:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47975:7;:18;47983:9;47975:18;;;;;;;;;;;;;;;:60;;;;48067:39;48090:15;48067:7;:18;48075:9;48067:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48046:7;:18;48054:9;48046:18;;;;;;;;;;;;;;;:60;;;;48117:26;48132:10;48117:14;:26::i;:::-;48154:23;48166:4;48172;48154:11;:23::i;:::-;48210:9;48193:44;;48202:6;48193:44;;;48221:15;48193:44;;;;;;:::i;:::-;;;;;;;;47670:575;;;;;;47547:698;;;:::o;46914:625::-;47061:15;47091:23;47129:12;47156:23;47194:12;47221:18;47253:19;47264:7;47253:10;:19::i;:::-;47046:226;;;;;;;;;;;;47301:28;47321:7;47301;:15;47309:6;47301:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47283:7;:15;47291:6;47283:15;;;;;;;;;;;;;;;:46;;;;47361:39;47384:15;47361:7;:18;47369:9;47361:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47340:7;:18;47348:9;47340:18;;;;;;;;;;;;;;;:60;;;;47411:26;47426:10;47411:14;:26::i;:::-;47448:23;47460:4;47466;47448:11;:23::i;:::-;47504:9;47487:44;;47496:6;47487:44;;;47515:15;47487:44;;;;;;:::i;:::-;;;;;;;;47035:504;;;;;;46914:625;;;:::o;35016:757::-;35167:15;35197:23;35235:12;35262:23;35300:12;35327:18;35359:19;35370:7;35359:10;:19::i;:::-;35152:226;;;;;;;;;;;;35407:28;35427:7;35407;:15;35415:6;35407:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35389:7;:15;35397:6;35389:15;;;;;;;;;;;;;;;:46;;;;35464:28;35484:7;35464;:15;35472:6;35464:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35446:7;:15;35454:6;35446:15;;;;;;;;;;;;;;;:46;;;;35524:39;35547:15;35524:7;:18;35532:9;35524:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35503:7;:18;35511:9;35503:18;;;;;;;;;;;;;;;:60;;;;35595:39;35618:15;35595:7;:18;35603:9;35595:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35574:7;:18;35582:9;35574:18;;;;;;;;;;;;;;;:60;;;;35645:26;35660:10;35645:14;:26::i;:::-;35682:23;35694:4;35700;35682:11;:23::i;:::-;35738:9;35721:44;;35730:6;35721:44;;;35749:15;35721:44;;;;;;:::i;:::-;;;;;;;;35141:632;;;;;;35016:757;;;:::o;41080:125::-;41134:15;;41124:7;:25;;;;41176:21;;41160:13;:37;;;;41080:125::o;40517:130::-;40581:7;40608:31;40633:5;40608:20;40620:7;;40608;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;40601:38;;40517:130;;;:::o;40655:174::-;40752:7;40784:37;40815:5;40784:26;40796:13;;40784:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;40777:44;;40655:174;;;:::o;40154:355::-;40217:19;40239:10;:8;:10::i;:::-;40217:32;;40260:18;40281:27;40296:11;40281:10;:14;;:27;;;;:::i;:::-;40260:48;;40344:38;40371:10;40344:7;:22;40360:4;40344:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40319:7;:22;40335:4;40319:22;;;;;;;;;;;;;;;:63;;;;40397:11;:26;40417:4;40397:26;;;;;;;;;;;;;;;;;;;;;;;;;40393:108;;;40463:38;40490:10;40463:7;:22;40479:4;40463:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;40438:7;:22;40454:4;40438:22;;;;;;;;;;;;;;;:63;;;;40393:108;40206:303;;40154:355;:::o;37482:147::-;37560:17;37572:4;37560:7;;:11;;:17;;;;:::i;:::-;37550:7;:27;;;;37601:20;37616:4;37601:10;;:14;;:20;;;;:::i;:::-;37588:10;:33;;;;37482:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:329::-;5508:6;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5449:329;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:329::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:109::-;6599:7;6628:24;6646:5;6628:24;:::i;:::-;6617:35;;6549:109;;;:::o;6664:148::-;6750:37;6781:5;6750:37;:::i;:::-;6743:5;6740:48;6730:76;;6802:1;6799;6792:12;6730:76;6664:148;:::o;6818:165::-;6877:5;6915:6;6902:20;6893:29;;6931:46;6971:5;6931:46;:::i;:::-;6818:165;;;;:::o;6989:500::-;7070:6;7078;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:66;7336:7;7327:6;7316:9;7312:22;7278:66;:::i;:::-;7268:76;;7224:130;7393:2;7419:53;7464:7;7455:6;7444:9;7440:22;7419:53;:::i;:::-;7409:63;;7364:118;6989:500;;;;;:::o;7495:116::-;7565:21;7580:5;7565:21;:::i;:::-;7558:5;7555:32;7545:60;;7601:1;7598;7591:12;7545:60;7495:116;:::o;7617:133::-;7660:5;7698:6;7685:20;7676:29;;7714:30;7738:5;7714:30;:::i;:::-;7617:133;;;;:::o;7756:468::-;7821:6;7829;7878:2;7866:9;7857:7;7853:23;7849:32;7846:119;;;7884:79;;:::i;:::-;7846:119;8004:1;8029:53;8074:7;8065:6;8054:9;8050:22;8029:53;:::i;:::-;8019:63;;7975:117;8131:2;8157:50;8199:7;8190:6;8179:9;8175:22;8157:50;:::i;:::-;8147:60;;8102:115;7756:468;;;;;:::o;8230:118::-;8317:24;8335:5;8317:24;:::i;:::-;8312:3;8305:37;8230:118;;:::o;8354:222::-;8447:4;8485:2;8474:9;8470:18;8462:26;;8498:71;8566:1;8555:9;8551:17;8542:6;8498:71;:::i;:::-;8354:222;;;;:::o;8582:104::-;8627:7;8656:24;8674:5;8656:24;:::i;:::-;8645:35;;8582:104;;;:::o;8692:138::-;8773:32;8799:5;8773:32;:::i;:::-;8766:5;8763:43;8753:71;;8820:1;8817;8810:12;8753:71;8692:138;:::o;8836:155::-;8890:5;8928:6;8915:20;8906:29;;8944:41;8979:5;8944:41;:::i;:::-;8836:155;;;;:::o;8997:345::-;9064:6;9113:2;9101:9;9092:7;9088:23;9084:32;9081:119;;;9119:79;;:::i;:::-;9081:119;9239:1;9264:61;9317:7;9308:6;9297:9;9293:22;9264:61;:::i;:::-;9254:71;;9210:125;8997:345;;;;:::o;9348:323::-;9404:6;9453:2;9441:9;9432:7;9428:23;9424:32;9421:119;;;9459:79;;:::i;:::-;9421:119;9579:1;9604:50;9646:7;9637:6;9626:9;9622:22;9604:50;:::i;:::-;9594:60;;9550:114;9348:323;;;;:::o;9677:474::-;9745:6;9753;9802:2;9790:9;9781:7;9777:23;9773:32;9770:119;;;9808:79;;:::i;:::-;9770:119;9928:1;9953:53;9998:7;9989:6;9978:9;9974:22;9953:53;:::i;:::-;9943:63;;9899:117;10055:2;10081:53;10126:7;10117:6;10106:9;10102:22;10081:53;:::i;:::-;10071:63;;10026:118;9677:474;;;;;:::o;10157:180::-;10205:77;10202:1;10195:88;10302:4;10299:1;10292:15;10326:4;10323:1;10316:15;10343:320;10387:6;10424:1;10418:4;10414:12;10404:22;;10471:1;10465:4;10461:12;10492:18;10482:81;;10548:4;10540:6;10536:17;10526:27;;10482:81;10610:2;10602:6;10599:14;10579:18;10576:38;10573:84;;;10629:18;;:::i;:::-;10573:84;10394:269;10343:320;;;:::o;10669:182::-;10809:34;10805:1;10797:6;10793:14;10786:58;10669:182;:::o;10857:366::-;10999:3;11020:67;11084:2;11079:3;11020:67;:::i;:::-;11013:74;;11096:93;11185:3;11096:93;:::i;:::-;11214:2;11209:3;11205:12;11198:19;;10857:366;;;:::o;11229:419::-;11395:4;11433:2;11422:9;11418:18;11410:26;;11482:9;11476:4;11472:20;11468:1;11457:9;11453:17;11446:47;11510:131;11636:4;11510:131;:::i;:::-;11502:139;;11229:419;;;:::o;11654:239::-;11794:34;11790:1;11782:6;11778:14;11771:58;11863:22;11858:2;11850:6;11846:15;11839:47;11654:239;:::o;11899:366::-;12041:3;12062:67;12126:2;12121:3;12062:67;:::i;:::-;12055:74;;12138:93;12227:3;12138:93;:::i;:::-;12256:2;12251:3;12247:12;12240:19;;11899:366;;;:::o;12271:419::-;12437:4;12475:2;12464:9;12460:18;12452:26;;12524:9;12518:4;12514:20;12510:1;12499:9;12495:17;12488:47;12552:131;12678:4;12552:131;:::i;:::-;12544:139;;12271:419;;;:::o;12696:180::-;12744:77;12741:1;12734:88;12841:4;12838:1;12831:15;12865:4;12862:1;12855:15;12882:348;12922:7;12945:20;12963:1;12945:20;:::i;:::-;12940:25;;12979:20;12997:1;12979:20;:::i;:::-;12974:25;;13167:1;13099:66;13095:74;13092:1;13089:81;13084:1;13077:9;13070:17;13066:105;13063:131;;;13174:18;;:::i;:::-;13063:131;13222:1;13219;13215:9;13204:20;;12882:348;;;;:::o;13236:229::-;13376:34;13372:1;13364:6;13360:14;13353:58;13445:12;13440:2;13432:6;13428:15;13421:37;13236:229;:::o;13471:366::-;13613:3;13634:67;13698:2;13693:3;13634:67;:::i;:::-;13627:74;;13710:93;13799:3;13710:93;:::i;:::-;13828:2;13823:3;13819:12;13812:19;;13471:366;;;:::o;13843:419::-;14009:4;14047:2;14036:9;14032:18;14024:26;;14096:9;14090:4;14086:20;14082:1;14071:9;14067:17;14060:47;14124:131;14250:4;14124:131;:::i;:::-;14116:139;;13843:419;;;:::o;14268:177::-;14408:29;14404:1;14396:6;14392:14;14385:53;14268:177;:::o;14451:366::-;14593:3;14614:67;14678:2;14673:3;14614:67;:::i;:::-;14607:74;;14690:93;14779:3;14690:93;:::i;:::-;14808:2;14803:3;14799:12;14792:19;;14451:366;;;:::o;14823:419::-;14989:4;15027:2;15016:9;15012:18;15004:26;;15076:9;15070:4;15066:20;15062:1;15051:9;15047:17;15040:47;15104:131;15230:4;15104:131;:::i;:::-;15096:139;;14823:419;;;:::o;15248:180::-;15296:77;15293:1;15286:88;15393:4;15390:1;15383:15;15417:4;15414:1;15407:15;15434:191;15474:4;15494:20;15512:1;15494:20;:::i;:::-;15489:25;;15528:20;15546:1;15528:20;:::i;:::-;15523:25;;15567:1;15564;15561:8;15558:34;;;15572:18;;:::i;:::-;15558:34;15617:1;15614;15610:9;15602:17;;15434:191;;;;:::o;15631:180::-;15679:77;15676:1;15669:88;15776:4;15773:1;15766:15;15800:4;15797:1;15790:15;15817:233;15856:3;15879:24;15897:5;15879:24;:::i;:::-;15870:33;;15925:66;15918:5;15915:77;15912:103;;;15995:18;;:::i;:::-;15912:103;16042:1;16035:5;16031:13;16024:20;;15817:233;;;:::o;16056:143::-;16113:5;16144:6;16138:13;16129:22;;16160:33;16187:5;16160:33;:::i;:::-;16056:143;;;;:::o;16205:351::-;16275:6;16324:2;16312:9;16303:7;16299:23;16295:32;16292:119;;;16330:79;;:::i;:::-;16292:119;16450:1;16475:64;16531:7;16522:6;16511:9;16507:22;16475:64;:::i;:::-;16465:74;;16421:128;16205:351;;;;:::o;16562:332::-;16683:4;16721:2;16710:9;16706:18;16698:26;;16734:71;16802:1;16791:9;16787:17;16778:6;16734:71;:::i;:::-;16815:72;16883:2;16872:9;16868:18;16859:6;16815:72;:::i;:::-;16562:332;;;;;:::o;16900:137::-;16954:5;16985:6;16979:13;16970:22;;17001:30;17025:5;17001:30;:::i;:::-;16900:137;;;;:::o;17043:345::-;17110:6;17159:2;17147:9;17138:7;17134:23;17130:32;17127:119;;;17165:79;;:::i;:::-;17127:119;17285:1;17310:61;17363:7;17354:6;17343:9;17339:22;17310:61;:::i;:::-;17300:71;;17256:125;17043:345;;;;:::o;17394:231::-;17534:34;17530:1;17522:6;17518:14;17511:58;17603:14;17598:2;17590:6;17586:15;17579:39;17394:231;:::o;17631:366::-;17773:3;17794:67;17858:2;17853:3;17794:67;:::i;:::-;17787:74;;17870:93;17959:3;17870:93;:::i;:::-;17988:2;17983:3;17979:12;17972:19;;17631:366;;;:::o;18003:419::-;18169:4;18207:2;18196:9;18192:18;18184:26;;18256:9;18250:4;18246:20;18242:1;18231:9;18227:17;18220:47;18284:131;18410:4;18284:131;:::i;:::-;18276:139;;18003:419;;;:::o;18428:181::-;18568:33;18564:1;18556:6;18552:14;18545:57;18428:181;:::o;18615:366::-;18757:3;18778:67;18842:2;18837:3;18778:67;:::i;:::-;18771:74;;18854:93;18943:3;18854:93;:::i;:::-;18972:2;18967:3;18963:12;18956:19;;18615:366;;;:::o;18987:419::-;19153:4;19191:2;19180:9;19176:18;19168:26;;19240:9;19234:4;19230:20;19226:1;19215:9;19211:17;19204:47;19268:131;19394:4;19268:131;:::i;:::-;19260:139;;18987:419;;;:::o;19412:222::-;19552:34;19548:1;19540:6;19536:14;19529:58;19621:5;19616:2;19608:6;19604:15;19597:30;19412:222;:::o;19640:366::-;19782:3;19803:67;19867:2;19862:3;19803:67;:::i;:::-;19796:74;;19879:93;19968:3;19879:93;:::i;:::-;19997:2;19992:3;19988:12;19981:19;;19640:366;;;:::o;20012:419::-;20178:4;20216:2;20205:9;20201:18;20193:26;;20265:9;20259:4;20255:20;20251:1;20240:9;20236:17;20229:47;20293:131;20419:4;20293:131;:::i;:::-;20285:139;;20012:419;;;:::o;20437:181::-;20577:33;20573:1;20565:6;20561:14;20554:57;20437:181;:::o;20624:366::-;20766:3;20787:67;20851:2;20846:3;20787:67;:::i;:::-;20780:74;;20863:93;20952:3;20863:93;:::i;:::-;20981:2;20976:3;20972:12;20965:19;;20624:366;;;:::o;20996:419::-;21162:4;21200:2;21189:9;21185:18;21177:26;;21249:9;21243:4;21239:20;21235:1;21224:9;21220:17;21213:47;21277:131;21403:4;21277:131;:::i;:::-;21269:139;;20996:419;;;:::o;21421:305::-;21461:3;21480:20;21498:1;21480:20;:::i;:::-;21475:25;;21514:20;21532:1;21514:20;:::i;:::-;21509:25;;21668:1;21600:66;21596:74;21593:1;21590:81;21587:107;;;21674:18;;:::i;:::-;21587:107;21718:1;21715;21711:9;21704:16;;21421:305;;;;:::o;21732:225::-;21872:34;21868:1;21860:6;21856:14;21849:58;21941:8;21936:2;21928:6;21924:15;21917:33;21732:225;:::o;21963:366::-;22105:3;22126:67;22190:2;22185:3;22126:67;:::i;:::-;22119:74;;22202:93;22291:3;22202:93;:::i;:::-;22320:2;22315:3;22311:12;22304:19;;21963:366;;;:::o;22335:419::-;22501:4;22539:2;22528:9;22524:18;22516:26;;22588:9;22582:4;22578:20;22574:1;22563:9;22559:17;22552:47;22616:131;22742:4;22616:131;:::i;:::-;22608:139;;22335:419;;;:::o;22760:223::-;22900:34;22896:1;22888:6;22884:14;22877:58;22969:6;22964:2;22956:6;22952:15;22945:31;22760:223;:::o;22989:366::-;23131:3;23152:67;23216:2;23211:3;23152:67;:::i;:::-;23145:74;;23228:93;23317:3;23228:93;:::i;:::-;23346:2;23341:3;23337:12;23330:19;;22989:366;;;:::o;23361:419::-;23527:4;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23361:419;;;:::o;23786:221::-;23926:34;23922:1;23914:6;23910:14;23903:58;23995:4;23990:2;23982:6;23978:15;23971:29;23786:221;:::o;24013:366::-;24155:3;24176:67;24240:2;24235:3;24176:67;:::i;:::-;24169:74;;24252:93;24341:3;24252:93;:::i;:::-;24370:2;24365:3;24361:12;24354:19;;24013:366;;;:::o;24385:419::-;24551:4;24589:2;24578:9;24574:18;24566:26;;24638:9;24632:4;24628:20;24624:1;24613:9;24609:17;24602:47;24666:131;24792:4;24666:131;:::i;:::-;24658:139;;24385:419;;;:::o;24810:224::-;24950:34;24946:1;24938:6;24934:14;24927:58;25019:7;25014:2;25006:6;25002:15;24995:32;24810:224;:::o;25040:366::-;25182:3;25203:67;25267:2;25262:3;25203:67;:::i;:::-;25196:74;;25279:93;25368:3;25279:93;:::i;:::-;25397:2;25392:3;25388:12;25381:19;;25040:366;;;:::o;25412:419::-;25578:4;25616:2;25605:9;25601:18;25593:26;;25665:9;25659:4;25655:20;25651:1;25640:9;25636:17;25629:47;25693:131;25819:4;25693:131;:::i;:::-;25685:139;;25412:419;;;:::o;25837:222::-;25977:34;25973:1;25965:6;25961:14;25954:58;26046:5;26041:2;26033:6;26029:15;26022:30;25837:222;:::o;26065:366::-;26207:3;26228:67;26292:2;26287:3;26228:67;:::i;:::-;26221:74;;26304:93;26393:3;26304:93;:::i;:::-;26422:2;26417:3;26413:12;26406:19;;26065:366;;;:::o;26437:419::-;26603:4;26641:2;26630:9;26626:18;26618:26;;26690:9;26684:4;26680:20;26676:1;26665:9;26661:17;26654:47;26718:131;26844:4;26718:131;:::i;:::-;26710:139;;26437:419;;;:::o;26862:228::-;27002:34;26998:1;26990:6;26986:14;26979:58;27071:11;27066:2;27058:6;27054:15;27047:36;26862:228;:::o;27096:366::-;27238:3;27259:67;27323:2;27318:3;27259:67;:::i;:::-;27252:74;;27335:93;27424:3;27335:93;:::i;:::-;27453:2;27448:3;27444:12;27437:19;;27096:366;;;:::o;27468:419::-;27634:4;27672:2;27661:9;27657:18;27649:26;;27721:9;27715:4;27711:20;27707:1;27696:9;27692:17;27685:47;27749:131;27875:4;27749:131;:::i;:::-;27741:139;;27468:419;;;:::o;27893:227::-;28033:34;28029:1;28021:6;28017:14;28010:58;28102:10;28097:2;28089:6;28085:15;28078:35;27893:227;:::o;28126:366::-;28268:3;28289:67;28353:2;28348:3;28289:67;:::i;:::-;28282:74;;28365:93;28454:3;28365:93;:::i;:::-;28483:2;28478:3;28474:12;28467:19;;28126:366;;;:::o;28498:419::-;28664:4;28702:2;28691:9;28687:18;28679:26;;28751:9;28745:4;28741:20;28737:1;28726:9;28722:17;28715:47;28779:131;28905:4;28779:131;:::i;:::-;28771:139;;28498:419;;;:::o;28923:177::-;29063:29;29059:1;29051:6;29047:14;29040:53;28923:177;:::o;29106:366::-;29248:3;29269:67;29333:2;29328:3;29269:67;:::i;:::-;29262:74;;29345:93;29434:3;29345:93;:::i;:::-;29463:2;29458:3;29454:12;29447:19;;29106:366;;;:::o;29478:419::-;29644:4;29682:2;29671:9;29667:18;29659:26;;29731:9;29725:4;29721:20;29717:1;29706:9;29702:17;29695:47;29759:131;29885:4;29759:131;:::i;:::-;29751:139;;29478:419;;;:::o;29903:442::-;30052:4;30090:2;30079:9;30075:18;30067:26;;30103:71;30171:1;30160:9;30156:17;30147:6;30103:71;:::i;:::-;30184:72;30252:2;30241:9;30237:18;30228:6;30184:72;:::i;:::-;30266;30334:2;30323:9;30319:18;30310:6;30266:72;:::i;:::-;29903:442;;;;;;:::o;30351:180::-;30399:77;30396:1;30389:88;30496:4;30493:1;30486:15;30520:4;30517:1;30510:15;30537:185;30577:1;30594:20;30612:1;30594:20;:::i;:::-;30589:25;;30628:20;30646:1;30628:20;:::i;:::-;30623:25;;30667:1;30657:35;;30672:18;;:::i;:::-;30657:35;30714:1;30711;30707:9;30702:14;;30537:185;;;;:::o;30728:180::-;30776:77;30773:1;30766:88;30873:4;30870:1;30863:15;30897:4;30894:1;30887:15;30914:143;30971:5;31002:6;30996:13;30987:22;;31018:33;31045:5;31018:33;:::i;:::-;30914:143;;;;:::o;31063:351::-;31133:6;31182:2;31170:9;31161:7;31157:23;31153:32;31150:119;;;31188:79;;:::i;:::-;31150:119;31308:1;31333:64;31389:7;31380:6;31369:9;31365:22;31333:64;:::i;:::-;31323:74;;31279:128;31063:351;;;;:::o;31420:85::-;31465:7;31494:5;31483:16;;31420:85;;;:::o;31511:158::-;31569:9;31602:61;31620:42;31629:32;31655:5;31629:32;:::i;:::-;31620:42;:::i;:::-;31602:61;:::i;:::-;31589:74;;31511:158;;;:::o;31675:147::-;31770:45;31809:5;31770:45;:::i;:::-;31765:3;31758:58;31675:147;;:::o;31828:114::-;31895:6;31929:5;31923:12;31913:22;;31828:114;;;:::o;31948:184::-;32047:11;32081:6;32076:3;32069:19;32121:4;32116:3;32112:14;32097:29;;31948:184;;;;:::o;32138:132::-;32205:4;32228:3;32220:11;;32258:4;32253:3;32249:14;32241:22;;32138:132;;;:::o;32276:108::-;32353:24;32371:5;32353:24;:::i;:::-;32348:3;32341:37;32276:108;;:::o;32390:179::-;32459:10;32480:46;32522:3;32514:6;32480:46;:::i;:::-;32558:4;32553:3;32549:14;32535:28;;32390:179;;;;:::o;32575:113::-;32645:4;32677;32672:3;32668:14;32660:22;;32575:113;;;:::o;32724:732::-;32843:3;32872:54;32920:5;32872:54;:::i;:::-;32942:86;33021:6;33016:3;32942:86;:::i;:::-;32935:93;;33052:56;33102:5;33052:56;:::i;:::-;33131:7;33162:1;33147:284;33172:6;33169:1;33166:13;33147:284;;;33248:6;33242:13;33275:63;33334:3;33319:13;33275:63;:::i;:::-;33268:70;;33361:60;33414:6;33361:60;:::i;:::-;33351:70;;33207:224;33194:1;33191;33187:9;33182:14;;33147:284;;;33151:14;33447:3;33440:10;;32848:608;;;32724:732;;;;:::o;33462:831::-;33725:4;33763:3;33752:9;33748:19;33740:27;;33777:71;33845:1;33834:9;33830:17;33821:6;33777:71;:::i;:::-;33858:80;33934:2;33923:9;33919:18;33910:6;33858:80;:::i;:::-;33985:9;33979:4;33975:20;33970:2;33959:9;33955:18;33948:48;34013:108;34116:4;34107:6;34013:108;:::i;:::-;34005:116;;34131:72;34199:2;34188:9;34184:18;34175:6;34131:72;:::i;:::-;34213:73;34281:3;34270:9;34266:19;34257:6;34213:73;:::i;:::-;33462:831;;;;;;;;:::o;34299:220::-;34439:34;34435:1;34427:6;34423:14;34416:58;34508:3;34503:2;34495:6;34491:15;34484:28;34299:220;:::o;34525:366::-;34667:3;34688:67;34752:2;34747:3;34688:67;:::i;:::-;34681:74;;34764:93;34853:3;34764:93;:::i;:::-;34882:2;34877:3;34873:12;34866:19;;34525:366;;;:::o;34897:419::-;35063:4;35101:2;35090:9;35086:18;35078:26;;35150:9;35144:4;35140:20;35136:1;35125:9;35121:17;35114:47;35178:131;35304:4;35178:131;:::i;:::-;35170:139;;34897:419;;;:::o;35322:807::-;35571:4;35609:3;35598:9;35594:19;35586:27;;35623:71;35691:1;35680:9;35676:17;35667:6;35623:71;:::i;:::-;35704:72;35772:2;35761:9;35757:18;35748:6;35704:72;:::i;:::-;35786:80;35862:2;35851:9;35847:18;35838:6;35786:80;:::i;:::-;35876;35952:2;35941:9;35937:18;35928:6;35876:80;:::i;:::-;35966:73;36034:3;36023:9;36019:19;36010:6;35966:73;:::i;:::-;36049;36117:3;36106:9;36102:19;36093:6;36049:73;:::i;:::-;35322:807;;;;;;;;;:::o;36135:663::-;36223:6;36231;36239;36288:2;36276:9;36267:7;36263:23;36259:32;36256:119;;;36294:79;;:::i;:::-;36256:119;36414:1;36439:64;36495:7;36486:6;36475:9;36471:22;36439:64;:::i;:::-;36429:74;;36385:128;36552:2;36578:64;36634:7;36625:6;36614:9;36610:22;36578:64;:::i;:::-;36568:74;;36523:129;36691:2;36717:64;36773:7;36764:6;36753:9;36749:22;36717:64;:::i;:::-;36707:74;;36662:129;36135:663;;;;;:::o
Swarm Source
ipfs://4200aa9f0c223c271399a8163fbe4266f2e2090958b02b4baddde8a628f3577b
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.